From cce6461137197a91af54a4c5513900376b935193 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 9 Oct 2024 19:34:58 +0000 Subject: [PATCH 1/6] chore: import translations for zh-tw --- .../zh-tw/04) Exploring/nft/index.md | 114 ++ .../zh-tw/05) Use Ethereum Pages/dao/index.md | 166 ++ .../zh-tw/06) Use Cases/defi/index.md | 357 ++++ .../06) Use Cases/smart-contracts/index.md | 82 + .../zh-tw/06) Use Cases/web3/index.md | 157 ++ .../07) Staking Pages/staking/dvt/index.md | 91 + .../07) Staking Pages/staking/pools/index.md | 86 + .../07) Staking Pages/staking/saas/index.md | 95 + .../07) Staking Pages/staking/solo/index.md | 206 ++ .../staking/withdrawals/index.md | 218 ++ .../decentralized-identity/index.md | 191 ++ .../zh-tw/08) Use cases 2/desci/index.md | 136 ++ .../zh-tw/08) Use cases 2/refi/index.md | 81 + .../08) Use cases 2/social-networks/index.md | 106 + .../zh-tw/09) Learn Pages/bridges/index.md | 128 ++ .../energy-consumption/index.md | 82 + .../zh-tw/09) Learn Pages/governance/index.md | 182 ++ .../zh-tw/09) Learn Pages/security/index.md | 293 +++ .../zero-knowledge-proofs/index.md | 214 ++ .../index.md | 73 + .../guides/how-to-id-scam-tokens/index.md | 97 + .../how-to-revoke-token-access/index.md | 73 + .../guides/how-to-swap-tokens/index.md | 67 + .../guides/how-to-use-a-bridge/index.md | 70 + .../guides/how-to-use-a-wallet/index.md | 88 + .../10) Guides and Quizzes/guides/index.md | 27 + .../zh-tw/11) Roadmap/eips/index.md | 79 + .../11) Roadmap/roadmap/beacon-chain/index.md | 75 + .../roadmap/future-proofing/index.md | 38 + .../zh-tw/11) Roadmap/roadmap/index.md | 119 ++ .../zh-tw/11) Roadmap/roadmap/merge/index.md | 229 +++ .../roadmap/merge/issuance/index.md | 134 ++ .../11) Roadmap/roadmap/scaling/index.md | 51 + .../11) Roadmap/roadmap/security/index.md | 48 + .../roadmap/user-experience/index.md | 36 + .../roadmap/account-abstraction/index.md | 126 ++ .../roadmap/danksharding/index.md | 95 + .../12) Roadmap 2/roadmap/dencun/index.md | 120 ++ .../zh-tw/12) Roadmap 2/roadmap/pbs/index.md | 51 + .../roadmap/secret-leader-election/index.md | 44 + .../roadmap/single-slot-finality/index.md | 66 + .../roadmap/statelessness/index.md | 103 + .../roadmap/verkle-trees/index.md | 66 + .../developers/docs/accounts/index.md | 136 ++ .../developers/docs/blocks/index.md | 152 ++ .../developers/docs/dapps/index.md | 96 + .../developers/docs/evm/index.md | 78 + .../developers/docs/evm/opcodes/index.md | 174 ++ .../developers/docs/gas/index.md | 139 ++ .../developers/docs/index.md | 25 + .../developers/docs/intro-to-ether/index.md | 78 + .../docs/intro-to-ethereum/index.md | 116 ++ .../developers/docs/networks/index.md | 149 ++ .../developers/docs/transactions/index.md | 221 ++ .../developers/docs/web2-vs-web3/index.md | 62 + .../developers/docs/wrapped-eth/index.md | 65 + .../community/code-of-conduct/index.md | 77 + .../community/events/index.md | 24 + .../community/get-involved/index.md | 135 ++ .../community/grants/index.md | 47 + .../community/language-resources/index.md | 153 ++ .../community/online/index.md | 50 + .../community/research/index.md | 399 ++++ .../community/support/index.md | 104 + .../nodes-and-clients/archive-nodes/index.md" | 80 + .../nodes-and-clients/bootnodes/index.md" | 31 + .../client-diversity/index.md" | 109 + .../docs/nodes-and-clients/index.md" | 307 +++ .../nodes-and-clients/light-clients/index.md" | 61 + .../node-architecture/index.md" | 57 + .../nodes-as-a-service/index.md" | 419 ++++ .../nodes-and-clients/run-a-node/index.md" | 480 +++++ .../docs/consensus-mechanisms/index.md" | 92 + .../pos/attack-and-defense/index.md" | 163 ++ .../pos/attestations/index.md" | 92 + .../pos/block-proposal/index.md" | 76 + .../consensus-mechanisms/pos/faqs/index.md" | 172 ++ .../consensus-mechanisms/pos/gasper/index.md" | 52 + .../docs/consensus-mechanisms/pos/index.md" | 99 + .../consensus-mechanisms/pos/keys/index.md" | 96 + .../pos/pos-vs-pow/index.md" | 69 + .../pos/rewards-and-penalties/index.md" | 90 + .../pos/weak-subjectivity/index.md" | 39 + .../docs/consensus-mechanisms/poa/index.md" | 79 + .../docs/consensus-mechanisms/pow/index.md" | 109 + .../consensus-mechanisms/pow/mining/index.md" | 81 + .../dagger-hashimoto/index.md" | 334 ++++ .../mining/mining-algorithms/ethash/index.md" | 1014 ++++++++++ .../pow/mining/mining-algorithms/index.md" | 37 + .../developers/docs/apis/backend/index.md" | 207 ++ .../developers/docs/apis/javascript/index.md" | 295 +++ .../developers/docs/apis/json-rpc/index.md" | 1771 +++++++++++++++++ .../block-explorers/index.md" | 257 +++ .../docs/data-and-analytics/index.md" | 55 + .../docs/development-networks/index.md" | 83 + .../developers/docs/ethereum-stack/index.md" | 61 + .../developers/docs/frameworks/index.md" | 147 ++ .../developers/docs/ides/index.md" | 71 + .../docs/programming-languages/dart/index.md" | 30 + .../programming-languages/delphi/index.md" | 56 + .../programming-languages/dot-net/index.md" | 86 + .../programming-languages/golang/index.md" | 85 + .../docs/programming-languages/index.md" | 29 + .../docs/programming-languages/java/index.md" | 65 + .../javascript/index.md" | 73 + .../programming-languages/python/index.md" | 90 + .../docs/programming-languages/ruby/index.md" | 61 + .../docs/programming-languages/rust/index.md" | 64 + .../developers/docs/storage/index.md" | 217 ++ .../zh-tw/19) Learn Pages 2/glossary/index.md | 499 +++++ .../zh-tw/19) Learn Pages 2/history/index.md | 624 ++++++ .../docs/smart-contracts/anatomy/index.md" | 655 ++++++ .../docs/smart-contracts/compiling/index.md" | 282 +++ .../docs/smart-contracts/deploying/index.md" | 81 + .../developers/docs/smart-contracts/index.md" | 112 ++ .../docs/smart-contracts/languages/index.md" | 323 +++ .../docs/smart-contracts/libraries/index.md" | 117 ++ .../docs/smart-contracts/security/index.md" | 580 ++++++ .../smart-contracts/composability/index.md" | 76 + .../formal-verification/index.md" | 283 +++ .../docs/smart-contracts/testing/index.md" | 308 +++ .../docs/smart-contracts/upgrading/index.md" | 168 ++ .../docs/smart-contracts/verifying/index.md" | 107 + .../zh-tw/21) Whitepaper/whitepaper/index.md | 517 +++++ .../developers/docs/bridges/index.md | 156 ++ .../index.md | 118 ++ .../docs/data-availability/index.md | 84 + .../dex-design-best-practice/index.md | 220 ++ .../heuristics-for-web3/index.md | 138 ++ .../developers/docs/design-and-ux/index.md | 85 + .../developers/docs/mev/index.md | 221 ++ .../developers/docs/oracles/index.md | 433 ++++ .../developers/docs/standards/index.md | 59 + .../docs/standards/tokens/erc-1155/index.md | 146 ++ .../docs/standards/tokens/erc-20/index.md | 172 ++ .../docs/standards/tokens/erc-223/index.md | 197 ++ .../docs/standards/tokens/erc-4626/index.md | 211 ++ .../docs/standards/tokens/erc-721/index.md | 244 +++ .../docs/standards/tokens/erc-777/index.md | 77 + .../developers/docs/standards/tokens/index.md | 39 + .../developers/docs/scaling/index.md" | 114 ++ .../docs/scaling/optimistic-rollups/index.md" | 269 +++ .../developers/docs/scaling/plasma/index.md" | 175 ++ .../docs/scaling/sidechains/index.md" | 73 + .../docs/scaling/state-channels/index.md" | 67 + .../docs/scaling/validium/index.md" | 165 ++ .../docs/scaling/zk-rollups/index.md" | 259 +++ .../data-structures-and-encoding/index.md | 32 + .../patricia-merkle-trie/index.md | 263 +++ .../data-structures-and-encoding/rlp/index.md | 163 ++ .../data-structures-and-encoding/ssz/index.md | 149 ++ .../web3-secret-storage-definition/index.md | 189 ++ .../developers/docs/networking-layer/index.md | 155 ++ .../network-addresses/index.md | 38 + .../networking-layer/portal-network/index.md | 83 + .../zh-tw/26) Miscellaneous/about/index.md | 127 ++ .../26) Miscellaneous/enterprise/index.md | 162 ++ .../enterprise/private-ethereum/index.md | 26 + .../26) Miscellaneous/foundation/index.md | 40 + .../contributing/design-principles/index.md | 93 + .../contributing/design/index.md | 77 + .../27) Contributing/contributing/index.md | 117 ++ .../translation-program/faq/index.md | 119 ++ .../how-to-translate/index.md | 89 + .../contributing/translation-program/index.md | 90 + .../mission-and-vision/index.md | 25 + .../translation-program/resources/index.md | 45 + .../translators-guide/index.md | 293 +++ .../adding-desci-projects/index.md | 44 + .../adding-developer-tools/index.md | 61 + .../contributing/adding-exchanges/index.md | 40 + .../adding-glossary-terms/index.md | 26 + .../contributing/adding-layer-2s/index.md | 97 + .../contributing/adding-products/index.md | 100 + .../adding-staking-products/index.md | 176 ++ .../contributing/adding-wallets/index.md | 80 + .../contributing/content-resources/index.md | 32 + .../design/adding-design-resources/index.md | 69 + .../contributing/quizzes/index.md | 62 + .../content/translations/zh-tw/about/index.md | 127 ++ .../zh-tw/community/get-involved/index.md | 6 +- .../zh-tw/community/grants/index.md | 2 +- .../community/language-resources/index.md | 36 +- .../zh-tw/community/research/index.md | 172 +- .../zh-tw/community/support/index.md | 1 + .../adding-desci-projects/index.md | 44 + .../adding-developer-tools/index.md | 61 + .../contributing/adding-exchanges/index.md | 40 + .../adding-glossary-terms/index.md | 26 + .../contributing/adding-layer-2s/index.md | 97 + .../contributing/adding-products/index.md | 100 + .../adding-staking-products/index.md | 176 ++ .../contributing/adding-wallets/index.md | 80 + .../contributing/content-resources/index.md | 32 + .../design/adding-design-resources/index.md | 69 + .../zh-tw/contributing/design/index.md | 12 +- .../translations/zh-tw/contributing/index.md | 2 +- .../zh-tw/contributing/quizzes/index.md | 62 + .../how-to-translate/index.md | 4 +- .../zh-tw/developers/docs/accounts/index.md | 14 +- .../developers/docs/apis/backend/index.md | 207 ++ .../developers/docs/apis/javascript/index.md | 295 +++ .../developers/docs/apis/json-rpc/index.md | 1771 +++++++++++++++++ .../zh-tw/developers/docs/blocks/index.md | 4 +- .../docs/consensus-mechanisms/index.md | 92 + .../docs/consensus-mechanisms/poa/index.md | 8 +- .../pos/attack-and-defense/index.md | 163 ++ .../pos/attestations/index.md | 92 + .../pos/block-proposal/index.md | 76 + .../consensus-mechanisms/pos/faqs/index.md | 172 ++ .../consensus-mechanisms/pos/gasper/index.md | 52 + .../docs/consensus-mechanisms/pos/index.md | 99 + .../consensus-mechanisms/pos/keys/index.md | 96 + .../pos/pos-vs-pow/index.md | 69 + .../pos/rewards-and-penalties/index.md | 90 + .../pos/weak-subjectivity/index.md | 39 + .../docs/consensus-mechanisms/pow/index.md | 2 +- .../consensus-mechanisms/pow/mining/index.md | 6 +- .../mining/mining-algorithms/ethash/index.md | 2 +- .../zh-tw/developers/docs/dapps/index.md | 6 +- .../block-explorers/index.md | 257 +++ .../docs/data-and-analytics/index.md | 55 + .../docs/development-networks/index.md | 83 + .../developers/docs/ethereum-stack/index.md | 61 + .../zh-tw/developers/docs/evm/index.md | 1 - .../developers/docs/evm/opcodes/index.md | 2 +- .../zh-tw/developers/docs/frameworks/index.md | 147 ++ .../zh-tw/developers/docs/gas/index.md | 2 +- .../zh-tw/developers/docs/ides/index.md | 71 + .../docs/intro-to-ethereum/index.md | 4 +- .../zh-tw/developers/docs/networks/index.md | 1 + .../nodes-and-clients/archive-nodes/index.md | 2 +- .../client-diversity/index.md | 2 +- .../docs/nodes-and-clients/index.md | 56 +- .../node-architecture/index.md | 2 - .../nodes-as-a-service/index.md | 109 +- .../nodes-and-clients/run-a-node/index.md | 61 +- .../docs/programming-languages/dart/index.md | 30 + .../programming-languages/delphi/index.md | 56 + .../programming-languages/dot-net/index.md | 86 + .../programming-languages/golang/index.md | 85 + .../docs/programming-languages/index.md | 29 + .../docs/programming-languages/java/index.md | 65 + .../programming-languages/javascript/index.md | 73 + .../programming-languages/python/index.md | 90 + .../docs/programming-languages/ruby/index.md | 61 + .../docs/programming-languages/rust/index.md | 64 + .../zh-tw/developers/docs/scaling/index.md | 114 ++ .../docs/scaling/optimistic-rollups/index.md | 269 +++ .../developers/docs/scaling/plasma/index.md | 175 ++ .../docs/scaling/sidechains/index.md | 73 + .../docs/scaling/state-channels/index.md | 67 + .../developers/docs/scaling/validium/index.md | 165 ++ .../docs/scaling/zk-rollups/index.md | 259 +++ .../zh-tw/developers/docs/storage/index.md | 217 ++ .../developers/docs/transactions/index.md | 19 +- .../developers/docs/wrapped-eth/index.md | 65 + .../content/translations/zh-tw/eips/index.md | 10 +- .../translations/zh-tw/enterprise/index.md | 191 +- .../enterprise/private-ethereum/index.md | 26 + .../translations/zh-tw/foundation/index.md | 40 + .../translations/zh-tw/governance/index.md | 4 +- .../index.md | 39 +- .../how-to-revoke-token-access/index.md | 2 +- .../roadmap/account-abstraction/index.md | 4 +- .../zh-tw/roadmap/danksharding/index.md | 2 +- .../zh-tw/roadmap/dencun/index.md | 120 ++ .../zh-tw/roadmap/future-proofing/index.md | 4 +- .../translations/zh-tw/roadmap/index.md | 2 +- .../translations/zh-tw/roadmap/merge/index.md | 2 +- .../roadmap/single-slot-finality/index.md | 2 +- .../zh-tw/roadmap/verkle-trees/index.md | 4 +- .../translations/zh-tw/security/index.md | 10 +- .../translations/zh-tw/staking/solo/index.md | 2 +- .../translations/zh-tw/whitepaper/index.md | 517 +++++ src/intl/zh-tw/glossary-tooltip.json | 164 ++ src/intl/zh-tw/glossary.json | 399 ++++ src/intl/zh-tw/learn-quizzes.json | 77 +- src/intl/zh-tw/page-about.json | 28 +- src/intl/zh-tw/page-assets.json | 60 +- src/intl/zh-tw/page-bug-bounty.json | 138 ++ src/intl/zh-tw/page-dapps.json | 9 +- src/intl/zh-tw/page-developers-docs.json | 3 + src/intl/zh-tw/page-developers-index.json | 2 +- .../zh-tw/page-developers-learning-tools.json | 12 +- .../page-developers-local-environment.json | 2 + src/intl/zh-tw/page-layer-2.json | 6 +- src/intl/zh-tw/page-stablecoins.json | 3 +- src/intl/zh-tw/page-staking.json | 11 +- .../zh-tw/page-upgrades-get-involved.json | 2 +- src/intl/zh-tw/page-what-is-ethereum.json | 4 +- 291 files changed, 36128 insertions(+), 352 deletions(-) create mode 100644 public/content/translations/zh-tw/04) Exploring/nft/index.md create mode 100644 public/content/translations/zh-tw/05) Use Ethereum Pages/dao/index.md create mode 100644 public/content/translations/zh-tw/06) Use Cases/defi/index.md create mode 100644 public/content/translations/zh-tw/06) Use Cases/smart-contracts/index.md create mode 100644 public/content/translations/zh-tw/06) Use Cases/web3/index.md create mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/dvt/index.md create mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/pools/index.md create mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/saas/index.md create mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/solo/index.md create mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/withdrawals/index.md create mode 100644 public/content/translations/zh-tw/08) Use cases 2/decentralized-identity/index.md create mode 100644 public/content/translations/zh-tw/08) Use cases 2/desci/index.md create mode 100644 public/content/translations/zh-tw/08) Use cases 2/refi/index.md create mode 100644 public/content/translations/zh-tw/08) Use cases 2/social-networks/index.md create mode 100644 public/content/translations/zh-tw/09) Learn Pages/bridges/index.md create mode 100644 public/content/translations/zh-tw/09) Learn Pages/energy-consumption/index.md create mode 100644 public/content/translations/zh-tw/09) Learn Pages/governance/index.md create mode 100644 public/content/translations/zh-tw/09) Learn Pages/security/index.md create mode 100644 public/content/translations/zh-tw/09) Learn Pages/zero-knowledge-proofs/index.md create mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-create-an-ethereum-account/index.md create mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-id-scam-tokens/index.md create mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-revoke-token-access/index.md create mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-swap-tokens/index.md create mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-bridge/index.md create mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-wallet/index.md create mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/eips/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/beacon-chain/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/future-proofing/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/merge/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/merge/issuance/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/scaling/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/security/index.md create mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/user-experience/index.md create mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/account-abstraction/index.md create mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/danksharding/index.md create mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/dencun/index.md create mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/pbs/index.md create mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/secret-leader-election/index.md create mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/single-slot-finality/index.md create mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/statelessness/index.md create mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/verkle-trees/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/accounts/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/blocks/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/dapps/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/opcodes/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/gas/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ether/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ethereum/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/networks/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/transactions/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/web2-vs-web3/index.md create mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/wrapped-eth/index.md create mode 100644 public/content/translations/zh-tw/14) Community Pages/community/code-of-conduct/index.md create mode 100644 public/content/translations/zh-tw/14) Community Pages/community/events/index.md create mode 100644 public/content/translations/zh-tw/14) Community Pages/community/get-involved/index.md create mode 100644 public/content/translations/zh-tw/14) Community Pages/community/grants/index.md create mode 100644 public/content/translations/zh-tw/14) Community Pages/community/language-resources/index.md create mode 100644 public/content/translations/zh-tw/14) Community Pages/community/online/index.md create mode 100644 public/content/translations/zh-tw/14) Community Pages/community/research/index.md create mode 100644 public/content/translations/zh-tw/14) Community Pages/community/support/index.md create mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/archive-nodes/index.md" create mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/bootnodes/index.md" create mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/client-diversity/index.md" create mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/index.md" create mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/light-clients/index.md" create mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/node-architecture/index.md" create mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/nodes-as-a-service/index.md" create mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/run-a-node/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attestations/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/block-proposal/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/faqs/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/gasper/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/keys/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md" create mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md" create mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/poa/index.md" create mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/index.md" create mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/index.md" create mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md" create mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md" create mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/backend/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/javascript/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/json-rpc/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/block-explorers/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/development-networks/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ethereum-stack/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/frameworks/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ides/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dart/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/delphi/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dot-net/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/golang/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/java/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/javascript/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/python/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/ruby/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/rust/index.md" create mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/storage/index.md" create mode 100644 public/content/translations/zh-tw/19) Learn Pages 2/glossary/index.md create mode 100644 public/content/translations/zh-tw/19) Learn Pages 2/history/index.md create mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/anatomy/index.md" create mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/compiling/index.md" create mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/deploying/index.md" create mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/index.md" create mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/languages/index.md" create mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/libraries/index.md" create mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/security/index.md" create mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/composability/index.md" create mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/formal-verification/index.md" create mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/testing/index.md" create mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/upgrading/index.md" create mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/verifying/index.md" create mode 100644 public/content/translations/zh-tw/21) Whitepaper/whitepaper/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/bridges/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/blockchain-data-storage-strategies/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/dex-design-best-practice/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/heuristics-for-web3/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/mev/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/oracles/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-1155/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-20/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-223/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-4626/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-721/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-777/index.md create mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/index.md create mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/index.md" create mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/optimistic-rollups/index.md" create mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/plasma/index.md" create mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/sidechains/index.md" create mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/state-channels/index.md" create mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/validium/index.md" create mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/zk-rollups/index.md" create mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/index.md create mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md create mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/rlp/index.md create mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/ssz/index.md create mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md create mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/index.md create mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/network-addresses/index.md create mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/portal-network/index.md create mode 100644 public/content/translations/zh-tw/26) Miscellaneous/about/index.md create mode 100644 public/content/translations/zh-tw/26) Miscellaneous/enterprise/index.md create mode 100644 public/content/translations/zh-tw/26) Miscellaneous/enterprise/private-ethereum/index.md create mode 100644 public/content/translations/zh-tw/26) Miscellaneous/foundation/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/design-principles/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/design/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/faq/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/how-to-translate/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/mission-and-vision/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/resources/index.md create mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/translators-guide/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-desci-projects/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-developer-tools/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-exchanges/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-glossary-terms/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-layer-2s/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-products/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-staking-products/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-wallets/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/content-resources/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/design/adding-design-resources/index.md create mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/quizzes/index.md create mode 100644 public/content/translations/zh-tw/about/index.md create mode 100644 public/content/translations/zh-tw/contributing/adding-desci-projects/index.md create mode 100644 public/content/translations/zh-tw/contributing/adding-developer-tools/index.md create mode 100644 public/content/translations/zh-tw/contributing/adding-exchanges/index.md create mode 100644 public/content/translations/zh-tw/contributing/adding-glossary-terms/index.md create mode 100644 public/content/translations/zh-tw/contributing/adding-layer-2s/index.md create mode 100644 public/content/translations/zh-tw/contributing/adding-products/index.md create mode 100644 public/content/translations/zh-tw/contributing/adding-staking-products/index.md create mode 100644 public/content/translations/zh-tw/contributing/adding-wallets/index.md create mode 100644 public/content/translations/zh-tw/contributing/content-resources/index.md create mode 100644 public/content/translations/zh-tw/contributing/design/adding-design-resources/index.md create mode 100644 public/content/translations/zh-tw/contributing/quizzes/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/apis/backend/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/apis/javascript/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/apis/json-rpc/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/attestations/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/faqs/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/gasper/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/keys/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/data-and-analytics/block-explorers/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/data-and-analytics/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/development-networks/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/ethereum-stack/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/frameworks/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/ides/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/dart/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/delphi/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/dot-net/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/golang/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/java/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/javascript/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/python/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/ruby/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/programming-languages/rust/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/scaling/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/scaling/optimistic-rollups/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/scaling/plasma/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/scaling/sidechains/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/scaling/state-channels/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/scaling/validium/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/scaling/zk-rollups/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/storage/index.md create mode 100644 public/content/translations/zh-tw/developers/docs/wrapped-eth/index.md create mode 100644 public/content/translations/zh-tw/enterprise/private-ethereum/index.md create mode 100644 public/content/translations/zh-tw/foundation/index.md create mode 100644 public/content/translations/zh-tw/roadmap/dencun/index.md create mode 100644 public/content/translations/zh-tw/whitepaper/index.md create mode 100644 src/intl/zh-tw/glossary-tooltip.json create mode 100644 src/intl/zh-tw/glossary.json create mode 100644 src/intl/zh-tw/page-bug-bounty.json diff --git a/public/content/translations/zh-tw/04) Exploring/nft/index.md b/public/content/translations/zh-tw/04) Exploring/nft/index.md new file mode 100644 index 00000000000..d36e25d70a2 --- /dev/null +++ b/public/content/translations/zh-tw/04) Exploring/nft/index.md @@ -0,0 +1,114 @@ +--- +title: 非同質化代幣 (NFT) +description: 以太坊生態系非同質化代幣概要 +lang: zh-tw +template: use-cases +emoji: ":frame_with_picture:" +sidebarDepth: 2 +image: /images/infrastructure_transparent.png +alt: 全息投影顯示的以太幣標誌。 +summaryPoint1: 一種用以太坊資產來呈現任何獨特事物的方式。 +summaryPoint2: 非同質化代幣賦予了內容創作者前所未有的強大力量。 +summaryPoint3: 由建置於以太坊區塊鏈上的智慧型合約提供支援。 +--- + +## 什麼是非同質化代幣? {#what-are-nfts} + +非同質化代幣是一種**獨一無二**的代幣。<0> 每個非同質化代幣都有不同的屬性(非同質性),它們的稀缺性是可以驗證的。 非同質化代幣與[以太幣](/glossary/#ether)和其他基於以太坊的代幣(例如 USDC)不同,後者的每一個代幣都一樣的,具有相同的特性(「同質化」)。 你不會在乎你錢包內的其中一張鈔票(以太幣),因為它們都一樣且價值相同。 但你_確實會_在意你自己持有的特定非同質化代幣,因為它們不同於其他的資產,全都有各自的屬性(非同質化)。 + +每個非同質化代幣的獨特性使藝術品、收藏品,甚至房地產等等事物能夠代幣化,即一個特定的唯一非同質化代幣對應到現實世界的一些特定且獨一無二的物品或數位物品。 資產的所有權在以太坊[區塊鏈](/glossary/#blockchain)上被公開驗證。 + + + +## 資產網路 {#internet-of-assets} + +非同質化代幣和以太坊解決了網際網路上現存的某些問題。 隨著一切變得越來越數位化,有需求以不受中心組織控制的方式來複製實體物品的屬性,例如稀缺性、唯一性和所有權證明。 舉例來說,透過非同質化代幣,你可以在所有基於以太坊的應用程式上擁有某個音樂 mp3 檔 的所有權,不必綁定於單一公司特定的音樂 App 上,如 Spotify 或 Apple Music。 你可以擁有可出售或交換的社交媒體帳號,且該帳號**無法被平臺提供者任意奪走**。 + +相較於我們大多數人今天使用的網際網路,非同質化代幣網際網路的特色如下... + +### 比較 {#nft-comparison} + +| 非同質化代幣網際網路 | 目前的網際網路 | +| --------------------------------------------------------------------------------- | -------------------------------------------------- | +| **你擁有自己的資產!**只有你才可以出售或交換這些資產。 | **你向某些組織借用資產時**,這些資產可能被奪走。 | +| 非同質化代幣具有**數位獨特性**,每個非同質化代幣皆獨一無二。 | **往往無法區分複製品和正品**。 | +| 非同質化代幣的所有權儲存在區塊鏈上,任何人都可**公開驗證**該所有權。 | 數位物品的所有權紀錄儲存在**由機構控制**的伺服器上,必須在機構同意後才能獲取所有權紀錄。 | +| 非同質化代幣是以太坊上的[智能合約](/glossary/#smart-contract)。 這表示它們**可以直接在以太坊上的其他智能合約**和應用程式上使用! | 擁有數位物品的公司通常**需要自己的「封閉平台 (walled garden)」基礎架構**。 | +| 內容**創作者可以在任何地點出售自己的作品**,還能打入全球市場。 | 創作者依賴其使用的平台所提供的基礎架構和發佈通路。 這些通常會受到使用條款和**地理限制**的約束。 | +| 非同質化代幣創作者**可保有對自己作品的所有權**,並將版稅直接寫入非同質化代幣的智能合約。 | **音樂串流服務等平台分到大部分的銷售利潤**。 | + +## 非同質化代幣有哪些用途? {#nft-use-cases} + +非同質化代幣有許多用途,包括: + +- 證明你參加過某活動 +- 證明你完成一堂課程 +- 可擁有的遊戲物品 +- 數位藝術 +- 現實資產代幣化 +- 證明你的線上身分 +- 限制內容存取 +- 票務 +- 去中心化的網際網路網域名稱 +- [去中心化金融](/glossary/#defi)的抵押品 + +或許你是位藝術家,想透過非同質化代幣分享你的作品,同時不失去對藝術品的控制權,並且不會因中介而損失收益。 你可以建立一份新合約,並明訂非同質化代幣的數量、屬性,以及連到某些特定藝術品的連結。 作為藝術家,**你可以將您應得的版稅寫入智能合約**(如:每當非同質化代幣被轉移時,支付銷售價格的 5% 給合約擁有者)。 你可以隨時證明該非同質化代幣由您建立,因為您擁有部署該合約的[錢包](/glossary/#wallet)。 你的買家可輕易證明他們擁有賣家收藏品的**正版非同質化代幣**,因為他們的錢包[地址](/glossary/#address)與賣家智能合約中的代幣相關聯。 他們可以在以太坊生態系統中使用非同質化代幣,並可信任代幣的真實性。 + + +
探索、購買或建立你個人的非同質化代幣藝術品/收藏品……
+ + 探索非同質化代幣藝術品 + +
+ +又或者以體育賽事的門票為例, 如同**賽事主辦者可以決定要販售幾張門票**,非同質化代幣的創作者也可以決定要發行幾份複製品。 有時可能是完全相同的複製品,例如 5000 張普通門票; 有時可能會製作好幾種極為類似,但各自略有不同的複製品,例如指定席的票券。 此類票券可以在不需要給票務員付款的情況下進行點對點買賣,買家可以隨時檢查合約地址,以確保票券的真實性。 + +在 ethereum.org 上,**非同質化代幣被用來證明大家對我們的 Github 儲存庫做出了有意義的貢獻**(對網站進行編程、撰寫或修改文章等等)、翻譯我們的文字内容,或參加了我們的社群電話會議,以及我們甚至擁有專屬的非同質化代幣域名。 如果你對 ethereum.org 有貢獻,你可以領取[出席證明協定 (POAP)](/glossary/#poap) 非同質化代幣。 某些加密貨幣聚會使用 POAP 作為入場門票。 [深入了解如何貢獻](/contributing/#poap)。 + +![ethereum.org POAP](./poap.png) + +此網站也有一個由非同質化代幣提供支援的替代網域名稱:**ethereum.eth**。 我們的 `.org` 位址是由網域名稱系統 (DNS) 供應商集中管理,而 ethereum`.eth` 則是透過以太坊名稱服務 (ENS) 於以太坊註冊, 為我們所有,且由我們管理。 [查看我們的以太坊名稱服務記錄](https://app.ens.domains/name/ethereum.eth) + +[更多以太坊名稱服務相關資訊](https://app.ens.domains) + + + +## 非同質化代幣如何運作? {#how-nfts-work} + +與以太坊區塊鏈上的任何數位物品一樣,非同質化代幣是透過一種稱爲「智慧型合約」的基於以太坊的特殊電腦程式所建立。 這些合約會遵循特定的規則,如 [ERC-721](/glossary/#erc-721) 或 [ERC-1155](/glossary/#erc-1155) 標準,這些規則決定了合約的用途。 + +非同質化代幣智慧型合約的一些關鍵用途: + +- **建立非同質化代幣:**能製造新的非同質化代幣。 +- **分配所有權:**透過將非同質化代幣連結到特定的以太坊地址來追蹤其擁有者。 +- **為每一個非同質化代幣分配一個 ID:**每一個非同質化代幣都擁有一個獨一無二的編號。 此外,通常還會附加一些額外信息(元數據),描述該非同質化代幣所代表的含義。 + +當人們「建立」或「鑄造」非同質化代幣時,他們主要是在告訴智慧型合約將特定非同質化代幣的所有權賦予他們。 該資訊被安全和公開地儲存在區塊鏈中。 + +此外,合約創作者可以添加額外的規則。 可以限制某種非同質化代幣的製造數量或者決定每當非同質化代幣易手時都應獲得一小筆版稅。 + +### 非同質化代幣的安全性 {#nft-security} + +以太坊的安全性來自[權益證明](/glossary/#pos)。 以太坊從經濟性的角度抑制惡意行為,這讓以太坊得以防竄改。 這也讓非同質化代幣得以成真。 一旦包含你的非同質化代幣交易的[區塊](/glossary/#block)[最終化](/glossary/#finality),攻擊者要對其作出變更,就得花費數百萬以太幣。 任何運行以太坊軟體的人皆能立即偵測到對非同質化代幣進行的欺詐性篡改,且惡意行為者也會遭到經濟處罰及驅逐。 + +與非同質化代幣有關的安全問題最常與釣魚詐騙、智慧型合約漏洞或使用者錯誤(如無意間洩漏私密金鑰)有關,所以良好的錢包安全性對非同質化代幣持有者十分重要。 + + + 更多安全相關資訊 + + +## 了解更多 {#further-reading} + +- [非同質化代幣入門指南](https://linda.mirror.xyz/df649d61efb92c910464a4e74ae213c4cab150b9cbcc4b7fb6090fc77881a95d) – _Linda Xie,2020 年 1 月_ +- [Etherscan 的非同質化代幣追蹤器](https://etherscan.io/nft-top-contracts) +- [ERC-721 代幣標準](/developers/docs/standards/tokens/erc-721/) +- [ERC-1155 代幣標準](/developers/docs/standards/tokens/erc-1155/) +- [熱門非同質化代幣應用程式和工具](https://www.ethereum-ecosystem.com/blockchains/ethereum/nfts) + +## 其他資源 {#other-resources} + +- [NFTScan](https://nftscan.com/) + + + + diff --git a/public/content/translations/zh-tw/05) Use Ethereum Pages/dao/index.md b/public/content/translations/zh-tw/05) Use Ethereum Pages/dao/index.md new file mode 100644 index 00000000000..718a8a2c57c --- /dev/null +++ b/public/content/translations/zh-tw/05) Use Ethereum Pages/dao/index.md @@ -0,0 +1,166 @@ +--- +title: 去中心化自治組織 (DAO) +description: 以太坊上的去中心化自治組織概要 +lang: zh-tw +template: use-cases +emoji: ":handshake:" +sidebarDepth: 2 +image: /images/use-cases/dao-2.png +alt: 在對提案投票的去中心化自治組織代表。 +summaryPoint1: 沒有中心化領導的成員共有社群。 +summaryPoint2: 一個與網路上陌生人合作的安全方式。 +summaryPoint3: 一個將資產投入特定事業的安全場所。 +--- + +## 什麼是去中心化自治組織 {#what-are-daos} + +去中心化自治組織為一種集體擁有,並致力於共同使命的組織。 + +去中心化自治組織使我們不需信任一個良善的領導者來管理資金或經營,便能與世界各地志趣相投的人們共事。 沒有執行長能夠衝動使用資金,也沒有財務長可以作假帳。 取而代之的是,由基於區塊鏈上程式碼所制定的規則來定義組織如何運作以及如何使用資金。 + +組織擁有自己的資金庫,未經團體核准,任何人都無權使用。 決策經由提案和投票來治理,以確保每位組織成員都能發聲,且任何事都在[鏈上](/glossary/#on-chain)進行,公開透明。 + +## 為何我們需要去中心化自治組織? {#why-dao} + +要和他人合作創立涉及經費和金錢的組織,你必須高度信任你的合夥人。 但你很難信任一個只在網路上互動過的人。 使用去中心化自治組織,你不必信任團體中的每個人,只需要相信 100% 透明、任何人都能驗證的去中心化自治組織程式碼。 + +這開啟了許多全球協作與合作的新機會。 + +### 比較 {#dao-comparison} + +| 去中心化自治組織 | 傳統組織 | +| ------------------------- | --------------------------- | +| 通常是扁平組織,而且完全民主。 | 通常等級嚴明。 | +| 任何更改都需要成員投票決定後才能實施。 | 視組織結構而定,可能由部分人進行決策,也可能投票表決。 | +| 不需要可信的中間人便能自動統計投票、執行結果。 | 如果允許投票,會在內部計票,而且投票結果必須人工執行。 | +| 以去中心化方式自動提供服務(例如慈善基金的分配)。 | 需要人工處理,或集中管控自動處理,易受操縱。 | +| 所有活動皆完全公開透明。 | 活動通常是隱密進行,公開程度有限。 | + +### 去中心化自治組織範例 {#dao-examples} + +為了幫助你了解,以下略舉幾個去中心化自治組織的使用範例: + +- **慈善機構** – 你可以接受來自全世界任何人的捐贈,並投票決定要資助的事業。 +- **共同擁有權** – 你可以購買實體或虛擬資產,且組織成員可以對如何使用資產進行投票。 +- **風險投資和資助** – 你可以成立風險基金,透過該基金匯集投資資本並投票決定要進行的風險投資。 後續收益可以分配給相應的去中心化自治組織成員。 + + + +## 去中心化自治組織如何運作? {#how-daos-work} + +去中心化自治組織的基礎為其[智慧型合約](/glossary/#smart-contract),該合約定義組織的規則,並對該團體的資金庫進行規範。 一旦在以太坊上部署合約,除非投票通過,否則不能修改規則。 任何不符合程式碼規則和邏輯的行為都會失效。 由於資金庫也是以智慧型合約定義,因此任何人都無法不經團體核准而挪用資金。 這意味著去中心化自治組織不需要中心化管理機構。 相反地,團體會共同做出決定,而付款會在投票通過之後自動獲得授權。 + +之所以能夠做到這一點,是因為智慧型合約一旦部署於以太坊,就無法被篡改。 一切都是公開的,只要有人修改程式碼(去中心化自治組織的規則)就會被發現。 + +## 以太坊與去中心化自治組織 {#ethereum-and-daos} + +以太坊為去中心化自治組織提供了極佳的基礎,原因如下: + +- 以太坊本身的共識足夠去中心化,同時建立已久,足以讓組織信任其網路。 +- 智慧型合約程式碼部署後便無法修改,即使是所有人亦然。 這使得去中心化自治組織可以完全按照程式設定的規則運作。 +- 智慧型合約可以發送/接收資金。 如果少了這點,你就需要可信的中間人來管理團體的資金。 +- 事實證明,比起競爭,以太坊社群更趨向合作,使得最佳做法和支援系統得以快速發展。 + +## 去中心化自治組織的治理 {#dao-governance} + +治理去中心化自治組織時有許多考量,例如投票及提案該如何運作。 + +### 授權 {#governance-delegation} + +委託類似去中心化自治組織版本的代議民主。 代幣持有者向自我提名、並承諾管理協定且掌握最新消息的使用者委託選票。 + +#### 知名案例 {#governance-example} + +[以太坊名稱服務](https://claim.ens.domains/delegate-ranking) – 以太坊名稱服務持有者可將其選票委託給參與活動的社群成員,以代表他們。 + +### 自動交易治理 {#governance-example} + +在許多去中心化自治組織中,如達法定人數的成員投票同意,交易將自動執行。 + +#### 知名案例 {#governance-example} + +[Nouns](https://nouns.wtf) – 在去中心化組織 Nouns 中,如票數達法定數量且大多數票投票同意,只要不被創辦人所否決,交易就會自動執行。 + +### 多簽治理 {#governance-example} + +雖然去中心化自治組織可有成千上萬的投票成員,資金可存放在一個由 5-20 名受信任且通常資訊公開(有社群所知的公開身份)的活躍社群成員共管的[錢包](/glossary/#wallet)中。 投票後,[多簽](/glossary/#multisig)簽署人會執行社群的意願。 + +## 去中心化自治組織相關法律 {#dao-laws} + +1977 年,懷俄明州創造了有限責任公司制度,以保護企業家並限定其責任。 更近期,懷俄明州首創去中心化自治組織相關法律,給予去中心化自治組織法律地位。 目前,懷俄明州、佛蒙特州以及維京群島皆建立某種形式的去中心化自治組織相關法律。 + +### 知名案例 {#law-example} + +[CityDAO](https://citydao.io) – CityDAO 透過懷俄明州去中心化自治組織的相關法律購買了黃石國家公園附近 40 英畝的地。 + +## 去中心化自治組織成員 {#dao-membership} + +去中心化自治組織的成員有多種模式。 成員可以決定投票方式和去中心化自治組織的其他重要事務。 + +### 代幣型成員 {#token-based-membership} + +通常完全[無需許可](/glossary/#permissionless),視所用的代幣而定。 這類治理代幣大部分都能在[去中心化交易所](/glossary/#dex)自由交易,無需許可。 其他少部分則必須透過提供流動性或其他某些「工作量證明」來賺取。 無論是哪一種方式,只要持有代幣就能獲得投票權。 + +_通常用於治理廣泛的去中心化協定及/或代幣本身。_ + +#### 知名案例 {#token-example} + +[MakerDAO](https://makerdao.com) – MakerDAO 的代幣 MKR 在去中心化交易所廣泛提供,且任何人皆可買進投票權來決定 Maker 協定的未來。 + +### 股份型成員 {#share-based-membership} + +股份型去中心化自治組織擁的許可制程度更高,但仍然相當公開。 任何潛在的成員都可以申請加入去中心化自治組織,通常以代幣或工作的形式提供有價值的貢獻。 股份代表直接投票權及所有權。 成員可以隨時帶著自己所佔的資金庫股份退出。 + +_通常用於關係較為緊密、以人為中心的組織,例如慈善機構、勞工團體、投資俱樂部等, 也可以治理協定及代幣。_ + +#### 知名案例 {#share-example} + +[MolochDAO](http://molochdao.com/) – MolochDAO 致力於資助以太坊專案。 想加入為成員必須提出申請,以便團體評估你是否具備必要的專業知識和資本來對潛在的受資助者作出明智判斷。 你無法直接在公開市場購買加入該去中心化自治組織的資格。 + +### 信譽型成員 {#reputation-based-membership} + +信譽代表參與證明,並能授予去中心化自治組織的投票權。 不同於代幣型或股份型成員,信譽型去中心化自治組織不會將所有權轉讓給貢獻者。 信譽不能購買、移轉或委託;去中心化自治組織成員必須透過參與來獲得信譽。 鏈上投票無需許可,潛在成員可以自由提出加入去中心化自治組織的申請,並要求獲得信譽和代幣作為其貢獻的獎勵。 + +_通常用於協定和[去中心化應用程式](/glossary/#dapp)的去中心化開發及治理,但也非常適合各種組織,如慈善機構、勞工團體、投資俱樂部等。_ + +#### 知名案例 {#reputation-example} + +[DXdao](https://DXdao.eth.limo) – DXdao 是一個全球主權聯合組織,自 2019 年以來一直致力於建構與治理去中心化協定和應用程式。 它利用信譽型治理和[全息共識](/glossary/#holographic-consensus)來協調和管理資金,這意味著沒有人可以透過金錢來影響其未來或治理決策。 + +## 參與/建立去中心化自治組織 {#join-start-a-dao} + +### 加入去中心化自治組織 (DAO) {#join-a-dao} + +- [以太坊社群去中心化自治組織](/community/get-involved/#decentralized-autonomous-organizations-daos) +- [DAOHaus 的去中心化自治組織清單](https://app.daohaus.club/explore) +- [Tally.xyz 的去中心化自治組織清單](https://www.tally.xyz) + +### 建立去中心化自治組織 {#start-a-dao} + +- [使用 DAOHaus 建立去中心化自治組織](https://app.daohaus.club/summon) +- [使用 Tally 建立一個治理者型去中心化自治組織](https://www.tally.xyz/add-a-dao) +- [建立由 Aragon 支援的去中心化自治組織](https://aragon.org/product) +- [建立 colony](https://colony.io/) +- [使用 DAOstack 全息共識建立去中心化自治組織](https://alchemy.daostack.io/daos/create) + +## 延伸閱讀 {#further-reading} + +### 去中心化自治組織相關文章 {#dao-articles} + +- [什麼是去中心化自治組織?](https://aragon.org/dao)– [Aragon](https://aragon.org/) +- [去中心化自治組織之家](https://wiki.metagame.wtf/docs/great-houses/house-of-daos) – [Metagame](https://wiki.metagame.wtf/) +- [何謂去中心化自治組織?它有何用途?](https://daohaus.substack.com/p/-what-is-a-dao-and-what-is-it-for)– [DAOhaus](https://daohaus.club/) +- [如何創立由去中心化自治組織支援的數位社群](https://daohaus.substack.com/p/four-and-a-half-steps-to-start-a) – [DAOhaus](https://daohaus.club/) +- [什麼是去中心化自治組織?](https://coinmarketcap.com/alexandria/article/what-is-a-dao)– [Coinmarketcap](https://coinmarketcap.com) +- [什麼是全息共識?](https://medium.com/daostack/holographic-consensus-part-1-116a73ba1e1c)- [DAOstack](https://daostack.io/) +- [Vitalik,《去中心化自治組織並非法人團體:去中心化在自治組織裡的重要之處》](https://vitalik.eth.limo/general/2022/09/20/daos.html) +- [去中心化自治組織、去中心化自治公司、去中心化應用程式等:不完整術語指引](https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide) - [以太坊部落格](https://blog.ethereum.org) + +### 影片 {#videos} + +- [什麼是加密貨幣世界的去中心化自治組織?](https://youtu.be/KHm0uUPqmVE) +- [一個去中心化自治組織是否能建立一座城市?](https://www.ted.com/talks/scott_fitsimones_could_a_dao_build_the_next_great_city)– [TED](https://www.ted.com/) + + + + diff --git a/public/content/translations/zh-tw/06) Use Cases/defi/index.md b/public/content/translations/zh-tw/06) Use Cases/defi/index.md new file mode 100644 index 00000000000..53f63389e32 --- /dev/null +++ b/public/content/translations/zh-tw/06) Use Cases/defi/index.md @@ -0,0 +1,357 @@ +--- +title: 去中心化金融 (DeFi) +description: 以太坊生態系之去中心化金融概要 +lang: zh-tw +template: use-cases +emoji: ":money_with_wings:" +image: /images/use-cases/defi.png +alt: 以樂高積木製作的以太幣標誌。 +sidebarDepth: 2 +summaryPoint1: 現行金融系統的全球開放性替代方案。 +summaryPoint2: 讓你借款、儲蓄、投資、交易和進行更多應用的產品。 +summaryPoint3: 基於所有人都可以編寫的開放原始碼技術。 +--- + +去中心化金融是專為網際網路時代建構的開放式全球金融系統,可取代不透明、遭到嚴密控制、以幾十年前的基礎設施和流程維繫的系統, 讓你有能力控制及監管自己的資金, 觸及全球市場,並獲得本地貨幣或銀行以外的替代選項。 去中心化金融產品向所有擁有網際網路連線的人開放金融服務,同時主要是由使用者控制和維護。 到目前為止,已有價值數百億的加密貨幣透過去中心化金融應用程式流通,而且這個數字每天都還在成長。 + +## 何謂去中心化金融? {#what-is-defi} + +「去中心化金融」是任何可以使用以太坊的人(也就是任何擁有網際網路連線的人)都可以存取的金融產品與服務的通稱。 有了去中心化金融,市場能隨時保持開放,沒有中心化的機關可以封鎖付款或讓你無法企及任何產品或服務。 傳統金融服務不但速度緩慢,還可能出現人為錯誤,現在改由任何人都能檢查和審省的程式碼來自動處理,作業更為安全。 + +加密經濟正在迅速發展,提供了放貸、借款、做多/放空、賺取利息等業務的管道。 精通加密經濟的阿根廷人已經在運用去中心化金融來擺脫嚴重的通貨膨脹, 企業也開始運用去中心化金融服務來即時發放員工薪資, 有些人甚至在不需要證明個人身分的情況下,就獲得及償還了數百萬美元的貸款。 + + + +## 去中心化金融與傳統金融 {#defi-vs-tradfi} + +了解去中心化金融潛力的一種最佳方法是了解目前存在的問題。 + +- 有些人沒有開立銀行帳戶或使用金融服務的途徑。 +- 無法獲得金融服務可能會讓人找不到工作。 +- 金融服務可以讓你無法收款。 +- 傳統金融服務還有一項隱藏費用,就是你的個人資料。 +- 政府及中心化機構可以任意關閉市場。 +- 交易時間通常受到特定時區的營業時間所限。 +- 資金移轉可能因為內部人工流程而花上好幾天的時間。 +- 金融服務存在溢價,因為中間機構需要分一杯羹。 + +### 比較 {#defi-comparison} + +| 去中心化金融 | 傳統金融 | +| ------------------------------- | ------------------------------------- | +| 你的資金由你自己持有。 | 你的資金由企業持有。 | +| 由你自行管控資金流向及使用方式。 | 你必須相信企業不會不當管理你的資金,例如借貸給高風險借款人。 | +| 移轉資金只需要幾分鐘的時間。 | 支付可能因為人工處理而得花上幾天時間。 | +| 交易活動為匿名方式。 | 金融活動與你的身分綁定。 | +| 去中心化金融對所有人開放。 | 使用金融服務必須申請。 | +| 市場永遠開放。 | 員工需要休息,因此市場會關閉。 | +| 奠基於透明的系統──所有人都能查看產品資料及檢查系統運作狀況。 | 金融機構完全是黑箱作業:你不能要求查看他們的放貸記錄、資產管理記錄等資訊。 | + + + 探索去中心化金融應用程式 + + +## 一切要從比特幣開始說起…… {#bitcoin} + +從許多方面來說,比特幣是第一款去中心化金融應用程式。 比特幣能讓你真正擁有及掌控價值,並傳送到世界上任何一個角落。 它提供了一種方式,讓眾多互不信任的人同意使用一套帳戶帳本,而無需透過可信賴的中間機構。 比特幣對所有人開放,而且沒有人有權改變其規則。 比特幣的規則,例如其稀有度及開放性,是這項技術與生俱來的特色。 在傳統金融中,政府可以印鈔讓你的存款貶值,企業也可以關閉市場,而比特幣與傳統金融截然不同。 + +以太坊便是以此概念為基礎。 和比特幣一樣,以太坊的規則不能任意更改,而且所有人都能使用。 但它進一步使用[智慧型合約](/glossary/#smart-contract)讓這種數位貨幣可程式化,使其功能不侷限於存放及傳送價值。 + + + +## 可程式化的貨幣 {#programmable-money} + +這聽起來很奇怪……「我幹嘛把我的錢程式化?」 不過,這只是以太坊代幣的預設功能之一。 所有人都可以在付款時加入程式邏輯。 因此,你可以結合比特幣的控制權和安全性,以及金融機構提供的各種金融服務, 用加密貨幣來做一些比特幣辦不到的事,例如借貸、安排付款、投資指數型基金等等。 + + +
如果你是剛開始使用以太坊,請嘗試我們推薦的去中心化金融應用程式。
+ + 探索去中心化金融應用程式 + +
+ +## 你可以用去中心化金融來做什麼? {#defi-use-cases} + +大多數金融服務都有去中心化的替代方案。 但以太坊也為打造嶄新的金融產品創造了許多機會。 這個清單還在不斷成長。 + +- [匯款到世界各地](#send-money) +- [讓資金在全球流通](#stream-money) +- [取得穩定幣](#stablecoins) +- [抵押借款](#lending) +- [無抵押借款](#flash-loans) +- [開始儲蓄加密貨幣](#saving) +- [交易代幣](#swaps) +- [擴大投資組合](#investing) +- [為構想募資](#crowdfunding) +- [購買保險](#insurance) +- [管理投資組合](#aggregators) + + + +### 快速匯款到世界各地 {#send-money} + +作為一種區塊鏈,以太坊的核心功能是安全地在全球傳送交易。 和比特幣一樣,以太坊可以讓跨境匯款像傳送電子郵件一樣簡單。 只需從錢包輸入收款人的[以太坊名稱服務名稱](/glossary/#ens)(例如 bob.eth)或其帳戶地址,你的款項就會在幾分鐘內直接到達對方的帳戶(通常情況下)。 要收發款項,你需要一個[錢包](/wallets/)。 + + + 查看支付去中心化應用程式 + + +#### 讓資金在全球流通…… {#stream-money} + +你可以運用以太坊流通資金。 以太坊可以讓你在幾秒之內支付某人的薪資,供對方隨時取用; 或快速租用物品,如置物櫃或電動滑板車。 + +如果你因為價值波動而不想傳送或串流[以太幣](/glossary/#ether),以太坊上也有替代貨幣:[穩定幣](/glossary/#stablecoin)。 + + + +### 取得穩定幣 {#stablecoins} + +對許多金融產品和一般支出而言,加密貨幣的價格波動是一大問題。 去中心化金融社群以穩定幣解決了這個問題。 穩定幣的價值與其他資產掛鈎,通常是美元這類熱門貨幣。 + +Dai、USDC 等穩定幣的價值和美元的差距通常維持在幾美分之內, 使穩定幣非常適合用於收入或零售。 在南美洲,因為政府發行的貨幣有極大的不確定性,許多人已經在使用穩定幣保護自己的儲蓄。 + + + 深入了解穩定幣 + + + + +### 借款 {#lending} + +向去中心化供應商借款主要有兩種方式。 + +- 點對點,即借款者直接向特定貸款者借款。 +- 資金池,即貸款者將資金(流動性)注入資金池,而借款者從資金池借款。 + + + 查看借款去中心化應用程式 + + +選擇去中心化貸款有許多優勢…… + +#### 在保有隱私的情況下借貸 {#borrowing-privacy} + +今天,資金的借與貸都是圍繞著相關個人進行。 銀行在放款前,需要知道你是不是真的有能力償還貸款。 + +去中心化借貸則不需任何一方表明身分即可運作。 然而,借款者必須提供抵押品,如果無法償還,抵押品就會自動歸貸款者所有。 有些貸款人甚至接受以[非同質化代幣](/glossary/#nft)作為抵押品。 非同質化代幣為獨特資產(如繪畫)的契據。 [更多非同質化代幣相關資訊](/nft/) + +透過這種方式,不必接受徵信調查或提供私人資訊也能借款。 + +#### 獲得全球資金 {#access-global-funds} + +選擇去中心化借貸服務時,你可以借入來自全球各地的存款,而不僅止於你選擇的銀行或機構所持有的資金。 這讓貸款更容易取得,也能改善利率。 + +#### 納稅效益 {#tax-efficiencies} + +借款可以讓你獲得需要的資金,而無需出售以太幣(此行為會被課稅)。 但是,你可以使用以太幣作為抵押品以借貸穩定幣。 如此一來,你便可以在保有以太幣的情況下,獲得所需的現金流。 穩定幣是需要現金時的最佳選擇,因為穩定幣的價值不像以太幣一樣易於波動。 [深入了解穩定幣](#stablecoins) + +#### 閃電貸 {#flash-loans} + +閃電貸是一種較具實驗性的去中心化借貸形式,可以讓你在沒有抵押品或不提供個人資訊的情況下借款。 + +目前非技術人員還無法大規模運用這種模式,但我們已經看出它未來流行的潛力。 + +閃電貸的運作基礎為放款和還款發生在同一次交易內。 如果無法還款,則交易會被還原,就像什麼都沒有發生過一樣。 + +經常使用的資金會注入流動資產池(用於放貸的龐大資金池)。 如果資金在某個時點無人使用,就創造了一個機會,讓人借用此資金來拓展業務,並在借入資金的幾乎同一個時點全額償還。 + +這意味著必須在量身打造的交易中納入大量邏輯。 舉個簡單的例子:某個人透過閃電貸,以某個價格借入一大筆資產,轉而在價格更高的其他交易所出售。 + +所以在這一筆交易中,發生了以下情況: + +- 你以 $1.00 的價格,從 A 交易所借入 X 數量的 $asset +- 你在 B 交易所以 $1.10 的價格售出 X 數量的 $asset +- 接著,你到 A 交易所償還貸款 +- 你賺得了扣除交易手續費後的利潤 + +如果 B 交易所的供給量急速下降,使用者無法購足量額來償還原始貸款,那麼這筆交易就會失敗。 + +要在傳統金融體系內完成以上操作,你需要鉅額資金。 這種財產創造策略只有已經擁有財富的人才能操作。 閃電貸的例子告訴我們,未來「有錢」不見得是「賺錢」的先決條件。 + + + 深入了解閃電貸 + + + + +### 開始儲蓄加密貨幣 {#saving} + +#### 放貸 {#lending} + +你可以透過放貸加密貨幣來賺取利息,並即時看到資金成長。 目前的利息比你當地的銀行高出許多(如果你運氣夠好,可以使用銀行服務的話)。 例如: + +- 你借出 100 Dai(一種[穩定幣](/stablecoins/))給某個類似 Aave 的產品。 +- 你會收到 100 Aave Dai (aDai),此代幣代表著你借出的 Dai。 +- 你的 aDai 會按利率增加,你可以看到錢包裡的餘額在增長。 視[年利率](/glossary/#apr)而定,你的錢包餘額可能會在幾天,甚至幾小時後變成 100.1234! +- 你可以隨時提取和你的 aDai 餘額等額的一般 Dai。 + + + 查看借貸去中心化應用程式 + + +#### 無損樂透 {#no-loss-lotteries} + +無損樂透(如 PoolTogether)是一種有趣而創新的儲蓄方法。 + +- 你用 100 Dai 代幣購買 100 張樂透。 +- 你會收到 100 個 plDai,代表你的 100 張樂透。 +- 如果其中有一張樂透中獎,你的 plDai 餘額會按獎金池的金額增加。 +- 如果沒有中獎,你的 100 個 plDai 會滾動進入下週的抽獎。 +- 你可以隨時提取相當於 plDai 餘額的一般 Dai。 + +和上述放貸案例一樣,獎金池的資金來自於放貸樂透存款產生的所有利息。 + + + 嘗試 PoolTogether + + + + +### 兌換代幣 {#swaps} + +以太坊有成千上萬種代幣。 去中心化交易所 (DEX) 可以讓你隨時交易不同代幣。 你永遠不會放棄對資產的控制權。 這就像造訪其他國家時到外幣收兌處換匯一樣。 但去中心化金融版本的收兌處永不關閉, 去中心化金融市場全天候開放,其技術可保證永遠有人受理交易。 + +例如,如果你想使用無損樂透 PoolTogether(參閱前文),你需要 Dai 或 USDC 這類代幣。 這些去中心化交易所可讓你將以太幣兌換成這些代幣,完成交易後再兌換回來。 + + + 查看代幣交易所 + + + + +### 進階交易 {#trading} + +對希望獲得更大控制權的交易者而言,還有一些進階選項可以運用。 限價單、永續債、信用交易等都可以實現。 透過去中心化交易,你可以獲得全球流動性,市場永不關閉,而且你始終能控制自己的資產。 + +使用中央化交易所時,你必須在交易前先存入資產,並相信交易所會妥善看管你的資產。 資產存入交易所后就要承擔風險,因為中央化交易所往往是駭客鎖定的目標。 + + + 查看交易去中心化應用程式 + + + + +### 擴大投資組合 {#investing} + +以太坊上有一些資金管理產品可以根據你選擇的策略來擴展你的投資組合。 這是自動化作業,對所有人開放,而且不需要管理人員來分一杯羹。 + +[DeFi Pulse 指數基金 (DPI)](https://defipulse.com/blog/defi-pulse-index/) 就是個很好的例子。 此基金會自動再平衡,確保你的投資組合永遠包含市值最高的去中心化金融代幣。 你無需親力親為處理任何細節,而且可以隨時提取資金。 + + + 查看投資去中心化應用程式 + + + + +### 為構想募資 {#crowdfunding} + +以太坊是群眾募資的理想平台: + +- 潛在的資助者可以來自任何地方──以太坊及其代幣對世界上所有人開放。 +- 過程完全透明,因此籌資者可以證明已經募集了多少資金。 你甚至可以在經過一段時間後追蹤資金的運用情況。 +- 募資者可以設定自動退款條件,例如在特定截止期限前未達到最低金額時。 + + + 查看群眾募資去中心化應用程式 + + +#### 平方募資法 {#quadratic-funding} + +以太坊是一款開放原始碼軟體,迄今有許多工作是由社群資助。 這也催生了一種有趣的新型募資模式:平方募資法。 這種募資法有機會改善我們未來為各種公共產品募資的方式。 + +平方募資法可以確保獲得最多資金的是需求最高的計畫案, 換言之,就是能夠改善大多數人生活的計畫案。 其運作方式如下: + +1. 募得的資金會注入一個配比池。 +2. 啟動一輪公開募資。 +3. 參與者可以透過捐款來表達對某個計畫案的需求。 +4. 募資階段結束後,將配比池的資金分配給計畫案。 需求最高的計畫案可以從配比池獲得最多資金。 + +也就是說,假設計畫案 A 獲得了 100 筆 $1 的捐贈,計畫案 B 獲得了一筆 $10,000 的捐贈,則最終計畫案 A 獲得的資金會多於計畫案 B(具體取決於配比池的規模)。 + + + 深入了解平方募資法 + + + + +### 保險 {#insurance} + +去中心化保險的目標是使保險更加便宜、理賠更快速,同時更為透明。 隨著自動化程度的提高,保險價格可以更加低廉,理賠也可以更加快速。 用以決定索賠的資料完全透明。 + +和其他軟體一樣,以太坊產品也可能受到錯誤或入侵的威脅, 因此目前這個領域有許多保險產品將重點放在保護使用者不會損失資金上。 然而,若干專案開始涵蓋生活中可能遇到的各種大小意外保障。 Etherisc 的農作物保險就是個很好的例子,這項產品的目標在於[保護肯亞小農對抗乾旱及洪災](https://blog.etherisc.com/etherisc-teams-up-with-chainlink-to-deliver-crop-insurance-in-kenya-137e433c29dc)。 去中心化保險可以為買不起傳統保險的農民提供更實惠的保障。 + + + 查看保險去中心化應用程式 + + + + +### 彙總工具與投資組合管理工具 {#aggregators} + +有了這麼多服務,你需要找個方法來追蹤所有投資、貸款和交易。 目前有許多產品可以幫助你集中協調所有去中心化金融活動。 這就是去中心化金融開放架構的魅力所在。 團隊可以建立介面供你檢視各產品的餘額並使用其功能。 深入探索去中心化金融之際,你會發現這種工具極為實用。 + + + 查看投資組合去中心化應用程式 + + + + +## 去中心化金融如何運作? {#how-defi-works} + +去中心化金融使用加密貨幣及智慧型合約來提供服務,不需透過中間機構。 在今日的金融體系下,金融機構是交易的保證人。 你的資金是透過金融機構流通,因此賦予了這些機構巨大的權利。 此外,世界上還有數十億人甚至無法使用銀行帳戶。 + +在去中心化金融中,智慧型合約在交易中取代了的金融機構。 智慧型合約是一種以太坊帳戶,可以持有資金並根據特定條件發送/退還資金。 智慧型合約上線後就沒有人可以篡改,它會永遠依照設定的方式運作。 + +一份用來發放津貼或零用錢的合約可以設定為每週五從 A 帳戶匯款至 B 帳戶。 只要 A 帳戶還有所需的資金,合約就會持續執行。 沒有人能篡改合約,將 C 帳戶設為收款人藉以竊取資金。 + +合約也會公開,供所有人檢查及審核。 這意味著不良合約通常很快就會受到社群監控。 + +確實,這也意味著目前需要仰賴以太坊社群中能閲讀程式碼的更為精通技術的成員。 以開放原始碼為基礎的社群會約束開發者,但這種需求會隨著時間而趨緩,因為智慧型合約會變得越來越容易閲讀,同時也有其他可以證明程式碼可信度的方法誕生。 + +## 以太坊及去中心化金融 {#ethereum-and-defi} + +以太坊為去中心化金融提供了良好的基礎,原因包括: + +- 以太坊或部署在以太坊上的智慧型合約不屬於任何人所有──這讓所有人都有機會使用去中心化金融, 也意味著沒有人可以變更規則。 +- 所有去中心化金融產品都使用著相同的語言:以太坊。 這意味著許多產品可以合作無間地共同運作。 你可以在某個平台上出借代幣,然後透過完全不同的應用程式,在不同的市場中兌換帶有利息的代幣。 這就像可以將銀行的忠誠度點數兌現。 +- 代幣和加密貨幣全都建立在以太坊這個共享帳本上──追蹤交易和所有權全都交給以太坊處理。 +- 以太坊可以實現完全的金融自由──大多數產品不會保管你的資金,控制權完全操之在己。 + +你可以把去中心化金融想成好幾層: + +1. 區塊鏈:以太坊包含了交易記錄和帳戶狀態。 +2. 資產:[以太幣](/eth/)及其他代幣(貨幣)。 +3. 協定:提供功能的[智慧型合約](/glossary/#smart-contract),例如實現去中心化資產借貸的服務。 +4. [應用程式](/dapps/):我們用以管理及存取協定的產品。 + +注意:很多去中心化金融使用 [ERC-20 標準](/glossary/#erc-20)。 去中心化金融應用程式會使用一種稱為包裝以太幣(WETH) 的以太幣包裝程式。 [了解更多關於包裝以太幣的資訊](/wrapped-eth)。 + +## 建構去中心化金融 {#build-defi} + +去中心化金融是一場開放原始碼運動。 去中心化金融協議和應用程式都是開放的,你可以自由檢視、分叉並進行各種創新。 因為採用分層堆疊結構(共享相同的基礎區塊鏈及資產),你可以結合和配對不同協定,開啟獨特的機會組合。 + + + 關於建構去中心化應用程式 + + +## 了解更多 {#further-reading} + +### 去中心化金融資料 {#defi-data} + +- [DeFi Prime](https://defiprime.com/) +- [DeFi Llama](https://defillama.com/) + +### 去中心化金融文章 {#defi-articles} + +- [去中心化金融新手指南](https://blog.coinbase.com/a-beginners-guide-to-decentralized-finance-defi-574c68ff43c4) – _Sid Coelho-Prabhu,2020 年 1 月 6 日_ + +### 影片 {#videos} + +- [Finematics - 去中心化金融教育](https://finematics.com/) – _關於去中心化金融的影片_ +- [The Defiant](https://www.youtube.com/playlist?list=PLaDcID4s1KronHMKojfjwiHL0DdQEPDcq) - _去中心化金融基本知識:在這個偶爾讓人感到困惑的領域裡邁出第一步,你所需要知道的一切。_ +- [加密貨幣白板講解](https://youtu.be/17QRFlml4pA) _- 何謂去中心化金融?_ + +### 社群 {#communities} + +- [DeFi Llama Discord 伺服器](https://discord.defillama.com/) +- [DeFi Pulse Discord 伺服器](https://discord.gg/Gx4TCTk) diff --git a/public/content/translations/zh-tw/06) Use Cases/smart-contracts/index.md b/public/content/translations/zh-tw/06) Use Cases/smart-contracts/index.md new file mode 100644 index 00000000000..aa311811493 --- /dev/null +++ b/public/content/translations/zh-tw/06) Use Cases/smart-contracts/index.md @@ -0,0 +1,82 @@ +--- +title: 智慧型合約 +description: 智慧型合約的非技術性簡介 +lang: zh-tw +--- + +# 智慧型合約簡介 {#introduction-to-smart-contracts} + +智慧型合約是以太坊應用程式層的基本構成要素。 它們是一種儲存在[區塊鏈](/glossary/#blockchain)上的電腦程式,會遵守「如果某事發生,則執行某程式」的邏輯,且保證會依照程式碼定義好的規則執行,智慧型合約一經建立則無法變更。 + +Nick Szabo 率先提出「智慧型合約」一詞。 他在 1994 年撰寫了[這個概念](https://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/smart.contracts.html),並在 1996 年撰寫了[《探索智慧型合約可以做什麼》](https://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/smart_contracts_2.html)。 + +Szabo 設想了一種數位市場,無需可信的中介,即能透過自動化、[加密安全](/glossary/#cryptography)的流程實現交易和業務功能。 以太坊上的智慧型合約讓此一願景付諸實踐。 + +觀看 Finematics 講解智慧型合約: + + + +## 傳統合約內的信任 {#trust-and-contracts} + +傳統合約最大的問題之一是需要可信的個人來監督合約執行結果。 + +例如: + +Alice 和 Bob 進行一場自行車比賽。 Alice 和 Bob 打賭 10 美金,賭她會鸁。 而 Bob 堅信自己會鸁得比賽,因此同意打賭。 結果,Alice 把 Bob 遠遠抛在身後,她顯然鸁了。 但 Bob 拒絕支付賭注,聲稱 Alice 一定是做弊。 + +這個搞笑的範例說明了非智慧型協議會發生的問題。 即使已符合協議的條件(即,你是比賽的獲勝者),你還得相信對方會履行協議(也就是支付賭注)。 + +## 數位販賣機 {#vending-machine} + +用簡單的比喻來說,智慧型合約就像一台自動販賣機,只要提供特定的輸入,就保證會得到預先設定好的輸出。 + +- 你選擇一個商品 +- 販賣機顯示價格 +- 你付款給販賣機 +- 販賣機確認你是否投入正確的金額 +- 自動販賣機掉出你要的商品 + +自動販賣機只在所有要求都符合時,才會掉出你想要的商品。 如果你沒有選擇商品或是投入足額的錢,自動販賣機便不會掉出你要的商品。 + +## 自動執行 {#automation} + +智慧型合約的主要好處在於當特定條件成立時,它便會確定執行非模糊的程式碼。 你不需要等真人來詮釋或協調結果。 因此無需可信的中介。 + +例如,你可以撰寫為孩子代管資金的智慧型合約,讓他們過了特定日期後才能提領該資金。 如果他們想在到期日前提領資金,智慧型合約便不會執行。 你也可以撰寫一份智慧型合約,當你付錢給汽車經銷商後,合約便會自動發給你一張數位版的車輛所有權證明。 + +## 可預測的結果 {#predictability} + +傳統合約的模糊之處在於它們有賴於真人詮釋和履約。 舉例來說,兩名法官可能會對同一張合約保持不同見解,這就造成判決不一致,繼而產生不同結果。 智慧型合約消除了這種可能性。 相反地,智慧型合約完全依合約程式碼內所寫條件執行。 完全的意思是指,只要提供相同的條件,智慧型合約就會產生相同的結果。 + +## 公開的記錄 {#public-record} + +智慧型合約對於審計和追蹤也非常有用。 由於以太坊的智慧型合約寫在公共區塊鏈上,因此任何人都能立即追蹤資產的轉移和其他相關資訊。 舉例來說,你可以查閱某人是否把錢轉到你的地址了。 + +## 隱私保護 {#privacy-protection} + +智慧型合約也可以保護你的隱私權。 由於以太坊是匿名網路(你進行的交易公開綁定唯一的加密地址,而非綁定個人身分),因而可以保護隱私不受監視。 + +## 公開可見的條款 {#visible-terms} + +最後,如同傳統合約,你可以在簽名同意前檢查智慧型合約裡的內容,或與合約互動。 智慧型合約的透明度擔保每個人都可以審查它。 + +## 智慧型合約使用案例 {#use-cases} + +基本上,智慧型合約可以做到所有電腦程式都能做到的事。 + +它們可以執行計算、建立貨幣、儲存資料、鑄造[非同質化代幣](/glossary/#nft)、傳送通訊內容,甚至產生圖形。 以下是一些真實世界流行的範例: + +- [穩定幣](/stablecoins/) +- [建立和分發唯一的數位資產](/nft/) +- [自動、開放的貨幣交易所](/get-eth/#dex) +- [去中心化遊戲](/dapps/?category=gaming#explore) +- [自動理賠的保單](https://etherisc.com/) +- [讓人們建立自訂、可互相流通的貨幣的標準](/developers/docs/standards/tokens/) + +## 了解更多 {#further-reading} + +- [智慧型合約將如何改變世界](https://www.youtube.com/watch?v=pA6CGuXEKtQ) +- [智慧型合約:將取代律師的區塊鏈技術](https://blockgeeks.com/guides/smart-contracts/) +- [適用於開發者的智慧型合約](/developers/docs/smart-contracts/) +- [學習撰寫智慧型合約](/developers/learning-tools/) +- [精通以太坊 ─ 智慧型合約是什麼?](https://github.com/ethereumbook/ethereumbook/blob/develop/07smart-contracts-solidity.asciidoc#what-is-a-smart-contract) diff --git a/public/content/translations/zh-tw/06) Use Cases/web3/index.md b/public/content/translations/zh-tw/06) Use Cases/web3/index.md new file mode 100644 index 00000000000..9d07ba0aac5 --- /dev/null +++ b/public/content/translations/zh-tw/06) Use Cases/web3/index.md @@ -0,0 +1,157 @@ +--- +title: 什麼是 Web3?它為什麼很重要? +description: Web3 簡介 - 全球資訊網再進化,以及它為何很重要。 +lang: zh-tw +--- + +# Web3 簡介 {#introduction} + +中心化在過去已幫助數十億人進入全球資訊網,並於其上建立穩定而強大的基礎設施。 於此同時,只有少數中心化實體支配著大部分全球資訊網,能夠單方面決定什麼應該允許,什麼不該允許。 + +Web3 就是這個困境的出路。 Web3 不是由大型科技公司壟斷的網路,它接納去中心化,並由其使用者建立、操作和擁有。 Web3 將權力交予個人而非公司手中。 討論 Web3 之前,先來看看我們是如何走到這一步。 + + + +## 早期的網路 {#early-internet} + +大多數人認為網路是現代生活的穩定支柱,發明後便一直存在至今。 然而,大多數人今日所知道的網路,與最初想像的相差甚遠。 將網路的簡單歷史粗略分成 web 1.0 和 web 2.0 時期,有助於更加理解這點。 + +### Web 1.0:唯讀 (1990-2004) {#web1} + +1989 年,日內瓦歐洲核子研究組織 (CERN) 的 Tim Berners-Lee 忙於協定的開發,即後來的全球資訊網 (WWW)。 他的想法是? 建立開放、去中心化的協定,使人能從全球任何一處分享資訊。 + +Berners-Lee 的發明大約在 1990 年到 2004 年之間誕生,現今稱為「Web 1.0」。 Web 1.0 原先主要是公司擁有的靜態網站,使用者之間幾乎零互動,個人很少產生內容,導致第一代網際網路被稱為唯讀網路。 + +![用戶端-伺服器架構,代表 Web 1.0](./web1.png) + +### Web 2.0:讀寫(2004 - 至今) {#web2} + +隨著社交媒體平台的出現,2004 年開始進入 Web 2.0時期。 網路不再是唯讀,演變成讀寫式。 公司不向使用者提供內容,開始提供平台,以分享使用者產生的內容,並參與使用者間的互動。 隨著上網的人數增加,少數頂級公司開始控管不成比例的網路流量和網路上所產生的價值。 Web 2.0 也催生了廣告驅動的收入模式。 使用者雖能建立內容,但並不擁有內容,或在內容貨幣化之後從中受益。 + +![用戶端-伺服器架構,代表 Web 2.0](./web2.png) + + + +## Web 3.0:讀-寫-擁有 {#web3} + +以太坊推出後不久,[以太坊](/what-is-ethereum/)聯合創辦人 Gavin Wood 在 2014 年創造「Web 3.0」一詞。 許多早期的加密貨幣採用者認為,網路要求的信任度太高,Gavin 以言語表達出此問題的解決之道: 人們今日所知和使用的網路層面,大多仰賴於對少數私營公司的信任,信任他們以公眾的最大利益行事。 + +![去中心化節點架構,代表 Web3](./web3.png) + +### 什麼是Web3 ? {#what-is-web3} + +對於展望更美好的新網際網路,Web3 一詞包羅萬象。 Web3 的核心是利用區塊鏈、加密貨幣和非同質化代幣,以所有權的形式將權力交還給使用者。 [推特 2020 年一篇貼文](https://twitter.com/himgajria/status/1266415636789334016)說得最好:Web1 為唯讀,Web2 為讀寫,Web3 為讀-寫-擁有。 + +#### Web3 的核心思想 {#core-ideas} + +要嚴格定義 Web3 是什麼雖然很困難,但 Web3 的建置有一些核心指導原則。 + +- **Web3 為去中心化**:並不是由集中化的實體控制和擁有大片網際網路,所有權分散在其建構者和使用者之間。 +- **Web3 無需許可**:參與 Web3 人人平等,沒有人被排除在外。 +- **Web3 有原生支付方式:**其使用加密貨幣在線上消費和匯款,而不是依賴銀行和付款處理器過時的基礎設施。 +- **Web3 為去信任化**:使用激勵和經濟機制來運行,而不是依賴受信任的第三方。 + +### 為什麼 Web3 很重要? {#why-is-web3-important} + +Web3 的殺手級功能並非相互隔絕,也不適合分門別類,但為簡單起見,我們嘗試做出區隔,以便更容易理解。 + +#### 所有權 {#ownership} + +Web3 以前所未有的方式讓你擁有數位資產的所有權。 例如,假設你正在玩 Web2 的遊戲。 如果購買遊戲內的物品,會直接與帳戶綁定。 如果遊戲創作者刪除你的帳戶,這些物品就都沒了。 或者,如果停止玩那個遊戲,對遊戲內物品所投資的價值將會遺失。 + +Web3 允許透過[非同質化代幣 (NFT) ](/glossary/#nft)實現直接所有權。 沒有人有權剝奪你的所有權,即使是遊戲的創作者亦然。 而且,如果不再玩遊戲,你可以在公開市場上出售或交易遊戲內的物品,並收回其價值。 + + +
深入了解非同質化代幣
+ + 更多非同質化代幣相關資訊 + +
+ +#### 抗審查性 {#censorship-resistance} + +平台和內容創作者之間的權力動態嚴重失衡。 + +OnlyFans 是一個由使用者產生的成人內容網站,內容創作者超過 100 萬名,其中許多人使用該平台作為他們的主要收入來源。 2021 年 8 月,OnlyFans 宣布了禁止色情內容的計畫。 此公告在平台上的創作者中引發了憤怒,他們認為他們雖幫助建立平台,但收入被剝奪。 經強烈反對後,該決定很快被推翻。 儘管創作者贏得了這場仗,但這突顯了第二代網際網路創作者的一個問題:如果你離開平台,聲譽和後續累積的成果都沒了。 + +在 Web3 上,你的資料位於區塊鏈上。 當你決定離開某個平台,你的聲譽能隨你而行,投入另一個更清楚符合你價值的介面。 + +Web 2.0 要求內容製作者相信平台不會更改規則,但抗審查是 Web3 平台的原生特性。 + +#### 去中心化自治組織(DAOs) {#daos} + +除了在 Web3 中擁有個人資料外,你還能利用類似公司股票的代幣,來擁有該平台,將平台作為一個集合體。 去中心化自治組織讓你能協調平台的去中心化所有權,並對其未來做出相關決策。 + +從技術層面定義,去中心化自治組織是一種事先商定的[智慧型合約](/glossary/#smart-contract),此合約透過資源池(代幣)自動執行去中心化決策。 擁有代幣的使用者,對資源的使用方式進行投票,而程式碼會自動執行投票結果。 + +然而,許多 Web3 社群都被定義為去中心化自治組織。 這些社群都透過程式碼實現了不同程度的去中心化和自動化。 目前,我們仍在探索去中心化自治組織是什麼,以及其未來可能如何發展。 + + +
了解更多關於去中心化自治組織
+ + 更多關於DAOs + +
+ +### 身份 {#identity} + +過去是為每個使用的平台建立一個帳戶。 例如,你可能有一個 Twitter 帳戶、一個 YouTube 帳戶和一個 Reddit 帳戶。 想更改顯示名稱或設定檔圖片? 你必須在每個帳戶中執行此操作。 在某些情況下,你可以使用社交登入,但這帶來一個熟悉的問題,亦即審查。 只要按一下,這些平台就能完全斷絕你原有的網路生活。 更糟的是,許多平台要求向其交託個人身份資訊,方能建立帳戶。 + +Web3 透過以太坊地址及[以太坊名稱服務 (ENS) ](/glossary/#ens)個人檔案讓你控制你的數位身份,以解決這些問題。 使用以太坊地址能跨平台提供單一登入,而且安全、抗審查且匿名。 + +### 原生支付 {#native-payments} + +Web2 的付款基礎設施仰賴於銀行和付款處理器,不包含那些沒有銀行帳戶的人,或碰巧住在非正確國家境內的人。 Web3 使用[以太幣](/glossary/#ether)等代幣直接在瀏覽器中匯款,不需要受信任的第三方。 + + + 更多詳情關於以太(以太幣) + + +## Web3 限制 {#web3-limitations} + +儘管目前形式的 Web3 有許多好處,但該生態系統仍然必須解決許多限制,才能蓬勃發展。 + +### 可存取性 {#accessibility} + +已有許多重要的 Web3 功能,可供任何人免費使用,例如以太坊登入功能。 但是,交易的相對成本仍然讓許多人望而卻步。 因交易費高昂,Web3 不太可能在較不富裕的發展中國家使用。 在以太坊上,這些挑戰正在透過[開發藍圖](/roadmap/)和[二層網路擴容方案](/glossary/#layer-2)加以解決。 該技術已經準備就緒,但我們需要在二層網路上達到更高的採用率,使每個人都能存取 Web3。 + +### 使用者體驗 {#user-experience} + +目前使用 Web3 的技術門檻太高了。 使用者必須理解安全疑慮、了解複雜的技術文件,並瀏覽不直觀的使用者介面。 尤其,雖然[錢包提供商](/wallets/find-wallet/)正努力解決這個問題,但在 Web3 整體獲得採用之前,還需要取得更多進展。 + +### 教育 {#education} + +Web3 引入了新的典範,這些典範需學習與 Web2 所用不同的心理模型。 隨著 Web1.0 在 1990 年代後期越來越流行,類似的教育運動於焉而生。網路的擁護者使用一系列教育技術來教育大眾,舉凡簡單的比喻(資訊高速公路、瀏覽器、上網),甚至是[電視廣播](https://www.youtube.com/watch?v=SzQLI7BxfYI)。 Web3 並不難,但與眾不同。 利用教育計畫讓 Web2 的使用者,了解這些Web3 典範,對其成功至關重要。 + +Ethereum.org 透過其[翻譯計畫](/contributing/translation-program/)為 Web3 教育做出貢獻,致力將重要的以太坊內容翻譯成盡可能越多語言。 + +### 中心化基礎設施 {#centralized-infrastructure} + +Web3 生態系統很年輕且發展迅速。 因此,其目前主要依賴於中心化基礎設施(GitHub、Twitter、Discord 等)。 許多 Web3 公司目前爭相填補這些空缺,但建立優質可靠的基礎架構需要時間。 + +## 去中心化的未來 {#decentralized-future} + +Web3 是一個年輕且不斷發展的生態系統。 Gavin Wood 在 2014 年創造了這個詞,但許多這些想法直到最近才成真。 光是去年,對於加密貨幣、二層網路擴容解決方案的改進,新管理體系形式的大規模實驗以及數位身份的革命,人們的興趣便大幅增加。 + +使用 Web3 打造更美好的網路才正開始起步,但隨著我們持續改善支援性基礎設施,網路的未來看起來一片光明。 + +## 我如何參與 {#get-involved} + +- [取得錢包](/wallets/) +- [尋找社群](/community/) +- [探索 Web3 應用程式](/dapps/) +- [參與 DAO](/dao/) +- [在 Web3 上構建](/developers/) + +## 衍生閱讀 {#further-reading} + +Web3 並未嚴格定義。 不同社群參與者對它有不同的看法。 請見: + +- [什麼是 Web3? 明日去中心化網際網路的相關解說](https://www.freecodecamp.org/news/what-is-web3/) – _Nader Dabit_ +- [搞懂 Web 3](https://medium.com/l4-media/making-sense-of-web-3-c1a9e74dcae) – _Josh Stark_ +- [為什麼 Web 3 很重要](https://future.a16z.com/why-web3-matters/) — _Chris Dixon_ +- [為什麼去中心化很重要](https://onezero.medium.com/why-decentralization-matters-5e3f79f7638e) - _Chris Dixon_ +- [Web 3 的景況](https://a16z.com/wp-content/uploads/2021/10/The-web3-Readlng-List.pdf) – _a16z_ +- [Web 3 的辯論](https://www.notboring.co/p/the-web3-debate?s=r) – _Packy McCormick_ + + diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/dvt/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/dvt/index.md new file mode 100644 index 00000000000..5d9eeb59a15 --- /dev/null +++ b/public/content/translations/zh-tw/07) Staking Pages/staking/dvt/index.md @@ -0,0 +1,91 @@ +--- +title: 分散式驗證者技術 +description: 分散式驗證者技術使以太坊驗證者可以由多方分散式執行。 +lang: zh-tw +--- + +# 分散式驗證者技術 {#distributed-validator-technology} + +分散式驗證者技術 (DVT) 是一種驗證者安全保障方法,可將金鑰管理和簽名職責分散到多方,從而減少單點故障並提高驗證者的彈性。 + +它將用於保護驗證者的**私密金鑰分散**至組成一個「叢集」的**許多計算機**,以實現安全保障目的。 此方法的好處在於它讓攻擊者非常難以存取金鑰,因為金鑰並沒有完整儲存在任何一台機器上。 它還允許某些節點離線,因為必要的簽名可以由每個叢集中的一部分機器完成。 這減少了網路的單點故障,並使整個驗證者群更加可靠。 + +![示意圖展示單個驗證者金鑰如何拆分成金鑰分片,並分散到多個具有不同組件的節點。](./dvt-cluster.png) + +## 我們為什麼需要分散式驗證者技術? {#why-do-we-need-dvt} + +### 安全性 {#security} + +驗證者生成兩對公私金鑰:驗證者金鑰用於參與共識,提款金鑰則用於存取資金。 雖然驗證者可以保護冷儲存中的提款金鑰,但驗證者金鑰必須 24 小時連網。 如果驗證者私密金鑰外洩,攻擊者可以控制驗證者,從而可能導致質押者的以太幣遭罰沒或遺失。 分散式驗證者技術可以幫助降低此風險。 詳情如下: + +透過分散式驗證者技術,質押者可以參與質押,同時冷儲存驗證者私密金鑰。 這透過加密原始的完整驗證者金鑰,然後將其分割為金鑰分片來實現。 金鑰分片儲存在線上並分發給多個節點,使驗證者可以進行分散式操作。 這是可以實現的,因為以太坊驗證者使用可附加的 BLS 簽名,這意味著可以透過將其組成部分相加以重建完整金鑰。 這使質押者能夠安全地離線保存完整、原始的「主要」驗證者金鑰。 + +### 無單點錯誤 {#no-single-point-of-failure} + +當驗證者分佈在多個營運商和多台機器上時,它可以承受個別硬體和軟體故障而不會離線。 透過在叢集中的節點上使用不同的硬體和軟體設定,可降低故障風險。 這種彈性不適用於單節點驗證者設定 - 它來自分散式驗證者技術層。 + +如果叢集中一台機器的一個元件發生故障(例如,如果驗證器叢集中有四個營運商,其中一個使用有錯誤的特定用戶端),其他營運商將確保驗證器繼續運行。 + +### 去中心化 {#decentralization} + +以太坊的理想場景是擁有盡可能多的獨立運行驗證者。 然而,一些質押提供商已經變得非常受歡迎,並且佔網路上質押以太幣總量的很大部分。 分散式驗證者技術允許這些營運商存在,同時保持質押的去中心化。 這是因為每個驗證者的金鑰分散在許多機器上,驗證者需要更大程度的勾結才能變為惡意。 + +如果沒有分散式驗證者技術,對質押提供商來說,所有驗證者只支援一到二種用戶端設定很容易,但這會增大用戶端錯誤的影響。 分散式驗證者技術可用於在多種用戶端設定和不同硬體之間分散風險,通過多樣性創造彈性。 + +**分散式驗證者技術為以太坊提供了以下好處:** + +1. 以太坊權益證明共識的**去中心化** +2. 確保網路的**活躍性** +3. 建立驗證者**容錯性** +4. **信任最小化**驗證者操作 +5. **最小化罰沒**和停機風險 +6. **提高多樣性**(用戶端、數據中心、位置、監管等) +7. **增強**驗證者金鑰管理的安全性 + +## 分散式驗證者技術如何運作? {#how-does-dvt-work} + +分散式驗證者技術解決方案包含以下組成部分: + +- **[Shamir 私鑰分享算法](https://medium.com/@keylesstech/a-beginners-guide-to-shamir-s-secret-sharing-e864efbf3648)** - 驗證者使用 [BLS 金鑰](https://en.wikipedia.org/wiki/BLS_digital_signature) 各 BLS「金鑰分片」(「金鑰分片」)可以組合成一個聚合金鑰(簽名)。 在分散式驗證者技術中,驗證者的私密金鑰是叢集中每個營運商的組合 BLS 簽名。 +- **[閾值簽名方案](https://medium.com/nethermind-eth/threshold-signature-schemes-36f40bc42aca)** - 確定簽名職責所需的單個金鑰分片數,例如:4 個中需要 3 個。 +- **[分佈式金鑰生成 (DKG) 協議](https://medium.com/toruslabs/what-distributed-key-generation-is-866adc79620)** - 一種加密過程,用於生成金鑰分片,並將現有或新的驗證者金鑰分片分發給叢集中的節點。 +- **[多方計算 (MPC)](https://messari.io/report/applying-multiparty-computation-to-the-world-of-blockchains)** - 完整的驗證者金鑰使用多方計算秘密生成。 任何單獨營運商都不知道完整的金鑰—他們只知道自己的部分(他們的「分片」)。 +- **共識協議** - 共識協議選擇一個節點作為區塊提交者。 它們與叢集中的其他節點共享該區塊,這些節點將其金鑰分片加入聚合簽名中。 聚合了足夠的金鑰分片後,就將該區塊提交至以太坊。 + +分散式驗證者有內建的容錯機制,即使某些單獨節點離線,仍能持續運行。 這表示即使叢集中某些節點為惡意或怠惰,叢集也具有彈性。 + +## 分散式驗證者技術使用案例 {#dvt-use-cases} + +分散式驗證者技術對廣大的質押產業有重大影響: + +### 單獨質押者 {#solo-stakers} + +藉由分散你的驗證者金鑰至各遠端節點,同時使完整金鑰保持完全離線,分散式驗證者技術也能實現非託管式質押。 這表示居家質押者並不需要額外硬體支出,而分散金鑰分片可以強化他們對抗潛在安全攻擊的能力。 + +### 質押即服務 (SaaS) {#saas} + +管理許多驗證者的營運商(如質押池及機構質押者)可使用分散式驗證者技術降低風險。 藉由分散基礎設施,營運商可以對營運增加冗餘,並提高所用硬體類型的多樣性。 + +分散式驗證者技術將金鑰管理責任分散至多個節點,這也表示部分營運成本可被分攤。 分散式驗證者技術還可以降低質押提供者的操作風險及保險成本。 + +### 質押池 {#staking-pools} + +對於標準驗證者設置,質押池與流動性質押提供者被迫對單一營運商採取不同的信任等級,因為整個質押池中的盈虧採用社會化分配。 他們還依賴營運商保護簽名金鑰,因為到目前為止,他們沒有其他選擇。 + +儘管一般會盡力將質押分散到多個營運商以降低風險,每位營運商仍管理很大一部分質押。 依賴單一營運商可能會造成重大風險,如:表現不佳、停機、受到入侵或惡意行為。 + +藉由分散式驗證者技術,顯著降低了需要對營運商應有的信任。 **質押池讓營運商擁有質押,而無需託管驗證者金鑰**(因僅使用金鑰分片)。 分散式驗證者技術還允許將質押分散至更多營運商(例如:讓這些驗證者由多位營運商共同運行,而不是讓單個營運商管理 1000 個驗證者)。 多樣的營運商設置可確保當一個營運商故障時,其他營運商仍可驗證交易。 這提高了冗余和多樣性,從而提升了性能和彈性,同時最大限度地提高了酬勞。 + +最小化單一營運信任的另一個好處是,質押池可以促進更開放的營運商參與,且無需許可。 如此一來,服務商可以使用精選且無需許可的營運商(例如,將家庭質押者或更多小型質押者與大型質押者配對)來降低其風險,並支援以太坊的去中心化。 + +## 使用分散式驗證者技術的潛在弊端 {#potential-drawbacks-of-using-dvt} + +- **額外組成部分** - 引入分散式驗證者技術節點會增加一個部分,該部分可能存在故障或漏洞。 要緩解此問題,一種方法是爭取實現多個分散式驗證者技術節點,也就是多個分散式驗證者技術用戶端(類似於共識層和執行層有多個用戶端的情況)。 +- **營運成本** - 由於分散式驗證者技術將驗證者分佈至多個參與方,因此需要更多的節點進行操作,而不是只有一個節點,這就增加了營運成本。 +- **可能會增加延遲** - 因為分散式驗證者技術利用共識協議在多個運行驗證者的節點之間達成共識,這可能會增加延遲。 + +## 延伸閱讀 {#further-reading} + +- [以太坊分散式驗證者規範(高級)](https://github.com/ethereum/distributed-validator-specs) +- [以太坊分散式驗證者技術規範](https://github.com/ethereum/distributed-validator-specs/tree/dev/src/dvspec) +- [Shamir 私鑰分享演示應用程式](https://iancoleman.io/shamir/) diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/pools/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/pools/index.md new file mode 100644 index 00000000000..6e39735cb6c --- /dev/null +++ b/public/content/translations/zh-tw/07) Staking Pages/staking/pools/index.md @@ -0,0 +1,86 @@ +--- +title: 聯合質押 +description: 關於如何開始聯合以太幣質押的概覽 +lang: zh-tw +template: staking +emoji: ":money_with_wings:" +image: /images/staking/leslie-pool.png +alt: 萊斯利犀牛在池中游泳 +sidebarDepth: 2 +summaryPoints: + - 與其他人一起質押任意數量的以太幣並獲得酬勞 + - 跳過困難的部分,將驗證者運作委託給第三方 + - 在你自己的錢包中持有質押代幣 +--- + +## 什麼是質押礦池 {#what-are-staking-pools} + +質押礦池是一種協作方式,允許擁有少量以太幣的人能夠滿足 32 個以太幣此一條件,以啟動一組驗證者金鑰。 由於協定本身並不支援聯合質押這項功能,因此需要單獨建立解決方案來滿足此需求。 + +一些礦池使用智慧型合約運作,可以將資金存入合約,由合約以去信任的方式管理和追蹤你的質押品,並向你發放相應價值的代幣。 其他礦池可能不涉及智慧型合約,而是在鏈外調解。 + +## 為什麼要使用礦池進行質押 {#why-stake-with-a-pool} + +除了我們在[質押簡介](/staking/)中描述的好處之外,聯合質押還具有許多獨特的好處。 + + + + + + + + + +## 需要考慮的事項 {#what-to-consider} + +以太坊協定本身並不支援聯合質押或委託質押,但考量到想要質押的以太幣不足 32 個的使用者的需求,越來越多的解決方案已經開始建立。 + +每個質押池和工具,或者它們所用的智慧型合約,均由不同的團隊建立,因此有著各自的好處和風險。 質押池能夠將使用者的以太幣換成一種相應的以太幣質押代幣。 此代幣非常有用,因為它允許使用者將任意數量的以太幣兌換成等值的有收益代幣(反之亦然),流動性質押衍生品由質押在去中心化交易所的以太幣產生收益,即使實際的以太幣質押在共識層上。 這意味著可以在有收益的質押以太幣產品和「原始以太幣」之間快速、簡單地切換,且適用的以太幣數不僅限於 32 的倍數。 + +然而,這些質押以太幣代幣往往會產生類卡特爾的行為,大量質押的以太幣最終會受到少數中心化組織的控制,而不是分散到大量獨立個體中。 這為審查或價值提取創造了條件。 質押的黃金標準應始終是個人盡可能在自己的硬體上運行驗證者。 + +[更多關於質押代幣風險的資訊](https://notes.ethereum.org/@djrtwo/risks-of-lsd)。 + +以下使用屬性指標表示列出的質押礦池可能具有的顯著優勢或劣勢。 在你選擇要加入的礦池時,請將此章節的内容當作參考,瞭解這些屬性的具體定義。 + + + +## 探索質押礦池 {#explore-staking-pools} + +有多種方案可以幫你完成設定。 請運用上述指標來幫助你了解以下工具。 + + + + + +請注意,仔細選擇具有[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity/)的服務相當重要,因為它可以提高網路的安全性並降低你的風險。 如果某服務可以證明它會限制主流使用者端的使用,則稱它具有「執行層使用者端多樣性」「共識層使用者端多樣性」。 + +關於我們遺漏的質押工具,你有要推薦的嗎? 請參閱我們的[產品刊登政策](/contributing/adding-staking-products/),如果合適,請提交以供審核。 + +## 常見問題 {#faq} + + +一般來說,ERC-20 質押代幣會發放給質押者,代表他們質押的以太幣以及質押獎勵的價值。 請記住,不同的礦池將通過略有不同的方法向其使用者分配質押酬勞,但主旨是共通的。 + + + +就是現在! 上海/卡佩拉升級發生於 2023 年 4 月,可實現質押提款。 支持質押池的驗證者帳戶現在可以退出並將以太幣提取到他們指定的提款地址。 這樣你可以將質押的份額兌換為基礎以太幣。 有關此功能的具體操作方式,請與你的提供商確認。 + +或者,使用 ERC-20 質押代幣的質押池允許使用者在公開市場上交易該代幣,讓你可以出售質押位置,這相當於允許你「提款」,但無需實際從質押合約中移除以太幣。 + +更多質押提款相關資訊 + + + +這些聯合質押選項和中心化交易所之間有許多相似之處,例如能夠質押少量以太幣並將它們捆綁在一起以啟動驗證者。 + +與中心化交易所不同的是,許多其他聯合質押方案採用的是智慧型合約和/或質押代幣,通常是 ERC-20 代幣。這些代幣可以保存在你自己的錢包中,並能像任何其他代幣一樣正常買賣。 透過讓你控制自己的代幣,這為你提供了一層主權和安全性,但這並不代表你能夠直接控制在後台代表你執行證明的驗證者用戶端。 + +當涉及到支持它們的節點時。一些聯合質押方案比其他方案更去中心化。 為了加強網路的健康和去中心化程度,我們始終鼓勵質押者選擇這樣的聯合質押服務:無需許可且實現節點營運商去中心化。 + + +## 延伸閱讀 {#further-reading} + +- [以太坊質押目錄](https://www.staking.directory/) - _Eridian 和 Spacesider_ +- [使用 Rocket Pool 進行質押 - 質押概覽](https://docs.rocketpool.net/guides/staking/overview.html) - _RocketPool 文件_ +- [使用 Lido 質押以太坊](https://help.lido.fi/en/collections/2947324-staking-ethereum-with-lido) - _Lido 幫助文件_ diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/saas/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/saas/index.md new file mode 100644 index 00000000000..a5c6d088f49 --- /dev/null +++ b/public/content/translations/zh-tw/07) Staking Pages/staking/saas/index.md @@ -0,0 +1,95 @@ +--- +title: 質押即服務 +description: 關於如何開始聯合以太幣質押的概覽 +lang: zh-tw +template: staking +emoji: ":money_with_wings:" +image: /images/staking/leslie-saas.png +alt: 漂浮在雲端的犀牛萊斯利。 +sidebarDepth: 2 +summaryPoints: + - 第三方節點營運商負責處理你的驗證者用戶端的運作 + - 對於擁有 32 個以太幣且不喜歡處理運行節點的複雜技術的人來說,這是一個不錯的選擇 + - 降低信任依賴,並保持你對提款金鑰的控制權 +--- + +## 什麼是質押即服務? {#what-is-staking-as-a-service} + +質押即服務(「SaaS」)代表一種質押服務,你將自己的 32 個以太幣存入驗證者,但將節點運作委託給第三方營運商。 此流程通常需要你按指引完成初始化設定,包括產生金鑰和存入資金,然後將你的簽名金鑰上傳給營運商。 這將允許該服務代表你運作你的驗證者,通常是按月收費。 + +## 為什麼需要質押服務? {#why-stake-with-a-service} + +以太坊協定本身並不支援質押委託,因此為了滿足此項需求,這類服務應運而生。 如果你有 32 個以太幣要質押,但懶得處理硬體設備,質押即服務可以讓你在賺取原生區塊酬勞的同時將困難的部分外包。 + + + + + + + + + +## 需要考慮的事項 {#what-to-consider} + +有越來越多的質押即服務供應商提供以太幣質押服務,但有各自的好處及風險。 相較於居家質押,所有質押即服務方案都需要額外的信任假設。 質押即服務可能有整合以太坊用戶端的額外程式碼,這些程式碼並不開放或無法審核。 質押即服務對於網路的去中心化也有不利影響。 根據設定,你可能無法控制你的驗證者 - 營運商可以使用你的以太幣做出不正當行為。 + +以下屬性指標可以用來衡量質押即服務供應商可能具備的顯著優勢或劣勢。 在選擇服務,展開質押之旅之際,請將本節作為參考,了解我們如何定義這些屬性。 + + + +## 探索質押服務供應商 {#saas-providers} + +以下是幾個市面上的質押即服務供應商。 請運用上述指標來了解這些服務。 + + + +### 質押即服務供應商 + + + +切記,支援[用戶端多元化](/developers/docs/nodes-and-clients/client-diversity/)極為重要,因為這可以提高網路的安全性,降低你的風險。 如果某服務可以證明它會限制主流使用者端的使用,則稱它具有「執行層使用者端多樣性」「共識層使用者端多樣性」。 + +### 金鑰產生器 + + + +關於我們遺漏的質押即服務供應商,你有要推薦的嗎? 請參閱我們的[產品刊登政策](/contributing/adding-staking-products/),如果合適,請提交以供審核。 + +## 常見問題 {#faq} + + +不同供應商的做法有所不同,但一般而言,他們都會引導你設定所需的簽名金鑰(每 32 個以太幣一個金鑰),並將這些金鑰上傳給你的供應商,以便他們代表你進行驗證。 單憑簽名金鑰無法提取、移轉或使用你的資金, 不過簽名金鑰可以用來投票形成共識,如果操作不當,可能會受到離線處罰或罰沒。 + + + +是的, 每個帳戶都包含 BLS 簽名金鑰和 BLS 提款金鑰。 為了讓驗證者證明鏈的狀態、參與同步委員會並提出區塊建議,簽名金鑰必須易於驗證者用戶端存取。 這些金鑰必須以某種形式連線至網際網路,因此本質上可視為「熱」金鑰。 這是驗證者證明區塊鏈的必要條件,因此基於安全因素,簽名金鑰與用以移轉或提取資金的金鑰是分開的。 + +BLS 提款金鑰用於簽署一次性訊息,說明應將質押酬勞和退出資金轉到哪個執行層帳戶。 廣播此訊息後,便不再需要 BLS 提款金鑰。 取而代之的是,資金提款的權力將被永久地委託至你所提供的地址。 這允許你透過自己的冷儲存設定一個安全的提款地址,最小化驗證者資金的風險,即使有他人控制你的驗證者的簽名金鑰。 + +更新提款者憑證是啟用提款的必要步驟\*。 這個過程涉及到使用你的種子助記詞生成提款金鑰。 + +請務必妥善保存這份種子助記詞,否則到時候你將無法生成提款金鑰。 + +\*首次存款時提供了提款地址的質押者不需要設定助記詞。 有關如何準備驗證者,請向你的質押即服務供應商請求支援。 + + + +2023 年 4 月的上海/卡佩拉升級中實施了質押提款。 質押者需要提供提款地址(如果初次存款時未提供),酬勞付款將每隔幾天定期自動分配。 + +驗證者還可以作為驗證者完全退出,這將解鎖剩餘的以太幣餘額以供提款。 已提供執行提款地址並完成退出流程的帳戶,提供的提款地址將在下一次驗證者掃描期間收到全部餘額。 + +更多關於提取質押代幣的資訊 + + + +使用質押即服務供應商,你會將節點的運作委託給其他人。 這伴隨著節點效能不佳的風險,這是你無法控制的。 如果你的驗證者遭到罰沒,驗證者的餘額會受到罰款,驗證者也會強制從驗證者池下架。 + +罰沒/退出流程完成後,這些資金將被轉移到分配給驗證者的提款地址。 需要提供提款地址才能啟用該功能。 提款地址可能在一開始存款時便已提供。 如果沒有,則需要使用驗證者提款金鑰來簽署說明提款地址的訊息。 如果未提供提款地址,資金將保持鎖定狀態,直到提供地址為止。 + +請聯繫各質押即服務提供商,了解關於任何擔保或保險方案的詳細訊息,以及如何提供提款地址的說明。 如果你希望完全掌控你的驗證者設定,請詳細了解如何單獨質押以太幣。 + + +## 延伸閱讀 {#further-reading} + +- [以太坊質押目錄](https://www.staking.directory/) - _Eridian 和 Spacesider_ +- [評估質押服務](https://www.attestant.io/posts/evaluating-staking-services/) - _Jim McDonald 2020_ diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/solo/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/solo/index.md new file mode 100644 index 00000000000..26aa59c6595 --- /dev/null +++ b/public/content/translations/zh-tw/07) Staking Pages/staking/solo/index.md @@ -0,0 +1,206 @@ +--- +title: 單獨質押你的以太幣 +description: 如何開始單獨質押你的以太幣概覽 +lang: zh-tw +template: staking +emoji: ":money_with_wings:" +image: /images/staking/leslie-withdrawal.png +alt: 萊斯利犀牛在她自己的電腦晶片上。 +sidebarDepth: 2 +summaryPoints: + - 直接從協定中獲得最大酬勞,以保持你的驗證者正常運作和上線 + - 執行家用硬體,親自貢獻於以太坊網路的安全和去中心化 + - 消除信任依賴,永遠不需放棄對資金金鑰的控制權 +--- + +## 什麼是單獨質押? {#what-is-solo-staking} + +單獨質押指執行一個連線至網際網路的[以太坊節點](/run-a-node/)並存入 32 個以太幣,以啟用一個[驗證者](#faq),使你能夠直接參與網路共識。 + +**單獨質押提高了以太坊網路的去中心化**,使以太坊更加無懼審查並能更可靠地抵禦攻擊。 其他質押方法可能無法以同樣的方式協助網路。 單獨質押是保護以太坊的最佳質押方案。 + +以太坊節點由執行層 (EL) 用戶端和共識層 (CL) 用戶端組成。 這類用戶端是一套共同運作的軟體加上一組有效的簽名金鑰,可驗證交易和區塊、證明正確的區塊鏈頭、匯總證明並提交區塊。 + +單獨質押者負責操作執行這類用戶端所需的硬體。 強烈建議你使用專用機器在家操作,這對網路健康非常有益。 + +單獨質押者保持驗證者的正常上線運作,即可直接從協定獲得酬勞。 + +## 為什麼需要單獨質押? {#why-stake-solo} + +單獨質押需要承擔更多責任,但可以實現對資金和質押設置的最大控制。 + + + + + + + +## 單獨質押前的注意事項 {#considerations-before-staking-solo} + +儘管我們希望每個人都可以在沒有風險的情況下進行單獨質押,但這並不現實。 在選擇單獨質押以太幣之前,你必須留意一些實際而嚴肅的考量因素。 + + + +在操作自己的節點時,你應該花一些時間學習如何使用你選擇的軟體。 包括閱讀相關文件,以及了解這些開發團隊的溝通管道。 + +越是了解你在執行的軟體以及權益證明的運作原理,你作為質押者的風險就越小,也越容易解決節點運作過程中可能出現的問題。 + + + +設定節點仍然需要對電腦有一定程度的掌握,不過隨著時間經過,新工具會越來越容易使用。 了解命令列介面會有幫助,但不是必要的。 + +設定節點也需要設置非常基本的硬體,以及對最低建議規格有一些了解。 + + + +就像以私密金鑰保護以太坊地址一樣,你還需要專門為驗證者生成金鑰。 你必須了解如何確保你的種子助記詞或私密金鑰的安全。{' '} + +以太坊安全及詐騙預防 + + + +硬體偶爾會出現故障,網路連線會中斷,用戶端軟體偶爾也需要升級。 節點維護是不可避免的,你偶爾需要留意。 最好能隨時掌握預期的網路升級或其他重要的用戶端升級。 + + + +你的酬勞與你的驗證者上線並提供正確證明的時間成正比。 停機會導致一定程度的罰金,這和有多少其他驗證者同時離線成正比,但不會導致罰沒。 頻寬也很重要,因為如果沒有及時收到證明,酬勞就會減少。 要求可能有所差異,但建議上傳和下載速率至少都要有 10 Mb/s。 + + + +與離線的怠工罰金不同,罰沒是針對惡意犯罪的更嚴重的懲罰。 如果同一個時間只在一台電腦上載入金鑰來執行非主流用戶端,遭到罰沒的風險微乎其微。 話雖如此,所有質押者都必須意識到罰沒的風險。 + +關於罰沒和驗證者生命週期的更多資訊 + + + + + +## 運作原理 {#how-it-works} + + + +在活躍期間,你將獲得以太幣獎勵,這些獎勵將定期存入你的提款地址。 + +如果需要,你可以退出驗證者,如此一來就不必一直上線,但也不會再有任何酬勞。 然後,你的餘額將被提取到你在設置過程中指定的提款地址。 + +[更多關於提取質押代幣的資訊](/staking/withdrawals/) + +## 開始使用質押啟動面板 {#get-started-on-the-staking-launchpad} + +質押啟動面板是一個開放原始碼應用程式,可以幫助你成為質押者。 它會指引你選擇用戶端、產生金鑰,並將你的以太幣存入質押存款合約。 它會提供一份檢查清單,確認你已完成所有內容,可安全地設定驗證者。 + + + +## 使用節點和用戶端設定工具時需要考量的事項 {#node-tool-considerations} + +有越來越多的工具和服務可以幫助你單獨質押以太幣,其風險和收益各有不同。 + +以下屬性指標可以用來衡量所列質押工具可能具備的顯著優勢或劣勢。 在選擇工具,展開質押之旅之際,請將本節作為參考,了解我們如何定義這些屬性。 + + + +## 探索節點和用戶端設定工具 {#node-and-client-tools} + +有多種方案可以幫你完成設定。 請運用上述指標來幫助你了解以下工具。 + + + +### 節點工具 + + + +切記,選擇[非主流用戶端](/developers/docs/nodes-and-clients/client-diversity/)極為重要,因為這可以提高網路的安全性,降低你的風險。 可讓你設定非主流使用者端的工具稱為「多重使用者端」。 + +### 金鑰產生器 + +這些工具可以代替[質押存款命令列介面](https://github.com/ethereum/staking-deposit-cli/),幫助你生成金鑰。 + + + +關於我們遺漏的質押工具,你有要推薦的嗎? 請參閱我們的[產品刊登政策](/contributing/adding-staking-products/),如果合適,請提交以供審核。 + +## 探索單獨質押指南 {#staking-guides} + + + +## 常見問題 {#faq} + +以下是關於質押的一些最常見問題,建議仔細閱讀。 + + + +驗證者是一個存在於以太坊並參與以太坊協議共識的虛擬實體。 驗證者由餘額、公鑰和其他屬性表示。 驗證者用戶端是通過持有和使用私密金鑰代表驗證者進行操作的軟體。 一個驗證者用戶端可以持有多組金鑰,控制許多驗證者。 + + + + +與驗證者相關聯的每組金鑰都需要 32 個以太幣才能啟用。 將更多以太幣存入一組金鑰不會增加潛在的酬勞,因為一個驗證者的有效餘額以 32 個以太幣為限。 這意味著質押是以 32 個以太幣為遞增單位,每個單位都有自己的一組金鑰和餘額。 + +請勿為一個驗證者存入超過 32 個以太幣。 這並不會增加你的酬勞。 如果為驗證者設置了提現地址,超過 32 個以太幣的多餘資金將在下一次驗證者掃描時自動提款到該地址。 + +如果單獨質押對你來說要求太高,可以考慮使用質押即服務供應商,或者如果你的資金少於 32 個以太幣,可以參考質押池。 + + + +如果你在網路正確進行最終確認時離線,則不會發生罰沒。 如果你的驗證者無法在特定時期內(每個時期 6.4 分鐘)完成證明,則會產生少量的怠工罰金,但這與罰沒完全不同。 這些罰金略低於你在驗證者可以完成證明的情況下獲得的酬勞,因此只要讓驗證者再次上線,經過差不多相同的時間就能賺回來。 + +請注意,怠工罰金與同時離線的驗證者數量成正比。 如果大部分網路同時離線,則每個驗證者承擔的罰金將大於單一驗證者怠工時的罰金。 + +在極端情況下,如果有超過三分之一的驗證者同時離線導致網路停止最終確認,那麼這些使用者會遭受所謂的二次怠工罰金,離線驗證者帳戶中的以太幣將受到指數級別的損失。 這時以太坊網路會消耗怠工驗證者的以太幣來進行自我修復,直到其餘額達到 16 個以太幣為止,此時它們將自動被踢出驗證者池。 最後還在線上的剩餘驗證者將再次超過網路的三分之二,滿足再次最終確認區塊鏈所需的絕對多數要求。 + + + +簡而言之,雖然我們永遠無法完全保證你不會被罰沒,但如果你真誠行事,執行非主流用戶端,而且一次只將簽名金鑰保存在一台電腦上,那麼遭到罰沒的風險微乎其微。 + +只有幾個特定的狀況會導致驗證者遭到罰沒並被踢出網路。 截止撰寫本文為止,發生過的罰沒事件完全是因為事主設置了冗餘硬體,同時間將簽名金鑰儲存在兩台不同的電腦上。 這可能導致你的金鑰在無意中出現雙重投票,這是一種可被罰沒的違規行為。 + +執行絕對主流用戶端(任何超過三分之二的網路所使用的用戶端)也有潛在的罰沒風險,例如該用戶端出現錯誤,導致一個區塊鏈分叉。 這可能會導致最終確認的是有問題的分叉。 要修正回預期的區塊鏈,需要提交環繞投票,嘗試撤銷最終確認的區塊。 這也是一種可被罰沒的行爲,但執行非主流用戶端即可避免。 + +非主流用戶端絕對不會最終確認相同的錯誤,因此也不會導致環繞投票,只可能產生怠工罰金,而不會遭到罰沒。 + + + + + +各用戶端的效能和使用者介面可能略有不同,因為每個用戶端都是由不同的團隊使用不同程式語言開發的。 這表示沒有「最好的」用戶端。 所有生產環境的用戶端都是優秀的軟體,會執行相同的核心功能來與區塊鏈同步和互動。 + +由於所有生產環境用戶端的基本功能都相同,因此選擇非主流用戶端其實非常重要;「非主流」意指網路上大多數驗證者都「沒」使用該用戶端。 這聽起來可能有悖直覺,但執行主流或絕對主流用戶端會使你在該用戶端出現錯誤時面臨更高的罰沒風險。 執行非主流用戶端可以大幅降低這些風險。 + +詳細了解為什麼用戶端多元化如此重要 + + + +雖然虛擬私人伺服器 (VPS) 可以作為家用硬體的替代品,但驗證者用戶端的實體存取和位置有其重要性。 Amazon Web Services 或 Digital Ocean 等集中式雲端解決方案提供了不必擁有和運作硬體的便利,但代價是網路集中化。 + +在一個集中式雲端儲存解決方案上執行的驗證者用戶端越多,對這些使用者而言就越危險。 如果發生任何事件導致這些供應商離線,無論是由於攻擊、監管要求,抑或僅因為電源/網際網路中斷,都將導致依賴此伺服器的所有驗證者用戶端同時離線。 + +離線罰金與同時離線的其他驗證者數量成正比。 使用虛擬私人伺服器會大幅提高承受更嚴重的離線罰金的風險,甚至如果發生大量當機,還會增加二次懲罰或罰沒的風險。 為了將你自己的風險和網路風險降至最低,我們強烈鼓勵使用者取得並操作自己的硬體。 + + + + +在信標鏈中進行任何類型的提款都需要設置提款憑證。 + +新質押者在生成金鑰和存款時就設置了提款憑證。 尚未設置此憑證的現有質押者可以升級其金鑰以支援此功能。 + +設置提款憑證後,酬勞支付(扣除初始 32 個以太幣後的累積以太幣)將定期自動分配到提款地址。 + +要解鎖並拿回全部餘額,你還必須完成退出驗證者的過程。 + +更多關於提取質押代幣的資訊 + + +## 延伸閱讀 {#further-reading} + +- [以太坊質押目錄](https://www.staking.directory/) - _Eridian 和 Spacesider_ +- [以太坊用戶端的多元化問題](https://hackernoon.com/ethereums-client-diversity-problem) - _@emmanuelawosika 2022_ +- [幫助用戶端多元化](https://www.attestant.io/posts/helping-client-diversity/) - _Jim McDonald 2022_ +- [以太坊共識層的用戶端多元化](https://mirror.xyz/jmcook.eth/S7ONEka_0RgtKTZ3-dakPmAHQNPvuj15nh0YGKPFriA) - _jmcook.eth 2022_ +- [如何購買以太坊驗證者硬體](https://www.youtube.com/watch?v=C2wwu1IlhDc) - _EthStaker 2022_ +- [按部就班:如何加入以太坊 2.0 測試網](https://kb.beaconcha.in/guides/tutorial-eth2-multiclient) - _Butta_ +- [以太坊 2 罰沒預防技巧](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) - _Raul Jordan 2020 年_ + + diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/withdrawals/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/withdrawals/index.md new file mode 100644 index 00000000000..9ce93763822 --- /dev/null +++ b/public/content/translations/zh-tw/07) Staking Pages/staking/withdrawals/index.md @@ -0,0 +1,218 @@ +--- +title: 質押提款 +description: 此頁總結了什麼是質押推送提款,該功能如何運作,以及質押者需要做什麼才能獲得酬勞 +lang: zh-tw +template: staking +image: /images/staking/leslie-withdrawal.png +alt: 犀牛萊斯利和她的質押酬勞 +sidebarDepth: 2 +summaryPoints: + - 上海/卡佩拉升級支援在以太坊提款 + - 驗證者營運商必須提供提款地址才能啟用 + - 每隔幾天自動分發酬勞 + - 完全退出質押的驗證者將收到剩餘餘額 +--- + + +2023 年 4 月 12 日上海/卡佩拉升級後便啟用了質押提款。 關於上海/卡佩拉升級的更多資訊 + + +**質押提款**是指將以太幣從以太坊共識層(信標鏈)上的驗證者帳戶轉移到可以進行交易的執行層。 + +只要使用者提供了提款地址,超過 32 個以太幣的**超額酬勞**將自動定期發送到每個驗證者關聯的提款地址。 使用者也能**完全退出質押**,解鎖他們的全部驗證者餘額。 + +## 質押酬勞 {#staking-rewards} + +對於最高有效餘額為 32 以太幣的活躍驗證者帳戶,系統會自動處理酬勞付款。 + +通過酬勞賺取的任何超過 32 以太幣的餘額實際上不會影響本金,也不會增加該驗證者在網路上的權重,因此每隔幾天就會自動提取酬勞。 除了提供一次提款地址之外,這些酬勞不需要驗證者營運商採取任何行動。 這些均在共識層上發起,因此所有步驟都不需要燃料(礦工費)。 + +### 我們是如何走到這一步的? {#how-did-we-get-here} + +在過去幾年,以太坊經歷了多次網路升級,過渡到由以太幣自身提供保護的網路,而不是像以前那樣進行能源密集型挖礦。 參與以太坊共識現在被稱為「質押」,因為參與者自願鎖定以太幣,將其「質押」,以獲得參與網路的能力。 遵守規則的使用者將獲得酬勞,而試圖欺詐的用戶將受到懲罰。 + +自 2020 年 11 月推出質押存款合約以來,一些勇敢的以太坊先驅者自願鎖定資金以啟動「驗證者」,即有權按照網路規則正式證明和提交區塊的特殊帳戶。 + +在上海/卡佩拉升級前,你無法使用或存取已經質押的以太幣。 但現在,你可以選擇自動將酬勞存入所選帳戶,並且可以隨時提取質押的以太幣。 + +### 我該如何準備? {#how-do-i-prepare} + + + +### 重要通知 {#important-notices} + +對於任何驗證者帳戶來說,提供提款地址是必要的步驟,然後才有資格從其餘額中提取以太幣。 + + + 每個驗證者帳戶一次只能分配一個提款地址。一旦選好地址並提交到共識層,就無法撤消或再次更改。 提交前請再次檢查所提供地址的所有權和正確性。 + + +假設你的助記詞/種子助記詞在離線狀態下保持安全,沒有受到任何損害,那麼即使沒有提供提款地址,也不會對你的資金造成威脅。 如果未能添加提款憑證,以太幣只會被鎖定在驗證者帳戶中,直到提供提款地址為止。 + +## 完全退出質押 {#exiting-staking-entirely} + +在從驗證者帳戶餘額中轉出_任何_資金之前,需要提供提款地址。 + +希望完全退出質押並提取全部餘額的使用者,還必須使用驗證者金鑰簽署並廣播「自願退出」訊息,這將啟動退出質押流程。 此操作通過你的驗證者用戶端完成,並提交到你的共識節點,無需燃料。 + +驗證者退出質押的過程所需時間不同,具體取決於有多少驗證者同時退出。 完成此流程後,該帳戶將不再負責執行​​驗證者網路職責,不再有資格獲得酬勞,且他們的以太幣不再處於「質押狀態」。 此時該帳戶將被標記為完全「可提款」。 + +一旦帳戶被標記為「可提款」,並且已提供提款憑證,使用者無需執行任何操作,靜靜等待即可。 區塊提交者將自動連續掃描帳戶,尋找符合資格的退出資金,你的帳戶餘額將在下一次掃描期間全額轉移(也稱為「全額提款」)。 + +## 何時啟用質押提款? {#when} + +質押提款現已上線! 提款功能在 2023 年 4 月 12 日進行的上海/卡佩拉升級中啟用。 + +上海/卡佩拉升級讓之前質押的以太幣得以回收到常規以太坊帳戶中。 這結束了質押流動性的循環,使以太坊在構建永續、可擴展、安全的去中心化生態系統的道路上又更近一步。 + +- [關於以太坊歷史的更多資訊](/history/) +- [關於以太坊開發藍圖的更多資訊](/roadmap/) + +## 提款付款流程如何運作? {#how-do-withdrawals-work} + +給定驗證者是否有資格提款,由驗證者帳戶本身的狀態決定。 在任何給定時間都不需要使用者輸入來確定帳戶是否應該發起提款—整個過程由共識層在連續循環上自動完成。 + +### 想透過視覺方式學習? {#visual-learner} + +查看 Finematics 對以太坊質押提款的解釋: + + + +### 驗證者「掃描」 {#validator-sweeping} + +當驗證者準備提交下一個區塊時,需要建立一個提款隊列,其中最多包含 16 項符合資格的提款。 最初從驗證者索引 0 開始,根據協議規則,確定此帳戶是否有符合條件的提款,如果有,則將其添加到隊列中。 提交下一個區塊的驗證者們將從上一個區塊停止的地方開始,按順序依次進行。 + + +想像一下指針式時鐘。 時鐘上的指針指向小時,朝一個方向前進,不會跳過任何小時,並最終在到達最後一個數字後再次回到起點。

+現在,假設時鐘不是 1 到 12,而是 0 到 N (共識層上註冊的驗證者帳戶總數,截至 2023 年 1 月超過 500,000 個)。

+時鐘上的指針指向下一個驗證者,需要檢查其是否具備提款資格。 它從 0 開始,一路前進,不跳過任何帳戶。 到達最後一個驗證者後,從頭開始繼續循環。 +
+ +#### 檢查帳戶提款情況 {#checking-an-account-for-withdrawals} + +當提交者在驗證者中掃描可能的提款時,每個被檢查的驗證者都會通過一系列簡短的問題接受評估,以確定是否應該觸發提款,如果是,應該提取多少以太幣。 + +1. **是否已提供提款地址?**如果未提供提款地址,則跳過該帳戶,不發起提款。 +2. **驗證者是否已退出並可提款?**如果驗證者已完全退出,且已達到其帳戶被視為「可提款」的時期,則會處理全額提款。 這會將全部餘額轉移至提款地址。 +3. **有效餘額是否已滿 32?**如果帳戶有提款憑證,未完全退出,且有 32 以上的酬勞待提取,將進行部分提款,僅轉出超過 32 的酬勞至使用者提款地址。 + +在驗證者的生命週期中,驗證者營運商只執行兩項直接影響此流程的操作: + +- 提供提款憑證以實現任何形式的提款 +- 退出網路,觸發全額提款 + +### 燃料費 {#gas-free} + +這種質押提款方法避免了質押者手動提交請求提取特定數量以太幣的交易。 這意味著**不需要燃料(礦工費)**,並且提款也無需爭取現有的執行層區塊空間。 + +### 我多久可以獲得一次質押酬勞? {#how-soon} + +一個區塊最多可以處理 16 筆提款。 按照這個速度,每天可以處理 115,200 次驗證者提款(假設沒有遺漏時隙)。 如上所述,不符合提款條件的驗證者將被跳過,從而縮短完成掃描的時間。 + +擴展此計算,我們可以估計處理給定數量的提款所需的時間: + + + +|提款數量 |完成時間 | +| :-------------------: | :--------------: | +| 400,000 | 3.5 日 | +| 500,000 | 4.3 日 | +| 600,000 | 5.2 日 | +| 700,000 | 6.1 日 | +| 800,000 | 7.0 日 | + + + +如你所見,隨著網路上驗證者的增加,速度會變慢。 遺漏時隙增加可能會相應地降低速度,但這通常代表可能結果中較慢的一面。 + +## 常見問題 {#faq} + + +不可以,提供提款憑證的過程是一次性的,一旦提交就無法更改。 + + + +通過設定執行層提款地址,該驗證者的提款憑證已永久更改。 這意味著舊憑證將失效,新憑證將直接指向執行層帳戶。 + +提款地址可以是智慧型合約(由其程式碼控制),也可以是外部所有帳戶(EOA,由私密金鑰控制)。 目前,這些帳戶無法將訊息傳回共識層,以表明驗證者憑證的更改,增加此功能會給協議增加不必要的複雜性。 + +如果無法更改特定驗證者的提款地址,使用者可以選擇將智慧型合約設置為可以處理金鑰輪換的提款地址,例如保險箱。 將資金設置為自己的外部帳戶的使用者可以執行完全退出以提取所有質押資金,然後使用新憑證重新質押。 + + + + +如果你參與質押池或持有質押代幣,則應向你的提供商諮詢,了解有關如何處理質押提款的詳細資訊,因為每種服務的運作方式不同。 + +一般來說,使用者應該可以自由地收回其質押的以太幣,或者更改他們使用的質押提供商。 如果特定質押池變得過大,則可以退出、贖回資金,並透過較小的提供商重新質押。 或者,如果積累了足夠的以太幣,你可以在家進行質押。 + + + + +是的,只要你的驗證者提供了提款地址。 必須提供一次才能啟用任何提款,然後酬勞支付將在每次驗證器掃描時,每隔幾天自動觸發一次。 + + + + +不會,如果你的驗證者在網路上仍然處於活躍狀態,則不會自動發生全額提款。 需要手動啟動自願退出。 + +一旦驗證者完成退出過程,並且假設該帳戶具有提款憑證,餘額將在下一次驗證者掃描期間提出。 + + + + +提款設計為自動推送,轉移任何未主動質押的以太幣。 包括已完成退出流程帳戶的全部餘額。 + +無法手動請求提取特定數量的以太幣。 + + + + +建議驗證操作者訪問質押啟動面板提款頁面以便找到更多關於驗證者需要為提款作出的準備、活動時間,以及提款相關的詳細資訊。 + +若想先在測試網上測試你的設定,請造訪 Holesky 測試網質押啟動面板開始測試。 + + + + +否。 驗證者退出並成功提取其全部餘額後,任何後續存入該驗證者的資金都會在下一次驗證者掃描期間自動轉移到提款地址。 要重新質押以太幣,必須啟用新的驗證者。 + + +## 了解更多 {#further-reading} + +- [質押啟動面板提款](https://launchpad.ethereum.org/withdrawals) +- [EIP-4895:將提款作為操作推送至信標鏈。](https://eips.ethereum.org/EIPS/eip-4895) +- [以太坊牧貓人組織 - 上海](https://www.ethereumcatherders.com/shanghai_upgrade/index.html) +- [PEEPanEIP #94:與 Potuz 和 Hsiao-Wei Wang 討論質押以太幣提款(測試中)](https://www.youtube.com/watch?v=G8UstwmGtyE) +- [PEEPanEIP#68:EIP-4895:信標鏈推動提款操作,由 Alex Stokes 主講](https://www.youtube.com/watch?v=CcL9RJBljUs) +- [了解驗證者有效餘額](https://www.attestant.io/posts/understanding-validator-effective-balance/) diff --git a/public/content/translations/zh-tw/08) Use cases 2/decentralized-identity/index.md b/public/content/translations/zh-tw/08) Use cases 2/decentralized-identity/index.md new file mode 100644 index 00000000000..08668d578f9 --- /dev/null +++ b/public/content/translations/zh-tw/08) Use cases 2/decentralized-identity/index.md @@ -0,0 +1,191 @@ +--- +title: 去中心化身分 +description: 什麼是去中心化身分,它為什麼很重要? +lang: zh-tw +template: use-cases +emoji: ":id:" +sidebarDepth: 2 +image: /images/eth-gif-cat.png +summaryPoint1: 傳統身分系統對你的身分識別進行中心化發行、維護和控制。 +summaryPoint2: 去中心化身分消除了對中心化第三方的依賴。 +summaryPoint3: 多虧了加密技術,使用者現在擁有了再次發行、持有和控制自身身分識別和證明的工具。 +--- + +現如今,身分幾乎支撐著我們生活的方方面面。 使用線上服務、開設銀行帳戶、選舉投票、購買房產、就業,所有這些事情都需要證明你的身分。 + +然而,傳統的身分管理系統長期以來一直依賴於中心化中間機構來發行、持有和控制你的身分識別和[身分證明](/glossary/#attestation)。 這意味著你無法掌控自己身分的相關資訊,也無法決定誰能夠存取你的個人身分資訊 (PII),以及各方擁有多大的訪問權限。 + +為了解決這些問題,我們在以太坊等公共區塊鏈上構建了去中心化身分系統。 去中心化身分允許每個人管理他們的身分相關資訊。 借助去中心化身分解決方案,_你_可以建立身分識別、聲明和持有你的身分證明,而無需依賴於中央機構,例如服務提供方或是政府。 + +## 什麼是身分認同? {#what-is-identity} + +身分意味著個人的自我意識,由獨特的特徵定義。 身分是指作為一個_個體_,即一個獨特的人類實體。 身分也可以是指其他非人類的實體,例如組織或機構。 + + + +## 什麼是身分識別? {#what-are-identifiers} + +身分識別是一些資訊,用來指向一個特定身分或多個身分。 常見的身分識別包含: + +- 姓名 +- 社會安全號碼/稅務識別號碼 +- 手機號碼 +- 出生日期和出生地點 +- 數位身分憑證,例如:電子郵件地址、使用者名稱、頭像 + +這些傳統的身分識別範例,均由中央實體發行、持有和控制。 你需要獲得政府的許可才能更改你的姓名,或者需要獲得社交媒體平台的許可才能更改你的帳號。 + +## 去中心化身分的好處 {#benefits-of-decentralized-identity} + +1. 去中心化身分增加了個人對身分識別資訊的掌握。 可以在無需依賴中心化機構和第三方服務的情況下,驗證去中心化身分識別和身分證明。 + +2. 去中心化身分解決方案為驗證和管理使用者身分,提供了一種去信任、無縫且保護隱私的方法。 + +3. 去中心化身分利用區塊鏈技術,在不同方之間建立信任,並提供加密擔保來驗證身分證明的有效性。 + +4. 去中心化身分使得身分資料具有可便攜性。 使用者將身分證明和身分識別儲存在行動裝置錢包中,並可以分享給他們選擇的任一夥伴。 去中心化身分識別和身分證明不會被鎖在發行組織的資料庫中。 + +5. 去中心化身分與新興的[零知識證明](/glossary/#zk-proof)技術應能完美搭配,這將使個人能夠證明他們擁有某物或做過某些事,而無需透露那是什麼。 這可以成為一種將信任與隱私結合在一起的強而有力方案,適用於投票等應用方面。 + +6. 去中心化身分能夠[防範女巫攻擊](/glossary/#anti-sybil)機制,識別一人分飾多角玩弄某系統,或向該系統發送垃圾訊息的情況。 + +## 去中心化身分使用案例 {#decentralized-identity-use-cases} + +去中心化身分有許多潛在的使用案例: + +### 1. 通用登入 {#universal-dapp-logins} + +去中心化身分可以使用去中心化驗證,有助於替代基於密碼的登入方式。 服務提供商可以向使用者簽發身分證明,這些證明可以儲存在以太坊錢包中。 一個身分證明範例是[非同質化代幣](/glossary/#nft),可以授予持有者訪問線上社群的權利。 + +[使用以太坊登入](https://login.xyz/)功能將允許伺服器能夠確認使用者的以太坊帳戶,並從他們的帳戶地址中獲取所需的身分證明。 這意味著使用者無需記住冗長的密碼,就能夠訪問平台和網站,進而改善使用者的線上體驗。 + +### 2. 「認識客戶」驗證 {#kyc-authentication} + +許多線上服務的使用,需要提供個人的身分證明和憑證,例如駕駛執照或國家護照。 但這種方式是有問題的,因為使用者的私人資訊有可能會被洩露,並且服務提供商無法驗證身分證明的真實性。 + +去中心化身分使公司能夠跳過傳統的[了解你的客戶 (KYC)](https://en.wikipedia.org/wiki/Know_your_customer) 流程,並透過可驗證憑證來核實使用者身分。 這降低了身份管理的成本,並防止使用偽造文件。 + +### 3 投票和線上社群 {#voting-and-online-communities} + +線上投票和社交媒體是去中心化身分的兩個新應用。 線上投票方案容易受到操縱,尤其是在惡意行為者創建虛假身分進行投票的情況下。 要求個人提供鏈上身分證明可以提高線上投票過程的完整性。 + +去中心化身分可以幫助創建沒有虛假帳戶的線上社群。 例如,每個用使用者可能必須使用鏈上身分系統,如以太坊名稱服務,來驗證他們的身分,從而減少機器人的可能性。 + +### 4 反女巫保護 {#sybil-protection} + +使用[平方投票法](/glossary/#quadratic-voting)的捐款應用程式很容易受到[女巫攻擊](/glossary/#sybil-attack),因為當更多人投票支持時,捐款的價值就會增加,這會激勵使用者將他們的貢獻分配給多個身分。 去中心化身分透過增加每位參與者的負擔來證明他們是真正的人,這有助於防止這種情況發生,而且通常也不必透露具體的私人資訊。 + +## 什麼是身分證明 {#what-are-attestations} + +身分證明是由一個實體提出的關於另一個實體的聲明。 如果你居住在美國,你的駕駛執照是由機動車輛管理局(一個實體)發布,它證明你(另一個實體)在法律上允許駕駛汽車。 + +身分證明與身分識別不同。 身分證明_包含_用於指向特定身分的身分識別,並聲明與此身分相關的屬性。 因此,你的駕駛執照具有身分識別(姓名、出生日期、地址),但也是關於你合法駕駛權利的證明。 + +### 什麼是去中心化身分識別? {#what-are-decentralized-identifiers} + +你的法定姓名或電子郵件地址等傳統身分識別依賴於第三方——政府和電子郵件提供商。 去中心化身分識別 (DID) 則不同-它們不由任何中央實體發行、管理或控制。 + +去中心化身分識別由個人發行、持有和控制。 [以太坊帳戶](/glossary/#account)是去中心化身分識別的一個範例。 你可以根據需要建立任意數量的帳戶,無需任何人的許可,也無需將它們儲存在中央註冊系統中。 + +去中心化身分識別儲存在分散式帳本([區塊鏈](/glossary/#blockchain))或[點對點網路](/glossary/#peer-to-peer-network)上。 這使得去中心化身分識別 (DID) 具有[全球唯一性、高可用的可解析性、和加密驗證性](https://w3c-ccg.github.io/did-primer/)。 去中心化身份識別可與不同的實體相關聯,包含個人、組織或政府機構。 + +## 什麼讓去中心化身分識別成為可能? {#what-makes-decentralized-identifiers-possible} + +### 1. 公鑰密碼學 {#public-key-cryptography} + +公鑰密碼學是一種能夠為某實體產生[公鑰](/glossary/#public-key)和[私鑰](/glossary/#private-key)的資安措施。 公鑰[密碼學](/glossary/#cryptography)在區塊鏈網路中用於驗證使用者身分並證明對數位資產的所有權。 + +一些去中心化身分識別,如以太坊帳戶,都有著公鑰與私鑰。 公鑰用於識別帳戶的控制者,而私鑰則可以簽署和解密此帳戶的訊息。 公鑰密碼學使用[加密簽名](https://andersbrownworth.com/blockchain/public-private-keys/)來驗證所有主張,提供了驗證實體並防止冒名頂替及使用假身分所需的證據。 + +### 2. 去中心化資料儲存 {#decentralized-datastores} + +區塊鏈充當可驗證的資料註冊系統:一個開放、去信任和去中心化的資訊儲存庫。 公共區塊鏈的存在使得不再需要將身分識別儲存在中心化的註冊系統上。 + +如果任何人需要確認去中心化身分識別的有效性,他們可以在區塊鏈上查找相關的公鑰。 這與需要由第三方進行驗證的傳統身分識別不同。 + +## 去中心化身分識別和身分證明要如何實現去中心化身分? {#how-decentralized-identifiers-and-attestations-enable-decentralized-identity} + +去中心化身分的概念是,與身分有關的資訊應該由自己控制,且是私密和可移植的,以去中心化身分識別和身分證明為基本構建模塊。 + +在去中心化身分的背景下,身分證明(也稱為[可驗證憑證](https://www.w3.org/TR/vc-data-model/))是由發行人所發布、可加密驗證的防篡改聲明。 實體(如,組織)發行的每個身分證明或可驗證憑證都與它們的去中心化身分識別有關。 + +由於去中心化身分識別儲存在區塊鏈上,任何人都可以在以太坊上交叉驗證發行人的去中心化身分識別,來驗證身分證明的有效性。 實際上,以太坊就像是一個全球目錄,能夠驗證與某些實體相關的去中心化身分識別。 + +去中心化身分識別是讓身分證明能夠自行控制和驗證的原因。 即使發行者不再存在,持有者也始終能夠證明,其身分證明的出處和有效性。 + +透過去中心化身分,來使去中心化身分識別能夠保護個人隱私資訊也至關重要。 例如,如果某人提交一個身分證明(駕駛執照),則驗證方不需要檢查身分證明中資訊的有效性。 反之,驗證者只需要獲得身分證明真實性的加密擔保以及發證機構的身分,就足以確定此證明是否有效。 + +## 去中心化身分中的身分證明類型 {#types-of-attestations-in-decentralized-identity} + +在基於以太坊的身分生態系統中,如何儲存和檢索身分證明資訊與傳統身分管理不同。 以下是在去中心化身分系統中發行、儲存和驗證身分證明的各種方法的概覽: + +### 鏈外身分證明 {#off-chain-attestations} + +將身份證明儲存在鏈上的一個問題是,其中可能包含個人想要保密的資訊。 以太坊區塊鏈具有公開性,因此不適合用於儲存此類身分證明。 + +解決方案是發行身分證明,由使用者在數位錢包中鏈外持有,但使用儲存在鏈上的發行人的去中心化身分識別進行簽名。 這些身分證明被編碼為 [JSON Web 代幣](https://en.wikipedia.org/wiki/JSON_Web_Token),其中包含發行人的數位簽名,從而可以輕鬆驗證鏈外聲明。 + +以下是解釋鏈外身分證明的假設場景: + +1. 某大學(發行人)產生身分證明(數位學歷證書),用其金鑰簽署,然後將證書頒發給 Bob(身分持有者)。 + +2. Bob 申請了一份工作並想向雇主證明他的學歷,因此他分享了行動裝置錢包中的身分證明。 公司(驗證者)可以透過檢查發行人的去中心化身分識別(即,其在以太坊上的公鑰),來確認身分證明的有效性。 + +### 可持續訪問的鏈外身分證明 {#offchain-attestations-with-persistent-access} + +在這種場景下,身分證明被轉換為 JSON 文件並儲存在鏈外(理想情況下儲存在[去中心化雲端儲存](/developers/docs/storage/)平台上,例如 IPFS 或 Swarm)。 然而,JSON 文件的[雜凑值](/glossary/#hash)儲存在鏈上,並透過鏈上註冊系統連結到去中心化身分識別。 所關聯的去中心化身分識別可以是發行人或接收者的身分證明。 + +這種方法使身份證明能夠獲得基於區塊鏈的持久性,同時確保聲明資訊的加密性和可驗證性。 它還允許選擇性揭露,因為私鑰的持有者可以解密資訊。 + +### 鏈上身分證明 {#onchain-attestations} + +鏈上身分證明保存在以太坊區塊鏈上的[智慧型合約](/glossary/#smart-contract)中。 智慧型合約(充當註冊系統)將身分證明對應到相關的鏈上去中心化身分識別(公開金鑰)。 + +以下範例展示了鏈上身分證明在實踐中的使用方式: + +1. 一家公司(XYZ 公司)計畫使用智慧型合約出售所有權股份,但只想賣給那些已經完成背景調查的買家。 + +2. XYZ 公司可以讓執行背景調查的公司,在以太坊上發行鏈上身分證明。 此身分證明可以證實某人已經通過背景調查,但不會暴露任何個人資訊。 + +3. 出售股份的智慧型合約可以檢查註冊合約以獲得經篩選之買家的身分,從而使智慧型合約可以確定哪些人被允許購買股份。 + +### 靈魂綁定代幣和身分 {#soulbound} + +[靈魂綁定代幣](https://vitalik.eth.limo/general/2022/01/26/soulbound.html)([不可轉移的非同質化代幣](/glossary/#nft))可用於收集特定錢包獨有的資訊。 這有效地創建了綁定到特定以太坊地址的唯一鏈上身分,這可能包括代表成就的代幣(例如完成某些特定的線上課程或在遊戲中超過分數門檻)或社區參與代幣。 + +## 使用去中心化身分 {#use-decentralized-identity} + +有許多雄心勃勃的專案使用以太坊作為去中心化身分解決方案基礎: + +- **[以太坊名稱服務 (ENS)](https://ens.domains/)** - _一個去中心化的鏈上命名系統,適合機器可讀的識別符號,例如以太坊錢包地址、內容雜湊值和中繼資料。_ +- **[SpruceID](https://www.spruceid.com/)** - _去中心化身分專案,它允許使用者使用以太坊帳戶和以太坊名稱服務個人資料來控制數位身分,而不是依賴第三方服務。_ +- **[以太坊證明服務 (EAS)](https://attest.sh/)** - _一種去中心化分類帳/協議,用於對任何事物進行鏈上或鏈下證明。_ +- **[人性證明](https://www.proofofhumanity.id)** - _人性證明 (PoH) 是建立在以太坊上的社交身分驗證系統。_ +- **[BrightID](https://www.brightid.org/)** - _一個去中心化的開源社交身分網路,旨在通過創建和分析社交圖譜來改革身分驗證。_ +- **[walt.id](https://walt.id)** — _一種使開發者和組織能夠利用自主權身份、非同質化代幣/魂縛代幣的開源去中心化身份及錢包基礎設施。_ +- **[Veramo](https://veramo.io/)** - _ 一種 JavaScript 框架,讓任何人都可以輕鬆地在他們的應用程式中使用可加密驗證的資料。_ + +## 延伸閱讀 {#further-reading} + +### 文章 {#articles} + +- [區塊鏈使用案例:數位身分中的區塊鏈](https://consensys.net/blockchain-use-cases/digital-identity/) — _ConsenSys_ +- [什麼是以太坊 ERC725? 區塊鏈上的自我主權身分管理](https://cryptoslate.com/what-is-erc725-self-sovereign-identity-management-on-the-blockchain/) — _Sam Town_ +- [區塊鏈如何解決數位身分問題](https://time.com/6142810/proof-of-humanity/) — _Andrew R. Chow_ +- [什麼是去中心化身分以及你為什麼需要關心?](https://web3.hashnode.com/what-is-decentralized-identity) — _Emmanuel Awosika_ +- [去中心化身份簡介](https://walt.id/white-paper/digital-identity) — _Dominik Beron_ + +### 影片 {#videos} + +- [去中心化身分(直播獎勵環節)](https://www.youtube.com/watch?v=ySHNB1za_SE&t=539s) — _一個很好的去中心化身分解說影片,創作者 Andreas Antonopolous_ +- [使用以太坊和去中心化身分登錄 Ceramic、IDX、React 和 3ID Connect](https://www.youtube.com/watch?v=t9gWZYJxk7c) — _YouTube 使用教學,作者 Nader Dabit,介紹如何構建身分管理系統,透過以太坊錢包建立、讀取和更新使用者個人資料。_ +- [BrightID - 以太坊上的去中心化身分](https://www.youtube.com/watch?v=D3DbMFYGRoM) — _Bankless 播客節目討論 BrightID,一個以太坊上的去中心化身分解決方案_ +- [鏈外互聯網:去中心化身分 & 可驗證憑證](https://www.youtube.com/watch?v=EZ_Bb6j87mg) — Evin McMullen 在 EthDenver 2022 的演講 +- [Verifiable Credentials Explained(可驗憑證說明)](https://www.youtube.com/watch?v=ce1IdSr-Kig) - 由 Tamino Baumann 主持演示的 YouTube 講解視頻 + +### 社群 {#communities} + +- [GitHub 上的 ERC-725 聯盟](https://github.com/erc725alliance) — _在以太坊區塊鏈上管理身分的 ERC725 標準的支持者_ +- [SpruceID Discord 伺服器](https://discord.com/invite/Sf9tSFzrnt) — _研究使用以太坊登錄的愛好者和開發者社群_ +- [Veramo Labs](https://discord.gg/sYBUXpACh4) — _一個開發人員社區,致力於為應用程式構建可驗證資料的框架_ +- [walt.id](https://discord.com/invite/AW8AgqJthZ) — _由開發者和構建者組成的社區,致力於開發各個行業的去中心化身份應用案例_ diff --git a/public/content/translations/zh-tw/08) Use cases 2/desci/index.md b/public/content/translations/zh-tw/08) Use cases 2/desci/index.md new file mode 100644 index 00000000000..457fc3b979c --- /dev/null +++ b/public/content/translations/zh-tw/08) Use cases 2/desci/index.md @@ -0,0 +1,136 @@ +--- +title: 去中心化科研 (DeSci) +description: 以太坊的去中心化科研概觀 +lang: zh-tw +template: use-cases +emoji: ":microscope:" +sidebarDepth: 2 +image: /images/future_transparent.png +alt: "" +summaryPoint1: 當前科學系統的全球開放性替代方案。 +summaryPoint2: 使科學家得以進行募資、試驗研究、資料分享、發表見解等活動的技術。 +summaryPoint3: 以開放科學運動為原則。 +--- + +## 什麼是去中心化科研 (DeSci)? {#what-is-desci} + +去中心化科研 (DeSci) 是一項以建置公共基礎設施,利用 [Web3](/glossary/#web3) 技術堆棧以公平及公正合理的方式融資、建立、審查、認證、儲存和推廣科學知識為目標的運動。 + +去中心化科研的目標是創建一個生態系統,鼓勵科學家公開分享研究計畫,在開放任何人輕易獲得甚至參與研究的同時,肯定該科學家的貢獻。 去中心化科研的理念是:所有人都有獲得科學知識的權利,因此科學研究過程應該透明化。 去中心化科研正在開創一種更去中心化且廣泛的科學研究模型,使其更能抵抗中心化管理機構的審查與控制。 去中心化科研的目標是,藉由融資、科研工具與交流渠道的去中心化,為跳脫框架的新點子開創出一個能夠欣欣向榮的環境。 + +去中心化科研允許更多樣化的資金來源(從[去中心化自治組織](/glossary/#dao)、[平方募資](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531)到衆籌等等),讓資料和方法更易獲取,並透過激勵實現可重複性。 + +### Juan Benet - 去中心化科研運動 + + + +## 去中心化科研如何改善科學研究 {#desci-improves-science} + +這份有待補充的清單列出了科學領域中的關鍵問題,以及去中心化科研所能提供的協助方案 + +| **去中心化科研** | **傳統科研** | +| ------------------------------------------------- | ---------------------------------- | +| 資金分配**由公眾**使用平方募資或去中心化自治組織等機制決定。 | 小型、封閉、**中心化團體**負責控制資金分配。 | +| 能夠與**世界各地**的同儕組成自由的團隊並展開合作。 | 你的合作受資助組織和所屬機構**限制**。 | +| 資金決策在線上進行且**透明度高**。 會探索全新的融資機制。 | 資金決策較為耗時且**透明度有限**。 融資機制有限。 | +| 透過 [Web3](/glossary/#web3) 科技,使用共享實驗室服務變得更輕鬆和更透明。 | 共享實驗室資源的過程往往**較為遲緩且透明度不足**。 | +| 可以開發**新的發表模式**,使用 Web3 基礎單元實現信任、透明度和存取普及化。 | 透過既有途徑發表研究通常被認為**低效、受偏見影響且會受到剝削**。 | +| 可以**藉由同儕審查工作獲得代幣與聲望**。 | **同儕審查工作是無償的**,只有商業出版商能獲益。 | +| 產生的**知識產權 (IP) 歸你所有**,且能根據透明條款加以分配。 | 產生的**知識產權歸屬於你所屬的機構**。 無法透明地獲得知識產權。 | +| 透過在鏈上公佈所有步驟,包括來自失敗工作的資料,**實現全面的研究共享**。 | **發表偏見**導致研究者傾向於只分享獲得成功結果的實驗。 | + +## 以太坊與去中心化科研 {#ethereum-and-desci} + +去中心化科研系統需要健全的保全,將金錢與交易開銷減到最低,還要有能夠開發各種應用程式的豐富生態系統。 以太坊提供了建置去中心化科研技術所需的一切。 + +## 去中心化科研的使用案例 {#use-cases} + +去中心化科研正在建置科學研究工具組件,引領傳統學術界進入數位世界。 以下是 Web3 可爲科學領域提供的使用案例。 + +### 學術發表 {#publishing} + +現行科學研究發表模式備受質疑,因為這種模式由出版方主導,而出版方又仰賴科學家、審查者與編輯的無償勞動,卻又收取高昂的發表費用。 大眾讀者通常藉由稅收間接支付了該研究的費用,卻往往無法閱讀相同作品,除非再次付款給出版方。 發表單篇科學論文的總費用動輒高達五位數 ($USD),不但辜負了科學知識作為[公共財產](/glossary/#public-goods)的使命,還為一小撮出版商帶來龐大利潤。 + +目前的免費公開平台通常是預印伺服器,[例如 ArXiv](https://arxiv.org/)。 然而,這些平台缺乏質量把關,無[防範女巫攻擊的機制](/glossary/#anti-sybil),且通常不會追蹤文章等級指標,換言之,它們通常只供投稿至傳統出版社之前流通作品。 SciHub 也提供免費瀏覽已發表的學術論文,但此途徑並不合法,且須待出版社收取報酬並將論文納入嚴格的版權法之後才得以在網站發布。 這開啟了一道關鍵缺口,也就是內建合法機制與激勵模型的開放式科學論文與資料。 Web3 能提供建立這種系統的工具。 + +### 可重複性與可複製性 {#reproducibility-and-replicability} + +可重複性和可複製性是科學研究的品質依據。 + +- 可重複的研究結果可由相同的團隊使用相同的方式多次達成。 +- 可複製的研究結果可由不同的團隊以相同的實驗方案達成。 + +全新的 Web3-內建工具可以確保科學發現以可重複性與可複製性為基礎。 我們可將優質的科學融入到學術界的技術體系中。 Web3 擁有為每個分析元件建立[證明](/glossary/#attestation)的能力,包括:原始資料、計算引擎以及應用結果。 共識系統的美妙之處在於,當這些要素由可靠的網路機制維護運作時,所有網路參與者都可以負責再次運算並驗證每一項結果。 + +### 資金來源 {#funding} + +目前資助科學的標準模式是個人或科學家團體向資助機構提出書面申請。 小部分值得信賴的人為申請表評分,並面試這一小撮申請人,再給予資金。 這個模式不但容易造成瓶頸,導致申請和獲得資助之間有時**需要等待好幾年**,還被認為極易**受到審查小組的偏見、自身利益和政治因素的影響**。 + +研究顯示,同一個提案被提交到不同的小組時,結果卻大相徑庭,可見資助審查小組難以選出高品質提案。 隨著資金變得越來越稀缺,這些款項都集中在少數資深研究者與較為保守的研究計劃上。 這導致了一個各方為資金搶破頭的環境,還鞏固了不健康的激勵措施,並抑制創新。 + +Web3 廣泛試驗過去中心化自治組織和 Web3 開發的不同激勵模型,因而有可能改善這種糟糕的融資模型。 [追溯性公共財募資](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c)、[平方募資](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531)、[去中心化自治組織治理](https://www.antler.co/blog/daos-and-web3-governance-the-promise-implications-and-challenges-ahead)及[代幣化激勵結構](https://cdixon.org/2017/05/27/crypto-tokens-a-breakthrough-in-open-network-design)都是科學募資的革命性 Web3 工具。 + +### 知識產權所有權和開發 {#ip-ownership} + +知識產權 (IP) 是傳統科學的一個大問題:從被困在大學或閒置在生物技術公司中,乃至難以估值。 然而,Web3 使用[非同質化代幣 (NFT)](/glossary/#nft) 解決數位資產(例如科學資料或文章)的所有權,這是 Web3 非常擅長的。 + +就像非同質化代幣可以將未來交易的收入返還給原創作者一樣,你可以建立透明的價值歸屬鏈來獎勵研究人員、管理機構(如去中心化自治組織),甚至是資料被收集的研究對象。 + +[知識產權非同質化代幣 (IP-NFT)](https://medium.com/molecule-blog/ip-nfts-for-researchers-a-new-biomedical-funding-paradigm-91312d8d92e6) 還是將正在進行的研究實驗之資料儲存庫去中心化的關鍵,並可以插入非同質化代幣與[去中心化金融](/glossary/#defi)金融化(從資產分割到借貸池與價值評估)。 它還允許如 [VitaDAO](https://www.vitadao.com/) 這樣的去中心化自治組織等鏈上原生實體直接在鏈上進行研究。 不可轉讓的[「靈魂綁定」代幣](https://vitalik.eth.limo/general/2022/01/26/soulbound.html)的出現,將可能在去中心化科研中扮演重要的角色,使個人能證明其與以太坊地址連結的個人經驗和證書。 + +### 資料儲存、存取和架構 {#data-storage} + +使用 Web3 模式可使人們更容易獲得科學資料,分佈式儲存使研究能在災難性事件中倖存下來。 + +起點必須是任何持有適當可驗證憑證的去中心化身分都可以訪問的系統。 這使得敏感資料能夠被可信方安全地複製,從而避免冗餘、抵抗審查,還能重現結果,並實現多方協作與添加新資料至資料集的能力。 [compute-to-data](https://7wdata.be/predictive-analytics/compute-to-data-using-blockchain-to-decentralize-data-science-and-ai-with-the-ocean-protocol) 等機密運算方法提供了替代性存取機制,為最敏感的資料建立了可靠的研究環境。 可靠的研究環境[被 NHS 引用](https://medium.com/weavechain/whats-in-store-for-the-future-of-healthcare-data-b6398745fbbb)作為面向未來的資料隱私和協作解決方案,它開創了一個生態系統,在這個生態系統中,研究人員可以使用標準化環境來安全地處理現場資料,以共享程式碼和實踐方式。 + +靈活的 Web3 資料處理方案支持上述情況,並為真正的開放科學奠定基礎,研究人員可以在沒有存取權限且不必支付費用的情況下為公共利益貢獻一己之力。 星際檔案系統、Arweave 和 Filecoin 等 Web3 公共資料處理方案專為去中心化進行了改良。 例如,dClimate 讓所有人都能獲得氣候和天氣數據,包括來自氣象站和預測氣候模型的數據。 + +## 參與 {#get-involved} + +探索各項計畫並加入去中心化科研社群 + +- [DeSci.Global:全球活動和聚會行事曆](https://desci.global) +- [Blockchain for Science Telegram](https://t.me/BlockchainForScience) +- [Molecule:資助你的研究計畫或為其募資](https://www.molecule.xyz/) +- [VitaDAO:藉由受贊助的長壽研究協議獲得資金](https://www.vitadao.com/) +- [ResearchHub:發布科學成果並與同行交流](https://www.researchhub.com/) +- [LabDAO:在電腦中折疊蛋白質](https://alphafodl.vercel.app/) +- [dClimate API:查詢去中心化社群收集的氣候數據](https://api.dclimate.net/) +- [DeSci Foundation:去中心化科研發表工具生成器](https://descifoundation.org/) +- [DeSci.World:供使用者查看、參與去中心化科研的單一窗口](https://desci.world) +- [OceanDAO:管理資料相關科學資金的去中心化自治組織](https://oceanprotocol.com/) +- [Opscientia:開放的去中心化科研工作流程](https://opsci.io/research/) +- [Bio.xyz:為你的生物技術去中心化自治組織或去中心化科研專案募資](https://www.bio.xyz/) +- [Fleming Protocol:推動協作生物醫學發現的開源式資料經濟](http://flemingprotocol.io/) +- [Active Inference Institute](https://www.activeinference.org/) +- [IdeaMarkets:實現去中心化的科學可信度](https://ideamarket.io/) +- [去中心化科研實驗室](https://www.desci.com/) +- [ValleyDAO:開放的全球社群,為合成生物學研究提供資金和轉譯支援](https://www.valleydao.bio) +- [Cerebrum DAO:尋找和培育解決方案以促進大腦健康並預防神經退化性疾病](https://www.cerebrumdao.com/) +- [CryoDAO:資助深低溫保存領域的「登月」研究](https://www.cryodao.org) + +歡迎建議上架新專案 - 請由查看我們的[上架政策](/contributing/adding-desci-projects/)開始! + +## 延伸閱讀 {#further-reading} + +- [由 Jocelynn Pearl 和 Ultrarare 撰寫的去中心化科研維基](https://docs.google.com/document/d/1aQC6zn-eXflSmpts0XGE7CawbUEHwnL6o-OFXO52PTc/edit#) +- [Jocelynn Pearl 為 a16z future 編寫的去中心化生物技術指南](https://future.a16z.com/a-guide-to-decentralized-biotech/) +- [去中心化科研的重要性](https://gitcoin.co/blog/desci-the-case-for-decentralised-science/) +- [去中心化科研指南](https://future.com/what-is-decentralized-science-aka-desci/) +- [去中心化科研資源](https://www.vincentweisser.com/decentralized-science) +- [Molecule 的生物製藥 IP-NFT - 技術性說明](https://www.molecule.xyz/blog/molecules-biopharma-ip-nfts-a-technical-description) +- [建立無需信任機制的科學系統 作者:Jon Starr](https://medium.com/@jringo/building-systems-of-trustless-science-1cd2d072f673) +- [Paul Kohlhaas - DeSci:去中心化科研的未來(播客)](https://anchor.fm/andrew-steinwold/episodes/Paul-Kohlhaas---DeSci-The-Future-of-Decentralized-Science---Zima-Red-ep-117-e1h683a) +- [一種去中心化科研的主動推論本體論:從情境式意義建構到知識共同體](https://zenodo.org/record/6320575) +- [去中心化科研:研究領域的未來 作者:Samuel Akinosho](https://lucidsamuel.medium.com/desci-the-future-of-research-b76cfc88c8ec) +- [科研融資(跋:去中心化科研與全新加密原語) 作者:Nadia](https://nadia.xyz/science-funding) +- [去中心化風潮正在擾亂藥物研發](https://medium.com/id-theory/decentralisation-is-disrupting-drug-development-28b5ba5d447f) + +### 影片 {#videos} + +- [去中心化科研是什麼?](https://www.youtube.com/watch?v=-DeMklVWNdA) +- [Vitalik Buterin 與科學家 Aubrey de Grey 關於長壽研究與加密貨幣之互動的討論](https://www.youtube.com/watch?v=x9TSJK1widA) +- [科學研究發表已毀。 Web3 能夠有所幫助嗎?](https://www.youtube.com/watch?v=WkvzYgCvWj8) +- [Juan Benet - 去中心化科研、獨立實驗室與大規模數據科學](https://www.youtube.com/watch?v=zkXM9H90g_E) +- [Sebastian Brunemeier - 去中心化科研如何能夠轉化生物醫學研究與創業投資](https://www.youtube.com/watch?v=qB4Tc3FcVbM) diff --git a/public/content/translations/zh-tw/08) Use cases 2/refi/index.md b/public/content/translations/zh-tw/08) Use cases 2/refi/index.md new file mode 100644 index 00000000000..417e70f4291 --- /dev/null +++ b/public/content/translations/zh-tw/08) Use cases 2/refi/index.md @@ -0,0 +1,81 @@ +--- +title: 再生金融 (ReFi) +description: 再生金融概觀及當前使用案例。 +lang: zh-tw +template: use-cases +emoji: ":recycle:" +sidebarDepth: 2 +image: /images/future_transparent.png +alt: "" +summaryPoint1: 建立在再生原則上的替代性經濟體系 +summaryPoint2: 嘗試使用以太坊解決全球協調危機,如氣候變遷 +summaryPoint3: 大幅擴展生態效益資產(如已驗證碳權)的工具 +--- + +## 什麼是再生金融 (ReFi)? {#what-is-refi} + +**再生金融 (ReFi)** 是建立在[區塊鏈](/glossary/#blockchain)上的一整套想法及工具,目標是建立再生經濟,而非榨取式或剝削式經濟。 榨取式系統最終會耗盡可用資源並崩潰;若沒有再生機制,這套系統便缺乏韌性。 再生金融在此假設下運作:貨幣價值的創造必須脫離以非永續的手段,從我們星球及社群抽取資源。 + +相對的,再生金融的目標是透過建立再生循環以解決環境、公共或社會問題。 這些系統為參與者創造了價值,同時也有益於生態系統及社群。 + +再生金融的其中一個基礎是由 Capital Institute 的 John Fullerton 所提出的再生經濟概念。 他提出了支撐系統健康的[八項相互關聯的原則](https://capitalinstitute.org/8-principles-regenerative-economy/): + +![八個關聯原則](refi-regenerative-economy-diagram.png) + +再生金融專案透過[智慧型合約](/glossary/#smart-contract)及[去中心化金融 (DeFi)](/glossary/#defi) 應用程式來實現這些原則,從而獎勵再生行為,例如復原衰退的生態系統及促進氣候變遷及生物多樣性減損等國際性議題的大規模合作。 + +再生金融也和[去中心化科研 (DeSci)](/desci/) 運動重疊,此運動將以太坊當成融資、創建、審查、信貸、儲存及傳播科學知識的平臺。 去中心化科研工具有益於開發可驗證的再生活動實作及監控之標準及實踐,例如:植樹、消除海洋中的塑膠垃圾,或復原衰退的生態系統等再生活動。 + + + +## 碳權代幣化 {#tokenization-of-carbon-credits} + +**[自願性碳交易市場 (VCM)](https://climatefocus.com/so-what-voluntary-carbon-market-exactly/)** 是為專案融資的一種機制,此等專案會對碳排放產生經驗證的正向影響,能減少持續進行中的碳排放,或消除已排放到大氣中的溫室氣體。 此等專案在經過驗證後會收到稱為「碳權」的資產,碳權可出售給願意支援氣候行動的個人或組織。 + +除了自願性碳交易市場外,也有若干政府批准的官方碳交易市場(「規範市場」),目標是透過特定司法管轄區(如國家或地區)的法律或法規來制定碳權價格,控制可分配的許可供應量。 規範市場能獎勵其司法管轄區內的汙染排放者減少碳排放,但無法消除已被排放的溫室氣體。 + +雖然自願性碳交易市場已發展了數十年,它仍面臨各種問題: + +1. 流動性高度分散 +2. 不透明的交易機制 +3. 手續費過高 +4. 交易速度太慢 +5. 缺乏可擴容性 + +將自願性碳交易市場過渡到以區塊鏈為基礎的新型**數位碳交易市場 (DCM)** 可能是一個升級現有碳權驗證、交易及消費技術的好機會。 區塊鏈允許公開可驗證的資料、更廣泛的使用者存取權,以及更高的流動性。 + +再生金融專案採用區塊鏈科技來緩解傳統市場遇到的諸多問題: + +- **流動性集中於少數流動池中**,任何人都能在裡面自由交易。 大型組織或個人可以直接在流動池中交易,不用手動尋找買家/賣家,也不需要支付參與費用或預先註冊。 +- **所有交易都記錄在公開的區塊鏈上**。 數位碳交易市場中一出現碳權交易,每筆交易活動的路徑永遠都能被追蹤。 +- **交易幾乎即時完成**。 透過傳統市場獲得大量碳權可能會花上數天或數週的時間,但在數位碳交易市場中只需幾秒即可實現。 +- **交易活動不需要中間人**,中間人還會向你收取高額費用。 與傳統碳權相比,數位碳權顯著降低了成本。 +- **數位碳交易市場既可擴張**,亦可滿足個人及跨國公司的需求。 + +### 數位碳交易市場的核心元件 {#key-components-dcm} + +當前的數位碳交易市場由四個主要部分所組成: + +1. [Verra](https://verra.org/project/vcs-program/registry-system/) 和 [Gold Standard](https://www.goldstandard.org/) 等登記處可確保建立碳權的專案可信、可靠。 他們也運用資料庫來記錄數位碳權的來源,碳權可在其中轉移或用罄(註銷)。 + +一波建立於區塊鏈的創新專案正試圖顛覆該領域的現有企業。 + +2. 碳權跨鏈橋,又稱 代幣轉換器,提供了代表傳統登記處中的碳權並將其轉移到數位碳交易市場的技術。 著名例子包括 [Toucan Protocol](https://toucan.earth/)、[C3](https://c3.app/) 和 [Moss.Earth](https://moss.earth/)。 +3. 整合服務是一種向使用者端提供碳減排和/或移除碳權的服務,讓使用者可以宣稱碳權對環境的效益,並與全世界分享他們對氣候行動的支援。 + +例如,[Klima Infinity](https://www.klimadao.finance/infinity) 和 [Senken](https://senken.io/) 提供了由第三方開發並在既定標準(如 Verra)下發行的各種專案;其他如 [Nori](https://nori.com/) 就只提供了以其自家碳權標準開發的特定專案,這些專案由他們發行,並為之準備了自己的專門市場。 + +4. 基礎設施促使碳交易市場整體供應鏈的影響和效益隨之擴張。 [KlimaDAO](http://klimadao.finance/) 將流動性當成公共物品(允許任何人以透明的價格買賣碳權)供應,透過獎勵來提高碳交易市場和碳註銷(指碳權的配額永久減少)的吞吐量,並提供簡單易用的可交互運作工具來存取相關資料,以及收購和註銷各種代幣化碳權。 + +## 碳交易市場以外的再生金融 {#refi-beyond} + +雖然整體來說,目前各界對碳交易市場極為重視,且此領域中,特別看重從自願性碳交易市場轉換到數位碳交易市場,但「再生金融」一詞並不囿限於碳。 碳權以外的其他環境資產均可被開發和代幣化,這表示其他負面外部影響也可以在未來經濟體系的基礎層中定價。 此外,再生式的經濟模型也可用於其他領域,如使用 [Gitcoin](https://gitcoin.co/) 等平方募資平台為公共產品融資。 以開放參與及公平分配資源為核心精神的組織,讓每個人都能資助開放原始碼軟體專案以及教育、環保和社群導向專案。 + +透過將資本由榨取式的做法轉變成再生循環的資金流,對那些提供了社會、環境或公共利益,但可能難以透過傳統金融取得資金的專案及公司來說,他們因而能順利發展,並更快、更輕鬆地為社會產生正向外部影響。 轉變到此融資模式也開啟了更包容的經濟體系,各種背景的人都可以成為主動參與者,而非僅僅是被動的觀察者。 再生金融是以太坊的願景之一,可作為一種行動協調機制,解決人類及地球上所有生命正面臨的現存挑戰 — 並作為新經濟典範的基礎層,促進更包容且更永續的未來世紀。 + +## 關於再生金融的延伸閱讀 + +- [碳貨幣及其在經濟中的地位概觀](https://www.klimadao.finance/blog/the-vision-of-a-carbon-currency) +- [小說《未來部門》(Ministry for the Future),描繪了碳貨幣在對抗氣候變遷上起到的作用。](https://en.wikipedia.org/wiki/The_Ministry_for_the_Future) +- [Taskforce 針對擴張自願性碳交易市場所撰的詳細報告](https://www.iif.com/Portals/1/Files/TSVCM_Report.pdf) +- [由 Kevin Owocki 和 Evan Miyazono 針對再生金融所建的 CoinMarketCap 術語列表](https://coinmarketcap.com/alexandria/glossary/regenerative-finance-refi) diff --git a/public/content/translations/zh-tw/08) Use cases 2/social-networks/index.md b/public/content/translations/zh-tw/08) Use cases 2/social-networks/index.md new file mode 100644 index 00000000000..62de84c45e9 --- /dev/null +++ b/public/content/translations/zh-tw/08) Use cases 2/social-networks/index.md @@ -0,0 +1,106 @@ +--- +title: 去中心化社交網路 +description: 以太坊去中心化社交網路概覽 +lang: zh-tw +template: use-cases +emoji: ":mega:" +sidebarDepth: 2 +image: /images/ethereum-learn.png +summaryPoint1: 基於區塊鏈的平台,用於社交互動、内容建立和分發。 +summaryPoint2: 去中心化社交媒體網路可保護用戶隱私和增強資料安全性。 +summaryPoint3: 代幣和非同質化代幣創造了將內容貨幣化的新方法。 +--- + +社交網路在我們的日常交流和互動中發揮著重要作用。 然而,這些平台的中心化控制產生了許多問題:資料洩露、伺服器中斷、平台禁言、審查制度和侵犯隱私,是社交媒體經常做出的一些取捨。 為了解決這些問題,開發者正在以太坊上建立社交網路。 去中心化社交網路可以解決傳統社交網路平台的許多問題,並提升用戶的整體體驗。 + +## 什麼是去中心化社交網路? {#what-are-decentralized-social-networks} + +去中心化社交網路是[基於區塊鏈](/glossary/#blockchain)的平台,允許使用者交換資訊以及向受眾發布內容。 由於這些應用程式在區塊鏈上運作,它們能夠去中心化且抵抗審查和不當控制。 + +許多去中心化的社交網路已成為現有社交媒體服務的替代品,例如 Facebook、LinkedIn、Twitter 和 Medium。 但基於區塊鏈的社交網路有許多功能,使其領先於傳統社交平台。 + + + +### 去中心化社交網路是如何運作的? {#decentralized-social-networks-overview} + +去中心化社交網路是一類[去中心化應用程式 (dApp)](/dapps/),由部署在區塊鏈上的[智慧型合約](/glossary/#smart-contract)提供支援。 合約程式碼充當這些應用程式的後端並定義它們的業務邏輯。 + +傳統社交媒體平台依靠資料庫來儲存使用者資訊、程式碼和其他形式的資料。 但這會產生單點故障並帶來重大風險。 例如,2021 年 10 月,Facebook 的伺服器[離線數小時](https://www.npr.org/2021/10/05/1043211171/facebook-instagram-whatsapp-outage-business-impact),造成使用者與平台的連線中斷,遭到廣泛的詬病。 + +去中心化社交網路存在於由全球數千個節點組成的[點對點網路](/glossary/#peer-to-peer-network)上。 即使某些節點發生故障,網路仍然會不間斷運作,使應用程式能夠抵禦故障和中斷。 + +基於以太坊建立的社交網路,使用去中心化存儲系統,如[星際文件系統 (IPFS)](https://ipfs.io/),可以保護使用者資訊不被利用和惡意使用。 不會有人將你的個人資訊出售給廣告商,駭客也無法竊取你的機密資訊。 + +許多基於區塊鏈的社交平台都有原生代幣,可以在沒有廣告收入的情況下實現貨幣化。 使用者可以購買這些代幣來存取某些功能、完成應用程式內購買或給他們喜愛的內容創作者小費。 + +## 去中心化社交網路的好處 {#benefits} + +1. 去中心化社交網路可抵抗審查,並對所有人開放。 這意味著**使用者不能被任意封禁**、被平台禁言或限制。 + +2. 去中心化社交網路**建立在開放原始碼理念**的基礎上,並使應用程式的原始碼公開供大眾檢驗。 透過去除傳統社交媒體中常見的不透明演算法實作,基於區塊鏈的社交網路可以讓使用者和平台創立者的利益保持一致。 + +3. 去中心化社交網路取消了「中間人」。 內容**創作者對其創作內容擁有直接所有權**,他們直接與追隨者、粉絲、買家和其他各方互動,雙方之間僅有智慧型合約。 + +4. 由於去中心化應用程式在以太坊網路上運作,而該網路是由一個全球點對點節點網路所維持,因此去中心化社交網路**較不易受到伺服器停機**和中斷的影響。 + +5. 去中心化社交平台透過[非同質化代幣 (NFT)](/glossary/#nft)、應用程式內加密貨幣支付等,為內容創作者提供**更好的貨幣化**框架。 + +6. 去中心化社交網路為使用者提供了**高度的隱私和匿名性**。 例如,個人可以透過[以太坊名稱服務](/glossary/#ens)設定檔或[錢包](/glossary/#wallet)登入基於以太坊的社交網路,而無需共享個人識別資訊 (PII),例如姓名、電子郵件地址等。 + +7. 去中心化社交網路依賴於去中心化的儲存,而不是中心化的資料庫,前者在保護使用者資料方面要好得多。 + +## 以太坊上的去中心化社交網路 {#ethereum-social-networks} + +由於其代幣的流行和龐大的使用者基數,以太坊網路已成為開發者建立去中心化社交媒體的首選工具。 以下是一些基於以太坊的社交網路範例: + +### Mirror {#mirror} + +[Mirror](https://mirror.xyz/) 是一個支援 web3 的寫作平台,旨在實現去中心化和為使用者所擁有。 使用者只需連接錢包即可在 Mirror 上免費閲讀和寫作。 使用者還可以收集寫作作品並訂閱他們喜歡的作者。 + +在 Mirror 上發布的文章會永久儲存在去中心化儲存平台 Arweave 上,並且可以鑄造為可收集的[非同質化代幣 (NFT)](/nft/),也稱為寫作非同質化代幣。 鑄造寫作非同質化代幣對作者來說是完全免費的,並且此非同質化代幣在以太坊[二層網路](/glossary/#layer-2)上收集,使交易變得實惠、快速且環保。 + +### MINDS {#minds} + +[MINDS](https://www.minds.com/) 是最常用的去中心化社交網路之一。 它的運作方式與 Facebook 類似,並且已經吸引了數百萬使用者。 + +使用者使用平台的原生 [ERC-20](/glossary/#erc-20) 代幣 $MIND 來購買物品。 使用者還可以透過發布熱門內容、為生態系統做出貢獻以及將其他人推薦給平台來賺取 $MIND 代幣。 + +## 使用去中心化社交網路 {#use-decentralized-social-networks} + +- **[Status.im](https://status.im/)** - _Status 是安全的訊息傳遞應用程式,使用開放程式碼、點對點協議和端到端加密來保護你的訊息免受第三方的侵害。_ +- **[Mirror.xyz](https://mirror.xyz/)** - _Mirror 是一個基於以太坊構建的使用者擁有的去中心化發布平台,供使用者眾籌創意、將內容貨幣化並建立高價值社群。_ +- **[Lens Protocol](https://lens.xyz/)** - _Lens Protocol 是一個可組合和去中心化的社交圖譜,可幫助創作者在去中心化網際網路的數位花園中的任何地方擁有自己的內容。_ +- **[Farcaster](https://farcaster.xyz/)** - _Farcaster 是一個充分去中心化的社交網路。 它是個支持多種用戶端的開放式協議,如電子郵件。_ + +## 以太坊上的 Web2 社交網路 {#web2-social-networks-and-ethereum} + +[Web3](/glossary/#web3) 原生社交平台並不是唯一試圖將區塊鏈技術融入社交媒體的平台。 許多中心化平台也計劃將以太坊結合到他們的基礎設施中: + +### Reddit {#reddit} + +Reddit 擁有[回饋式社群積分](https://cointelegraph.com/news/reddit-to-reportedly-tokenize-karma-points-and-onboard-500m-new-users),它們是 ERC-20 代幣,使用者可以透過發布優質內容和為線上社群 (subreddit) 貢獻以獲得此積分。 你可以在 subreddit 中兌換這些代幣,以獲得獨家特權和福利。 對於這個專案,Reddit 正在與 Arbitrum 合作,後者為一個[二層](/glossary/#layer-2)網路,旨在拓展以太坊交易。 + +該程式現已上線,使用[運行名為「Moons」的社群積分版本](https://www.reddit.com/r/CryptoCurrency/wiki/moons_wiki)的 r/CryptoCurrency subreddit。 根據官方描述,Moons“會為對 subreddit 做出貢獻的發佈者、評論者、修改者提供獎勵。” 由於這些代幣位於區塊鏈上(使用者通過錢包接收),他們獨立於 Reddit 且不會丟失。 + +除使用社群積分來解鎖特殊功能外,使用者亦可以在交易所用它們來換取法定貨幣。 此外,使用者擁有社群積分的數量決定了他們在社群決策過程中的影響力。 + +## 延伸閱讀 {#further-reading} + +### 文章 {#articles} + +- [去中心化社群媒體:Web3 社交技巧指南](https://www.coinbase.com/blog/decentralizing-social-media-a-guide-to-the-web3-social-stack) - _Coinbase Ventures_ +- [社交網路是下一個大的去中心化機會](https://www.coindesk.com/tech/2021/01/22/social-networks-are-the-next-big-decentralization-opportunity/) — _Ben Goertzel_ +- [Web3 承諾實現由社群推動的去中心化社交網路](https://venturebeat.com/2022/02/26/web3-holds-the-promise-of-decentralized-community-powered-social-networks/) — _Sumit Ghosh_ +- [區塊鏈社交媒體發展形勢概覽](https://www.gemini.com/cryptopedia/blockchain-social-media-decentralized-social-media) — _Gemini Cryptopedia_ +- [區塊鏈如何解決社交媒體隱私問題](https://www.investopedia.com/news/ethereum-blockchain-social-media-privacy-problem-linkedin-indorse/) — _Prableen Bajpai_ +- [社交網路的充分去中心化](https://www.varunsrinivasan.com/2022/01/11/sufficient-decentralization-for-social-networks) — _Varun Srinivasan_ + +### 影片 {#videos} + +- [去中心化社交媒體闡述](https://www.youtube.com/watch?v=UdT2lpcGvcQ) — _Coinmarketcap_ +- [DeSo 區塊鏈希望將社交媒體去中心化](https://www.youtube.com/watch?v=SG2HUiVp0rE) — _Bloomberg Technology_ +- [去中心化社交媒體的未來展望 - Balaji Srinivasan、Vitalik Buterin 和 Juan Benet](https://www.youtube.com/watch?v=DTxE9KV3YrE) — _ETHGlobal_ + +### 社群 {#communities} + +- [r/CryptoCurrency subreddit](https://www.reddit.com/r/CryptoCurrency/) diff --git a/public/content/translations/zh-tw/09) Learn Pages/bridges/index.md b/public/content/translations/zh-tw/09) Learn Pages/bridges/index.md new file mode 100644 index 00000000000..36bd6631ca6 --- /dev/null +++ b/public/content/translations/zh-tw/09) Learn Pages/bridges/index.md @@ -0,0 +1,128 @@ +--- +title: 區塊鏈跨鏈橋簡介 +description: 跨鏈橋讓使用者能在不同的區塊鏈之間轉移資金 +lang: zh-tw +--- + +# 區塊鏈跨鏈橋 {#prerequisites} + +_Web 3 已發展成由一層和二層網路擴容解決方案組成的生態系統,每個解決方案都有獨特的功能和取捨。 隨著區塊鏈協議數量的增加,跨鏈移動資產的需求也隨之增加。 為了滿足此需求,我們需要跨鏈橋。_ + + + +## 什麼是跨鏈橋? {#what-are-bridges} + +區塊鏈跨鏈橋的作用,與現實世界中的橋樑,功用是一樣的。 就像現實橋樑連接兩地一樣,跨鏈橋連接的是兩個區塊鏈生態系統。 **跨鏈橋透過資訊的傳輸和資產的轉移,來促進區塊鏈之間的通訊**。 + +讓我們來看一個例子: + +你來自美國,正計劃去歐洲旅行。 你有美元,但你需要歐元才能消費。 為了將你的美元兌換成歐元,你可以支付少量手續費來換匯。 + +但是,若要進行類似的換匯以使用另一個[區塊鏈](/glossary/#blockchain),你要怎麼做? 假設你想用以太坊主網上的[以太幣](/glossary/#ether)兌換 [Arbitrum](https://arbitrum.io/) 上的以太幣。 就像我們為歐元進行貨幣換匯一樣,我們需要一種機制,將我們的以太幣從以太坊轉移到 Arbitrum。 跨鏈橋能實現這種交易。 在這個例子中,[Arbitrum 有一個原生的跨鏈橋](https://bridge.arbitrum.io/),可以將以太幣從以太坊主網轉移到 Arbitrum。 + +## 為什麼我們需要跨鏈橋? {#why-do-we-need-bridges} + +所有區塊鏈都有局限性。 以太坊需要[卷軸](/glossary/#rollups)才能擴容及跟上需求。 或者,Solana 和 Avalanche 等一層網路,透過不同的設計來實現更高的吞吐量,但是犧牲了去中心化。 + +然而,所有的區塊鏈都是在孤立的環境中發展,並具有不同的規則和[共識](/glossary/#consensus)機制。 這意味著其無法原生通訊,代幣也無法在區塊鏈之間自由移動。 + +跨鏈橋的存在就是為了連接區塊鏈,使彼此之間能傳送資訊和代幣。 + +**跨鏈橋可以做到**: + +- 資產和資訊的跨鏈轉移。 +- 能讓[去中心化應用程式](/glossary/#dapp)利用各區塊鏈的優勢,從而增強區塊鏈的能力(因為協議現在有了更多的創新設計空間)。 +- 能讓使用者存取新的平台,並徹底善用不同區塊鏈的優勢。 +- 能讓來自不同區塊鏈生態系統的開發者相互合作,並為使用者建立新平台。 + +[如何通過跨鏈橋將代幣轉移至第二層網路](/guides/how-to-use-a-bridge/) + + + +## 跨鏈橋使用案例 {#bridge-use-cases} + +以下是一些可以使用跨鏈橋的場景: + +### 降低交易費 {#transaction-fees} + +假設你在以太坊主網上擁有以太幣,但想要以更便宜的交易費來探索不同的去中心化應用程式。 將你的以太幣從主網跨鏈傳送到以太坊二層網路卷軸,可以享有更低的交易費。 + +### 在其他區塊鏈上的去中心化應用程式 {#dapps-other-chains} + +假設你一直在以太坊主網上使用 Aave 借出泰達幣,但在 Polygon 上使用 Aave 借出泰達幣的利率更高。 + +### 探索區塊鏈生態系統 {#explore-ecosystems} + +如果你在以太坊主網上擁有以太幣,並想探索其他一層網路,以試試其原生的去中心化應用程式。 你可以使用跨鏈橋,將以太幣從以太坊主網轉移到其他一層網路。 + +### 擁有原生加密資產 {#own-native} + +假設你想擁有原生比特幣 (BTC),但你的資金只存在於以太坊主網上。 要在以太坊上獲得比特幣,你可以購買包裝比特幣 (WBTC)。 然而,包裝比特幣是以太坊網路原生的 [ERC-20](/glossary/#erc-20) 代幣,這意味著它是以太坊版本的比特幣,而不是比特幣區塊鏈上的原始資產。 要擁有原生比特幣,你必須使用跨鏈橋將資產從以太坊轉移到比特幣。 這將會橋接包裝比特幣並轉換為原生比特幣。 或者,你可能擁有比特幣,並想在以太坊的[去中心化金融](/glossary/#defi)協定中使用它。 這將需要以另一種方式橋接,從比特幣到包裝比特幣,然後可將包裝比特幣作為以太坊上的資產。 + + + 你也可以使用 中央化交易所 完成上述所有操作。 但是,除非你已有資金在交易所內,否則會涉及多個步驟,而你可能會覺得使用跨鏈橋比較好。 + + + + +## 跨鏈橋的類型 {#types-of-bridge} + +跨鏈橋具有許多不同的設計類型和複雜度。 通常,跨鏈橋分為兩類,即受信任和去信任跨鏈橋。 + +| 受任跨鏈橋 | 去信任跨鏈橋 | +| -------------------------------------------- | ---------------------------------------------------------- | +| 受信任跨鏈橋倚賴一個中心實體或系統來運作。 | 去信任跨鏈橋利用智慧型合約及演算法來運行。 | +| 在資金監管及跨鏈橋的安全性方面,具有許多信任假設。 使用者大多有賴於跨鏈橋運營商的聲譽。 | 屬於去信任,即跨鏈橋的安全性與底層區塊鏈的安全性相同。 | +| 使用者需放棄對其加密資產的控制。 | 透過[智慧型合約](/glossary/#smart-contract),去信任跨鏈橋讓使用者能繼續控制他們的資金。 | + +簡而言之,我們可以說受信任跨鏈橋具有信任假設,去信任跨鏈橋則是將信任最小化,不必在底層領域之外做出新的信任假設。 這些術語可做這樣的解釋: + +- **去信任**:安全性等同於底層領域。 如 [Arjun Bhuptani 在本文中所述。](https://medium.com/connext/the-interoperability-trilemma-657c2cf69f17) +- **信任假設:**在系統中加入外部驗證者,擺脫底層領域的安全性,其加密經濟的安全性因此降低。 + +為了更加理解這兩種方法的主要區別,讓我們舉個例子: + +想像你在機場的安檢站。 檢查站有兩種類型: + +1. 人工檢查站-由安檢人員操作,其以人工方式檢查機票和身份的所有細節,完畢後才提供登機證。 +2. 自助報到-由一台機器操作,你可以在其中輸入你的航班詳細資訊,一切檢查完畢後將會收到登機證。 + +人工檢查站類似於受信任模式,因為它需要倚賴第三方(即工作人員)來運作。 使用此服務,你相信工作人員會做出正確的決定並正確使用你的私人資訊。 + +自助報到類似去信任模式,因為卸下了操作員的角色,並使用科技進行操作。 使用者始終可以控制他們的資料,且不必將私人資訊交託給第三方。 + +許多橋接解決方案採用的模式,介於這兩個極端之間,去信任程度不等。 + + + +## 使用跨鏈橋的風險 {#bridge-risk} + +跨鏈橋仍在早期發展階段。 很可能尚未發現最佳的跨鏈橋設計。 與任何類型的跨鏈橋互動都有風險: + +- **智慧型合約風險 —** 程式碼漏洞風險,這可能導致使用者資金流失 +- **技術風險 —** 軟體故障、程式碼漏洞、人為錯誤、垃圾郵件和惡意攻擊可能會干擾使用者作業 + +此外,受信任跨鏈橋由於增加了信任假設,因此帶來額外的風險,例如: + +- **審查風險 —** 跨鏈橋運營商理論上可以阻止使用者利用跨鏈橋來轉移資產 +- **託管風險 —** 跨鏈橋運營商可以串通盜取使用者的資金 + +如果出現以下情況,使用者的資金將面臨風險: + +- 智慧型合約中存在漏洞 +- 使用者出錯 +- 底層區塊鏈被駭客入侵 +- 在某個受信任跨鏈橋中,跨鏈橋運營商心懷不軌 +- 跨鏈橋被駭客入侵 + +最近一次駭客攻擊針對的是 Solana 的 Wormhole 跨鏈橋,[在駭客攻擊期間其被竊取了 12 萬包裝以太幣(3.25 億美元)](https://rekt.news/wormhole-rekt/)。 很多[最嚴重的區塊鏈駭客事件都與跨鏈橋有關](https://rekt.news/leaderboard/)。 + +跨鏈橋對於讓使用者加入以太坊二層網路至關重要,對於想要探索不同生態系統的使用者也是如此。 然而,與跨鏈橋互動涉及上述風險,使用者必須了解跨鏈橋做出了哪些權衡取捨。 這裡提供一些[跨鏈安全性策略](https://blog.debridge.finance/10-strategies-for-cross-chain-security-8ed5f5879946)。 + + + +## 延伸閱讀 {#further-reading} + +- [EIP-5164:跨鏈執行](https://ethereum-magicians.org/t/eip-5164-cross-chain-execution/9658) _2022 年 6 月 18 日 - Brendan Asselstine_ +- [二層網路跨鏈橋風險框架](https://gov.l2beat.com/t/l2bridge-risk-framework/31) _2022 年 7 月 5 日 - Bartek Kiepuszewski_ +- [「為什麼未來會多鏈並存但不是跨鏈」](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) _2022 年 1 月 8 日 - Vitalik Buterin_ diff --git a/public/content/translations/zh-tw/09) Learn Pages/energy-consumption/index.md b/public/content/translations/zh-tw/09) Learn Pages/energy-consumption/index.md new file mode 100644 index 00000000000..d487b73f5ac --- /dev/null +++ b/public/content/translations/zh-tw/09) Learn Pages/energy-consumption/index.md @@ -0,0 +1,82 @@ +--- +title: 以太坊能耗 +description: 了解以太坊能耗時的必要基本資訊。 +lang: zh-tw +--- + +# 以太坊的能耗 {#proof-of-stake-energy} + +以太坊是講求綠色環保的區塊鏈。 以太坊的[權益證明](/developers/docs/consensus-mechanisms/pos)共識機制,使用以太幣而非[能源來維持網路的安全性](/developers/docs/consensus-mechanisms/pow)。 以太坊全球網路的能耗約為[每年 0.0026 太瓦/時](https://carbon-ratings.com/eth-report-2022)。 + +以太坊能源消耗的估算方式,是由 [CCRI (Crypto Carbon Ratings Institute)](https://carbon-ratings.com) 的研究而來。 這項研究由下而上估算了以太坊網路的電力消耗量和碳足跡 ([請參閲報告](https://carbon-ratings.com/eth-report-2022))。 他們測量了不同節點的電力消耗,這些節點具有不同的硬體和用戶端軟體配置。 以太坊網路年度電力消耗之估計值為 **2,601(兆瓦/時)**(0.0026 太瓦/時);套用區域特定碳強度因素後,等同一年碳排放為 **870 公噸二氧化碳當量**。 該值會隨著節點加入或離開網路而變化 - 你可使用[劍橋區塊鏈網路永續性指標](https://ccaf.io/cbnsi/ethereum)(注意:他們使用稍微不同的方法進行估計,詳情請見官網)提供的滾動式七天平均估計值持續追蹤。 + +要深入瞭解以太坊的能耗,我們可以將其與一些其他產品與產業的年度估計值進行比較。 這有助於我們更加了解以太坊的估計值是高還是低。 + + + +上圖比較了以太坊與其他幾種產品和產業的估計能源消耗(單位為太瓦時/年)。 此處提供的估計值來自 2023 年 7 月取用的公開資訊,下表亦提供來源連結。 + +| | 年度能耗(太瓦時) | 相較於權益證明以太坊 | 來源 | +|:----------- |:----------:|:----------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| 全球資料中心 | 190 | 73,000 倍 | [來源](https://www.iea.org/commentaries/data-centres-and-energy-from-global-headlines-to-local-headaches) | +| 比特幣 | 149 | 53,000 倍 | [來源](https://ccaf.io/cbnsi/cbeci/comparisons) | +| 開採金礦 | 131 | 50,000 倍 | [來源](https://ccaf.io/cbnsi/cbeci/comparisons) | +| 美國電競產業\* | 34 | 13,000 倍 | [來源](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential) | +| 工作量證明以太坊 | 21 | 8,100 倍 | [來源](https://ccaf.io/cbnsi/ethereum/1) | +| Google | 19 | 7,300 倍 | [來源](https://www.gstatic.com/gumdrop/sustainability/google-2022-environmental-report.pdf) | +| 網飛 | 0.457 | 176 倍 | [來源](https://assets.ctfassets.net/4cd45et68cgf/7B2bKCqkXDfHLadrjrNWD8/e44583e5b288bdf61e8bf3d7f8562884/2021_US_EN_Netflix_EnvironmentalSocialGovernanceReport-2021_Final.pdf) | +| PayPal | 0.26 | 100 倍 | [來源](https://s202.q4cdn.com/805890769/files/doc_downloads/global-impact/CDP_Climate_Change_PayPal-(1).pdf) | +| AirBnB | 0.02 | 8 倍 | [來源](https://s26.q4cdn.com/656283129/files/doc_downloads/governance_doc_updated/Airbnb-ESG-Factsheet-(Final).pdf) | +| **權益證明以太坊** | **0.0026** | **1 倍** | [來源](https://carbon-ratings.com/eth-report-2022) | + +\*包含終端使用者裝置,如:個人電腦、筆電及遊戲機。 + +要準確估計能耗是很複雜的,尤其是當測量對象具有複雜的供應鏈時,或具有會影響效率的部署細節時。 例如,Netflix 和 Google 的能源消耗估計值隨以下條件而變化:是否只包含用以維護系統及傳遞內容給使用者所消耗的能量(_直接能耗_),還是包含產出內容、企業辦公室運營、廣告等等(_間接能耗_)所消耗的能量。 間接能耗也包括電視、電腦及手機等終端使用者裝置使用內容所消耗的能源。 + +上述能耗估計值的比較並非完美。 間接能耗的總量因來源而異,且往往未包含終端使用者裝置使用的能源。 每個潛在來源都包含了關於測量對象的更多資訊。 + +上面的表格與圖表,也包含了與比特幣及工作量證明以太坊的比較。 需注意的是,工作量證明網路的能耗不是固定的,而是每天都會改變。 不同來源的能耗估計值也各有差異。 此主題引發了深入的[爭論](https://www.coindesk.com/business/2020/05/19/the-last-word-on-bitcoins-energy-consumption/),不僅討論了耗能,還包括能量來源以及相關的道德問題。 能源消耗不一定與環境足跡精準對應,因為不同專案可能使用不同的能源,例如較小或較大比例的再生能源。 舉例來說,[劍橋比特幣電力消耗指標](https://ccaf.io/cbnsi/cbeci/comparisons)指出,運行比特幣網路所需的能量理論上等同於天然氣燃除或電力輸送時損失的部分。 以太坊的永續性路線,是以環保方案取代網路高耗能的部分。 + +你可以在[劍橋區塊鏈網路永續性指標網站](https://ccaf.io/cbnsi/ethereum),瀏覽許多產業的能耗與碳排放估計值。 + +## 每筆交易能耗估計值 {#per-transaction-estimates} + +許多文章估算了區塊鏈「每筆交易」的能耗。 這可能會產生誤導,因為提出和驗證區塊所需的能量與其中的交易數量無關。 若以單筆交易作為計算能耗的單位,意味交易越少能耗將越低,反之亦然,但事實並非如此。 此外,每筆交易的估計值,很大程度上取決於區塊鏈的交易吞吐量是如何定義的,並且可以透過調整這個定義來使估計值看起來更大或更小。 + +例如,在以太坊上交易的吞吐量不僅包含了基礎層的吞吐量,還包含了「[二層網路](/layer-2/)」卷軸的交易吞吐量總和。 二層網路通常不列入計算,但考慮排序者消耗的額外能量(少量)及其處理的交易量(大量),很可能會大幅降低每筆交易的估計值。 這就是為什麼跨平臺比較每筆交易能耗可能產生誤導的原因之一。 + +## 以太坊的碳債 {#carbon-debt} + +目前以太坊的能耗非常低,但並非一直都是如此。 以太坊一開始使用工作量證明,其環境成本比現在的權益證明機制大了許多。 + +最一開始,以太坊就計劃要實現以權益證明為基礎的共識機制,但為了同時確保安全性和去中心化,需要花費多年專注投入研發工作。 因此,一開始網路採用了工作量證明機制。 工作量證明要求礦工使用運算硬體來計算數值,過程中會消耗能源。 + +![比較以太坊合併前後的能源消耗,以左方的艾菲爾鐵塔(高度 330 公尺)象徵合併前的高能耗,以及右方 4 公分高的樂高小玩偶,象徵合併後大幅降低的能源消耗](energy_consumption_pre_post_merge.png) + +根據 CCRI 估算,合併使以太坊年度電力消耗降低了 **99.988%** 以上。 同樣,以太坊碳足跡減少了約 **99.992%** (從 11,016,000 噸減至 870 噸二氧化碳當量)。 如上圖所示,從這一角度來看,減少的碳排放就如同從艾菲爾鐵塔的高度下降到小塑膠玩偶的高度。 因此,確保以太坊網路安全性的環境成本大幅降低。 同時,網路的安全性相信也已得到改善。 + +## 綠色應用程式層 {#green-applications} + +即使以太坊能耗極低,以太坊上仍有穩定成長及高度活躍的[**再生金融 (ReFi)**](/refi/) 廣大社群。 再生金融應用程式使用去中心化金融組件來構建具有積極外部影響、有益於環境的金融應用程式。 再生金融是[「solarpunk」](https://en.wikipedia.org/wiki/Solarpunk)這項廣大運動的一部分,該運動與以太坊緊密結合,目標是將技術進步與環境管理結合。 以太坊具有去中心化、無需許可以及可組合性的特性,這些特性使其成為再生金融和 solarpunk 社群理想的基礎層。 + +[Gitcoin](https://gitcoin.co) 等 Web 3 原生公共財募資平台,舉辦氣候募資輪,以促進以太坊應用程式層開展具環保意識的構建。 透過開發這些倡議 (以及[去中心化科研](/desci/)等等),以太坊正成為一項對環境及社會具有淨正效益的科技。 + + + 如果你認為此頁內容能更加準確,請提出議題或提取請求 (PR)。 呈現在此頁面上的統計數據皆是基於公開數據的估計值 - 它們不代表 ethereum.org 團隊或以太坊基金會的官方聲明或承諾。 + + +## 了解更多 {#further-reading} + +- [劍橋區塊鏈網路永續性指標](https://ccaf.io/cbnsi/ethereum) +- [美國白宮對工作量證明區塊鏈所作的調查報告](https://www.whitehouse.gov/wp-content/uploads/2022/09/09-2022-Crypto-Assets-and-Climate-Report.pdf) +- [以太坊排放量:由下而上估算](https://kylemcdonald.github.io/ethereum-emissions/) - _Kyle McDonald_ +- [以太坊的能耗指標](https://digiconomist.net/ethereum-energy-consumption/) – _Digiconomist_ +- [ETHMerge.com](https://ethmerge.com/) - _[@InsideTheSim](https://twitter.com/InsideTheSim)_ +- [合併 - 對以太坊網路電力消耗及碳足跡之影響](https://carbon-ratings.com/eth-report-2022) - _CCRI_ +- [以太坊的能耗](https://mirror.xyz/jmcook.eth/ODpCLtO4Kq7SCVFbU4He8o8kXs418ZZDTj0lpYlZkR8) + +## 相關主題 {#related-topics} + +- [以太坊的展望](/roadmap/vision/) +- [信標鏈(Beacon Chain)](/roadmap/beacon-chain) +- [合併](/roadmap/merge/) diff --git a/public/content/translations/zh-tw/09) Learn Pages/governance/index.md b/public/content/translations/zh-tw/09) Learn Pages/governance/index.md new file mode 100644 index 00000000000..e1f3dfeedff --- /dev/null +++ b/public/content/translations/zh-tw/09) Learn Pages/governance/index.md @@ -0,0 +1,182 @@ +--- +title: 以太坊管理體系 +description: 以太坊決策方式的簡介。 +lang: zh-tw +--- + +# 以太坊管理體系的簡介 {#introduction} + +_如果沒人擁有以太坊,如何針對以太坊過去和未來的變動,作出相關決定? 以太坊管理體系是一種能讓人作出此類決定的流程。_ + + + +## 什麽是管理體系? {#what-is-governance} + +管理體系是一種讓人能作決策的系統。 一般典型的組織結構中,執行團隊或董事會可能擁有最終決策權。 或者,股東也許能為提案投票,實行變革。 在政治體系中,推選的官員能立法,盡力反映選民的期望。 + +## 去中心化管理體系 {#decentralized-governance} + +以太坊協定並無擁有者或控制者,但為了徹底確保網路長久運作且蓬勃發展,仍需做出實行變革的決策。 由於缺乏擁有權,因此不適合以傳統的組織治理方式來解決。 + +## 以太坊管制 {#ethereum-governance} + +以太坊管理體系是一種變更協定的流程。 此流程本身和人或應用程式如何使用協定無關,這點很重要,以太坊是無需許可的。 世界上每個人都能參與以太坊鏈上的活動。 對於誰能建立應用程式或傳送交易,並無規則限制。 但若想提議變更核心協定,確實有既定的流程,去中心化應用程式就是在此協定上執行。 由於現今太多人倚賴以太坊的穩定性,因此包括社會和技術流程在內,核心變更的協作門檻非常高,確保無論對以太坊作出何種變更,都能安全無虞且獲得社群的廣泛支援。 + +### 鏈上與鏈下管理體系的比較 {#on-chain-vs-off-chain} + +區塊鏈技術為管理體系帶來了新的可能性,俗稱鏈上管理體系。 鏈上管理體系是指提出的協定變更由利益相關方投票決定。通常是管理體系代幣的持有者投票,且投票是在區塊鏈上進行。 某些形式的鏈上管理體系,提出的協定變更已經寫入程式碼中,如果利益相關方簽署交易核准許變更內容,還會自動實作這些變更。 + +鏈外管理體系則與上述體系相反,任何協定變更決定都是透過非正式的社會討論過程進行,一旦經核准,將會實作到程式碼中。 + +**以太坊管理體系發生於鏈下**,參與該流程的利益相關方形形色色。 + +_雖然以太坊管理體系在協定層級為鏈下,但許多建立在以太坊上的使用案例,例如去中心化自治組織,都使用鏈上管理體系。_ + + + 更多去中心化自治組織相關資訊 + + + + +## 誰參與其中? {#who-is-involved} + +[以太坊社群](/community/)中的利益相關方形形色色,在管理體系流程中各有其作用。 以協定為核心,利益相關方從遠到近分別有: + +- **以太幣持有者**:其持有任意數量的以太幣。 [更多以太幣相關資訊](/eth/)。 +- **應用程式使用者**:在以太坊區塊鏈上與應用程式互動。 +- **應用程式/模組化開發者**:其編寫在以太坊區塊鏈上執行的應用程式(例如去中心化金融、非同質化代幣等),或建立模組化,以便和以太坊互動(例如錢包、測試套件等)。 [去中心化應用程式的相關細節](/dapps/)。 +- **節點運營商**:其執行能廣播區塊及交易的節點,拒絕發現的任何無效的交易或區塊。 [更多節點相關資訊](/developers/docs/nodes-and-clients/)。 +- **以太坊改進提案作者**:其提出以太坊改進提案,提議變更以太坊協定。 [更多以太坊改進提案相關資訊](/eips/)。 +- **驗證者**:其執行能為以太坊區塊鏈新增區塊的節點。 +- **協定開發者**(俗稱 「核心開發者」):這些人維護著各種以太坊實作(例如,執行層的 go-ethereum、Nethermind、Besu、Erigon、Reth 或共識層的 Prysm、Lighthouse、Nimbus、Teku、Lodestar)。 [更多以太坊用戶端相關資訊](/developers/docs/nodes-and-clients/)。 + +_注意:任何人都能參與多個組別,例如,協定開發者可以支援以太坊改進提案、執行信標鏈驗證者,並使用去中心化金融應用程式。 但為了清楚交代概念,區分這些相關方是最簡易的作法。_ + + + +## 什麼是以太坊改進提案? {#what-is-an-eip} + +以太坊管理體系採用一個重要的流程,就是**以太坊改進提案 (EIP)**。 以太坊改進提案是規定以太坊潛在的新功能或流程的標準。 以太坊社群中的每一個人都能建立以太坊改進提案。 如果你有興趣編寫 以太坊改進提案或參與同儕審查和/或管理體系,請參閱: + + + 更多以太坊改進提案相關資訊 + + + + +## 正式流程 {#formal-process} + +要對以太坊協定進行變更,正式流程如下: + +1. **提出核心以太坊改進提案**:如 [EIP-1](https://eips.ethereum.org/EIPS/eip-1#core-eips) 所述,要正式對以太坊提出變更,第一步是在核心以太坊改進提案中詳述此變更。 當協定開發者實作以太坊改進提案(若被接受),這將成為此以太坊改進提案的官方規範。 + +2. **將以太坊改進提案提供給協定開發者**:為核心以太坊改進提案收集社群意見後,你應該將其提供給協定開發者。 想提供此提案,提出來在 [AllCoreDevs 電話會議](https://github.com/ethereum/execution-specs/tree/master/network-upgrades#getting-the-considered-for-inclusion-cfi-status)上討論即可。 [Ethereum Magicians 論壇](https://ethereum-magicians.org/)或 [Ethereum R&D Discord](https://discord.gg/mncqtgVSVw) 可能已經非同步進行某些討論。 + +> 此階段可能產生以下結果: + +> - 未來升級網路時會考慮此以太坊改進提案 +> - 將請求進行技術變更 +> - 如果非當務之急,或相對於開發工作而言,改善程度不夠顯著,可能會被拒絕 + +3. **朝最終提案進行迭代:**收到所有利益相關方的回饋意見後,你很可能需要對初始提案進行修改,以提高安全性或更加滿足多種使用者的需求。 當以太坊改進提案納入你認為必須納入的所有變更,你需要再次提供給協定開發者。 之後將進入此流程的下個步驟;或是出現新的問題,提案必須再迭代一輪。 + +4. **網路升級中納入以太坊改進提案**:假設以太坊改進提案已核准、測試及實作,以太坊改進提案會被安排為網路升級的一部分。 由於網路升級的協調成本很高(每個人需同步升級),升級通常會將以太坊改進提案綁搭在一起。 + +5. **網路升級啟動**:啟動網路升級後,以太坊改進提案將能在以太坊網路上線。 _注意:網路升級通常會先在測試網上啟動,之後才在以太坊主網上啟動。_ + +這個流程雖然非常簡化,但大致說明了在以太坊實現協定變更的重要階段。 現在來看看有哪些非正式因素在此流程中產生作用。 + +## 非正式流程 {#informal-process} + +### 了解先前的工作 {#prior-work} + +以太坊改進提案擁護者應先熟悉之前的工作和提案,之後再建立能受到認真考慮可部署於以太坊主網的以太坊改進提案。 這樣一來,以太坊改進提案但願能帶來一些未被拒絕過的新內容。 要深入研究這點,有三個主要的位置:[以太坊改進提案儲存庫](https://github.com/ethereum/EIPs)、[Ethereum Magicians](https://ethereum-magicians.org/) 和 [ethresear.ch](https://ethresear.ch/)。 + +### 工作群組 {#working-groups} + +以太坊改進提案初稿未經編輯或改動,不太可能直接在以太坊主網上實作。 一般來說,以太坊改進提案擁護者會和一部分協定開發者合作,以指定、實作、測試、迭代和完成其提案。 過去,這些工作群組通常需要幾個月,有時甚至數年來完成這項工作! 同樣,提出此類變更的以太坊改進提案擁護者,在努力收集終端使用者的回饋意見和減輕任何部署風險時,應讓相關的應用程式/模組化開發者提早加入行列。 + +### 社群共識 {#community-consensus} + +有些以太坊改進提案都是技術上的改進,簡單明瞭,差別非常細微,有些則較複雜,並且需要權衡,將以不同的方式影響不同的利益相關方。 這表示某些以太坊改進提案在社群中比其他提案更具爭議。 + +對於如何處理具爭議的提案,目前沒有明確的方案。 這是以太坊去中心化設計使然,沒有一個利益相關方群體可以暴力迫使他人:協定開發者可以選擇不要實作程式碼變更;節點運營商可以選擇不要執行最新的以太坊用戶端;應用程式團隊及使用者可以選擇不要在鏈上交易。 由於協定開發者無法強迫人進行網路升級,因此若與給更廣泛的社群帶來利益相比,提案更容易引發爭議,他們通常會避免實作以太坊改進提案。 + +以太坊改進提案擁護者必須向所有利益相關方徵取回饋意見。 如果你擁護的以太坊改進提案有爭議,你應嘗試解決異議,使人對該提案產生共識。 由於以太坊社群廣大、多元,沒有任何一個指標能用來衡量社群共識(例如貨幣投票),以太坊改進提案擁護者必須適應提案的實際情況。 + +除了以太坊網路的安全性以外,協定開發者歷來非常重視應用程式/模組化開發者和應用程式使用者看重些什麼,因為他們在以太坊上的使用與開發行為,是生態系統能吸引其他利益相關方的原因所在。 此外,以太坊改進提案必須跨所有用戶端實作來執行,而用戶端實作由不同的團隊管理。 實作過程中常得說服許多協定開發者團隊相信作出某個變更很重要,能幫助到終端使用者或解決安全性問題。 + + + +## 處理爭論 {#disagreements} + +當涉及多位利益相關方,且各有不同的動機和觀點,有爭議是很常見的。 + +處理爭論時,通常是在公開論壇中進行漫長的討論,以了解問題的根源,並讓任何人都能加入。 通常某一方會讓步,或取得一個皆大歡喜的折衷方法。 如果一方給人感覺很強勢,強力推行某個變更可能會導致鏈分叉。 鏈分叉是指某些利益相關方反對執行協定變更,導致運作的協定出現不相容的版本,從中形成兩條不同的區塊鏈。 + +### 去中心化自治組織分叉 {#dao-fork} + +分叉係指網路必須進行重大的技術升級或變更,且這些升級或變更改變協定的「規則」之時。 [以太坊用戶端](/developers/docs/nodes-and-clients/)必須升級自己的軟體,以實作新分叉規則。 + +實行去中心化自治組織分叉是因為 [2016 DAO 攻擊](https://www.coindesk.com/understanding-dao-hack-journalists),[去中心化自治組織](/glossary/#dao)合約不夠安全,被駭客榨取超過 360 萬以太幣。 使用分叉後,資金從這份有缺陷的合約轉移到新的合約,當時因駭客攻擊而損失資金的人,後來都拿回了資金。 + +這個做法是以太坊社群投票的結果。 所有以太幣持有者都能透過[投票平台](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/)上的交易進行投票。 許多人支持分叉的決定,投票率超過 85%。 + +要注意的是,雖然協定當時利用分叉轉危為安,但投票在決定分叉時所佔的重要性,仍存在爭議,原因如下: + +- 投票率低得驚人 +- 多數人都不知道舉行了投票 +- 這次投票只代表以太幣的持有者,不包括系統中任何其他參與者 + +社群中某些人拒絕分叉,主因是他們認為去中心化自治組織的這起事件,不是協定方面的缺陷。 他們之後又成立[以太坊經典](https://ethereumclassic.org/)平台。 + +如今,以太坊社群遇到合約漏洞或資金損失時採取不干涉政策,以維護系統的中立性和可信度。 + +觀賞影片,深入了解 DAO 遭駭事件: + + + + + +### 分叉的功用 {#forking-utility} + +以太坊/以太坊經典平台的分叉,是良好分叉的絕佳典範。 有兩派人對一些核心價值觀存在非常大的分歧,大到認為值得冒相關的風險追求各自的做法。 + +能否在政治、哲學或經濟差異甚大的情況下實行分叉,對以太坊管理體系的成功有重大的影響。 若不能分叉,另一種方案只能持續暗鬥,以太坊經典平台最終的成立者也只能被迫參與,對以太坊的成功也產生越來越不同的看法。 + + + +## 信標鏈管理體系 {#beacon-chain} + +以太坊管理體系流程常犧牲速度和效率,以換取開放性和包容性。 為了加速信標鏈的發展,信標鏈的推出係獨立於工作量證明以太坊網路之外,並遵循自己的管理體系常規。 + +雖然規範和開發實作一直完全開源,但那些用於提出上述更新內容的正式流程,並未被採用。 這使得研究人員和實作者能更快指定和同意變更內容。 + +2022 年 9 月 15 日,信標鏈與以太坊執行層完成合併,這項合併當時是[巴黎網路升級](/history/#paris)的一部分。 提案 [EIP-3675](https://eips.ethereum.org/EIPS/eip-3675) 從「最後召集」變成「最終確定」,轉變成權益證明機制。 + + + 合併案的相關細節 + + + + +## 我能如何參與其中? {#get-involved} + +- [提出以太坊改進提案](/eips/#participate) +- [探討現有提案](https://ethereum-magicians.org/) +- [參與研發討論](https://ethresear.ch/) +- [加入 Ethereum R&D Discord](https://discord.gg/mncqtgVSVw) +- [運行一節點](/developers/docs/nodes-and-clients/run-a-node/) +- [協助用戶端開發](/developers/docs/nodes-and-clients/#execution-clients) +- [核心開發者學徒計畫](https://blog.ethereum.org/2021/09/06/core-dev-apprenticeship-second-cohort/) + +## 衍生閱讀 {#further-reading} + +以太坊管理體系的定義並不嚴謹。 不同社群參與者對其看法不一。 其中包括: + +- [區塊鏈治理筆記](https://vitalik.eth.limo/general/2017/12/17/voting.html) - _Vitalik Buterin_ +- [以太坊管理體系如何運作?](https://cryptotesters.com/blog/ethereum-governance) – _Cryptotesters_ +- [以太坊管理體系如何運作](https://medium.com/coinmonks/how-ethereum-governance-works-71856426b63a) – _Micah Zoltu_ +- [以太坊核心開發者為何?](https://hudsonjameson.com/2020-06-22-what-is-an-ethereum-core-developer/) - _Hudson Jameson_ +- [管理體系,第二部分:統治階級仍舊令人搖頭](https://vitalik.eth.limo/general/2018/03/28/plutocracy.html) - _Vitalik Buterin_ +- [跳脫代幣投票治理體系](https://vitalik.eth.limo/general/2021/08/16/voting3.html) - _Vitalik Buterin_ diff --git a/public/content/translations/zh-tw/09) Learn Pages/security/index.md b/public/content/translations/zh-tw/09) Learn Pages/security/index.md new file mode 100644 index 00000000000..9866665cea5 --- /dev/null +++ b/public/content/translations/zh-tw/09) Learn Pages/security/index.md @@ -0,0 +1,293 @@ +--- +title: 以太坊安全及詐騙預防 +description: 維護以太坊安全 +lang: zh-tw +--- + +# 以太坊安全性及詐騙防範 {#introduction} + +人們對加密貨幣的興趣日益濃厚,詐騙者和駭客帶來的風險也隨之增加。 本文列出了一些降低此類風險的最佳案例。 + + + +## 加密貨幣安全性基本入門 {#crypto-security} + +### 提升你的知識 {#level-up-your-knowledge} + +不了解加密貨幣的運作方式,可能導致代價可觀的錯誤。 舉例來說,若是不了解以太坊是去中心化網路且未提供客服功能,當有人偽裝成客服人員,謊稱返還遺失的以太幣以藉機索取你的私密金鑰,便很容易落入圈套。 增加對以太坊運作方式的知識,是一項很值得的投資。 + + + 什麼是 Ethereum? + + + + 甚麼是以太(以太幣)? + + + +## 錢包安全性 {#wallet-security} + +### 不要洩露你的私密金鑰 {#protect-private-keys} + +**無論任何原因,絕對不要分享你的私密金鑰!** + +錢包的私密金鑰,就如同開啟以太坊錢包的密碼。 這是唯一阻止別人從你的錢包地址提領所有帳戶資產的方法! + + + 什麼是以太坊錢包? + + +#### 不要拍攝你的種子助記詞/私密金鑰的螢幕擷取畫面 {#screenshot-private-keys} + +拍攝種子助記詞或私密金鑰的螢幕擷取畫面,有同步到雲端資料提供者的風險,為駭客開方便之門。 從雲端獲取私密金鑰是駭客常用的攻擊手法。 + +### 使用硬體錢包 {#use-hardware-wallet} + +硬體錢包讓人能離線儲存私密金鑰。 硬體錢包被視為儲存私密金鑰最安全的錢包選擇:私密金鑰永不連網且完全儲存在本機裝置上。 + +讓私密金鑰保持在離線狀態,即使駭客掌握你的電腦,也能大幅減少駭客入侵的風險。 + +#### 試試硬體錢包: {#try-hardware-wallet} + +- [Ledger](https://www.ledger.com/) +- [Trezor](https://trezor.io/) + +### 發送交易前仔細檢查 {#double-check-transactions} + +不小心將加密貨幣發送到錯誤的錢包地址是一種常見錯誤。 **以太坊上傳送的交易是不可逆的。**除非你知道該地址的擁有者,並能說服他們將資金退回,否則你將無法找回你的資金。 + +發送交易之前,務必確保發送的地址與接收人的地址完全匹配。 此外,與智慧型合約進行互動時,在簽名前閱讀交易訊息是一種良好的實務。 + +### 設定智慧型合約支出限額 {#spend-limits} + +與智慧型合約進行互動時,不允許無支出限額。 若無支出限額,智慧型合約將能掏空你的錢包。 相反,將支出限額僅設定為交易需要的金額。 + +許多以太坊錢包提供限額保護,以防止帳戶被掏空。 + +[如何撤銷授權智慧型合約與你的加密資產互動](/guides/how-to-revoke-token-access/) + + + +## 常見的詐騙手法 {#common-scams} + +完全阻止詐騙者是不可能的,但若了解其常用的手法,就能降低其成功率。 雖然騙局層出不窮,但通常本質相同。 唯一的應對方法是,請記住: + +- 始終保持懷疑態度 +- 沒有人會給你免費或打折的以太幣 +- 沒有人需要獲取你的私密金鑰或個人資訊 + +### 推特廣告釣魚 {#ad-phishing} + +![推特連結釣魚](./twitterPhishingScam.png) + +有種方法可以騙過推特(現在叫 X)的連結預覽功能,潛在地欺騙使用者,讓他們誤以為存取的是正版官網。 此技術利用推特的機制來產生推文中的預覽超連結,並顯示_來自 ethereum.org_(如上例所示),但該連結事實上會重新導向到惡意網站。 + +請一律檢查網域是否正確,特別是點擊連結之後。 + +[點此查看更多資訊](https://harrydenley.com/faking-twitter-unfurling)。 + +### 贈獎詐騙 {#giveaway} + +加密貨幣中最常見的騙局之一是贈獎詐騙。 贈獎詐騙有多種形式,但一般手法大概都是,如果你將以太幣傳送到提供的錢包地址,你會收到雙倍返還的以太幣。 *因此,它也稱為買一送一詐騙。* + +這類詐騙通常會限制領取贈獎的時間,以製造一種虛假的緊迫感。 + +### 社交媒體駭客攻擊 {#social-media-hacks} + +最出名的一次發生在 2020 年 7 月,當時很多知名人士和組織的 Twitter 帳戶被破解。 駭客同一時間使用被盜的帳戶發布了比特幣贈送活動。 雖然這些欺騙性推文很快被察覺並且刪除,但駭客仍僥倖逃脫,取走 11 個比特幣(或截至 2021 年 9 月的 500,000 美元)。 + +![Twitter 上的一個詐騙案例](./appleTwitterScam.png) + +### 名人贈獎活動 {#celebrity-giveaway} + +名人贈獎活動是贈獎詐騙的另一種常見形式。 詐騙者會錄製名人的採訪影片或會議演講,並在 YouTube 上進行直播 — 看起來好像名人正在接受直播採訪影片,支援加密貨幣贈送活動。 + +這類騙局中最常使用的是 Vitalik Buterin,但是也使用了加密貨幣相關的許多其他知名人士(例如 Elon Musk 或 Charles Hoskinson)。 在直播中加入知名人士,會讓騙局看起來感覺合法(雖然值得懷疑,但有 Vitalik 參與,肯定沒問題!)。 + +**贈獎活動從來都是一場騙局。 如果你把資金轉到這些帳戶,永遠要不回來。** + +![YouTube 上的一個詐騙案例](./youtubeScam.png) + +### 支援服務騙局 {#support-scams} + +加密貨幣是一種相對年輕且被誤解的技術。 有一種常見的騙局就是利用這一點,稱為支援服務騙局,詐騙者針對受歡迎的加密貨幣錢包、交易所或區塊鏈,冒充成支援人員。 + +許多關於以太坊的討論,都在 Discord 上發生。 支援服務詐騙者發掘下手目標的方式,通常是在公開的 Discord 頻道中搜尋支援問題,然後向詢問者發送提供支援服務的私人訊息。 詐騙者會建立信任,試圖誘使你透露私密金鑰或將資金發送到他們的錢包。 + +![Discord 上的支援服務詐騙案例](./discordScam.png) + +一般來說,員工絕不會透過非官方私人管道與你交流。 處理支援事宜時,記住幾個簡單的要點: + +- 永遠不要分享私密金鑰、種子助記詞或密碼 +- 絕不允許任何人遠端存取你的電腦 +- 切勿以非官方指定管道來交流 + + +
+ 請注意:支援服務型騙局常發生在 Discord 平台上,但在任何討論加密貨幣的聊天應用程式上也可能很盛行,包括電子郵件。 +
+
+ +### 「以太坊 2」代幣騙局 {#eth2-token-scam} + +在[合併](/roadmap/merge/)的準備階段,詐騙者曾試圖利用「以太坊 2」這個詞製造混淆,讓使用者將以太幣兌換成「以太坊 2」代幣。 但根本沒有所謂的「以太坊 2」,合併後也未導入任何其他合法代幣。 合併前擁有的以太幣,和現在是同一個以太幣。 **在從工作量證明過渡到權益證明時,無需採取任何與以太幣有關的行動**。 + +詐騙者可能會佯裝成「支援團隊」,告訴你如果存入以太幣,將會收到「以太坊 2」代幣。 其實並沒有[以太坊官方支援團隊](/community/support/),也沒有新的代幣。 切勿和任何人分享錢包的種子助記詞。 + +_注意:有些衍生的代幣/行情指示器可能代表被質押的以太幣(即 Rocket Pool 的 rETH、Lido 的 stETH、Coinbase 的 ETH2),但這些都不需要「遷移過去」。_ + +### 網路钓鱼詐騙 {#phishing-scams} + +網路钓鱼詐騙是另一種越來越常見的詐騙手段,詐騙者會利用它試圖竊取錢包中的資金。 + +一些網路釣魚電子郵件要求使用者點選連結,將其重新定向至仿冒的網站,要求他們輸入種子助記詞、重設密碼或發送以太幣。 有些可能會要求你在不知情的情況下安裝惡意軟體,使電腦被感染,並使詐騙者能存取你的電腦文件。 + +如果你收到來歷不明的電子郵件,請記住: + +- 對於不認識的電子郵件地址,切勿打開當中的連結或附件 +- 切勿向任何人洩露你的個人資訊或密碼 +- 刪除來路不明的電子郵件 + +[更多避免網路釣魚詐騙的相關資訊](https://support.mycrypto.com/staying-safe/mycrypto-protips-how-not-to-get-scammed-during-ico) + +### 加密貨幣交易經紀人詐騙 {#broker-scams} + +假冒的加密貨幣交易經紀人自稱是專業的加密貨幣經紀人,他們會提議收取金錢並代表你投資。 詐騙者收到錢後可能會誘導你,要你拿出更多資金以免錯過更多投資收益,他們也可能完全銷聲匿跡。 + +這些騙子經常利用 YouTube 上的虛假帳戶尋找目標,然後開始看似自然地展開有關「經紀人」的交談。 這些對話通常會有很多按讚數,以增加真實性,但都是來自機器人帳戶。 + +**別相信網路上的陌生人、讓他們代你投資。 你的加密貨幣將付諸東流。** + +![YouTube 上的交易經紀人詐騙案例](./brokerScam.png) + +### 加密礦池詐騙 {#mining-pool-scams} + +2022 年 9 月起,已再也無法在以太坊上挖礦。 但是,礦池騙局仍然存在。 礦池騙局中,有人會主動聯繫你,聲稱加入以太坊礦池就能獲得豐厚的回報。 詐騙者會提出要求,並一直與你保持聯繫,不善罷甘休。 基本上,詐騙者會試圖讓你相信,當你加入以太坊礦池時,你的加密貨幣將用來建立以太幣,而你將獲得以太幣形式的紅利。 接著你會發現你的加密貨幣獲得了微薄的回報。 這只是為了引誘你投入更多的資金。 最終,所有資金會傳送到不明的地址,詐騙者要嘛人間蒸發,要嘛在某些情況下繼續保持聯繫,就像最近一個案例一樣。 + +總之,務必警惕那些在社交媒體上聯絡你、要求你加入礦池的人。 一旦失去加密貨幣,就永遠回不來了。 + +牢記以下幾件事: + +- 警惕任何與你聯繫、談及如何使用加密貨幣賺錢的人 +- 針對質押、流動性池或其他加密貨幣投資方式做做功課 +- 這種方式即使是合法的,也非常少見。 否則可能早就成為主流、為人所知。 + +[有人在礦池騙局中損失了 20 萬美元](https://www.reddit.com/r/CoinBase/comments/r0qe0e/scam_or_possible_incredible_payout/) + +### 空投騙局 {#airdrop-scams} + +空投騙局是指詐騙者設局將某個資產(非同質化代幣、代幣)空投到你的錢包裡,然後發送一個詐騙性網站,讓你領取這些空投的資產。 當你嘗試領取資產,會提示你使用自己的以太坊錢包登入,並「核准」一筆交易。 但這筆交易會損害你的帳戶,將公開金鑰和私密金鑰都傳送給詐騙者。 另一種形式,可能是請你確認一筆能將資金轉移到詐騙者帳戶的交易。 + +[更多空投騙局相關資訊](https://www.youtube.com/watch?v=LLL_nQp1lGk) + + + +## 網路安全基本入門 {#web-security} + +### 使用強式密碼 {#use-strong-passwords} + +[80%以上被駭客攻擊的帳戶,都由於密碼不夠强或密碼被盜用](https://cloudnine.com/ediscoverydaily/electronic-discovery/80-percent-hacking-related-breaches-related-password-issues-cybersecurity-trends/)。 由字元、數字和符號組合成的足夠長度的密碼,能為你的帳戶提供足夠的安全性。 + +一個常見的錯誤是,使用幾個常見、相關字詞的組合做為密碼。 此類型的密碼是不安全的,因為容易受到一種被稱為字典攻擊的駭客技術所破解。 + +```md +弱密碼範例:CuteFluffyKittens! + +強式密碼範例:ymv\*azu.EAC8eyp8umf +``` + +另一個常見的錯誤是,使用容易透過[社交工程](https://wikipedia.org/wiki/Social_engineering_(security))猜中或發現的密碼。 在密碼中使用母親娘家姓、子女或寵物的名字或出生日期,都會增加密碼遭駭的風險。 + +#### 良好密碼實務: {#good-password-practices} + +- 只要密碼產生器或填寫的表單允許,密碼越長越好 +- 混用大小寫字母、數字及符號 +- 別在密碼中加入個人細節,例如姓氏 +- 避免使用常見的字詞 + +[更多建立強式密碼的相關資訊](https://terranovasecurity.com/how-to-create-a-strong-password-in-7-easy-steps/) + +### 各帳戶使用不同的密碼 {#use-unique-passwords} + +在資料外洩事件中被揭露的強式密碼,已不再是強式密碼。 [Have I Been Pwned](https://haveibeenpwned.com) 這個網站可以讓你查詢你的帳戶是否涉入任何公開的資料外洩事件。 若涉入資料外洩, **請立即更改你的密碼**。 為每個帳戶使用不同的密碼,這樣在其中一個密碼遭洩漏時,可降低駭客存取你所有帳戶的風險。 + +### 使用密碼管理器 {#use-password-manager} + + +
+ 使用密碼管理器能幫你建立獨特的強式密碼,並且記住密碼! 我們非常建議使用密碼管理器,而且大多數免費! +
+
+ +記住每個帳戶獨一的強式密碼,並不是最理想的方式。 密碼管理員為你所有的密碼提供一個安全的加密儲存位置,只要透過一個強效的主密碼就能取用。 註冊新的服務時,密碼管理器也會自行建議強式密碼,無需自己建立。 許多密碼管理器也會告知你是否涉入資料外洩事件,方便提早更換密碼,以免遭受惡意攻擊。 + +![使用密碼管理器的範例](./passwordManager.png) + +#### 試試密碼管理員: {#try-password-manager} + +- [Bitwarden](https://bitwarden.com/) +- [KeePass](https://keepass.info/) +- [1Password](https://1password.com/) +- 或查看其他[推薦的密碼管理員](https://www.privacytools.io/secure-password-manager) + +### 使用雙因素驗證 {#two-factor-authentication} + +有時候,你可能被要求透過特別的證據來驗證你的身分。 這些證據被稱為**因素**。 主要有三種因素: + +- 你知道的資料(例如密碼或安全性問題) +- 你的身份(例如指紋,或虹膜或臉部掃描器) +- 你擁有之物(安全金鑰,或手機上的驗證應用程式) + +使用**雙因素驗證 (2FA)** 時,可以為你的線上帳戶提供一層額外的*安全因素*。 雙因素驗證保障了即使取得你的密碼,仍不足以存取你的帳戶。 最常見的是,第二組因素是一個隨機的 6 位數代碼,稱為**基於時間的一次性密碼 (TOTP)**,可透過 Google authenticator 或 Authy 等驗證工具應用程式來取得。 這些因素取材自「你擁有之物」,因為產生定時碼的種子,儲存在你的裝置上。 + + +
+ 注意:使用基於簡訊的雙因素驗證容易受到 SIM 卡交換攻擊,因此並不安全。 為了獲得最佳安全性,請使用 Google AuthenticatorAuthy 等服務。 +
+
+ +#### 安全金鑰 {#security-keys} + +安全金鑰是雙因素驗證的進階版,且更加安全。 安全金鑰是一種實體硬體驗證裝置,運作方式與驗證工具應用程式相似。 使用安全金鑰是雙因素驗證最安全的方式。 許多這些金鑰都使用 FIDO 通用第二因素 (U2F) 標準。 [深入了解 FIDO U2F](https://www.yubico.com/authentication-standards/fido-u2f/)。 + +觀賞影片,深入了解雙因素驗證: + + + +### 解除安裝瀏覽器擴充功能 {#uninstall-browser-extensions} + +瀏覽器擴充功能,如 Chrome 擴充功能或 Firefox 附加功能能增強瀏覽器功能,但也伴隨著風險。 大多數瀏覽器擴充功能,皆預設請求「讀取和變更網站資料」的存取權限,如此一來,其幾乎能對你的資料為所欲為。 Chrome 擴充功能總會自動更新,因此原本安全的擴充元件,之後可能會更新並加入惡意程式碼。 多數瀏覽器擴充功能都不會試圖竊取你的資料,但你應該知道它是辦得到的。 + +#### 使用以下方式維持安全性: {#browser-extension-safety} + +- 安裝瀏覽器擴充功能時,只接受信任的來源 +- 移除不使用的瀏覽器擴充功能 +- 在本機安裝 Chrome 擴充功能,以停止自動更新(進階) + +[更多瀏覽器擴充功能風險的相關資訊](https://www.kaspersky.co.uk/blog/browser-extensions-security/12750/) + + + +## 衍生閱讀 {#further-reading} + +### 網路安全 {#reading-web-security} + +- [高達 3 百萬台裝置被含有惡意軟體的 Chrome 與 Edge 附加元件所感染](https://arstechnica.com/information-technology/2020/12/up-to-3-million-devices-infected-by-malware-laced-chrome-and-edge-add-ons/) - _Dan Goodin_ +- [如何建立一個永遠記得住的強式密碼](https://www.avg.com/en/signal/how-to-create-a-strong-password-that-you-wont-forget) - _AVG_ +- [什麼是安全金鑰?](https://help.coinbase.com/en/coinbase/getting-started/verify-my-account/security-keys-faq) - _Coinbase_ + +### 加密貨幣安全 {#reading-crypto-security} + +- [保護自己,保護資金](https://support.mycrypto.com/staying-safe/protecting-yourself-and-your-funds) - _MyCrypto_ +- [幣圈通訊軟體之共同資安問題](https://docs.salusec.io/untitled/web3-penetration-test/risks-in-social-media) - _Salus_ +- [全民必修安全指南](https://medium.com/mycrypto/mycryptos-security-guide-for-dummies-and-smart-people-too-ab178299c82e) - _MyCrypto_ +- [加密貨幣安全性:密碼與驗證](https://www.youtube.com/watch?v=m8jlnZuV1i4) - _Andreas M. Antonopoulos_ + +### 防詐騙指引 {#reading-scam-education} + +- [指南:如何識別詐騙性代幣](/guides/how-to-id-scam-tokens/) +- [保障安全:常見騙局](https://support.mycrypto.com/staying-safe/common-scams) - _MyCrypto_ +- [防範詐騙](https://bitcoin.org/en/scams) - _Bitcoin.org_ +- [從 Twitter 對話一探常見的加密貨幣網路釣魚電郵與訊息](https://twitter.com/tayvano_/status/1516225457640787969) - _Taylor Monahan_ + + diff --git a/public/content/translations/zh-tw/09) Learn Pages/zero-knowledge-proofs/index.md b/public/content/translations/zh-tw/09) Learn Pages/zero-knowledge-proofs/index.md new file mode 100644 index 00000000000..af1ddecf097 --- /dev/null +++ b/public/content/translations/zh-tw/09) Learn Pages/zero-knowledge-proofs/index.md @@ -0,0 +1,214 @@ +--- +title: 零知識證明 +description: 零知識證明的非技術性介紹,適合新手閱讀。 +lang: zh-tw +--- + +# 什麼是零知識證明? {#what-are-zk-proofs} + +零知識證明能證明某陳述有效、卻又無需揭示陳述本身。 「證明者」是試圖證明主張的一方,「驗證者」則負責驗證該主張。 + +零知識證明最早出現在 1985 年的論文:「[互動證明系統的知識複雜度](http://people.csail.mit.edu/silvio/Selected%20Scientific%20Papers/Proof%20Systems/The_Knowledge_Complexity_Of_Interactive_Proof_Systems.pdf)」,其定義了今日廣為使用的零知識證明: + +> 藉由零知識協定,一方(證明者)能向另一方(驗證者)**證明****某事為真,且除了揭露這項陳述屬實之外,不需揭露其他資訊**。 + +經過多年,零知識證明已經有所進展,目前用於幾項真實的應用中。 + + + +## 為什麼我們需要零知識證明? {#why-zero-knowledge-proofs-are-important} + +零知識證明代表應用密碼學的一大突破,因為有望提高個人的資訊安全性。 想想你如何向另一方(例如服務提供商)證明某個主張(例如「我是某某國的公民」)。 你需要提供「證據」支持你的陳述,例如國家護照或駕照。 + +但這種方法存在問題,主要是缺乏隱私。 個人身分識別資訊 (PII) 在與第三方服務分享後,會儲存在中央資料庫,而這些資料庫易受駭客攻擊。 身分盜竊成為十分嚴重的問題,人們呼籲以更能保護隱私的方式分享敏感資訊。 + +透過**消除為證明主張的有效性而需要揭露資訊的必要性**,零知識證明解決了這一問題。 零知識協議利用陳述(稱為「證據」)作為輸入內容,產生關於其有效性的簡潔證明。 這種證明既能有效保證陳述為真,又不會公開建立陳述時所使用的資訊。 + +回到之前的例子,只要有零知識證明,就能證明你所主張的公民身分。 驗證者只需查驗證明當中的某些屬性是否為真,就能夠確信基本陳述也為真。 + +## 零知識證明的使用案例 {#use-cases-for-zero-knowledge-proofs} + +### 匿名支付 {#anonymous-payments} + +往往許多方都能看見信用卡付款,包括支付提供者、銀行和其他利益相關方,例如政府機構。 雖然金融監管對於識別非法活動有其好處,但也會損害一般公民的隱私。 + +加密貨幣原本旨在為使用者提供一種私密、點對點的交易方式。 但大部分加密貨幣交易,在公開區塊鏈上皆可見。 使用者身份通常為匿名,且要嘛刻意與現實身份相關聯(例如在 Twitter 或 GitHub 的設定檔上納入以太坊地址),或是能利用基本的鏈上或鏈外資料分析,與現實身份相關聯。 + +現今有專門為完全匿名交易設計的「隱私幣」。 注重隱私的區塊鏈,例如 Zcash 和 Monero,可以保護交易細節,包括傳送者/接收者的地址、資產類型、數量和交易時間軸。 + +透過在協定中內建零知識技術,注重隱私的[區塊鏈](/glossary/#blockchain)網路允許[節點](/glossary/#node)直接驗證交易,而無需存取交易資料。 + +**零知識證明目前也應用在公開區塊鏈的交易匿名化上**。 例如 Tornado Cash,它是一個去中心化的非託管服務,允許使用者在以太坊上進行私人交易。 Tornado Cash(混幣隱私協定)使用零知識證明來混淆交易細節並保證財務隱私。 遺憾的是,這些是「自願選擇加入」的隱私工具,因此本身和非法活動有關。 為了克服這個問題,隱私終究必須成為公開區塊鏈上的預設選項。 + +### 保護你的身份 {#identity-protection} + +目前的身份管理系統,使得個人資訊面臨風險。 零知識證明既能幫助個人進行身份驗證,又能保護敏感的細節。 + +零知識證明在[去中心化身份](/decentralized-identity/)之下特別有用。 去中心化身份又稱為「身份自主權」,使個人能控制自身身份識別碼的存取權。 既能證明國籍,又不需揭露納稅識別號碼或護照詳情,是零知識技術實現去中心化身份的一個好例子。 + +### 驗證 {#authentication} + +要使用線上服務,必須證明身份以及對此類平台的存取權利。 這通常需要提供個人資訊,例如姓名、電子郵件地址、生日等。 你可能還得記住很長的密碼,或面對遺失存取權限的風險。 + +但零知識證明化繁為簡,平台和使用者都能更輕鬆驗證。 一旦利用公開的輸入(例如那些證明使用者是平台成員的資料)和私密輸入(例如使用者詳細資訊),來產生零知識證明,使用者需要存取服務時就能輕鬆提供,以驗證身份。 這能改善使用體驗,組織也無需儲存大量使用者資訊。 + +### 可驗證計算 {#verifiable-computation} + +可驗證計算是零知識證明用於改進區塊鏈設計的又一應用。 可驗證計算使我們既能將計算外包給另一實體,又能維持可驗證的結果。 該實體會同時提交結果和確認程式已正確執行的證明。 + +可驗證計算在不降低安全性的前提下,**對提高區塊鏈的處理速度至關重要**。 想要搞懂這點,你需要知道提議的以太坊擴容解決方案,各有哪些差別。 + +[鏈上擴容解決方案](/developers/docs/scaling/#on-chain-scaling),例如分片,需要對區塊鏈的基礎層進行大量修改。 但是,這種方法非常複雜,實作出錯時可能會損害以太坊的安全模型。 + +[鏈下擴容解決方案](/developers/docs/scaling/#off-chain-scaling)則無須重新設計以太坊的核心協定。 相反,其仰賴外包的計算模型來改善以太坊基礎層的吞吐量。 + +以下是實際運作方式: + +- 以太坊不需要處理每一筆交易,而是將執行卸載至另一條單獨的鏈。 + +- 處理完交易後,該鏈會將結果傳回,以應用至以太坊的狀態上。 + +這樣做的好處是,以太坊不必進行任何執行操作,只要將外包之計算的結果應用於其狀態。 這既減少了網路壅塞,也提高交易速度(鏈下協定進行最佳化,加快執行速度)。 + +鏈上需要以一種方式來驗證鏈下交易、且不需重新執行這些交易,否則鏈下執行就無意義了。 + +這就是可驗證計算的用武之地。 當一個節點在以太坊鏈下執行交易時,需要提交一個零知識證明來證實鏈下執行的正確性。 這個證明稱為[有效性證明](/glossary/#validity-proof),能保證交易有效,使以太坊能將結果應用於其狀態,無須等任何人提出異議。 + +[零知識卷軸](/developers/docs/scaling/zk-rollups)和 [Validium](/developers/docs/scaling/validium/) 是兩個鏈下擴容解決方案,使用有效性證明來提供安全的可擴容性。 這些協定執行上千次鏈下交易,並提交證明以在以太坊上進行驗證。 一旦證明經過驗證,那些結果就能立刻應用,讓以太坊在不增加基礎層計算負擔的情況下處理更多交易。 + +### 減少鏈上投票中的賄賂與串謀 {#secure-blockchain-voting} + +區塊鏈投票體制具有許多有利特點:完全可稽核、抗攻擊、抗審查,以及不受地理限制。 但即使是鏈上投票體制,也無法避免**串謀**問題。 + +根據定義,串謀是指「相互勾連以欺騙、欺詐和誤導他人,以限制公開競爭」,形式可能是惡意行為者透過行賄來影響投票。 例如,即使 Alice 喜歡 `option A`,她也可能會收到 Bob 的賄賂,被要求投 `option B`。 + +當任何流程使用投票作為訊號傳遞機制時,賄賂和串謀行為會限制此流程的有效性,特別是當使用者能證明自己如何投票時。 這可能會產生重大後果,尤其是當投票負責分配稀有的資源時。 + +例如,[平方募資機制](https://www.radicalxchange.org/concepts/plural-funding/)依靠捐贈來衡量不同公共財專案之間對某些選項的偏好。 每筆捐贈都算是對特定專案做出的「投票」,獲得較多票的專案,會從匹配的池中獲得更多資金。 + +鏈上投票會導致平方募資更容易被串謀所影響:區塊鏈交易是公開的,所以行賄者可以檢查受賄者的鏈上活動,了解他們是如何「投票」的。 這使得平方募資法已不再能根據社群集體的偏好,有效進行資金分配。 + +所幸,MACI(最小反串謀基礎設施)等新式解決方案使用零知識證明,使鏈上投票(例如平方募資機制)能抵禦行賄與串謀。 最小反串謀基礎設施是一組智慧型合約與指令碼,它使中央管理員(稱為「協調員」)能匯集得票數與結果,_而且不會_暴露每個人具體的投票方式。 即使如此,仍然能驗證投票是否正確,或確認某參與者是否參與該輪投票。 + +#### 最小反串謀基礎設施如何與零知識證明搭配運作? {#how-maci-works-with-zk-proofs} + +開始時,協調員會在以太坊上部署最小反串謀基礎設施智慧型合約,之後使用者能註冊他們在智慧型合約裡的公鑰,以進行投票註冊。 使用者將使用公開金鑰加密後的訊息,傳送到智慧型合約,便完成投票(必須以使用者身份相關之最新公開金鑰進行簽署,投票才有效,還有其他的標準)。 之後,協調員在投票截止後處理所有訊息、統計得票數,並在區塊鏈上驗證結果。 + +在最小反串謀基礎設施中,零知識證明用於確保計算的正確性,它使協調員不可能在處理投票和計票時出錯。 因為協調員必須產生零知識簡潔非交互式知識論證證明,驗證 a) 所有訊息皆已處理正確 b) 最終結果與所有_有效_投票的總票數相互對應。 + +因此,就算未分享每位使用者的投票明細(通常都是如此),最小反串謀基礎設施也能為計票過程中計算的結果確保完整性。 這個特點有助於降低基本串謀手法的有效性。 我們可利用 Bob 賄賂 Alice 以影響投票選擇的例子,來探索這個可能性: + +- Alice 將公開金鑰傳送到智慧型合約,以進行投票註冊。 +- Alice 同意投給 `option B` 投票,以換取 Bob 行賄之物。 +- Alice 將票投給 `option B`。 +- Alice 偷偷發送一則加密交易,更改與她的身份有關的公開金鑰。 +- Alice 向智慧型合約發送另一條(加密)資訊,利用新的公開金鑰投票給 `option A`。 +- Alice 向 Bob 展示了一筆交易,該交易顯示她將票投給了 `option B`(這張票是無效的,因為公開金鑰和她在系統裡的身份無任何關聯) +- 處理訊息時,協調員會略過愛麗絲投給 `option B` 的票,而只算投給 `option A` 的票。 因此,Bob 雖嘗試賄賂 Alice 來操縱鏈上投票,但計謀失敗。 + +使用最小反串謀基礎設施時,我們_確實_需信任協調員不會與行賄者串通或自行嘗試賄賂投票者。 協調員可以解密使用者的訊息(產生證明時必須如此),以便準確驗證每個人的投票方式。 + +但在協調員保持誠實的情況下,最小反串謀基礎設施是確保鏈上投票之神聖性的強大工具。 這解釋了它在 [clr.fund](https://clr.fund/#/about/maci) 等平方募資應用程式中為何廣受歡迎,這些程式十分依賴每個個體之投票選擇的完整性。 + +[深入了解最小反串謀基礎設施](https://privacy-scaling-explorations.github.io/maci/)。 + +## 零知識證明如何運作? {#how-do-zero-knowledge-proofs-work} + +零知識證明能讓你證明陳述的真實性,而無需分享陳述的內容,或透露你是如何發現真相的。 為了實現這一點,零知識協定仰賴於演算法,該演算法將某些資料作為輸入,並將「真」或「假」作為輸出。 + +零知識協定必須滿足以下條件: + +1. **完整性**:如果輸入是有效的,零知識協定始終會傳回「真」。 因此,如果基本陳述是真實的,且證明者和驗證者的行為皆誠實,則可接受該證明。 + +2. **健全性**:如果輸入無效,理論上無法欺騙零知識協定傳回「真」。 因此,說謊的證明者無法欺騙誠實的驗證者相信某個無效的陳述為有效(除非有非常小的可能性裕度)。 + +3. **零知識**:驗證者只知道陳述是否有效或謬誤,對該陳述其他資訊一無所知(他們對該陳述擁有「零知識」)。 這項要求亦防止驗證者從證明中推斷出原始輸入(即陳述的內容)。 + +基本形式零知識證明,包含三大要素:**見證**、**挑戰**和**回應**。 + +- **見證**:藉由零知識證明,證明者想證明本身知悉某些隱藏資訊。 這些秘密資訊就是該證據的「見證」,證明者會基於對見證的了解,設立一組只有知道該資訊的一方才能回答的問題。 因此,證明者會隨機選擇一個問題、計算出答案,並將其傳送給驗證者,以展開證明程序。 + +- **挑戰**:驗證者從問題集隨機挑選另一個問題,讓證明者回答。 + +- **回應**:證明者接受問題、計算回答,並傳回給驗證者。 證明者的回應,能讓驗證者查驗證明者是否真的知悉見證。 為了確保證明者不是盲目猜測並碰巧得到正確答案,驗證者會選擇更多問題進行提問。 如此多次互動之後,證明者偽裝知悉見證的可能性會顯著降低,直到驗證者滿意為止。 + +以上描述了「互動式零知識證明」的結構。 早期的零知識協定採用互動式證明,證明者和驗證者必須來回溝通許多次,才能驗證陳述的有效性。 + +互動式證明的運作方式,有個很好的說明範例,就是 Jean-Jacques Quisquater 的著名故事,名為[阿里巴巴的山洞故事](https://en.wikipedia.org/wiki/Zero-knowledge_proof#The_Ali_Baba_cave)。 在這個故事中,Peggy(證明者)想要向 Victor(驗證者)證明她知道開啟一扇魔法門的密語,但不透露該密語。 + +### 非互動式零知識證明 {#non-interactive-zero-knowledge-proofs} + +互動式證明雖具有革命性,但實用性有限,因為雙方必須同時存在並反覆互動。 即使驗證者相信證明者的誠實,該證明也不能用於獨立驗證(要計算出新的證明,證明者和驗證者之間必須有新的訊息集)。 + +為了解決這個問題,Manuel Blum、Paul Feldman 和 Silvio Micali 提出第一個[非互動式零知識證明](https://dl.acm.org/doi/10.1145/62212.62222),其中證明者和驗證者彼此共享金鑰。 這樣一來,證明者能證明他們知悉某些資訊(即見證),且不必提供該資訊本身。 + +非互動式證明和互動式證明不同,參與者(證明者和驗證者)之間只需要溝通一輪。 證明者將秘密資訊輸入到特殊的演算法中,以計算出零知識證明。 此證明會傳送給驗證者,驗證者使用另一個演算法來檢驗證明者是否知道秘密資訊。 + +非互動式證明減少了證明者和驗證者之間的通訊,使零知識證明變得更有效率。 而且一旦產生證明,任何其他能存取共享金鑰和驗證演算法的人,都能予以驗證。 + +非互動式證明是零知識技術的一項突破,並使現今使用的證明系統急速發展。 下面將討論這些證明類型: + +### 零知識證明的類型 {#types-of-zero-knowledge-proofs} + +#### ZK-SNARKs {#zk-snarks} + +ZK-SNARK 是 **Zero-Knowledge Succinct Non-Interactive Argument of Knowledge**(零知識簡潔非交互知識論證)的縮寫。 ZK-SNARK 協定有以下特性: + +- **零知識**:驗證者可以驗證陳述的完整性,而不需要知道關於該陳述的任何其他資訊。 對於該陳述,驗證者只知道其是真是假。 + +- **簡潔**:零知識證明本身比見證更小,能快速驗證。 + +- **非互動**:證明為「非互動式」,因為證明者和驗證者只互動一次,不像互動式證明需溝通許多輪。 + +- **論證**:該證明符合「健全性」要求,因此作弊可能性極低。 + +- **知識**:若不知道秘密資訊(見證),就無法建立零知識證明。 若沒有見證,證明者就算有可能計算出有效的零知識證明,難度也是很高。 + +前面提到的「共享金鑰」,是指證明者和驗證者同意在產生和驗證證明時使用的公共參數。 產生公共參數(統稱公共參考串 (CRS))是一個敏感的操作,因為此操作在協定的安全性方面很重要。 用於產生公共參考串的熵(隨機性),如果落入不誠實的證明者手中,他們能計算出虛假證明。 + +[多方運算 (MPC)](https://en.wikipedia.org/wiki/Secure_multi-party_computation) 是一種在產生公共參數時能降低風險的方法。 許多參與方同時參與[受信任設定儀式](https://zkproof.org/2021/06/30/setup-ceremonies/amp/),每個人都會提供一些隨機的值來產生公共參考串。 只要一個誠實的參與方銷毀他們那部分的熵,零知識簡潔非交互式知識論證協定就能保有運算的健全性。 + +受信任設定要求使用者必須在產生參數上信任參與者。 然而,零知識可擴容透明知識論證的發展使得證明協定能和非信任設定搭配運作。 + +#### ZK-STARKs {#zk-starks} + +ZK-STARK 是** Zero-Knowledge Scalable Transparent Argument of Knowledge(零知識可擴容透明知識論證)**的縮寫。 零知識可擴容透明知識論證與零知識簡潔非交互式知識論證相似,但差別是前者: + +- **可擴容**:當見證大小較大時,零知識簡潔非交互式知識論證在產生和驗證證明時比零知識可擴容透明知識論證更快。 隨著見證大小增加,零知識可擴容透明知識論證證明的證明者和驗證時間只會略微增加(零知識簡潔非交互式知識論證的證明者和驗證時間,則隨見證的大小增加線性增長)。 + +- **透明**:零知識可擴容透明知識論證依賴可公開驗證的隨機性,產生用於證明和驗證的公共參數,而非信任設定。 因此,比零知識簡潔非交互式知識論證更加透明。 + +零知識可擴容透明知識論證產生的證明比零知識簡潔非交互式知識論證更大,這意味著通常具有較高的驗證開銷。 但有些情況下(例如證明大型資料集),零知識可擴容透明知識論證可能比零知識簡潔非交互式知識論證更具成本效益。 + +## 使用零知識證明的缺點 {#drawbacks-of-using-zero-knowledge-proofs} + +### 硬體成本 {#hardware-costs} + +要產生零知識證明,涉及非常複雜的計算,這些計算最好是在專業的機器上運行。 這些機器非常昂貴,普通人通常沒有機會擁有。 此外,想要使用零知識證明的應用程式,必須將硬體成本考慮進去,而這可能會增加終端使用者的費用。 + +### 證明驗證費用 {#proof-verification-costs} + +要對證明進行驗證,也需要經過複雜的計算,還會增加將零知識技術實作於應用程式的成本。 這種成本在證明計算時更加明顯。 例如,零知識卷軸在以太坊上需要支付約 500,000 單位燃料,才能驗證一個零知識簡潔非交互式知識論證,驗證零知識可擴容透明知識論證則需要更高的費用。 + +### 信任假設 {#trust-assumptions} + +在零知識簡潔非交互式知識論證裡,公共參考串(公共參數)會產生一次,然後可供想要參加零知識協定的各方重複使用。 在假設參與者皆誠實的前提下,公共參數是經由受信任設定儀式建立而成。 + +但使用者確實沒有任何方法能評估參與者的誠實度,所以不得不相信開發者的話。 零知識可擴容透明知識論證沒有任何信任假設,因為產生字串所採用的隨機性,是能公開驗證的。 同時,研究人員正在研究零知識簡潔非交互式知識論證的非信任設定,以增加證明機制的安全性。 + +### 量子計算的威脅 {#quantum-computing-threats} + +零知識簡潔非交互式知識論證利用橢圓曲線密碼學來進行加密。 雖然橢圓曲線離散對數問題目前被認為是難以破解的,但在未來,量子電腦的發展可能會打破這種安全模型。 + +零知識可擴容透明知識論證僅依賴抗碰撞雜湊函式提供安全性,因此被視為能防禦量子計算的威脅。 比起橢圓曲線密碼學中使用的公私金鑰配對,抗碰撞雜湊更難被量子計算演算法破解。 + +## 了解更多 {#further-reading} + +- [零知識證明使用案例概述](https://pse.dev/projects) - _隱私與擴容探索團隊_ +- [零知識簡潔非交互式知識論證、零知識可擴容透明知識論證與遞迴零知識簡潔非交互式知識論證三者對比](https://www.alchemy.com/overviews/snarks-vs-starks) — _Alchemy 概述_ +- [零知識證明:改善區塊鏈的隱私](https://www.altoros.com/blog/zero-knowledge-proof-improving-privacy-for-a-blockchain/) — _Dmitry Lavrenov_ +- [零知識簡潔非交互式知識論證 — 零知識現實範例與深入探討](https://medium.com/coinmonks/zk-snarks-a-realistic-zero-knowledge-example-and-deep-dive-c5e6eaa7131c) — _Adam Luciano_ +- [零知識可擴容透明知識論證 — 建立可驗證的信任,哪怕面對量子電腦](https://medium.com/coinmonks/zk-starks-create-verifiable-trust-even-against-quantum-computers-dd9c6a2bb13d) — _Adam Luciano_ +- [關於 sk-SNARKS 為何可行的概述](https://vitalik.eth.limo/general/2021/01/26/snarks.html) — _Vitalik Buterin_ +- [為何零知識證明 (ZKP) 大大改變了自我主權身分之形勢](https://frankiefab.hashnode.dev/why-zero-knowledge-proofs-zkps-is-a-game-changer-for-self-sovereign-identity) — _Franklin Ohaegbulam_ + diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-create-an-ethereum-account/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-create-an-ethereum-account/index.md new file mode 100644 index 00000000000..0b30e32ff0c --- /dev/null +++ b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-create-an-ethereum-account/index.md @@ -0,0 +1,73 @@ +--- +title: 如何「建立」以太坊帳戶 +description: 使用錢包建立以太坊帳戶的逐步指南。 +lang: zh-tw +--- + +# 如何建立一個以太坊帳戶 + +**任何人都可以免費建立以太坊帳戶。**你只需要安裝一個加密錢包應用程式。 錢包建立並與管理你的以太坊帳戶。 它們可以發送交易、查看你的餘額,並讓你連線到其他構建在以太坊網路的應用程式。 + +藉由使用錢包,你也可以立即登入任何代幣交易所、遊戲和[非同質化代幣](/glossary/#nft)市場。 無需單獨註冊,一個帳戶即可共用於所有構建在以太坊網路上的應用程式。 + +## 第一步:建立一個錢包 + +錢包是一個幫助你管理以太坊帳戶的應用程式。 有數十種不同的錢包可供選擇:包括行動端、桌面版,甚至是瀏覽器擴充功能。 + + + + 錢包列表 + + +如果你第一次使用,可以在「找到一個錢包」頁面選擇「加密貨幣新手」篩選條件,得知哪些錢包應含有適合新手使用的所有必要功能。 + +![「選擇錢包」頁面的篩選選項](./wallet-box.png) + +另有其他設定檔篩選條件可滿足你的需求。 下面是常用錢包的一些例子,在信任任何軟體之前,你應該先做些功課。 + +## 步驟 2:下載並安裝錢包應用程式 + +決定使用某個錢包後,請造訪其官方網站或應用程式商店,下載並安裝它。 這些都應該是免費的。 + +## 步驟 3:打開應用程式並建立你的以太坊帳戶 + +第一次打開新錢包時,系統可能會要求你選擇建立新帳戶或匯入現有帳戶。 按一下新帳戶建立。 **這是錢包軟體產生你的以太坊帳戶的步驟。** + +## 步驟 4:儲存助記詞 + +有些應用程式會要求你記下一組秘密的「恢復助記詞」(有時稱為「種子助記詞」或「助記符」)。 妥善保管好這組助記詞非常重要! 它用於產生你的以太坊帳戶並且可以用來提交交易。 + +**任何知道這組助記詞的人都可以掌管所有資金。**切勿與任何人分享此資訊。 這組助記詞應包含 12 到 24 個隨機產生的單字(這些單字的順序很重要)。 + +
+ +
錢包安裝了嗎?
瞭解如何使用它。
+ + 如何使用錢包 + +
+
+ +對其他指南有興趣嗎? 查看我們的[逐步指南](/guides/) + +## 常見問題 + +### 我的錢包和我的以太坊帳戶是否相同? + +否。 錢包是協助管理帳戶的管理工具。 單個錢包可以存取多個帳戶,單個帳戶可以被多個錢包存取。 恢復助記詞用於建立帳戶並授予錢包應用程式管理資產的權限。 + +### 我可以將比特幣傳送到以太坊地址,或將以太幣傳送到比特幣地址嗎? + +沒有辦法。 比特幣和以太幣存在於兩個獨立的網路上(即不同的區塊鏈),每個網路都有自己獨特的記帳和地址格式。 曾有各種將這兩個不同的網路橋接在一起的嘗試,目前最活躍的是[包裝比特幣或 WBTC](https://www.bitcoin.com/get-started/what-is-wbtc/)。 這不是一種認可背書,因為 WBTC 是一個託管解決方案(即由一組人控制某些關鍵功能),此處提供的資訊僅供參考。 + +### 如果我有一個以太幣地址,我在其他區塊鏈上也擁有同一個地址嗎? + +區塊鏈只要使用與以太坊類似的底層軟體(稱為「與以太坊虛擬機相容」),你都可以在所有這些區塊鏈上使用同一個地址。 此[列表](https://chainlist.org/)將展示出同一地址所適用的區塊鏈。 比特幣等某些區塊鏈,實作了一整套獨立的網路規則,你將需要一個不同格式的不同地址。 如果你有智慧型合約錢包,你應該查看其產品網站以更多瞭解它支援哪些區塊鏈,因為這些錢包通常支援的範圍有限但更安全。 + +### 擁有自己的錢包,比將資金存放在交易所上更安全嗎? + +擁有自己的錢包代表你自行負責資產的安全。 很遺憾,目前有許多失敗的交易所,將客戶的錢搞丟了。 擁有一個錢包(帶有恢復助記詞)可以消除將資產托付給某個實體所涉及的風險。 然而,你必須親自保管錢包並避免釣魚詐騙、意外批准交易或暴露助記詞、與假網站互動以及其他自我保管的風險。 風險與好處並不相同。 + +### 如果手機/硬體錢包遺失,需要再次用同一個錢包應用程式恢復遺失的資金嗎? + +不,你可以使用其他錢包。 只要你有種子助記詞,可輸入到大多數的錢包,就能恢復帳戶。 需要這麼做時請小心,恢復錢包時最好確保避免連網,以免種子助記詞不慎外洩。 如果沒有恢復助記詞,通常不可能恢復失去的資金。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-id-scam-tokens/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-id-scam-tokens/index.md new file mode 100644 index 00000000000..919122f164b --- /dev/null +++ b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-id-scam-tokens/index.md @@ -0,0 +1,97 @@ +--- +title: 如何辨識詐騙代幣 +description: 了解詐騙代幣、它們如何使自己看似合法,以及如何避開這種詐騙方式。 +lang: zh-tw +--- + +# 如何辨識詐騙代幣 {#identify-scam-tokens} + +以太坊最常見的用處之一就是為一個團隊建立一種可交易的代幣。某種意義上,這是屬於他們自己的貨幣。 這些代幣通常依循一種標準,那就是 [ERC-20](/developers/docs/standards/tokens/erc-20/)。 然而,任何能產生價值的正當使用案例中,就會有犯罪者嘗試竊取該價值納為已用。 + +他們可能透過這兩種方式行騙: + +- **向你兜售詐騙代幣**,代幣可能看似你想要購買的正規代幣,但其實是由詐騙者發行且不具任何價值的代幣。 +- **誘騙你簽署不利的交易**,手段通常是導引你到他們自己的使用者介面。 他們可能會試圖讓你授權,使他們的合約能花費你的 ERC-20 代幣,暴露敏感訊息而使他們能存取你的資產等。 這些使用者介面可能是正規網站幾近完美的複製品,但隱藏著圈套。 + +為了說明詐騙代幣為何,以及如何辨識詐騙代幣,我們來看一個詐騙代幣示例:[`wARB`](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82)。 這個代幣看起來試圖模仿 [`ARB`](https://etherscan.io/address/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1) 代幣。 + + + +Arbitrum 是一個開發並管理樂觀卷軸的機構。 成立之初,Aubitrum 是一間營利公司,而後採取了去中心化的措施。 在此過程中,他們發行了一種可交易的管理代幣。 + + + + + +以太坊有一個慣例,當一種資產不兼容 ERC-20 時,我們會創建一種「打包」版本,名稱以「w」起頭。 因此,舉例來說,比特幣有 wBTC,而以太幣有 wETH。 + +創建以太坊已有的 ERC-20 代幣的打包版本並不合理,但詐騙代幣看似正規,實際並非如此。 + + + +## 詐騙代幣如何運作? {#how-do-scam-tokens-work} + +以太坊的中心即是去中心化。 這代表沒有中央機構能夠沒收你的資產,或是阻止你部署智慧型合約。 但這也代表詐騙犯可以部署他們想要的任何智慧型合約。 + + + +智慧型合約是在以太坊區塊鏈上運行的程式。 例如,每個 ERC-20 代幣都以智慧型合約的形式實施。 + + + +更具體地說,Arbitrum 部署了一種使用符號 `ARB` 的合約。 但這並不能阻止其他人也部署使用完全相同或類似符號的合約。 寫合約的人可以設定合約如何執行。 + +## 看似正規 {#appearing-legitimate} + +詐騙者通常會使用一些技巧使詐騙代幣看似正規。 + +- **正規的名稱和符號**。 如上所述,ERC-20 合約可以與其他 ERC-20 合約擁有相同的符號和名稱。 你不能依靠這些欄位確保安全性。 + +- **正規擁有者**。 詐騙代幣通常會空投大量餘額到預計是真代幣正規擁有者的地址。 + + 我們再次以 `wARB` 為例。 [大概 16% 的代幣](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82?a=0x1c8db745abe3c8162119b9ef2c13864cd1fdd72f)由公開標籤為 [Arbitrum Foundation: Deployer](https://etherscan.io/address/0x1c8db745abe3c8162119b9ef2c13864cd1fdd72f) 的地址所擁有。 這_並不是_一個假的地址;它真的是[在以太坊主網上部署真 ARB 合約](https://etherscan.io/tx/0x242b50ab4fe9896cb0439cfe6e2321d23feede7eeceb31aa2dbb46fc06ed2670)的地址。 + + 因爲一個地址的 ERC-20 餘額為 ERC-20 合約儲存的一部分,合約開發者可以透過合約將其指定為想要的形式。 合約也可能禁止轉帳,使正規使用者無法擺脫詐騙代幣。 + +- **正規轉帳**。 _正規擁有者不會付錢將詐騙代幣轉帳給他人,因此轉帳一定是正規的,對吧?_ **這是錯的**。 `轉帳`透過 ERC-20 合約發生。 詐騙犯可以輕鬆將合約撰寫成得以產生那些操作。 + +## 詐騙網站 {#websites} + +詐騙犯也可以製作非常具說服力的網站,有時候甚至完全複製真實網站,且具有相同的使用者介面,但藏著詭計。 舉例來說,可能會是看似正規的外部連結,但其實會將使用者送往一個外部詐騙網站;或者是不正確的指示,導引使用者暴露他們的金鑰,或將資金發送到攻擊者的地址。 + +避免此類詐騙的最佳方法就是小心檢查你造訪的網站網址,並將已知的真實網站地址添加到書籤。 如此一來,你就可以透過你的書籤連到真實網站,而不會意外拼錯字或需要依賴外部連結。 + +## 如何保護自己? {#protect-yourself} + +1. **檢查合約地址**。 正規的代幣來自於正規的機構,而你可以在機構網站上找到合約地址。 以 [`ARB` 為例,你可以在這裡](https://docs.arbitrum.foundation/deployment-addresses#token)看到正規地址。 + +2. **真正的代幣具有流動性**。 另一個方案是在最常見的代幣交換協議 [Uniswap](https://uniswap.org/) 上查看流動池的大小。 此協議以流動性池操作,讓投資者存放他們的代幣,以期透過交易費用賺取回報。 + +即便有,詐騙代幣通常具有非常小的流動池,因為詐騙犯不想冒失去真資產的風險。 舉例來說,`ARB`/`ETH` 的 Uniswap 池大概有一百萬美元([單擊此處參考最新數值](https://info.uniswap.org/#/pools/0x755e5a186f0469583bd2e80d1216e02ab88ec6ca)),而小量買賣並不會改變價格: + +![購買正規代幣](./uniswap-real.png) + +但當你嘗試購買詐騙代幣 `wARB` 時,即使是小量的購買也會使價格改變超過 90%: + +![購買詐騙代幣](./uniswap-scam.png) + +這裡是另外一個告訴我們 `wARB` 不太可能是正規代幣的證明。 + +3. **在 Etherscan 區塊瀏覽器中查看**。 社群已經辨識出且舉報過許多詐騙代幣。 那些代幣[會在 Etherscan 區塊瀏覽器上被標註](https://info.etherscan.com/etherscan-token-reputation/)。 雖然 Etherscan 區塊瀏覽器不是官方事實來源(這是因為去中心化網路本質上並不會有正規的官方來源),但 Etherscan 區塊瀏覽器辨識為詐騙的代幣通常為詐騙代幣。 + + ![Etherscan 區塊瀏覽器中的詐騙代幣](./etherscan-scam.png) + +## 結論 {#conclusion} + +只要世界上存在價值,就會有嘗試挪為自用的詐騙犯,且在一個去中心化的世界裡,除了你,沒有任何人可以保護你。 希望你記住這幾點,幫助你區別正規代幣和詐騙: + +- 詐騙代幣會模仿正規代幣,且可以使用同樣的名稱、符號等等。 +- 詐騙代幣_無法_使用相同的合約地址。 +- 正規代幣地址的最佳來源是該代幣的發行機構。 +- 若無,你可以使用常見且可信的應用程式,例如 [Uniswap](https://app.uniswap.org/#/swap) 和 [Etherscan 區塊瀏覽器](https://etherscan.io/)。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-revoke-token-access/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-revoke-token-access/index.md new file mode 100644 index 00000000000..22ca709d420 --- /dev/null +++ b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-revoke-token-access/index.md @@ -0,0 +1,73 @@ +--- +title: 如何撤銷授權智慧型合約與你的加密資產互動 +description: 關於如何撤銷授權智慧型合約代幣存取權的指南 +lang: zh-tw +--- + +# 如何撤銷授權智慧型合約與你的加密資產互動 + +本指南會教你如何檢視所有你已授權存取你的資金的[智慧型合約](/glossary/#smart-contract)清單,以及如何取消授權。 + +有時惡意開發者會在智慧型合約開後門,以存取與該智慧型合約互動的不知情使用者的資金。 這樣的平台通常會要求使用者授予其支出**無限數量代幣**的權限,以嘗試在未來節省少量的[燃料](/glossary/#gas),但這會帶來更高的風險。 + +一旦平台取得你[錢包](/glossary/#wallet)中代幣的無限存取權限後,即使你把代幣從該平台提取到你的錢包裏,他們依然可以支出所有這些代幣。 不法者們仍然可以存取你的資金並提取到他們的錢包中,而你將無法做任何恢復操作。 + +唯一的保護措施是避免使用未經測試的新專案,只授權你所需的權限,或者定期撤銷存取權限。 所以,你會怎麼做呢? + +## 步驟 1:使用撤銷存取工具 + +有幾個網站可以讓你查看和撤銷連接到你地址的智慧型合約。 訪問以下網站並連接你的錢包: + +- [Ethallowance](https://ethallowance.com/)(以太坊) +- [Etherscan](https://etherscan.io/tokenapprovalchecker)(以太坊) +- [Cointool](https://cointool.app/approve/eth)(多種網路) +- [Revoke](https://revoke.cash/)(多種網路) +- [Unrekt](https://app.unrekt.net/)(多種網路) +- [EverRevoke](https://everrise.com/everrevoke/)(多種網路) + +## 步驟 2:連接你的錢包 + +進入網站後,點擊「連接錢包」。 網站也會提示你連接你的錢包。 + +確保你的錢包和網站使用的是同一網路。 你會看到與所選網路相關的智慧型合約。 例如,如果你連接的是以太坊主網,那你將只能看到以太坊合約,而来自其他鏈,如 Polygon 的合约不會在此出現。 + +## 步驟 3:選擇一個你想要撤銷的智慧型合約 + +你會看到所有可存取你的代幣和支出額度的合約。 從中找到你想要撤銷的合約。 + +如果你不知道要選擇哪一個,你可以撤銷全部合約。 這並不會產生任何影響,但是在下一次與這些合約互動時,你必須重新授權。 + +## 步驟 4:撤銷對資產的存取權限 + +點擊「撤銷」後,你的錢包將收到一條新的交易提示。 這是正常的。 你需要為此支付一筆「撤銷費」才能成功撤銷。 根據網路的不同,處理時間需要一分鐘到數分鐘。 + +我們建議你在幾分鐘後刷新撤銷工具,並再次連接你的錢包來確認被撤銷的合約是否已從清單中移除。 + +我們建議你永遠不要讓專案無限制地存取你的代幣,並定期撤銷所有代幣存取權限。 撤銷代幣存取權限永遠不會導致資金損失,尤其是使用上面列出的工具時。 + +
+ + +
想瞭解更多嗎?
+ + 查看我們的其他指南 + +
+ +## 常見問題 + +### 撤銷代幣存取權限是否也會終止質押、聯合質押、借貸等操作? + +否,這不會影響你的任何[去中心化金融](/glossary/#defi)策略。 你的持倉和所獲得的酬勞等都會保持不變。 + +### 從專案中斷開錢包連接和撤銷資金使用權限是否相同? + +不相同,如果你從該專案中斷開你的錢包連接,但你已經授予代幣存取權限,他們仍然可以使用那些代幣。 你需要撤銷相關權限。 + +### 合約訪問權限何時會過期? + +合約訪問權限並沒有到期日。 如果你授予合約訪問權限,即使在多年後,它們仍然可以被使用。 + +### 為什麼專案會設置無限的代幣存取權限? + +專案經常這麼做是為了最小化所需的請求次數,這也意味著使用者只需批准一次並支付一次交易費。 雖然這麼做很方便,但是使用者在未經時間考驗或審核的網站上隨意授予存取權限很危險。 一些錢包允許你手動限制授權的代幣數量來降低你的風險。 請向你的錢包供應商查詢更多相關資訊。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-swap-tokens/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-swap-tokens/index.md new file mode 100644 index 00000000000..23b6e6144ed --- /dev/null +++ b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-swap-tokens/index.md @@ -0,0 +1,67 @@ +--- +title: 如何兌換代幣 +description: 關於如何在以太坊兌換代幣的指南。 +lang: zh-tw +--- + +# 如何兌換代幣 + +你是否厭倦了尋找一個能列出你喜歡的所有代幣的交易所? 你可以使用[去中心化交易所](/glossary/#dex)兌換大部分代幣。 + +代幣兌換是指在以太坊網路上交換兩種不同的資產,例如將以太幣兌換成 DAI(一種 [ERC-20](/glossary/#erc-20) 代幣)。 這個過程高效且便宜。 你需要一個加密錢包來兌換代幣。 + +**先決條件:** + +- 如果擁有一個[加密錢包](/glossary/#wallet),你可以關注以下使用教學:[如何:「註冊」以太坊帳戶](/guides/how-to-create-an-ethereum-account/) +- 在你的錢包中添加資金 + +## 1. 連接你的錢包到所選擇的去中心化交易所 (DEX) + +一些受歡迎的交易所: + +- [Uniswap](https://app.uniswap.org/#/swap) +- [Sushiswap](https://www.sushi.com/swap) +- [1Inch](https://app.1inch.io/#/1/unified/swap/ETH/DAI) +- [Curve](https://curve.fi/#/ethereum/swap) + +有興趣嗎? 學習更多關於[去中心化金融 (DeFi)](/defi/) 是什麼,以及這些新形態的交易所是如何運作的知識。 + +## 2. 選擇一對你想要兌換的代幣 + +例如以太幣和 DAI。 確保兩種代幣中任意一種有資金。 ![兌換的通用接口](./swap1.png) + +## 3. 輸入要交易的代幣數量,點擊「兌換」 + +交易所將自動計算你將獲得多少代幣。 + +![兌換的通用接口](./swap2.png) + +## 4 確認交易 + +查看交易的詳細資訊。 了解兌換率和其他費用,以避免出現不必要的「驚喜」。 + +![審查交易的通用接口](./swap3.png) + +## 5 等待交易處理 + +你可以在任何區塊鏈瀏覽器上查看交易進度。 此過程不會超過 10 分鐘。 + +交易處理完成後,你的錢包中將自動收到所兌換的代幣。 +
+ + +
想要學習更多功能嗎?
+ + 查看我們的其他指南 + +
+ +## 常見問題 + +### 我可以從我的錢包中將以太幣兌換成比特幣嗎? + +不可以,你只能兌換以太坊網路原生的代幣,例如以太幣、ERC-20 代幣或非同質化代幣。 你只能兌換以太坊上以「打包」形式存在的比特幣。 + +### 什麼是滑點? + +這是指你所預期的兌換率與實際兌換率之間的差異。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-bridge/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-bridge/index.md new file mode 100644 index 00000000000..7110955129e --- /dev/null +++ b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-bridge/index.md @@ -0,0 +1,70 @@ +--- +title: 如何通過跨鏈橋將代幣轉移至第二層網路 +description: 關於如何使用跨鏈橋將代幣從以太坊轉移到二層網路的指南。 +lang: zh-tw +--- + +# 如何通過跨鏈橋將代幣轉移至第二層網路 + +如果以太坊上的交易量很大,它將可能變得非常昂貴。 其中一種解決方式是在以太坊網路以外增加新的「網路層」(即使用與以太坊本身相似的方法運行的不同網路)。 這些稱為二層網路的解決方案能處理大量低費用交易,且有時只將這些交易結果儲存到以太坊,從而幫助以太坊減少擁堵與成本。 如此一來,這些二層網路可以讓使用者以更快的速度與較低的費用進行交易。 由於上述諸多優點,許多加密貨幣的專案方會逐漸轉移至二層網路。 而其中最簡單的方法,便是以「跨鏈橋」將貨幣從以太坊轉向二層網路。 + +**先決條件:** + +- 如果擁有一個加密錢包,你可以關注以下使用教學:[如何:「註冊」以太坊帳戶](/guides/how-to-create-an-ethereum-account/) +- 在你的錢包中添加資金 + +## 1. 決定你要使用哪一個二層網路 + +在我們的[二層網路頁面](/layer-2/)上,你可以更深入地了解不同的專案與重要連結。 + +## 2. 前往你選擇的跨鏈橋 + +一些熱門的二層網路如下: + +- [Arbitrum 跨鏈橋](https://bridge.arbitrum.io/?l2ChainId=42161) +- [Optimism 跨鏈橋](https://app.optimism.io/bridge/deposit) +- [Boba 網路跨鏈橋](https://gateway.boba.network/) + +## 3. 將跨鏈橋連接到你的錢包 + +確保你的錢包已經連結到以太坊主網網路。 如果並未連結,網頁會自動提示你切換網路。 + +![橋接代幣的通用介面](./bridge1.png) + +## 4 指定金額然後轉移資金 + +查看你在二層網路將獲取的金額與交易費來避免不愉快的事件。 + +![橋接代幣的通用介面](./bridge2.png) + +## 5 在錢包中確認交易 + +你將需要用以太幣支付一定金額的交易處理費用。 + +![橋接代幣的通用介面](./bridge3.png) + +## 6. 等待資金轉移 + +此流程通常會在 10 分鐘內完成。 + +## 7. 把選取的二層網路加到你的錢包(可選) + +可以使用 [chainlist.org](http://chainlist.org) 找到該網路遠端程式呼叫協定的詳細資訊。 添加網路並完成交易後,你會看到代幣出現在你的錢包中。 +
+ + +
想要學習更多功能嗎?
+ + 查看我們的其他指南 + +
+ +## 常見問題 + +### 如果我在交易所持有資產怎麼辦? + +你或許可以從交易所直接提取資產到二層網路。 你可以至我們[二層網路頁面](/layer-2/)的「移至二層網路」獲取更多資訊。 + +### 我能夠在我的代幣橋接到二層網路之後回到以太坊主網嗎? + +可以,你可以隨時利用相同的跨鏈橋將你的資產轉移回主網。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-wallet/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-wallet/index.md new file mode 100644 index 00000000000..049a01d5ccc --- /dev/null +++ b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-wallet/index.md @@ -0,0 +1,88 @@ +--- +title: 如何使用錢包 +description: 關於如何發送、接收代幣和連接到 web3 專案的指南。 +lang: zh-tw +--- + +# 如何使用錢包 + +學習如何使用錢包的所有基本功能。 如果你還沒有錢包,請查看[如何建立以太坊帳戶](/guides/how-to-create-an-ethereum-account/)。 + +## 打開你的錢包 + +你將會看到一個儀表板,其中顯示了你的餘額和用於發送和接收代幣的按鈕。 + +## 接收加密貨幣 + +你想將加密貨幣存入你的錢包中嗎? + +每個以太坊帳戶都會有它專屬的接收地址,這個地址由一串獨一無二的數字和字母組成。 這個地址的功能類似於銀行的帳戶號碼。 以太坊地址始終以「0x」開頭。 你可以將這個地址和任何人分享:這麼做很安全。 + +你的以太坊地址就如同住家地址一樣:你需要告訴別人你的地址,他們才有辦法找到你。 這麼做很安全,因為你仍然可以用只有你能控制的另一把鑰匙鎖上你的前門,這樣即使他們知道你住在哪也沒有辦法進入。 + +無論是誰想轉帳給你,你都得提供你的公共地址給他們。 許多錢包應用程式會讓你複製你的地址或出示二維碼供掃描,以方便使用。 應避免手動輸入任何以太坊地址。 這很容易導致輸入錯誤和資金損失。 + +雖然不同的應用程式有著不同的內容,甚至連它們所使用的設計語言也大不相同,但是如果你想在應用程式內轉帳,其操作和過程都大同小異: + +1. 打開你的錢包應用程式。 +2. 點擊「接收」(或其他具有類似表述的選項)。 +3. 複製你的以太坊地址到剪貼簿。 +4. 向發送者提供你的以太坊接收地址。 + +## 發送加密貨幣 + +你想將以太幣發送到另一個錢包嗎? + +1. 打開你的錢包應用程式。 +2. 取得接收者的地址並確保你與接收者連接到相同的網路。 +3. 輸入接收者的地址或使用你的相機掃描二維碼,這樣就不需手動輸入地址。 +4. 點擊錢包中的「發送」按鈕(或顯示類似描述的按鈕)。 + +![加密貨幣地址的發送欄位](./send.png) +
+ +5. 許多資產,如 DAI 或 USDC,存在於多種網路上。 轉移加密代幣時,請確認接收者和你在相同網路上,因為不同網路上的代幣不可互換。 +6. 確保你的錢包中有足夠的以太幣可支付交易費,交易費依網路狀態而異。 大部分錢包會將建議的交易費自動加到交易中,你可以直接確認。 +7. 你的交易處理完之後,對應數量的加密貨幣就會出現在接收者的帳戶中。 這可能需要數秒至數分鐘,取決於目前使用網路的人數。 + +## 連接到專案 + +你在所有以太坊專案中的地址都相同。 並不需要為了每個專案單獨註冊。 有了錢包後,你就可以連接到任何以太坊專案而無需提供任何額外資訊。 不需要電子郵件地址或其他任何個人資訊。 + +1. 訪問任何專案的網站。 +2. 如果專案的登陸頁面只是描述該專案的靜態網頁,你應可點擊選單中的「開啟應用程式」按鈕,這麼做會將你導引至實際的應用程式頁面。 +3. 進入應用程式後,按一下「連接」。 + +![讓使用者透過錢包連接到網站的按鈕](./connect1.png) + +4. 從提供的錢包列表中選擇你使用的錢包。 如果找不到你所用的錢包,它可能隱藏在「WalletConnect」選項下。 + +![從錢包列表中選擇要連接的錢包](./connect2.png) + +5. 在你的錢包中確認並簽名以建立連接。 **簽署此訊息應不會花費任何以太幣**。 +6. 大功告成! 開始使用應用程式。 你可在我們的[去中心化應用程式頁面](/dapps/#explore)找到許多有趣的專案。
+ + +
想要學習更多功能嗎?
+ + 查看我們的其他指南 + +
+ +## 常見問題 + +### 如果我有一個以太幣地址,我在其他區塊鏈上也擁有同一個地址嗎? + +你可以在所有兼容以太坊虛擬機的區塊鏈上使用相同的地址(如果你的錢包帶有助記詞)。 此[列表](https://chainlist.org/)將展示出同一地址所適用的區塊鏈。 比特幣等某些區塊鏈,實作了一整套獨立的網路規則,你將需要一個不同格式的不同地址。 如果你有智慧型合約錢包,應查看其產品網站,以深入了解哪些區塊鏈受支援。 + +### 我可以在多台設備上使用相同的地址嗎? + +可以,你可以在多台設備上使用相同的地址。 技術上而言,錢包僅是顯示你餘額及進行交易的界面,你的帳戶並不儲存在錢包中,而是在區塊鏈上。 + +### 我還沒有收到加密貨幣,我可以在哪裡查看交易狀態? + +你可以使用[區塊鏈瀏覽器](/developers/docs/data-and-analytics/block-explorers/)即時查看交易狀態。 你只需要搜尋你的錢包地址或交易 ID。 + +### 我能否取消交易或退款? + +不能,一旦交易確認,你將無法取消交易。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/index.md new file mode 100644 index 00000000000..e01dc109d28 --- /dev/null +++ b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/index.md @@ -0,0 +1,27 @@ +--- +title: 以太坊指南 +description: 一組實用指南,向初學者解釋有關使用以太坊的基礎知識。 +lang: zh-tw +--- + +# 以太坊指南 + +想要開啟你的以太坊之旅嗎? 我們的實用指南將帶你一步一步開始認識以太坊,並讓你更輕鬆地使用這項新技術。 + +## 開始使用 + +1. [如何「創建」以太坊帳戶](/guides/how-to-create-an-ethereum-account/) - 任何人都可以免費創建一個錢包。 本指南會引導你從哪裡開始。 + +2. [如何使用錢包](/guides/how-to-use-a-wallet/) - 各種錢包的基本功能及用法介紹。 + +## 安全基礎知識 + +1. [如何撤銷對加密資金的智慧型合約的存取權限](/guides/how-to-revoke-token-access/) - 如果你突然發現錢包裡有一筆不是由你發起的交易,本指南將教你如何防止該情況再次發生。 + +2. [如何識別詐騙代幣](/guides/how-to-id-scam-tokens/) - 什麼是詐騙代幣?詐騙代幣如何使自身看起來像合法代幣?如何識別詐騙代幣並保護自己不掉入詐騙代幣的騙局。 + +## 使用以太坊 + +1. [如何橋接代幣到二層網路?](/guides/how-to-use-a-bridge/) - 以太坊交易是否太過昂貴? 可以考慮轉而使用以太坊擴容方案,即二層網路。 + +2. [如何兌換代幣](/guides/how-to-swap-tokens/) - 你想要兌換為其他代幣嗎? 本簡潔指南將為你演示如何操作。 diff --git a/public/content/translations/zh-tw/11) Roadmap/eips/index.md b/public/content/translations/zh-tw/11) Roadmap/eips/index.md new file mode 100644 index 00000000000..9465f252a3a --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/eips/index.md @@ -0,0 +1,79 @@ +--- +title: 以太坊改進提案 (EIP) +description: 你需要知道的以太坊改進提案基本知識 +lang: zh-tw +--- + +# 以太坊改進提案 (EIP) 簡介 {#introduction-to-ethereum-improvement-proposals} + +## 什麼是以太坊改進提案? {#what-are-eips} + +[以太坊改進提案 (EIP)](https://eips.ethereum.org/) 是一種標準,用於明定以太坊的潛在新功能或流程。 以太坊改進提案中包含擬定變更的技術規範,相當於以太坊社群的「事實來源」。 以太坊的網路升級和應用程式標準乃透過以太坊改進提案流程商討和制定。 + +以太坊社群的任何人皆可建立以太坊改進提案。 [EIP-1](https://eips.ethereum.org/EIPS/eip-1) 中附有以太坊改進提案撰寫準則。 以太坊改進提案主要應簡明介紹技術規範並概述變更誘因。 以太坊改進提案作者負責在社群內尋求共識並記錄不同意見。 由於提出優秀以太坊改進提案的技術門檻很高,根據過往經驗,通常大部分以太坊改進提案的作者都是應用程式或者協定開發者。 + +## 以太坊改進提案為什麼很重要? {#why-do-eips-matter} + +以太坊改進提案對於確定如何實作變更以及確保將變更記錄在以太坊上至關重要。 人們依之擬定變更、針對變更展開辯論並採納變更。 [有多種類型的以太坊改進提案](https://eips.ethereum.org/EIPS/eip-1#eip-types),包括核心以太坊改進提案(針對影響共識且要求進行網路升級的低層級協定變更,如 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559))和以太坊開發者公開徵求意見(針對應用程式標準,如 [EIP-20](https://eips.ethereum.org/EIPS/eip-20) 和 [EIP-721](https://eips.ethereum.org/EIPS/eip-721))。 + +每次網路升級包含一組以太坊改進提案,網路上的每個[以太坊用戶端](/learn/#clients-and-nodes)都必須實作。 也就是說,為了與以太坊主網上的其他用戶端保持共識,用戶端開發者需要確保他們皆已實作所需的以太坊改進提案。 + +以太坊改進提案提供變更的技術規範,不僅如此,以太坊還以其為單位推行治理舉措:任何人皆可擬定以太坊改進提案,然後社群中的各個利害關係人將對其展開辯論,以確定是否應將其作為標准採納或包含在網路升級中。 由於非核心以太坊改進提案不一定被所有應用程式採納(例如,可以建立不實作 EIP-20 的同質化代幣),而核心以太坊改進提案必須被廣泛採納(因全數節點必須升級才能成為同一網路的一部分),與非核心以太坊改進提案相比,核心以太坊改進提案需要社群內達成更廣泛的共識。 + +## 以太坊改進提案演進史 {#history-of-eips} + +[以太坊改進提案 (EIP) GitHub 存放庫](https://github.com/ethereum/EIPs)於 2015 年 10 月建立。 以太坊改進提案流程基於[比特幣改進提案 (BIP)](https://github.com/bitcoin/bips) 流程,而後者又是基於 [Python 增強提案 (PEP)](https://www.python.org/dev/peps/) 流程。 + +以太坊改進提案編輯負責審查以太坊改進提案的技術健全性、格式問題,以及修正拼音、文法及程式碼樣式方面的錯誤。 2015 至 2016 年底,Martin Becze、Vitalik Buterin、Gavin Wood 等人擔綱初代的以太坊改進提案編輯。 + +以太坊改進提案現任編輯: + +- Alex Beregszaszi (@axic) +- Gavin John (@Pandapip1) +- Greg Colvin (@gcolvin) +- Matt Garnett (@lightclient) +- Sam Wilson (@SamWilsn) + +以太坊改進提案榮譽編輯: + +- Casey Detrio (@cdetrio) +- Hudson Jameson (@Souptacular) +- Martin Becze (@wanderer) +- Micah Zoltu (@MicahZoltu) +- Nick Johnson (@arachnid) +- Nick Savers (@nicksavers) +- Vitalik Buterin (@vbuterin) + +倘有興趣成為以太坊改進提案編輯,請詳閱 [EIP-5069](https://eips.ethereum.org/EIPS/eip-5069)。 + +以太坊改進提案編輯決定提案何時可成為以太坊改進提案,並且會幫助以太坊改進提案作者推進提案。 [以太坊牧貓人組織](https://www.ethereumcatherders.com/)會協助安排以太坊改進提案編輯與社群之間的會議(請參見 [EIPIP](https://github.com/ethereum-cat-herders/EIPIP))。 + +完整的標準化流程以及圖表請見 [EIP-1](https://eips.ethereum.org/EIPS/eip-1) + +## 瞭解更多 {#learn-more} + +若有興趣進一步瞭解以太坊改進提案,請參閱[以太坊改進提案網站](https://eips.ethereum.org/)和 [EIP-1](https://eips.ethereum.org/EIPS/eip-1)。 以下為一些實用連結: + +- [每個以太坊改進提案的清單](https://eips.ethereum.org/all) +- [所有以太坊改進提案類型的說明](https://eips.ethereum.org/EIPS/eip-1#eip-types) +- [所有以太坊改進提案狀態的說明](https://eips.ethereum.org/EIPS/eip-1#eip-process) + +### 社群教育專案 {#community-projects} + +- [PEEPanEIP](https://www.youtube.com/playlist?list=PL4cwHXAawZxqu0PKKyMzG_3BJV_xZTi1F) — *PEEPanEIP 是一個教育影片系列,討論以太坊改進提案 (EIP) 以及即將到來的升級的主要功能。* +- [EIPs For Nerds](https://ethereum2077.substack.com/t/eip-research) — *EIPs For Nerds 以ELI5 風格、全面概述各種以太坊改進提案 (EIP),包括核心 EIP 和應用程式/基礎設施層 EIP (ERC),以教育讀者並圍繞以太坊協定的提議變更達成共識。* +- [EIPs.wtf](https://www.eips.wtf/) — *EIPs.wtf 提供以太坊改進提案 (EIP) 的額外資訊,包括它們的狀態、實作細節、相關拉取請求和社群意見回饋。* +- [EIP.Fun](https://eipfun.substack.com/) — *EIP.Fun 提供有關以太坊改進提案 (EIP) 的最新消息,EIP 會議更新等等。* +- [EIPs Insight](https://eipsinsight.com/) — *EIPs Insight 根據從不同資源收集的資訊,展示以太坊改進提案 (EIP) 流程的狀態和統計資料。* + +## 參與方式 {#participate} + +所有人皆可建立以太坊改進提案。 提交提案前必須閱讀 [EIP-1](https://eips.ethereum.org/EIPS/eip-1),其中概述了以太坊改進提案流程以及撰寫以太坊改進提案的方法;並至[以太坊魔術師](https://ethereum-magicians.org/)徵求意見回饋,提交草案之前應先在這裡與社群討論提案。 + +## 參考資料 {#references} + + + +頁面內容部分來自 Hudson Jameson 的 [以太坊協定開發治理和網路升級協調](https://hudsonjameson.com/2020-03-23-ethereum-protocol-development-governance-and-network-upgrade-coordination/) + + diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/beacon-chain/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/beacon-chain/index.md new file mode 100644 index 00000000000..33935f930d1 --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/roadmap/beacon-chain/index.md @@ -0,0 +1,75 @@ +--- +title: 信標鏈(Beacon Chain) +description: 瞭解信標鍊 - 將權益證明引入以太坊的升級。 +lang: zh-tw +template: upgrade +image: /images/upgrades/core.png +alt: +summaryPoint1: 信標鏈將權益證明引入以太坊生態系統。 +summaryPoint2: 信標鏈於 2022 年 9 月與原先的以太坊工作量證明鏈合併。 +summaryPoint3: 信標鏈引入共識邏輯和區塊廣播協定,現在可保護以太坊安全。 +--- + + + 信標鏈於 2020 年 12 月 1 日發佈,並於 2022 年 9 月 15 日透過合併正式將權益證明確定為以太坊的共識機制。 + + +## 什麼是信標鏈? {#what-is-the-beacon-chain} + +信標鍊是 2020 年推出的原始權益證明區塊鏈的名稱。 信標鏈的作用是在以太坊主網上啟用權益證明共識邏輯之前,確保它健全且可永續存在。 因此,它與原先的工作量證明以太坊一起運行。 信標鏈是「空」區塊鏈,但在以太坊上,要從工作量證明過渡到權益證明,需要指示信標鏈接受來自執行用戶端的交易資料,將它們打包進區塊,並使用基於權益證明的共識機制,將它們整合成一條區塊鏈。 與此同時,原始的以太坊用戶端關閉挖礦、區塊廣播和共識邏輯,將它們全部交給信標鏈。 這個事件稱為[合併](/roadmap/merge/)。 合併後,即不再有兩條區塊鏈。 相反,只有一個權益證明以太坊,每個節點現在需要兩個不同的用戶端。 信標鏈目前是共識層,是處理區塊廣播和共識邏輯的共識用戶端對等網路,而原始用戶端則形成執行層,負責廣播和執行交易,以及管理以太坊狀態。 這兩個層可以用引擎應用程式介面相互通訊。 + +## 信標鏈可以做什麼? {#what-does-the-beacon-chain-do} + +信標鏈是帳戶帳本的名稱,在以太坊[質押者](/staking/)開始驗證真正的以太坊區塊前,信標鏈會指揮並協調這些質押者。 但它並不處理交易或智慧型合約互動,因為這些事是在執行層完成的。 信標鏈負責區塊和證明處理、執行分叉選擇演算法、管理獎勵和懲罰等事務。 請參閱[節點架構頁面](/developers/docs/nodes-and-clients/node-architecture/#node-comparison)瞭解更多內容。 + +## 信標鏈的影響 {#beacon-chain-features} + +### 質押簡介 {#introducing-staking} + +信標鏈將[權益證明](/developers/docs/consensus-mechanisms/pos/)引入以太坊。 這可以保證以太坊的安全,驗證者可以在此過程中賺取更多以太幣。 實際上,你需要使用質押以太幣來啟用驗證者軟體。 身為質押者,你將執行在鏈中建立及驗證新區塊的軟體。 + +質押的目的與[挖礦](/developers/docs/consensus-mechanisms/pow/mining/)相似,但在很多方面有所差異。 挖礦需要大量的前期支出,包括強大的硬體和高能耗,從而產生規模經濟並促進中心化。 挖礦也不要求將任何資產鎖定以作為抵押品,這限制了協定在攻擊發生後懲罰作惡者的能力。 + +相較於工作量證明,過渡到權益證明後,以太坊的安全性和去中心化程度大幅提升。 參與網路的人越多,去中心化程度和安全性越高,抵禦攻擊的能力也越強。 + +使用權益證明作為共識機制是[我們現在擁有的安全、環保、可擴容的以太坊](/roadmap/vision/)的基石。 + + + 若有興趣成為驗證者或幫助保障以太坊安全,請瞭解有關質押的更多資訊。 + + +### 針對分片進行設定 {#setting-up-for-sharding} + +自信標鏈與原先的以太坊主網合併以來,以太坊社群便開始尋找網路擴容方案。 + +權益證明的優點是,在任何時間都擁有所有經核准區塊產生者的註冊表,每個人都各自質押以太幣。 此註冊表奠定了分而治之的基礎,同時也可靠地劃分了具體的網路責任。 + +這種責任與採用工作量證明時的責任有很大的不同。採用工作量證明時,礦工對網路沒有義務,可以隨時停止挖礦並永久關閉其節點軟體,而不需承擔後果。 此外,也沒有已知區塊提交者的註冊表,並且沒有可靠的方法來安全地劃分網路責任。 + +[更多分片相關更多資訊](/roadmap/danksharding/) + +## 不同升級之間的關聯 {#relationship-between-upgrades} + +所有以太坊升級都存在某種程度的關聯。 所以,我們來回顧一下信標鏈會如何影響其他升級。 + +### 信標鏈和合併 {#merge-and-beacon-chain} + +起初,信標鏈獨立於以太坊主網存在,但兩者已於 2022 年合併。 + + + 合併 + + +### 分片與信標鏈 {#shards-and-beacon-chain} + +僅當採用權益證明共識機制時,分片才能安全地進入以太坊生態系統。 已與主網「合併」的信標鏈引入了質押,為未來進一步擴展以太坊所需的分片機制鋪平道路。 + + + 分片鏈 + + +## 衍生閱讀 + +- [更多以太坊未來升級相關資訊](/roadmap/vision) +- [更多節點架構相關資訊](/developers/docs/nodes-and-clients/node-architecture) +- [關於權益證明的更多資訊](/developers/docs/consensus-mechanisms/pos) diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/future-proofing/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/future-proofing/index.md new file mode 100644 index 00000000000..5440b45592a --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/roadmap/future-proofing/index.md @@ -0,0 +1,38 @@ +--- +title: 面向未來的以太坊 +description: 不論未來如何發展,這些升級可鞏固以太坊作為有韌性的去中心化基礎層的地位。 +lang: zh-tw +image: /images/roadmap/roadmap-future.png +alt: "以太坊開發藍圖" +template: roadmap +--- + +開發藍圖的有些部分在短期內並不是一定要用於擴容或保護以太坊,其目的是為以太坊未來的長期穩定性與可靠性奠定基礎。 + +## 抗量子性 {#quantum-resistance} + +當量子計算成為現實的時候,有一部分用於保護當今以太坊的[密碼學技術](/glossary/#cryptography)將會受到攻擊。 儘管量子電腦可能還需幾十年的時間才能對現代密碼學構成真正的威脅,但建立以太坊的目的是確保未來幾個世紀的安全。 這意味著,我們應該盡速讓[以太坊具抗量子性](https://consensys.net/blog/developers/how-will-quantum-supremacy-affect-blockchain/)。 + +以太坊開發者面臨的挑戰是,目前的[權益證明](/glossary/#pos)協定仰賴一種非常高效的簽名方案(稱為 BLS)來匯集對有效[區塊](/glossary/#block)的投票。 這種簽名方案可以被量子電腦破解,但其他抗量子替代方案效率不高。 + +眾所周知,以太坊中多處用於產生加密密鑰的[「KZG」承諾方案](/roadmap/danksharding/#what-is-kzg)不具抗量子能力。 目前,這個風險是使用「受信任設定」來規避的,即許多使用者會產生無法被量子電腦逆向工程的隨機性。 然而,理想的解決方案還是引入量子安全密碼學。 現在有兩種能夠有效替代 BLS 方案的主流方案:[STARK 簽名](https://hackmd.io/@vbuterin/stark_aggregation)和[網格簽名](https://medium.com/asecuritysite-when-bob-met-alice/so-what-is-lattice-encryption-326ac66e3175)。 **這些方案仍處於研究與試驗開發階段**。 + + 閱讀 KZG 與受信任設定相關資訊 + +## 更便捷、更高效的以太坊 {#simpler-more-efficient-ethereum} + +複雜性使得產生錯誤及漏洞的幾率提高,導致攻擊者有機可乘。 然而,開發藍圖中也包括精簡以太坊、移除歷經好幾次升級後已不再需要或可以改進的程式碼。 對開發者來說,更精簡、單純的程式碼庫更容易維護和理解。 + +業界將對[以太坊虛擬機 (EVM)](/developers/docs/evm) 進行多項更新,以使其更簡單、更高效。 其中包括[移除 SELFDESTRUCT 作業碼](https://hackmd.io/@vbuterin/selfdestruct),這是一個不常用且已不需要的指令,某些情況下可能帶來危險,特別是和以太坊未來升級的儲存模型一起使用時。 此外,[以太坊用戶端](/glossary/#consensus-client)仍支援一些現在可以完全移除的舊交易類型。 [燃料](/glossary/#gas)的計算方式也有改進空間,可以引入更高效的演算法來進行一些加密運算。 + +同樣,目前以太坊用戶端的其他部分也可以進行更新。 其中一個範例是,目前執行和共識用戶端使用的是不同類型的資料壓縮方案。 若能在整個網路上統一壓縮方案,在用戶端之間分享資料會變得更簡單直觀。 + +## 目前進度 {#current-progress} + +面向未來的以太坊所需的大部分升級**仍在研究階段,且距離實作還有數年時間**。 像移除 SELFDESTRUCT 和統一執行層與共識層用戶端使用的壓縮方案這樣的升級,可能會比抗量子密碼學更早實現。 + +**了解更多** + +- [燃料](/developers/docs/gas) +- [以太坊虛擬機](/developers/docs/evm) +- [資料結構](/developers/docs/data-structures-and-encoding) diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/index.md new file mode 100644 index 00000000000..1a5c0a596b6 --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/roadmap/index.md @@ -0,0 +1,119 @@ +--- +title: 以太坊開發藍圖 +description: 以太坊實現更高可擴容性、安全性和永續性的路徑。 +lang: zh-tw +template: roadmap +image: /images/heroes/roadmap-hub-hero.jpg +alt: "以太坊開發藍圖" +summaryPoints: +buttons: + - + label: 更多升級 + toId: 即將發生的變化 + - + label: 過往的升級 + href: /history/ + variant: 概述 +--- + +雖然以太坊已經是強大的全球協調平台,但仍在不斷改進當中。 一系列雄心勃勃的改進將把以太坊從本來的型態升級為一個全面擴容、韌性最大的平台。 這些升級已在以太坊開發藍圖中列出。 + +**若要進一步瞭解過往的以太坊升級,請造訪我們的[歷史](/history/)頁面** + +## 以太坊將發生哪些變化? {#what-changes-are-coming} + +以太坊開發藍圖概述了未來將對協定進行的具體改進。 整體而言,開發藍圖會給以太坊使用者帶來以下好處: + + + + + + + + +## 以太坊為何需要開發藍圖? {#why-does-ethereum-need-a-roadmap} + +以太坊會定期升級,以提高其可擴容性、安全性或永續性。 以太坊的核心優勢之一是適應研發中出現的新想法。 以太坊具備出色的適應力,能夠靈活地應對新出現的挑戰並跟上最先進的技術突破。 + + + +以太坊的開發藍圖主要是研發人員多年努力的成果,因為協定的技術性非常強,不過任何有想法與動力的人皆可參與。 創意通常始於論壇上的討論,比如 [ethresear.ch](https://ethresear.ch/)、[Ethereum magicians](https://ethereum-magicians.org/) 或以太坊研發 Discord 伺服器。 它們可能是對新發現的漏洞的回應、在應用程式層工作的組織(比如 [去中心化應用程式](/glossary/#dapp) 和交易所)提出的意見,或是對終端使用者已知問題(比如成本或交易速度)的解決辦法。 當這些理念成熟之後,可以作為 [以太坊改進提案] 提出 (https://eips.ethereum.org/)。 這一切都是公開進行的,因此社群中的每個人都可以隨時發表意見。 + +[有關以太坊管理體系的更多資訊](/管理體系/) + + + + +

什麼是以太坊 2?

+ +

在過渡到權益證明之前,「以太坊 2.0」一詞通常用於描述以太坊的未來,但現在已被逐步淘汰,取而代之的是更精確的術語。它最初用來區分過渡到權益證明之前和之後的以太坊網路,有時也指不同的以太坊用戶端(執行用戶端有時稱為以太坊 1.0 用戶端,共識用戶端有時稱為以太坊 2.0 用戶端)。

+ +
+ +## 以太坊的開發藍圖會隨時間而變更嗎? {#will-ethereums-roadmap-change-over-time} + +**是的,幾乎一定會**。 開發藍圖是最新的以太坊升級計劃,涵蓋近期和未來的計劃。 我們預計隨著新資訊和技術的出現,開發藍圖也會變更。 + +將以太坊的路線圖視為改進以太坊的一系列意圖;這是核心研究者和開發者對以太坊最優前進路徑的最佳假設。 + +## 開發藍圖將於何時完成? {#when-will-the-roadmap-be-finished} + +有些升級是較低優先级的,可能在未來 5 到 10 年內不會實作(例如抗量子性)。 **預測每次升級的確切時間非常複雜**,因為許多開發藍圖項目是並行進行的,並且開發速度各不相同。 升級的緊迫性也會隨著時間的推移而變化,這取決於外部因素(例如,量子電腦的效能和可用性突然提升可能導致抗量子密碼學的實作更加緊急)。 + +可以將以太坊的發展類比為生物進化。 相較於抗拒改變的網路,能夠適應新挑戰及維持健康的網路更有可能成功,不過隨著網路的效能、可擴容性和安全性越來越高,需要對協定進行的變更也會減少。 + +## 升級時我需要做什麼嗎? {#do-i-have-to-do-anything-when-there-is-an-upgrade} + +升級往往不會影響終端使用者,除了提供更好的使用者體驗和更安全的協定,或許還提供更多與以太坊互動的選項。 **普通使用者無需積極參與升級,也不需要做任何事情**來保護他們的資產。 [節點](/glossary/#node)營運商需要更新他們的用戶端以做好升級準備。 有些升級可能帶來適用於應用程式開發者的變更。 舉例來說,完成歷史記錄到期升級之後,應用程式開發者可從新來源取得歷史資料。 + +## 邊際 (The Verge)、誇耀 (The Splurge) 等等將如何? {#what-about-the-verge-splurge-etc} + +[Vitalik Buterin 提出了以太坊開發藍圖的願景](https://twitter.com/VitalikButerin/status/1741190491578810445),開發藍圖中的事項被整理為多個類別,根據各自對以太坊架構的影響相互關聯。 其中包括: + +- **合併 (The Merge)**:涉及從[工作量證明](/glossary/#pow)過渡到[權益證明](/glossary/#pos)的升級 +- **激增 (The Surge)**:透過[卷軸](/glossary/#rollups)和資料分片進行與可擴容性相關的升級 +- **災厄 (The Scourge)**:與[最大可提取價值](/glossary/#mev)的抗審查性、去中心化和協定風險相關的升級 +- **邊際 (The Verge)**:使得驗證[區塊](/glossary/#block)更容易的升級 +- **淨化 (The Purge)**:有助降低運行節點的計算成本和簡化協定的升級 +- **誇耀 (The Splurge)**:不屬於上述類別的其他升級。 + +我們決定不使用這些術語,因為想使用更簡單、更以使用者為中心的模型。 雖然我們使用以使用者為中心的語言,但願景仍然與 Vitalik 提出的願景相同。 + +## 分片會如何? {#what-about-sharding} + +分片是指對以太坊區塊鏈進行分割,使一部分[驗證者](/glossary/#validator)只需負責所有資料中的一小部分。 這原本是以太坊的擴容方式。 然而,[二層網路](/glossary/#layer-2)卷軸的發展速度比預期快得多,不僅已經提供大量擴容,並且在 Proto-Danksharding 實作後還會提供更多功能。 這意味著已不再需要「分片鏈」,並且已將其從開發藍圖中刪除。 + +## 在尋找特定的技術升級嗎? {#looking-for-specific-technical-upgrades} + +- [Danksharding](/roadmap/danksharding) - Danksharding 透過新增資料的二進位大型物件到以太坊區塊中,使二層網路卷軸的成本大大降低。 +- [質押提款](/staking/withdrawals) - 上海/卡佩拉升級在以太坊上啟用了質押提款,允許人們解鎖質押的以太幣。 +- [單一時隙最終確定性](/roadmap/single-slot-finality) - 無需等待十五分鐘,就可以在同一時隙內提出並最終確定區塊。 這對於應用程式來說更方便,也更難被攻擊。 +- [提交者-建置者分離](/roadmap/pbs) - 讓不同的驗證者承擔區塊建置和區塊提交任務,為以太坊達成共識建立了一種更公平、更抗審查且更有效的方式。 +- [秘密領導者選舉](/roadmap/secret-leader-election) - 可以使用巧妙的密碼學來確保目前區塊提交者的身分不被公開,從而保護他們免遭某些類型的攻擊。 +- [帳戶抽象](/roadmap/account-abstraction) - 帳戶抽像是一類升級,支援以太坊上原生的智慧型合約錢包,而不必使用複雜的中間件。 +- [沃克爾樹](/roadmap/verkle-trees) - 沃克爾樹是一種資料結構,可用於在以太坊上啟用無狀態用戶端。 這些「無狀態」用戶端只需少量的儲存空間,但仍然能夠驗證新區塊。 +- [無狀態](/roadmap/statelessness) - 無狀態用戶端不需要大量資料,即可驗證新區塊。 這將提供運行節點的所有好處,而成本僅為目前的一小部分。 diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/index.md new file mode 100644 index 00000000000..34e5f063f91 --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/index.md @@ -0,0 +1,229 @@ +--- +title: 合併 +description: 瞭解「合併 - 當以太坊主網採用權益證明時」的相關資訊。 +lang: zh-tw +template: upgrade +image: /images/upgrades/merge.png +alt: +summaryPoint1: 以太坊主網使用權益證明,但以前並非總是如此。 +summaryPoint2: 從原本的工作量證明機制到權益證明的升級稱為「合併」。 +summaryPoint3: 合併指原本的以太坊主網與稱為信標鏈的獨立權益證明區塊鏈合併,現在作為一條鏈存在。 +summaryPoint4: 合併將以太坊的能源消耗降低了約 99.95%。 +--- + + + 「合併」已於 2022 年 9 月 15 日執行。 這使得以太坊完全過渡到權益證明共識,正式棄用工作量證明並將能耗降低大約 99.95%。 + + +## 什麼是「合併」? {#what-is-the-merge} + +合併指將以太坊的原始執行層(自[創世](/history/#frontier)以來就存在的主網)與其新的權益證明共識層「信標鏈」結合在一起。 它減少了對能源密集型挖礦的需求,而是藉由質押的以太幣來確保網路安全。 這是實現以太坊「更高的可擴容性、安全性和永續性」願景的真正令人興奮的一步。 + + + +一開始,[信標鏈](/roadmap/beacon-chain/)與[主網](/glossary/#mainnet)是分別上線的。 以太坊主網及其所有帳戶、餘額、智慧型合約以及區塊練狀態繼續受到[工作量證明](/developers/docs/consensus-mechanisms/pow/)的保護,即使信標鏈使用[權益證明](/developers/docs/consensus-mechanisms/pos/)並行運作。 合併完成即表示這兩個系統最終結合在一起,權益證明永久取代工作量證明。 + +將以太坊想像成一艘宇宙飛船,還未完全準備好星際旅行就已經升空。 以太坊社群藉由信標鏈打造全新的引擎與堅固的外殼。 經過大量的測試後,是時候在飛行旅途中以熱插拔的方式將舊引擎更換為新引擎了。 全新且更高效的引擎合併到現有的飛船中,使之能夠進行長達數光年的太空之旅。 + +## 與主網合併 {#merging-with-mainnet} + +從創世到合併之前,工作量證明一直保護著以太坊主網的安全。 這使得我們都習慣的以太坊區塊鏈於 2015 年 7 月誕生,並具備所有熟悉的功能——交易、智慧型合約、帳戶等。 + +在以太坊整個發展歷程中,開發者們一直在為最終從工作量證明過渡到權益證明努力準備著。 2020 年 12 月 1 日,信標鏈作為獨立於主網的區塊鏈建立,與主網並行運行。 + +信標鏈原本並沒有處理主網的交易, 而是透過商定活躍的驗證者及其帳戶的餘額就其自己的狀態達成共識。 廣泛的測試完成後,就是讓信標鏈就真實資料達成共識的時候了。 合併之後,信標鏈會成為所有網路資料的共識引擎,包含執行層的交易以及帳戶餘額。 + +合併代表正式轉用信標鏈作為區塊生產引擎。 挖礦不再是生產有效區塊的方式。 相反,權益證明驗證者已擔任這個角色,現在負責處理所有交易的有效性及提出區塊。 + +合併中,歷史記錄不會丟失。 隨著主網與信標鏈合併,以太坊的所有交易記錄也已一併整合。 + + +這種向權益證明的過渡改變了以太幣的發行方式。 瞭解合併前後的以太幣發行的更多相關資訊。 + + +### 使用者及持有者 {#users-holders} + +**合併並不會對持有者或使用者造成任何影響。** + +_再次提醒:_作為以太幣或其他以太坊數位資產的使用者或持有者,以及非節點運行質押者,**在合併前,你並不需要針對自己的資金或錢包採取任何行動**。以太幣還是原本的以太幣。 並沒有所謂的「舊以太幣」/「新以太幣」或「以太坊 1」/「以太坊 2」,而且合併前後錢包的使用方式也完全一樣。若有人告訴你其他的說法,那他很可能是個騙子。 + +儘管不再使用工作量證明,以太坊自從創世以來的完整歷史記錄將完整保留,不會因為過渡到權益證明而有所改變。 合併前即存在於錢包的所有資金,合併之後一樣可用。 **無須採取任何行動即可升級。** + +[更多以太坊安全性相關更多資訊](/security/#eth2-token-scam) + +### 節點營運商與去中心化應用程式開發者 {#node-operators-dapp-developers} + + + +主要行動事項包括: + +1. 同時運行共識用戶端及執行用戶端;合併之後,無法再使用取得執行資料的第三方端點。 +2. 使用共用的 JWT 金鑰來驗證執行與共識用戶端,以便他們能夠安全地通訊。 +3 設定「費用接收」地址以接收賺取的交易費小費/最大可提取價值 (MEV)。 + +在完成上述兩點以前,你的節點會顯示為「離線」,直到兩個層皆同步且通過驗證為止。 + +若未設定「費用接收」地址,驗證者仍舊可以如常行事,但你將無法賺取未銷毀費用小費,以及原本可以在驗證者提出的區塊中賺取的最大可提取價值。 + + + + +合併以前,執行用戶端(例如 Geth、Erigon、Besu 或 Nevermind)可以接收、正確驗證以及廣播藉由網路傳播的區塊。 _合併之後_,執行有效負載中包含的交易之有效性現在也取決於其所在的「共識區塊」的有效性。 + +因此,以太坊全節點現在同時需要執行用戶端與共識用戶端。 這兩個用戶端使用新的引擎應用程式介面協同運作。 引擎應用程式介面需要使用 JWT 金鑰進行驗證,該金鑰會提供給兩個用戶端來支援安全通訊。 + +主要行動事項包括: + +- 除共識用戶端之外,還要安裝執行用戶端 +- 利用共用的 JWT 金鑰來驗證執行用戶端和共識用戶端,這樣它們就可以安全地同彼此通訊。 + +若未完成上述事項,你的節點將會顯示為「離線」狀態,直到兩個層皆同步且通過驗證為止。 + + + + + +合併過程中共識機制亦發生變更,包括以下方面的相關變更:< + +
    +
  • 區塊結構
  • +
  • 時隙/區塊時間
  • +
  • 操作碼變更
  • +
  • 鏈上隨機性來源
  • +
  • 安全標頭定案區塊的概念
  • +
+ +更多資訊請閱讀 Tim Beiko 的部落格文章:合併如何影響以太坊的應用程式層。 + +
+ +## 合併與能耗 {#merge-and-energy} + +合併標誌著以太坊工作量證明的結束,並開啟了更具可持續性和環保的以太坊紀元。 以太坊的能耗預計下降了 99.95%,使得以太坊成為綠色區塊鏈。 瞭解關於[以太坊能耗](/energy-consumption/)的更多資訊。 + +## 合併與擴容 {#merge-and-scaling} + +合併也為工作量證明之下無法實現的進一步擴容升級奠定了基礎,使得以太坊更接近實現[以太坊願景](/roadmap/vision/)中所描繪的全面擴容、安全性與永續性。 + +## 關於合併的誤解 {#misconceptions} + + + +以太坊的節點有兩種類型:可以提出區塊;無法提出區塊。 + +提出區塊的節點僅佔以太坊節點總數的一小部分。 這一類別中包含工作量證明 (PoW) 下的挖礦節點及權益證明 (PoS) 下的驗證者節點。 這一類別必須要付出經濟資源(例如工作量證明下 GPU 的雜湊算力,或是權益證明下的質押以太幣)來換取不時提出下一個區塊並贏取協定獎勵的能力。 + +除了具有 1-2 TB 可用儲存空間和網際網路連線的消費級電腦之外,網路上的其他節點(即其他大多數)不需要付出任何經濟資源。 這些節點並不會提出區塊,但仍然會在保護網路安全中扮演很重要的角色,它們透過偵聽新區塊並根據網路共識規則在其到達時驗證其有效性,讓所有區塊提議者負責。 如果區塊有效,節點會繼續將其廣播到網路上。 如果區塊無效,無論什麼樣的原因,節點軟體會將其視為無效並停止其傳播。 + +在任一共識機制(工作量證明或權益證明)下,任何人都可以執行非區塊生產節點;如果可以,強烈推薦所有使用者都這麼做。 運行節點不只對以太坊非常有價值,還可以為運行節點的個人帶來額外的好處,例如提高安全性、隱私性和抗審查能力。 + +任何人都能夠執行自己的節點對於維持以太坊網路的去中心化絕對至關重要。 + +執行自己節點的更多相關資訊 + + + + + +燃料費用是網路需求相對於網路容量的產物。 合併後,我們棄用了工作量證明,轉而採用權益證明共識機制,但並沒有顯著改變任何直接影響網路容量或吞吐量的參數。 + +根據以卷軸為中心的開發藍圖,我們主要專注於擴展二層網路上的使用者活動,同時讓一層網路主網成為針對卷軸資料儲存進行最佳化的安全去中心化結算層,以協助使卷軸交易成本呈指數級下降。 轉用權益證明是實現這點的關鍵前導步驟。 更多燃料和費用相關資訊。 + + + + +交易的「速度」可以透過多種方式衡量,包括添加到區塊中的時間和最終確定的時間。 兩者的改變都非常細微,使用者不太會注意到。 + +過往採用工作量證明時,目標是約每 13.3 秒產生一個新區塊。 採用權益證明時,時隙恰好每 12 秒發生一次,每個時隙都是驗證者發佈區塊的機會。 多數時隙都有區塊,但不一定全部都是這樣(如驗證者離線)。 採用權益證明時,區塊的產生頻率比工作量證明高出約 10%。 這是非常細微的改變,使用者不太可能注意到。 + +權益證明引入了先前不存在的交易最終確定性的概念。 在工作量證明中,交易後經過的每個區塊會讓區塊逆轉的難度指數型加大,但機率並不完全為零。 在權益證明下,區塊會捆綁進驗證者投票的時期(每 6.4 分鐘含有 32 個提出區塊的機會)。 當一個時期結束時,驗證者投票決定該時期是否「已證明」。 如果驗證者們同意該時期已證明,它會在下個時期最終確定。 取消最終確定的交易在經濟上不可行,因為需要取得和銷毀超過三分之一的質押以太幣總量。 + + + + + +合併初期,質押者僅能賺取提出區塊的費用小費和最大可提取價值。 這些獎勵被計入驗證者控制的非質押帳戶(稱為費用接收地址),且立即可用。 這些獎勵與執行驗證者職責的協定獎勵是分開的。 + +自從上海/卡佩拉網路升級後,質押者現在可以指定提款地址,以開始接收自動支付的額外質押餘額(原本質押的 32 以太幣以外的協定獎勵)。 此升級也使驗證者可以在退出網路時解鎖和收回其全部餘額。 + +更多質押提款相關資訊 + + + + +由於上海/卡佩拉升級啟用了提款功能,我們鼓勵驗證者提取其質押的 32 個以太幣以外的餘額,因為這些資金不會增加收益率,不提取會被鎖定。 根據年化報酬率(取決於質押的以太幣總量),他們可能激勵驗證者退出,以回收其全部餘額,或者用其質押獲得的獎勵繼續質押,賺取更多以太幣。 + +這裡有個重要的限制:協定限制了驗證者完全退出的速率,每個時期(每 6.4 分鐘)只有一定數量的驗證者可以退出。 此限制會根據活躍驗證者數量波動,但單日可退出網路的驗證者總數約為全部驗證者的 0.33%。 + +這可以防止質押資金大規模外流。 此外,這也可以阻止可存取很大一部分質押以太幣總量的潛在攻擊者實施可被罰沒的違規行為,並在協定執行罰沒懲處之前,在同一時期退出/提取所有違規的驗證者餘額。 + +年化報酬率也是特意設計成動態的,使得市場上的質押者可以權衡他們願意付出多少成本來協助維護網路安全。 如果速率太低,驗證者將以協定限制的速率退出。 這將逐漸提高留下的所有人的年利率,吸引新的質押者或讓老質押者迴歸。 + + +## 「以太坊 2.0」怎麼了? {#eth2} + +「以太坊 2」這個術語已被棄用。 將「以太坊 1」和「以太坊 2」合併為單一的區塊鏈後,已不需要區分這兩個以太坊網路;現在只有以太坊。 + +為了減少混亂,社區更新了這些條款: + +- 「以太坊 1.0」現在是處理交易和執行的「執行層」。 +- 「以太坊 2.0」現在是處理權益證明共識的「共識層」。 + +這些術語更新只是改變了命名慣例;這並沒有改變以太坊的目標或開發藍圖。 + +[瞭解更多關於「以太坊 2.0」重命名的資訊](https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming/) + +## 不同升級之間的關聯 {#relationship-between-upgrades} + +所有以太坊升級都有某種程度上的關聯。 我們來重新回顧合併與其他升級之間的關係。 + +### 合併與信標鏈 {#merge-and-beacon-chain} + +合併代表著信標鏈作為原始主網執行層的新共識層被正式採用。 合併後,驗證者需負責維護以太坊安全,且[工作量證明](/developers/docs/consensus-mechanisms/pow/)挖礦已不再是有效的區塊生產方式。 + +相反,區塊是由質押了以太幣的驗證節點提出,以換取參與共識的權利。 這為包括分片在內的未來擴容升級奠定了基礎。 + + + 信標鏈 + + +### 合並與上海升級 {#merge-and-shanghai} + +為了簡化流程並最大限度地專注於成功過渡到權益證明,合併升級不包括某些預期的功能,例如提取質押以太幣的能力。 此功能是在上海/卡佩拉升級時單獨啟用的。 + +歡迎感興趣人士詳細瞭解 Vitalik 在 2021 年 4 月的 ETHGlobal 活動上介紹的[合併後會發生什麼](https://youtu.be/7ggwLccuN5s?t=101)的更多資訊。 + +### 合併與分片 {#merge-and-data-sharding} + +原本的計劃是,在合併前進行分片以處理擴容問題。 然而,鑑於[二層網路擴容解決方案](/layer-2/)的蓬勃發展,優先事務就是摒棄工作量證明,轉用權益證明。 + +分片計劃正在迅速發展,但考慮到用於擴展交易執行的二層網路技術的興起和成功,分片計劃已轉向尋找最佳方式來分配儲存來自卷軸合約的壓縮 calldata 的負擔,從而實現網路容量的指數級增長。 如果不過渡到權益證明,這是不可能的。 + + + 分片 + + +## 延伸閱讀 {#further-reading} + + + + diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/issuance/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/issuance/index.md new file mode 100644 index 00000000000..3b6161007b2 --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/issuance/index.md @@ -0,0 +1,134 @@ +--- +title: 合併會對以太幣供給造成什麼影響 +description: 解析合併將如何影響以太幣的供給 +lang: zh-tw +--- + +# 合併會對以太幣供給造成什麼影響 {#how-the-merge-impacts-ETH-supply} + +合併指的是 2022 年 9 月,以太坊網路棄用工作量證明,轉而採用權益證明。 在合併的過程中,以太幣的發行方式亦相應改變。 在此之前,新的以太幣透過兩種方式發行:執行層(即 主網)和共識層(即 信標鏈)。 合併後,執行層不再發行以太幣。 本文將解釋這一改變的來龍去脈。 + +## 以太幣發行機制的組成 {#components-of-eth-issuance} + +我們可以將以太幣的供給拆分為兩個主要面向:發行與銷毀。 + +以太幣的**發行**指鑄造新以太幣的過程。 以太幣的**銷毀**則是指廢棄既有的以太幣,使其不再流通。 發行率和銷毀率將基於數種參數計算得出,而兩者之間的差值便決定了以太幣的通膨/通縮率。 + + + +- 在過渡到權益證明前,所有礦工總計每日可得到約 13,000 個新發行的以太幣 +- 在質押的以太幣總數達到 1,400 萬個的情況下,所有質押者總計每日可得到約 1,700 個新發行的以太幣 +- 實際的質押獎勵會根據質押總量浮動 +- **自合併後,發行僅為每日約 1,700 個以太幣,因此新以太幣總發行量下降了約 88%** +- 銷毀會根據網路的需求量浮動。 _如果某天平均燃料價格高於 16 gwei,這會有效抵消發行給驗證者的約 1,700 個以太幣,使得當天的以太幣淨通膨率降至零或更低。 + + + +## 合併前(歷史狀況) {#pre-merge} + +### 執行層發行 {#el-issuance-pre-merge} + +在工作量證明下,礦工只會和執行層互動,如果它們最快解出下個區塊,則會收到區塊獎勵。 自從 2019 年[君士坦丁堡升級](/history/#constantinople)後,此獎勵就被訂為每個區塊 2 個以太幣。 礦工發佈[叔](/glossary/#ommer)塊同樣會獲得獎勵,這些區塊是未出現在最長鏈/規範鏈中的有效區塊。 每個 Ommer 的最高獎勵為 1.75 個以太幣,這些_不包含_在規範區塊頒發的獎勵之內。 挖礦是一項經濟密集型活動,歷來需要發行大量以太幣才能維持。 + +### 共識層發行 {#cl-issuance-pre-merge} + +[信標鏈](/history/#beacon-chain-genesis)已於 2020 年上線。 使用權益證明的驗證者(而非礦工)會保護其安全。 信標鍊是由以太坊使用者將以太幣單向存入主網(執行層)上的智慧型合約而啟動的,信標鏈會監聽該合約,並在新鏈上為使用者鑄造同等數量的以太幣。 在合併發生之前,信標鏈的驗證者未處理交易,並且基本上就驗證者礦池本身的狀態達成了共識。 + +信標鏈上的驗證者因證明鏈的狀態並提出區塊而獲得以太幣獎勵。 系統會根據驗證者的表現,在每個時期(每 6.4 分鐘)計算和分配獎勵(或懲罰)。 驗證者獎勵**明顯**低於之前根據工作量證明發行的挖礦獎勵(每大約 13.5 秒 2 個以太幣),因為運行驗證節點不是經濟密集型活動,因此不需要或不保證那麼高的獎勵。 + +### 合併前發行細節 {#pre-merge-issuance-breakdown} + +以太幣總供給量:**大約 120,520,000 個以太幣**(2022 年 9 月合併時) + +**執行層發行:** + +- 估計每 13.3 秒 2.08 個以太幣\*:每年發行**大約 4,930,000 個以太幣**。 +- 導致通膨率達到**大約 4.09%**(每年 493 萬 / 總計 1.205 億) +- \*這包含了每個規範區塊 2 個以太幣,加上一段時間內來自叔塊的平均 0.08 個以太幣。 兩者同樣花費 13.3 秒,不受[難度爆彈](/glossary/#difficulty-bomb)任何影響的基本區塊時間目標。 ([請見來源資訊](https://bitinfocharts.com/ethereum/)) + +**共識層發行:** + +- 以質押總量為 14,000,000 個以太幣計,發行量為大約每天 1700 個以太幣([請見來源資訊](https://ultrasound.money/)) +- 導致每年的以太幣發行量達到**大約 620,500 個** +- 導致通膨率達到**大約 0.52%**(每年 62.05 萬 / 總計 1.193 億) + + +總年化發行率(合併前):約 4.61% (4.09% + 0.52%)

+約 88.7% 發行的以太幣給了執行層上的礦工 (4.09 / 4.61 * 100)

+約 11.3% 發行的以太幣給了共識層上的質押者 (0.52 / 4.61 * 100) +
+ +## 合併後(現狀) {#post-merge} + +### 執行層發行 {#el-issuance-post-merge} + +合併後執行層的發行量為零。 在升級後的共識規則下,工作量證明不再是有效的區塊產生方式。 所有執行層的活動都被打包進權益證明驗證者發佈和證明的「信標區塊」。 證明和發佈信標區塊的獎勵在共識層上是獨立計算的。 + +### 共識層發行 {#cl-issuance-post-merge} + +共識層發行今天仍在繼續,就像合併前一樣,證明和提出區塊的驗證者會收到少量獎勵。 驗證者獎勵會繼續累積到共識層內管理的_驗證者餘額_中。 與可以在主網上交易的活期帳戶(「執行」帳戶)不同,這些是單獨的以太坊帳戶,不能與其他以太坊帳戶自由交易。 這些帳戶中的資金只能提領到單一的指定執行地址。 + +自上海/卡佩拉升級於 2023 年 4 月完成以來,質押者已可提領這些資金。 我們鼓勵質押者取出_收益/獎勵(超過 32 以太幣的餘額)_,因為這些資金對其質押權重無益(最大為 32 個)。 + +質押者也可以選擇退出並提領其全部驗證者餘額。 為了確保以太坊的穩定性,驗證者同時退出的數量是有上限的。 + +每天可以退出的上限約為驗證者總數的 0.33%。 預設情況下,每個時期(每 6.4 分鐘,每天共 900 名)可以退出四 (4) 名驗證者。 在驗證者超過 262,144 (218) 的情況下,每額外增加 65,536 (216) 名驗證者,即可額外允許一 (1) 名驗證者退出。 舉例來說,若驗證者數量超過 327,680,則每個時期可以退出五 (5) 名(每天 1,125 名)。 活躍驗證者總數超過 393,216 時,將允許六 (6) 名退出,依此類推。 + +隨著越來越多的驗證者退出,退出驗證者的最大數量將逐漸減少到下限值四個,用於特意防止大量質押的以太幣同時被取出,造成不穩定。 + +### 合併後通膨細節 {#post-merge-inflation-breakdown} + +- 以太幣總供給量:**大約 120,520,000 個以太幣**(2022 年 9 月合併時) +- 執行層發行量:**0** +- 共識層發行量:同上,年化發行率**約為 0.52%**(質押總量為 1,400 萬個以太幣) + + +總年化發行率:約 0.52%

+年度以太幣發行量淨減少值:約 88.7% ((4.61% - 0.52%) / 4.61% * 100) +
+ +## 銷毀 {#the-burn} + +與以太幣發行相反的力量是以太幣被銷毀的速度。 對於在以太坊上執行的交易,必須支付最低費用(稱為「基本費用」),具體費用根據網路活動不斷波動(逐區塊)。 此費用使用以太幣支付,且_必須_支付這筆費用,交易才被視為有效。 這筆費用會在交易過程中_銷毀_,從流通中移除。 + + +費用銷毀機制在 2021 年 8 月倫敦升級後上線,自合併以來一直維持不變。 + + +除了倫敦升級時實作的費用銷毀機制外,驗證者也可能因離線而受到懲處;更糟糕的是,他們可能因為違反威脅網路安全的特定規定而遭罰沒。 這些處罰會導致驗證者餘額中的以太幣減少,減少的金額不會直接獎勵給任何其他帳戶,而是會有效地從流通中銷毀/移除。 + +### 計算通縮時的平均燃料價格 {#calculating-average-gas-price-for-deflation} + +如上所述,一天發行的以太幣數量取決於質押的以太幣總量。 截至本文撰寫時止,每天的發行量約為 1,700 個以太幣。 + +為了確定在給定 24 小時內完全抵消此次發行所需的平均燃料價格,我們先計算一天中發行的區塊總數(假設一個區塊出塊的時間為 12 秒): + +- `(1 個區塊/12 秒) * (60 秒/分鐘) = 5 個區塊/分鐘` +- `(5 個區塊/分鐘) * (60 分鐘/小時) = 300 個區塊/小時` +- `(300 個區塊/小時) * (24 小時/天) = 7200 個區塊/天` + +每個區塊目標為 `15x10^6 gas/block`([更多燃料相關資訊](/developers/docs/gas/))。 我們可以利用這一資訊解出抵消發行量需要的平均燃料價格(以 gwei/燃料為單位),假設每日以太幣發行量為 1700: + +- `7200 blocks/day * 15x10^6 gas/block *`**`Y gwei/gas`**`* 1 ETH/ 10^9 gwei = 1700 ETH/day` + +解出 `Y`: + +- `Y = (1700(10^9))/(7200 * 15(10^6)) = (17x10^3)/(72 * 15) = 16 gwei`(四捨五入至僅保留兩位有效數字) + +另一種方式是將最後一步的 `1700` 替換成代表每日以太幣發行量的變數 `X`,並將其餘部分化簡為: + +- `Y = (X(10^3)/(7200 * 15)) = X/108` + +我們可以簡化並將其寫為 `X` 的函式: + +- `f(X) = X/108`,其中 `X` 代表每日的以太幣發行量,`f(X)` 代表抵消新發行的所有以太幣所需的 gwei/燃料價格。 + +所以舉例來說,若基於以太幣質押總量,`X`(每日以太幣發行量)升至 1800,`f(X)`(抵消發行的所有以太幣所需的 gwei)會是 `17 gwei`(取兩位有效數字) + +## 延伸閱讀 {#further-reading} + +- [合併](/roadmap/merge/) +- [Ultrasound.money](https://ultrasound.money/) - _即時可視化以太幣發行及銷毀情況的儀表板_ +- [以太坊發行量圖表](https://www.attestant.io/posts/charting-ethereum-issuance/) - _Jim McDonald,2020 年_ diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/scaling/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/scaling/index.md new file mode 100644 index 00000000000..5549d4cc684 --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/roadmap/scaling/index.md @@ -0,0 +1,51 @@ +--- +title: 以太坊擴容 +description: 卷軸可在鏈下批次處理交易,從而降低使用者的成本。 但現今卷軸使用資料的方式還是過於昂貴,限制了交易費用的下限。 Proto-Danksharding 可以解決這個問題。 +lang: zh-tw +image: /images/roadmap/roadmap-transactions.png +alt: "以太坊開發藍圖" +template: roadmap +--- + +以太坊利用[二層網路](/layer-2/#rollups)(也稱「卷軸」)實現擴容,可批次處理交易並將輸出傳送至以太坊。 儘管成本已比以太坊主網低八倍,卷軸還有進一步最佳化的空間,進而幫助降低終端使用者的成本。 此外,卷軸還仰賴於一些中心化組件,隨著其不斷發展成熟,開發者可以移除這些組件。 + + +
    +
  • 現今卷軸的成本比以太坊一層網路便宜大約 5 - 20 倍
  • +
  • 零知識卷軸很快會讓費用降低大約 40-100 倍
  • +
  • 以太坊即將變更,會帶來大約 100-1000 倍的擴容
  • +
  • 使用者應該能夠從成本低於 $0.001 的交易中受益
  • +
+
+ +## 降低資料使用費用 {#making-data-cheaper} + +卷軸會集合大量交易,執行它們並將結果提交到以太坊。 這會產生大量需要公開的資料,以便所有人都可以自己執行交易並驗證卷軸營運者是否誠實。 若有人發現矛盾之處,可以提起質詢。 + +### Proto-Danksharding {#proto-danksharding} + +以往卷軸資料會永久儲存在以太坊上,成本非常高昂。 使用者為卷軸支付的交易費用中,超過 90% 都是花在資料儲存上。 為了降低交易費用,我們可以將資料移至新的「二進位大型物件」臨時儲存區。 二進位大型物件更便宜,因為它們不是永久性的,一旦不再需要,就會從以太坊中刪除。 需要長期卷軸資料的人,例如卷軸營運商、交易所、索引服務等,得要自己負責儲存這些資料。 將二進位大型物件交易新增至以太坊是「Proto-Danksharding」升級的一部分。 + +透過 Proto-Danksharding,將多個二進位大型物件新增至以太坊區塊成為可能。 這將是以太坊吞吐量的又一次大幅(>100 倍)擴容和交易成本的縮減。 + +### Danksharding {#danksharding} + +擴展二進位大型物件資料的第二階段很複雜,因為需要新的方法來檢查網路上可用的卷軸資料,並仰賴[驗證者](/glossary/#validator)將其[區塊](/glossary/#block)建置和區塊提交職責分開。 它還需要一種方法來以加密方式證明驗證者已驗證一小部分二進位大型物件資料。 + +這個第二步也稱作[「Danksharding」](/roadmap/danksharding/), 全面實作**可能還需要數年時間**。 Danksharding 還需要仰賴其他的技術開發,例如[將區塊建置和區塊提出分開](/roadmap/pbs),以及新的網路設計,使得網路能夠透過一次隨機採樣幾千字節來有效地確認資料可用(也稱作[資料可用性採樣 (DAS)](/developers/docs/data-availability))。 + +更多分片相關資訊 + +## 卷軸去中心化 {#decentralizing-rollups} + +[卷軸](/layer-2)已在推動以太坊擴容。 憑藉[豐富的卷軸專案生態系統](https://l2beat.com/scaling/tvl),使用者可以在有安全保證的狀況下快速實惠地完成交易。 然而,一直以來卷軸都是使用中心化排序者(先完成所有交易處理和匯總,再將結果提交至以太坊的電腦)啟動的。 這樣便容易受到審查,因為排序者營運商可能被制裁、賄賂或者做出其他讓步。 同時,[卷軸也會採取不同方式](https://l2beat.com)驗證傳入的資料。 最好的方法是讓「證明者」提交[詐欺證明](/glossary/#fraud-proof)或有效性證明,但並非所有卷軸都能做到這一點。 即使是確實使用有效性/欺詐證明的卷軸也只使用一小部分已知的證明者。 因此,以太坊擴容的下一個關鍵步驟就是將運行排序者和證明者的責任分配給更多人。 + +更多卷軸相關資訊 + +## 目前進度 {#current-progress} + +Proto-Danksharding 是這些開發藍圖上的第一個項目,將於 2024 年 3 月的 Cancun-Deneb(「坎昆」)網路升級中實作。 **完整的 Danksharding 可能還需要幾年的時間實作**,因為它要仰賴其他幾個需要先行完成的開發藍圖項目。 卷軸基礎設施的去中心化可能是一個漸進的過程,有許多不同的卷軸正在構建略有不同的系統,並將以不同的速率完全去中心化。 + +[更多坎昆網路升級相關資訊](/roadmap/dencun/) + + diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/security/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/security/index.md new file mode 100644 index 00000000000..20ef0d196e3 --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/roadmap/security/index.md @@ -0,0 +1,48 @@ +--- +title: 一個更安全的以太坊 +description: 以太坊是現有最安全、去中心化程度最高的智慧型合約平台。 然而,我們還可以繼續對其進行改進,以便未來能夠保持韌性來對抗任意級別的攻擊。 +lang: zh-tw +image: /images/roadmap/roadmap-security.png +alt: "以太坊開發藍圖" +template: roadmap +--- + +**以太坊已经是一个非常安全的**去中心化[智慧型合约](/glossary/#smart-contract)平台。 但還可以繼續對其進行改進,以便未來能夠保持韌性來對抗各種攻擊。 這些改進包括對[以太坊用戶端](/glossary/#consensus-client)處理競爭[區塊](/glossary/#block)的方式進行微調,以及提高網路認為區塊[「最終確定」](/developers/docs/consensus-mechanisms/pos/#finality)的速度(這意味著攻擊者必須付出巨大的經濟代價才能改變區塊)。 + +我們還可以做一些改進來提高交易審查難度,方法是讓區塊提交者無法獲知區塊的實際內容,以及無法找尋新的方法來識別用戶端的審查。 這些改進將共同升級[權益證明](/glossary/#pos)協定,讓從個人到企業的使用者立即對其在以太坊上的應用程式、資料和資產建立信心。 + +## 質押提款 {#staking-withdrawals} + +從[工作量證明](/glossary/#pow)到權益證明的升級,始於以太坊先驅將他們的以太幣「質押」到存款合約中。 質押的以太幣用於保護網路安全, 2023 年 4 月 12 日進行了第二次更新,容許提取質押的以太幣。 從此驗證者可以自由地質押或提取以太幣。 + +閱讀提款的相關資訊 + +## 對抗攻擊 {#defending-against-attacks} + +可以對以太坊權益證明協定進行一些改進。 其中一項稱為[視圖合併](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739) - 這是一種更安全的[分叉](/glossary/#fork)選擇演算法,可以令某些複雜類型的攻擊難度大增。 + +縮短以太坊[最終確定](/glossary/#finality)區塊所需的時間將帶來更好的使用者體驗,並可防止複雜的「重組」攻擊,即攻擊者試圖重新打亂最近的區塊以攫取利潤或審查某些交易。 [**單時隙最終確定性 (SSF)**](/roadmap/single-slot-finality/) 是一種**盡可能減少最終確定延遲的方式**。 目前,攻擊者理論上可以說服其他驗證者重新設定 15 分鐘的區塊。 採用單一時隙最終確定性時,這一數值將變為 0。 使用者(從個人至應用程式乃至交易所)都將受益於快速保證其交易不會被還原,消滅整個一類攻擊會讓網路受益。 + +閱讀單一時隙最終確定性的相關資訊 + +## 對抗審查 {#defending-against-censorship} + +去中心化可防止個人或小部分[驗證者](/glossary/#validator)的影響力過大。 新的質押技術有助於確保以太坊的驗證者盡可能保持去中心化,同時保護他們免遭硬體、軟體及網路故障。 這包括跨多個[節點](/glossary/#node)共擔驗證者職責的軟體, 被稱為**分散式驗證者技術 (DVT)**。 分散式驗證者技術允許多台電腦共同參與驗證,增強了冗餘和容錯能力,所以鼓勵[質押池](/glossary/#staking-pool)使用分散式驗證者技術。 它還將驗證者金鑰拆分到多個系統中,而不是讓單個運營商執行多個驗證者。 這使得不誠實的運營商更難協調對以太坊的攻擊。 總結來說,分散式驗證者技術的理念是以_群體_而非個體的方式運行驗證者,從而獲得安全優勢。 + +閱讀分散式驗證者技術的相關資訊 + +實作**提交者-建置者分離 (PBS)** 可大幅提升以太坊內建的抗審查能力。 提交者-建置者分離讓一個驗證者建立區塊,另一個負責將該區塊廣播至以太坊網路。 這樣可確保在整個網路中更公平地分享專業的利潤最大化區塊建置演算法帶來的收益,**避免質押逐漸集中**到表現最佳的機構質押者手上。 區塊提交者可以從眾多區塊建置者提供給他們的區塊中,選取收益最高的區塊。 為了對抗審查,區塊提交者常常退而求其次,選取收益較低的區塊,這在**經濟上不合理,網路上的其他驗證者也很容易看出其意圖**。 + +提交者-建置者分離有潛在的附加功能(如交易加密及包含清單),可以進一步提高以太坊的抗審查能力。 這些功能使得區塊建置者和提交者無法得知其區塊中包含的實際交易。 + +閱讀提交者-建置者分離的相關資訊 + +## 保護驗證者 {#protecting-validators} + +經驗老道的攻擊者可能有辦法識別下一輪的驗證者,透過傳送垃圾訊息阻止他們提出區塊,這稱為**阻斷服務 (DoS)** 攻擊。 實作[**秘密領導者選舉 (SLE)**](/roadmap/secret-leader-election) 可以阻止區塊提交者提前獲知區塊內容,從而防範此類攻擊。 其作用原理為:不斷變換代表候選區塊提交者的一組加密承諾,並使用其順序來確定驗證者,以便只有驗證者預先知道自己的順序。 + +閱讀秘密領導者選舉的相關資訊 + +## 目前進度 {#current-progress} + +**開發藍圖上的安全性升級正處於研究的後期階段**,但預計一段時間內還不會實作。 至於視窗合併、提交者-建置者分離、單一時隙最終確定性和秘密領導者選舉,下一步是最終確定規範並開始建置原型。 diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/user-experience/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/user-experience/index.md new file mode 100644 index 00000000000..fe338e94201 --- /dev/null +++ b/public/content/translations/zh-tw/11) Roadmap/roadmap/user-experience/index.md @@ -0,0 +1,36 @@ +--- +title: 改善使用者體驗 +description: 對大部分人而言,使用以太坊仍然是非常複雜的一件事。 為了推動普及化,以太坊必須大幅降低使用門檻 — 使用者必須獲得去中心化、無需許可、抗審查存取以太坊的優勢,同時體驗必須與使用傳統 web2 應用程式一樣順暢。 +lang: zh-tw +image: /images/roadmap/roadmap-ux.png +alt: "以太坊開發藍圖" +template: roadmap +--- + +從管理[金鑰](/glossary/#key)和[錢包](/glossary/#wallet)到發起交易,**以太坊的使用方式需要簡化**。 為促成大規模的使用,以太坊必須大幅提高易用性,讓使用者無需許可即能抗審查存取以太坊,收穫仿如使用 [Web2](/glossary/#web2) 應用程式一般的順暢體驗。 + +## 超越種子助記詞 {#no-more-seed-phrases} + +以太坊帳戶由一對用於識別帳戶(公開金鑰)和簽名訊息(私密金鑰)的金鑰保護。 私密金鑰就像主密碼,允許使用者完整存取以太坊帳戶。 對於更熟悉銀行和代使用者管理帳戶之 Web2 應用程式的人來說,這是一種不同的操作方式。 若要讓以太坊在不依賴中心化第三方的情況下被大規模採用,必須為使用者提供一種簡單、直接、順暢的方式來管理資產並掌控自己的資料,而無需瞭解公開-私密金鑰加密及金鑰管理方面的知識。 + +這個問題的解決辦法是使用[智慧型合約<](/glossary/#smart-contract)錢包與以太坊交互。 智慧型合約錢包確立了金鑰丟失或被盜時保護帳戶的方法,提供更好地檢測和防禦欺詐的機會,並且允許為錢包新增功能。 儘管智慧型合約錢包目前已經存在,但其建構難度還很大,因為需要以太坊協定提供更好的支援。 此額外的支援稱為帳戶抽象。 + +更多帳戶抽象相關資訊 + +## 所有人都能運行的節點 + +運行[節點](/glossary/#node)的使用者不必信任第三方為其提供資料,他們無需許可即可快速、私密地與以太坊[區塊鏈](/glossary/#blockchain)進行互動。 然而,現在運行節點需要技術知識以及大量的磁碟空間,這意味著許多人必須信任中介。 + +有些升級可以讓運行節點變得更加簡單,且不需消耗如此大量的資源。 儲存資料時將改為使用更節省空間的架構,稱為**沃克爾樹**。 同時,透過[無狀態](/roadmap/statelessness)或[資料過期](/roadmap/statelessness/#data-expiry),以太坊節點無需儲存全部以太坊狀態資料的副本,從而大大減少硬碟空間需求。 [輕節點](/developers/docs/nodes-and-clients/light-clients/)將帶來運行全節點的許多好處,並且可以在行動電話或簡單的瀏覽器應用程式中輕鬆運行。 + +閱讀沃克爾樹的相關資訊 + +透過這些升級,可以有效地將運行節點的障礙降低至零。 使用者無需許可即能安全存取以太坊,而不必犧牲電腦或行動電話上的大量磁碟或 CPU 空間,且使用應用程式時,不必仰賴第三方存取資料或是網路。 + +## 目前進度 {#current-progress} + +智慧型合約錢包早已可用,但需要更多升級才能讓它們盡可能去中心化及無需許可。 EIP-4337 是一項成熟的提案,無需對以太坊協定進行任何變更。 EIP-4337 所需的主要智慧型合約已於 **2023 年 3 月完成部署**。 + +**「完全無狀態」仍處於研究階段**,距離實作可能還需幾年時間。 還需要完成幾個里程碑才能實現「完全無狀態」,包括可能更快實作的資料過期。 [沃克爾樹](/roadmap/verkle-trees/)及[提交者與建置者分離](/roadmap/pbs/)等其他開發藍圖事項需要先行完成。 + +沃克爾樹測試網已經上線運行,下一階段為先在私密、後在公開的測試網上運行已啟用沃克爾樹的用戶端。 將合約部署至測試網或是運行測試網用戶端有助加快進度。 diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/account-abstraction/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/account-abstraction/index.md new file mode 100644 index 00000000000..fd6a009a74f --- /dev/null +++ b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/account-abstraction/index.md @@ -0,0 +1,126 @@ +--- +title: 帳戶摘要 +description: 以太坊讓使用者帳戶更簡潔、更安全的計劃概述 +lang: zh-tw +summaryPoints: + - 帳戶抽象使得建立智慧型合約錢包變得更加容易 + - 智慧型合約錢包使得以太坊帳戶的存取權限管理變得更加容易 + - 可以使用多個備份來恢復遺失和暴露的金鑰 +--- + +# 帳戶摘要 {#account-abstraction} + +使用者使用**[外部帳戶 (EOA)](/glossary/#eoa)** 與以太坊互動。 這是開啟交易或執行智慧型合約的唯一方法, 限制了使用者與以太坊互動的方式。 舉例而言,它使得批次處理交易變得困難,並且要求使用者始終保持一定的以太幣餘額來支付燃料費用。 + +帳戶抽象能夠解決這些問題,藉助它,使用者可以透過編程,靈活地將更高的安全性和更好的使用體驗帶到其帳戶中。 這可以透過兩種方式實現:[升級外部帳戶](https://eips.ethereum.org/EIPS/eip-3074),這樣它們可以由智慧型合約控制;[升級智慧型合約](https://eips.ethereum.org/EIPS/eip-2938),這樣他們可以發起交易。 兩個方案皆須變更以太坊協定。 還有第三條路徑涉及新增[第二個獨立的交易系統](https://eips.ethereum.org/EIPS/eip-4337),以便與現有協定並行運行。 無論選取哪條路徑,結果都是經由智慧型合約錢包存取以太坊,不管是作為現有協定一部分的本地支援或是藉由附加交易網路。 + +智慧型合約錢包為使用者帶來諸多好處,包括: + +- 自行定義靈活的安全性規則 +- 遺失金鑰時恢復帳戶 +- 安全地與受信任的裝置或個人共用帳戶 +- 幫助別人支付燃料費用,或者讓別人幫忙支付自己的燃料費用 +- 同時批量處理交易(例如一次性核准並執行兌換) +- 為去中心化應用程式和錢包開發者提供更多機會來創新使用者體驗 + +目前,這些優勢並未得到本地的支援,因為只有外部帳戶 ([EOA](/glossary/#eoa)) 才能開啟交易。 外部帳戶純粹只是公開-私密金鑰對。 它們的作用原理為: + +- 如果你有私密金鑰,就可以在以太坊虛擬機 (EVM) 內_做任何事情_ +- 如果沒有私密金鑰,就_什麼事也做不了_。 + +遺失的金鑰無法找回,竊賊可以利用被盜的金鑰立即存取帳戶中的所有資金。 + +智慧型合約錢包可以解決這些問題,但如今它們很難編程,因為最終它們實作的任何邏輯都必須轉換為一組外部帳戶交易,然後才能由以太坊處理。 帳戶抽象使得智慧型合約能夠自行發起交易,因此使用者希望實作的任何邏輯皆可編碼到智慧型合約錢包本身並在以太坊上執行。 + +最後,帳戶抽象改進了對智慧型合約錢包的支援,使其更易於建置且使用更安全。 總的說來,透過帳戶抽象,使用者可以享受以太坊的所有好處,而無需瞭解或關心底層技術。 + +## 超越種子助記詞 {#beyond-seed-phrases} + +現今的帳戶使用依據種子助記詞計算出的私密金鑰來保護。 任何有權存取種子助記詞的人皆可輕鬆發現保護帳戶的私密金鑰,並取得其保護之所有資產的存取權限。 遺失的私密金鑰和種子助記詞將永遠無法恢復,所控制的資產亦將永遠凍結。 即使對於專家使用者來說,保管這些種子助記詞也很困難,且種子助記詞網路釣魚是使用者被騙的最常見方式之一。 + +帳戶抽象將使用智慧型合約來持有資產和授權交易,從而解決這個問題。 然後可以用客製化邏輯裝飾這些智慧型合約,以使其盡可能安全並為使用者量身訂製。 最終,你依舊使用私密金鑰來管控對帳戶的存取,但安全網可以讓你的管理工作變得更輕鬆、更安全。 + +例如,可以將備份金鑰新增至錢包中,以便在主金鑰遺失或意外暴露時,能夠在獲得備份金鑰許可的情況下,用新的安全金鑰取代主金鑰。 你可以透過不同方式保護這些金鑰,或者將它們分配給受信任的監護人。 如此,竊賊便更難完全控制你的資金。 同樣,你可以向錢包新增規則,以減少主金鑰洩露時的影響,舉例來說,你可以允許透過單一簽名來驗證小額交易,而大額交易則需要多位經驗證簽署者的批准。 智慧型合約錢包還有其他方法可以幫助你阻止竊賊,例如,可以使用白名單來阻止每筆交易,除非交易是傳送到受信任的地址或是透過你預先批准的多個金鑰進行驗證。 + +### 可以內建到智慧型合約錢包中的安全邏輯範例: + +- **多重簽名授權**:可以在多個受信任的人員或裝置之間共用授權憑證。 然後可以對合約進行設定,要求交易超過某個預設值時,必須得到一定比例(例如 3/5)的可信方的授權。 舉例來說,高額交易可能需要行動裝置和硬體錢包的批准,或者需要分配予可信家庭成員的帳戶的簽名。 +- **帳戶凍結**:若裝置遺失或受到入侵,可以從另一台授權裝置鎖定帳戶,從而保護使用者的資產。 +- **帳戶恢復**:裝置遺失或忘記密碼? 在目前的範例中,這意味著你的資產可能永遠凍結。 有了智慧型合約錢包,你可以設定一份帳戶白名單來授權新裝置並重設存取權限。 +- **設定交易限制**:指定每日閾值,以控制每日/週/月可以從帳戶轉出多少金額。 這意味著,即使攻擊者確實取得存取你帳戶的存取權限,也不能立即提領所有內容,並且你將有機會凍結和重設存取權限。 +- **建立白名單**:只允許發送交易到你確認安全的特定地址。 這代表_即使_你的私密金鑰遭竊,攻擊者也只能將資金傳送到白名單上的目標帳戶。 這些白名單需要多個簽名才能更改,因此攻擊者無法將自己的地址新增至名單,除非他們有權存取你的多個備份金鑰。 + +## 更好的使用者體驗 {#better-user-experience} + +帳戶抽象可以提供**更好的整體使用者體驗**和**改進的安全性**,因為它在協定層級新增了對智慧型合約錢包的支援。 最重要的原因是,它將為智慧型合約、錢包和應用程式的開發者提供更大的自由,以我們可能無法預見的方式創新使用者體驗。 帳戶抽象帶來的一些明顯改進包括捆綁交易以提高速度和效率。 舉例來說,簡單的兌換原本應該是一鍵操作,但現在卻需要簽署多個交易,以批准各個代幣的使用,接著才能執行兌換。 帳戶抽象透過允許交易捆綁消除了這種分歧。 此外,捆綁交易可以精確批准每筆交易所需的代幣的正確價值,然後在交易完成後撤銷批准,從而提供額外的安全性。 + +透過帳戶抽象,燃料管理也得到很大的改進。 應用程式不僅可以支付使用者的燃料費用,還可以用以太幣以外的代幣支付燃料費用,讓使用者不必為了支付交易手續費而保留以太幣餘額。 這可以透過在合約內將使用者的代幣換成以太幣,然後使用以太幣支付燃料費用來實現。 + + + +燃料管理是以太坊使用者遇到的主要難題之一,主要原因是以太幣是唯一可用於支付交易手續費的資產。 想像一下,如果你的錢包中都是 USDC,沒有以太幣。 你無法移動或兌換這些 USDC 代幣,因為不能支付燃料費用。 也不能將 USDC 換成以太幣,因為這本身就需要消耗燃料。 必須從交易所或其他地址將更多以太幣傳送至你的帳戶,才能解決這個問題。 有了智慧型合約錢包後,你可以輕鬆地用 USDC 支付燃料費用,解放帳戶。 你不必再在所有帳戶中保留以太幣餘額。 + +帳戶抽象也允許去中心化應用程式開發者在燃料管理方面發揮創意。 舉例來說,你每個月或許可以為最喜愛的去中心化交易所支付一筆固定費用,以實現無限制的交易。 去中心化應用程式也可能代你支付所有燃料費用,作為對你使用其平台的獎勵,或作為入網優惠。 當協定層面支援智慧型合約錢包時,開發者將更容易在燃料方面實現創新。 + + + +可信會話還可能變革使用者體驗,特別是像遊戲這樣的應用程式,大量小額交易可能需要在短時間內獲得批准。 逐一批准交易將破壞遊戲體驗,但永久批准又不安全。 智慧型合約錢包可以在固定時間內核准某些特定交易,比如特定金額或地址的交易。 + +考慮購買過程如何隨著帳戶抽象而改變也非常有意思。 目前,必須使用已預先存入足夠數量代幣的錢包,每筆交易才能獲得批准和執行。 透過帳戶抽象,體驗比較像大家熟悉的線上購物,使用者只要將物品放入「購物車」並按一下結帳按鈕,即可一次性購買所有商品,所需的所有邏輯皆由合約處理,而非使用者。 + +這些只是帳戶抽象提升使用者體驗的個別例子,還有更多我們沒有想像到的使用場景。 帳戶抽象將開發者從現今的外部帳戶限制中解放,讓他們將 web2 的優點帶進 web3,而不必犧牲自我託管的權利,亦無需絞盡腦汁發明新的使用者體驗。 + +## 帳戶抽象將如何實作? {#how-will-aa-be-implemented} + +目前市面上已經有智慧型合約錢包了,但因為以太坊虛擬機還不支援,要實作它們非常有挑戰性。 相對的,它們依賴於在標準以太坊交易中包裝相對複雜的程式碼。 透過允許智慧型合約開啟交易,不在鏈下而是在以太坊智慧型合約中處理必要的邏輯,以太坊可以改變上述情況。 將邏輯放進智慧型合約也提高了以太坊的去中心化程度,因為有了它之後,便不需要錢包開發者運行的「中繼器」將使用者簽署的訊息轉換為常規以太坊交易。 + + + +EIP-2771 引入了元交易的概念,允許第三方在不更改以太坊協定的情況下支付使用者的燃料費用。 這個想法是讓使用者簽署的交易會送到「轉發者」合約中。 轉發者是可信任的實體,會在將交易傳送到燃料中繼器之前驗證交易是否有效。 這在鏈下完成,因此無需支付燃料費用。 燃料中繼器將交易送到「接收者」合約,支付必要的燃料費用,以使交易可在以太坊上執行。 如果「接收者」知道和信任「轉發者」,交易即會執行。 這種模式使得開發者可以輕鬆為使用者實現無燃料交易。 + + + + + +EIP-4337 是以去中心化方式實現本地智慧型合約錢包支援的第一步,無需變更以太坊協定。 不是修改共識層來支援智慧型合約錢包,而是在正常的交易廣播協定中單獨新增一個系統。 這個更高級別的系統圍繞一個名為 UserOperation 的新物件建構,此等物件將使用者的操作以及相關簽名打包在一起。 接下來,這些 UserOperation 物件會被廣播到專用記憶體池中,驗證者會將其打包成「捆綁交易」。 捆綁交易代表許多單獨的 UserOperations 序列,可以像普通交易一樣包含在以太坊區塊中,並且可以由驗證者使用類似的費用最大化選取模型來選擇。 + +EIP-4337 也會改變錢包的運作方式。 這些功能將外包給稱為「入口點」的全域錢包合約,而不是每個錢包重新實作常見但複雜的安全邏輯。 此合約將處理支付費用、執行以太坊虛擬機程式碼等操作,以便錢包開發者可以專注於提供出色的使用者體驗。 + +注意 EIP-4337 入口點合約已於 2023 年 3 月 1 日部署至以太坊主網。 你可以在 Etherscan 上查看此合約。 + + + + + +EIP-2938 的目標是藉由引入一種新的交易類型 AA_TX_TYPE 來更新以太坊協定,包含三個欄位:noncetargetdata,其中 nonce 是交易計數器,target 是入口點合約地址,data 是以太坊虛擬機位元組碼。 若要執行這些交易,需要新增兩條新的指令(又稱作業碼)到以太坊虛擬機:NONCEPAYGASNONCE 操作碼會追蹤交易序列,PAYGAS 則會計算並從合約餘額中提取執行交易所需的燃料費用。 這些新功能使得以太坊能夠在本地支援智慧型合約錢包,因為以太坊協定已內建必要的基礎設施。 + +請注意,EIP-2938 目前尚未啟用。 社群目前偏好 EIP-4337,因其不要求變更協定。 + + + + + +EIP-3074 的目標是更新以太坊的外部帳戶,方法是允許它們將控制權委託給智慧型合約。 這意味著智慧型合約邏輯可以批准源自外部帳戶的交易。 這可以讓一些功能成為可能,如燃料贊助和批次交易。 要使其可行,必須新增兩個新的作業碼到以太坊虛擬機:AUTHAUTHCALL。 透過 EIP-3074,無需合約即可獲得智慧型合約錢包的優勢;相反,一種稱為「調用者」的特定類型的無狀態、無信任、不可升級的合約會處理交易。 + +請注意,EIP-3074 目前尚未啟用。 社群目前偏好 EIP-4337,因其不要求變更協定。 + + + +## 目前進度 {#current-progress} + +智慧型合約錢包早已可用,但需要更多升級才能讓它們盡可能去中心化及無需許可。 EIP-4337 是成熟的提案,且不需要對以太坊協定做任何變更,所以可以快速實作。 然而,改變以太坊協定的升級目前尚未積極開發,因此這些更改可能需要更長的時間才能發佈。 也有可能帳戶抽象透過 EIP-4337 完美實現,也就不需要變更任何協定了。 + +## 了解更多 {#further-reading} + +- [erc4337.io](https://www.erc4337.io/) +- [來自 Devcon Bogota 的帳戶抽象小組討論](https://www.youtube.com/watch?app=desktop&v=WsZBymiyT-8) +- [來自 Devcon Bogota 的「為何帳戶抽象對去中心化應用程式來說是革命性的改變」](https://www.youtube.com/watch?v=OwppworJGzs) +- [來自 Devcon Bogota 的「帳戶抽象 ELI5」(譯註:ELI5 是「把我當五歲小孩和我解釋」的英文縮寫,指用簡單易懂的方式解釋)](https://www.youtube.com/watch?v=QuYZWJj65AY) +- [Vitalik 的「帳戶抽象之路」筆記](https://notes.ethereum.org/@vbuterin/account_abstraction_roadmap#Transaction-inclusion-lists) +- [Vitalik 關於社交恢復錢包的部落格文章](https://vitalik.eth.limo/general/2021/01/11/recovery.html) +- [EIP-2938 筆記](https://hackmd.io/@SamWilsn/ryhxoGp4D#What-is-EIP-2938) +- [EIP-2938 文檔](https://eips.ethereum.org/EIPS/eip-2938) +- [EIP-4337 筆記](https://medium.com/infinitism/erc-4337-account-abstraction-without-ethereum-protocol-changes-d75c9d94dc4a) +- [EIP-4337 文檔](https://eips.ethereum.org/EIPS/eip-4337) +- [EIP-2771 文檔](https://eips.ethereum.org/EIPS/eip-2771) +- [「帳戶抽象的基本概念」 -- 什麼是帳戶抽象,第一部分](https://www.alchemy.com/blog/account-abstraction) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/danksharding/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/danksharding/index.md new file mode 100644 index 00000000000..7fb7c6b3888 --- /dev/null +++ b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/danksharding/index.md @@ -0,0 +1,95 @@ +--- +title: Danksharding +description: 瞭解 Proto-Danksharding 和 Danksharding - 兩種依序完成以太坊擴容的升級方案。 +lang: zh-tw +summaryPoints: + - Danksharding 是一項多階段升級,旨在提升以太坊的可擴容性和容量。 + - 在第一階段 Proto-Danksharding,將資料二進位大型物件新增到區塊中 + - 資料二進位大型物件為卷軸提供了一種更便宜的方式來將資料發佈到以太坊,這些成本可以作為較低的交易費用轉嫁給使用者。 + - 隨後,完整的 Danksharding 將在部分節點之間分攤驗證資料二進制大對象的責任,進一步將以太坊擴容至每秒處理超過 100,000 筆交易。 +--- + +# Danksharding {#danksharding} + +**Danksharding** 可讓以太坊成為真正可擴容的區塊鏈,但需要進行一些協定升級才能實現這一目標。 **Proto-Danksharding** 是該過程中的一個中間步驟。 兩者的目標都是讓二層網路上的交易對使用者來說盡可能便宜,並且應該將以太坊擴容到每秒處理 >100,000 筆交易。 + +## 什麼是 Proto-Danksharding? {#what-is-protodanksharding} + +Proto-Danksharding 又稱 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844),是一種供[卷軸](/layer-2/#rollups)新增較低成本的資料到區塊的方法。 這個名稱來自提出這個想法的兩位研究人員:Protolambda 和 Dankrad Feist。 在歷史上,透過卷軸節省使用者交易的成本受到了限制,因為它們實際上會將其交易發佈到 `CALLDATA` 中。 + +該成本非常高,因為資料由所有以太坊節點處理並永遠存在鏈上,即使卷軸只需要短暫使用這些資料。 Proto-Danksharding 引入了可傳送並附加到區塊的資料二進位大型物件。 這些二進位大型物件中的資料無法被以太坊虛擬機存取,並且會在一段固定時間(撰文時為 4096 個時期,或約 18 天)後自動刪除。 這表示卷軸可以更實惠地傳送資料,並以更實惠的交易形式將節省的費用轉給終端使用者。 + + + +卷軸是指在鏈下批次處理交易,然後將結果發佈到以太坊以實現以太坊擴容。 卷軸有兩個必要元件:資料與執行檢查。 資料指卷軸處理的完整交易序列,用於產生發佈到以太坊的狀態變更。 執行檢查指讓某些誠實的參與者(「證明者」)重新執行這些交易,以確保提出的狀態變更正確無誤。 要完成執行檢查,交易資料可供使用的時間必須夠長,以讓任何人都能下載並檢查。 這意味著證明者可以識別並質疑卷軸排序者的任何不誠實行為。 然而,資料並不需要永久可用。 + + + + + +卷軸在鏈上發佈對其交易資料的承諾,並在資料二進位大型物件中提供實際資料。 這表示證明者可以確認承諾是否有效,或質疑其認為錯誤的資料。 在節點層面,資料的二進位大型物件儲存在共識用戶端中。 共識用戶端證明自己已經看過資料,且資料已在網路上傳播。 如果永久儲存資料,這些用戶端會膨脹並導致對運行節點的硬體要求過高。 反之,資料每 18 天會從節點中自動刪除。 共識用戶端的證明顯示證明者有足夠的機會驗證資料。 實際資料可由卷軸運營商、使用者或其他人儲存在鏈下。 + + + +### 如何驗證二進位大型物件資料? {#how-are-blobs-verified} + +卷軸會將它們執行的交易發佈在資料二進位大型物件中。 它們還會發佈一則對資料的「承諾」。 它們透過將多項式函式與資料擬合來做到這一點。 之後可在任意點計算此函式。 舉例來說,若我們定義一個非常簡單的函式 `f(x) = 2x-1`,則可以計算出 `x = 1`、`x = 2`、`x = 3` 時對應的結果分別為 `1、3、5`。 證明者會將相同的函式套用到資料上,並在相同的點進行計算。 如果原始資料改變,函式將不相同,因此每個點的計算結果值也會不同。 事實上,承諾和證明會更複雜,因為它們被包裝到加密函式中。 + +### 什麼是 KZG? {#what-is-kzg} + +KZG 代表 Kate-Zaverucha-Goldberg,這是一種方案的三位[原作者](https://link.springer.com/chapter/10.1007/978-3-642-17373-8_11)名字縮寫,該方案將二進位大型物件資料縮小至不大的[加密「承諾」](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html)。 卷軸提交的資料二進位大型物件必須經過驗證,以確保卷軸不會出錯。 這涉及證明者重新執行二進位大型物件中的交易,以檢查承諾是否有效。 這與執行客戶端使用梅克爾證明來檢查一層網路上的以太坊交易是否有效,在概念上是相同的。 KZG 是將多項式方程與資料擬合的另一種證明。 承諾會在一些保密資料點計算多項式。 證明者將對資料擬合相同的多項式,並以相同數值進行計算,以確認結果是否相同。 這是一種驗證資料的方法,與某些卷軸所用的以及最終由以太坊協定的其他部分使用的零知識技術相容。 + +### 什麼是 KZG 儀式? {#what-is-a-kzg-ceremony} + +KZG 儀式提供了一種方法,讓以太坊社群中的許多人一起產生可用於驗證某些資料的秘密隨機數字字串。 此數字字串是未知的,且任何人都無法重新建立,這一點很重要。 為了確保這點,每位儀式參與者都會收到前一位參與者傳來的字串。 接著他們會建立一些新的隨機值(例如,透過允許瀏覽器測量滑鼠的移動),並將其與先前收到的值進行混合。 然後他們會把新值傳給下一位參與者,並從本地機器中銷毀這個值。 只要其中一個儀式參與者是誠實的,那麼攻擊者就無法知道最終的值。 + +EIP-4844 KZG 儀式已向公眾開放,有數萬人參與並新增自己的隨機變量不確定性(隨機性)。 總共收到了超過 14 萬份貢獻,使其成為全球同類型儀式中規模最大的一次。 全部參與者都進行不誠實的行為,才可能破壞這個儀式。 站在參與者的視角,如果他們知道自己是誠實的,則不需要信任任何人,因為他們知道自己可確保儀式安全(他們自己已滿足 n 分之一誠實參與者的要求)。 + + + +當卷軸在二進位大型物件中發佈資料時,會提供一則在鏈上發佈的「承諾」。 這項承諾是在某些點對資料進行多項式擬合計算的結果。 這些點由 KZG 儀式中產生的隨機數字定義。 然後,證明者可以在相同點計算多項式以驗證資料;如果得出的值相同,則資料是正確的。 + + + + + +如果有人知道用於承諾的隨機位置,他們就很容易產生能在這些特定點擬合的新多項式(即「碰撞」)。 這表示他們可以從二進位大型物件新增或移除資料,並且仍然提供有效的證明。 為了避免這種情況,實際上不是向證明者提供實際的秘密位置,證明者實際收到的是使用橢圓曲線包裝在加密「黑盒子」中的位置。 這些方法有效地擾亂了這些值,使原始值無法被逆向工程,但透過一些聰明的代數方法,證明者和驗證者仍然可以在其代表的點上計算多項式。 + + + + + Danksharding 和 Proto-Danksharding 都不遵循傳統的「分片」模型,此模型旨在將區塊鏈分成多個部分。 分片鏈不再是以太坊開發藍圖的一部分。 相反,Danksharding 使用跨二進位大型物件的分散式資料採樣來實現以太坊擴容。 這在實作上容易很多。 此模型有時又稱「資料分片」。 + + +## Danksharding 是什麼? {#what-is-danksharding} + +Danksharding 完全實現了從 Proto-Danksharding 開始的卷軸擴容。 Danksharding 將在以太坊上為卷軸提供大量空間,用於轉存壓縮的交易資料。 這表示以太坊可以輕鬆支援數百個獨立的卷軸,並實現每秒處理數百萬筆交易。 + +它的運作方式是將附加到區塊的二進位大型物件從 Proto-Danksharding 中的六 (6) 個擴展到完整 Danksharding 中的 64 個。 所需的其餘變更都是對共識用戶端操作方式的更新,使得它們能夠處理新的大二進位大型物件。 這些變更有部分已在開發藍圖上,用於獨立於 Danksharding 的其他目的。 舉例來說,Danksharding 要求先實作提交者-建置者分離。 這是一個升級,它將不同驗證者建置區塊和提出區塊的工作分開。 同樣,Danksharding 需要資料可用性採樣,但開發不儲存太多歷史資料的輕量級用戶端(「無狀態用戶端」)也需要資料可用性採樣。 + + + +提交者-建置者分離是為了防止單一驗證者必須為 32MB 的二進位大型物件資料產生昂貴的承諾和證明。 這為家庭質押者帶來很大的壓力,因為他們需要花費更多資金購買更強大的硬體,這會降低去中心化程度。 相反,專門的區塊建置者會負責這項昂貴的計算工作。 之後,區塊提交者即可廣播他們的區塊。 區塊提交者會直接選擇收益最大的區塊。 所有人都能經濟快速地驗證二進位大型物件,表示所有普通驗證者皆可檢查區塊建置者的行為是否誠實。 這允許在不犧牲去中心化的情況下處理大型二進位大型物件。 錯誤行事的區塊建置者可能被強制退出網路並罰沒,其他人會補上他的位置,因為區塊建置是高收益的活動。 + + + + + +驗證者需要進行資料可用性採樣才能快速有效地驗證二進位大型物件資料。 透過資料可用性採樣,驗證者可以非常確定二進位大型物件資料可用且正確提交。 每個驗證者都可以隨機採樣幾個資料點並建立證明,這意味著驗證者無需檢查整個二進位大型物件。 任何資料缺漏的情況都可被快速發現且二進位大型物件會遭拒。 + + + +### 目前進度 {#current-progress} + +完整的 Danksharding 還需要幾年的時間才會實作。 在此期間,KZG 儀式已經結束,收到了超過 140,000 份貢獻,Proto-Danksharding 的[以太坊改善提案](https://eips.ethereum.org/EIPS/eip-4844)業已成熟。 此提案已在所有測試網上充分實作,並在 2024 年 3 月的 Cancun-Deneb(「坎昆」)網路升級中在主網上線。 + +### 了解更多 {#further-reading} + +- [Proto-Danksharding 筆記](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) - _Vitalik Buterin_ +- [Dankrad 的 Danksharding 筆記](https://notes.ethereum.org/@dankrad/new_sharding) +- [Dankrad、Proto 和 Vitalik 討論 Danksharding](https://www.youtube.com/watch?v=N5p0TB77flM) +- [KZG 儀式](https://ceremony.ethereum.org/) +- [Carl Beekhuizen 在 Devcon 的可信任設定演講](https://archive.devcon.org/archive/watch/6/the-kzg-ceremony-or-how-i-learnt-to-stop-worrying-and-love-trusted-setups/?tab=YouTube) +- [關於二進位大型物件資料可用性採樣的更多資訊](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling) +- [Dankrad Feist 的 KZG 承諾和證明演講](https://youtu.be/8L2C6RDMV9Q) +- [KZG 多項式承諾](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/dencun/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/dencun/index.md new file mode 100644 index 00000000000..c7ce62c50d2 --- /dev/null +++ b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/dencun/index.md @@ -0,0 +1,120 @@ +--- +title: Cancun-Deneb(坎昆)升級常見問題解答 +description: 有關 Cancun-Deneb(坎昆)網路升級的常見問題 +lang: zh-tw +--- + +# Cancun-Deneb(坎昆) {#dencun} + +Cancun-Deneb(坎昆)是以太坊網路的一次升級,這項升級啟用了 **Proto-Danksharding (EIP-4844)**,引入了臨時資料 **二進位大型物件**,以實現更便宜的[二層網路 (L2)](/glossary/#layer-2) 卷軸儲存。 + +新的交易類型使卷軸提供者能夠更經濟高效地在所謂的「二進位大型物件」中儲存資料。 二進位大型物件確保可在網路上使用約18 天(更準確地說,4096個 [時期](/glossary/#epoch))。 在此期間之後,將從網路中刪除二進位大型物件,但應用程式仍使用證明來驗證其資料的有效性。 + +這顯著降低了卷軸成本,限制了鏈的增長,並有助於支援更多使用者,同時保持安全性和一組去中心化的節點營運者。 + +## 我們預計什麼時候卷軸會反映出 Proto-Danksharding 帶來的較低費用? {#when} + +- 本次升級時間為時期 269568,即\*\* 2024 年 03 月 13 日下午 13:55 (UTC)\*\* +- 所有主要的卷軸提供者,例如 Arbitrum 或 Optimism,都已經表示在升級後將立即支援二進位大型物件。 +- 單個卷軸支援的時間表可能有所不同,因爲每個提供者都必須升級其系統才能使用新的二進位大型物件空間。 + +## 硬分叉之後以太幣該如何兌換? {#scam-alert} + +- **你的以太幣無需執行任何操作**:以太坊在坎昆升級之後,無需兌換或升級你的以太幣。 你的帳戶餘額將維持不變,同時你目前持有的以太幣在硬分叉之後,仍將保持以現有的形式存取。 +- **謹防詐騙!**  **任何要求你「升級」你的以太幣的人都是在嘗試欺騙你。** 本次升級你無須進行任何操作。 你的資產將完全不受影響。 請記住,隨時瞭解情況是防範詐騙的最佳方法。 + +[關於辨識和避免詐騙的更多資訊](/security/) + +## 坎昆網路升級解決什麼問題? {#network-impact} + +坎昆升級主要透過**便宜的費用**解決**可擴容性**(能夠處理更多使用者和交易)問題,同時使網路**保持去中心化**。 + +以太坊社群一直使用「以卷軸為中心」的方式成長,以二層網路卷軸作爲安全支援更多使用者的主要手段。 + +卷軸網路處理獨立於主網的交易的 _處理_ (或「執行」),然後將結果的加密證明和/或壓縮後的交易資料發佈回主網以保存紀錄。 儲存這些證明會產生([燃料](/glossary/#gas) 形式的)費用,而在 Proto-Danksharding 實作前,所有的網路節點營運者必須永久儲存這些證明,使其成爲費用高昂的任務。 + +坎昆升級引入 Proto-Danksharding 後,這些證明的資料儲存變得更便宜,因為只要求節點營運者儲存這些資料約 18 天,之後就能安全地刪除這些資料,避免了更高的硬體要求。 由於卷軸的提取期間通常為 7 天,只要二進位大型物件在此期間於一層網路可以使用,卷軸的安全模型不會改變。 18 天的修剪窗口為此期間提供了重要的時間緩衝。 + +[更多關於以太坊擴容的資訊](/roadmap/scaling/) + +## 如何存取舊的二進位大型物件資料? {#historical-access} + +雖然常規的以太坊節點會一直保存網路的_目前狀態_,但二進位大型物件歷史資料可以在其引入約 18 天后刪除。 在刪除這些資料之前,以太坊會確保這些資料對所有網路參與者可用,為以下各項留有時間: + +- 供相關方下載和儲存資料。 +- 所有卷軸挑戰期間結束。 +- 最終確定卷軸交易。 + +可能出於多種原因需要二進位大型物件的_歷史_資料,并且可以使用多個去中心化協定儲存和存取該資料: + +- **第三方索引協定**,如 The Graph,透過由加密經濟機制激勵的節點營運者的去中心化網路來儲存這些資料。 +- **BitTorrent**,這是一種去中心化協定,使志願者能夠保存該資料並將其分發給其他人。 +- \*\*[以太坊入口網路](/developers/docs/networking-layer/portal-network/)\*\*的目的是使用節點營運者去中心化網路,透過在參與者之分發資料(類似於 BitTorrent)來提供對所有以太坊資料的存取。 +- **個人使用者**始終可以自由地儲存其希望作爲歷史參考的任何資料的副本。 +- **卷軸提供者**在激勵的作用下儲存這些資料來提升其卷軸的使用者體驗。 +- **區塊瀏覽器**通常運行歸檔節點來索引和儲存全部這些資料,讓使用者能夠透過網路介面存取簡單的歷史參考。 + +需要注意的是,恢復歷史狀態是在 **1-of-N 信任模型**上運行的。 這意味著你只需要來自_單個可信任來源_的資料,就可以使用當前網路狀態驗證其正確性。 + +## 這項升級對更廣泛的以太坊開發藍圖有哪些貢獻? {#roadmap-impact} + +Proto-Danksharding 爲 [Danksharding](/roadmap/danksharding/) 的完全實作奠定了基礎。 Danksharding 旨在將卷軸資料的儲存分散到節點營運者,這樣,每個節點營運者只需要處理全部資料中的一小部分。 這種分散會增加每個區塊的二進位大型物件資料量,這對於擴充以太坊以處理更多使用者和交易至關重要。 + +要在保持網路去中心化的同時,以便宜的費用和更高階的應用程式 [支援數十億以太坊使用者](/roadmap/scaling/),這種可擴容性是至關重要的。 如果沒有這些改變,節點營運者的硬體需求會不斷提升,導致需要越來越昂貴的設備。 較小型營運者將被迫退出,導致網路由一些大型營運者中心化控制,這與去中心化的原則背道而馳。 + +## 這次的升級是否會影響到所有以太坊共識層和驗證者用戶端? {#client-impact} + +會,執行用戶端和共識用戶端都需要升級 Proto-Danksharding (EIP-4844)。 所有主要的以太坊用戶端都已經發佈了支持該升級的版本。 爲了在升級之後與以太坊網路保持同步,節點營運者需要確保其運行的是受支援的用戶端版本。 請注意,關於用戶端版本的資訊具有時效性,使用者應該參考最新資訊以取得最新詳細資料。 [檢視受支援的用戶端版本詳細資料](https://blog.ethereum.org/2024/02/27/dencun-mainnet-announcement#client-releases)。 + +共識用戶端處理_驗證者_軟體,這類軟體已全部更新以支援這項升級。 + +## Cancun-Deneb(坎昆)升級是否對 Goerli 或其他以太坊測試網有影響? {#testnet-impact} + +- Devnets、Goerli、Sepolia 和 Holesky 測試網都已經完成了坎昆升級,同時 Proto-Danksharding 已經全面運行 +- 卷軸開發者可使用這些網路進行 EIP-4844 測試。 +- 大多數的使用者完全不會受到此測試網變更的影響。 + +## 二層網路上的所有交易目前都使用臨時二進位大型物件空間嗎,還是可以就此進行選擇? {#calldata-vs-blobs} + +以太坊二層網路 (L2) 上的卷軸交易有兩種資料儲存類型可以選擇:臨時二進位大型物件空間或永久智慧型合約 calldata。 二進位大型物件空間是一種經濟的選擇,以更低的成本提供臨時儲存。 能夠保證資料在所有必要挑戰期間内的可用性。 另一方面,智慧型合約 calldata 提供永久性儲存,但更加昂貴。 + +主要由卷軸提供者決定使用二進位大型物件空間或 calldata。 他們會基於當前對二進位大型物件空間的需求做出選擇。 如果對二進位大型物件空間的需求很高,卷軸可能會選擇 calldata 以確保資料及時發佈。 + +儘管從理論上講,使用者可以選擇自己慣用的儲存類型,但該決定通常由卷軸提供者做出。 讓使用者進行選擇會增加複雜性,尤其是在具有成本效益的捆綁交易中。 對於關於該選擇的具體詳細資料,使用者可以參考不同卷軸提供者提供的文件。 + +## Eip-4844 會降低一層網路的燃料費嗎? {#l1-fee-impact} + +不會顯著減少。 會專門為二進位大型物件空間引入一個新的燃料市場,供卷軸提供者使用。 _儘管透過將卷軸資料下放到二進位大型物件可能會減少一層網路的費用,但這次升級主要專注於減少二層網路費用。 一層網路(主網)的費用可能會因爲二階效應小幅減少。_ + +- 一層網路燃料的減少量與卷軸提供者采用/使用的二進位大型物件資料成正比 +- 一層網路燃料很可能在非卷軸相關活動中保持競爭力 +- 使用二進位大型物件空間的卷軸需要的一層網路燃料更少,這將在短期内推動一層網路燃料費用減少 +- 二進位大型物件空間仍然有一些限制,因此,如果一個區塊内的二進位大型物件飽和/已滿,卷軸就可能需要同時將它們的資料作爲永久資料發佈,這將增加一層網路和二層網路的燃料價格 + +## 這項升級會減少其他以太坊虛擬機一層網路區塊鏈上的費用嗎? {#alt-l1-fee-impact} + +否。 Proto-Danksharding 只對將證明儲存在以太坊一層網路(主網)上的以太坊二層網路卷軸有好處。 + +僅僅是與以太坊虛擬機 (EVM) 相容并不代表網路會從這項升級中得到好處。 獨立於以太坊運行的網路(無論是否與以太坊虛擬機相容)不會將它們的資料儲存在以太坊上,也就不會從該升級中得到任何好處。 + +[瞭解更多有關二層網路卷軸的資訊](/layer-2/) + +## 想透過視覺方式學習? {#visual-learner} + + + +_解鎖以太坊的擴容,EIP-4844 — Finematics _ + + + +_Domothy 的二進位大型物件空間基礎教學 — Bankless_ + +## 延伸閱讀 {#further-reading} + +- [EIP4844.com](https://www.eip4844.com/) +- [EIP-4844:分片二進位大型物件交易 (Proto-Danksharding)](https://eips.ethereum.org/EIPS/eip-4844) +- [坎昆升級主網公告](https://blog.ethereum.org/2024/02/27/dencun-mainnet-announcement) - _以太坊基金會部落格_ +- [以太坊漫遊指南:Proto-Danksharding](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum/#proto-danksharding-eip-4844) - _Jon Charbonneau_ +- [Proto-Danksharding 常見問題](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) - _Vitalik Buterin_ +- [EIP-4844 深入解讀:坎昆升級的核心](https://medium.com/@ebunker.io/an-in-depth-explanation-of-eip-4844-the-core-of-the-cancun-upgrade-de7b13761d2c) - _Ebunker_ +- [AllCoreDevs 更新 016](https://tim.mirror.xyz/HzH5MpK1dnw7qhBSmzCfdCIxpwpD6DpwlfxtaAwEFro) - _Tim Beiko_ diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/pbs/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/pbs/index.md new file mode 100644 index 00000000000..d7d8111859f --- /dev/null +++ b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/pbs/index.md @@ -0,0 +1,51 @@ +--- +title: 提交者-建置者分離 +description: 瞭解以太坊驗證者如何以及為何要將區塊建置與區塊廣播職責分離。 +lang: zh-tw +--- + +# 提交者-建置者分離 {#proposer-builder-separation} + +目前以太坊驗證者負責建置_和_廣播區塊。 他們將從廣播網路監聽到的交易捆綁在一起,並打包進一個區塊,然後傳送到以太坊網路上。 **提交者-建置者分離 (PBS)** 會將這些任務分配給多個驗證者。 區塊建置者負責建立區塊,並在每個時隙將其提供給區塊提交者。 區塊提交者無法讀取區塊的內容,他們直接選擇收益最高的區塊,並將費用支付給區塊建置者,然後將區塊傳送至對等節點。 + +這個升級非常重要,有幾個原因。 首先,它在協定層面建立了避免交易審查的機會。 其次,它避免了業餘愛好驗證者在競爭中被機構參與者擊敗,機構參與者能更好地最佳化其區塊建置工作的獲利能力。 再者,它透過 Danksharding 升級幫助以太坊擴容。 + +## 提交者-建置者分離及抗審查性 {#pbs-and-censorship-resistance} + +將區塊建置者與區塊提交者分離可使區塊建置者更難審查交易。 這是因為可以新增相對複雜的區塊添加標準,以確保在區塊提出前沒有被審查。 由於區塊提交者是與區塊建置者分離的實體,承擔著保護者的角色,可阻止對區塊建置者的審查。 + +舉例來說,可以引入包含清單,以便當驗證者知道交易但沒有看到它們包含在區塊中時,可以將這些交易強加為下一個區塊中的必備項。 包含清單由區塊提交者的本地記憶體池(其自己知道的交易清單)產生,並在區塊被提交前送到其他節點。 若包含清單中缺少任何交易,區塊提交者可以選擇拒絕區塊、在提交前加上缺漏的交易,或者直接提交區塊(其他驗證者收到時會拒絕)。 這個理念還有一個潛在的更高效版本,它斷定建置者必須充分利用可用的區塊空間,如果不這樣做,交易將從提交者的包含清單中新增。 這個領域仍在積極研究當中,且包含清單的最佳化設定尚未確定。 + +[加密的記憶體池](https://www.youtube.com/watch?v=fHDjgFcha0M&list=PLpktWkixc1gUqkyc1-iE6TT0RWQTBJELe&index=3)也可以在區塊被廣播後,才讓建置者與提交者知道其打包進區塊的是哪些交易。 + + + +有權勢的組織可以對驗證者施壓,以審查特定地址收發的交易。 為應對這一壓力,驗證者會偵測交易池中已加入黑名單的地址並將其從提出的區塊中刪除。 提交者-建置者分離之後,這種情況不再可能出現,因為區塊提交者不會知道他們在區塊中廣播的是哪些交易。 對於某些個人或應用程式來說,遵守審查規則可能很重要,例如當審查規則在其所在地區成為法律時。 在這些情況下,合規性發生在應用程式級別,同時協定仍然無需許可且不受審查。 + + + +## 提交者-建置者分離和最大可提取價值 {#pbs-and-mev} + +**最大可提取價值 (MEV)** 指驗證者以對自己有利的方式排列交易順序,最大程度提高自己的收益。 常見的例子包括在去中心化交易所套利掉期(例如搶先進行大宗銷售或購買)或尋找清算去中心化金融倉位的機會。 最大程度提高最大可提取價值需要高深的技術知識和附加到一般驗證者的客製化軟體,這使得機構營運者在最大可提取價值提取方面的表現更有可能優於個人和業餘愛好者驗證者。 這表示中心化營運者的質押收益可能更高,形成一股中心化力量,抑制個人質押。 + +提交者-建置者分離透過重新設定最大可提取價值的經濟性解決了這個問題。 區塊提交者不需要自己搜尋最大可提取價值,只需從區塊建置者提供的許多區塊中選擇一個即可。 複雜的最大可提取價值提取作業可能是區塊建置者完成的,但獎勵歸區塊提交者所有。 這表示即使一小部分專門的區塊建置者主導了最大可提取價值提取,獎勵可能歸網路上的任何驗證者所有,包括個人質押者。 + + + +由於複雜的最大可提取價值策略提供更高的獎勵,個人可能會被質押池吸引,而不是自己單獨質押。 將區塊建置與區塊提出分離,表示提取的最大可提取價值會分散到更多驗證者,而非集中在最高效的最大可提取價值搜尋者手上。 同時,允許專業的區塊建置者存在,消除了個人的區塊建置負擔,也避免個人自己偷取最大可提取價值,同時最大程度上增加了可以檢查區塊是否誠實的個人獨立驗證者的數量。 「證明者-驗證者不對稱性」是一個重要的概念,指的是只要有強大且最大程度去中心化的驗證者網路能夠證明區塊是誠實的,中心化區塊生產就可以接受。 去中心化是一種方法,而非最終目標,我們需要的是誠實的區塊。 + + +## 提交者-建置者分離及 Danksharding {#pbs-and-danksharding} + +Danksharding 是以太坊擴容至每秒處理 >100,000 筆交易並最大限度降低卷軸使用者費用的方法。 它依賴提交者-建置者分離,因為它增加了區塊建置者的工作量,它們需要在不到 1 秒的時間內計算高達 64 MB 卷軸資料的證明。 這可能需要專門的建置者,他們可以為該任務投入相當多的硬體。 然而,在目前的情況下,由於最大可提取價值提取,區塊建置可能會越來越集中到更先進、更強大的營運商手中。 提交者-建置者分離是接受這一現實,防止其對區塊驗證(重要部分)或質押獎勵分配施加集中力量的一種方式。 一項巨大的附帶好處是,專門的區塊建置者也願意並且能夠計算 Danksharding 所需的資料證明。 + +## 目前進度 {#current-progress} + +提交者-建置者分離正處於研究的進階階段,但在以太坊用戶端中進行原型設計之前,仍有一些重要的設計問題需要解決。 目前還沒有定案的規範。 這意味著提交者-建置者分離可能還要一年或更長時間才能推出。 歡迎檢視最新的[研究現狀](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance)。 + +## 延伸閱讀 {#further-reading} + +- [研究現狀:提交者-建置者分離之下的抗審查性](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) +- [適合提交者-建置者分離的收費市場設計](https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725) +- [提交者-建置者分離及抗審查性](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Secondary-auctions) +- [包含清單](https://notes.ethereum.org/@fradamt/H1ZqdtrBF) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/secret-leader-election/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/secret-leader-election/index.md new file mode 100644 index 00000000000..349c7a47658 --- /dev/null +++ b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/secret-leader-election/index.md @@ -0,0 +1,44 @@ +--- +title: 秘密領導者選舉 +description: 解釋秘密領導者選舉可如何保護驗證者免遭攻擊 +lang: zh-tw +summaryPoints: + - 區塊提交者的 IP 地址可被預先獲知,這讓他們很容易遭受攻擊 + - 秘密領導者選舉隱藏了驗證者的身分,使得他們無法被預先獲知 + - 這個想法的延伸是在每個時隙中隨機選擇驗證者。 +--- + +# 秘密領導者選舉 {#single-secret-leader-election} + +在現在基於[權益證明](/developers/docs/consensus-mechanisms/pos)的共識機制下,接下來的區塊提交者清單是公開的,且可以對應他們的 IP 地址。 這表示攻擊者可識別哪些驗證者接下來應提出區塊,並瞄準他們發動阻斷服務 (DOS) 攻擊,使他們無法及時提出區塊。 + +這可能為攻擊者帶來獲利機會。 舉例來說,為時隙 `n+1` 選取的區塊提交者可以對時隙 `n` 中的提交者進行阻斷服務攻擊,這樣一來他們就會錯過提出區塊的機會。 這樣,發動攻擊的區塊提交者可提取兩個時隙的最大可提取價值,或者獲取本應拆分到兩個區塊的所有交易,並將它們全部添加在一個區塊中,從而獲得所有相關費用。 這對家庭驗證者的影響可能比複雜的機構驗證者更大,機構驗證者可以使用更先進的方法來保護自己免受阻斷服務攻擊,因此可能成為一股中心化力量。 + +有數種方式可以解決這個問題。 其中之一是[分散式驗證者技術](https://github.com/ethereum/distributed-validator-specs),其目標是將與運行驗證者相關的各種任務分散到多台機器上,並提供冗餘性,這樣攻擊者就更難阻止在特定時隙中提出區塊。 然而,最可靠的解決方式是**秘密單一領導者選舉 (SSLE)**。 + +## 秘密單一領導者選舉 {#secret-leader-election} + +秘密單一領導者選舉採用巧妙的加密技術來確保只有選定的驗證者知道他們已被選中。 這是透過讓每個驗證者提交其對共享金鑰的承諾實現的。 這些承諾被打亂並重新設定,確保沒有人可以將承諾對應到驗證者,但每個驗證者都知道哪個承諾屬於他們。 接著,系統會隨機選擇一個承諾。 如果驗證者偵測到他們的承諾被選中,即知道輪到自己提出區塊。 + +這一想法的主要實作稱為 [Whisk](https://ethresear.ch/t/whisk-a-practical-shuffle-based-ssle-protocol-for-ethereum/11763)。 其運作方式如下: + +1. 驗證者對共用的金鑰做出承諾。 承諾方案被設計成可以與驗證者身分綁定,但也是隨機的,因此沒有第三方可以對綁定進行反向工程,並將特定承諾連結到特定驗證者。 +2. 在一個時期開始時,使用 RANDAO 隨機選擇一組驗證者,以對 16,384 個驗證者的承諾進行抽樣。 +3. 在接下來的 8182 個時隙(一天)中,區塊提交者使用自己的私密熵對打亂部分承諾並隨機化。 +4. 打亂作業結束後,RANDAO 用於建立有序的承諾清單。 這個清單會映射到以太坊時隙。 +5. 驗證者看到他們的承諾被附加到特定的時隙,當該時隙到來時,驗證者就需要提出一個區塊。 +6. 重複這些步驟,以便承諾到時隙的分配始終遠遠領先於目前時隙。 + +這樣可以防止攻擊者提前知道哪個特定驗證者將提出下一個區塊,以防範阻斷服務攻擊。 + +## 秘密非單一領導者選舉 (SnSLE) {#secret-non-single-leader-election} + +還有一個旨在建立一種場景的單獨提案,其中每個驗證者都有隨機的機會在每個時隙中提出一個區塊,類似於工作量證明下區塊提出的決定方式,稱為**秘密非單一領導者選舉 (SnSLE)**。 一種簡單的方法是利用 RANDAO 函式來隨機選擇目前協定中的驗證者。 RANDO 的理念是,將許多獨立驗證者提交的雜湊值混合後,產生足夠隨機的數字。 在秘密非單一領導者選舉中,這些雜湊值可用於選擇下一個區塊提交者,例如選擇數值最低的雜湊值。 可以限制有效雜湊值的範圍,以調整每個時隙中單個驗證者被選中的可能性。 假設雜湊值必須低於 `2^256 * 5 / N`,其中 `N` = 活躍驗證者的數量,任何驗證者個體在時隙中被選中的幾率應該為 `5/N`。 在這個例子中,至少一個提交者在每個時隙產生有效雜湊值的幾率為 99.3%。 + +## 目前進度 {#current-progress} + +秘密單一領導者選舉與秘密非單一領導者選舉均處於研究階段。 這兩種理念都還沒有最終的規範。 秘密單一領導者選舉與秘密非單一領導者選舉是競爭關係,不能同時實作。 在上線之前,我們需要在研發、原型設計及公共測試網實作上投入更多時間。 + +## 了解更多 {#further-reading} + +- [秘密非單一領導者選舉](https://ethresear.ch/t/secret-non-single-leader-election/11789) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/single-slot-finality/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/single-slot-finality/index.md new file mode 100644 index 00000000000..e0a77a395a2 --- /dev/null +++ b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/single-slot-finality/index.md @@ -0,0 +1,66 @@ +--- +title: 單一時隙最終確定性 +description: 解釋單一時隙最終確定性 +lang: zh-tw +--- + +# 單一時隙最終確定性 {#single-slot-finality} + +最終確定一個以太坊區塊大約需要 15 分鐘。 然而,我們可以讓以太坊的共識機制更有效率地驗證區塊,明顯縮短最終確定耗費的時間。 使用者可以在同一時隙提交和最終確定區塊,而無需等待 15 分鐘。 這個概念被稱為**單一時隙最終確定性 (SSF)**。 + +## 最終確定性是什麼? {#what-is-finality} + +在以太坊基於權益證明的共識機制下,最終確定性指的是在不銷毀至少 33% 質押以太幣總量的情況下,保證不能更改或從區塊鏈中刪除區塊。 這是「加密經濟」上的安全性,因為改變鏈的順序或內容所帶來的極高成本,會讓任何理性的經濟參與者止步。 + +## 為什麼要提高最終確定的效率? {#why-aim-for-quicker-finality} + +目前完成最終確定所需的時間過長。 大部分使用者不想為此等待 15 分鐘;對於可能需要高交易吞吐量的應用程式和交易所來說,必須等待那麼長時間才能確定其交易是永久性的,也很不方便。 區塊的提出和最終確定之間存在延遲也為短期重組帶來了機會,攻擊者可以利用它來審查某些區塊或提取最大可提取價值。 處理分階段升級區塊的機制也相當複雜,並且已經多次修補以消除安全漏洞,使其成為以太坊程式碼庫中更容易出現小錯誤的部分之一。 透過將最終確定耗費的時間縮短到單一時隙,可以消除這些問題。 + +## 去中心化/時間/開銷的權衡 {#the-decentralization-time-overhead-tradeoff} + +最終確定保證不是新區塊的直接屬性;完成新區塊的最終確定需要時間。 這是因為,至少要經過佔網路以太幣質押總量 2/3 的驗證者投票(「證明」)後,區塊才會被視為已最終確定。 網路上的每個驗證節點都必須處理來自其他節點的證明,才有辦法知道某個區塊是否達到 2/3 的閾值。 + +完成最終確定的時間越短,每個節點所需的算力就必須越強,因為節點必須更快完成證明流程。 此外,網路上存在驗證節點越多,每個區塊要處理的證明也就越多,同時也提高了所需的處理能力。 需要的處理能力越高,可以參與網路的人就越少,因為運行驗證節點所需的硬體會更貴。 增加區塊間的延遲時間會降低節點所需的算力,但也會延長完成最終確定的時間,因為證明流程變得更慢了。 + +因此,需要妥善權衡開銷(算力)、去中心化(可參與區塊鏈驗證的節點數)和完成最終確定所需的時間。 理想的系統應實現最佳平衡:算力最小化、去中心化程度最大化、完成最終確定耗費的時間最小化。 + +以太坊目前的共識機制以下列方式平衡了這三個參數: + +- **將最小質押數量設為 32 以太幣**。 這為各節點必須處理的驗證者證明數量設定了上限,因此每個節點的計算要求也有上限。 +- **將完成最終確定所需的時間設為約 15 分鐘**。 這給了在一般家用電腦上運行的驗證者足夠的時間,可以安全地處理每個區塊的證明。 + +在目前的共識機制下,如果要縮短完成最終確定的時間,必須減少網路上驗證者的數量或者提高硬體要求。 然而,可以對證明的處理方式進行改進,從而在不新增每個節點之開銷的情況下計算更多的證明。 更高效的處理可讓最終確定在一個時隙中完成,而不用跨越兩個時期。 + +## 邁向單一時隙最終確定性的路徑 {#routes-to-ssf} + + + +目前的共識機制結合了來自多個驗證者(又稱委員會)的證明,減少了每個驗證者驗證區塊時所需的訊息量。 每經過一個時期(32 個時隙),每個驗證者都有一次證明機會。但在每個時隙中,只有一小部分的驗證者(又稱「委員會」)可以證明。 他們透過分割成子網,並將幾位驗證者選為「匯總者」,實現這一點。 這些匯總者會將在子網中看到的、來自其他驗證者的所有簽名合併成單一的匯總簽名。 包含最大數量個別貢獻的匯總者將其匯總簽名傳遞給區塊提交者,後者將其與其他委員會的匯總簽名一起包含在區塊中。 + +這個流程為每個驗證者提供足夠的容量,使驗證者可以在每個時期投票,因為「32 個時隙 * 64 個委員會 * 每個委員會 256 個驗證者 = 每個時期 524,288 個驗證者」。 截至本文撰寫時止(2023 年 2 月),一共有大約 513,000 個活躍驗證者。 + +在這個方案下,每個驗證者只能透過在整個時期分發證明來為一個區塊投票。 然而,有一些潛在的方式可以改進此機制,使得每個驗證者在每個時隙都有證明機會。 + + +自以太坊共識機制推出以來,簽名匯總方案 (BLS) 的可擴容性比原先想像的要高得多,同時用戶端處理和驗證簽名的能力也已提高。 事實證明,驗證者在單一時隙中處理大量證明是可行的。 舉例來說,有一百萬個驗證者,每個驗證者在每個時隙投票兩次,且時隙時間調整為 16 秒,為了在一個時隙中處理一百萬個證明,節點需要至少以每秒 125,000 個的速度驗證匯總簽名。 實際上,一般電腦會花費大約 500 奈秒完成一個簽名驗證,表示 125,000 個驗證可以在約 62.5 毫秒內完成,遠低於 1 秒的閾值。 + +若要進一步提高效率,可以建立超級委員會,如每個時隙隨機選擇 125,000 個驗證者。 只有這些驗證者可以對區塊進行投票,因此也只有這些驗證者可以決定區塊是否完成最終確定。 這是否為一個好主意,取決於社群認為成功攻擊以太坊的成本有多高。 這是因為攻擊者不需要使用質押以太幣總數的 2/3,而是用_該超級委員會_所質押以太幣的 2/3 來最終確定不誠實的區塊。 這仍然是非常活躍的研究領域,但對於一個大到首先需要超級委員會的驗證者集合來說,攻擊其中一個小組委員會的成本將非常高,這似乎是合理的(範例:使用以太幣計價的攻擊成本會是 `2/3 * 125,000 * 32 = ~2.6 million ETH`)。 攻擊的成本可以透過增加驗證者集合的大小(如調整驗證者大小,使攻擊成本為 100 萬個以太幣、400 萬個以太幣、1000 萬個以太幣)來調整。 以太坊社群[初步投票](https://youtu.be/ojBgyFl6-v4?t=755)似乎顯示 100~200 萬個以太幣是可能的攻擊成本,表示每個超級委員會約有 65,536 - 97,152 個驗證者。 + +然而,真正的瓶頸並不是驗證,對驗證者節點來說,真正有挑戰性的是簽名匯總。 要擴容簽名匯總可能需要提高每個子網中的驗證者數量、增加子網數量或新增額外的匯總層(如實作委員會的委員會)。 解決辦法可能包括允許專門的匯總者 - 類似於如何在提交者-建置者分離 (PBS) 和 Danksharding 下,將區塊建置和卷軸資料產生承諾外包給專門的區塊建置者。 + +## 分叉選擇規則在單一時隙最終確定性中扮演什麼角色? {#role-of-the-fork-choice-rule} + +目前的共識機制依賴最終確定小工具(確定是否有 2/3 的驗證者已證明某一條鏈的演算法)與分叉選擇規則(當有多個選項時決定哪一條鍊是正確的演算法)之間的緊密耦合。 分叉選擇演算法僅考慮最後一個完成最終確定的區塊_之後_的區塊。 在單一時隙最終確定性下,分叉選擇規則不會考慮任何區塊,因為最終確定發生在與提出的區塊相同的時隙中。 這表示在單一時隙最終確定性下,_不論_分叉選擇演算法_或_最終確定小工具,隨時都將保持活躍。 最終確定小工具會最終確定有 2/3 的驗證者上線且誠實證明的區塊。 若一個區塊無法超過 2/3 的閾值,則分叉選擇規則會啟動,以確定要跟隨哪條鏈。 這也為不活躍洩漏機制帶來了一個機會,可以在 >1/3 的驗證者離線時恢復區塊鏈,儘管仍有些細微差異。 + +## 未解決的問題 {#outstanding-issues} + +透過增加每個子網的驗證者數量以擴容匯總的問題是,它會導致對等網路上的負載增加。 新增匯總層的問題是,它對工程師來說非常複雜,而且會增加延遲(即區塊提交者可能需要更長的時間才能收到所有子網匯總者的訊息)。 即使使用 BLS 簽名匯總,也不清楚如何處理網路上的活躍驗證者數量多於每個時隙的實際處理能力的情況。 一種潛在的解決方法是,由於所有驗證者每個時隙都會證明,並且單一時隙最終確定性下沒有委員會,因此可以完全取消 32 個以太幣的有效餘額上限,這表示管理多個驗證者的營運商可以合併他們的質押以太幣並減少運行數量,減少驗證節點需要處理的訊息數量,以說明整個驗證者集合。 這需要大型質押者同意合併其驗證者。 也可以隨時對驗證者的數量或質押的以太幣總量設定固定上限。 然而,這需要一些機制來決定哪些驗證者可以參與,哪些不行,這很可能產生不必要的副作用。 + +## 目前進度 {#current-progress} + +單一時隙最終確定性目前處於研究階段, 預計幾年內都不會上線,可能在[沃克爾樹](/roadmap/verkle-trees/)、[Danksharding](/roadmap/danksharding/) 等其他重大升級發佈之後發佈。 + +## 了解更多 {#further-reading} + +- [Vitalik 在 2022 年的 EDCON 上談單一時隙最終確定性](https://www.youtube.com/watch?v=nPgUKNPWXNI) +- [Vitalik 的筆記:邁向單一時隙最終確定性的路徑](https://notes.ethereum.org/@vbuterin/single_slot_finality) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/statelessness/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/statelessness/index.md new file mode 100644 index 00000000000..1312b86f2b2 --- /dev/null +++ b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/statelessness/index.md @@ -0,0 +1,103 @@ +--- +title: 無狀態、狀態過期及歷史記錄過期 +description: 對於歷史記錄過期和無狀態以太坊的說明 +lang: zh-tw +--- + +# 無狀態、狀態過期及歷史記錄過期 {#statelessness} + +能在一般硬體上運行以太坊節點對實現真正的去中心化非常重要。 這是因為運行節點讓使用者可以透過獨立執行加密檢查來驗證資訊,而不是信任第三方為他們提供資料。 透過運行節點,使用者可以將交易直接提交到以太坊對等網路,而不必信任中介。 如果只有擁有昂貴硬體的使用者能夠使用這些功能,去中心化不可能實現。 相反,節點對於處理和記憶體的要求應該非常適度,如此才能在行動電話、微型電腦或家用電腦上運行。 + +現在,對於硬碟空間的高要求是妨礙節點存取普及化的主要障礙。 這主要是因為需要儲存大量以太坊狀態資料。 此狀態資料中包含處理新區塊和交易所需的關鍵資訊。 截至本文撰寫時止,推薦使用 2TB 的固態硬碟運行以太坊全節點。 對於不刪除任何舊資料的節點,儲存需求以每週大約 14GB 的速率增長,儲存自創世以來所有資料的存檔節點已達到接近 12 TB(截至 2023 年 2 月本文撰寫時止)。 + +便宜的硬碟可以用來儲存一些較舊的資料,但相較於新區塊的產生速度還是太慢了。 為用戶端保留目前的儲存模型,同時使資料儲存更便宜和容易只是暫時性的解決方案,只能解決一部分問題,因為以太坊的狀態資料增長速度是「無限的」,也就是說儲存需求只增不減,且技術進步必須持續跟上狀態資料增長的速度。 相反,用戶端必須找到新的方法來驗證區塊和交易,而不依賴從本地資料庫查詢資料。 + +## 減少節點儲存空間 {#reducing-storage-for-nodes} + +有幾種方法可以減少每個節點必須儲存的資料量,每種方法都要求對以太坊的核心協定進行不同程度的更新: + +- **歷史記錄過期**:允許節點丟棄早於第 X 個區塊的狀態資料,但不改變以太坊用戶端處理狀態資料的方式。 +- **狀態過期**:允許將不常用的狀態資料設定為不活動狀態。 用戶端可以忽略不活動的資料,直到其恢復為止。 +- **弱無狀態**:只有區塊提交者需要存取完整的狀態資料,其他節點可以在沒有本地資料庫的情況下驗證區塊。 +- **強無狀態**:所有節點都不需要存取完整的狀態資料。 + +## 資料過期 {#data-expiry} + +### 歷史記錄過期 {#history-expiry} + +歷史記錄過期指用戶端刪除不太可能需要的舊資料,只儲存少量歷史資料,並在新資料到達時刪除舊資料。 節點之所以需要歷史資料,原因有二:同步和滿足資料請求。 最初,用戶端必須從初始區塊同步,驗證一直到鏈頭為止每個連續的區塊皆正確無誤。 如今,用戶端使用「弱主觀性檢查點」來啟動到鏈頭。 這些檢查點是受信任的起始點,如同初始區塊接近現在,而非以太坊的最開始。 這表示用戶端可以刪除最近的弱主觀性檢查點之前的所有資訊,不失去同步到鏈頭的能力。 目前,用戶端透過從本機資料庫取得歷史資料來滿足相關請求(透過 JSON-RPC 傳送)。 然而,隨著歷史記錄過期,如果請求的資料已被刪除,這將無法實現。 提供這些歷史資料也需要一些創新的解決方案。 + +選項之一是用戶端透過門戶網路向對等節點請求歷史資料。 門戶網路是處於開發階段的對等網路,用於提供歷史資料,其中每個節點儲存一小部分以太坊歷史記錄,整個歷史記錄分佈在整個網路。 滿足請求的方式是,尋找儲存有相應資料的對等節點,並向它們索取資料。 或者,由於請求存取歷史資料的通常是應用程式,因此儲存歷史資料可能變成它們的責任。 以太坊上有足夠多的利他主義者願意維護歷史資料存檔。 這可能會是一個用於管理歷史資料儲存檔的去中心化自治組織,理想情況下將是所有這些選項的組合。 這些提供者可以透過多種方式提供資料,例如透過 Torrent、FTP、Filecoin 或星際檔案系統。 + +歷史記錄過期是有爭議的,因為截至目前,以太坊一直隱式保證歷史資料的可用性。 創世以來的完全同步始終可以作為標準,即使它依賴從快照重建一些較舊的資料。 歷史記錄過期將提供這種保證的責任轉移到以太坊核心協定之外。 如果中心化組織最終介入提供歷史資料,可能引發新的審查危機。 + +EIP-4444 尚未準備好上線,但正在積極討論當中。 有趣的是,EIP-4444 面臨的挑戰並不在於技術,而主要在於社群管理。 為了實現這一點,我們需要社群的支援,不僅包括協定,還包括可信實體對於歷史資料的儲存及提供方面的承諾。 + +這個升級並沒有從根本上改變以太坊節點處理狀態資料的方式,只是改變了歷史資料的存取方式。 + +### 狀態過期 {#state-expiry} + +狀態過期指將最近未存取過的單一節點的狀態移除。 有幾種方式可以實現這點,包括: + +- **依租金過期**:向帳戶收取「租金」,並在租金達到零時將帳戶設為過期 +- **依時間過期**:如果一段時間內沒有對一個帳戶執行讀取/寫入操作,則將該帳戶設定為不活動狀態 + +依租金過期可以是直接向帳戶收取租金,以將其保留在活動狀態資料庫中。 依時間過期可以是從上次帳戶互動開始的倒數計時,也可以是所有帳戶的定期過期。 也可能存在將基於時間和基於租金的模型結合起來的機制,例如:若個人帳戶在基於時間的過期之前支付一些小額費用,則該等帳戶會持續處於活動狀態。 在狀態過期下,需要注意的是,不活動狀態**不會刪除**,只是與活動狀態分開儲存而已。 不活動狀態可以恢復為活動狀態。 + +其作用原理可能是針對特定時間週期(可能約一年)建立狀態樹。 每個新的週期開始時,都建立全新的狀態樹。 只有目前的狀態樹可以修改,其他的狀態樹都不可變。 以太坊節點應儲存目前的狀態樹和下一個最近的狀態樹。 這需要一種方法來為地址新增其存在的時間週期的時間戳。 有[幾種方式](https://ethereum-magicians.org/t/types-of-resurrection-metadata-in-state-expiry/6607)可以做到這點,但主要方案需要[加長地址](https://ethereum-magicians.org/t/increasing-address-size-from-20-to-32-bytes/5485)以容納額外資訊,同時地址越長也越安全。 開發藍圖上,這個部分被稱為[地址空間擴展](https://ethereum-magicians.org/t/increasing-address-size-from-20-to-32-bytes/5485)。 + +與歷史記錄過期相似,在狀態過期下,儲存舊資料的責任將從個人使用者處卸去,並交棒給其他實體,如中心化提供者、利他的社群成員或更具未來性的去中心化解決方案(例如門戶網路)。 + +狀態過期仍在研究階段,且尚未準備好上線。 狀態過期很可能晚於無狀態用戶端和歷史記錄過期,因為這些升級使得大多數驗證者可以輕鬆管理大型狀態。 + +## 無狀態 {#statelessness} + +無狀態這個詞有點用詞不當,因為它並不意味著「狀態」的概念被消除,但確實涉及以太坊節點對狀態資料處理方式的改變。 無狀態本身有兩種類型:弱無狀態和強無狀態。 弱無狀態會將狀態儲存的職責交給少數節點,因此多數節點可以達到無狀態化。 強無狀態完全消除了所有節點儲存完整狀態資料的需求。 弱/強無狀態兩者都為一般驗證者提供了以下好處: + +- 接近即時的同步速度 +- 不需按順序驗證區塊 +- 運行節點的硬體需求極低(例如在手機上運行) +- 由於不需要進行硬碟讀寫,節點可以在便宜的硬碟上運行 +- 與以太坊未來的加密技術升級相容 + +### 弱無狀態 {#weak-statelessness} + +弱無狀態涉及變更以太坊節點處理狀態資料的方式,但並沒有完全消除網路上所有節點的狀態儲存需求。 但是,弱無狀態將狀態儲存的責任交棒給了區塊提交者,而網路上的所有其他節點都會驗證區塊而不儲存完整的狀態資料。 + +**在弱無狀態中,提出區塊需要存取完整的狀態資料,但驗證區塊不需要狀態資料。** + +為此,必須先在以太坊用戶端中實作[沃克爾樹](/roadmap/verkle-trees/)。 沃克爾樹是儲存以太坊狀態資料的替代資料結構,允許小型、固定大小的「證據」在節點間傳遞,並用於驗證區塊,而不是根據本地資料庫驗證區塊。 [提交者-建置者分離](/roadmap/pbs/)也是必要的,因為這讓區塊建置者成為有更強大硬體的特殊化節點,這些節點需要存取完整的狀態資料。 + + + +無狀態依賴區塊建置者維護完整狀態資料的副本,這樣它們才能產生用於驗證區塊的證據。 其他節點不需要存取狀態資料,驗證區塊所需的所有資訊都可以從證據中取得。 這導致了這樣一種狀況:提出區塊的成本很高,但驗證區塊很便宜,表示較少的運營商會選擇運行區塊提出節點。 然而,只要盡可能多的參與者能夠獨立驗證所提出區塊的有效性,區塊提交者的去中心化程度就不是非常重要。 + +閱讀關於 Dankrad 筆記的更多資訊 + + +區塊提交者使用狀態資料來建立「證據」,即證明區塊中的交易正在更改的狀態值的最小資料集。 其他驗證者不儲存狀態,只儲存狀態根(整個狀態的的雜湊值)。 他們會接收區塊和證據,然後用其更新自己的狀態根。 這使得驗證節點的工作變得極輕量。 + +弱無狀態正處於進階研究階段,但它依賴提交者-建置者分離策略和沃克爾樹的實作,因而小的證據才能在節點間傳遞。 這表示弱無狀態大概還要幾年才會在以太坊主網上發佈。 + +### 強無狀態 {#strong-statelessness} + +強無狀態讓所有節點都不需要儲存狀態資料。 取而代之的是,交易會和證據一起傳送,區塊建置者可以匯集這些證據。 接著,區塊生產者負責僅儲存為相關帳戶產生證據所需的狀態。 儲存狀態的責任幾乎完全交給使用者了,因為他們會傳送證據和「存取清單」以宣告他們在和哪些帳戶及儲存金鑰互動。 這會啟用極輕量節點,不過也需要權衡,因為這會使其與智慧型合約互動更加困難。 + +研究者已經研究過強無狀態,但目前預計其不會成為以太坊開發藍圖的一部分。比較可能的狀況是,弱無狀態對以太坊的擴容需求來說已經足夠。 + +## 目前進度 {#current-progress} + +弱無狀態、歷史記錄過期和狀態過期目前都處於研究階段,預計幾年後才會上線。 我們並不保證所有提案都會實作,舉例來說,如果已經先實作狀態過期,可能就不需要再實作歷史記錄過期了。 還有其他開發藍圖事項(如 [Verkle 樹](/roadmap/verkle-trees)及[提交者-建置者分離](/roadmap/pbs))需要先行完成。 + +## 了解更多 {#further-reading} + +- [Vitalik 無狀態 AMA](https://www.reddit.com/r/ethereum/comments/o9s15i/impromptu_technical_ama_on_statelessness_and/) +- [狀態大小管理理論](https://hackmd.io/@vbuterin/state_size_management) +- [恢復衝突最小化狀態邊界](https://ethresear.ch/t/resurrection-conflict-minimized-state-bounding-take-2/8739) +- [邁向無狀態和狀態過期的路徑](https://hackmd.io/@vbuterin/state_expiry_paths) +- [EIP-4444 規範](https://eips.ethereum.org/EIPS/eip-4444) +- [Alex Stokes 談 EIP-4444](https://youtu.be/SfDC_qUZaos) +- [為什麼轉換到無狀態很重要](https://dankradfeist.de/ethereum/2021/02/14/why-stateless.html) +- [原始無狀態用戶端概念筆記](https://ethresear.ch/t/the-stateless-client-concept/172) +- [更多狀態過期相關資訊](https://hackmd.io/@vbuterin/state_size_management#A-more-moderate-solution-state-expiry) +- [更多狀態過期的詳細資訊](https://hackmd.io/@vbuterin/state_expiry_paths#Option-2-per-epoch-state-expiry) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/verkle-trees/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/verkle-trees/index.md new file mode 100644 index 00000000000..bec5b0ea2e4 --- /dev/null +++ b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/verkle-trees/index.md @@ -0,0 +1,66 @@ +--- +title: 沃克爾樹 +description: 關於沃克爾樹及其將如何用於升級以太坊的簡要說明 +lang: zh-tw +summaryPoints: + - 瞭解沃克爾樹是什麼 + - 瞭解為什麼 Verkle 樹是以太坊的有用升級 +--- + +# 沃克爾樹 {#verkle-trees} + +沃克爾樹(「向量承諾」和「梅克爾樹」混合而成的詞)是一種資料結構,可用於升級以太坊節點,以便它們可以停止儲存大量狀態資料,同時保留驗證區塊的能力。 + +## 無狀態 {#statelessness} + +沃克爾樹是實現無狀態以太坊用戶端的關鍵一步。 驗證下一批區塊時,無狀態用戶端無需儲存全部的狀態資料。 無狀態用戶端不使用自己的本地以太坊狀態備份來驗證區塊,而是使用「證據」來證明區塊狀態資料的真實性。 證據是執行一組特定交易所需的各種狀態資料的集合,以及證明證據確實是完整資料一部分的加密證明。 請使用證據_而非_狀態資料庫。 要做到這一點,證據必須非常短,這樣才能安全地廣播到網路上,以便驗證者能在 12 秒的時隙內及時處理。 目前的狀態資料結構還不是很合用,因為證據太大。 沃克爾樹透過啟用小證據,消除無狀態用戶端的主要障礙之一,從而解決這個問題。 + + + +以太坊用戶端目前使用帕特里夏梅克爾樹樹狀資料結構,儲存其自身的狀態資料。 有關個人帳戶的資訊作為葉子儲存在樹上,向一對對葉子重複進行雜湊運算,直到只剩下一個雜湊值。 串接在最末尾的雜湊值被稱為「根」。 為了驗證區塊,以太坊用戶端會執行區塊中的所有交易並更新其本地狀態樹。 若本地樹的「根」與區塊提交者提出的「根」完全相同,區塊即被視為有效。因為如果區塊提交者和驗證節點執行的計算中出現任何差異,都會導致根雜湊值完全不同。 這樣做的問題是,驗證區塊鏈需要每個用戶端儲存頭塊和多個歷史區塊的整個狀態樹(Geth 中預設保留頭塊後面 128 個區塊的狀態資料)。 因此用戶端需要存取大量磁碟空間,這是在廉價、低功耗硬體上運行完整節點的障礙。 解決這個問題的辦法是將狀態樹更新為更有效的結構(沃克爾樹),這種結構可以使用短小的「證據」對資料進行彙總再分享,而無需保存完整的狀態資料。 將狀態資料重新格式化為梅克爾樹,是邁向無狀態用戶端的第一步。 + + + +## 什麼是證據以及我們為什麼需要證據? {#what-is-a-witness} + +驗證區塊表示重新執行區塊中的交易,將變更套用到以太坊狀態樹,並計算新的根雜湊值。 區塊通過驗證是指其計算出的狀態根雜湊值與區塊中提供的值相同(因為這表示區塊提交者確實執行了他們所說的計算)。 在現今的以太坊用戶端中,更新狀態需要存取整個狀態樹,狀態樹是必須儲存在本地的大型資料結構。 證據中僅包含執行區塊中交易所需的狀態資料片段。 然後,驗證者只能使用這些片段來驗證區塊提交者是否已執行區塊交易並正確更新狀態。 然而,這意味著證據需要在以太坊網路上的對等點之間足夠快地傳輸,以便每個節點能夠在 12 秒的時隙內安全地接收和處理。 如果證據太大,有些節點可能會在下載以及與鏈同步上花費大量時間。 這是一種中心化的力量,因為這表示只有擁有高速網路連接的節點可以參與驗證區塊。 使用沃克爾樹時,無需將狀態儲存在硬碟上;驗證區塊所需的_全部_資訊都包含在區塊自身中。 遺憾的是,梅克爾樹產生的證據太大,無法支援無狀態用戶端。 + +## 為什麼沃克爾樹可以支援更小的證據? {#why-do-verkle-trees-enable-smaller-witnesses} + +Merkle 樹的結構導致證據非常大,以至於無法在 12 秒的時隙內在節點之間安全地廣播。 這是因為證據是將儲存在葉子中​​的資料關聯到根雜湊值的路徑。 為了驗證資料,不僅需要擁有將每個葉子連接到根的所有中間雜湊值,還需要擁有所有「兄弟」節點。 證明中的每個節點都有一個兄弟節點,它與該兄弟節點一起做雜湊運算,以建立樹中的下一個雜湊值。 牽涉的資料量十分龐大。 沃克爾樹縮短了樹的葉子與根之間的距離,並無需提供兄弟節點來驗證根雜湊值,因此縮減了證據的大小。 透過使用強大的多項式承諾方案而不是雜湊式向量承諾,可以獲得更高的空間效率。 多項式承諾允許證據保持固定大小,無論其證明的葉子數量如何。 + +在多項式承諾方案下,證據大小可管理,可以輕鬆地在對等網路上傳輸。 這使得用戶端只需極少資料即可驗證每個區塊中的狀態變更。 + + + +證據大小各有差異,取決於其所含的葉子數量。 假設證據有 1000 片葉子,梅克爾樹的證據大約是 3.5MB(假設樹有 7 層)。 相同資料的證據在沃克爾(假設樹有 4 層)中大概是 150 kB - **縮減了大約 23 倍**。 證據大小的縮減將使無狀態用戶端證據小到可以接受。 多項式證據的大小一般在 0.128 - 1 kB 之間,取決於使用哪個特定多項式承諾。 + + + +## 沃克爾樹的結構為何? {#what-is-the-structure-of-a-verkle-tree} + +Verkle 樹是 `(key,value)` 對,其中鍵是 32 字節位元組要素,由 31 字節位元組的_主幹_和單一字節位元組的_後綴_組成。 這些鍵被整理到_擴展_節點和_內部_節點中。 擴展節點是單一的主幹,包含 256 個具有不同後綴的子節點。 內部節點也有 256 個子節點,但可以是其他擴展節點。 沃克爾樹和梅克爾樹結構的主要區別是,沃克爾樹更加扁平,表示將葉子連接到根的中間節點較少,因此產生證明時所需的資料更少。 + +![](./verkle.png) + +[閱讀沃克爾樹結構的更多相關資訊](https://blog.ethereum.org/2021/12/02/verkle-tree-structure) + +## 目前進度 {#current-progress} + +沃克爾樹測試網已經啟動並運行,但用戶端仍需要進行大量更新以支援沃克爾樹。 將合約部署至測試網或是運行測試網用戶端有助加快進度。 + +[探索 Verkle Gen Devnet 2 測試網](https://verkle-gen-devnet-2.ethpandaops.io/) + +[觀看 Guillaume Ballet 解釋 Condrieu Verkle 測試網](https://www.youtube.com/watch?v=cPLHFBeC0Vg)(請注意,Condrieu 為工作量證明測試網,目前已被 Verkle Gen Devnet 2 測試網取代)。 + +## 了解更多 {#further-reading} + +- [無狀態沃克爾樹](https://verkle.info/) +- [Dankrad Feist 在 PEEPanEIP 上對沃克爾樹的說明](https://www.youtube.com/watch?v=RGJOQHzg3UQ) +- [Guillaume Ballet 在 ETHGlobal 上對沃克爾樹的說明](https://www.youtube.com/watch?v=f7bEtX3Z57o) +- [「沃克爾樹如何讓以太坊變得更加精幹而簡約」Guillaume Ballet 在 Devcon 6 發表的演講](https://www.youtube.com/watch?v=Q7rStTKwuYs) +- [Piper Merriam 談 ETHDenver 2020 的無狀態用戶端](https://www.youtube.com/watch?v=0yiZJNciIJ4) +- [Dankrad Feist 在「零知識」播客上談沃克爾樹和無狀態性](https://zeroknowledge.fm/episode-202-stateless-ethereum-verkle-tries-with-dankrad-feist/) +- [Vitalik Buterin 談沃克爾樹](https://vitalik.eth.limo/general/2021/06/18/verkle.html) +- [Dankrad Feist 談沃克爾樹](https://dankradfeist.de/ethereum/2021/06/18/verkle-trie-for-eth1.html) +- [以太坊改進提案文件:沃克爾樹](https://notes.ethereum.org/@vbuterin/verkle_tree_eip#Illustration) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/accounts/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/accounts/index.md new file mode 100644 index 00000000000..5412c9bfca5 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/accounts/index.md @@ -0,0 +1,136 @@ +--- +title: 以太坊帳戶 +description: 以太坊帳戶釋義 — 帳戶的資料結構以及和金鑰組密碼學的關係。 +lang: zh-tw +--- + +以太坊帳戶是一個擁有以太幣 (ETH) 餘額且可以在以太坊上發送交易的實體。 帳戶可以為使用者控制的帳戶,或為智慧型合約形式的帳戶。 + +## 基本資訊 {#prerequisites} + +為了讓你更容易理解本頁,建議你先通讀我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 + +## 帳戶類型 {#types-of-account} + +以太坊有兩種帳戶類型: + +- 外部帳戶 (EOA) – 由任何持有私密金鑰的人控制 +- 合約帳戶 – 部署在網路上的智慧型合約,由程式碼控制。 瞭解[智慧型合約](/developers/docs/smart-contracts/)。 + +這兩種帳戶類型都能: + +- 接收、存放和發送以太幣和代幣 +- 與部署的智慧型合約互動 + +### 主要差異 {#key-differences} + +**外部帳戶** + +- 建立帳戶是免費的 +- 能夠發起交易 +- 外部帳戶之間的交易只能是以太幣/代幣轉帳 +- 由密碼學金鑰組組成:公開以及私密金鑰控制帳戶活動 + +**合約帳戶** + +- 建立帳戶會佔用網路儲存因此會產生費用 +- 只能在接受到交易時發送交易 +- 從外部帳戶向合約帳戶發送的交易能觸發程式碼,並能執行多種不同操作:例如傳送代幣,甚至建立新合約。 +- 合約帳戶沒有私密金鑰。 但它們由智慧型合約程式碼的邏輯控制 + +## 帳戶檢視 {#an-account-examined} + +以太坊帳戶有四個欄位: + +- `nonce` – 一個計數器,指示外部帳戶發送的交易數量或合約帳戶建立的合約數量。 對於每個帳戶,一筆特定 Nonce 的交易只能執行一次,這是未了防範重放攻擊,即不斷地廣播並重覆執行已簽署的交易。 +- `balance` – 該地址擁有的 Wei 的數量。 Wei 是以太幣的面額,1 以太幣等於1e+18 個 Wei。 +- `codeHash` -- 此雜湊值指帳戶於以太坊虛擬機 (EVM) 上的_程式碼_。 包含了程式碼片段的合約帳戶可以執行不同操作。 對帳戶進行訊息調用時,執行此以太坊虛擬機程式碼。 不同於帳戶的其他欄位,此欄位無法更改。 所有此等程式碼片段都包含於狀態資料庫中其對應的雜湊值下,以便日後擷取。 此雜湊值稱為 codeHash。 對於外部帳戶,codeHash 欄位是空字串的雜湊值。 +- `storageRoot` – 有時稱為儲存雜湊值。 梅克爾帕特里夏樹之根節點的 256 位雜湊值,它對帳戶的儲存內容進行編碼(256 位整數值之間的映射),在樹形資料結構中編碼成 256 位整數鍵的雜湊值到 RPL 編碼的 256 位整數值之間的映射。 該樹形資料結構對此帳戶的儲存內容的雜湊值進行編碼,且默認為空白。 + +![顯示帳戶組成結構的圖表](./accounts.png) _此圖表源於[以太坊的以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## 外部帳戶和金鑰組 {#externally-owned-accounts-and-key-pairs} + +帳戶由一對加密金鑰所組成:公鑰和私鑰。 金鑰組有助於證明交易確實由發送者簽署,並可防止偽造。 私密金鑰用於簽署交易,為你授予與帳戶相關的資金的監管權。 你從未真正持有加密貨幣,你持有的是私密金鑰 – 資金始終處於以太坊帳本中。 + +這樣可防止惡意行為者廣播假造交易,因為你始終都能驗證交易的發送者。 + +假設 Alice 想從自己的帳戶給 Bob 的帳戶發送以太幣,她須建立交易請求並發送到網路上進行驗證。 以太坊採用公開金鑰加密,這能確保 Alice 可以證明是她自己最初發起了該交易請求。 如果沒有加密機制,惡意對手 Eve 就能輕鬆廣播一個請求,例如「從 Alice 的帳戶給 Eve 的帳戶發送 5 以太幣」。沒有人能夠驗證這個請求不是 Alice 發送的。 + +## 建立帳戶 {#account-creation} + +當你想建立一個帳戶時,大多數程式庫會為你產生一個隨機私密金鑰。 + +私密金鑰由 64 個十六進位字元組成並且能夠使用密碼加密。 + +範例: + +`fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f` + +公開金鑰是使用[橢圓曲線數位簽名演算法](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm)從私密金鑰產生的。 你的帳戶的公開地址由公開金鑰 Keccak-256 雜湊值的後 20 位在開頭加上 `0x` 組成。 + +這意味著一個外部帳戶 (EOA) 會有一個 42 字元的地址(20 位元組的片段,即 40 個十六進制的字元加上前綴 `0x`)。 + +案例: + +`0x5e97870f263700f46aa00d967821199b9bc5a120` + +下面的範例展示如何使用一種簽名工具 [Clef](https://geth.ethereum.org/docs/tools/clef/introduction) 來產生一個新帳戶。 Clef 是一種與以太坊用戶端 [Geth](https://geth.ethereum.org) 綁定的帳戶管理與簽名工具。 `clef newaccount` 命令建立一個新的金鑰組並將其儲存於加密的密鑰庫。 + +``` +> clef newaccount --keystore + +Please enter a password for the new account to be created: +> + +------------ +INFO [10-28|16:19:09.156] Your new key was generated address=0x5e97870f263700f46aa00d967821199b9bc5a120 +WARN [10-28|16:19:09.306] Please backup your key file path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120 +WARN [10-28|16:19:09.306] Please remember your password! +Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120 +``` + +[Geth 文件](https://geth.ethereum.org/docs) + +可以透過私密金鑰衍生出公開金鑰,但無法使用公開金鑰衍生出私密金鑰。 顧名思義,**私密**意味著確保私密金鑰安全至關重要。 + +你需要使用私密金鑰來簽署訊息和交易,並輸出一個簽章。 之後,其他人能夠使用該簽章衍生出你的公開金鑰,證明你是這條訊息的創作者。 在你的應用程式中,你可以使用 JavaScript 程式庫將交易發送至網路。 + +## 合約帳戶 {#contract-accounts} + +合約帳戶亦有一個含有 42 個字元的 16 進位地址: + +範例: + +`0x06012c8cf97bead5deae237070f9587f8e7a266d` + +當在以太坊區塊鏈上部署一個合約時,通常給出合約地址。 合約地址由創作者地址及該地址發送的交易數量組成(「nonce」)。 + +## 驗證者金鑰 {#validators-keys} + +以太坊還有另一種金鑰,是在以太坊的共識機制從工作量證明過渡到權益證明時引入的。 它們是「BLS」金鑰,且被用於識別驗證者。 這些金鑰能有效地聚合起來,從而降低網路達成共識所需的帶寬。 如果沒有此等金鑰聚合,成為驗證者所需的最低質押量會高出許多。 + +[更多驗證者金鑰相關資訊](/developers/docs/consensus-mechanisms/pos/keys/)。 + +## 關於錢包的備註 {#a-note-on-wallets} + +帳戶並非錢包。 錢包是一個介面或應用程式,可讓你與你的以太坊帳戶(外部帳戶或合約帳戶)互動。 + +## 視覺範例 {#a-visual-demo} + +觀看 Austin 為你全面講解雜湊函式和金鑰組。 + + + + + +## 延伸閱讀 {#further-reading} + +- [了解以太坊帳戶](https://info.etherscan.com/understanding-ethereum-accounts/) - etherscan + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ + +## 相關主題 {#related-topics} + +- [智慧型合約](/developers/docs/smart-contracts/) +- [異動](/developers/docs/transactions/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/blocks/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/blocks/index.md new file mode 100644 index 00000000000..fa1751a2c29 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/blocks/index.md @@ -0,0 +1,152 @@ +--- +title: 區塊 +description: 以太坊區塊鏈之區塊概要 -- 資料結構、必要性及生成方式。 +lang: zh-tw +--- + +區塊為區塊鏈上擁有前一個區塊之雜湊值的交易批次。 透過這種方式,區域連結起來形成區塊鏈,因為雜湊值是透過加密方式從區塊資料中衍生得來的。 這樣就防止了假造,因為對歷史記錄中的任何區塊進行一處變更將會使其後的所有區塊無效,後面的所有雜湊值都會改變,並且所有運行區塊鏈的人都會注意到。 + +## 基本資訊 {#prerequisites} + +區塊是一個非常簡單易懂的主題。 為了讓你更容易理解本頁,建議你先閱讀[帳戶](/developers/docs/accounts/)、[交易](/developers/docs/transactions/)及我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 + +## 為何需要區塊? {#why-blocks} + +為確保所有以太坊網路參與者擁有同步狀態並一致同意明確的交易歷史記錄,我們將交易分批打包成區塊。 此代表數十個(或數百個)交易將同時被提交、同意及同步。 + +![顯示區塊中的交易導致狀態產生變化的圖表](./tx-block.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +透過將交易提交間隔分開,所有網路參與者能有足夠時間來達成共識:即便每秒有大量交易請求提出,但在以太坊上,僅以大約 12 秒的時間建立並提交一次區塊。 + +## 區塊如何運作? {#how-blocks-work} + +為了保持交易歷史記錄,區塊嚴格按照順序排列(新建立區塊包含父區塊之參照),而區塊內的交易也是嚴格按照順序排列。 除極個別情形外,在任何給定時間點,所有網路參與者都一致同意區塊的準確數量及歷史記錄,並致力於將當前的即時交易請求批次打包到下一個區塊中。 + +當隨機挑選的驗證者在網路上生成一個區塊後,區塊將被廣播至全網路;所有節點將此新區塊添加於它們的區塊鏈尾端,接著,挑選一個新的驗證者來產生下一個區塊。 目前區塊生成、提交/共識流程是由以太坊之「權益證明」協議規定的。 + +## 權益證明協議 {#proof-of-work-protocol} + +權益證明指的是: + +- 驗證節點必須質押 32 個以太幣至存款合約,做為抵押品以避免惡意行為。 這會幫助保護網路,因為不誠信的活動一經證實會導致部分或全部質押被銷毀。 +- 在每個時隙(12 秒間隔),會隨機挑選一位驗證者做為區塊的提交者。 他們將交易打包、執行並決定新的「狀態」。 他們將此資訊包裝進區塊並傳送給其他驗證者。 +- 其他驗證者接到此新區塊後,重新執行這些交易,以確保他們同意新提交的全域狀態變更。 如果該區塊是有效的,他們將其加入自己的資料庫。 +- 如果驗證者在同一時隙接到兩個衝突的區塊,他們會透過分叉選擇演算法選擇有最多質押以太幣支援的區塊。 + +[更多詳情關於質押證明(PoS)](/developers/docs/consensus-mechanisms/pos) + +## 區塊中有什麼? {#block-anatomy} + +區塊內有很多資訊。 在最高層級,區塊包含以下欄位: + +| 欄位 | 描述 | +|:---------------- |:-------------- | +| `時隙` | 區塊所屬的時隙 | +| `proposer_index` | 提出區塊的驗證者的識別碼 | +| `parent_root` | 前一個區塊的雜湊值 | +| `state_root` | 狀態物件的根雜湊值 | +| `主旨` | 包含多個欄位的物件,定義如下 | + +區塊的 `body` 包含以下幾個欄位: + +| 欄位 | 描述 | +|:-------------------- |:-------------- | +| `randao_reveal` | 用於選擇下一個區塊提出者的值 | +| `eth1_data` | 關於存款合約的資訊 | +| `塗鴉` | 用於標記區塊的任意資料 | +| `proposer_slashings` | 將被罰沒的驗證者清單 | +| `attester_slashings` | 將被罰沒的證明者清單 | +| `證明` | 支持當前區塊的證明清單 | +| `存款` | 存款合約的新增存款清單 | +| `voluntary_exits` | 離開網路的驗證者清單 | +| `sync_aggregate` | 服務輕量用端的驗證者子集 | +| `execution_payload` | 執行用户端傳送來的交易 | + +`attestations` 欄位包含區塊中所有證明的清單。 每個證明都有自己的資料類型並包含一些資料。 每個證明包含: + +| 欄位 | 描述 | +|:------------------ |:------------ | +| `aggregation_bits` | 參與過此證明的驗證者清單 | +| `數據資料` | 包含多個子欄位的容器 | +| `signature` | 所有證明驗證者的聚合簽名 | + +`attestation` 中的 `data` 欄位包含: + +| 欄位 | 描述 | +|:------------------- |:--------------- | +| `時隙` | 與證明相關的時隙 | +| `索引` | 證明驗證者的索引 | +| `beacon_block_root` | 包含此物件的信標區塊的根雜湊值 | +| `來源` | 最後一個合法檢查點 | +| `target` | 最新時期的邊界區塊 | + +執行 `execution_payload` 中的交易會更新全域狀態。 所有用戶端都重新執行 `execution_payload` 中的交易,以確保新的狀態與新區塊中 `state_root` 欄位中的狀態相符。 這就是用戶端辨別新區塊是否有效並可以安全添加至其區塊鏈中的方式。 `execution payload` 自身是一個有許多欄位的物件。 還有一個 `execution_payload_header` 欄位,其中包含了關於執行資料的重要摘要資訊。 這些資料結構組織方式如下: + +`xecution_payload_header` 包含以下欄位: + +| 欄位 | 描述 | +|:------------------- |:-------------------- | +| `家長_雜湊值` | 父區塊的雜湊值 | +| `fee_recipient` | 用於支付交易費的帳戶地址 | +| `state_root` | 在應用此區塊中的變更後全域狀態的根雜湊值 | +| `receipts_root` | 交易收據樹的雜湊值 | +| `logs_bloom` | 包含事件記錄的資料結構 | +| `prev_randao` | 用於隨機選擇驗證者的值 | +| `block_number` | 目前區塊號碼 | +| `gas_limit` | 此區塊允許的最高燃料用量 | +| `gas_used` | 此區塊實際消耗的燃料用量 | +| `時間戳` | 區塊時間 | +| `extra_data` | 原始字節位元組格式的任意額外資料 | +| `base_fee_per_gas` | 基本費用的值 | +| `block_hash` | 執行區塊的雜湊值 | +| `transactions_root` | 有效負載中交易的根雜湊值 | +| `withdrawal_root` | 有效負載中提款的根雜湊值 | + +`execution_payload` 自身包含了以下欄位(請注意,這些欄位與標頭相同,只是它不包含交易的根雜湊值,而是包含實際的交易清單和提款資訊): + +| 欄位 | 描述 | +|:------------------ |:-------------------- | +| `家長_雜湊值` | 父區塊的雜湊值 | +| `fee_recipient` | 用於支付交易費的帳戶地址 | +| `state_root` | 在應用此區塊中的變更後全域狀態的根雜湊值 | +| `receipts_root` | 交易收據樹的雜湊值 | +| `logs_bloom` | 包含事件記錄的資料結構 | +| `prev_randao` | 用於隨機選擇驗證者的值 | +| `block_number` | 目前區塊號碼 | +| `gas_limit` | 此區塊允許的最高燃料用量 | +| `gas_used` | 此區塊實際消耗的燃料用量 | +| `時間戳` | 區塊時間 | +| `extra_data` | 原始字節位元組格式的任意額外資料 | +| `base_fee_per_gas` | 基本費用的值 | +| `block_hash` | 執行區塊的雜湊值 | +| `交易(transactions)` | 要執行交易的清單 | +| `提款` | 提款物件清單 | + +`withdrawals` 清單包含 `withdrawals` 物件,具下列結構: + +| 欄位 | 描述 | +|:---------------- |:-------- | +| `address` | 已提款的帳戶地址 | +| `amount` | 提款金額 | +| `索引` | 提款索引值 | +| `validatorIndex` | 驗證者索引值 | + +## 區塊時間 {#block-time} + +區塊時間指的是分隔區塊的時間。 在以太坊上,時間被分割成 12 秒的單位,稱為「時隙」。 在每個時隙中,都會選擇一個驗證者來提交區塊。 假設所有驗證者都在線且功能完整,那每個時隙中都會有一個區塊,表示區塊時間為 12 秒。 然而,偶爾,當被要求提交區塊時驗證者可能下線,這表示時隙有時候會是空白的。 + +這種實作與基於工作量證明的系統不同,在工作量證明系統中,區塊時間是機率性的,並根據協議的目標挖礦難度調整。 以太坊的[平均區塊時間](https://etherscan.io/chart/blocktime)就是個完美的範例,可以透過一致性的 12 秒區塊時間清楚地推斷出,已經由工作量證明過渡到權益證明了。 + +## 區塊大小 {#block-size} + +最後一個重要事項:區塊本身具大小限制。 每個區塊具 15M 單位燃料用量之目標大小,但區塊大小將跟隨網路需求增減,最大可達到 30M 燃料用量的區塊大小限制(目標區塊大小之兩倍)。 區塊的燃料限制可以比前一個區塊的燃料限制上調或下調 1/1024。 因此,驗證者可以透過共識來改變區塊的燃料限制。 區塊中所有交易消耗的總燃料用量須少於區塊燃料限制。 這一點非常重要,因其確保區塊不能成為任意大小。 若區塊可以任意大,由於空間及速度方面的要求,那些效能一般的全節點可能逐漸跟不上網路。 區塊愈大,在下一個時隙中及時處理它們所需的算力就愈多。 這是一種中心化力量,可以透過限制區塊大小來抵制。 + +## 衍生閱讀 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [交易](/developers/docs/transactions/) +- [燃料](/developers/docs/gas/) +- [權益證明(PoS)](/developers/docs/consensus-mechanisms/pos) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/dapps/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/dapps/index.md new file mode 100644 index 00000000000..fd7e5a7d869 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/dapps/index.md @@ -0,0 +1,96 @@ +--- +title: 去中心化應用程式簡介 +description: +lang: zh-tw +--- + +去中心化應用程式 (dapp) 是建立在去中心化網路之上的應用程式,由[智慧型合約](/developers/docs/smart-contracts/)和前端使用者介面構成。 在以太坊上,如同開放式應用程式介面 (API) 一樣,智慧型合約具可存取性和透明性,因此你的去中心化應用程式甚至能包含他人已經編寫好的智慧型合約。 + +## 基本資訊 {#prerequisites} + +在學習去中心化應用程序之前,應該先瞭解[區塊鏈基本知識](/developers/docs/intro-to-ethereum/),並瞭解以太坊網路及其如何去中心化。 + +## 去中心化應用程式之定義 {#definition-of-a-dapp} + +去中心化應用程序的後端程式碼在去中心化點對點網路上運行。 與之相比,普通應用程序的後端程式碼在中心化伺服器上運行。 + +去中心化應用程式的前端程式碼與使用者介面可以用任何語言編寫(就像普通應用程式一樣),以呼叫其後端。 此外,其前端能夠託管於任何去中心化儲存中,例如[星際檔案系統](https://ipfs.io/)。 + +- **去中心化** -- 去中心化應用程式運行於以太坊上。以太坊是一個開放式公共去中心化平台,不受任何個人或群組控制 +- **確定性** - 去中心化應用程式總是執行相同函式,而與其執行環境無關 +- **圖靈完備** - 只要有所需的資源,去中心化應用程式就能執行任何操作 +- **隔離性** - 去中心化應用程式在稱為以太坊虛擬機的虛擬環境中執行,所以即使智慧型合約出現錯誤,也不會影響區塊鏈執行正常功能 + +### 關於智慧型合約 {#on-smart-contracts} + +在介紹去中心化應用程式之前,我們需要先認識智慧型合約,由於沒有更好的術語,我們用它來表示去中心化應用程式的後端。 欲查看細節概要,請查閱我們的[智慧型合約](/developers/docs/smart-contracts/)一節。 + +智慧型合約是存在於以太坊區塊鏈上的程式,完全按照設定運行。 智慧型合約一旦部署於網路上後,你將無法更改它。 去中心化應用程式可以實現去中心化,因為控制它們的是編寫到合約內的邏輯,而不是任何個人或公司。 這也表示你必須非常謹慎地設計你的合約並進行全面測試。 + +## 去中心化應用程式的開發優勢 {#benefits-of-dapp-development} + +- **零下線時間** -- 一旦智慧型合約部屬到區塊鏈上,整個網路將始終能夠為想要與此合約互動的客戶提供服務。 因此,惡意行為者無法發動針對單獨去中心化應用程式的拒絕服務攻擊。 +- **隱私** -- 你無需提供真實身份,即可部署去中心化應用程式或與之互動。 +- **抗審查** -- 網路上的任何單獨實體都無法阻止使用者提交交易、部署去中心化應用程式並讀取區塊鏈中的資料。 +- **資料完整性** -- 藉由加密基元技術,儲存於區塊鏈上的資料具不可變性及無爭議性。 惡意行為者無法假造已公開的交易或其他資料。 +- **無需信任的計算/可驗證的行為** – 可以對智慧型合約進行分析且可以保障其按照可預見的方式執行,而無需信任中心化管理機構。 在傳統模式下,情況並非如此;例如,在使用線上銀行系統時,我們必須信任此等金融機構不會濫用我們的財物資料,不會竄改紀錄或者不會受到駭客攻擊。 + +## 去中心化應用程式的開發弊端 {#drawbacks-of-dapp-development} + +- **維護** -- 因為發佈到區塊鏈上的程式碼與資料更加難以修改,去中心化應用程式維護起來難度更大。 一旦部署去中心化應用程式後,開發者將難以更新去中心化應用程式(或其儲存的基礎資料),即便在舊版本中發現了錯誤或安全風險。 +- **效能開銷** – 效能開銷非常之高,並且擴容極其困難。 為了達成以太坊追求的高水平安全性、完整性、透明性及可靠性,每個節點都運行並儲存每一筆交易。 除此之外,達成權益證明共識也需要時間。 +- **網路壅塞** -- 當一個去中心化應用程式佔用過多計算資源時,整個網路會變得壅塞。 目前,以太坊網路能每秒處理大約 10-15 筆交易,但如果發送交易的速度快於處理速度,未確認的交易池將快速暴增。 +- **使用者體驗** – 可能很難設計出方便使用的體驗,因為普通終端使用者可能會發現難以設定透過真正安全的方式與區塊鏈互動所需的工具棧。 +- **中心化** -- 方便使用且方便開發的解決方案建立於以太坊基礎層上,最終它們可能在某些方面看起來像是中心化服務。 例如,此等服務可能在伺服器端儲存金鑰或其他敏感資訊,通過中心化伺服器支援前端,或者在將其寫入區塊鏈前在中心化伺服器上運行重要業務邏輯。 中心化會消除許多(如果不是全部)區塊鏈相較於傳統模式的優勢。 + +## 想透過實際視覺學習? {#visual-learner} + + + +## 用於建立去中心化應用程式的工具 {#dapp-tools} + +**Scaffold-ETH _- 透過可適應你的智慧型合約的前端,快速體驗 Solidity。_** + +- [Github](https://github.com/scaffold-eth/scaffold-eth-2) +- [範例去中心化應用程式](https://punkwallet.io/) + +**Create Eth App _- 通過一條指令建立以太坊支援的應用程式。_** + +- [Github](https://github.com/paulrberg/create-eth-app) + +**One Click Dapp _ - FOSS 工具,用來透過[應用程式二進位介面](/glossary/#abi)生成去中心化應用程式前端。_** + +- [oneclickdapp.com](https://oneclickdapp.com) +- [Github](https://github.com/oneclickdapp/oneclickdapp-v1) + +**Etherflow_ -- FOSS 工具,以太坊開發者可用其測試節點,在瀏覽器中撰寫並偵錯遠端程序呼叫。_** + +- [etherflow.quiknode.io](https://etherflow.quiknode.io/) +- [GitHub](https://github.com/abunsen/etherflow) + +**thirdweb _- 用於 Web3 開發的各種語言的軟體開發套件、智慧型合約、工具及基礎設施。_** + +- [首頁](https://thirdweb.com/) +- [文件](https://portal.thirdweb.com/) +- [GitHub](https://github.com/thirdweb-dev/) + +**Crossmint _- 企業級 Web3 開發平台,可用於部署智慧型合約,支援信用卡和跨鏈支付,並使用應用程式介面來建立、分發、銷售、儲存和編輯非同質化代幣。_** + +- [crossmint.com](https://www.crossmint.com) +- [文件](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) + +## 衍生閱讀 {#further-reading} + +- [探索去中心化應用程式](/dapps) +- [Web 3.0 應用程式的架構](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ +- [-2021 版去中心化應用程式指南](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) - _LimeChain_ +- [去中心化應用程式為何?](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) - _Gemini_ +- [熱門去中心化應用程式](https://www.alchemy.com/dapps) - _Alchemy_ + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [以太坊堆疊簡介](/developers/docs/ethereum-stack/) +- [開發架構](/developers/docs/frameworks/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/index.md new file mode 100644 index 00000000000..449d559a645 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/index.md @@ -0,0 +1,78 @@ +--- +title: 以太坊虛擬機 (EVM) +description: 以太坊虛擬機及其與網路狀態、交易、智慧型合約之間關係之介紹。 +lang: zh-tw +--- + +以太坊虛擬機 (EVM) 是去中心化的虛擬環境,可以跨所有以太坊節點一致且安全地執行程式碼。 節點運行以太坊虛擬機來執行智慧型合約,使用「[燃料](/gas/)」來衡量[運算](/developers/docs/evm/opcodes/)所需的算力,確保高效的資源分配和網路安全。 + +## 基本資訊 {#prerequisites} + +首先,對電腦科學之常用術語,例如[字節位元組](https://wikipedia.org/wiki/Byte)、[記憶體](https://wikipedia.org/wiki/Computer_memory)及[堆疊](https://wikipedia.org/wiki/Stack_(abstract_data_type))等有一個基本認知,才能夠理解以太坊虛擬機。 熟悉密碼學/區塊鏈概念,如[雜湊函式](https://wikipedia.org/wiki/Cryptographic_hash_function)和[梅克爾樹](https://wikipedia.org/wiki/Merkle_tree)等也有幫助。 + +## 從帳本至狀態機 {#from-ledger-to-state-machine} + +我們經常使用「分佈式帳本」這一比喻來描述比特幣一類的區塊鏈,區塊鏈透過使用一些基礎加密工具來支持去中心化貨幣。 帳本維護著活動記錄,並且必須遵守一套管控帳本修改相關操作的規則。 例如,比特幣地址無法花費超出其先前接受數量之比特幣。 此類規則構成比特幣及其他區塊鏈上所有交易的基礎。 + +盡管以太坊有著自己的原生加密貨幣(以太幣)且遵循幾乎相同的直觀規則,但它還支持一種更加強大的功能:[智慧型合約](/developers/docs/smart-contracts/)。 對於此更為複雜的功能,需要一種更貼切之比喻來形容以太坊。 以太坊並非分佈式帳本,而是一種分佈式[狀態機](https://wikipedia.org/wiki/Finite-state_machine)。 以太坊狀態為一種龐大資料結構,其中不僅包含所有帳戶與餘額還包括_機器狀態_,機器狀態能夠遵照先前定義的一套規則在區塊之間變化並能執行任何機器程式碼。 在區塊之間變更狀態的具體規則由以太坊虛擬機定義。 + +![展示以太坊虛擬機構成的圖表](./evm.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## 以太坊狀態轉換函式 {#the-ethereum-state-transition-function} + +以太坊虛擬機的運行類似於數學函式:提供一個輸入,就會生成確定的輸出。 因此,更加正式地描述以太坊具有**狀態轉換函式**將很有幫助: + +``` +Y(S, T)= S' +``` + +提供一個舊的有效狀態 `(S)` 及一組新的有效交易 `(T)`,以太坊狀態轉換函式 `Y(S, T)` 將生成一個新的有效輸出狀態 `S'`。 + +### 狀態 {#state} + +在以太坊情境下,狀態為一個龐大的資料結構,稱為[改進的梅克爾帕特里夏樹](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/),該樹保存由雜湊值連接在一起的所有[帳戶](/developers/docs/accounts/)且可回朔至在區塊鏈上儲存的單一根哈希。 + +### 交易 {#transactions} + +交易為完全由帳戶指令加密簽章. 交易主要有兩種類型:一種交易發起訊息調用,一種啟動合約建立。 + +合約建立將建立一個新合約帳戶,其中包含已編譯的[智慧型合約](/developers/docs/smart-contracts/anatomy/)位元組碼。 當其他帳戶對該合約進行訊息調用時,將執行該合約的位元組碼。 + +## 以太坊虛擬機相關說明 {#evm-instructions} + +以太坊虛擬機的執行類似於[堆疊機](https://wikipedia.org/wiki/Stack_machine),執行深度為 1024 個專案。 每個專案均為 256 位元的字,選擇它是為了方便用於 256 位元加密(例如,Keccak-256 雜湊或 secp256k1 簽章)。 + +執行過程中,以太坊虛擬機維持一個臨時_記憶體_(即字尋址字元陣列),該記憶體於交易間隔期間不存在。 + +然而,合約確實包含一棵梅克爾帕特里夏_儲存_樹(即字尋址字陳列),該樹與相關帳戶關聯且是全域狀態的一部分。 + +已編譯的智慧型合約位元組碼作為一些以太坊虛擬機[作業碼](/developers/docs/evm/opcodes)執行,後者執行標準堆疊操作,例如 `XOR`、`AND`、`ADD`、`SUB` 等。 以太坊虛擬機亦可透過一些區塊鏈特定的堆疊操作實作,例如 `ADDRESS`、`BALANCE`、`BLOCKHASH` 等。 + +![展示需要燃料的以太坊虛擬機操作](../gas/gas.png) _圖表源於[以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## 以太坊虛擬機實作 {#evm-implementations} + +所有以太坊虛擬機實作均須遵照以太坊黃皮書中規定的相關規範。 + +在以太坊九年的歷程中,以太坊虛擬機經歷了數次修改,有著各種不同程式語言的以太坊虛擬機實作。 + +[以太坊執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)包含以太坊虛擬機實作。 此外,還有一些獨立的實作,包括: + +- [Py-EVM](https://github.com/ethereum/py-evm) - _Python_ +- [evmone](https://github.com/ethereum/evmone) - _C++_ +- [ethereumjs-vm](https://github.com/ethereumjs/ethereumjs-vm) - _JavaScript_ +- [revm](https://github.com/bluealloy/revm) - _Rust_ + +## 延伸閱讀 {#further-reading} + +- [以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf) +- [Jellopaper 亦稱為 KEVM:K 框架中的以太坊虛擬機語意](https://jellopaper.org/) +- [The Beigepaper](https://github.com/chronaeon/beigepaper) +- [以太坊虛擬機作業碼](https://www.ethervm.io/) +- [以太坊虛擬機作業碼互動式參考資料](https://www.evm.codes/) +- [Solidity 文件簡介](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) +- [掌握以太坊 - 以太坊虛擬機 (EVM)](https://github.com/ethereumbook/ethereumbook/blob/develop/13evm.asciidoc) + +## 相關主題 {#related-topics} + +- [Gas](/developers/docs/gas/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/opcodes/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/opcodes/index.md new file mode 100644 index 00000000000..58812e2ebd4 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/opcodes/index.md @@ -0,0 +1,174 @@ +--- +title: 以太坊虛擬機的作業碼 +description: 以太坊虛擬機可用的所有作業碼清單。 +lang: zh-tw +--- + +## 概觀 {#overview} + +本文是以太坊虛擬機參考頁面的更新版本,網址為:[wolflo/evm-opcodes](https://github.com/wolflo/evm-opcodes)。 同樣取自[黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf)、[Jello Paper](https://jellopaper.org/evm/) 和 [geth](https://github.com/ethereum/go-ethereum) 實作。 本文意圖成为方便參考的頁面,但並非特別嚴謹。 若你想確定正確性並了解每種邊界案例(指僅在極端工作參數下才會發生的問題或情況),建議使用 Jello Paper 或用戶端實作。 + +正在尋找互動式參考資料? 請瀏覽 [evm.codes](https://www.evm.codes/) + +關於燃料費用為動態的操作,請查看 [gas.md](https://github.com/wolflo/evm-opcodes/blob/main/gas.md)。 + +💡 快速提示:要檢視整行,可以用 `[shift] + 滑鼠滾輪`在桌面上水平滾動。 + +| 堆疊 | 名稱 | 燃料 | 初始堆疊 | 最終堆疊 | 記憶體/儲存空間 | 注釋 | +|:-----:|:-------------- |:-----------------------------------------------------------------------------------------------:|:------------------------------------------------ |:-------------------------------------------- |:----------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 00 | STOP | 0 | | | | halt execution | +| 01 | ADD | 3 | `a, b` | `a + b` | | (u)int256 addition modulo 2\*\*256 | +| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 multiplication modulo 2\*\*256 | +| 03 | SUB | 3 | `a, b` | `a - b` | | (u)int256 addition modulo 2\*\*256 | +| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 division | +| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 division | +| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 modulus | +| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 modulus | +| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 addition modulo N | +| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 multiplication modulo N | +| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 exponentiation modulo 2\*\*256 | +| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [sign extend](https://wikipedia.org/wiki/Sign_extension) `x` from `(b+1)` bytes to 32 bytes | +| 0C-0F | _invalid_ | | | | | | +| 10 | LT | 3 | `a, b` | `a < b` | | uint256 less-than | +| 11 | GT | 3 | `a, b` | `a > b` | | uint256 greater-than | +| 12 | SLT | 3 | `a, b` | `a < b` | | int256 less-than | +| 13 | SGT | 3 | `a, b` | `a > b` | | int256 greater-than | +| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 equality | +| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 iszero | +| 16 | AND | 3 | `a, b` | `a && b` | | bitwise AND | +| 17 | OR | 3 | `a, b` | `a \|\| b` | | bitwise OR | +| 18 | XOR | 3 | `a, b` | `a ^ b` | | bitwise XOR | +| 19 | NOT | 3 | `a` | `~a` | | bitwise NOT | +| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | `i`th byte of (u)int256 `x`, from the left | +| 1B | SHL | 3 | `shift, val` | `val << shift` | | shift left | +| 1C | SHR | 3 | `shift, val` | `val >> shift` | | logical shift right | +| 1D | SAR | 3 | `shift, val` | `val >> shift` | | arithmetic shift right | +| 1E-1F | _invalid_ | | | | | | +| 20 | KECCAK256 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len-1])` | | keccak256 | +| 21-2F | _invalid_ | | | | | | +| 30 | ADDRESS | 2 | `。` | `address(this)` | | address of executing contract | +| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | balance, in wei | +| 32 | ORIGIN | 2 | `。` | `tx.origin` | | address that originated the tx | +| 33 | CALLER | 2 | `。` | `msg.sender` | | address of msg sender | +| 34 | CALLVALUE | 2 | `。` | `msg.value` | | msg value, in wei | +| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | read word from msg data at index `idx` | +| 36 | CALLDATASIZE | 2 | `。` | `len(msg.data)` | | length of msg data, in bytes | +| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `。` | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | copy msg data | +| 38 | CODESIZE | 2 | `。` | `len(this.code)` | | length of executing contract's code, in bytes | +| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `。` | | mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1] | copy executing contract's bytecode | +| 3A | GASPRICE | 2 | `。` | `tx.gasprice` | | gas price of tx, in wei per unit gas [\*\*](https://eips.ethereum.org/EIPS/eip-1559#gasprice) | +| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | size of code at addr, in bytes | +| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `。` | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | copy code from `addr` | +| 3D | RETURNDATASIZE | 2 | `。` | `size` | | size of returned data from last external call, in bytes | +| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `。` | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | copy returned data from last external call | +| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hash` | | hash = addr.exists ? keccak256(addr.code) : 0 | +| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | | +| 41 | COINBASE | 2 | `。` | `block.coinbase` | | 目前區塊提交者的地址 | +| 42 | TIMESTAMP | 2 | `。` | `block.timestamp` | | timestamp of current block | +| 43 | NUMBER | 2 | `。` | `block.number` | | number of current block | +| 44 | PREVRANDAO | 2 | `。` | `randomness beacon` | | randomness beacon | +| 45 | GASLIMIT | 2 | `。` | `block.gaslimit` | | gas limit of current block | +| 46 | CHAINID | 2 | `。` | `chain_id` | | push current [chain id](https://eips.ethereum.org/EIPS/eip-155) onto stack | +| 47 | SELFBALANCE | 5 | `。` | `address(this).balance` | | balance of executing contract, in wei | +| 48 | BASEFEE | 2 | `。` | `block.basefee` | | base fee of current block | +| 49 | BLOBHASH | 3 | `idx` | `tx.blob_versioned_hashes[idx]` | | [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) | +| 4A | BLOBBASEFEE | 2 | `。` | `block.blobbasefee` | | 当前区块的二進位大型物件基本费用 ([EIP-7516](https://eips.ethereum.org/EIPS/eip-7516)) | +| 4B-4F | _invalid_ | | | | | | +| 50 | POP | 2 | `_anon` | `。` | | remove item from top of stack and discard it | +| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | read word from memory at offset `ost` | +| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `。` | mem[ost:ost+32] := val | write a word to memory | +| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `。` | mem[ost] := val && 0xFF | write a single byte to memory | +| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | read word from storage | +| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `。` | storage[key] := val | write word to storage | +| 56 | JUMP | 8 | `dst` | `。` | | `$pc := dst` mark that `pc` is only assigned if `dst` is a valid jumpdest | +| 57 | JUMPI | 10 | `dst, condition` | `。` | | `$pc := condition ? dst : $pc + 1` | +| 58 | PC | 2 | `。` | `$pc` | | program counter | +| 59 | MSIZE | 2 | `。` | `len(mem)` | | size of memory in current execution context, in bytes | +| 5A | GAS | 2 | `。` | `gasRemaining` | | | +| 5B | JUMPDEST | 1 | | | mark valid jump destination | a valid jump destination for example a jump destination not inside the push data | +| 5C | TLOAD | 100 | `key` | `tstorage[key]` | | 從暫存中讀取字詞 ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | +| 5D | TSTORE | 100 | `key, val` | `。` | tstorage[key] := val | 將字詞寫入暫存 ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | +| 5E | MCOPY | 3+3\*字詞數+[A0](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `dstOst, ost, len` | `。` | mem[dstOst] := mem[ost:ost+len] | 從一個區域複製記憶體到另一個區域 ([EIP-5656](https://eips.ethereum.org/EIPS/eip-5656)) | +| 5E | PUSH0 | 2 | `。` | `uint8` | | 將常數值 0 推至堆疊上 | +| 60 | PUSH1 | 3 | `。` | `uint8` | | push 1-byte value onto stack | +| 61 | PUSH2 | 3 | `。` | `uint16` | | push 2-byte value onto stack | +| 62 | PUSH3 | 3 | `。` | `uint24` | | push 3-byte value onto stack | +| 63 | PUSH4 | 3 | `。` | `uint32` | | push 4-byte value onto stack | +| 64 | PUSH5 | 3 | `。` | `uint40` | | push 5-byte value onto stack | +| 65 | PUSH6 | 3 | `。` | `uint48` | | push 6-byte value onto stack | +| 66 | PUSH7 | 3 | `。` | `uint56` | | push 7-byte value onto stack | +| 67 | PUSH8 | 3 | `。` | `uint64` | | push 8-byte value onto stack | +| 68 | PUSH9 | 3 | `。` | `uint72` | | push 9-byte value onto stack | +| 69 | PUSH10 | 3 | `。` | `uint80` | | push 10-byte value onto stack | +| 6A | PUSH11 | 3 | `。` | `uint88` | | push 11-byte value onto stack | +| 6B | PUSH12 | 3 | `。` | `uint96` | | push 12-byte value onto stack | +| 6C | PUSH13 | 3 | `。` | `uint104` | | push 13-byte value onto stack | +| 6D | PUSH14 | 3 | `。` | `uint112` | | push 14-byte value onto stack | +| 6E | PUSH15 | 3 | `。` | `uint120` | | push 15-byte value onto stack | +| 6F | PUSH16 | 3 | `。` | `uint128` | | push 16-byte value onto stack | +| 70 | PUSH17 | 3 | `。` | `uint136` | | push 17-byte value onto stack | +| 71 | PUSH18 | 3 | `。` | `uint144` | | push 18-byte value onto stack | +| 72 | PUSH19 | 3 | `。` | `uint152` | | push 19-byte value onto stack | +| 73 | PUSH20 | 3 | `。` | `uint160` | | push 20-byte value onto stack | +| 74 | PUSH21 | 3 | `。` | `uint168` | | push 21-byte value onto stack | +| 75 | PUSH22 | 3 | `。` | `uint176` | | push 22-byte value onto stack | +| 76 | PUSH23 | 3 | `。` | `uint184` | | push 23-byte value onto stack | +| 77 | PUSH24 | 3 | `。` | `uint192` | | push 24-byte value onto stack | +| 78 | PUSH25 | 3 | `。` | `uint200` | | push 25-byte value onto stack | +| 79 | PUSH26 | 3 | `。` | `uint208` | | push 26-byte value onto stack | +| 7A | PUSH27 | 3 | `。` | `uint216` | | push 27-byte value onto stack | +| 7B | PUSH28 | 3 | `。` | `uint224` | | push 28-byte value onto stack | +| 7C | PUSH29 | 3 | `。` | `uint232` | | push 29-byte value onto stack | +| 7D | PUSH30 | 3 | `。` | `uint240` | | push 30-byte value onto stack | +| 7E | PUSH31 | 3 | `。` | `uint248` | | push 31-byte value onto stack | +| 7F | PUSH32 | 3 | `。` | `uint256` | | push 32-byte value onto stack | +| 80 | DUP1 | 3 | `a` | `a, a` | | clone 1st value on stack | +| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | clone 2nd value on stack | +| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | clone 3rd value on stack | +| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | clone 4th value on stack | +| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | clone 5th value on stack | +| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | clone 6th value on stack | +| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | clone 7th value on stack | +| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | clone 8th value on stack | +| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | clone 9th value on stack | +| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | clone 10th value on stack | +| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | clone 11th value on stack | +| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | clone 12th value on stack | +| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | clone 13th value on stack | +| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | clone 14th value on stack | +| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | clone 15th value on stack | +| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | clone 16th value on stack | +| 90 | SWAP1 | 3 | `a, b` | `b, a` | | | +| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | | +| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | | +| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | | +| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | | +| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | | +| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | | +| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | | +| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | | +| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | | +| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | | +| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | | +| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | | +| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | | +| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | | +| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | | +| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `。` | | LOG0(memory[ost:ost+len-1]) | +| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `。` | | LOG1(memory[ost:ost+len-1], topic0) | +| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `。` | | LOG2(memory[ost:ost+len-1], topic0, topic1) | +| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `。` | | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | +| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `。` | | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | +| A5-EF | _invalid_ | | | | | | +| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | +| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen-1] := returndata | | +| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] = returndata | same as DELEGATECALL, but does not propagate original msg.sender and msg.value | +| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `。` | | return mem[ost:ost+len-1] | +| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] := returndata | | +| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | +| F6-F9 | _invalid_ | | | | | | +| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] := returndata | | +| FB-FC | _invalid_ | | | | | | +| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `。` | | revert(mem[ost:ost+len-1]) | +| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | designated invalid opcode - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | | +| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `。` | | 傳送所有以太幣到 `addr`;如果在建立合約的相同交易中執行,則會銷毀合約 | diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/gas/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/gas/index.md new file mode 100644 index 00000000000..230c5cf3df6 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/gas/index.md @@ -0,0 +1,139 @@ +--- +title: 燃料和費用 +description: +lang: zh-tw +--- + +燃料對於以太坊網路至關重要。 燃料讓以太坊得以運轉,就像是汽車需要汽油行駛一樣。 + +## 基本資訊 {#prerequisites} + +為了更好地理解本頁面,建議你先閱讀[交易](/developers/docs/transactions/)和[以太坊虛擬機](/developers/docs/evm/)。 + +## 什麼是燃料? {#what-is-gas} + +燃料是衡量在以太坊網路上執行特定操作所需計算工作量的單位。 + +因為執行每一筆以太坊交易都需要計算資源,要使用這些資源就必須付費,以確保以太坊不會受到垃圾訊息的影響,或者卡在無窮計算迴圈中。 計算費用以燃料費的形式支付。 + +燃料費的計算方式是**執行操作消耗的燃料數量乘以每單位燃料費價格**。 無論交易成功與否,都要支付燃料費。 + +![展示需要燃料的以太坊虛擬機操作的圖表](./gas.png) _此圖表源於[以太坊的以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +燃料費須用以太坊原生貨幣以太幣 (ETH) 支付。 燃料價格一般會以 gwei 為單位,gwei 是以太幣的面額之一。 每一 gwei 等於一以太幣的十億分之一(0.000000001 以太幣或 10-9 以太幣)。 + +舉例來說,可以說你的燃料費為 1 gwei,而不是 0.000000001 以太幣。 + +「gwei」這個字是「giga-wei」的縮寫,意思是「10 億 wei」。 1 gwei 等於 10 億 wei。 Wei 本身(命名於 [Wei Dai](https://wikipedia.org/wiki/Wei_Dai),[b-money](https://www.investopedia.com/terms/b/bmoney.asp) 創建者)為以太幣之最小單位面額。 + +## 燃料費是如何計算的? {#how-are-gas-fees-calculated} + +提交交易時,可以設定你願意支付的燃料費數量。 藉由提供一定數量的燃料費,你實際上是在出價,以便將你的交易加入下一個區塊。 如果你的報價過低,驗證者就不太可能選擇將你的交易加入下一個區塊,代表你的交易可能會延遲或根本不會被執行。 如果你報價過高,則可能會浪費一些以太幣。 那麼,該如何判定支付多少費用呢? + +支付的燃料費分成兩個部分:`base fee` 及 `priority fee`(小費)。 + +`base fee` 是由協議設定的 - 你必須支付至少這個數量的以太幣,你的交易才會被視為有效。 `priority fee` 是你在基本費用上增加的額外小費,使你的交易對驗證者來說更有吸引力,以便讓他們選擇將其添加到下一個區塊中。 + +只支付 `base fee` 的交易在技術層面上是有效的,但不太可能加入下一個區塊中,因為此類交易未向驗證者提供任何激勵,因此驗證者不會選擇它而不管任何其他交易。 「適宜」的 `priority` 費依據發送交易時的網路使用情況而定 - 若當時需求非常高,你需要將你的 `priority` 費設高點,而需求低時則可以付少點。 + +舉例來說,假設 Jordan 要付給 Taylor 1 以太幣。 以太幣轉帳需要 21,000 單位的燃料,而基本費用為 10 gwei。 Jordan 支付 2 gwei 小費。 + +現在總燃料費為: + +`使用的單位燃料 * (基本費用 + 優先費)` + +其中,`base fee` 的值由協議設定,而 `priority fee` 的值則是由使用者設置,是給驗證者的小費。 + +範例:`21,000 * (10 + 2) = 252,000 gwei` (0.000252 以太幣)。 + +當 Jordan 發送該金額時,1.000252 以太幣將從 Jordan 的帳戶中扣除。 而 Taylor 將獲得 1.0000 以太幣。 驗證者將收到 0.000042 以太幣的小費。 0.00021 以太幣的 `base fee` 被銷毀。 + +### 基本費用 {#base-fee} + +每個區塊都有基本費用作為底價。 為了達成添加至區塊中的條件,提供的每單位燃料價格必須至少等於基本費用。 基本費用的計算與當前區塊無關,而是由當前區塊前面的區塊決定,讓交易費用對於使用者更具可預測性。 建立區塊時,此**基本費用被「銷毀」**,從流通中移除。 + +此基本費用透過一個公式計算,該公式比較前一個區塊的大小(所有交易使用的燃料用量)與目標區塊大小。 如果超出目標區塊大小,每個區塊的基本費用將最大增加 12.5%。 這種指數級增長讓區塊大小無限增加在經濟上不可行。 + +| 區塊編號 | 包含燃料 | 費用增幅 | 當前基本費用 | +| ---- | ----:| -----:| ----------:| +| 1 | 15M | 0% | 100 gwei | +| 2 | 30M | 0% | 100 gwei | +| 3 | 30M | 12.5% | 112.5 gwei | +| 4 | 30M | 12.5% | 126.6 gwei | +| 5 | 30M | 12.5% | 142.4 gwei | +| 6 | 30M | 12.5% | 160.2 gwei | +| 7 | 30M | 12.5% | 180.2 gwei | +| 8 | 30M | 12.5% | 202.7 gwei | + +依據上表 -- 要在 9 號區塊中建立一筆交易,錢包會讓使用者明確知道將交易添加到下一個區塊中的**最大基本費用**為 `current base fee * 112.5%` 或 `202.7 gwei * 112.5% = 228.1 gwei`。 + +值得注意的是,因為基本費用在區塊變滿之前增加的速度很快,我們不太可能看到大量已滿區塊連續出現。 + +| 區塊編碼 | 包含Gas費 | 增加費用 | 目前基本費用 | +| ---- | ------:| -----:| ---------------:| +| 30 | 30M | 12.5% | 2705.6 gwei | +| ... | ... | 12.5% | ... | +| 50 | 30M | 12.5% | 28531.3 gwei | +| ... | ... | 12.5% | ... | +| 100 | 30M | 12.5% | 10302608.6 gwei | + +### 優先費(小費) {#priority-fee} + +優先費(小費)激勵驗證者將交易添加進區塊中。 如果沒有小費,驗證者會發現開採空區塊在經濟上可行,因為他們收到的區塊獎勵相同。 少量的小費提供的激勵極弱,不足以讓驗證者將交易打包進區塊。 為了使交易比相同區塊中的其他交易優先執行,可以提供較高的小費,以超出其他競爭交易的報價。 + +### 最大費用 {#maxfee} + +要在網路上執行交易,使用者可以指定為了執行其交易他們願意支付的最大費用限制。 此可選參數亦稱為 `maxFeePerGas`。 執行交易所需的最大費用必須超過基本費用與小費的總和。 會向交易發送者退還最大費用與基本費用和小費之總合之間的差額。 + +### 區塊大小 {#block-size} + +每個區塊具 15M 單位燃料用量之目標大小,但區塊大小將跟隨網路需求增減,最大可達到 30M 燃料用量的區塊大小限制(目標區塊大小之兩倍)。 協議往往透過 _tâtonnement_ 流程達成 15M 的均衡區塊大小。 這意味著,如果區塊大小大於目標區塊大小,協議將增加下一個區塊的基本費用。 同樣,如果區塊大小小於目標區塊大小,協議將減少基本費用。 基本費用的調節額度與實際區塊大小與目標區塊大小之間的差異成比例。 [更多區塊相關資訊](/developers/docs/blocks/)。 + +### 實際計算燃料費 {#calculating-fees-in-practice} + +可明確聲明願意支付多少費用,以讓驗證者執行你的交易。 然而,大多數錢包提供商會自動設定推薦的交易費(基本費用 + 推薦的優先費),以降低使用者面臨的複雜度。 + +## 為何需要燃料費? {#why-do-gas-fees-exist} + +簡言之,燃料費可幫助保障以太坊網路安全。 透過要求為網路上執行的每次計算支付費用,可以阻止惡意行為者利用垃圾郵件攻擊網路。 為避免程式碼中出現意外或是惡意的無限迴圈或其他計算浪費,對於每筆交易,都必須設定一個關於可以使用程式碼執行中多少個計算步驟的限制。 計算的基本單位為「燃料」。 + +雖然交易包括限制,但任何在交易中未使用的燃料將會退還給使用者(即退還 `max fee - (base fee + tip)`)。 + +![顯示如何退還未使用燃料的圖表](../transactions/gas-tx.png) _此圖表源於[以太坊的以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## 什麼是燃料限制? {#what-is-gas-limit} + +燃料限制指的是你在一筆交易中最多願意使用多少燃料。 包含[智慧型合約](/developers/docs/smart-contracts/)的更複雜的交易需要進行更多計算工作,所以比起簡單的支付,它們需要更高的燃料限制。 標準以太幣轉帳需要的燃料限制為 21,000 單位燃料。 + +例如,如果為一次簡單的以太幣轉帳設定了 50,000 的燃料限制,以太坊虛擬機將消耗 21,000 單位燃料並退還剩餘的 29,000。 然而,如果你設定的燃料過低,例如為簡單的以太幣轉帳設定 20,000 的燃料限制,以太坊虛擬機將用盡 20,000 燃料單位嘗試完成交易,但最終交易會失敗。 隨後,以太坊虛擬機會還原全部變更,但因為驗證者已完成了相當於 20k 燃料單位的工作,所以會消耗這些燃料。 + +## 為何燃料費這麼高? {#why-can-gas-fees-get-so-high} + +燃料費高是因為以太坊人氣高。 如果需求過高,使用者必須支付更高的小費,以便超出其他使用者的交易報價。 小費越高,你的交易添加到下一個區塊中的可能性越大。 另外,越複雜的智慧型合約應用程式可能會執行大量操作,以支援其函式,這會消耗許多燃料。 + +## 燃料費用削減倡議 {#initiatives-to-reduce-gas-costs} + +以太坊的[可擴容性](/roadmap/)應最終解決一部分燃料費用問題,繼而讓該平台能夠每秒處理數千筆交易並實現全域擴容。 + +二層網路擴容為一項主要倡議,可大幅減低燃料費用並加強用戶體驗及可擴容性。 [更多二層網路擴容相關資訊](/developers/docs/scaling/#layer-2-scaling)。 + +## 監控燃料費 {#monitoring-gas-fees} + +若你想要監控燃料價格,以便能以更低的費用發送以太幣,你可以使用許多不同的工具,例如: + +- [Etherscan](https://etherscan.io/gastracker) _交易燃料費價格估算器_ +- [Blocknative ETH Gas Estimator](https://chrome.google.com/webstore/detail/blocknative-eth-gas-estim/ablbagjepecncofimgjmdpnhnfjiecfm) _燃料估算 Chrome 延伸模組,支援 0 類原始交易及 2 類 EIP-1559 交易。_ +- [Cryptoneur燃料Fees Calculator](https://www.cryptoneur.xyz/gas-fees-calculator) _在主網、Arbitrum、Polygon 上使用當地貨幣計算不同交易類型的燃料費。_ + +## 相關工具 {#related-tools} + +- [Blocknative's Gas Platform](https://www.blocknative.com/gas)_ 由 Blocknative 的全域記憶體池資料平臺支援的燃料估算應用程式介面平台_ + +## 了解更多 {#further-reading} + +- [以太坊燃料詳解](https://defiprime.com/gas) +- [減低智慧型合約之燃料消耗](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) +- [權益證明與工作量證明](https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/) +- [開發者的燃料優化策略](https://www.alchemy.com/overviews/solidity-gas-optimization) +- [EIP-1559 文檔](https://eips.ethereum.org/EIPS/eip-1559)。 +- [Tim Beiko 的 EIP-1559 資源](https://hackmd.io/@timbeiko/1559-resources)。 diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/index.md new file mode 100644 index 00000000000..eca812e3bc0 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/index.md @@ -0,0 +1,25 @@ +--- +title: 以太坊開發文檔 +description: Ethereum.org 開發者文檔簡介。 +lang: zh-tw +--- + +本文檔旨在幫助你透過以太坊建置。 它介紹以太坊概念,解釋以太坊技術堆疊,並記錄關於更加複雜的應用程式及用例的高階主題。 + +此為開源社群的一項工作,歡迎在你認為有所幫助時提出新主題、增添新內容並提供範例。 所有文檔均可透過 GitHub 進行編輯 – 如果你不確定如何操作,[請遵循相關說明](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md)。 + +## 發展模組 {#development-modules} + +若這是你初次嘗試進行以太坊開發,我們建議你從頭開始並進行全面學習。 + +### 基礎主題 {#foundational-topics} + + + +### 以太坊權益質押 {#ethereum-stack} + + + +### 進階 {#advanced} + + diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ether/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ether/index.md new file mode 100644 index 00000000000..9022bdd665b --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ether/index.md @@ -0,0 +1,78 @@ +--- +title: 以太幣簡介 +description: 開發者為你介紹以太幣加密貨幣 +lang: zh-tw +--- + +## 前置要求 {#prerequisites} + +為了讓你更容易理解本頁,建議你先通讀我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 + +## 什麼是加密貨幣? {#what-is-a-cryptocurrency} + +加密貨幣為交易媒介,其安全由以區塊鏈為基礎的帳本保障。 + +交易媒介被廣泛視作商品與服務的付款方式,帳本為用來追蹤交易的資料儲存。 區塊鏈技術讓使用者能夠在帳本上進行交易,且無需依賴任何信任之第三方來維持此帳本。 + +第一種加密貨幣為比特幣,由中本聰創建。 自從比特幣 2009 問世以來,人們已經在多個不同區塊鏈上開發了數千種加密貨幣。 + +## 甚麼是以太(ETH)? {#what-is-ether} + +**以太幣 (ETH)** 為一種加密貨幣,在以太坊網路上有諸多用途。 基本上,它是唯一可被接受的交易費支付形式,且在[合併](/roadmap/merge)之後,在主網上驗證和提出區塊會需要以太幣。 以太幣還可以作為[去中心化金融](/defi)借貸市場中的主要抵押物,非同質化代幣市場上的計帳單位,或作為提供服務或銷售真正的商品而獲得的付款,還有更多用途。 + +透過以太坊,開發者可以建立[**去中心化應用程式 (dapp)**](/developers/docs/dapps),而所有去中心化應用程式都共用同一算力池。 此共享算力池是有限的,因此以太坊需要一種機制來決定由誰使用它。 不然,某個去中心化應用程式可能會意外或惡意佔用全部網路資源,令其他人無法使用。 + +以太幣加密貨幣支援以太坊算力的定價機制。 當使用者想進行交易時,他們必須支付以太幣,使其交易在區塊鏈上獲得認可。 此等使用成本亦稱為[燃料費](/developers/docs/gas/),而燃料費取決於執行交易所需的算力及當時整個網路對於算力的需求。 + +因此,即使惡意去中心化應用程式提交一個無窮迴圈,交易將最終會用盡以太幣並終止,讓網路能回復正常。 + +人們[經常將以太坊與以太幣](https://www.reuters.com/article/us-crypto-currencies-lending-insight-idUSKBN25M0GP#:~:text=price%20of%20ethereum)[](https://abcnews.go.com/Business/bitcoin-slumps-week-low-amid-renewed-worries-chinese/story?id=78399845#:~:text=cryptocurrencies%20including%20ethereum)[混為一談](https://www.cnn.com/2021/03/14/tech/nft-art-buying/index.html#:~:text=price%20of%20ethereum) — 當提到「以太坊價格」時,他們指的是以太幣的市價。 + +## 鑄造以太幣 {#minting-ether} + +鑄造是指在以太坊帳本創建新以太幣的流程。 底層以太坊協議創建新以太幣,並且使用者無法創建以太幣。 + +鑄造以太幣,是用於獎勵提出的每個區塊,並在每個時期的檢查點上獎勵與達成共識相關的其他驗證者活動。 發行的以太幣總量取決於驗證者的數量以及他們質押的以太幣數量。 理想情況下,即所有驗證者都是誠實的且一直上線,總發行量會在驗證者之間平均分佈。但事實上它會因驗證者表現而有差異。 大約總發行量的 1/8 分配給區塊提交者,剩下的則分給其他驗證者。 區塊提交者也會收到交易費中的小費和最大可提取價值相關的收入,但這些來自循環中的以太幣,並不是新發行的。 + +## 銷毀以太幣 {#burning-ether} + +如同區塊獎勵過程中會創建新的以太幣一樣,以太幣也可以透過稱為「燃燒」的流程銷毀。 以太幣銷毀後,將從流通中永久移除。 + +以太坊上的每筆交易中都有以太幣銷毀。 當使用者為交易支付費用時,透過網路設定的基本燃料費用會根據交易需求銷毀。 它與不同的區塊大小以及最大燃料費用結合起來,簡化了以太坊上的交易費的估算。 當網路需求較高時,[區塊](https://etherscan.io/block/12965263)可以銷毀的以太幣數量比鑄造數量更大,有效抵銷以太幣的發行。 + +銷毀基本費用會束縛區塊產生者操縱交易的能力。 舉例來說,若區塊產生者收到基本費用,他們可以免費添加自己的交易,並提高其他人的基本費用。 或者,他們可以在鏈外將基本費用退還給某些使用者,造成交易費市場更加不透明且複雜。 + +## 以太幣面額 {#denominations} + +由於以太坊上許多交易的價值很小,以太幣也就有了各種不同的面額,可做為較小的記帳單位。 其中,Wei 和 gwei 尤為重要。 + +Wei 為以太幣的最小面額,因而,許多技術實作,例如[以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf)等將在所有計算中以 Wei 為單位。 + +Gwei 是 giga-wei 的簡稱,常用來描述以太坊上的燃料費用。 + +| 面額 | 用以太幣表示的價值 | 常見用途 | +| ---- | ---------------- | ------- | +| Wei | 10-18 | 技術實作 | +| Gwei | 10-9 | 人類可讀燃料費 | + +## 傳送以太幣 {#transferring-ether} + +以太坊上的每筆交易都有一個 `value` 欄位,指定要從發送者地址傳送到接收者地址的以太幣數量,面額為 wei。 + +當接收者地址為[智慧型合約](/developers/docs/smart-contracts/)時,在智慧型合約執行其程式碼後,傳送之以太幣可用於支付燃料費用。 + +[更多交易相關資訊](/developers/docs/transactions/) + +## 查詢以太幣 {#querying-ether} + +使用者能透過檢視帳戶的 `balance` 欄位來查詢任何[帳戶](/developers/docs/accounts/)的以太幣餘額,該欄位顯示面額為 wei 的以太幣持有量。 + +[Etherscan](https://etherscan.io) 為一種人氣工具,可透過網路應用程式檢視地址餘額。 例如,[此 Etherscan 頁面](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae)顯示以太坊基金會的餘額。 也可使用錢包或者透過直接向節點發送請求查詢帳戶餘額。 + +## 衍生閱讀 {#further-reading} + +- [定義以太幣與以太坊](https://www.cmegroup.com/education/courses/introduction-to-ether/defining-ether-and-ethereum.html) – _CME Group_ +- [以太坊白皮書](/whitepaper/):以太坊初始提案。 該文件包含對以太幣的描述及創建以太幣的動機。 +- [Gwei 計算機](https://www.alchemy.com/gwei-calculator):使用此 Gwei 計算機輕鬆轉換 wei、gwei 和以太幣。 只需輸入任意數量的 wei、gwei 或以太幣即可自動計算轉換後的數值。 + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ethereum/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ethereum/index.md new file mode 100644 index 00000000000..ba3941f4ab6 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ethereum/index.md @@ -0,0 +1,116 @@ +--- +title: 以太坊簡介 +description: 去中心化應用程式開發者介紹以太坊核心概念。 +lang: zh-tw +--- + +## 甚麼是區塊鏈? {#what-is-a-blockchain} + +區塊鏈是一個公共資料庫,在網路中的許多電腦之間更新和共享。 + +「區塊」是指儲存在連續群組(即「區塊」)中的資料及狀態。 若你給其他人發送以太幣,交易資料須添加至區塊後才算交易成功。 + +「鏈」指的是每個區塊透過加密方式引用上一個區塊。 換言之,區塊連結在一起。 無法變更區塊內的資料,除非對其後所有區塊進行變更,這需要整個網路達成共識。 + +網路上的所有電腦必須對所有新區塊及整條區塊鏈達成一致。 此等電腦稱為「節點」。 節點確保與區塊鏈互動的每個人具相同資料。 為了達成這種分佈式共識,區塊鏈需要一共識機制。 + +以太坊採用[權益證明共識機制](/developers/docs/consensus-mechanisms/pos/)。 任何想將新區塊添加至區塊鏈的人都必須質押以太幣(以太坊的原生貨幣)作為抵押品並運行驗證者軟體。 接著,這些「驗證者」會被隨機選取以提出區塊,區塊由其他驗證者檢查並添加到區塊鏈上。 以太坊有獎勵及懲罰制度,以激勵參與者保持誠實並儘可能持續上線。 + +如果想瞭解區塊鏈資料是如何被雜湊後並附加到區塊參考的歷史記錄中,歡迎查看這個由 Anders Brownworth 製作的[示範](https://andersbrownworth.com/blockchain/blockchain),並觀看附上的影片。 + +觀看 Anders 解釋區塊鏈中雜湊的影片: + + + +## 甚麼是以太坊(Ethereum)? {#what-is-ethereum} + +以太坊是一條嵌入了電腦的區塊鏈。 它是以去中心化、無需許可、抗審查的方式建立應用程式和組織的基礎。 + +以太坊宇宙中有一臺單獨的規範電腦(稱為以太坊虛擬機,EVM),網路上的所有參與者都對其狀態達成共識。 所有以太坊網路參與者(每個以太坊節點)都保存有此電腦之狀態的副本。 此外,任何參與者能向此電腦廣播執行任意計算的請求。 每當此類請求被廣播時,網路上的其他參與者將確認、驗證並完成(「執行」)此計算。 此等執行將引起以太坊虛擬機狀態變化,而狀態變化將被提交並傳播至整個網路。 + +計算請求亦稱為交易請求;所有交易的紀錄及以太坊虛擬機的當前狀態儲存於區塊鏈上,而區塊鏈由所有節點儲存並達成共識。 + +加密機制確保一旦交易被驗證為有效並添加至區塊鏈上,以後就無法被篡改。 此相同機制也確保所有交易是透過相同的「權限」簽署並執行(除了 Alice 本人外,任何人都不應該能從她的帳戶發送數位資產)。 + +## 什麼是以太幣? {#what-is-ether} + +**以太幣 (ETH)** 是以太坊的原生加密貨幣。 以太坊的作用是提供一個計算市場。 此類市場為參與者提供經濟獎勵,激勵其驗證並執行交易請求,並且向網路提供計算資源。 + +任何廣播交易請求的參與者還必須給網路提供一定數量的以太幣,作為賞金。 網路將銷毀部分賞金並將餘下的獎勵給最終驗證交易、執行交易、將交易提交至區塊鏈及廣播交易至網路的任何人。 + +支付的以太幣數量對應於執行此計算所需的資源。 這些賞金也能阻止惡意參與者蓄意透過請求執行無限計算或其他資源密集類型的指令碼來堵塞網路,因為惡意參與者必須支付使用計算資源的費用。 + +以太幣也用來為網路提供加密經濟學安全性,主要有以下三種方式:1) 作為一種獎勵方式,獎勵提交區塊或檢舉其他驗證者不誠實行為的驗證者;2) 由驗證者質押,作為對抗不誠實行為的抵押品 - 如果驗證者嘗試從事不良行為,則它們的以太幣可能會被銷毀;3) 用來衡量新提交區塊的「投票」,並輸入共識機制的分叉選擇部分。 + +## 什麼是智慧型合約? {#what-are-smart-contracts} + +實際上,參與者想請求在以太坊虛擬機上進行計算時,不用每次編寫新程式碼。 反之,應用程式開發者將程式(可重複使用的程式片段)上傳到以太坊虛擬機狀態中,使用者請求使用不同的參數來執行此類程式碼片段。 我們將此類上傳並執行的程式稱為網路智慧型合約。 + +簡單來說,你可以想像智慧型合約為一臺自動販賣機:一個指令碼,在使用某些參數呼叫時,若滿足特定條件,該指令碼會執行一些操作或計算。 舉例來說,如果呼叫者將以太幣發送給特定接收者,一個簡易的販賣智慧型合約可能會建立和指定某件數位資產的所有權。 + +使用區塊鏈作為其資料層,並為網路支付費用後,任何開發者能可以建立智慧型合約並發佈到網路。 任何使用者也能調用此智慧型合約以執行其程式碼,同樣也要向網路支付費用。 + +因此,透過智慧型合約,開發者能建立並部屬各種複雜程度且使用者對應的應用程式與服務,例如市場、金融工具、遊戲等。 + +## 術語 {#terminology} + +### 區塊鏈 {#blockchain} + +以太坊網路之歷史記錄中提交至網路上的所有區塊的順序。 有此名稱的原因是,每個區塊都包含對前一個塊的引用,這有助於維護所有區塊(以及精確歷史記錄)的排序。 + +### 以太幣 {#eth} + +**以太 (ETH)**以太坊原生加密貨幣. 使用者向其他使用者支付以太幣,以完成他們的程式碼執行請求。 + +[有關以太幣的更多資訊](/developers/docs/intro-to-ether/) + +### 以太坊虛擬機 {#evm} + +以太坊虛擬機為一臺全域虛擬電腦,所有以太坊網路參與者都儲存其狀態並達成共識。 任何參與者都能請求在以太坊虛擬機上執行任何程式碼;程式碼執行會改變以太坊虛擬機的狀態。 + +[更多以太坊虛擬機相關資訊](/developers/docs/evm/) + +### 節點 {#nodes} + +儲存以太坊虛擬機狀態的真實電腦。 節點互相通訊,以傳播關於以太坊虛擬機狀態及新出現狀態變化的資訊。 任何使用者還可以透過從節點廣播程式碼執行請求,請求執行程式碼。 以太坊網路本身為所有以太坊節點及其通信之彙總。 + +[更多詳情關於節點](/developers/docs/nodes-and-clients/) + +### 帳戶 {#accounts} + +以太幣儲存之處。 使用者可以初始化帳戶,將以太幣存入帳戶,並將其帳戶中的以太幣轉帳給其他使用者。 帳戶及帳戶餘額儲存於以太坊虛擬機中的一張龐大表格中;它們是以太坊虛擬機全部狀態的一部分。 + +[更多帳戶相關資訊](/developers/docs/accounts/) + +### 交易紀錄 {#transactions} + +「交易請求」為表示以太坊虛擬機上程式碼執行請求的正式術語,而「交易」為已完成的交易請求及相關的以太坊虛擬機狀態變化。 任何使用者都能從節點向網路廣播交易請求。 為了讓交易請求影響達成共識的以太坊虛擬機狀態,必須由其他節點驗證、執行此交易請求並「將其提交至網路上」。 執行任何程式碼都會改變以太坊虛擬機的狀態;提交時,此狀態變化將廣播至網路上的所有節點。 以下為一些交易範例: + +- 從我的帳戶發送 X 以太幣至 Alice 的帳戶。 +- 將一些智慧型合約程式碼發佈至以太坊虛擬機狀態中。 +- 使用 Y 參數來執行以太坊虛擬機中地址 X 處的智慧型合約的程式碼。 + +[更多詳情關於交易記錄](/developers/docs/transactions/) + +### 區塊 {#blocks} + +交易量非常龐大,因此交易按批次或區塊「提交」。 區塊通常包含數十乃至數百筆交易。 + +[更多區塊相關資訊](/developers/docs/blocks/) + +### 智慧型合約 {#smart-contracts} + +一段可重複使用的程式碼片段(程式),由開發者發佈至以太坊虛擬機狀態中。 任何人都可以透過發出交易請求來請求執行智慧型合約的程式碼。 因為開發者能藉由發佈智慧型合約向以太坊虛擬機中編寫任意可執行應用程式(遊戲、市場、金融工具等),此類合約也經常稱為 [Dapp 或去中央化應用程式](/developers/docs/dapps/)。 + +[了解更多關於智慧型合約的資訊](/developers/docs/smart-contracts/) + +## 了解更多 {#further-reading} + +- [以太坊白皮書](/whitepaper/) +- [以太坊到底是如何運作的?](https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369) - _Preethi Kasireddy_(**注意**:此資源仍有參考價值,但留意它是早於[以太網合併](/roadmap/merge)的文獻,因此引述的仍然是以太坊的工作量證明機制 - 以太坊實際上目前是由[權益證明](/developers/docs/consensus-mechanisms/pos)來保障安全) + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ + +## 相關教學影片 {#related-tutorials} + +- [以太坊開發者指南,第一部分](/developers/tutorials/a-developers-guide-to-ethereum-part-one/) _– 適合初學者的以太坊探索(使用 Python 和 web3.py)_ diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/networks/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/networks/index.md new file mode 100644 index 00000000000..cb17a8b9388 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/networks/index.md @@ -0,0 +1,149 @@ +--- +title: 網路 +description: 以太坊網路及何處獲取測試網以太幣 (ETH) 測試應用程式之概觀。 +lang: zh-tw +--- + +以太坊網路是使用以太坊協議進行通訊的互聯計算機群組。 只存在一個以太坊主網,但可以建立符合相同協議規則的獨立網路以作為測試及開發用途。 有許多獨立的「網路」符合協議但不互相影響。 你甚至可以在自己的電腦本地建立一個網路,測試你的智慧型合約和 Web3 應用程式。 + +你的以太坊帳戶可以跨不同網路使用,但你的帳戶餘額及交易歷史記錄並不會跟著從以太坊主網轉移過去。 進行測試時,知道哪些網路可用及如何取得要試用的測試網以太幣是非常有用的。 一般來說,出於安全考量,並不推薦在測試網上再次使用主網帳戶,反之亦然。 + +## 基本資訊 {#prerequisites} + +在深入閱讀不同網路相關內容前,你應先了解[以太坊的基礎知識](/developers/docs/intro-to-ethereum/),因為測試網路會給你提供實惠、安全的以太坊版本以供測試。 + +## 公共網路 {#public-networks} + +公共網路可供世界上任何有網際網路連線的人訪問。 任何人都能在公共區塊鏈上讀取或創建交易並驗證被執行的交易。 對等節點間的共識決定了交易的打包和網路的狀態。 + +### 以太坊主網 {#ethereum-mainnet} + +主網為以太坊的主要公共生產區塊鏈,也為實際交易發生於分佈式帳本之所在。 + +當人們和交易所討論以太幣價格時,討論的是主網以太幣。 + +### 以太坊測試網 {#ethereum-testnets} + +除主網外,還有一些公共測試網。 應用程式開發者或智慧型合約開發者使用測試網來測試協議升級,也用於在部署到主網之前在一個類生產環境中測試潛在的智慧型合約。 可將主網與測試網類比於生產伺服器與暫置伺服器。 + +部署至主網前,應在測試網上測試你編寫的所有合約程式碼。 在整合了智慧型合約的去中心化應用程式中,大部分專案都有部署到測試網的版本。 + +大部分測試網一開使都使用權威證明共識機制。 這表示將挑選出一小部分節點驗證交易並創建新區塊 – 並在此過程中質押其身分。 或者,有些測試網採用開放的權益證明共識機制,任何人都可以測試驗證者的運行狀況,就像在以太坊主網上一樣。 + +測試網上的以太幣原本應該是沒有實際價值的;然而,已經有為取得一些稀少或難以獲得的測試網以太幣而建立的市場。 因為要和以太坊(即使在測試網上)實際互動需要以太幣,多數人透過水龍頭免費獲得測試網以太幣。 多數水龍頭為 Web 應用程式,你可以在其中輸入你請求發送以太幣的地址。 + +#### 我該使用哪個測試網? + +目前用戶端開發者維護的兩個公共測試網分別為 Sepolia 及 Goerli。 Sepolia 是合約和應用程式開發者用來測試其應用程式的網路。 在 Goerli 網路上,協議開發者測試網路升級,質押者測試驗證者的運行狀況。 + +#### Sepolia {#sepolia} + +**Sepolia 是推薦的針對應用程式開發的預設測試網**。 Sepolia 網路使用經許可的驗證者集合。 此網路還很新,表示它的狀態和歷史記錄都非常小。 這表示網路可以快速完成同步,且在它上面運行節點需要的空間較少。 這對想要快速啟動節點並直接與網路互動的使用者來說非常有用。 + +- 封閉的驗證者集合,由用戶端和測試團隊控制 +- 新測試網,已部署的應用程式比其他測試網上少 +- 快速同步和運行節點所需硬碟空間極小 + +##### 資源 + +- [官網](https://sepolia.dev/) +- [GitHub](https://github.com/eth-clients/sepolia) +- [Otterscan](https://sepolia.otterscan.io/) +- [以太掃瞄器(Etherscan)](https://sepolia.etherscan.io) +- [Blockscout](https://eth-sepolia.blockscout.com/) + +##### 水龍頭 + +- [QuickNode 的 Sepolia 水龍頭](https://faucet.quicknode.com/drip) +- [Grabteeth](https://grabteeth.xyz/) +- [工作量證明水龍頭](https://sepolia-faucet.pk910.de/) +- [Coinbase 錢包水龍頭 | Sepolia](https://coinbase.com/faucets/ethereum-sepolia-faucet) +- [Alchemy Sepolia 水龍頭](https://sepoliafaucet.com/) +- [Infura Sepolia 水龍頭](https://www.infura.io/faucet) +- [Chainstack Sepolia 水龍頭](https://faucet.chainstack.com/sepolia-faucet) +- [以太坊生態系統水龍頭](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) + +#### Goerli_(長期支援)_ {#goerli} + +_注意:[Goerli 測試網已被棄用](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17)且將在 2023 年被 [Holesovice](https://github.com/eth-clients/holesovice) 取代。 請考慮將你的應用程式遷移到 Sepolia。_ + +Goerli 是測試驗證和質押的測試網。 Goerli 測試網對想要運行測試網驗證者的使用者開放。 因此,想測試協議升級的質押者,應在部署至主網前先使用 Goerli 測試。 + +- 開放的驗證者集合,質押者可以測試網路升級 +- 龐大的狀態,對於測試複雜智慧型合約的互動很有用 +- 同步時間更長,且需要更多儲存空間運行節點 + +##### 相關資源 + +- [官網](https://goerli.net/) +- [GitHub](https://github.com/eth-clients/goerli) +- [Etherscan](https://goerli.etherscan.io) +- [Blockscout](https://eth-goerli.blockscout.com/) + +##### 水龍頭 + +- [QuickNode 的 Goerli 水龍頭](https://faucet.quicknode.com/drip) +- [Grabteeth](https://grabteeth.xyz/) +- [工作量證明水龍頭](https://goerli-faucet.pk910.de/) +- [Paradigm 水龍頭](https://faucet.paradigm.xyz/) +- [Alchemy Goerli 水龍頭](https://goerlifaucet.com/) +- [All That Node Goerli 水龍頭](https://www.allthatnode.com/faucet/ethereum.dsrv) +- [Coinbase 錢包水龍頭 | Goerli](https://coinbase.com/faucets/ethereum-goerli-faucet) +- [Chainstack Goerli 水龍頭](https://faucet.chainstack.com/goerli-faucet) + +要在 Goerli 測試網上啟動驗證者,請使用 ethstaker 的[「cheap goerli validator(實惠的 goerli 驗證者)」啟動面板](https://goerli.launchpad.ethstaker.cc/en/)。 + +### 二層網路測試網 {#layer-2-testnets} + +[二層網路 (L2)](/layer-2/) 是個統稱,描述一組特定的以太坊擴容方案。 二層網路是獨立的區塊鏈,拓展了以太坊並繼承了以太坊的安全保證。 二層網路測試網通常與以太坊公共測試網緊密相關。 + +#### Arbitrum Goerli {#arbitrum-goerli} + +[Arbitrum](https://arbitrum.io/) 的測試網。 + +##### 水龍頭 + +- [Chainlink 水龍頭](https://faucets.chain.link/) + +#### Optimistic Goerli {#optimistic-goerli} + +[Optimism](https://www.optimism.io/) 的測試網。 + +##### 水龍頭 + +- [Paradigm 水龍頭](https://faucet.paradigm.xyz/) +- [Coinbase 錢包水龍頭 | Optimism Goerli](https://coinbase.com/faucets/optimism-goerli-faucet) + +#### Starknet Goerli {#starknet-goerli} + +[Starknet](https://www.starknet.io) 的測試網。 + +##### 水龍頭 + +- [Starknet 水龍頭](https://faucet.goerli.starknet.io) + +## 私人網路 {#private-networks} + +若節點未連接到公共網路 (即主網或測試網),則以太坊網路就是一個 私人網路。 在此情況下,私人僅表示保留或隔離,而非受保護或安全。 + +### 發展網路 {#development-networks} + +開發以太坊應用程式時,最好在部署前先在私人網路上執行,瞭解其運作情況。 類似於進行網頁開發時,在自己的電腦上建立本機伺服器,你可以建立本機區塊鏈實例來測試你的去中心化應用程式。 與公共測試網相比,這可以大幅提升迭代速度。 + +有些專門輔助專案和工具可以使用。 深入瞭解[開發網路](/developers/docs/development-networks/)的資訊。 + +### 聯盟網路 {#consortium-networks} + +共識過程由預先定義的一組受信任節點控制。 舉例來說,在知名學術機構組成的私人網路中,每個機構管理單節點,區塊由網路中達到閾值數量的簽署人驗證。 + +如果說公共以太坊網路是公共網際網路,那麼聯盟網路就是私有內部網路。 + +## 相關工具 {#related-tools} + +- [Chainlist](https://chainlist.org/) _是將錢包與提供者連結到適當鏈 ID 與網路 ID 的以太坊虛擬機網路的清單_ +- [採用以太坊虛擬機 (EVM) 的鏈](https://github.com/ethereum-lists/chains) _Github 鏈中繼資料存放庫,支援 Chainlist_ + +## 衍生閱讀 {#further-reading} + +- [提案:可預測的以太坊測試網生命週期](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17) +- [以太坊測試網的演進](https://etherworld.co/2022/08/19/the-evolution-of-ethereum-testnet/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/transactions/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/transactions/index.md new file mode 100644 index 00000000000..fe0c577f705 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/transactions/index.md @@ -0,0 +1,221 @@ +--- +title: 交易 +description: 以太坊交易概觀 – 運作原理、資料結構以及如何透過應用程式發送。 +lang: zh-tw +--- + +交易是帳戶發出的帶密碼學簽章的指令。 帳戶將發起交易以更新以太坊網路的狀態。 最簡單的交易是將以太幣從一個帳戶轉帳到另一個帳戶。 + +## 前置要求 {#prerequisites} + +為了讓你更容易理解本頁,建議你先閱讀[帳戶](/developers/docs/accounts/)及我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 + +## 什麼是交易? {#whats-a-transaction} + +以太坊交易是指由外部帳戶發起的操作,換句話說,此帳戶是由人而不是智慧型合約管理的帳戶。 例如,如果 Bob 發送給 Alice 1 以太幣,Bob 的帳戶必須扣除,Alice 的帳戶必須存入。 此更改狀態的操作發生在交易中。 + +![顯示交易導致狀態變化的圖表](./tx.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +交易會改變以太坊虛擬機的狀態,須廣播至整個網路。 任何節點都可以廣播要在以太坊虛擬機上執行的交易請求;之後驗證者將執行交易並將引起的狀態變化傳播到網路上的其他節點。 + +交易需要支付費用並需要添加至經過驗證的區塊中。 為了讓本文更好理解,我們會在其他地方講解燃料和驗證。 + +提交的交易包括下列資訊: + +- `from` – 發送者(簽署交易者)的地址。 這會是外部帳戶,因為合約帳戶無法發送交易。 +- `to` – 接收地址(若為外部帳戶,交易將會轉移金額。 如果為合約帳戶,交易將執行合約程式碼) +- `signature` – 發送者的識別碼。 當發送者以私密金鑰簽署交易並確認發送者已授權此交易时,就會產生此簽章。 +- `nonce` - 用來表示帳戶中交易編號的按順序遞增計數器 +- `value` – 發送者轉帳至接收者的以太幣數量(面額為 WEI,1 以太幣等於 10 的 18 次方 wei) +- `input data` –可選欄位,可填入任意資料 +- `gasLimit` – 交易可以使用的最大燃料單位數量。 [以太坊虛擬機](/developers/docs/evm/opcodes)指定了每個計算步驟的所需燃料單位 +- `maxPriorityFeePerGas` - 已使用燃料的最高價格,可作為給驗證者的小費 +- `maxFeePerGas` - 願意為交易支付的每單位燃料的最高費用(包含 `baseFeePerGas` 和 `maxPriorityFeePerGas`) + +燃料指請驗證者處理交易所需的計算。 使用者必須為計算支付費用。 `gasLimit` 和 `maxPriorityFeePerGas` 決定支付給驗證者的最高交易費。 [更多燃料相關資訊](/developers/docs/gas/)。 + +交易物件看起來有些像以下內容: + +```js +{ + from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", + to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a", + gasLimit: "21000", + maxFeePerGas: "300" + maxPriorityFeePerGas: "10" + nonce: "0", + value: "10000000000", +} +``` + +但交易物件需要使用發送者的私密金鑰簽署。 這證明交易只可能來自發送者,而不是以欺詐方式發送。 + +Geth 之類的以太坊用戶端將處理此簽署過程。 + +[JSON-RPC](/developers/docs/apis/json-rpc) 呼叫範例: + +```json +{ + "id": 2, + "jsonrpc": "2.0", + "method": "account_signTransaction", + "params": [ + { + "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db", + "gas": "0x55555", + "maxFeePerGas": "0x1234", + "maxPriorityFeePerGas": "0x1234", + "input": "0xabcd", + "nonce": "0x0", + "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", + "value": "0x1234" + } + ] +} +``` + +回應範例: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": { + "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "tx": { + "nonce": "0x0", + "maxFeePerGas": "0x1234", + "maxPriorityFeePerGas": "0x1234", + "gas": "0x55555", + "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", + "value": "0x1234", + "input": "0xabcd", + "v": "0x26", + "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e", + "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e" + } + } +} +``` + +- `raw` 是[遞迴長度前綴 (RLP)](/developers/docs/data-structures-and-encoding/rlp) 編碼形式的已簽署交易 +- `tx` 是 JSON 形式的已簽署交易 + +交易具備簽章雜湊值,因此可通過加密技術證明交易來自發送者並提交至網路。 + +### 資料欄位 {#the-data-field} + +大多數交易從外部帳戶存取合約。 大部分合約都用 Solidity 寫成,並根據[應用程式介面 (ABI)](/glossary/#abi) 解譯其資料欄位。 + +前四個字節位元組使用函式名稱及參數的雜湊值指定要呼叫的函式。 有時候可以從使用[此資料庫](https://www.4byte.directory/signatures/)識別選擇器中的函式。 + +calldata 的剩餘部分是參數,[依據 ABI 規範中的說明編碼](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding)。 + +例如,我們來看下[這筆交易](https://etherscan.io/tx/0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1)。 使用 **Click to see More** 檢視 calldata。 + +函式選擇器為 `0xa9059cbb`。 一些[已知的函式具有此簽章](https://www.4byte.directory/signatures/?bytes4_signature=0xa9059cbb)。 在這個例子中,[合約的原始程式碼](https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48#code)已經上傳到 Etherscan,所以我們知道函式是 `transfer(address,uint256)`。 + +其餘資料如下所示: + +``` +0000000000000000000000004f6742badb049791cd9a37ea913f2bac38d01279 +000000000000000000000000000000000000000000000000000000003b0559f4 +``` + +根據 ABI 規範,應用程式介面中的整數值(例如地址,20 字節位元組的整數)顯示為 32 字節位元組的字,並且前面用 0 來填補。 所以我們知道 `to` 地址為 [`4f6742badb049791cd9a37ea913f2bac38d01279`](https://etherscan.io/address/0x4f6742badb049791cd9a37ea913f2bac38d01279)。 `value` 為 0x3b0559f4 = 990206452。 + +## 交易類型 {#types-of-transactions} + +以太坊上有幾種不同類型的交易: + +- 一般交易:從一個帳戶至另一個帳戶的交易。 +- 合約部署交易:沒有「to」地址的交易,其資料欄供合約程式碼所用。 +- 合約執行:與部署的智慧型合約互動的交易。 在本例中,「to」地址為智慧型合約的地址。 + +### 關於燃料 {#on-gas} + +如上所述,執行交易需要花費[燃料](/developers/docs/gas/)。 簡單的轉帳交易需要 21000 單位燃料。 + +所以,若 Bob 要以 190 gwei 的 `baseFeePerGas` 還有 10 gwei 的 `maxPriorityFeePerGas` 給 Alice 發送 1 以太幣,Bob 將需要支付以下費用: + +``` +(190 + 10) * 21000 = 4,200,000 gwei +--或者-- +0.0042 以太幣 +``` + +Bob 的帳戶會被扣除 **-1.0042 以太幣**(1 以太幣給 Alice + 0.0042 以太幣用來支付燃料費) + +Alice 的帳戶將存入 **+1.0 以太幣** + +基本費用將銷毀 **-0.00399 以太幣** + +驗證者將保留 **+0.000210 以太幣**的小費 + + +![顯示如何退還未使用燃料的圖表](./gas-tx.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +任何交易中未使用的燃料都會退還給使用者帳戶。 + +### 智慧型合約互動 {#smart-contract-interactions} + +任何涉及智慧型合約的交易都需要燃料。 + +智慧型合約也可以包含稱為 [`view`](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) 或 [`pure`](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions) 的函數,而不會改變合約的狀態。 因此,從外部帳戶調用這些函數不需要任何燃料。 此場景的底層遠端程序調用 [`eth_call`](/developers/docs/apis/json-rpc#eth_call) + +與使用 `eth_call` 存取不同,這些 `view` 或 `pure` 函數也通常被內部調用(即從合約本身調用或從另一個合約調用),這會消耗燃料。 + +## 交易的生命週期 {#transaction-lifecycle} + +一旦交易被提交,就會發生以下情況: + +1. 透過加密方式生成交易雜湊值: `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` +2. 然後該交易會廣播到網路並添加到交易池中,交易池中包含了其他所有等待中的網路交易。 +3. 為了要驗證交易並使交易「成功」,驗證者必須選擇你的交易並將它打包進區塊中。 +4. 隨著時間推移,含有你交易的區塊會被升級為「已證明」,然後是「最終化」。 這些升級進一步確定 你的交易已經成功且永遠不會被更改。 當區塊「最終化」後,就僅可能被網路層級的攻擊變更, 此類攻擊需要花費數十億美元。 + +## 視訊示範 {#a-visual-demo} + +觀看 Austin 為你講解交易、燃料和挖礦。 + + + +## Typed Transaction Envelope 交易 {#typed-transaction-envelope} + +以太坊最初有一種形式的交易。 每筆交易都包含 nonce、gas price、gas limit、to address、value、data、v、r 與 s。 這些欄位均為 [RLP 編碼](/developers/docs/data-structures-and-encoding/rlp/),看上去像是以下內容: + +`RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` + +以太坊不斷演進以支援多種交易類型,以便在實作存取清單和 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 等新功能時不會影響原有交易形式。 + +[EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) 是支援此類行為的協議。 交易的解釋如下: + +`TransactionType || TransactionPayload` + +其欄位定義如下: + +- `TransactionType` - 介於 0 和 0x7f 之間的數字,代表總計 128 種可能的交易類型。 +- `TransactionPayload` - 由交易類型定義的任意字節位元組陣列。 + +根據 `TransactionType` 值,交易可以分類為 + +1. **類型 0(傳統)交易:**自以太坊推出以來使用的原始交易格式。 它們不包括 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 的功能,例如動態燃料費計算或智慧型合約的存取清單。 傳統交易缺少在序列化形式中指示交易類型的特定前綴,在使用[遞迴長度前綴 (RLP) ](/developers/docs/data-structures-and-encoding/rlp)編碼時,該前綴以位元組 `0xf8` 開始。 這些交易的 TransactionType 值為 `0x0`。 + +2. **類型 1 交易:**在 [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) 中引入作為以太坊[柏林升級](/history/#berlin)的一部分,這些交易包含一個 `accessList` 參數。 此清單指定了交易期望存取的地址和儲存金鑰,有助於潛在降低涉及智慧型合約的複雜交易的[燃料](/developers/docs/gas/)成本。 EIP-1559 的費用市場變化不會包含在類型 1 交易中。 類型 1 交易也包含一個 `yParity` 參數,該參數可以是 `0x0` 或 `0x1`,表示 secp256k1 簽章的 y 值的奇偶性。 此類交易透過開頭的位元組 `0x01` 開頭辨識,其 TransactionType 值為 `0x1`。 + +3. **類型 2 交易**,通常稱為 EIP-1559 交易,是以太坊[倫敦升級](/history/#london)裡 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 中引入的交易。 這類交易已成為以太坊網路上的標準交易類型。 這些交易引入了一種新的費用市場機制,透過將交易費用分為基本費用和優先費來提高可預測性。 這些交易的開頭為位元組 `0x02`,並包含 `maxPriorityFeePerGas` 和 `maxFeePerGas` 等欄位。 類型 2 交易因其靈活性和效率而成為預設交易,在網路高度擁塞期間尤其受到青睞,因為它們能夠幫助使用者更好地預測及管理交易費用。 這些交易的 TransactionType 值為 `0x2`。 + + + +## 衍生閱讀 {#further-reading} + +- [EIP-2718:Typed Transaction Envelope 交易](https://eips.ethereum.org/EIPS/eip-2718) + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ + +## 相關主題 {#related-topics} + +- [帳戶](/developers/docs/accounts/) +- [以太坊虛擬機](/developers/docs/evm/) +- [Gas](/developers/docs/gas/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/web2-vs-web3/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/web2-vs-web3/index.md new file mode 100644 index 00000000000..d98309a961b --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/web2-vs-web3/index.md @@ -0,0 +1,62 @@ +--- +title: Web2 vs Web3 +description: +lang: zh-tw +--- + +Web2 指的是目前我們大多人熟知的網際網路。 網際網路由各類公司主導,透過提供服務來換取你的個人資料。 在以太坊背景下,Web3 指的是在區塊鏈上運行的去中心化應用程式。 這類應用程式,讓任何人無需出售自己的個人資料即可參與進來。 + +正在找尋找更適合初學者的資源? 請參閱我們的 [web3 簡介](/web3/)。 + +## Web3 優點 {#web3-benefits} + +很多 Web3 開發者選擇建立去中心化應用程式,是因為以太坊固有的去中心化優點: + +- 任何網路中的使用者,都擁有使用服務的權限,換句話說,使用服務不需要任何權限。 +- 沒有任何人能夠阻止或限制你使用服務。 +- 支付是透過原生代幣以太幣建立的。 +- 以太坊是圖靈完備的,這表示你可以在上面寫許多程式。 + +## 實務對比 {#practical-comparisons} + +| Web2 | Web3 | +| ------------------------- | --------------------------------------- | +| Twitter 可以審查任何帳戶或推文 | Web3 推文不可被審查,因為採用了去中心化控制 | +| 支付服務商可以決定不允許對某些類型的工作支付 | Web3 支付應用程式不需要任何個人資料,且無法阻止支付 | +| 零工經濟應用程式之服務伺服器會當機並影響勞動者收入 | Web3 伺服器不會當機 – 由上千台電腦組成的去中心化網路以太坊是它們的後端 | + +這不代表所有服務都需要變成去中心化應用程式。 以下範例將說明 web2 和 web3 服務的主要差異。 + +## Web3 的限制 {#web3-limitations} + +Web3 目前的一些限制: + +- 可擴容性 -- 由於去中心化,Web3 上的交易通常較慢。 狀態變化(例如支付),需要經過節點處理並傳播到整個網路上。 +- 使用者體驗 -- 與 Web3 應用程式互動可能需要額外的步驟、軟體和培訓。 這可能成為廣泛採納的一大障礙。 +- 可存取性 – 由於未整合到現代網路瀏覽器中,大多數使用者難以使用 Web3。 +- 成本 -- 因高成本,多數成功的去中心化應用程式僅將極少數程式碼放於區塊鏈。 + +## 中心化與去中心化 {#centralization-vs-decentralization} + +下表大致列出了中心化與去中心化數位網路的優點與缺點。 + +| 中心化系統 | 去中心化系統 | +| ------------------------------------------------------------ | -------------------------------------------------------------------- | +| 網路直徑小(所有參與者連結到一個中央機構);資訊傳播速度快,因為資訊由一個具大量計算資源的中央機構處理。 | 網路上距離最遙遠的參與者也許是近在咫尺。 資訊在整個網路廣播所需的時間可能較長。 | +| 通常效能更高(吞吐量更大,使用的計算資源總量更少)且更方便實作。 | 通常效能較低(吞吐量較小,使用的計算資源總量更多)且實作起來更為複雜。 | +| 出現資料衝突時,解決方案簡單明瞭:最終事實來源就是中央機構。 | 如果對等節點針對參與者要同步的資料狀態做出相互衝突的聲明,解決爭議時就需要一個通常較為複雜的協議。 | +| 單點失敗:惡意行為者也許能夠透過攻擊中心機構讓網路當機。 | 無單點失敗:即使相當一部分參與者遭受攻擊/下線,網路依舊能持續正常運作。 | +| 網路參與者之間的協調更加簡單,且由中央機構處理。 中央機構能強迫網路參與者採納升級、協議更新等等,幾乎不會產生矛盾摩擦。 | 協調通常較困難,因為沒有任何一家代理在網路層面決策、協議升級等方面有最終決定權。 最壞情況下,如果對協議變更無法達成共識,網路可能分裂。 | +| 中央機構能審查資料,可能會阻斷部分網路與網路其他部分互動。 | 審查難度極大,因為資訊有多種途徑可以傳播到整個網路。 | +| 網路參與者受中央機構控制。 | 任何人都能參與網路,不存在任何「守門人」。 理想情況下,參與成本極低。 | + +注意,這些概況可能並不適用於每個網路。 此外實際當中,網路的中心化與去中心化程度是一個範圍;沒有任何一個網路是完全中心化或完全去中心化的。 + +## 衍生閱讀 {#further-reading} + +- [什麼是 Web3?](/web3/) - _ethereum.org_ +- [Web 3.0 應用程式的架構](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ +- [去中心化的意義](https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274) _2017 年 2 月 6日 - Vitalik Buterin_ +- [去中心化的重要性](https://medium.com/s/story/why-decentralization-matters-5e3f79f7638e) _2018 年 2 月 18 日 - Chris Dixon_ +- [什麼是 Web 3.0?它為什麼重要?](https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b) _2019 年 12 月 31 日 - Max Mersch 和 Richard Muirhead_ +- [為何我們需要 Web 3.0](https://medium.com/@gavofyork/why-we-need-web-3-0-5da4f2bf95ab) _2018 年 9 月 12 日 - Gavin Wood_ diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/wrapped-eth/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/wrapped-eth/index.md new file mode 100644 index 00000000000..defbdf83881 --- /dev/null +++ b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/wrapped-eth/index.md @@ -0,0 +1,65 @@ +--- +title: 甚麼是包裝以太幣 (WETH) +description: 包裝以太幣 (WETH) 簡介 — 以太幣 (ETH) 的一種 ERC20 相容包裝函式。 +lang: zh-tw +--- + +# 包裝以太幣 (WETH) {#intro-to-weth} + +以太幣 (ETH) 是以太坊的主要貨幣。 以太幣有多種用途,例如質押、作為貨幣使用、以及支付計算所需要的燃料費。 **包裝以太幣實際上是以太幣的升級形式,具備許多應用程式和 [ERC-20 代幣](/glossary/#erc-20)(即以太坊上其他類型的數位資產)所需的額外功能。** 要與這些代幣互動,以太幣需要遵循與它們相同的規則,這些規則被稱為 ERC-20 標準。 + +為了彌合這一差距,包裝以太幣 (WETH) 應運而生。 **包裝以太幣是一種智慧型合約,讓你能夠存入任何數量的以太幣,並獲得同樣數量的符合 ERC-20 代幣標準的鑄造包裝以太幣**。 包裝以太幣是以太幣的一種表現形式,讓你能夠以 ERC-20 代幣的方式與其互動,而不是以原生資產以太幣的方式。 你會依然需要一些原生以太幣來支付燃料費,所以當你存入時請確保保留一些以太幣。 + +你也可以通過包裝以太幣智慧型合約將包裝以太幣換回以太幣。 你可以使用包裝以太幣智慧型合約贖回任意數量的包裝以太幣,而你會收到相同數量的以太幣。 存入的包裝以太幣會被銷毀,並從包裝以太幣的流通量中移除。 + +**流通中的以太幣有大概 3% 被鎖定在包裝以太幣代幣合約中**,令其成為其中一個最常用的 [智慧型合約](/glossary/#smart-contract)。 包裝以太幣對於與去中心化金融 (DeFi) 中的應用程式互動的使用者尤為重要。 + +## 為甚麼我們要把以太幣包裝成 ERC-20? {#why-do-we-need-to-wrap-eth} + +[ERC-20](/developers/docs/standards/tokens/erc-20/) 為可轉讓代幣定義了一個標準介面,讓所有人都可以建立能和以太坊生態系統中使用該標準的代幣和應用程式無縫互動的代幣。 因為**以太幣的出現早於 ERC-20 標準**,因此以太幣並不符合此規範。 這意味著**你無法簡單地**把以太幣和其他 ERC-20 代幣進行交換,或**無法在使用 ERC-20 標準的應用程式中使用以太幣。** 把以太幣包裝起來後,你可以進行以下操作: + +- **把以太幣換成其他 ERC-20 代幣**:你無法直接把以太幣換成其他 ERC-20 代幣。 包裝以太幣是一種符合 ERC-20 同質化代幣標準的以太幣表現形式,可以與其他 ERC-20 代幣進行交換。 + +- **在去中心化應用程式中使用以太幣**:因為以太幣與 ERC-20 標準不相容,開發者需要在去中心化應用程式中建立獨立的介面(一個用於以太幣,另一個用於 ERC-20 代幣)。 包裝以太幣消除了這一障礙,使開發者能夠在同一個去中心化應用程式中處理以太幣和其他代幣。 許多去中心化金融應用程式使用此標準,並建立了用於交換這些代幣的市場。 + +## 包裝以太幣 (WETH) 與以太幣 (ETH):有何不同? {#weth-vs-eth-differences} + +| | **以太幣 (ETH)** | **包裝以太幣 (WETH)** | +| --- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| 供應 | 以太幣的供應由以太坊協定管理。 以太幣的 [發行](/roadmap/merge/issuance) 由以太坊的驗證者在處理交易和建立區塊時進行。 | 包裝以太幣是一種 ERC-20 代幣,其供應由智慧型合約管理。 當合約接收到使用者存入的以太幣後,便會發行新的包裝以太幣;或者當使用者希望將包裝以太幣換回以太幣時,會將對應的包裝以太幣銷毀。 | +| 所有權 | 所有權是透過你的帳戶餘額由以太坊協定管理的。 | 包裝以太幣的所有權由包裝以太幣代幣智慧型合約管理,並由以太坊協定保障安全。 | +| 燃料 | 以太幣 (ETH) 是以太坊網路上針對計算的公認的支付單位。 燃料費以 gwei(以太幣的一種單位)來計價。 | 以包裝以太幣支付燃料費原生不受支援。 | + +## 常見問題 {#faq} + + + +你需要支付燃料費來使用包裝以太幣智慧型合約來兌換或贖回以太幣。 + + + + + +包裝以太幣通常被認為是安全的,因為它基於一個簡單且經過實證的智慧型合約。 包裝以太幣合約也已經經過正式驗證,這是以太坊上智慧型合約的最高安全標準。 + + + + + +除了本頁描述的 [包裝以太幣的規範化實作](https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)外,還有其他變體存在於市場中。 這些可能是由應用程式開發者建立的自訂代幣,或在其他區塊鏈上發行的版本,可能會有不同的行為或具有不同的安全屬性。 **始終仔細檢查代幣資訊,以確認你正在與哪一種包裝以太幣實作進行互動。** + + + + + +- [以太坊主網](https://etherscan.io/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) +- [Arbitrum](https://arbiscan.io/token/0x82af49447d8a07e3bd95bd0d56f35241523fbab1) +- [Optimism](https://optimistic.etherscan.io/token/0x4200000000000000000000000000000000000006) + + + +## 延伸閱讀 {#further-reading} + +- [包裝以太幣究竟是什麼?](https://weth.tkn.eth.limo/) +- [Etherscan 上的包裝以太幣代幣資訊](https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2) +- [包裝以太幣的形式化驗證](https://zellic.io/blog/formal-verification-weth) diff --git a/public/content/translations/zh-tw/14) Community Pages/community/code-of-conduct/index.md b/public/content/translations/zh-tw/14) Community Pages/community/code-of-conduct/index.md new file mode 100644 index 00000000000..177f12f87b4 --- /dev/null +++ b/public/content/translations/zh-tw/14) Community Pages/community/code-of-conduct/index.md @@ -0,0 +1,77 @@ +--- +title: 行為守則 +description: 我們在 ethereum.org 努力追求的基本標準。 +lang: zh-tw +--- + +# 行為守則 {#code-of-conduct} + +## 使命 {#mission} + +開發及維護最詳盡、最易存取的以太坊知識中心。 + +## 核心價值 {#values} + +Ethereum.org 致力於: + +- 教育,目標是幫助大家了解以太坊 +- 實現包容性 +- 實現可存取性 +- 專注於社群導向 +- 專注於以太坊底層技術及使用案例 +- 專注於以太坊概念與設計原則 + +## 我們不是 {#what-we-are-not} + +- 以太坊基金會的網站 +- 推廣投資或以任何形式牟取暴利的平臺 +- 認可個人專案,或為任何組織背書的平臺 +- 中心化及去中心化交易所,或其他任何形式的金融平臺 +- 提供投資建議或法律諮詢等的平臺 + +## 行為守則 {#code-of-conduct} + +### 承諾 {#pledge} + +開放參與是 ethereum.org 的核心精神。 我們的網站和社群由數千位貢獻者維護,只有當我們維持友好的參與環境時,這才可能實現。 為此,本網站的貢獻者承諾將為所有 ethereum.org 平臺及社群參與者維持一個零騷擾的環境。 Ethereum.org 社群歡迎和重視任何友善或想參與建設的人,無論年齡、是否殘疾、種族、性別特徵、性別認同、經驗水平、專業領域、教育、社會經濟地位、國籍、外觀、種族、宗教或任何其他方面的多樣性。 + +### 適用範圍 {#scope} + +此行為守則適用於所有 ethereum.org 空間(如 GitHub、Discord、Figma、Crowdin、Twitter 和其他線上平臺),且當社群在現實世界的公共場所(如:聚會、座談會及活動等等)時也同樣適用。 + +### 我們的標準 {#our-standards} + +為打造一個正向環境做出貢獻的行為範例: + +- 使用友好且包容的詞彙 +- 尊重各種不同的觀點和經驗 +- 優雅地接受和/或站在他人角度提供建設性批評 +- 心平氣和地處理衝突或分歧 +- 對其他社群成員展現同理心和包容心 +- 鼓勵和提倡社群中的新意見 + +不被允許的行為示例包括: + +- 人身暴力、威脅人身暴力或鼓勵任何形式的人身暴力 +- 使用帶有性暗示的言語或圖像,或令人反感的性關注 +- 冒充他人或以其他方式謊稱與某些人或組織有聯繫 +- 蓄意激怒、汙辱/貶低他人,以及人身或政治上的攻擊 +- 在公開或私人頻道中騷擾其他社群成員 +- 未經許可公開他人的私人資料,如實體住址或網路位址 +- 使用社交工程、詐騙或操控其他社群成員 +- 宣傳投資、代幣、專案或其他任何東西以獲得個人金錢上或非金錢上的利益 +- 用與主題無關的內容在伺服器洗版 +- 無視社群版主的要求或警告 +- 從事其他專業場合下不該出現的行為 + +### 檢舉 {#reporting} + +違反行為守則一般來說都會被社群看到,因為我們努力讓一切透明,以便社群成員能夠自我監督。 + +然而,如果發生了一些你覺得需要額外關注的事件,你可以向擁有版主身份者(如 discord guide)提出,使他們能協助調查和執行適當的回覆。 + +檢舉時,請儘可能附上詳細資訊,包括具體的例子與發生時間。 這有助於確保結果公平。 + +### 強製執行 {#enforcement} + +依據嚴重程度,違反行為守則者可能會收到警告、暫時停權或被永久踢出 ethereum.org 社群。 diff --git a/public/content/translations/zh-tw/14) Community Pages/community/events/index.md b/public/content/translations/zh-tw/14) Community Pages/community/events/index.md new file mode 100644 index 00000000000..064c060c99c --- /dev/null +++ b/public/content/translations/zh-tw/14) Community Pages/community/events/index.md @@ -0,0 +1,24 @@ +--- +title: 以太坊活動 +description: 如何加入以太坊社群。 +lang: zh-tw +hideEditButton: true +--- + +# 即將開始的活動 {#events} + +**每個月,世界各地都會舉辦重大的以太坊活動。**考慮參加你附近的活動,結識更多社群成員,了解就業機會,並培養新技能。 + + + +這是一個由我們社群所維護的部分活動清單。 若你知曉其他未於此清單列出的以太坊活動, [請幫忙新增](https://github.com/ethereum/ethereum-org-website/blob/dev/src/data/community-events.json)! + +## 以太坊聚會 {#meetups} + +沒看到適合你的活動嗎? 試試看加入以太坊聚會。 聚會是由以太坊愛好者團體所舉辦的小型活動 - 是對以太坊感興趣的同好們聚在一起的機會,一起談論並了解以太坊的各項進展。 + + + +有興趣舉辦自己的聚會嗎? 請查看 [BUIDL Network](https://consensys.net/developers/buidlnetwork/),這是個由 ConsenSys 為了幫助以太坊社群聚會而提出的提案。 + +這是一個由我們社群所維護的部分活動清單, 你可以從[這裡找到更多以太坊聚會。](https://www.meetup.com/topics/ethereum/) 若你知曉其他未於此清單列出的聚會, [請幫忙加入!](https://github.com/ethereum/ethereum-org-website/blob/dev/src/data/community-meetups.json) diff --git a/public/content/translations/zh-tw/14) Community Pages/community/get-involved/index.md b/public/content/translations/zh-tw/14) Community Pages/community/get-involved/index.md new file mode 100644 index 00000000000..e502f7648f7 --- /dev/null +++ b/public/content/translations/zh-tw/14) Community Pages/community/get-involved/index.md @@ -0,0 +1,135 @@ +--- +title: 我該如何參與? +description: 如何加入以太坊社群 +lang: zh-tw +--- + +# 我該如何參與? {#get-involved} + +以太坊社群裡包含了具有各種不同背景跟技術的人。 無論你是開發者、藝術家或是會計師,你總會找到方法參與我們的社群。 以下建議可幫助你踏出第一步。 + +由閱讀[行為守則](/community/code-of-conduct)中 ethereum.org 的使命與核心價值開始。 + +## 程式開發人員 {#developers} + +- 造訪 [ethereum.org/developers/](/developers/),瞭解和嘗試使用以太坊 +- 參加你附近的 [ETHGlobal](http://ethglobal.co/) 駭客松活動。 +- 留意[與你的專業領域或偏好的編程語言有關的專案](/developers/docs/programming-languages/) +- 觀看或參與[共識層與執行層的會議](https://www.youtube.com/@EthereumProtocol/streams) +- [以太坊生態系統支持計劃願望清單](https://esp.ethereum.foundation/wishlist/) - 以太坊生態系統支持計劃正積極尋找工具、文件和基礎設施領域的資助申請 +- [Web3Bridge](https://www.web3bridge.com/) - 加入有抱負的 Web3 社群,一起積極尋找、培訓和支持整個非洲數百名開發人員和社群成員 +- 加入[以太坊研發 Discord](https://discord.com/invite/VmG7Uxc) +- 加入[以太坊牧貓人組織的 Discord](https://discord.com/invite/Nz6rtfJ8Cu) + +## 研究人員和學術工作者 {#researchers-and-academics} + +你有數學、虛擬貨幣或者經濟學相關的學術背景嗎? 你可能會對以太坊生態中的一些前線工作有興趣。 + +- 加入[以太坊研發 Discord](https://discord.com/invite/VmG7Uxc) +- 撰寫或審查以太坊改進提案 + - 撰寫以太坊改進提案 + 1. 將你的想法提交至[以太坊魔法師協會](https://ethereum-magicians.org) + 2. 閱讀 [EIP-1](https://eips.ethereum.org/EIPS/eip-1) - **沒錯,就是指_整篇_文件。** + 3. 遵照 EIP-1 中的指示, 並在寫草稿時參考指示。 + - 了解如何成為[以太坊改進提案編輯](https://eips.ethereum.org/EIPS/eip-5069) + - 現在,你可以進行同行評審,審核其他人的以太坊改進提案! 請見[使用 `e-review` 標籤建立新提取請求](https://github.com/ethereum/EIPs/pulls?q=is%3Apr+is%3Aopen+label%3Ae-review)。 在 `discussion-to` 連結提供技術性回饋。 + - 參與[以太坊改進提案管理體系](https://github.com/ethereum-cat-herders/EIPIP) + - 加入[以太坊牧貓人組織的 Discord](https://discord.com/invite/Nz6rtfJ8Cu) + - [更多以太坊改進提案相關資訊](/eips/) +- [Challenges.ethereum.org](https://challenges.ethereum.org/) - 該網站中有一系列高回報研究賞金,你可在此賺取 $100,000 美金以上。 +- [Ethresear.ch](https://ethresear.ch) - 以太坊為研究而設的主要論壇,同時也是加密貨幣經濟學在世界上最有影響力的論壇。 +- [以太坊基金會研究線上問答](https://old.reddit.com/r/ethereum/comments/vrx9xe/ama_we_are_ef_research_pt_8_07_july_2022) - 由研究人員提供的問答系列。 當下階段開放時,任何人都可以提出問題。 +- [生態系統支援計劃的願望清單](https://esp.ethereum.foundation/wishlist/) - 以太坊生態系統支援計劃正在積極籌備資助申請的領域 +- [AllWalletDevs](https://allwallet.dev) - 讓以太坊開發者、設計師和有興趣的使用者,定期聚在一起並討論錢包的論壇 + +[探索更多活躍的研究領域](/community/research/)。 + +## 非技術性參與選項 {#non-technical} + +如果你不是程式開發人員,在以太坊中,你可能會不知道該從哪裡開始。 這裡提供了一些建議,還有一些為特定專業背景人士提供的資源。 + +### 在你所在城市籌備一場聚會 {#meetups} + +- 不知道從哪開始? [BUIDL 網路](https://consensys.net/developers/buidlnetwork/)幫得上忙。 + +### 撰寫以太坊相關的內容 {#write-content} + +- 以太坊需要好的作者用簡單易懂的文字讓人了解以太坊 +- 還沒準備好發表自己的文章? 可以考慮就社群資源中既有的內容進行協助,或者[提出有關 ethereum.org 的新內容建議](/contributing/)! + +### 值得留意的社群招募 {#take-notes} + +- 有很多開源的社群招募,眾多討論筆記更是一大助力。 如你對此有興趣,請加入[以太坊牧貓人組織 discord](https://discord.com/invite/Nz6rtfJ8Cu),並介紹你自己吧! + +### 把以太坊的內容翻譯成自己的母語 {#translate-ethereum} + +- ethereum.org 一直有個翻譯計畫,將網站和其他資源翻譯成不同語言 +- 從[這裡](/contributing/translation-program)了解參加的方法 + +### 運行一節點 {#run-a-node} + +跟數千名節點營運者一起讓以太坊進一步去中心化。 + +- [有關如何運行節點的詳細資訊](/developers/docs/nodes-and-clients/run-a-node/) + +### 質押你的以太幣 {#staking} + +透過質押你的以太幣來保護太坊網路並獲取酬勞。 + +- [更多權益質押相關訊息。](/staking/) + +### 支援專案 {#support-projects} + +以太坊生態系統正在進行一項任務,即尋找有益於公眾且有影響力的專案。 僅需非常小額的捐款,就能表達你對此的支援,從而實現重要工作。 + +- [Gitcoin](https://gitcoin.co/fund) +- [clr.fund](https://clr.fund/#/about) + +## 金融從業人員和會計師 {#financial-professionals} + +- 以太坊是「去中心化金融」生態系統的發源地 - 這是一個擁有各種協議與應用程式的網路,可以視為一種金融系統。 如果你是金融從業人員,可以到 [DeFi Llama](https://defillama.com/) 或 [DeFiPrime](https://defiprime.com) 查看我們的去中心化金融應用程式 +- 你是會計師? 以太坊的資產 - 以太幣、代幣、去中心化金融等 - 新興會計議題有很多。 你可以先查看一些旨在幫助加密貨幣使用者解決記帳問題和會計挑戰的專案計畫,例如 [Rotki](https://rotki.com/) + +## 產品經理 {#product-managers} + +- 以太坊生態系統需要你的才華! 很多公司都在招聘產品經理。 如你想開始為開放原始碼專案作貢獻,請聯絡[以太坊牧貓人](https://discord.com/invite/Nz6rtfJ8Cu)或 [RaidGuild](https://www.raidguild.org/) + +## 市場策劃人員 {#marketing} + +- 以太坊生態系統內設有非常多市場策劃和溝通人員的職位! + +## 以太坊工作 {#ethereum-jobs} + +**想在以太坊尋找工作?** + +- [ethereum.org 工作](/about/#open-jobs) +- [以太坊基金會職缺布告欄 (Lever)](https://jobs.lever.co/ethereumfoundation) +- [以太坊基金會職缺布告欄 (BambooHR)](https://ethereum.bamboohr.com/jobs/) +- [JobStash](https://jobstash.xyz) +- [加密貨幣相關工作](https://cryptocurrencyjobs.co/ethereum/) +- [在 ConsenSys 的職涯](https://consensys.net/careers/) +- [加密貨幣相關工作清單](https://cryptojobslist.com/ethereum-jobs) +- [與銀行無關的職缺布告欄](https://pallet.xyz/list/bankless/jobs) +- [Web3 工作](https://web3.career) +- [Web3 Army](https://web3army.xyz/) +- [加密谷工作](https://cryptovalley.jobs/) +- [以太坊工作](https://startup.jobs/ethereum-jobs) +- [CryptoJobster](https://cryptojobster.com/tag/ethereum/) + +## 加入去中心化自治組織 (DAO) {#decentralized-autonomous-organizations-daos} + +「DAO」是指去中心化自治組織。 這些群體會利用以太坊技術加速整合及合作。 例如,為了控制會員,他們會針對提案進行投票,或者管理質押池內的資產。 當去中心化自治組織仍維持在試驗狀態時,他們讓你有機會去尋找你認同的群體、合作者,然後在以太坊的社群內培養你的影響力。 [更多去中心化自治組織相關資訊](/dao/) + +- [DAOSquare](https://daosquare.io/) [@DAOSquare](https://twitter.com/DAOSquare) - _在科技界以外推廣去中心化自治組織的概念,並幫助大家透過此等組織創造價值_ +- [開發者去中心化自治組織](https://www.developerdao.com/) [@developer_dao](https://twitter.com/developer_dao) - _一個認為網際網路為集體所有的開發者社群_ +- [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _由一些協助開發 Web3 的自由工作者所組成的去中心化自治組織_ +- [HausDAO](https://daohaus.club) [@nowdaoit](https://twitter.com/nowdaoit) - _DAOhaus 的社群管理體系_ +- [LexDAO](https://lexdao.org) [@lex_DAO](https://twitter.com/lex_DAO) - _法律建設_ +- [Machi X](https://machix.com) [@MachiXOfficial](https://twitter.com/MachiXOfficial) - _藝術群體_ +- [MetaCartel Ventures](https://metacartel.xyz) [@VENTURE_DAO](https://twitter.com/VENTURE_DAO) - _投資 pre-seed 輪加密貨幣專案的風投基金_ +- [MetaGame](https://metagame.wtf) [@MetaFam](https://twitter.com/MetaFam) - _現實生活的 MMORPG 遊戲機制_ +- [MetaFactory](https://metafactory.ai) [@TheMetaFactory](https://twitter.com/TheMetaFactory) - _數字物理衣物品牌_ +- [MolochDAO](https://molochdao.com) [@MolochDAO](https://twitter.com/MolochDAO) - _一個致力於為以太坊發展提供資金的社群_ +- [Raid Guild](https://raidguild.org) [@RaidGuild](https://twitter.com/RaidGuild) - _Web3 建造者集中地_ + +無論何時、無論以何種方式,當你為 ethereum.org 出力時,請記得遵守 ethereum.org 的[行為守則](/community/code-of-conduct)! diff --git a/public/content/translations/zh-tw/14) Community Pages/community/grants/index.md b/public/content/translations/zh-tw/14) Community Pages/community/grants/index.md new file mode 100644 index 00000000000..1133d58cfba --- /dev/null +++ b/public/content/translations/zh-tw/14) Community Pages/community/grants/index.md @@ -0,0 +1,47 @@ +--- +title: 以太坊基金會和社群資助計劃 +description: 一個以太坊生態系統資助計劃清單。 +lang: zh-tw +--- + +# 以太坊資助 {#ethereum-grants} + +以下所列計劃為致力於促進以太坊生態系統成功和發展的專案提供各種資助贈款。 以此作為尋找和申請資金的指南,以幫助你的下一個以太坊專案取得成功。 + +此列表由我們的社群策劃。 如果有任何遺漏或不正確之處,請編輯此頁面! + +## 開放的以太坊生態系統 {#broad-ethereum-ecosystem} + +這些計劃通過向各種專案提供資助來支援開放的以太坊生態系統。 其中包括可擴展性、社群建設、安全性、隱私等方面的解決方案。 這些贈款並不專門針對任何一個以太坊平台,如果你不確定,可以從這裡開始。 + +- [EF 生態系統支援計劃](https://esp.ethereum.foundation) - _資助有益於以太坊的開源專案,特別關注通用工具、基礎設施、研究和公共產品_ +- [Moloch DAO](https://www.molochdao.com/) - _隱私性、二層網路擴容、用戶端安全性等_ +- [去中心化自治組織資助計畫](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _有關資助機構的 Google 試算表_ +- [學術資助](https://esp.ethereum.foundation/academic-grants) - _支援以太坊相關學術工作的資助計劃_ +- [Blockworks Grantfarm](https://blockworks.co/grants/programs) - _Blockworks 彙編了關於所有資助計畫、提案徵集和漏洞懸賞計畫的詳盡清單。_ + +## 特定專案 {#project-specific} + +這些專案旨在為開發和實驗自身技術的專案獲取資助。 + +- [Aave 資助計劃](https://aavegrants.org/) – _[Aave](https://aave.com/) 為去中心化自治組織提供資助_ +- [Balancer](https://grants.balancer.community/) – _[Balancer](https://balancer.fi/) 生態系統基金_ +- [Chainlink 資助計劃](https://chain.link/community/grants) - _[Chainlink](https://chain.link/) 社群資助_ +- [Decentraland 資助計劃](https://governance.decentraland.org/grants/) – _[Decentraland](https://decentraland.org/) 去中心化自治組織元宇宙_ +- [Lido 生態系統資助機構 (LEGO)](https://lido.fi/lego) – _[Lido](https://lido.fi/) 金融生態系統_ +- [MetaMask 計劃](https://metamaskgrants.org/) - _[MetaMask](https://metamask.io/) 員工引導自助去中心化自治組織_ +- [SKALE 網路資助計劃](https://skale.space/developers#grants) - _[SKALE 網路](https://skale.space/)生態系統_ +- [Swarm 基金會資助計劃](https://my.ethswarm.org/grants) - _[Swarm 基金會](https://www.ethswarm.org/)生態系統_ +- [The Graph](https://thegraph.com/ecosystem/grants/) – _[The Graph](https://thegraph.com/) 生態系統_ +- [Uniswap 資助計劃](https://www.uniswapfoundation.org/approach) – _[Uniswap](https://uniswap.org/) 社群_ + +## 二次融資 {#quadratic-funding} + +以太坊的開源根促進了一種有趣的新籌款模式:二次融資的成長。 這種模式可能有助於改善我們在未來為各種公共產品募資的方式。 二次融資確保獲得最多資金的是具有最獨特需求的專案。 換句話說,就是那些能夠改善大多數人生活的專案。 [關於二次融資的詳細資訊。](/defi/#quadratic-funding) + +- [Gitcoin](https://gitcoin.co/grants) +- [clr.fund](https://clr.fund/) + +## 在以太坊工作 {#work-in-ethereum} + +還沒準備好開始你自己的專案? 有數百間公司正在積極尋找對以太坊懷有熱情的人加入到以太坊生態系統的工作行列。 想了解更多資訊? [查看以太坊相關工作](/community/get-involved/#ethereum-jobs) diff --git a/public/content/translations/zh-tw/14) Community Pages/community/language-resources/index.md b/public/content/translations/zh-tw/14) Community Pages/community/language-resources/index.md new file mode 100644 index 00000000000..7923de44574 --- /dev/null +++ b/public/content/translations/zh-tw/14) Community Pages/community/language-resources/index.md @@ -0,0 +1,153 @@ +--- +title: 語言資源 +description: 用以了解以太坊的非英文資源 +lang: zh-tw +--- + +# 語言資源 {#language-resources} + +以太坊社群為全球性社群,包含數以百萬計的非英語人士。 + +我們的目標是以所有語言提供教育內容,幫助世界各地的人們克服語言障礙,成功加入以太坊社群。 + +如果你更喜歡用你的母語閱讀,或你知道某人不會說英語,你可以在下面找到有用的非英語資源列表。 数十万的以太坊爱好者聚集在这些在线论坛上,分享消息、谈论最近的发展、讨论技术问题并畅想未来。 + +知道以你的語言撰寫的教育資源? [請創建議題](https://github.com/ethereum/ethereum-org-website/issues/new/choose),以將其添加到列表! + +## Ethereum.org 資源 {#ethereum-org} + +Ethereum.org 已翻譯為 40 多種語言,你可以透過我們的語言選擇器選單(位於每個頁面的頂部)找到這些語言。 + +![語言選擇器選單](./language-selector-menu.png) + +如果你會使用兩種語言,而且想幫助我們宣傳,讓更多人知道,你也可以參與 [ethereum.org 翻譯計劃](/contributing/translation-program/#translation-program),幫助我們翻譯該網站。 + +## 社群資源 {#community} + +### 巴西葡萄牙語 {#br-pt} + +**新聞** + +- [BeinCrypto](http://www.beincrypto.com.br) - 提供有關加密貨幣的新聞和文章,包括巴西交易所列表 +- [Cointegraph](http://cointelegraph.com.br/category/analysis) - 巴西版 Cointelegraph,一個重要的加密貨幣新聞媒體機構 +- [Livecoins](http://www.livecoins.com.br/ethereum) - 提供有關加密貨幣的新聞和工具 +- [Seudinheiro](http://www.seudinheiro.com/criptomoedas/) - 提供有關加密貨幣的新聞和報告 +- [Modular Crypto](https://modularcrypto.xyz/) - 提供有關加密貨幣的新聞和教育文章 + +**教育** + +- [web3dev](https://www.web3dev.com.br/) - 向 Web3 開發者提供的內容中心和 Discord 社群。 +- [Web3Brasil](https://github.com/web3brasil/web3brasil) - 提供有關 Web3 和去中心化金融的學習資源 +- [CriptoFacil](http://www.criptofacil.com/ultimas-noticias/) - 提供有關加密貨幣的新聞和教育資源,包括「以太坊入門」和「去中心化金融入門」 +- [CriptoAtivos](http://www.criptoativos.wiki.br/) - 提供來自加密貨幣空間、教育和部落格的見解 +- [Cointimes](http://www.cointimes.com.br/) - 提供有關加密貨幣的新聞和教育資源 +- [Web3 starter pack](https://docs.google.com/document/d/1X8PSTFH7FTw9J-gbKWM6Y430SWCBT8d4t4pJgFQHJ8E/) - 提供有關加密貨幣最常見和最基礎問題解答的指南 + +### 中文 {#zh} + +**通用資源** + +- [Ethereum.cn](https://www.ethereum.cn/) - 由社群維護的網站內容,包括共識層升級、所有核心開發者會議紀錄、二層網路等 +- [EthFans](https://github.com/editor-Ajian/EthFans.org-annual-collected-works/) - 學習從基礎到高級以太坊主題的所有知識 +- [Untimes](https://mp.weixin.qq.com/s/tvloZSDBSOQN9zDQj_91kA) - 由社群維護的內容,涵蓋以太坊、去中心化金融、非同質化代幣和 Web3 相關知識 +- [123ETH](https://123eth.org/) - 以太坊生態系統的入口網站 +- [Zhen Xiao(肖臻)](http://zhenxiao.com/blockchain/) - 關於加密貨幣及其應用的免費線上課程 +- [以太坊白皮書](https://github.com/ethereum/wiki/wiki/[%E4%B8%AD%E6%96%87]-%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%99%BD%E7%9A%AE%E4%B9%A6) - 中文版以太坊白皮書 + +**以太坊生態系統** + +- [ETHPlanet](https://www.ethplanet.org/) - 可上線或現場參加駭客松,為大學生提供培訓 +- [PrimitivesLane](https://www.primitiveslane.org/) - 一個以區塊鏈技術為重點的非營利研究小組 +- [以太坊中國翻譯社群](https://www.notion.so/Ethereum-Translation-Community-CN-05375fe0a94c4214acaf90f42ba40171) - 一個致力於翻譯以太坊教育類內容的社群 + +**適用於開發人員** + +- [DappLearning](https://github.com/Dapp-Learning-DAO/Dapp-Learning) - 每週學習主流去中心化應用程式專案,並分享想法及意見的學習群組 +- [LearnBlockchain](https://learnblockchain.cn/) - 一個分享區塊鏈技術相關資訊的開發者社群 + +**適用於密碼學研究人員** + +- [安比實驗室](https://mp.weixin.qq.com/s/69_tqBJpr_sbaKtR1sBRMw) - 一個解釋說明密碼學和安全等內容的微信公眾號 +- [星想法](https://mp.weixin.qq.com/s/9KgKTc_jtJ7bWKdbNPoqvQ) - 一個解釋說明零知識技術的微信公眾號 + +### 捷克語 {#cs} + +- [Gwei.cz](https://gwei.cz) - 有關 Web3 的當地社群,產出教育內容、舉辦線上和線下活動 +- [Gwei.cz Příručka](https://prirucka.gwei.cz/) - 以太坊新手指南 +- [DAO Příručka](https://dao.gwei.cz/) - 去中心化自治組織新手指南 +- [精通以太坊](https://ipfs.io/ipfs/bafybeidvuxhnsgfx3tncpfxheqglkjwmdxclknlgd7s7qggd2a6bzgb27m) - 捷克語版《精通以太坊》 + +### 法語 {#fr} + +- [Ethereum France](https://www.ethereum-france.com/) - Ethereum France 組織各種活動、產出內容並鼓勵圍繞以太坊展開討論 +- [Ethereum.fr](https://ethereum.fr/) - 提供有關以太坊的新聞和教育資源 +- [BanklessFR](https://banklessfr.substack.com/) - Bankless 法語版新聞通訊 +- [CryptoFR](https://cryptofr.com/category/44/ethereum-general) - 以太坊子頁面上的加密貨幣論壇 + +### 德語 {#de} + +- [Microsoft Learn (Solidity)](https://docs.microsoft.com/de-de/learn/modules/blockchain-learning-solidity/) - 使用 Solidity +- [Microsoft Learn(智慧型合約)](https://docs.microsoft.com/de-de/learn/modules/blockchain-solidity-ethereum-smart-contracts/)- 用 Solidity 撰寫以太坊智慧型合約 +- [Microsoft Learn(以太坊網路)](https://docs.microsoft.com/de-de/learn/modules/blockchain-ethereum-networks/)- 連接並部署以太坊網路 +- [Microsoft Learn(區塊鏈)](https://docs.microsoft.com/de-de/learn/paths/ethereum-blockchain-development/)- 進入區塊鏈開發 + +### 希伯來文 {#he} + +- [Udi Wertheimer - 比特幣愛好者可以從以太坊學到什麼](https://www.cryptojungle.co.il/udi-wertheimer-what-bitcoiners-can-learn-from-ethereum/) +- [Omer Greismen (OpenZeppelin) - 我們如何防止 150 億美元的智慧型合約遭到駭客攻擊](https://www.cryptojungle.co.il/omer-greisman-openzeppelin/) +- [Shy Datika (INX) - 代幣化和證券的未來,內容包括「以太坊是一種證券嗎」](https://www.cryptojungle.co.il/shy-datika-tokenization/) +- [Roy Confino (Lemonade) - 以太坊保險](https://www.cryptojungle.co.il/roy-confino-insurance/) +- [Idan Ofrat (Fireblocks) - 機構採用](https://www.cryptojungle.co.il/idan-ofrat-fireblocks/) +- [Gal Weizman (MetaMask) - 什麼是 MetaMask](https://www.cryptojungle.co.il/gal-weizman-metamask/) +- [Dror Aviely (Consensys) - 以太坊的中心](https://www.cryptojungle.co.il/dror-aviely-ethereum-center/) +- [Nir Rozin - 成為加密龐克](https://www.cryptojungle.co.il/nir-rozin-cryptopunk/) +- [Adan Kedem - 遊戲與元宇宙](https://www.cryptojungle.co.il/adan-kedem-web3-gaming/) +- [Uri Kolodny (Starkware) - 以太坊與區塊鏈分層](https://www.cryptojungle.co.il/uri-kolodny-starkware/) +- [Udi Wertheimer - 以太坊 2.0 與競爭對手](https://www.cryptojungle.co.il/udi-on-eth2/) +- [Ben Samocha(本從) - 以太坊 2.0 是機會嗎?](https://www.cryptojungle.co.il/etherurm2-week-summary/) +- [Alon Muroch (Bloxstake) - 什麼是以太坊 2.0?](https://www.cryptojungle.co.il/alon-moroch-eth2/) +- [Eilon Aviv (Collider Ventures) - 以太坊 2.0 可能會出現哪些問題](https://www.cryptojungle.co.il/eilon-aviv-eth2-0/) +- [Eilon Aviv (Collider Ventures) - 為什麼我們需要以太坊 2.0](https://www.cryptojungle.co.il/eilon-aviv-ethereum-2-0/) + +### 義大利語 {#it} + +- [Ethereum Italia](https://www.ethereum-italia.it/) - 提供以太坊教育資源、活動和新聞,專注於智慧型合約和區塊鏈技術 +- [Ethereum Italia Podcast](https://www.ethereum-italia.it/podcast/) - 以太坊義大利語播客 +- [Microsoft Learn (Solidity)](https://docs.microsoft.com/it-it/learn/modules/blockchain-learning-solidity/) - 學習使用 Solidity +- [Microsoft Learning(智慧型合約)](https://docs.microsoft.com/it-it/learn/modules/blockchain-solidity-ethereum-smart-contracts/)- 學習用 Solidity 撰寫智慧型合約 +- [Microsoft Learn(去中心化應用程式)](https://docs.microsoft.com/it-it/learn/modules/blockchain-create-ui-decentralized-apps/)- 使用去中心化應用程式建立使用者介面 + +### 日語 {#ja} + +- [日本網路和虛擬貨幣資產交易組織](https://jvcea.or.jp/) +- [日本虛擬資產商業組織](https://cryptocurrency-association.org/) +- [區塊鏈開發入門 - 學習 | 微軟文件](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - 該學習路徑將向你介紹以太坊平台上的區塊鏈和發展 +- [精通以太坊](https://www.oreilly.co.jp/books/9784873118963/) - 日語版《精通以太坊》 +- [手把手教你使用 Solidity 和以太坊制訂智慧型合約](https://www.oreilly.co.jp/books/9784873119342/) - 日語版《手把手教你使用 Solidity 和以太坊制訂智慧型合約》 + +### 俄語 {#ru} + +- [Cyber Academy](https://cyberacademy.dev) -Web3 建造者的教育空間 +- [Forklog](https://forklog.com) - 有關一般加密貨幣、不同區塊鏈的現有技術和未來升級的新聞和教育文章 +- [BeInCrypto](https://ru.beincrypto.com) - 新聞、加密貨幣價格分析以及非技術文章,通俗易懂地講解有關加密貨幣的所有內容 + +### 西班牙語 {#es} + +- [Ethereum Madrid](https://ethereummadrid.com/) - 區塊鏈、去中心化金融、管理體系課程、活動和部落格 +- [Cointegraph](https://es.cointelegraph.com/ethereum-for-beginners) - 西班牙語版《以太坊新手指南》 +- [Tutoriales online](https://tutoriales.online/curso/solidity) - 學習以太坊 Solidity 和編程 +- [Curso Introducción a Ethereum Development](https://youtube.com/playlist?list=PLTqiwJDd_R8y9pfUBjhkVa1IDMwyQz-fU) - Solidity 基礎知識,以及測試和部署你的首個智慧型合約 +- [Curso Introducción a Seguridad y Hacking en Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8yHOvteko_DmUxUTMHnlfci) - 了解真實智慧型合約中常見的漏洞和安全問題 +- [去中心化金融開發課程介紹](https://youtube.com/playlist?list=PLTqiwJDd_R8zZiP9_jNdaPqA3HqoW2lrS) - 了解去中心化金融智慧型合約如何在 Solidity 中運作,並創建自己的自動化做市商應用 +- [Cryptoversidad](https://www.youtube.com/c/Cryptoversidad) - 由淺入深的非技術性區塊鏈教學 學習所有有關加密貨幣和以太坊的知識。 + +### 土耳其語 {#tr} + +- [BTK Akademi](https://www.btkakademi.gov.tr/portal/course/blokzincir-ve-kripto-paralar-10569#!/about) - 專注於區塊鍊和加密貨幣的課程 +- [偉大的重命名:以太坊 2 發生了什麼?](https://miningturkiye.org/konu/ethereum-madenciligi-bitiyor-mu-onemli-gelisme.655/)-《偉大的重命名》博文的土耳其語譯作,解釋了「以太坊 2」術語的變化 + +### 越南語 {#vi} + +- [Tino Group](https://wiki.tino.org/ethereum-la-gi/) - 以太坊、去中心化應用程式、錢包和常見問題的概述 +- [Tap Chi Bitcoin](https://tapchibitcoin.io/tap-chi/tin-tuc-ethereum-eth) - 以太坊新聞和教育子頁面的網頁平台 +- [Coin68](https://coin68.com/ethereum-tieu-diem/) - 提供以太坊新聞和教育內容的加密貨幣入口網站 diff --git a/public/content/translations/zh-tw/14) Community Pages/community/online/index.md b/public/content/translations/zh-tw/14) Community Pages/community/online/index.md new file mode 100644 index 00000000000..b09116ac6f0 --- /dev/null +++ b/public/content/translations/zh-tw/14) Community Pages/community/online/index.md @@ -0,0 +1,50 @@ +--- +title: 線上社群 +description: 一個關於以太坊生態系統的贈款計劃清單 +lang: zh-tw +--- + +# 線上社群 {#online-communities} + +數十萬的以太坊愛好者聚集在這些線上論壇上,分享消息、談論最近的發展、討論技術問題,並暢想未來。 + +## 論壇 {#forums} + +r/ethereum - 所有有關以太坊的話題 +r/ethfinance - 以太坊中有關金融的主題,其中包含去中心化金融 +r/ethdev - 專注於以太坊的開發 +r/ethtrader - 趨勢及市場分析 +r/ethstaker - 歡迎所有對在以太坊上質押感興趣的人 +以太坊魔法師獎學金 - 以以太坊技術標準為中心的社群 +以太坊 Stackexchange - 以太坊開發者討論及協助 +以太坊研究 - 最具影響力的加密經濟研究留言板 + +## 聊天室 {#chat-rooms} + +以太牧貓人組織 - 提供專案管理以支援以太坊的社群 +以太坊駭客 - 由全球以太坊駭客線上社群 ETHGlobal 所管理的 Discord 聊天室 +CryptoDevs - 專注於以太坊開發的 Discord 社群 +EthStaker Discord - 給現有及潛在質押者的社群營運指導、教育、支援及資源。 +Ethereum.org 網站團隊 - 訪問並和團隊及社群大眾聊聊 Ethereum.org 網站開發及設計 +Matos Discord - 建造者、產業領袖,及以太坊愛好者出沒的 web3 創作者社群。 我們熱愛 web3 開發、設計及文化。 與我們一起建立。 +Solidity Gitter - 討論 solidity 的開發 (Gitter) +Solidity Matrix - 討論 solidity 的開發 (Matrix) +以太坊技術堆棧交易所 *- 問答論壇* +Peeranha *- 去中心化問答論壇* + +## YouTube 和 Twitter {#youtube-and-twitter} + +以太坊基金會 - 掌握以太坊基金會最新的資訊 +@ethereum - 以太坊基金會的官方帳戶 +@ethdotorg - 以太坊的入口網站,為我們成長中的全球社群而建 +具影響力的以太坊推特帳戶清單 + + + + +
+ + 了解更多關於去中心化自治組織的資訊 + +
+
diff --git a/public/content/translations/zh-tw/14) Community Pages/community/research/index.md b/public/content/translations/zh-tw/14) Community Pages/community/research/index.md new file mode 100644 index 00000000000..8f95e0f1745 --- /dev/null +++ b/public/content/translations/zh-tw/14) Community Pages/community/research/index.md @@ -0,0 +1,399 @@ +--- +title: 以太坊研究的活躍領域 +description: 探索不同領域的開放研究,並瞭解如何參與。 +lang: zh-tw +--- + +# 以太坊研究的活躍領域 {#active-areas-of-ethereum-research} + +以太坊的其中一個主要優勢是有活躍的研究和工程社群在持續改進以太坊。 來自世界各地的許多熱情、有才能的人們都致力於解決以太坊中的未解問題,但找出這些問題有時並不容易。 此頁面概述了關鍵的活躍研究領域,粗略介紹以太坊的前沿資訊。 + +## 以太坊研究如何進行 {#how-ethereum-research-works} + +以太坊研究是公開透明的,體現了 [去中心化科研 (DeSci)](https://hackernoon.com/desci-decentralized-science-as-our-chance-to-recover-the-real-science) 的原則。 這種文化使研究工具和產出盡可能開放且可以互動,例如透過可執行筆記本達成此目的。 以太坊研究進步非常迅速,新的發現都會在開放論壇如 [ethresear.ch](https://ethresear.ch/) 上發文和討論,而非經過多輪同行評審後,再透過傳統出版物傳達給社群。 + +## 一般研究資源 {#general-research-resources} + +不論是哪個特定主題,在 [ethresear.ch](https://ethresear.ch) 和 [以太坊研發 Discord 頻道](https://discord.gg/qGpsxSA) 都能獲得大量關於以太坊研究的資訊。 這些是以太坊研究者討論最新想法和開發機會的主要場所。 + +這份由 [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) 在 2022 年 5 月發佈的報告詳細地介紹了以太坊開發藍圖。 + +## 資金來源 {#sources-of-funding} + +你可以參與以太坊研究並獲得報酬! 舉例來說,[以太坊基金會](/foundation/) 最近舉行了 [一輪學術募資](https://esp.ethereum.foundation/academic-grants)。 你可以在 [以太坊資助頁面](/community/grants/) 找到有關目前和即將到來的募資機會的資訊。 + +## 協定研究 {#protocol-research} + +協定研究涉及以太坊的基礎層 - 定義了節點如何連線、通訊、交換和儲存以太坊資料,並就區塊鏈狀態達成共識的一組規則。 協定研究分為兩大類別:共識和執行。 + +### 共識 {#consensus} + +共識研究涉及 [以太坊權益證明機制](/developers/docs/consensus-mechanisms/pos/)。 一些共識研究主題如下: + +- 識別和修復漏洞; +- 量化加密經濟安全; +- 提高用戶端實作的安全性或效能; +- 以及開發輕量用戶端。 + +除了前瞻性研究外,以太坊也在研究如何重新設計一些基本協定,例如單一時隙最確定性,以實作以太坊的重大改進。 此外,效率、安全和監控共識用戶端之間的點對點網路也是重要的研究課題。 + +#### 背景介紹讀物 {#background-reading} + +- [權益證明簡介](/developers/docs/consensus-mechanisms/pos/) +- [Casper-FFG paper](https://arxiv.org/abs/1710.09437) +- [Casper-FFG 說明](https://arxiv.org/abs/1710.09437) +- [Gasper 論文](https://arxiv.org/abs/2003.03052) + +#### 近期研究 {#recent-research} + +- [Ethresear.ch 共識](https://ethresear.ch/c/consensus/29) +- [可用性/最終確定性兩難問題](https://arxiv.org/abs/2009.04987) +- [單一時隙最終確定性](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) +- [提交者-建置者分離](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) + +### 執行 {#execution} + +執行層負責執行交易,運行 [以太坊虛擬機 (EVM)](/developers/docs/evm/),以及產生執行有效負載以傳遞給共識層。 活躍的研究領域有很多,包括: + +- 發展輕量用戶端支援; +- 研究燃料限制; +- 以及與新資料結構的相容性(如沃克爾樹)。 + +#### 背景介紹讀物 {#background-reading-1} + +- [以太坊虛擬機介紹](/developers/docs/evm) +- [Ethresear.ch 執行層](https://ethresear.ch/c/execution-layer-research/37) + +#### 近期研究 {#recent-research-1} + +- [資料庫最佳化](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) +- [狀態過期](https://notes.ethereum.org/@vbuterin/state_expiry_eip) +- [狀態過期的路徑](https://hackmd.io/@vbuterin/state_expiry_paths) +- [沃克爾樹和狀態過期提案](https://notes.ethereum.org/@vbuterin/verkle_and_state_expiry_proposal) +- [歷史紀錄管理](https://eips.ethereum.org/EIPS/eip-4444) +- [沃克爾樹](https://vitalik.eth.limo/general/2021/06/18/verkle.html) +- [資料可用性取樣](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) + +## 用戶端開發 {#client-development} + +以太坊用戶端是以太坊協定的協定。 用戶端開發將協定研究的成果建置於用戶端中,以實作這些成果。 用戶端開發包括了更新用戶端規範和建置特定實作。 + +以太坊節點需要執行兩個軟體: + +1. 能夠追蹤區塊鏈頭部、廣播區塊以及處理共識邏輯的共識用戶端 +2. 支援以太坊虛擬機和執行交易及智慧型合約的執行用戶端 + +查看 [節點及用戶端頁面](/developers/docs/nodes-and-clients/) 以獲得關於節點和用戶端的詳細資訊,以及所有目前用戶端實作的清單。 你也可以在 [歷史紀錄頁面](/history/) 找到以太坊的所有升級的歷史紀錄。 + +### 執行用戶端 {#execution-clients} + +- [執行用戶端規範](https://github.com/ethereum/execution-specs) +- [執行應用程式介面規範](https://github.com/ethereum/execution-apis) + +### 共識用戶端 {#consensus-clients} + +- [共識用戶端規範](https://github.com/ethereum/consensus-specs) +- [信標應用程式介面規範](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) + +## 擴容與效能 {#scaling-and-performance} + +擴容以太坊是以太坊研究者關注的重大領域。 目前的方法包括將交易轉移到卷軸上,以及透過資料二進位大型物件讓交易儘可能便宜。 擴容以太坊的相關介紹可以在 [擴容頁面](/developers/docs/scaling) 查看。 + +### 二層網路 {#layer-2} + +目前有多種二層網路協定透過使用不同技術在一層網路上實現批量交易並確保交易,來擴容以太坊。 這是個快速發展的主題,且有很大的研究及開發潛力。 + +#### 背景介紹讀物 {#background-reading-2} + +- [二層網路簡介](/layer-2/) +- [Polynya:卷軸、資料可用性和模組化鏈](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) + +#### 近期研究 {#recent-research-2} + +- [排序者的 Arbitrum 公平排序](https://eprint.iacr.org/2021/1465) +- [ethresear.ch 二層網路](https://ethresear.ch/c/layer-2/32) +- [以卷軸為中心的開發藍圖](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) +- [L2Beat](https://l2beat.com/) + +### 跨鏈橋 {#bridges} + +二層網路需要更多研究和開發的一個特別領域是安全有效的跨鏈橋。 這包含了各種二層網路之間的跨鏈橋,以及一層網路和二層網路之間的跨鏈橋。 這是一個特別重要的研究領域,因為跨鏈橋通常是駭客的攻擊目標。 + +#### 背景介紹讀物 {#background-reading-3} + +- [區塊鏈跨鏈橋簡介](/bridges/) +- [Vitalik 討論跨鏈橋](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) +- [區塊鏈跨鏈橋文章](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) +- [跨鏈橋中鎖定之資金](https://dune.com/eliasimos/Bridge-Away-\(from-Ethereum\)) + +#### 近期研究 {#recent-research-3} + +- [驗證跨鏈橋](https://stonecoldpat.github.io/images/validatingbridges.pdf) + +### 分片 {#sharding} + +以太坊區塊鏈分片一直都是開發藍圖的一部分。 然而,新的擴容解決方案如「Danksharding」正是目前的焦點。 + +全面 Danksharding 的前身稱為 Proto-Danksharding,已隨著 Cancun-Deneb(「坎昆」)網路升級上線。 + +[更多有關坎昆升級的資訊](/roadmap/dencun/) + +#### 背景介紹讀物 {#background-reading-4} + +- [Proto-Danksharding 筆記](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) +- [去銀行化 Danksharding 影片](https://www.youtube.com/watch?v=N5p0TB77flM) +- [以太坊分片研究概要](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) +- [Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) + +#### 近期研究 {#recent-research-4} + +- [EIP-4844: Proto-Danksharding](https://eips.ethereum.org/EIPS/eip-4844) +- [Vitalik 討論分片與資料可用性取樣](https://hackmd.io/@vbuterin/sharding_proposal) + +### 硬體 {#hardware} + +在普通的硬體上 [運行節點](/developers/docs/nodes-and-clients/run-a-node/) 是使以太坊保持去中心化的基礎。 所以,最大程度上降低運行節點的硬體需求的活躍研究是重要的研究領域。 + +#### 背景介紹讀物 {#background-reading-5} + +- [ARM 架構上的以太坊](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) + +#### 近期研究 {#recent-research-5} + +- [FPGA 上的橢圓曲線數位簽章演算法](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) + +## 安全性 {#security} + +安全性是個廣泛的議題,可能包含了垃圾郵件/詐騙預防、錢包安全、硬體安全、加密經濟安全、漏洞懸賞、應用程式和用戶端軟體的偵錯和測試及金鑰管理。 貢獻這些領域的知識將有助於加速主流採用。 + +### 密碼學與零知識證明 {#cryptography--zkp} + +零知識證明 (ZKP) 和密碼學都對在以太坊和其應用程式上實現隱私性及安全性非常重要。 零知識是一個相對新穎但快速發展的領域,有許多開放研究與開發機會。 一些可能的機會包括開發更高效的 [Keccak 雜湊演算法](https://hackmd.io/sK7v0lr8Txi1bgION1rRpw?view#Overview) 實作、找到比現存更好的多項式承諾,或降低產生橢圓曲線簽章演算法公鑰和簽章驗證電路的成本。 + +#### 背景介紹讀物 {#background-reading-6} + +- [0xparc 部落格](https://0xparc.org/blog) +- [zkp.science](https://zkp.science/) +- [零知識播客](https://zeroknowledge.fm/) + +#### 近期研究 {#recent-research-6} + +- [橢圓曲線密碼學的近期進展](https://ethresear.ch/t/the-ec-fft-algorithm-without-elliptic-curve-and-isogenies/11346) +- [Ethresear.ch 零知識](https://ethresear.ch/c/zk-s-nt-arks/13) + +### 錢包 {#wallets} + +以太坊錢包可以是瀏覽器擴充功能、桌上型電腦和行動應用程式,又或者是以太坊上的智慧型合約。 目前正在積極研究社交恢復錢包,該錢包可以降低與個人使用者金鑰管理相關的風險。 與錢包開發相關的是研究帳戶抽象的替代形式,這是新興研究的一個重要領域。 + +#### 背景介紹讀物 {#background-reading-7} + +- [錢包簡介](/wallets/) +- [錢包安全簡介](/security/) +- [ethresear.ch 安全性](https://ethresear.ch/tag/security) +- [EIP-2938 帳戶抽象](https://eips.ethereum.org/EIPS/eip-2938) +- [EIP-4337 帳戶抽象](https://eips.ethereum.org/EIPS/eip-4337) + +#### 近期研究 {#recent-research-7} + +- [專注於智慧型合約錢包的驗證](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [帳戶的未來](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [EIP-3074 AUTH 和 AUTHCALL 操作碼](https://eips.ethereum.org/EIPS/eip-3074) +- [在外部帳戶地址發佈程式碼](https://eips.ethereum.org/EIPS/eip-5003) + +## 社群、教育及外展 {#community-education-and-outreach} + +讓新的使用者加入以太坊需要新的教育資源及外展方法。 這可能包括部落格文章、書籍、播客、迷因、教學資源、活動以及任何建構社群、迎接新手及教授人們以太坊相關知識所需的資源。 + +### 使用者體驗/介面 {#uxui} + +為了讓更多人加入以太坊生態系統,必須改進使用者體驗/介面。 這需要設計師和產品專家重新檢視錢包和應用程式的設計。 + +#### 背景介紹讀物 {#background-reading-8} + +- [Ethresear.ch 使用者體驗/介面](https://ethresear.ch/c/ui-ux/24) + +#### 近期研究 {#recent-research-8} + +- [Web3 設計 Discord](https://discord.gg/FsCFPMTSm9) +- [Web3 設計原則](https://www.web3designprinciples.com/) +- [Ethereum Magicians 使用者體驗討論](https://ethereum-magicians.org/t/og-council-ux-follow-up/9032/3) + +### 經濟學 {#economics} + +以太坊的經濟學研究主要遵循兩種方法:驗證依賴經濟激勵之機制的安全性(「微觀經濟學」),以及分析協定、應用程式和使用者間的價值流動(「宏觀經濟學」)。 以太坊的原生資產(以太幣)和基於以太幣建構的代幣(例如非同質化代幣和 ERC20 代幣)存在著複雜的加密經濟因素。 + +#### 背景介紹讀物 {#background-reading-9} + +- [穩健激勵群組](https://ethereum.github.io/rig/) +- [Devconnect 上的 ETHconomics 研討會](https://www.youtube.com/playlist?list=PLTLjFJ0OQOj5PHRvA2snoOKt2udVsyXEm) + +#### 近期研究 {#recent-research-9} + +- [EIP1559 的實證分析](https://arxiv.org/abs/2201.05574) +- [流通供應量平衡](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954) +- [量化最大可提取價值:森林究竟有多黑暗?](https://arxiv.org/abs/2101.05511) + +### 區塊空間與費用市場 {#blockspace-fee-markets} + +區塊空間市場管理最終使用者交易的納入,無論是直接在以太坊(一層網路)上還是在橋接網路上,例如卷軸(二層網路)。 在以太坊上,交易會被提交到作為 EIP-1559 部署的費用市場,以保護鏈免於垃圾郵件及定價堵塞。 在這兩層上,交易都可能產生外部效應,如最大可提取價值 (MEV),這會導致產生新的市場結構來獲取或管理這些外部效應。 + +#### 背景介紹讀物 {#background-reading-10} + +- [為以太坊區塊鏈設計的交易費機制:EIP-1559 的經濟學分析(Tim Roughgarden,2020 年)](https://timroughgarden.org/papers/eip1559.pdf) +- [EIP-1559 模擬(穩健激勵群組)](https://ethereum.github.io/abm1559) +- [由第一原理瞭解卷軸經濟](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) +- [Flash Boys 2.0:去中心化交易所的交易搶跑、交易重新排序和共識不穩定性](https://arxiv.org/abs/1904.05234) + +#### 近期研究 {#recent-research-10} + +- [多維度 EIP-1559 影片展示](https://youtu.be/QbR4MTgnCko) +- [跨域最大可提取價值](http://arxiv.org/abs/2112.01472) +- [最大可提取價值競價](https://ethresear.ch/t/mev-auction-auctioning-transaction-ordering-rights-as-a-solution-to-miner-extractable-value/6788) + +### 權益證明激勵 {#proof-of-stake-incentives} + +驗證者使用以太坊的原生資產(以太幣)作為對抗不誠實行為的抵押品。 其加密經濟學決定了網路的安全性。 經驗老道的驗證者可利用激勵層的細微差別發動明確的攻擊。 + +#### 背景介紹讀物 {#background-reading-11} + +- [精通以太坊經濟學課程與經濟模型](https://github.com/CADLabs/ethereum-economic-model) +- [權益證明激勵模擬(穩健激勵群組)](https://ethereum.github.io/beaconrunner/) + +#### 近期研究 {#recent-research-11} + +- [在提交者/建置者分離 (PBS) 機制下提升交易的抗審查性](https://notes.ethereum.org/s3JToeApTx6CKLJt8AbhFQ) +- [權益證明以太坊上的三種攻擊方式](https://arxiv.org/abs/2110.10086) + +### 流動性質押和衍生品 {#liquid-staking-and-derivatives} + +流動性質押藉由將以太幣兌換成一種代表質押以太幣,且可以用於去中心化金融的代幣,讓持有低於 32 個以太幣的使用者也能獲得質押收益。 然而,流動性質押相關的激勵和市場動態仍在發掘階段,它對以太坊安全性的影響(例如中心化風險)亦然。 + +#### 背景介紹讀物 {#background-reading-12} + +- [Ethresear.ch 流動性質押](https://ethresear.ch/search?q=liquid%20staking) +- [Lido:邁向去信任的以太坊質押之路](https://blog.lido.fi/the-road-to-trustless-ethereum-staking/) +- [Rocket Pool:質押協定介紹](https://medium.com/rocket-pool/rocket-pool-staking-protocol-part-1-8be4859e5fbd) + +#### 近期研究 {#recent-research-12} + +- [處理從 Lido 提款](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-stake-protocol/8873) +- [提款憑證](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) +- [流動性質押衍生品的風險](https://notes.ethereum.org/@djrtwo/risks-of-lsd) + +## 測試 {#testing} + +### 形式化驗證 {#formal-verification} + +形式化驗證透過編寫程式碼來驗證以太坊共識規範正確無誤且沒有錯誤。 此規範有個以 Python 撰寫的可執行版本,需要維護和開發。 進一步的研究可以幫助改進規範的 Python 實作,並新增一些能夠更穩健地驗證正確性和偵測問題的工具。 + +#### 背景介紹讀物 {#background-reading-13} + +- [形式化驗證簡介](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) +- [形式化驗證 (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) + +#### 近期研究 {#recent-research-13} + +- [存款合約的形式化驗證](https://github.com/runtimeverification/deposit-contract-verification) +- [信標鏈規範的形式化驗證](https://github.com/runtimeverification/deposit-contract-verification) + +## 資料科學與分析 {#data-science-and-analytics} + +需要更多能夠提供以太坊活動及網路健康度詳細資訊的資料分析工具和儀表板。 + +### 背景介紹讀物 {#background-reading-14} + +- [Dune Analytics](https://dune.com/browse/dashboards) +- [用戶端多樣性儀表板](https://clientdiversity.org/) + +#### 近期研究 {#recent-research-14} + +- [穩健激勵群組資料分析](https://ethereum.github.io/rig/) + +## 應用程式和工具 {#apps-and-tooling} + +應用層支援多種程式生態系統,可在以太坊基礎層上結算交易。 開發團隊一直在尋找新方法,以利用以太坊建立可組合、無許可和抗審查的重要 Web2 應用程式,或建立全新的 Web3 原生概念。 於此同時,新的專用工具被開發出來,使在以太坊上建構應用程式不太複雜。 + +### 去中心化金融 {#defi} + +去中心化金融 (DeFi) 是建立在以太坊之上的主要應用程式類別之一。 去中心化金融旨在建立可組合的「貨幣樂高」,讓使用者可以透過智慧型合約儲存、轉移、出借、借用和投資加密資產。 去中心化金融是發展快速且常常更新的領域。 需要持續對安全、效率及可存取協定進行研究。 + +#### 背景介紹讀物 {#background-reading-15} + +- [去中心化金融](/defi/) +- [Coinbase:去中心化金融是什麼?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) + +#### 近期研究 {#recent-research-15} + +- [去中心化金融,中心化所有權?](https://arxiv.org/pdf/2012.09306.pdf) +- [Optimism:邁向低於一美元交易費用之路](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) + +### 去中心化自治組織 {#daos} + +以太坊一個頗具影響力的使用案例是透過使用去中心化自治組織,以去中心化的方式進行整合。 目前,有許多活躍的研究,關乎如何開發和利用以太坊上的去中心化自治組織,將其作為一種所需信任最小化的協調工具,大幅擴展了人們的選擇,不在限於傳統公司和組織。 + +#### 背景介紹讀物 {#background-reading-16} + +- [去中心化自治組織簡介](/dao/) +- [去中心化自治組織集合](https://daocollective.xyz/) + +#### 近期研究 {#recent-research-16} + +- [規劃去中心化自治組織生態系統](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) + +### 開發者工具 {#developer-tools} + +為以太坊開發者打造的工具日新月異。 在這個領域中,有許多活躍的研究和開發工作要做。 + +#### 背景介紹讀物 {#background-reading-17} + +- [依程式語言分類的開發工具](/developers/docs/programming-languages/) +- [開發者框架](/developers/docs/frameworks/) +- [共識開發者工具列表](https://github.com/ConsenSys/ethereum-developer-tools-list) +- [代幣標準](/developers/docs/standards/tokens/) +- [CryptoDevHub:以太坊虛擬機工具](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) + +#### 近期研究 {#recent-research-17} + +- [以太坊研發 Discord 的共識工具頻道](https://discordapp.com/channels/595666850260713488/746343380900118528) + +### 預言機 {#oracles} + +預言機透過無需許可和去中心化的方式將鏈下資料匯入區塊鏈上。 將此資料上鏈使去中心化應用程式可對現實世界的現象做出反應,如現實世界的資產價格波動、鏈下應用程式的事件,甚至是天氣變化。 + +#### 背景介紹讀物 {#background-reading-18} + +- [預言機簡介](/developers/docs/oracles/) + +#### 近期研究 {#recent-research-18} + +- [區塊鏈預言機調查](https://arxiv.org/pdf/2004.07140.pdf) +- [Chainlink 白皮書](https://chain.link/whitepaper) + +### 應用程式安全性 {#app-security} + +一般發生在以太坊上的攻擊都是利用單一應用程式的漏洞,而非協定本身的漏洞。 駭客和應用程式開發者正在進行一場競賽,分別開發新的攻擊和防禦手段。 這表示研究和發展對保持應用程式的安全、遠離被駭一直都很重要。 + +#### 背景介紹讀物 {#background-reading-19} + +- [Wormhole 漏洞報告](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) +- [遭駭以太坊合約事後分析列表](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) +- [Rekt 新聞](https://twitter.com/RektHQ?s=20\&t=3otjYQdM9Bqk8k3n1a1Adg) + +#### 近期研究 {#recent-research-19} + +- [ethresear.ch 應用程式](https://ethresear.ch/c/applications/18) + +### 技術堆疊 {#technology-stack} + +整個以太坊技術堆疊的去中心化是個重要的研究領域。 目前,以太坊上的去中心化應用程式有不同程度的中心化,因為它們依賴中心化工具或基礎設施。 + +#### 背景介紹讀物 {#background-reading-20} + +- [以太坊堆疊](/developers/docs/ethereum-stack/) +- [Coinbase:Web3 堆疊簡介](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) +- [智慧型合約簡介](/developers/docs/smart-contracts/) +- [去中心化儲存簡介](/developers/docs/storage/) + +#### 近期研究 {#recent-research-20} + +- [智慧型合約的可組合性](/developers/docs/smart-contracts/composability/) diff --git a/public/content/translations/zh-tw/14) Community Pages/community/support/index.md b/public/content/translations/zh-tw/14) Community Pages/community/support/index.md new file mode 100644 index 00000000000..df0cd880b9c --- /dev/null +++ b/public/content/translations/zh-tw/14) Community Pages/community/support/index.md @@ -0,0 +1,104 @@ +--- +title: 以太坊支援 +description: 在以太坊生態系統內獲取支援。 +lang: zh-tw +--- + +# 以太坊支援 {#support} + +## 官方提供的以太坊支援 {#official-support} + +你正在尋找官方的以太坊支援嗎? 第一件你應該知道的事情是以太坊為去中心化。 這代表沒有中心組織、實體或個體會持有以太坊,也因此沒有官方支援頻道。 + +明白以太坊的去中心化本質十分重要,因為任何聲稱是以太坊官方支援的人都可能正試圖欺詐你! 預防騙徒的最佳保護措施是自我教育,並認真看待網路安全。 + + + 以太坊安全及詐騙預防 + + + + 學習以太坊基礎知識 + + +儘管欠缺官方支援,很多以太坊生態系統上的團體、社群和專案都很樂意提供協助。你也能夠在此頁面找到很多有用的資訊及資源。 仍有疑問? 加入 [ethereum.org discord](/discord/),我們會嘗試提供幫助。 + +## 常見問題 {#faq} + +### 我一直往錯的錢包傳送以太幣 {#wrong-wallet} + +在以太坊進行的傳送不可還原。 不幸的是,如你已經將以太幣傳送至錯的錢包,便無法追回這些資金。 沒有中心組織、實體或個體持有以太坊,這代表沒有人能夠逆轉交易。 因此,在傳送交易前請務必進行雙重核查。 + +### 如何領取以太坊贈品? {#giveaway-scam} + +以太坊贈品是為了偷取你持有的以太幣而設計的騙局。 不要被一些高得不真實的回報率給欺騙 - 如果你將以太幣傳送至一個贈品地址,你將不會收到申領的贈品,而且你也不能索要賠償。 + +[有關防止詐騙的詳細資訊](/security/#common-scams) + +### 我的交易卡住了 {#stuck-transaction} + +如果你提交了一個低於所需的交易費,由於網路需求,你在以太坊上的交易有時可能會卡住。 很多錢包都會提供一個選項,重新用較高的手續費去提交同一筆交易,讓交易能夠順利進行。 另外,你還可以取消正在等待處理的交易。該動作能將一筆交易傳送到你持有的地址,然後使用與待處理交易相同的隨機數繼續。 + +[怎樣在 MetaMask 加速或者取消待完成交易](https://metamask.zendesk.com/hc/en-us/articles/360015489251-How-to-speed-up-or-cancel-a-pending-transaction) + +[怎樣取消待完成的以太坊交易](https://info.etherscan.com/how-to-cancel-ethereum-pending-transactions/) + +### 如何在以太坊挖礦? {#mining-ethereum} + +以太坊挖礦已不再可能。 當以太坊由[工作量證明](/glossary/#pow)過渡為[權益證明](/glossary/#pos)時,挖礦就已終止。 現在以太坊沒有礦工了,取而代之的是驗證者。 任何人都可以[質押](/glossary/#staking)以太幣,並透過執行驗證者軟體來保護網路,以獲得質押獎勵。 + +### 如何成為質押者/執行驗證者? {#how-to-stake} + +要成為驗證者,你必須在以太坊存款合約質押至少 32 個以太幣並設定驗證者節點。 更多資訊可以參考我們的[質押頁面](/staking)和[質押啟動面板](https://launchpad.ethereum.org/)。 + +## 開發去中心化應用程式 {#building-support} + +開發可能很難, 但一些專注於開發的空間上有樂意提供幫助,且經驗豐富的以太坊開發者。 + +- [Alchemy University](https://university.alchemy.com/#starter_code) +- [CryptoDevs discord](https://discord.com/invite/5W5tVb3) +- [Ethereum StackExchange](https://ethereum.stackexchange.com/) +- [StackOverflow](https://stackoverflow.com/questions/tagged/web3) +- [Web3 University](https://www.web3.university/) +- [LearnWeb3](https://discord.com/invite/learnweb3) + +你也可以在我們的[以太坊開發者資源](/developers/)部分找到文件和開發指南。 + +### 模組化 {#dapp-tooling} + +你的問題跟某個特定的質押池、專案或庫相關嗎? 多數專案都有專門為你提供支援的聊天伺服器或論壇。 + +常見示例有: + +- [Solidity](https://gitter.im/ethereum/solidity) +- [ethers.js](https://discord.gg/6jyGVDK6Jx) +- [web3.js](https://discord.gg/GsABYQu4sC) +- [安全帽](https://discord.gg/xtrMGhmbfZ) +- [Alchemy](http://alchemy.com/discord) +- [Tenderly](https://discord.gg/fBvDJYR) + +## 運行節點 {#node-support} + +如果你要運行一個節點或者驗證程式,有一些專門的社群可幫助你開始。 + +- [EthStaker discord](https://discord.gg/ethstaker) +- [EthStaker reddit](https://www.reddit.com/r/ethstaker) + +大部份開發以太坊用戶端的團隊也都有面向大眾的專有空間,你可在其中獲得支援及提出疑問。 + +### 執行用戶端 {#execution-clients} + +- [Geth](https://discord.gg/FqDzupGyYf) +- [Nethermind](https://discord.gg/YJx3pm8z5C) +- [Besu](https://discord.gg/p8djYngzKN) +- [Erigon](https://github.com/ledgerwatch/erigon/issues) +- [Reth](https://github.com/paradigmxyz/reth/discussions) + +### 共識用戶端 {#consensus-clients} + +- [Prysm](https://discord.gg/prysmaticlabs) +- [Nimbus](https://discord.gg/nSmEH3qgFv) +- [Lighthouse](https://discord.gg/cyAszAh) +- [Teku](https://discord.gg/7hPv2T6) +- [Lodestar](https://discord.gg/aMxzVcr) + +你也可以[在此學習如何運行節點](/developers/docs/nodes-and-clients/run-a-node/)。 diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/archive-nodes/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/archive-nodes/index.md" new file mode 100644 index 00000000000..32e2fbefaa5 --- /dev/null +++ "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/archive-nodes/index.md" @@ -0,0 +1,80 @@ +--- +title: 以太坊歸檔節點 +description: 歸檔節點概覽 +lang: zh-tw +sidebarDepth: 2 +--- + +歸檔節點是一個以太坊用戶端的實例,經設定用來建立所有歷史狀態的存檔。 它是某些用例的有用工具,但可能比運行一個全節點更加複雜。 + +## 先決條件 {#prerequisites} + +你應該瞭解[以太坊節點](/developers/docs/nodes-and-clients/)的概念,[其架構](/developers/docs/nodes-and-clients/node-architecture/)、[同步策略](/developers/docs/nodes-and-clients/#sync-modes)、[運行](/developers/docs/nodes-and-clients/run-a-node/)和[使用它們](/developers/docs/apis/json-rpc/)的實踐方法。 + +## 什麼是歸檔節點 + +要理解歸檔節點的重要性,讓我們先釐清「狀態」的概念。 以太坊可以被稱為_基於交易的狀態機_。 它包括了帳戶以及執行交易並改變帳戶狀態的應用程式。 有關每個帳戶和合約的全球數據儲存在一個稱為狀態的 字典樹資料庫中。 這由執行層 (EL) 用戶端處理,並包括: + +- 帳戶餘額和隨機數 +- 合約代碼與儲存 +- 共識相關資料,例如質押存款合約 + +為了與網路互動、驗證和產生新區塊,以太坊用戶端必須跟上最近的變化(鏈尖),因此需要知道當前狀態。 設定為全節點的執行層用戶端會驗證並跟隨網路的最新狀態,但只緩存過去的少數幾個狀態,例如與最後 128 個區塊相關的狀態,因此它可以處理鏈重組並快速存取最近的資料。 最近的狀態是所有用戶端需要用來驗證傳入交易和使用網路的資料。 + +你可以將狀態想像為給定區塊的瞬間網路快照,而將存檔視為歷史重播。 + +歷史狀態可以安全地修剪,因為它們對網路的運作並不必要,而且用戶端保留所有過時資料是無用的。 存在於某個最近區塊(例如區塊頭之前的 128 個區塊)之前的狀態實際上已被丟棄。 全節點只保留歷史區塊鏈資料(區塊和交易)以及可供全節點用來根據請求重新產生較早狀態的偶然歷史快照。 它們透過在以太坊虛擬機中重新執行過去的交易來實現這一點,當所需的狀態距離最近的快照很遠時,這可能在計算上要求很高。 + +然而,這意味著在全節點上存取歷史狀態會消耗大量的算力。 用戶端可能需要執行所有過去的交易並從創世塊計算一個歷史狀態。 歸檔節點透過不僅儲存最近的狀態,而且儲存每個區塊後建立的每個歷史狀態來解決這個問題。 它基本上是以更大的磁碟空間需求作為代價。 + +值得注意的是,網路並不依賴歸檔節點來保存和提供所有歷史資料。 如上所述,所有歷史中間狀態都可以在全節點上推導出來。 任何全節點都儲存交易(目前少於 400G),並且可以重播以建立整個存檔。 + +### 使用案例 + +發送交易、部署合約、驗證共識等常規的以太坊使用不需要存取歷史狀態。 使用者無需歸檔節點,就可以與網路進行標準互動。 + +狀態存檔的主要好處是可以快速存取歷史狀態查詢。 舉例來說,歸檔節點將即時返回以下結果: + +- _0x1337 帳戶在區塊 15537393 中的以太幣餘額是多少?_ +- _0x 合約在區塊 1920000 中的 0x 代幣餘額是多少?_ + +如上所述,全節點會需要透過以太坊虛擬機執行以產生此資料,這會使用 CPU 並花費時間。 歸檔節點在磁碟上存取它們,且立即回應。 對一些特定基礎設施來說,這非常有用,例如: + +- 服務提供者,如區塊瀏覽器 +- 研究者 +- 安全分析師 +- 去中心化應用程式開發者 +- 審計和合規 + +也有各種免費的[服務](/developers/docs/nodes-and-clients/nodes-as-a-service/)可以存取歷史資料。 由於運行歸檔節點要求更高,因此這種存取往往受到限制,且只適用於偶爾存取。 如果你的專案需要持續存取歷史資料,你應該考慮運行一個自己的歸檔節點。 + +## 實作和使用 + +歸檔節點在此處表示由面向使用者的執行層用戶端提供的資料,因為它們處理狀態資料庫並提供 JSON-RPC 端點。 設定選項、同步時間和資料庫大小可能因用戶端而異。 詳細資訊請參考你的用戶端提供的文檔。 + +在開始建立你的歸檔節點前,請先了解用戶端之間的差異,尤其是[硬體要求](/developers/docs/nodes-and-clients/run-a-node/#requirements)的部分。 多數用戶端沒有最佳化這個部分,且它們的存檔需要超過 12TB 的儲存空間。 與如 Erigon 的實作對比,Erigon 可以在低於 3TB 的空間儲存相同的資料,使其成為運行歸檔節點最有效率的方式。 + +## 推薦的做法 + +除了一般的[運行節點建議](/developers/docs/nodes-and-clients/run-a-node/)外,歸檔節點可能更注重硬體和維護。 考慮到 Erigon 的[關鍵功能](https://github.com/ledgerwatch/erigon#key-features),最實用的方法是使用 [Erigon](/developers/docs/nodes-and-clients/#erigon)用戶端實作。 + +### 硬體 + +永遠在用戶端文檔中確認滿足了特定模式的硬體要求。 對歸檔節點來說,最大的需求是磁碟空間。 取決於用戶端的不同,可能從 3TB 到 12TB 都有。 雖然硬碟被認為可能是儲存大量資料的更好辦法,但同步資料和不斷地更新鏈頭需要固態硬碟。 [SATA](https://www.cleverfiles.com/help/sata-hard-drive.html) 硬碟足夠好,但它要有可靠的品質,至少要 [TLC](https://blog.synology.com/tlc-vs-qlc-ssds-what-are-the-differences)。 磁碟可以安裝在有足夠插槽的桌機或伺服器中。 這些專用設備適合需要長時間正常運行的節點。 在筆電上運行也是完全可行的,但便攜性將帶來額外的成本。 + +所有的資料都需要放入一個磁碟區中,所以磁碟必須合併,如 [RAID0](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0) 或 [LVM](https://web.mit.edu/rhel-doc/5/RHEL-5-manual/Deployment_Guide-en-US/ch-lvm.html)。 或許 [ZFS](https://en.wikipedia.org/wiki/ZFS) 也是值得考慮的選擇,因為它支援「寫入時複製」,確保了資料正確寫入磁碟而沒有任何低階錯誤。 + +關於更多避免資料庫損毀的穩定安全方法,特別是專業設定中,如果你的系統支援,可以考慮 [ECC 記憶體](https://en.wikipedia.org/wiki/ECC_memory)。 RAM 的大小一般建議和全節點一樣,但更多的 RAM 可以加速同步速度。 + +在初始同步時,在歸檔模式的用戶端會執行自創世塊以來的每個交易。 執行速度大多時候受到 CPU 限制,所以更快的 CPU 對減少初始同步時間有幫助。 在平均水準的消費級電腦上,初始同步可能會長達一個月。 + +## 了解更多 {#further-reading} + +- [以太坊全節點與歸檔節點](https://www.quicknode.com/guides/infrastructure/ethereum-full-node-vs-archive-node) - _QuickNode,2020 年 9 月_ +- [建立你自己的以太坊歸檔節點](https://tjayrush.medium.com/building-your-own-ethereum-archive-node-72c014affc09) - _Thomas Jay Rush,2021 年 8 月_ +- [如何設定 Erigon、Erigon 的 RPC 和 TrueBlocks(抓取和應用程式介面)作為服務](https://magnushansson.xyz/blog_posts/crypto_defi/2022-01-10-Erigon-Trueblocks) _ - Magnus Hansson,2022 年 9 月更新_ + +## 相關主題 {#related-topics} + +- [節點和用戶端](/developers/docs/nodes-and-clients/) +- [運行節點](/developers/docs/nodes-and-clients/run-a-node/) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/bootnodes/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/bootnodes/index.md" new file mode 100644 index 00000000000..794f763ab75 --- /dev/null +++ "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/bootnodes/index.md" @@ -0,0 +1,31 @@ +--- +title: 以太坊引導節點介紹 +description: 你需要知道的引導節點基礎資訊 +lang: zh-tw +--- + +當一個新節點加入以太坊網路時,它需要連接至網路上已經存在的其他節點,以找到新的對等節點。 這些以太坊網路的進入點被稱為引導節點。 用戶端中通常有個硬編碼進去的引導節點清單。 這些引導節點通常由以太坊基金會的 DevOps 團隊或客戶團隊自身負責運行。 注意,引導節點與靜態節點不同。 靜態節點會被多次呼叫,而引導節點只有在沒有足夠的節點可以連接,或節點需要引導一些新連接時才會被呼叫。 + +## 連接至引導節點 {#connect-to-a-bootnode} + +大部分的用戶端中都有個內建的引導節點清單,但你也可能會想運行自己的引導節點,或者使用沒在用戶端硬編碼清單上的引導節點。 這種情況下,你可以在啟動用戶端時指定引導節點,如下所示(這個是 Geth 的例子,請查看你的用戶端文檔): + +``` +geth --bootnodes "enode://@:" +``` + +## 運行引導節點 {#run-a-bootnode} + +引導節點是不在 NAT([網路位址轉譯](https://www.geeksforgeeks.org/network-address-translation-nat/))後的全節點。 只要可以公開可用,每個全節點都可以作為引導節點。 + +當你啟動節點時,它會記錄你的 [enode](/developers/docs/networking-layer/network-addresses/#enode),這是可供其他人連接你的節點的公開識別碼。 + +通常每次啟動都會重新產生 enode,所以請務必查看你的用戶端文檔,以了解如何為你的引導節點產生永久的 enode。 + +要成為一個好的引導節點,增加該節點能連接的對等節點最大數量是個好辦法。 運行一個有許多對等節點的引導節點會顯著增加帶寬需求。 + +## 可用的引導節點 {#available-bootnodes} + +Go-ethereum 內建的引導節點清單可以在[此處](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go#L23)查看。 這些引導節點由以太坊基金會和 go-ethereum 團隊維護。 + +還有由志願者維護的引導節點的其他清單。 請確認至少包含一個官方的引導節點,否則你可能會受到日蝕攻擊。 diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/client-diversity/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/client-diversity/index.md" new file mode 100644 index 00000000000..fd54ff97e9b --- /dev/null +++ "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/client-diversity/index.md" @@ -0,0 +1,109 @@ +--- +title: 用戶的多樣化 +description: 對以太坊用戶端多樣性的重要性的高階解釋。 +lang: zh-tw +sidebarDepth: 2 +--- + +以太坊節點的行為是由它所運行的用戶端軟體控制。 有許多生產等級的以太坊用戶端,每個用戶端都由不同團隊以不同程式語言開發和維護。 用戶端是以相同規範建立的,以確保用戶端彼此可以無縫互相通訊,且具有相同的功能及提供相等的使用者體驗。 然而,目前節點間的用戶端分佈仍然不夠均勻,無法充分發揮這種網路強化的潛力。 理想上,使用者大致平均分配到各個用戶端,以為網路帶來儘可能多的用戶端多樣性。 + +## 前置要求 {#prerequisites} + +如果你還不了解節點和用戶端是什麼,請先閱讀[節點和用戶端](/developers/docs/nodes-and-clients/)。 [執行](/glossary/#execution-layer)和[共識](/glossary/#consensus-layer)層在術語表中有定義。 + +## 為什麼會有多樣化的用戶端呢? {#why-multiple-clients} + +存在多種獨立開發和維護的用戶端是有利的,因為用戶端多樣性使網路應對攻擊和錯誤時更有彈性。 多種用戶端是以太坊獨有的優勢 - 其他區塊鏈依賴單一用戶端的正確性。 然而,只擁有多種用戶端還不夠,它們必須被社群採用,且活躍的節點在它們間需要相對平均分佈。 + +## 為什麼用戶端多樣化重要? {#client-diversity-importance} + +有許多獨立開發和維護的用戶端對去中心化網路的健康十分重要。 讓我們探索一下其中原因。 + +### 錯誤 {#bugs} + +當單一用戶端中存在錯誤,如果該用戶端只代表少數以太坊節點時,對網路的風險較小。 節點在許多用戶端上分佈大致均勻,大多數用戶端遭受共同問題的可能性很小,網路因此更加穩健。 + +### 對攻擊的抗性 {#resilience} + +用戶端多樣性提供了攻擊抗性。 舉例來說,一個[欺騙特定用戶端](https://twitter.com/vdWijden/status/1437712249926393858)切換到特定分支鏈的攻擊不太可能成功,因為其他的用戶端不太可能以相同方式被利用,且規範鏈維持正常不變。 低用戶端多樣性會增加主導用戶端被駭的風險。 用戶端多樣性已被證明是抵禦網路上惡意攻擊的重要防禦,舉例來說 2016 年的上海阻斷服務攻擊是可能成功的,因為攻擊者能夠欺騙主導用戶端 (Geth) 在每個區塊中執行數千萬次的慢速磁碟讀寫操作。 因為替代用戶端同時在線且沒有同樣的漏洞,以太坊才得以在修復 Geth 的漏洞期間抵禦攻擊並持續運行。 + +### 權益證明最終確定性 {#finality} + +超過 33% 的以太坊節點共識用戶端中都存在的錯誤可能會阻止共識層的最終確定,這表示使用者沒辦法相信交易在某個時刻不會被撤銷或更改。 這對建立在以太坊上的許多應用程式是非常大的問題,尤其是去中心化金融。 + + 更糟糕的是,在兩三個主流用戶端中的重大錯誤可能會導致鏈錯誤地分叉和最終確定,使大量的驗證者被卡在無效的鏈上。 如果這些驗證者想重新加入正確的鏈,它們可能會面臨罰沒或緩慢且昂貴的自願提款和重新啟用流程。 罰沒的規模與有罪節點的數量成正比,其中三分之二的主流節點會被罰沒最高金額(32 以太幣)。 + +雖然這些情況不太可能發生,以太坊生態系可以透過平均分佈用戶端至各個活躍節點以降低風險。 理想上,不會有共識用戶端超過總節點數的 33%。 + +### 共同的責任 {#responsibility} + +擁有主流用戶端也有人力成本問題。 它為小型開發團隊帶來了過多壓力和責任。 越低的用戶端多樣性,會使得開發者維護主流用戶端的負擔更重。 將此責任分散至多個團隊,對以太坊網路上的節點和網路上的開發者的健康都有益。 + +## 目前的用戶端多樣性 {#current-client-diversity} + +![圓餅圖顯示了用戶端多樣性](./client-diversity.png) _圖表資料來自 [ethernodes.org](https://ethernodes.org) 和 [ clientdiversity.org](https://clientdiversity.org/)_ + +上方的兩個圓餅圖顯示了目前執行層和共識層用戶端上的節點多樣性的快照(2022 年 1 月撰文時)。 執行層由 [Geth](https://geth.ethereum.org/) 壓倒性地主導,[Open Ethereum](https://openethereum.github.io/) 排名第二,[Erigon](https://github.com/ledgerwatch/erigon) 第三,[Nethermind](https://nethermind.io/) 第四,其他用戶端相加還不到整個網路的 1%。 最常在共識層上被使用的用戶端 - [Prysm](https://prysmaticlabs.com/#projects) - 的主導地位不及 Geth,但還是佔了超過整個網路的 60%。 [Lighthouse](https://lighthouse.sigmaprime.io/) 和 [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) 分別佔約 20% 和 14%,其他用戶端則很少被使用。 + +執行層資料是在 2022 年 1 月 23 日從 [Ethernodes](https://ethernodes.org) 取得的。 共識層的資料是從 [Michael Sproul](https://github.com/sigp/blockprint) 取得的。 共識層資料較難取得,因為共識層用戶端並不總是有可用於識別它們的明確足跡。 該資料是使用分類演算法產生的,有時候會把一些小眾用戶端搞混(點按[此處](https://twitter.com/sproulM_/status/1440512518242197516)以獲得更多資訊)。 上圖中,這些不明確的分類使用了「/」或標籤(例如 Nimbus/Teku)標示。 儘管如此,很顯然主要網路都在運行 Prysm。 此資料是一組固定區塊的快照(在這個例子中是時隙 2048001 至 2164916 中的信標區塊),Prysm 的主導地位有時更高,超過了 68%。 儘管只是快照,但圖中的數值提供了我們目前整體用戶端多樣性狀態的良好認識。 + +現在已可在 [clientdiversity.org](https://clientdiversity.org/) 上查看共識層的最新用戶端多樣性資料。 + +## 執行層 {#execution-layer} + +直到現在,關於用戶端多樣性的討論主要集中在共識層。 然而,執行用戶端 [Geth](https://geth.ethereum.org) 目前約佔所有節點的 85%。 這個比例問題很大,與共識用戶端的原因一樣。 舉例來說,Geth 中影響交易處理或建立執行有效負載的錯誤可能會導致共識用戶端最終確定有問題或錯誤的交易。 因此,如果執行用戶端分佈狀況更均勻,以太坊將更加健康,理想情況下不該有用戶端網路佔比超過 33%。 + +## 使用小眾用戶端 {#use-minority-client} + +解決用戶端多樣性需要的不只是個人使用者選擇小眾用戶端 - 它還需要挖礦/驗證者池及主要去中心化應用程式和交易所等機構更換用戶端。 然而,所有使用者都可以儘自己的一份力量,以糾正目前的不平衡,並讓所有可用的以太坊軟體使用分佈正常化。 合併後,所有節點營運者都需要運行執行用戶端和共識用戶端。 選擇以下推薦的用戶端組合,可幫助提升用戶端多樣性。 + +### 執行客戶 {#execution-clients} + +[Besu](https://www.hyperledger.org/use/besu) + +[Nethermind](https://downloads.nethermind.io/) + +[Erigon](https://github.com/ledgerwatch/erigon) + +[Go-Ethereum](https://geth.ethereum.org/) + +### 共識用戶端 {#consensus-clients} + +[Nimbus](https://nimbus.team/) + +[Lighthouse](https://github.com/sigp/lighthouse) + +[Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) + +[Lodestar](https://github.com/ChainSafe/lodestar) + +[Prysm](https://docs.prylabs.network/docs/getting-started) + +技術性使用者可以透過為小眾用戶端撰寫更多教學和文檔,並鼓勵其節點營運的對等節點從主導用戶端遷出,以幫助加速此流程。 [clientdiversity.org](https://clientdiversity.org/) 上有切換到小眾共識用戶端的指南。 + +## 用戶端多樣性儀表板 {#client-diversity-dashboards} + +一些儀表板提供了執行層和共識層上即時的用戶端多樣性統計資料。 + +**共識層:** + +- [Rated.network](https://www.rated.network/) +- [clientdiversity.org](https://clientdiversity.org/) **執行層:** + +- [supermajority.info](https://supermajority.info//) +- [Ethernodes](https://ethernodes.org/) + +## 衍生閱讀 {#further-reading} + +- [以太坊共識層上的用戶端多樣性](https://mirror.xyz/jmcook.eth/S7ONEka_0RgtKTZ3-dakPmAHQNPvuj15nh0YGKPFriA) +- [以太坊合併:運行主流用戶端需自行承擔風險!](https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html) – _Dankrad Fiest,2022 年 3 月 24 日_ +- [用戶端多樣性的重要性](https://our.status.im/the-importance-of-client-diversity/) +- [以太坊節點服務清單](https://ethereumnodes.com/) +- [用戶端多樣性的「五個為什麼」](https://notes.ethereum.org/@afhGjrKfTKmksTOtqhB9RQ/BJGj7uh08) +- [以太坊多樣性及如何解決 (YouTube)](https://www.youtube.com/watch?v=1hZgCaiqwfU) +- [clientdiversity.org](https://clientdiversity.org/) + +## 相關主題 {#related-topics} + +- [運行以太坊節點](/run-a-node/) +- [節點與用戶端](/developers/docs/nodes-and-clients/) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/index.md" new file mode 100644 index 00000000000..5e6184393d0 --- /dev/null +++ "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/index.md" @@ -0,0 +1,307 @@ +--- +title: 節點和客戶 +description: 以太坊節點及用戶端軟體概述,以及如何設定節點和你為何應該這麼做。 +lang: zh-tw +sidebarDepth: 2 +--- + +以太坊是一個由許多電腦(稱為節點)組成的分散式網路,這些節點運行能夠驗證區塊和交易資料的軟體。 這些軟體必須於你的電腦上運行,將電腦轉換成以太坊節點。 一個節點由兩個獨立的軟體(稱為「用戶端」)組成。 + +## 基本資訊 {#prerequisites} + +在深入研究並執行屬於你的以太坊用戶端實例之前,你應該瞭解點對點網路的概念和[以太坊虛擬機基礎知識](/developers/docs/evm/)。 請參閱[以太坊簡介](/developers/docs/intro-to-ethereum/)。 + +如果你對節點這個主題還很陌生,推薦你首先查看我們適合使用者的[運行以太坊節點](/run-a-node)簡介。 + +## 什麼是節點與用戶端? {#what-are-nodes-and-clients} + +「節點」是指以太坊用戶端軟體的任何實例,該用戶端軟體連線到其他也在運行以太坊軟體的電腦,進而形成網路。 用戶端是以太坊的實作,根據協定規則驗證資料,並保持網路安全。 一個節點必須運行兩個用戶端:共識用戶端和執行用戶端。 + +- 執行用戶端(又稱為執行引擎,EL 用戶端或舊稱為 以太坊 1 用戶端)監聽網路上廣播的新交易,在以太坊虛擬機器 (EVM) 中執行交易,並保存所有目前以太坊資料的最新狀態和資料庫。 +- 共識用戶端(又稱為信標鏈節點、CL 用戶端或舊稱為以太坊 2 用戶端)執行權益證明共識演算法,使網路能夠依據來自執行用戶端的驗證過的資料達成一致。 此外,還有第三個軟體,稱為「驗證者」;驗證者可以被新增到共識用戶端中,讓節點能參與保護網路安全。 + +這些用戶端共同運作以追蹤以太坊區塊鏈的頭部並使用戶可以和以太坊網路互動。 這種多個軟體協同工作的模組化設計稱為[封裝複雜性](https://vitalik.eth.limo/general/2022/02/28/complexity.html)。 此方法可以更簡單地無縫執行[合併](/roadmap/merge),讓用戶端軟體更容易維運和開發,並能重複利用個別的用戶端,例如在[二層網路生態系統](/layer-2/)中使用。 + +![關聯的執行和共識用戶端](./eth1eth2client.png) 關聯的執行用戶端和共識用戶端的簡化示意圖。 + +### 用戶的多樣化 {#client-diversity} + +[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)和[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)存在於由不同團隊開發的多種程式語言中。 + +多種用戶端實作可以降低對單一程式碼庫的依賴,從而使網路更強大。 理想目標是達到多樣性,沒有任一用戶端在網路中佔有主導地位,從而消除潛在的單點故障。 語言多樣化也可以吸引更廣泛的開發者社群,並讓他們可以用自己偏好的語言來建立整合。 + +瞭解更多關於[用戶端多樣化](/developers/docs/nodes-and-clients/client-diversity/)的資訊。 + +這些實作的共通點就是都遵循一套統一規範。 這些規範決定以太坊網路和區塊鏈的運作方式。 所有的技術細節都已經定義,規範如下: + +- 最初的[以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf) +- [執行規範](https://github.com/ethereum/execution-specs/) +- [共識規範](https://github.com/ethereum/consensus-specs) +- 各種[網路升級](/history/)中實作的[以太坊改善提議](https://eips.ethereum.org/) + +### 追蹤網路中的節點 {#network-overview} + +多種追蹤器提供以太坊網路中節點的即時概覽。 必須注意,由於去中心化網路的特性,這些爬蟲僅能提供有限的網路資訊,並且可能會報告不同的結果。 + +- Etherscan 提供的[節點地圖](https://etherscan.io/nodetracker) +- Bitfly 提供的[Ethernodes](https://ethernodes.org/) +- Chainsafe 提供的 [Nodewatch](https://www.nodewatch.io/),爬取共識節點 + +## 節點類型 {#node-types} + +如果你想[運行你自己的節點](/developers/docs/nodes-and-clients/run-a-node/),你需要瞭解:不同類型的節點以不同的方式消耗資料。 事實上,用戶端可以運行三種類型的節點:輕節點、全節點和歸檔節點。 還可以選擇不同的同步策略,從而達成更快的同步時間。 同步是指取得以太坊最新狀態資訊的速度。 + +### 全節點 {#full-node} + +全節點對區塊鏈上的區塊逐一驗證,包括下載和驗證每個區塊的區塊體和狀態資料。 全節點有不同的類型 - 一些全節點會從初始區塊開始,驗證整個區塊鏈歷史上的每一個區塊。 另外一些全節點,僅從較近期的、它們認為有效的區塊開始驗證(例如:Geth 的 「快照同步」)。 不論從哪裡開始,全節點僅保留相對近期的資料(通常是最新的 128 個區塊)的本機副本,允許刪除較舊的資料以節省磁碟空間。 舊的資料可以在需要時重新生成。 + +- 儲存完整區塊鏈資料(儘管會定期修剪,全節點並不會將所有狀態資料儲存回創世塊) +- 參與區塊驗證,驗證所有區塊和狀態。 +- 所有的狀態都可以從本機儲存中取得,或由全節點從「快照」中重新產生。 +- 為網路提供服務並根據請求提供資料。 + +### 歸檔節點 {#archive-node} + +從初始區塊開始驗證每一個區塊並且從不刪除任何已下載資料的全節點,稱為歸檔節點。 + +- 儲存全節點中保存的所有內容並建立歷史狀態檔案。 歸檔節點可供查詢鏈上資料,像是某個帳戶在第 #4,000,000 區塊的餘額,或是簡單可靠的測試一組自己的交易而無須使用追蹤功能來挖掘這些資料。 +- 這些資料量以兆位元為單位,因此歸檔節點對於一般使用者來說較沒有吸引力,但是對於區塊瀏覽器、錢包服務商、鏈分析則十分方便。 + +以檔案以外的任何模式同步用戶端都會導致區塊鏈資料被修剪。 這意味著,沒有所有歷史狀態的存檔,但全節點能夠按需建立該存檔。 + +瞭解更多關於[歸檔節點](/developers/docs/nodes-and-clients/archive-nodes)的資訊。 + +### 輕節點 {#light-node} + +相較於下載所有的區塊,輕節點僅下載區塊頭。 這些區塊頭包含了區塊內容的摘要資訊。 輕節點所需要的任何其他資訊,都須向全節點發送請求來取得。 然後,輕節點可以根據區塊頭中的狀態根獨立驗證接收的資料。 輕節點讓使用者能參與以太坊網路,而無需運行全節點所需的強大的硬體或高帶寬。 最終,輕節點可能可以在行動電話或是嵌入式裝置中運行。 輕節點並不參與共識(意即不能成為礦工/驗證者),但是可以存取以太坊區塊鏈,並具有與全節點相同的功能和安全保證。 + +輕量用戶端是以太坊積極發展的領域,我們預期很快可以看到共識層和執行層的輕量用戶端。 也有一些潛在的路徑可以透過[廣播網路](https://www.ethportal.net/)提供輕量用戶端資料。 這是有利的,因為廣播網路可以支援輕節點網路,而不需要全節點來處理請求。 + +以太坊目前還不支援大量的輕節點,但輕節點支援是預計在不久的將來會快速發展的領域。 特別像是 [Nimbus](https://nimbus.team/)、[Helios](https://github.com/a16z/helios) 及 [LodeStar](https://lodestar.chainsafe.io/) 等用戶端,目前都著重聚焦在輕節點。 + +## 運行以太坊節點之理由? {#why-should-i-run-an-ethereum-node} + +運行節點可以讓你直接、去信任並私密地使用以太坊,同時透過保持網路強健和去中心化來支持以太坊網路。 + +### 對你之好處 {#benefits-to-you} + +運行自己的節點讓你可以透過私密、自給自足和去信任的方式來使用以太坊。 你無須信任網路,因為你可以透過你的用戶端驗證資料。 「不要信任,要驗證」是流行的區塊鏈口號。 + +- 你的節點依據共識規則自行驗證所有交易和區塊。 這意味著你不必依賴或完全信任網路中的任何其他節點。 +- 你可以將自己的以太坊錢包與自己的節點一起使用。 你可以更安全和私密地使用去中心化應用程式,而不需要洩漏你的地址和餘額給中介機構。 一切都可以透過你的用戶端核實。 [MetaMask](https://metamask.io)、[Frame](https://frame.sh/) 和[許多其他錢包](/wallets/find-wallet/)都有提供遠端程序呼叫匯入,讓他們可以使用你的節點。 +- 你可以運行並自託管其他依賴以太坊資料的服務。 例如:信標鏈驗證者、諸如二層網路的軟體、基礎設施、區塊瀏覽器、支付處理商等等。 +- 你可以提供自己的自訂[遠端程序呼叫端點](/developers/docs/apis/json-rpc/)。 你甚至可以公開提供這些端點給社群,以協助他們避開大型中心化提供者。 +- 你可以透過**行程間通訊 (IPC)** 來連線到自己的節點,或者你可以重新編寫節點,使其能夠載入你的外掛程式。 這樣可以降低延遲,會帶來諸多好處,例如利用 web3 函式庫處理大量資料時,或是當你需要盡可能快速替換交易時(例如:預先交易)。 +- 你可以直接質押 ETH 來維護網路安全並賺取獎勵。 請參考[單獨質押](/staking/solo/)瞭解更多。 + +![你如何透過應用程式和節點存取以太坊](./nodes.png) + +### 網路優點 {#network-benefits} + +多樣化的節點對於以太坊的健康、安全和營運彈性非常重要。 + +- 全節點強制執行共識規則,因此不會被欺騙而接受不遵循這些規則的區塊。 這對網路提供了額外的安全性,因為如果所有的節點都是不執行完整驗證的輕節點,驗證者可以攻擊網路。 +- 如果攻擊攻破了[權益證明](/developers/docs/consensus-mechanisms/pos/#what-is-pos)的加密貨幣經濟防禦,全節點可以選擇追隨最誠實的區塊鏈,執行社交恢復。 +- 網路中的節點越多,就越能打造更多樣化和強韌的網路,這是去中心化的最終目的,提供一個抗審查且可靠的系統。 +- 全節點為依賴區塊鏈資料的輕量用戶端提供這些區塊鏈資料的存取權限。 輕節點不會儲存整個區塊鏈,而是透過[區塊頭中的狀態根](/developers/docs/blocks/#block-anatomy)來驗證資料。 若有需要,輕節點可以向全節點索取更多的資訊。 + +如果你運行一個全節點,整個以太坊網路均會受益,即便你沒有運行驗證者。 + +## 運行你自己的節點 {#running-your-own-node} + +有興趣運行自己的以太坊用戶端嗎? + +如需適合初學者的介紹,請造訪我們的[運行節點](/run-a-node)頁面以瞭解更多資訊。 + +如果你是技術性使用者,請瞭解有關如何[啟動自己的節點](/developers/docs/nodes-and-clients/run-a-node/)的更多資訊和選項。 + +## 替代方案 {#alternatives} + +設定自己的節點需要時間和資源,但你不一定需要自己運行。 在這種情況下,你可以使用第三方應用程式介面提供者。 有關使用這些服務的概述,請參閱[節點即服務](/developers/docs/nodes-and-clients/nodes-as-a-service/)。 + +如果在你的社群中,有人運行以太坊節點並提供公開應用程式介面,你可以透過自訂遠端程序呼叫將你的錢包指向社群節點,比起隨機選擇一個可信的第三方,可以獲得更多的隱私。 + +另一方面,如果你運行用戶端,可以與需要此用戶端的朋友分享。 + +## 執行用戶端 {#execution-clients} + +以太坊社群維護多個開源執行用戶端(以前稱為「以太坊 1 用戶端」,或直接稱為「以太坊用戶端」),這些用戶端由不同團隊使用不同程式語言開發。 這使網路更強大也更[多樣化](/developers/docs/nodes-and-clients/client-diversity/)。 理想目標是達成多樣性,沒有任一用戶端佔有主導地位,以減少單點故障。 + +此表總結了不同的用戶端。 所有這些用戶端都通過了[用戶端測試](https://github.com/ethereum/tests),並積極維護以保持最新的網路升級狀態。 + +| 用戶端 | 語言 | 作業系統 | 網路 | 同步策略 | 狀態修剪 | +| ---------------------------------------------------------------------- | ---------- | --------------------- | ------------------------- | -------------------------------------------------- | ------ | +| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync)、[完整](#full-sync) | 歸檔、已修剪 | +| [Nethermind](https://www.nethermind.io/) | C#、.NET | Linux、Windows、macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync) (不提供服務)、快速、[完整](#full-sync) | 歸檔, 緩衝 | +| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync)、[快速](#fast-sync)、[完整](#full-sync) | 歸檔, 緩衝 | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [完整](#full-sync) | 歸檔, 緩衝 | +| [Reth](https://reth.rs/) | Rust | Linux、Windows、macOS | Mainnet, Sepolia, Holesky | [完整](#full-sync) | 歸檔、已修剪 | +| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo)_(測試版)_ | TypeScript | Linux, Windows, macOS | Sepolia、Holesky | [完整](#full-sync) | 已修剪 | + +有關受支援網路的更多信息,請閱讀[以太坊網路](/developers/docs/networks/)。 + +每個用戶端都有獨特的用例和優勢,因此你應該根據自己的偏好進行選擇。 多樣化使實作能夠專注於不同的功能和使用者受眾。 你可能希望根據功能、支援、程式語言或許可證來選擇用戶端。 + +### Besu {#besu} + +Hyperledger Besu 是適用於公共和授權網路的企業級以太坊用戶端。 它運行所有以太坊主網功能,從追蹤到 GraphQL,具有廣泛的監控功能,並由 ConsenSys 在開放社群管道和企業商業 SLA 中提供支援。 它是用 Java 編寫的,並獲得 Apache 2.0 許可。 + +Besu 詳盡的 [文件](https://besu.hyperledger.org/en/stable/)會引導你學習其所有功能及設定的細節。 + +### Erigon {#erigon} + +Erigon,舊稱 Turbo‐Geth,最初為 Go Ethereum 的分叉,專注於速度與磁碟空間效率。 Eirgon 是完全重構過的以太坊實作,目前以 Go 語言編寫,而其他語言的實作仍在開發中。 Erigon 的目標是提供更快、更模組化、更優化的以太坊實作。 它可在 3 天內使用 2TB 磁碟空間完成完整歸檔節點同步。 + +### Go Ethereum {#geth} + +Go Ethereum(簡稱 Geth)是以太坊協定的原始實作之一。 目前,它是使用最廣泛的用戶端,擁有最大的使用者群體,並為使用者和開發者提供的各種工具。 它是用 Go 編寫的,完全開源,並獲得 GNU LGPL v3 許可。 + +從相關[文件](https://geth.ethereum.org/docs/)中了解有關 Geth 的更多資訊。 + +### Nethermind {#nethermind} + +Nethermind 是使用 C# .NET 技術堆疊開發的以太坊實作,以 LGPL-3.0 授權,在包含 ARM 的所有主要平臺上運行。 在以下方面提供出色效能: + +- 最佳化的虛擬機 +- 狀態存取 +- 網路和豐富的功能,如 Prometheus/Grafana 儀表板、seq 企業日誌記錄支援、JSON-RPC 追蹤和分析插件。 + +Nethermind 也為高級使用者提供[詳細文件](https://docs.nethermind.io)、強大的開發支援、線上社群和全年無休支援。 + +### Reth {#reth} + +Reth(Rust Etherum 的簡稱)是以太坊全節點的實作,致力於達成使用者友善、高度模組化、快速高效等目標。 Reth 最初由 Paradigm 開發並推動,且使用了 Apache 和 MIT 授權。 + +Reth 是生產就緒的執行用戶端,且適用於質押或高正常運作時間的服務等重要任務上。 在一些高效能、高利潤下的使用案例中表現優秀,如遠端程序呼叫、最大可提取價值、索引、模擬和點對點活動等。 + +查看 [Reth Book](https://reth.rs/) 或 [ Reth 的 GitHub 儲存庫](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth)以獲得更多資訊。 + +### 開發中 {#execution-in-development} + +這些用戶端仍處於開發早期階段,尚未推薦正式使用。 + +#### EthereumJS {#ethereumjs} + +EthereumJS 執行用戶端 (EthereumJS) 是以 TypeScript 編寫,並由多個套件組成,包括以區塊表示的核心以太坊基礎單元、交易和梅克爾帕特里夏樹據結構類別,以及核心用戶端元件,包括以太坊虛擬機 (EVM) 的實作、區塊鏈類別和 DevP2P 網路堆疊。 + +閱讀相關[文件](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master),了解更多資訊。 + +## 共識用戶端 {#consensus-clients} + +有多種共識用戶端(以前稱為「以太坊 2」用戶端)支援[共識升級](/roadmap/beacon-chain/)。 它們負責所有共識相關的邏輯,包含了分叉選擇演算法、處理證明並管理[權益證明](/developers/docs/consensus-mechanisms/pos)的獎勵和懲處。 + +| 用戶端 | 程式語言 | 作業系統 | 網路 | +| ------------------------------------------------------------- | ---------- | --------------------- | ------------------------------------------- | +| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | 信標鏈、Goerli、Pyrmont、Sepolia、Ropsten 等 | +| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | 信標鏈、Goerli、Sepolia、Ropsten 等 | +| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | 信標鏈、Goerli、Sepolia、Ropsten 等 | +| [Prysm](https://docs.prylabs.network/docs/getting-started/) | 開始 | Linux, Windows, macOS | 信標鏈、Gnosis、Goerli、Pyrmont、Sepolia、Ropsten 等 | +| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux、Windows、macOS | 信標鏈、Gnosis、Goerli、Sepolia、Ropsten 等 | + +### Lighthouse {#lighthouse} + +Lighthouse 是以 Rust 開發的共識用戶端實作,以 Apache-2.0 授權。 它由 Sigma Prime 維護,自信標鏈問世以來一直穩定且可直接用於生產。 各企業、質押池及個人都依賴它。 它的目標是從桌上型個人電腦到複雜的自動化部署,在各環境中都保持安全、高效及可互通性。 + +文件可在 [Lighthouse 手冊](https://lighthouse-book.sigmaprime.io/)中找到 + +### Lodestar {#lodestar} + +Lodestar 是以 Typescript 編寫,生產就緒的共識用戶端實作,以 LGPL-3.0 授權。 它由 ChainSafe Systems 維護,此外也是為單獨質押者、開發者、研究者而生的最新共識用戶端。 Lodestar 包含了信標節點及驗證者用戶端,該用戶端由以太坊協定的 JavaScript 實作提供支援。 Lodestar 致力於提升以太坊輕量用戶端的可用性,並為更多開發者擴大可存取性,以及提高以太坊生態系統多樣性。 + +更多資訊可在 [Lodestar 官網](https://lodestar.chainsafe.io/)找到 + +### Nimbus {#nimbus} + +Nimbus 是以 Nim 開發的共識用戶端實作,以 Apache-2.0 授權。 它是生產就緒的用戶端,常被單獨質押者及質押池使用。 Nimbus 專為資源效率而生,可在資源有限的裝置及企業基礎設施上輕鬆運行,而不影響其穩定性及獎勵效能。 更少的資源佔用意味著網路面臨壓力時,用戶端有更大的安全邊際。 + +在 [Nimbus 文檔](https://nimbus.guide/)中瞭解更多 + +### Prysm {#prysm} + +Prysm 是功能完整且開源的共識用戶端,以 Go 語言開發並以 GPL-3.0 授權。 它有可選的網頁應用用戶介面,並將自行質押者及機構使用者的使用者體驗、文檔及設定檔放在第一位。 + +閱讀 [Prysm 文檔](https://docs.prylabs.network/docs/getting-started/)以獲得更多資訊。 + +### Teku {#teku} + +Teku 是最初的信標鏈創世用戶端之一。 除了一般的目標(安全性、穩定性、可用性、效能)外,Teku 特別致力於遵循各式各樣的用戶端標準。 + +Teku 提供了非常彈性的部署選項。 信標節點與驗證者用戶端可以在同個進程一起運行,對單獨質押者來說非常方便,節點也可分開運行,以完成複雜的質押操作。 此外,Teku 與 [Web3Signer](https://github.com/ConsenSys/web3signer/) 完全相容,以實現簽署金鑰安全及罰沒保護。 + +Teku 以 Java 編寫,並以 Apache 2.0 授權發佈。 它由 ConsenSys 的 Protocols 團隊開發,該團隊也負責 Besu 和 Web3Signer 開發。 在 [Teku 文檔中](https://docs.teku.consensys.net/en/latest/)瞭解更多。 + +## 同步模式 {#sync-modes} + +為了追蹤和驗證網路中的當前資料,以太坊用戶端需要與最新的網路狀態同步。 這是透過從對等用戶端下載資料、以加密方式驗證其完整性並建立本地區塊鏈資料庫來完成的。 + +同步模式代表了達成此過程的不同方法以及各種權衡。 用戶端同步演算法的實作也各不相同。 請務必參閱你選擇的用戶端的官方文件,以了解實作的具體資訊。 + +### 執行層同步模式 {#execution-layer-sync-modes} + +執行層可以於不同的模式下運行,從重新執行區塊鏈的全域狀態到僅與來自可信任檢查點的鏈尖同步,以適應不同的用例。 + +#### 完整同步 {#full-sync} + +完整同步會下載所有區塊(包括區塊頭和區塊體),並透過執行創世區塊以來的每個區塊來增量地重新生成區塊鏈的狀態。 + +- 透過驗證每筆交易,最大限度地減少信任依賴並提供最高的安全性。 +- 隨著交易數量不斷增加,處理所有交易可能需要幾天到幾週的時間。 + +[歸檔節點](#archive-node)執行完整同步,以建立(並保留)每個區塊中每個交易所做的狀態變更的完整歷史記錄。 + +#### 快速同步 {#fast-sync} + +與完整同步一樣,快速同步會下載所有區塊(包括區塊頭、交易和收據)。 然而,快速同步不會重新處理歷史交易,而是依賴收據直到它到達最近的區塊頭,此時它切換到匯入和處理區塊以提供完整節點。 + +- 快速同步策略。 +- 減少處理需求,有利頻寬使用。 + +#### 快照同步 {#snap-sync} + +快照同步也會逐塊去驗證鏈。 然而,快照同步不是從創世區塊開始,而是從更新的及已知是真正區塊鏈一部分的「可信任」檢查點開始。 節點會儲存週期性檢查點,同時刪除比某時間點早的資料。 這些快照用於根據需要重新產生狀態資料,而不是永久儲存該資料。 + +- 最快的同步策略,目前為以太坊主網的預設策略。 +- 在不犧牲安全性的情況下,節省了大量的磁碟空間和網路頻寬。 + +[更多有關快照同步的資訊](https://github.com/ethereum/devp2p/blob/master/caps/snap.md)。 + +#### 輕量同步 {#light-sync} + +輕量用戶端模式下載所有區塊頭、區塊資料,並進行隨機驗證。 僅從受信任的檢查點同步鏈尖。 + +- 依靠對開發者的信任和共識機制,只取得最新狀態。 +- 用戶端可在幾分鐘內在目前網路狀態下使用。 + +**NB** 輕量同步目前無法在權益證明以太坊上使用,新版本的輕量同步應很快會發佈! + +[關於輕量用戶端的更多資訊](/developers/docs/nodes-and-clients/light-clients/) + +### 共識層同步模式 {#consensus-layer-sync-modes} + +#### 樂觀同步 {#optimistic-sync} + +樂觀同步是一種合併後同步策略,被設計為可選擇向後兼容,可使執行節點透過預先建立的方法同步。 執行引擎可以_樂觀地_匯入信標區塊而不需要完整驗證,找到最新的區塊頭,並使用上述方法開始同步鏈。 接著,在執行用戶端同步至最新狀態後,它會通知共識用戶端信標鏈中交易的有效性。 + +[關於樂觀同步的更多資訊](https://github.com/ethereum/consensus-specs/blob/dev/sync/optimistic.md) + +#### 檢查點同步 {#checkpoint-sync} + +檢查點同步又稱弱主觀性同步,在同步信標節點時提供優異的使用者體驗。 它是基於[弱主觀性](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/)假設,使信標鏈能夠從近期的弱主觀性檢查點開始同步,而不是從創世塊開始。 檢查點同步顯著縮短了初始同步時間,其信任假設與從[創世塊](/glossary/#genesis-block)開始同步相同。 + +在實際運作上,這表示你的節點會連接至遠端服務,以下載近期最終確定的狀態,並從該點開始繼續驗證資料。 提供資料的第三方會受到信任,因此應謹慎選擇。 + +關於[檢查點同步](https://notes.ethereum.org/@djrtwo/ws-sync-in-practice)的更多資訊 + +## 衍生閱讀 {#further-reading} + +- [以太坊 101 - 第 2 部分 - 瞭解節點](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes,2019 年 2 月 13 日_ +- [運行以太坊全節點:針對幾乎沒有動力的人提供的指南](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31)_ – Justin Leroux,2019 年 11 月 7 日_ + +## 相關主題 {#related-topics} + +- [分塊](/developers/docs/blocks/) +- [網路](/developers/docs/networks/) + +## 相關教學 {#related-tutorials} + +- [只需刷寫 MicroSD 卡即可將你的樹莓派 4 變成驗證者節點 -- 安裝指南](/developers/tutorials/run-node-raspberry-pi/) _ -- 刷寫你的樹莓派 4,插入乙太網路纜線,連接 SSD 磁碟,然後啟動設備,將樹莓派 4 轉變為運行執行層(主網)和/或共識層(信標鏈/驗證者)的完整以太坊節點。_ diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/light-clients/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/light-clients/index.md" new file mode 100644 index 00000000000..fb82bac4211 --- /dev/null +++ "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/light-clients/index.md" @@ -0,0 +1,61 @@ +--- +title: 輕量用戶端 +description: 以太坊輕量用戶端介紹 +lang: zh-tw +--- + +運行全節點是與以太坊互動最去信任、隱私、去中心化和抗審查的方式。 透過全節點,你可以保留自己的區塊鏈副本,可用於即時查詢並直接存取以太坊的點對點網路。 然而,運行全節點需要大量的記憶體、儲存空間及 CPU 資源。 這意味著讓所有人運行自己的節點不可行。 以太坊路線圖上有幾種解決方式,包括無狀態,但距離實現還要幾年的時間。 近期的解決方法是權衡一些運行全節點的優點,以實現大幅效能改進,使節點在極低硬體需求下運行。 做出這種妥協的節點稱為輕節點。 + +## 輕量用戶端是什麼? {#what-is-a-light-client} + +輕節點是運行輕量用戶端軟體的節點。 輕節點不保留區塊鏈資料的本地副本,也不獨立驗證所有變更,而是向一些提供者索取必要資料。 提供者可能是直接或透過一些中心化遠端程序呼叫伺服器連結到全節點。 接著,輕節點驗證資料,使資料能和鏈頭保持同步。 輕節點只處理區塊頭,只有偶爾才會下載實際區塊內容。 節點的輕量程度可能會有所不同,具體取決於它們執行的輕量和全用戶端軟體的組合。 舉例來說,最輕量的設定是運行一個輕量執行用戶端和一個輕量共識用戶端。 許多節點也有可能會選擇運行輕量共識用戶端和全執行用戶端,反之亦然。 + +## 輕量用戶端是如何運作的? {#how-do-light-clients-work} + +當以太坊開始使用基於權益證明的共識機制時,專門引入了新的基礎設施來支援輕量用戶端。 它的運作方式是,每 1.1 天隨機選擇包含了 512 個驗證者的子集作為**同步委員會**。 同步委員會簽署最近區塊的頭部。 每個區塊頭包括了同步委員會中驗證者的聚合簽名,以及一個顯示驗證者簽名與否的「位元欄位」。 每個區塊頭還包含了預期參與下一個區塊簽名的驗證者清單。 這表示輕量用戶端可以快速查看同步委員會是否已簽署它們收到的資料,它們也可以透過比較它們收到的資料和依據上一個區塊而預期收到的資料,以確認同步委員會的真實性。 這樣一來,輕量用戶端就能持續更新對最新以太坊區塊的了解,而不需要實際下載區塊,只要下載包含摘要資訊的區塊頭即可。 + +在執行層上,沒有對輕量執行用戶端的單一規範。 輕量執行用戶端的範圍差異可以與全執行用戶端的「輕量模式」不同,後者有全節點的所有以太坊虛擬機和網路功能,但只驗證區塊頭,而不下載相關資料,或者它也可以是更精簡的用戶端,主要依賴將請求轉發至遠端程序呼叫提供者以和以太坊交互。 + +## 為什麼輕量用戶端很重要? {#why-are-light-clients-important} + +輕量用戶端重要的原因是,它們讓使用者驗證傳入的資料,而非盲目相信它們的資料提供者是正確和誠實的,同時只使用全節點運算資源的很小一部分。 輕量用戶端收到的資料可以根據區塊頭進行檢查,因為它們知道這些區塊頭已獲得 512 個隨機的以太坊驗證者中至少 2/3 的簽名。 這是能證明資料正確的強大證據。 + +輕量用戶端只使用很小一部分的算力、記憶體和儲存空間,因此它們可以在手機上、嵌入應用程式中或作為瀏覽器的一部分運行。 輕量用戶端以信任最小化的方式存取以太坊,就像信任第三方提供者一樣順暢。 + +我們來看個簡單的例子。 想像你打算查看你的錢包餘額。 要完成這件事,你需要向以太坊節點發送一個請求。 該節點會檢查它的以太坊的本地副本中你的餘額,並將其回傳給你。 如果你沒有辦法直接存取節點,有一些中心化的營運商會提供此資料作為服務。 你可以向它們發送一個請求,它們會查看其節點,並將結果回傳給你。 這個方法的問題在於,你需要信任該提供者提供了你正確的資訊。 如果你無法自行驗證資訊,你永遠無法知道該資訊是否正確。 + +輕量用戶端可以解決此問題。 你仍然向外部提供者請求資料,但當你接收到返回的資料時,資料會附加一個證明,你的輕量用戶端可以依據區塊頭中收到的資訊來檢查這個證明。 這表示以太坊會驗證你資料的正確性,而不是某些受信任的營運者來驗證。 + +## 輕量用戶端帶來了哪些創新? {#what-innovations-do-light-clients-enable} + +輕量用戶端的主要好處是使更多的人能夠獨立存取以太坊,對硬體的需求幾乎可忽略,依賴第三方程度也被降到最低。 這對使用者來說有益,因為他們可以驗證自己的資料,且它提升了驗證區塊鏈的節點數量及多樣性。 + +輕量用戶端解鎖的創新領域其中之一是可以在儲存空間、記憶體和處理能力都很小的裝置上運行以太坊節點。 如今的以太坊節點需要大量運算資源,輕量用戶端可被嵌入瀏覽器中、在手機上運行,或者甚至可能在更小的智慧型裝置上運行,如智慧手錶。 這表示含有嵌入式用戶端的以太坊錢包可能可以在手機上運行。 這表示手機錢包可更去中心化,因為它們不需要信任中心化資料提供者以獲取資料。 + +這個的延伸是使用**物聯網 (IoT)** 裝置。 輕量用戶端可用於快速證明某些代幣或非同質化代幣的餘額或擁有權,透過所有同步委員會提供的安全保證,以觸發物聯網的某些操作。 想像一個[腳踏車租借服務](https://youtu.be/ZHNrAXf3RDE?t=929),透過應用程式和嵌入式輕量用戶端以快速驗證你擁有租借服務的非同質化代幣,如果是,則解鎖一輛腳踏車讓你騎走。 + +以太坊卷軸也受益於輕量用戶端。 卷軸一直以來的其中一個大問題是,駭客會瞄準允許資金在卷軸和以太坊之間轉移的跨鏈橋發動攻擊。 其中一個漏洞是卷軸用來偵測使用者是否存款至跨鏈橋的預言機。 如果預言機提供了錯誤資料,它們可能會欺騙卷軸有新存款至跨鏈橋的資金,並錯誤的釋放資金。 嵌入在卷軸中的輕量用戶端可以用來避免預言機損壞帶來的傷害,因為存款進跨鏈橋可以得到一個附加的證明,可在釋放資金前被卷軸用來驗證。 相同的概念也適用於其他跨鏈橋。 + +輕量用戶端也可以用於升級以太坊錢包。 你的錢包可以使用嵌入式輕量用戶端直接驗證向你提供的資料,而不用信任遠端程序呼叫提供者提供的資料。 這會為你的錢包提升安全性。 如果你的遠端程序呼叫提供者不誠實,且向你提供錯誤的資料,嵌入式輕量用戶端會告訴你! + +## 輕量用戶端開發的現狀如何? {#current-state-of-development} + +有許多的輕量用戶端都在開發中,包括執行、共識、和執行/共識組合的輕量用戶端。 這些是在撰文時我們已知的輕量用戶端實現: + +- [Lodestar](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client):由 TypeScript 編寫的輕量用戶端 +- [Helios](https://github.com/a16z/helios):由 Rust 編寫的執行和共識組合輕量用戶端 +- [Geth](https://github.com/ethereum/go-ethereum/tree/master/light):由 Go 編寫,執行用戶端的輕量模式(開發中) +- [Nimbus](https://nimbus.guide/el-light-client.html):由 Nim 編寫的共識輕量用戶端 + +據我們所知,上述這些服務都尚未準備好在生產環境中使用。 + +為了改進輕量用戶端存取以太坊資料的方式,還有很多工作要做。 目前,輕量用戶端依賴使用用戶端/伺服器架構向全節點發出的遠端程序呼叫請求,但在未來可以透過專用網路用更去中心化的方式請求資料,如[門戶網路](https://www.ethportal.net/)可以透過點對點廣播協議將資料發送至輕量用戶端。 + +其他[路線圖](/roadmap/)上的專案如 [Verkle 樹](/roadmap/verkle-trees/)和[無狀態性](/roadmap/statelessness/),最終會為輕量用戶端帶來與全用戶端同等的安全保證。 + +## 了解更多 {#further-reading} + +- [Zsolt Felfodhi 談 Geth 輕量用戶端](https://www.youtube.com/watch?v=EPZeFXau-RE) +- [Etan Kissling 談輕量用戶端網路](https://www.youtube.com/watch?v=85MeiMA4dD8) +- [Etan Kissling 談合併後的輕量用戶端](https://www.youtube.com/watch?v=ZHNrAXf3RDE) +- [Piper Merriam:通往功能性輕量用戶端的曲折之路](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/node-architecture/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/node-architecture/index.md" new file mode 100644 index 00000000000..e876df86beb --- /dev/null +++ "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/node-architecture/index.md" @@ -0,0 +1,57 @@ +--- +title: 節點架構 +description: 關於如何安排以太坊節點的介紹。 +lang: zh-tw +--- + +一個以太坊節點由兩個用戶端組成:一個[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)以及一個[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)。 + +當以太坊使用[工作量證明](/developers/docs/consensus-mechanisms/pow/)時,一個執行用戶端已足夠運行以太坊全節點。 然而,自從實行[權益證明](/developers/docs/consensus-mechanisms/pow/),執行用戶端需要與另外一個軟體同時使用,該軟體稱為[「共識用戶端」](/developers/docs/nodes-and-clients/#consensus-clients)。 + +下圖顯示兩種以太坊用戶端的關係。 兩種用戶端與他們各自的點對點 (P2P) 網路相連。 執行用戶端透過其點對點網路廣播交易,來確保能夠管理自己的本機交易池,而共識用戶端透過其點對點網路廣播區塊,來確保共識和鏈增長,因此需要獨立的點對點網路。 + +![](node-architecture-text-background.png) + +要讓這兩種用戶端架構運作,驗證用戶端必須能夠將大量交易傳送至執行用戶端。 透過在本機執行交易,用戶端驗證交易沒有違反任何以太坊的規則且提議的以太坊狀態更新是否正確。 同樣地,當節點被選為區塊生產者,共識用戶端必須能夠從 Geth 請求各種交易,以添加到新的區塊裡並執行它們來更新全域狀態。 用戶端間的通訊由本機遠端程序呼叫連線使用[引遠端程序呼叫](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)處理。 + +## 執行用戶端的作用為何? {#execution-client} + +執行用戶端負責處理交易、廣播交易、狀態管理,以及支援以太坊虛擬機 ([EVM](/developers/docs/evm/))。 然而,它並**不**負責產生區塊、廣播區塊,或是處理共識邏輯。 這些為共識用戶端的工作範圍。 + +執行用戶端建立執行有效負載:交易列表、更新的狀態樹,以及其他執行相關的資料。 共識用戶端將執行有效負載加入每一個區塊。 執行用戶端也負責重新執行每個新區塊的交易,確保交易為有效的。 執行交易在執行用戶端的嵌入式電腦上執行,該嵌入式電腦稱為[以太坊虛擬機 (EVM)](/developers/docs/evm)。 + +執行用戶端還透過[遠端程序呼叫方法](/developers/docs/apis/json-rpc)提供一個連接以太坊的使用者介面,讓使用者可以查詢以太坊區塊鏈、提交交易和部署智慧型合約。 遠端程序呼叫呼叫通常由 [Web3js](https://docs.web3js.org/)、[Web3py](https://web3py.readthedocs.io/en/v5/) 這樣的函式庫處理,或是像是瀏覽器錢包的使用者介面。 + +總而言之,執行用戶端為: + +- 通往以太坊的使用者閘道 +- 託管以太坊虛擬機、以太坊狀態,以及交易池的地方。 + +## 共識用戶端的作用為何? {#consensus-client} + +共識用戶端處理所有能夠讓節點與以太坊網路保持同步的邏輯。 這包括從對等節點接收區塊並運行分叉選擇演算法,從而確保節點始終遵循累積證明最多的鏈(由驗證者有效餘額加權計算而得)。 與執行用戶端相似,共識用戶端擁有自己的點對點網路並透過該網路共享區塊和證明。 + +共識用戶端不參與區塊的證明或提議;此由共識用戶端的驗證者(可選附加組件)完成。 沒有驗證者的共識用戶端只會同步鏈頭,使節點能夠保持同步。 這讓使用者可以使用他們的執行用戶端與以太坊交易,並確信位於正確的鏈上。 + +## 驗證者 {#validators} + +節點營運者可以在存款合約中存入 32 以太幣,以添加一個驗證者到他們的共識用戶端。 驗者者用戶端與共識用戶端捆綁在一起,可以隨時添加進節點。 驗證者處理證明及區塊提議。 它們讓節點可以累積獎勵,或因懲罰或罰沒而失去以太幣。 運行驗證者軟體也讓一個節點有資格被選中來提議新區塊。 + +[更多關於質押的資訊](/staking/)。 + +## 節點組成比較 {#node-comparison} + +| 執行用戶端 | 共識用戶端 | 驗證者 | +| -------------------------- | ------------------ | ----------- | +| 透過其點對點網路廣播交易 | 透過其點對點網路廣播區塊及證明 | 提議區塊 | +| 執行/重新執行交易 | 運行分叉選擇演算法 | 積累獎勵/懲罰 | +| 驗證傳入狀態的變更 | 追蹤鏈頭 | 做出證明 | +| 管理狀態及收據樹 | 管理信標狀態(包括共識和執行資訊) | 需要質押 32 以太幣 | +| 建立執行有效負載 | 追蹤在 RANDAO 中累積的隨機性 | 可被罰沒 | +| 公開 JSON-RPC 應用程式介面以便與以太坊互動 | 追蹤證明及最終確定 | | + +## 了解更多 {#further-reading} + +- [權益證明](/developers/docs/consensus-mechanisms/pos) +- [區塊提出](/developers/docs/consensus-mechanisms/pos/block-proposal) +- [驗證者獎勵及懲罰](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/nodes-as-a-service/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/nodes-as-a-service/index.md" new file mode 100644 index 00000000000..5439ec30368 --- /dev/null +++ "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/nodes-as-a-service/index.md" @@ -0,0 +1,419 @@ +--- +title: 節點做為一服務 +description: 節點服務、優缺點及熱門提供者入門級概覽 +lang: zh-tw +sidebarDepth: 2 +--- + +## 簡介 {#Introduction} + +運作自己的[以太坊節點](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients)可能比較困難,特別是初始階段或快速擴容時。 有[許多服務](#popular-node-services)可以為你運行最佳化的節點基礎設施,因此你可以專注於開發應用程式或產品。 我們將解釋節點服務的工作原理、使用節點服務的優缺點,並列出提供者(如果你有興趣開始使用)。 + +## 基本資訊 {#prerequisites} + +如你還不太瞭解節點及用戶端,請查看[節點及用戶端](/developers/docs/nodes-and-clients/)。 + +## 質押者 {#stakoooooooooooooors} + +單獨質押者必須運行自己的基礎設施,而非依賴第三方提供者。 這表示運行一個執行用戶端和一個關聯的共識用戶端。 在[合併](/roadmap/merge)前,只運行共識用戶端且使用中心化提供者以執行資料是可行的;但現在已不再可行 - 單獨質押者必須同時運行兩種用戶端。 然而,有些服務可以簡化這個流程。 + +[閱讀更多關於運行節點的相關資訊](/developers/docs/nodes-and-clients/run-a-node/)。 + +本頁說明的服務適用於非質押節點。 + +## 節點服務如何運作? {#how-do-node-services-work} + +節點服務提供者在幕後為你運行分散式節點用戶端,因此你無需再這麼做。 + +這些服務通常提供一個應用程式介面金鑰,你可以使用該金鑰在區塊鏈中寫入和讀取。 除了包含存取以太坊主網的權限外,它們通常還包含存取[測試網](/developers/docs/networks/#ethereum-testnets)的權限。 + +一些服務為你提供屬於你的專用節點並為你管理這些節點,而其他服務使用負載平衡器於各節點間分配活動。 + +幾乎所有節點服務極易整合,只需變更一行程式碼就能更換自託管節點,甚至可以在服務本身之間進行切換。 + +通常,節點服務運行多種[節點用戶端](/developers/docs/nodes-and-clients/#execution-clients)與[類型](/developers/docs/nodes-and-clients/#node-types),讓你能在一個應用程式介面中除了存取特定於用戶端的方法外,還能存取全節點和歸檔節點。 + +值得關注的是,節點服務不會也不應儲存你的私密金鑰或個人資訊。 + +## 使用節點服務有何好處? {#benefits-of-using-a-node-service} + +使用節點服務的主要好處是不必花工程時間,來自行維護和管理節點。 這使你能專注於構建產品,而不必擔心基礎設施維護。 + +從存儲到頻寬再到昂貴的工程時間,運行你自己的節點可能非常昂貴。 諸如在擴容時啟動更多節點、將節點升級到最新版本,以及確保狀態一致性,都會讓你無法專心使用資源建立所需的 web3 產品。 + +## 使用節點服務有何缺點? {#cons-of-using-a-node-service} + +使用節點服務,意味著你在中心化產品的基礎設施。 因此,最重視去中心化的專案可能會傾向於自託管節點,而不是外包給第三方。 + +閱讀更多關於[運行你自己的節點之優點](/developers/docs/nodes-and-clients/#benefits-to-you)。 + +## 熱門節點服務 {#popular-node-services} + +下方列出了最熱門的以太坊節點服務提供者,歡迎新增此處遺漏的提供者。 除了免費或付費方案,每個節點服務還提供不同的優點和功能,你應該在做出決定之前先調查哪些服務最符合你的需求。 + +- [**Alchemy**](https://alchemy.com/) + - [文件](https://docs.alchemyapi.io/) + - 功能 + - 最大的免費方案每個月提供了 3 億運算單元 (約 3000 萬次 getLatestBlock 請求) + - 支援多鏈,如 Polygon、Starknet、Optimism、Arbitrum + - 為約 70% 最大的以太坊去中心化應用程式和去中心化金融交易量提供支援 + - 透過 Alchemy Notify 的即時 webhook 通知 + - 一流的支援和可靠性/穩定性 + - Alchemy 的 NFT API + - 包含 Request Explorer、Mempool Watcher 和 Composer 的儀表板 + - 整合測試網水龍頭存取 + - 超過 1.8 萬使用者的活躍 Discord 建構者社群 + +- [**All That Node**](https://allthatnode.com/) + - [文件](https://docs.allthatnode.com/) + - 特徵 + - 免費方案每天 50,000 個請求 + - 支援 40 多種協定 + - 支援 JSON-RPC(以太坊虛擬機、Tendermint)、具象狀態傳輸和 Websocket 應用程式介面 + - 無限制存取歸檔日期 + - 全年無休的技術支援和 99.9% 以上的正常運作時間 + - 支援多鏈的水龍頭 + - 使用不限數量的應用程式介面金鑰進行無限的端點存取 + - 支援追蹤/除錯應用程式介面 + - 自動更新 + +- [**Amazon Managed Blockchain**](https://aws.amazon.com/managed-blockchain/) + - [文件](https://aws.amazon.com/managed-blockchain/resources/) + - 功能 + - 完全託管的以太坊節點 + - 在 6 個地區可用 + - 基於超文字傳輸協定的 JSON-RPC 和安全 WebSocket + - 支援 3 條鏈 + - 服務等級協定,全年無休的 AWS 支援 + - Go-ethereum 及 Lighthouse + +- [**Ankr**](https://www.ankr.com/) + - [文件](https://docs.ankr.com/) + - 特徵 + - Ankr 協定 - 開放對超過 8 個鏈的公共遠端程序呼叫應用程式介面端點的存取 + - 負載平衡與節點健康監控,以取得連結到最近可用節點的更快更可靠的閘道 + - 支援 WSS 端點與無上限速率限制的高級方案 + - 針對超過 40 個鏈的一鍵式全節點和驗證者節點部屬 + - 隨時擴容 + - 分析工具 + - 儀表板 + - 遠端程序呼叫、超文字安全傳輸通訊協定及 WSS 端點 + - 直接支援 + +- [**Blast**](https://blastapi.io/) + - [文件](https://docs.blastapi.io/) + - 功能 + - 支援遠端程序呼叫及 WSS + - 多區域節點託管 + - 去中心化的基礎設施 + - 公共遠端程序呼叫 + - 專用的免費方案 + - 支援多鏈(超過 17 種區塊鏈) + - 歸檔節點 + - 全年無休 Discord 支援 + - 全年無休監控及通知 + - 總 SLA 達到 99.9% + - 可使用加密貨幣付款 + +- [**BlockDaemon**](https://blockdaemon.com/) + - [文件](https://ubiquity.docs.blockdaemon.com/) + - 優點 + - 控制面板 + - 基於節點 + - 分析 + +- [**BlockPI**](https://blockpi.io/) + - [文件](https://docs.blockpi.io/) + - 功能 + - 分散式的穩健節點結構 + - 多達 40 多種超文字安全傳輸通訊協定與 WSS 端點 + - 免費註冊方案及每月方案 + - 追蹤 method + 歸檔資料支援 + - 免費方案 90 天內有效 + - 自訂方案及隨用隨付方案 + - 可使用加密貨幣付款 + - 直接支援與技術支援 + +- [**Chainbase**](https://www.chainbase.com/) + - [文件](https://docs.chainbase.com) + - 功能 + - 高可用性、快速及可擴容的遠端程序呼叫服務 + - 多鏈支援 + - 免關稅 + - 使用者友善的儀表板 + - 提供遠端程序呼叫以外的區塊鏈資料服務 + +- [**Chainstack**](https://chainstack.com/) + - [文件](https://docs.chainstack.com/) + - 特徵 + - 免費共享節點 + - 共享歸檔節點 + - GraphQL 支援 + - 遠端程序呼叫和 WSS 端點 + - 專用全節點及歸檔節點 + - 針對專門部署的快速同步時間 + - 自攜雲端 + - 按小時付費定價 + - 全年無休直接支援 + +- [**DataHub**](https://datahub.figment.io) + - [文件](https://docs.figment.io/) + - 功能 + - 免費方案 3,000,000 次請求/月 + - RPC 及 WSS 末端 + - 專用之全及歸檔節點 + - 自動擴容(批量折扣) + - 免費歸檔資料 + - 服務分析 + - 控制面板 + - 全年無休直接支援 + - 可用加密貨幣付款(企業) + +- [**DRPC**](https://drpc.org/) + - [文件](https://docs.drpc.org/) + - 功能 + - 去中心化遠端程序呼叫節點 + - 超過 15 個節點提供者 + - 節點平衡 + - 免費方案每個月擁有無上限的運算單元 + - 資料驗證 + - 自訂端點 + - 超文字安全傳輸通訊協定與 WSS 端點 + - 不限數量的金鑰(免費和付費方案) + - 彈性的備援選項 + - [公共端點](https://eth.drpc.org) + - 免費共享歸檔節點 + +- [**GetBlock**](https://getblock.io/) + - [文件](https://getblock.io/docs/get-started/authentication-with-api-key/) + - 功能 + - 存取超過 40 個區塊鏈節點 + - 每天 40000 個免費請求 + - 不限數量的應用程式介面金鑰 + - 1GB/秒的高連線速度 + - 追蹤+歸檔 + - 進階分析 + - 自動更新 + - 技術支援 + +- [**InfStones**](https://infstones.com/) + - 特色功能 + - 免費方案選項 + - 隨時擴容 + - 分析 + - 儀表板 + - 獨特應用程式介面端點 + - 專用全節點 + - 針對專門部署的快速同步時間 + - 全年無休直接支援 + - 存取超過 50 個區塊鏈節點 + +- [**Infura**](https://infura.io/) + - [文件](https://infura.io/docs) + - 特色功能 + - 免費方案選項 + - 隨時擴容 + - 付費歸檔資料 + - 直接支援 + - 儀表板 + +- [**Kaleido**](https://kaleido.io/) + - [文件](https://docs.kaleido.io/) + - 特徵 + - 免費新手方案 + - 一鍵部署以太坊節點 + - 可自訂的用戶端與演算法(Geth、 Quorum 和 Besu || PoA、IBFT 和 Raft) + - 超過 500 個管理與服務應用程式介面 + - 用於以太坊交易提交的 RESTful 介面(Apache Kafka 支援) + - 用於事件傳遞的出站串流(Apache Kafka 支援) + - 「鏈下」與輔助服務(例如雙層加密訊息傳輸)的深度集合 + - 透過管理體系和基於角色的存取控制實現簡單的網路接入 + - 面向管理員與終端使用者的精細使用者管理 + - 高度可擴充、有彈性的企業級基礎設施 + - 雲端 HSM 私密金鑰管理 + - 以太坊主網繫連 + - ISO 27k 與 SOC 2、Type 2 驗證 + - 動態執行階段配置(例如新增雲端整合、變更節點入口等等) + - 支援多雲端、多區域和混合部署編排 + - 單純按小時的基於 SaaS 的定價 + - SLA 與全年無休支援 + +- [**Lava Network**](https://www.lavanet.xyz/) + - [文件](https://docs.lavanet.xyz/) + - 特徵 + - 免費使用測試網 + - 支援高正常運行時間的去中心化冗餘 + - 開源 + - 完全去中心化的軟體開發套件 + - 與 Ether.js 整合 + - 直覺化的專案管理介面 + - 以共識為基礎的資料整合 + - 支援多鏈 + +- [**Moralis**](https://moralis.io/) + - [文件](https://docs.moralis.io/) + - 功能 + - 免費共享節點 + - 免費共享歸檔節點 + - 注重隱私(無日誌政策) + - 跨鏈支援 + - 隨時擴容 + - 儀表板 + - 獨特的以太坊軟體開發套件 + - 獨特應用程式介面端點 + - 直接技術支援 + +- [**NodeReal MegaNode**](https://nodereal.io/) + - [文件](https://docs.nodereal.io/nodereal/meganode/introduction) + - 功能 + - 可靠、快速和可擴充的遠端程序呼叫應用程式介面服務 + - 專為 Web3 開發者打造的增強版應用程式介面 + - 多鏈支援 + - 免費開始試用 + +- [**NOWNodes**](https://nownodes.io/) + - [文件](https://documenter.getpostman.com/view/13630829/TVmFkLwy) + - 功能 + - 存取超過 50 個區塊鏈節點 + - 免費應用程式介面金鑰 + - 區塊瀏覽器 + - 應用程式介面回應時間 ⩽ 1 秒 + - 全年無休支援團隊 + - 個人帳戶管理器 + - 共享、歸檔、備份和專用節點 + +- [**Pocket Network**](https://www.pokt.network/) + - [文件](https://docs.pokt.network/home/) + - 功能 + - 去中央化遠端程序中呼叫協定與市場 + - 免費方案每天 100 萬個請求(每個端點,最大為 2) + - [公共端點](https://docs.pokt.network/developers/public-endpoints) + - Pre-Stake+ 計畫(如果你每天需要超過 100 萬個請求) + - 支援超過 15 條區塊鏈 + - 6400+ 節點透過服務應用程式賺取 POKT 幣 + - 歸檔節點、具追蹤功能的歸檔節點和測試網節點支援 + - 以太坊主網節點用戶端多樣性 + - 無單點故障 + - 零停機時間 + - 成本效益幾乎近零之代幣經濟(質押 POKT 幣一次即可獲得網路帶寬) + - 沒有每月的沉沒成本,將你的基礎設施變成資產 + - 協定內建負載平衡 + - 隨時無限擴充每天的請求數和每小時的節點數 + - 最私密、抗審查之選項 + - 實際開發者支援 + - [Pocket Portal](https://bit.ly/ETHorg_POKTportal) 儀表板和分析 + +- [**QuickNode**](https://www.quicknode.com) + - [文件](https://www.quicknode.com/docs/) + - 功能 + - 全年無休技術支援和 Discord 開發者社群 + - 平衡地理分佈、多雲端/伺服器的環境、低延遲的網路 + - 支援多鏈(Optimism、Arbitrum、Polygon 及另外 11 條鏈) + - 快速穩定的中間層(呼叫路由、快取、索引) + - 透過 Webhook 監控智慧型合約 + - 直覺化的儀表板、分析套件、遠端程序呼叫編寫器 + - 進階安全功能(JWT、遮罩、白名單) + - 非同質化代幣資料及分析應用程式介面 + - [已獲得 SOC2 認證](https://www.quicknode.com/security) + - 適合開發者和企業 + +- [**Rivet**](https://rivet.cloud/) + - [文件](https://rivet.readthedocs.io/en/latest/) + - 功能 + - 免費方案選項 + - 隨時擴容 + +- [**SenseiNode**](https://senseinode.com) + - [文件](https://docs.senseinode.com/) + - 功能 + - 專用及共享節點 + - 儀表板 + - 在拉丁美洲不同地點的多個託管商上託管 AWS + - Prysm 和 Lighthouse 用戶端 + +- [**SettleMint**](https://console.settlemint.com/) + - [文件](https://docs.settlemint.com/) + - 功能 + - 免費試用 + - 隨時擴容 + - GraphQL 支援 + - 遠端程序呼叫和 WSS 端點 + - 專用全節點 + - 自攜雲端 + - 分析工具 + - 儀表板 + - 按小時付費定價 + - 直接支援 + +- [**Tenderly**](https://tenderly.co/web3-gateway) + - [文件](https://docs.tenderly.co/web3-gateway/web3-gateway) + - 功能 + - 免費方案包含了每個月 2500 萬 Tenderly Units 的額度 + - 免費存取歷史資料 + - 讀取密集型工作負載速度高達 8 倍 + - 100% 一致的讀取存取 + - JSON-RPC 端點 + - 基於使用者介面的遠端程序呼叫請求建構器和請求預覽 + - 與 Tenderly 的開發、除錯及測試工具緊密整合 + - 模擬交易 + - 使用情況分析和過濾 + - 可輕鬆存取的金鑰管理 + - 透過聊天、電子郵件和 Discord 的專門工程支援 + +- [**Tokenview**](https://services.tokenview.io/) + - [文件](https://services.tokenview.io/docs?type=nodeService) + - 功能 + - 全年無休技術支援和 Telegram 開發者社群 + - 支援多鏈(比特幣、以太坊、波場、BNB 智能鏈、以太坊經典) + - 遠端程序呼叫和 WSS 端點均開放使用 + - 無限制存取歸檔資料應用程式介面 + - 有 Request Explorer 和 Mempool Watcher 的儀表板 + - 非同質化代幣資料應用程式介面和 Webhook 通知 + - 使用加密貨幣付款 + - 對額外行為要求的外部支援 + +- [**Watchdata**](https://watchdata.io/) + - [文件](https://docs.watchdata.io/) + - 功能 + - 資料可靠性 + - 不間斷連線,無停機時間 + - 過程自動化 + - 免關稅 + - 適合任何使用者的高限制 + - 支援多種節點 + - 資源擴充 + - 高處理速度 + +- [**ZMOK**](https://zmok.io/) + - [文件](https://docs.zmok.io/) + - 功能 + - 預先交易即服務 + - 包含搜尋/過濾方法的全域交易内存池 + - 發送交易時,手續費和燃料費皆無限制 + - 可最快取得新區塊及讀取區塊鏈 + - 單個應用程序介面呼叫的最佳價格保證 + +- [**Zeeve**](https://www.zeeve.io/) + - [文件](https://www.zeeve.io/docs/) + - 功能 + - 企業級的無程式碼自動化平臺,提供了部署、監測和管理區塊鏈節點和網路的功能 + - 支援及整合超過 30 個以上協定,持續增加中 + - 增值 Web3 基礎設施服務,如去中心化儲存、去中心化身份和用於現實世界的區塊鏈帳本資料應用程度介面 + - 全年無休支援和主動監控以確保節點健康。 + - 遠端程序呼叫端點提供了經驗證的應用程式介面存取,透過直覺式的儀表板和分析輕鬆愉快地進行管理。 + - 提供託管雲端服務和使用自己的雲端服務兩種選項,支援所有主流的雲端提供商,如 AWS、Azure、Google Cloud、Digital Ocean 和本地部署雲端。 + - 我們總是使用智慧路由以連接最靠近你的使用者的節點 + + +## 延伸閱讀 {#further-reading} + +- [以太坊節點服務清單](https://ethereumnodes.com/) + +## 相關主題 {#related-topics} + +- [節點和用戶端](/developers/docs/nodes-and-clients/) + +## 相關教程 {#related-tutorials} + +- [使用 Alchemy 開始以太坊開發](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) +- [使用 web3 和 Alchemy 發送交易的指南](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/run-a-node/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/run-a-node/index.md" new file mode 100644 index 00000000000..e8f907d7bb1 --- /dev/null +++ "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/run-a-node/index.md" @@ -0,0 +1,480 @@ +--- +title: 運行你自己的以太坊節點 +description: 運行你自己的以太坊用戶端實例的一般介紹。 +lang: zh-tw +sidebarDepth: 2 +--- + +運行你自己的節點可以為你帶來各種好處,開闢新的可能性,並有助於支援生態系統。 本頁將引導你啟動自己的節點並參與驗證以太坊交易。 + +注意,在[合併](/roadmap/merge)之後,需要兩個用戶端來運行一個以太坊節點:一個**執行層 (EL)** 用戶端,以及一個**共識層 (CL)** 用戶端。 本頁將展示如何安装、配置和連接這兩種用戶端以運行以太坊節點。 + +## 前置要求 {#prerequisites} + +你應該了解以太坊節點是什麼以及為什麼你可能想要運行用戶端。 [節點與用戶端](/developers/docs/nodes-and-clients/)中對此進行了介紹。 + +如果你對運行節點這個主題還很陌生,或是尋找技術門檻較低的途徑,推薦你首先查看我們適合使用者的[運行以太坊節點](/run-a-node)簡介。 + +## 挑選方法 {#choosing-approach} + +啟動節點的第一步是選擇方法。 根據要求及不同的可能性,你必須選擇(執行及共識用戶端)的用戶端實作、環境(硬體、系統),以及用戶端設定參數。 + +本頁將引導你做出這些決定,幫助你找到運行以太坊實例最適合的方式。 + +若要從用戶端實作中進行選擇,請查看所有可用的主網就緒[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)、[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients),並瞭解[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity)。 + +根據用戶端的[要求](#requirements),決定是否要在自己的[硬體或是雲端上](#local-vs-cloud)運行軟體。 + +準備好環境後,使用[初學者友好介面](#automatized-setup)或[手動](#manual-setup)使用具有進階選項的終端機安裝所選的用戶端。 + +當節點在運行且同步時,你已經準備好[使用它](#using-the-node),但務必留意節點的[維護](#operating-the-node)。 + +![用戶端設定](./diagram.png) + +### 環境與硬體 {#environment-and-hardware} + +#### 本機或雲端 {#local-vs-cloud} + +以太坊用戶端可以在消費級電腦上運行,並且不需要任何如挖礦機的特殊硬體。 因此,根據你的需求,你有多種選項來部署節點。 為了簡單起見,我們考慮一下在本地實體機和雲端伺服器上都運行一個節點: + +- 雲端 + - 提供者提供伺服器高正常運行時間和靜態公開 IP 位址 + - 取得專用或虛擬伺服器會比打造你自己的伺服器更容易 + - 其中的取捨在於信任第三方 - 伺服器提供商 + - 由於全節點所需的儲存大小,租用伺服器的價格可能會很高 +- 自有硬體 + - 更加去信任,自主權更高的方法 + - 一次性投資 + - 購買預先配置機器的選項 + - 你必須親自準備、維護,並可能需排除機器和網路的問題。 + +兩種選項具有上面總結的不同的優點。 如果你正在尋找雲端解決方案,除了許多傳統的雲端運算提供者之外,還有專注於部署節點的服務可供選擇。 查看[節點即服務](/developers/docs/nodes-and-clients/nodes-as-a-service/),了解更多關於託管節點的選項。 + +#### 硬體 {#hardware} + +然而,抗審查的去中心化網路不應依賴雲端提供者。 因而,在自己的本機硬體上運行自己的節點對生態系統來說更健全。 [預估](https://www.ethernodes.org/networkType/Hosting)顯示大部分節點在雲端上運行,這可能造成單點故障。 + +以太坊用戶端可以在自己的電腦、筆記型電腦、伺服器,或甚至是單板電腦上運行。 當在你的個人電腦上運行用戶端成為可能時,弄台專門運行節點的機器可以大幅提高效能和安全性,同時將最大程度上減小對你主要電腦的影響。 + +使用你自己的硬體非常容易。 有許多簡易的選項,適合較技術性人士的進階設定。 那麼,我們來看看在你的裝置上運行以太坊節點的要求和方法吧。 + +#### 要求 {#requirements} + +硬體要求因用戶端而異,但通常不會那麼高,因為節點只需要保持同步。 請別和挖礦搞混了,挖礦需要的算力遠高於此。 然而,使用更強大的硬體,同步時間和效能確實會提高。 + +在安裝任何用戶端之前,請確保你的電腦有足夠的資源來運行用戶端。 你可以在下方找到最低和推薦的硬體要求。 + +硬體瓶頸主要是磁碟空間。 同步以太坊區塊鏈是輸入/輸出非常密集的操作,且需要大量空間。 最佳選擇是使用在同步完畢後仍有數百 GB 空間的**固態硬碟 (SSD)**。 + +資料庫的大小及初始同步速度視使用的用戶端、設定及[同步策略](/developers/docs/nodes-and-clients/#sync-modes)而定。 + +也請確保你的網路連線不受[帶寬上限](https://wikipedia.org/wiki/Data_cap)的限制。 建議使用不按流量計費的連線,因為初始同步和廣播到網路的資料可能會超出你的限制。 + +##### 作業系統 + +所有用戶端都支援主要作業系統 - Linux、MacOS、Windows。 這表示你可以使用最適合你的作業系統 (OS) 在常規桌上型電腦或伺服器電腦上運行節點。 確保你的作業系統是最新的,以避免潛在的問題和安全漏洞。 + +##### 最低要求 + +- 具有 2 個以上核心的 CPU +- 8 GB RAM +- 2 TB 固態硬碟 +- 10+ MBit/s 帶寬 + +##### 推薦規格 + +- 具有 4 個以上核心的快速 CPU +- 16 GB+ RAM +- 2TB 以上的快速固態硬碟 +- 25+ MBit/s 帶寬 + +你選擇的同步模式及用戶端將影響所需磁碟空間,我們在下表估計了每個用戶端所需的磁碟空間。 + +| 客戶 | 磁碟空間(快速同步) | 磁碟空間(完整歸檔) | +| ---------- | ---------- | ---------- | +| Besu | 800GB 以上 | 12TB 以上 | +| Erigon | 不適用 | 2.5TB 以上 | +| Geth | 500GB 以上 | 12TB 以上 | +| Nethermind | 500GB 以上 | 12TB 以上 | +| Reth | 不適用 | 2.2TB 以上 | + +- 注意:Erigon 和 Reth 不提供快照同步,但支援完全修剪(Erigon 約 2TB,Reth 約 1.2TB) + +至於共識用戶端,所需硬碟容量也視用戶端實作及啟用的功能而定 (如罰沒驗證者的功能),但通常還需要額外的 200G 以儲存信標資料。 由於龐大的驗證者數量,帶寬負載也隨之增長。 你可以[在此分析中找到有關共識用戶端要求的詳細資料](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc)。 + +#### 隨插即用解決方案 {#plug-and-play} + +在你自己的硬體上運行節點最簡單的方法是使用隨插即用盒。 供應商的預設置機器提供了最直覺的體驗:排序、連接、運行。 所有部分都預先設置完畢且自動運行,搭配用以監控和控制軟體的直覺指南和儀表板。 + +- [DappNode](https://dappnode.io/) +- [Avado](https://ava.do/) + +#### 單板電腦上的以太坊 {#ethereum-on-a-single-board-computer} + +使用單板電腦是其中一種能便利、便宜運行以太坊節點的方式,甚至可以使用 ARM 架構的開發板,如樹莓派。 [ARM 架構上的以太坊](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/)為樹莓派及其他 ARM 開發板提供了多個執行用戶端和共識用戶端的簡單易用映像檔。 + +這類小型、平價且高效的裝置對在家運行節點是非常理想的,不過要注意的是它們效能有限。 + +## 啟動節點 {#spinning-up-node} + +實際的用戶端設定可以透過自動啟動器或手動完成,即直接設定用戶端軟體。 + +對於不是那麼進階的使用者,推薦使用啟動器,它是一種指引你安裝及自動化用戶端設定流程的軟體。 然而,如果你有使用終端機的經驗,手動設定的步驟對你來說應該很容易。 + +### 引導式設定 {#automatized-setup} + +多個使用者友善的專案都致力於改善設定用戶端的體驗。 這些啟動器提供了自動用戶端安裝及設定,有的甚至會提供圖形介面,用於引導式設定和監控用戶端。 + +以下是一些只要點按幾下就能幫助你安裝並控制用戶端的專案: + +- [DappNode](https://docs.dappnode.io/docs/user/getting-started/choose-your-path) - DappNode 並非只能使用供應商提供的機器。 軟體、實際節點啟動器和擁有許多功能的控制中心可在任意硬體上使用。 +- [eth-docker](https://eth-docker.net/) - 使用 Docker 進行自動化設定,專注於打造輕鬆安全的質押體驗,需要對終端機和 Docker 有基本認識,適合較進階的使用者。 +- [Stereum](https://stereum.net/ethereum-node-setup/) - 該啟動器具有圖形化使用者介面設定指南、控制中心以及許多其他功能,可透過 SSH 連接在遠端伺服器上安裝用戶端。 +- [NiceNode](https://www.nicenode.xyz/) - 該啟動器提供直覺化使用者體驗,可在你的電腦上運行節點。 只要選擇用戶端並簡單點按幾下即可啟動。 仍在開發中。 +- [Sedge](https://docs.sedge.nethermind.io/docs/intro) - 該節點設定工具使用 CLI 精靈自動產生 Docker 設定文件。 由 Nethermind 使用 Go 語言開發。 + +### 手動用戶端設定 {#manual-setup} + +另一個選擇是手動下載、驗證並設定用戶端軟體。 即使一些用戶端提供圖形介面,手動設定仍需要對終端機有基本認識,不過也提供了更多功能。 + +如前所述,設定你自己的以太坊節點需要運行一對共識和執行用戶端。 有些用戶端可能包含其他類型的輕量用戶端,且不需要其他軟體即可同步。 然而,完整去信任驗證需要上述兩種實作。 + +#### 取得用戶端軟體 {#getting-the-client} + +首先,你需要取得你偏好的[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)及[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)軟體。 + +你只須下載符合你作業系統和架構的可執行應用程式或安裝包。 總是驗證下載的安裝包的簽名和校驗和。 有些用戶端也提供程式碼儲存庫或 Docker 映像檔,使安裝及更新更容易。 所有的用戶端都是開源的,所以你可以從原始碼開始建構。 這是較進階的方法,但在某些情況下可能是必要的。 + +上方用戶端清單連結的文件中提供了安裝各個用戶端的說明。 + +以下是一些用戶端的版本發佈頁面,你可以在此找到預先建置的二進位檔案或安裝說明: + +##### 執行客戶 + +- [Besu](https://github.com/hyperledger/besu/releases) +- [Erigon](https://github.com/ledgerwatch/erigon/releases) +- [Geth](https://geth.ethereum.org/downloads/) +- [Nethermind](https://downloads.nethermind.io/) +- [Reth](https://reth.rs/installation/installation.html) + +值得注意的是,用戶端多樣性是[執行層上的一個問題](/developers/docs/nodes-and-clients/client-diversity/#execution-layer)。 建議讀者們考慮運行小眾執行用戶端。 + +##### 共識客戶 + +- [Lighthouse](https://github.com/sigp/lighthouse/releases/latest) +- [Lodestar](https://chainsafe.github.io/lodestar/install/source/)(並未提供預先建置的二進位檔案,只有一個 Docker 映像檔,或者自行編譯原始碼) +- [Nimbus](https://github.com/status-im/nimbus-eth2/releases/latest) +- [Prysm](https://github.com/prysmaticlabs/prysm/releases/latest) +- [Teku](https://github.com/ConsenSys/teku/releases) + +[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity/)對運行驗證者的共識節點來說非常重要。 如果大多驗證者都運行單一用戶端,網路安全將面臨風險。 因此,建議可以考慮選擇小眾用戶端。 + +[查看最新的網路用戶端使用情況](https://clientdiversity.org/)並瞭解關於[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity)的更多資訊。 + +##### 驗證軟體 + +從網際網路上下載軟體時,建議驗證其完整性。 這個步驟是可選的,但對於諸如以太坊用戶端等重要基礎設施,了解並避免潛在的攻擊非常重要。 如果你下載了預先建置的二進位檔案,你需要信任它並承擔攻擊者將其替換成惡意檔案的風險。 + +開發者使用他們的 PGP 金鑰簽署發佈的二進位檔案,如此一來你就可以使用密碼學方式驗證你運行的是他們建立的軟體。 你只需要獲得開發者使用的公鑰,這些公鑰可以在用戶端發佈頁面或文件中找到。 在下載用戶端版本及其簽名後,你可以使用 PGP 實作,如 [GnuPG](https://gnupg.org/download/index.html) 來輕鬆驗證用戶端。 查看在 [linux](https://www.tecmint.com/verify-pgp-signature-downloaded-software/) 或 [Windows/MacOS](https://freedom.press/training/verifying-open-source-software/) 上使用 `gpg` 驗證開源軟體的教學。 + +另一種驗證方式是確定你下載軟體的雜湊(獨一無二的密碼學指紋)和開發者提供的雜湊相符。 這比使用 PGP 進行驗證更加容易,有些用戶端也只提供此選項。 只需對下載的軟體運行雜湊函數,並將其與軟體發佈頁面的雜湊比較即可。 例如: + +```sh +sha256sum teku-22.6.1.tar.gz + +9b2f8c1f8d4dab0404ce70ea314ff4b3c77e9d27aff9d1e4c1933a5439767dde +``` + +#### 用戶端設定 {#client-setup} + +在安裝、下載或編譯用戶端軟體後,你就可以執行用戶端了。 這只表示需要用正確的設定執行用戶端。 用戶端提供了豐富的設定選項,可用於啟用各種功能。 + +我們從會大幅影響用戶端效能和資料使用的選項開始。 [同步模式](/developers/docs/nodes-and-clients/#sync-modes)代表下載和驗證區塊鏈資料的不同方法。 在啟動節點之前,你應該決定要使用什麼網路和同步模式。 應考慮的最重要部分是用戶端所需的磁碟空間和同步時間。 留意用戶端的文件以確認預設的同步模式是哪種。 如果預設同步模式不適合你,可以視安全層級、可用資料及支出,以挑選其他同步模式。 除了同步演算法外,你還可以設定不同類型舊資料的修剪。 修剪可以刪除過時的資料,例如刪除最近區塊中無法存取的狀態樹節點。 + +其他基礎設定選項範例包括:選擇網路 - 主網或測試網、為遠端程序呼叫或 WebSocket 啟用超文字傳輸協定端點等等。 你可以在用戶端文件上找到所有功能和選項。 可以直接在命令列介面或設定檔中使用對應的標記,來設定各種用戶端設定。 每個用戶端略有差異,請務必參考官方文件或幫助頁面以獲得設定選項的細節。 + +為了測試,你可能偏好在測試網上運行用戶端。 [參閱受支援網路的概覽](/developers/docs/nodes-and-clients/#execution-clients)。 + +在基礎設定下運行執行用戶端的範例請見下個章節。 + +#### 啟動執行用戶端 {#starting-the-execution-client} + +在啟動以太坊用戶端軟體前,請檢查最後一次,以確認你的環境是否就緒。 例如,請確保: + +- 選定的網路和同步模式下,所需磁碟空間足夠。 +- 記憶體與中央處理器未被其他程式停止。 +- 作業系統已更新至最新版。 +- 系統的時間日期正確。 +- 你的路由器和防火牆接受偵聽連接埠上的連線。 預設情況下,以太坊用戶端使用偵聽器 (TCP) 連接埠和發現 (UDP) 連接埠,預設均位於 30303。 + +首先在測試網上運行你的用戶端,以幫助確保一切正常運作。 + +你需要在開始時宣告所有非預設的用戶端設定。 你可以使用標記或設定檔來宣告你的偏好設定。 功能組和設定語法因用戶端而異。 請查看你的用戶端的文件,以了解細節。 + +執行和共識用戶端透過[引擎應用程式介面](https://github.com/ethereum/execution-apis/tree/main/src/engine)中指定的經驗證端點通訊。 要連接至共識用戶端,執行用戶端必須在已知路徑上產生一個 [`jwtsecret`](https://jwt.io/)。 鑑於安全性及穩定性,用戶端應在同一個機器上運行,且兩個用戶端必須都知道此路徑,因為此路徑用於驗證它們之間的本地遠端程序呼叫連接。 執行用戶端也必須為經過驗證的應用程式介面定義一個偵聽連接埠。 + +此驗證權杖由用戶端軟體自動產生,但某些情況下,你可能需要自行手動產生。 你可以透過 [OpenSSL](https://www.openssl.org/) 產生它: + +```sh +openssl rand -hex 32 > jwtsecret +``` + +#### 運行執行用戶端 {#running-an-execution-client} + +此章節將引導你啟動執行用戶端。 它僅做為基本設定的範例,此範例會以下列設定啟動用戶端: + +- 指定欲連線的網路,在此例子中為主網 + - 你可以選擇[任意一個測試網](/developers/docs/networks/),以初步測試你的設定 +- 定義資料目錄,用於儲存所有包含區塊鏈的資料 + - 請確保將預設路徑替換成真實路徑:如指向你外部硬碟的路徑 +- 啟用與用戶端通訊的介面 + - 包括用於與共識用戶端通訊的 JSON-RPC 和引擎應用程式介面 +- 定義經過驗證的應用程式介面的 `jwtsecret` 路徑 + - 請確保將範例路徑替換成用戶端能夠存取的真實路徑,如:`/tmp/jwtsecret` + +請注意,這只是基本的範例,其餘的設定都會被設為預設值。 仔細閱讀各個用戶端的文件,以了解預設值、設定及功能。 關於更多其他功能,如運行驗證者、監控等等,請參考特定用戶端的文件。 + +> 請注意,範例中的反斜線 `\` 僅用於設定格式;設定標記可以在單行內定義。 + +##### 運行 Besu + +此範例在主網上運行 Besu,將區塊鏈資料以預設格式儲存在 `/data/ethereum`,啟用 JSON-RPC 及引擎遠端程序呼叫以連線至共識用戶端。 引擎應用程式介面使用 `jwtsecret` 權杖驗證,且只允許來自 `localhost` 的呼叫。 + +```sh +besu --network=mainnet \ + --data-path=/data/ethereum \ + --rpc-http-enabled=true \ + --engine-rpc-enabled=true \ + --engine-host-allowlist="*" \ + --engine-jwt-enabled=true \ + --engine-jwt-secret=/path/to/jwtsecret +``` + +Besu 還有個啟動器選項,會詢問一系列問題並產生設定檔案。 透過以下指令運行互動式啟動器: + +```sh +besu --Xlauncher +``` + +[Besu 的文件](https://besu.hyperledger.org/en/latest/HowTo/Get-Started/Starting-node/)包含了額外的選項及設定細節。 + +##### 運行 Erigon + +此範例在主網上運行 Erigon,將區塊鏈資料儲存在 `/data/ethereum`,啟用 JSON-RPC,定義了哪些命名空間是允許的,並啟用連線由 `jwtsecret` 路徑定義的共識用戶端時的身份驗證。 + +```sh +erigon --chain mainnet \ + --datadir /data/ethereum \ + --http --http.api=engine,eth,web3,net \ + --authrpc.jwtsecret=/path/to/jwtsecret +``` + +Erigon 預設與 8GB 的硬碟執行完整同步,這會產生超過 2TB 的歸檔資料。 請確保 `datadir` 指向的磁碟有充足的剩餘空間,或者考慮使用可以修剪不同類型資料的 `--prune` 標記。 參考 Erigon 的 `--help` 指令以獲得更多資訊。 + +##### 運行 Geth + +此範例在主網上運行 Geth,將區塊鏈資料儲存在 `/data/ethereum`,啟用 JSON-RPC 並定義了哪些命名空間是允許的。 它也啟用了連接至共識用戶端的身份驗證,這需要 `jwtsecrest` 路徑並可以選擇定義哪些連接是允許的,在這個例子中,只允許 `localhost`。 + +```sh +geth --mainnet \ + --datadir "/data/ethereum" \ + --http --authrpc.addr localhost \ + --authrpc.vhosts="localhost" \ + --authrpc.port 8551 + --authrpc.jwtsecret=/path/to/jwtsecret +``` + +查看[文檔以了解所有設定選項](https://geth.ethereum.org/docs/fundamentals/command-line-options)並了解更多與[與共識用戶端一起運行 Geth](https://geth.ethereum.org/docs/getting-started/consensus-clients) 相關的資訊。 + +##### 運行 Nethermind + +Nethermind 提供多種 [安裝選項](https://docs.nethermind.io/nethermind/first-steps-with-nethermind/getting-started)。 此套件包含許多二進位檔案,包括有引導式設定的啟動器,可以互動式幫助你建立設定。 或者,你可以找到可執行執行器,並使用設定標記執行它。 JSON-RPC 是預設啟用的。 + +```sh +Nethermind.Runner --config mainnet \ + --datadir /data/ethereum \ + --JsonRpc.JwtSecretFile=/path/to/jwtsecret +``` + +Nethermind 文檔提供了與共識用戶端一起運行 Nethermind 的 [完整指南](https://docs.nethermind.io/nethermind/first-steps-with-nethermind/running-nethermind-post-merge)。 + +執行用戶端會啟用它的核心功能、選擇端點並開始尋找對等用戶端。 成功發現對等用戶端後,用戶端開始同步。 執行用戶端會等待來自共識用戶端的連接。 在用戶端成功與目前狀態同步以後,目前的區塊鏈資料就可以使用。 + +##### 運行 Reth + +此範例在主網上運行 Reth,使用預設的資料儲存路徑。 啟用 JSON-RPC 和引擎遠端程序呼叫驗證,以連線由 `jwtsecret` 路徑定義的共識用戶端,並且僅允許來自 `localhost` 的調用。 + +```sh +reth node \ + --authrpc.jwtsecret /path/to/jwtsecret \ + --authrpc.addr 127.0.0.1 \ + --authrpc.port 8551 +``` + +請參閱[設定 Reth](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) 以瞭解有關預設資料目錄的更多資訊。 [Besu 文件](https://reth.rs/run/mainnet.html)包含了額外的選項及設定細節。 + +#### 啟動共識用戶端 {#starting-the-consensus-client} + +共識用戶端必須在正確的連接埠設定下啟動,以建立與執行用戶端的本地遠端程序呼叫連接。 共識用戶端在執行時需要使用公開的執行用戶端通訊埠作為設定參數。 + +共識用戶端還需要執行用戶端 `jwt-secret` 的路徑,以驗證它們之間的遠端程序呼叫連接。 與上述執行用戶端例子相似,每個共識用戶端都有一個設定標記,將 jwt 權杖檔案路徑做為參數。 此路徑需與提供執行用戶端的 `jwtsecret` 路徑保持一致。 + +如果你打算運行驗證者,請確保新增一個用作以太坊費用接收地址的設定標記。 這是你的驗證者累積以太幣獎勵的地方。 每個共識用戶端都有一個接受一個以太坊地址作為參數的選項,如:`--suggested-fee-recipient=0xabcd1`。 + +當在測試網上開始運行信標節點時,藉由[檢查點同步](https://notes.ethereum.org/@launchpad/checkpoint-sync)的公共端點,可以大幅縮短同步時間。 + +#### 運行共識用戶端 {#running-a-consensus-client} + +##### 運行 Lighthouse + +在運行 Lighthouse 前,請在 [Lighthouse 手冊](https://lighthouse-book.sigmaprime.io/installation.html)中了解如何安裝並設定。 + +```sh +lighthouse beacon_node \ + --network mainnet \ + --datadir /data/ethereum \ + --http \ + --execution-endpoint http://127.0.0.1:8551 \ + --execution-jwt /path/to/jwtsecret +``` + +##### 運行 Lodestar + +透過編譯 Lodestar 軟體或下載 Docker 映像檔來安裝 Lodestar 軟體。 在[文檔](https://chainsafe.github.io/lodestar/)中了解更多,在[設定指南](https://hackmd.io/@philknows/rk5cDvKmK)中獲得更完整的資訊。 + +```sh +lodestar beacon \ + --rootDir="/data/ethereum" \ + --network=mainnet \ + --eth1.enabled=true \ + --execution.urls="http://127.0.0.1:8551" \ + --jwt-secret="/path/to/jwtsecret" +``` + +##### 運行 Nimbus + +Nimbus 包括共識用戶端與執行用戶端。 它可在各種裝置上運行,即使是性能不高的裝置。 在[安裝依賴項和 Nimbus 本體](https://nimbus.guide/quick-start.html)後,你可以透過以下指令運行共識用戶端: + +```sh +nimbus_beacon_node \ + --network=mainnet \ + --web3-url=http://127.0.0.1:8551 \ + --rest \ + --jwt-secret="/path/to/jwtsecret" +``` + +##### 運行 Prysm + +Prysm 有可以輕鬆自動安裝的腳本。 詳情請見 [Prysm 文檔](https://docs.prylabs.network/docs/install/install-with-script)。 + +```sh +./prysm.sh beacon-chain \ + --mainnet \ + --datadir /data/ethereum \ + --execution-endpoint=http://localhost:8551 \ + --jwt-secret=/path/to/jwtsecret +``` + +##### 運行 Teku + +```sh +teku --network mainnet \ + --data-path "/data/ethereum" \ + --ee-endpoint http://localhost:8551 \ + --ee-jwt-secret-file "/path/to/jwtsecret" +``` + +當共識用戶端連接至執行用戶端,並讀取存款合約以及識別驗證者時,它同時也會連接至其他對等信標節點,並從創世塊開始同步共識時隙。 當信標節點到達目前時期時,信標應用程式介面就可以供你的驗證者使用。 了解關於[信標節點應用程式介面](https://eth2docs.vercel.app/)的更多資訊。 + +### 新增驗證者 {#adding-validators} + +共識用戶端作為供驗證者連接的信標節點。 每個共識用戶端都有自己的驗證者軟體,可以在各自的文檔中找到詳細描述。 + +運行自己的驗證者允許[單獨質押](/staking/solo/),單獨質押是支援以太坊的最具影響且最去信任的方法。 然而,單獨質押要求存入 32 以太幣。 若要以較少的以太幣在你自己的節點上運行驗證者,你可能會對擁有無需許可的節點營運者的去中心化質押池 (如 [Rocket Pool](https://rocketpool.net/node-operators))感興趣。 + +開始質押和產生驗證者金鑰最簡單的方法就是使用 [Holesky 測試網質押啟動面板](https://holesky.launchpad.ethereum.org/),這可讓你透過[在 Holesky 上運行節點](https://notes.ethereum.org/@launchpad/holesky)來測試你的設定。 當你準備好部署到主網時,即可使用[主網質押啟動面板](https://launchpad.ethereum.org/)重複這些步驟。 + +請見[質押頁面](/staking)以查看質押選項概覽。 + +### 使用節點 {#using-the-node} + +執行用戶端提供了[遠端程序呼叫應用程式介面端點](/developers/docs/apis/json-rpc/),可透過多種方式提交交易、在以太坊上部署智慧型合約或與以太坊上的智慧型合約互動: + +- 使用合適的協定手動呼叫它們(例如使用 `curl`) +- 附加提供的控制台(例如 `geth attach`) +- 透過 wbe3 函式庫在應用程式中實作它們,如 [web3.py](https://web3py.readthedocs.io/en/stable/overview.html#overview) 及 [ethers](https://github.com/ethers-io/ethers.js/) + +不同的用戶端有不同的遠端程序呼叫端點實作。 但是有一個標準的 JSON-RPC,可以用於每個用戶端。 有關概述,[請閱讀 JSON-RPC 文件](/developers/docs/apis/json-rpc/)。 需要從以太坊網路取得資訊的應用程式可以使用這個遠端程序呼叫。 舉例來說,熱門錢包 MetaMask 可讓你[連接至你自己的遠端程序呼叫端點](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node),提供了強大的隱私及安全優勢。 + +共識用戶端皆會公開[信標應用程式介面](https://ethereum.github.io/beacon-APIs),可用於確認共識用戶端的狀態,或者透過工具(如 [Curl](https://curl.se))發送請求以下載區塊和共識資料。 更多資訊可在每個共識用戶端的文檔上找到。 + +#### 存取遠端程序呼叫 {#reaching-rpc} + +執行用戶端 JSON-RPC 的預設通訊埠是 `8545`,但你可以在設定中修改本地端點的通訊埠。 遠端程序呼叫介面預設只能透過你電腦的 localhost 存取。 為了要在遠端也能存取遠端程序呼叫介面,你可將位址變更為 `0.0.0.0` 將其公開。 這樣一來,就可透過本地網路以及公網 IP 位址存取遠端程序呼叫介面了。 在多數情況下,你也需要在路由器上設定通訊埠轉發。 + +公開通訊埠至網際網路時應謹慎,因為這會使網際網路上的任何人都能控制你的節點。 如果你將用戶端作為錢包使用,惡意人士可能存取你的節點以癱瘓你的系統,或者竊取其中的資產。 + +解決上述問題的辦法是,避免讓潛在的高危遠端程序呼叫方法可被修改。 舉例來說,使用 Geth 時,你可以透過標記 `--http.api web3,eth,txpool` 宣告可修改的方法。 + +開發邊緣層應用程式介面或網頁伺服器應用程式(如 Nginx),並將它們連接至你用戶端的本機位址及通訊埠,這可以擴展對遠端程序呼叫介面的存取方式。 透過中間層也使開發者能夠為連接至遠端程序呼叫介面的 `https` 安全連線設置憑證。 + +設置網頁伺服器、代理伺服器或外部的 Rest API 並非對你節點的遠端程序呼叫端點提供存取的唯一方式。 設定可公開存取的端點的另一種保護隱私的方法是,將節點託管在自己的 [Tor](https://www.torproject.org/) 洋蔥服務上。 這可讓你在沒有靜態公共 IP 位址或開放通訊埠的情況下,仍可存取本地網路外的遠端程序呼叫。 然而,使用此設定只會允許透過 Tor 網路存取遠端程序呼叫端點,但並非所有應用程式都支援此網路,且可能造成連線問題。 + +要完成設定,你需要建立自己的[洋蔥服務](https://community.torproject.org/onion-services/)。 閱讀洋蔥服務設定的[文檔](https://community.torproject.org/onion-services/setup/)以託管你自己的洋蔥服務。 你可將其指向有代理伺服器的遠端程序呼叫通訊埠網頁伺服器,或者直接指向遠端程序呼叫。 + +最後一種提供內部網路存取的方式是透過虛擬私人網路連線,這同時也是最受歡迎的一種方式。 依據你的用例,以及需要存取你的節點的使用者數量,安全的虛擬私人網路連線或許是個可選方案。 [OpenVPN](https://openvpn.net/) 是功能完備的 SSL VPN,使用業界標準的 SSL/TSL 協議實現了 OSI 第二、三層的安全網路插件,且支援基於證書、智慧卡和/或使用者名稱/密碼等彈性用戶端驗證方法,並可以使用基於使用者或群組的存取控制政策,該政策使用套用於虛擬私人網路虛擬介面的防火牆規則。 + +### 運行節點 {#operating-the-node} + +你應該定期監控你的節點以確保其正常運行。 你可能需要偶爾進行維護。 + +#### 維持節點上線 {#keeping-node-online} + +你的節點不需要一直保持上線,但應儘可能維持它的上線狀態,以持續與網路同步。 你可以關閉它並重啟,但請記得: + +- 若磁碟仍正在寫入最近的狀態,關閉節點可能會花上數分鐘。 +- 強制關閉可能會損害資料庫,這樣可能必須重新同步整個節點。 +- 你的用戶端將與網路不同步,並且在重新啟動時需要重新同步。 雖然節點可以從上次關閉時的地方開始同步,但此流程會依離線的時長而定。 + +_這不適用於共識層驗證者節點。_節點離線將影響所有依賴節點的服務。 如果你是為了_質押_而運行節點,應該儘可能降低停機時間。 + +#### 建立用戶端服務 {#creating-client-services} + +考慮建立一個在啟動時自動運行你的用戶端的服務。 例如,在 Linux 伺服器上,最佳案例為建立一個服務(如透過 `systemmd`),它會在適當設定的情況下執行用戶端,可限制使用者權限並自動重啟。 + +#### 更新用戶端 {#updating-clients} + +你需要確保透過安全補丁、功能與[以太坊改善提議](/eips/)讓你的用戶端軟體保持最新。 特別是[硬分叉](/history/)前,請確保你運行的是正確的用戶端版本。 + +> 在重大的網路更新前,以太坊基金會在它們的[部落格](https://blog.ethereum.org)上發布貼文。 你可以[訂閱這些公告](https://blog.ethereum.org/category/protocol#subscribe),在你的節點需要更新時,透過電子郵件接收通知。 + +更新用戶端非常簡單。 在每個用戶端的文檔中都有具體的說明,但實際上只要下載最新版的用戶端並透過最新的可執行檔重新啟動用戶端即可。 用戶端應從上次同步中斷的地方繼續同步,且完成用戶端更新。 + +每個用戶端實作都有用於點對點協定的人類可讀版本的字串,但也可透過指令存取該字串。 這個版本的字串可讓使用者檢查是否正執行正確的版本,並支援區塊瀏覽器和有興趣量化網路上特定用戶端的分佈的其他分析工具。 請參閱個別的用戶端文件以取得版本字串的更多資訊。 + +#### 運行額外服務 {#running-additional-services} + +運行你自己的節點,可讓你使用需要直接存取以太坊用戶端遠端程序呼叫的服務。 這些是建立在以太坊之上的服務,如[二層網路解決方案 ](/developers/docs/scaling/#layer-2-scaling)、錢包的後端、區塊鏈瀏覽器、開發者工具以及其他以太坊基礎設施。 + +#### 監控節點 {#monitoring-the-node} + +要正確監控你的節點,請考慮收集指標。 用戶端提供指標端點,因此你可以取得關於你節點的綜合資料。 使用諸如 [InfluxDB](https://www.influxdata.com/get-influxdb/) 或 [Prometheus](https://prometheus.io/) 等工具來建立資料庫,可讓你在像是 [Grafana](https://grafana.com/) 的軟體中將資料視覺化和圖表化。 使用此軟體有許多設定可以使用,還有不同的 Grafana 儀表板來將你的節點和整個網路視覺化。 詳細範例請見[監控 Geth 教學](/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/)。 + +在監控時,請務必注意機器的效能。 在節點的初次同步期間,用戶端軟體可能會耗用大量的 CPU 和 RAM 資源。 除了 Grafana,你也可以使用其他作業系統提供的工具,像是 `htop` 或 `uptime` 來執行。 + +## 衍生閱讀 {#further-reading} + +- [以太坊質押指南](https://github.com/SomerEsat/ethereum-staking-guides) - _Somer Esat,時常更新_ +- [ 指南|如何設定用於以太坊主網上質押的驗證者](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet) _– CoinCashew,經常更新_ +- [在測試網上運行驗證者的 ETHStaker 指南](https://github.com/remyroy/ethstaker#guides) – _ETHStaker,經常更新_ +- [面向節點營運者的合併常見問題](https://notes.ethereum.org/@launchpad/node-faq-merge) - _2022 年 7 月_ +- [分析以太坊完整驗證節點的硬體要求](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902)_ – Albert Palau,2018 年9 月24 日_ +- [運行以太坊全節點:針對幾乎沒有動力的人提供的指南](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31)_ – Justin Leroux,2019 年 11 月 7 日_ +- [在以太坊主網上運行 Hyperledger Besu 節點:優勢、要求和設定](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/)_ – Felipe Faraggi,2020 年 5 月 7 日_ +- [使用監控堆疊部署 Nethermind 以太坊用戶端](https://medium.com/nethermind-eth/deploying-nethermind-ethereum-client-with-monitoring-stack-55ce1622edbd) _ – Nethermind.eth,2020 年 7 月 8 日_ + +## 相關主題 {#related-topics} + +- [節點和用戶端](/developers/docs/nodes-and-clients/) +- [分塊](/developers/docs/blocks/) +- [網路](/developers/docs/networks/) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/index.md" new file mode 100644 index 00000000000..832a6b165cf --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/index.md" @@ -0,0 +1,92 @@ +--- +title: 共識機制 +description: 解釋分佈式系統中的共識協定及其於以太坊中扮演的角色。 +lang: zh-tw +--- + +「共識機制」一詞常泛指「權益證明」、「工作量證明」或「權威證明」協定。 然而,這些證明方式僅為共識機制當中用來抵禦[女巫攻擊](/glossary/#sybil-attack)的組成部分。 共識機制是由一整套想法、協定和激勵構成的體系,使得一系列分佈式節點能夠就區塊鏈狀態達成一致。 + +## 基本資訊 {#prerequisites} + +為了加深對本頁內容的理解,我們推薦你先仔細閱讀我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 + +## 何為共識? {#what-is-consensus} + +提到共識,我們意指公共合意已被達成。 考慮一群想去看電影的人。 如果他們對於提議「看某部電影」沒有任何異議,那就可以說共識達成了。 如果存在異議,那他們就必須透過某種方法決定要看哪一部電影。 在極端情況下,這群人就會分開。 + +對於以太坊區塊鏈來說,該過程是標準化的,達成共識意味著全網路中至少 66% 的節點就網路的全域狀態達成一致。 + +## 何為共識機制? {#what-is-a-consensus-mechanism} + +共識機制一詞是指一整套由協定、激勵和想法構成的體系,使得整個網路的節點能夠就區塊鏈狀態達成一致。 + +以太坊採用基於權益證明的共識機制,其加密經濟安全性源於對質押者的鎖定資本實施的一系列獎勵和懲罰措施。 這種激勵體系鼓勵各個質押者誠信運作驗證者節點,並懲罰那些有不良行為的質押才,讓攻擊網路的行為付出極為高昂的代價。 + +還有一個協定,用於規範如何選擇誠實的驗證者,讓它們提議或驗證區塊、處理交易並投票支持其鏈頭部的視圖。 在極少數情況下,如果鏈頭部附近的同一位置存在多個區塊,就會利用一個分叉選擇機制來選擇組成「最重」的鏈的區塊。區塊權重根據為相應區塊投票的驗證者數量進行計算,並按驗證者質押的以太幣餘額進行加權。 + +有些關於共識的重要概念並未在規範中明確定義,例如由潛在「帶外社交協調」提供的額外安全保障,可作為防禦網路攻擊的最後一道防線。 + +這些部分共同組成了共識機制。 + +## 共識機制種類 {#types-of-consensus-mechanisms} + +### 基於工作量證明 {#proof-of-work} + +和比特幣類似,以太坊也曾經使用基於**工作量證明 (PoW)** 的共識協定。 + +#### 區塊建立 {#pow-block-creation} + +礦工相互競爭以建立包含已處理交易的新區塊。 贏家將與網路其餘部分分享新區塊,並獲得一些新鑄造的以太幣。 解決數學問題速度最快的電腦會在比賽中獲勝。 這會產生當前區塊和之前的區塊之間的加密連結。 解決此數學問題便是「工作量證明」所做的工作。 隨後由一條分叉選擇規則確定規範鏈,該規則會選擇一組在挖礦工作方面做得最多的區塊。 + +#### 安全性 {#pow-security} + +你需要控制 51% 的網路算力才能欺騙網路,這一事實確保了網路安全。 發起攻擊需要鉅額的設備和能源投入;你花費的可能會比你賺的還要多。 + +更多關於[工作量證明](/developers/docs/consensus-mechanisms/pow/)的資訊 + +### 基於權益證明 {#proof-of-stake} + +以太坊目前使用基於**權益證明 (PoS)** 的共識協定。 + +#### 區塊生成 {#pos-block-creation} + +驗證者建立區塊。 每個時隙都會隨機選擇一個驗證者成為區塊提議者。 區塊提議者的共識用戶端請求配對的執行用戶端對交易打包,作為「執行有效負載」。 然後它們將其包裝成共識資料以形成區塊,再把這個區塊傳送給以太坊網路上的其他節點。 這樣的區塊產生會得到以太幣獎勵。 在極少數情況下,當一個時隙中存在多個可能的區塊,或節點在不同時間收到區塊,分叉選擇演算法就會選擇使形成的鏈具有最大證明權重的區塊(證明權重是指提供證明的驗證者數量,並按驗證者質押的以太幣餘額進行調整)。 + +#### 安全性 {#pos-security} + +權益證明系統以加密經濟的方式保障安全,因為攻擊者若試圖控制整個鏈,就必須銷毀大量以太幣。 獎勵機制會獎勵誠實行事的質押者,而懲罰機制則會抑制質押者做出惡意行為。 + +更多關於[權益證明](/developers/docs/consensus-mechanisms/pos/)的資訊 + +### 視覺導覽 {#types-of-consensus-video} + +觀看以太坊上所用不同類型之共識機制的更多資訊: + + + +### 抵禦女巫攻擊與區塊鏈選擇 {#sybil-chain} + +僅僅工作量證明和權益證明還不能構成共識協定,但為了簡便起見,通常將它們稱為共識協定。 它們實際是抵禦女巫攻擊機制及區塊鏈創作者選擇程式;提供了一種方法來決定誰能成為最新區塊創作者。 另一個重要組成部分是鏈選擇(又稱分叉選擇)演算法,在同一位置有多個區塊的情況下,它讓節點可以在鏈頭部選擇一個正確的區塊。 + +**抵禦女巫攻擊**衡量協定有效對抗女巫攻擊的能力。 抵禦此類攻擊對於去中心化區塊鏈至關緊要,可使所有礦工與驗證者能夠基於其投入的資源平等地獲得獎勵。 工作量證明及權益證明透過讓使用者耗費大量能源或投入大量抵押,來防範此類攻擊。 此類保護會對女巫攻擊形成經濟上的威懾。 + +**區塊鏈選擇規則**被用來決定哪條鏈為「正確」的鏈。 比特幣使用「最長鏈」規則。這意味著,任何最長的區塊鏈,都會被其他節點接受並與之合作。 對於工作量證明區塊鏈,最長鏈取決於該鏈所累積之工作量證明總難度。 以太坊也曾經用過最長鏈規則;但現在以太坊在權益證明機制下運作,採用了經過更新的分叉選擇演算法來衡量鏈的「權重」。 權重是累積的驗證者投票數累積總和,並以驗證者質押的以太幣餘額進行加權。 + +以太坊使用一種被稱為 [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) 的共識機制,它結合了 [Casper 友善最終確定性組件權益證明](https://arxiv.org/abs/1710.09437)和[最貪婪最重觀測子樹 (GHOST) 分叉選擇規則](https://arxiv.org/abs/2003.03052)。 + +## 衍生閱讀 {#further-reading} + +- [何為區塊鏈共識演算法?](https://academy.binance.com/en/articles/what-is-a-blockchain-consensus-algorithm) +- [何為 Nakamoto 共識? 完整初學者指南](https://blockonomi.com/nakamoto-consensus/) +- [Casper 機制如何運作?](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) +- [關於權益證明區塊鏈的安全性及效能](https://eprint.iacr.org/2016/555.pdf) +- [拜占庭問題](https://en.wikipedia.org/wiki/Byzantine_fault) + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ + +## 相關主題 {#related-topics} + +- [工作量證明](/developers/docs/consensus-mechanisms/pow/) +- [挖礦](/developers/docs/consensus-mechanisms/pow/mining/) +- [持有量證明(又稱:權益證明)](/developers/docs/consensus-mechanisms/pos/) +- [權威證明](/developers/docs/consensus-mechanisms/poa/) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md" new file mode 100644 index 00000000000..a2431847b90 --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md" @@ -0,0 +1,163 @@ +--- +title: 以太坊權益證明之攻擊與防禦 +description: 瞭解以太坊權益證明的已知攻擊媒介,以及如何進行防禦。 +lang: zh-tw +--- + +小偷和破壞者不斷尋找機會攻擊以太坊的用戶端軟體。 本頁概述了以太坊共識層的已知攻擊媒介,以及如何防禦這些攻擊。 本頁上的資訊改編自一個[更長格式的版本](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs)。 + +## 先備知識 {#prerequisites} + +需要瞭解一些關於[權益證明](/developers/docs/consensus-mechanisms/pos/)的基本知識。 此外,對以太坊的[激勵層](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties)和分叉選擇演算法 [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper) 有基本瞭解,也會有所助益。 + +## 攻擊者的企圖 {#what-do-attackers-want} + +一個常見的誤解是,成功的攻擊者可以產生新的以太幣,或者從任意帳戶中取走以太幣。 由於所有交易都由網路上的所有執行用戶端執行,所以這兩種情況都是不可能的。 交易必須滿足基本的有效性條件(例如,交易由發送者的私密金鑰簽署,發送者有足夠的餘額等),否則它們將被直接還原。 攻擊者的真實目標可能有三類結果:區塊重組、雙重最終確定性或最終確定性延遲。 + +**「區塊重組」**是將區塊重新排列成新的順序,或許在規範鏈中進行一些區塊的增減。 惡意的區塊重組可能確保納入或排除特定的區塊,允許透過預先交易和尾随交易(最大可提取价值)進行雙重支付或價值提取。 區塊重組也可以用來阻止某些交易被納入規範鏈中 - 這是一種審查形式。 區塊重組的最極端形式是「最終確定性反轉」,它會移除或替換先前已最終確定的區塊。 只有當攻擊者摧毀了總質押以太幣的 ⅓ 以上時,這才有可能 - 這一保證被稱為「經濟最終確定性」- 稍後會有詳細說明。 + +**雙重最終確定性**是一種不太可能但很嚴重的狀況,其中兩個分叉能夠同時最終確定,造成鏈中的永久分裂。 對於願意以 34% 的縂質押以太幣來冒險的攻擊者來說,這在理論上是可能的。 社群將被迫在鏈下協調並就跟隨哪條鏈達成協定,這將需要社交層面的力量。 + +**最終確定性延遲**攻擊會阻止網路達到最終確定鏈段的必要條件。 沒有最終確定性,就很難信任建立在以太坊之上的金融應用程式。 最終確定性延遲攻擊的目的可能僅僅是破壞以太坊,而不是直接獲利,除非攻擊者有一些策略性的短融資。 + +對社交層的攻擊可能旨在破壞公眾對以太坊的信任,讓以太幣貶值、減少採用,或削弱以太坊社群以增加帶外協調的難度。 + +在確定對手可能為何攻擊以太坊後,以下部分將探討他們可能採用的_攻擊方法_。 + +## 攻擊方法 {#methods-of-attack} + +### 0 層網路攻擊 {#layer-0} + +首先,那些不積極參與以太坊(透過運行用戶端軟件)的個人可以透過針對社交層(0 層網路)進行攻擊。 0 層網路是建立以太坊的基礎,因此它代表了一個潛在的攻擊面,其後果會在整個堆疊中產生波及效應。 一些例子可能包括: + +- 一個虛假資訊宣傳活動可能會侵蝕社群對以太坊的開發藍圖、開發者團隊、應用程式等的信任。 然後,這可能會減少願意參與保護網路的個人數量,降低去中心化和加密經濟安全性。 +- 針對開發者社群的有針對性的攻擊或恐嚇。 這可能導致開發者自願退出,並減慢以太坊的進展。 + +- 過度熱衷的監管也可以被認為是對 0 層網路的攻擊,因為它可能迅速挫傷參與和採用的積極性。 +- 將知識淵博的惡意行為者滲透到開發者社群中,目的是透過無意義的討論、延遲關鍵決策、建立垃圾郵件等手段減緩進展。 +- 向以太坊生態系統的關鍵參與者行賄以影響決策。 + +這些攻擊特別危險的原因是,在許多情況下幾乎不需要太多資本或技術知識。 0 層網路攻擊可能是加密經濟攻擊的倍增器。 例如,如果惡意的多數質押持有者實現了審查或最終確定性反轉,則破壞社交層可能導致帶外協調社群響應變得更困難。 + +防禦 0 層網路攻擊可能並不簡單,但可以確立一些基本原則。 其中一個原則是由誠實社群成員透過部落格、Discord 伺服器、註釋規範、書籍、播客和 YouTube 等媒體建立和傳播有關以太坊的公共資訊並保持整體高信噪比。 在 ethereum.org,我們努力維護準確的資訊並嘗試將其翻譯成盡可能多的語言。 在一個領域充斥著高品質的資訊和模因可以有效防止錯誤資訊的傳播。 + +另一個對抗社交層攻擊的重要防禦措施是明確的使命宣言和管理體系協定。 以太坊已將自身定位為智慧型合約 1 層網路中的去中心化和安全性擁護者,同時高度重視可擴展性和永續性。 無論以太坊社群中出現何種分歧,這些核心原則都極少受到損害。 根據這些核心原則評估一個敘述,並透過 EIP(以太坊改進提案)程序中的連續審查來檢視它們,可能有助於社群區分良好行為者與惡意行為者,並限制惡意行為者影響以太坊之未來方向的範圍。 + +最後,以太坊社群保持對所有參與者開放和友好至關重要。 一個帶有門戶守衛和排外性的社群特別容易受到社交攻擊,因為容易形成「我們和他們」的敘事。 部落主義和有害的極端主義會傷害社群,削弱 0 層網路的安全性。 對以太坊網路安全具有既得利益的以太坊社群成員,應該將他們在線上和實體世界中的行為視為對以太坊 0 層網路安全的直接促進因素。 + +### 攻擊協定 {#attacking-the-protocol} + +任何人都可以執行以太坊的用戶端軟體。 要將驗證者新增至用戶端,使用者需要將 32 個以太幣質押到存款合約中。 驗證者允許使用者透過提交和證明新區塊來積極參與以太坊網路的安全性。 現在,驗證者可以發聲,影響區塊鏈的未來內容 - 他們可以誠實行事,透過獎勵來增加他們的以太幣儲備,或者他們可以冒著失去其質押的風險,試圖操縱程序以謀取自己的利益。 一種發動攻擊的方法是累積更大比例的總質押,然後用它來在投票中超過誠實的驗證者。 攻擊者控制的質押比例越大,他們的投票權就越大,尤其是在我們稍後將探討的某些經濟里程碑上。 然而,大多數攻擊者將無法累積足夠的以太幣以此方式進行攻擊,因此他們必須使用微妙的技巧來操縱誠實的大多數人採取特定的行動。 + +從根本上說,所有小規模質押攻擊都是兩種驗證者不當行為的微妙變體:活動不足(未能證明/提議或者延後這樣做)或者活動過多(在一個時隙內提議/證明的次數過多)。 在最普遍的形式下,這些行動可以很容易地由分叉選擇演算法和激勵層進行處理,但也有聰明的方式可以讓攻擊者操縱系統以獲得優勢。 + +### 使用少量以太幣的攻擊 {#attacks-by-small-stakeholders} + +#### 區塊重組 {#reorgs} + +有幾篇論文解釋了在以太坊上使用僅佔總質押以太幣一小部分便實現了區塊重組或最終確定性延遲的攻擊。 這些攻擊通常依賴於攻擊者向其他驗證者隱瞞某些資訊,然後以某種微妙的方式和/或在某個適當的時刻發佈該資訊。 它們通常旨在取代規範鏈中的一些誠實區塊。 [Neuder 等人在 2020 年的研究](https://arxiv.org/pdf/2102.02247.pdf)中展示了一個攻擊驗證者如何在特定時隙 `n+1` 建立和證明一個區塊 (`B`),但未將其傳播到網路上的其他節點。 相反,他們保留該已證明的區塊,直到下一個時隙 `n+2`。 一個誠實的驗證者在時隙 `n+2` 提交了一個區塊 (`C`)。 幾乎同時,攻擊者可以發佈他們所保留的區塊 (`B`) 及為其保留的證明,並且在時隙 `n+2` 透過他們的投票證明區塊 `B` 為鏈頭,有效地否認了誠實區塊 `C` 的存在。 當誠實區塊 `D` 發佈時,分叉選擇演算法會看到建置在 `B` 之上的 `D` 比建置在 `C` 之上的 `D` 有更多權重。 因此,攻擊者成功地使用 1 個區塊的事前重組,在時隙 `n+2` 從規範鏈中移除了誠實區塊 `C`。 [擁有 34% 的質押份額的攻擊者](https://www.youtube.com/watch?v=6vzXwwk12ZE)在這次攻擊中有很大的機會成功,正如[這條注釋](https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair)中所解釋的。 然而,從理論上講,這種攻擊也可以使用較小的質押份額來嘗試。 [Neuder 等人在 2020 年的研究](https://arxiv.org/pdf/2102.02247.pdf)描述了這種攻擊在 30% 的質押份額下的運作,但後來證明它在[總質押份額的 2%](https://arxiv.org/pdf/2009.04987.pdf) 下可行,然後[單個驗證者](https://arxiv.org/abs/2110.10086#)使用我們將在下一節中探討的平衡技巧亦有效。 + +![事前重組](reorg-schematic.png) + +上述一個區塊重組攻擊的概念示意圖(改編自 https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair) + +一種更複雜的攻擊可以將誠實的驗證者集合分成擁有不同鏈頭檢視的不同群組。 這被稱為**平衡攻擊**。 攻擊者等待著提出區塊的機會,當機會到來時,他們模稜兩可地提出兩個區塊。 他們將一個區塊發送給一半的誠實驗證者集合,將另一個區塊發送給另一半。 這種模稜兩可的行為會被分叉選擇演算法偵測到,區塊提議者將被懲處並從網路中驅逐,但這兩個區塊仍然存在,並在每個分叉擁有約一半驗證者集合的證明。 同時,其餘的惡意驗證者保留他們的證明。 然後,透過在分叉選擇演算法執行時選擇性地向足夠的驗證者釋放有利於某一分叉或另一分叉的證明,他們將證明的累積權重傾向於其中一個或另一個分叉。 這種做法可以無限期地繼續下去,攻擊驗證者則在兩個分叉之間保持驗證者的平均分配。 由於兩個分叉都無法吸引到 2/3 的絕對多數,網路將無法最終確定。 + +**反彈攻擊**與之類似。 攻擊驗證者同樣保留了投票。 他們不是透過釋放投票來保持兩個分叉之間的平均分配,而是在適當的時刻使用他們的投票來證明在分叉 A 和分叉 B 之間交替的檢查點。這種在兩個分叉之間翻轉的證明方式,阻止了可以在任何鏈上最終確定的被證明來源和目標檢查點對的出現,從而終止了最終確定性。 + + + +反彈和平衡攻擊都依賴於攻擊者對網路上的訊息時間具有非常精細的控制,這是不太可能的。 然而,協定中內建了防禦機制,與較慢訊息相比,給予了及時訊息額外的加權。 這被稱為[提議者權重增強](https://github.com/ethereum/consensus-specs/pull/2730)。 為了防範反彈攻擊,分叉選擇演算法已經更新,使得在[每個時期的前 1/3 時隙內](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114),最新的被證明檢查點只能切換到另一個鏈的檢查點。 這個條件防止攻擊者儲存投票以便稍後部署 - 分叉選擇演算法只是在時期的前 1/3 對它選擇的檢查點保持忠誠,而在這段時間內大多數誠實的驗證者已經完成投票。 + +綜合考慮,這些措施創造了這樣的情況:一個誠實的區塊提議者在時隙開始後很快就發出他們的區塊,然後有大約 1/3 個時隙(約 4 秒)的時間,新的區塊可能會導致分叉選擇演算法切換到另一個鏈。 在同樣的截止期限之後,來自緩慢驗證者的證明相較於之前到達的證明會被降低權重。 這非常有利於及時的提議者和驗證者來確定鏈頭,並大幅降低了平衡或反彈攻擊成功的可能性。 + +值得注意的是,僅僅進行提議者加強只能防禦“廉價的重組攻擊”,即由持有較小質押份額的攻擊者嘗試的重組攻擊。 事實上,提議者加強本身可能會被更大的質押持有者利用。 [這篇文章的作者](https://ethresear.ch/t/change-fork-choice-rule-to-mitigate-balancing-and-reorging-attacks/11127)描述了一個持有 7% 質押份額的攻擊者如何可以戰略性地部署他們的投票,欺騙誠實的驗證者在他們的分叉上建置,將誠實的區塊重組掉。 這種攻擊是在假設極端理想的延遲條件下設計的,而這種情況非常不太可能。 對於攻擊者來說,勝算仍然非常渺茫,而更大的質押份額也意味著更多的資本風險和更強大的經濟阻力。 + +還提出了一種專門針對最新訊息導向 (LMD) 規則的[平衡攻擊](https://ethresear.ch/t/balancing-attack-lmd-edition/11853),儘管有提議者加強,但這種攻擊據認為仍然是可行的。 攻擊者透過模稜兩可的區塊提議設立了兩條競爭的鏈,並將每個區塊各傳播給大約一半的網路,從而在分叉之間建立起近似的平衡。 然後,串通的驗證者模稜兩可地投票,並安排時間,使得一半的網路首先收到他們對分叉 `A` 的投票,另一半首先收到他們對分叉 `B` 的投票。 由於最新訊息導向規則會丟棄每個驗證者的第二個證明,而只保留第一個證明,所以一半的網路看到對 `A` 的投票,沒有對 `B` 的投票,另一半則看到對 `B` 的投票,沒有對 `A` 的投票。 作者描述了最新訊息導向規則賦予了對手「卓越的力量」來發動平衡攻擊。 + +這種最新訊息導向攻擊媒介已透過[更新分叉選擇演算法](https://github.com/ethereum/consensus-specs/pull/2845)予以關閉,從而在分叉選擇考量中完全排除了模稜兩可的驗證者。 模稜兩可的驗證者的未來影響也受到分叉選擇演算法的削減。 這可以防止上面概述的平衡攻擊,同時保持了對雪崩攻擊的強韌性。 + +另一類攻擊稱為[**雪崩攻擊**](https://ethresear.ch/t/avalanche-attack-on-proof-of-stake-ghost/11854/3),在一份 [2022 年 3 月的論文](https://arxiv.org/pdf/2203.01315.pdf)中進行了描述。 為了發動雪崩攻擊,攻擊者需要控制幾個連續的區塊提議者。 在每個區塊提議的時隙中,攻擊者扣留他們的區塊,將它們收集起來,直到誠實的鏈與保留的區塊達到相等的子樹權重。 然後,保留的區塊被釋放出來,使它們最大程度地模稜兩可。 作者指出,提議者加強 - 對抗平衡和反彈攻擊的主要防禦手段 - 並不能防範某些變種的雪崩攻擊。 然而,作者們只在高度理想化的以太坊分叉選擇演算法版本上展示了這種攻擊(他們使用了不帶最新訊息導向 (LMD) 的最貪婪、最重的可觀察子樹 (GHOST))。 + +透過最新訊息導向的最貪婪、最重的可觀察子樹分叉選擇演算法的最新訊息導向部分可以緩解雪崩攻擊。 LMD 為「latest-message-driven(最新訊息導向)」,指的是每個驗證者保存的一份表格,其中包含了從其他驗證者處收到的最新訊息。 該欄位只有在以下情況才會更新:新的訊息來自比驗證者表格中某個現存的時隙更晚的時隙。 實際上,這表示在每個時隙中,接收的第一則訊息會被接受,其他的則會當作模糊訊息被忽略。 換句話說,共識用戶端不會計算模糊的訊息 - 它們只會使用從每個驗證者處收到的第一則訊息,其他模糊訊息將被丟棄以避免雪崩攻擊。 + +未來有其他多個對分叉選擇規則的潛在升級,可藉由提議者增強以提升安全性。 其一為[檢視合併](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739),指的是證明者會在時隙開始前的 `n` 秒凍結他們的分叉選擇檢視,然後由提議者協助同步整個網路上的鏈檢視。 另一個潛在的升級是[單時隙最終確定性](https://notes.ethereum.org/@vbuterin/single_slot_finality),其透過在一個時隙後立即最終確定區塊鏈,以保護鏈免於基於訊息時間類型的攻擊。 + +#### 最終確定性延遲 {#finality-delay} + +在首次描述低成本單區塊重組攻擊的[同一篇論文](https://econcs.pku.edu.cn/wine2020/wine2020/Workshop/GTiB20_paper_8.pdf)中,還描述了最終確定性延遲(又稱「活躍性失效」)攻擊,此攻擊仰賴攻擊者同時為時期邊界區塊的區塊提議者。 這非常重要,因為時期邊界區塊會成為 Casper FFG 用來最終確定一部分鏈的檢查點。 攻擊者只需扣留他們的區塊,直到足夠多的誠實驗證者使用他們的友善最終確定性組件投票支持前一個時期邊界區塊作為目前的最終確定目標。 接著,他們會釋放被其扣留的區塊。 攻擊者證明其區塊,其餘誠實的驗證者也會使用不同的目標檢查點建立分叉。 如果時機抓的準,他們將阻止最終確定性,因為達不到 2/3 的絕對多數來證明任何一個分叉。 質押的以太幣越少,由攻擊者直接控制的證明越少,攻擊者控制驗證者提交特定時期邊界區塊的機率就越低,因此攻擊者就需要越精準地控制時機。 + +#### 遠程攻擊 {#long-range-attacks} + +還有種針對權益證明區塊鏈的攻擊,涉及了參與創世區塊的驗證者,他們與誠實的驗證者一起維護區塊鏈的單獨分叉,並在很久以後的某個適當時機,最終說服誠實的驗證者集合切換到該分叉。 此類型的攻擊在以太坊上不可能發生,因為最終確定性組件會在固定時間間隔(「檢查點」)確認所有驗證者都同意誠實鏈的狀態。 這個簡單的機制抵禦了遠程攻擊者,因為以太坊用戶端不會重組已最終確定的區塊。 為此,加入網路的新節點會尋找最近且受信任狀態的雜湊(即「[弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/)」檢查點),並將該檢查點作為偽創世區塊,以在其上建置。 這會在剛加入網路的新節點開始驗證自身資訊前,為它們建立「信任閘道」。 + +#### 阻斷服務攻擊 {#denial-of-service} + +以太坊的權益證明機制會在每個時隙,從驗證者集合中選出一個單一的驗證者作為區塊提議者。 這可以透過公開函式算出,且攻擊者可能在區塊提交前一小段時間,預先識別出下個區塊提議者。 接著,攻擊者可以對區塊提議者發送垃圾訊息,阻止他們與其對等節點交換訊息。 對網路的其餘部分來說,此時的區塊提議者視同離線,而時隙則為空。 這可能會是針對特定驗證者的一種審查方式,阻止他們在區塊鏈上新增資訊。 實現單一秘密領導者選舉 (SSLE) 或非單一秘密領導者選舉可以緩解阻斷服務攻擊風險,這是因為只有區塊提議者知道自己被選上,且無法預先知道選舉結果。 這部分尚未實現,但目前已是活躍的[研究與開發](https://ethresear.ch/t/secret-non-single-leader-election/11789)領域。 + +這些都表明了一個事實:要透過少量質押來成功攻擊以太坊非常困難。 此處描述的可行攻擊需要理想化的分叉選擇演算法、極端網路條件,或者已透過相對較小的用戶端軟體修補關閉了攻擊媒介。 當然,這還是無法排除現有零日攻擊逍遙在外的可能性,但它證明了在攻擊者質押量不高時,需要有非常高超的技術、對共識層的瞭解,以及運氣才有可能完成有效攻擊。 站在攻擊者的角度,最佳選擇可能是儘可能累積大量的以太幣,並提高自己在總質押中的佔比。 + +### 使用超過或等於 33% 質押總量的攻擊者 {#attackers-with-33-stake} + +攻擊者用於投票的質押以太幣用於投票,且有越多的驗證者可能在每個時隙被選中並提交區塊,那麼上述文章中提到的所有攻擊就越有可能成功。 惡意驗證者的目標可能是控制盡可能多的質押以太幣。 + +33% 的質押以太幣是攻擊者的基準指標,因為只要大於此數量,攻擊者不需要精細控制其他驗證者的行為就能夠阻止鏈的最終確定。 他們可以一起消失。 如果超過 1/3 的質押以太幣為惡意證明或無法證明,則 2/3 的絕對多數就不存在,鏈也就無法最終確定。 能防禦此攻擊的方法為怠惰逐減懲罰。 怠惰逐減懲罰會識別無法證明或與多數證明相反的驗證者。 這些不進行證明的驗證者所質押的以太幣會逐漸流失,直到它們的集體佔比最終小於總量的 1/3,至此,鏈就能繼續最終確定。 + +怠惰逐減懲罰的目的是讓鏈能繼續最終確定。 然而,攻擊者也會損失它們質押的部分以太幣。 持有 33% 質押以太幣總量的驗證者持續不活躍的代價十分高昂,即使在驗證者沒有被罰沒的狀況下仍然如此。 + +假設以太坊網路是異步的(即發送和接收訊息間有延遲),攻擊者控制了 34% 質押總量可能會造成雙重最終確定性。 這是因為攻擊者在被選為區塊生產者時,他們可以模稜兩可,並與他們的所有驗證者完成雙重投票。 這會產生一種情況:區塊鏈分叉,且每個分叉都有 34% 的質押以太幣為它投票。 每個分叉只需要剩下驗證者的 50% 投票,就能獲得絕對多數支持,在這種情況下,兩條鏈都能最終確定(因為攻擊者驗證者的 34% + 剩下驗證者的 66% 的一半 = 每個分叉上的 67%)。 每個競爭區塊都必須被約 50% 的誠實驗證者接收,因此這種攻擊只在特定情況下可行:攻擊者對網路上傳播訊息的時間有一定的控制,這樣他們就可以將一半的誠實驗證者推到每條鏈上。 攻擊者必須銷毀他們的質押的全部以太幣(目前驗證者集合約計 1000 萬以太幣的 34%)才能實現雙重最終確定性,因為他們驗證者的 34% 會同時進行雙重投票 — 這是一種會受到罰沒的行為,具有最大的相關性懲罰。 防禦此攻擊的方式代價巨大,即銷毀 34% 總質押以太幣。 要從這種攻擊中復原,以太坊社群需要進行「帶外」協調,同意選擇其中一個分叉,並忽略另一個。 + +### 使用約 50% 質押總量的攻擊者 {#attackers-with-50-stake} + +在攻擊者持有 50% 以太幣的情況下,理論上一群作惡的驗證者可以將鏈拆分成兩個大小相同的分叉,然後使用他們全部 50% 的質押以太幣投票反對誠實的驗證者集合,從而維持這兩個分叉並阻止最終確定性。 兩條鏈上的怠惰逐減懲罰最終都會導致鏈的最終確定。 至此,從攻擊中復原的唯一選擇就是社交恢復。 + +在誠實驗證者數量、網路延遲等因素變動的情況下,敵對驗證者群體能夠持續精確控制質押總量的 50% 的可能性非常小。對理性的攻擊者來說,發動攻擊的高成本及低成功率,是抑制其發動攻擊的強烈因素,尤其是當一小點額外的投資就能獲得_超過_ 50% 的佔比以解鎖更多攻擊能力時。 + +在攻擊者有大於 50% 總質押以太幣的情況下,攻擊者可以支配分叉選擇演算法。 在這種情況下,攻擊者自身即有能力以多數投票來完成證明,不需要再透過欺騙誠實的用戶端才能完成短期重組。 誠實的驗證者會效仿攻擊者,因為他們的分叉選擇演算法將攻擊者的鏈視為權重最高的鏈,如此一來該鏈就能最終確定。 這使得攻擊者可以審查某些交易,以有利於他們的方式進行短距重組以及透過重新排序區塊來提取最大的礦工可提取價值。 對此攻擊的防禦手段是讓攻擊者付出大多數質押的巨大成本(目前略低於 190 億美元),這會讓攻擊者面臨風險,因為社交層可能會介入並採納誠實的少數分叉,讓攻擊者的質押大幅貶值。 + +### 使用超過或等於 66% 質押總量的攻擊者 {#attackers-with-66-stake} + +擁有 66% 或更多總質押以太幣的攻擊者,無需脅迫任何誠實驗證者即可最終確定他們所支持的鏈。 攻擊者只需要給他們支持的分叉進行投票並最終確定它,因為他們有絕對多數的不誠實投票。 作為絕對多數的質押擁有者,攻擊者始終可以控制最終確定的區塊的內容,擁有支出、回退和再次支出、審查某些交易以及隨意重組鏈的能力。 透過購買額外的以太幣來控制 66% 而不是 51%,攻擊者實際上購買了進行事後重組和最終確定性反轉的能力(即改變過去並控制未來)。 唯一實際可操作的防禦方法是付出 66% 總質押以太幣的高昂成本,並選擇回退到社交層來協調採納另一個分叉。 我們將在下一部分詳細探討這一點。 + +## 人:最後的防線 {#people-the-last-line-of-defense} + +如果不誠實的驗證者設法最終確定他們所支援的鍊版本,以太坊社群將陷入困境。 規範鏈將在其歷史記錄中包含不誠實部分,同時誠實的驗證者可能會因證明另一條(誠實)鏈而被懲罰。 注意,最終確定的但不正確的鏈也可能是主流用戶端的漏洞引起的。 最後,最終的回退需要依賴社交層 - 0 層網路 - 來解決。 + +以太坊權益證明共識的其中一個優點是存在[一系列的防禦策略 ](https://youtu.be/1m12zgJ42dI?t=1712),社群在面對攻擊的時候可以實施這些策略。 最起碼的回應是在不實施任何懲罰的情況下強制攻擊者的驗證者離開網路。 為了重新進入網路,攻擊者必須加入到一個激活隊列,確保驗證者集合逐步增加。 例如,增加足夠的驗證者讓質押的以太幣翻倍需要約 200 天,攻擊者要再一次嘗試 51% 攻擊,需要提前 200 天收買誠實的驗證者。 但是,社群也可以決定更嚴厲地懲罰攻擊者,方法是撤銷以往的獎勵或銷毀其一定比例的(高達 100%)質押資本。 + +不管攻擊者受到什麼懲罰,社群還必須一起確認不誠實鏈實際上是否無效,儘管它被以太坊用戶端的分叉選擇演算法所支援。社群應該在誠實的鏈上建構。 誠實的驗證者可以集體同意在被社群認可的以太坊區塊鏈分叉上進行建構,例如,該分叉可能在攻擊開始之前就已經從規範鏈上分叉出來,或者攻擊者的驗證者被強行移除。 誠實的驗證者會受到激勵來建構這條鏈,因為他們可以避免因無法(正確地)證明攻擊者的鏈而受到懲罰。 建構在以太坊上的交易所、入口和應用程式可能更願意位於誠實鏈上,並且跟隨誠實驗證者的誠實區塊鏈。 + +但是,這是一個重大的管理體系挑戰。 有些使用者和驗證者會在切換回誠實鏈時無可避免地產生損失,因為攻擊後被驗證的區塊中的交易可能會回滾,從而擾亂應用程式層。這很容易破壞一些相信“程式碼就是法律”的使用者的道德原則。 交易所和應用程式很可能已經把脫鏈行為和現在可能要回滾的鏈上交易關聯起來,並開始一連串的撤回和修訂,很難公平地進行取捨,特別是如果不義之財混雜在其中,存入了去中心化金融或其他衍生品,都會對誠實使用者產生二次影響。 毫無疑問,那些因為精明或機緣巧合已經從不誠實鏈獲利的一些使用者甚至機構,可能會反對分叉以保護他們的利益。 目前已經有呼籲要求社群對大於 51% 攻擊的回應進行演練,以便可以快速執行合理的協調緩解措施。 Vitalik 在 ethresear.ch 上的[這裡](https://ethresear.ch/t/timeliness-detectors-and-51-attack-recovery-in-blockchains/6925)和[這裡](https://ethresear.ch/t/responding-to-51-attacks-in-casper-ffg/6363)以及 Twitter 上的[這裡](https://twitter.com/skylar_eth/status/1551798684727508992?s=20&t=oHZ1xv8QZdOgAXhxZKtHEw)發起了一些有用的討論。 協調社交回應的目的應該是非常有針對性和具體地懲罰攻擊者並儘量減少對其他使用者的影響。 + +管理體系已經是一個複雜的議題。 管理 0 層網路緊急回應透過不誠實行為最終確定的鏈,對於以太坊社群來說毋庸置疑是一個挑戰,但在以太坊歷史上[已經發生過](/history/#dao-fork-summary)[兩次](/history/#tangerine-whistle)。 + +儘管如此,在現實世界的最後回滾中,還是有一些令人相當滿意的東西。 最後,即使在我們之上有著如此驚人的技術堆棧,但如果最壞的情況發生了,現實中的人們也必將協調出一條屬於他們的出路。 + +## 總結 {#summary} + +本頁探討了攻擊者試圖利用以太坊權益證明共識協定的一些方法。 隨著總質押以太幣比例不斷增加,探討了攻擊者可能造成的重組和最終確定性延遲。 總的來說,較富裕的攻擊者成功的幾率更大,因為他們的質押將變成有力的投票,從而影響未來區塊的內容。 在一定門檻的質押以太幣數量下,攻擊者的力量會逐級上升: + +33%:最終確定性延遲 + +34%:最終確定性延遲、雙重最終確定性 + +51%%:最終確定性延遲、雙重最終確定性、審查、控制區塊鏈的未來 + +66%:最終確定性延遲、雙重最終確定性、審查、控制區塊鏈的未來以及過去 + +還有一系列更複雜攻擊是運用少量質押以太幣發起的,但是需要非常有經驗的攻擊者精細控制訊息發佈時機,說服誠實驗證者支持他們。 + +總的來說,儘管存在這些潛在的攻擊媒介,但攻擊成功的機率仍非常低,低於在工作量證明機制下實施的同類攻擊。 這是因為攻擊者需要冒著巨大的質押以太幣成本風險,以便利用他們的投票權壓倒誠實的驗證者。 內建的「恩威並濟」激勵層可以防止大多數的惡意行為,尤其是對於擁有少量質押的攻擊者。 更微妙的彈跳和平衡攻擊也不太可能成功,因為在現實的網路條件下,很難精細地控制訊息向特定驗證者子集的傳遞,如果發現了已知的彈跳、平衡和雪崩攻擊媒介,用戶端團隊也能透過簡單的補丁快速修復。 + +34%、51% 或 66% 攻擊可能需要帶外的社交協調來解決。 雖然對社群來說是痛苦的,但是社群的帶外響應能力對於攻擊者來說是一種強大的抑制力量。 以太坊的社交層是最終的後盾 - 從技術上取得成功的攻擊仍然會被社群同意採用誠實鏈所瓦解。 攻擊者和以太坊社群之間存在一場競賽 - 花費在 66% 攻擊上的數十億美元可能會被成功的社交協調所抹去,從而給攻擊者留下沉重的包袱,因為它們質押的以太幣將在被以太坊社群忽略的不誠實鏈上無法流動。 最終為攻擊者帶來利益的可能性非常低,這足以成為一種有效的威懾。 這就是為什麼投資於維持擁有共同價值觀和凝聚力的社交層如此重要。 + +## 衍生閱讀 {#further-reading} + +- [本頁面的更詳細版本](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [Vitalik 關於結算最終確定性的看法](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) +- [關於最新訊息導向的最貪婪、最重的可觀察子樹的論文](https://arxiv.org/abs/2003.03052) +- [關於 Casper-FFG 的論文](https://arxiv.org/abs/1710.09437) +- [關於 Gasper 的論文](https://arxiv.org/pdf/2003.03052.pdf) +- [提議者權重增強共識層規範](https://github.com/ethereum/consensus-specs/pull/2730) +- [Ethresear.ch 上的反彈攻擊](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) +- [單一秘密領導者選舉研究](https://ethresear.ch/t/secret-non-single-leader-election/11789) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attestations/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attestations/index.md" new file mode 100644 index 00000000000..69d7856804a --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attestations/index.md" @@ -0,0 +1,92 @@ +--- +title: 證明 +description: 關於在權益證明以太坊上進行證明的描述。 +lang: zh-tw +--- + +驗證者需要在每個時期建立、簽署和廣播證明。 本頁概述這些證明是什麼樣的,以及它們是如何處理和如何在共識用戶端之間交流的。 + +## 什麼是證明? {#what-is-an-attestation} + +每個[時期](/glossary/#epoch)(6.4 分鐘)驗證者都會向網路提交一個證明。 這個證明針對時期內的一個特定時隙。 證明的目的是投票贊成驗證者對於鏈的看法,特別是最近的合理區塊和當前時期內的第一個區塊(稱為`來源`和`目標`檢查點)。 所有參與的驗證者的資訊都會合併,使得網路可以達成關於區塊鏈狀態的共識。 + +證明包含以下組成部分: + +- `aggregation_bits`:驗證者的位元列表,其位置對應到委員會中的驗證者索引;(0/1) 數值表示驗證者是否簽署了 `data`(即,他們是否活躍和同意區塊提議者) +- `data`:與證明相關的細節,如下方的定義 +- `signature`:彙總了個人驗證者簽署的 Boneh-Lynn-Shacham 簽章 + +證明驗證者的第一個任務是建置 `data`。 `data` 包含以下資訊: + +- `slot`:證明參考的時隙號碼 +- `index`:一個數字,用來辨識驗證者在給定的時隙中所屬的委員會 +- `beacon_block_root`:驗證者在鏈頭看到的區塊的根雜湊(套用分叉選擇演算法的結果) +- `source`:最終確定性投票的一部分,表示驗證者認為的最新的合理區塊 +- `target`:最終確定性投票的一部分,表示驗證者認為的當前時段的第一個區塊 + +一旦 `data` 建置完成,驗證者就可以將 `aggregation_bits` 中對應於他們自己的驗證者索引的位元從 0 翻轉到 1,表示他們已經參與。 + +最終,驗證者簽署證明並且在網路上進行廣播。 + +### 彙總的證明 {#aggregated-attestation} + +每個驗證者在網路上傳遞此資料時,都會產生大量的相關開銷。 因此,個人驗證者在更廣泛的廣播前,先會在子網內彙總。 這包括將簽章彙總在一起,以讓廣播出去的證明包含共識 `data` 及一個單一簽章,此為所有同意該 `data` 的驗證者之簽章合併而成的簽章。 這可以透過 `aggregation_bits` 來檢查,因為它提供了每個驗證者在其委員會(委員會 ID 在 `data` 中提供)中的索引,可用於查詢個人簽章。 + +在每個時期,每個子網中都會選出 16 個驗證者來擔任`聚合者`。 聚合者會收集它在廣播網路中監聽到的與其自身 `data` 相同的所有證明。 每個符合證明的發送者會被記錄在 `aggregation_bits` 中。 然後,聚合者將彙總證明廣播到更廣泛的網路。 + +當驗證者被選為區塊提議者時,它們會將最新時隙來自子網的彙總證明打包到新區塊中。 + +### 證明包含生命週期 {#attestation-inclusion-lifecycle} + +1. 產生 +2. 傳播 +3. 彙總 +4. 傳播 +5. 納入 + +證明的生命週期如下圖所示: + +![證明的生命週期](./attestation_schematic.png) + +## 酬勞 {#rewards} + +驗證者提交證明可以獲得獎勵。 證明的獎勵依參與標記(來源、目標和頭部)、基礎獎勵和參與率而定。 + +每個參與標記都可以為 true 或 false,視提交的證明及納入延遲而定。 + +最佳情況是所有 3 個標記皆為 true,在這種情況下,驗證者的每個正確標記可以賺取: + +`獎勵 += 基礎獎勵 * 標記加權 * 標記證明率 / 64` + +標記證明率是透過特定標記的「所有證明驗證者的有效餘額總和」與「總活躍有效餘額」的比較來計算的。 + +### 基礎獎勵 {#base-reward} + +基礎獎勵是根據參與證明的驗證者數量及其質押的有效以太幣餘額計算的: + +`base reward = validator effective balance x 2^6 / SQRT(Effective balance of all active validators)` + +#### 納入延遲 {#inclusion-delay} + +當驗證者在鏈頭 (`block n`) 上投票時,`block n+1` 尚未提議。 所以,證明自然會在**經過一個區塊之後**被納入區塊,因此所有在作為鏈頭的 `block n` 上投票的證明都會在 `block n+1` 被納入,**納入延遲**爲 1。 若納入延遲加倍至 2 個時隙,則證明的獎勵會減半,這是因爲證明獎勵的計算方式爲基礎獎勵乘以納入延遲的倒數。 + +### 證明場景 {#attestation-scenarios} + +#### 缺少參加投票的驗證者 {#missing-voting-validator} + +驗證者最多有一個時期能夠提交他們的證明。 若錯過了在時期 0 時提交證明的機會,則它們可在時期 1 時提交(經過一個納入延遲)。 + +#### 缺少聚合者 {#missing-aggregator} + +每個時期總共有 16 個聚合者。 此外,驗證者會隨機訂閱**兩個子網路並持續 256 個時期**,並在缺少聚合者時作為備用。 + +#### 缺少區塊提議者 {#missing-block-proposer} + +值得注意的是,在一些情況下幸運的聚合者可能同時被選為區塊提議者。 若因為區塊提議者消失而導致證明未被納入,則下個區塊提議者會取得已彙總的證明並納入下一個區塊。 但是,**納入延遲**會因此增加 1。 + +## 衍生閱讀 {#further-reading} + +- [Vitalik 註解的共識規範中的證明](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#attestationdata) +- [eth2book.info 中的證明](https://eth2book.info/capella/part3/containers/dependencies/#attestationdata) + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/block-proposal/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/block-proposal/index.md" new file mode 100644 index 00000000000..c2329bdf429 --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/block-proposal/index.md" @@ -0,0 +1,76 @@ +--- +title: 區塊提出 +description: 解釋在權益證明以太坊中如何提議區塊。 +lang: zh-tw +--- + +區塊是區塊鏈中的基本單位。 區塊是節點之間傳送,達成共識並新增到每個節點資料庫的獨立資訊單元。 本頁會解釋它們是如何產生的。 + +## 先決條件 {#prerequisites} + +區塊提議是權益證明協定的一部分。 為了幫助瞭解本頁的資訊,我們推薦你閱讀關於[權益證明](/developers/docs/consensus-mechanisms/pos/)與[區塊架構](/developers/docs/blocks/)的相關內容。 + +## 區塊由誰生產? {#who-produces-blocks} + +驗證者帳戶負責提議區塊。 驗證者帳戶由節點營運商負責管理,節點營運商執行驗證者軟體(當作執行的一部分)和共識用戶端,並且已經向存款合約中存入至少 32 個以太幣。 然而,每個驗證者只會偶爾負責提議一個區塊。 以太坊以時隙與時期來衡量時間。 每個時隙為十二秒,而 32 個時隙(6.4分鐘)為一個時期。 每個時隙都是在以太坊上新增區塊的機會。 + +### 隨機選擇 {#random-selection} + +每個時隙會有一個以偽隨機方式選擇的驗證者來提議區塊。 在區塊鏈中沒有實質的隨機性,因為如果每個節點都產生真實的隨機數,那麼它們是無法達成共識的。 相反的,目的是讓驗證者的選擇過程無法預測。 以太坊使用一種名為 RanDAO 的演算法來達到隨機性,這種演算法會將區塊提議者的雜湊值與一個隨著每個區塊而更新的種子混在一起。 這個值會被用來從整個驗證者集合中選出一個特定的驗證者。 驗證者的選擇會提前兩個時期鎖定,這種方式可以防範特定類型的種子操控。 + +儘管驗證者會在每個時隙添增 RANDAO,全域 RANDAO 值每個時期僅更新一次。 為了計算下一個區塊提議者的索引,RANDAO 值會跟時隙號碼混合,為每個時隙提供一個獨特數值。 一個驗證者被選中的機率並不是簡單的 `1/N`(其中 `N`= 活躍驗證者總數)。 相反的,它會依照每個驗證者的有效以太幣餘額進行加權。 最大有效餘額為 32 個以太幣(這代表著 `balance < 32 ETH` 會產生低於 `balance == 32 ETH` 的加權,但是 `balance > 32 ETH` 並不會產生高於 `balance == 32 ETH` 的加權)。 + +每個時隙只有一個區塊提議者會被選中。 在正常的情況下,一個區塊生產者會在其專門的時隙中建立並且釋出一個區塊。 在一個時隙中建立兩個區塊是一種很嚴重的罪行,通常被稱為「模棱兩可」。 + +## 區塊如何建立? {#how-is-a-block-created} + +區塊提議者預計會廣播一個已簽署的信標區塊,該區塊建置在根據他們自己在本地運行的分叉選擇演算法所看到的最近鏈頭之上。 分叉選擇演算法會套用上一個時隙留下的任何排隊證明,然後在其歷史記錄中尋找具有最大累積證明權重的區塊。 該區塊便是由提議者建立的新區塊的父塊。 + +區塊提議者透過從自己的本機資料庫和鏈檢視中收集資料來建立區塊。 區塊的內容如以下程式碼片段所示: + +```rust +class BeaconBlockBody(Container): + randao_reveal: BLSSignature + eth1_data: Eth1Data + graffiti: Bytes32 + proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] + attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS] + attestations: List[Attestation, MAX_ATTESTATIONS] + deposits: List[Deposit, MAX_DEPOSITS] + voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] + sync_aggregate: SyncAggregate + execution_payload: ExecutionPayload +``` + +`randao_reveal` 欄位取一個可驗證的隨機值,該值是區塊提議者透過簽署當前的時期編號建立的。 `eth1_data` 是就區塊提議者對存款合約的看法進行的投票,包括存款默克爾樹的根和使新存款能夠被驗證的總存款數。 `graffiti` 是一個可選欄位,可用來在區塊中新增一條訊息。 `proposer_slashings` 和 `attester_slashings` 欄位包含了某些驗證者根據區塊提議者對鏈的看法已經犯下可罰沒行為的證據。 `deposits` 是區塊提議者所知道的新驗證者存款的清單,`voluntary_exits` 是區塊提議者從共識層廣播網路上監聽到的希望退出的驗證者的清單。 `sync_aggregate` 是一個向量,顯示哪些驗證者之前被分配到一個同步委員會(服務於輕量用戶端資料的驗證者子集)並參與了資料簽章。 + +`execution_payload` 使得關於交易的資訊可以在執行用戶端和共識用戶端之間傳遞。 `execution_payload` 是一個被嵌套在信標鏈區塊內部的執行資料區塊。 `execution_payload` 中的欄位反映了以太坊黃皮書中概述的區塊結構,只不過其中沒有親戚區塊,並且 `prev_randao` 取代了 `difficulty`。 執行用戶端可以存取它在自己的 Gossip 網路上監聽到的本機交易池。 這些交易在本機執行,以產生一個被稱為「後狀態」的更新狀態樹。 這些交易被包含在 `execution_payload` 中名為 `transactions` 的清單中,後狀態則在 `state-root` 欄位中提供。 + +所有這些資料都被收集在一個信標區塊中,經過簽署並廣播給區塊提議者的對等節點,再由他們傳播給他們的對等節點,以此類推。 + +閱讀更多關於 +區塊剖析的內容。

+ + + +## 區塊會發生什麼? {#what-happens-to-blocks} + +區塊被新增至區塊提議者的本機資料庫,並透過共識層廣播網路廣播給對等節點。 當驗證者接收到區塊時,它會驗證其中的資料,包括檢查區塊是否有正確的父塊、是否對應正確的時隙、提議者索引是否符合預期、RANDAO 揭示是否有效,以及提議者是否被罰沒。 `execution_payload` 被解綁,驗證者的執行用戶端重新執行清單中的交易,以檢查所提議的狀態變化。 假設區塊通過了所有這些檢查,每個驗證者將區塊新增到自己的規範鏈中。 然後,在下一個時隙中重新開始這個過程。 + + + +## 區塊獎勵 {#block-rewards} + +區塊提議者會收到他們工作的報酬。 有一個 `base_reward`,是根據活躍驗證者的數量和他們的有效餘額來計算的。 然後,區塊提議者會因為區塊中包含的每個有效證明而收到 `base_reward` 的一部分;證明區塊的驗證者越多,區塊提議者獲得的獎勵就越高。 還有一個獎勵是報告應該被罰沒的驗證者,數額等於每個被罰沒的驗證者的 `1/512 * effective balance`。 + +[更多關於獎勵和懲罰的資訊](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) + + + +## 了解更多 {#further-reading} + +- [區塊簡介](/developers/docs/blocks/) +- [權益證明簡介](/developers/docs/consensus-mechanisms/pos/) +- [以太坊共識規範](https://github.com/ethereum/consensus-specs) +- [Gasper 簡介](/developers/docs/consensus-mechanisms/pos/) +- [升級以太坊](https://eth2book.info/) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/faqs/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/faqs/index.md" new file mode 100644 index 00000000000..9b03a6e67e9 --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/faqs/index.md" @@ -0,0 +1,172 @@ +--- +title: 常見問題 +description: 有關以太坊權益證明的常見問題 +lang: zh-tw +--- + +## 何謂權益證明 (PoS)? {#what-is-proof-of-stake} + +權益證明是一種演算法,透過確保行為不檢的攻擊者失去有價值的資產,來保障區塊鏈的安全。 權益證明系統需要一組驗證者抵押部分資產,當其中有人被證實有不誠實行為,他的資產將被銷毀。 以太坊使用權益證明機制來保護區塊鏈。 + +## 權益證明與工作量證明哪個較好? {#comparison-to-proof-of-work} + +工作量證明和權益證明都是以經濟手段抑制惡意行為者向網路傳送垃圾訊息或進行詐欺的機制。 兩者都需要積極參與共識的節點「向網路中」投入一些資產,如果他們行為不當,便會喪失這些資產。 + +在工作量證明中,這個資產是能源。 節點或又稱為礦工,運行一個演算法,目標是比其他的節點更快計算出一個特定的值。 速度最快的節點獲得提議區塊的權利。 如果礦工希望更改鏈上的歷史紀錄,或主導區塊提議,他們必須要有足夠的算力讓他們能一直贏得比賽。 這個機制執行起來極度的昂貴和困難,也因此保護了區塊鏈免受攻擊。 在工作量證明中「挖礦」所需的能源,是礦工支付的現實世界資產。 + +權益證明則需要節點(又稱為驗證者)明確地向智慧型合約提交加密貨幣資產。 如果驗證者行為不檢,這種加密資產可以被銷毀,因為驗證者是直接「質押」他們的資產到區塊鏈中,而非間接地透過能源消耗來質押。 + +工作量證明的能耗要高得多,因為在挖礦的過程中需要消耗大量電力。 相反,權益證明僅需要極少量的能源 - 以太坊驗證者甚至可以在樹莓派這類低功率的裝置上運行。 以太坊的權益證明機制被認為比工作量證明更加安全,因為攻擊的成本更高,且對攻擊者造成的影響更加嚴重。 + +工作量證明和權益證明的比較是一個有爭議性的話題。 [Vitalik Buterin 的部落格](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-are-the-benefits-of-proof-of-stake-as-opposed-to-proof-of-work)、Justin Drake 和 Lyn Alden 之間的辯論,都提供了很好的總結。 + + + +## 權益證明的能源效益高嗎? {#is-pos-energy-efficient} + +是的, 權益證明網路中的節點僅使用極少量的能源。 一項第三方研究指出,基於整個權益證明的以太坊網路每年消耗大約 0.0026 太瓦時,僅約美國遊戲市場的 1/13,000。 + +[更多關於以太坊能耗的資訊](/energy-consumption/)。 + +## 權益證明安全嗎? {#is-pos-secure} + +以太坊權益證明非常安全。 這個機制在上線前經過了 8 年的研究、開發和嚴格的測試。 它的安全保證不同於工作量證明區塊鏈。 在權益證明中,惡意驗證者會遭到主動懲罰(「罰沒」)並從驗證者集合中踢出,致使其損失大量的以太幣。 而在工作量證明中,攻擊者擁有足夠的雜湊算力就可以持續反覆攻擊。 相較工作量證明,對權益證明以太坊發動相同攻擊的成本也更高。 若要影響區塊鏈的活躍性,至少需要網路中總質押以太幣的 33%(除非進行高度複雜且成功率極低的攻擊)。 如果要控制未來區塊的內容,至少需要網路中總質押以太幣的 51%,如果要重寫歷史紀錄,則需要超過總質押量的 66%。 以太坊協定會在遭到 33% 或 51% 攻擊時銷毀這些資產,並以社交共識來應對 66% 攻擊的情境。 + +- [更多保護以太坊權益證明免受攻擊者攻擊的相關資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense) +- [更多關於權益證明設計的資訊](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) + +## 權益證明令使用以太坊的成本更低嗎? {#does-pos-make-ethereum-cheaper} + +否。 傳送交易的成本(燃料費)取決於費用市場動態,該成本會隨著網路需求而增加。 共識機制不會直接影響交易成本。 + +[更多關於燃料的資訊](/developers/docs/gas)。 + +## 何謂節點、用戶端和驗證者? {#what-are-nodes-clients-and-validators} + +節點是連線到以太坊網路的電腦。 用戶端是將電腦轉化成節點所需運行的軟體。 有兩種類型的用戶端:執行用戶端和共識用戶端。 建立一個節點,兩種用戶端都需要。 驗證者是共識用戶端的一個選擇附加元件,讓節點可以參與權益證明共識。 參與共識機制是指被選中建立和提議區塊,以及證明從網路上接收到的區塊。 若要運行一個驗證者,節點營運商必須向存款合約中存入 32 個以太幣。 + +- [更多關於節點和用戶端的資訊](/developers/docs/nodes-and-clients) +- [更多權益質押相關資訊](/staking) + +## 權益證明是一個新概念嗎? {#is-pos-new} + +否。 在 2011 年的 BitcoinTalk 論壇上,就有使用者[提出權益證明的基本概念](https://bitcointalk.org/index.php?topic=27787.0)作為比特幣的升級版。 11 年後,它才準備好在以太坊主網上實作。 一些其他的區塊鏈較以太坊更早實行權益證明,但並非以太坊的特定機制(稱為 Gasper)。 + +## 以太坊的權益證明有甚麼特別之處? {#why-is-ethereum-pos-special} + +以太坊的權益證明機制設計非常獨特。 它不是第一個被設計並且實行的權益證明機制,但它是最穩健的。 這個權益證明機制被稱為「Casper」。 Casper 定義了如何挑選驗證者來提議區塊、如何以及何時進行證明、這些證明如何計算、給予驗證者的獎勵和懲處、罰沒條件、故障安全機制(如怠惰逐減懲罰),以及「最終確定性」的條件。 最終確定性是指一個區塊被認為是規範鏈上永久存在部分的條件,它必須獲得網路上至少 66% 的總質押以太幣的投票。 研究人員專門為以太坊開發了 Casper,而以太坊是第一個也是唯一個實行它的區塊鏈。 + +除了 Casper,以太坊的權益證明還採用一種叫做 LMD-GHOST 的分叉選擇演算法。 在同一時隙存在兩個區塊的情況下需要它。 這會建立區塊鏈的兩個分叉。 LMD-GHOST 會選擇具有最大證明「權重」的一個分叉。 權重是證明數量以驗證者有效餘額加權過後的數值。 LMD-GHOST 是以太坊獨有的機制。 + +Casper 和 LMD_GHOST 的組合被稱為 Gasper。 + +[更多關於 Gasper 的資訊](/developers/docs/consensus-mechanisms/pos/gasper/) + +## 什麼是罰沒? {#what-is-slashing} + +罰沒是指銷毀驗證者的部分質押並將驗證者從網路中驅逐。 被罰沒的以太幣數量取決於有多少驗證者遭到罰沒 - 這意味串通起來的驗證者會比個別的驗證者受到更多懲罰。 + +[更多關於罰沒的資訊](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties#slashing) + +## 為甚麼驗證者需要 32 個以太幣? {#why-32-eth} + +驗證者需要質押以太幣,如果他們行為不當,就會失去一些東西。 之所以需要質押 32 個以太幣,是為了讓節點能在適當的硬體上運作。 如果每個驗證者所需要的最少以太幣較少,則驗證者的數量以及每個時隙必須處理的訊息數就會增加,這意味需要更強大的硬體來運作節點。 + +## 如何挑選驗證者? {#how-are-validators-selected} + +每個時隙都會透過一個名為 RANDAO 的演算法,以偽隨機的方式選出一個驗證者來提議區塊,該演算法會將區塊提議者的雜湊值和一個每區塊都會更新的種子混雜在一起。 所產生的這個數值會用來從整個驗證者集合中選出一個特定的驗證者。 驗證者的選擇會提前兩個時期固定。 + +[更多關於驗證者挑選的資訊](/developers/docs/consensus-mechanisms/pos/block-proposal) + +## 什麼是權益粉碎攻擊? {#what-is-stake-grinding} + +權益粉碎攻擊是針對權益證明網路的攻擊類別,攻擊者會試圖使驗證者選擇演算法偏向自己的驗證者。 對 RANDAO 發動權益粉碎攻擊,大約需要已質押以太幣總數的一半。 + +[更多關於權益粉碎攻擊的資訊](https://eth2book.info/altair/part2/building_blocks/randomness/#randao-biasability) + +## 什麼是社交罰沒? {#what-is-social-slashing} + +社交罰沒是指社群透過協調區塊鏈分叉來應對攻擊的能力。 它使社群能夠從攻擊者最終確定不誠實鏈中恢復。 社交罰沒也可以用來抵禦審查攻擊。 + +- [更多關於社交罰沒的資訊](https://ercwl.medium.com/the-case-for-social-slashing-59277ff4d9c7) +- [Vitalik Buterin 談社交罰沒](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) + +## 我會受到罰沒嗎? {#will-i-get-slashed} + +作為驗證者,除非你故意涉入惡意行為,否則是很難遭到罰沒的。 罰沒只有在非常特定的情境下會被實行,比如驗證者在同一個時隙下提議多個區塊,或是在其證明中互相矛盾時 - 這些情況不太可能意外出現。 + +[更多關於罰沒條件的資訊](https://eth2book.info/altair/part2/incentives/slashing) + +## 什麼是無利害關係問題? {#what-is-nothing-at-stake-problem} + +無利害關係問題是一些權益證明機制中的一個概念性議題,在此種機制下只有獎勵而沒有懲罰。 如果沒有任何利害關係,那麼務實的驗證者會樂於證明任何甚至多個區塊鏈分叉,因為這會讓他們的獎勵增加。 以太坊透過最終性條件和罰沒來解決這個問題,確保只有一條規範鏈。 + +[更多關於無利害關係問題的資訊](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed) + +## 什麼是分叉選擇演算法? {#what-is-a-fork-choice-algorithm} + +分叉選擇演算法貫徹規則,以決定哪一條鏈是規範鏈。 在最佳的情況下,不需要使用分叉選擇規則,因為在每一個時隙下只有一個區塊提議者和一個可供選擇的區塊。 然而,偶爾會出現多個區塊在同一個時隙的情況,或是晚到的資訊導致鏈頭附近的區塊有多種組織方式。 在這種情況下,所有的用戶端必須遵循相同的規則來確保它們權選擇正確的區塊序列。 分叉選擇演算法透過編碼實行了這些規則。 + +以太坊的分叉選擇演算法被稱為 LMD-GHOST。 它會選擇擁有最大證明權重的分叉,也就是得到最多質押以太幣投票支持的分叉。 + +[更多關於 LMD-GHOST 的資訊](/developers/docs/consensus-mechanisms/pos/gasper/#fork-choice) + +## 什麼是權益證明中的最終確定性? {#what-is-finality} + +在權益證明中,最終確定性是指保證特定的區塊是規範鏈的永久一部分,除非存在共識失敗,即攻擊者銷毀了總質押以太幣的 33%,否則該區塊就不會被撤銷。 這是「加密經濟」上的最終確定性,與工作量證明區塊鏈相關的「機率最終確定性」不同。 在機率最終確定性中,區塊沒有明確的最終確定或非最終確定狀態 - 隨著區塊在鏈上存在的時間越長,該區塊從鏈上被移除的機率會逐漸降低,並且由使用者自行確定在他們對區塊有足夠信心時自行認定它是安全的。 在加密經濟上的最終確定性中,成對的檢查點區塊必須獲得總質押以太幣的 66% 的投票支持。 如果滿足這個條件,則這些檢查點之間的區塊將明確地「最終確定」。 + +[更多關於最終確定性的資訊](/developers/docs/consensus-mechanisms/pos/#finality) + +## 什麼是「弱主觀性」? {#what-is-weak-subjectivity} + +弱主觀性是權益證明網絡的一個特性,即社交資訊被用來確認區塊鏈當下的狀態。 新節點或長時間離線後重新加入網路的節點可以獲得最新的狀態,因此節點能夠立刻知道它們是否在正確的鏈上。 這些狀態被稱為「弱主觀性檢查點」,可以從其他節點營運商的帶外通道,或從區塊瀏覽器和多個公共端點取得。 + +[更多關於弱主觀性的資訊](/developers/docs/consensus-mechanisms/pos/weak-subjectivity) + +## 權益證明是否具有抗審查的特性? {#is-pos-censorship-resistant} + +目前很難證明權益證明的抗審查性。 然而,與工作量證明不同,權益證明提供了協調罰沒機制,以懲罰審查驗證者。 該協定即將修改為將區塊建構者與區塊提議者分開,並實行建構者必須在每個區塊中包含的交易清單。 此提案被稱為「提議者 - 建構者分離」,有助於防止驗證者審查交易。 + +[更多關於提議者 - 建構者分離的資訊](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Original-basic-scheme) + +## 以太坊的權益證明系統會受到 51% 攻擊嗎? {#pos-51-attack} + +是的, 權益證明和工作量證明一樣,也易受 51% 攻擊。 攻擊者不需要掌控 51% 的網路算力,而是需要掌控已質押以太幣總數的 51%。 累積了總質押量 51% 的攻擊者,便可以控制分叉選擇演算法。 這使得攻擊者能夠審查某些交易、進行短程重組,並透過以有利於他們的方式重新排序區塊來提取最大可提取價值。 + +[更多關於權益證明攻擊的資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense) + +## 什麼是社交協調,為什麼需要它? {#what-is-social-coordination} + +社交協調是以太坊上的最後一道防線,讓誠實鏈可以從已最終確定不誠實區塊的攻擊中恢復。 在這種情況下,以太坊社群必須進行「帶外」協調,並采納一個誠實的少數分叉,在此過程中懲處攻擊者的驗證者。 這也需要應用程式和交易所能夠識別誠實的分叉。 + +[更多關於社交協調的資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense#people-the-last-line-of-defense) + +## 權益證明會讓富者越富嗎? {#do-rich-get-richer} + +人們質押的以太幣越多,他們能夠運作的驗證者就越多,能夠獲得的獎勵也越多。 獎勵隨著質押以太幣的數量綫性增加,所有人都獲得相同的回報百分比。 相比權益證明,工作量證明更容易讓富者越富,因爲大規模購買硬體的富有礦工會從規模經濟中受益,這意味著財富與獎勵之間的關係是非綫性的。 + +## 權益證明比工作量證明更中心化嗎? {#is-pos-decentralized} + +不,工作量證明趨於中心化,因爲挖礦成本增加,導致個人礦工被淘汰,接著是小公司被淘汰,依此類推。 權益證明目前的問題是流動性質押衍生品 (LSD) 的影響。 這些代幣代表由某個供應商質押的以太幣,任何人都可以在二級市場交換它們,而無需實際取消以太幣的質押。 流動性質押衍生品讓使用者可以用少於 32 個以太幣進行質押,這也帶來了中心化風險,一些大型組織最終可以控制大部分質押。 這就是爲什麽說[單獨質押](/staking/solo)是以太坊的最佳選項。 + +[更多流動性質押衍生品中心化的相關資訊](https://notes.ethereum.org/@djrtwo/risks-of-lsd) + +## 為什麼我只能質押以太幣? {#why-can-i-only-stake-eth} + +以太幣是以太坊的原生貨幣。 讓所有質押都以單一貨幣計價至關重要,這既是爲了計算加權投票的有效餘額,也是爲了增加安全性。 以太幣本身是以太坊的基本組成部分,但不是智慧型合約的基本組成部分。 引入其他貨幣將顯著增加複雜性,並降低質押的安全性。 + +## 以太坊是唯一使用權益證明的區塊鏈嗎? {#is-ethereum-the-only-pos-blockchain} + +不是,有多條使用權益證明的區塊鏈。 其中沒有一條鏈與以太坊相同;以太坊的權益證明機制是獨一無二的。 + +## 合併是什麼? {#what-is-the-merge} + +合併是指以太坊關閉基於工作量證明的共識機制,並啓用基於權益證明的共識機制的時刻。 合併發生與 2022 年 9 月 15 日。 + +[合併案的相關細節](/roadmap/merge) + +## 什麽是活躍性與安全性? {#what-are-liveness-and-safety} + +活躍性和安全性是區塊鏈的兩大基礎安全問題。 活躍性是指最終確定鏈的可用性。 如果鏈停止最終確定或者用戶無法很容易地存取它,這就是活躍性失效。 使用成本極高也可以視爲活躍性失效。 安全性是指攻擊鏈(即最終確定衝突檢查點)的難度。 + +[閱讀更多關於 Casper 的論文](https://arxiv.org/pdf/1710.09437.pdf) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/gasper/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/gasper/index.md" new file mode 100644 index 00000000000..dd861e76a1c --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/gasper/index.md" @@ -0,0 +1,52 @@ +--- +title: Gasper +description: Gasper 權益證明機制的解釋。 +lang: zh-tw +--- + +Gasper 是由 Casper 友善最終確定性組件 (Casper-FFG) 及 LMD-GHOST 分叉選擇演算法組成的。 這些部分共同構成了保護權益證明以太坊的共識機制。 Casper 是將特定區塊升級至「最終確定」的機制,這樣新加入網路的節點就可以確定它們正在同步的是規範鏈。 分叉選擇演算法使用累積的投票,以確保節點能在區塊鏈發生分叉時很容易地選擇正確的鏈。 + +**注意**:由於 Casper-FFG 包含在 Gasper 中,因此其原始定義有小幅更新。 此頁面中的定義為更新後的版本。 + +## 前置要求 + +要瞭解本頁的內容,推薦先閱讀[權益證明](/developers/docs/consensus-mechanisms/pos/)的介紹頁面。 + +## Gasper 扮演的角色 {#role-of-gasper} + +Gasper 建立於權益證明區塊鏈之上,節點會提供以太幣作為保證金,若其在提議或驗證區塊時懶惰或不誠實,該保證金可能會被銷毀。 Gasper 是定義如何獎勵及處罰驗證者,決定應接受和拒絕哪個區塊,以及在區塊鏈的哪個分叉上建構的機制。 + +## 最終確定性是什麼? {#what-is-finality} + +最終確定性是某些區塊的屬性,指的是除非在共識嚴重失效或攻擊者已銷毀了至少 1/3 的總質押以太幣,否則該區塊無法被還原。 最終確定的區塊可以視為已經被區塊鏈確定的資訊。 區塊需要經過一個 2 步驟升級程序才能被最終確定: + +1. 三分之二的總質押以太幣必須投票支持將該區塊納入規範連。 此條件將區塊升級至「合理化」狀態。 合理區塊不太可能被還原,但在某些情況下也有可能。 +2. 當另一個區塊在一個合理區塊上被合理化時,該區塊將被升級至「最終確定」狀態。 最終確定一個區塊是將其納入規範鏈的承諾。 除非攻擊者銷毀了數百萬枚以太幣(數十億 $USD),否則該區塊無法被還原。 + +並非每個時隙都會發生這種區塊升級。 相反,只有時期邊界的區塊可以被合理化並最終確定。 這些區塊被稱爲「檢查點」。 升級需要考慮成對的檢查點。 兩個連續的檢查點中間必須存在一個「絕對多數連結」(即三分之二的縂質押以太幣投票支持檢查點 B 是檢查點 A 的正確子代),才能將較早的檢查點升級至最終確定狀態,並將較新的區塊升級至合理化狀態。 + +由於最終性需要三分之二的縂質押以太幣同意某個區塊是規範區塊,因此攻擊者無法在缺少下列條件的情況下建立另一條最終確定鏈: + +1. 擁有或操縱三分之二的縂質押以太幣。 +2. 銷毀至少三分之一的縂質押以太幣。 + +第一個條件出現的原因是需要三分之二的質押以太幣來最終確定一條鏈。 之所以有第二個條件,是因爲如果三分之二的質押總量投票支持了兩個分叉,則必然有三分之一的質押總量同時投票支持了兩個分叉。 雙重投票符合罰沒條件,會受到最大程度的懲罰,銷毀三分之一的質押縂量。 截至 2022 年 5 月,這需要攻擊者銷毀價值約 100 億美元的以太幣。 Gasper 中用於合理化並最終確定區塊的演算法是[友善最終確定性組件 (Casper-FFG)](https://arxiv.org/pdf/1710.09437.pdf) 的輕微改動版本。 + +### 激勵與罰沒 {#incentives-and-slashing} + +誠實地提議和驗證區塊的驗證者會獲得獎勵。 以太幣將作爲獎勵新增到他們的質押中。 另一方面,缺席或在被呼叫時未能響應的驗證者將錯過這些獎勵,有時還會損失他們現有質押的一小部分。 然而,離綫的處罰是較小的,在多數情況下,僅為錯失獎勵的機會成本。 但是,有些驗證者的行爲很難是無意爲之,並且表現出某種惡意企圖,例如在同一個時隙提議多個區塊、在同一個時隙證明多個區塊,或與先前的檢查點投票自相矛盾。 這些「可罰沒」行爲將受到更嚴厲的懲罰 - 罰沒將導致驗證者的部分質押被銷毀,並將驗證者移出驗證者網路。 這個過程需要 36 天。 在第 1 天,會有最高 1 個以太幣的初始懲罰。 之後,被罰沒驗證者的以太幣將在退出期間緩慢耗盡,但在第 18 天,他們會受到「相關性懲罰」,當更多的驗證者在大致同一時間被罰沒時,該懲罰的力度也會更大。 懲罰的上限是全部質押。 這些獎勵和懲罰旨在激勵誠實的驗證者,並抑制對網路的攻擊。 + +### 怠惰逐減懲罰 {#inactivity-leak} + +除了安全性外,Gasper 也提供「合理的活躍性」。 條件是只要三分之二的縂質押以太幣誠實地投票並遵循協定,無論是否有任何其他活動產生(例如攻擊、延遲問題或罰沒),鏈都能被最終確定。 換言之,想要阻止區塊鏈被最終確定,必須以某種方式損毀三分之一的縂質押以太幣。 在 Gasper 中,還有另一道防綫來防範活躍性失效,它就是「怠惰逐減懲罰」。 如果鏈未能在 4 個時期内最終確定,該機制就會啓動。 未能積極證明主鏈的驗證者的質押將會逐漸被消耗,直到主鏈重新獲得三分之二的縂質押投票,確保活躍性失效只是暫時的。 + +### 分叉選擇 {#fork-choice} + +Casper-FFG 的原始定義包含一種分叉選擇演算法,該演算法規定:`遵循包含具有最大高度的合理化檢查點的鏈`,其中高度被定義爲距離創世區塊的最遠距離。 在 Gasper 中,原始的分叉選擇規則已被棄用,轉而采用一種名為 LMD-GHOST 的更精密演算法。 請注意,在正常情況下,分叉選擇規則是不必要的 - 每個時隙只有一個區塊提議者,并有誠實的驗證者進行證明。 只有當網路非同步性過大或不誠實的區塊提議者模棱兩可的情況下,才需要分叉選擇演算法。 然而,當這些情況真的發生時,分叉選擇演算法是確保正確鏈的重要防禦措施。 + +LMD-GHOST 代表「最新訊息驅動的最貪婪、最重的可觀察子樹 (latest message-driven greedy heaviest observed sub-tree)」。 這是一個行話味很重的術語,用來定義這樣一種演算法:選擇具有最大累積證明權重的分叉作爲規範分叉(貪婪最重子樹),並且如果收到來自驗證者的多條訊息,則只考慮最新的訊息(最新訊息驅動)。 在將最重區塊新增到其規範鏈之前,每名驗證者都會使用此規則來評估每個區塊。 + +## 衍生閱讀 {#further-reading} + +- [Gasper:最貪婪、最重的可觀察子樹 (GHOST) 與 Casper 的結合](https://arxiv.org/pdf/2003.03052.pdf) +- [Casper 友善最終確定性組件](https://arxiv.org/pdf/1710.09437.pdf) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/index.md" new file mode 100644 index 00000000000..96e6219c9bf --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/index.md" @@ -0,0 +1,99 @@ +--- +title: 權益證明 (PoS) +description: 對權益證明共識協定及其在以太坊中之作用的解釋。 +lang: zh-tw +--- + +權益證明 (PoS) 是支撐以太坊[共識機制](/developers/docs/consensus-mechanisms/)的基礎。 以太坊於 2022 年啟用了權益證明機制,這一轉變主要因為相較於之前的[工作量證明](/developers/docs/consensus-mechanisms/pow)架構,權益證明機制在安全性上更為可靠,且能源消耗更低,為實現新的擴容解決方案提供了更優越的基礎。 + +## 先決條件 {#prerequisites} + +為了更好地理解此頁面,我們建議你先閱讀[共識機制](/developers/docs/consensus-mechanisms/)的相關資料。 + +## 什麼是權益證明 (PoS)? {#what-is-pos} + +權益證明是一種證明驗證者已經將有價值物品質押到網路上的方法。如果驗證者有失信行為,這些物品可能會被銷毀。 在以太坊的權益證明機制下,驗證者明確地透過以太幣將資產質押到以太坊上的智慧型合約中。 之後,驗證者負責檢查在網路上傳播的新區塊是否有效,偶爾自己也建立和傳播新區塊。 當他們試圖欺騙網路時(例如,在應該傳送一個區塊時提議多個區塊,或傳送衝突的證明),他們質押的部分或全部以太幣可能會被銷毀。 + +## 驗證者 {#validators} + +要作為驗證者參與,使用者必須向存款合約存入 32 個以太幣並執行三種獨立的軟體:執行用戶端、共識用戶端和驗證者用戶端。 存入以太幣時,使用者會加入一個激活隊列,限制新驗證者加入網路的速度。 激活後,驗證者會從以太坊網路上的對等節點接收新區塊。 區塊中的交易會被重新執行,以檢查提議的以太坊狀態變更是否有效,並檢查區塊的簽章。 然後驗證者在整個網路上傳送支持該區塊的投票(稱為證明)。 + +在工作量證明中,產生區塊的時間是由挖礦難度決定的,而在權益證明中,節奏是固定的。 權益證明以太坊中的時間分為時隙(12 秒)和時期(32 個時隙)。 在每個時隙會隨機選擇一位驗證者作為區塊提議者。 該驗證者負責建立新區塊並傳送給網路上的其他節點。 另外在每個時隙中,都會隨機選擇一個驗證者委員會,透過他們的投票來確定所提議區塊的有效性。 將驗證者集合劃分為若干個委員會對於保持網路負載易於管理非常重要。 委員會將驗證者集合分成不同部分,以便每個活躍的驗證者在每個時期都會出示證明,但並非每個時隙都這樣做。 + +## 如何在以太坊權益證明中執行交易 {#transaction-execution-ethereum-pos} + +以下提供了關於如何在以太坊權益證明中執行交易的全面解釋。 + +1. 使用者使用他們的私鑰建立並簽署[交易](/developers/docs/transactions/)。 這通常由錢包或程式庫處理,例如 [ether.js](https://docs.ethers.io/v5/)、[web3js](https://docs.web3js.org/)、[web3py](https://web3py.readthedocs.io/en/v5/) 等,但本質上是使用者在使用以太坊 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)向節點發出請求。 使用者定義他們準備支付的一定數量的燃料,作為給驗證者的小費,以鼓勵他們將交易納入到區塊中。 [小費](/developers/docs/gas/#priority-fee)支付給驗證者,而[基本費用](/developers/docs/gas/#base-fee)則會被銷毀。 +2. 交易提交給以太坊[執行層用戶端](/developers/docs/nodes-and-clients/#execution-client)以驗證其有效性。 這意味著確保發送者有足夠的以太幣來完成交易,並且他們已經使用正確的金鑰來簽署交易。 +3. 如果交易有效,執行層用戶端將其新增至其本機記憶體池(待處理交易清單),並透過執行層廣播網路將其廣播到其他節點。 當其他節點聽到關於交易的消息時,它們也會將其添加到本地記憶體池中。 進階使用者可能會避免廣播他們的交易,而是將其轉發給專門的區塊建置者,例如 [Flashbots Auction](https://docs.flashbots.net/flashbots-auction/overview)。 這使他們能夠在即將到來的區塊中組織交易以獲得最大利潤([最大可提取價值](/developers/docs/mev/#mev-extraction))。 +4. 網路上的驗證者節點之一是當前時隙的區塊提議者,該提議者是之前使用 RANDAO 以偽隨機方式選取的。 該節點負責建立和廣播下一個要新增至以太坊區塊鏈的區塊並更新全域狀態。 此節點由三個部分組成:執行用戶端、共識用戶端和驗證者用戶端。 執行層用戶端將來自本機記憶體池的交易捆綁到「執行有效負載」中,並在本機執行它們以產生狀態變更。 此資訊被傳遞到共識用戶端,在該用戶端,執行有效載荷被包裝為「信標區塊」的一部分。該信標區塊還包含有關獎勵、懲罰、罰沒、證明等的資訊,從而使網路能夠就鏈頭的區塊順序達成一致。 [連線共識用戶端和執行用戶端](/developers/docs/networking-layer/#connecting-clients)中更詳細地描述了執行用戶端和共識用戶端之間的通訊。 +5. 其他節點在共識層廣播網路上接收新的信標區塊, 並將其傳遞給它們的執行用戶端。在執行用戶端上,交易在本機重新執行以確保提議的狀態變更有效。 然後,驗證者用戶端證明該區塊是有效的,並且根據他們的看法,這在邏輯上是鏈上的下一個區塊(這意味著它建置在如[分叉選擇規則](/developers/docs/consensus-mechanisms/pos/#fork-choice)所定義的具有最大證明權重的鏈上)。 該區塊被新增到證明它的每個節點的本機資料庫中。 +6. 如果交易已經成為兩個檢查點之間具有「絕對多數連結」的鏈的一部分,那麼可以認為該交易已經「最終確定」。 檢查點發生在每個時期的開始,它們的存在是為了兼顧以下事實:每個時隙只有活躍驗證者的子集會提供證明,但所有活躍驗證者在每個完整時期內都會提供證明。 因此,只有在時期之間才能證明「絕對多數連結」(即網路上總質押以太幣的 66% 同意兩個檢查點的情況)。 + +關於最終確定性的更多詳細資訊,請參見下文。 + +## 最終性 {#finality} + +交易在分佈式網路中具有「最終確定性」是指,該交易是區塊的一部分,而且除非銷毀大量以太幣,否則便無法變更。 在權益證明以太坊上,最終確定性是透過「檢查點」區塊來管理的。 每個時期中的第一個區塊便是檢查點。 驗證者為其認為有效的「檢查點對」投票。 如果一對檢查點獲得了質押以太幣總數中三分之二以上的投票,那麼這對檢查點將被升級。 這兩個(目標)中較新的一個會變成「合理化」狀態。 較舊的一個檢查點已經是合理化狀態,因為它是上一個時期中的「目標」。 現在,這個檢查點已升級為「最終確定」狀態。 + +要撤銷最終確定的區塊,攻擊者將承擔至少相當於質押以太幣總數三分之一的損失。 這篇[以太坊基金會部落格文章](https://blog.ethereum.org/2016/05/09/on-settlement-finality/)解釋了其確切原因。 由於最終確定性需要獲得三分之二的多數投票,攻擊者可以用質押以太幣總數的三分之一投票來阻止網路實現最終確定性。 有一種可以防禦此種攻擊行為的機制:[怠惰逐減懲罰](https://eth2book.info/bellatrix/part2/incentives/inactivity)。 如果鏈未能在四個時期內最終確定,此機制就會啟動。 怠惰逐減懲罰會逐漸消耗驗證者投票反對大多數驗證者的質押以太幣,使大多數驗證者重新獲得三分之二多數投票,以最終確定鏈。 + +## 加密經濟安全性 {#crypto-economic-security} + +運行驗證者是一個承諾。 驗證者應要維持足夠的硬體和連線,以參與區塊驗證和提議。 作為回報,驗證者會獲得以太幣(他們的質押餘額增加)。 另一方面,作為驗證者參與也會開啟新渠道,讓使用者為了個人利益或為破壞而攻擊網路。 為了預防此種情況,如果驗證者在被調用時並未能參與,將會錯過以太幣獎勵,且他們如果有不誠實行為,目前的質押可能會被銷毀。 兩種主要的行為會被視為不誠實:在一個時隙中提議多個區塊(模稜兩可),以及提交相互矛盾的證明。 + +罰沒的以太幣數量視大致同一時間受到罰沒的驗證者數量而定。 這稱為[「相關性懲罰」](https://eth2book.info/bellatrix/part2/incentives/slashing#the-correlation-penalty)。相關性懲罰可以很輕微(單個驗證者被罰沒約 1% 的質押),或是造成驗證者 100% 的質押被銷毀(大額罰沒事件)。 這種懲處在強制退出期執行,首先是第一天的立即懲罰(最高 1 枚以太幣),接下來是第 18 天的相關性懲罰,最後是第 36 天的逐出網路。 如果驗證者在網路上但未提交投票,驗證者每天會受到輕微的證明懲罰。 以上均表明,協同攻擊對攻擊者來說代價將極其高昂。 + +## 分叉選擇 {#fork-choice} + +當網路以最佳狀態誠信運行時,鏈頭始終只會有一個新區塊並且所有驗證者都會證明它。 然而,由於網路延遲或因為區塊提議者提出多個區塊(模棱兩可),驗證者可能會看到不同的鏈頭視圖。 因此,共識用戶端需要一種演算法來確定支援哪一個區塊。 在權益證明以太坊中所用的演算法稱為 [LMD-GHOST](https://arxiv.org/pdf/2003.03052.pdf),其工作原理是識別在其歷史記錄中具有最大證明權重的分叉。 + +## 權益證明及安全性 {#pos-and-security} + +[51% 攻擊](https://www.investopedia.com/terms/1/51-attack.asp)的威脅如在工作量證明中一樣仍存在於權益證明,但對攻擊者來說風險更大。 攻擊者將需要 51% 的質押以太幣。 然後他們可以使用自己的證明,確保其首選的分叉為最多累積證明的分叉。 共識用戶端使用累積證明的「權重」來決定正確的鏈,使攻擊者能夠因此讓他們的分叉成為規範分叉。 然而,相較於工作量證明,權益證明的優勢在於社群可以靈活地發動反擊。 例如,誠實的驗證者可以決定繼續在非多數鏈上建置,忽略攻擊者的分叉,同時鼓勵應用程式、交易所和池也這樣做。 他們也可以決定強行將攻擊者從網路中移除,並銷毀其質押以太幣。 這些都是針對 51% 攻擊強而有力的經濟防禦。 + +除了 51% 攻擊,不良行為者也可能嘗試其他惡意活動,例如: + +- 遠程攻擊(但是最終確定性小工具能抵銷此種攻擊媒介) +- 短距「區塊重組」(但是提議者增強和證明截止可以緩解此情況) +- 反彈和平衡攻擊(也能透過提議者增強來緩解,且這些攻擊也只有在理想化的網路情況下展示過) +- 雪崩攻擊(透過分叉選擇演算法只考慮最新訊息的規則加以抵銷) + +整體來說,以太坊上實行的權益證明在經濟方面展現為比工作量證明更安全。 + +## 優勢及劣勢 {#pros-and-cons} + +| 優勢 | 劣勢 | +| ----------------------------------------------------------------------- | -------------------------- | +| 質押使個人更容易參與保障網路安全,促進去中心化。 驗證者節點可以在普通筆電上運行。 質押池讓使用者在沒有 32 個以太幣的情況下也能進行質押。 | 權益證明比起工作量證明更為初期且經歷過的實戰測試較少 | +| 質押更加去中心化。 規模經濟不像在工作量證明挖礦中那樣適用於權益證明。 | 實行權益證明比起工作量證明更為複雜 | +| 權益證明比起工作量證明提供了更多加密經濟安全性 | 使用者需要執行三個軟體才能參與以太坊質押 | +| 僅需發行更少的以太幣就能激勵網路參與者 | | + +### 與工作量證明的比較 {#comparison-to-proof-of-work} + +以太坊最初使用工作量證明,但在 2022 年 9 月轉為權益證明。 權益證明比工作量證明具有多項優勢,例如: + +- 能源效率更高 – 無需在工作量證明計算上使用大量能源 +- 參與門檻更低,更低的硬體要求 – 不需要頂尖硬體以獲得建立新區塊的機會 +- 更低的中心化風險 – 權益證明應可以增加保護網路安全的節點 +- 因為能源要求低,發行較少的以太幣就可以激勵參與 +- 與工作量證明相比,不當行為的經濟懲罰使發動 51% 攻擊的攻擊者須付出更高的代價 +- 如果 51% 攻擊攻破加密經濟防禦,社群可以採取誠實鏈的社交恢復。 + +## 了解更多 {#further-reading} + +- [權益證明常見問題](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html) - _Vitalik Buterin_ +- [什麼是權益證明?](https://consensys.net/blog/blockchain-explained/what-is-proof-of-stake/)- _ConsenSys_ +- [權益證明是什麼,又有何重要性?](https://bitcoinmagazine.com/culture/what-proof-of-stake-is-and-why-it-matters-1377531463)- _Vitalik Buterin_ +- [為什麼採用權益證明(2020 年 11 月)](https://vitalik.eth.limo/general/2020/11/06/pos2020.html)- _Vitalik Buterin_ +- [權益證明:我如何學著愛上弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) - _Vitalik Buterin_ +- [權益證明以太坊攻擊與防禦](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [權益證明的設計哲學](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) - _Vitalik Buterin_ +- [影片:Vitalik Buterin 向 Lex Fridman 解釋權益證明](https://www.youtube.com/watch?v=3yrqBG-7EVE) + +## 相關主題 {#related-topics} + +- [工作量證明(PoW)](/developers/docs/consensus-mechanisms/pow/) +- [權威證明](/developers/docs/consensus-mechanisms/poa/) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/keys/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/keys/index.md" new file mode 100644 index 00000000000..b0cc78f1648 --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/keys/index.md" @@ -0,0 +1,96 @@ +--- +title: 權益證明以太坊中的金鑰 +description: 說明太坊權益證明共識機制中使用的金鑰 +lang: zh-tw +--- + +以太坊使用公私金鑰密碼學來保護使用者資產。 公鑰是以太坊地址的基礎,可被大眾看見並用作一個獨特的身分識別。 私鑰(或「密鑰」)則永遠只能由帳戶擁有者存取。 私鑰被用來「簽署」交易和資料,以便密碼學可以驗證私鑰持有者核准特定私鑰的某些動作。 + +以太坊的金鑰透過[橢圓曲線密碼學](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography)產生。 + +然而,當以太坊從[工作量證明](/developers/docs/consensus-mechanisms/pow)轉換為[權益證明](/developers/docs/consensus-mechanisms/pos)後,一種新型態的金鑰加入到以太坊中。 原始的金鑰仍維持相同的運作 — 使用基於橢圓曲線密碼學的金鑰來保障帳戶安全沒有變化。 然而,使用者需要一種新型態的金鑰,透過質押以太幣和運作驗證者來參與權益證明。 這個需求源於擴容帶來的挑戰,許多訊息需要在眾多的驗證者間傳遞,過程中需要一種可以輕鬆彙總的密碼學方法,以減少網路達成共識所需的通訊量。 + +這種新型態的金鑰使用 [**Boneh-Lynn-Shacham (BLS)** 簽章方案](https://wikipedia.org/wiki/BLS_digital_signature)。 BLS 能高效率地彙總簽名,同時允許對彙總的單獨驗證者金鑰進行逆向工程,非常適合管理驗證者之間的動作。 + +## 兩種類型的驗證者金鑰 {#two-types-of-keys} + +在以太坊過渡到權益證明之前,使用者只有一個基於橢圓曲線密碼學的私密金鑰來存取他們的資金。 隨著權益證明的引入,希望成為單獨質押者的使用者還需要**驗證者金鑰**和**提款金鑰**。 + +### 驗證者金鑰 {#validator-key} + +驗證者的簽章金鑰包含兩個元素: + +- 驗證者**私**鑰 +- 驗證者**公**鑰 + +驗證者私鑰的作用是簽署鏈上作業,像是區塊提議和證明區塊。 因此,這些私鑰必須存放在熱錢包中。 + +這種彈性的優勢是可以快速地在不同裝置間移轉驗證者簽章金鑰,然而,如果這些金鑰遺失或被偷,那竊盜者便可透過以下方式進行**惡意行為**: + +- 使驗證者遭受罰沒: + - 做為提議者,在同一個時隙簽署兩個不同的信標區塊 + - 做為證明者,簽署一個「包圍」另一個證明的證明 + - 做為證明者,簽署兩個具有相同目標的不同證明 +- 強制執行自願退出,使驗證者停止質押並授權提款金鑰擁有者存取其以太幣餘額。 + +當使用者將以太幣存入質押存款合約時,**驗證者公鑰**會被包含在交易資料中。 這被稱為_存款資料_,讓以太坊能夠辨識驗證者。 + +### 提款憑證 {#withdrawal-credentials} + +每個驗證者都會有一個稱為_提款憑證_的屬性。 這是一個 32 位元組的欄位,以 `0x00` 開頭,代表 Boneh-Lynn-Shacham 提款憑證,或是以 `0x01` 開頭,代表指向一個執行地址的憑證。 + +持有 `0x00` Boneh-Lynn-Shacham 金鑰的驗證者,必須更新這些憑證,將其指向執行地址以啟用超額獎勵發放或全額質押提款。 驗證者可以在初始金鑰產生的階段,就將執行地址包含在存款資料中,_或_後續透過使用提款金鑰來簽署和廣播一則 `BLSToExecutionChange` 訊息。 + +### 提款金鑰 {#withdrawal-key} + +如果在初始存款階段沒有設定,則需要提款金鑰來更新提款憑證,將其指向執行地址。 此設定使超額獎勵發放能夠開始處理,也讓使用者能將他們質押的以太幣全額提款。 + +如同驗證者金鑰,提款金鑰也由兩個元件組成: + +- 提款**私**鑰 +- 提款**公**鑰 + +如果在更新提款憑證為 `0x01` 類型前遺失金鑰,則意味著喪失對驗證者餘額的存取權限。 驗證者依舊可以簽署證明和區塊,因為這些動作只需要驗證者私鑰,然而遺失了提款私鑰就幾乎沒有激勵。 + +將驗證者金鑰與以太坊帳戶金鑰分離,可以讓一個使用者運行多個驗證者。 + +![驗證者金鑰示意圖](validator-key-schematic.png) + +## 從種子助記詞派生金鑰 {#deriving-keys-from-seed} + +如果每質押 32 個以太幣都需要一組新的 2 個完全獨立的金鑰,那金鑰管理很快就會變得無效率,尤其對那些運行多個驗證者的使用者而言。 相反,多個驗證者金鑰可以從一個共同的秘鑰派生,並且儲存這個秘鑰就允許存取多個驗證者金鑰。 + +[助記詞](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase)和路徑通常是[使用者存取](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0)自己的錢包時最重要的工具。 助記詞是一連串的文字,做為私密金鑰的初始種子。 當助記詞和額外的資料結合,即可產生一個稱為「主密鑰」的雜湊值。 這可以視為一個樹的根部。 然後從這個根部開始,使用階層路徑來派生分支,使子節點可以作為其父節點的雜湊值及其在樹中的索引之組合而存在。 閱讀 [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) 及 [BIP-19](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki),瞭解基於助記詞生成金鑰的標準。 + +這些路徑具有以下結構,與硬體錢包有過互動的使用者會相對熟悉: + +``` +m/44'/60'/0'/0` +``` + +這些路徑中的斜線將私鑰的組成部分區分如下: + +``` +master_key / purpose / coin_type / account / change / address_index +``` + +因為樹根是相同的,變化發生在分支,所以這個邏輯讓使用者能將盡可能多的驗證者附加到一個**助記詞**上。 使用者可以從助記詞中**派生任意數量的金鑰**。 + +``` + [m / 0] + / + / +[m] - [m / 1] + \ + \ + [m / 2] +``` + +每一個分支由 `/` 來區分,因此 `m/2` 代表從主金鑰開始並遵循分支 2。 下圖顯示,一個助記詞用來儲存三個提款金鑰,每一個金鑰有兩個關聯的驗證者。 + +![驗證者金鑰邏輯](multiple-keys.png) + +## 衍生閱讀 {#further-reading} + +- [Carl Beekhuizen 發布的以太坊基金會部落格文章](https://blog.ethereum.org/2020/05/21/keys/) +- [EIP-2333 BLS12-381 金鑰產生](https://eips.ethereum.org/EIPS/eip-2333) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md" new file mode 100644 index 00000000000..5f1cf2ff576 --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md" @@ -0,0 +1,69 @@ +--- +title: 權益證明與工作量證明的比較 +description: 基於權益證明與工作量證明的以太坊共識機制比較 +lang: zh-tw +--- + +在以太坊推出時,權益證明還需要許多的研究及開發以確保其可以保護以太坊, 而工作量證明則是一個較簡單且已被比特幣驗證過的機制,這表示核心開發者可以直接實行它並讓以太坊上線。 從那時候到可以實行權益證明,一共又花費了八年的開發時間。 + +本頁解釋以太坊從工作量證明移過渡到權益證明的源由,及其所牽涉的取捨。 + +## 安全性 {#security} + +以太坊研究者認為權益證明相較工作量證明是一個更安全的機制。 然而,它最近才在以太坊的主網上實行,運行時間也少於工作量證明。 在接下來的部分,我們將討論相較於工作量證明,權益證明安全模型的利與弊。 + +### 攻擊成本 {#cost-to-attack} + +在權益證明中,驗證者需要在智慧型合約中代管(「質押」)至少 32 個以太幣。 以太坊能夠在驗證者行為不端時,將質押的以太幣銷毀作為懲罰。 為了達成共識,至少 66% 的總質押以太幣需要投票贊成某個特定的區塊集合。 獲得 >= 66% 的質押以太幣投票贊成的區塊會「最終確定」,代表這些區塊無法再被移除或是重組。 + +攻擊網路可能是阻止鏈的最終確定,或是確保規範鏈內的某種區塊組織以某種方式讓攻擊者受益。 這需要攻擊者透過累積大量以太幣並直接投票,或是欺騙誠實的驗證者,讓他們投出特定的票,將誠實的共識改道。 複雜且概率較低的攻擊會欺騙誠實的驗證者,除此之外,攻擊以太坊的成本就是攻擊者必須累積的以有利於他們的方式影響共識的質押以太幣。 + +最低攻擊成本是 >33% 的總質押以太幣。 持有 >33% 質押總量的攻擊者可以簡單地透過離線造成最終確定性延遲。 這對網路造成的影響相對較小,因為有一種叫做「怠惰逐減懲罰」的機制,它會將離線驗證者的質押逐漸消減,直到線上的多數驗證者的質押佔比達到 66%,這時就可以重新對鏈進行最終確定。 攻擊者理論上也可以透過持有稍高於 33% 的質押總量來製造雙重最終確定性,即攻擊者會在他們被要求產生區塊時,用他們的所有驗證者去重複投票並建立不止一個區塊。 每個分叉只需 50% 的剩餘誠實驗證者就能先看到每個區塊,所以如果他們控制訊息傳送時間得宜,他們有可能讓兩個分叉都能最終確定。 這種攻擊的成功率很低,但如果攻擊者有辦法做到雙重最終確定性,以太坊社群將不得不決定採用其中一個分叉,這種情況下,另一個分叉上攻擊者的驗證者必然會遭到罰沒。 + +擁有 >33% 的質押總量,攻擊者就有機會對以太坊網路造成輕微(最終確定性延遲)或是嚴重(雙重最終確定性)的影響。 當在網路上質押大於 14,000,000 個以太幣時,以代表性的價格 1000 美元/以太幣計算,這些攻擊的最低成本為 `1000 x 14,000,000 x 0.33 = $4,620,000,000`。 攻擊者遭到罰沒時會失去這些錢並被逐出以太坊。 如果他們想要再次攻擊,則需要再次累積 >33% 的質押以太幣,然後再把這些錢銷毀一次。 每次嘗試攻擊以太坊網路都需要 >46 億美元的成本(以 1000 美元/以太幣及 1400 萬質押以太幣計算)。 攻擊者在被罰沒時也會被驅逐出以太坊,如果他們想再次加入,則需要重新排隊。 這表示重複攻擊的速率不只受制於攻擊者需要累積 >33% 的質押總量,還需要花時間等待其所有的驗證者加入以太坊網路。 每一次的攻擊都會讓攻擊者變得更窮,而剩餘的社群則得益於供給衝擊的結果而變得更富。 + +其他攻擊,如 51% 攻擊或是透過 66% 質押總量的最終確定性反轉,都需要更多的以太幣,相對來說也會耗費攻擊者更高的成本。 + +下面把權益證明與工作量證明做下比較。 在工作量證明以太坊上,發起攻擊的成本即是持續擁有 >50% 以太幣總算力的成本。 這相當於擁有充足算力的硬件和運行成本,可勝過其他礦工持續計算工作量證明的解的硬體及其運行花費。 在以太坊挖礦主要透過圖形處理單元而不是專用積體電路,這讓成本有所降低(但如果讓以太坊繼續使用工作量證明,專用積體電路挖礦可能已變得更加受歡迎)。 對手會需要購買大量的硬體並支付高昂的電費以攻擊工作量證明,但總成本還是比累積足夠的以太幣以發動攻擊低。 在工作量證明上發動 51% 攻擊要比在權益證明上便宜約[ 20 倍](https://youtu.be/1m12zgJ42dI?t=1562)。 如果攻擊被偵測到,且以太坊透過硬分叉移除了所造成的改變,攻擊者還是可以使用相同的硬體,對新分叉重複發動攻擊。 + +### 複雜性 {#complexity} + +權益證明比工作量證明複雜得多。 這可能會是工作量證明的好處之一,因為它比較難導入錯誤,或是對較簡易的協定造成意外影響。 不過,歷經多年的研究、開發、模擬及測試網實行,這樣的複雜性已經被馴化。 權益證明協定已經由五個獨立團隊(在各個執行層及共識層上)用五種不同的程式設計語言獨立地實行,以增強對用戶端錯誤的韌性。 + +為了能夠安全地開發及測試權益證明的共識邏輯,在以太坊實行權益證明的兩年前就已啟動信標鏈。 信標鏈作為權益證明測試的沙盒,是一條實行權益證明共識邏輯的即時區塊鏈,但不會影響實際以太坊交易,能有效地自行達成共識。 在它持續表現穩定且沒有發生任何錯誤足夠長的時間後,信標鏈被「合併」進以太坊主網中。 這些都能協助降低權益證明的複雜性,讓發生非計畫性後果或用戶端錯誤的風險變得極低。 + +### 攻擊媒介 {#attack-surface} + +權益證明比工作量證明更複雜,這意味著需要處理更多的攻擊媒介。 與一個連線用戶端的點對點網路不同,權益證明有兩個點對點網路,分別實行不同的協定。 在每個時隙預先選擇一名特定驗證者可能會造成阻斷服務攻擊,其中大量的網路流量會導致該特定驗證者離綫。 + +攻擊者還有一些方法可以精心安排其區塊或證明的釋放時間,使它們被特定比例的誠實網路所接收,從而影響他們以特定方式進行投票。 最後,攻擊者可以簡單地累積足夠多的以太幣進行質押,並主導共識機制。 所有這些[攻擊媒介都有相應的防禦措施](/developers/docs/consensus-mechanisms/pos/attack-and-defense),但工作量證明機制下,並未提供這些防禦措施。 + +## 去中心化 {#decentralization} + +權益證明比工作量證明更加去中心化,因爲挖礦硬體的軍備競賽趨於淘汰個人礦工和小型組織。 雖然從技術上講,任何人都可以使用一般的硬體進行挖礦,但與機構化的挖礦作業相比,他們獲得獎勵的可能性微乎其微。 而在權益證明機制中,每個人的質押成本和回報百分比都是相同的。 目前,運行一個驗證者需要質押 32 個以太幣。 + +另一方面,流動性質押衍生品的出現引起了對中心化的憂慮,因爲一些大型供應商管理了大量的質押以太幣。 這個問題確實存在,并且需要儘快更正,但實際情況也比看起來更微妙。 中心化的質押供應商不一定會對驗證者進行中心化控制 - 這通常只是建立中心化以太幣池的一種方式,讓許多獨立節點營運商能夠進行質押,而不要求每名參與者都擁有 32 個以太幣。 + +對於以太坊,最佳的選項是讓驗證者在家用電腦上本機運作,以實現最大程度的去中心化。 這就是爲什麽以太坊拒絕提高運作節點/驗證者的硬體要求。 + +## 永續性 {#sustainability} + +權益證明是一種保護區塊鏈的低碳方式。 在工作量證明機制下,礦工會爭奪區塊的開采權。 能夠更快執行運算的礦工更容易成功,這刺激了對硬體的投資和能源消耗。 以太坊在過渡到權益證明之前就觀察到了這一點。 在過渡到權益證明的前夕,以太坊的年耗電量約爲 78 太瓦時 - 相當於一個小型國家的用電量。 但在過渡到權益證明后,該能源消耗減少了約 99.98%。 權益證明使以太坊成爲一個節能、低碳的平台。 + +[更多關於以太坊能源消耗的資訊](/energy-consumption) + +## 發行 {#issuance} + +權益證明以太坊在支付其安全成本時,發行的代幣比工作量證明以太坊少得多,因爲驗證者無需支付高昂的電力成本。 因此,以太幣可以降低通貨膨脹,在大量以太幣被銷毀時,甚至會出現通貨緊縮。 更低的通貨膨脹水平意味著以太坊的安全成本相比工作量證明機制更低。 + +## 想透過視覺方式學習? {#visual-learner} + +觀看 Justin Drake 解釋權益證明相較於工作量證明的優點: + + + +## 了解更多 {#further-reading} + +- [Vitalik 的權益證明設計理念](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) +- [Vitalik 的權益證明常見問答](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) +- [關於權益證明與工作量證明的「簡介」影片](https://www.youtube.com/watch?v=M3EFi_POhps) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md" new file mode 100644 index 00000000000..4327e6c0d60 --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md" @@ -0,0 +1,90 @@ +--- +title: 權益證明獎勵和懲罰 +description: 瞭解權益證明以太坊的協定內激勵措施。 +lang: zh-tw +--- + +以太坊是運用其原生加密貨幣以太幣 (ETH) 來保障安全的。 希望參與驗證區塊和識別鏈頭的節點營運商,需要將以太幣存入以太坊上的[存款合約](/staking/deposit-contract/)。 然後他們將獲得以太幣支付來運作驗證者軟體,檢查在點對點網絡上收到的新區塊的有效性,並套用分叉選擇演算法來辨識鏈頭。 + +驗證者有兩個主要角色:1) 檢查新區塊並證明它們的有效性,2) 從全體驗證者池中被隨機選取時提議新的區塊。 如果驗證者在被要求時無法執行上述工作中的任意一個,他們便無法取得以太幣支付。 驗證者有時也會被賦予彙總簽章和參與同步委員會的工作。 + +有些行爲很難無意爲之並表現出某種惡意企圖,例如在同一個時隙提議多個區塊或在同一個時隙證明多個區塊。 這些「可罰沒」的行為會導致驗證者一定數量的以太幣(多達 1 枚以太幣)被銷毀,之後將其從網絡中移除,此過程需時 36 天。 被罰沒驗證者的以太幣將在退出期間緩慢耗盡,但在第 18 天,他們會受到「相關性懲罰」,當更多的驗證者同時被罰沒時,該懲罰的力度也會更大。 共識機制的激勵結構以此方式獎賞誠實,同時也懲罰不良行為者。 + +所有獎勵和懲罰每個時期套用一次。 + +繼續閱讀,以瞭解更多詳情... + +## 獎勵和懲罰 {#rewards} + +### 酬勞 {#rewards} + +驗證者獲得獎勵的情景有:當他們與大多數其他驗證者的投票結果一致時,當他們提議區塊時,以及當他們參與同步委員會時。 每個時期的獎勵價值按 `base_reward` 計算。 這是用來計算其他獎勵的基本單位。 `base_reward` 代表一個最佳狀況下的驗證者在每個時期收到的平均獎勵。 這是按以下公式,根據驗證者的有效餘額和活躍驗證者總數來計算的: + +``` +base_reward = effective_balance * (base_reward_factor / (base_rewards_per_epoch * sqrt(sum(active_balance)))) +``` + +其中 `base_reward_factor` 為 64,`base_rewards_per_epoch` 為 4,`sum(active balance)` 為所有活躍驗證者質押的以太幣總數。 + +這意味著基本獎勵與驗證者的有效餘額成正比,與網路中的驗證者數量成反比。 驗證者越多,總體發行量越大(`sqrt(N)` 形式),但每個驗證者的 `base_reward` 越小(`1/sqrt(N)` 形式)。 這些因素會影響質押節點的年利率。 閲讀 [Vitalik 的筆記](https://notes.ethereum.org/@vbuterin/rkhCgQteN?type=view#Base-rewards)中與之有關的原理。 + +縂獎勵的計算方式為 5 個組成部分的總和,每個部分各有一個權重,決定該組成部分在縂獎勵中的加成。 組成部分包括: + +``` +1. source vote: the validator has made a timely vote for the correct source checkpoint +2. target vote: the validator has made a timely vote for the correct target checkpoint +3. head vote: the validator has made a timely vote for the correct head block +4. sync committee reward: the validator has participated in a sync committee +5. proposer reward: the validator has proposed a block in the correct slot +``` + +每個組成部分的權重如下: + +``` +TIMELY_SOURCE_WEIGHT uint64(14) +TIMELY_TARGET_WEIGHT uint64(26) +TIMELY_HEAD_WEIGHT uint64(14) +SYNC_REWARD_WEIGHT uint64(2) +PROPOSER_WEIGHT uint64(8) +``` + +這些權重的總和為 64。 獎勵的計算方式為適用權重除以 64 的總和。 及時為來源、目標和鏈頭投票、提議區塊和參與同步委員會的驗證者,可以獲得 `64/64 * base_reward == base_reward`。 不過,驗證者通常不是區塊提議者,因此他們的最大獎勵為 `64-8 /64 * base_reward == 7/8 * base_reward`。 既不是區塊提議者,也沒有參與同步委員會的驗證者,可以獲得 `64-8-2 / 64 * base_reward == 6.75/8 * base_reward`。 + +以太坊還新增了一個額外獎勵來激勵快速證明。 它就是 `inclusion_delay_reward`。 該獎勵的值等於 `base_reward` 乘以 `1/delay`,其中 `delay` 是分隔區塊提議和證明的時隙數。 例如,如果在區塊提議的一個時隙内提交證明,證明者就會獲得 `base_reward * 1/1 == base_reward`。 如果證明在下個時隙到達,證明者就會獲得 `base_reward * 1/2`,依此類推。 + +包含在區塊内的**每個有效證明**都會讓區塊提議者獲得 `8 / 64 * base_reward`,因此實際獎勵的價值與證明驗證者的數量成正比。 區塊提議者也可以透過在提議的區塊中包含其他驗證者不良行爲的證據來增加其獎勵。 這些獎勵是鼓勵驗證者保持誠實的「紅蘿蔔」。 包含罰沒的區塊提議者將獲得 `slashed_validators_effective_balance / 512`。 + +### 懲罰 {#penalties} + +到目前爲止,我們已經考慮了行爲良好的驗證者,但對於那些沒有及時為鏈頭、來源和目標投票或投票速度非常慢的驗證者,應該怎樣做呢? + +錯過目標和來源投票的懲罰等同於證明者提交它們時獲得的獎勵。 這意味不會有獎勵新增到他們的餘額中,反而會從餘額中移除相應的價值。 錯過鏈頭投票不會受到懲罰(即鏈頭投票只會獲得獎勵,不會受到懲罰)。 也沒有與 `inclusion_delay` 相關的懲罰 - 只是不會新增獎勵到驗證者的餘額中。 未能提議區塊也不會受到懲罰。 + +閱讀[共識規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md)中有關獎勵和懲罰的更多資訊。 獎勵和懲罰在 Bellatrix 升級中進行了調整 - 在[以太坊改善提議解讀視頻](https://www.youtube.com/watch?v=iaAEGs1DMgQ)中觀看 Danny Ryan 和 Vitalik 關於此話題的討論。 + +## 罰沒 {#slashing} + +罰沒是一種更嚴厲的行為,會導致驗證者被強制逐出網路,同時損失其質押的以太幣。 導致驗證者被罰沒的情況有三種,以下所有行為都相當於不誠實地提議或證明區塊: + +- 在同一個時隙提議並簽署兩個不同的區塊 +- 證明一個「包圍」了另一個區塊的區塊(有效地改變歷史記錄) +- 透過證明同一區塊的兩個候選區塊進行「雙重投票」 + +如果偵測到這些行爲,驗證者將被罰沒。 這意味著他們質押的以太幣的 1/32(最多不超過 1 枚以太幣)將被立即銷毀,然後開始為期 36 天的驅逐期。 在驅逐期内,驗證者的質押會逐漸流失。 在中間點(第 18 天),會有一項額外的懲罰,其力度與罰沒事件前 36 天内所有被罰沒驗證者的縂質押以太幣成正比。 這意味著當有更多驗證者被罰沒時,罰沒的力度就會增加。 最大罰沒力度是所有被罰沒驗證者的全部有效餘額(即如果有很多驗證者被罰沒,他們將失去全部質押)。 另一方面,一次孤立的罰沒事件只會銷毀驗證者質押的一小部分。 這個與被罰沒驗證者的數量成正比的中間點懲罰稱爲「相關性懲罰」。 + +## 怠惰逐減懲罰 {#inactivity-leak} + +如果共識層未能在四個時期内最終確定,一種稱爲「怠惰逐減懲罰」的應急協定將會啓用。 怠惰逐減懲罰的最終目標是為鏈恢復最終確定性創造條件。 如上所述,最終確定需要 2/3 的多數縂質押以太幣同意來源和目標檢查點。 如果超過 1/3 的總計驗證者離綫或未能提交正確的證明,就不可能有 2/3 的絕對多數來最終確定檢查點。 怠惰逐減懲罰使不活躍驗證者的質押逐漸流失,直至他們控制的質押少於質押縂量的 1/3,使剩餘的活躍驗證者可以最終確定鏈。 無論不活躍驗證者的池有多大,剩餘的活躍驗證者最終都會控制超過 2/3 的質押。 質押的損失是促使不活躍驗證者儘快重新活躍的强大激勵措施。 Medalla 測試網上曾出現過一個怠惰逐減懲罰案例,當時不到 66% 的活躍驗證者成功在最新區塊鏈鏈頭達成共識。 怠惰逐減懲罰被啟動,最後重新獲得了最終確定性! + +共識機制中的獎勵、懲罰與罰沒設計,都是鼓勵個人驗證者正確行事。 然而,從這些設計選擇中形成了一個系統,强烈激勵在多個用戶端平等分配驗證者,並且强烈抑制單一用戶端取得主導地位。 + +## 衍生閱讀 {#further-reading} + +- [升級以太坊:激勵層](https://eth2book.info/altair/part2/incentives) +- [以太坊混合 Casper 協定中的激勵措施](https://arxiv.org/pdf/1903.04205.pdf) +- [Vitalik 的規範註解](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#rewards-and-penalties-1) +- [以太坊 2 罰沒預防技巧](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) + +_資源_ + +- _[https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/](https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/)_ diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md" new file mode 100644 index 00000000000..d2aab3c1fc4 --- /dev/null +++ "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md" @@ -0,0 +1,39 @@ +--- +title: 弱主觀性 +description: 關於弱主觀性及其在權益證明以太坊中所扮演角色的解釋。 +lang: zh-tw +--- + +區塊鏈中的主觀性是指依賴社交資訊來達成對當前狀態的共識。 可能有多個有效分叉,可根據從網路上其他對等節點收集而來的資訊進行選擇。 主觀性的反面是客觀性,是指只存在唯一一條可能有效的鏈,所有節點都需要透過套用其程式碼規則達成共識。 還有第三種狀態,稱為弱主觀性。 這是指在擷取一些初始社交資訊種子後,可以客觀地繼續運作的區塊鏈。 + +## 前置要求 {#prerequisites} + +要理解本頁內容,需先理解[權益證明](/developers/docs/consensus-mechanisms/pos/)的基礎知識。 + +## 弱主觀性解決了什麼問題? {#problems-ws-solves} + +主觀性是權益證明區塊鏈固有的,因為從多個分叉中選擇正確的鏈是透過計算歷史投票結果得來的。 這使區塊鏈暴露在多種攻擊媒介之下,包含遠程攻擊,即很早就加入區塊鏈的節點維護了另一個分叉,並在很久後為了自身利益將其釋放。 或者,如果 33% 的驗證者提取其質押、但繼續證明和產生區塊,他們可能會產生另一個與規範鏈衝突的分叉。 新的節點或是下線許久的節點可能會沒有意識到這些發動攻擊的驗證者已經提取他們的資金,所以攻擊者可能哄騙這些節點跟隨不正確的區塊鏈。 以太坊可以透過施加約束,將機制的主觀方面及由此而來的信任假設減少到最低限度,來解決這些攻擊媒介。 + +## 弱主觀性檢查點 {#ws-checkpoints} + +弱主觀性透過使用「弱主觀性檢查點」在權益證明以太坊上實行。 它們是網路上所有節點都同意屬於規範鏈的狀態根。 除了不直接位於區塊鏈上的創世位置之外,它們有著與創世區塊相同的「普適真理」用途。 分叉選擇演算法信任在該檢查點中所定義的區塊鏈狀態是正確的,且從該點開始獨立並客觀地驗證區塊鏈。 因為位於弱主觀性檢查點之前的區塊不能被改變,這些檢查點作為「還原限制」。 只需透過定義遠端分叉為無效且當作機制設計的一部分,即可瓦解遠程攻擊。 確保弱主觀性檢查點的間隔距離小於驗證者提款期間的間隔距離,能夠確保將區塊鏈分叉的驗證者在能夠提取其質押前至少被罰沒一定的門檻數量,且新進者不會被已經提取質押的驗證者誘騙至跟隨不正確的分叉。 + +## 弱主觀性檢查點與最終確定區塊的區別 {#difference-between-ws-and-finalized-blocks} + +以太坊節點以不同方式處理最終確定的區塊和弱主觀性檢查點。 如果一個節點意識到有兩個競爭的最終確定區塊,則會左右為難;它沒有辦法自動辨識出哪個為規範分叉。 這是共識失敗的症狀。 相反,一個節點直接拒絕與其弱主觀性檢查點衝突的任何區塊。 從節點的角度來說,弱主觀性檢查點代表無法被其對等節點的新認知損害的絕對事實。 + +## 多弱是為弱? {#how-weak-is-weak} + +以太坊權益證明的主觀方面是要求從可信來源同步最近狀態(弱主觀性檢查點)。 因為可以根據幾個獨立的公開來源(例如區塊瀏覽器或多個節點)對弱主觀性檢查點進行檢查,所以獲得不佳的弱主觀性檢查點的風險非常低。 然而,執行任何軟體應用程式總是需要一定程度的信任,例如,相信軟體開發者產出誠實的軟體。 + +弱主觀性檢查點甚至可能作為用戶端軟體的一部分出現。 可以說,攻擊者能夠破壞軟體內的檢查點,就能非常容易地破壞軟體本身。 雖然沒有能夠完全避免此問題的加密貨幣經濟方法,但以太坊透過多個獨立的用戶端團隊最小化了不可信開發者帶來的影響。每個團隊以不同語言建構等效的軟體,而所有團隊在維護誠實區塊鏈上有既得利益。 區塊瀏覽器也可以提供弱主觀性檢查點,或者提供一種方法,將從其他地方獲得的檢查點與其他來源進行交叉比對。 + +最後,可以從其他節點要求檢查點;或許另一個運作全節點的以太坊使用者可以提供一個檢查點,然後由驗證者比對來自區塊瀏覽器的資料進行驗證。 整體來說,信任弱主觀性檢查點的提供者被認為跟信任用戶端開發者一樣存在問題。 需要的整體信任很低。 值得注意的是,只有當大多數驗證者串謀產生區塊鏈的另一個分叉這種微乎其微的情況下,上述考量才會變得非常重要。 其他情況下,只有一個以太坊鏈可供選擇。 + +## 衍生閱讀 {#further-reading} + +- [以太坊 2.0 中的弱主觀性](https://notes.ethereum.org/@adiasg/weak-subjectvity-eth2) +- [Vitalik:我如何愛上弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) +- [弱主觀性(Teku 文件)](https://docs.teku.consensys.net/en/latest/Concepts/Weak-Subjectivity/) +- [階段 0 弱主觀性指南](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md) +- [以太坊 2.0 中的弱主觀性分析](https://github.com/runtimeverification/beacon-chain-verification/blob/master/weak-subjectivity/weak-subjectivity-analysis.pdf) diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/poa/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/poa/index.md" new file mode 100644 index 00000000000..26c55d4681f --- /dev/null +++ "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/poa/index.md" @@ -0,0 +1,79 @@ +--- +title: 權威證明 (PoA) +description: 解釋權威證明共識協定及其在區塊鏈生態系統中的作用。 +lang: zh-tw +--- + +**權威證明 (PoA)** 是一種基於聲譽的共識演算法,是[權益證明](/developers/docs/consensus-mechanisms/pos/)的修改版本。 它主要由私人鏈、測試網和本地開發網路使用。 權威證明是一種基於聲譽的共識演算法,需要信任一組授權簽署者來產生區塊,而不是權益證明中基於權益的機制。 + +## 先決條件 {#prerequisites} + +為了更好地理解本頁內容,我們建議你先熟悉 [交易](/developers/docs/transactions/)、[區塊](/developers/docs/blocks/) 和 [共識機制](/developers/docs/consensus-mechanisms/) 等概念。 + +## 什麼是權威證明 (PoA)? {#what-is-poa} + +權威證明是 **[權益證明](/developers/docs/consensus-mechanisms/pos/) (PoS)** 的修改版本,它是一種基於聲譽的共識演算法,而不是權益證明中基於權益的機制。 這個術語由 Gavin Wood 於 2017 年首次提出,這種共識演算法主要被私人鏈、測試網和本地開發網路使用,因為它透過讓一小部分節點儲存區塊鏈並產生區塊,克服了工作量證明對高品質資源的需求,以及權益證明存在的可擴展性問題。 + +權威證明需要信任 [創世區塊](/glossary/#genesis-block) 中設定的一組授權簽署者。 在目前的大多數實作中,所有授權簽署者在確定鏈的共識時都保留平等的權力和特權。 聲譽抵押背後的想法是,透過諸如認識你的客戶 (KYC) 之類的方式,或者透過讓知名組織成為唯一的驗證者,使每個授權驗證者為每個人所熟知 - 這樣,如果驗證者做錯任何事情,他們的身分就會被識別。 + +權威證明有多種實作,但標準的以太坊實作是實作了 [EIP-225](https://eips.ethereum.org/EIPS/eip-225) 的 **Clique**。 Clique 是開發者友好且易於實作的標準,支援所有用戶端同步類型。 其他實作包括 [IBFT 2.0](https://besu.hyperledger.org/stable/private-networks/concepts/poa) 和 [Aura](https://openethereum.github.io/Chain-specification)。 + +## 運作原理 {#how-it-works} + +在權威證明中,選擇一組授權簽署者來建立新區塊。 簽署者是根據他們的聲譽來選擇的,並且是唯一被允許建立新區塊的人。 簽署者以輪轉方式選擇,每個簽署者被允許在特定的時間範圍內建立一個區塊。 區塊建立時間是固定的,簽署者需要在該時間範圍內建立區塊。 + +在這種情況下,聲譽不是一個量化的東西,而是微軟和谷歌等知名公司的聲譽,因此選擇受信任簽署者的方式不是演算法,而是信任實體的正常人類行為。例如,微軟在成百上千家初創公司之間建立了一個權威證明專用網路,以自己作為唯一受信任的簽署者,並且將來有可能添加其他知名簽署者(如谷歌),那麼初創公司毫無疑問會信任微軟始終以誠實的方式行事並使用網路。 這解決了在不同的小型/私有網路中進行質押的需求,這些用途各異的網路為了保持去中心化和運行而建立,並且還消除了對消耗大量能源和資源之礦工的需求。 一些專用網路使用權威證明標準(例如 VeChain),還有一些對其進行了修改,例如採用 [PoSA](https://academy.binance.com/en/glossary/proof-of-staked-authority-posa) 標準的幣安。PoSA 是權威證明和權益證明的自訂修改版本。 + +投票過程由簽署者自行完成。 每個簽署者在建立新區塊時都會投票決定在其區塊中新增或刪除簽署者。 投票由節點進行統計,並根據達到特定閾值「SIGNER_LIMIT」的投票結果來新增或刪除簽署者。 + +可能會出現小分叉的情況,一個區塊的難度取決於該區塊是「依序」簽署還是「不依序」簽署。 「依序」區塊的難度為 2,「不依序」區塊的難度為 1。 在小分叉的情況下,大多數簽署者「依序」密封區塊的鏈將累積最大難度並獲勝。 + +## 攻擊媒介 {#attack-vectors} + +### 惡意簽署者 {#malicious-signers} + +惡意使用者可能會被新增至簽署者清單中,或者簽署金鑰/機器可能遭到洩漏/攻擊。 在這種情況下,協定需要能夠防禦重組和垃圾郵件攻擊。 建議的解決方案是,給定 N 個授權簽署者的清單,任何簽署者只能從每 K 個區塊鑄造 1 個區塊。這將確保損失有限,並且剩餘驗證者可以投票逐出惡意使用者。 + +### 審查制度 {#censorship-attack} + +另一個有趣的攻擊媒介是,一個簽署者(或一組簽署者)試圖對投票決定將其從授權清單中刪除的區塊進行審查。 為了解決這個問題,簽署者允許的鑄造頻率被限制為每 N/2 個 1 次。 這確保惡意簽署者需要控制至少 51% 的簽署帳戶,才能真正成為鏈上新的真實性來源。 + +### 垃圾郵件 {#spam-attack} + +另一個小型攻擊媒介是,惡意簽署者在其鑄造的每個區塊中註入新的投票提案。 由於節點需要統計所有投票以建立授權簽署者的實際清單,因此它們必須記錄一段時間內的所有投票。 如果不限制投票窗口,投票窗口可能會緩慢但無限制地增長。 解決方案是設置一個 W 個區塊的移動窗口,在此之後的投票將被視為過時。 合理的窗口可能是 1-2 個時期。 + +### 並發區塊 {#concurrent-blocks} + +在權威證明網路中,當有 N 個授權簽署者時,每個簽署者都可以從 K 個區塊鑄造 1 個區塊,這意味著允許 N-K+1 個驗證者在任意給定時間點鑄造區塊。 為了防止這些驗證者爭奪區塊,每個簽署者應該在發布新區塊的時間上增加一個小的隨機「偏移量」。 儘管這個過程確保小分叉很少見,但偶爾的分叉仍可能發生,就像主網一樣。 如果發現某個簽署者濫用權力並造成混亂,其他簽署者可以投票將其逐出。 + +例如,如果有 10 個授權簽署者,並且每個簽署者可以從 20 個區塊建立 1 個區塊,那麼在任意給定時間,有 11 個驗證者可以建立區塊。 為了防止他們競相建立區塊,每個簽署者都會在發布新區塊的時間上增加一個小的隨機「偏移量」。 這就減少了小分叉的發生,但仍然允許偶爾分叉,如以太坊主網上所見。 如果簽署者濫用權力並造成破壞,他們可能會被投票逐出網路。 + +## 優點和缺點 {#pros-and-cons} + +| 優勢 | 劣勢 | +| ------------------------------------------- | ----------------------------------------------- | +| 比權益證明和工作量證明等其他流行機制更具可擴展性,因為它以有限數量的區塊簽署者為基礎。 | 權威證明網路通常具有相對較少數量的驗證節點, 這使得權威證明網路更加中心化。 | +| 權威證明區塊鏈的運作和維護成本極為低廉。 | 成為授權簽署者對於普通人來說通常遙不可及,因為區塊鏈需要具有既定聲譽的實體。 | +| 交易確認速度非常快,可以達到不到 1 秒,因為驗證新區塊只需要有限數量的簽署者 | 惡意簽署者可能進行重組攻擊、雙重消費、審查網路中的交易,這些攻擊雖已得到緩解,但仍然有可能發生 | + +## 延伸閱讀 {#further-reading} + +- [EIP-225](https://eips.ethereum.org/EIPS/eip-225) _Clique 標準_ +- [權威證明研究](https://github.com/cryptoeconomics-study/website/blob/master/docs/sync/2.4-lecture.md)_密碼經濟學_ +- [什麼是權威證明](https://forum.openzeppelin.com/t/proof-of-authority/3577) _OpenZeppelin_ +- [權威證明解釋](https://academy.binance.com/en/articles/proof-of-authority-explained)_幣安_ +- [區塊鏈中的權威證明](https://medium.com/techskill-brew/proof-of-authority-or-poa-in-blockchain-part-11-blockchain-series-be15b3321cba) +- [Clique 解釋](https://medium.com/@Destiner/clique-cross-client-proof-of-authority-algorithm-for-ethereum-8b2a135201d) +- [已棄用的權威證明,Aura 規範](https://openethereum.github.io/Chain-specification) +- [IBFT 2.0,另一個權威證明實作](https://besu.hyperledger.org/stable/private-networks/concepts/poa) + +### 想透過視覺方式學習? {#visual-learner} + +觀看權威證明的直觀解釋: + + + +## 相關主題 {#related-topics} + +- [工作量證明](/developers/docs/consensus-mechanisms/pow/) +- [權益證明](/developers/docs/consensus-mechanisms/pos/) diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/index.md" new file mode 100644 index 00000000000..45905ed8629 --- /dev/null +++ "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/index.md" @@ -0,0 +1,109 @@ +--- +title: 工作量證明 (PoW) +description: 解釋工作量證明共識協定及其在以太坊中的作用。 +lang: zh-tw +--- + +在以太坊網路的初期,我們使用一種涉及**[工作量證明 (PoW)](/developers/docs/consensus-mechanisms/pow)** 的共識機制。 這個機制讓以太坊網路的節點對所有在以太坊區塊鏈上紀錄的資訊的狀態達成共識,並可防範某些種類的經濟攻擊。 但是,以太坊於 2022 年停止使用工作量證明,並轉為使用[權益證明](/developers/docs/consensus-mechanisms/pos)。 + + + 現在,業界普遍都已棄用工作量證明。 以太坊亦不在其共識機制內使用工作量證明。 取而代之的,是權益證明。 閱讀更多關於權益證明質押的資訊。 + + +## 基本資訊 {#prerequisites} + +為了更好地理解本頁內容,我們推薦你先閱讀[交易](/developers/docs/transactions/)、[區塊](/developers/docs/blocks/)及[共識機制](/developers/docs/consensus-mechanisms/)。 + +## 什麼是工作量證明 (PoW)? {#what-is-pow} + +中本聰共識採用工作量證明,這是一種機制,一度允許去中心化的以太坊網路對帳戶餘額和交易順序等達成共識(即所有節點都同意)。 這種機制防止使用者「重複支付」他們的代幣,同時確保以太坊區塊鏈極難攻擊或操控。 這些安全特性現在來自權益證明,而不是使用被稱為 [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) 的共識機制。 + +## 工作量證明 (PoW) 與挖礦 {#pow-and-mining} + +工作量證明是一種基礎演算法,它為礦工在工作量證明區塊鏈上進行的工作設定難度和規則。 挖礦即為「工作」本身。 此行為指新增合法區塊於區塊鏈。 這很重要,因為鏈的長度有助於網路跟隨區塊鏈的正確分叉。 達成的「工作」越多,區塊鏈越長,而隨著區塊數量增加,當前網路狀態之確定性也隨之提高。 + +[更多挖礦相關訊息](/developers/docs/consensus-mechanisms/pow/mining/) + +## 以太坊的工作量證明 (PoW) 如何運作? {#how-it-works} + +以太坊交易被處理至區塊中。 在現已棄用的工作量證明以太坊中,每個區塊包含: + +- 區塊難度 -– 例如: 3,324,092,183,262,715 +- mixHash(混合雜湊)– 例如: `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29` +- 隨機數 – 例如:`0xd3ee432b4fb3d26b` + +該區塊資料與工作量證明直接相關。 + +### 工作量證明機制 {#the-work} + +工作量證明協定 Ethash 要求礦工經過激烈的試錯競賽,找出一個區塊的隨機數。 只有具備有效隨機數的區塊才能新增到鏈中。 + +當礦工爭相建立區塊時,會透過數學函式重複放置一個資料集,該資料集只能如曠工那般透過下載並執行整個區塊鏈來獲得。 此資料集用於產生一個低於目標(由區塊難度決定)的 mixHash。 而這樣做的最佳方式是透過試錯。 + +難度決定了雜湊值的目標。 目標越小,有效雜湊值集合就越小。 一旦生成雜湊值,其他礦工和用戶端就能非常輕鬆地驗證。 即使一筆交易發生變化,雜湊值也會變得完全不同,顯示存在詐欺行為。 + +雜湊使​​詐欺行為更容易被發現。 此外,工作量證明過程也大大遏制了對區塊鏈的攻擊。 + +### 工作量證明和安全性 {#security} + +曠工會因為在以太坊主鏈上進行這項工作而得到獎勵。 對部分礦工而言,令他們去建立自己的新鏈的動機微乎其微,因為這會損害主鏈系統。 區塊鏈信賴基於單一狀態,並以此作為真實性來源。 + +工作量證明的目標是延伸區塊鏈。 最長的鏈是最可信的有效鏈,因為產生它所需的計算工作最多。 在以太坊的工作量證明系統中,幾乎不可能建立可擦除交易的新區塊、建立虛假交易或維護第二條鏈。 那是因為,惡意礦工必須總能比其他所有人更快解出區塊隨機數。 + +為持續建立惡意但有效的區塊,惡意礦工必須擁有超過 51% 的網路挖礦算力才能擊敗其他所有人。 如此巨大的「工作量」需要大量昂貴的算力,而消耗的能源甚至可能超過攻擊所得的收益。 + +### 工作量證明的經濟模型 {#economics} + +工作量證明還負責發行新貨幣至系統中,獎勵礦工參與挖礦工作。 + +自[君士坦丁堡升級](/history/#constantinople)以來,成功建立區塊的礦工將獲得兩枚新鑄造的以太幣及部分交易費作為獎勵。 Ommer 區塊也會補償 1.75 枚以太幣。 Ommer 區塊是由一個礦工與另一個建立了規範區塊的曠工幾乎同時建立的有效區塊,規範區塊最終取決於首先在其上建置的鏈。 Ommer 區塊通常是因網路延遲而發生。 + +## 最終確定性 {#finality} + +當一筆交易成為無法改變的區塊的一部分時,它便在以太坊上擁有了「最終確定性」。 + +由於礦工是以去中心化的方式工作,所以有可能同時生成兩個有效的區塊。 這會建立一個暫時性的分叉。 最終,後繼區塊挖掘出來並新增至其中一條鏈,這使得它變得更長,並成為被採用的鏈。 + +但更複雜的是,臨時分叉上被拒絕的交易可能尚未包含在被採用的鏈上。 此代表其交易結果可能被逆轉。 因此,最終確定性是指在認定交易完全不可逆前需要等待的時間。 在先前的工作量證明以太坊下,於特定區塊 `N` 上開采的區塊越多,`N` 中交易成功且不會被逆轉的置信度就越高。 現在,透過權益證明機制,最終確定性成為區塊的顯式屬性,而非機率屬性。 + +## 工作量證明的能源用量 {#energy} + +工作量證明面臨的一個重大非議在於,為保障網路安全所需要的巨大能源消耗量。 為了維持安全性和去中心化,採用工作量證明的以太坊每年都要消耗大量能源。 在過渡到權益證明的前夕,以太坊礦工每年總共消耗約 70 太瓦時的能源(大約與捷克共和國的能源消耗相當 - 資料來自 2022 年 7 月 18 日的 [digiconomist](https://digiconomist.net/))。 + +## 優勢及劣勢 {#pros-and-cons} + +| 優勢 | 劣勢 | +| ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | +| 工作量證明為中性。 無須任何以太幣就能參與,而區塊獎勵可讓你從 0 以太幣積累正餘額。 相反,於[權益證明](/developers/docs/consensus-mechanisms/pos/)系統,你需要以太幣才能參與。 | 工作量證明消耗巨量能源,對環境造成傷害。 | +| 工作量證明採用試錯型共識機制,已長年確保比特幣及以太坊之安全和去中心化。 | 若要參與挖礦,需要大筆先期投資,購買專業挖礦設備。 | +| 相較於權益證明,工作量證明更易於實作。 | 因算力需求增加,挖礦工作可能被少數有權勢的挖礦池所霸佔,引發去中心化及安全性風險。 | + +## 相較於權益證明 {#compared-to-pos} + +於高層面來看,權益證明與工作量證明具同一目標:協助去中心化網路達成共識並確保其安全。 但其過程和人員有所不同: + +- 權益證明以質押的以太幣取代算力之重要性。 +- 權益證明以驗證者取代礦工。 驗證者透過質押以太幣來啟動建立新區塊的能力。 +- 驗證者無須相互競爭以建立區塊,相反,他們將由演算法隨機選擇。 +- 最終確定性更加明瞭:於特定檢查點,若三分之二的驗證者同意此區塊狀態,則視其為最終確定。 驗證者須賭上全部質押,所以當他們試圖串通一氣時,將會損失全部質押。 + +[更多詳情關於質押證明(PoS)](/developers/docs/consensus-mechanisms/pos/) + +## 想透過實際視覺學習? {#visual-learner} + + + +## 衍生閱讀 {#further-reading} + +- [多數攻擊](https://en.bitcoin.it/wiki/Majority_attack) +- [決議最終確定性](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) + +### 影片 {#videos} + +- [關於工作量證明協定的技術說明](https://youtu.be/9V1bipPkCTU) + +## 相關主題 {#related-topics} + +- [挖礦](/developers/docs/consensus-mechanisms/pow/mining/) +- [持有量證明(又稱:權益證明)](/developers/docs/consensus-mechanisms/pos/) +- [權威證明](/developers/docs/consensus-mechanisms/poa/) diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/index.md" new file mode 100644 index 00000000000..c4618c7ef59 --- /dev/null +++ "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/index.md" @@ -0,0 +1,81 @@ +--- +title: 挖礦 +description: 解釋以太坊挖礦的運作方式。 +lang: zh-tw +--- + + +工作量證明不再是以太坊共識機制的基礎,這意味著挖礦已完結。 取而代之的是,以太坊由抵押以太幣的驗證者來保障安全。 你能從現在開始質押以太幣。 閱讀更多關於合併權益證明質押的資訊。 此頁面僅為滿足對歷史的興趣。 + + +## 基本資訊 {#prerequisites} + +為了更好地理解本頁面,建議你先閱讀[交易](/developers/docs/transactions/)、[區塊](/developers/docs/blocks/)及[工作量證明](/developers/docs/consensus-mechanisms/pow/)。 + +## 什麼是以太坊挖礦? {#what-is-ethereum-mining} + +挖礦是在以太坊現已棄用的工作量證明架構中,建立要新增至以太坊區塊鏈的交易區塊的過程。 + +挖礦一詞起源於將加密貨幣與黃金作類比。 黃金或貴金屬很稀有,數位代幣也一樣,而在工作量證明系統中,增加代幣總量的唯一方法是透過挖礦。 在工作量證明以太坊中,挖礦是僅有的代幣發行方式。 然而,與黃金或貴金屬不同,以太坊挖礦透過於區塊鏈中建立、驗證、發布和傳播區塊,也是保護網路安全的方式。 + +以太幣挖礦 = 保護網路安全 + +挖礦是任何工作量證明區塊鏈的命脈。 在過渡到權益證明之前,以太坊礦工 - 即運行軟體的電腦,利用它們的時間和算力來處理交易並產出區塊。 + +## 為何需要礦工? {#why-do-miners-exist} + +在以太坊這樣的去中心化機制中,我們須確保所有參與者同意統一的交易順序。 礦工透過解決計算難題來產出區塊,保護網路免受攻擊,幫助實現這個目標。 + +[有關工作量證明的更多資訊](/developers/docs/consensus-mechanisms/pow/) + +以前任何人都能使用自己的電腦在以太坊網路上挖礦。 然而,並非每個人都能透過挖以太幣 (ETH) 而獲利。 在大多數情況下,礦工必須購買專用電腦硬體,並要使用廉價能源。 普通電腦不太可能獲得足夠的區塊獎勵來支付相關挖礦成本。 + +### 挖礦成本 {#cost-of-mining} + +- 建置及維護挖礦設備所需硬體的潛在成本 +- 為挖礦設備供電的電力成本 +- 如果你在礦池中挖礦,這些礦池通常會對礦池產生的每個區塊收取固定百分比的費用 +- 支援挖礦設備的潛在設備成本(通風、能源監控和電力拉線等等) + +為深入了解挖礦收益,推薦使用挖礦計算機,例如 [Etherscan](https://etherscan.io/ether-mining-calculator) 提供的挖礦計算機。 + +## 以太坊交易是如何挖掘的 {#how-ethereum-transactions-were-mined} + +以下概述如何在以太坊工作量證明中挖掘交易。 可以在[此處](/developers/docs/consensus-mechanisms/pos/#transaction-execution-ethereum-pos)找到以太坊權益證明下該過程的類比描述。 + +1. 使用者編寫[交易](/developers/docs/transactions/)請求,並用某個[帳戶](/developers/docs/accounts/)之私密金錀簽署此交易請求。 +2. 使用者從某個[節點](/developers/docs/nodes-and-clients/)廣播交易請求至全體以太坊網路。 +3. 當接收到新交易請求時,以太坊網路中的每個節點新增該請求至其本機記憶體池,這是他們已在區塊中收到但尚未提交至區塊鏈的所有交易請求的清單。 +4. 一定時間後,挖礦節點匯總數十或數百筆交易請求到一個潛在的[區塊](/developers/docs/blocks/),其通常藉由某一方法,在區塊燃料限制範圍內賺取最大化[交易費](/developers/docs/gas/)。 挖礦節點接著: + 1. 驗證每個交易請求的有效性(即,沒人試圖從還沒有為其產生簽名的帳戶轉出以太幣,請求沒有格式錯誤,等等),然後執行請求程式碼,更改其本機以太坊虛擬機副本的狀態。 對於每個傳送到其帳戶的此類交易請求,礦工將取得交易費作為獎勵。 + 2. 一旦區塊中的所有交易請求都已在本機以太坊虛擬機副本上驗證並執行,為潛在區塊產生工作量證明「合法性證書」的過程便會開始。 +5. 最終,礦工將完成區塊證書的產生,該區塊中包括我們的特定交易請求。 接著礦工廣播此完成的區塊,其中包括上述證書和宣稱的新以太坊虛擬機狀態的校驗和。 +6. 其他節點接收到此新區塊。 它們會驗證證書,自行執行區塊中的所有交易(包括最初由你的使用者廣播的交易),並驗證在執行所有交易後,其新的以太坊虛擬機狀態之校驗和是否與曠工區塊所宣稱的狀態之校驗和相符。 僅當此時,這些節點才會附加此區塊於其區塊鏈的尾部,並接受新的以太坊虛擬機狀態作為規範化狀態。 +7. 各節點從其本機未履行之交易請求記憶體池中移除新區塊中的所有交易。 +8. 加入網路的新節點依序下載所有區塊,包括包含我們感興趣的交易的區塊。 他們會初始化一個本機以太坊虛擬機副本(始於空白狀態的以太坊虛擬機),接著開始執行其本機以太坊虛擬機副本之上每個區塊中的每筆交易,驗證期間每個區塊的狀態校驗和。 + +每筆交易只被挖掘一次(包含在新區塊中並首次傳播),但在推進規範化以太坊虛擬機狀態的過程中會被每個參與者執行並驗證。 這強調了區塊鏈的中心信念之一:**不信任,而是驗證**。 + +## Ommer(叔)區塊 {#ommer-blocks} + +基於工作量證明的區塊挖掘具有概率性,這意味著有時由於網路延遲,會同時發布兩個有效區塊。 在這種情況下,協定必須確定最長(因此也是最「有效」)的鏈,同時透過針對已提交但未被包含的有效區塊給予部分獎勵,來確保對曠工的公平性。 這促使網路進一步去中心化,因為小規模礦工可能面臨更大的延遲,但仍然可以透過 [Ommer](/glossary/#ommer) 區塊獎勵獲得回報。 + +對於父區塊的兄弟姐妹區塊來說,「ommer/兄弟姐妹」一詞是首選的不分性別的詞,但有時也被稱為「uncle/叔」塊。 **自以太坊過渡至權益證明以來,就沒有繼續挖掘 Ommer 區塊了**,因為現在每個時隙只會選出一名提交者。 你能透過查看已挖掘 Ommer 區塊的[歷史圖表](https://ycharts.com/indicators/ethereum_uncle_rate)來了解這項變更。 + +## 視覺範例 {#a-visual-demo} + +觀看影片,Austin 會帶你了解挖礦與工作量證明區塊鏈。 + + + +## 挖礦演算法 {#mining-algorithm} + +以太坊主網只使用過一種挖礦演算法 -[「Ethash」](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/)。 Ethash 是原始研發演算法(稱為[「Dagger-Hashimoto」](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/))的後繼者。 + +[更多關於挖礦演算法的資訊](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/)。 + +## 相關主題 {#related-topics} + +- [燃料](/developers/docs/gas/) +- [以太坊虛擬機器 (EVM)](/developers/docs/evm/) +- [工作量證明](/developers/docs/consensus-mechanisms/pow/) diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md" new file mode 100644 index 00000000000..44aa64f7ad6 --- /dev/null +++ "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md" @@ -0,0 +1,334 @@ +--- +title: Dagger-Hashimoto +description: Dagger-Hashimoto 演算法詳細介紹。 +lang: zh-tw +--- + +Dagger-Hashimoto 是以太坊挖礦演算法的原始研究實作和規範。 Dagger-Hashimoto 已被 [Ethash](#ethash) 取代。 在 2022 年 9 月 15 日部署的[合併](/roadmap/merge/)後,挖礦已徹底關閉。 此後,以太坊改用[權益證明](/developers/docs/consensus-mechanisms/pos)機制來保障安全。 本頁面展示歷史相關內容,其中的資訊與合併後的以太坊不再相關。 + +## 前置要求 {#prerequisites} + +為了更好地理解本頁面內容,建議提前閱讀[工作量證明共識](/developers/docs/consensus-mechanisms/pow)、[挖礦](/developers/docs/consensus-mechanisms/pow/mining)和[挖礦演算法](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms)。 + +## Dagger-Hashimoto {#dagger-hashimoto} + +Dagger-Hashimoto 旨在實現兩個目標: + +1. **專用積體電路抗性 **:為演算法打造專用硬體的益處應盡可能地小 +2. **輕量用戶端可驗證性**:區塊應能被輕量用戶端高效驗證。 + +在進一步修改後,我們還要具體說明如何在必要時實現第三個目標,但要以增加複雜性為代價: + +**完整鏈儲存**:挖礦需要儲存完整的區塊鏈狀態(由於以太坊狀態樹的結構不規則,我們預計將有可能進行一些修剪,特別是一些經常用到的合約,但我們希望盡量減少這種情況)。 + +## 有向無環圖的產生 {#dag-generation} + +以下演算法程式碼將以 Python 定義。 首先,我們定義了 `encode_int`,用於將指定精確度的無符號整數封送為字串。 同時也定義了它的逆函式: + +```python +NUM_BITS = 512 + +def encode_int(x): + "Encode an integer x as a string of 64 characters using a big-endian scheme" + o = '' + for _ in range(NUM_BITS / 8): + o = chr(x % 256) + o + x //= 256 + return o + +def decode_int(s): + "Unencode an integer x from a string using a big-endian scheme" + x = 0 + for c in s: + x *= 256 + x += ord(c) + return x +``` + +接下來,我們假設 `sha3` 是一個需要輸入整數,然後輸出整數的函式,而 `dbl_sha3` 是一個 double-sha3 函式;如果將此引用程式碼轉換為實作,使用以下程式碼: + +```python +from pyethereum import utils +def sha3(x): + if isinstance(x, (int, long)): + x = encode_int(x) + return decode_int(utils.sha3(x)) + +def dbl_sha3(x): + if isinstance(x, (int, long)): + x = encode_int(x) + return decode_int(utils.sha3(utils.sha3(x))) +``` + +### 參數 {#parameters} + +演算法使用的參數如下: + +```python +SAFE_PRIME_512 = 2**512 - 38117 # Largest Safe Prime less than 2**512 + +params = { + "n": 4000055296 * 8 // NUM_BITS, # Size of the dataset (4 Gigabytes); MUST BE MULTIPLE OF 65536 + "n_inc": 65536, # Increment in value of n per period; MUST BE MULTIPLE OF 65536 + # with epochtime=20000 gives 882 MB growth per year + "cache_size": 2500, # Size of the light client's cache (can be chosen by light + # client; not part of the algo spec) + "diff": 2**14, # Difficulty (adjusted during block evaluation) + "epochtime": 100000, # Length of an epoch in blocks (how often the dataset is updated) + "k": 1, # Number of parents of a node + "w": w, # Used for modular exponentiation hashing + "accesses": 200, # Number of dataset accesses during hashimoto + "P": SAFE_PRIME_512 # Safe Prime for hashing and random number generation +} +``` + +`P` 在這種情況下為選定的素數,使得 `log₂(P)` 僅略小於 512,對應於我們用來表示數字的 512 位元。 請注意,實際上只需要儲存有向無環圖的後半部分,因此,實際隨機存取記憶體需求最初為 1 GB,且每年增長 441 MB。 + +### Dagger 建圖 {#dagger-graph-building} + +Dagger 建圖基礎單元的定義如下: + +```python +def produce_dag(params, seed, length): + P = params["P"] + picker = init = pow(sha3(seed), params["w"], P) + o = [init] + for i in range(1, length): + x = picker = (picker * init) % P + for _ in range(params["k"]): + x ^= o[x % i] + o.append(pow(x, params["w"], P)) + return o +``` + +基本上,建圖從單一節點 `sha3(seed)` 開始,然後根據隨機的先前節點按順序添加到其他節點上。 建立一個新節點後,計算種子的模幂,以隨機選擇一些小於 `i` 的索引(使用上述 `x % i`),並使用這些索引上的節點值進行計算,以產生新的 `x` 值,隨後該值被提供給一個較小的工作量證明函式(基於 XOR),最終產生索引 `i` 上的圖形值。 這種特殊設計背後的基本原理是,強制依序存取有向無環圖;如果目前值未知,則無法確定要存取的下一個有向無環圖的值。 最後,模冪運算會進一步對結果進行雜湊。 + +這種演算法依賴於數字理論的若干結果。 討論情況見下文附錄。 + +## 輕量用戶端評估 {#light-client-evaluation} + +上述構圖旨在實現只計算少量節點的子樹,並且僅需少量的輔助記憶體,便完成圖中每個節點的重構。 請注意,當 k=1 時,子樹只是一個上升到有向無環圖第一個元素的值鏈。 + +輕量用戶端中,有向無環圖的計算函式如下: + +```python +def quick_calc(params, seed, p): + w, P = params["w"], params["P"] + cache = {} + + def quick_calc_cached(p): + if p in cache: + pass + elif p == 0: + cache[p] = pow(sha3(seed), w, P) + else: + x = pow(sha3(seed), (p + 1) * w, P) + for _ in range(params["k"]): + x ^= quick_calc_cached(x % p) + cache[p] = pow(x, w, P) + return cache[p] + + return quick_calc_cached(p) +``` + +本質上,它只是對上述演算法的重寫,刪除了計算整個有向無環圖值的循環,並用遞歸呼叫或快取查找取代了早期的節點查找。 請注意,對於 `k=1` 的情況,快取是不必要的,但進一步的最佳化實際上預先計算了有向無環圖的前幾千個值,並將其作為靜態快取進行計算;有關程式碼實作,請參閱附錄。 + +## 有向無環圖的雙倍緩衝 {#double-buffer} + +在全用戶端中,使用了上述公式產生的 2 個有向無環圖的[_雙倍緩衝_](https://wikipedia.org/wiki/Multiple_buffering)。 具體概念是,根據上述參數,每 `epochtime` 個區塊產生一個有向無環圖。 但用戶端使用的並非是最新產生的有向無環圖,而是前一個。 這樣做的好處是,有向無環圖可以隨著時間的推移而被替換掉,無需包含一個步驟,讓礦工必須突然重新計算所有資料。 否則,定期的鏈處理可能會突然暫時放緩,並大幅提高中心化程度。 因此,在重新計算所有資料之前的幾分鐘時間內,存在 51% 攻擊風險。 + +要產生用於計算區塊工作的有向無環圖集,演算法如下: + +```python +def get_prevhash(n): + from pyethereum.blocks import GENESIS_PREVHASH + from pyethereum import chain_manager + if n <= 0: + return hash_to_int(GENESIS_PREVHASH) + else: + prevhash = chain_manager.index.get_block_by_number(n - 1) + return decode_int(prevhash) + +def get_seedset(params, block): + seedset = {} + seedset["back_number"] = block.number - (block.number % params["epochtime"]) + seedset["back_hash"] = get_prevhash(seedset["back_number"]) + seedset["front_number"] = max(seedset["back_number"] - params["epochtime"], 0) + seedset["front_hash"] = get_prevhash(seedset["front_number"]) + return seedset + +def get_dagsize(params, block): + return params["n"] + (block.number // params["epochtime"]) * params["n_inc"] + +def get_daggerset(params, block): + dagsz = get_dagsize(params, block) + seedset = get_seedset(params, block) + if seedset["front_hash"] <= 0: + # No back buffer is possible, just make front buffer + return {"front": {"dag": produce_dag(params, seedset["front_hash"], dagsz), + "block_number": 0}} + else: + return {"front": {"dag": produce_dag(params, seedset["front_hash"], dagsz), + "block_number": seedset["front_number"]}, + "back": {"dag": produce_dag(params, seedset["back_hash"], dagsz), + "block_number": seedset["back_number"]}} +``` + +## Hashimoto {#hashimoto} + +初始 Hashimoto 旨在將區塊鏈用作資料集,執行從區塊鏈中選擇 N 個索引的計算,收集這些索引處的交易,對這些資料執行 XOR,並傳回結果雜湊值。 Thaddeus Dryja 的初始演算法(為了保持一致性,已轉換成 Python)具體如下: + +```python +def orig_hashimoto(prev_hash, merkle_root, list_of_transactions, nonce): + hash_output_A = sha256(prev_hash + merkle_root + nonce) + txid_mix = 0 + for i in range(64): + shifted_A = hash_output_A >> i + transaction = shifted_A % len(list_of_transactions) + txid_mix ^= list_of_transactions[transaction] << i + return txid_mix ^ (nonce << 192) +``` + +遺憾的是,雖然 Hashimoto 被視為隨機存取記憶體密集型演算法,但它依靠的是 256 位元運算,計算開銷非常之大。 不過,Dagger-Hashimoto 在索引其資料集時,僅使用最低有效 64 位元來解決此問題。 + +```python +def hashimoto(dag, dagsize, params, header, nonce): + m = dagsize / 2 + mix = sha3(encode_int(nonce) + header) + for _ in range(params["accesses"]): + mix ^= dag[m + (mix % 2**64) % m] + return dbl_sha3(mix) +``` + +使用雙重 SHA3 可以實現零資料、近乎即時的預驗證,僅驗證是否提供了正確的中間值。 此工作量證明的外層對專用積體電路高度友善且相當薄弱,但它的存在使分散式阻斷服務變得更加困難,因為必須完成少量工作才能產生不會立即被拒絕的區塊。 以下為輕量用戶端版本: + +```python +def quick_hashimoto(seed, dagsize, params, header, nonce): + m = dagsize // 2 + mix = sha3(nonce + header) + for _ in range(params["accesses"]): + mix ^= quick_calc(params, seed, m + (mix % 2**64) % m) + return dbl_sha3(mix) +``` + +## 挖礦與驗證 {#mining-and-verifying} + +現在,將它們全部整合到挖礦演算法中: + +```python +def mine(daggerset, params, block): + from random import randint + nonce = randint(0, 2**64) + while 1: + result = hashimoto(daggerset, get_dagsize(params, block), + params, decode_int(block.prevhash), nonce) + if result * params["diff"] < 2**256: + break + nonce += 1 + if nonce >= 2**64: + nonce = 0 + return nonce +``` + +以下為驗證演算法: + +```python +def verify(daggerset, params, block, nonce): + result = hashimoto(daggerset, get_dagsize(params, block), + params, decode_int(block.prevhash), nonce) + return result * params["diff"] < 2**256 +``` + +輕量用戶端的友善驗證: + +```python +def light_verify(params, header, nonce): + seedset = get_seedset(params, block) + result = quick_hashimoto(seedset["front_hash"], get_dagsize(params, block), + params, decode_int(block.prevhash), nonce) + return result * params["diff"] < 2**256 +``` + +另外,請注意 Dagger-Hashimoto 對區塊頭有額外的要求: + +- 為了使雙層驗證起效,區塊頭必須同時具有隨機數和中間值 Pre-sha3 +- 區塊頭必須在某處儲存目前種子集的 sha3 + +## 衍生閱讀 {#further-reading} + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ + +## 附錄 {#appendix} + +如前所述,用於產生有向無環圖的隨機數產生依賴於數論的一些結果。 Lehmer 隨機數產生程式是 `picker` 變數的基礎,因此我們首先確保它具有很寬的週期。 其次,只要一開始 `x ∈ [2,P-2]`,我們就能證明 `pow(x,3,P)` 不會將 `x` 對應到 `1` 或 `P-1`。 最後,我們證明 `pow(x,3,P)` 在被視為雜湊函式時具有較低的衝突率。 + +### Lehmer 隨機數產生程式 {#lehmer-random-number} + +雖然 `produce_dag` 函式不需要產生無偏隨機數,但潛在的威脅是 `seed**i % P` 只取少數幾個值。 這可以為礦工識別模式提供優勢。 + +為了避免這種情況,可採用數論結果。 [_安全素數_](https://en.wikipedia.org/wiki/Safe_prime)定義為素數 `P`,使得 `(P-1)/2` 也是素數。 成員 `x` 的_階次_([倍乘群](https://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n)的 `ℤ/nℤ`)定義為最小 `m`,使得
xᵐ mod P ≡ 1
+根據這些定義,我們得出: + +> 觀察 1. 令 `x` 成為倍乘群 `ℤ/Pℤ` 的成員,以獲得安全素數 `P`。 如果 `x mod P ≠ 1 mod P` 且 `x mod P ≠ P-1 mod P`,那麼 `x` 的階次為 ` P-1` 或 `(P-1)/2`。 + +_ 證明 _. 由於 `P` 是安全素數,那麼根據 \[拉格朗日定理\]\[lagrange\],我們得到 `x` 的階次為 `1`、`2`、`(P-1)/2` 或 `P-1`。 + +`x` 的階次不能是 `1`,因為根據費馬小定理,我們得到: + +
xP-1 mod P ≡ 1
+ +因此,`x` 必須是 `ℤ/nℤ` 的唯一乘法單位。 由於我們假設 `x ≠ 1`,所以這是不可能的。 + +除非 `x = P-1`,否則 `x` 的階次不能是 `2`,因為這將違反 `P` 是素數的事實。 + +從上述命題中,我們可以知道,迭代 `(picker * init) % P` 的循環長度至少為 `(P-1)/2`。 這是因為我們選擇了 `P` 為約等於 2 的更高次冪的安全素數,且 `init` 處於 `[2,2**256+1]` 區間內。 考慮到 `P` 的大小,我們不應該期望模冪運算會出現循環。 + +在分配有向無環圖中的第一個單元時(變數標籤為 `init`),我們會計算 `pow(sha3(seed) + 2, 3, P)`。 初看起來,這並不能保證結果既不是 `1` 也不是 `P-1`。 然而,既然 `P-1` 是一個安全素數,我們也提供以下額外保證,這是觀察 1 的必然結果: + +> 觀察 2. 令 `x` 成為乘法組 `ℤ/Pℤ` 的一員,以獲得安全素數 `P`,並令 `w` 成為自然數。 如果 `x mod P ≠ 1 mod P`、`x mod P ≠ P-1 mod P`,且 `w mod P ≠ P-1 mod P`、`w mod P ≠ 0 mod P`,則 `xʷ mod P ≠ 1 mod P` 且 `xʷ mod P ≠ P-1 mod P` + +### 模冪運算用作雜湊函式 {#modular-exponentiation} + +對於特定的 `P` 值和 `w` 值,函式 `pow (x, w, P)` 可能存在許多衝突。 例如,`pow (x,9,19)` 的值只能接受 `{1,18}`。 + +鑑於 `P` 為素數,可以使用以下結果,選擇一個用於模冪運算雜湊函式的適當 `w` 值: + +> 觀察 3. 令 `P` 為素數;當且僅當 `ℤ/Pℤ` 中的所有 `a` 和 `b` 都滿足以下條件時,`w` 和 `P-1` 才能為互素。 +> +>
+> 當且僅當 `a mod P ≡ b mod P` 時,`aʷ mod P ≡ bʷ mod P` +>
+ +因此,鑑於 `P` 為素數,且 `w` 與 `P-1` 互素,我們得到 `|{pow (x, w, P) : x ∈ ℤ}| = P`,表示雜湊函式具有盡可能小的衝突率。 + +在特殊情況下,`P` 是我們選擇的安全素數,那麼 `P-1` 僅有係數 1、2、`(P-1)/2` 和 `P-1`。 由於 `P` > 7,我們知道 3 與 `P-1` 互素,因此 `w=3` 滿足上述命題。 + +## 更有效的快取評估演算法 {#cache-based-evaluation} + +```python +def quick_calc(params, seed, p): + cache = produce_dag(params, seed, params["cache_size"]) + return quick_calc_cached(cache, params, p) + +def quick_calc_cached(cache, params, p): + P = params["P"] + if p < len(cache): + return cache[p] + else: + x = pow(cache[0], p + 1, P) + for _ in range(params["k"]): + x ^= quick_calc_cached(cache, params, x % p) + return pow(x, params["w"], P) + +def quick_hashimoto(seed, dagsize, params, header, nonce): + cache = produce_dag(params, seed, params["cache_size"]) + return quick_hashimoto_cached(cache, dagsize, params, header, nonce) + +def quick_hashimoto_cached(cache, dagsize, params, header, nonce): + m = dagsize // 2 + mask = 2**64 - 1 + mix = sha3(encode_int(nonce) + header) + for _ in range(params["accesses"]): + mix ^= quick_calc_cached(cache, params, m + (mix & mask) % m) + return dbl_sha3(mix) +``` diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md" new file mode 100644 index 00000000000..c9f90a011ff --- /dev/null +++ "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md" @@ -0,0 +1,1014 @@ +--- +title: Ethash +description: Ethash 演算法詳細介紹。 +lang: zh-tw +--- + + + Ethash 是以太坊的工作量證明挖礦演算法。 工作量證明現在已經被**完全關閉**,取而代之的是,以太坊現在使用權益證明來確保安全。 閱讀更多關於合併 權益證明質押的資訊。 此頁面僅為滿足對歷史的興趣! + + +[Ethash](https://github.com/ethereum/wiki/wiki/Ethash) 是 [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) 演算法的修改版。 Ethash 工作量證明是[記憶體密集型](https://wikipedia.org/wiki/Memory-hard_function)演算法,這被認為使演算法具有專用積體電路抗性。 Ethash 專用積體電路最終被開發出來,但圖形處理單元挖礦仍然是一個可行的選擇,直至工作量證明被關閉。 Ethash 仍在其他非以太坊工作量證明網路上用於挖掘其他代幣。 + +## Ethash 是如何運作的? {#how-does-ethash-work} + +記憶體密集性是透過工作量證明演算法實現的,需要根據隨機數和區塊頭選擇固定資源子集。 此資源(大小為數 GB)稱為有向無環圖。 有向無環圖每 30000 個區塊更改一次(大約 125 小時的窗口,稱為一個時期(約 5.2 天)),並需要一段時間才能產生。 由於有向無環圖僅依賴區塊高度,因此可以預先生成,但如果沒有,則用戶端需要等到此過程結束後才能生成區塊。 如果用戶端沒有提前預先產生和快取有向無環圖,網路可能會在每個時期過渡時遭遇嚴重的區塊延遲。 請注意,不用產生有向無環圖即可驗證工作量證明,这在本質上允許使用低階中央處理器和小記憶體進行驗證。 + +此演算法所採取的一般路線如下: + +1. 存在一個**種子**,可以透過掃描區塊頭直到該點來為每個區塊計算種子。 +2. 從種子可以計算出 **16 MB 的偽隨機快取**。 由輕量用户端儲存該快取。 +3. 我們可以從快取中產生一個 **1 GB 資料集 **,資料集中每個項目僅依賴快取中的一小部分項目。 由全用户端和礦工儲存該資料集。 該资料集隨著時間的流逝而呈線性增長。 +4. 挖礦需要取得該資料集的隨機片段並將它們雜湊在一起。 可以透過使用快取來重新產生你所需要的資料集中的特定片段,以較少的記憶體進行驗證,這樣你就只需要儲存快取。 + +每隔 30,000 個區塊更新一次大資料集,因此,礦工的絕大部分工作都是讀取資料集,而不是對其進行修改。 + +## 定義 {#definitions} + +我們採用以下定義: + +``` +WORD_BYTES = 4 # bytes in word +DATASET_BYTES_INIT = 2**30 # bytes in dataset at genesis +DATASET_BYTES_GROWTH = 2**23 # dataset growth per epoch +CACHE_BYTES_INIT = 2**24 # bytes in cache at genesis +CACHE_BYTES_GROWTH = 2**17 # cache growth per epoch +CACHE_MULTIPLIER=1024 # Size of the DAG relative to the cache +EPOCH_LENGTH = 30000 # blocks per epoch +MIX_BYTES = 128 # width of mix +HASH_BYTES = 64 # hash length in bytes +DATASET_PARENTS = 256 # number of parents of each dataset element +CACHE_ROUNDS = 3 # number of rounds in cache production +ACCESSES = 64 # number of accesses in hashimoto loop +``` + +### 使用「SHA3」 {#sha3} + +以太坊的開發恰逢 SHA3 標準的製定,標準流程對最終確定的雜湊值演算法的填充做了後期改動,使得以太坊的「sha3_256」和「sha3_512」雜湊值不是標準的 sha3 雜湊值,而是在其他情況下常被稱為「Keccak-256」和「Keccak-512」的變體。 討論請見[此處](https://eips.ethereum.org/EIPS/eip-1803)、[此處](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use),或[此處](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057)。 + +請記住這一點,因為下面的演算法描述中提到了「sha3」雜湊值。 + +## 參數 {#parameters} + +Ethash 快取和資料集的參數取決於區塊號。 快取大小和資料集大小都呈線性增長;然而,我們總是取低於線性增長閾值的最大素數,以降低意外的規律導致循環行為的風險。 + +```python +def get_cache_size(block_number): + sz = CACHE_BYTES_INIT + CACHE_BYTES_GROWTH * (block_number // EPOCH_LENGTH) + sz -= HASH_BYTES + while not isprime(sz / HASH_BYTES): + sz -= 2 * HASH_BYTES + return sz + +def get_full_size(block_number): + sz = DATASET_BYTES_INIT + DATASET_BYTES_GROWTH * (block_number // EPOCH_LENGTH) + sz -= MIX_BYTES + while not isprime(sz / MIX_BYTES): + sz -= 2 * MIX_BYTES + return sz +``` + +附錄中提供了資料集和快取大小值表。 + +## 快取產生 {#cache-generation} + +現在,我們來指定產生快取的函式: + +```python +def mkcache(cache_size, seed): + n = cache_size // HASH_BYTES + + # Sequentially produce the initial dataset + o = [sha3_512(seed)] + for i in range(1, n): + o.append(sha3_512(o[-1])) + + # Use a low-round version of randmemohash + for _ in range(CACHE_ROUNDS): + for i in range(n): + v = o[i][0] % n + o[i] = sha3_512(map(xor, o[(i-1+n) % n], o[v])) + + return o +``` + +在快取生成過程中,先依序填入32 MB 存儲體,然後從[_嚴格存儲體密集型雜湊函式_ (2014)](http://www.hashcash.org/papers/memohash.pdf) 執行兩次 Sergio Demian Lerner 的 _RandMemoHash_ 演算法。 輸出一組 524288 個 64 字節位元組值。 + +## 資料匯總函式 {#date-aggregation-function} + +我們所用演算法的靈感來自 [FNV 雜湊](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function),在部分情況下,這種演算法可用作邏輯 XOR 的非相干替代。 請注意,我們使用全 32 位元輸入乘以素數,與之相對地,FNV-1 規範以單字節位元組(8 位元組)依序乘以素數。 + +```python +FNV_PRIME = 0x01000193 + +def fnv(v1, v2): + return ((v1 * FNV_PRIME) ^ v2) % 2**32 +``` + +請注意,即使黃皮書指出 fnv 為 v1\*(FNV_PRIME ^ v2),所有目前實作始終採用上述定義。 + +## 完整資料集計算 {#full-dataset-calculation} + +整個 1 GB 資料集中的每個 64 字節位元組項目的計算方法如下: + +```python +def calc_dataset_item(cache, i): + n = len(cache) + r = HASH_BYTES // WORD_BYTES + # initialize the mix + mix = copy.copy(cache[i % n]) + mix[0] ^= i + mix = sha3_512(mix) + # fnv it with a lot of random cache nodes based on i + for j in range(DATASET_PARENTS): + cache_index = fnv(i ^ j, mix[j % r]) + mix = map(fnv, mix, cache[cache_index % n]) + return sha3_512(mix) +``` + +基本上,我們會將 256 個偽隨機選取的快取節點的資料合併起來求雜湊值,以計算資料集節點。 然後產生整個資料集: + +```python +def calc_dataset(full_size, cache): + return [calc_dataset_item(cache, i) for i in range(full_size // HASH_BYTES)] +``` + +## 主循環 {#main-loop} + +現在,我們指定了類似「hashimoto」的主要循環。在此循環中,我們匯總了整個資料集的資料,以產生特定區塊頭和隨機數的最終值。 在下面的程式碼中,`header` 代表一個_被截斷_區塊頭的遞歸長度前綴表示的 SHA3-256 _雜湊值_。被截斷是指區塊頭排除了 **mixHash** 和 **nonce** 欄位。 `nonce` 是八字節位元組的 64 位元無符號整數,採用高位元組在前順序。 因此,`nonce [::-1]` 是上述值的八位元組高位元組在前順序表示: + +```python +def hashimoto(header, nonce, full_size, dataset_lookup): + n = full_size / HASH_BYTES + w = MIX_BYTES // WORD_BYTES + mixhashes = MIX_BYTES / HASH_BYTES + # combine header+nonce into a 64 byte seed + s = sha3_512(header + nonce[::-1]) + # start the mix with replicated s + mix = [] + for _ in range(MIX_BYTES / HASH_BYTES): + mix.extend(s) + # mix in random dataset nodes + for i in range(ACCESSES): + p = fnv(i ^ s[0], mix[i % w]) % (n // mixhashes) * mixhashes + newdata = [] + for j in range(MIX_BYTES / HASH_BYTES): + newdata.extend(dataset_lookup(p + j)) + mix = map(fnv, mix, newdata) + # compress mix + cmix = [] + for i in range(0, len(mix), 4): + cmix.append(fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3])) + return { + "mix digest": serialize_hash(cmix), + "result": serialize_hash(sha3_256(s+cmix)) + } + +def hashimoto_light(full_size, cache, header, nonce): + return hashimoto(header, nonce, full_size, lambda x: calc_dataset_item(cache, x)) + +def hashimoto_full(full_size, dataset, header, nonce): + return hashimoto(header, nonce, full_size, lambda x: dataset[x]) +``` + +基本上,我們保持著一個寬 128 字節位元組的「mix」,多次按順序從整個資料集重複取得 128 字節位元組,並使用 `fnv` 函式將其與 mix 合併。 使用 128 字節位元組的順序存取,以便每輪演算法總是能從隨機存取記憶體獲取完整的頁面,從而盡量減少轉譯後備緩衝區的失誤,而專用積體電路在理論上能夠避免這些失誤。 + +如果此演算法的輸出低於所需目標,即證明隨機數是有效的。 請注意,在最後額外套用 `sha3_256` 將確保中間隨機數的存在,提供此證據可以證明至少做了少量工作;而且此快速外部工作量證明驗證可以用於反分散式阻斷服務。 它還能提供統計保證,確保結果是一個無偏的 256 位元數。 + +## 挖礦 {#mining} + +挖礦演算法定義如下: + +```python +def mine(full_size, dataset, header, difficulty): + # zero-pad target to compare with hash on the same digit + target = zpad(encode_int(2**256 // difficulty), 64)[::-1] + from random import randint + nonce = randint(0, 2**64) + while hashimoto_full(full_size, dataset, header, nonce) > target: + nonce = (nonce + 1) % 2**64 + return nonce +``` + +## 定義種子雜湊值 {#seed-hash} + +為了計算用於在給定區塊上挖礦的種子雜湊值,我們使用以下演算法: + +```python + def get_seedhash(block): + s = '\x00' * 32 + for i in range(block.number // EPOCH_LENGTH): + s = serialize_hash(sha3_256(s)) + return s +``` + +請注意,為了順利挖礦和驗證,我們建議在單獨執行緒中預先計算未來的種子雜湊值和資料集。 + +## 衍生閱讀 {#further-reading} + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ + +## 附錄 {#appendix} + +如果你有興趣將上述 python 規範作為程式碼運行,應在前面添加以下程式碼。 + +```python +import sha3, copy + +# Assumes little endian bit ordering (same as Intel architectures) +def decode_int(s): + return int(s[::-1].encode('hex'), 16) if s else 0 + +def encode_int(s): + a = "%x" % s + return '' if s == 0 else ('0' * (len(a) % 2) + a).decode('hex')[::-1] + +def zpad(s, length): + return s + '\x00' * max(0, length - len(s)) + +def serialize_hash(h): + return ''.join([zpad(encode_int(x), 4) for x in h]) + +def deserialize_hash(h): + return [decode_int(h[i:i+WORD_BYTES]) for i in range(0, len(h), WORD_BYTES)] + +def hash_words(h, sz, x): + if isinstance(x, list): + x = serialize_hash(x) + y = h(x) + return deserialize_hash(y) + +def serialize_cache(ds): + return ''.join([serialize_hash(h) for h in ds]) + +serialize_dataset = serialize_cache + +# sha3 hash function, outputs 64 bytes +def sha3_512(x): + return hash_words(lambda v: sha3.sha3_512(v).digest(), 64, x) + +def sha3_256(x): + return hash_words(lambda v: sha3.sha3_256(v).digest(), 32, x) + +def xor(a, b): + return a ^ b + +def isprime(x): + for i in range(2, int(x**0.5)): + if x % i == 0: + return False + return True +``` + +### 資料大小 {#data-sizes} + +以下查找表提供了約 2048 個製錶格式的資料大小和快取大小時期。 + +```python +def get_datasize(block_number): + return data_sizes[block_number // EPOCH_LENGTH] + +def get_cachesize(block_number): + return cache_sizes[block_number // EPOCH_LENGTH] + +data_sizes = [ +1073739904, 1082130304, 1090514816, 1098906752, 1107293056, +1115684224, 1124070016, 1132461952, 1140849536, 1149232768, +1157627776, 1166013824, 1174404736, 1182786944, 1191180416, +1199568512, 1207958912, 1216345216, 1224732032, 1233124736, +1241513344, 1249902464, 1258290304, 1266673792, 1275067264, +1283453312, 1291844992, 1300234112, 1308619904, 1317010048, +1325397376, 1333787776, 1342176128, 1350561664, 1358954368, +1367339392, 1375731584, 1384118144, 1392507008, 1400897408, +1409284736, 1417673344, 1426062464, 1434451072, 1442839168, +1451229056, 1459615616, 1468006016, 1476394112, 1484782976, +1493171584, 1501559168, 1509948032, 1518337664, 1526726528, +1535114624, 1543503488, 1551892096, 1560278656, 1568669056, +1577056384, 1585446272, 1593831296, 1602219392, 1610610304, +1619000192, 1627386752, 1635773824, 1644164224, 1652555648, +1660943488, 1669332608, 1677721216, 1686109312, 1694497664, +1702886272, 1711274624, 1719661184, 1728047744, 1736434816, +1744829056, 1753218944, 1761606272, 1769995904, 1778382464, +1786772864, 1795157888, 1803550592, 1811937664, 1820327552, +1828711552, 1837102976, 1845488768, 1853879936, 1862269312, +1870656896, 1879048064, 1887431552, 1895825024, 1904212096, +1912601216, 1920988544, 1929379456, 1937765504, 1946156672, +1954543232, 1962932096, 1971321728, 1979707264, 1988093056, +1996487552, 2004874624, 2013262208, 2021653888, 2030039936, +2038430848, 2046819968, 2055208576, 2063596672, 2071981952, +2080373632, 2088762752, 2097149056, 2105539712, 2113928576, +2122315136, 2130700672, 2139092608, 2147483264, 2155872128, +2164257664, 2172642176, 2181035392, 2189426048, 2197814912, +2206203008, 2214587264, 2222979712, 2231367808, 2239758208, +2248145024, 2256527744, 2264922752, 2273312128, 2281701248, +2290086272, 2298476672, 2306867072, 2315251072, 2323639168, +2332032128, 2340420224, 2348808064, 2357196416, 2365580416, +2373966976, 2382363008, 2390748544, 2399139968, 2407530368, +2415918976, 2424307328, 2432695424, 2441084288, 2449472384, +2457861248, 2466247808, 2474637184, 2483026816, 2491414144, +2499803776, 2508191872, 2516582272, 2524970368, 2533359232, +2541743488, 2550134144, 2558525056, 2566913408, 2575301504, +2583686528, 2592073856, 2600467328, 2608856192, 2617240448, +2625631616, 2634022016, 2642407552, 2650796416, 2659188352, +2667574912, 2675965312, 2684352896, 2692738688, 2701130624, +2709518464, 2717907328, 2726293376, 2734685056, 2743073152, +2751462016, 2759851648, 2768232832, 2776625536, 2785017728, +2793401984, 2801794432, 2810182016, 2818571648, 2826959488, +2835349376, 2843734144, 2852121472, 2860514432, 2868900992, +2877286784, 2885676928, 2894069632, 2902451584, 2910843008, +2919234688, 2927622784, 2936011648, 2944400768, 2952789376, +2961177728, 2969565568, 2977951616, 2986338944, 2994731392, +3003120256, 3011508352, 3019895936, 3028287104, 3036675968, +3045063808, 3053452928, 3061837696, 3070228352, 3078615424, +3087003776, 3095394944, 3103782272, 3112173184, 3120562048, +3128944768, 3137339264, 3145725056, 3154109312, 3162505088, +3170893184, 3179280256, 3187669376, 3196056704, 3204445568, +3212836736, 3221224064, 3229612928, 3238002304, 3246391168, +3254778496, 3263165824, 3271556224, 3279944576, 3288332416, +3296719232, 3305110912, 3313500032, 3321887104, 3330273152, +3338658944, 3347053184, 3355440512, 3363827072, 3372220288, +3380608384, 3388997504, 3397384576, 3405774208, 3414163072, +3422551936, 3430937984, 3439328384, 3447714176, 3456104576, +3464493952, 3472883584, 3481268864, 3489655168, 3498048896, +3506434432, 3514826368, 3523213952, 3531603584, 3539987072, +3548380288, 3556763264, 3565157248, 3573545344, 3581934464, +3590324096, 3598712704, 3607098752, 3615488384, 3623877248, +3632265856, 3640646528, 3649043584, 3657430144, 3665821568, +3674207872, 3682597504, 3690984832, 3699367808, 3707764352, +3716152448, 3724541056, 3732925568, 3741318016, 3749706368, +3758091136, 3766481536, 3774872704, 3783260032, 3791650432, +3800036224, 3808427648, 3816815488, 3825204608, 3833592704, +3841981568, 3850370432, 3858755968, 3867147904, 3875536256, +3883920512, 3892313728, 3900702592, 3909087872, 3917478784, +3925868416, 3934256512, 3942645376, 3951032192, 3959422336, +3967809152, 3976200064, 3984588416, 3992974976, 4001363584, +4009751168, 4018141312, 4026530432, 4034911616, 4043308928, +4051695488, 4060084352, 4068472448, 4076862848, 4085249408, +4093640576, 4102028416, 4110413696, 4118805632, 4127194496, +4135583104, 4143971968, 4152360832, 4160746112, 4169135744, +4177525888, 4185912704, 4194303616, 4202691968, 4211076736, +4219463552, 4227855488, 4236246656, 4244633728, 4253022848, +4261412224, 4269799808, 4278184832, 4286578048, 4294962304, +4303349632, 4311743104, 4320130432, 4328521088, 4336909184, +4345295488, 4353687424, 4362073472, 4370458496, 4378852736, +4387238528, 4395630208, 4404019072, 4412407424, 4420790656, +4429182848, 4437571456, 4445962112, 4454344064, 4462738048, +4471119232, 4479516544, 4487904128, 4496289664, 4504682368, +4513068416, 4521459584, 4529846144, 4538232704, 4546619776, +4555010176, 4563402112, 4571790208, 4580174464, 4588567936, +4596957056, 4605344896, 4613734016, 4622119808, 4630511488, +4638898816, 4647287936, 4655675264, 4664065664, 4672451968, +4680842624, 4689231488, 4697620352, 4706007424, 4714397056, +4722786176, 4731173248, 4739562368, 4747951744, 4756340608, +4764727936, 4773114496, 4781504384, 4789894784, 4798283648, +4806667648, 4815059584, 4823449472, 4831835776, 4840226176, +4848612224, 4857003392, 4865391488, 4873780096, 4882169728, +4890557312, 4898946944, 4907333248, 4915722368, 4924110976, +4932499328, 4940889728, 4949276032, 4957666432, 4966054784, +4974438016, 4982831488, 4991221376, 4999607168, 5007998848, +5016386432, 5024763776, 5033164672, 5041544576, 5049941888, +5058329728, 5066717056, 5075107456, 5083494272, 5091883904, +5100273536, 5108662144, 5117048192, 5125436032, 5133827456, +5142215296, 5150605184, 5158993024, 5167382144, 5175769472, +5184157568, 5192543872, 5200936064, 5209324928, 5217711232, +5226102656, 5234490496, 5242877312, 5251263872, 5259654016, +5268040832, 5276434304, 5284819328, 5293209728, 5301598592, +5309986688, 5318374784, 5326764416, 5335151488, 5343542144, +5351929472, 5360319872, 5368706944, 5377096576, 5385484928, +5393871232, 5402263424, 5410650496, 5419040384, 5427426944, +5435816576, 5444205952, 5452594816, 5460981376, 5469367936, +5477760896, 5486148736, 5494536832, 5502925952, 5511315328, +5519703424, 5528089984, 5536481152, 5544869504, 5553256064, +5561645696, 5570032768, 5578423936, 5586811264, 5595193216, +5603585408, 5611972736, 5620366208, 5628750464, 5637143936, +5645528192, 5653921408, 5662310272, 5670694784, 5679082624, +5687474048, 5695864448, 5704251008, 5712641408, 5721030272, +5729416832, 5737806208, 5746194304, 5754583936, 5762969984, +5771358592, 5779748224, 5788137856, 5796527488, 5804911232, +5813300608, 5821692544, 5830082176, 5838468992, 5846855552, +5855247488, 5863636096, 5872024448, 5880411008, 5888799872, +5897186432, 5905576832, 5913966976, 5922352768, 5930744704, +5939132288, 5947522432, 5955911296, 5964299392, 5972688256, +5981074304, 5989465472, 5997851008, 6006241408, 6014627968, +6023015552, 6031408256, 6039796096, 6048185216, 6056574848, +6064963456, 6073351808, 6081736064, 6090128768, 6098517632, +6106906496, 6115289216, 6123680896, 6132070016, 6140459648, +6148849024, 6157237376, 6165624704, 6174009728, 6182403712, +6190792064, 6199176064, 6207569792, 6215952256, 6224345216, +6232732544, 6241124224, 6249510272, 6257899136, 6266287744, +6274676864, 6283065728, 6291454336, 6299843456, 6308232064, +6316620928, 6325006208, 6333395584, 6341784704, 6350174848, +6358562176, 6366951296, 6375337856, 6383729536, 6392119168, +6400504192, 6408895616, 6417283456, 6425673344, 6434059136, +6442444672, 6450837376, 6459223424, 6467613056, 6476004224, +6484393088, 6492781952, 6501170048, 6509555072, 6517947008, +6526336384, 6534725504, 6543112832, 6551500672, 6559888768, +6568278656, 6576662912, 6585055616, 6593443456, 6601834112, +6610219648, 6618610304, 6626999168, 6635385472, 6643777408, +6652164224, 6660552832, 6668941952, 6677330048, 6685719424, +6694107776, 6702493568, 6710882176, 6719274112, 6727662976, +6736052096, 6744437632, 6752825984, 6761213824, 6769604224, +6777993856, 6786383488, 6794770816, 6803158144, 6811549312, +6819937664, 6828326528, 6836706176, 6845101696, 6853491328, +6861880448, 6870269312, 6878655104, 6887046272, 6895433344, +6903822208, 6912212864, 6920596864, 6928988288, 6937377152, +6945764992, 6954149248, 6962544256, 6970928768, 6979317376, +6987709312, 6996093824, 7004487296, 7012875392, 7021258624, +7029652352, 7038038912, 7046427776, 7054818944, 7063207808, +7071595136, 7079980928, 7088372608, 7096759424, 7105149824, +7113536896, 7121928064, 7130315392, 7138699648, 7147092352, +7155479168, 7163865728, 7172249984, 7180648064, 7189036672, +7197424768, 7205810816, 7214196608, 7222589824, 7230975104, +7239367552, 7247755904, 7256145536, 7264533376, 7272921472, +7281308032, 7289694848, 7298088832, 7306471808, 7314864512, +7323253888, 7331643008, 7340029568, 7348419712, 7356808832, +7365196672, 7373585792, 7381973888, 7390362752, 7398750592, +7407138944, 7415528576, 7423915648, 7432302208, 7440690304, +7449080192, 7457472128, 7465860992, 7474249088, 7482635648, +7491023744, 7499412608, 7507803008, 7516192384, 7524579968, +7532967296, 7541358464, 7549745792, 7558134656, 7566524032, +7574912896, 7583300992, 7591690112, 7600075136, 7608466816, +7616854912, 7625244544, 7633629824, 7642020992, 7650410368, +7658794112, 7667187328, 7675574912, 7683961984, 7692349568, +7700739712, 7709130368, 7717519232, 7725905536, 7734295424, +7742683264, 7751069056, 7759457408, 7767849088, 7776238208, +7784626816, 7793014912, 7801405312, 7809792128, 7818179968, +7826571136, 7834957184, 7843347328, 7851732352, 7860124544, +7868512384, 7876902016, 7885287808, 7893679744, 7902067072, +7910455936, 7918844288, 7927230848, 7935622784, 7944009344, +7952400256, 7960786048, 7969176704, 7977565312, 7985953408, +7994339968, 8002730368, 8011119488, 8019508096, 8027896192, +8036285056, 8044674688, 8053062272, 8061448832, 8069838464, +8078227328, 8086616704, 8095006592, 8103393664, 8111783552, +8120171392, 8128560256, 8136949376, 8145336704, 8153726848, +8162114944, 8170503296, 8178891904, 8187280768, 8195669632, +8204058496, 8212444544, 8220834176, 8229222272, 8237612672, +8246000768, 8254389376, 8262775168, 8271167104, 8279553664, +8287944064, 8296333184, 8304715136, 8313108352, 8321497984, +8329885568, 8338274432, 8346663296, 8355052928, 8363441536, +8371828352, 8380217984, 8388606592, 8396996224, 8405384576, +8413772672, 8422161536, 8430549376, 8438939008, 8447326592, +8455715456, 8464104832, 8472492928, 8480882048, 8489270656, +8497659776, 8506045312, 8514434944, 8522823808, 8531208832, +8539602304, 8547990656, 8556378752, 8564768384, 8573154176, +8581542784, 8589933952, 8598322816, 8606705024, 8615099264, +8623487872, 8631876992, 8640264064, 8648653952, 8657040256, +8665430656, 8673820544, 8682209152, 8690592128, 8698977152, +8707374464, 8715763328, 8724151424, 8732540032, 8740928384, +8749315712, 8757704576, 8766089344, 8774480768, 8782871936, +8791260032, 8799645824, 8808034432, 8816426368, 8824812928, +8833199488, 8841591424, 8849976448, 8858366336, 8866757248, +8875147136, 8883532928, 8891923328, 8900306816, 8908700288, +8917088384, 8925478784, 8933867392, 8942250368, 8950644608, +8959032704, 8967420544, 8975809664, 8984197504, 8992584064, +9000976256, 9009362048, 9017752448, 9026141312, 9034530688, +9042917504, 9051307904, 9059694208, 9068084864, 9076471424, +9084861824, 9093250688, 9101638528, 9110027648, 9118416512, +9126803584, 9135188096, 9143581312, 9151969664, 9160356224, +9168747136, 9177134464, 9185525632, 9193910144, 9202302848, +9210690688, 9219079552, 9227465344, 9235854464, 9244244864, +9252633472, 9261021824, 9269411456, 9277799296, 9286188928, +9294574208, 9302965888, 9311351936, 9319740032, 9328131968, +9336516736, 9344907392, 9353296768, 9361685888, 9370074752, +9378463616, 9386849408, 9395239808, 9403629184, 9412016512, +9420405376, 9428795008, 9437181568, 9445570688, 9453960832, +9462346624, 9470738048, 9479121536, 9487515008, 9495903616, +9504289664, 9512678528, 9521067904, 9529456256, 9537843584, +9546233728, 9554621312, 9563011456, 9571398784, 9579788672, +9588178304, 9596567168, 9604954496, 9613343104, 9621732992, +9630121856, 9638508416, 9646898816, 9655283584, 9663675776, +9672061312, 9680449664, 9688840064, 9697230464, 9705617536, +9714003584, 9722393984, 9730772608, 9739172224, 9747561088, +9755945344, 9764338816, 9772726144, 9781116544, 9789503872, +9797892992, 9806282624, 9814670464, 9823056512, 9831439232, +9839833984, 9848224384, 9856613504, 9865000576, 9873391232, +9881772416, 9890162816, 9898556288, 9906940544, 9915333248, +9923721088, 9932108672, 9940496512, 9948888448, 9957276544, +9965666176, 9974048384, 9982441088, 9990830464, 9999219584, +10007602816, 10015996544, 10024385152, 10032774016, 10041163648, +10049548928, 10057940096, 10066329472, 10074717824, 10083105152, +10091495296, 10099878784, 10108272256, 10116660608, 10125049216, +10133437312, 10141825664, 10150213504, 10158601088, 10166991232, +10175378816, 10183766144, 10192157312, 10200545408, 10208935552, +10217322112, 10225712768, 10234099328, 10242489472, 10250876032, +10259264896, 10267656064, 10276042624, 10284429184, 10292820352, +10301209472, 10309598848, 10317987712, 10326375296, 10334763392, +10343153536, 10351541632, 10359930752, 10368318592, 10376707456, +10385096576, 10393484672, 10401867136, 10410262144, 10418647424, +10427039104, 10435425664, 10443810176, 10452203648, 10460589952, +10468982144, 10477369472, 10485759104, 10494147712, 10502533504, +10510923392, 10519313536, 10527702656, 10536091264, 10544478592, +10552867712, 10561255808, 10569642368, 10578032768, 10586423168, +10594805632, 10603200128, 10611588992, 10619976064, 10628361344, +10636754048, 10645143424, 10653531776, 10661920384, 10670307968, +10678696832, 10687086464, 10695475072, 10703863168, 10712246144, +10720639616, 10729026688, 10737414784, 10745806208, 10754190976, +10762581376, 10770971264, 10779356288, 10787747456, 10796135552, +10804525184, 10812915584, 10821301888, 10829692288, 10838078336, +10846469248, 10854858368, 10863247232, 10871631488, 10880023424, +10888412032, 10896799616, 10905188992, 10913574016, 10921964672, +10930352768, 10938742912, 10947132544, 10955518592, 10963909504, +10972298368, 10980687488, 10989074816, 10997462912, 11005851776, +11014241152, 11022627712, 11031017344, 11039403904, 11047793024, +11056184704, 11064570752, 11072960896, 11081343872, 11089737856, +11098128256, 11106514816, 11114904448, 11123293568, 11131680128, +11140065152, 11148458368, 11156845696, 11165236864, 11173624192, +11182013824, 11190402688, 11198790784, 11207179136, 11215568768, +11223957376, 11232345728, 11240734592, 11249122688, 11257511296, +11265899648, 11274285952, 11282675584, 11291065472, 11299452544, +11307842432, 11316231296, 11324616832, 11333009024, 11341395584, +11349782656, 11358172288, 11366560384, 11374950016, 11383339648, +11391721856, 11400117376, 11408504192, 11416893568, 11425283456, +11433671552, 11442061184, 11450444672, 11458837888, 11467226752, +11475611776, 11484003968, 11492392064, 11500780672, 11509169024, +11517550976, 11525944448, 11534335616, 11542724224, 11551111808, +11559500672, 11567890304, 11576277376, 11584667008, 11593056128, +11601443456, 11609830016, 11618221952, 11626607488, 11634995072, +11643387776, 11651775104, 11660161664, 11668552576, 11676940928, +11685330304, 11693718656, 11702106496, 11710496128, 11718882688, +11727273088, 11735660416, 11744050048, 11752437376, 11760824704, +11769216128, 11777604736, 11785991296, 11794381952, 11802770048, +11811157888, 11819548544, 11827932544, 11836324736, 11844713344, +11853100928, 11861486464, 11869879936, 11878268032, 11886656896, +11895044992, 11903433088, 11911822976, 11920210816, 11928600448, +11936987264, 11945375872, 11953761152, 11962151296, 11970543488, +11978928512, 11987320448, 11995708288, 12004095104, 12012486272, +12020875136, 12029255552, 12037652096, 12046039168, 12054429568, +12062813824, 12071206528, 12079594624, 12087983744, 12096371072, +12104759936, 12113147264, 12121534592, 12129924992, 12138314624, +12146703232, 12155091584, 12163481216, 12171864704, 12180255872, +12188643968, 12197034112, 12205424512, 12213811328, 12222199424, +12230590336, 12238977664, 12247365248, 12255755392, 12264143488, +12272531584, 12280920448, 12289309568, 12297694592, 12306086528, +12314475392, 12322865024, 12331253632, 12339640448, 12348029312, +12356418944, 12364805248, 12373196672, 12381580928, 12389969024, +12398357632, 12406750592, 12415138432, 12423527552, 12431916416, +12440304512, 12448692352, 12457081216, 12465467776, 12473859968, +12482245504, 12490636672, 12499025536, 12507411584, 12515801728, +12524190592, 12532577152, 12540966272, 12549354368, 12557743232, +12566129536, 12574523264, 12582911872, 12591299456, 12599688064, +12608074624, 12616463488, 12624845696, 12633239936, 12641631616, +12650019968, 12658407296, 12666795136, 12675183232, 12683574656, +12691960192, 12700350592, 12708740224, 12717128576, 12725515904, +12733906816, 12742295168, 12750680192, 12759071872, 12767460736, +12775848832, 12784236928, 12792626816, 12801014656, 12809404288, +12817789312, 12826181504, 12834568832, 12842954624, 12851345792, +12859732352, 12868122496, 12876512128, 12884901248, 12893289088, +12901672832, 12910067584, 12918455168, 12926842496, 12935232896, +12943620736, 12952009856, 12960396928, 12968786816, 12977176192, +12985563776, 12993951104, 13002341504, 13010730368, 13019115392, +13027506304, 13035895168, 13044272512, 13052673152, 13061062528, +13069446272, 13077838976, 13086227072, 13094613632, 13103000192, +13111393664, 13119782528, 13128157568, 13136559232, 13144945024, +13153329536, 13161724288, 13170111872, 13178502784, 13186884736, +13195279744, 13203667072, 13212057472, 13220445824, 13228832128, +13237221248, 13245610624, 13254000512, 13262388352, 13270777472, +13279166336, 13287553408, 13295943296, 13304331904, 13312719488, +13321108096, 13329494656, 13337885824, 13346274944, 13354663808, +13363051136, 13371439232, 13379825024, 13388210816, 13396605056, +13404995456, 13413380224, 13421771392, 13430159744, 13438546048, +13446937216, 13455326848, 13463708288, 13472103808, 13480492672, +13488875648, 13497269888, 13505657728, 13514045312, 13522435712, +13530824576, 13539210112, 13547599232, 13555989376, 13564379008, +13572766336, 13581154432, 13589544832, 13597932928, 13606320512, +13614710656, 13623097472, 13631477632, 13639874944, 13648264064, +13656652928, 13665041792, 13673430656, 13681818496, 13690207616, +13698595712, 13706982272, 13715373184, 13723762048, 13732150144, +13740536704, 13748926592, 13757316224, 13765700992, 13774090112, +13782477952, 13790869376, 13799259008, 13807647872, 13816036736, +13824425344, 13832814208, 13841202304, 13849591424, 13857978752, +13866368896, 13874754688, 13883145344, 13891533184, 13899919232, +13908311168, 13916692096, 13925085056, 13933473152, 13941866368, +13950253696, 13958643584, 13967032192, 13975417216, 13983807616, +13992197504, 14000582272, 14008973696, 14017363072, 14025752192, +14034137984, 14042528384, 14050918016, 14059301504, 14067691648, +14076083584, 14084470144, 14092852352, 14101249664, 14109635968, +14118024832, 14126407552, 14134804352, 14143188608, 14151577984, +14159968384, 14168357248, 14176741504, 14185127296, 14193521024, +14201911424, 14210301824, 14218685056, 14227067264, 14235467392, +14243855488, 14252243072, 14260630144, 14269021568, 14277409408, +14285799296, 14294187904, 14302571392, 14310961792, 14319353728, +14327738752, 14336130944, 14344518784, 14352906368, 14361296512, +14369685376, 14378071424, 14386462592, 14394848128, 14403230848, +14411627392, 14420013952, 14428402304, 14436793472, 14445181568, +14453569664, 14461959808, 14470347904, 14478737024, 14487122816, +14495511424, 14503901824, 14512291712, 14520677504, 14529064832, +14537456768, 14545845632, 14554234496, 14562618496, 14571011456, +14579398784, 14587789184, 14596172672, 14604564608, 14612953984, +14621341312, 14629724288, 14638120832, 14646503296, 14654897536, +14663284864, 14671675264, 14680061056, 14688447616, 14696835968, +14705228416, 14713616768, 14722003328, 14730392192, 14738784128, +14747172736, 14755561088, 14763947648, 14772336512, 14780725376, +14789110144, 14797499776, 14805892736, 14814276992, 14822670208, +14831056256, 14839444352, 14847836032, 14856222848, 14864612992, +14872997504, 14881388672, 14889775744, 14898165376, 14906553472, +14914944896, 14923329664, 14931721856, 14940109696, 14948497024, +14956887424, 14965276544, 14973663616, 14982053248, 14990439808, +14998830976, 15007216768, 15015605888, 15023995264, 15032385152, +15040768384, 15049154944, 15057549184, 15065939072, 15074328448, +15082715008, 15091104128, 15099493504, 15107879296, 15116269184, +15124659584, 15133042304, 15141431936, 15149824384, 15158214272, +15166602368, 15174991232, 15183378304, 15191760512, 15200154496, +15208542592, 15216931712, 15225323392, 15233708416, 15242098048, +15250489216, 15258875264, 15267265408, 15275654528, 15284043136, +15292431488, 15300819584, 15309208192, 15317596544, 15325986176, +15334374784, 15342763648, 15351151744, 15359540608, 15367929728, +15376318336, 15384706432, 15393092992, 15401481856, 15409869952, +15418258816, 15426649984, 15435037568, 15443425664, 15451815296, +15460203392, 15468589184, 15476979328, 15485369216, 15493755776, +15502146944, 15510534272, 15518924416, 15527311232, 15535699072, +15544089472, 15552478336, 15560866688, 15569254528, 15577642624, +15586031488, 15594419072, 15602809472, 15611199104, 15619586432, +15627975296, 15636364928, 15644753792, 15653141888, 15661529216, +15669918848, 15678305152, 15686696576, 15695083136, 15703474048, +15711861632, 15720251264, 15728636288, 15737027456, 15745417088, +15753804928, 15762194048, 15770582656, 15778971008, 15787358336, +15795747712, 15804132224, 15812523392, 15820909696, 15829300096, +15837691264, 15846071936, 15854466944, 15862855808, 15871244672, +15879634816, 15888020608, 15896409728, 15904799104, 15913185152, +15921577088, 15929966464, 15938354816, 15946743424, 15955129472, +15963519872, 15971907968, 15980296064, 15988684928, 15997073024, +16005460864, 16013851264, 16022241152, 16030629248, 16039012736, +16047406976, 16055794816, 16064181376, 16072571264, 16080957824, +16089346688, 16097737856, 16106125184, 16114514816, 16122904192, +16131292544, 16139678848, 16148066944, 16156453504, 16164839552, +16173236096, 16181623424, 16190012032, 16198401152, 16206790528, +16215177344, 16223567744, 16231956352, 16240344704, 16248731008, +16257117824, 16265504384, 16273898624, 16282281856, 16290668672, +16299064192, 16307449216, 16315842176, 16324230016, 16332613504, +16341006464, 16349394304, 16357783168, 16366172288, 16374561664, +16382951296, 16391337856, 16399726208, 16408116352, 16416505472, +16424892032, 16433282176, 16441668224, 16450058624, 16458448768, +16466836864, 16475224448, 16483613056, 16492001408, 16500391808, +16508779648, 16517166976, 16525555328, 16533944192, 16542330752, +16550719616, 16559110528, 16567497088, 16575888512, 16584274816, +16592665472, 16601051008, 16609442944, 16617832064, 16626218624, +16634607488, 16642996096, 16651385728, 16659773824, 16668163712, +16676552576, 16684938112, 16693328768, 16701718144, 16710095488, +16718492288, 16726883968, 16735272832, 16743661184, 16752049792, +16760436608, 16768827008, 16777214336, 16785599104, 16793992832, +16802381696, 16810768768, 16819151744, 16827542656, 16835934848, +16844323712, 16852711552, 16861101952, 16869489536, 16877876864, +16886265728, 16894653056, 16903044736, 16911431296, 16919821696, +16928207488, 16936592768, 16944987776, 16953375616, 16961763968, +16970152832, 16978540928, 16986929536, 16995319168, 17003704448, +17012096896, 17020481152, 17028870784, 17037262208, 17045649536, +17054039936, 17062426496, 17070814336, 17079205504, 17087592064, +17095978112, 17104369024, 17112759424, 17121147776, 17129536384, +17137926016, 17146314368, 17154700928, 17163089792, 17171480192, +17179864192, 17188256896, 17196644992, 17205033856, 17213423488, +17221811072, 17230198912, 17238588032, 17246976896, 17255360384, +17263754624, 17272143232, 17280530048, 17288918912, 17297309312, +17305696384, 17314085504, 17322475136, 17330863744, 17339252096, +17347640192, 17356026496, 17364413824, 17372796544, 17381190016, +17389583488, 17397972608, 17406360704, 17414748544, 17423135872, +17431527296, 17439915904, 17448303232, 17456691584, 17465081728, +17473468288, 17481857408, 17490247552, 17498635904, 17507022464, +17515409024, 17523801728, 17532189824, 17540577664, 17548966016, +17557353344, 17565741184, 17574131584, 17582519168, 17590907008, +17599296128, 17607687808, 17616076672, 17624455808, 17632852352, +17641238656, 17649630848, 17658018944, 17666403968, 17674794112, +17683178368, 17691573376, 17699962496, 17708350592, 17716739968, +17725126528, 17733517184, 17741898112, 17750293888, 17758673024, +17767070336, 17775458432, 17783848832, 17792236928, 17800625536, +17809012352, 17817402752, 17825785984, 17834178944, 17842563968, +17850955648, 17859344512, 17867732864, 17876119424, 17884511872, +17892900224, 17901287296, 17909677696, 17918058112, 17926451072, +17934843776, 17943230848, 17951609216, 17960008576, 17968397696, +17976784256, 17985175424, 17993564032, 18001952128, 18010339712, +18018728576, 18027116672, 18035503232, 18043894144, 18052283264, +18060672128, 18069056384, 18077449856, 18085837184, 18094225792, +18102613376, 18111004544, 18119388544, 18127781248, 18136170368, +18144558976, 18152947328, 18161336192, 18169724288, 18178108544, +18186498944, 18194886784, 18203275648, 18211666048, 18220048768, +18228444544, 18236833408, 18245220736] + +cache_sizes = [ +16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072, +17693888, 17824192, 17955904, 18087488, 18218176, 18349504, 18481088, +18611392, 18742336, 18874304, 19004224, 19135936, 19267264, 19398208, +19529408, 19660096, 19791424, 19922752, 20053952, 20184896, 20315968, +20446912, 20576576, 20709184, 20840384, 20971072, 21102272, 21233216, +21364544, 21494848, 21626816, 21757376, 21887552, 22019392, 22151104, +22281536, 22412224, 22543936, 22675264, 22806464, 22935872, 23068096, +23198272, 23330752, 23459008, 23592512, 23723968, 23854912, 23986112, +24116672, 24247616, 24378688, 24509504, 24640832, 24772544, 24903488, +25034432, 25165376, 25296704, 25427392, 25558592, 25690048, 25820096, +25951936, 26081728, 26214208, 26345024, 26476096, 26606656, 26737472, +26869184, 26998208, 27131584, 27262528, 27393728, 27523904, 27655744, +27786688, 27917888, 28049344, 28179904, 28311488, 28441792, 28573504, +28700864, 28835648, 28966208, 29096768, 29228608, 29359808, 29490752, +29621824, 29752256, 29882816, 30014912, 30144448, 30273728, 30406976, +30538432, 30670784, 30799936, 30932672, 31063744, 31195072, 31325248, +31456192, 31588288, 31719232, 31850432, 31981504, 32110784, 32243392, +32372672, 32505664, 32636608, 32767808, 32897344, 33029824, 33160768, +33289664, 33423296, 33554368, 33683648, 33816512, 33947456, 34076992, +34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984, +35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976, +36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656, +36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904, +37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672, +38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632, +39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032, +40631744, 40762816, 40894144, 41023552, 41155904, 41286208, 41418304, +41547712, 41680448, 41811904, 41942848, 42073792, 42204992, 42334912, +42467008, 42597824, 42729152, 42860096, 42991552, 43122368, 43253696, +43382848, 43515712, 43646912, 43777088, 43907648, 44039104, 44170432, +44302144, 44433344, 44564288, 44694976, 44825152, 44956864, 45088448, +45219008, 45350464, 45481024, 45612608, 45744064, 45874496, 46006208, +46136768, 46267712, 46399424, 46529344, 46660672, 46791488, 46923328, +47053504, 47185856, 47316928, 47447872, 47579072, 47710144, 47839936, +47971648, 48103232, 48234176, 48365248, 48496192, 48627136, 48757312, +48889664, 49020736, 49149248, 49283008, 49413824, 49545152, 49675712, +49807168, 49938368, 50069056, 50200256, 50331584, 50462656, 50593472, +50724032, 50853952, 50986048, 51117632, 51248576, 51379904, 51510848, +51641792, 51773248, 51903296, 52035136, 52164032, 52297664, 52427968, +52557376, 52690112, 52821952, 52952896, 53081536, 53213504, 53344576, +53475776, 53608384, 53738816, 53870528, 54000832, 54131776, 54263744, +54394688, 54525248, 54655936, 54787904, 54918592, 55049152, 55181248, +55312064, 55442752, 55574336, 55705024, 55836224, 55967168, 56097856, +56228672, 56358592, 56490176, 56621888, 56753728, 56884928, 57015488, +57146816, 57278272, 57409216, 57540416, 57671104, 57802432, 57933632, +58064576, 58195264, 58326976, 58457408, 58588864, 58720192, 58849984, +58981696, 59113024, 59243456, 59375552, 59506624, 59637568, 59768512, +59897792, 60030016, 60161984, 60293056, 60423872, 60554432, 60683968, +60817216, 60948032, 61079488, 61209664, 61341376, 61471936, 61602752, +61733696, 61865792, 61996736, 62127808, 62259136, 62389568, 62520512, +62651584, 62781632, 62910784, 63045056, 63176128, 63307072, 63438656, +63569216, 63700928, 63831616, 63960896, 64093888, 64225088, 64355392, +64486976, 64617664, 64748608, 64879424, 65009216, 65142464, 65273792, +65402816, 65535424, 65666752, 65797696, 65927744, 66060224, 66191296, +66321344, 66453056, 66584384, 66715328, 66846656, 66977728, 67108672, +67239104, 67370432, 67501888, 67631296, 67763776, 67895104, 68026304, +68157248, 68287936, 68419264, 68548288, 68681408, 68811968, 68942912, +69074624, 69205568, 69337024, 69467584, 69599168, 69729472, 69861184, +69989824, 70122944, 70253888, 70385344, 70515904, 70647232, 70778816, +70907968, 71040832, 71171648, 71303104, 71432512, 71564992, 71695168, +71826368, 71958464, 72089536, 72219712, 72350144, 72482624, 72613568, +72744512, 72875584, 73006144, 73138112, 73268672, 73400128, 73530944, +73662272, 73793344, 73924544, 74055104, 74185792, 74316992, 74448832, +74579392, 74710976, 74841664, 74972864, 75102784, 75233344, 75364544, +75497024, 75627584, 75759296, 75890624, 76021696, 76152256, 76283072, +76414144, 76545856, 76676672, 76806976, 76937792, 77070016, 77200832, +77331392, 77462464, 77593664, 77725376, 77856448, 77987776, 78118336, +78249664, 78380992, 78511424, 78642496, 78773056, 78905152, 79033664, +79166656, 79297472, 79429568, 79560512, 79690816, 79822784, 79953472, +80084672, 80214208, 80346944, 80477632, 80608576, 80740288, 80870848, +81002048, 81133504, 81264448, 81395648, 81525952, 81657536, 81786304, +81919808, 82050112, 82181312, 82311616, 82443968, 82573376, 82705984, +82835776, 82967744, 83096768, 83230528, 83359552, 83491264, 83622464, +83753536, 83886016, 84015296, 84147776, 84277184, 84409792, 84540608, +84672064, 84803008, 84934336, 85065152, 85193792, 85326784, 85458496, +85589312, 85721024, 85851968, 85982656, 86112448, 86244416, 86370112, +86506688, 86637632, 86769344, 86900672, 87031744, 87162304, 87293632, +87424576, 87555392, 87687104, 87816896, 87947968, 88079168, 88211264, +88341824, 88473152, 88603712, 88735424, 88862912, 88996672, 89128384, +89259712, 89390272, 89521984, 89652544, 89783872, 89914816, 90045376, +90177088, 90307904, 90438848, 90569152, 90700096, 90832832, 90963776, +91093696, 91223744, 91356992, 91486784, 91618496, 91749824, 91880384, +92012224, 92143552, 92273344, 92405696, 92536768, 92666432, 92798912, +92926016, 93060544, 93192128, 93322816, 93453632, 93583936, 93715136, +93845056, 93977792, 94109504, 94240448, 94371776, 94501184, 94632896, +94764224, 94895552, 95023424, 95158208, 95287744, 95420224, 95550016, +95681216, 95811904, 95943872, 96075328, 96203584, 96337856, 96468544, +96599744, 96731072, 96860992, 96992576, 97124288, 97254848, 97385536, +97517248, 97647808, 97779392, 97910464, 98041408, 98172608, 98303168, +98434496, 98565568, 98696768, 98827328, 98958784, 99089728, 99220928, +99352384, 99482816, 99614272, 99745472, 99876416, 100007104, +100138048, 100267072, 100401088, 100529984, 100662592, 100791872, +100925248, 101056064, 101187392, 101317952, 101449408, 101580608, +101711296, 101841728, 101973824, 102104896, 102235712, 102366016, +102498112, 102628672, 102760384, 102890432, 103021888, 103153472, +103284032, 103415744, 103545152, 103677248, 103808576, 103939648, +104070976, 104201792, 104332736, 104462528, 104594752, 104725952, +104854592, 104988608, 105118912, 105247808, 105381184, 105511232, +105643072, 105774784, 105903296, 106037056, 106167872, 106298944, +106429504, 106561472, 106691392, 106822592, 106954304, 107085376, +107216576, 107346368, 107478464, 107609792, 107739712, 107872192, +108003136, 108131392, 108265408, 108396224, 108527168, 108657344, +108789568, 108920384, 109049792, 109182272, 109312576, 109444928, +109572928, 109706944, 109837888, 109969088, 110099648, 110230976, +110362432, 110492992, 110624704, 110755264, 110886208, 111017408, +111148864, 111279296, 111410752, 111541952, 111673024, 111803456, +111933632, 112066496, 112196416, 112328512, 112457792, 112590784, +112715968, 112852672, 112983616, 113114944, 113244224, 113376448, +113505472, 113639104, 113770304, 113901376, 114031552, 114163264, +114294592, 114425536, 114556864, 114687424, 114818624, 114948544, +115080512, 115212224, 115343296, 115473472, 115605184, 115736128, +115867072, 115997248, 116128576, 116260288, 116391488, 116522944, +116652992, 116784704, 116915648, 117046208, 117178304, 117308608, +117440192, 117569728, 117701824, 117833024, 117964096, 118094656, +118225984, 118357312, 118489024, 118617536, 118749632, 118882112, +119012416, 119144384, 119275328, 119406016, 119537344, 119668672, +119798464, 119928896, 120061376, 120192832, 120321728, 120454336, +120584512, 120716608, 120848192, 120979136, 121109056, 121241408, +121372352, 121502912, 121634752, 121764416, 121895744, 122027072, +122157632, 122289088, 122421184, 122550592, 122682944, 122813888, +122945344, 123075776, 123207488, 123338048, 123468736, 123600704, +123731264, 123861952, 123993664, 124124608, 124256192, 124386368, +124518208, 124649024, 124778048, 124911296, 125041088, 125173696, +125303744, 125432896, 125566912, 125696576, 125829056, 125958592, +126090304, 126221248, 126352832, 126483776, 126615232, 126746432, +126876608, 127008704, 127139392, 127270336, 127401152, 127532224, +127663552, 127794752, 127925696, 128055232, 128188096, 128319424, +128449856, 128581312, 128712256, 128843584, 128973632, 129103808, +129236288, 129365696, 129498944, 129629888, 129760832, 129892288, +130023104, 130154048, 130283968, 130416448, 130547008, 130678336, +130807616, 130939456, 131071552, 131202112, 131331776, 131464384, +131594048, 131727296, 131858368, 131987392, 132120256, 132250816, +132382528, 132513728, 132644672, 132774976, 132905792, 133038016, +133168832, 133299392, 133429312, 133562048, 133692992, 133823296, +133954624, 134086336, 134217152, 134348608, 134479808, 134607296, +134741056, 134872384, 135002944, 135134144, 135265472, 135396544, +135527872, 135659072, 135787712, 135921472, 136052416, 136182848, +136313792, 136444864, 136576448, 136707904, 136837952, 136970048, +137099584, 137232064, 137363392, 137494208, 137625536, 137755712, +137887424, 138018368, 138149824, 138280256, 138411584, 138539584, +138672832, 138804928, 138936128, 139066688, 139196864, 139328704, +139460032, 139590208, 139721024, 139852864, 139984576, 140115776, +140245696, 140376512, 140508352, 140640064, 140769856, 140902336, +141032768, 141162688, 141294016, 141426496, 141556544, 141687488, +141819584, 141949888, 142080448, 142212544, 142342336, 142474432, +142606144, 142736192, 142868288, 142997824, 143129408, 143258944, +143392448, 143523136, 143653696, 143785024, 143916992, 144045632, +144177856, 144309184, 144440768, 144570688, 144701888, 144832448, +144965056, 145096384, 145227584, 145358656, 145489856, 145620928, +145751488, 145883072, 146011456, 146144704, 146275264, 146407232, +146538176, 146668736, 146800448, 146931392, 147062336, 147193664, +147324224, 147455936, 147586624, 147717056, 147848768, 147979456, +148110784, 148242368, 148373312, 148503232, 148635584, 148766144, +148897088, 149028416, 149159488, 149290688, 149420224, 149551552, +149683136, 149814976, 149943616, 150076352, 150208064, 150338624, +150470464, 150600256, 150732224, 150862784, 150993088, 151125952, +151254976, 151388096, 151519168, 151649728, 151778752, 151911104, +152042944, 152174144, 152304704, 152435648, 152567488, 152698816, +152828992, 152960576, 153091648, 153222976, 153353792, 153484096, +153616192, 153747008, 153878336, 154008256, 154139968, 154270912, +154402624, 154533824, 154663616, 154795712, 154926272, 155057984, +155188928, 155319872, 155450816, 155580608, 155712064, 155843392, +155971136, 156106688, 156237376, 156367424, 156499264, 156630976, +156761536, 156892352, 157024064, 157155008, 157284416, 157415872, +157545536, 157677248, 157810496, 157938112, 158071744, 158203328, +158334656, 158464832, 158596288, 158727616, 158858048, 158988992, +159121216, 159252416, 159381568, 159513152, 159645632, 159776192, +159906496, 160038464, 160169536, 160300352, 160430656, 160563008, +160693952, 160822208, 160956352, 161086784, 161217344, 161349184, +161480512, 161611456, 161742272, 161873216, 162002752, 162135872, +162266432, 162397888, 162529216, 162660032, 162790976, 162922048, +163052096, 163184576, 163314752, 163446592, 163577408, 163707968, +163839296, 163969984, 164100928, 164233024, 164364224, 164494912, +164625856, 164756672, 164887616, 165019072, 165150016, 165280064, +165412672, 165543104, 165674944, 165805888, 165936832, 166067648, +166198336, 166330048, 166461248, 166591552, 166722496, 166854208, +166985408, 167116736, 167246656, 167378368, 167508416, 167641024, +167771584, 167903168, 168034112, 168164032, 168295744, 168427456, +168557632, 168688448, 168819136, 168951616, 169082176, 169213504, +169344832, 169475648, 169605952, 169738048, 169866304, 169999552, +170131264, 170262464, 170393536, 170524352, 170655424, 170782016, +170917696, 171048896, 171179072, 171310784, 171439936, 171573184, +171702976, 171835072, 171966272, 172097216, 172228288, 172359232, +172489664, 172621376, 172747712, 172883264, 173014208, 173144512, +173275072, 173407424, 173539136, 173669696, 173800768, 173931712, +174063424, 174193472, 174325696, 174455744, 174586816, 174718912, +174849728, 174977728, 175109696, 175242688, 175374272, 175504832, +175636288, 175765696, 175898432, 176028992, 176159936, 176291264, +176422592, 176552512, 176684864, 176815424, 176946496, 177076544, +177209152, 177340096, 177470528, 177600704, 177731648, 177864256, +177994816, 178126528, 178257472, 178387648, 178518464, 178650176, +178781888, 178912064, 179044288, 179174848, 179305024, 179436736, +179568448, 179698496, 179830208, 179960512, 180092608, 180223808, +180354752, 180485696, 180617152, 180748096, 180877504, 181009984, +181139264, 181272512, 181402688, 181532608, 181663168, 181795136, +181926592, 182057536, 182190016, 182320192, 182451904, 182582336, +182713792, 182843072, 182976064, 183107264, 183237056, 183368384, +183494848, 183631424, 183762752, 183893824, 184024768, 184154816, +184286656, 184417984, 184548928, 184680128, 184810816, 184941248, +185072704, 185203904, 185335616, 185465408, 185596352, 185727296, +185859904, 185989696, 186121664, 186252992, 186383552, 186514112, +186645952, 186777152, 186907328, 187037504, 187170112, 187301824, +187429184, 187562048, 187693504, 187825472, 187957184, 188087104, +188218304, 188349376, 188481344, 188609728, 188743616, 188874304, +189005248, 189136448, 189265088, 189396544, 189528128, 189660992, +189791936, 189923264, 190054208, 190182848, 190315072, 190447424, +190577984, 190709312, 190840768, 190971328, 191102656, 191233472, +191364032, 191495872, 191626816, 191758016, 191888192, 192020288, +192148928, 192282176, 192413504, 192542528, 192674752, 192805952, +192937792, 193068608, 193198912, 193330496, 193462208, 193592384, +193723456, 193854272, 193985984, 194116672, 194247232, 194379712, +194508352, 194641856, 194772544, 194900672, 195035072, 195166016, +195296704, 195428032, 195558592, 195690304, 195818176, 195952576, +196083392, 196214336, 196345792, 196476736, 196607552, 196739008, +196869952, 197000768, 197130688, 197262784, 197394368, 197523904, +197656384, 197787584, 197916608, 198049472, 198180544, 198310208, +198442432, 198573632, 198705088, 198834368, 198967232, 199097792, +199228352, 199360192, 199491392, 199621696, 199751744, 199883968, +200014016, 200146624, 200276672, 200408128, 200540096, 200671168, +200801984, 200933312, 201062464, 201194944, 201326144, 201457472, +201588544, 201719744, 201850816, 201981632, 202111552, 202244032, +202374464, 202505152, 202636352, 202767808, 202898368, 203030336, +203159872, 203292608, 203423296, 203553472, 203685824, 203816896, +203947712, 204078272, 204208192, 204341056, 204472256, 204603328, +204733888, 204864448, 204996544, 205125568, 205258304, 205388864, +205517632, 205650112, 205782208, 205913536, 206044736, 206176192, +206307008, 206434496, 206569024, 206700224, 206831168, 206961856, +207093056, 207223616, 207355328, 207486784, 207616832, 207749056, +207879104, 208010048, 208141888, 208273216, 208404032, 208534336, +208666048, 208796864, 208927424, 209059264, 209189824, 209321792, +209451584, 209582656, 209715136, 209845568, 209976896, 210106432, +210239296, 210370112, 210501568, 210630976, 210763712, 210894272, +211024832, 211156672, 211287616, 211418176, 211549376, 211679296, +211812032, 211942592, 212074432, 212204864, 212334016, 212467648, +212597824, 212727616, 212860352, 212991424, 213120832, 213253952, +213385024, 213515584, 213645632, 213777728, 213909184, 214040128, +214170688, 214302656, 214433728, 214564544, 214695232, 214826048, +214956992, 215089088, 215219776, 215350592, 215482304, 215613248, +215743552, 215874752, 216005312, 216137024, 216267328, 216399296, +216530752, 216661696, 216790592, 216923968, 217054528, 217183168, +217316672, 217448128, 217579072, 217709504, 217838912, 217972672, +218102848, 218233024, 218364736, 218496832, 218627776, 218759104, +218888896, 219021248, 219151936, 219281728, 219413056, 219545024, +219675968, 219807296, 219938624, 220069312, 220200128, 220331456, +220461632, 220592704, 220725184, 220855744, 220987072, 221117888, +221249216, 221378368, 221510336, 221642048, 221772736, 221904832, +222031808, 222166976, 222297536, 222428992, 222559936, 222690368, +222820672, 222953152, 223083968, 223213376, 223345984, 223476928, +223608512, 223738688, 223869376, 224001472, 224132672, 224262848, +224394944, 224524864, 224657344, 224788288, 224919488, 225050432, +225181504, 225312704, 225443776, 225574592, 225704768, 225834176, +225966784, 226097216, 226229824, 226360384, 226491712, 226623424, +226754368, 226885312, 227015104, 227147456, 227278528, 227409472, +227539904, 227669696, 227802944, 227932352, 228065216, 228196288, +228326464, 228457792, 228588736, 228720064, 228850112, 228981056, +229113152, 229243328, 229375936, 229505344, 229636928, 229769152, +229894976, 230030272, 230162368, 230292416, 230424512, 230553152, +230684864, 230816704, 230948416, 231079616, 231210944, 231342016, +231472448, 231603776, 231733952, 231866176, 231996736, 232127296, +232259392, 232388672, 232521664, 232652608, 232782272, 232914496, +233043904, 233175616, 233306816, 233438528, 233569984, 233699776, +233830592, 233962688, 234092224, 234221888, 234353984, 234485312, +234618304, 234749888, 234880832, 235011776, 235142464, 235274048, +235403456, 235535936, 235667392, 235797568, 235928768, 236057152, +236190272, 236322752, 236453312, 236583616, 236715712, 236846528, +236976448, 237108544, 237239104, 237371072, 237501632, 237630784, +237764416, 237895232, 238026688, 238157632, 238286912, 238419392, +238548032, 238681024, 238812608, 238941632, 239075008, 239206336, +239335232, 239466944, 239599168, 239730496, 239861312, 239992384, +240122816, 240254656, 240385856, 240516928, 240647872, 240779072, +240909632, 241040704, 241171904, 241302848, 241433408, 241565248, +241696192, 241825984, 241958848, 242088256, 242220224, 242352064, +242481856, 242611648, 242744896, 242876224, 243005632, 243138496, +243268672, 243400384, 243531712, 243662656, 243793856, 243924544, +244054592, 244187072, 244316608, 244448704, 244580032, 244710976, +244841536, 244972864, 245104448, 245233984, 245365312, 245497792, +245628736, 245759936, 245889856, 246021056, 246152512, 246284224, +246415168, 246545344, 246675904, 246808384, 246939584, 247070144, +247199552, 247331648, 247463872, 247593536, 247726016, 247857088, +247987648, 248116928, 248249536, 248380736, 248512064, 248643008, +248773312, 248901056, 249036608, 249167552, 249298624, 249429184, +249560512, 249692096, 249822784, 249954112, 250085312, 250215488, +250345792, 250478528, 250608704, 250739264, 250870976, 251002816, +251133632, 251263552, 251395136, 251523904, 251657792, 251789248, +251919424, 252051392, 252182464, 252313408, 252444224, 252575552, +252706624, 252836032, 252968512, 253099712, 253227584, 253361728, +253493056, 253623488, 253754432, 253885504, 254017216, 254148032, +254279488, 254410432, 254541376, 254672576, 254803264, 254933824, +255065792, 255196736, 255326528, 255458752, 255589952, 255721408, +255851072, 255983296, 256114624, 256244416, 256374208, 256507712, +256636096, 256768832, 256900544, 257031616, 257162176, 257294272, +257424448, 257555776, 257686976, 257818432, 257949632, 258079552, +258211136, 258342464, 258473408, 258603712, 258734656, 258867008, +258996544, 259127744, 259260224, 259391296, 259522112, 259651904, +259784384, 259915328, 260045888, 260175424, 260308544, 260438336, +260570944, 260700992, 260832448, 260963776, 261092672, 261226304, +261356864, 261487936, 261619648, 261750592, 261879872, 262011968, +262143424, 262274752, 262404416, 262537024, 262667968, 262799296, +262928704, 263061184, 263191744, 263322944, 263454656, 263585216, +263716672, 263847872, 263978944, 264108608, 264241088, 264371648, +264501184, 264632768, 264764096, 264895936, 265024576, 265158464, +265287488, 265418432, 265550528, 265681216, 265813312, 265943488, +266075968, 266206144, 266337728, 266468032, 266600384, 266731072, +266862272, 266993344, 267124288, 267255616, 267386432, 267516992, +267648704, 267777728, 267910592, 268040512, 268172096, 268302784, +268435264, 268566208, 268696256, 268828096, 268959296, 269090368, +269221312, 269352256, 269482688, 269614784, 269745856, 269876416, +270007616, 270139328, 270270272, 270401216, 270531904, 270663616, +270791744, 270924736, 271056832, 271186112, 271317184, 271449536, +271580992, 271711936, 271843136, 271973056, 272105408, 272236352, +272367296, 272498368, 272629568, 272759488, 272891456, 273022784, +273153856, 273284672, 273415616, 273547072, 273677632, 273808448, +273937088, 274071488, 274200896, 274332992, 274463296, 274595392, +274726208, 274857536, 274988992, 275118656, 275250496, 275382208, +275513024, 275643968, 275775296, 275906368, 276037184, 276167872, +276297664, 276429376, 276560576, 276692672, 276822976, 276955072, +277085632, 277216832, 277347008, 277478848, 277609664, 277740992, +277868608, 278002624, 278134336, 278265536, 278395328, 278526784, +278657728, 278789824, 278921152, 279052096, 279182912, 279313088, +279443776, 279576256, 279706048, 279838528, 279969728, 280099648, +280230976, 280361408, 280493632, 280622528, 280755392, 280887104, +281018176, 281147968, 281278912, 281411392, 281542592, 281673152, +281803712, 281935552, 282066496, 282197312, 282329024, 282458816, +282590272, 282720832, 282853184, 282983744, 283115072, 283246144, +283377344, 283508416, 283639744, 283770304, 283901504, 284032576, +284163136, 284294848, 284426176, 284556992, 284687296, 284819264, +284950208, 285081536] +``` diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md" new file mode 100644 index 00000000000..144f55538ff --- /dev/null +++ "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md" @@ -0,0 +1,37 @@ +--- +title: 挖礦算法 +description: 以太坊挖礦演算法的詳細介紹。 +lang: zh-tw +--- + + +工作量證明不再是以太坊共識機制的基礎,這意味著挖礦已完結。 取而代之的是,以太坊由抵押以太幣的驗證者來保障安全。 你能從現在開始質押ETH. 閱讀更多關於合併權益證明質押的資訊。 此頁面僅為滿足對歷史的興趣。 + + +以太坊挖礦使用過一種稱為 Ethash 的演算法。 這個演算法的基本思路是,礦工嘗試使用蠻力計算找到一個隨機數輸入,使得產生的雜湊值小於一個取決於計算難度的閾值。 此難度等級可以動態調整,從而允許定期產生區塊。 + +## 前置要求 {#prerequisites} + +為了更好地理解本頁內容,我們推薦你先閱讀[工作量證明共識](/developers/docs/consensus-mechanisms/pow)和[挖礦](/developers/docs/consensus-mechanisms/pow/mining)。 + +## Dagger Hashimoto {#dagger-hashimoto} + +Dagger Hashimoto 是以太坊挖礦的先導研究演算法,現已被 Ethash 取代。 它是兩種不同演算法:Dagger 和 Hashimoto 的融合。 它只是一個曾經的研究實作,並在以太坊主網啟動時被 Ethash 取代。 + +[Dagger](http://www.hashcash.org/papers/dagger.html) 需要產生一個[有向無環圖](https://en.wikipedia.org/wiki/Directed_acyclic_graph),並將其隨機片段雜湊在一起。 其核心原理是,每個隨機數只需要一個較大總資料樹中的一小部分。 挖礦禁止為每個隨機數重新計算子樹,因此需要儲存樹;但若僅為驗證單個隨機數,則可以重新計算。 Dagger 的設計目的是替代諸如 Scrypt 這類已有的演算法,這類演算法是記憶體密集型的,但很難驗證其記憶體密集程度何時增至可信的安全水平。 然而,Dagger 容易受到共享記憶體硬體加速的影响,因此被放棄,转而采用了其他研究途径。 + +[Hashimoto](http://diyhpl.us/%7Ebryan/papers2/bitcoin/meh/hashimoto.pdf) 演算法透過實現輸入/輸出捆綁的特性(即,記憶體讀取是挖礦過程中的限制因素)來增加對專用積體電路的抗性。 理論上來說,隨機存取記憶體比計算能力更容易獲取;已有價值數十億美元的經費投入用於研究針對不同使用案例的隨機存取記憶體最佳化,這些案例通常涉及近隨機存取模式(即「隨機存取記憶體」)。 因此,現有的隨機存取記憶體在評價演算法的能力上更接近最優。 Hashimoto 使用區塊鏈作為資料來源,同時滿足上述第 (1) 和第 (3) 條。 + +Dagger-Hashimoto 是在 Dagger 和 Hashimoto 的基礎上改進而來的演算法版本。 Dagger Hashimoto 和 Hashimoto 的差別在於,Dagger Hashimoto 的資料來源並非是區塊鏈,而是自訂產生的資料集,並且該資料集每 N 個區塊基於區塊資料更新一次。 該資料集採用 Dagger 演算法產生,可為輕量用戶端的驗證演算法高效計算特定於每個隨機數的子集。 Dagger Hashimoto 演算法和 Dagger 演算法的差別在於,與原來的 Dagger 不同,用於查詢區塊的資料集只是暫時的,只會偶爾更新(例如每週更新一次)。 這意味著產生資料集的工作量接近於零,所以 Sergio Lerner 關於共享記憶體加速的論據變得微不足道。 + +有關 [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) 的更多資訊。 + +## Ethash算法 {#ethash} + +Ethash 是在現已棄用的工作量證明架構下,實際用於真正的以太坊主網的挖礦演算法。 Ethash 實際上是為 Dagger Hashimoto 演算法進行重要更新後的一個特定版本命名的新名稱,但它仍然繼承了其前身的基本原理。 以太坊主網僅使用過 Ethash,而 Dagger Hashimoto 只是挖礦演算法的研發版本,且在以太坊主網開始挖礦前就已被取代。 + +[有關 Ethash 的更多資訊](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash)。 + +## 衍生閱讀 {#further-reading} + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/backend/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/backend/index.md" new file mode 100644 index 00000000000..9492893476d --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/backend/index.md" @@ -0,0 +1,207 @@ +--- +title: 後端應用程式介面程式庫 +description: 讓你能夠從應用程式與區塊鏈互動的以太坊用戶端應用程式介面簡介。 +lang: zh-tw +--- + +為了讓軟體應用程式能夠和以太坊區塊鏈互動(例如:讀取區塊鏈資料及/或傳送交易到網路),必須先連結以太坊節點。 + +為了這個目的,每個以太坊用戶端需實作 [JSON-RPC](/developers/docs/apis/json-rpc/) 規範,如此一來,應用程式就可以使用這些一組統一的[方法](/developers/docs/apis/json-rpc/#json-rpc-methods)。 + +如果你想用特定程式設計語言連結以太坊節點,生態系統中有很多便利的程式庫幫助你更輕易完成。 借助這些程式庫,開發者可以編寫直覺的單行方法來初始化與以太坊互動的 JSON-RPC 請求(在後台)。 + +## 先備知識 {#prerequisites} + +瞭解[以太坊堆疊](/developers/docs/ethereum-stack/)和[以太坊用戶端](/developers/docs/nodes-and-clients/)可能會有幫助。 + +## 為何使用程式庫? {#why-use-a-library} + +這些程式庫顯著降低了直接和以太坊節點互動的複雜度。 這些應用程式介面還提供公用程式功能(例如將 ETH 轉換為 Gwei),使得開發者可以花更少的時間處理複雜的以太坊用戶端,將更多的時間專注於應用程式的特定功能。 + +## 可用程式庫 {#available-libraries} + +### 基礎設施和節點服務 {#infrastructure-and-node-services} + +**Alchemy -** **_以太坊開發平台。_** + +- [alchemy.com](https://www.alchemy.com/) +- [文件](https://docs.alchemy.com/) +- [Github](https://github.com/alchemyplatform) +- [Discord](https://discord.com/invite/alchemyplatform) + +**All That Node -** **_節點即服務。_** + +- [All That Node.com](https://www.allthatnode.com/) +- [文件](https://docs.allthatnode.com) +- [Discord](https://discord.gg/GmcdVEUbJM) + +**Bware Labs 的 Blast -** **_以太坊主網和測試網的去中心化應用程式介面。_** + +- [blastapi.io](https://blastapi.io/) +- [文件](https://docs.blastapi.io) +- [Discord](https://discord.gg/bwarelabs) + +**BlockPi -** **_提供更高效及快速的遠端程序呼叫服務_** + +- [blockpi.io](https://blockpi.io/) +- [文檔](https://docs.blockpi.io/) +- [Github](https://github.com/BlockPILabs) +- [Discord](https://discord.com/invite/xTvGVrGVZv) + +**Cloudflare 以太坊閘道。** + +- [cloudflare-eth.com](https://www.cloudflare.com/application-services/products/web3/) + +**Etherscan - 區塊瀏覽器和交易應用程式介面** +- [文件](https://docs.etherscan.io/) + +**GetBlock-** **_用於 Web3 開發的區塊鏈即服務_** + +- [GetBlock.io](https://getblock.io/) +- [文檔](https://getblock.io/docs/) + +**Infura -** **_以太坊應用程式介面即服務。_** + +- [infura.io](https://infura.io) +- [文件](https://docs.infura.io/api) +- [Github](https://github.com/INFURA) + +**Node RPC - _有成本效益的以太坊虛擬機 JSON-RPC 提供者_** + +- [noderpc.xyz](https://www.noderpc.xyz/) +- [文檔](https://docs.noderpc.xyz/node-rpc) + +**NOWNodes - _全節點和區塊瀏覽器。_** + +- [NOWNodes.io](https://nownodes.io/) +- [文件](https://documenter.getpostman.com/view/13630829/TVmFkLwy#intro) + +**QuickNode -** **_區塊鏈基礎設施即服務。_** + +- [quicknode.com](https://quicknode.com) +- [文檔](https://www.quicknode.com/docs/welcome) +- [Discord](https://discord.gg/quicknode) + +**Rivet -** **_由開源軟體支援的以太坊和以太坊經典應用程式介面即服務_** + +- [rivet.cloud](https://rivet.cloud) +- [文件](https://rivet.cloud/docs/) +- [Github](https://github.com/openrelayxyz/ethercattle-deployment) + +**Zmok -** **_速度導向的以太坊節點即 JSON-RPC/WebSockets 應用程式介面。_** + +- [zmok.io](https://zmok.io/) +- [Github](https://github.com/zmok-io) +- [文檔](https://docs.zmok.io/) +- [Discord](https://discord.gg/fAHeh3ka6s) + +### 開發工具 {#development-tools} + +**ethers-kt -** **_適用基於以太坊虛擬機區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。_** + +- [Github](https://github.com/Kr1ptal/ethers-kt) +- [範例](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) +- [Discord](https://discord.gg/rx35NzQGSb) + +**Nethereum -** **_區塊鏈的開源 .NET 整合程式庫。_** + +- [Github](https://github.com/Nethereum/Nethereum) +- [文檔](http://docs.nethereum.com/en/latest/) +- [Discord](https://discord.com/invite/jQPrR58FxX) + +**Python Tooling -** **_透過 Python 進行以太坊互動的各種程式庫。_** + +- [py.ethereum.org](https://python.ethereum.org/) +- [web3.py GitHub](https://github.com/ethereum/web3.py) +- [web3.py 聊天室](https://gitter.im/ethereum/web3.py) + +**Tatum -** **_最好的區塊鏈開發平台。_** + +- [Tatum](https://tatum.io/) +- [GitHub](https://github.com/tatumio/) +- [文檔](https://docs.tatum.io/) +- [Discord](https://discord.gg/EDmW3kjTC9) + +**web3j -** **_以太坊的 Java/Android/Kotlin/Scala 整合程式庫。 _** + +- [Github](https://github.com/web3j/web3j) +- [文件](https://docs.web3j.io/) +- [Gitter](https://gitter.im/web3j/web3j) + +### 區塊鏈服務 {#blockchain-services} + +**BlockCypher -** **_以太坊 Web 應用程式介面。_** + +- [blockcypher.com](https://www.blockcypher.com/) +- [文件](https://www.blockcypher.com/dev/ethereum/) + +**Chainbase -** **_以太坊的一體化 web3 資料基礎設施。_** + +- [chainbase.com](https://chainbase.com/) +- [文件](https://docs.chainbase.com/) +- [Discord](https://discord.gg/Wx6qpqz4AF) + +**Chainstack -** **_彈性且專用的以太坊節點即服務。_** + +- [chainstack.com](https://chainstack.com) +- [文件](https://docs.chainbase.com/docs) +- [以太坊應用程式介面參考資料](https://docs.chainstack.com/reference/ethereum-getting-started) + +**Coinbase 雲端節點 -** **_區塊鏈基礎設施應用程式介面。_** + +- [Coinbase 雲端節點](https://www.coinbase.com/cloud) +- [文件](https://docs.cloud.coinbase.com/) + +**DataHub by Figment -** **_以太坊主網和測試網的 Web3 應用程式介面服務。_** + +- [DataHub](https://www.figment.io/) +- [文件](https://docs.figment.io/) + +**Moralis -** **_企業級以太坊虛擬機應用程式介面提供者。_** + +- [moralis.io](https://moralis.io) +- [文件](https://docs.moralis.io/) +- [GitHub](https://github.com/MoralisWeb3) +- [Discord](https://moralis.io/joindiscord/) +- [論壇](https://forum.moralis.io/) + +**NFTPort -** **_以太坊資料及鑄造應用程式介面。_** + +- [nftport.xyz](https://www.nftport.xyz/) +- [文件](https://docs.nftport.xyz/) +- [GitHub](https://github.com/nftport/) +- [Discord](https://discord.com/invite/K8nNrEgqhE) + +**Tokenview -** **_通用多重加密區塊鏈應用程式介面平台。_** + +- [services.tokenview.io](https://services.tokenview.io/) +- [文件](https://services.tokenview.io/docs?type=api) +- [GitHub](https://github.com/Tokenview) + +**Watchdata -** **_提供簡單可靠的應用程式介面來存取以太坊區塊鏈。_** + +- [Watchdata](https://watchdata.io/) +- [文件](https://docs.watchdata.io/) +- [Discord](https://discord.com/invite/TZRJbZ6bdn) + +**Covalent -** **_200 多條鏈的已擴充區塊鏈應用程式介面。_** + +- [covalenthq.com](https://www.covalenthq.com/) +- [文件](https://www.covalenthq.com/docs/api/) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + + +## 了解更多 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [節點和用戶端](/developers/docs/nodes-and-clients/) +- [開發架構](/developers/docs/frameworks/) + +## 相關教學影片 {#related-tutorials} + +- [設定 Web3js 以在 Javascript 中使用以太坊區塊鏈](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– 在專案中設定 web3.js 的說明。_ +- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _ – 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。 diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/javascript/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/javascript/index.md" new file mode 100644 index 00000000000..f78e9eea38d --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/javascript/index.md" @@ -0,0 +1,295 @@ +--- +title: JavasScript API 圖書館 +description: JavaScript 用戶端程式庫簡介,可讓你從應用程式與區塊鏈進行互動。 +lang: zh-tw +--- + +為了使網路應用程式能夠與以太坊區塊鏈互動(即讀取區塊鏈資料和/或將交易傳送到網路),它必須連結到以太坊節點。 + +為了這個目的,每個以太坊用戶端需實作 [JSON-RPC](/developers/docs/apis/json-rpc/) 規範,如此一來,應用程式就可以使用一組統一的[方法](/developers/docs/apis/json-rpc/#json-rpc-methods)。 + +如果你想使用 JavaScript 與以太坊節點連結,可以使用普通 JavaScript,但生態系統中存在幾個便利的程式庫,讓連結變得更加容易。 借助這些程式庫,開發者可以編寫直覺的單行方法來初始化與以太坊互動的 JSON-RPC 請求(在後台)。 + +請注意,在[合併](/roadmap/merge/)後,如要運行節點,需要兩個互相連結的以太坊軟體:執行用戶端和共識用戶端。 請確定你的節點包含執行用戶端和共識用戶端。 如果你的節點不在本地機器上(比如你的節點在 AWS 執行個體上),請相應地修改教學中的 IP 位址。 更多資訊請見我們的[運行節點](/developers/docs/nodes-and-clients/run-a-node/)頁面。 + +## 基本資訊 {#prerequisites} + +除了瞭解 JavaScript 之外,瞭解<0>以太坊堆疊和<1>以太坊用戶端可能也會有所幫助。 + +## 為何使用資料圖書庫 {#why-use-a-library} + +函式庫簡化與以太坊節點的複雜步驟. 並提供其他效功能(例如: 轉化以太(ETH)到Gwei)使開發者花少時間處理以太坊客戶, 且花更多時間在提升應用程式獨特功能. + +## 程式庫功能 {#library-features} + +### 連結以太坊節點 {#connect-to-ethereum-nodes} + +使用提供者,這些程式庫讓你能夠連結到以太坊並讀取其資料,無論是透過 JSON-RPC、INFURA、Etherscan、Alchemy 還是 MetaMask。 + +**Ethers 範例** + +```js +// BrowserProvider 包裝了一個標準的 Web3 提供者 +// 這就是 MetaMask 注入到每個頁面中的 window.ethereum +const provider = new ethers.BrowserProvider(window.ethereum) + +// MetaMask 外掛程式也允許簽署交易 +// 以傳送以太幣並支付以改變區塊鏈中的狀態。 +//為此, 我們須帳戶簽署者 +const signer = provider.getSigner() +``` + +**Web3js 範例** + +```js +var web3 = new Web3("http://localhost:8545") +// 或 +var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) + +// 更改Provider +web3.setProvider("ws://localhost:8546") +// 或 +web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546")) + +// 使用 IPC provider 於 node.js +var net = require("net") +var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path +// 或 +var web3 = new Web3( + new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net) +) // mac os 路徑 +// windows 路徑為: "\\\\.\\pipe\\geth.ipc" +// linux 路徑為: "/users/myuser/.ethereum/geth.ipc" +``` + +設定完成後,將能夠在區塊鏈查詢: + +- 區塊編碼 +- 燃料預估值 +- 智慧型合約活動 +- 網路 id +- 和更多相關內容... + +### 錢包功能 {#wallet-functionality} + +這些程式庫為你提供建立錢包、管理金鑰和簽署交易的功能。 + +下面是以太幣範例 + +```js +//由助記符(mnemonic) 創建錢包 +mnemonic = + "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol" +walletMnemonic = Wallet.fromPhrase(mnemonic) + +// ...或者從私鑰建立 +walletPrivateKey = new Wallet(walletMnemonic.privateKey) + +walletMnemonic.address === walletPrivateKey.address +// true + +// 根據簽署者應用程式介面取得地址(以 Promise 形式) +walletMnemonic.getAddress() +// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' } + +// 錢包地址也可以同步獲取 +walletMnemonic.address +// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' + +// 內部加密組件 +walletMnemonic.privateKey +// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db' +walletMnemonic.publicKey +// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64' + +// 錢包助記詞 +walletMnemonic.mnemonic +// { +// locale: 'en', +// path: 'm/44\'/60\'/0\'/0/0', +// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol' +// } + +// 注意:用私鑰建立的錢包 +// 沒有助記詞(因為衍生過程不支援) +walletPrivateKey.mnemonic +// null + +// 簽署訊息 +walletMnemonic.signMessage("Hello World") +// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' } + +tx = { + to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72", + value: utils.parseEther("1.0"), +} + +// 簽署交易 +walletMnemonic.signTransaction(tx) +// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' } + +// 連接方法返回一個新的連接到提供者的 +// 錢包執行個體, +wallet = walletMnemonic.connect(provider) + +// 查詢網路 +wallet.getBalance() +// { Promise: { BigNumber: "42" } } +wallet.getTransactionCount() +// { Promise: 0 } + +// 發送以太幣 +wallet.sendTransaction(tx) +``` + +[閱讀完整文檔](https://docs.ethers.io/v5/api/signer/#Wallet) + +設定完成後,你將能夠: + +- 建立帳戶 +- 傳送交易 +- 簽署交易 +- 和更多... + +### 與智慧型合約功能互動 {#interact-with-smart-contract-functions} + +JavaScript 用戶端程式庫讓你的應用程式能透過讀取編譯合約的應用程式二進位介面 (ABI) 呼叫智慧型合約函式。 + +應用程式二進位介面本質上以 JSON 格式解釋了合約的功能,並讓你能夠像使用普通 JavaScript 物件一樣使用合約。 + +以下為 Solidity 合約範例: + +```solidity +contract Test { + uint a; + address d = 0x12345678901234567890123456789012; + + function Test(uint testInt) { a = testInt;} + + event Event(uint indexed b, bytes32 c); + + event Event2(uint indexed b, bytes32 c); + + function foo(uint b, bytes32 c) returns(address) { + Event(b, c); + return d; + } +} +``` + +將產生以下 JSON: + +```json +[{ + "type":"constructor", + "payable":false, + "stateMutability":"nonpayable" + "inputs":[{"name":"testInt","type":"uint256"}], + },{ + "type":"function", + "name":"foo", + "constant":false, + "payable":false, + "stateMutability":"nonpayable", + "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}], + "outputs":[{"name":"","type":"address"}] + },{ + "type":"event", + "name":"Event", + "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}], + "anonymous":false + },{ + "type":"event", + "name":"Event2", + "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}], + "anonymous":false +}] +``` + +這意味著你可以: + +- 傳送交易至智慧型合約並執行其方法 +- 呼叫以預估在以太坊虛擬機中執行時方法將花費的燃料 +- 部署合約 +- 和更多... + +### 公用程式功能 {#utility-functions} + +公用程式功能提供了方便的捷徑,讓以太坊中的構建變得更加容易。 + +以太幣值預設以 Wei 為單位。 1 以太幣 = 1,000,000,000,000,000,000 WEI – 這意味著你正在處理大量數字! `web3.utils.toWei` 自動將以太幣轉換至 Wei。 + +在以太幣中,如下所示: + +```js +// 取得帳戶殘額(藉由地址或ENS名) +balance = await provider.getBalance("ethers.eth") +// { BigNumber: "2337132817842795605" } + +// 因用戶通常想看到以太(ETH)殘額, 通常開發者需 +// 顯示以太(ETH)殘額, 而不是Wei. +ethers.utils.formatEther(balance) +// '2.337132817842795605' +``` + +- [Web3js 公用程式功能](https://docs.web3js.org/api/web3-utils) +- [Ethers 公用程式功能](https://docs.ethers.io/v5/api/utils/) + +## 可用資料圖書庫 {#available-libraries} + +**Web3.js -** **_以太坊 JavaScript 應用程式介面。 _** + +- [文件](https://docs.web3js.org/) +- [Github](https://github.com/ethereum/web3.js/) + +**Ethers.js -** **_使用 JavaScript 和 TypeScript 的完整以太坊錢包實作和公用程式。 _** + +- [文件](https://docs.ethers.io/) +- [Github](https://github.com/ethers-io/ethers.js/) + +**The Graph -** **_用於為以太坊和星際檔案係統資料編製索引並使用 GraphQL 進行查詢的協議。_** + +- [The Graph](https://thegraph.com/) +- [Graph Explorer](https://thegraph.com/explorer/) +- [文件](https://thegraph.com/docs/) +- [Github](https://github.com/graphprotocol/) +- [Discord](https://thegraph.com/discord) + +**light.js ****_針對輕量用戶端最佳化的高階回應式 JS 程式庫。_** + +- [Github](https://github.com/openethereum/js-libs/tree/master/packages/light.js) + +**Web3-wrapper -** **_可替代 Web3.js 的 Typescript。_** + +- [文件](https://0x.org/docs/web3-wrapper#introduction) +- [Github](https://github.com/0xProject/0x-monorepo/tree/development/packages/web3-wrapper) + +**Alchemyweb3 -** **_具有自動重試和增強型應用程式介面的 Web3.js 包裝函式。_** + +- [文件](https://docs.alchemy.com/reference/api-overview) +- [Github](https://github.com/alchemyplatform/alchemy-web3) + +**Alchemy 非同質化代幣應用程式介面 -** **_用於擷取非同質化代幣資料的應用程式介面,包括所有權、中繼資料屬性以及更多。_** + +- [文件](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) +- [GitHub](https://github.com/alchemyplatform/alchemy-web3) + +**viem -** **_以太坊的 TypeScript 介面。_** + +- [文件](https://viem.sh) +- [GitHub](https://github.com/wagmi-dev/viem) + +## 衍生閱讀 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [節點和用戶端](/developers/docs/nodes-and-clients/) +- [開發架構](/developers/docs/frameworks/) + +## 相關教學影片 {#related-tutorials} + +- [設定 Web3js 以在 Javascript 中使用以太坊區塊鏈](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– 在專案中設定 web3.js 的說明。_ +- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _ – 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。 +- [使用 web3 和 Alchemy 傳送交易](/developers/tutorials/sending-transactions-using-web3-and-alchemy/)_ -- 從後端傳送交易的逐步演練。_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/json-rpc/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/json-rpc/index.md" new file mode 100644 index 00000000000..c22d564ca1c --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/json-rpc/index.md" @@ -0,0 +1,1771 @@ +--- +title: JSON-RPC 應用程式介面 +description: 一種無狀態、輕量的以太坊用戶端遠端程序呼叫 (RPC) 協定。 +lang: zh-tw +--- + +為了讓軟體應用程式能夠和以太坊區塊鏈互動(例如:讀取區塊鏈資料,發送交易到網路),必須先連結以太坊節點。 + +為此,每個[以太坊用戶端](/developers/docs/nodes-and-clients/#execution-clients)都實作 [JSON-RPC 規範](https://github.com/ethereum/execution-apis),因此無論特定節點或用戶端實作如何,應用程式都可以依賴一組統一的方法。 + +[JSON-RPC](https://www.jsonrpc.org/specification) 是一種無狀態、輕量級的遠端程序呼叫 (RPC) 協定。 該協定定義了幾種資料結構及其處理規則。 它與傳輸無關,因為這些概念可以在同一進程中、透過通訊端、透過超文字傳輸協定或在許多不同的訊息傳遞環境中使用。 它使用 JSON (RFC 4627) 作為資料格式。 + +## 用戶端實作 {#client-implementations} + +每個以太坊用戶端在實作 JSON-RPC 規範時可能會使用不同的程式設計語言。 有關特定程式設計語言的更多詳細資料,請參閱各個[用戶端文件](/developers/docs/nodes-and-clients/#execution-clients)。 我們建議檢查每個用戶端的文件以取得最新的應用程式介面支援資訊。 + +## 便利程式庫 {#convenience-libraries} + +雖然可以選擇透過 JSON-RPC 應用程式介面直接與以太坊用戶端互動,但對於去中心化應用程式開發者來說通常有更簡單的選擇。 許多 [JavaScript](/developers/docs/apis/javascript/#available-libraries) 和[後端應用程式介面](/developers/docs/apis/backend/#available-libraries) 程式庫都是為了在 JSON-RPC 應用程式介面之上提供包裝函式。 借助這些程式庫,開發者可以用自己選擇的程式語言編寫直覺的單行方法,以初始化與以太坊互動的 JSON-RPC 請求(在後台)。 + +## 共識用戶端應用程式介面 {#consensus-clients} + +本頁面主要討論以太坊執行用戶端使用的 JSON-RPC 應用程式介面。 然而,共識用戶端也有一個遠端程序呼叫應用程式介面,讓使用者能夠直接從節點查詢有關節點的資訊、請求信標區塊、信標狀態和其他共識相關資訊。 [信標應用程式介面網頁](https://ethereum.github.io/beacon-APIs/#/)上記錄了此應用程式介面。 + +內部應用程式介面也用於節點內的用戶端間通訊 - 也就是說,它讓共識用戶端和執行用戶端能夠交換資料。 這被稱為「引擎應用程式介面」,其規範可在 [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) 上取得。 + +## 執行用戶端規範 {#spec} + +[在 GitHub 上閱讀完整的 JSON-RPC 應用程式介面規範](https://github.com/ethereum/execution-apis)。 此應用程式介面記錄在[執行應用程式介面網頁](https://ethereum.github.io/execution-apis/api-documentation/)上,並包含一個檢查器來嘗試所有可用的方法。 + +## 慣例 {#conventions} + +### 十六進位值編碼 {#hex-encoding} + +透過 JSON 傳遞兩種關鍵資料類型:未格式化的位元組陣列和數量。 兩者都以十六進位編碼傳遞,但對格式有不同的要求。 + +#### 數量 {#quantities-encoding} + +編碼數量(整數、數字)時:編碼為十六進位,前綴為「0x」,最緊湊的表示形式(輕微例外:零應表示為「0x0」)。 + +下面有些範例: + +- 0x41(在十進位中是 65) +- 0x400(在十進位中是 1024) +- 錯誤:0x(應始終至少有一位數字,零是「0x0」) +- 錯誤:0x0400(不允許有前導零) +- 錯誤:ff(必須有前綴 0x) + +### 無格式資料 {#unformatted-data-encoding} + +編碼無格式資料(位元組陣列、帳戶位址、雜湊值、位元組碼陣列)時:編碼為十六進位,前綴為「0x」,每個位元組兩個十六進位數字。 + +這裡有些範例: + +- 0x41(大小為 1,「A」) +- 0x004200(大小為 3,「0B0」) +- 0x(大小為 0,"") +- 錯誤:0xf0f0f(位數必須為偶數) +- 錯誤:004200(必須以 0x 為前綴) + +### 預設區塊參數 {#default-block} + +下列方法有一個額外的預設區塊參數: + +- [eth_getBalance](#eth_getbalance) +- [eth_getCode](#eth_getcode) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_call](#eth_call) + +當發出對以太坊狀態進行動作的請求時,最後一個預設區塊參數決定了區塊的高度。 + +defaultBlock 參數可以使用以下選項: + +- `HEX String` - 表示整數區塊編號 +- `String "earliest"` 表示最早的/創世區塊 +- `String "latest"` - 表示最新提議的區塊 +- `String "safe"` - 表示最新安全的頭部區塊 +- `String "finalized"` - 表示最新最終確定的區塊 +- `String "pending"` - 表示未決的狀態/交易 + +## 範例 + +在此頁面上,我們提供了有關如何透過命令列工具 [curl](https://curl.se) 使用各 JSON_RPC 應用程式介面端點的範例。 這些單獨的端點範例位於下面的 [Curl 範例](#curl-examples)部分。 在頁面下方,我們還提供了一個使用 Geth 節點、JSON_RPC 應用程式介面和 curl 來編譯和部署智慧型合約的[端到端範例](#usage-example)。 + +## Curl 範例 {#curl-examples} + +下面提供了使用 JSON_RPC 應用程式介面向以太坊節點發出 [curl](https://curl.se) 請求的範例。 每個範例包含對特定端點的描述、其參數、傳回類型,以及應該如何使用的可行範例。 + +curl 請求可能會傳回與內容類型相關的錯誤訊息。 這是因為 `--data` 選項將內容類型設定為 `application/x-www-form-urlencoded`。 如果你的節點確實抱怨這一點,請手動在呼叫程式開始處放置 `-H "Content-Type: application/json"` 來設定標頭。 這些範例也不包括 URL/IP 和通訊埠組合,該組合必須是給 curl 的最後一個引數(例如 `127.0.0.1:8545`)。 完整的 curl 請求包含採用以下形式的附加資料: + +```shell +curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 +``` + +## Gossip、State、History {#gossip-state-history} + +少數重要的 JSON-RPC 方法需要來自以太坊網路的資料,這些資料分屬於三個種類:<0>Gossip、State 和 History。 利用這些章節中的連結移動至每個方法,或利用目錄探索完整的方法清單。 + +### Gossip 方法 {#gossip-methods} + +> 這些方法用於追蹤鏈頭。 這就是交易如何在網路中傳播、進入區塊以及用戶端如何發現新區塊的方式。 + +- [eth_blockNumber](#eth_blocknumber) +- [eth_sendRawTransaction](#eth_sendrawtransaction) + +### State 方法 {#state_methods} + +> 報告所有已存儲資料的目前狀態的方法。 「狀態」像是一大塊可分享的隨機存取記憶體,包含帳戶餘額、合約資料和燃料預估。 + +- [eth_getBalance](#eth_getbalance) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getCode](#eth_getcode) +- [eth_call](#eth_call) +- [eth_estimateGas](#eth_estimategas) + +### History 方法 {#history_methods} + +> 取得包括創世區塊在內的每一區塊的歷史記錄。 這像一個大型只能附加資料的檔案,包括所有區塊頭、區塊體、叔塊和交易收據。 + +- [eth_getBlockTransactionCountByHash](#eth_getblocktransactioncountbyhash) +- [eth_getBlockTransactionCountByNumber](#eth_getblocktransactioncountbynumber) +- [eth_getUncleCountByBlockHash](#eth_getunclecountbyblockhash) +- [eth_getUncleCountByBlockNumber](#eth_getunclecountbyblocknumber) +- [eth_getBlockByHash](#eth_getblockbyhash) +- [eth_getBlockByNumber](#eth_getblockbynumber) +- [eth_getTransactionByHash](#eth_gettransactionbyhash) +- [eth_getTransactionByBlockHashAndIndex](#eth_gettransactionbyblockhashandindex) +- [eth_getTransactionByBlockNumberAndIndex](#eth_gettransactionbyblocknumberandindex) +- [eth_getTransactionReceipt](#eth_gettransactionreceipt) +- [eth_getUncleByBlockHashAndIndex](#eth_getunclebyblockhashandindex) +- [eth_getUncleByBlockNumberAndIndex](#eth_getunclebyblocknumberandindex) + +## JSON-RPC 應用程式介面訓練場 + +你可以使用[訓練場工具](https://ethereum-json-rpc.com)去發掘和試用應用程式介面方法。 訓練場也顯示不同的節點提供者支援的方法和網路。 + +## JSON-RPC 應用程式介面方法 {#json-rpc-methods} + +### web3_clientVersion {#web3_clientversion} + +傳回目前用戶端版本。 + +**參數** + +無 + +**傳回** + +`String` - 目前用戶端版本 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc":"2.0", + "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1" +} +``` + +### web3_sha3 {#web3_sha3} + +傳回給定資料的 Keccak-256(_不是_ 標準化的 SHA3-256)。 + +**參數** + +1. `DATA` - 要轉換為 SHA3 雜湊值的資料 + +```js +params: ["0x68656c6c6f20776f726c64"] +``` + +**返回** + +`DATA` - 給定字串的 SHA3 結果。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' +// Result +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" +} +``` + +### net_version {#net_version} + +傳回目前網路 ID。 + +**參數** + +無 + +**返回** + +`String` - 目前網路 ID。 + +目前網路 ID 的完整清單可在 [chainlist.org](https://chainlist.org) 上找到。 一些常用的如下: + +- `1`:以太坊主網 +- `5`:Goerli 測試網 +- `11155111`:Sepolia 測試網 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "3" +} +``` + +### net_listening {#net_listening} + +如果用戶端正在主動偵聽網路連結,則傳回 `true`。 + +**參數** + +無 + +**返回** + +`Boolean` - 偵聽時為 `true`,否則為 `false`。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc":"2.0", + "result":true +} +``` + +### net_peerCount {#net_peercount} + +傳回目前連線到用戶端的對等點數量。 + +**參數** + +無 + +**返回** + +`QUANTITY` - 表示連結的對等點數量的整數。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' +// Result +{ + "id":74, + "jsonrpc": "2.0", + "result": "0x2" // 2 +} +``` + +### eth_protocolVersion {#eth_protocolversion} + +傳回目前的以太坊協定版本。 請注意此方法[在 Geth 中不可用](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924)。 + +**參數** + +無 + +**返回** + +`String` - 目前的以太坊協定版本 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "54" +} +``` + +### eth_syncing {#eth_syncing} + +傳回一個物件,其中包含有關同步狀態的資料或傳回 `false`。 + +**參數** + +無 + +**返回** + +準確的傳回資料因用戶端實作而異。 當節點未同步時,所有用戶端傳回 `False`,並且所有用戶端傳回下列欄位。 + +`Object|Boolean`,具有同步狀態資料的物件,或不同步時為 `FALSE`: + +- `startingBlock`: `QUANTITY` - 匯入之開始區塊(僅在同步到達其頭部後才會重設) +- `currentBlock`: `QUANTITY` - 目前區塊,與 eth_blockNumber 相同 +- `highestBlock`: `QUANTITY` - 估計的最高區塊 + +然而,個別用戶端也可以提供額外的資料。 例如 Geth 傳回如下資料: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "currentBlock": "0x3cf522", + "healedBytecodeBytes": "0x0", + "healedBytecodes": "0x0", + "healedTrienodes": "0x0", + "healingBytecode": "0x0", + "healingTrienodes": "0x0", + "highestBlock": "0x3e0e41", + "startingBlock": "0x3cbed5", + "syncedAccountBytes": "0x0", + "syncedAccounts": "0x0", + "syncedBytecodeBytes": "0x0", + "syncedBytecodes": "0x0", + "syncedStorage": "0x0", + "syncedStorageBytes": "0x0" + } +} +``` + +而 Besu 傳回: + +```json +{ + "jsonrpc": "2.0", + "id": 51, + "result": { + "startingBlock": "0x0", + "currentBlock": "0x1518", + "highestBlock": "0x9567a3", + "pulledStates": "0x203ca", + "knownStates": "0x200636" + } +} +``` + +請參閱特定用戶端的文檔以獲得更多詳細資料。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": { + startingBlock: '0x384', + currentBlock: '0x386', + highestBlock: '0x454' + } +} +// Or when not syncing +{ + "id":1, + "jsonrpc": "2.0", + "result": false +} +``` + +### eth_coinbase {#eth_coinbase} + +傳回用戶端的 coinbase 地址。 + +**參數** + +無 + +**傳回** + +`DATA`,20 位元組 - 目前 coinbase 地址。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' +// Result +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1" +} +``` + +### eth_chainId {#eth_chainId} + +傳回用來簽署重新執行攻擊保護交易的區塊鏈 ID。 + +**參數** + +無 + +**傳回** + +`chainId`,十六進位數值字串,表示目前區塊鏈 ID 的整數值。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "0x1" +} +``` + +### eth_mining {#eth_mining} + +如果用戶端正活躍地開採新區塊,則傳回 `true`。 這方法只對工作量證明網路傳回 `true` 且自[合併](/roadmap/merge/)後這方法不可用在某些用戶端。 + +**參數** + +無 + +**傳回** + +`Boolean` - 如果用戶端正在挖礦,則傳回 `true`,否則傳回 `false`。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' +// +{ + "id":71, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_hashrate {#eth_hashrate} + +傳回正在挖礦的節點每秒的雜湊值數量。 這方法只對工作量證明網路傳回 `true` 且自[合併](/roadmap/merge/)後這方法不可用在某些用戶端。 + +**參數** + +無 + +**傳回** + +`QUANTITY` - 每秒的雜湊數。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' +// Result +{ + "id":71, + "jsonrpc": "2.0", + "result": "0x38a" +} +``` + +### eth_gasPrice {#eth_gasprice} + +傳回預估的目前燃料價格,以 wei 為單位。 例如:Besu 用戶端檢查最後面 100 個區塊並預設傳回燃料單價中位數。 + +**參數** + +無 + +**傳回** + +`QUANTITY` - 表示目前燃料價格的整數,以 wei 為單位。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +// Result +{ + "id":73, + "jsonrpc": "2.0", + "result": "0x1dfd14000" // 8049999872 Wei +} +``` + +### eth_accounts {#eth_accounts} + +傳回用戶端擁有的地址清單。 + +**參數** + +無 + +**傳回** + +`Array of DATA`,20 位元組 - 用戶端擁有的地址。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] +} +``` + +### eth_blockNumber {#eth_blocknumber} + +傳回最近的區塊編號。 + +**參數** + +無 + +**傳回** + +`QUANTITY` - 表示用戶端目前所在區塊編號的整數。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' +// Result +{ + "id":83, + "jsonrpc": "2.0", + "result": "0x4b7" // 1207 +} +``` + +### eth_getBalance {#eth_getbalance} + +傳回給定地址的帳戶餘額。 + +**參數** + +1. `DATA`,20 位元組 - 要檢查餘額的地址。 +2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +```js +params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] +``` + +**傳回** + +`QUANTITY` - 表示目前餘額的整數,以 wei 為單位。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0234c8a3397aab58" // 158972490234375000 +} +``` + +### eth_getStorageAt {#eth_getstorageat} + +從給定地址的存儲位置傳回值。 + +**參數** + +1. `DATA`,20 位元組 - 存儲地址。 +2. `QUANTITY` - 表示存儲中的位置的整數。 +3. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"`、`"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +**傳回** + +`DATA` - 此存儲位置的值。 + +**範例** 正確的位置計算取決於要擷取的存儲。 考慮透過地址 `0x391694e7e0b0cce554cb130d723a9d27458f9298` 部署在 `0x295a70b2de5e3953354a6a8344e616ed314d7251` 的以下合約。 + +``` +contract Storage { + uint pos0; + mapping(address => uint) pos1; + function Storage() { + pos0 = 1234; + pos1[msg.sender] = 5678; + } +} +``` + +擷取 pos0 的值很簡單。 + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} +``` + +擷取對應的元素較困難。 對應中元素位置是依照下列方式計算的: + +```js +keccak(LeftPad32(key, 0), LeftPad32(map position, 0)) +``` + +這意味著要擷取 pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] 處的存儲,我們需要以下列方式計算位置: + +```js +keccak( + decodeHex( + "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + + "0000000000000000000000000000000000000000000000000000000000000001" + ) +) +``` + +可以使用 web3 程式庫的 Geth 控制台進行計算: + +```js +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +現在擷取存儲: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} +``` + +### eth_getTransactionCount {#eth_gettransactioncount} + +傳回從一個地址_發送_的交易數量。 + +**參數** + +1. `DATA`,20 位元組 - 地址。 +2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +```js +params: [ + "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + "latest", // state at the latest block +] +``` + +**傳回** + +`QUANTITY` - 表示從該地址發送的交易數量的整數。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} + +傳回區塊中從符合給定區塊雜湊值的交易數量。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值 + +```js +params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] +``` + +**傳回** + +`QUANTITY` - 表示該區塊中交易數量的整數。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} + +傳回與給定區塊編號相符的區塊中的交易數量。 + +**參數** + +1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 + +```js +params: [ + "0x13738ca", // 20396234 +] +``` + +**傳回** + +`QUANTITY` - 表示該區塊中交易數量的整數。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} + +傳回區塊中符合給定區塊雜湊值的叔塊數量。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值 + +```js +params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] +``` + +**傳回** + +`QUANTITY` - 表示該區塊中叔塊數量的整數。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} + +傳回區塊中符合給定區塊編號的叔塊數量。 + +**參數** + +1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +```js +params: [ + "0xe8", // 232 +] +``` + +**傳回** + +`QUANTITY` - 表示該區塊中叔塊數量的整數。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0" // 0 +} +``` + +### eth_getCode {#eth_getcode} + +傳回給定地址的程式碼。 + +**參數** + +1. `DATA`,20 位元組 - 地址 +2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +```js +params: [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x5daf3b", // 6139707 +] +``` + +**傳回** + +`DATA` - 來自給定地址的程式碼。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029" +} +``` + +### eth_sign {#eth_sign} + +Sign 方法按以下方式計算以太坊特定簽章:`sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`。 + +透過在訊息中加入前綴,可以將計算出的簽章識別為以太坊特定簽章。 這可以防止濫用,即惡意去中心化應用程式簽署任意資料(例如交易)並使用簽章來冒充受害者。 + +注意:要簽章的地址必須解鎖。 + +**參數** + +1. `DATA`,20 位元組 - 地址 +2. `DATA`,N 位元組 - 要簽署的訊息。 + +**傳回** + +`DATA`:簽章 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_signTransaction {#eth_signtransaction} + +簽署交易,稍後可使用 [eth_sendRawTransaction](#eth_sendrawtransaction) 將交易提交到網路。 + +**參數** + +1. `Object` - 交易物件 + +- `type`: +- `from`: `DATA`,20 位元組 - 發送交易的地址。 +- `to`: `DATA` 20 位元組 -(建立新合約時可選)交易指向的地址。 +- `gas`: `QUANTITY` -(可選,預設:90000)表示為交易執行提供的燃料的整數。 將傳回未使用的燃料。 +- `gasPrice`: `QUANTITY` -(可選,預設:尚未決定)表示每次支付燃料時的燃料價格的整數(單位為 Wei)。 +- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數(單位為 Wei)。 +- `data`: `DATA` - 合約的編譯程式碼,或叫用的方法簽章和編碼參數的雜湊。 +- `nonce`: `QUANTITY` -(可選)表示隨機數的整數。 這允許覆寫你自己的使用相同隨機數的待處理交易。 + +**傳回** + +`DATA`,特定帳戶簽署的遞迴長度前綴編碼的交易物件。 + +**範例** + +```js +// Request +curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' +// Result +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_sendTransaction {#eth_sendtransaction} + +如果資料欄位包含程式碼,則建立新的訊息呼叫交易或建立合約,並使用 `from` 中指定的帳戶對其進行簽署。 + +**參數** + +1. `Object` - 交易物件 + +- `from`: `DATA`,20 位元組 - 發送交易的地址。 +- `to`: `DATA` 20 位元組 -(建立新合約時可選)交易指向的地址。 +- `gas`: `QUANTITY` -(可選,預設:90000)表示為交易執行提供的燃料的整數。 將傳回未使用的燃料。 +- `gasPrice`: `QUANTITY` -(可選,預設:尚未決定)表示每次支付燃料時的燃料價格的整數。 +- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數。 +- `input`: `DATA` - 合約的編譯程式碼,或叫用的方法簽章和編碼參數的雜湊值。 +- `nonce`: `QUANTITY` -(可選)表示隨機數的整數。 這允許覆寫你自己的使用相同隨機數的待處理交易。 + +```js +params: [ + { + from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", + to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + gas: "0x76c0", // 30400 + gasPrice: "0x9184e72a000", // 10000000000000 + value: "0x9184e72a", // 2441406250 + input: + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", + }, +] +``` + +**傳回** + +`DATA`,32 位元組 - 交易雜湊值,如果交易尚未可用則為零雜湊值。 + +建立合約時,在區塊中提議交易後,使用 [eth_getTransactionReceipt](#eth_gettransactionreceipt) 取得合約地址。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_sendRawTransaction {#eth_sendrawtransaction} + +建立新的訊息呼叫交易或為簽署的交易建立合約。 + +**參數** + +1. `DATA`,簽署的交易資料。 + +```js +params: [ + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", +] +``` + +**傳回** + +`DATA`,32 位元組 - 交易雜湊值,如果交易尚未可用則為零雜湊值。 + +建立合約時,在區塊中提議交易後,使用 [eth_getTransactionReceipt](#eth_gettransactionreceipt) 取得合約地址。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_call {#eth_call} + +立即執行一個新的訊息呼叫,但不在區塊鏈上建立交易。 通常用於執行唯讀智慧型合約函式,例如 ERC-20 合約的 ` balanceOf`。 + +**參數** + +1. `Object` - 交易呼叫物件 + +- `from`: `DATA`,20 位元組 -(可選)發送交易的地址。 +- `to`: `DATA`,20 位元組 - 交易指向的地址。 +- `gas`: `QUANTITY` -(可選)表示為交易執行提供的燃料的整數。 eth_call 消耗零燃料,但某些執行可能需要此參數。 +- `gasPrice`: `QUANTITY` -(可選)表示每次支付燃料時的燃料價格的整數 +- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數 +- `input`: `DATA` -(可選)方法簽章和編碼參數的雜湊值。 詳細資料請參考 [Solidity 文檔中的以太坊合約應用程式二進位介面](https://docs.soliditylang.org/en/latest/abi-spec.html)。 + +2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +**傳回** + +`DATA` - 已執行合約的傳回值。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x" +} +``` + +### eth_estimateGas {#eth_estimategas} + +產生和傳回完成交易所必需的燃料量預估值。 交易將不會新增至區塊鏈。 請注意,由於以太坊虛擬機機制和節點效能等種種原因,預估值可能明顯地大於交易實際使用的燃料量。 + +**參數** + +請參閱 <0>eth_call 參數,但所有屬性都是可選的。 假如沒有明確說明燃料限制,Geth 將使用來自待處理區塊的區塊燃料限制作為上限。 因此,當燃料量高於待處理區塊燃料限制時,傳回的預估值可能不足以執行呼叫或交易。 + +**傳回** + +`QUANTITY` - 使用的燃料數量。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x5208" // 21000 +} +``` + +### eth_getBlockByHash {#eth_getblockbyhash} + +根據雜湊值傳回區塊資訊。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值。 +2. `Boolean` - 如果為 `true`,傳回完整交易物件,如果為 `false`,只傳回交易的雜湊值。 + +```js +params: [ + "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + false, +] +``` + +**傳回** + +`Object` - 區塊物件,或如果未找到區塊,則為 `null`: + +- `number`: `QUANTITY` - 區塊編號。 當為待處理區塊時,為 `null`。 +- `hash`: `DATA`,32 位元組 - 區塊的雜湊值。 當為待處理區塊時,為 `null`。 +- `parentHash`: `DATA`,32 位元組 - 父區塊的雜湊值。 +- `nonce`: `DATA`,8 位元組 - 產生的工作量證明的雜湊值。 當為待處理區塊時,為 `null`。 +- `sha3Uncles`: `DATA`,32 位元組 - 區塊中叔塊資料的第三代安全雜湊演算法。 +- `logsBloom`: `DATA`,256 位元組 - 區塊日誌的布隆篩選器。 當為待處理區塊時,為 `null`。 +- `transactionsRoot`: `DATA`,32 位元組 - 區塊交易樹的根。 +- `stateRoot`: `DATA`,32 位元組 - 區塊最終狀態樹的根。 +- `receiptsRoot`: `DATA`,32 位元組 - 區塊收據樹的根。 +- `miner`: `DATA`,20 位元組 - 挖礦獎勵受款人的地址。 +- `difficulty`: `QUANTITY` - 表示區塊難度的整數。 +- `totalDifficulty`: `QUANTITY` - 表示此區塊前的區塊鏈的總難度的整數。 +- `extraData`: `DATA` - 該區塊的「額外資料」欄位。 +- `size`: `QUANTITY` - 表示此區塊大小的整數,以位元組為單位。 +- `gasLimit`: `QUANTITY` - 此區塊允許的最大燃料量。 +- `gasUsed`: `QUANTITY` - 此區塊所有交易所使用的總燃料量。 +- `timestamp`: `QUANTITY` - 整理區塊時的 unix 時間戳。 +- `transactions`: `Array` - 交易物件陣列,或是 32 位元組交易雜湊值,取決於最後一個給定的參數。 +- `uncles`: `Array` - 叔塊雜湊值陣列。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' +// Result +{ +{ +"jsonrpc": "2.0", +"id": 1, +"result": { + "difficulty": "0x4ea3f27bc", + "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32", + "gasLimit": "0x1388", + "gasUsed": "0x0", + "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171", + "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843", + "nonce": "0x689056015818adbe", + "number": "0x1b4", + "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x220", + "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d", + "timestamp": "0x55ba467c", + "totalDifficulty": "0x78ed983323d", + "transactions": [ + ], + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncles": [ + ] +} +} +``` + +### eth_getBlockByNumber {#eth_getblockbynumber} + +根據區塊編號傳回關於區塊的資訊。 + +**參數** + +1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 +2. `Boolean` - 如果為 `true`,傳回完整交易物件,如果為 `false`,只傳回交易的雜湊值。 + +```js +params: [ + "0x1b4", // 436 + true, +] +``` + +**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' +``` + +結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_getTransactionByHash {#eth_gettransactionbyhash} + +傳回有關按交易雜湊值請求的交易的資訊。 + +**參數** + +1. `DATA`,32 位元組 - 交易的雜湊值 + +```js +params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] +``` + +**傳回** + +`Object` - 交易物件,或當找不到交易時為 `null`: + +- `blockHash`: `DATA`,32 位元組 - 此交易所在區塊的雜湊值。 當為待處理時,為 `null`。 +- `blockNumber`: `QUANTITY` - 此交易所在的區塊編號。 當為待處理時,為 `null`。 +- `from`: `DATA`,20 位元組 - 發送者的地址。 +- `gas`: `QUANTITY` - 發送者提供的燃料。 +- `gasPrice`: `QUANTITY` - 發送者提供的燃料價格,以 Wei 為單位。 +- `hash`: `DATA`,32 位元組 - 交易的雜湊值。 +- `input`: `DATA` - 隨交易一起傳送的資料。 +- `nonce`: `QUANTITY` - 發送者在這之前所進行的交易數量。 +- `to`: `DATA`,20 位元組 - 接收者的地址。 如果是合約建立交易,則為 `null`。 +- `transactionIndex`: `QUANTITY` - 表示區塊中交易索引位置的整數。 當為待處理時,為 `null`。 +- `value`: `QUANTITY` - 傳輸的值,以 Wei 為單位。 +- `v`: `QUANTITY` - 橢圓曲線數位簽章演算法復原 ID +- `r`: `QUANTITY` - 橢圓曲線數位簽章演算法簽章 r +- `s`: `QUANTITY` - 橢圓曲線數位簽章演算法簽章 s + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' +// Result +{ + "jsonrpc":"2.0", + "id":1, + "result":{ + "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "blockNumber":"0x5daf3b", // 6139707 + "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d", + "gas":"0xc350", // 50000 + "gasPrice":"0x4a817c800", // 20000000000 + "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", + "input":"0x68656c6c6f21", + "nonce":"0x15", // 21 + "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb", + "transactionIndex":"0x41", // 65 + "value":"0xf3dbb76162000", // 4290000000000000 + "v":"0x25", // 37 + "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" + } +} +``` + +### eth_getTransactionByBlockHashAndIndex {#eth_gettransactionbyblockhashandindex} + +按區塊雜湊值和交易索引位置傳回有關交易的資訊。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值。 +2. `QUANTITY` - 表示交易索引位置的整數。 + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**傳回** 請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +結果請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} + +按區塊編號和交易索引位置傳回有關交易的資訊。 + +**參數** + +1. `QUANTITY|TAG` - 區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 +2. `QUANTITY` - 交易索引位置。 + +```js +params: [ + "0x9c47cf", // 10241999 + "0x24", // 36 +] +``` + +**傳回** 請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' +``` + +結果請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionReceipt {#eth_gettransactionreceipt} + +按交易雜湊值返回交易的收據。 + +**注意**待處理交易沒有收據。 + +**參數** + +1. `DATA`,32 位元組 - 交易的雜湊值 + +```js +params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] +``` + +**傳回** `Object` - 交易收據物件,或當找不到收據時為 `null`: + +- `transactionHash`: `DATA`,32 位元組 - 交易的雜湊值。 +- `transactionIndex`: `QUANTITY` - 表示區塊中交易索引位置的整數。 +- `blockHash`: `DATA`,32 位元組 - 此交易所在區塊的雜湊值。 +- `blockNumber`: `QUANTITY` - 此交易所在的區塊編號。 +- `from`: `DATA`,20 位元組 - 發送者的地址。 +- `to`: `DATA`,20 位元組 - 接收者的地址。 如果是合約建立交易,則為 null。 +- `cumulativeGasUsed`: `QUANTITY` - 當區塊執行此交易時所使用的總燃料量。 +- `effectiveGasPrice`: `QUANTITY` - 每單位燃料支付的基本費用和小費的總和。 +- `gasUsed`: `QUANTITY` - 僅此特定交易所使用的燃料量。 +- `contractAddress`: `DATA`,20 位元組 - 如果交易為建立合約,則為建立的合約地址,否則為 `null`。 +- `logs`: `Array` - 此交易產生的日誌物件陣列。 +- `logsBloom`: `DATA`,256 位元組 - 給輕量用戶端快速擷取相關日誌的布隆篩選器。 +- `type`: `QUANTITY` - 表示交易類型的整數,`0x0` 表示傳統交易,`0x1` 表示存取清單類型, `0x2` 表示動態費用。 + +它也傳回 _以下兩者之一_: + +- `root` : `DATA` 32 位元組的交易後狀態根(拜占庭升級之前) +- `status`: `QUANTITY` 要麼 `1`(成功)要麼 `0`(失敗) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' +// Result +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "blockHash": + "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", + "blockNumber": "0xeff35f", + "contractAddress": null, // string of the address if it was created + "cumulativeGasUsed": "0xa12515", + "effectiveGasPrice": "0x5a9c688d4", + "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", + "gasUsed": "0xb4c8", + "logs": [{ + // logs as returned by getFilterLogs, etc. + }], + "logsBloom": "0x00...0", // 256 byte bloom filter + "status": "0x1", + "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "transactionHash": + "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5", + "transactionIndex": "0x66", + "type": "0x2" + } +} +``` + +### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} + +按雜湊值和叔塊索引位置傳回關於區塊的叔塊資訊。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值。 +2. `QUANTITY` - 叔塊的索引位置。 + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) + +**注意**:叔塊不包含單獨交易。 + +### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} + +按編號和叔塊索引位置傳回關於區塊的叔塊資訊。 + +**參數** + +1. `QUANTITY|TAG` - 區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 +2. `QUANTITY` - 叔塊的索引位置。 + +```js +params: [ + "0x29c", // 668 + "0x0", // 0 +] +``` + +**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) + +**注意**:叔塊不包含單獨交易。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' +``` + +結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_newFilter {#eth_newfilter} + +根據篩選條件選項建立一個篩選條件物件,以在狀態改變時發出通知(日誌)。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 + +**關於指定主題篩選條件的說明:** 主題跟順序相關。 以下主題篩選條件將匹配日誌中包含主題 [A, B] 的交易: + +- `[]`「任意值」 +- `[A]`「第一個位置為 A(其後為任意值)」 +- `[null, B]`「第一位置為任意值,且第二位置為 B(其後為任意值)」 +- `[A, B]`「第一位置為 A,且第二位置為 B(其後為任意值)」 +- `[[A, B], [A, B]]`「第一位置為(A 或 B)且第二位置為(A 或 B)(其後為任意值)」 +- **參數** + +1. `Object` - 篩選條件選項: + +- `fromBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 +- `toBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 +- `address`: `DATA|Array`,20 位元組 - (可選)合約地址或日誌起源的地址清單。 +- `topics`: `Array of DATA`,(可選)32 位元組陣列 `DATA` 主題。 主題與順序相關。 每個主題也可以為帶有「或」選項的 DATA 陣列。 + +```js +params: [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0x8888f1f195afa192cfee860698584c030f4c9db1", + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + null, + [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc", + ], + ], + }, +] +``` + +**傳回** `QUANTITY` - 篩選條件 ID。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newBlockFilter {#eth_newblockfilter} + +在節點中建立一個篩選條件,以在新區塊到達時發出通知。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 + +**參數** 無 + +**傳回** `QUANTITY` - 篩選條件 ID。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} + +在節點中建立一個篩選條件,以在新的待處理交易到達時發出通知。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 + +**參數** 無 + +**傳回** `QUANTITY` - 篩選條件 ID。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_uninstallFilter {#eth_uninstallfilter} + +根據給定 ID 解除安裝篩選條件。 當不再需要監視時,應始終對其進行呼叫。 另外,當在一段時間內未使用 [eth_getFilterChanges](#eth_getfilterchanges) 請求篩選條件時,篩選條件會逾時。 + +**參數** + +1. `QUANTITY` - 篩選條件 ID。 + +```js +params: [ + "0xb", // 11 +] +``` + +**傳回** `Boolean` - 如果成功解除安裝篩選條件,則為 `true`,否則為 `false`。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_getFilterChanges {#eth_getfilterchanges} + +篩選條件輪詢方法,傳回自從上次輪詢後產生的日誌陣列。 + +**參數** + +1. `QUANTITY` - 篩選條件 ID。 + +```js +params: [ + "0x16", // 22 +] +``` + +**傳回** `Array` - 日誌物件陣列,或如果自上次輪詢沒有任何變更,則為空陣列。 + +- 對於使用 `eth_newBlockFilter` 建立的篩選條件,傳回值是區塊雜湊值(`DATA`,32 位元組),例如 `["0x3454645634534..."]`。 +- 對於使用 `eth_newPendingTransactionFilter` 建立的篩選條件,傳回值是交易雜湊值(`DATA`,32 位元組),例如 `["0x6345343454645..."]`。 +- 對於使用 `eth_newFilter` 建立的篩選條件,日誌是包含下列參數的物件: + - `removed`: `TAG` - 當日誌由於鏈重組被移除時,為 `true`。 如果是有效日誌,則為 `false`。 + - `logIndex`: `QUANTITY` - 表示區塊內日誌索引位置的整數。 當為待處理日誌時,為 `null`。 + - `transactionIndex`: `QUANTITY` - 表示從中建立日誌的交易索引位置的整數。 當為待處理日誌時,為 `null`。 + - `transactionHash`: `DATA`,32 位元組 - 從中建立此日誌的交易的雜湊值。 當為待處理日誌時,為 `null`。 + - `blockHash`: `DATA`,32 位元組 - 此日誌所在區塊的雜湊值。 當為待處理時,為 `null`。 當為待處理日誌時,為 `null`。 + - `blockNumber`: `QUANTITY` - 此日誌所在的區塊編號。 當為待處理時,為 `null`。 當為待處理日誌時,為 `null`。 + - `address`: `DATA`,20 位元組 -此日誌的來源地址。 + - `data`: `DATA` - 包含零個或多個 32 位元組非索引日誌引數。 + - `topics`: `Array of DATA` - 索引日誌引數的 0 到 4 個 32 位元組 `DATA` 陣列。 (在 _solidity_:第一個主題是事件簽章的_雜湊值_(例如 `Deposit(address,bytes32,uint256)`),除非你使用說明符 `anonymous` 宣告了該事件)。 +- **範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": [{ + "logIndex": "0x1", // 1 + "blockNumber":"0x1b4", // 436 + "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf", + "transactionIndex": "0x0", // 0 + "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "data":"0x0000000000000000000000000000000000000000000000000000000000000000", + "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"] + },{ + ... + }] +} +``` + +### eth_getFilterLogs {#eth_getfilterlogs} + +傳回與給定 ID 之篩選條件相符的所有日誌的陣列。 + +**參數** + +1. `QUANTITY` - 篩選條件 ID。 + +```js +params: [ + "0x16", // 22 +] +``` + +**傳回** 請參閱 [eth_getFilterChanges](#eth_getfilterchanges) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' +``` + +結果請參閱 [eth_getFilterChanges](#eth_getfilterchanges) + +### eth_getLogs {#eth_getlogs} + +傳回與給定篩選條件物件相符的所有日誌的陣列。 + +**參數** + +1. `Object` - 篩選條件選項: + +- `fromBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 +- `toBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 +- `address`: `DATA|Array`,20 位元組 - (可選)合約地址或日誌起源的地址清單。 +- `topics`: `Array of DATA`,(可選)32 位元組陣列 `DATA` 主題。 主題與順序相關。 每個主題也可以為帶有「或」選項的 DATA 陣列。 +- `blockhash`: `DATA`,32 位元組 - (可選,**future**),新增 EIP-234 後,`blockHash` 將是一個新的篩選條件選項,會將傳回的日誌限制為具有 32 位元組雜湊值 `blockHash` 的單一區塊。 使用 `blockHash` 等於 `fromBlock` = `toBlock` = 具有雜湊值 `blockHash` 的區塊編號。 如果 `blockHash` 出現在篩選條件中,則 `fromBlock` 和 `toBlock` 都不允許使用。 + +```js +params: [ + { + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + ], + }, +] +``` + +**傳回** 請參閱 [eth_getFilterChanges](#eth_getfilterchanges) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' +``` + +結果請參閱 [eth_getFilterChanges](#eth_getfilterchanges) + +## 使用範例 {#usage-example} + +### 使用 JSON_RPC 部署合約 {#deploying-contract} + +這部分示範如何只使用遠端程序呼叫介面部署合約。 有其他的部署合約方法可以消除這種複雜性,例如,使用建置在遠端程序呼叫介面之上的程式庫,例如 [web3.js](https://web3js.readthedocs.io/) 和 [web3.py](https://github.com/ethereum/web3.py)。 雖然在抽象化之後,一般來說比較容易理解和較不易出錯,但理解在後台發生了什麼是有益的。 + +下面是一個名為 `Multiply7` 的簡單智慧型合約,將使用 JSON-RPC 介面把其部署到以太坊節點。 本教學假設讀者已經執行一個 Geth 節點。 更多節點和用戶端的資訊可以在[這裡](/developers/docs/nodes-and-clients/run-a-node)獲得。 請參考個別的[用戶端](/developers/docs/nodes-and-clients/)文件瞭解如何為非 Geth 用戶端開啟 HTTP JSON-RPC。 大多數用戶端預設在 `localhost:8545` 上提供服務。 + +```javascript +contract Multiply7 { + event Print(uint); + function multiply(uint input) returns (uint) { + Print(input * 7); + return input * 7; + } +} +``` + +首先,確定啟用了 HTTP 遠端程序呼叫介面。 也就是說,在啟動時我們為 Geth 提供 `--http` 旗標。 在這個例子中,我們使用私有開發鏈的 Geth 節點。 使用這個方法,將不需要真實網路上的以太幣。 + +```bash +geth --http --dev console 2>>geth.log +``` + +這將在 `http://localhost:8545` 上啟動 HTTP 遠端程序呼叫介面。 + +我們可以使用 [curl](https://curl.se) 擷取 Coinbase 地址和餘額來驗證介面正在執行。 請注意,這些範例中的資料與你的本地節點有所不同。 如果你想嘗試這些命令,請將第二個 curl 請求中的請求參數替換為第一個請求返回的結果。 + +```bash +curl --data '{"jsonrpc":"2.0","method":"eth_coinbase", "id":1}' -H "Content-Type: application/json" localhost:8545 +{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]} + +curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 +{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"} +``` + +由於數字是十六進位編碼的,因此餘額以十六進位字串形式形式傳回(單位為 wei)。 如果想要以數位形式獲得以太幣餘額,可以使用 Geth 控制台中的 web3。 + +```javascript +web3.fromWei("0x1639e49bba16280000", "ether") +// "410" +``` + +現在我們的私有開發鏈上有一些以太幣,我們可以部署合約了。 第一步是把 Multiply7 合約編譯成可以傳送到以太坊虛擬機的字元組程式碼。 要安裝 Solidity 編譯器 solc,請參考 [Solidity 文件](https://docs.soliditylang.org/en/latest/installing-solidity.html)。 (為符合[我們的範例中使用的編譯器版本](https://github.com/ethereum/solidity/releases/tag/v0.4.20),你可能想要使用較舊的 `solc` 版本。) + +下一步是把 Multiply7 合約編譯成可以傳送到以太坊虛擬機的字元組程式碼。 + +```bash +echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin + +======= :Multiply7 ======= +Binary: +6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029 +``` + +現在我們有了編譯後的程式碼,我們需要確定部署程式碼需要花費多少燃料。 遠端程序呼叫介面有 `eth_estimateGas` 方法可以給我們預估值。 + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":5,"result":"0x1c31e"} +``` + +最後部署合約。 + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545 +{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"} +``` + +交易被節點接受且傳回交易雜湊值。 雜湊值可以用來追蹤交易。 下一步是確定將合約部署至的地址。 每一個被執行的交易將會產生一份收據。 此收據包含各種關於交易的資訊,例如:交易包含在哪一個區塊中,以及以太坊虛擬機使用多少燃料。 假如交易建立一個合約,交易也將包含合約地址。 我們可以用 `eth_getTransactionReceipt` 遠端程序呼叫方法擷取收據。 + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}} +``` + +我們的合約是建立在 `0x4d03d617d700cf81935d7f797f4e2ae719648262`。 結果為 null 而不是收據時,表示交易尚未列入區塊中。 稍等一下,並檢查你的共識用戶端是否正常執行,然後重試一次。 + +#### 與智能合約互動 {#interacting-with-smart-contract} + +在此範例中,我們將使用 `eth_sendTransaction` 向合約的 `multiply` 方法傳送交易。 + +`eth_sendTransaction` 需要若干引數,特別是 `from`、`to` 和 `data`。 `From` 是我們帳戶的公共地址,`to` 是合約地址。 `data` 引數包含有效負載,定義了必須呼叫哪個方法以及使用哪些引數。 這是 [ABI(應用程式二進位介面)](https://docs.soliditylang.org/en/latest/abi-spec.html)發揮作用的地方。 應用程式二進位介面是定義如何為以太坊虛擬機定義和編碼資料的 JSON 檔案。 + +有效負載中的位元組定義要呼叫合約中的哪個方法。 這是函式名稱及其引數類型的 Keccak 雜湊值的前 4 個位元組(十六進位編碼)。 Multiply 函式接受 uint,它是 uint256 的別名。 我們得到以下結果: + +```javascript +web3.sha3("multiply(uint256)").substring(0, 10) +// "0xc6888fa1" +``` + +下一步是對引數進行編碼。 只有一個 uint256,例如值 6。 應用程式二進制介面有一個部分指定如何對 uint256 類型進行編碼。 + +`int: enc(X)` 是 X 的高位元組在前二進位補碼編碼,對於負 X 在高位(左側)填充 0xff,對於正 X 填充零 > 位元組,使得長度為 32 位元組的倍數。 + +這編碼為 `000000000000000000000000000000000000000000000000000000000000006`。 + +結合函式選擇器和已編碼的引數,我們的資料如下:`0xc6888fa10000000000000000000000000000000000000000000000000000000000000006`。 + +現在可將其傳送到節點: + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545 +{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"} +``` + +由於傳送了交易,因此傳回了交易雜湊值。 擷取收據得到以下內容: + +```javascript +{ + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + contractAddress: null, + cumulativeGasUsed: 22631, + gasUsed: 22631, + logs: [{ + address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + data: "0x000000000000000000000000000000000000000000000000000000000000002a", + logIndex: 0, + topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 + }], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 +} +``` + +收據包含了日誌。 此日誌由以太坊虛擬機在交易執行時產生並包含在收據中。 `multiply` 函式顯示 `Print` 事件在輸入乘以 7 時觸發。 由於 `Print` 事件的引數是 uint256,我們可以根據應用程式二進位介面規則對其進行解碼,得到預期的十進位數 42。 除了資料之外,值得注意的是,主題可用於確定哪個事件建立了日誌: + +```javascript +web3.sha3("Print(uint256)") +// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" +``` + +這只是對一些最常見任務的簡要介紹,演示了 JSON-RPC 的直接使用。 + +## 相關主題 {#related-topics} + +- [JSON-RPC 規範](http://www.jsonrpc.org/specification) +- [節點和用戶端](/developers/docs/nodes-and-clients/) +- [Javascript 應用程式介面](/developers/docs/apis/javascript/) +- [後端應用程式介面](/developers/docs/apis/backend/) +- [執行用戶端](/developers/docs/nodes-and-clients/#execution-clients) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/block-explorers/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/block-explorers/index.md" new file mode 100644 index 00000000000..f31b67ad51f --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/block-explorers/index.md" @@ -0,0 +1,257 @@ +--- +title: 區塊瀏覽器 +description: 區塊瀏覽器簡介,這是你進入區塊鏈資料世界的入口,在這裡你可以查詢有關交易、帳戶、合約等資訊。 +lang: zh-tw +sidebarDepth: 3 +--- + +區塊瀏覽器是你存取以太坊資料的入口。 你可以使用區塊瀏覽器來查看區塊、交易、驗證者、帳戶及其他鏈上活動的即時資料。 + +## 基本資訊 {#prerequisites} + +你應該瞭解以太坊的基本概念,以便能夠理解區塊瀏覽器提供的資料。 推薦你從[以太坊簡介](/developers/docs/intro-to-ethereum/)開始。 + +## 服務 {#services} + +- [Etherscan](https://etherscan.io/) -_ 也提供中文、韓文、俄文及日文版_ +- [3xpl](https://3xpl.com/ethereum) +- [Beaconcha.in](https://beaconcha.in/) +- [Blockchair](https://blockchair.com/ethereum) -_也提供西班牙文、法文、義大利文、荷蘭文、葡萄牙文、俄文、中文及波斯文版_ +- [Blockscout](https://eth.blockscout.com/) +- [Chainlens](https://www.chainlens.com/) +- [DexGuru Block Explorer](https://ethereum.dex.guru/) +- [Etherchain](https://www.etherchain.org/) +- [Ethernow](https://www.ethernow.xyz/) +- [Ethplorer](https://ethplorer.io/) -_ 也提供中文、西班牙文、法文、土耳其文、俄文、韓文及越南文版_ +- [EthVM](https://www.ethvm.com/) +- [OKLink](https://www.oklink.com/eth) +- [Rantom](https://rantom.app/) + +## 開源工具 {#open-source-tools} + +- [Otterscan](https://otterscan.io/) +- [lazy-etherscan](https://github.com/woxjro/lazy-etherscan) + +## 數據資料 {#data} + +以太坊的設計是透明的,因此一切都是可驗證的。 區塊瀏覽器提供了獲取此資訊的介面。 如果你需要這些資料,這適用於以太坊主網和測試網。 資料被分為執行資料和共識資料。 執行資料指的是特定區塊中已被執行的交易。 共識資料指的是區塊本身及提出區塊的驗證者。 + +以下是可以從區塊瀏覽器取得的資料類型的摘要。 + +### 執行資料 {#execution-data} + +新區塊每 12 秒會添加到以太坊上(除非區塊提議者漏掉了其提議輪次),因此接近恆定的資料流被加到區塊瀏覽器上。 區塊包含許多你可能覺得有用的重要資料: + +**標準資料** + +- 區塊高度 - 目前區塊建立時,區塊的編號及區塊鏈的長度(以區塊為單位) +- 時間戳 - 區塊被提議的時間 +- 交易 - 被打包進區塊的交易數量 +- 費用接收者 - 從交易中收到燃料費與小費的地址 +- 區塊獎勵 - 提出區塊的驗證者獲得的以太幣數量 +- 大小 - 區塊中的資料大小(以位元組計算) +- 消耗的燃料 - 區塊中交易消耗的燃料單位總數 +- 燃料限制 - 區塊中交易設定的總燃料限制 +- 每單位燃料的基本費用 - 讓交易能夠打包進區塊所需的最低乘數 +- 銷毀費用 - 區塊中銷毀的以太幣數量 +- 額外資料 - 任何建置者加進區塊的額外資料 + +**進階資料** + +- 雜湊 - 代表區塊頭(區塊的唯一識別碼)的密碼學雜湊。 +- 父雜湊 - 目前區塊之前區塊的雜湊 +- StateRoot - 默克爾樹的根雜湊,存儲了整個系統的狀態 + +### Gas費 {#gas} + +區塊瀏覽器不僅會為你提供有關交易和區塊中燃料使用情況的資料,而且有些還會提供有關網路當前燃料價格的資訊。 這將幫助瞭解網路使用情況、提交安全交易並且不會超支燃料。 尋找可以幫助你將此資訊輸入產品介面的應用程式介面。 燃料的特定資料包括: + +- 安全但緩慢的交易所需的預估燃料單位(+ 預估價格和持續時間) +- 中等速度交易所需的預估燃料單位(+ 預估價格和持續時間) +- 快速交易所需的預估燃料單位(+ 預估價格和持續時間) +- 基於燃料價格的平均確認時間 +- 正在消耗燃料的合約 - 換句話說,正在網路上大量使用的熱門產品 +- 正在花費燃料的帳戶 - 換句話說,頻繁使用網路的使用者 + +### 交易 {#transactions} + +區塊瀏覽器已成為追蹤交易進度的常見方式。 這是因為你可以取得的詳細程度提供了額外的確定性。 交易資料包括: + +**標準數據** + +- 交易雜湊 - 當交易被提交時產生的雜湊 +- 狀態 - 指示交易為待處理、失敗還是成功 +- 區塊 - 交易被打包進的區塊 +- 時間戳 - 交易被納入由驗證者提議的區塊的時間 +- 發送者 - 提交此交易的帳戶地址 +- 接收者 - 接收者或與交易互動的智慧型合約的地址 +- 轉移的代幣 - 做為交易的一部分被轉移的代幣清單 +- 價值 - 轉移的以太幣總價值 +- 交易費用 - 支付給驗證者處理交易的金額(計算方法為燃料價格\*使用的燃料) + +**進階數據** + +- 燃料限制 - 此交易最高可消耗多少單位的燃料 +- 使用的燃料 - 交易實際消耗的燃料單位量 +- 燃料價格 - 每單位燃料的價格 +- 隨機數 - `from` 地址的交易編號(注意,隨機數從 0 開始算,所以隨機數 `100` 實際上是此帳戶提交的第 101 筆交易) +- 輸入資料 - 交易所需的任何額外資訊 + +### 帳戶 {#accounts} + +你可以存取有關帳戶的大量資料。 這就是為什麼通常建議使用多個帳戶,以便你的資產和價值不易被追蹤。 還有一些解決方案正在開發中,以使交易和帳戶活動更加私密。 但以下是帳戶可用的資料: + +**使用者帳戶:** + +- 帳戶地址 - 你可以向其中發送資金的公開地址 +- 以太幣餘額 - 該帳戶的以太幣餘額 +- 以太幣總價值 - 以太幣的價值 +- 代幣 - 與該帳戶有關的代幣及其價值 +- 交易記錄 - 此帳戶作為發送者或接受者的所有交易的清單 + +**智慧型合約** + +雖然智慧型合約帳戶擁有使用者帳戶將擁有的所有資料,但某些區塊瀏覽器甚至還會顯示一些程式碼資訊。 範例包含: + +- 合約建立者 - 將合約部署至主網的地址 +- 建立交易 - 包括將合約部署到主網的交易 +- 原始程式碼 - 智慧型合約的 Solidity 或 Vyper 程式碼 +- 合約 ABI - 合約的應用程式二進位介面 - 合約進行的呼叫和接收的資料 +- 合約建立程式碼 - 智慧型合約經編譯的位元組碼 - 在你編譯以 Solidity 或 Vyper 等語言編寫的智慧型合約時產生 +- 合約事件 - 智慧型合約中呼叫的方法的歷史紀錄 - 基本上是查看合約如何使用以及使用頻率的一種方式 + +### 代幣 {#tokens} + +代幣是一種合約,因此它們具有與智慧型合約類似的資料。 但因為它們有價值並且可以交易,因此有額外的資料點: + +- 類型 - 是 ERC-20、ERC-721 或其他代幣標準 +- 價格 - 如果是 ERC-20,就會有目前市場價值 +- 市值 - 如果是 ERC-20,就會有市值(計算方法為價格\*總供應量) +- 總供應量 - 流通的代幣數量 +- 持有者 - 持有該代幣的地址數量 +- 轉移 - 代幣在帳戶間被轉移的次數 +- 交易記錄 - 代幣的所有交易歷史記錄 +- 合約地址 - 部署到主網的代幣的地址 +- 小數 - ERC-20 代幣是可分割的,且具有小數位 + +### 網路 {#network} + +一些區塊資料更全面地關注以太坊的健康狀況。 + +- 總交易數量 - 自以太坊建立以來的交易數量 +- 每秒交易數量 - 每秒可處理的交易數量 +- 以太幣價格 - 目前 1 個以太幣的價值 +- 以太幣總供應量 - 流通的以太幣數量 - 請記得,當新區塊建立時,新以太幣會被做為區塊獎勵而產生 +- 市值 - 價格\*供應量的計算結果 + +## 共識層資料 {#consensus-layer-data} + +### 時期 {#epoch} + +由於安全考量,會在每個時期(每 6.4 分鐘)結束時建立隨機化驗證者委員會。 時期資料包含: + +- 時期編號 +- 最終狀態 - 時期是否已完成(是/否) +- 時間 - 時期結束的時間 +- 證明 - 時期中的證明數量(對時隙內區塊的投票) +- 存款 - 時期內包含的以太幣存款數量(驗證者必須質押以太幣才能成為驗證者) +- 罰沒 - 對區塊提議者或證明者的處罰次數 +- 投票參與 - 用於證明區塊的質押以太幣數量 +- 驗證者 - 在該時期中活躍的驗證者數量 +- 驗證者平均餘額 - 活躍驗證者的平均餘額 +- 時隙 - 時期中包含的時隙數量(時隙包含一個有效區塊) + +### 時隙 {#slot} + +時隙是建立區塊的機會,每個時隙可用的資料包括: + +- 時期 - 時隙在其中有效的時期 +- 時隙編號 +- 狀態 - 時隙狀態(已提議/缺失) +- 時間 - 時隙的時間戳 +- 提議者 - 在該時隙提議區塊的驗證者 +- 區塊根 - 信標區塊的雜湊樹根 +- 父根 - 前一個區塊的雜湊 +- 狀態根 - 信標狀態的雜湊樹根 +- 簽名 +- Randao 揭示 +- Graffiti - 區塊提議者可以在其區塊提議中包含 32 位元組的訊息 +- 執行資料 + - 區塊雜湊 + - 存款計數 + - 存款根 +- 證明 - 此時隙中的區塊的證明數量 +- 存款 - 此時隙內的存款數量 +- 自願退出 - 此時隙內退出的驗證者數量 +- 罰沒 - 對區塊提議者或證明者的處罰次數 +- 投票 - 此時隙中為區塊投票的驗證者 + +### 區塊 {#blocks-1} + +權益證明將時間分割為時期與時隙。 這意味著新資料! + +- 提議者 - 經演算法選出的提議新區塊的驗證者 +- 時期 - 提議區塊的時期 +- 時隙 - 提議區塊的時隙 +- 證明 - 時隙中包含的證明數量 - 證明就像投票一樣,表示區塊已準備好進入信標鏈 + +### 驗證者 {#validators} + +驗證者負責在時隙內提議區塊並證明區塊。 + +- 驗證者編號 - 代表驗證者的唯一編號 +- 目前餘額 - 驗證者的餘額(包含獎勵) +- 有效餘額 - 驗證者用於質押的餘額 +- 收入 - 驗證者收到的獎勵或處罰 +- 狀態 - 驗證者目前是否在線和是否活躍 +- 證明有效性 - 驗證者的證明被加入鏈上的平均時間 +- 啟用資格 - 驗證者可以開始驗證的日期(和時期) +- 啟用開始時間 - 驗證者的啟用日期(和時期) +- 提議的區塊 - 驗證者提議的區塊 +- 證明 - 驗證者提供的證明 +- 存款 - 發送者地址、交易雜湊、區塊編號、時間戳、驗證者的質押存款金額及狀態 + +### 證明 {#attestations} + +證明是投票「同意」將區塊包含在鏈中。 它們的資料與證明紀錄和進行證明的驗證者相關。 + +- 時隙 - 證明發生的時隙 +- 委員會索引 - 在給定時隙的委員會的索引 +- 聚合位元 - 表示證明中所有參與驗證者的聚合證明 +- 驗證者 - 提供證明的驗證者 +- 信標區塊根 - 指向驗證者正在證明的區塊 +- 來源 - 指向最新的已證明時期 +- 目標 - 指向最新的時期邊界 +- 簽名 + +### 網路 {#network-1} + +共識層頂層資料包括以下內容: + +- 目前時期 +- 目前時隙 +- 活躍驗證者 - 活躍驗證者的數量 +- 等待中驗證者 - 等待啟用的驗證者數量 +- 質押的以太幣 - 網路中質押的以太幣數量 +- 平均餘額 - 驗證者的平均以太幣餘額 + +## 區塊瀏覽器 {#block-explorers} + +- [Etherscan](https://etherscan.io/) - 可用於擷取以太坊主網及 Goerli 測試網資料的區塊瀏覽器 +- [3xpl](https://3xpl.com/ethereum) - 一個允許下載其資料集的無廣告開源以太坊瀏覽器 +- [Beaconcha.in](https://beaconcha.in/) -用於以太坊主網及 Goerli 測試網的開源區塊瀏覽器 +- <0>Blockchair -- 最私密的以太坊瀏覽器。 也用於排序和篩選(記憶體池)資料 +- [Etherchain](https://www.etherchain.org/) - 以太坊主網的區塊瀏覽器 +- [Ethplorer](https://ethplorer.io/) - 專為以太坊主網及 Kovan 測試網代幣打造的區塊瀏覽器 +- [Rantom](https://rantom.app/) - 方便使用的開源去中心化金融及非同質化代幣交易檢視器,可提供詳細的訊息 +- [Ethernow](https://www.ethernow.xyz/) - 即時交易瀏覽器,讓你能夠查看以太坊主網鏈前層 + +## 延伸閱讀 {#further-reading} + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ + +## 相關主題 {#related-topics} + +- [交易](/developers/docs/transactions/) +- [帳戶](/developers/docs/accounts/) +- [網路](/developers/docs/networks/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/index.md" new file mode 100644 index 00000000000..4c68011fcc3 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/index.md" @@ -0,0 +1,55 @@ +--- +title: 數據分析 +description: 如何獲取鏈上分析和資料以供你的去中心化應用程式使用 +lang: zh-tw +--- + +## 簡介 {#Introduction} + +隨著網路使用量的增長,鏈上資料中將存在越來越多有價值的信息。 隨著資料量的迅速增加,計算和匯總這些資訊以報告或驅動去中心化應用程式可能變得非常耗時且繁重。 + +利用現有的資料提供者可以加快開發過程,產生更準確的結果,並減少持續的維護工作。 這將使團隊能夠專注於其專案要提供的核心功能。 + +## 基本資訊 {#prerequisites} + +你應該瞭解[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)的基本概念,以便更好地理解在資料分析背景中如何使用它們。 此外,熟悉[索引](/glossary/#index)的概念以瞭解它們對系統設計所帶來的好處。 + +在架構基礎方面,瞭解[應用程式介面](https://www.wikipedia.org/wiki/API)和 [ REST ](https://www.wikipedia.org/wiki/Representational_state_transfer) 的基本概念,即使只是理論上的也很重要。 + +## 區塊瀏覽器 {#block-explorers} + +許多[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)提供 [RESTful ](https://www.wikipedia.org/wiki/Representational_state_transfer) [應用程式介面](https://www.wikipedia.org/wiki/API)閘道,這些閘道能夠讓開發者查看區塊、交易、驗證者、帳戶及其他鏈上活動的即時資料。 + +開發者可以進一步處理和轉換這些資料,以提供使用者獨特的見解和與[區塊鏈](/glossary/#blockchain)的互動。 例如,[Etherscan](https://etherscan.io) 在每個 12 秒時隙都提供執行和共識資料。 + +## 圖表 {#the-graph} + +[Graph Network](https://thegraph.com/) 是一個去中心化的索引協議,用於組織區塊鏈資料。 與其建立和管理鏈下的集中式資料儲存來匯總鏈上資料,使用 The Graph 可以讓開發者構建完全在公共基礎設施上運行的無伺服器應用程式。 + +透過使用 [GraphQL](https://graphql.org/),開發者可以查詢稱為子圖的精選開放應用程式介面,以獲取驅動其去中心化應用程式所需的必要資訊。 透過查詢這些已索引的子圖,報告及去中心化應用程式不僅能獲得效能和可擴充性的好處,還能享受由網路共識提供的內建準確性。 隨著新改進和/或子圖新增至網路中,你的專案可以迅速迭代,以利用這些增強功能。 + +## 用戶的多樣化 + +[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity/)對以太坊網路的整體健康至關重要,因為它提供了針對錯誤和漏洞的韌性。 目前有幾個用戶端多樣性儀表板,包括 [clientdiversity.org](https://clientdiversity.org/)、[rated.network](https://www.rated.network)、[supermajority.info](https://supermajority.info//) 和 [Ethernodes](https://ethernodes.org/)。 + +## Dune Analytics {#dune-analytics} + +[Dune Analytics](https://dune.com/) 將區塊鏈資料預處理成關聯資料庫(PostgreSQL 和 DatabricksSQL)表格,允許使用者使用 SQL 查詢區塊鏈資料並根據查詢結果建立儀表板。 鏈上資料組織成 4 個原始表格:`blocks`、`transactions`、(事件)`logs` 和(呼叫)`traces`。 常見的合約和協定已被解碼,而每個合約和協定都有自己的事件和呼叫表格集。 這些事件和呼叫表格被進一步處理並按協定類型組織成抽象表格,例如去中心化交易所、借貸、穩定幣等。 + +## SubQuery 網路 {#subquery-network} + +[SubQuery](https://subquery.network/) 是一個領先的資料索引器服務,為開發者提供快速、可靠、去中心化且自訂的應用程式介面以支援其 Web3 專案。 SubQuery 賦能來自超過 165 個生態系統(包括以太坊)的開發者,提供豐富的索引資料,以構建直觀且沉浸式的使用者體驗。 SubQuery 網路為你提供銳不可當、堅韌且有去中心化基礎設施網路的應用程式。 使用 SubQuery 的區塊鏈開發者工具組,構建未來的 Web3 應用程式,無需花時間為資料處理活動建立自訂後端。 + +首先,請瀏覽[以太坊快速入門指南](https://academy.subquery.network/quickstart/quickstart_chains/ethereum-gravatar.html),在本地 Docker 環境中快速開始索引以太坊區塊鏈資料以進行測試,然後再上線到 [SubQuery 的受管理服務](https://managedservice.subquery.network/) 或 [SubQuery 的去中心化網路](https://app.subquery.network/dashboard)。 + +## Ethernow - 記憶體池資料程式 {#ethernow} +[Blocknative](https://www.blocknative.com/) 提供了對其以太坊歷史[記憶體池資料存檔](https://www.ethernow.xyz/mempool-data-archive)的開放存取。 這使研究人員和社群公益專案能夠探索以太坊主網的鏈前層。 該資料集得到積極維護,代表了以太坊生態系統中記憶體池交易事件的最全面歷史紀錄。 請參見 [Ethernow](https://www.ethernow.xyz/) 瞭解更多資訊。 + +## 衍生閱讀 {#further-reading} + +- [Graph Network 概覽](https://thegraph.com/docs/en/about/network/) +- [Graph Query 訓練場](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) +- [EtherScan 上的應用程式介面程式碼範例](https://etherscan.io/apis#contracts) +- [Beaconcha.in 信標鏈瀏覽器](https://beaconcha.in) +- [Dune 基礎知識](https://docs.dune.com/#dune-basics) +- [SubQuery 以太坊快速入門指南](https://academy.subquery.network/indexer/quickstart/quickstart_chains/ethereum-gravatar.html) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/development-networks/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/development-networks/index.md" new file mode 100644 index 00000000000..5f118003e4f --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/development-networks/index.md" @@ -0,0 +1,83 @@ +--- +title: 開發網路 +description: 可用於協助構建以太坊應用程式的開發網路和工具的概觀。 +lang: zh-tw +--- + +當使用智慧型合約建立以太坊應用程式時,你需要在本地網路上運行該應用程式,以在部署之前瞭解其的工作原理。 + +與在電腦上執行本地伺服器進行 Web 開發的方式類似,你可以使用開發網路建立本機區塊鏈執行個體來測試你的去中心化應用程式。 這些以太坊開發網路提供的功能比公共測試網的迭代速度快得多(例如,你不需要從測試網水龍頭取得以太幣)。 + +## 基本資訊 {#prerequisites} + +在深入瞭解開發網路之前,應該先瞭解[以太坊堆疊的基礎知識](/developers/docs/ethereum-stack/)和[以太坊網路](/developers/docs/networks/)。 + +## 什麼是開發網路? {#what-is-a-development-network} + +開發網路本質上是專為本地開發而設計的以太坊用戶端(以太坊的實作)。 + +**為什麼不在本地運行一個標準的以太坊節點呢?** + +你_可以_[運行節點](/developers/docs/nodes-and-clients/#running-your-own-node),但由於開發網路是專門為開發而建立,它們往往會具有一些快速方便的功能,例如: + +- 確定性地用資料植入你的本地區塊鏈(例如具有以太幣餘額的帳戶) +- 用接收的每筆交易,依照順序及零延遲即時產生區塊 +- 增強的偵錯和日誌記錄功能 + +## 可用工具 {#available-projects} + +**注意**:大多數[開發架構](/developers/docs/frameworks/)包含一個內建開發網路。 推薦你從一個架構開始[設定你的本地開發環境](/developers/local-environment/)。 + +### Ganache {#ganache} + +快速啟動個人以太坊區塊鏈,你可以使用該區塊鏈運行測試、執行命令和檢查狀態,同時控制鏈的運作方式。 + +Ganache 提供桌面應用程式 (Ganache UI) 和命令列工具 (`ganache-cli`)。 它是 Truffle 工具套件的一部分。 + +- [網站](https://www.trufflesuite.com/ganache) +- [Github](https://github.com/trufflesuite/ganache) +- [文件](https://www.trufflesuite.com/docs/ganache/overview) + +### Hardhat 網路 {#hardhat-network} + +專為開發而設計的本地以太坊網路。 它讓你能夠部署合約、運行測試和偵錯程式碼。 + +Hardhat 網路內建了 Hardhat,這是一個專業以太坊開發環境。 + +- [官網](https://hardhat.org/) +- [GitHub](https://github.com/nomiclabs/hardhat) + +### 本地信標鏈 {#local-beacon-chains} + +一些共識用戶端具有內建工具,用於啟動本地信標鏈以進行測試。 Lighthouse、Nimbus 和 Lodestar 的說明如下: + +- [使用 Lodestar 的本地測試網](https://chainsafe.github.io/lodestar/usage/local/) +- [使用 Lighthouse 的本地測試網](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) +- [使用 Nimbus 的本地測試網](https://github.com/status-im/nimbus-eth1/blob/master/fluffy/docs/local_testnet.md) + +### 公共以太坊測試鏈 {#public-beacon-testchains} + +以太坊還有兩個維護中的公共測試實作​​:Goerli 和 Sepolia。 推薦使用受長期受支援的測試網 Goerli,任何人都可以自由在其上驗證。 Sepolia 是一個較新、規模較小的測試鏈,預計在可見未來也會得到維護。Sepolia 上有獲得許可的驗證者集,這意味著不可以對此測試網上的新驗證者進行常規存取。 Ropsten 鏈預計將於 2022 年第四季棄用,Rinkeby 鏈預計將於 2023 年第二/第三季棄用。 + +- [Goerli 質押啟動面板](https://goerli.launchpad.ethereum.org/) +- [Ropsten、Rinkeby 和 Kiln 棄用公告](https://blog.ethereum.org/2022/06/21/testnet-deprecation) + +### Kurtosis 以太坊套件 {#kurtosis} + +Kurtosis 是一個用於多容器測試環境的構建系統,讓開發者能夠在本地建立區塊鏈網路的可複現執行個體。 + +以太坊 Kurtosis 套件可用於透過 Docker 或 Kubernetes 快速具現化一個可參數化、高擴展性的私人以太坊測試網。 此套件支援所有主要的執行層 (EL) 和共識層 (CL) 用戶端。 Kurtosis 從容處理代表網路的所有本地端口映射和服務連線,以用於與以太坊核心基礎設施相關的驗證和測試工作流程。 + +- [以太坊網路套件](https://github.com/kurtosis-tech/ethereum-package) +- [網站](https://www.kurtosis.com/) +- [GitHub](https://github.com/kurtosis-tech/kurtosis) +- [文件](https://docs.kurtosis.com/) + +## 衍生閱讀 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [開發架構](/developers/docs/frameworks/) +- [設定本地開發環境](/developers/local-environment/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ethereum-stack/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ethereum-stack/index.md" new file mode 100644 index 00000000000..6cd6a777150 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ethereum-stack/index.md" @@ -0,0 +1,61 @@ +--- +title: 以太坊堆疊簡介 +description: 演練以太坊堆疊的不同層以及它們如何組合在一起。 +lang: zh-tw +--- + +與任何軟體堆疊一樣,完整的「以太坊堆疊」將根據你的目標而因專案而異。 + +然而,以太坊的核心元件有助於為軟體應用程式如何與以太坊區塊鏈互動提供思維模型。 理解堆疊的各層將幫助瞭解將以太坊整合到軟體專案中的不同方式。 + +## 等級 1:以太坊虛擬機器 {#ethereum-virtual-machine} + +[以太坊虛擬機器](/developers/docs/evm/)是以太坊上智慧型合約的執行階段環境。 以太坊區塊鏈上的所有智慧型合約和狀態變更均由<0>交易執行。 以太坊虛擬機器負責處理以太坊網路上的所有交易。 + +與任何虛擬機器一樣,以太坊虛擬機器在執行程式碼和執行機器(以太坊節點)之間建立了一個抽象層。 目前,以太坊虛擬機器運行在分佈於全球的數千個節點上。 + +在後台,以太坊虛擬機器使用一組操作碼指令來執行特定任務。 這些(140 個獨特的)操作碼讓以太坊虛擬機器是**圖靈完備**的,這表示只要提供足夠資源,以太坊虛擬機器就可以進行任何運算。 + +作為去中心化應用程式開發者,不需要瞭解太多關於以太坊虛擬機器的知識,只需要瞭解其存在以及能夠可靠地為以太坊上的所有應用程式提供無停機的支援。 + +## 等級 2:智慧型合約 {#smart-contracts} + +[智慧型合約](/developers/docs/smart-contracts/)為在以太坊區塊鏈上運行的可執行程式。 + +智慧型合約使用特定[程式語言](/developers/docs/smart-contracts/languages/)來編譯至以太坊虛擬機器位元組碼(稱為操作碼的低階機器指令)。 + +智慧型合約不僅充當開源程式庫,而且本質上是始終運行且無法關閉的開放應用程式介面服務。 智慧型合約提供使用者和應用程式([去中心化應用程式](/developers/docs/dapps/))無需許可即可與之互動的公共功能。 任何應用程式都可以與已部署的智慧型合約整合以構成功能,例如新增[資料饋送](/developers/docs/oracles/)或支援代幣兌換。 此外,任何人都可以將新的智慧型合約部署到以太坊,以新增自訂功能來滿足其應用程式的需求。 + +作為去中心化應用程式開發者,只有當你想在以太坊區塊鏈上新增自訂功能時,才需要編寫智慧型合約。 你可能會發現,只需與現有智慧型合約整合即可實現專案的大部分或全部需求,例如,如果想支援穩定幣支付或實現代幣的去中心化交易。 + +## 等級 3:以太坊節點 {#ethereum-nodes} + +為了使應用程式能夠與以太坊區塊鏈互動,必須連結至[以太坊節點](/developers/docs/nodes-and-clients/)。 連結至節點可讓你讀取區塊鏈資料和/或將交易傳送到網路。 + +以太坊節點是運行軟體的電腦 - 以太坊用戶端。 用戶端是以太坊的實作,會驗證每個區塊中的所有交易,保持網路安全和資料準確。 **以太坊節點就是以太坊區塊鏈**。 以太坊節點共同存儲以太坊區塊鏈的狀態,並就交易達成共識以改變區塊鏈狀態。 + +透過將你的應用程式連結到以太坊節點(透過 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)),應用程式能夠從區塊鏈讀取資料(例如使用者帳戶餘額)並向網路廣播新交易(例如在使用者帳戶之間轉移以太幣或執行智慧型合約的功能)。 + +## 等級 4:以太坊用戶端應用程式介面 {#ethereum-client-apis} + +許多便利的程式庫(由以太坊的開源社群建立和維護)允許你的應用程式連結到以太坊區塊鏈並與之通訊。 + +如果你的面向使用者的應用程式是網路應用程式,可以選擇直接在前端透過 `npm install` 安裝 [JavaScript API](/developers/docs/apis/javascript/)。 或者,你可能會選擇使用 [Python](/developers/docs/programming-languages/python/) 或 [Java](/developers/docs/programming-languages/java/) 應用程式介面在伺服器端實作此功能。 + +雖然這些應用程式介面不是堆疊的必要組成部分,但顯著降低了與以太坊節點直接互動的複雜度。 這些應用程式介面還提供公用程式功能(例如將 ETH 轉換為 Gwei),使得開發者可以花更少的時間處理複雜的以太坊用戶端,將更多的時間專注於應用程式的特定功能。 + +## 等級 5:終端使用者應用程式 {#end-user-applications} + +堆疊的頂層是面向使用者的應用程式。 它們是目前經常使用和建立的標準​​應用程式:主要是 Web 和行動應用程式。 + +開發這些使用者介面的方式基本上保持不變。 通常,使用者不需要知道他們正在使用的應用程式是使用區塊鏈建立的。 + +## 準備好選擇你的堆疊了嗎? {#ready-to-choose-your-stack} + +請查看我們的指南,瞭解如何為你的以太坊應用程式[設定本地開發環境](/developers/local-environment/)。 + +## 衍生閱讀 {#further-reading} + +- [Web 3.0 應用程式的架構](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/frameworks/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/frameworks/index.md" new file mode 100644 index 00000000000..122cd9f9839 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/frameworks/index.md" @@ -0,0 +1,147 @@ +--- +title: 去中心化應用程式開發架構 +description: 探索架構優勢及比較現有選項。 +lang: zh-tw +--- + +## 架構簡介 {#introduction-to-frameworks} + +建構成熟的去中心化應用程式需要 不同的技術。 軟體架構包含許多必要功能, 或提供簡單的外掛程式系統來選擇 你需要的工具。 + +架構帶有許多非常規功能, 例如: + +- 編列系統內區塊鏈功能. +- 編輯和測試你的智慧型合約. +- 用戶端開發外掛程式可在同一專案/儲存庫中建立 面向使用者的應用程式。 +- 用於連結到以太坊網路並部署 合約的設定,無論是連接到本地運行的執行個體 還是連結到以太坊的公共網路之一。 +- 去中心化應用程式分發 - 與星際檔案系統 等存儲選項整合。 + +## 基本資訊 {#prerequisites} + +在深入介紹這些架構之前,推薦你先閱讀下面的[去中心化應用程式](/developers/docs/dapps/)和[以太坊堆疊](/developers/docs/ethereum-stack/)簡介。 + +## 可用架構 {#available-frameworks} + +**Foundry** - **_Foundry 是一款快速、便攜和模組化的工具包,用於以太坊應用程式開發_** + +- [安裝 Foundry](https://book.getfoundry.sh/) +- [Foundry 手册](https://book.getfoundry.sh/) +- [Telegram 上的 Foundry 社群聊天](https://t.me/foundry_support) +- [Awesome Foundry](https://github.com/crisgarner/awesome-foundry) + +**Hardhat -** **_專業以太坊開發環境。_** + +- [hardhat.org](https://hardhat.org) +- [GitHub](https://github.com/nomiclabs/hardhat) + +**Ape -** **_Python 程式人員、資料科學家和安全性專業人員適用的智慧型合約開發工具。_** + +- [文件](https://docs.apeworx.io/ape/stable/) +- [GitHub](https://github.com/ApeWorX/ape) + +**Web3j -** **_用於在 JAVA 虛擬機上開發區塊鏈應用程式的平台。_** + +- [首頁](https://www.web3labs.com/web3j-sdk) +- [文件](https://docs.web3j.io) +- [GitHub](https://github.com/web3j/web3j) + +**ethers-kt -** **_適用基於以太坊虛擬機區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。_** + +- [GitHub](https://github.com/Kr1ptal/ethers-kt) +- [範例](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) +- [Discord](https://discord.gg/rx35NzQGSb) + +**Create Eth App -** **_使用一個命令建立以太坊支援的應用程式。 包含多種使用者介面架構與去中心化金融模板供你選擇。_** + +- [GitHub](https://github.com/paulrberg/create-eth-app) +- [模板](https://github.com/PaulRBerg/create-eth-app/tree/develop/templates) + +**Scaffold-Eth -** **_Ethers.js + Hardhat + React 元件和 web3 掛勾:開始構建由智慧型合約支援的去中心化應用程式所需的一切。_** + +- [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) + +**Tenderly -** **_Web3 開發平台,使區塊鏈開發者能夠建立、測試、除錯、監控和操作智慧型合約並改進去中心化應用程式使用者體驗。_** + +- [網站](https://tenderly.co/) +- [文件](https://docs.tenderly.co/ethereum-development-practices) + +**The Graph****_高效率查詢區塊鏈資料的圖表。_** + +- [網站](https://thegraph.com/) +- [使用教學](/developers/tutorials/the-graph-fixing-web3-data-querying/) + +**Alchemy -** **_以太坊開發平台。_** + +- [alchemy.com](https://www.alchemy.com/) +- [GitHub](https://github.com/alchemyplatform) +- [Discord](https://discord.com/invite/alchemyplatform) + +**NodeReal -** **_以太坊開發平台。_** + +- [Nodereal.io](https://nodereal.io/) +- [GitHub](https://github.com/node-real) +- [Discord](https://discord.gg/V5k5gsuE) + +**thirdweb SDK -** **_透過我們的強大軟體開發套件和命令列介面,可以建構與你的智慧型合約互動的 Web3 應用程式。_** + +- [文件](https://portal.thirdweb.com/sdk/) +- [Github](https://github.com/thirdweb-dev/) + +**Chainstack -** **_Web3(以太坊及其他區塊鏈)開發平台。_** + +- [chainstack.com](https://www.chainstack.com/) +- [Github](https://github.com/chainstack) +- [Discord](https://discord.gg/BSb5zfp9AT) + +**Crossmint -** **_企業級 web3 開發平台,讓你在所有主要鏈以太坊虛擬機器鏈上建立非同質化代幣應用程式。_** + +- [網站](https://www.crossmint.com) +- [文件](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) + +**Brownie -** **_基於 Python 的開發環境和測試架構。_** + +- [文件](https://eth-brownie.readthedocs.io/en/latest/) +- [GitHub](https://github.com/eth-brownie/brownie) +- **Brownie 目前未有維護** + +**Truffle -** **_開發環境、測試架構、部署通道及其他工具。 _** + +- [trufflesuite.com](https://www.trufflesuite.com/) +- [GitHub](https://github.com/trufflesuite/truffle) +- **Truffle 開發已結束** - [瞭解更多](https://twitter.com/trufflesuite/status/1704946902393860589?t=NlIWeLTbBSAaJmS5uUAhSA&s=19) + +**OpenZeppelin 軟體開發套件 -** **_終極智慧型合約工具組:一套幫助你開發、編譯、升級、部署智慧型合約以及與智慧型合約互動的工具。_** + +- [OpenZeppelin 軟體開發套件](https://openzeppelin.com/sdk/) +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-sdk) +- [社群論壇](https://forum.openzeppelin.com/c/support/17) +- **OpenZeppelin 軟體開發套件開發已結束** + +**Catapulta -** **_多鏈智慧型合約部署工具,在區塊瀏覽器中自動驗證,追蹤部署的智慧型合約並分享部署報告,Foundry 和 Hardhat 專案隨插即用。_** + +- [網站](https://catapulta.sh/) +- [文件](https://catapulta.sh/docs) +- [Github](https://github.com/catapulta-sh) + +**Covalent -** **_200 多條鏈的已擴充區塊鏈應用程式介面。_** + +- [covalenthq.com](https://www.covalenthq.com/) +- [文件](https://www.covalenthq.com/docs/api/) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + +**Wake -** **_用於合約測試、模糊測試、部署、漏洞掃描和程式碼導航的一體化 Python 框架。_** + +- [首頁](https://getwake.io/) +- [文件](https://ackeeblockchain.com/wake/docs/latest/) +- [GitHub](https://github.com/Ackee-Blockchain/wake) +- [VS Code 擴充功能](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) + +## 了解更多 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [設定本地開發環境](/developers/local-environment/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ides/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ides/index.md" new file mode 100644 index 00000000000..e67e15e5e48 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ides/index.md" @@ -0,0 +1,71 @@ +--- +title: 整合開發環境 +description: +lang: zh-tw +--- + +在設定[整合開發環境 (IDE)](https://wikipedia.org/wiki/Integrated_development_environment) 時,以太坊上的應用程式程式設計與任何其他軟體專案的程式設計類似。 有很多選項可供選擇,因此最終請選擇最適合你喜好設定的整合開發環境或程式碼編輯器。 最適合你以太坊開發的整合開發環境選項很可能是你已經用於傳統軟體開發的整合開發環境。 + +## 網頁型整合開發環境 {#web-based-ides} + +如果你想在[設定本地開發環境](/developers/local-environment/)之前試一下程式碼,以下網頁應用程式是為以太坊智慧型合約開發客製化構建的。 + +**[Remix](https://remix.ethereum.org/)** - **_網頁型整合開發環境,內建靜態分析與區塊鏈測試虛擬機_** + +- [文件](https://remix-ide.readthedocs.io/en/latest/#) +- [Gitter](https://gitter.im/ethereum/remix) + +**[ChainIDE](https://chainide.com/)** - **_一個支援多鏈的雲端整合開發環境_** + +- [文件](https://chainide.gitbook.io/chainide-english-1/) +- [幫助論壇](https://forum.chainide.com/) + +**[Replit(Solidity 新手教學 - Beta)](https://replit.com/@replit/Solidity-starter-beta)** - **_一個可自訂的以太坊開發環境,提供熱重載、錯誤檢查和一流的測試網支援_** + +- [文件](https://docs.replit.com/) + +**[Tenderly Sandbox](https://sandbox.tenderly.co/)** - **_一個快速的原型建置環境,讓你可以使用 Solidity 和 JavaScript 在瀏覽器中編寫、執行智慧型合約並對其偵錯_** + +**[EthFiddle](https://ethfiddle.com/)** - **_網頁型整合開發環境 (IDE),可讓你編寫、編譯智慧型合約並對其偵錯_** + +- [Gitter](https://gitter.im/loomnetwork/ethfiddle) + +## 桌上型整合開發環境 {#desktop-ides} + +大多數成熟的整合開發環境都內建了外掛程式來增強以太坊開發體驗。 這些整合開發環境至少為[智慧型合約語言](/developers/docs/smart-contracts/languages/)提供語法醒目提示。 + +**Visual Studio Code -** **_專業跨平台整合開發環境,獲以太坊官方支援_** + +- [Visual Studio Code](https://code.visualstudio.com/) +- [Azure Blockchain Workbench](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/microsoft-azure-blockchain.azure-blockchain-workbench?tab=Overview) +- [程式碼範例](https://github.com/Azure-Samples/blockchain/blob/master/blockchain-workbench/application-and-smart-contract-samples/readme.md) +- [GitHub](https://github.com/microsoft/vscode) + +**Atom -** **_21 世紀適用的可破解文字編輯器_** + +- [Atom](https://atom.io/) +- [GitHub](https://github.com/atom) +- [Ethereum 方案](https://atom.io/packages/search?utf8=%E2%9C%93&q=keyword%3Aethereum&commit=Search) + +**JetBrains 整合開發環境(IntelliJ IDEA 等) -****_軟體開發者和團隊的必備工具_** + +- [JetBrains](https://www.jetbrains.com/) +- [GitHub](https://github.com/JetBrains) +- [IntelliJ Solidity](https://github.com/intellij-solidity/intellij-solidity/) + +**Remix Desktop -****_在本地機器上體驗 Remix 整合開發環境_** + +- [下載](https://github.com/ethereum/remix-desktop/releases) +- [GitHub](https://github.com/ethereum/remix-desktop) + +## 外掛程式和擴充功能 {#plugins-extensions} + +- [solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) - 支援 Visual Studio Code 的以太坊 Solidity 語言 +- [支援 VS Code 的 Solidity + Hardhat ](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Hardhat 團隊提供 Solidity 和 Hardhat 支援 +- [Prettier Soliditty](https://github.com/prettier-solidity/prettier-plugin-solidity) - 使用 prettier 的程式碼格式器 + +## 衍生閱讀 {#further-reading} + +- [以太坊整合開發環境](https://www.alchemy.com/list-of/web3-ides-on-ethereum) _ - Alchemy 提供的以太坊整合開發環境清單_ + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dart/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dart/index.md" new file mode 100644 index 00000000000..911e1cf9d61 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dart/index.md" @@ -0,0 +1,30 @@ +--- +title: Dart 開發者適用的以太坊資源 +description: 學習如何使用 Dart 語言進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +## 指導手冊 {#tutorials} + +- [Flutter 與區塊鏈 – Hello World 去中心化應用程式](https://www.geeksforgeeks.org/flutter-and-blockchain-hello-world-dapp/)帶您完成入門的所有步驟: + 1. 安裝 [Truffle 開發套件](https://www.trufflesuite.com/) + 2. 使用 [Solidity](https://soliditylang.org/) 編寫智慧型合約 + 3. 使用 Dart 編寫使用者介面 +- 如果你已有基礎知識,[使用 Flutter 建立行動去中心化應用程式](https://medium.com/dash-community/building-a-mobile-dapp-with-flutter-be945c80315a)的篇幅要短很多, 可能是更好選擇 +- 如果你偏好透過觀看影片來學習,可以觀看[建立你的第一個區塊鏈 Flutter 應用程式](https://www.youtube.com/watch?v=3Eeh3pJ6PeA),片長約一小時 +- 如果你時間不足,可能更喜歡[在以太坊上使用 Flutter 和 Dart 建立區塊鏈去中心化應用程式](https://www.youtube.com/watch?v=jaMFEOCq_1s),只需大約二十分鐘 +- [透過 WalletConnect 的 Web3Modal 將 MetaMask 整合到 Flutter 應用程式](https://www.youtube.com/watch?v=v_M2buHCpc4) - 這段簡短影片會一步一步帶你使用 WalletConnect 的 [Web3Modal](https://pub.dev/packages/web3modal_flutter) 程式庫,將 MetaMask 整合到 Flutter 應用程式中 +- [Flutter 去中心化應用程式簡易錢包](https://youtu.be/JMfIBpuAhKA) 和[首個 Flutter 去中心化應用程式 - Solidity、Truffle、Ganache](https://youtu.be/bHw2gQZxJ_s) - 這些影片展示如何使用 Truffle 和 Ganache 在 Flutter 建立簡易的去中心化應用程式 +- [Solidity 和 Flutter 行動區塊鏈開發者訓練營課程](https://youtube.com/playlist?list=PL4V4Unlk5luhQ26ERO6hWEbcUwHDSSmVH) - 全端行動區塊鏈開發者課程播放列表 + +## 與以太坊客戶合作工作 {#working-with-ethereum-clients} + +你可以使用以太坊,來建立能夠利用加密貨幣與區塊鏈技術長處的去中心化應用程式(或稱「dapp」)。 目前至少有兩個維護的程式庫 可供 Dart 使用以太坊的 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)。 + +1. [simonbutler.eu 的 Web3dart](https://pub.dev/packages/web3dart) +1. [來自 darticulate.com 的以太坊 5.0.0](https://pub.dev/packages/ethereum) + +還有其他程式庫讓你能夠操作特定的以太坊地址, 或擷取各種加密貨幣的價格。 [你在這裡可以看到完整清單](https://pub.dev/dart/packages?q=ethereum)。 diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/delphi/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/delphi/index.md" new file mode 100644 index 00000000000..cb6f61cbfcb --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/delphi/index.md" @@ -0,0 +1,56 @@ +--- +title: Delphi 開發者適用的以太坊資源 +description: 學習如何使用 Delphi 程式設計語言進行以太坊開發 +lang: zh-tw +incomplete: true +--- + + + +學習如何使用 Delphi 程式設計語言進行以太坊開發 + + + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +在以太坊上構建去中心化應用程式,並使用 Delphi 程式設計語言與智慧型合約互動! + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-the-solidity-language} + +**邁出第一步,整合 Delphi 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者參考和連結 {#beginner-references-and-links} + +**Delphereum 程式庫簡介** + +- [甚麼是 Delphereum?](https://github.com/svanas/delphereum/blob/master/README.md) +- [將 Delphi 連結到本地(記憶體內部)區塊鏈](https://medium.com/@svanas/connecting-delphi-to-a-local-in-memory-blockchain-9a1512d6c5b0) +- [將 Delphi 連結到以太坊主網](https://medium.com/@svanas/connecting-delphi-to-the-ethereum-main-net-5faf1feffd83) +- [將 Delphi 連結到智慧型合約](https://medium.com/@svanas/connecting-delphi-to-smart-contracts-3146b12803a1) + +**想要跳過設定,並直接跳至範例?** + +- [三分鐘的智慧型合約和 Delphi - 第 1 部分](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-61d998571d) +- [三分鐘的智慧型合約和 Delphi - 第 2 部分](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-part-2-446925faa47b) + +## 中階文章 {#intermediate-articles} + +- [使用 Delphi 產生以太坊簽名的訊息簽章](https://medium.com/@svanas/generating-an-ethereum-signed-message-signature-in-delphi-75661ce5031b) +- [使用 Delphi 傳送以太幣](https://medium.com/@svanas/transferring-ether-with-delphi-b5f24b1a98a4) +- [使用 Delphi 傳送 ERC-20 代幣](https://medium.com/@svanas/transferring-erc-20-tokens-with-delphi-bb44c05b295d) + +## 進階使用模式 {#advanced-use-patterns} + +- [Delphi 和以太坊名稱服務 (ENS)](https://medium.com/@svanas/delphi-and-ethereum-name-service-ens-4443cd278af7) +- [QuikNode、以太坊 和 Delphi](https://medium.com/@svanas/quiknode-ethereum-and-delphi-f7bfc9671c23) +- [Delphi 和以太坊黑暗森林](https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93) +- [在 Delphi 中將一種代幣兌換成另一種代幣](https://svanas.medium.com/swap-one-token-for-another-in-delphi-bcb999c47f7) + +想取得更多資源? 請瀏覽[ethereum.org/developers](/developers/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dot-net/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dot-net/index.md" new file mode 100644 index 00000000000..14f8a735568 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dot-net/index.md" @@ -0,0 +1,86 @@ +--- +title: .NET 開發者適用的以太坊資源 +description: 學習如何使用 .NET 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 .NET 型專案和工具進行以太坊開發 + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +使用 Microsoft 技術堆疊中的工具和語言在以太坊上構建去中心化應用程式並與智慧型合約進行 互動 - 跨 .NET Framework/.NET Core/.NET Standard 在 VSCode 和 Visual Studio 等工具上支援 C#、# Visual Basic .NET 和 F#。 在幾分鐘內使用 Microsoft Azure 區塊鏈在 Azure上部署以太坊區塊鏈。 將對 .NET 的喜愛轉移至以太坊! + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-the-solidity-language} + +**邁出第一步,整合 .NET 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者參考和連結 {#beginner-references-and-links} + +**Nethereum 程式庫和 VS Code Solidity 簡介** + +- [Nethereum 入門](https://docs.nethereum.com/en/latest/getting-started/) +- [安裝 VS Code Solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) +- [.NET 開發者建立和調用以太坊智慧型合約的工作流程](https://medium.com/coinmonks/a-net-developers-workflow-for-creating-and-calling-ethereum-smart-contracts-44714f191db2) +- [智慧型合約與 Nethereum 的整合](https://kauri.io/#collections/Getting%20Started/smart-contracts-integration-with-nethereum/#smart-contracts-integration-with-nethereumm) +- [使用 Nethereum 連接 .NET 和以太坊區塊鏈智慧型合約](https://medium.com/my-blockchain-development-daily-journey/interfacing-net-and-ethereum-blockchain-smart-contracts-with-nethereum-2fa3729ac933),也可參考此[中文版](https://medium.com/my-blockchain-development-daily-journey/%E4%BD%BF%E7%94%A8nethereum%E9%80%A3%E6%8E%A5-net%E5%92%8C%E4%BB%A5%E5%A4%AA%E7%B6%B2%E5%8D%80%E5%A1%8A%E9%8F%88%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84-4a96d35ad1e1) +- [Nethereum - 區塊鏈的開放源始碼 .NET 整合程式庫](https://kauri.io/#collections/a%20hackathon%20survival%20guide/nethereum-an-open-source-.net-integration-library/) +- [使用 Nethereum 將以太坊交易寫入 SQL 資料庫](https://medium.com/coinmonks/writing-ethereum-transactions-to-sql-database-using-nethereum-fd94e0e4fa36) +- [瞭解如何使用 C# 和 VisualStudio 輕鬆部署以太坊智慧型合約](https://koukia.ca/deploy-ethereum-smart-contracts-using-c-and-visualstudio-5be188ae928c) + +**想要跳過設定,直接了解範例?** + +- [訓練場](http://playground.nethereum.com/) - 與以太坊互動,並學習如何透過瀏覽器使用 Nethereum。 + - 查詢帳戶餘額 [C#](http://playground.nethereum.com/csharp/id/1001) [VB.NET](http://playground.nethereum.com/vb/id/2001) + - 查詢 ERC20 智慧型合約餘額 [C#](http://playground.nethereum.com/csharp/id/1005) [VB.NET](http://playground.nethereum.com/vb/id/2004) + - 將以太幣傳送至帳戶 [C#](http://playground.nethereum.com/csharp/id/1003) [VB.NET](http://playground.nethereum.com/vb/id/2003) + - ... 和更多相關內容! + +## 中級文章 {#intermediate-articles} + +- [Nethereum 活頁簿/範例清單](http://docs.nethereum.com/en/latest/Nethereum.Workbooks/docs/) +- [部署你自己的開發測試鏈](https://github.com/Nethereum/Testchains) +- [Solidity 的 VSCode 程式碼產生外掛程式](https://docs.nethereum.com/en/latest/nethereum-codegen-vscodesolidity/) +- [Unity 和以太坊:為何以及如何](https://www.raywenderlich.com/5509-unity-and-ethereum-why-and-how) +- [為以太坊去中心化應用程式建立 ASP.NET 核心 Web 應用程式介面](https://tech-mint.com/blockchain/create-asp-net-core-web-api-for-ethereum-dapps/) +- [使用 Nethereum Web3 實作供應鏈追踪系統](http://blog.pomiager.com/post/using-nethereum-web3-to-implement-a-supply-chain-traking-system4) +- [Nethereum 區塊處理](https://nethereum.readthedocs.io/en/latest/nethereum-block-processing-detail/),包含 [C# 訓練場範例](http://playground.nethereum.com/csharp/id/1025) +- [Nethereum Websocket 串流](https://nethereum.readthedocs.io/en/latest/nethereum-subscriptions-streaming/) +- [Kaleido 和 Nethereum](https://kaleido.io/kaleido-and-nethereum/) +- [Quorum 和 Nethereum](https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Quorum/README.md) + +## 進階使用模式 {#advanced-use-patterns} + +- [Azure 金鑰保存庫和 Nethereum](https://github.com/Azure-Samples/bc-community-samples/tree/master/akv-nethereum) +- [Nethereum.DappHybrid](https://github.com/Nethereum/Nethereum.DappHybrid) +- [Ujo Nethereum 後端參考架構](https://docs.nethereum.com/en/latest/nethereum-ujo-backend-sample/) + +## .NET 專案、工具及其他有趣內容 {#dot-net-projects-tools-and-other-fun-stuff} + +- [Nethereum 訓練場](http://playground.nethereum.com/) - _在瀏覽器中編譯、建立和執行 Nethereum 程式碼片段_ +- [Nethereum Codegen Blazor](https://github.com/Nethereum/Nethereum.CodeGen.Blazor) - _Blazor 中的 Nethereum 程式碼產生使用者介面_ +- [Nethereum Blazor](https://github.com/Nethereum/NethereumBlazor) - _.NET Wasm 單頁應用程式輕量區塊鏈瀏覽器和簡易錢包_ +- [Wonka Business Rules Engine](https://docs.nethereum.com/en/latest/wonka/) - _本質上由中繼資料驅動的業務規則引擎(同時適用於. NET 平台和以太坊平台)_ +- [Nethermind](https://github.com/NethermindEth/nethermind) - _.NET Core 以太坊用戶端,適用於 Linux、Windows 和 MacOS_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _使用以太坊相關程式碼庫的公用程式函式_ +- [TestChains](https://github.com/Nethereum/TestChains) - _可實現快速回應的預先設定的 .NET 開發鏈 (PoA)_ + +想取得更多資源? 請瀏覽[ethereum.org/developers](/developers/) + +## .NET 社群貢獻者 {#dot-net-community-contributors} + +在 Nethereum,我們主要活躍於 [Gitter](https://gitter.im/Nethereum/Nethereum) 上,任何人都可以前來提問/回答問題,獲得協助或者放鬆一下。 隨意在 [Nethereum GitHub 儲存庫](https://github.com/Nethereum)上提交拉取請求或開立一個議題,或僅瀏覽我們提供的許多小專案/範例專案。 你也可以在 [Discord](https://discord.gg/jQPrR58FxX) 上找到我們! + +如果你是 Nethermind 新手並需要入門幫助,請加入我們的 [Discord](http://discord.gg/PaCMRFdvWT)。 我們的開發者隨時準備回答你的問題。 隨時在 [Nethermind GitHub 存儲庫](https://github.com/NethermindEth/nethermind)上建立拉取請求或提出任何議題。 + +## 其他彙總列表 {#other-aggregated-lists} + +[官方 Nethereum 網站](https://nethereum.com/) +[官方 Nethermind 網站](https://nethermind.io/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/golang/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/golang/index.md" new file mode 100644 index 00000000000..b0533e8065b --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/golang/index.md" @@ -0,0 +1,85 @@ +--- +title: Go 開發者適用的 Ethereum 資源 +description: 學習如何使用 Go 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 Go 型專案和工具進行以太坊開發 + +使用以太坊建立去中心化應用程式(或稱「dapp」)。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程式是去中心化的,意味著它們在點對點網路上運行,並且不存在單點故障。 這些應用程式不會被單一實體或個人控制,並且幾乎不可能對其進行審查。 它們可以控制數位資產以建立新型應用程式。 + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Go 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [合約教學](https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial) + +## 初學者文章和書籍 {#beginner-articles-and-books} + +- [選擇 Ethereum 用戶端](https://www.trufflesuite.com/docs/truffle/reference/choosing-an-ethereum-client) +- [Geth 入門](https://medium.com/@tzhenghao/getting-started-with-geth-c1a30b8d6458) +- [使用 Golang 連結至以太坊](https://www.youtube.com/watch?v=-7uChuO_VzM) +- [使用 Golang 部署以太坊智慧型合約](https://www.youtube.com/watch?v=pytGqQmDslE) +- [使用 Go 測試和部署以太坊智慧型合約的逐步指南](https://hackernoon.com/a-step-by-step-guide-to-testing-and-deploying-ethereum-smart-contracts-in-go-9fc34b178d78) +- [電子書:使用 Go 開發以太坊](https://goethereumbook.org/) - _使用 Go 開發以太坊應用程式_ + +## 中階文章和文件 {#intermediate-articles-and-docs} + +- [Go 以太坊相關文件](https://geth.ethereum.org/docs/) - _官方以太坊 Golang 相關文件_ +- [Erigon 程式設計者指南](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _圖文指南包括狀態樹、多重證明和交易處理_ +- [Erigon 和無狀態以太坊](https://youtu.be/3-Mn7OckSus?t=394) - _2020 年以太坊社群會議 (EthCC 3)_ +- [Erigon:最佳化以太坊用戶端](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 年開發者大會 4 _ +- [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) +- [在 Go 上使用 Geth 建立去中心化應用程式](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) +- [透過 Golang 和 Geth 使用以太坊專用網路](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) +- [使用 Go 對以太坊上的 Solidity 合約進行單元測試](https://medium.com/coinmonks/unit-testing-solidity-contracts-on-ethereum-with-go-3cc924091281) +- [使用 Geth 作為程式庫的快速參考](https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e) + +## 進階使用模式 {#advanced-use-patterns} + +- [GETH 模擬後端](https://kauri.io/#collections/An%20ethereum%20test%20toolkit%20in%20Go/the-geth-simulated-backend/#_top) +- [使用以太坊和 Quorum 的區塊鏈即服務應用程式](https://blockchain.dcwebmakers.com/blockchain-as-a-service-apps-using-ethereum-and-quorum.html) +- [以太坊區塊鏈應用程式中的分佈式存儲星際檔案系統和 Swarm](https://blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html) +- [行動用戶端:程式庫和 Inproc 以太坊節點](https://github.com/ethereum/go-ethereum/wiki/Mobile-Clients:-Libraries-and-Inproc-Ethereum-Nodes) +- [原生去中心化應用程式:以太坊合約的 Go 繫結](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) + +## Go 專案和工具 {#go-projects-and-tools} + +- [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _以太坊協定的官方 Go 實作_ +- [Go Ethereum 程式碼分析](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _審查和分析 Go Ethereum 原始程式碼_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Go 以太坊的更快衍生品,專注於歸檔節點_ +- [Golem](https://github.com/golemfactory/golem) - _Golem 正在建立一個算力全球市場_ +- [Quorum](https://github.com/jpmorganchase/quorum) - _支援資料隱私的許可制以太坊實作_ +- [Prysm](https://github.com/prysmaticlabs/prysm) - _以太坊「Serenity」2.0 Go 實作_ +- [Eth Tweet](https://github.com/kyokan/plasma) - _去中心化 Twitter:在以太坊區塊鏈上執行的微型部落格服務_ +- [Plasma MVP Golang](https://github.com/kyokan/plasma) — _Golang 實作以及最小可行性 Plasma 規範的擴展_ +- [Open Ethereum Mining Pool](https://github.com/sammy007/open-ethereum-pool) - _以太坊開源礦池_ +- [Ethereum HD Wallet](https://github.com/miguelmota/go-ethereum-hdwallet) - _使用 Go 的 Ethereum 硬體錢包衍生品_ +- [Multi Geth](https://github.com/multi-geth/multi-geth) - _支援多種以太坊網路_ +- [Geth Light Client](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _輕量級以太坊子協定的 Geth 實作_ +- [以太坊 Golang 軟體開發套件](https://github.com/everFinance/goether) - _使用 Golang 的簡單以太坊錢包實作和公用程式_ +- [Covalent Golang 軟體開發套件](https://github.com/covalenthq/covalent-api-sdk-go) - _透過 Go 軟體開發套件高效率存取 200 多個區塊鏈的資料_ + +想取得更多資源? 請查看 [ethereum.org/developers](/developers/) + +## Go 社群貢獻者 {#go-community-contributors} + +- [Geth Discord](https://discordapp.com/invite/nthXNEv) +- [Geth Gist](https://gitter.im/ethereum/go-ethereum) +- [Gophers Slack](https://invite.slack.golangbridge.org/) - [#以太坊頻道](https://gophers.slack.com/messages/C9HP1S9V2) +- [StackExchange - 以太坊](https://ethereum.stackexchange.com/) +- [Multi Geth Gitter](https://gitter.im/ethoxy/multi-geth) +- [Ethereum Gitter](https://gitter.im/ethereum/home) +- [Geth light Client Gitter](https://gitter.im/ethereum/light-client) + +## 其他彙總列表 {#other-aggregated-lists} + +- [Awesome Ethereum](https://github.com/btomashvili/awesome-ethereum) +- [Consensys:以太坊開發者工具的最終清單](https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974) | [GitHub 來源](https://github.com/ConsenSys/ethereum-developer-tools-list) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/index.md" new file mode 100644 index 00000000000..a18a3d8dacd --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/index.md" @@ -0,0 +1,29 @@ +--- +title: 程式語言 +description: +lang: zh-tw +--- + +常見的誤解是,開發者必須編寫[智慧型合約](/developers/docs/smart-contracts/)才能在以太坊上構建。 這是錯誤的。 以太坊網路和社群的優點之一是幾乎可以使用任何程式設計語言[參與](/community/)其中。 + +以太坊及其社群推崇開放原始碼。 你能找到各種語言的社群專案:用戶端實作、應用程式介面、開發架構、測試工具。 + +## 選擇你的語言 {#data} + +選擇你的程式設計語言以尋找專案、資源和虛擬社群: + +- [Dart開發者適用的 Ethereum 資源](/developers/docs/programming-languages/dart/) +- [Delphi 開發者適用的Ethereum 資源](/developers/docs/programming-languages/delphi/) +- [.NET 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/dot-net/) +- [Go 開發者適用的以太坊資源](/developers/docs/programming-languages/golang/) +- [Java 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/java/) +- [JavaScript 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/javascript/) +- [Python 開發者適用的以太坊資源](/developers/docs/programming-languages/python/) +- [Ruby 開發者適用的以太坊資源](/developers/docs/programming-languages/ruby/) +- [Rust 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/rust/) + +### 如果我的語言不受支援,該怎麼辦 {#other-lang} + +如果想連結到資源或指向其他程式設計語言的虛擬社區,可以透過[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new/choose)來請求新頁面。 + +如果只是想使用目前不支援的語言編寫程式碼來連結區塊鏈, 可以使用 [JSON-RPC 介面](/developers/docs/apis/json-rpc/)連結到以太坊網路。 任何可以 使用 TCP/IP 的程式設計語言都可以使用該介面。 diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/java/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/java/index.md" new file mode 100644 index 00000000000..7ed8da743d6 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/java/index.md" @@ -0,0 +1,65 @@ +--- +title: Java 開發者適用的以太坊資源 +description: 學習如何使用 Java 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 Java 型專案和工具進行以太坊開發 + +使用以太坊建立去中心化應用程式(或稱「dapp」),發揮加密貨幣和區塊鏈技術的優勢。 這些去中心化應用程式是可信的,這意味著一旦部署到以太坊後,它們就會始終按照設定執行。 這些應用程式可以控制數位資產,以便建立新型金融應用程式。 這些應用程式是去中心化的,這意味著任何單一實體或個人都無法控制它們,並且應用程式幾乎不可能被審查。 + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Java 與以太坊** + +需要先看看更基礎的入門指南? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [瞭解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編譯和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 使用以太坊用戶端 {#working-with-ethereum-clients} + +學習如何使用兩種先進的 Java 以太坊用戶端 [Web3J](https://github.com/web3j/web3j) 和 Hyperledger Besu + +- [使用 Java 、Eclipse 和 Web3J 連線以太坊用戶端](https://kauri.io/article/b9eb647c47a546bc95693acc0be72546/connecting-to-an-ethereum-client-with-java-eclipse-and-web3j) +- [使用 Java 和 Web3j 管理以太坊帳戶](https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3j) +- [從智慧型合約產生 Java 包裝函式](https://kauri.io/article/84475132317d4d6a84a2c42eb9348e4b/generate-a-java-wrapper-from-your-smart-contract) +- [與以太坊智慧型合約互動](https://kauri.io/article/14dc434d11ef4ee18bf7d57f079e246e/interacting-with-an-ethereum-smart-contract-in-java) +- [偵聽以太坊智慧型合約事件](https://kauri.io/article/760f495423db42f988d17b8c145b0874/listening-for-ethereum-smart-contract-events-in-java) +- [使用 Linux 下的 Java 以太坊用戶端 Besu (Pantheon)](https://kauri.io/article/276dd27f1458443295eea58403fd6965/using-pantheon-the-java-ethereum-client-with-linux) +- [在 Java 整合測試中執行 Hyperledger Besu (Pantheon) 節點](https://kauri.io/article/7dc3ecc391e54f7b8cbf4e5fa0caf780/running-a-pantheon-node-in-java-integration-tests) +- [Web3j 速查表](https://kauri.io/web3j-cheat-sheet-(java-ethereum)/5dfa1ea941ac3d0001ce1d90/c) + +學習如何使用非同步高效能 Kotlin 程式庫 [ethers-kt](https://github.com/Kr1ptal/ethers-kt),用來與基於以太坊虛擬機的區塊鏈互動。 針對 JVM 和 Android 平台。 +- [傳送 ERC20 代幣](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/abi/TransferERC20.kt) +- [通過偵聽事件實現 UniswapV2 兌換](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/tokenswapwitheventlistening/TokenSwapWithEventListening.kt) +- [以太幣 / ERC20 餘額追蹤器](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/balancetracker/BalanceTracker.kt) + +## 中階文章 {#intermediate-articles} + +- [使用星際檔案系統在 Java 應用程式中管理存儲](https://kauri.io/article/3e8494f4f56f48c4bb77f1f925c6d926/managing-storage-in-a-java-application-with-ipfs) +- [使用 Web3j 在 Java 中管理 ERC20 代幣](https://kauri.io/article/d13e911bbf624108b1d5718175a5e0a0/manage-erc20-tokens-in-java-with-web3j) +- [Web3j 交易管理程式](https://kauri.io/article/4cb780bb4d0846438d11885a25b6d7e7/web3j-transaction-managers) + +## 進階使用模式 {#advanced-use-patterns} + +- [使用 Eventeum 建置 Java 智慧型合約資料快取](使用 Eventeum 構建Java 智慧型合約數據緩存) + +## Java 專案和工具 {#java-projects-and-tools} + +- [Hyperledger Besu (Pantheon)(以太坊用戶端)](https://docs.pantheon.pegasys.tech/en/stable/) +- [Web3J(用來與以太坊用戶端互動的程式庫)](https://github.com/web3j/web3j) +- [ethers-kt(適用於基於以太坊虛擬機的區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。)](https://github.com/Kr1ptal/ethers-kt) +- [Eventeum(事件偵聽程式)](https://github.com/ConsenSys/eventeum) +- [Mahuta(星際檔案系統開發者工具)](https://github.com/ConsenSys/mahuta) + +想取得更多資源? 請參考 [ethereum.org/developers。](/developers/) + +## Java 社群貢獻者 {#java-community-contributors} + +- [IO Builders](https://io.builders) +- [Kauri](https://kauri.io) +- [Besu HL 聊天室](https://chat.hyperledger.org/channel/besu) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/javascript/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/javascript/index.md" new file mode 100644 index 00000000000..efaac18d40a --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/javascript/index.md" @@ -0,0 +1,73 @@ +--- +title: JavaScript 開發者適用的以太坊資源 +description: 學習如何使用 JavaScript 型專案和工具進行以太坊開發。 +lang: zh-tw +--- + +JavaScript 是以太坊生態系統中最常用的語言之一。 事實上,有[團隊](https://github.com/ethereumjs)致力於將盡可能多的以太坊內容引入 JavaScript。 + +有機會在[堆疊的所有層級](/developers/docs/ethereum-stack/)編寫 JavaScript(或類似內容)。 + +## 與以太坊互動 {#interact-with-ethereum} + +### Javascript 應用程式介面程式庫 {#javascript-api-libraries} + +如果想編寫 JavaScript 來查詢區塊鏈、傳送交易等,最方便的方法是使用 [JavaScript 應用程式介面程式庫](/developers/docs/apis/javascript/)。 這些應用程式介面讓開發者能夠輕鬆與[以太坊網路中的節點](/developers/docs/nodes-and-clients/)進行互動。 + +你可以使用這些程式庫與以太坊上的智慧型合約進行互動,因此可以構建一個去中心化應用程式,在此去中心化應用程式中,你只需使用 JavaScript 就能夠與預先存在的合約進行互動。 + +**查看** + +- [Web3.js](https://web3js.readthedocs.io/) +- [Ethers.js](https://docs.ethers.io/) _– 包含 JavaScript 和 TypeScript 的以太坊錢包實作和公用程式。_ +- [viem](https://viem.sh) – 以太坊的 TypeScript 介面,提供用於與以太坊互動的低階無狀態基元。 + +### 智慧型合約 {#smart-contracts} + +如果你是 JavaScript 開發者,並打算編寫自己的智慧型合約,那你會想瞭解 [Solidity](https://solidity.readthedocs.io)。 這是最常用的智慧型合約語言,它在語法上與 JavaScript 類似,因而可能更容易學習。 + +更多[智慧型合約](/developers/docs/smart-contracts/)相關資訊。 + +## 理解協定 {#understand-the-protocol} + +### 以太坊虛擬機 {#the-ethereum-virtual-machine} + +[以太坊虛擬機](/developers/docs/evm/)有 JavaScript 實作。 該虛擬機支援最新的分叉規則。 分叉規則是指由於計劃的升級而對以太坊虛擬機所做的變更。 + +分叉規則分為各種 JavaScript 包,可以查看這些包取得更深入的理解: + +- 帳戶 +- 區塊 +- 區塊鏈本身 +- 交易紀錄 +- 和更多相關內容... + +這將幫助你理解「帳戶的資料結構是什麼?」等問題。 + +如果你喜歡閱讀程式碼,此 JavaScript 可能是閱讀我們文件的絕佳替代方案。 + +**請查看 monorepo** +[`ethereumjs`](https://github.com/ethereumjs/ethereumjs-vm) + +### 節點和客戶 {#nodes-and-clients} + +目前正在開發的 Ethereum.js 讓你能夠深入瞭解以太坊用戶端如何用你理解的語言 JavaScript 運作! + +它曾經托管於獨立的[`儲存庫`](https://github.com/ethereumjs/ethereumjs-client)中,但後來作為一個包被併入 EthereumVM monorepo 中。 + +**請查看用戶端** +[`ethereumjs-client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client) + +## 其他專案 {#other-projects} + +以太坊 JavaScript 領域也發生了許多其他事情,包括: + +- 錢包公用程式程式庫。 +- 用於產生匯入和匯出以太坊金鑰的工具。 +- `merkle-patricia-tree` 的實作 – 以太坊黃皮書中概述的資料結構。 + +在 [EthereumJS repo](https://github.com/ethereumjs) 深入瞭解你感興趣的任何內容 + +## 了解更多 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/python/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/python/index.md" new file mode 100644 index 00000000000..1cc55207439 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/python/index.md" @@ -0,0 +1,90 @@ +--- +title: Python 開發者適用的以太坊資源 +description: 學習如何使用 Python 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 Python 型專案和工具進行以太坊開發 + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Python 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者文章 {#beginner-articles} + +- [以太坊 (Python) 開發者指南](https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/) +- [2023 年報告 Python 在區塊鏈中的狀態](https://tradingstrategy.ai/blog/the-state-of-python-in-blockchain-in-2023) +- [使用 Vyper 的智慧型合約簡介](https://kauri.io/#collections/Getting%20Started/an-introduction-to-smart-contracts-with-vyper/) +- [使用 Pyhthon 及 Brownie 來部署你自己的 ERC20 代幣](https://betterprogramming.pub/python-blockchain-token-deployment-tutorial-create-an-erc20-77a5fd2e1a58) +- [如何使用 Python Flask 開發 Ethereum 合約?](https://medium.com/coinmonks/how-to-develop-ethereum-contract-using-python-flask-9758fe65976e) +- [Web3.py 簡介 · Python 開發者適用的 Ethereum 資源](https://www.dappuniversity.com/articles/web3-py-intro) +- [如何使用 Python 和 web3.py 叫用智慧型合約函數?](https://stackoverflow.com/questions/57580702/how-to-call-a-smart-contract-function-using-python-and-web3-py) + +## 中階文章 {#intermediate-articles} + +- [適用 Python 程式設計者的去中心化應用程式開發](https://levelup.gitconnected.com/dapps-development-for-python-developers-f52b32b54f28) +- [建立 Python 以太坊介面:第 1 部分](https://hackernoon.com/creating-a-python-ethereum-interface-part-1-4d2e47ea0f4d) +- [使用 Python 編寫的以太坊智慧型合約:完整(不確定)指南](https://hackernoon.com/ethereum-smart-contracts-in-python-a-comprehensive-ish-guide-771b03990988) +- [使用 Brownie 和 Python 部屬智慧型合約](https://dev.to/patrickalphac/using-brownie-for-to-deploy-smart-contracts-1kkp) +- [使用 Brownie 於 OpenSea 建立非同質化代幣](https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/) + +## 進階使用模式 {#advanced-use-patterns} + +- [使用 Python 編譯、部署和呼叫以太坊智慧型合約](https://yohanes.gultom.id/2018/11/28/compiling-deploying-and-calling-ethereum-smartcontract-using-python/) +- [使用 Slither 分析 Solidity 智慧型合約](https://kauri.io/#collections/DevOps/analyze-solidity-smart-contracts-with-slither/#analyze-solidity-smart-contracts-with-slither) +- [區塊鏈金融科技教學:使用 Python 實作借貸](https://blog.chain.link/blockchain-fintech-defi-tutorial-lending-borrowing-python/) + +## Python 專案和工具 {#python-projects-and-tools} + +### 使用中: {#active} + +- [Web3.py](https://github.com/ethereum/web3.py) - _用於與以太坊互動的 Python 程式庫_ +- [Vyper](https://github.com/ethereum/vyper/) - _用於以太坊虛擬機的 Python 智慧型合約語言_ +- [Ape](https://github.com/ApeWorX/ape) - _ Python 程式人員、資料科學家和安全性專業人員適用的智慧合約開發工具_ +- [py-evm](https://github.com/ethereum/py-evm) - _以太坊虛擬機實作_ +- [eth-tester](https://github.com/ethereum/eth-tester) - _基於以太坊的應用程式的測試工具_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _使用 Ethereum 相關程式碼庫的公用程式函數_ +- [py-solc-x](https://pypi.org/project/py-solc-x/) - _適用於 solc solidity 編譯器(支援 0.5.x)的 Python 包裝函式_ +- [pymaker](https://github.com/makerdao/pymaker) - _用於 Maker 合約的 Python 應用程式介面_ +- [siwe](https://github.com/spruceid/siwe-py) - _用於 Python 的以太坊 (siwe) 登入_ +- [用於以太坊整合的 Web3 去中心化金融](https://github.com/tradingstrategy-ai/web3-ethereum-defi) - _一個預先整合 ERC-20、Uniswap 和其他受歡迎專案的 Python 包_ +- [Wake](https://getwake.io) - _用於合約測試、初略模糊、部署、漏洞掃描和程式碼導航的一體化 Python 框架(語言伺服器 - [Solidity 工具](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity))_ + +### 已歸檔/不再維護: {#archived--no-longer-maintained} + +- [Trinity](https://github.com/ethereum/trinity) - _以太坊 Python 用戶端_ +- [Mamba](https://github.com/arjunaskykok/mamba) - _用於編寫、編譯和部署使用 Vyper 語言編寫的智慧型合約的架構_ +- [Brownie](https://github.com/eth-brownie/brownie) - _用於部署、測試和與以太坊智慧型合約互動的 Python 框架_ +- [pydevp2p](https://github.com/ethereum/pydevp2p) - _以太坊點對點堆疊的實作_ +- [py-wasm](https://github.com/ethereum/py-wasm) - _網路組件解釋器 Python 實作_ + +想取得更多資源? 請查看 [ethereum.org/developers](/developers/)。 + +## 使用 Python 工具的專案 {#projects-using-python-tooling} + +以下基於以太坊的專案使用本頁提到的工具。 相關的開放原始碼儲存庫可以作為範例程式碼的良好參考和最佳做法。 + +- [Yearn Finance](https://yearn.finance/) 及 [Yearn Vault 合約儲存庫](https://github.com/yearn/yearn-vaults) +- [Curve](https://curve.fi/) 及 [Curve 智慧型合約儲存庫](https://github.com/curvefi/curve-contract) +- [BadgerDAO](https://badger.com/) 及 [使用 Brownie 工具鏈的智慧型合約](https://github.com/Badger-Finance/badger-system) +- [Sushi](https://sushi.com/) 使用 [Python 管理和部署其歸屬合約](https://github.com/sushiswap/sushi-vesting-protocols) +- [ Alpha Finance](https://alphafinance.io/) 以 Alpha Homora 聞名,使用 [Brownie 測試和部署智慧型合約](https://github.com/AlphaFinanceLab/alpha-staking-contract) + +## Python 社群討論 {#python-community-contributors} + +- [以太坊 Python 社群 Discord](https://discord.gg/9zk7snTfWe),可討論 Web3.py 與其他 Python 架構 +- [Vyper Discord](https://discord.gg/SdvKC79cJk) ,可討論 Vyper 智慧型合約程式設計語言 + +## 其他彙總清單 {#other-aggregated-lists} + +Vyper 維基百科提供[完善的 Vyper 資源清單](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) \ No newline at end of file diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/ruby/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/ruby/index.md" new file mode 100644 index 00000000000..d9865a9bfde --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/ruby/index.md" @@ -0,0 +1,61 @@ +--- +title: Ruby 開發者適用的以太坊資源 +description: 學習使用 Ruby 型專案和工具進行以太坊開發。 +lang: zh-tw +incomplete: false +--- + +學習使用 Ruby 型專案和工具進行以太坊開發。 + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式是無需信任的,這意味著一旦部署到以太坊後,就會始終按程式執行。 它們可以控制數位資產來建立新型的金融應用程式。 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Ruby 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者文章 {#beginner-articles} + +- [終於理解以太坊帳戶](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [使用 MetaMask 最終驗證 Rails 使用者](https://dev.to/q9/finally-authenticating-rails-users-with-metamask-3fj) +- [Sign-In with Ethereum - Ruby 程式庫和 Rails 範例發佈](https://blog.spruceid.com/sign-in-with-ethereum-ruby-library-release-and-rails-examples/) +- [如何使用 Ruby 連接到以太坊網路](https://www.quicknode.com/guides/web3-sdks/how-to-connect-to-the-ethereum-network-using-ruby) +- [如何使用 Ruby 產生新的以太坊地址](https://www.quicknode.com/guides/web3-sdks/how-to-generate-a-new-ethereum-address-in-ruby) + +## 中階文章 {#intermediate-articles} + +- [使用 Ruby 編寫的區塊鏈應用程式](https://www.nopio.com/blog/blockchain-app-ruby/) +- [使用 Ruby 連接到以太坊來執行智慧型合約](https://titanwolf.org/Network/Articles/Article?AID=87285822-9b25-49d5-ba2a-7ad95fff7ef9) + +## Rust 專案和工具 {#ruby-projects-and-tools} + +### 使用中 {#active} + +- [eth.rb](https://github.com/q9f/eth.rb) - _Ruby 程式庫與遠端程序呼叫用戶端,用於處理以太坊帳戶、訊息以及交易_ +- [keccak.rb](https://github.com/q9f/keccak.rb) - _以太坊使用的 Keccak (SHA3) 雜湊值_ +- [siwe-ruby](https://github.com/spruceid/siwe-ruby) - _Sign-In with Ethereum的 Ruby 實作_ +- [siwe_rails](https://github.com/spruceid/siwe_rails) - _添加 SIWE 本地登入路由的 Rails gem_ +- [siwe-rails-examples](https://github.com/spruceid/siwe-rails-examples) - _使用 Ruby on Rails 的 SIWE 範例(含自訂控製器)_ +- [omniauth-siwe](https://github.com/spruceid/omniauth-siwe) - _面向 Sign In With Ethereum (SIWE) 的 OmniAuth 策略_ +- [omniauth-nft](https://github.com/valthon/omniauth-nft) - _面向通過非同質化代幣所有權進行身份驗證的 OmniAuth 策略_ +- [ethereum-on-rails](https://github.com/q9f/ethereum-on-rails) - _Ethereum on Rails 範本,允許將 MetaMask 連結到 Ruby on Rails_ + +### 已歸檔/不再維護 {#archived--no-longer-maintained} + +- [web3-eth](https://github.com/spikewilliams/vtada-ethereum) - _使用 Ruby 呼叫以太坊節點的遠端程序遠呼叫方法_ +- [ethereum_tree](https://github.com/longhoangwkm/ethereum_tree) - _用於根據 BIP32 標準從分層確定性錢包產生以太幣地址的 Ruby 程式庫_ +- [etherlite](https://github.com/budacom/etherlite) - _Ruby on Rails 的以太坊整合_ +- [ethereum.rb](https://github.com/EthWorks/ethereum.rb) - _使用 JSON-RPC 介面傳送交易、建立合約並與之互動的 Ruby 以太坊用戶端以及可使用以太坊節點的有用工具組_ +- [omniauth-ethereum.rb](https://github.com/q9f/omniauth-ethereum.rb) - _實作面向 OmniAuth 的以太坊提供者策略_ + +想取得更多資源? 請查看[開發者首頁](/developers/)。 + +## Ruby 社群貢獻者 {#ruby-community-contributors} + +[以太坊 Ruby Telegram 群組](https://t.me/ruby_eth)是一個快速發展的社群,是討論上述任何專案和相關主題的專用資源。 diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/rust/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/rust/index.md" new file mode 100644 index 00000000000..25e1afbcdce --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/rust/index.md" @@ -0,0 +1,64 @@ +--- +title: Rust 開發者適用的以太坊資源 +description: 學習如何使用 Rust 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 Rust 型專案和工具進行以太坊開發 + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +## 智慧型合約及 Solidity 語言入門 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Rust 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者文章 {#beginner-articles} + +- [選擇以太坊用戶端](https://www.trufflesuite.com/docs/truffle/reference/choosing-an-ethereum-client) +- [Rust 以太坊用戶端](https://openethereum.github.io/) \* **請注意 OpenEthereum [已棄用](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd)且不再維護。**如欲使用此用戶端,請小心謹慎,最好改用其他用戶端實作。 +- [使用 Rust 向以太坊傳送交易](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/) +- [使用 Rust 為 Kovan 編寫 Wasm 合約的逐步教學](https://github.com/paritytech/pwasm-tutorial) + +## 中階文章 {#intermediate-articles} + +## 進階使用模式 {#advanced-use-patterns} + +- [與類 Ethereum 網路互動的 pwasm_ethereum 外部程式庫](https://github.com/openethereum/pwasm-ethereum) +- [使用 JavaScript 和 Rust 建置去中心化聊天室](https://medium.com/perlin-network/build-a-decentralized-chat-using-javascript-rust-webassembly-c775f8484b52) +- [使用 Vue.js 和 Rust 建置去中心化待辦事項應用程式](https://medium.com/@jjmace01/build-a-decentralized-todo-app-using-vue-js-rust-webassembly-5381a1895beb) + +- [使用 Rust 構建區塊鏈](https://blog.logrocket.com/how-to-build-a-blockchain-in-rust/) + +## Rust 專案和工具 {#rust-projects-and-tools} + +- [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _與類以太坊網路互動的外部程式庫集合_ +- [Lighthouse](https://github.com/sigp/lighthouse) - _快速以太坊共識層用戶端_ +- [ Ethereum WebAssembly](https://ewasm.readthedocs.io/en/mkdocs/) - _對以太坊智慧型合約執行層提議的重新設計,使用了 WebAssembly 的確定性子集_ +- [oasis_std](https://docs.rs/oasis-std/latest/oasis_std/index.html) - _OASIS 應用程式介面參考_ +- [Solaris](https://github.com/paritytech/sol-rs) - _使用原生 Parity 用戶端以太坊虛擬機的 Solidity 智慧型合約單元測試框架。_ +- [SputnikVM](https://github.com/rust-blockchain/evm) - _Rust 以太坊虛擬機實作_ +- [rust-web3](https://github.com/tomusdrw/rust-web3) - _ 使用 Rust 語言的 Wavelet 智慧型合約_ +- [Foundry](https://github.com/foundry-rs/foundry) - _以太坊應用程式開發工具組_ +- [Alloy](https://alloy.rs) - _高效能、經過充分測試和有記載的程式庫,用於與以太坊及其他基於以太坊虛擬機的鏈進行互動。_ +- [Ethers_rs](https://github.com/gakonst/ethers-rs) - _以太坊程式庫和錢包實作_ +- [SewUp](https://github.com/second-state/SewUp) - _程式庫,正如普通後端開發一樣,能夠協助使用 Rust 語言構建以太坊 Webassembly 合約_ +- [Substreams](https://github.com/streamingfast/substreams) - _平行化區塊鏈資料索引技術_ +- [Reth](https://github.com/paradigmxyz/reth) - Reth(Rust 以太坊的簡稱)是新的以太坊全節點實作 +- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _在以太坊生態系統中用 Rust 編寫的專案精選集合_ + +想取得更多資源? 請查看 [ethereum.org/developers](/developers/)。 + +## Rust 社群貢獻者 {#rust-community-contributors} + +- [Ethereum WebAssembly](https://gitter.im/ewasm/Lobby) +- [Oasis Gitter](https://gitter.im/Oasis-official/Lobby) +- [Parity Gitter](https://gitter.im/paritytech/parity) +- [Enigma](https://discord.gg/SJK32GY) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/storage/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/storage/index.md" new file mode 100644 index 00000000000..7743865a665 --- /dev/null +++ "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/storage/index.md" @@ -0,0 +1,217 @@ +--- +title: 去中心化存儲 +description: 去中心化存儲及可以將該存儲整合到去中心化應用程式的可用工具概觀 +lang: zh-tw +--- + +與單一公司或組織運作的中心化伺服器不同,去中心化存儲系統由持有全部資料中部分資料的使用者和營運者的點對點網路組成,建立了一個彈性文件存儲共用系統。 這些存儲系統可以位於基於區塊鏈的應用程式或任何點對點網路中。 + +以太坊本身可以用作去中心化存儲系統,所有智慧型合約中的程式碼存儲都是如此。 然而,當涉及大量資料時,就不符合以太坊的設計目的。 該鏈正在穩步增長,但在撰寫本文時,以太坊鏈約為 500GB - 1TB([取決於用戶端](https://etherscan.io/chartsync/chaindefault)),網路上的每個節點都需要能夠存儲所有資料。 如果鏈上資料量擴大(例如 5TB),所有節點都無法繼續運作。 此外,由於[燃料](/developers/docs/gas)費用,將這麼多資料部署到主網的成本將非常昂貴。 + +由於這些限制,我們需要不同的鏈或方法來以去中心化方式存儲大量資料。 + +在考慮去中心化儲存 (dStorage) 選項時,使用者必須牢記一些事項。 + +- 持久性機制 / 激勵結構 +- 資料保留強制 +- 去中心化 +- 共識 + +## 持續機制 / 誘因架構 {#persistence-mechanism} + +### 基於區塊鏈 {#blockchain-based} + +為了讓一段資料永久保存,我們需要使用持久性機制。 例如,在以太坊上,持久性機制意味著運行一個節點時需要考慮整條鏈。 新的資料被新增至鏈的末端,並且鏈會繼續增長,並要求每個節點複製所有內嵌的資料。 + +這稱為**基於區塊鏈**的持久性。 + +基於區塊鏈的持久性會出現區塊鏈過大,無法維護和存儲所有資料的問題(例如[許多機構](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/)預測整條區塊鏈網路需要 40ZB 的存儲容量)。 + +區塊鏈也必須具有某種類型的激勵結構。 為實現基於區塊鏈的持久性,需要向驗證者支付費用。 資料被新增到鏈上後,向驗證者支付以讓其繼續添加資料。 + +具有基於區塊鏈的持久性的平台: + +- Ethereum +- [Arweave](https://www.arweave.org/) + +### 基於合約 {#contract-based} + +我們能直觀地感受到,**基於合約**的持久性使得資料不能被每個節點複製並永久存儲,而必須根據合約協定進行維護。 這些是與多個節點簽訂的協定,承諾在一段時間內保存一段資料。 一旦時間結束,就必須向節點續費,以保持資料的持久性。 + +在大多數情況下,不會將所有資料存儲在鏈上,而是存儲資料在鏈上位置的雜湊值。 這樣,就不需要擴充整個鏈來保留所有資料。 + +具有基於合約的持久性的平台: + +- [Filecoin](https://docs.filecoin.io/about-filecoin/what-is-filecoin/) +- [Skynet](https://siasky.net/) +- [Storj](https://storj.io/) +- [0Chain](https://0chain.net/) +- [Crust Network](https://crust.network) +- [Swarm](https://www.ethswarm.org/) +- [4EVERLAND](https://www.4everland.org/) + +### 其他考量 {#additional-consideration} + +星際檔案系統是一個儲存和存取檔案、網站、應用程式和資料的分散式系統。 雖然它沒有內建激勵計劃,但可以與上述任何基於合約的激勵解決方案一起使用,以獲得更長期的持久性。 另一個將資料持久儲存在星際檔案系統上的方法是與某項固定服務(表示將你的資料固定在某處)一起使用。 你甚至可以運行自己的星際檔案系統節點來為該網路做出貢獻,從而將你和/或他人的資料免費且持久地儲存在星際檔案系統上。 + +- [星際檔案系統](https://docs.ipfs.io/concepts/what-is-ipfs/) +- [Pinata](https://www.pinata.cloud/)_(星際檔案系統固定服務)_ +- [web3.storage](https://web3.storage/)_(星際檔案系統/菲樂幣固定服務)_ +- [Infura](https://infura.io/product/ipfs)_(星際檔案系統固定服務)_ +- [IPFS Scan](https://ipfs-scan.io) _(星際檔案系統固定瀏覽器)_ +- +- [Filebase](https://filebase.com)_(星際檔案系統固定服務)_ +- [Spheron Network](https://spheron.network/) _(星際檔案系統/菲樂幣固定服務)_ + +SWARM 是一種去中心化的資料儲存和分發技術,具有儲存激勵系統和儲存空間租金價格預測機。 + +## 資料保留 {#data-retention} + +為了保留資料,系統必須有某種機制來確保已保留資料。 + +### 質詢機制 {#challenge-mechanism} + +確保已保留資料的最常用方法之一是使用向節點發出的某種類型的加密質詢以確保節點仍然擁有資料。 一個簡單的例子就是查看Arweave的存取證明。 它們向節點發出質詢,看看節點是否擁有最新區塊和過去隨機區塊的資料。 如果節點無法給出答案,就會受到處罰。 + +具有查問機制的去中心化存儲類型: + +- 0Chain +- Skynet +- Arweave +- Filecoin +- Crust Network +- 4EVERLAND + +### 去中央化性 {#decentrality} + +沒有很好的工具來衡量平台的去中心化程度,但一般來說,你會希望使用不具有某種形式的「認識客戶」的工具來提供平台並非中心化的證據。 + +無「認識客戶」之去中心化工具: + +- 0Chain(實作非 KYC 版本) +- Skynet +- Arweave +- Filecoin +- IPFS +- Ethereum +- Crust Network +- 4EVERLAND + +### 共識 {#consensus} + +這些工具中的大多數都有自己的[共識機制](/developers/docs/consensus-mechanisms/)版本,但通常它們基於[**工作量證明 (PoW)**](/developers/docs/consensus-mechanisms/pow/) 或[**權益證明 (PoS)**](/developers/docs/consensus-mechanisms/pos/)。 + +基於工作量證明: + +- Skynet +- Arweave + +基於權益證明: + +- 以太坊 +- Filecoin +- 0Chain +- Crust Network + +## 相關工具 {#related-tools} + +**IPFS - _星際檔案系統是以太坊的去中心化存儲和檔案引用系統。_** + +- [Ipfs.io](https://ipfs.io/) +- [文件](https://docs.ipfs.io/) +- [Github](https://github.com/ipfs/ipfs) + +**Storj DCS - _為開發者提供安全、私有且相容 S3 的去中心化雲端物件存儲。_** + +- [Storj.io](https://storj.io/) +- [文件](https://docs.storj.io/) +- [GitHub](https://github.com/storj/storj) + +**Skynet - _Skynet 是一個致力於去中心化網路的去中心化工作量證明鏈。

+ +- [Skynet.net](https://siasky.net/) +- [文件](https://siasky.net/docs/) +- [Github](https://github.com/SkynetLabs/) + +**Filecoin - _Filecoin 是由星際檔案系統背後的同一團隊建立的。 它是星際檔案系統概念之上的激勵層。_** + +- [Filecoin.io](https://filecoin.io/) +- [文件](https://docs.filecoin.io/) +- [Github](https://github.com/filecoin-project/) + +**Arweave - _Arweave 是一個用於存儲資料的去中心化存儲平台。_** + +- [Arweave.org](https://www.arweave.org/) +- [文件](https://docs.arweave.org/info/) +- [Arweave](https://github.com/ArweaveTeam/arweave/) + +**0chain - _0Chain 是具有分片和 blobber 的權益證明去中心化存儲平台。_** + +- [0Chain.net](https://0chain.net/) +- [文件](https://docs.0chain.net/0chain/) +- [Github](https://github.com/0chain/) + +**Crust Network - _Crust 是基於星際檔案系統的去中心化存儲平台。_** + +- [Crust.network](https://crust.network) +- [文件](https://wiki.crust.network) +- [GitHub](https://github.com/crustio) + +**Swarm - _用於以太坊 web3 堆疊的分佈式存儲平台和內容分發服務。_** + +- [EthSwarm.org](https://www.ethswarm.org/) +- [文件](https://docs.ethswarm.org/docs/) +- [Github](https://github.com/ethersphere/) + +**OrbitDB - _基於星際檔案系統的去中心化點對點資料庫。_** + +- [OrbitDB.org](https://orbitdb.org/) +- [文件](https://github.com/orbitdb/field-manual/) +- [Github](https://github.com/orbitdb/orbit-db/) + +**Aleph.im - _去中心化雲端專案(資料庫、檔案存儲、運算和去中心化身分)。 鏈下和鏈上點對點技術的獨特融合。 星際檔案系統和多鏈相容性。_** + +- [Aleph.im](https://aleph.im/) +- [文件](https://aleph.im/#/developers/) +- [Github](https://github.com/aleph-im/) + +**Ceramic - _使用者控制的星際檔案系統資料庫存儲,用於資料豐富且引人入勝的應用程式。_** + +- [Ceramic.network](https://ceramic.network/) +- [文件](https://developers.ceramic.network/learn/welcome/) +- [Github](https://github.com/ceramicnetwork/js-ceramic/) + +**Filebase - _ S3 相容的去中心化存儲和異地備援星際檔案系統固定服務。 所有透過 Filebase 上傳到星際檔案系統的檔案,都會自動被固定到 Filebase 基礎設施,並在全球複製 3 份。_** + +- [Filebase.com](https://filebase.com/) +- [文檔](https://docs.filebase.com/) +- [Github](https://github.com/filebase) + +**4EVERLAND - _Web 3.0 雲端運算平台,集存儲、運算和網路核心能力於一身,相容於 S3 並在星際檔案系統和 Arweave 等去中心化存儲網路上提供同步資料存儲。_** + +- [4everland.org](https://www.4everland.org/) +- [文件](https://docs.4everland.org/) +- [GitHub](https://github.com/4everland) + +**Kaleido - _區塊鏈即服務平台,具有點擊按鈕的星際檔案系統節點_** + +- [Kaleido](https://kaleido.io/) +- [文件](https://docs.kaleido.io/kaleido-services/ipfs/) +- [GitHub](https://github.com/kaleido-io) + +**Spheron Network - _Spheron 是一個平台即服務 (PaaS),專為希望在去中心化基礎設施上以最佳效能啟動其應用程式的去中心化應用程式而設計。 它提供開箱即用的運算、去中心化存儲、內容傳遞網路和網頁寄存。_** + +- [spheron.network](https://spheron.network/) +- [文件](https://docs.spheron.network/) +- [GitHub](https://github.com/spheronFdn) + +## 衍生閱讀 {#further-reading} + +- [什麼是去中心化存儲?](https://coinmarketcap.com/alexandria/article/what-is-decentralized-storage-a-deep-dive-by-filecoin) - _CoinMarketCap_ +- [打破關於去中心化存儲的五個常見誤解](https://www.storj.io/blog/busting-five-common-myths-about-decentralized-storage) - _Storj_ + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ + +## 相關主題 {#related-topics} + +- [開發架構](/developers/docs/frameworks/) diff --git a/public/content/translations/zh-tw/19) Learn Pages 2/glossary/index.md b/public/content/translations/zh-tw/19) Learn Pages 2/glossary/index.md new file mode 100644 index 00000000000..5f2b6f00f58 --- /dev/null +++ b/public/content/translations/zh-tw/19) Learn Pages 2/glossary/index.md @@ -0,0 +1,499 @@ +--- +title: 以太坊詞彙表 +description: 與以太坊相關的技術和非技術術語的不完整詞彙表 +lang: zh-tw +--- + +# 詞彙表 {#ethereum-glossary} + +## \# {#section-numbers} + + + + + +## A {#section-a} + + + + + + + + + + + + + + + + + + + + + +## B {#section-b} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## C {#section-c} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## D {#section-d} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## E {#section-e} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## F {#section-f} + + + + + + + + + + + + + + + + + + + +## G {#section-g} + + + + + + + + + + + + + + + +## H {#section-h} + + + + + + + + + + + + + +## I {#section-i} + + + + + + + + + + + + + +## K {#section-k} + + + + + + + + + + + +## L {#section-l} + + + + + + + + + + + + + + + + + +## M {#section-m} + + + + + + + + + + + + + + + + + + + + + + + + + +## N {#section-n} + + + + + + + + + + + + + +## O {#section-o} + + + + + + + + + + + + + +## P {#section-p} + + + + + + + + + + + + + + + + + + + + + + + + + + + +## R {#section-r} + + + + + + + + + + + + + + + +## S {#section-s} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## T {#section-t} + + + + + + + + + + + + + + + + + + + +## V {#section-v} + + + + + + + + + + + + + +## W {#section-w} + + + + + + + + + +## Z {#section-z} + + + + + + + + + +## 來源 {#sources} + +_摘自 [Andreas M. Antonopoulos 與 Gavin Wood](https://ethereumbook.info) 所著 [《精通以太坊》](https://github.com/ethereumbook/ethereumbook)(依據 CC-BY-SA 協議)_ + + + +## 完善本頁面 {#contribute-to-this-page} + +我們是否有所遺漏? 是否存在謬誤? 請在 GitHub 上為此詞彙表貢獻力量,幫助我們改進! + +[瞭解更多關於如何貢獻的資訊](/contributing/adding-glossary-terms) diff --git a/public/content/translations/zh-tw/19) Learn Pages 2/history/index.md b/public/content/translations/zh-tw/19) Learn Pages 2/history/index.md new file mode 100644 index 00000000000..6777c2d197e --- /dev/null +++ b/public/content/translations/zh-tw/19) Learn Pages 2/history/index.md @@ -0,0 +1,624 @@ +--- +title: 以太坊歷史及分叉 +description: 以太坊區塊鏈的歷史,包含主要里程碑、更新及分叉。 +lang: zh-tw +sidebarDepth: 1 +--- + +# 以太坊歷史 {#the-history-of-ethereum} + +關於以太坊區塊鏈的所有重要里程碑、分叉與升級的時間軸。 + + + +分叉是需要對網路進行重大技術升級或變更的時刻 – 分叉通常源自以太坊改進提案 (EIP) 並變更了以太坊協定的「規則」。 + +需要升級集中控制的傳統軟體時,公司只會為終端使用者發佈一個新版本。 而區塊鏈的運作則有所不同,因其並無所謂的集中所有權。 以太坊用戶端必須升級自己的軟體,以實作新分叉規則。 加上區塊生成者(在工作量證明世界中為礦工,在權益證明世界中為驗證者)和節點必須依據新規則生成區塊並作驗證。 關於共識機制的更多資訊 + +這些規則變更可能會在網路中建立臨時分叉。 新區塊可以依據新規則或舊規則產生。 分叉通常會提前商定,以便用戶端能夠一致採用變更,並使升級後的分叉成為主鏈。 然而,在極少數情況下,對分叉的不同意見可能導致網路永久硬分叉 – 最爲著名的是去中心化自治組織分叉產生了以太坊經典。 + + + + + +以太坊底層的軟體由兩部分組成,稱為 [執行層](/glossary/#execution-layer) 和 [共識層](/glossary/#consensus-layer)。 + +**執行層升級命名** + +自 2021 年以來,**執行層**的升級是依據 [前幾屆開發者大會舉辦地點](https://devcon.org/en/past-events/) 的城市名稱按時間順序命名的: + +| 升級名稱 | 開發者大會年份 | 開發者大會編號 | 升級日期 | +| ------------ | ----------- | ------------- | ------------ | +| Berlin | 2015 | 0 | 2021 年 4 月 15 日 | +| London | 2016 | I | 2021 年 8 月 5 日 | +| Shanghai | 2017 | II | 2023 年 4 月 12 日 | +| **Cancun** | 2018 | III | 2024 年 3 月 13 日 | +| _Prague_ | 2019 | IV | 尚未決定 | +| _Osaka_ | 2020 | V | 尚未決定 | +| _Bogota_ | 2022 | VI | 尚未決定 | +| _Bangkok_ | 2024 | VII | 尚未決定 | + +**共識升級命名** + +自 [信標鏈](/glossary/#beacon-chain) 推出以來,**共識層**的升級以天體恒星依照字母順序命名: + +| 升級名稱 | 升級日期 | +| ----------------------------------------------------------- | ------------ | +| 信標鏈創世塊 | 2020 年 12 月 1 日 | +| [Altair](https://en.wikipedia.org/wiki/Altair) | 2021 年 10 月 27 日 | +| [Bellatrix](https://en.wikipedia.org/wiki/Bellatrix) | 2022 年 9 月 6 日 | +| [Capella](https://en.wikipedia.org/wiki/Capella) | 2023 年 4 月 12 日 | +| [**Deneb**](https://en.wikipedia.org/wiki/Deneb) | 2024 年 3 月 13 日 | +| [_Electra_]() | 尚未決定 | + +**組合命名** + +執行層和共識層升級最初是在不同時間推出的,但在 2022 年的 [合併](/roadmap/merge/) 之後,這些升級已同時部署。 因此,出現了使用單一組合詞的通俗術語來簡化對這些升級的引用。 這種做法始於 _Shanghai-Capella_ 升級,通常稱為「**Shapella**」,並在 _Cancun-Deneb_ 升級時沿用了這種做法,該升級稱為「**Dencun**」。 + +| 執行層升級 | 共識層升級 | 簡短名稱 | +| ----------------- | ----------------- | ---------- | +| Shanghai | Capella | 「Shapella」 | +| Cancun | Deneb | 「Dencun」 | + + + +直接查閱一些特別重要的過往升級的資訊:[信標鏈](/roadmap/beacon-chain/);[合併](/roadmap/merge/);和 [EIP-1559](#london) + +想瞭解未來的協定升級嗎? [瞭解以太坊開發藍圖上即將進行的升級](/roadmap/)。 + + + +## 2024 年 {#2024} + +### Cancun-Deneb(「Dencun」) {#dencun} + + + +#### Cancun 升級總結 {#cancun-summary} + +Cancun 升級包含對以太坊_執行層_的一系列改進,旨在與 Deneb 共識層升級一起提高可擴展性。 + +值得注意的是,該升級包括稱為 **Proto-Danksharding** 的 EIP-4844,該提案顯著降低了二層網路卷軸的資料存儲成本。 這是透過引入資料「二進位大型物件」來實現的,二進位大型物件使卷軸能夠在短時間內將資料發佈到主網。 這顯著降低了二層網路卷軸使用者的交易費。 + + + +
    +
  • EIP-1153 - 暫態存儲操作碼
  • +
  • EIP-4788 - 以太坊虛擬機中的信標區塊根
  • +
  • EIP-4844 - 分片二進位大型物件交易 (Proto-Danksharding)
  • +
  • EIP-5656 - MCOPY - 記憶體複製指令
  • +
  • EIP-6780 - SELFDESTRUCT 只能存在於相同交易中
  • +
  • EIP-7516 - BLOBBASEFEE 操作碼
  • +
+ +
+ +- [二層網路卷軸](/layer-2/) +- [Proto-Danksharding](/roadmap/scaling/#proto-danksharding) +- [Danksharding](/roadmap/danksharding/) +- [閱讀 Cancun 升級規範](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md) + +#### Deneb 升級總結 {#deneb-summary} + +Deneb 升級包含一系列對以太坊_共識層_的改進,旨在提升可擴展性。 此升級與 Cancun 執行升級同步進行,以啟用 Proto-Danksharding (EIP-4844),並對信標鏈進行其他改進。 + +預先產生的已簽署「自願退出訊息」不再過期,因此可讓使用者在將資金質押到第三方節點營運商時擁有更多控制權。 透過這個已簽署的退出訊息,質押者可以委託節點運作,同時保持隨時安全退出和提取資金的能力,而不需要徵求任何人的許可。 + +EIP-7514 將驗證者加入網路的「流失」率限制在每個時期八 (8) 個,從而收緊了以太幣的發行。 由於以太幣發行量與質押的以太幣總量成正比,因此限制加入的驗證者數量會限制新發行以太幣的_成長率_,同時也降低了對節點營運商的硬體要求,有助於去中心化。 + + + +
    +
  • EIP-4788 - 以太坊虛擬機中的信標區塊根
  • +
  • EIP-4844 - 分片二進位大型物件交易
  • +
  • EIP-7044 - 永久有效的已簽署自願退出
  • +
  • EIP-7045 - 增加最大證明納入時隙
  • +
  • EIP-7514 - 加入最大時期流失限制
  • +
+ +
+ +- [閱讀 Deneb 升級規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/) +- [坎昆-Deneb(「Dencun」)升級常見問題](/roadmap/dencun/) + + + +## 2023 年 {#2023} + +### 上海-Capella(「Shapella」) {#shapella} + + + +#### 上海升級總結 {#shanghai-summary} + +上海升級為執行層引入了質押提款的功能。 隨著與 Capella 升級同步進行,區塊能夠支援提款操作,使質押者可以將他們的以太幣從信標鏈提取到執行層。 + + + + + + + +- [閱讀上海升級規範](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) + +#### Capella 升級總結 {#capella-summary} + +Capella 升級是共識層(信標鏈)的第三次重大升級,實現了質押提款。 Capella 升級與執行層升級「上海升級」同步進行,並實現了質押提款的功能。 + +這次共識層升級讓未提供初始存款提款憑證的質押者能夠提供提款憑證,從而實現提款。 + +此升級還提供了自動帳戶掃描功能,可持續處理驗證者帳戶的任何可用獎勵支付或全額提款。 + +- [更多關於質押提款的資訊](/staking/withdrawals/)。 +- [閱讀上海升級規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/) + + + +## 2022 年 {#2022} + +### 巴黎升級(合併) {#paris} + + + +#### 總結 {#paris-summary} + +由於工作量證明區塊鏈超過了[終端總難度](/glossary/#terminal-total-difficulty) 58750000000000000000000,因而觸發了巴黎升級。 這發生在2022年9月15日的第15537393區塊上,觸發了下一個區塊的巴黎升級。 這發生在 2022 年 9 月 15 日區塊 15537393 上,並在下一個區塊處觸發了巴黎升級。 巴黎升級就是[合併](/roadmap/merge/)過渡,以太坊的主要功能結束了[工作量證明](/developers/docs/consensus-mechanisms/pow)挖礦演算法及相關共識邏輯並啟動了[權益證明](/developers/docs/consensus-mechanisms/pos)。 巴黎升級本身是對[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)的升級(相當於共識層上的 Bellatrix 升級),讓執行用戶端能夠從與其連線的[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)接受指令。 這需要啟動一組新的內部應用程式介面方法,統稱為[引擎應用程式介面](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)。 這次升級可以說是自[家園](#homestead)以來以太坊歷史上最重要的升級! + +- [閱讀 Paris 升級規範](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md) + + + +
    +
  • EIP-3675將共識層升級為權益證明
  • +
  • EIP-4399以 PREVRANDAO 取代 DIFFICULTY 操作碼
  • +
+ +
+ +--- + +### Bellatrix 升級 {#bellatrix} + + + +#### 總結 {#bellatrix-summary} + +Bellatrix 升級是[信標鏈](/roadmap/beacon-chain)的第二次預定升級,讓信標鏈為[合併](/roadmap/merge/)做準備。 它將驗證者因怠惰及進行了可被罰沒的行為而受到的懲罰提高到其全部價值。 Bellatrix 升級還包括對分叉選擇規則的更新,讓信標鏈為合併以及從最後一個工作量證明區塊過渡到第一個權益證明區塊做好準備。 這包括讓共識用戶端意識到[終端總難度](/glossary/#terminal-total-difficulty) 58750000000000000000000。 + +- [閱讀 Bellatrix 升級規範](https://github.com/ethereum/consensus-specs/tree/dev/specs/bellatrix) + +--- + +### 灰色冰川升級 {#gray-glacier} + + + +#### 總結 {#gray-glacier-summary} + +灰色冰川網路升級將[難度炸彈](/glossary/#difficulty-bomb)推遲了三個月。 這是此次升級引入的唯一變更,本質上類似於[箭形冰川](#arrow-glacier)和[繆爾冰川](#muir-glacier)升級。 [拜占庭](#byzantium)、[君士坦丁堡](#constantinople)和 [London](#london) 網路升級也做了類似的變更。 + +- [以太坊基金會部落格 - 灰色冰川升級公告](https://blog.ethereum.org/2022/06/16/gray-glacier-announcement/) + + + +
    +
  • EIP-5133將難度炸彈推遲至 2022 年 9 月
  • +
+ +
+ + + +## 2021 年 {#2021} + +### 箭形冰川升級 {#arrow-glacier} + + + +#### 總結 {#arrow-glacier-summary} + +箭形冰川網路升級將[難度炸彈](/glossary/#difficulty-bomb)推遲數月。 這是此次升級引入的唯一變更,本質上類似於[謬爾冰川](#muir-glacier)升級。 [拜占庭](#byzantium)、[君士坦丁堡](#constantinople)和[倫敦](#london)網絡升級也做了類似的更改。 + +- [以太坊基金會部落格 - 箭形冰川升級公告](https://blog.ethereum.org/2021/11/10/arrow-glacier-announcement/) +- [以太坊牧貓人組織 - 以太坊箭形冰川升級](https://medium.com/ethereum-cat-herders/ethereum-arrow-glacier-upgrade-e8d20fa4c002) + + + +
    +
  • EIP-4345將難度炸彈推遲至 2022 年 6 月
  • +
+ +
+ +--- + +### Altair 升級 {#altair} + + + +#### 總結 {#altair-summary} + +Altair 升級是對[信標鏈](/roadmap/beacon-chain)進行的第一次預定升級。 此次升級增加了對「同步委員會」的支援—支援輕量用戶端,在向合併進展的過程中,增加了對驗證者怠惰及可被罰沒行為的懲罰。 + +- [閱讀 Altair 升級規範](https://github.com/ethereum/consensus-specs/tree/dev/specs/altair) + +#### 趣聞! {#altair-fun-fact} + +Altair 升級是第一個有確切發佈時間的重大網路升級。 先前的每一次升級均基於一個已經在工作量證明鏈上申報過的區塊編號,而該鏈上的區塊時間各不相同。 信標鏈不需要解析工作量證明,而是在一個基於時間、由 32 個 12 秒「時隙」組成的時期系統上運作。在這個系統上,驗證者可以提出區塊。 這就是為什麼我們能準確知曉達到時期 74,240 以及 Altair 升級啟動的時間! + +- [區塊時間](/developers/docs/blocks/#block-time) + +--- + +### London 升級 {#london} + + + +#### 總結 {#london-summary} + +London 升級引入了 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559),對交易費市場進行了改革,同時也對燃料費的退款處理方式和[冰河期](/glossary/#ice-age)日程進行了修改。 + +#### 什麼是 London 升級/EIP-1559? {#eip-1559} + +London 升級前,以太坊的區塊為固定大小。 當網路需求高時,這些區塊會滿載運作。 因此,使用者常需要等網路需求降低時,交易才會被添加進區塊,這導致了糟糕的使用者體驗。 London 升級將可變大小的區塊引入以太坊。 + +隨著 2021 年 8 月的 [London 升級](/history/#london),以太坊網路上交易費的計算方式發生了變化。 在 London 升級之前,燃料費的計算不區分`基本費用`和`優先費`,如下: + +假設 Alice 必須向 Bob 支付 1 以太幣。 在交易中,燃料限制是 21,000 單位,燃料價格為 200 gwei。 + +總費用將為:`Gas units (limit) * Gas price per unit` i.e `21,000 * 200 = 4,200,000 gwei` 或 0.0042 以太幣 + +London 升級中的 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 實作使交易費機制更加複雜,但也讓燃料費更加可預測,最終形成了更高效的交易費市場。 使用者可以透過 `maxFeePerGas` 提交交易,指明他們願意為要執行交易支付多少費用,並且使用者知道支付的費用不會超過燃料市價 (`baseFeePerGas`),並且會得到任何剩餘費用(扣除小費)的退款。 + +解釋 EIP-1559 及其帶來的好處之影片:[EIP-1559 解釋](https://www.youtube.com/watch?v=MGemhK9t44Q) + +- [你是去中心化應用程式開發者嗎? 記得要升級你的函式庫與工具。](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/london-ecosystem-readiness.md) +- [閱讀以太坊基金會公告](https://blog.ethereum.org/2021/07/15/london-mainnet-announcement/) +- [閱讀以太坊貓牧人組織的解釋](https://medium.com/ethereum-cat-herders/london-upgrade-overview-8eccb0041b41) + + + +
    +
  • EIP-1559改善交易費市場
  • +
  • EIP-3198從區塊傳回 BASEFEE
  • +
  • EIP-3529 - 減少用於以太坊虛擬機器運作的燃料退款
  • +
  • EIP-3541 - 防止部署以 0xEF 開頭的合約
  • +
  • EIP-3554將冰河期延遲至 2021 年 12 月
  • +
+ +
+ +--- + +### 柏林升級 {#berlin} + + + +#### 總結 {#berlin-summary} + +柏林升級優化了某些以太坊虛擬機器動作的燃料成本,並增加了對多種交易類型的支援。 + +- [了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2021/03/08/ethereum-berlin-upgrade-announcement/) +- [了解更多關於Ethereum Cat Herder之解釋.](https://medium.com/ethereum-cat-herders/the-berlin-upgrade-overview-2f7ad710eb80) + + + +
    +
  • EIP-2565降低 ModExp 燃料成本
  • +
  • EIP-2718更容易支援多種交易類型
  • +
  • EIP-2929增加狀態存取操作碼的燃料成本
  • +
  • EIP-2930新增可選存取清單
  • +
+ +
+ + + +## 2020 年 {#2020} + +### 信標鏈創世塊 {#beacon-chain-genesis} + + + +#### 總結 {#beacon-chain-genesis-summary} + +[信標鏈](/roadmap/beacon-chain/)需要 16384 個存了 32 個質押以太幣的帳戶,以確保安全上線。 這發生於 2020 年 11 月 27 日,意味著信標鏈在 2020 年 12 月 1 日開始產生區塊。 這是實現[以太坊願景](/roadmap/vision/)的第一步,十分重要。 + +[閱讀以太坊基金會公告](https://blog.ethereum.org/2020/11/27/eth2-quick-update-no-21/) + + + 信標鏈(Beacon Chain) + + +--- + +### 部署質押存款合約 {#staking-deposit-contract} + + + +#### 總結 {#deposit-contract-summary} + +質押存款合約將[質押](/glossary/#staking)引入以太坊生態系統。 雖然是一個[主網](/glossary/#mainnet)合約,但它直接影響到[信標鏈](/roadmap/beacon-chain/)的發佈時間軸,而信標鏈是[以太坊升級](/roadmap/)的重要部分。 + +[閱讀以太坊基金會公告](https://blog.ethereum.org/2020/11/04/eth2-quick-update-no-19/) + + + 質押 + + +--- + +### 繆爾冰川升級 {#muir-glacier} + + + +#### 總結 {#muir-glacier-summary} + +繆爾冰川分叉使[難度炸彈](/glossary/#difficulty-bomb)推遲。 增加[工作量證明](/developers/docs/consensus-mechanisms/pow/)共識機制的區塊難度可能會增加發送交易和使用去中心化應用程式的等待時間,從而降低以太坊的可用性。 + +- [了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2019/12/23/ethereum-muir-glacier-upgrade-announcement/) +- [了解更多關於Ethereum Cat Herder之解釋.](https://medium.com/ethereum-cat-herders/ethereum-muir-glacier-upgrade-89b8cea5a210) + + + +
    +
  • EIP-2384將難度炸彈再推遲 4,000,000 個區塊,或約 611 天。
  • +
+ +
+ + + +## 2019 年 {#2019} + +### 伊斯坦堡升級 {#istanbul} + + + +#### 總結 {#istanbul-summary} + +伊斯坦堡分叉: + +- 最佳化[以太坊虛擬機](/developers/docs/ethereum-stack/#ethereum-virtual-machine)中特定動作的[燃料](/glossary/#gas)成本。 +- 提高受到阻斷服務攻擊後的韌性。 +- 使基於「簡潔非互動式知識論證」與「可擴充透明知識論證」的二層網路擴容解決方案具有更佳的效能。 +- 使以太坊和 Zcash 能夠互通。 +- 讓合約能夠引入更多創意功能。 + +[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2019/11/20/ethereum-istanbul-upgrade-announcement/) + + + +
    +
  • EIP-152允許以太幣與 Zcash 等受隱私保護的數位貨幣一起使用。
  • +
  • EIP-1108以更低廉的加密技術改善燃料成本。
  • +
  • EIP-1344透過新增 CHAINID 操作碼,保護以太坊免受重播攻擊。
  • +
  • EIP-1884最佳化基於消耗量的操作碼燃料價格。
  • +
  • EIP-2028降低了 CallData 的成本,從而允許更多資料放入區塊中 – 這對二層網路擴容很有幫助。
  • +
  • EIP-2200其他操作碼的燃料價格變更。
  • +
+ +
+ +--- + +### 君士坦丁堡升級 {#constantinople} + + + +#### 總結 {#constantinople-summary} + +君士坦丁堡分叉: + +- 將區塊[挖礦](/developers/docs/consensus-mechanisms/pow/mining/)獎勵從 3 以太幣減少至 2 以太幣。 +- 確保在[實作權益證明](#beacon-chain-genesis)之前,區塊鏈不會凍結。 +- 最佳化[以太坊虛擬機](/developers/docs/ethereum-stack/#ethereum-virtual-machine)中特定動作的[燃料](/glossary/#gas)成本。 +- 新增了與尚未建立的地址進行互動的能力。 + +[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2019/02/22/ethereum-constantinople-st-petersburg-upgrade-announcement/) + + + +
    +
  • EIP-145最佳化特定鏈上操作的成本。
  • +
  • EIP-1014讓你能夠與尚未建立的地址互動。
  • +
  • EIP-1052最佳化特定鏈上操作的成本。
  • +
  • EIP-1234確保在權益證明之前,區塊鏈不會凍結,並將區塊獎勵從 3 以太幣減少至 2 以太幣。
  • +
+ +
+ + + +## 2017 年 {#2017} + +### 拜占庭升級 {#byzantium} + + + +#### 總結 {#byzantium-summary} + +拜占庭分叉: + +- 將區塊[挖礦](/developers/docs/consensus-mechanisms/pow/mining/)獎勵從 5 以太幣減少至 3 以太幣。 +- 將[難度炸彈](/glossary/#difficulty-bomb)推遲一年。 +- 新增了呼叫其他合約而不變更狀態的能力。 +- 新增了某些加密方法,以實現[二層網路擴容](/developers/docs/scaling/#layer-2-scaling)。 + +[閱讀以太坊基金會公告](https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/) + + + +
    +
  • EIP-140新增 REVERT 操作碼。
  • +
  • EIP-658在交易收據中新增了狀態欄位,以表示成功或失敗。
  • +
  • EIP-196為支援零知識簡潔非互動式知識論證新增橢圓曲線和純量乘法。
  • +
  • 使基於「簡潔非互動式知識論證」與「可擴容透明知識論證」的二層網路擴容解決方案具有更佳的效能。
  • +
  • EIP-198啟用 RSA 簽名驗證。
  • +
  • EIP-211新增對可變長度傳回值的支援。
  • +
  • EIP-214新增 STATICCALL 作業碼,能夠呼叫其他合約而不變更狀態。
  • +
  • EIP-100變更難度調整公式。
  • +
  • EIP-649難度炸彈延遲 1 年,並將區塊獎勵從 5 以太幣減至 3 以太幣。
  • +
+ +
+ + + +## 2016 年 {#2016} + +### Spurious Dragon(偽龍)升級 {#spurious-dragon} + + + +#### 總結 {#spurious-dragon-summary} + +Spurious Dragon 分叉為對阻斷服務 (DoS) 攻擊(2016 年 9 月/10 月)的第二個回應,包括: + +- 調整操作碼價格,以防網路未來再受攻擊。 +- 啟用區塊鏈狀態的「區塊鏈減重」。 +- 新增重播攻擊保護。 + +[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon/) + + + +
    +
  • EIP-155防止在一條以太坊鏈上的交易被重複廣播到另一條鏈,例如測試網交易在以太坊主鏈上重播。
  • +
  • EIP-160調整 EXP 操作碼的價格 – 讓透過計算成本高昂的合約作業來降低網路速度變得更加困難。
  • +
  • EIP-161允許刪除透過阻斷服務攻擊產生的空帳戶。
  • +
  • EIP-170將區塊鏈上合約可達到的最大程式碼大小改為 24576 位元組。
  • +
+ +
+ +--- + +### 橘子口哨升級 {#tangerine-whistle} + + + +#### 總結 {#tangerine-whistle-summary} + +橘子口哨分叉是對網路上阻斷服務 (DoS) 攻擊(2016 年 9 月/10 月)的第一個回應,包括: + +- 解決與定價過低的操作程式碼有關的緊急網路健康問題。 + +[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2016/10/18/faq-upcoming-ethereum-hard-fork/) + + + +
    +
  • EIP-150增加可用於垃圾郵件攻擊的操作碼的燃料成本
  • +
  • EIP-158透過刪除大量空帳戶來減少狀態大小,這些空帳戶由於早期版本的以太坊協定中的缺陷而以非常低的成本置於狀態中。 +
  • +
+ +
+ +--- + +### 去中心化自治組織分叉 {#dao-fork} + + + +#### 總結 {#dao-fork-summary} + +去中心化自治組織分叉是為了回應 [2016 去中心化自治組織攻擊](https://www.coindesk.com/learn/understanding-the-dao-attack/),當時一個不安全的[去中心化自治組織](/glossary/#dao)合約被駭客盜走了超過 360 萬個以太幣。 這個分叉將資金從有問題的合約轉移到一個新合約,新合約只有一個功能:提款。 任何損失了資金的人都可以在他們的錢包中提取以太幣,每 100 個去中心化自治組織代幣可以提取 1 個以太幣。 + +此行動由以太坊社群投票贊成. 所有以太幣持有者都能透過[投票平台](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/)上的交易進行投票。 此分叉決議獲得85%贊成. + +一些礦工拒絕分叉,因為那次去中心化自治組織事件並不是協定中的缺陷。 其延續原始以太坊, 而其目前稱為[以太坊經典/Ethereum Classic](https://ethereumclassic.org/). + +[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2016/07/20/hard-fork-completed/) + +--- + +### 家園升級 {#homestead} + + + +#### 總結 {#homestead-summary} + +家園分叉著眼於未來。 包括若干協定修改和網路變更,使以太坊能夠進一步進行網路升級。 + +[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2016/02/29/homestead-release/) + + + +
    +
  • EIP-2對合約建立過程進行編輯。
  • +
  • EIP-7新增操作碼:DELEGATECALL
  • +
  • EIP-8引入 devp2p 正向相容性要求
  • +
+ +
+ + + +## 2015 年 {#2015} + +### 前沿解凍升級 {#frontier-thawing} + + + +#### 總結 {#frontier-thawing-summary} + +前沿解凍升級提高了每個[區塊](/glossary/#block) 5,000 單位[燃料](/glossary/#gas)的限制,並將預設燃料價格設為 51 [gwei](/glossary/#gwei)。 這樣便能進行交易 - 交易需要 21,000 單位燃料。 引入[難度炸彈](/glossary/#difficulty-bomb)是爲了保證未來硬分叉到[權益證明](/glossary/#pos)。 + +- [了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2015/08/04/the-thawing-frontier/) +- [閱讀以太坊協定更新 1](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1/) + +--- + +### 前沿升級 {#frontier} + + + +#### 總結 {#frontier-summary} + +前沿升級是以太坊專案的已上線準系統實作。 該版本在奧利匹克測試階段成功完成之後推出。 它面向的是技術使用者,特別是開發者。 [區塊](/glossary/#block)有 5,000 單位的[燃料](/glossary/#gas)限制。 此「解凍」階段使礦工能夠開始作業,並使早期採用者能夠有足夠的時間來安裝用戶端。 + +[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2015/07/22/frontier-is-coming-what-to-expect-and-how-to-prepare/) + + + +## 2014 年 {#2014} + +### 以太幣銷售 {#ether-sale} + + + +以太幣正式發售 42 天。 你可以使用比特幣購買以太幣。 + +[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/) + +--- + +### 發佈黃皮書 {#yellowpaper} + + + +黃皮書由 Gavin Wood 博士撰寫,介紹了以太坊協議之技術定義。 + +[檢視黃皮書](https://github.com/ethereum/yellowpaper) + + + +## 2013 年 {#2013} + +### 發佈白皮書 {#whitepaper} + + + +2015 年專案啟動之前,以太坊創辦人 Vitalik Buterin 於 2013 年發表了這篇介紹白皮書。 + + + 白皮書 + diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/anatomy/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/anatomy/index.md" new file mode 100644 index 00000000000..d460361047e --- /dev/null +++ "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/anatomy/index.md" @@ -0,0 +1,655 @@ +--- +title: 智慧型合約結構 +description: 智慧型合約深入解析:功能、資料、變數。 +lang: zh-tw +--- + +智慧型合約是在以太坊地址運作的程式。 由可以在接收交易後執行的資料與函數組成。 此為智慧型合約組成的概覽。 + +## 先決條件 {#prerequisites} + +務必先瞭解[智慧型合約](/developers/docs/smart-contracts/)。 此文件假設你已熟悉 JavaScript 或 Python 等程式語言。 + +## 資料 {#data} + +任何合約資料都須指定至 `storage` 或 `memory` 這兩個位置。 修改智慧型合約的存儲很麻煩,所以必須謹慎思考要將資料儲存至何處。 + +### 儲存 {#storage} + +永久資料也稱為存儲,並由狀態變數表示。 這些值會永久儲存於區塊鏈上。 你需要聲明一個類型,以便於合約在編譯時可以追蹤在區塊鏈上需要多少存儲空間。 + +```solidity +// Solidity 範例 +contract SimpleStorage { + uint storedData; //狀態變量 + // ... +} +``` + +```python +# Vyper 範例 +storedData: int128 +``` + +如果已編寫過物件導向程式語言,應該會熟悉大多數類型。 但如果剛接觸以太坊開發,則會不熟悉 `address` 類型。 + +一個 `address` 類型可以容納一個以太坊地址,相當於 20 個位元組或 160 個位元。 它會以十六進制的形式傳回,前綴是 0x。 + +其他類型包含: + +- 布林值 +- 整數 +- 定點數 +- 固定規模的位元組陣列 +- 動態規模的位元組陣列 +- 有理數和整數常值 +- 字串常值 +- 十六進位常值 +- 列舉 + +如需更多說明,請參閱文件: + +- [查看 Vyper 類型](https://vyper.readthedocs.io/en/v0.1.0-beta.6/types.html#value-types) +- [查看 Solidity 類型](https://solidity.readthedocs.io/en/latest/types.html#value-types) + +### 記憶體 {#memory} + +僅在合約函數的執行生命週期儲存的值稱為記憶體變數。 由於這些變數不是永久儲存在區塊鏈上,所以使用成本要低得多。 + +在 [Solidity 文件](https://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html?highlight=memory#storage-memory-and-the-stack)中深入瞭解以太坊虛擬機如何儲存資料(存儲、記憶體和堆疊)。 + +### 環境變數 {#environment-variables} + +除了在自已的合約上定義的變數外,還有一些特殊的全域變數。 它們主要用於提供有關區塊鏈或目前交易的資訊。 + +範例: + +| **屬性** | **狀態變數** | **描述** | +| ----------------- | -------- | ----------- | +| `block.timestamp` | uint256 | 目前區塊時期的時間戳 | +| `msg.sender` | address | 訊息發送者(目前調用) | + +## 函式 {#functions} + +用最簡單的術語來說,函數可以取得資訊或者設定資訊來回應傳入的交易。 + +有兩種函數調用方式: + +- `Internal` – 不會建立以太坊虛擬機調用 + - 內部函數和狀態變數只能在內部存取(如在目前合約內部或從其衍生的合約存取) +- `External` – 會建立以太坊虛擬機調用 + - 外部函數是合約介面的一部分,這表示可以從其他合約與透過交易調用。 一個外部函數 `f` 不可以被內部調用(即 `f()` 無法工作,但 `this.f()` 可以)。 + +它們還可以是 `Public` 或 `Private` + +- `public` 函數可以在合約內部調用或者透過訊息在合約外部調用 +- `Private` 函數僅定義它們的合約內部可見,而不會出現在衍生合約中 + +函數和狀態變數都可以被定義為 Public 或 Private + +以下是更新合約狀態變數的函數: + +```solidity +// Solidity 範例 +function update_name(string value) public { + dapp_name = value; +} +``` + +- `String` 類型的參數 `Value` 傳入函數 `update_name` +- 該函數聲明為 `public`,表示任何人都能存取 +- 該函數未聲明為 `view`,因此可以修改合約狀態 + +### 檢視函式 {#view-functions} + +這些函數保證不會修改合約資料的狀態。 常見範例為「getter」函數,例如,你可能用此接收使用者的餘額。 + +```solidity +// Solidity 範例 +function balanceOf(address _owner) public view returns (uint256 _balance) { + return ownerPizzaCount[_owner]; +} +``` + +```python +dappName: public(string) + +@view +@public +def readName() -> string: + return dappName +``` + +以下情況被視為修改狀態: + +1. 寫入狀態變數。 +2. [釋出事件](https://solidity.readthedocs.io/en/v0.7.0/contracts.html#events)。 +3. [建立其他合約](https://solidity.readthedocs.io/en/v0.7.0/control-structures.html#creating-contracts)。 +4. 使用 `selfdestruct` 。 +5. 透過調用傳送以太幣。 +6. 調用任何未標記為 `view` 或 `pure` 的函數。 +7. 使用低階調用。 +8. 使用包含特定作業碼的行內組譯。 + +### Constructor 函式 {#constructor-functions} + +`constructor` 函數只在首次部署時執行一次。 與許多基於類型之程式語言的 `constructor` 函數類似,這些函數常將狀態變數初始化為指定值。 + +```solidity +// Solidity 示例 +// 初始化合約數據, 設置 `owner`為合約的創建者。 +constructor() public { + // 所有智慧型合約依賴外部交易來觸發其函數。 + // `msg` 是一個全局變量,包含了給定交易的相關數據, + // 例如發送者的地址和交易中包含的ETH數量。 + // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties + owner = msg.sender; +} +``` + +```python +# Vyper 範例 + +@external +def __init__(_beneficiary: address, _bidding_time: uint256): + self.beneficiary = _beneficiary + self.auctionStart = block.timestamp + self.auctionEnd = self.auctionStart + _bidding_time +``` + +### 內建函式 {#built-in-functions} + +除了自己合約上定義的變數與函數外,還有一些特殊的內建函數。 最明顯的例子: + +- `address.send()` – Solidity +- `send(address)` – Vyper + +這讓合約可以給其他帳戶傳送以太幣。 + +## 編寫函式 {#writing-functions} + +你的函數需要: + +- 參數變數及其類型(若接受參數) +- 聲明為 internal/external +- 聲明為 pure/view/payable +- 傳回類型(若傳回值) + +```solidity +pragma solidity >=0.4.0 <=0.6.0; + +contract ExampleDapp { + string dapp_name; //state variable + + /*在合約部署時調用以初始化數據*/ + constructor() public{ + dapp_name = "My Example dapp"; + } + + // Get 函數 + function read_name() public view returns(string){ + return dapp_name; + } + + // Set 函數 + function update_name(string value) public { + dapp_name = value; + } +} +``` + +完整的合約看起來可能如上所示。 這裡的 `constructor` 函數為 `dapp_name` 變數提供初始值。 + +## 事件與記錄 {#events-and-logs} + +事件讓你的智慧型合約能夠與你的前端或其他訂閱應用程式進行通訊。 一旦交易被驗證並新增到區塊中,智慧型合約就可以發出事件和記錄訊息,然後前端就能夠處理和利用這些資訊。 + +## 附註範例 {#annotated-examples} + +以下是一些用 Solidity 編寫的範例。 若你想試著編寫程式碼,可以在 [Remix](http://remix.ethereum.org) 中與這些範例互動。 + +### Hello world {#hello-world} + +```solidity +// 確定Solidity版本,使用語義化版本。 +// 了解更多:https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity ^0.5.10; + +// 定義合約名稱 `HelloWorld`. +// 一個合約是函數和數據 (其狀態) 的集合。 +// 一旦部署,合約就會留在以太坊區塊鏈的一個特定地址上。 +// 了解更多: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + // 定義`string`類型變量 `message` + // 狀態變量是其值永久存儲在合約存儲中的變量。 + // 關鍵字 `public` 使得可以從合約外部訪問。 + // 並創建了一個其它合約或客戶可以調用訪問該值的函數。 + string public message; + + // 類似於很多基於類的面向對象語言, + // 構造函數是僅在合約創建時執行的特殊函數。 + // 構造器用於初始化合約的數據。 + // 了解更多:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) public { + // 接受一個字符變量 `initMessage` + // 並為合約的存儲變量`message` 賦值 + message = initMessage; + } + + // 一個public函數接受字符參數並更新存儲變量 `message` + function update(string memory newMessage) public { + message = newMessage; + } +} +``` + +### 代幣 {#token} + +```solidity +pragma solidity ^0.5.10; + +contract Token { + // 一個 `address` 類比於郵件地址 - 它用來識別以太坊的一個帳戶. + // 地址可以代表一個智慧型合約或一個外部(用戶)帳戶。 + // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/types.html#address + address public owner; + + // `mapping` 是一個哈希表(hash table)數據結構 + // 此 `mapping` 將一個無符號整數 (代幣餘額) 分配給地址 (代幣持有者)。 + // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/types.html#mapping-types + mapping (address => uint) public balances; + +// 事件(Events)允許在區塊鏈上記錄活動。 + // 以太坊客戶端可以監聽事件,以便對合約狀態更改作出反應。 + // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#events + event Transfer(address from, address to, uint amount); + + // 初始化合約數據,設置 `owner`為合約創建者的地址。 + constructor() public { + // 所有智慧型合約依賴外部交易來觸發其函數。 + // `msg` 是一個全局變量,包含了給定交易的相關數據, + // 例如發送者的地址和交易中包含的ETH數量。 + // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties + owner = msg.sender; + } + + // 創建一些新代幣並發送給一個地址 + function mint(address receiver, uint amount) public { + // `require` 是一個用於強制執行某些條件的控制結構。 + // 如果 `require` 的條件為 `false`, 則異常被觸發, + // 所有在當前調用中對狀態的更改將被還原。 + // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions + + // 只有合約的擁有者可以調用這個函數 + require(msg.sender == owner, "You are not the owner."); + + // 保證代幣的最大數量 + require(amount < 1e60, "Maximum issuance succeeded"); + + // 將 `receiver` 持有的代幣數量數量增加 `amount` + balances[receiver] += amount; + } + + // 發送一定數量調用者的代幣給一個地址 + function transfer(address receiver, uint amount) public { + // 發送者必須有足夠數量的代幣用於發送 + require(amount <= balances[msg.sender], "Insufficient balance."); + + // 調整兩個帳戶的餘額 + balances[msg.sender] -= amount; + balances[receiver] += amount; + + // 觸發之前定義的事件。 + emit Transfer(msg.sender, receiver, amount); + } +} +``` + +### 獨特的數位資產 {#unique-digital-asset} + +```solidity +pragma solidity ^0.5.10; + +// 從其它文件向當前合約中導入符號 +// 本例使用一系列來自OpenZeppelin的輔助合約. +// 了解更多: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#importing-other-source-files + +import "../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol"; +import "../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; +import "../node_modules/@openzeppelin/contracts/introspection/ERC165.sol"; +import "../node_modules/@openzeppelin/contracts/math/SafeMath.sol"; + +// `is` 關鍵字用於從其它外部合約繼承函數和關鍵字。 +// 本例中, `CryptoPizza` 繼承 `IERC721` 和 `ERC165` 合約. +// 了解更多: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#inheritance +contract CryptoPizza is IERC721, ERC165 { + // 使用 OpenZeppelin's SafeMath 庫來安全執行算數操作。 + // 了解更多: https://docs.openzeppelin.com/contracts/2.x/api/math#SafeMath + using SafeMath for uint256; + + //Solidity語言中的常量(Constant)狀態變量與其他語言類似。 + // 但是必須用一個表達式為常量賦值,而這個表達式本身必須在編譯時是一個常量。 + // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constant-state-variables + uint256 constant dnaDigits = 10; + uint256 constant dnaModulus = 10 ** dnaDigits; + bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; + + // Struct types let you define your own type + // Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#structs + struct Pizza { + string name; + uint256 dna; + } + + // Creates an empty array of Pizza structs + Pizza[] public pizzas; + + // Mapping from pizza ID to its owner's address + mapping(uint256 => address) public pizzaToOwner; + + // Mapping from owner's address to number of owned token + mapping(address => uint256) public ownerPizzaCount; + + // Mapping from token ID to approved address + mapping(uint256 => address) pizzaApprovals; + + // You can nest mappings, this example maps owner to operator approvals + mapping(address => mapping(address => bool)) private operatorApprovals; + + // Internal function to create a random Pizza from string (name) and DNA + function _createPizza(string memory _name, uint256 _dna) + // The `internal` keyword means this function is only visible + // within this contract and contracts that derive this contract + // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#visibility-and-getters + internal + // `isUnique` is a function modifier that checks if the pizza already exists + // Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html#function-modifiers + isUnique(_name, _dna) + { + // Adds Pizza to array of Pizzas and get id + uint256 id = SafeMath.sub(pizzas.push(Pizza(_name, _dna)), 1); + + // Checks that Pizza owner is the same as current user + // Learn more: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions + + // note that address(0) is the zero address, + // indicating that pizza[id] is not yet allocated to a particular user. + + assert(pizzaToOwner[id] == address(0)); + + // Maps the Pizza to the owner + pizzaToOwner[id] = msg.sender; + ownerPizzaCount[msg.sender] = SafeMath.add( + ownerPizzaCount[msg.sender], + 1 + ); + } + + // Creates a random Pizza from string (name) + function createRandomPizza(string memory _name) public { + uint256 randDna = generateRandomDna(_name, msg.sender); + _createPizza(_name, randDna); + } + + // Generates random DNA from string (name) and address of the owner (creator) + function generateRandomDna(string memory _str, address _owner) + public + // Functions marked as `pure` promise not to read from or modify the state + // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#pure-functions + pure + returns (uint256) + { + // Generates random uint from string (name) + address (owner) + uint256 rand = uint256(keccak256(abi.encodePacked(_str))) + + uint256(_owner); + rand = rand % dnaModulus; + return rand; + } + + // Returns array of Pizzas found by owner + function getPizzasByOwner(address _owner) + public + // Functions marked as `view` promise not to modify state + // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#view-functions + view + returns (uint256[] memory) + { + // Uses the `memory` storage location to store values only for the + // lifecycle of this function call. + // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/introduction-to-smart-contracts.html#storage-memory-and-the-stack + uint256[] memory result = new uint256[](ownerPizzaCount[_owner]); + uint256 counter = 0; + for (uint256 i = 0; i < pizzas.length; i++) { + if (pizzaToOwner[i] == _owner) { + result[counter] = i; + counter++; + } + } + return result; + } + + // 轉移 Pizza 和歸屬關係到其它地址 + function transferFrom(address _from, address _to, uint256 _pizzaId) public { + require(_from != address(0) && _to != address(0), "Invalid address."); + require(_exists(_pizzaId), "Pizza does not exist."); + require(_from != _to, "Cannot transfer to the same address."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); + + ownerPizzaCount[_to] = SafeMath.add(ownerPizzaCount[_to], 1); + ownerPizzaCount[_from] = SafeMath.sub(ownerPizzaCount[_from], 1); + pizzaToOwner[_pizzaId] = _to; + + // 觸發繼承自 IERC721 合約中定義的事件。 + emit Transfer(_from, _to, _pizzaId); + _clearApproval(_to, _pizzaId); + } + + /** + * 安全轉帳給定代幣 ID 的所有權到其它地址 + * 如果目標地址是一個合約,則該合約必須實現 `onERC721Received`函數, + * 該函數調用了安全轉帳並且返回一個magic value。 + * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; + * 否則, 轉帳被回退. + */ + function safeTransferFrom(address from, address to, uint256 pizzaId) + public + { + // solium-disable-next-line arg-overflow + this.safeTransferFrom(from, to, pizzaId, ""); + } + + /** + * 安全轉帳給定代幣ID所有權到其它地址 + * 如果目標地址是一個合約,則該合約必須實現`onERC721Received`函數, + * 該函數調用安全轉帳並返回一個magic value + * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; + * 否則,轉帳被回退. + */ + function safeTransferFrom( + address from, + address to, + uint256 pizzaId, + bytes memory _data + ) public { + this.transferFrom(from, to, pizzaId); + require(_checkOnERC721Received(from, to, pizzaId, _data), "Must implement onERC721Received."); + } + + /** + * Internal function to invoke `onERC721Received` on a target address + * The call is not executed if the target address is not a contract + */ + function _checkOnERC721Received( + address from, + address to, + uint256 pizzaId, + bytes memory _data + ) internal returns (bool) { + if (!isContract(to)) { + return true; + } + + bytes4 retval = IERC721Receiver(to).onERC721Received( + msg.sender, + from, + pizzaId, + _data + ); + return (retval == _ERC721_RECEIVED); + } + + // Burns a Pizza - destroys Token completely + // The `external` function modifier means this function is + // part of the contract interface and other contracts can call it + function burn(uint256 _pizzaId) external { + require(msg.sender != address(0), "Invalid address."); + require(_exists(_pizzaId), "Pizza does not exist."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); + + ownerPizzaCount[msg.sender] = SafeMath.sub( + ownerPizzaCount[msg.sender], + 1 + ); + pizzaToOwner[_pizzaId] = address(0); + } + + // Returns count of Pizzas by address + function balanceOf(address _owner) public view returns (uint256 _balance) { + return ownerPizzaCount[_owner]; + } + + // Returns owner of the Pizza found by id + function ownerOf(uint256 _pizzaId) public view returns (address _owner) { + address owner = pizzaToOwner[_pizzaId]; + require(owner != address(0), "Invalid Pizza ID."); + return owner; + } + + // Approves other address to transfer ownership of Pizza + function approve(address _to, uint256 _pizzaId) public { + require(msg.sender == pizzaToOwner[_pizzaId], "Must be the Pizza owner."); + pizzaApprovals[_pizzaId] = _to; + emit Approval(msg.sender, _to, _pizzaId); + } + + // Returns approved address for specific Pizza + function getApproved(uint256 _pizzaId) + public + view + returns (address operator) + { + require(_exists(_pizzaId), "Pizza does not exist."); + return pizzaApprovals[_pizzaId]; + } + + /** + * Private function to clear current approval of a given token ID + * Reverts if the given address is not indeed the owner of the token + */ + function _clearApproval(address owner, uint256 _pizzaId) private { + require(pizzaToOwner[_pizzaId] == owner, "Must be pizza owner."); + require(_exists(_pizzaId), "Pizza does not exist."); + if (pizzaApprovals[_pizzaId] != address(0)) { + pizzaApprovals[_pizzaId] = address(0); + } + } + + /* + * Sets or unsets the approval of a given operator + * An operator is allowed to transfer all tokens of the sender on their behalf + */ + function setApprovalForAll(address to, bool approved) public { + require(to != msg.sender, "Cannot approve own address"); + operatorApprovals[msg.sender][to] = approved; + emit ApprovalForAll(msg.sender, to, approved); + } + + // Tells whether an operator is approved by a given owner + function isApprovedForAll(address owner, address operator) + public + view + returns (bool) + { + return operatorApprovals[owner][operator]; + } + + // Takes ownership of Pizza - only for approved users + function takeOwnership(uint256 _pizzaId) public { + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); + address owner = this.ownerOf(_pizzaId); + this.transferFrom(owner, msg.sender, _pizzaId); + } + + // Checks if Pizza exists + function _exists(uint256 pizzaId) internal view returns (bool) { + address owner = pizzaToOwner[pizzaId]; + return owner != address(0); + } + + // Checks if address is owner or is approved to transfer Pizza + function _isApprovedOrOwner(address spender, uint256 pizzaId) + internal + view + returns (bool) + { + address owner = pizzaToOwner[pizzaId]; + // Disable solium check because of + // https://github.com/duaraghav8/Solium/issues/175 + // solium-disable-next-line operator-whitespace + return (spender == owner || + this.getApproved(pizzaId) == spender || + this.isApprovedForAll(owner, spender)); + } + + // Check if Pizza is unique and doesn't exist yet + modifier isUnique(string memory _name, uint256 _dna) { + bool result = true; + for (uint256 i = 0; i < pizzas.length; i++) { + if ( + keccak256(abi.encodePacked(pizzas[i].name)) == + keccak256(abi.encodePacked(_name)) && + pizzas[i].dna == _dna + ) { + result = false; + } + } + require(result, "Pizza with such name already exists."); + _; + } + + // Returns whether the target address is a contract + function isContract(address account) internal view returns (bool) { + uint256 size; + // Currently there is no better way to check if there is a contract in an address + // than to check the size of the code at that address. + // 參閱 https://ethereum.stackexchange.com/a/14016/36603 + // 了解更多信息. + // TODO: 在Serenity發布前再次檢查這裡, + // 否則到時所有地址都將判斷為合約. + // solium-disable-next-line security/no-inline-assembly + assembly { + size := extcodesize(account) + } + return size > 0; + } +} +``` + +## 了解更多 {#further-reading} + +請參閱 Solidity 和 Vyper 文件,獲得智慧型合約更完整的概觀: + +- [Solidity](https://solidity.readthedocs.io/) +- [Vyper](https://vyper.readthedocs.io/) + +## 相關主題 {#related-topics} + +- [智慧型合約](/developers/docs/smart-contracts/) +- [以太坊虛擬機](/developers/docs/evm/) + +## 相關教學 {#related-tutorials} + +- [縮減合約大小應對合約大小限制](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _– 減少智慧型合約大小的實用秘訣。_ +- [用事件記錄智慧型合約資料](/developers/tutorials/logging-events-smart-contracts/) _ – 對智慧型合約事件進行介紹,以及如何使用事件來記錄資料。_ +- [與其他 Solidity 合約互動](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– 如何從現有合約部署智慧型合約並與之互動。_ diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/compiling/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/compiling/index.md" new file mode 100644 index 00000000000..80e78208605 --- /dev/null +++ "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/compiling/index.md" @@ -0,0 +1,282 @@ +--- +title: 編譯智慧型合約 +description: 說明為什麼需要編譯智慧型合約以及編譯的實際作用。 +lang: zh-tw +incomplete: true +--- + +你需要以網頁應用程式和以太坊虛擬機 (EVM) 能夠理解的方式編譯合約。 + +## 基本資訊 {#prerequisites} + +在閱讀關於編譯的文章前,先閱讀[智慧型合約](/developers/docs/smart-contracts/)及[以太坊虛擬機](/developers/docs/evm/)簡介可能對你有幫助。 + +## 以太坊虛擬機 {#the-evm} + +若要讓[以太坊虛擬機](/developers/docs/evm/)能執行你的合約,合約需要以**位元組碼**格式編譯。 編譯會將以下程式碼: + +```solidity +pragma solidity 0.4.24; + +contract Greeter { + + function greet() public constant returns (string) { + return "Hello"; + } + +} +``` + +**轉換成:** + +``` +PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x80 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SLT 0xec 0xe 0xf5 0xf8 SLT 0xc7 0x2d STATICCALL ADDRESS SHR 0xdb COINBASE 0xb1 BALANCE 0xe8 0xf8 DUP14 0xda 0xad DUP13 LOG1 0x4c 0xb4 0x26 0xc2 DELEGATECALL PUSH7 0x8994D3E002900 +``` + +這些稱為**操作碼**。 EVM 操作碼是以太坊虛擬機器 (EVM) 可以執行的低階指令。 每個操作碼代表一種特定的操作,例如算術運算、邏輯運算、資料操作、控制流程等。 + +[有關操作碼的更多資訊](/developers/docs/evm/opcodes/) + +## Web 應用程式 {#web-applications} + +編譯器還會生成**應用程式二進制介面 (ABI)**,你需要藉此讓應用程式理解你的合約,並調用合約函數。 + +ABI 是一個 JSON 格式檔案,描述了被部署的合約及其智慧型合約函數。 這有助於彌合 Web2 和 Web3 之間的差距 + +[JavaScript 用戶端庫](/developers/docs/apis/javascript/)會讀取**應用程式二進制介面**,以便你在你的 Web 應用程式介面中調用智慧型合約。 + +以下是 ERC-20 代幣合約的應用程式二進制介面。 ERC-20 是你可以在以太坊上交易的一種代幣。 + +```json +[ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + } +] +``` + +## 衍生閱讀 {#further-reading} + +- [應用程式二進制介面規範](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _– Solidity_ + +## 相關主題 {#related-topics} + +- [JavaScript 用戶端庫](/developers/docs/apis/javascript/) +- [以太坊虛擬機](/developers/docs/evm/) diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/deploying/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/deploying/index.md" new file mode 100644 index 00000000000..326d36d3ec0 --- /dev/null +++ "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/deploying/index.md" @@ -0,0 +1,81 @@ +--- +title: 部署智慧型合約 +description: +lang: zh-tw +--- + +你需要部署智慧型合約,以供以太坊網路使用者使用。 + +要部署智慧型合約,只需要傳送一個包含編譯後智慧型合約程式碼的以太坊交易,而無須指定任何接收者。 + +## 基本資訊 {#prerequisites} + +在部署智慧型合約前,你需要理解[以太坊網路](/developers/docs/networks/)、[交易](/developers/docs/transactions/)與[智慧型合約結構](/developers/docs/smart-contracts/anatomy/)。 + +部署合約同樣需要花費以太幣 (ETH),因為合約會儲存在區塊鏈上,所以你應該熟悉以太坊的[燃料與手續費](/developers/docs/gas/)。 + +最後,你需要在部署前編譯合約,所以請確保你已閱讀[編譯智慧型合約](/developers/docs/smart-contracts/compiling/)。 + +## 如何部署智慧型合約 {#how-to-deploy-a-smart-contract} + +### 需要準備: {#what-youll-need} + +- 合約的位元組碼 – 這是透過[編譯](/developers/docs/smart-contracts/compiling/)產生的 +- 可作為燃料的以太幣 – 像其他交易一樣,你需要設定燃料限制,所以請注意合約部署需要比簡單的以太幣傳送花費更多燃料 +- 一個部署腳本或外掛程式 +- 存取[以太坊節點](/developers/docs/nodes-and-clients/),你可以透過執行自己的節點、連結公共節點,或透過應用程式介面金鑰使用[節點服務](/developers/docs/nodes-and-clients/nodes-as-a-service/)來存取。 + +### 部署智慧型合約的步驟 {#steps-to-deploy} + +所涉具體步驟仰賴所用的開發框架。 例如,你可以查看 [Hardhat 有關部署合約的文件](https://hardhat.org/guides/deploying.html)或 [Foundry 有關部署和驗證智慧型合約的文件](https://book.getfoundry.sh/forge/deploying)。 部署後,你的合約會跟其他[帳戶](/developers/docs/accounts/)一樣擁有以太坊地址,並且可以使用[原始程式碼驗證工具](/developers/docs/smart-contracts/verifying/#source-code-verification-tools)進行驗證。 + +## 相關工具 {#related-tools} + +**Remix - _Remix 整合開發環境允許開發、部署和管理類似區塊鏈的以太坊智慧型合約_** + +- [Remix](https://remix.ethereum.org) + +**Tenderly - _Web3 開發平台,提供了開發、測試、監控和營運智慧型合約所需的偵錯、可觀察性和基礎架構組件_** + +- [tenderly.co](https://tenderly.co/) +- [文件](https://docs.tenderly.co/) +- [Github](https://github.com/Tenderly) +- [Discord](https://discord.gg/eCWjuvt) + +**Hardhat - _用於編譯、部署、測試和偵錯以太坊軟體的開發環境_** + +- [hardhat.org](https://hardhat.org/getting-started/) +- [合約部署文件](https://hardhat.org/guides/deploying.html) +- [Github](https://github.com/nomiclabs/hardhat) +- [Discord](https://discord.com/invite/TETZs2KK4k) + +**Web3 - _使用一條指令輕鬆部署任何合約至任何與以太坊虛擬機相容的區塊鏈_** + +- [文件](https://portal.thirdweb.com/deploy/) + +**Crossmint - _企業級 web3 開發平台,用於部署智慧型合約,支援信用卡和跨鏈支付,並使用應用程式介面來建立、分發、銷售、儲存和編輯非同質化代幣。_** + +- [crossmint.com](https://www.crossmint.com) +- [文件](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) +- [部落格](https://blog.crossmint.com) + +## 相關教程 {#related-tutorials} + +- [部署你的第一個智慧型合約](/developers/tutorials/deploying-your-first-smart-contract/)_ – 如何在以太坊測試網部署你的第一個智慧型合約。_ +- [Hello World | 智慧型合約使用教學](/developers/tutorials/hello-world-smart-contract/) _ – 在以太坊建立與部署基本智慧型合約的簡單使用教學。_ +- [與其他 Solidity 合約互動](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– 如何從現有合約部署智慧型合約並與之互動。_ +- [如何壓縮智慧型合約大小](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/)_ - 如何壓縮智慧型合約大小至限制以下來降低燃料費_ + +## 衍生閱讀 {#further-reading} + +- [https://docs.openzeppelin.com/learn/deploying-and-interacting](https://docs.openzeppelin.com/learn/deploying-and-interacting) - _OpenZeppelin_ +- [利用 Hardhat 來部署合約](https://hardhat.org/guides/deploying.html) - _Nomic Labs_ + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [開發架構](/developers/docs/frameworks/) +- [運行以太坊節點](/developers/docs/nodes-and-clients/run-a-node/) +- [節點即服務](/developers/docs/nodes-and-clients/nodes-as-a-service) diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/index.md" new file mode 100644 index 00000000000..75594177756 --- /dev/null +++ "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/index.md" @@ -0,0 +1,112 @@ +--- +title: 智慧型合約簡介 +description: 智慧型合約概觀,重點介紹其特點及限制。 +lang: zh-tw +--- + +## 智慧型合約是什麼? {#what-is-a-smart-contract} + +「智慧型合約」就是在以太坊區塊鏈上執行的程式。 這是一系列存在於以太坊區塊鏈特定地址的程式碼(函數)及資料(狀態)。 + +智慧型合約是一種[以太坊帳戶](/developers/docs/accounts/)。 這表示智慧型合約有餘額且能作為交易目標。 然而,智慧型合約不受使用者控制,而是部署至網路,並按程式編寫方式執行。 使用者帳戶能藉由傳送交易,執行智慧型合約定義的函數,來與智慧型合約互動。 智慧型合約能定義規則,就像一般合約一樣,且完全透過程式碼自動執行。 預設情況下,智慧型合約無法刪除,且與其互動的結果無法逆轉。 + +## 基本資訊 {#prerequisites} + +如果你是初學者,或是想找不技術性不太強的說明,推薦你參閱[智慧型合約簡介](/smart-contracts/)。 + +務必先詳閱[帳戶](/developers/docs/accounts/)、[交易](/developers/docs/transactions/)及[以太坊虛擬機](/developers/docs/evm/)後再踏入智慧型合約的世界。 + +## 數位販賣機 {#a-digital-vending-machine} + +或許最適合智慧型合約的比喻是 [Nick Szabo](https://unenumerated.blogspot.com/) 所說的「販賣機」。 只要輸入正確,就保證能得到特定的輸出結果。 + +要從販賣機取得一包點心: + +``` +錢 + 點心選擇 = 點心分發 +``` + +這種邏輯會編寫進販賣機中。 + +而智慧型合約就像販賣機,其中編寫了邏輯。 以下是若使用 Solidity 編寫智慧型合約,這種販賣機運作方式的簡要範例: + +```solidity +pragma solidity 0.8.7; + +contract VendingMachine { + + // Declare state variables of the contract + address public owner; + mapping (address => uint) public cupcakeBalances; + + // When 'VendingMachine' contract is deployed: + // 1. set the deploying address as the owner of the contract + // 2. set the deployed smart contract's cupcake balance to 100 + constructor() { + owner = msg.sender; + cupcakeBalances[address(this)] = 100; + } + + // Allow the owner to increase the smart contract's cupcake balance + function refill(uint amount) public { + require(msg.sender == owner, "Only the owner can refill."); + cupcakeBalances[address(this)] += amount; + } + + // Allow anyone to purchase cupcakes + function purchase(uint amount) public payable { + require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake"); + require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase"); + cupcakeBalances[address(this)] -= amount; + cupcakeBalances[msg.sender] += amount; + } +} +``` + +如同自動販賣機消除了我們對販賣員工的需求,智慧型合約也可取代許多產業的中間媒介。 + +## 無需許可 {#permissionless} + +任何人都能編寫智慧型合約並部署於區塊鏈網路。 你只需要學習如何使用[智慧型合約語言](/developers/docs/smart-contracts/languages/)編碼,並取得足夠的以太幣,即可部署合約。 部署合約基本上是一種交易,因此你需要支付[燃料](/developers/docs/gas/)費用,如同進行簡單的以太幣轉帳一樣。 然而,部署合約的燃料成本卻遠高於此。 + +以太坊具備方便開發者編寫智慧型合約的程式語言: + +- Solidity +- Vyper + +[深入瞭解程式語言](/developers/docs/smart-contracts/languages/) + +然而,在部署合約前需要先編譯,讓以太坊的虛擬機可以解譯並儲存合約。 [深入瞭解編譯](/developers/docs/smart-contracts/compiling/) + +## 可組合性 {#composability} + +智慧型合約公開於以太坊, 類似一API於網路. 這表示你可以在自己的智慧型合約中,調用其他智慧型合約,以大幅拓展可能性。 合約甚至能部署其他合約。 + +深入瞭解[智慧型合約的可組合性](/developers/docs/smart-contracts/composability/)。 + +## 限制 {#limitations} + +智慧型合約本身無法取得「真實世界」事件的資訊,因為這些合約無法擷取鏈外來源中的資料。 這表示智慧型合約不會針對真實世界的事件做出反應。 這是刻意設計。 過度依賴外部資訊可能會破壞共識機制,而共識對安全性與去中心化至關重要。 + +然而,區塊鏈應用程式最好能使用鏈外資料。 解決方法是使用[預言機](/developers/docs/oracles/),這種工具可以取得鏈外資料並提供給智慧型合約使用。 + +智慧型合約的另一個限制為合約大小的上限。 智慧型合約必須小於 24KB,不然燃料不足。 可以透過[鑽石模式](https://eips.ethereum.org/EIPS/eip-2535)迴避此問題。 + +## 多簽合約 {#multisig} + +多簽(多重簽章)合約是需要多個有效簽章,才能執行交易的智慧型合約帳戶。 這能有效預防持有大量以太幣或代幣的合約發生單點失效。 多簽合約也能將執行合約與金鑰管理的責任分散給多方,避免遺失單一私密金鑰造成資金無法回復的損失。 基於上述理由,多簽合約可用於簡單的去中心化組織管理體系。 多簽需要在 M 個可接受的簽章中取得 N 個簽章才能執行(其中,N ≤ M 且 M > 1)。 通常是`N = 3, M = 5` 以及 `N = 4, M = 7`。 4/7 的多簽需要在七個可能的有效簽章中取得四個簽章。 這表示即便遺失三個簽章,仍可取回資金。 在這種情況下,這也表示大多數金鑰持有者必須同意並簽署,才能執行合約。 + +## 智慧型合約資源 {#smart-contract-resources} + +**OpenZeppelin Contracts -** **_開發安全智慧型合約的資料庫。_** + +- [openzeppelin.com/contracts/](https://openzeppelin.com/contracts/) +- [Github](https://github.com/OpenZeppelin/openzeppelin-contracts) +- [社群論壇](https://forum.openzeppelin.com/c/general/16) + +## 衍生閱讀 {#further-reading} + +- [Coinbase:什麼是智慧型合約?](https://www.coinbase.com/learn/crypto-basics/what-is-a-smart-contract) +- [Chainlink:什麼是智慧型合約?](https://chain.link/education/smart-contracts) +- [影片:智慧型合約簡介](https://youtu.be/ZE2HxTmxfrI) +- [Cyfrin Updraft:Web3 學習與審計平台](https://updraft.cyfrin.io) diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/languages/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/languages/index.md" new file mode 100644 index 00000000000..62b5200e430 --- /dev/null +++ "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/languages/index.md" @@ -0,0 +1,323 @@ +--- +title: 智慧型合約語言 +description: Solidity 及 Vyper:兩種智慧型合約常用語言的概觀與比較。 +lang: zh-tw +--- + +以太坊一大好處是,對開發者而言,編寫智慧型合約的語言相對簡單。 如你熟悉 Python 或任何[大括號語言](https://wikipedia.org/wiki/List_of_programming_languages_by_type#Curly-bracket_languages),會發現其實他們的語法非常相似。 + +兩種最熱門、最受管理的語言為: + +- Solidity +- Vyper + +Remix 整合開發環境提供一個全面的開發環境,用於透過 Solidity 和 Vyper 語言建立和測試合約。 [嘗試使用瀏覽器內的 Remix IDE](https://remix.ethereum.org) 開始編碼。 + +經驗更豐富的開發者可能也會想使用 Yul,這是[以太坊虛擬機](/developers/docs/evm/)的中階語言,或是使用 Yul 的延伸語言 Yul+。 + +若你有興趣,且想協助測試還處於大力開發階段的新語言,可以實驗仍在發展初期的新興智慧型合約語言 Fe。 + +## 基本資訊 {#prerequisites} + +如果已經有編程語言的知識,特別是 JavaScript 或 Python,可以幫助你瞭解智慧型合約語言的差異。 同時,我們建議你在深入理解語言差異之前,先理解智慧型合約的概念。 [智慧型合約簡介](/developers/docs/smart-contracts/)。 + +## Solidity {#solidity} + +- 實作智慧型合約的物件導向高階語言。 +- 深受 C++ 語言影響的大括號語言。 +- 靜態類型(編譯時已知變數類型)。 +- 支援: + - 繼承(你可以延展其他合約)。 + - 資料庫(你可以建立能從不同的合約調用的可重複使用代碼,如同其他物件導向程式語言中的靜態類別靜態函數)。 + - 複雜的使用者定義類型。 + +### 重要連結 {#important-links} + +- [文件](https://docs.soliditylang.org/en/latest/) +- [Solidity 語言入口網站](https://soliditylang.org/) +- [Solidity by Example](https://docs.soliditylang.org/en/latest/solidity-by-example.html) +- [Github](https://github.com/ethereum/solidity/) +- [Solidity Gitter Chatroom](https://gitter.im/ethereum/solidity) 橋接至 [Solidity Matrix Chatroom](https://matrix.to/#/#ethereum_solidity:gitter.im) +- [懶人包](https://reference.auditless.com/cheatsheet) +- [Solidity 部落格](https://blog.soliditylang.org/) +- [Solidity Twitter](https://twitter.com/solidity_lang) + +### 合約範例 {#example-contract} + +```solidity +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >= 0.7.0; + +contract Coin { + // 關鍵字 "public" 使變量可以被其它合約訪問 + address public minter; + mapping (address => uint) public balances; + + // 事件Events允許客戶讀取你聲明的特定合約變更。 + event Sent(address from, address to, uint amount); + + // Constructor構造代碼僅在合約創建時執行一次。 + constructor() { + minter = msg.sender; + } + + // 發送一定數量新創建的代幣到某個地址。 + // 只有合約創建者可以調用。 + function mint(address receiver, uint amount) public { + require(msg.sender == minter); + require(amount < 1e60); + balances[receiver] += amount; + } + + // 發送一定量已經存在的代幣 + // 從調用者到任意地址 + function send(address receiver, uint amount) public { + require(amount <= balances[msg.sender], "Insufficient balance."); + balances[msg.sender] -= amount; + balances[receiver] += amount; + emit Sent(msg.sender, receiver, amount); + } +} +``` + +這個範例應該能讓你瞭解 Solidity 的合約語法。 關於函數和變數的詳細描述,[請參閱文件](https://docs.soliditylang.org/en/latest/contracts.html)。 + +## Vyper {#vyper} + +- Python 程式語言 +- 強輸入類型 +- 精巧易懂的編譯器代碼 +- 有效率的產生位元組碼 +- 為了提升合約安全性並更容易審核,特意提供比 Solidity 更少功能。 Vyper 不支援: + - 修飾符 + - 繼承 + - 行內組譯 + - 函數重載 + - 運算子重載 + - 遞迴調用 + - 無限長度迴圈 + - 二進制定點 + +如需更多資訊,[請參閱 Vyper 原理](https://vyper.readthedocs.io/en/latest/index.html)。 + +### 重要鏈結 {#important-links-1} + +- [文件](https://vyper.readthedocs.io) +- [Vyper by Example](https://vyper.readthedocs.io/en/latest/vyper-by-example.html) +- [更多 Vyper by Example](https://vyper-by-example.org/) +- [Github](https://github.com/vyperlang/vyper) +- [Vyper 社群 Discord 聊天](https://discord.gg/SdvKC79cJk) +- [懶人包](https://reference.auditless.com/cheatsheet) +- [Vyper 的智慧型合約開發框架與工具](/developers/docs/programming-languages/python/) +- [VyperPunk:瞭解如何保障與駭客攻擊 Vyper 智慧型合約](https://github.com/SupremacyTeam/VyperPunk) +- [VyperExamples:Vyper 漏洞範例](https://www.vyperexamples.com/reentrancy) +- [支援開發的 Vyper Hub](https://github.com/zcor/vyper-dev) +- [Vyper 最熱門的智慧型合約範例](https://github.com/pynchmeister/vyper-greatest-hits/tree/main/contracts) +- [出色的 Vyper 精選資源](https://github.com/spadebuilders/awesome-vyper) + +### 範例 {#example} + +```python +# Open Auction + +# Auction params +# Beneficiary receives money from the highest bidder +beneficiary: public(address) +auctionStart: public(uint256) +auctionEnd: public(uint256) + +# Current state of auction +highestBidder: public(address) +highestBid: public(uint256) + +# Set to true at the end, disallows any change +ended: public(bool) + +# Keep track of refunded bids so we can follow the withdraw pattern +pendingReturns: public(HashMap[address, uint256]) + +# Create a simple auction with `_bidding_time` +# seconds bidding time on behalf of the +# beneficiary address `_beneficiary`. +@external +def __init__(_beneficiary: address, _bidding_time: uint256): + self.beneficiary = _beneficiary + self.auctionStart = block.timestamp + self.auctionEnd = self.auctionStart + _bidding_time + +# Bid on the auction with the value sent +# together with this transaction. +# The value will only be refunded if the +# auction is not won. +@external +@payable +def bid(): + # Check if bidding period is over. + assert block.timestamp < self.auctionEnd + # Check if bid is high enough + assert msg.value > self.highestBid + # Track the refund for the previous high bidder + self.pendingReturns[self.highestBidder] += self.highestBid + # Track new high bid + self.highestBidder = msg.sender + self.highestBid = msg.value + +# Withdraw a previously refunded bid. The withdraw pattern is +# used here to avoid a security issue. If refunds were directly +# sent as part of bid(), a malicious bidding contract could block +# those refunds and thus block new higher bids from coming in. +@external +def withdraw(): + pending_amount: uint256 = self.pendingReturns[msg.sender] + self.pendingReturns[msg.sender] = 0 + send(msg.sender, pending_amount) + +# End the auction and send the highest bid +# to the beneficiary. +@external +def endAuction(): + # It is a good guideline to structure functions that interact + # with other contracts (i.e. they call functions or send ether) + # into three phases: + # 1. checking conditions + # 2. performing actions (potentially changing conditions) + # 3. interacting with other contracts + # If these phases are mixed up, the other contract could call + # back into the current contract and modify the state or cause + # effects (ether payout) to be performed multiple times. + # If functions called internally include interaction with external + # contracts, they also have to be considered interaction with + # external contracts. + + # 1. Conditions + # Check if auction endtime has been reached + assert block.timestamp >= self.auctionEnd + # Check if this function has already been called + assert not self.ended + + # 2. Effects + self.ended = True + + # 3. Interaction + send(self.beneficiary, self.highestBid) +``` + +此範例應該能讓你瞭解 Solidity 的合約語法。 關於函數和變數的詳細描述,[請參閱文件](https://vyper.readthedocs.io/en/latest/vyper-by-example.html#simple-open-auction)。 + +## Yul 和 Yul+ {#yul} + +如果你是以太坊新手並且尚未使用過智慧型合約語言編碼,建議你從 Solidity 或 Vyper 開始。 只有在你熟悉智慧型合約安全性最佳案例和使用以太坊虛擬機的具體細節後,才可投入 Yul 或 Yul+。 + +**Yul** + +- 以太坊的中階語言。 +- 支援[以太坊虛擬機](/developers/docs/evm)和 [eWASM](https://github.com/ewasm),一種以太坊風格的 WebAssembly,目的在於成為兩個平台均可使用的通用工具。 +- 高級最佳化階段的優良目標,能使以太坊虛擬機和 eWASM 平台均等受益。 + +**Yul+** + +- Yul 的低階高效延伸語言。 +- 最初設計用於[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)合約。 +- Yul+ 可以被視為 Yul 的實驗性升級建議,為其添加新功能。 + +### 重要鏈結 {#important-links-2} + +- [Yul 文件](https://docs.soliditylang.org/en/latest/yul.html) +- [Yul+ 文件](https://github.com/fuellabs/yulp) +- [Yul+ 訓練場](https://yulp.fuel.sh/) +- [Yul+ 介紹文章](https://medium.com/@fuellabs/introducing-yul-a-new-low-level-language-for-ethereum-aa64ce89512f) + +### 合約範例 {#example-contract-2} + +以下簡單範例採用冪函數。 它可以使用 `solc --strict-assembly --bin input.yul` 編譯。 這個範例應該 儲存在 input.yul 檔案中。 + +``` +{ + function power(base, exponent) -> result + { + switch exponent + case 0 { result := 1 } + case 1 { result := base } + default + { + result := power(mul(base, base), div(exponent, 2)) + if mod(exponent, 2) { result := mul(base, result) } + } + } + let res := power(calldataload(0), calldataload(32)) + mstore(0, res) + return(0, 32) +} +``` + +如果你已經熟悉智慧型合約,可以在[此處](https://solidity.readthedocs.io/en/latest/yul.html#complete-erc20-example)找到 Yul 言語的完整 ERC20 實作。 + +## Fe {#fe} + +- 用於以太坊虛擬機 (EVM) 的靜態類型語言。 +- 受 Python 和 Rust 所啟發。 +- 目標是讓以太坊生態系統的新手開發者,都能輕鬆學習這門語言。 +- Fe 還處於早期開發階段,其 Alpha 版本於 2021 年 1 月推出。 + +### 重要鏈結 {#important-links-3} + +- [Github](https://github.com/ethereum/fe) +- [Fe 發布聲明](https://snakecharmers.ethereum.org/fe-a-new-language-for-the-ethereum-ecosystem/) +- [Fe 2021 開發藍圖](https://notes.ethereum.org/LVhaTF30SJOpkbG1iVw1jg) +- [Fe Discord 聊天室](https://discord.com/invite/ywpkAXFjZH) +- [Fe Twitter](https://twitter.com/official_fe) + +### 合約範例 {#example-contract-3} + +以下為採用 Fe 的簡單合約。 + +``` +type BookMsg = bytes[100] + +contract GuestBook: + pub guest_book: map + + event Signed: + book_msg: BookMsg + + pub def sign(book_msg: BookMsg): + self.guest_book[msg.sender] = book_msg + + emit Signed(book_msg=book_msg) + + pub def get_msg(addr: address) -> BookMsg: + return self.guest_book[addr].to_mem() + +``` + +## 如何選擇 {#how-to-choose} + +與任何其他編程語言一樣,重點在於根據合適的工作與個人偏好選擇正確工具。 + +如果你還沒有嘗試過任何一種語言,請考慮以下幾點: + +### Solidity 的優點是什麼? {#solidity-advantages} + +- 如果你是初學者,有不少使用教學和學習工具。 在[透過編碼學習](/developers/learning-tools/)部分瞭解更多相關資訊。 +- 提供優良的開發者工具。 +- Solidity 擁有龐大的開發者社群,這表示你很可能會很快找到問題的答案。 + +### Vyper 的優點是什麼? {#vyper-advatages} + +- 適合想要編寫智慧型合約的 Python 開發者入門。 +- Vyper 的功能較少,因此非常適合快速製作創意原型。 +- Vyper 的目的是容易審查並盡可能提高人類可讀性。 + +### Yul 和 Yul+ 的優點是什麼? {#yul-advantages} + +- 簡單而實用的低階語言。 +- 允許更接近原始以太坊虛擬機,有助於最佳化合約的燃料使用量。 + +## 語言比較 {#language-comparisons} + +如需瞭解基本語法比較、合約生命週期、介面、運算子、數據結構、功能、控制流程等資訊,請參閱[由 Auditless 編寫的懶人包](https://reference.auditless.com/cheatsheet/) + +## 衍生閱讀 {#further-reading} + +- [OpenZeppelin 的 Solidity 合約資料庫](https://docs.openzeppelin.com/contracts) +- [Solidity 範例](https://solidity-by-example.org) diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/libraries/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/libraries/index.md" new file mode 100644 index 00000000000..ed66fb6aae3 --- /dev/null +++ "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/libraries/index.md" @@ -0,0 +1,117 @@ +--- +title: 智慧型合約庫 +description: +lang: zh-tw +--- + +你無需從頭開始編寫專案中的每一個智慧型合約。 因為我們有許多開放原始碼智慧型合約庫可為你的專案提供可重複利用的組件,因此你不必從零開始。 + +## 基本資訊 {#prerequisites} + +在使用智慧型合約庫之前,最好先清楚瞭解智慧型合約的結構。 如果尚未完成,請前往[智慧型合約結構](/developers/docs/smart-contracts/anatomy/)。 + +## 庫的內容 {#whats-in-a-library} + +你通常可以在智慧型合約庫中找到兩種組件:可以添加到合約的可重複使用行為,與採納的各種標準。 + +### 行為 {#behaviors} + +編寫智慧型合約時,你很可能會發現自己在重複編寫類似代碼。比如說在合約中指派一個_管理員_地址執行受保護的操作;或添加一個緊急_暫停_按鈕以應對預料之外的問題。 + +智慧型合約庫通常透過[庫](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries)或在Solidity 中[繼承](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#inheritance),讓這些行為可以重複使用。 + +例如,以下是[OpenZepelin Contracts 資料庫](https://github.com/OpenZeppelin/openzeppelin-contracts)的 [`Ownable` 合約](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/access/Ownable.sol)簡化版,此合約指定了合約擁有者的地址,並提供將存取方法限制為只有擁有者可存取的修飾符。 + +```solidity +contract Ownable { + address public owner; + + constructor() internal { + owner = msg.sender; + } + + modifier onlyOwner() { + require(owner == msg.sender, "Ownable: caller is not the owner"); + _; + } +} +``` + +若要在你的合約中使用這種組件,首先要匯入,再於自己的合約中擴充。 這會允許你使用基礎 `Ownable` 合約提供的修飾符來保護函數 + +```solidity +import ".../Ownable.sol"; // Path to the imported library + +contract MyContract is Ownable { + // The following function can only be called by the owner + function secured() onlyOwner public { + msg.sender.transfer(1 ether); + } +} +``` + +另一個比較受歡迎的例子是 [SafeMath](https://docs.openzeppelin.com/contracts/3.x/utilities#math) 或 [DsMath](https://dappsys.readthedocs.io/en/latest/ds_math.html)。 這些庫(與基礎合約不同)提供了語言本身不具備的溢出檢查算術函數。 使用這些庫而非原生算術運算可以防止合約出現溢出,這類錯誤可能導致災難性後果! + +### 標準 {#standards} + +為了促進[可組合性和互通性](/developers/docs/smart-contracts/composability/),以太坊社群已使用**以太坊意見徵求**的形式定義了幾個標準。 你可以在[標準](/developers/docs/standards/)部分閱讀更多相關資訊。 + +將以太坊意見徵求納入合約時,更好的做法是尋找標準實作,而非嘗試推出自己的方式。 許多智慧型合約庫包含採用最熱門 ERC 標準的做法。 例如,[ERC20 可互換代幣標準](/developers/tutorials/understand-the-erc-20-token-smart-contract/)可在 [HQ20](https://github.com/HQ20/contracts/blob/master/contracts/token/README.md)、[DappSys](https://github.com/dapphub/ds-token/) 和 [OpenZepelin](https://docs.openzeppelin.com/contracts/3.x/erc20) 中找到。 此外,一些以太坊意見徵求也提供作為以太坊意見徵求本身一部分的規範實作。 + +值得一提的是,一些以太坊意見徵求並非獨立的,而是對其他以太坊意見徵求的補充。 例如,[ERC2612](https://eips.ethereum.org/EIPS/eip-2612) 拓展了 ERC20,提高其可用性。 + +## 如何新增庫 {#how-to} + +務必參考你要納入的庫文件,以掌握如何將其納入專案的具體說明。 有些 Solidity 合約庫使用 `npm` 來封裝,所以你可以直接透過 `npm install`。 大多數[編譯](/developers/docs/smart-contracts/compiling/)合約的工具會在你的 `node_modules` 中尋找智慧型合約庫,所以你可以執行: + +```solidity +// This will load the @openzeppelin/contracts library from your node_modules +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + +contract MyNFT is ERC721 { + constructor() ERC721("MyNFT", "MNFT") public { } +} +``` + +無論使用哪種方法,納入庫時,務必留意[程式語言](/developers/docs/smart-contracts/languages/)的版本。 例如,如果你使用 Solidity 0.5 編寫合約,就不能使用 Solidity 0.6 庫。 + +## 使用時機 {#when-to-use} + +在你的專案使用智慧型合約庫有幾個好處。 首先,這提供了現成的組件,可以納入你的系統,而不必自己編寫程式碼,從而節省時間。 + +安全性也是一個重要的優點。 開放原始碼智慧型合約庫也經常接受嚴格審查。 鑑於許多專案都依賴它們,社群有強烈動機加以持續審查。 在應用程式代碼中比起可重複使用的合約庫更容易發現錯誤。 有些庫甚至接受[外部審核](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/audits),以提高安全性。 + +然而,使用智慧型合約庫可能將你不熟悉的程式碼納入專案。 我們會想匯入合約,並將其直接納入專案,但若未充分理解該合約的作用,可能會由於意外行為,而無意中在系統中引入問題。 務必參閱要匯入的程式碼文件,然後在納入專案前審查程式碼! + +最後,在決定是否納入庫時,要考慮其總體使用情況。 獲得廣泛採用的資料庫,好處在於有取得更廣大的社群和關注來審視問題。 在建立智慧型合約時,安全性應為首要考量! + +## 相關工具 {#related-tools} + +**OpenZeppelin Contracts:** **_最熱門的智慧型合約開發資料庫。 _** + +- [文件](https://docs.openzeppelin.com/contracts/) +- [Github](https://github.com/OpenZeppelin/openzeppelin-contracts) +- [社群論壇](https://forum.openzeppelin.com/c/general/16) + +**DappSys:****_安全、簡單、靈活的智慧型合約建置組件。_** + +- [文件檔案](https://dappsys.readthedocs.io/) +- [Github](https://github.com/dapphub/dappsys) + +**HQ20:** **_提供合約、資料庫與範例的 Solidity 專案,幫助你建立現實世界可用、功能齊全的分散式應用程式。 _** + +- [Github](https://github.com/HQ20/contracts) + +**Web3 Solidity SDK:** **_提供有效率建立自訂智慧型合約所需的工具_** + +- [文件](https://portal.thirdweb.com/solidity/) +- [GitHub](https://github.com/thirdweb-dev/contracts) + +## 相關教程 {#related-tutorials} + +- [以太坊開發者的安全考量](/developers/docs/smart-contracts/security/) _– 構建智慧型合約時的安全考量使用教學,包括庫的使用。_ +- [瞭解 ERC-20 代幣智慧型合約](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _:關於 ERC20 標準的教學,由多個資料庫提供。_ + +## 衍生閱讀 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/security/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/security/index.md" new file mode 100644 index 00000000000..1e1e28ebd27 --- /dev/null +++ "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/security/index.md" @@ -0,0 +1,580 @@ +--- +title: 智慧型合約安全 +description: 建立安全的以太坊智慧型合約指南之概觀 +lang: zh-tw +--- + +智慧型合約極度靈活,且能夠控制大量值和資料,同時基於部署在區塊鏈上的程式碼執行不可變的邏輯。 這建立了活躍的去信任和去中心化的應用程式生態系統,它與傳統系統相比有許多優點。 這也為謀求透過智慧型合約漏洞獲利的攻擊者提供機會。 + +公共區塊鏈,例如以太坊,使智慧型合約的安全議題更加複雜。 已部署的合約程式碼_通常_無法變更,以修補安全缺陷;而要追蹤從智慧型合約竊取的資產也十分困難,且因為物件的不可變性,大多無法挽回。 + +雖然數字有差異,但因智慧型合約安全缺陷而遭竊取或損失的總額,估計超過 10 億美元。 備受關注的事件如 [DAO 駭客攻擊](https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/)(駭客竊取 360 萬以太幣,現價超過 10 億美元);[Parity 多重簽章錢包駭客攻擊](https://www.coindesk.com/30-million-ether-reported-stolen-parity-wallet-breach)(駭客竊取 3 千萬美元);以及 [Parity 凍結錢包問題](https://www.theguardian.com/technology/2017/nov/08/cryptocurrency-300m-dollars-stolen-bug-ether)(超過 3 億美元的以太幣遭到永久凍結)。 + +前面提到的問題,促使開發者將努力打造安全、健全且有韌性的智慧型合約視為當務之急。 我們必須嚴肅看待智慧型合約的安全性,每個開發者都需要好好加以瞭解。 此指南將涵蓋以太坊開發者應有的資安考量,並探索提升智慧型合約安全性的資源。 + +## 基本資訊 {#prerequisites} + +請務必熟悉[開發智慧型合約的基本知識](/developers/docs/smart-contracts/),再來瞭解安全性。 + +## 建立安全的以太坊智慧型合約指南 {#smart-contract-security-guidelines} + +### 1. 設計正確的存取控制 {#design-proper-access-controls} + +在智慧型合約中,任何外部帳戶 (EOA) 或合約帳戶都可以調用標記為 `public` 或 `external` 的函數。 如果你想要其他人與你的智慧型合約互動,務必指定函數的公共可見性。 標記為 `private` 的函數只能被智慧型合約內部的函數調用,外部帳戶無法調用這種函數。 讓每個網路參與者存取智慧型合約函數可能造成一些問題,尤其是這表示人人都能執行須謹慎以對的操作(例如鑄造新代幣)。 + +為了防止未授權者使用智慧型合約函數,務必落實安全存取控制。 存取控制機制將使用智慧型合約中特定函數的功能限縮給某些核准實體,例如負責管理合約的帳戶。 在智慧型合約中,**可擁有模式**和**以角色為基礎的控制**是兩個有效落實存取控制的方法。 + +#### 可擁有模式 {#ownable-pattern} + +在可擁有模式下,會在建立合約的過程中,將一個地址設為合約的「擁有者」。 受保護的函數會配置一個 `OnlyOwner` 修飾符,確保執行函數前,先驗證調用地址的身分。 為防止不受歡迎的存取,合約擁有者以外的地址對受保護函數的調用都會遭到撤銷。 + +#### 以角色為基礎的控制 {#role-based-access-control} + +在一個智慧型合約中,將一個地址註冊為 `Owner` 會導致集中風險及單點失效。 假如合約擁有者的帳戶金鑰遭竊,攻擊者就可以攻擊合約擁有者的智慧型合約。 這就是為什麼使用以角色為基礎的控制模式和多重管理帳戶可能是更好的方法。 + +在以角色為基礎的控制下,存取敏感函數的權限會分散給一組受信任的參與者。 例如一個帳戶可能負責鑄造代幣;另一個帳戶則執行升級或暫停合約。 這種分散存取控制的做法排除了單點失效,也減少使用者的信任假設。 + +##### 使用多重簽章錢包 + +另一個落實安全存取控制的方法是使用[多重簽章帳戶](/developers/docs/smart-contracts/#multisig)管理合約。 不同於一般外部帳戶 (EOA),多重簽章帳戶由多個實體持有,而且需要最小數量的帳戶簽章,例如 5 個持有人中 3 個人的簽章,才能執行交易。 + +使用多簽存取控制,可多添一層安全性,因為對合約採取執行任何操作都需要多位合約持有人的同意。 這在使用可擁有模式的情況下尤其必要,因為它讓攻擊者或不肖內部人士更難操縱敏感的合約函數以達成其惡意目的。 + +### 2. 使用 require()、assert() 和 revert() 陳述式保護合約運作 {#use-require-assert-revert} + +如前面所說的,一旦將智慧型合約部署到區塊鏈上,任何人都可以調用智慧型合約內的公共函數。 因為無法事先預期外部帳戶將如何與你的合約互動,理想做法是在部署前落實內部保障措施,防止會造成問題的操作。 你可以強制使用者對智慧型合約執行正確行為,如果執行操作未能通過某些條件,可以使用 `require()`、`assert()` 和 `revert()` 陳述式,來啟動例外狀況並撤銷狀態變更。 + +**`require()`**:`require` 會定義於函數的開頭,確保在執行調用函數前,達到預先定義的條件。 `require` 陳述式可以用於驗證使用者輸入的資料、確認狀態變數或在繼續執行函數前驗證調用帳戶的身分。 + +**`assert()`**:`assert()` 用於偵測內部錯誤和確認程式碼是否違反「不變性」。 不變性是在執行所有函數時,都應為真的合約狀態的邏輯斷言。 不變性的一個範例就是代幣合約的最大總供應量或餘額。 使用 `assert()` 確保你的合約絕不會進入脆弱狀態,若發生這種狀況,所有狀態變數將會回復到先前狀態。 + +**`revert()`**:`revert()` 可以運用在未滿足指定條件時,觸發例外狀況的 if-else 陳述式。 以下範例合約使用 `revert()` 來保護函數的執行: + +``` +pragma solidity ^0.8.4; + +contract VendingMachine { + address owner; + error Unauthorized(); + function buy(uint amount) public payable { + if (amount > msg.value / 2 ether) + revert("Not enough Ether provided."); + // Perform the purchase. + } + function withdraw() public { + if (msg.sender != owner) + revert Unauthorized(); + + payable(msg.sender).transfer(address(this).balance); + } +} +``` + +### 3. 測試智慧型合約和驗證程式碼的正確性 {#test-smart-contracts-and-verify-code-correctness} + +在[以太坊虛擬機](/developers/docs/evm/)上執行的程式碼具備不可變性,代表智慧型合約在開發階段需要接受更高階的品質評估。 全面測試你的合約並注意任何超出預期的結果,將大大提升合約的安全性,且長期來看可保護使用者。 + +常用方法是使用預期合約會接受的使用者模擬資料,來編寫小型單元測試。 [單元測試](/developers/docs/smart-contracts/testing/#unit-testing)適合測試特定函數的功能,並確保智慧型合約如預期運作。 + +很可惜,單元測試單獨使用時,提升智慧型合約安全性的成效並不顯著。 單元測試可能證明函數可以正確執行模擬資料,但單元測試的效果取決於編寫測試的品質。 這使得偵測未注意到、但會破壞智慧型合約安全性的邊緣案例與漏洞非常困難。 + +更好的做法是結合單元測試與屬性測試,並運用[靜態和動態分析](/developers/docs/smart-contracts/testing/#static-dynamic-analysis)執行。 靜態分析依賴低階表示法,像是[控制流程圖](https://en.wikipedia.org/wiki/Control-flow_graph)和[抽象語法樹](https://deepsource.io/glossary/ast/),來分析可觸及的程式狀態和執行路徑。 同時,動態分析技術(如[智慧型合約模糊測試](https://www.cyfrin.io/blog/smart-contract-fuzzing-and-invariants-testing-foundry))則使用隨機輸入值執行合約程式碼,以偵測違反安全屬性的操作。 + +[形式驗證](/developers/docs/smart-contracts/)是另一項驗證智慧型合約安全屬性的技術。 不同於一般測試,形式驗證可以确凿地證明智慧型合約不存在任何錯誤。 這種做法會建立描述預期安全屬性的形式規范,並證明合約的形式模型遵守此規范。 + +### 4 邀請獨立審查程式碼 {#get-independent-code-reviews} + +測試完合約後,最好請其他人來確認原始程式碼是否有任何安全性問題。 測試沒辦法涵蓋智慧型合約內的每一處瑕疵,但進行獨立審查可增加發現漏洞的可能性。 + +#### 審核 {#audits} + +委託智慧型合約審核服務是進行獨立程式碼審查的方法之一。 審核者在確保智慧型合約安全性,且沒有品質瑕疵和設計錯誤上扮演重要角色。 + +但是,你應該避免把審核當成一勞永逸地的解決方案。 智慧型合約審核不可能發現每一個錯誤,其主要目的是再次進行審查,幫助開發者偵測在開發初期和測試階段沒有發現的問題。 你也應該遵循與審核者合作的最佳案例,例如製作完整的程式碼記錄以及新增內嵌注釋,才能從智慧型合約審核中獲得最大效益。 + +- [智慧型合約審核提示和技巧](https://twitter.com/tinchoabbate/status/1400170232904400897) - _@tinchoabbate_ +- [充分利用你的審核](https://inference.ag/blog/2023-08-14-tips/) - _推理_ + +#### 漏洞懸賞 {#bug-bounties} + +設立漏洞懸賞賞計畫是另一個實現外部程式碼審查的方法。 漏洞懸賞會發放經濟性獎勵給發現應用程式漏洞的個人(通常是白帽駭客)。 + +若正確運用,漏洞懸賞可以給予駭客社群檢查你程式碼重大缺陷的動機。 一個實際案例是「無限貨幣錯誤」,讓攻擊者可以在以太坊的[二層](/layer-2/)協定 [Optimism](https://www.optimism.io/) 上建立無限數量的以太幣。 幸好有位白帽駭客[發現了這個缺陷](https://www.saurik.com/optimism.html),並通知了相關團隊[,因此獲得了一大筆獎金](https://cryptoslate.com/critical-bug-in-ethereum-l2-optimism-2m-bounty-paid/)。 + +有效的漏洞懸賞獎金機制,應與面臨風險的資金成比例。 就像「[Scaling Bug Bounty(擴大漏洞懸賞)](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)」一文所說,這種方法讓人在財務上有動機盡責揭露,而非利用漏洞。 + +### 5 開發智慧型合約時遵循最佳案例 {#follow-smart-contract-development-best-practices} + +不能因為有審核和漏洞懸賞就不盡責編寫高品質程式碼。 優良的智慧型合約安全性始於遵循正確的設計和開發流程: + +- 將所有的程式碼儲存在版本控制系統中,例如 git + +- 修改所有程式碼都需透過提取請求完成 + +- 確保所有的提取請求都至少有一個獨立審核人:如果是自己獨自開發專案,可斟酌找其他開發者交換審查程式碼 + +- 使用[開發環境](/developers/docs/frameworks/)來測試、編譯、部署智慧型合約 + +- 透過基本的程式碼分析工具,例如 [Cyfrin Aaderyn](https://github.com/Cyfrin/aderyn)、Mythril 和 Slither,來執行程式碼。 理想情况下,這應該在合併提取請求及檢查輸出結果異同前完成 + +- 確認程式碼編譯沒有錯誤,且 Solidity 編譯器不會傳出警告 + +- 正確記錄程式碼(使用 [NatSpec](https://solidity.readthedocs.io/en/develop/natspec-format.html)),並運用簡單易懂的語言詳細描述合約架構。 這樣才容易讓其他人審核和審查你的程式碼。 + +### 6. 採行健全的災害復原計畫 {#implement-disaster-recovery-plans} + +設計安全的存取控制、採用函數修飾符和其他上述提議,可改善智慧型合約安全,但不能排除惡意入侵的可能性。 建立安全的智慧型合約需要做好「防範錯誤的準備」,以及對攻擊作出有效反應的備援計畫。 正確的災害復原計畫包含下列部分或全部要素: + +#### 合約升級 {#contract-upgrades} + +雖然以太坊智慧型合約是預設不得變更,但可以透過升級模式來達成某程度的變更。 當重大缺陷迫使舊合約無法使用,而部署新邏輯是最可行的選擇時,就必須升級合約。 + +合約升級機制的運作方式不同,「代理人模式」是升級智慧型合約最常見的方法。 [代理人模式](https://www.cyfrin.io/blog/upgradeable-proxy-smart-contract-pattern)會將應用程式的狀態和邏輯拆分成_兩個_合約。 第一個合約(稱為「代理人合約」)儲存狀態變數(例如使用者餘額);第二個合約(稱為「邏輯合約」)保存執行合約函數的程式碼。 + +帳戶只和代理人合約互動,代理人合約再用低階調用 [`delegatecall()`](https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html?highlight=delegatecall#delegatecall-callcode-and-libraries) 發送所有函數調用至邏輯合約。 和一般的訊息調用不同,`delegatecall()` 會確保在邏輯合約地址上執行的程式碼是在調用合約的情境下執行。 這表示邏輯合約將永遠把資料寫入代理人的存儲空間(而不是自己的存儲空間),且會保留 `msg.sender` 與 `msg.value` 的原始值。 + +委託邏輯合約的調用必須將其地址儲存在代理人合約的存儲空間。 因此,升級合約的邏輯只是部署另一個邏輯合約,並將新地址儲存至代理人合約。 之後,代理人合約的調用都會自動傳送至新的邏輯合約,讓你在未實際修改程式碼的情況下「升級」合約。 + +[更多升級合約相關資訊](/developers/docs/smart-contracts/upgrading/)。 + +#### 緊急停止 {#emergency-stops} + +如前所述,即便進行大量審核和測試,仍不可能發現智慧型合約的所有漏洞。 如果已經部署的程式出現漏洞,就不可能修補,因為你無法改變在合約地址執行的程式碼。 而且,升級機制(例如,代理人模式)可能需要時間完成(通常需要不同相關方的同意),因此會給攻擊者更多時間造成更大傷害。 + +極端選擇是執行「緊急停止」函數,阻止調用合約中的易受攻擊函數。 緊急停止通常包含下列要素: + +1. 指示智慧型合約是否在停止狀態的全域布林變數。 建立合約時,此變數被設定為 `false`,一旦合約終止,就會回復為 `true`。 + +2. 執行時參照這個布林變數的函數。 在智慧型合約不在終止狀態時,可存取這類函數;但啟動緊急停止功能後,此類函數就無法存取。 + +3. 可以存取緊急停止函數的實體,可將布林變數設定為 `true`。 為防止惡意行動,可以限制只有受信任地址(例如,合約持有人)才可調用此函數。 + +一旦合約啟動緊急停止,將無法調用特定函數。 藉由將指定函數包裹在參照全域變數的修飾符中來達成此目的。 以下是說明如何在合約中採用此模式的[範例](https://github.com/fravoll/solidity-patterns/blob/master/EmergencyStop/EmergencyStop.sol): + +```solidity +// This code has not been professionally audited and makes no promises about safety or correctness. Use at your own risk. + +contract EmergencyStop { + + bool isStopped = false; + + modifier stoppedInEmergency { + require(!isStopped); + _; + } + + modifier onlyWhenStopped { + require(isStopped); + _; + } + + modifier onlyAuthorized { + // Check for authorization of msg.sender here + _; + } + + function stopContract() public onlyAuthorized { + isStopped = true; + } + + function resumeContract() public onlyAuthorized { + isStopped = false; + } + + function deposit() public payable stoppedInEmergency { + // Deposit logic happening here + } + + function emergencyWithdraw() public onlyWhenStopped { + // Emergency withdraw happening here + } +} +``` + +此範例展現緊急停止的基本特徵: + +- `isStopped` 是布林變數,在開始時計算為為 `false`,當合約進入緊急模式時即變更為 `true`。 + +- 函數修飾符 `onlyWhenStopped` 和 `stoppedInEmergency` 會檢查 `isStopped` 變數。 `stoppedInEmergency` 用於控制合約出現漏洞時,無法存取的函數(例如,`deposit()`)。 這些函數的調用將直接遭到撤銷。 + +`onlyWhenStopped` 用於在緊急情況下應調用的函數(例如,`emergencyWithdraw()`)。 這類函數有助解決困境,因此被排除在「受限函數」清單之外。 + +緊急停止功能提供處理智慧型合約嚴重漏洞的有效權宜之計。 然而,這種方法需要使用者相信開發者不會基於自身利益啟動緊急停止功能。 面對這種疑慮,可能的解決方法是透過鏈上投票機制、時間鎖定、或多簽錢包核准等分散式方法管理緊急停止功能。 + +#### 事件監控 {#event-monitoring} + +[事件](https://docs.soliditylang.org/en/v0.8.15/contracts.html#events)可以追蹤智慧型合約函數調用狀況和監控狀態變數的變化。 理想做法是當某一方執行攸關安全的行動(例如,提領資金)時,讓智慧型合約釋出事件。 + +記錄事件和鏈外監控事件,可以掌握合約運作狀況並有助及早發現惡意行動。 這表示你的團隊可以快速對駭客攻擊做出反應,並採取行動減輕對使用者的衝擊,例如:暫停函數或執行升級。 + +你也可以選擇現成的監控工具,在有人和你的合約互動時,這些工具會自動傳送警告通知。 這些工具可讓你基於不同的觸發器,例如:交易量、函數調用頻率或涉及特定函數時,建立自訂警告通知。 例如:你可以編寫在單筆交易提款金額超過特定閾值時傳送警告。 + +### 7. 設計安全治理體系 {#design-secure-governance-systems} + +你可能想要藉由移交重要智慧型合約的控制權給社群成員,來分散管理(去中心化)應用程式。 這種情況下,智慧型合約系統將包含一個治理模組,也就是允許社群成員透過鏈上治理體系核准管理行動的機制。 例如,採納升級代理人合約的提案,可由代幣持有人投票決定。 + +去中心化治理的好處在於讓開發者和終端使用者的利益一致。 儘管如此,若未正確落實智慧型合約治理機制,仍可能產生新的風險。 可能出現的情況是,一位攻擊者透過[閃電貸](/defi/#flash-loans)取得大量投票權(以持有代幣數量決定),推動通過惡意提案。 + +預防鏈上治理相關問題的方法之一是[使用時間鎖定](https://blog.openzeppelin.com/protect-your-users-with-smart-contract-timelocks/)。 時間鎖定是直到特定時間過後,才讓智慧型合約執行某些動作。 其他策略包括:根據每一個代幣被鎖定的時間賦予「投票加權」,或以歷史期間(例如:過去的 2-3 個區塊)而不是目前區塊,來衡量一個地址的投票權。 這兩種方法都能降低快速累積投票權,進而影響鏈上投票結果的情況。 + +藉由共享連結,了解關於[設計安全管理體系](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/)、[去中心化自治組織的不同投票機制](https://hackernoon.com/governance-is-the-holy-grail-for-daos),以及[利用去中心化金融的常見去中心化自治組織攻擊媒介](https://dacian.me/dao-governance-defi-attacks)的更多資訊。 + +### 8. 將程式碼的複雜性降到最低 {#reduce-code-complexity} + +傳統的軟體開發者都熟悉 KISS (「保持簡約」),也就是不要在軟體中引進不必要複雜設計的原則。 這是因為長期以來,人們都認為「複雜系統會發生複雜的故障」,且更容易造成代價高昂的錯誤。 + +編寫智慧型合約尤其注重簡約,因為智慧型合約可能控制龐大資金。 保持簡約的秘訣:編寫智慧型合約時盡可能重複使用既有庫,例如 [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/4.x/)。 因為這些庫已經通過開發者廣泛審核和測試,使用時可以降低從零開始開發新功能出現漏洞的幾率。 + +另一個建議是編寫小型函數,並將商業邏輯拆分成多個合約,確立模組化合約。 編寫較簡單的程式碼不只能縮小智慧型合約中的受攻擊面,也使判斷整個系統的正確性更簡單,亦能提早偵測可能的設計錯誤。 + +### 9. 防範一般的智慧型合約漏洞 {#mitigate-common-smart-contract-vulnerabilities} + +#### 重入攻擊 {#reentrancy} + +以太坊虛擬機不允許並行執行,也就是無法同時執行牽涉同一訊息調用的兩個合約。 一個外部調用會終止調用合約的執行和記憶體,直到這個調用返回結果,這時才會繼續正常執行。 這個過程可被正式稱為將[控制流程](https://www.computerhope.com/jargon/c/contflow.htm)轉移到另一個合約。 + +雖然大多數情況下無害,但轉移控制流程至不受信任的合約可能引起重入攻擊等問題。 在初始函數調用完成前,若惡意合約回呼易受攻擊的合約,就是重入攻擊。 我們可以舉一個例子來說明這種攻擊類型。 + +試想有個簡單的智慧型合約(稱為「Victim」),可以讓任何人存入與提領以太幣: + +```solidity +// This contract is vulnerable. Do not use in production + +contract Victim { + mapping (address => uint256) public balances; + + function deposit() external payable { + balances[msg.sender] += msg.value; + } + + function withdraw() external { + uint256 amount = balances[msg.sender]; + (bool success, ) = msg.sender.call.value(amount)(""); + require(success); + balances[msg.sender] = 0; + } +} +``` + +此合約公布了一個 `withdraw()` 函數,允許使用者提領先前存入合約內的以太幣。 處理提款時,合約執行以下操作: + +1. 檢查使用者的以太幣餘額 +2. 匯出資金至調用地址 +3. 將餘額重置為 0,避免使用者進一步提領 + +`Victim` 合約中的 `withdraw()` 函數遵循「檢查-互動-效果」模式。 若滿足必要的執行條件,就會進行_檢查_(即使用者的以太幣餘額是正數),接著再傳送以太幣至調用者的地址,進行_互動_,最後套用交易_效果_(即減少使用者的餘額)。 + +假如是外部帳戶 (EOA) 調用 `withdraw()`,函數將如預期執行:`msg.sender.call.value()` 傳送以太幣給調用者。 然而,如果調用 `withdraw()` 的 `msg.sender` 是智慧型合約帳戶,使用`msg.sender.call.value()` 傳送資金,也會觸發儲存在該帳戶地址的程式碼執行。 + +試想這是部署在合約地址的程式碼: + +```solidity + contract Attacker { + function beginAttack() external payable { + Victim(victim_address).deposit.value(1 ether)(); + Victim(victim_address).withdraw(); + } + + function() external payable { + if (gasleft() > 40000) { + Victim(victim_address).withdraw(); + } + } +} +``` + +這個合約在設計上要達成三個目的: + +1. 接受其他帳戶(可能是攻擊者的外部帳戶)的存款 +2. 存入 1 以太幣至 Victim 合約 +3. 提領存儲在智慧型合約中的 1 以太幣 + +這裡沒有任何問題,除了傳入 `msg.sender.call.value` 剩餘的燃料超過 40,000 時,`Attacker` 中的另一個函數會再次調用 `Victim` 內的 `withdraw()`。 這讓 `Attacker` 在第一次調用 `withdraw` 結束_之前_,可以一再進入 `Victim` 提領更多資金。 這個循環看起來像這樣: + +```solidity +- Attacker's EOA calls `Attacker.beginAttack()` with 1 ETH +- `Attacker.beginAttack()` deposits 1 ETH into `Victim` +- `Attacker` calls `withdraw() in `Victim` +- `Victim` checks `Attacker`’s balance (1 ETH) +- `Victim` sends 1 ETH to `Attacker` (which triggers the default function) +- `Attacker` calls `Victim.withdraw()` again (note that `Victim` hasn’t reduced `Attacker`’s balance from the first withdrawal) +- `Victim` checks `Attacker`’s balance (which is still 1 ETH because it hasn’t applied the effects of the first call) +- `Victim` sends 1 ETH to `Attacker` (which triggers the default function and allows `Attacker` to reenter the `withdraw` function) +- The process repeats until `Attacker` runs out of gas, at which point `msg.sender.call.value` returns without triggering additional withdrawals +- `Victim` finally applies the results of the first transaction (and subsequent ones) to its state, so `Attacker`’s balance is set to 0 +``` + +總起來說,因為調用者的餘額並非 0,直到函數執行結束前,後續的調用都能成功執行,並允許調用者多次提領餘額。 這類攻擊可以被用於將智慧型合約內的所有資金提領一空,如同 [2016 年的 DAO 駭客攻擊](https://www.coindesk.com/learn/2016/06/25/understanding-the-dao-attack/)。 就像[重入入侵公開清單](https://github.com/pcaversaccio/reentrancy-attacks)所示,如今重入攻擊仍是智慧型合約面臨的嚴重問題。 + +##### 如何預防重入攻擊 + +處理重入攻擊的方法是遵循[檢查 - 效果 - 互動模式](https://docs.soliditylang.org/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern)。 這個模式指示函數如以下次序執行,在繼續執行下一個動作前,必須先執行進行必要檢查的程式碼,然後是執行操縱合約狀態的程式碼,最後才執行與其他合約或外部帳戶互動的程式碼。 + +依照檢查 - 效果 - 互動模式改寫 `Victim` 合約如下: + +```solidity +contract NoLongerAVictim { + function withdraw() external { + uint256 amount = balances[msg.sender]; + balances[msg.sender] = 0; + (bool success, ) = msg.sender.call.value(amount)(""); + require(success); + } +} +``` + +這個合約如下執行:_檢查_使用者餘額、套用 `withdraw()` 函數的_效果_(將使用者的餘額重置為 0),再繼續執行_互動_(傳送以太幣至使用者地址)。 這能確保合約在外部調用前更新存儲空間,排除會引發第一次攻擊的重入條件。 `Attacker` 合約仍然可能回呼 `NoLongerAVictim`,但因為 `balances[msg.sender]` 已設定為 0,所以再次提領時會出現錯誤。 + +另一個方法是使用相斥鎖定(一般稱為「Mutex」),鎖定合約的部分狀態,直到完成函數調用。 這個方法是在函數執行前,將一個布林變數設定為 `true`,調用完成後再把布林變數回復為 `false`。 如以下範例所示,使用 Mutex 可保護函數在初始調用尚未完成前,不被重複調用,並有效阻止重入。 + +```solidity +pragma solidity ^0.7.0; + +contract MutexPattern { + bool locked = false; + mapping(address => uint256) public balances; + + modifier noReentrancy() { + require(!locked, "Blocked from reentrancy."); + locked = true; + _; + locked = false; + } + // This function is protected by a mutex, so reentrant calls from within `msg.sender.call` cannot call `withdraw` again. + // The `return` statement evaluates to `true` but still evaluates the `locked = false` statement in the modifier + function withdraw(uint _amount) public payable noReentrancy returns(bool) { + require(balances[msg.sender] >= _amount, "No balance to withdraw."); + + balances[msg.sender] -= _amount; + bool (success, ) = msg.sender.call{value: _amount}(""); + require(success); + + return true; + } +} +``` + +你還可以使用[提取款項](https://docs.openzeppelin.com/contracts/4.x/api/security#PullPayment)系統,要求使用者從智慧型合約提款,而不是使用「推送付款」系統傳送資金至帳戶。 如此一來,就可免除在未知地址上意外啟動程式碼的可能性(也能防止特定阻斷服務攻擊)。 + +#### 整數下溢與上溢 {#integer-underflows-and-overflows} + +算術運算結果超出可接受數值範圍,必須「退位」至最低代表值時,就是整數上溢。 例如:`uint8` 最多只能儲存相當於 2^8-1=255 的值。 若算術運算結果導致大於 `255` 的值,就屬於上溢,並會將 `uint` 重置為 `0`,類似汽車里程表達到里程數上限 (999999) 時,將重置為 0。 + +整數下溢的發生原因也是如此:算術運算結果小於可接受範圍。 例如你嘗試要對 `uint8` 的 `0` 進行遞減,結果就會是進位至最高代表值 (`255`)。 + +整數上溢和下溢都可能對合約狀態變數產生非預期的變更,導致預料外的執行。 以下範例顯示攻擊者可以利用智慧型合約內的算術上溢執行無效操作: + +``` +pragma solidity ^0.7.6; + +// This contract is designed to act as a time vault. +// User can deposit into this contract but cannot withdraw for at least a week. +// User can also extend the wait time beyond the 1 week waiting period. + +/* +1. Deploy TimeLock +2. Deploy Attack with address of TimeLock +3. Call Attack.attack sending 1 ether. You will immediately be able to + withdraw your ether. + +What happened? +Attack caused the TimeLock.lockTime to overflow and was able to withdraw +before the 1 week waiting period. +*/ + +contract TimeLock { + mapping(address => uint) public balances; + mapping(address => uint) public lockTime; + + function deposit() external payable { + balances[msg.sender] += msg.value; + lockTime[msg.sender] = block.timestamp + 1 weeks; + } + + function increaseLockTime(uint _secondsToIncrease) public { + lockTime[msg.sender] += _secondsToIncrease; + } + + function withdraw() public { + require(balances[msg.sender] > 0, "Insufficient funds"); + require(block.timestamp > lockTime[msg.sender], "Lock time not expired"); + + uint amount = balances[msg.sender]; + balances[msg.sender] = 0; + + (bool sent, ) = msg.sender.call{value: amount}(""); + require(sent, "Failed to send Ether"); + } +} + +contract Attack { + TimeLock timeLock; + + constructor(TimeLock _timeLock) { + timeLock = TimeLock(_timeLock); + } + + fallback() external payable {} + + function attack() public payable { + timeLock.deposit{value: msg.value}(); + /* + if t = current lock time then we need to find x such that + x + t = 2**256 = 0 + so x = -t + 2**256 = type(uint).max + 1 + so x = type(uint).max + 1 - t + */ + timeLock.increaseLockTime( + type(uint).max + 1 - timeLock.lockTime(address(this)) + ); + timeLock.withdraw(); + } +} +``` + +##### 如何預防整數下溢和上溢 + +自 0.8.0 版本起,Solidity 編譯器拒絕使用會導致整數下溢和上溢的程式碼。 然而,使用較低版本編譯器編譯的合約應該檢查涉及算術運算的函數,或使用庫(例如 [SafeMath](https://docs.openzeppelin.com/contracts/2.x/api/math))來檢查下溢/上溢。 + +#### 操縱預言機 {#oracle-manipulation} + +[預言機](/developers/docs/oracles/)會取得鏈外資訊,並把這些資訊傳到鏈上供智慧型合約使用。 使用預言機,可以設計與鏈外系統(例如資本市場)互通的智慧型合約,大幅拓展應用範圍。 + +然而,若預言機遭到破壞,將不正確的資訊傳到鏈上,智慧型合約將會根據不正確輸入資料執行,可能引起問題。 這是「預言機問題」的基礎,也就是要確保來自區塊鏈預言機的是正確、及時的最新資訊。 + +可能產生的相關安全性疑慮,就是使用如去中心化交易所等鏈上預言機,取得資產的現貨價格。 [去中心化金融 (DeFi)](/defi/) 產業的借貸平台通常都藉此判斷使用者抵押品的價值,再決定借貸額度。 + +去中心化交易所的價格之所以準確,大體上倚靠套利者在市場上維持市場均衡。 然而,這也提供操縱空間,若鏈上預言機可根據歷史交易模式(通常使用的方法)計算資產價格時,更是如此。 + +例如,在和你的借貸合約互動之前,攻擊者可藉由取得閃電貸的權利,人為膨脹某資產的現貨價格。 在去中心化交易所查詢該資產的價格時,會傳回高於正常價值(因為攻擊者大量「買單」扭曲對該資產的需求量)的價格,因而允許他們超額借貸。 像這樣的「閃電貸攻擊」已被用來入侵依靠價格預言機的去中心化金融應用程式,造成協定損失數百萬美元。 + +##### 如何預防操縱預言機 + +[避免預言機操縱](https://www.cyfrin.io/blog/price-oracle-manipultion-attacks-with-examples)的最低要求是,使用去中心化預言機網路,來查詢來自多個來源的資訊以避免單點故障。 在大多數情況下,去中心化預言機內建加密經濟獎勵機制,促進預言機節點報告正確資訊,因此比集中化預言機安全。 + +若你打算在鏈上預言機查詢資產價格,可考慮使用採用時間加權平均價格 (TWAP) 機制的預言機。 [時間加權平均價格預言機](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles)會查詢兩個不同時間點(你可以更改時間點)的資產價格,再根據得到數據的平均值計算現貨價值。 選擇時間較長的價格可保護協定免於價格操縱,因為近期大量的交易下單不會對資產價格造成影響。 + +## 開發者的智慧型合約安全性資源 {#smart-contract-security-resources-for-developers} + +### 分析智慧型合約和驗證程式碼正確性的工具 {#code-analysis-tools} + +- **[測試工具和庫](/developers/docs/smart-contracts/testing/#testing-tools-and-libraries)** - _一系列執行智慧型合約單元測試、靜態分析和動態分析的產業標準工具和庫。_ + +- **[形式驗證工具](/developers/docs/smart-contracts/formal-verification/#formal-verification-tools) - **_驗證智慧型合約功能正確性和檢查不變性的工具。_ + +- **[智慧型合約審核服務](/developers/docs/smart-contracts/testing/#smart-contract-auditing-services)**:_提供以太坊開發專案智慧型合約審核服務的組織清單。_ + +- **[漏洞懸賞平台](/developers/docs/smart-contracts/testing/#bug-bounty-platforms)** - _協調漏洞懸賞計畫和發放獎金給揭發智慧型合約重大漏洞者的平台。_ + +- **[分叉檢查工具](https://forkchecker.hashex.org/)** - _檢查分叉合約所有可用資訊的線上免費工具。_ + +- **[應用程式二進制介面編碼器](https://abi.hashex.org/)** - _對 Solidity 合約的函數和建構函數引數進行編碼的線上免費服務。_ + +- **[Aderyn](https://github.com/Cyfrin/aderyn)** - _Solidity 靜態分析器,透過周遊抽象語法樹 (AST) 找出可疑漏洞,並以易於使用的 Markdown 格式列印問題。_ + +### 監視智慧型合約的工具 {#smart-contract-monitoring-tools} + +- **[OpenZeppelin Defender Sentinels](https://docs.openzeppelin.com/defender/v1/sentinel)** - _一個自動監控和回應智慧型合約事件、函式和交易參數的工具。_ + +- **[Tenderly Real-Time Alerting](https://tenderly.co/alerting/)**:_當智慧型合約或錢包出現不尋常的和意外事件時,可以獲得即時通知的工具。_ + +### 智慧型合約的安全管理工具 {#smart-contract-administration-tools} + +- **[OpenZeppelin Defender Admin](https://docs.openzeppelin.com/defender/v1/admin)** - _管理智慧型合約運作,包括存取控制、升級和暫停的介面。_ + +- **[Safe](https://safe.global/)** - _在以太坊上執行、需要達到最低核准人數(N 人中的M 人),才能執行交易的智慧型合約數位錢包。_ + +- **[OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/4.x/)** - _執行合約所有權、升級、存取控制、治理、暫停等管理功能的合約庫。_ + +### 智慧型合約審核服務 {#smart-contract-auditing-services} + +- **[ConsenSys Diligence](https://consensys.net/diligence/)** - _協助區塊鏈生態系系統中的專案,確保其協定處於可發布狀態,且用於保護使用者的智慧型合約審核服務。_ + +- **[CertiK](https://www.certik.com/)** - _率先致力於智慧型合約和區塊鏈網路上使用最新形式驗證技術的區塊鏈安全公司。_ + +- **[Trail of Bits](https://www.trailofbits.com/)** - _結合安全性研究和攻擊者心理來降低風險和強化程式碼的網絡安全公司。_ + +- **[PeckShield](https://peckshield.com/)** - _為整個區塊鏈生態系統的安全性、隱私權、易用性提供產品和服務的區塊鏈安全公司。_ + +- **[QuantStamp](https://quantstamp.com/)** - _經由安全性和風險評估服務促進廣泛採用區塊鏈技術的審核服務。_ + +- **[OpenZeppelin](https://www.openzeppelin.com/security-audits)** - _提供去中心化系統安全性審核的智慧型合約安全公司。_ + +- **[Runtime Verification](https://runtimeverification.com/)** - _專精於智慧型合約形式模型和驗證的安全公司。_ + +- **[Hacken](https://hacken.io)** - _為區塊鏈安全採用 360 度全方位方法的 Web3 網路安全審核者。_ + +- **[Nethermind](https://nethermind.io/smart-contracts-audits)** - _Solidity 和 Cairo 稽核服務,確保智慧型合約完整性、以及以太坊及 Starknet 使用者的安全。_ + +- **[HashEx](https://hashex.org/)** - _HashEx 專注於區塊鏈和智慧型合約審核,以確保加密貨幣的安全性,提供智慧型合約開發、滲透測試、區塊鏈諮詢等服務。_ + +- **[Code4rena](https://code4rena.com/)** - _鼓勵智慧型合約安全性專家找出漏洞,並協助提升 Web3 安全性,富競爭力的審核平台。_ + +- **[CodeHawks](https://codehawks.com/)** - _舉辦面向安全研究人員的智慧型合約審核比賽的競爭性審核平台。_ + +- **[Cyfrin](https://cyfrin.io)** - _Web3 安全巨頭,透過產品和智慧型合約審核服務來發展加密安全。_ + +- **[ImmuneBytes](https://www.immunebytes.com//smart-contract-audit/)** - _Web3 安全公司,透過經驗豐富的審核者團隊和一流工具,為區塊鏈系統提供安全審核。_ + +- **[Oxorio](https://oxor.io/)** - _智慧型合約審核和區塊鏈安全服務,在以太坊虛擬機、Solidity、零知識、加密公司和去中心化金融專案的跨鏈技術方面擁有深厚的專業知識。_ + +- **[Inference](https://inference.ag/)** - _安全審核公司,專注基於以太坊虛擬機區塊鏈的智慧型合約審核。 透過專家審核者的幫助,他們能發現潛在問題並提出可行的解決方案,以便在部署前解決這些問題。_ + +### 漏洞懸賞平台 {#bug-bounty-platforms} + +- **[Immunefi](https://immunefi.com/)** - _這是智慧型合約和去中心化金融專案漏洞懸賞平台。安全研究員在此審核程式碼、找出漏洞、獲得報酬、使加密貨幣更安全。_ + +- **[HackerOne](https://www.hackerone.com/)** - _連結商業和滲透測試者及安全研究者的漏洞協調和漏洞懸賞平台。_ + +- **[HackenProof](https://hackenproof.com/)** - _專業的加密貨幣專案(去中心化金融、智慧型合約、錢包、中心化交易所等)漏洞懸賞平台。安全專業人士在此提供分類服務,而研究者可以在提出重要、經過驗證的錯誤報告時獲得報酬。_ + +- **[Sherlock](https://www.sherlock.xyz/)** - _Web3 中的智慧型合約安全承銷商,透過智慧型合約管理對審核者的支出,以確保相關漏洞得到公平償付。_ + +- **[CodeHawks](https://www.codehawks.com/)** - _競爭性漏洞懸賞平台,審核者可以在其中參與安全競賽和挑戰,以及自己的私人審核(即將推出)。_ + +### 已知的智慧型合約漏洞和弱點出版品 {#common-smart-contract-vulnerabilities-and-exploits} + +- **[ConsenSys:已知的智慧型合約攻擊](https://consensys.github.io/smart-contract-best-practices/attacks/)** - _以適合初學者的方式解說最重大的合約漏洞,大部分案例會附上範例程式碼。_ + +- **[SWC Registry](https://swcregistry.io/)** - _適用於以太坊智慧型合約的通用弱點列表 (CWE) 精選清單。_ + +- **[Rekt](https://rekt.news/)** - _知名加密貨幣駭客和侵入事件的定期更新的出版品,並附上詳細的事後剖析報告。_ + +### 學習智慧型合約安全性的挑戰 {#challenges-for-learning-smart-contract-security} + +- **[優質的 BlockSec CTF](https://github.com/blockthreat/blocksec-ctfs)** - _區塊鏈安全性的實戰演習、挑戰、和[奪旗](https://www.webopedia.com/definitions/ctf-event/amp/)競賽和解決方案評論精選清單。_ + +- **[脆弱不堪的去中心化金融](https://www.damnvulnerabledefi.xyz/)** - _學習去中心化金融智慧型合約攻撃性安全防衛的實戰演習,以及培養找出錯誤和審核安全性的技能。_ + +- **[Ethernaut](https://ethernaut.openzeppelin.com/)** - _以 Web3/Solidity 為中心的實戰演習,每一個等級都是一個必須被「駭客破解」的智慧型合約。_ + +- **[HackenProof x HackTheBox](https://app.hackthebox.com/tracks/HackenProof-Track)** - _智慧型合約駭客挑戰,以奇幻冒險為背景。 成功完成挑戰還可以入圍非公開的漏洞懸賞計劃。_ + +### 保護智慧型合約的最佳案例 {#smart-contract-security-best-practices} + +- **[ConsesSys:以太坊智慧型合約安全性最佳案例](https://consensys.github.io/smart-contract-best-practices/)** - _保護以太坊智慧型合約安全性之準則的完整清單。_ + +- **[Nascent:簡單的安全性工具組](https://github.com/nascentxyz/simple-security-toolkit)** - _安全導向的實用智慧型合約開發指南與檢核清單。_ + +- **[Solidity 模式](https://fravoll.github.io/solidity-patterns/)** - _關於智慧型合約程式語言 Solidity 的安全性模型和最佳案例的實用彙總。_ + +- **[Solidity 文件:安全性考量](https://docs.soliditylang.org/en/v0.8.16/security-considerations.html)** - _使用 Solidity 編寫安全智慧型合約的指南。_ + +- **[智慧型合約安全性驗證標準](https://github.com/securing/SCSVS)** - _適用於開發者、架構師、安全性審查者和廠商的標準化智慧型合約安全性 14 點檢查清單。_ + +- **[學習智慧型合約安全與審核](https://updraft.cyfrin.io/courses/security) - _出色的智慧型合約安全與審核課程,為希望提升安全最佳做法並成為安全研究人員的智慧型合約開發人員而設。_ + +### 關於智慧型合約安全性的使用教學 {#tutorials-on-smart-contract-security} + +- [如何編寫安全的智慧型合約](/developers/tutorials/secure-development-workflow/) + +- [如何使用 Slither 來搜尋智慧型合約漏洞](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) + +- [如何使用 Manticore 搜索智慧型合約bug.](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) + +- [智慧型合約安全指南](/developers/tutorials/smart-contract-security-guidelines/) + +- [如何安全整合包含任意代幣的代幣合約](/developers/tutorials/token-integration-checklist/) + +- [Cyfrin Updraft - 智慧型合約安全與審核完整課程](https://updraft.cyfrin.io/courses/security) diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/composability/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/composability/index.md" new file mode 100644 index 00000000000..01b6474d4d9 --- /dev/null +++ "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/composability/index.md" @@ -0,0 +1,76 @@ +--- +title: 智慧型合約的可組合性 +description: +lang: zh-tw +incomplete: true +--- + +## 簡介 {#a-brief-introduction} + +智慧型合約在以太坊上公開,類似於傳統網路世界中的 open API。 你不一定需要編寫自己的智慧型合約才能成為一名去中心化應用的開發者,你只需要知道要怎樣與他們互動即可。 例如,你可以使用已存在的 [Uniswap](https://uniswap.exchange/swap)(一個去中心化的交易所)智慧型合約,來處理你應用程式中的代幣交換邏輯 – 你不需要從新開發一個。 歡迎查看其[v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts)及[v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts)合約。 + +## 甚麼是可組合性? {#what-is-composability} + +可組合性是指組合不同的部件來創造出全新的系統或輸出。 在軟體開發中,可組合性指開發者可以重覆使用現有的軟體組件來構建全新的應用程式。 一個很好理解可組合性的方法是把可組合的元素想像成樂高方塊。 每個樂高方塊可以與另一個樂高方塊組合,允許你通過組合不同的樂高方塊來構建複雜結構。 + +在以太坊,每一個智慧型合約都是樂高方塊 — 你可以使用其他專案的智慧型合約作為你專案的方塊。 這意味著你不需要花費時間來重新發明輪子或是從零開始構建。 + +## 可組合性如何運作? {#how-does-composability-work} + +以太坊上的智慧型合約就如同公開的 APIs,所有人都可以與合約互動或把它整合到 dApps 作為新增的功能。 智慧型合約的可組合性通常遵循三個原則:模塊化、自主性和可發現性。 + +**1. 模塊化**:這是指獨立組件執行特定任務的能力。 在以太坊,每個智慧型合約都有特定的使用案例(如 Uniswap 範例所顯示)。 + +**2. 自主性**:可組合的元件必需要有獨立運作的能力。 每一個在以太坊上的智慧型合約都是自我執行的,且可以在不依賴系統其他部分的情況下運作。 + +**3. 可發現性**:如果外部合約不是公開可用的,開發者就無法調用它或將軟件庫集成到應用程序中。 智慧型合約是被設計成開源的,任何人都可以調用智慧型合約或分叉一個程式庫。 + +## 可組合性的好處 {#benefits-of-composability} + +### 更短的開發週期 {#shorter-development-cycle} + +可組合性減少了開發者在創建[dApps](/dapps/#what-are-dapps)時需要做的工作。 [正如同 Naval Ravikant 所說:](https://twitter.com/naval/status/1444366754650656770)「開源意指所有問題都只需要解決一遍。」 + +如果有一個智慧型合約解決了某個問題,其他開發者便可以重複使用它,所以他們便不必再解決同一個問題。 這樣,開發者可以使用現有的軟件庫並增加額外的功能,以創建新的 dApps。 + +### 更大的創新 {#greater-innovation} + +可組合性鼓勵創新和實驗,因為開發者可以自由地重用、修改、複製或整合開源程式碼以達到所需的效果。 因此,開發團隊可以花費更少時間在基本功能上,且可以分配更多的時間進行新功能的實驗。 + +### 更好的使用者體驗 {#better-user-experience} + +以太坊生態組件之間的互操作性提高了使用者體驗。 當去中心化應用整合外部智慧型合約時,用戶可以獲得更多功能,而在一個分散的生態系統中,應用程式無法通信,功能就會受限。 + +我們將使用套利交易的一個例子來說明互操作性的好處: + +如果一個代幣在`交易所 A `的交易價格高於`交易所 B`,你可以利用價格差異來獲利。 但是,你只可以在有足夠的資金才能完成這筆交易(如:`在交易所 B `買入代幣並在`交易所 A `賣出)。 + +在一個你沒有足夠資金來完成這筆交易的情境下,閃電貸可能是一個理想的選擇。 [閃電貸](/defi/#flash-loans)技術性很高,但它的基本概念是你可以借用資產(不需抵押)並在_一_筆交易內把它歸還。 + +回到我們一開始的例子,一個套利交易者可以借一筆大額的閃電貸,於同一筆交易中從`交易所 B `買入代幣,然後在`交易所 A `賣出,把資金和利息歸返,並把利潤留下。 這個複雜的邏輯需要組合多個智慧型合約的調用,而如果智慧型合約缺乏互操作性,這將是不可能的。 + +## 以太坊裡可組合性的範例 {#composability-in-ethereum} + +### 代幣交換 {#token-swaps} + +如果你正建立一個需要用 ETH 來支付交易的 dApps,通過整合代幣交換邏輯,你可以讓使用者用其他 ERC-20 代幣進行支付。 程式碼會在執行被調用的函數前自動把使用者的代幣轉換成 ETH。 + +### 治理 {#governance} + +為[ DAO ](/dao/)打造定制的治理系統可能既昂貴又耗時。 相反,你可以使用開源的治理工具包,例如[Aragon Client](https://client.aragon.org/),來快速為你的 DAO 啟動一個治理框架。 + +### 身份管理 {#identity-management} + +你可以整合去中心化身份 ( DID ) 工具來管理使用者的身份認證,而不是建立一個定制的身份驗證系統或依賴中心化的服務提供商。 一個例子是[ SpruceID ](https://www.spruceid.com/),這是一個提供「使用以太坊登錄」功能的開源工具包,讓使用者能使用以太坊錢包進行身份驗證。 + +## 相關教程 {#related-tutorials} + +- [開始您的前端研發利用creat-eth-app](/developers/tutorials/kickstart-your-dapp-frontend-development-wth-create-eth-app/)_ -- 一簡介指導您如何使用creat-eth-app來創建帶有熱門智能合約之應用程式._ + +## 衍生閱讀 {#further-reading} + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ + +- [可組合性是創新](https://future.a16z.com/how-composability-unlocks-crypto-and-everything-else/) +- [為甚麼可組合性對 Web3 很重要](https://hackernoon.com/why-composability-matters-for-web3) +- [甚麼是可組合性?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.) diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/formal-verification/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/formal-verification/index.md" new file mode 100644 index 00000000000..36bd3326a5d --- /dev/null +++ "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/formal-verification/index.md" @@ -0,0 +1,283 @@ +--- +title: 智慧合約的形式化驗證 +description: 以太坊智慧合約形式化驗證概述 +lang: zh-tw +--- + +[智能合約](/developers/docs/smart-contracts/) 讓去中心化、去信任、引進新的應用案例與解放用戶的價值變得更可行。 因為智慧合約掌握了大量的價值,對開發者來說安全是最需要被考量的。 + +形式化驗證是增進[合約安全](/developers/docs/smart-contracts/security/)最推薦的方法, 形式化驗證,是一個使用多年的方法,目的是要確保特定的硬體與軟體系統正確性,用[形式化方法](https://www.brookings.edu/techstream/formal-methods-as-a-path-toward-better-cybersecurity/)來規範、設計、驗證程式。 + +當在智慧合約中實現形式化驗證,可以證明合約的商業邏輯符合預設的規範, 相較於其他評估合約程式碼的正確性的方法,形式化驗證更保證了合約功能性上的正確。 + +## 什麼是形式化驗證? {#what-is-formal-verification} + +形式化驗證指的是一個用形式規範評估系統正確性的流程, 簡而言之,形式化驗證讓我們可以檢查一個系統的行為是否滿足一些要求(即,它按我們的想法運作)。 + +對系統(此案例中為智能合約) 所要求的行為採用形式化模型描述,而規範語言支持形式化屬性的建立。 然後,形式化驗證技術可以驗證一個合約的實施符合其規範,並產生合約正確性的數學證明。 當一個合約滿足其規範,被稱為「功能正確」、「設計正確」,或「建構正確」。 + +### 形式化模型是什麼? {#what-is-a-formal-model} + +在電腦科學中, [形式化模型](https://en.wikipedia.org/wiki/Model_of_computation)是指對計算過程的數學描述。 程式抽象成數學函數(方程),模型描述給定輸入時如何計算函數的輸出。 + +形式化模型提供一個抽象層次,可以在該抽象層次上對程式行為的分析進行評估。 有了形式化模型,_形式化規範_得以制定,用來描述所談論模型所需要的屬性。 + +採用不同的技術來建立智能合約模型,以便進行形式化驗證。 例如,有些模型用來推理智能合約的高階行為。 這些模型建立技術在智能合約應用黑盒視圖,把智能合約視為可以接受輸入並按照那些輸入執行計算的系統。 + +高階模型專注在智能合約和外部代理之間的關係,例如外部帳戶(EOAs)、合約帳戶,和區塊鏈環境。 這些模型有助於定義屬性,規定了合約該如何回應某些使用者互動的行為。 + +相反地,其他形式化模型專注在智能合約的低階行為。 雖然高階模型有助於推理一個合約的功能,它們可能無法獲得實施內部運作的細節。 低階模型對程序分析應用了白盒視圖,並仰賴智能合約應用程式較低階表示,例如程序追蹤和[控制流圖](https://en.wikipedia.org/wiki/Control-flow_graph),來推理與該合約執行相關的屬性。 + +低階模型被認爲是理想的,因爲它們代表了以太坊的執行環境 (即[以太坊虛擬機](/developers/docs/evm/)) 中智能合約的實際執行。 低階模型技術對於在智能合約中建立關鍵的安全屬性和檢測潛在漏洞尤其有用。 + +### 什麽是形式化規範? {#what-is-a-formal-specification} + +規範只是特定系統必須滿足的技術要求。 在編程中,規範代表程式執行的總體思路 (即程式應該做什麽)。 + +在智能合約的背景下,形式化規範指的是_屬性_—合約必須滿足的要求的正式描述。 這樣的屬性被描述爲 "不變量",並代表了智能合約執行的邏輯斷言,該斷言在任何情況下都必須為 true,沒有例外。 + +因此,我們可以將形式化規範想做是用正式語言編寫的聲明集合,描述了智能合約的預期執行。 規範涵蓋了合約的屬性,並定義了合約在各種情況下應該如何運作。 形式化驗證的目的是確定智能合約是否遵循這些屬性 (不變量) 以及在執行過程中是否違反這些屬性。 + +形式化規範對於開發智能合約的安全實現至關重要。 無法實現不變量或在執行期間違反其屬性的合約容易出現漏洞,可能會損害功能或導致惡意使用。 + +## 智能合約形式化規範的類型 {#formal-specifications-for-smart-contracts} + +形式規範使程式執行的正確性可以用數學方法推導, 與形式化模型一樣,形式規範可以捕捉合約實現的高階屬性或低階行爲。 + +形式規範是由[程式邏輯](https://en.wikipedia.org/wiki/Logic_programming)的元素推導出,這些元素可以讓程式的屬性做推理, 程式邏輯是有規範的,表達(在數學語言中) 一個預期的行為。 形式化規範可以使用各種程式邏輯來創建,包括[可達性邏輯](https://en.wikipedia.org/wiki/Reachability_problem)、[時間邏輯](https://en.wikipedia.org/wiki/Temporal_logic)以及[霍爾邏輯](https://en.wikipedia.org/wiki/Hoare_logic)。 + +智慧合約的形式規範可大致上被分成**高階**或**低階**規範, 無論規範屬於什麽類別,都必須充分且明確地描述所分析系統的屬性。 + +### 高階規範 {#high-level-specifications} + +顧名思義,告誡規範 (也被稱爲 “模型導向規範”) 描述了程式的高階行爲。 高階規範將智能合約建模為[有限狀態機器](https://en.wikipedia.org/wiki/Finite-state_machine) (FSM),它能夠透過執行操作來轉換屬性,並使用時間邏輯來為 FSM 模型定義形式化屬性。 + +[時間屬性](https://en.wikipedia.org/wiki/Temporal_logic)是「時間限定命題的推理規則(例如,『我 _總是_ 很餓』,或『我_最終_會餓』)」。 當應用於形式化驗證時,時間邏輯用來聲明將系統正確行為建立模型為狀態機的斷言。 具體來說,時間邏輯形容智能合約可以進入的未來狀態,以及它如何在狀態之間轉換。 + +高階規範通常描述智能合約的兩個重要時間屬性:**安全性**以及**活性**。 安全性屬性代表「任何壞事都不會發生」的想法,且通常代表不變性。 安全屬性可以定義常規軟件要求,例如如不發生[死鎖](https://www.techtarget.com/whatis/definition/deadlock)或表達合約的領域特有屬性 (如函數訪問控制的不變量、狀態變量的容許值或代幣轉賬的條件)。 + +以下方安全要求為例,描述了在ERC-20代幣合約中使用`transfer()`或`transferFrom()`:_「一個發送者餘額不能少於要求發送的代幣金額」。_. 這種合約不變量的自然語言描述可以轉化為形式化(數學)規範,以進行嚴格的有效性檢查。 + +活性屬性斷言「好事終將發生」,並涉及合約逐步通過不同狀態的能力。 活性屬性的一個例子是「流動性」,代表一個合約在收到要求時將其餘額轉帳給使用者的能力。 如果該屬性被違反,用戶就無法提取存儲在合約中的資產,就像[ Parity 錢包事件](https://www.cnbc.com/2017/11/08/accidental-bug-may-have-frozen-280-worth-of-ether-on-parity-wallet.html)中發生的那樣。 + +### 低階規範 {#low-level-specifications} + +高階規範以合約的有限狀態模型作為起點,並定義該模型的所需屬性。 相較之下,低階規範(也稱為「面向屬性的規範」)通常將程序(智能合約)建立模型成由數學函數集合組成的系統,並描述這類系統的正確行為。 + +簡單來説,低階規範分析_程式軌跡_並試圖透過這些軌跡定義智能合約的屬性。 軌跡是指改變智能合約狀態的函數執行序列;因此低階規範幫助指定合約内部執行的要求。 + +低階形式化規範可以出具為霍爾式屬性或執行路徑中的不變量。 + +### 霍爾式屬性 {#hoare-style-properties} + +[霍爾邏輯](https://en.wikipedia.org/wiki/Hoare_logic)提供了一套形式化規定,用於推理包括智能合約等程序的正確性。 霍爾式屬性使用霍爾三元組 {_P_}_c_{_Q_}表示,其中_c_ 是一個程序,且 _P_和_Q_為_c_(即程序)的狀態預測,正式描述分別為_前置條件_和_後置條件_。 + +前置條件是描述函數正確執行所需條件的預測;用戶在合約中的調用必須滿足該要求。 後置條件為形容函數正確執行時所建立條件的謂語;使用者可以期待在調用函數後該條件為真。 在霍爾邏輯中,_不變量_是執行函數所保留的謂詞(即,它不改變)。 + +霍爾式規範可以保證_部分正確性_ 或_完全正確性_。 如果前置條件在函數執行之前為 true,則合約函數的實現為 “部分正確”,如果執行終止,則後置條件也爲 true。 如果前置條件在函數執行之前為 true,就會獲得完全正確性證明,執行被保證終止且實際終止時,後置條件為 true。 + +獲得完全正確性的證明很難,因為一些執行在終止前可能會延遲,或根本不會終止。 也就是説,由於以太坊的燃料機制防止無限程式循環 (執行只在會成功或者出現 'out-of-gas' 錯誤時終止),執行是否終止可以説是一個有爭議的問題。 + +使用霍爾邏輯創建的智能合約規範將具有前置條件、後置條件以及定義合約中函數和循環執行的不變量。 前置條件通常包括函數錯誤輸入的可能性,而後置條件描述對此類輸入的預期響應 (例如,抛出一個特定異常)。 用這種方式,霍爾式屬性可以很有效地確保合約實施的正確性。 + +許多形式化驗證架構使用霍爾式規範來證明函數的語義正確性。 也可以透過使用 Solidity 中的 `require` 和 `assert` 聲明,直接向合約程式碼添加霍爾式屬性 (作爲斷言)。 + +`require` 聲明表達一個前置條件或者不變量,並通常用於驗證用戶輸入,而 `assert` 捕捉一個安全必要的後置條件。 例如,可以使用 `require` 作爲前置條件檢查調用賬戶的身份,來實現函數的正確存取控制 (安全屬性的一個示例)。 相似地,透過使用 `assert` 在函數執行后確認合約的狀態,可以防止違反合約中狀態變量允許值的不變量 (例如,流通中的代幣總數)。 + +### 追蹤層級屬性 {#trace-level-properties} + +基於軌跡的規範描述了在不同狀態之間轉換合約的操作以及這些操作之間的關係。 如前所述,軌跡是以特定方式改變合約狀態的操作的序列。 + +該方法依賴於智能合約模型作爲狀態轉換系統,具有一些預定義屬性 (由狀態變量描述) 以及一系列預定義轉換 (由合約函數描述)。 此外,[控制流程圖](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/) (CFG),即程式執行流程的圖形化表示,常常被用於描述合約的操作語義。 在這裡,每個軌跡代表控制流圖上的一條路徑。 + +追蹤層級規範主要用來推理智能合約中內部執行的模式。 透過建立追蹤層級規範,我們斷言一個智能合約的容許執行路徑(即,狀態轉換)。 使用類似於符號執行的技術,我們可以正式驗證執行永遠不會追隨未在形式化模型中定義的路徑。 + +我們使用一個已具有一些公開可訪問函數的[去中心化自治組織](/dao/) 的合約作為範例,以介紹追蹤層級屬性。 在這裡,我們推測去中心化自治合約允許使用者執行以下操作: + +- 存入資金 + +- 存入資金後對提案進行投票 + +- 如果沒有對提案進行投票,能夠要求退款 + +軌跡級屬性的示例可以是_“沒有存入資金的用戶無法對提案進行投票”_或_“沒有對提案進行投票的用戶應該始終能夠要求退款“_。 這兩個屬性斷言優先執行順序(存入資金_之前_不能進行投票,以及對提案進行投票_之後_不能進行退款)。 + +## 智能合約形式化驗證的技術 {#formal-verification-techniques} + +### 模型檢查 {#model-checking} + +模型檢查是演算法對照規格書檢查智能合約的形式模型的形式驗證技術。 在模型檢查中,智能合約通常表示爲狀態轉換系統,而允許合約狀態的屬性使用時間邏輯來定義。 + +模型檢查需要創建系統的抽象數學表示 (即合約) 並使用根植於[命題邏輯](https://www.baeldung.com/cs/propositional-logic)的公式來表示該系統的屬性。 這樣簡化了模型檢查演算法的工作,也就是說證明數學模型符合特定邏輯公式。 + +在形式驗證裡模型檢查主要用來評價記述隨時間經過合約的行為的暫時特性。 智能合約的暫時特性包括我們之前說明的 _安全性_ 和 _活躍性_。 + +例如,與存取控制相關的安全屬性 (例如,_只有合約的擁有者能夠調用 `selfdestruct` _) 可以使用形式化邏輯來編寫。 之後,模型檢查演算法可以驗證是否合約符合這個形式規格。 + +模型檢查使用狀態空間探索,其中涉及構造智能合約所有可能的狀態,並試圖找出導致違反屬性的可達狀態。 然而,這可能會導致無限的狀態數量 (被稱爲 ”狀態爆炸問題“),因此,模型檢查器依賴抽象技術來使高效分析智能合約變得可能。 + +### 定理證明 {#theorem-proving} + +定理證明是以數學方式推論程式,包括智能合約,的正確性的方法。 這需要將合約系統的模型和規格書轉換成數學公式 (邏輯陳述)。 + +定理證明的目的是驗證這些陳述之間在邏輯上是等價的 ”邏輯等價性“ (也被稱爲 ”邏輯雙向蘊含“) 是兩個聲明之間的一種關係,例如,第一個聲明_只有在_第二個聲明為 true 時才為 true。 + +這個關於合約模型和特性的陳述之間的必要關係 (邏輯等價性) 可公式化成可證明的陳述 (又稱理論)。 使用形式的推論系統,自動定理證明器可以驗證定理的有效性。 換言之 自動定理證明器可以決定性的證明合約模型確切地符合規格書。 + +模型檢查將合約建模為具有有限狀態的轉換系統,而定理證明可以處理無限狀態系統的分析。 然而,這意味著自動定理證明器無法永遠知道邏輯問題是否為 “可判定的”。 + +因此,在推導正確性證明時,定理證明器常常需要人類協助。 定理證明中對人力的使用使其比完全自動化的模型檢查更加昂貴。 + +### 符號執行 {#symbolic-execution} + +符號執行是一種透過使用_符號值_ (如 `x > 5`) 而不是_具體值_ (如 `x == 5`) 執行函數來分析智能合約的方法。 作爲一種形式化驗證技術,符號執行用於形式化推理智能合約程式碼中的軌跡級屬性。 + +符號執行將執行軌跡表示爲針對符號輸入值的數學公式,也稱爲_路徑預測_。 [SMT 求解器](https://en.wikipedia.org/wiki/Satisfiability_modulo_theories)用於檢查路徑是否爲 “可滿足的” (即存在能夠滿足該公式的值)。 假如路徑是可滿足的,SMT 解答器將針對這路徑產生一個觸發執行的具體數值。 + +假設一個智能合約函數接受輸入值是`uint` 的數值 (`x`),當 `x` 大於 `5` 而且小於 `10` 則回覆解答。 使用正常測試程序尋找觸發錯誤的 `x` 值需要運行數十個測試用例 (甚至更多),並且不保證實際找到觸發錯誤的輸入。 + +相反,符號執行工具會使用符號值來執行函數: `X > 5 ∧ X < 10` (例如,`x` 比 5 大且 `x` 比 10 小)。 相關的路徑預測 `x = X > 5 ∧ X < 10` 將提供給 SMT 解答器來解答。 如果一個特定值滿足公式 `x = X > 5 ∧ X < 10`,SMT 求解器將計算它 - 例如,求解器可能會產生 `7` 作爲 `x` 的值。 + +因爲符號執行依賴於程式的輸入,而探索所有可達狀態的一系列輸入可能是無限的,所以這仍然是一種測試形式。 然而,如示例所示,符號執行在尋找觸發違反屬性的輸入方面比常規測試更高效。 + +此外,符號執行與其他隨機生成函數輸入的基於屬性的技術 (如初略) 相比,產生的誤報更少。 如果錯誤狀態在符號執行期間被觸發,則可以產生觸發該錯誤的具體值並重現該問題。 + +符號執行也可以提供某程度的數學證明的正確性。 仔細思考下面有溢出防護的合約函數範例: + +``` +function safe_add(uint x, uint y) returns(uint z){ + + z = x + y; + require(z>=x); + require(z>=y); + + return z; +``` + +導致整數溢位的執行軌跡需要滿足以下公式: `z = x + y AND (z >= x) 和 (z=>y) AND (z < x OR z < y)`。這種公式不太可能有解,因此它提供了函數 `safe_add` 永不溢出的數學證明。 + +### 為什麼要對智能合約使用形式驗證? {#benefits-of-formal-verification} + +#### 可靠性的需求 {#need-for-reliability} + +形式化驗證被用於評估安全關鍵系統的正確性,這些系統的失敗將產生災難性後果,例如死亡、受傷或金融崩潰。 智能合約是控制巨額價值的高價值應用程序,設計中的簡單錯誤可能會導致[用戶遭受無法挽回的損失](https://www.freecodecamp.org/news/a-hacker-stole-31m-of-ether-how-it-happened-and-what-it-means-for-ethereum-9e5dc29e33ce/amp/)。 然而,在合約部署之前進行形式化驗證,則可以增加其在區塊鏈上如期運行的保證。 + +可靠性是任何智能合約都渴求的一種品質,尤其是因爲在以太坊虛擬機 (EVM) 上部署的程式碼通常是不可更改的。 合約推出後的升級並不是容易達成的,形式驗證成為為確保合約的可靠性的需求下不可缺少的必需品。 形式化驗證能夠檢測棘手的問題,比如整數下溢和上溢、可重入性和糟糕的燃料優化,審核者和測試者可能會漏掉這些問題。 + +#### 功能正確性的証明 {#prove-functional-correctness} + +程式測試是證明智能合約符合某些要求最常見的方法。 這包括用預期合約會碰到的樣本資料來執行合約,並且分析合約的行為。 假如對樣本資料合約傳回預期的結果,則開發者對合約的正確性做了客觀性的證明。 + +然而,這種方法無法證明測試資料之外的輸入值正確執行。 因此,測試合約可以幫助檢測漏洞 (例如,如果程式碼路徑在執行期間無法返回期望的結果),但**這無法完全證明沒有漏洞**。 + +相反,形式化驗證可以正式證明合約能在無限執行範圍内滿足要求,而_無需_運行該合約。 這需要創建一個形式化規範來準確描述正確的合約行爲和開發合約系統的形式化(數學) 模型。 但我們卻可以透過形式化證明來檢查合約模型與其預期行為的一致性。 + +透過形式化驗證,驗證合約商業邏輯是否滿足要求的問題就成爲一個能夠被證明或解決的數學命題。 通過形式化證明一個命題,我們可以在有限步驟內驗證無限數量的測試案例, 以這種方式,形式化證明在證明合約相對於規範的功能正確性方面具有更好的前景。 + +#### 理想的驗證對象 {#ideal-verification-targets} + +驗證對象是指要進行形式化驗證的系統, 這種驗證方式最適合用於 "嵌入式系統" (作為更大系統一部分的小型、簡單應用程式), 而目前常用的測試則使用具體值(例如“如果用戶嘗試提取 5 以太幣會怎樣?”)。 + +智能合約在某種程度上滿足了這兩個要求, 例如,以太坊合約的規模較小,這使它們適合進行形式化驗證, 此外,EVM 遵循簡單的規則,這使得為 EVM 上執行驗證程序指定變得更加容易。 + +### 更短的開發周期 {#faster-development-cycle} + +形式化驗證技術,例如模型檢查和符號執行,通常比常規的智能合約程式碼分析更高效 (在測試和審核期間的表現)。 這是因為形式化驗證依賴符號值來測試斷言 (如果使用者嘗試提取 _n_ 以太幣會怎樣?), 而目前常用的測試則使用具體值 ("如果使用者嘗試提取 5 以太幣會怎樣?")。 + +符號輸入變量可以涵蓋多個類別的具體值,因此形式化驗證能夠確保在更短時間内涵蓋更多程式碼。 再有效率的使用下,形式化驗證可以加速開發流程 + +並且透過減少代價高昂的設計錯誤來改進去中心化應用程式(dapps) 的構建過程。 升級合約 (如果可能) 來修復漏洞需要大量重寫程式碼庫並花費更多努力在開發上。 形式化驗證可以檢測許多合約實現中可能會被測試者和審核者漏掉的錯誤,並提供充足的機會在合約部署之前修復這些問題。 + +## 形式化驗證的缺點 {#drawbacks-of-formal-verification} + +### 人力成本 {#cost-of-manual-labor} + +形式化驗證,尤其是需要人爲引導證明器來推導出正確性證明的半自動驗證,需要花費大量人力。 創建形式規範是一項複雜的過程,要求很高的技能水平, + +這些因素 (人力與技能) 使形式化驗證相比評估合約正確性的常規方法 (例如測試和審核) 要求更高且更加昂貴。 然而,鑑於智能合約的錯誤成本,這樣的成本仍然是可以接受的。 + +### 形式化驗證錯誤的負面效應 {#false-negatives} + +形式化驗證只能檢查智能合約的執行是否與形式規範相匹配, 因此,確保規範符合智能合約的預期行為非常重要。 + +如果規範編寫得很糟糕,違反屬性 (將導致執行漏洞) 就無法透過形式化驗證審核來檢測。 在這種情況下,開發者可能會錯誤的假設合約是沒有漏洞的。 + +### 效能問題 {#performance-issues} + +形式化驗證會遇到一些效能問題。 例如,在模型檢查和符號檢查期間分別遇到狀態和路徑爆炸問題,就可能會影響驗證程序。 另外,形式化驗證經常在其底層使用 SMT 求解器和其他約束求解器,而這些求解器依賴於計算密集型流程。 + +此外,程式驗證器并不總是能夠確認屬性 (由邏輯公式描述) 是否可以被滿足 ("[可判定性問題](https://en.wikipedia.org/wiki/Decision_problem)"),因爲程序可能永遠不會終止。 因此,即使規範良好,有些屬性也可能無法被證明。 + +## 以太坊智能合約的形式化驗證工具 {#formal-verification-tools} + +### 用於制定形式化規範的規範語言 {#specification-languages} + +**Act**: _*Act allows specification of storage updates, pre/post conditions and contract invariants. Its tool suite also has proof backends able to prove many properties via Coq, SMT solvers, or hevm.** + +- [GitHub](https://github.com/ethereum/act) +- [文檔](https://ethereum.github.io/act/) + +**Scribble** - _*Scribble 將 Scribble 規範語言中的程式碼注解轉換爲檢查規範的具體斷言。** + +- [文件](https://docs.scribble.codes/) + +**Dafny** - _*Dafny is a verification-ready programming language that relies on high-level annotations to reason about and prove correctness of code.** + +- [GitHub](https://github.com/dafny-lang/dafny) + +### Program verifiers for checking correctness {#program-verifiers} + +**Certora Prover** - _Certora Prover is an automatic formal verification tool for checking code correctness in smart contracts. 規範由 CVL (Certora 驗證語言) 編寫,使用靜態分析和約束求解的結合來檢測屬性違反。_ + +- [網站](https://www.certora.com/) +- [文檔](https://docs.certora.com/en/latest/index.html) + +**Solidity SMTChecker** - _* Solidity 的 SMTChecker 是一個基於 SMT (可滿足模型理論) 和 Horn 求解的内置模型檢查器。 它在編譯期間確認合約的源程式碼是否符合規範,並靜態檢查安全屬性的違反。** + +- [GitHub](https://github.com/ethereum/solidity) + +**solc-verify** - _*solc-verify 是 Solidity 編譯器的一個擴展版本,可以使用注解和模組化程式驗證在 Solidity 程式碼上執行自動形式化驗證** + +- [GitHub](https://github.com/SRI-CSL/solidity) + +**KEVM** - _*KEVM is a formal semantics of the Ethereum Virtual Machine (EVM) written in the K framework. KEVM is executable and can prove certain property-related assertions using reachability logic.** + +- [GitHub](https://github.com/runtimeverification/evm-semantics) +- [文檔](https://jellopaper.org/) + +### 定理證明的邏輯框架 {#theorem-provers} + +**Isabelle** - _Isabelle/HOL 是一個證明助手,允許使用形式化語言來表示數學公式,並提供驗證明這些公式的工具。 主要應用於數學證明的形式化,特別是形式化驗證,它涉及證明電腦硬體或軟體的正確性以及證明電腦語言和協議的屬性。_ + +- [GitHub](https://github.com/isabelle-prover) +- [文檔](https://isabelle.in.tum.de/documentation.html) + +**Coq** - _Coq 是一個互動式定理證明器,允許你使用定理來定義程式並以互動方式生成經機器檢查的正確性證明。_ + +- [GitHub](https://github.com/coq/coq) +- [文檔](https://coq.github.io/doc/v8.13/refman/index.html) + +### 用於偵測智能合約中易受攻擊模式的基於符號執行的工具 {#symbolic-execution-tools} + +**Manticore** - _*A tool for analyzing EVM bytecode analysis tool based on symbolic execution*.* + +- [GitHub](https://github.com/trailofbits/manticore) +- [文檔](https://github.com/trailofbits/manticore/wiki) + +**hevm** - _*hevm is a symbolic execution engine and equivalence checker for EVM bytecode.** + +- [GitHub](https://github.com/dapphub/dapptools/tree/master/src/hevm) + +**Mythril** - _A symbolic execution tool for detecting vulnerabilities in Ethereum smart contracts_ + +- [GitHub](https://github.com/ConsenSys/mythril-classic) +- [文檔](https://mythril-classic.readthedocs.io/en/develop/) + +## 延伸閱讀 {#further-reading} + +- [How Formal Verification of Smart Contracts Works](https://runtimeverification.com/blog/how-formal-verification-of-smart-contracts-works/) +- [How Formal Verification Can Ensure Flawless Smart Contracts](https://media.consensys.net/how-formal-verification-can-ensure-flawless-smart-contracts-cbda8ad99bd1) +- [An Overview of Formal Verification Projects in the Ethereum Ecosystem](https://github.com/leonardoalt/ethereum_formal_verification_overview) +- [End-to-End Formal Verification of Ethereum 2.0 Deposit Smart Contract](https://runtimeverification.com/blog/end-to-end-formal-verification-of-ethereum-2-0-deposit-smart-contract/) +- [Formally Verifying The World's Most Popular Smart Contract](https://www.zellic.io/blog/formal-verification-weth) +- [SMTChecker and Formal Verification](https://docs.soliditylang.org/en/v0.8.15/smtchecker.html) diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/testing/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/testing/index.md" new file mode 100644 index 00000000000..463e64f7a55 --- /dev/null +++ "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/testing/index.md" @@ -0,0 +1,308 @@ +--- +title: 測試智慧型合約 +description: 測試以太坊智能合約之技術與考量概觀 +lang: zh-tw +--- + +開放的區塊鏈如以太坊具不可篡改性,讓已經部署的智能合約難以更改。 確實存在一些可以“間接地升級”[智能合約的升級模式](/developers/docs/smart-contracts/upgrading/),但這些的開發難度較高,也會涉及社群的共識。 並且,升級只能在一個錯誤被發現_後_進行修正。如果一個攻擊者先發現了一個漏洞,智能合約就有被遭到濫用或攻擊的可能。 + +基於這些原因,在智能合約被[部署](/developers/docs/smart-contracts/deploying/)到以太坊主網前進行測試,是保障[安全性](/developers/docs/smart-contracts/security/)的最基本要求。 有許多不同測試和評估程式碼安全性的技術與方法,你所選用的取決於你的需求。 而一個由不同工具和方法組成的測試框架,會是找出在合約程式碼中,從輕微到重大安全性漏洞的理想選擇。 + +## 先決條件 {#prerequisites} + +本頁會解釋如何在部署到以太坊前進行智能合約的測試, 假定你已經大致了解[智能合約](/developers/docs/smart-contracts/)。 + +## 何謂智能合約測試? {#what-is-smart-contract-testing} + +智能合約測試是指確認智能合約程式碼會如預期般執行的測試過程。 撰寫測試能有助於檢查特定的智能合約是否可靠、可用及安全。 + +雖然測試方法各異,但通常都是採樣一智能合約可能處理到的所有資料的一小部分,來執行該智能合約的功能。 如果合約對採樣資料產出如預期的結果,那我們就認定它的運作正常。 多數的測試工具都提供資源來幫助撰寫與執行[測試範例](https://en.m.wikipedia.org/wiki/Test_case),以檢查合約的執行是不是預期的結果。 + +### 測試智能合約的重要性 {#importance-of-testing-smart-contracts} + +由於智能合約通常掌控高財物價值的金融資產,即使是微小的錯誤仍可以造成[使用者的巨大損失](https://rekt.news/leaderboard/)。 嚴密的測試則可以幫助我們即早發現合約程式碼裡的漏洞與問題,並在他們被部署到主網前進行修復。 + +雖然在發現漏洞後進行合約的升級是可行的,但合約的升級實作複雜,如果實作不正確也可能[造成更多問題](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/)。 而合約的升級看似打破了區塊鏈資料的不可篡改性,也讓使用者需要接受額外的信任假設。 因此,我們反而應制定完整的測試計畫,來降低智能合約的安全性風險、避免需要在智能合約部署後進行複雜的合約升級。 + +## 智能合約測試方法論 {#methods-for-testing-smart-contracts} + +測試以太坊智能合約的方法分為兩大類:**自動化測試**及**手動測試**。 自動化測試與手動測試各有優缺,而兩者可以併用成一個完整測試合約的方案。 + +### 自動化測試 {#automated-testing} + +自動化測試使用工具來自動偵測智能合約程式碼在執行時的錯誤, 而其好處在於使用[腳本](https://www.techtarget.com/whatis/definition/script?amp=1)來評估合約的功能。 寫成腳本的測試可以被安排重複地執行來減少人為參與,讓自動化測試比手動測試更為有效率。 + +自動化測試在以下情境特別有用:測試範例重複性高且費時、難以以手動測試、容易有人為的錯誤,或牽涉到關鍵的合約功能。 而其限制則是可能會遺漏一些漏洞,並可能產生[偽陽性、虛報答案的結果](https://www.contrastsecurity.com/glossary/false-positive)。 因此,將自動化測試與手動測試並用較為理想。 + +### 手動測試 {#manual-testing} + +手動測試需要真人的輔助,一一執行每一個測試範例來分析智能合約的正確性。 這和自動化測試不同,沒辦法同時在一份合約上去執行多個獨立的測試,並得到一個顯示所有成功與失敗測試的報告。 + +手動測試可以由一個人,依照預寫好的測試計畫,來執行不同的測試情境。 也可以由許多人、或是幾組人,在一段時間內,來與一份合約互動、進行測試。 測試者會把測試出來的實際結果,和預期行為相比較,並把兩者的不同回報為漏洞。 + +有效的手動測試需要大量的資源(技術、時間、金錢與人力),而且有可能因為人為的疏失,而漏掉了測試時的一些錯誤。 但手動測試仍然是有幫助的,舉例來說,一個真人測試員(如審計員)或許可以用直覺來找出一些極端情境,但自動化測試工具則不一定有辦法。 + +## 智能合約的自動化測試 {#automated-testing-for-smart-contracts} + +### 單元測試 {#unit-testing-for-smart-contracts} + +單元測試分別測試每個函式並確認每一個子件正常的運作 好的單元測試應該要簡單並且快速的運作,並在有錯誤的時候讓人清楚的知道問題發生在哪。 + +單元測試在韓式執行完後確認回傳值正確且合約的存儲正確更新時很有用 此外,在更改合約的程式碼之後運行單元測試可以很好的確認新的邏輯並沒有造成新的錯誤 以下是一些如何運行有效單元測試的指南 + +#### 智能合約單元測試指南 {#unit-testing-guidelines} + +##### 1. 了解你的智能合約的商務邏輯以及工作流程 + +在撰寫單元測試之前,知道智能合約提供什麼樣的功能以及使用者要如何存取並使用這些函式很有幫助。 這對於進行 [happy path tests](https://en.m.wikipedia.org/wiki/Happy_path) 時特別有用,這個測試是為了確定合約中的函式是否對有效的用戶輸入回傳正確的值。 我們會用這個 (簡略的) [拍賣合約](https://docs.soliditylang.org/en/v0.8.17/solidity-by-example.html?highlight=Auction%20contract#simple-open-auction)作為例子來解釋這個概念。 + +``` +constructor( + uint biddingTime, + address payable beneficiaryAddress + ) { + beneficiary = beneficiaryAddress; + auctionEndTime = block.timestamp + biddingTime; + } + +function bid() external payable { + + if (block.timestamp > auctionEndTime) + revert AuctionAlreadyEnded(); + + if (msg.value <= highestBid) + revert BidNotHighEnough(highestBid); + + if (highestBid != 0) { + pendingReturns[highestBidder] += highestBid; + } + highestBidder = msg.sender; + highestBid = msg.value; + emit HighestBidIncreased(msg.sender, msg.value); + } + + function withdraw() external returns (bool) { + uint amount = pendingReturns[msg.sender]; + if (amount > 0) { + pendingReturns[msg.sender] = 0; + + if (!payable(msg.sender).send(amount)) { + pendingReturns[msg.sender] = amount; + return false; + } + } + return true; + } + +function auctionEnd() external { + if (block.timestamp < auctionEndTime) + revert AuctionNotYetEnded(); + if (ended) + revert AuctionEndAlreadyCalled(); + + ended = true; + emit AuctionEnded(highestBidder, highestBid); + + beneficiary.transfer(highestBid); + } +} +``` + +這是一個設計來在可出價期間接收出價的簡單拍賣合約 當`highestBid` 增加時,上一個最高出價者收回他們的錢;一旦拍賣期間結束,`beneficiary` 呼叫合約以取得他的錢。 + +對於這樣的合約,單元測試會涵蓋各種使用者在與合約互動時會呼叫的函式。 舉個例子,單元測試可能測試使勇者是否能在出價期間進行出價 (也就是成功呼叫 `bid()`),或者是測試使用者是否可以出一個比現在的 `highestBid` 更高的價格。 + +了解合約的工作流程也能對撰寫測試執行結果符合要求的單元測試有所幫助。 舉例來說,這個拍賣合約指明使用者不能在拍賣結束後出價(也就是當 `auctionEndTime` 小於`block.timestamp`的時候) 因此,開發者可能會執行一個確認在拍賣結束後 (`auctionEndTime` > `block.timestamp`時) 呼叫`bid()`是否能成功的單元測試 + +##### 2. 評估所有關於合約執行的假設 + +記錄任何關於合約執行的假設並編寫單元測試來測試其安全性是有可能的。 除了提供針對執行的保護,測試斷言還迫使你考慮可能破壞智能合約安全糢型的操作。 一個有用的技巧是不僅要進行“正向測試”,還要編寫負面測試,檢查函數對錯誤的輸入是否會失敗。 + +許多單元測試框架允許你創建斷言 - 陳述能做和不能做的事情的聲明 - 並運行測試來查看這些斷言在執行中是否成立。 開發前面描述的拍賣合約的開發者可以在運行異常測試之前對其行爲做出以下斷言: + +- 用戶無法在拍賣未開始或結束時出價。 + +- 如果出價低於可接受的門檻,拍賣合約就會還原。 + +- 未能贏得競標的用戶將獲得其資金的退款 + +**注**: 測試假設的另一種方式是編寫在合約中觸發[函數修飾符](https://docs.soliditylang.org/en/v0.8.16/contracts.html#function-modifiers)的測試,特別是 `require`、`assert` 和 `if…else` 聲明。 + +##### 3 計算程式覆蓋率 + +[程式碼覆蓋率](https://en.m.wikipedia.org/wiki/Code_coverage)是一種測試指標,用於追蹤在測試過程中執行的程式碼分支、行數和語句數量。 測試應該涵蓋足夠多的程式碼,否則你可能會遭遇 “漏報”,即合約通過了所有測試,但漏洞依然存在于代碼中。 但是,透過涵蓋足夠多的代碼,就可以確保智能合約中的所有聲明/函數都經過充分的正確性測試。 + +##### 4 使用精心開發的測試框架 + +在合約運行單元測試時使用的工具品質至關重要。 理想的測試框架應該是定期維護的;提供實用功能的 (如記錄和報告功能);並且必須經過其他開發者的廣泛使用與審查。 + +Solidity 智能合約的單元測試框架有不同的語言 (大多數為 JavaScript、Python 和 Rust)。 請在下方指南查看如何使用不同的測試框架運行單元測試: + +- **[使用 Brownie 運行單元測試](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** +- **[使用 Foundry 運行單元測試](https://book.getfoundry.sh/forge/writing-tests)** +- **[使用 Waffle 運行單元測試](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)** +- **[使用 Remix 運行單元測試](https://remix-ide.readthedocs.io/en/latest/unittesting.html#write-tests)** +- **[使用 Ape 運行單元測試](https://docs.apeworx.io/ape/stable/userguides/testing.html)** +- **[使用 Hardhat 運行單元測試](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** +- **[使用 Wake 運行單元測試](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** + +### 整合測試 {#integration-testing-for-smart-contracts} + +單元測試對合約函數進行單獨除錯,而整合測試將智能合約的部件作爲一個整體進行評估。 整合測試可以檢測源自跨合約調用或同一個智能合約中不同函數閒互動的問題。 例如,整合測試能夠幫助檢查如[繼承](https://docs.soliditylang.org/en/v0.8.12/contracts.html#inheritance)和依賴性注入之類的功能是否正常運作。 + +如果你的合約採用模組化結構或在執行期間與其他鏈上合約互動,整合測試就很實用。 運行整合測試的一個方法是在一個特定高度[分叉區塊鏈](/glossary/#fork) (使用類似 [Forge](https://book.getfoundry.sh/forge/fork-testing) 或 [Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks) 的工具),並模擬在你的合約與部署的合約之間的互動。 + +分叉的區塊鏈將與主網的行為類似,其帳戶具有關聯的狀態和餘額。 但它只作爲一個沙盒本地開發環境運行,這意味著你不需要用真實的以太幣來交易,你的更改也不會影響真實的以太坊協議。 + +### 基於特性的測試 {#property-based-testing-for-smart-contracts} + +基於屬性的測試是一種檢查智能合約是否滿足一些定義的屬性的過程。 屬性是關於合約行為的斷言,預期其行為在不同的場景中始終保持為真。智能合約屬性的一個例子可以是「合約中的算術運算永不溢出或下溢」。 + +**靜態分析**和**動態分析**是執行基於屬性的測試的常見技術,並且兩者都可以驗證程式 (在這裏為智能合約) 的程式碼是否滿足某些預定義屬性。 一些基於屬性的測試工具自帶一些關於預期合約屬性的預定義規則,並根據這些規則檢查程式碼,而其他工具則允許你為智能合約創建自訂屬性。 + +#### 靜態分析 {#static-analysis} + +靜態分析器將智能合約的源程式碼作爲輸入,並輸出聲明合約是否滿足屬性的結果。 與動態分析不同,靜態分析不涉及執行合約來分析其正確性。 相反,靜態分析器會推理智能合約在執行期間可能選擇的所有路徑 (例如,透過檢視源程式碼的結構來確定合約操作在運行時的意義)。 + +[Linting](https://www.perforce.com/blog/qac/what-lint-code-and-why-linting-important) 和[靜態測試](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis)是合約執行靜態分析的常見方法。 兩者都需要對合約執行的低階表示進行分析,例如由編譯器輸出的[抽象語法樹](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree)和[控制流程圖](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/)。 + +在多數情況下,靜態分析器對安全問題很有用,例如不安全構造,語法錯誤或違反合約程式碼中的編程標準。 然而,靜態分析器被認爲在檢測深層漏洞方面通常不健全,並可能會產生過多的誤報。 + +#### 動態分析 {#dynamic-analysis} + +動態分析為智能合約函數生成符號輸入 (例如,在[符號執行](https://en.m.wikipedia.org/wiki/Symbolic_execution)中) 或具體輸入 (例如,在[初略](https://owasp.org/www-community/Fuzzing)中) 來查看是否有任何執行軌跡違反特定屬性。 此類基於屬性的測試與單元測試不同,其測試用例涵蓋了多種場景,並且有一個程式處理測試用例的生成。 + +[模糊測試](https://halborn.com/what-is-fuzz-testing-fuzzing/)是一種用於驗證智能合約中任意屬性的動態分析技術的範例。 模糊測試工具使用隨機或畸形的變化來呼叫目標合約中的函數,以對預先定義的輸入值進行測試。 如果智能合約輸入錯誤狀態 (即當斷言失敗時),問題就會被標記,並在報告中產生將執行推動到脆弱路徑的輸入。 + +初略對於評估智能合約輸入驗證機制很有用,因爲對意外輸入的不正確處理可能會導致意外執行並產生危險的影響。 這種基於屬性的測試形式可能非常理想,原因有多種: + +1. **編寫涵蓋許多場景的測試用例是很難的。**屬性測試只需要你定義一個行爲以及用於測試該行爲的一系列數據 - 程式會根據定義的屬性自動生成測試用例。 + +2. **你的測試套件或許無法充分涵蓋程式中所有可能的路徑。**即便有 100% 的涵蓋率,也可能會錯過邊緣案例。 + +3. **單元測試證明合約正確執行採樣數據,但採樣以外的輸入是否正確執行仍然未知。**屬性測試使用給定輸入值的多個變體來執行目標合約,以此找出導致斷言失敗的執行軌跡。 因此,屬性測試為合約在廣泛的輸入資料類別下正確執行提供了更多的保證。 + +### 對智能合約運行基於屬性的測試的準則 {#running-property-based-tests} + +運行基於屬性的測試通常從定義一個屬性 (例如,[整數溢位](https://github.com/ConsenSys/mythril/wiki/Integer-Overflow)的缺乏) 或者你希望在智能合約中驗證的屬性集合開始。 你可能還需要定義一個數值範圍,使程式能夠在編寫屬性測試時在該範圍内為交易輸入生成數據。 + +配置正確後,屬性測試工具將使用隨機產生的輸入來執行你的智能合約函數。 如果有任何斷言違規情況,你應該獲得一份報告,其中包含違反正在評估的屬性的具體輸入資料。 請參閱下面的指南,了解如何使用不同的工具開始執行基於屬性的測試: + +- **[使用 Slither 的智能合約靜態分析](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither#slither)** +- **[使用 Wake 的智能合約靜態分析](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** +- **[使用 Brownie 進行基於屬性的測試](https://eth-brownie.readthedocs.io/en/stable/tests-hypothesis-property.html)** +- **[使用 Foundry 的初略合約](https://book.getfoundry.sh/forge/fuzz-testing)** +- **[使用 Echidna 的初略合約](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna#echidna-tutorial)** +- **[使用 Wake 的初略合約](https://ackeeblockchain.com/wake/docs/latest/testing-framework/fuzzing/)** +- **[使用 Manticore 的智能合約符號執行](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore#manticore-tutorial)** +- **[使用 Mythril 的智能合約符號執行](https://mythril-classic.readthedocs.io/en/master/tutorial.html)** + +## 手動測試智慧合約 {#manual-testing-for-smart-contracts} + +在開發後期經常會進行智慧型合約手動測試,而這類測試通常在執行自動化測試之後進行。 此類測試將智能合約作爲完全整合的產品進行評估,以此檢查其是否符合技術要求中的規範。 + +### 在本地區塊鏈測試合約 {#testing-on-local-blockchain} + +儘管在本地開發環境中執行的自動化測試能夠提供有用的除錯信息,你仍然會想知道你的合約在生產環境中的運行情況。 然而,部署到以太坊主鏈需要燃料費 - 更不用説如果你的智能合約仍有漏洞,你或你的用戶可能會損失真正的金錢。 + +在本地區塊鏈 (也被稱爲[開發者網路](/developers/docs/development-networks/)) 上測試你的合約,是在主網上進行測試的建議替代方案。 本地區塊鏈是在你的電腦上本地運行的以太坊區塊鏈的副本,它模擬了以太坊執行層的行爲。 因此,你可以編程交易與合約進行交互,而不會產生大量開銷。 + +在本地的區塊鏈上跑合約可以有助於完成手動的整合測試, [智能合約具有高度可組合性](/developers/docs/smart-contracts/composability/),允許你整合現有的協議 - 但你仍然需要確保這種複雜的鏈上整合產生正確的結果。 + +[有關開發網路的更多資訊。](/developers/docs/development-networks/) + +### 在測試網上測試合約 {#testing-contracts-on-testnets} + +測試網路或測試網的運作方式與以太坊主網完全相同,唯一的區別在於它使用沒有現實價值的以太幣 (ETH)。 在[測試網](/developers/docs/networks/#ethereum-testnets)上部署你的合約意味著任何人都可以與之互動(例如,透過去中心化應用程式的前端),而無需承擔資金風險。 + +這種手動測試形式對於從使用者角度評估應用程式的端到端流程非常有用。 在這裡,測試人員還可以進行試運行,並報告與合約的業務邏輯和整體功能有關的任何問題。 + +在本地區塊鏈上進行測試後,部署到測試網是理想的選擇,因為測試網更接近以太坊虛擬機的行為。 因此,許多智能合約通常會將去中心化應用程式部署到測試網上來在現實條件下評估智能合約的運作。 + +[更多以太坊測試網相關資訊。](/developers/docs/development-networks/#public-beacon-testchains) + +## 測試與形式化驗證 {#testing-vs-formal-verification} + +儘管測試幫助確認合約對特定數據輸入返回預期結果,但對於測試期間未使用的輸入,它無法完全證明相同的結果。 因此,測試智能合約無法保證 “函數正確性” (即無法確保程式對於_所有_輸入值都按照要求運作)。 + +形式化驗證是一種透過檢查程式的形式化模型是否符合形式化規範來評估軟體正確性的方法。 形式化模型是程式的抽象數學表示,而形式化規範定義程式的屬性 (即程式執行的邏輯斷言)。 + +因爲屬性由數學術語編寫,它能夠使用邏輯推理規則來驗證系統的形式化 (數學) 模型是否滿足規範。 因此,形式化驗證工具被稱為能夠提供系統正確性的「數學證明」。 + +與測試不同,形式化驗證可用於驗證智能合約執行是否滿足_所有_執行的形式化規範 (即沒有漏洞) 而無需使用採樣數據。 這不僅減少了運行數十個單元測試所花費的時間,而且在發現隱藏漏洞方面也更有效。 話雖如此,形式化驗證技術在實施難度和實用性上存在一定的變化程度。 + +[更多關於智能合約的形式化驗證的資訊。](/developers/docs/smart-contracts/formal-verification) + +## 測試與審核以及漏洞懸賞計劃 {#testing-vs-audits-bug-bounties} + +如上所述,嚴格的測試很難保證合約中沒有錯誤;形式化驗證方法可以提供更有力的正確性保證,但目前仍難以使用並且需要大量成本。 + +儘管如此,你仍可透過獨立的程式碼審查來進一步增加捕捉合約漏洞的可能性。 [智慧型合約審核](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/)和[漏洞懸賞](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)是讓他人分析你的合約的兩種方式。 + +審查由具有在智能合約中發現安全漏洞和開發不良實踐案例經驗的審查人員進行。 審核通常包括對整個程式碼庫進行測試(可能包括形式化驗證)以及手動審查。 + +相反,漏洞懸賞計劃通常包括向在智能合約中發現漏洞並向開發者報告的個人 (通常被描述爲[白帽駭客](https://en.wikipedia.org/wiki/White_hat_(computer_security))) 提供經濟獎勵。 漏洞獎勵類似於審查,因為它涉及要求其他人幫助發現智能合約中的缺陷。 + +主要的區別是漏洞懸賞計劃對更廣泛的開發者/駭客開放,並吸引了廣泛的擁有獨特技能與經驗的道德駭客和獨立安全專家。 與主要依賴可能擁有有限或狹窄專業知識的團隊的智能合約審查相比,這可能是一個優勢。 + +## 測試道具與資料圖書庫 {#testing-tools-and-libraries} + +### 單元測試工具 {#unit-testing-tools} + +- **[solidity-coverage](https://github.com/sc-forks/solidity-coverage)** - _Solidity 合約程式覆蓋工具_ + +- **[Waffle](https://ethereum-waffle.readthedocs.io/en/latest/)** - _用於高級智能合約開發和測試的框架(基於ethers.js)_。 + +- **[Remix 測試](https://github.com/ethereum/remix-project/tree/master/libs/remix-tests)** - _用來測試Solidity 智能合約的工具。 在 Remix IDE 的“Solidity Unit Testing”插件下工作,該插件用於編寫和運行合約的測試案例。 _ + +- **[OpenZeppelin Test Helpers](https://github.com/OpenZeppelin/openzeppelin-test-helpers)** - _用於以太坊智能合約測試的斷言庫。 讓你的合約運作自如正常!_ + +- **[Brownie 單元測試框架](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** - _Brownie 利用 Pytest,即一個功能豐富的測試框架,使你能夠用最少的程式碼編寫小型測試,並且對於大型項目擴展良好,具有高度可擴展性。_ + +- **[Foundry 測試](https://github.com/foundry-rs/foundry/tree/master/forge)** - _Foundry 提供了 Forge,即一個快速且靈活的以太坊測試框架,能夠執行簡單的單元測試、燃料優化檢查,以及合約初略。_ + +- **[Hardhat 測試](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** - _基於ethers.js、Mocha 和Chai 的智慧合約測試框架。 _ + +- **[ApeWorx](https://docs.apeworx.io/ape/stable/userguides/testing.html)** - _基於Python 的智慧合約開發與測試框架,針對太坊虛擬機。 _ + +- **[Wake](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** - _基於 Python 的框架,為單元測試和初略提供了强大的除錯功能和跨鏈測試支持,利用 pytest 和 Anvil 實現最佳的用戶體驗和性能。_ + +### 基於屬性測試的工具 {#property-based-testing-tools} + +#### 靜態分析工具 {#static-analysis-tools} + +- **[Slither](https://github.com/crytic/slither)** - _基於 Python 的 Solidity 靜態分析框架,能夠為智能合約尋找漏洞、增强程式碼理解,以及編寫自訂分析。_ + +- **[Ethlint](https://ethlint.readthedocs.io/en/latest/)** - _用於執行Solidity 智能合約程式語言的風格和安全最佳實踐的Linter。 _ + +- **[Cyfrin Aderyn](https://cyfrin.io/tools/aderyn)** - _基於Rust 的靜態分析器,專為Web3 智慧合約安全和開發而設計。 _ + +- **[Wake](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** - _基於 Python 的靜態分析框架,具有漏洞和代碼品質偵察器、提取有用信息的印刷機,以及對編寫自訂子模組的支持。_ + +#### 動態分析工具 {#dynamic-analysis-tools} + +- **[Echidna](https://github.com/crytic/echidna/)** - _透過基於屬性的測試來檢測智能合約漏洞的快速合約模糊測試工具。 _ + +- **[Diligence Fuzzing](https://consensys.net/diligence/fuzzing/)** - _自動化模糊測試工具,用於偵測智慧合約程式碼中的屬性違規行為。 _ + +- **[Manticore](https://manticore.readthedocs.io/en/latest/index.html)** - _用於分析以太坊虛擬機器(EVM) 字節碼的動態符號執行框架。 _ + +- **[Mythril](https://github.com/ConsenSys/mythril-classic)** - _以太坊虛擬機位元組碼分析工具,能夠使用污染分析、一致性分析和控制流檢查來檢測合約漏洞。_ + +- **[Diligence Scribble](https://consensys.net/diligence/scribble/)** - _Scribble 是一種規範語言和運行時檢查工具,允許你使用屬性注解智能合約,從而使你能夠使用如 Diligence 初略和 MythX 的工具來自動測試合約。_ + +## 相關教學 {#related-tutorials} + +- [不同測試產品的概述和比較](/developers/tutorials/guide-to-smart-contract-security-tools/) \_ +- [如何使用 Echidna測試智慧型合約.](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/) +- [如何使用 Manticore 搜索智慧型合約bug.](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) +- [如何使用 Slither 來搜尋智慧型合約漏洞](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) +- [如何測試及模仿複製 Solidity 合約.](/developers/tutorials/how-to-mock-solidity-contracts-for-testing/) +- [如何使用 Foundry 在 Solidity 中執行單元測試](https://www.rareskills.io/post/foundry-testing-solidity) + +## 了解更多 {#further-reading} + +- [測試以太坊智慧型合約的深入指南](https://iamdefinitelyahuman.medium.com/an-in-depth-guide-to-testing-ethereum-smart-contracts-2e41b2770297) +- [如何測試以太坊智慧型合約](https://betterprogramming.pub/how-to-test-ethereum-smart-contracts-35abc8fa199d) +- [MolochDAO 的開發者單元測試指南](https://github.com/MolochVentures/moloch/tree/4e786db8a4aa3158287e0935dcbc7b1e43416e38/test#moloch-testing-guide) +- [如何像專家一樣測試智能合約](https://forum.openzeppelin.com/t/test-smart-contracts-like-a-rockstar/1001) diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/upgrading/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/upgrading/index.md" new file mode 100644 index 00000000000..8023c2aaa17 --- /dev/null +++ "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/upgrading/index.md" @@ -0,0 +1,168 @@ +--- +title: 升級智慧型合約 +description: 以太坊智慧合約升級模式概述 +lang: zh-tw +--- + +以太坊上的智慧型合約是在以太坊虛擬機器 (EVM) 中運行的自動執行程式。 這些程式在設計上是不可變的,一旦部署合約,就可以防止對業務邏輯進行任何更新。 + +當永恆不變在去信任化、去中心化和合約安全中是不可或缺的,卻可能在一些案例中變成缺點, 舉例來說,永恆不變的程式碼讓開發者無法修復有缺陷的合約。 + +越來越多改進合約的研究,引入了幾種升級合約的模式, 這些升級的模式讓開發者把商業邏輯拆出來放在不同的和合約使得合約可升級(在保持不可變的前提之下)。 + +## 先決條件 {#prerequisites} + +需要對[智慧合約](/developers/docs/smart-contracts/)、[智慧合約剖析](/developers/docs/smart-contracts/anatomy/)和[以泰坊虛擬機(EVM)](/developers/docs/evm/)有一定程度的了解, 此文還假設讀者了解智慧合約的程式設計。 + +## 什麼是智慧合約升級? {#what-is-a-smart-contract-upgrade} + +合約升級代表在更換商業邏輯合約的同時保留合約狀態, 在智慧合約相關的文章中,要分清楚可升級與易變性是兩回事, + +你依然無法改變已經部署在以太坊網路上的合約位置, 但是可以改變與使用者互動的合約所執行程式。 + +可以由以下幾個方法做到: + +1. 建立多個版本的合約以及從舊合約遷移狀態(例如:資料)到新的實作合約 + +2. 將商業邏輯與狀態分別存放在不同合約 + +3. 用代理的模式呼叫方法,從不可變的合約委派到可以修改的邏輯合約 + +4. 建立一個不變的主合約作為介面,並依靠其他多個有彈性的衛星合約執行特定功能 + +5. 使用鑽石模式從代理合約委派函式呼叫到邏輯合約 + +### 升級機制 #1: 合約遷移 {#contract-migration} + +合約遷移是建立在版本控制上—想法來自在相同的軟體上建立和管理唯一的狀態 合約轉移需要部署現有合約的新實例,並將存儲和餘額轉移到該新合約。 + +新部署的合約存儲為空,允許你從原有合約恢復資料並為其寫入新的實作。 此後,你將需要將所有與舊合約有互動的合約更新新的地址 + +合約遷移的最後一步是說服用戶轉去使用新合約。 新的合約版本將保留用戶餘額和地址,從而保持不變性。 如果是基於代幣的合約,你還需要聯繫交易所放棄舊合約並使用新合約。 + +合約遷徙是一個相對簡單且安全的合約升級方式,不會影響到使用者的互動, 手動遷徙使用者的儲存空間和餘額到新的合約是非常花時間且需要高gas成本, + +[更多關於合約遷徙。](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) + +### 升級機制#2: 資料分離 {#data-separation} + +其他升級合約的方式為:將“商業邏輯”與“資料儲存”分開到不同的合約 這代表使用者與邏輯合約互動的同時資料是儲存在“資料儲存合約”。 + +邏輯合約包含當使用者與應用程式互動時執行的程式碼, 以及資料儲存合約地址與資料合約互動來取得與新增資料。 + +同時,儲存合約保存與智慧合約相關的狀態,例如使用者餘額和地址。 請注意,儲存合約歸邏輯合約所有,並在部署時使用邏輯合約的地址作配置。 這可以防止未經授權的合約呼叫儲存合約或更新其資料。 + +首先,儲存合約是永久的—但是你可以換掉邏輯合約,將邏輯合約指向新的實作, 這樣可以換掉在EVM上執行的程式,同時原封不動的保有儲存空間以及餘額。 + +使用升級方法需要更新邏輯合約地址到儲存合約上, 同時需要在新的邏輯合約上設定儲存合約的地址,理由稍後說明。 + +資料分離模式可以說是相較於資料遷移更簡單的實作方法 然而,你將必須管理多個合約並實作複雜的授權方案,以此保護智慧合約不受惡意升級。 + +### 升級機制#3: 代理模式 {#proxy-patterns} + +代理模式同時使用資料分離來確保商業邏輯與資料在不同合約, 然而,在代理模式下,儲存合約(或稱代理)在執行程式時呼叫邏輯合約, 這是一個相反的資料分離模式,在這裡的邏輯合約稱為儲存合約。 + +代理模式的流程: + +1. 使用者與儲存資料的代理合約互動,但這個合約上沒有但這個合約上沒有商業邏輯 + +2. 代理合約存儲邏輯合約的地址,並使用 `delegatecall` 函數將所有函數呼叫委派給邏輯合約 (擁有商業邏輯的合約) + +3. 在所有的呼叫轉給邏輯合約後,從邏輯合約回傳的資料會被擷取與回傳給使用者 + +用代理模式需要了解** delegatecall**方法, 簡單來講,`delegatecall` 是允許合約調用另一個合約的操作碼,而實際的程式碼執行發生在呼叫合約的情境下。 在代理模式中使用 `delegatecall` 的含義是,代理合約讀取和寫入其存儲空間並執行存儲在邏輯合約中的邏輯,就像呼叫一個内部函數一樣。 + +根據 [Solidity 文件](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries): + +> _存在一個訊息呼叫的特殊變數,稱爲 **delegatecall**,該變數與訊息呼叫相同,除了目標地址中的程式碼是在呼叫合約的情境下執行,以及 `msg.sende` 和 `msg.value` 不會改變它們的值。__這意味著合約可以在運行時從一個不同地址動態載入程式碼。 儲存空間、目前的地址和餘額仍然是指呼叫的合約,只有程式碼是來自被呼叫的地址。

+> +> 代理合約知道使用者呼叫方法時是呼叫`delegatecall`,因為有內建`fallback`函數。 在撰寫Solidity時,在呼叫不到相符的方法時[預設函式](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function)會被觸發。 +> +> 要使代理模式正常運作,需要編寫指定代理合約應該如何處理其不支持函數的預設函式。 在這種情況下,代理的預設函式作為進入delegatecall和讓使用者的請求導到目前的邏輯合約。 +> +> 代理合約預設是不變的,但是邏輯合約可以更新成新的商業邏輯, 執行升級就是在更改代理合約中所使用的邏輯合約地址, +> +> 將代理合約指向新的邏輯合約,當使用者呼叫代理合約時程式就會執行就會改變, 讓我們在升級合約邏輯時,不用詢問使用者要不要與新的合約互動。 +> +> 代理模式是一種升級智慧合約的熱門方法,因爲其消除了與合約遷移相關的困難。 然而,代理合約使用起來更加複雜,使用不當時可能帶來重大缺陷,例如[函數選擇器崩潰](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357)。 +> +> [更多關於代理模式](https://blog.openzeppelin.com/proxy-patterns/) +> +> ### 升級機制#4: 策略模式 {#strategy-pattern} +> +> 該技術受到[策略模式](https://en.wikipedia.org/wiki/Strategy_pattern)的影響,這種模式鼓勵建立與其他程式連結來實現特定功能的軟體。 在以太坊上使用策略模式開發意指建立一個呼叫其他合約方法的合約。 +> +> 在這個模式下,主要的合約包含邏輯合約,但與其他合約(衛星合約)介接來執行特定方法, 主合約儲存了各衛星合約的地址,可以在不同的衛星合約實作之間切換, +> +> 可以建立一個新的衛星合約並在主合約上設定新的地址, 讓你可以更換_策略<0>合約(例如:實作新的合約)

+> +> 儘管與先前討論的代理模式類似,策略模式在主要合約上有所不同,該合約具有商業邏輯,與用戶互動。 使用這個模式提供合約一個有限度、不會影響到主要功能的改動機會。 +> +> 缺點是這種模式只適合小幅度的升級, 同時,當主合約受到波及(例如:被駭)時,你無法使用這種升級方法。 +> +> ### 升級機制 #5: 鑽石模式 {#diamond-pattern} +> +> 最時模式被視為改良版的代理模式, 鑽石模式與代理模式不同的是鑽石代理合約可以委派不只一個邏輯合約。 +> +> 在鑽石模式中的邏輯合約被稱為_切面_, 為了使鑽石模式發揮作用,需要在代理合約中建立對應,將[函數選擇器](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector)對應到不同切面的地址。 +> +> 當使用者呼叫方法時,代理合約會找的負責的執行函數的切面, 因此` delegatecall`(使用預設函數)和重導到適合的邏輯合約, +> +> 鑽石升級模式,有幾個優於傳同代理模式的好處: +> +> 1. 不用更換掉所有的程式碼,只需要做部分升級, 使用代理模式升級,即便是只要做少部分升級,仍需要建立整份新的邏輯合約 +> +> 2. 所有智慧合約 (包括代理模式中使用的邏輯合約) 都有 24KB 的大小限制,這對於需要更多函數的複雜合約可能是一個限制。 鑽石模式藉由分散到函數到多個邏輯合約,簡單的解決了這個問題 +> +> 3. 代理模式採用了包羅萬象的權限管理方法, 一個有升級權限的實體可以置換_整個_合約 但鑽石模式支持模組化權限方法,你能夠限制實體升級智慧合約中的特定函數。 +> +> [更多關於鑽石模式](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w) +> +> ## 升級智慧合約的利弊 {#pros-and-cons-of-upgrading-smart-contracts} +> +> + +| 優勢 | 劣勢 | +| ------------------------------------ | -------------------------------------- | +| 智慧合約升級使得已經部署過的合約可以簡單的修復漏洞 | 升級智慧合約讓程式碼的永恆性消失,會連帶影響到去中心化與安全 | +| 開發者可以使用邏輯合約新增功能到去中心化應用程式上 | 使用者必須相信開發者不會任意的修改程式碼 | +| 智慧合約升級可以增進終端使用者的安全性,因為漏洞可以被快速修復 | 在智慧合約中編寫升級功能增加了另一層複雜性和出現重大缺陷的可能性。 | +| 合約升級給了開發者更多的空間去嘗試不同的功能並不斷地推進dApps的發展 | 升級智慧合約的機會可能會促使開發者在開發時未經充分檢查研究就快速發佈項目 | +| | 智慧合約的不安全存取控制和中心化可能會使惡意行爲者更容易執行未經授權的升級。 | + + +## 升級合約的注意事項 {#considerations-for-upgrading-smart-contracts} + +1. 使用安全的存取控制/授權機制來避免未經授權的智慧合約升級,尤其是在使用代理模式、策略模式或資料分離時。 例如,限制升級方法的權限,只有合約的所有者可以呼叫升級方法 + +2. 升級合約是一個複雜的行動,需要高度的謹慎避免引入漏洞 + +3. 透過去中心化的方法升級實作,減少信任假設 可能的策略包括使用[多重簽名錢包合約](/developers/docs/smart-contracts/#multisig)來控制升級,或要求[去中心化自治組織的成員](/dao/)投票批准升級。 + +4. 注意升級合約的相關花費, 例如,在合約遷移期間從原有合約複製狀態 (如用戶餘額) 到新合約可能會需要不止一筆交易,這意味著更多燃料費。 + +5. 考慮實作**時間鎖**來保護使用者, 時間鎖代表,可以延遲升級對於系統的改變, 時間鎖定可以與多重簽名治理系統相結合來控制升級: 如果一個提議的行爲達到了所需的批准門檻,它還需要等到預定義的延遲期過去之後才會執行。 + +如果使用者不同意未來更新的計劃(例如:邏輯合約升級或新的費用模型),時間鎖給予使用者一些可以退出系統的時間, 沒有時間鎖,使用者必須相信開發者不會在未提前通知的情況下,在合約上進行任意的變更, 缺點是,時間鎖限制了快速修漏洞的能力。 + +## 資源 {#resources} + +**OpenZeppelin 升級外掛 - _一系列部署與保障安全升級合約的工具_** + +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-upgrades) +- [文件](https://docs.openzeppelin.com/upgrades) + +## 教學 {#tutorials} + +- [升級你的智慧合約 | YouTube 使用教學](https://www.youtube.com/watch?v=bdXJmWajZRY) - Patrick Collins +- [以太坊智慧合約遷移教學](https://medium.com/coinmonks/ethereum-smart-contract-migration-13f6f12539bd)by Austin Griffith +- [使用UUPS代理模式升級合約](https://blog.logrocket.com/author/praneshas/)by Pranesh A.S +- [Web3使用教學:使用OpenZeppelin寫一個可升級的智慧合約(代理)](https://dev.to/yakult/tutorial-write-upgradeable-smart-contract-proxy-contract-with-openzeppelin-1916)by fangjun.eth + +## 了解更多 {#further-reading} + +- [The State of Smart Contract Upgrades](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/) by Santiago Palladino +- [多種升級Solidity合約的方法](https://cryptomarketpool.com/multiple-ways-to-upgrade-a-solidity-smart-contract/) - Crypto Market Pool blog +- [學習:升級智慧合約](https://docs.openzeppelin.com/learn/upgrading-smart-contracts)- OpenZeppelin Docs +- [代理模式對於Solidity合約升級能力: Transparent vs UUPS Proxies ](https://mirror.xyz/0xB38709B8198d147cc9Ff9C133838a044d78B064B/M7oTptQkBGXxox-tk9VJjL66E1V8BUF0GF79MMK4YG0)by Naveen Sahu +- [鑽石升級如何運作](https://dev.to/mudgen/how-diamond-upgrades-work-417j)by Nick Mudge diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/verifying/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/verifying/index.md" new file mode 100644 index 00000000000..b3aa7dc839f --- /dev/null +++ "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/verifying/index.md" @@ -0,0 +1,107 @@ +--- +title: 驗證智慧型合約 +description: 以太坊智能合約源程式碼驗證簡介 +lang: zh-tw +--- + +[智能合約](/developers/docs/smart-contracts/)被設計為「不需信任」,意味著使用者在與合約互動前不需要相信第三方(如開發者和公司)。 作為實現不需信任的必要條件,用戶和其他開發者必須能夠驗證智能合約的源程式碼。 源程式碼驗證可確保用戶和開發者所發佈的合約代碼,和在以太坊區塊鏈上運行的合約地址的代碼相同。 + +區分「源程式碼驗證」和「[形式驗證](/developers/docs/smart-contracts/formal-verification/)」是很重要的。 源程式碼驗證(將在下面詳細解釋)指的是驗證給定由高級語言(例如 Solidity)編寫的智能合約源程式碼,是否被編譯為在合約地址執行的相同位元組碼。 而形式驗證則描述了驗證智能合約的正確性,這意味著合約按預期運行。 雖然需要依情境而定,但合約驗證通常指的是源程式碼驗證。 + +## 甚麼是源程式碼驗證? {#what-is-source-code-verification} + +在[Ethereum 虛擬機 (EVM)](/developers/docs/evm/)部署智能合約前,開發者會將合約的源程式碼([用 Solidity ](/developers/docs/smart-contracts/languages/)或其他高階語言編寫的指令)[編譯](/developers/docs/smart-contracts/compiling/)為位元組碼。 由於 EVM 無法解讀高階指令,把源程式碼編譯為位元組碼(即低階機器指令)是在 EVM 執行合約邏輯的必需步驟。 + +源程式碼驗證是將智能合約的源程式碼與合約創建時使用的編譯位元組碼進行比較,以檢測任何差異。 驗證智能合約很重要,因為宣傳的合約代碼可能與在區塊鏈上運行的程式碼有所不同。 + +經過驗證的智能合約讓所有人可以通過其所編寫的高階語言來研究合約的功能,而不必閱讀機器碼。 函式,值,通常還有變數名稱和註解都會與編譯和部署時的原始源程式碼相同。 這使閱讀程式碼更為容易。 源程式碼驗證還提供了程式碼文檔,讓終端用戶了解智能合約的設計目的。 + +### 什麼是完全驗證? {#full-verification} + +源程式碼中有部分內容不會影響到編譯完成的位元組碼,例如註解和變數名稱。 這意味著,即使兩份源程式碼使用不同的變數名稱和註解,也能驗證相同的合約。 這樣一來,惡意行為者可以在源程式碼中添加欺騙性的註解或給予誤導性的變數名稱,並使用與原始源程式碼不同的程式碼來驗證合約。 + +可以通過在位元組碼中附加額外數據來避免這種情況,這些數據作為源程式碼準確性的_加密保證_以及編譯信息的_指紋_。 所需的信息可以在[ Solidity 的合約元數據](https://docs.soliditylang.org/en/v0.8.15/metadata.html)中找到,並將該文件的雜湊值附加到合約的位元組碼中。 你可以在[元數據遊樂場](https://playground.sourcify.dev)中看到它的實際應用。 + +The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. + +This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/)"** (also "perfect verification"). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. + +## Why is source code verification important? {#importance-of-source-code-verification} + +### Trustlessness {#trustlessness} + +Trustlessness is arguably the biggest premise for smart contracts and [decentralized applications (dapps)](/developers/docs/dapps/). Smart contracts are “immutable” and cannot be altered; a contract will only execute the business logic defined in the code at the time of deployment. This means developers and enterprises cannot tamper with a contract's code after deploying on Ethereum. + +For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. + +Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code matches the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change a contract's business logic (i.e., by changing the bytecode) before deploying it on the blockchain. + +Source code verification tools provide guarantees that a smart contract’s source code files matches the assembly code. The result is a trustless ecosystem, where users don’t blindly trust third parties and instead verify code before depositing funds into a contract. + +### 使用者安全 {#user-safety} + +With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. The problem is that unscrupulous developers can deceive users by inserting malicious code in a smart contract. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety that would go undetected. + +Publishing a smart contract's source code files makes it easier for those interested, such as auditors, to assess the contract for potential attack vectors. With multiple parties independently verifying a smart contract, users have stronger guarantees of its security. + +## How to verify source code for Ethereum smart contracts {#source-code-verification-for-ethereum-smart-contracts} + +[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. + +![A diagram showing showing smart contract source code verification](./source-code-verification.png) + +Verifying a smart contract basically involves the following steps: + +1. Input the source files and compilation settings to a compiler. + +2. Compiler outputs the bytecode of the contract + +3. Get the bytecode of the deployed contract at a given address + +4. Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. + +5. Additionally, if the metadata hashes at the end of the bytecode match, it will be a full match. + +Note that this is a simplistic description of verification and there are many exceptions that would not work with this such as having [immutable variables](https://docs.sourcify.dev/docs/immutables/). + +## Source code verification tools {#source-code-verification-tools} + +The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. + +### Etherscan {#etherscan} + +Although mostly known as an [Ethereum blockchain explorer](/developers/docs/data-and-analytics/block-explorers/), Etherscan also offers a [source code verification service](https://etherscan.io/verifyContract) for smart contract developers and users. + +Etherscan allows you to recompile contract bytecode from the original data payload (source code, library address, compiler settings, contract address, etc.) If the recompiled bytecode is associated with the bytecode (and constructor parameters) of the on-chain contract, then [the contract is verified](https://info.etherscan.com/types-of-contract-verification/). + +Once verified, your contract’s source code receives a "Verified" label and is published on Etherscan for others to audit. It also gets added to the [Verified Contracts](https://etherscan.io/contractsVerified/) section—a repository of smart contracts with verified source codes. + +Etherscan is the most used tool for verifying contracts. However, Etherscan's contract verification has a drawback: it fails to compare the **metadata hash** of the on-chain bytecode and recompiled bytecode. Therefore the matches in Etherscan are partial matches. + +[有關在 Etherscan 上驗證合約的更多資訊](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327)。 + +### Sourcify {#sourcify} + +[Sourcify](https://sourcify.dev/#/verifier) 是另一個用於驗證開源和去中心化合約的工具。 它不是區塊瀏覽器,並只會驗證[不同的基於以太坊虛擬機的網路](https://docs.sourcify.dev/docs/chains)上的合約。 它充當其他工具在其之上構建的公共基礎設施,旨在使用元資料檔案中的[應用程式二階位介面](/developers/docs/smart-contracts/compiling/#web-applications)和 [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) 註釋來實現更人性化的合約互動。 + +跟 Etherscan 不同,Sourcify 支援與元資料雜​​湊的完全匹配。 The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. + +Additionally, one can also retrieve the source code files over IPFS, as IPFS hashes of these files are also found in the metadata. A contract can be verified by providing the metadata file and source files over its API or the [UI](https://sourcify.dev/#/verifier), or using the plugins. Sourcify monitoring tool also listens to contract creations on new blocks and tries to verify the contracts if their metadata and source files are published on IPFS. + +[更多有關 Sourcify 上驗證合約的資訊](https://blog.soliditylang.org/2020/06/25/sourcify-faq/)。 + +### Tenderly {#tenderly} + +The [Tenderly platform](https://tenderly.co/) enables Web3 developers to build, test, monitor, and operate smart contracts. Combining debugging tools with observability and infrastructure building blocks, Tenderly helps developers accelerate smart contract development. To fully enable Tenderly features, developers need to [perform source code verification](https://docs.tenderly.co/monitoring/contract-verification) using several methods. + +私下或公開地驗證合約皆可行。 如果私下驗證,則智慧型合約僅對你(以及專案中的其他成員)可見。 公開驗證合約讓使用 Tenderly 平台的每個人都可見。 + +You can verify your contracts using the [Dashboard](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-a-smart-contract), [Tenderly Hardhat plugin](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-the-tenderly-hardhat-plugin), or [CLI](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-cli). + +When verifying contracts through the Dashboard, you need to import the source file or the metadata file generated by the Solidity compiler, the address/network, and compiler settings. + +Using the Tenderly Hardhat plugin allows for more control over the verification process with less effort, enabling you to choose between automatic (no-code) and manual (code-based) verification. + +## 了解更多 {#further-reading} + +- [驗證合約原始碼](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) diff --git a/public/content/translations/zh-tw/21) Whitepaper/whitepaper/index.md b/public/content/translations/zh-tw/21) Whitepaper/whitepaper/index.md new file mode 100644 index 00000000000..17c5a263eb8 --- /dev/null +++ b/public/content/translations/zh-tw/21) Whitepaper/whitepaper/index.md @@ -0,0 +1,517 @@ +--- +title: 以太坊白皮書 +description: 介紹以太坊的白皮書,於 2013 年以太坊正式啟動之前發表。 +lang: zh-tw +sidebarDepth: 2 +hideEditButton: true +--- + +# 以太坊白皮書 {#ethereum-whitepaper} + +_2015 年專案啟動之前,[以太坊](/what-is-ethereum/)創辦人 Vitalik Buterin 於 2014 年首次發表了這篇介紹性白皮書。 值得一提的是,與許多社群驅動的開源軟體專案一樣,以太坊自最初誕生以來一直在不斷發展。_ + +_雖然已經過去多年,我們仍在維護此白皮書,因為此白皮書仍然可以作為有用的參考資料,並準確地表達以太坊及其願景。 要了解以太坊的最新發展以及協定如何更改,我們推薦你參閱[本指南](/learn/)。_ + +[研究人員和學者如需本白皮書歷史或標準版本 [自2014年12月起],應使用此 PDF。](./whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf) + +## 新一代智慧型合約及去中心化應用程式平台 {#a-next-generation-smart-contract-and-decentralized-application-platform} + +中本聰於 2009 年發明的比特幣常被譽為金錢與貨幣領域的革命性發展,作為第一種數位資產的範例,它沒有擔保或「[內在價值](http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/)」,也沒有中心化發行人及掌控者。 然而,比特幣實驗的另一個可以說更重要的部分是作為分佈式共識工具的底層區塊鏈技術,人們的注意力正迅速開始轉移到比特幣的這個面向。 通常提及的區塊鏈技術的其他應用包括使用區塊鏈上的數位資產來代表自訂貨幣和金融工具(「[彩色幣](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)」)、底層實體裝置的所有權(「[智慧財產](https://en.bitcoin.it/wiki/Smart_Property)」)、網域名稱(「[域名幣](http://namecoin.org)」)等非同質化資產,以及一些更複雜的應用,其中涉及由一段實作任意規則的程式碼(「[智慧型合約](http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/idea.html)」)甚至基於區塊鏈的「[去中心化自治組織](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/)」(DAO) 直接控制的數位資產。 以太坊打算提供一條內建完全成熟、圖靈完備的程式設計語言的區塊鏈,該語言可用於建立可用來編碼任意狀態轉換函式的「合約」,從而讓使用者能夠建立上述任何系統,以及許多其他我們尚未想像到的事務,只需用幾行程式碼編寫邏輯即可。 + +## 比特幣及現有概念簡介 {#introduction-to-bitcoin-and-existing-concepts} + +### 歷史 {#history} + +去中心化數位貨幣的概念以及財產登記等其他應用已經存在了幾十年。 1980 年代和 1990 年代的匿名電子現金協定主要依賴於稱為喬姆盲簽 (Chaumian blinding) 的密碼原語,提供了一種具有高度隱私性的貨幣,但這些協定基本上未能獲得關注,因為它們依賴於中心化仲介。 1998 年,戴偉 (Wei Dai) 的 [B-money](http://www.weidai.com/bmoney.txt) 成為第一個提出透過解决計算難題及去中心化共識來創造貨幣之概念的提案,但該提案未提供關於如何實際實作去中心化共識的細節。 2005 年,哈爾·芬尼 (Hal Finney) 提出了「[可重複使用的工作量證明](https://nakamotoinstitute.org/finney/rpow/)」的概念,這個體系使用 B-money 的概念以及亞當·貝克 (Adam Back) 計算難度大的 Hashcash 難題來創造加密貨幣的概念,但由於依賴可信計算作為後端,再次未能達到理想的效果。 2009 年,中本聰將透過公鑰密碼學管理所有權的成熟原語與用於跟踪貨幣所有者的共識演算法相結合,首次真正意義上實作了去中心化貨幣,被稱為「工作量證明」。 + +工作量證明機制是該領域的一項突破,因為它同時解决了兩個問題。 首先,這項機制提供了一種簡單且比較有效的共識演算法,讓網路中的節點能够全體對比特幣帳本狀態的一組規範更新達成一致。 接著,其提供了一種允許自由進入共識過程的機制,解决了决定誰來影響共識的政治問題,同時防止了女巫攻擊。 該機制透過用經濟參與障礙取代正式參與障礙(例如要求作為唯一實體在特定清單上登記)來實現這一點 - 共識投票過程中單一節點的權重與該節點的算力成正比。 從那時起,又提出了一種稱為_權益證明_的替代方法,節點的權重與其持有的貨幣量成正比,不再與計算資源成正比;這兩種方法相對優點的討論不在本文的討論範圍內,但應該指出的是,這兩種方法都可以用作加密貨幣的支柱。 + +### 比特幣作為狀態轉換系統 {#bitcoin-as-a-state-transition-system} + +![以太坊狀態轉換](./ethereum-state-transition.png) + +從技術角度來看,比特幣等加密貨幣的帳本可以被認為是狀態轉換系統,其中存在一個由所有現有比特幣的所有權狀態組成的「狀態」和一個接受狀態和交易並輸出新狀態(即結果)的「狀態轉換函式」。 例如,在標準銀行系統中,狀態是資產負債表,交易是將 $X 從 A 轉移到 B 的請求,狀態轉換函式將 A 帳戶中的價值減少 $X 美元,並將 B 帳戶中的價值增加 $X 美元。 如果 A 的帳戶最初價值少於 $X 美元,則狀態轉換函式將傳回錯誤。 因此,可以正式定義: + +``` +APPLY(S,TX) -> S' or ERROR +``` + +在上面定義的銀行系統中: + +```js +APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 } +``` + +但是: + +```js +APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR +``` + +比特幣中的「狀態」是所有已鑄造但尚未花費的貨幣(從技術上講,「未花費的交易輸出 (UTXO)」)的集合,每個未花費的交易輸出都有一個面額和一個所有者(由 20 位元組地址定義,該地址本質上是一個加密公鑰[fn1](#notes))。 一筆交易包含一個或多個輸入以及一個或多個輸出,每個輸入包含對現有未花費的交易輸出的引用以及由與所有者地址關聯的私鑰生成的加密簽章,而每個輸出包含要新增到狀態的新未花費的交易輸出。 + +狀態轉換函式 `APPLY(S,TX) -> S'` 可以大致定義如下: + +
    +
  1. + 對於 TX 中的每個輸入: +
      +
    • + 如果引用的未花費的交易輸出不在 S 中,則傳回錯誤。 +
    • +
    • + 如果提供的簽章與未花費的交易輸出的所有者不匹配,則傳回錯誤 +
    • +
    +
  2. +
  3. + 如果所有輸入未花費的交易輸出的面值總和小於所有輸出未花費的交易輸出的面值總和,則傳回錯誤。 +
  4. +
  5. + 傳回 S,並刪除所有輸入未花費的交易輸出以及新增所有輸出未花費的交易輸出。 +
  6. +
+ +第一步的前半部分防止交易傳送者花費不存在的貨幣,第一步的後半部分防止交易傳送者花費其他人的貨幣,而第二步確保價值守恆。 為了將此用於支付,協定如下。 假設 Alice 想傳送 11.7 BTC 給 Bob。 首先,Alice 將尋找她擁有的一組可用的未花費的交易輸出,總計至少為 11.7 BTC。 實際上,Alice 無法剛剛好獲得 11.7 BTC;假設她能得到的最小數是 6+4+2=12。 然後,她使用這三個輸入和兩個輸出來建立一個交易。 第一個輸出將為 11.7 BTC 且以 Bod 的地址作為其所有者,而第二個輸出為餘下的 0.3 BTC「零頭」且所有者為 Alice。 + +### 挖礦 {#mining} + +![以太坊區塊](./ethereum-blocks.png) + +如果我們能夠存取值得信賴的中心化服務,那麼該系統的實作將很簡單;它可以簡單地按照描述進行編碼,使用中心化伺服器的硬碟來追蹤狀態。 然而,透過比特幣,我們試圖構建一個去中心化貨幣系統,因此我們需要將狀態交易系統與共識系統結合起來,以確保每個人都同意交易順序。 比特幣的去中心化共識過程要求網路中的節點不斷嘗試產生稱為「區塊」的交易包。 該網路嘗試大約每十分鐘生成一個區塊,每個區塊包含一個時間戳記、一個隨機數、對前一個區塊的引用(即雜湊值)以及自前一個區塊以來發生的所有交易的清單。 隨著時間的推移,這會建立一個持久的、不斷增長的「區塊鏈」,區塊鏈會不斷更新以代表比特幣帳本的最新狀態。 + +在這個範例中,檢查區塊是否有效的演算法如下: + +1. 確認區塊引用之前一區塊是否存在並有效。 +2. 確認區塊的時間戳記是否大於前一個區塊的時間戳記 [fn2](#notes) 並且在未來的 2 小時內。 +3. 確認區塊上的工作量證明是否有效。 +4. 使 `S[0]` 為前一個區塊末端的狀態。 +5. 假設 `TX` 是區塊的交易清單,其中有 `n` 個交易。 對於 `0...n-1` 中的所有 `i`,設定 `S[i+1] = APPLY(S[i],TX[i])`。如果任何應用程式傳回錯誤,則結束並傳回 false。 +6. 傳回 true,並將 <0>S[n] 註冊為該區塊末端的狀態。 + +本質上,區塊中的每個交易都必須提供一個有效的狀態轉換,即從交易執行之前的規範狀態轉換到某個新狀態。 請注意,狀態不會以任何方式編碼在區塊中;它純粹是驗證節點要記住的抽象,並且只能透過從創世狀態開始並順序應用每個區塊中的每個交易來(安全地)計算任何區塊。 此外,請注意,礦工將交易放入區塊的順序很重要;如果一個區塊中有兩個交易 A 和 B,並且 B 花費了 A 創造的未花費的交易輸出,那麼如果 A 出現在 B 之前,則該區塊將有效,否則無效。 + +上述清單中存在的而在其他系統中沒有的一個有效性條件是對「工作量證明」的要求。 具體的條件是,每個區塊的雙 SHA256 雜湊值(為 256 位元數字)必須小於動態調整的目標,截至撰寫本文時約為 2187。 這樣做的目的是使區塊建立在計算上變得「困難」,從而防止女巫攻擊者為取得利益而重建整個區塊鏈。 由於 SHA256 被設計為完全不可預測的偽隨機函式,因此建立有效區塊的唯一方法只不過是 試錯法,即重複增加隨機數並查看新的雜湊值是否匹配。 + +在目前目標大約為 2187 下,網路必須平均嘗試大致 269 次才能找到有效區塊;一般來說,網路每 2016 個區塊就會重新校準一次目標,因此網路中的某個節點平均每十分鐘就會產生一個新區塊。 為了就此項計算工作補償礦工,每個區塊的礦工都有權包含一筆交易,獎勵曠工 25 BTC。 此外,如果任何交易的輸入總面額高於其輸出,則差額也會作為「交易費」轉給礦工。 順便說一句,這也是比特幣的唯一發行機制;創世狀態根本不包含比特幣。 + +為了更加瞭解挖礦的意義,讓我們先分析當比特幣網路遭惡意攻擊時會發生甚麼情況。 由於比特幣的底層加密技術是安全的,因此攻擊者將攻擊比特幣系統中不受加密技術直接保護的部分:交易順序。 攻擊者之策略十分簡單: + +1. 向商家傳送 100 BTC 以換取某些產品(最好是快速交付的數位商品) +2. 等待產品交付 +3. 產生另一筆交易,將同一 100 BTC 傳送給他自己 +4. 試著讓網路相信他對自己的交易是先發生的。 + +一旦步驟 (1) 發生,幾分鐘後,一些礦工會將交易包含在一個區塊中,例如區塊編號 270000。 大約一小時後,在該區塊之後,鏈上將新增另外五個區塊,其中每個區塊都間接指向該交易,從而「確認」該交易。 此時,商家將接受最終確定的付款並交付產品;由於我們假設這是一種數位商品,因此交付即時完成。 現在,攻擊者建立另一筆交易,將這 100 BTC 傳送給自己。 如果攻擊者只是向全網廣播這一資訊,則交易將不會被處理;礦工將嘗試執行 `APPLY(S,TX)` 並將注意到 `TX` 消耗了不再處於該狀態的未花費的交易輸出。 因此,攻擊者會建立區塊鏈的「分叉」,首先挖掘另一版本的區塊 270000,讓其指向同一父塊 269999,並用新交易取代舊交易。 因為區塊資料不同,這就需要重新進行工作量證明。 此外,攻擊者的新版本區塊 270000 具有不同的雜湊值,因此原始區塊 270001 至 270005 不會「指向」該區塊;因此,原始鏈和攻擊者的新鏈是完全分開的。 規則是,在分叉時,最長的區塊鏈被視為正確的鏈,因此合法礦工將處理 270005 鏈,而攻擊者獨自處理 270000 鏈。 攻擊者為了使其區塊鏈最長,需要擁有比網路其他部分加起來還要多的算力才能偽裝成正確的鏈(因此,被稱為「51% 攻擊」)。 + +### 默克爾樹 {#merkle-trees} + +![比特幣簡單支付驗證](./spv-bitcoin.png) + +_左:只需在默克爾樹中呈現少量節點即可證明分支的有效性。_ + +_右:改變默克爾樹的任何部分的任何嘗試最終都會導致鏈上某個地方的不一致。_ + +比特幣的一個重要的可擴展性特徵是區塊儲存在多層資料結構中。 區塊的「雜湊值」實際上只是區塊頭的雜湊值,區塊頭是一段大約 200 位元組的資料,其中包含時間戳記、隨機數、前一個區塊的雜湊值以及儲存區塊中所有交易的資料結構(稱為默克爾樹)的根雜湊值。 默克爾樹是一種二元樹,包括一組擁有大量葉節點的節點(這些葉節點位於樹底部儲存著底層資料),一組中間節點(其中每個節點都是其兩個子節點的雜湊值),以及一個代表樹的「頂部」的根節點(根節點亦由其兩個子節點的雜湊值組成)。 默克爾樹的用途是允許區塊中的資料分段傳送:節點可以只從一個來源下載區塊頭,從另一個來源下載與它們相關的樹的一小部分,並且仍然可以確認所有資料都正確。 這樣做的原因是雜湊值向上傳播:如果惡意使用者嘗試將虛假交易交換到默克爾樹的底部,則此變更將導致上面的節點發生變化,然後導致該節點上面的節點發生變化,最終改變樹的根,從而改變區塊的雜湊值,導致協定將其註冊為完全不同的區塊(幾乎確定包含無效的工作量證明)。 + +默克爾樹協定可以說對於長期永續性至關重要。 截至 2014 年 4 月,比特幣網路中的「全節點」(儲存和處理每個區塊的全部資料)佔用比特幣網路中約 15 GB 的磁碟空間,並且每月增長超過 1 GB。 目前,這對於某些桌上型電腦是可行的但不適用行動電話,將來只有企業和業餘愛好者才能參與。 一種稱為「簡單支付驗證」(SPV) 的協定允許存在另一類稱為「輕節點」的節點,這種節點下載區塊頭,驗證區塊頭上的工作量證明,並僅下載與其相關的交易的相關「分支」。 這使得輕節點能夠在強力的安全保證下確定任何比特幣交易的狀態及其目前餘額,同時僅下載整個區塊鏈的極一小部分。 + +### 其他區塊鏈應用 {#alternative-blockchain-applications} + +將區塊鏈底層理念應用於其他概念的想法也有著很長的歷史。 2005 年,尼克·薩博 (Nick Szabo) 提出了「利用所有者權限確保財產權」的概念,該文件描述了「複製資料庫技術的新進展」將如何允許基於區塊鏈的系統來儲存誰擁有哪些土地的登記表,建立一個包括宅基地、逆權管有和喬治亞土地稅等概念的複雜架構。 然而,不幸的是,當時沒有有效的複製資料庫系統可用,因此該協定從未在實踐中實作。 然而,2009 年之後,在比特幣的去中心化共識開發出來後,許多其他應用迅速開始出現。 + +- **域名幣** - 建立於 2010 年,[域名幣](https://namecoin.org/)描述為去中心化名稱註冊資料庫最為恰當。 在 Tor、比特幣和 BitMessage 等去中心化協議中,需要某種方式來識別帳戶,以便其他人可以與這些帳戶互動,但在所有現有解決方案中,唯一可用的標識符是偽隨機雜湊值,如 `1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy`。 理想情況下,人們希望能夠擁有具有名稱的帳戶,例如「george」。 但問題是,如果一個人可以建立名為「george」的帳戶,那麼其他人也可以使用相同的流程為自己註冊「george」並冒充他人。 唯一的解決方案是「首先申請」範式,其中第一個註冊者成功,第二個註冊者失敗 - 這個範式非常適合比特幣共識協定。 域名幣是使用這種概念的最早、最成功的名稱註冊系統的實作。 +- **彩色幣** - [彩色幣](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)用作一種協議,讓人們能夠在區塊鏈上建立自己的數位貨幣 - 或者,在重要但瑣碎的情況下,建立數位代幣。 在彩色幣協議中,透過公開為特定的比特幣未花費的交易輸出指定顏色來「發行」一種新貨幣,並且該協議遞迴地將其他未花費的交易輸出的顏色定義為與創建這些未花費的交易輸出之交易所花費的輸入相同的顏色(一些特殊規則適用於混合顏色輸入的情況)。 這讓使用者能夠維護僅包含特定顏色的未花費的交易輸出的錢包,並像普通比特幣一樣傳送未花費的交易輸出,透過區塊鏈回溯以確定他們收到的任何未花費的交易輸出的顏色。 +- **元幣** - 元幣背後的想法是擁有一個基於比特幣的協議,使用比特幣交易來儲存元幣交易,但具有不同的狀態轉換函數 `APPLY'`。 由於元幣協議無法阻止比特幣區塊鏈中出現無效的元幣交易,因此增加了一條規則,即如果 `APPLY'(S,TX)` 傳回錯誤,則協議預設為 `APPLY'(S,TX) = S` 這為建立任意加密貨幣協議提供了一種簡單的機制,可能具有無法在比特幣本身內部實現的先進功能,且開發成本非常低,因為比特幣協議已經處理了挖礦和網路的複雜性。 元幣已被用於實作某些類別的金融合約、名稱註冊和去中心化交易。 + +因此,一般來說,建立共識協議有兩種方法:建立獨立網路以及在比特幣之上建立協議。 前一種方法雖然在域名幣等應用中相當成功,但很難實作;每個單獨的實作都需要啟動一個獨立的區塊鏈,以及建立和測試所有必要的狀態轉換和網路程式碼。 此外,我們預測去中心化共識技術的應用程式集將遵循冪律分布,其中絕大多數應用程式太小而無法保證自己的區塊鏈,並且我們注意到存在大量需要相互互動的去中心化應用程式,特別是去中心化自治組織。 + +另一方面,基於比特幣的方法有缺陷,即它沒有繼承比特幣的簡單支付驗證功能。 簡單支付驗證適用於比特幣,因為它可以使用區塊鏈深度作為有效性的代理;在某種程度上,只要交易的祖先可以追溯到足夠久遠的時間,就可以安全地認為它們是合法狀態的一部分。 另一方面,基於區塊鏈的元幣協議不能迫使區塊鏈排除在其自己的協議中無效的交易。 因此,完全安全的簡單支付驗證元幣協議實作需要向後一致掃描到比特幣區塊鏈的開頭,以確定某些交易是否有效。 目前,基於比特幣的元幣協議的所有「輕型」實作都依賴受信任的伺服器來提供資料,這可以說是一個非常次優的結果,特別是當加密貨幣的主要目的之一是消除信任需求。 + +### 腳本 {#scripting} + +即使沒有任何擴充功能,比特幣協議實際上也構成了弱化版本的「智慧型合約」。 比特幣中的未花費的交易輸出不僅可以由公鑰擁有,還可以由用簡單的基於堆疊的程式語言編寫的更複雜的腳本擁有。 在這個範式中,一筆花費該未花費的交易輸出的交易必須提供滿足腳本的資料。 事實上,即使是基本的公鑰所有權機制也是透過指令碼實作的:腳本將橢圓曲線簽章作為輸入,根據交易和擁有未花費的交易輸出的位址對其進行驗證,並且如果驗證成功則傳回 1,否則傳回 0。 對於各種附加使用案例,還有其他更複雜的腳本。 例如,可以建構一個腳本,要求要驗證的給定三個私鑰中的兩個私鑰的簽章(「多簽」),這是一種對公司帳戶、安全儲蓄帳戶和某些商家託管情況有用的設定。 腳本還可以用於支付計算問題解決方案的賞金,人們甚至可以建構一個腳本,上面寫著「如果你能提供簡單支付驗證證明,證明你向我傳送了該面額的狗狗幣交易,那麼這個比特幣未花費的交易輸出就是你的」,本質上允許去中心化的加密貨幣間的兌換。 + +然而,比特幣中實作的腳本語言有幾個重要限制: + +- **缺乏圖零完整性** - 也就是說,雖然比特幣腳本語言支援很大一部分計算,但它幾乎不支援其他東西。 最主要的問題是缺乏迴圈。 這樣做是為了避免在交易驗證過程中出現無限迴圈;從理論上講,這對腳本程式設計師來說是一個可以克服的障礙,因為任何迴圈都可以透過簡單地使用 if 語句多次重複底層程式碼來模擬,但它確實會導致腳本空間效率非常低。 例如,實作替代的橢圓曲線簽章演算法可能需要 256 次重複乘法輪次,所有輪次都單獨包含在程式碼中。 +- **價值盲** - 未花費的交易輸出腳本無法對可提取金額作精細控制。 例如,預言機合約的一個強大用例是對沖合約,其中 A 和 B 存入了價值 $1000 的比特幣,30 天後,腳本將價值 $1000 的比特幣傳送給 A,其餘的傳送給 B。這需要預言機來確定 1 個比特幣的美元價值,但即便如此,與現有的完全中心化解決方案相比,它在信任和基礎設施要求方面還是一個巨大改進。 然而,由於未花費的交易輸出是全有或全無的,實現這一點的唯一方法是透過非常低效的破解手段,即擁有許多不同面額的未花費的交易輸出(例如,對於每個最多可達 30 的 k,有一個 2k 的未花費的交易輸出)並讓預言機選擇將哪個未花費的交易輸出傳送給 A,將哪個未花費的交易輸出傳送給 B。 +- **缺少狀態** - 未花費的交易輸出要麼是已使用,要麼是未使用;用於保存任何其他內部狀態的多階段合約或腳本是沒有機會出現的。 這會使得難以創建多階段期權合約、去中心化交易報價或兩階段加密承諾協定(為安全計算賞金必需)。 這也意味著未花費的交易輸出只能用於建構簡單的一次性合約,而不是去中心化組織等更複雜的「有狀態」合約,並且讓元協定難以實作。 二元狀態加上價值盲也意味著另一個重要應用(提款限制)是不可能實現的。 +- **區塊鏈盲** - 未花費的交易輸出看不到區塊鏈的資料,例如隨機數、時間戳記和上一個區塊的雜湊值。 由於該腳本語言無法透過隨機性來創造可能的價值,因此它在博彩和其他幾個類別的應用受到嚴重限制。 + +這樣,我們瞭解了在加密貨幣之上建立進階應用程式的三種方法:構建新的區塊鏈、在比特幣之上使用腳本以及在比特幣之上構建元協定。 構建新的區塊鏈可以在建立功能集方面提供無限的自由,但需要犧牲開發時間、啟動工作和安全性。 使用腳本這一方法很容易實作和標準化,但其功能非常有限,而且元協定雖然簡單,但在可擴展性方面存在缺陷。 透過以太坊,我們打算建立一個替代架構,使得開發更簡單、輕量用戶端性能更強大,同時允許應用程式共享經濟的環境和區塊鏈安全性。 + +## Ethereum {#ethereum} + +以太坊的目的是創造一個用於構建去中心化應用程式的替代協定,提供一套我們認為對於一大類去中心化應用程式非常有用的不同折衷方案,特別是快速開發時間、小型和不常用應用程式的安全性以及應用程式間高效互動能力很重要的情形。 以太坊透過建立本質上的終極抽象基礎層來實現這一點:具有內建圖靈完整程式語言的區塊鏈,允許任何人編寫智慧型合約和去中心化應用程式,他們可以在其中建立自己的所有權、交易格式和狀態轉換函式的任意規則。 域名幣的基本版本可以用兩行程式碼編寫,而貨幣和信譽系統等其他協定的構建需要不超過二十行程式碼。 智慧型合約是包含價值的加密「盒子」,只有在滿足某些條件時才解鎖,也可以構建在平台之上,由於圖零完整性、價值意識、區塊鏈意識和狀態的附加功能,其功能比比特幣腳本提供的功能要強大得多。 + +### 以太坊帳戶 {#ethereum-accounts} + +在以太坊中,狀態由稱為「帳戶」的物件組成,每個帳戶都有一個 20 位元組地址,並且狀態轉換是帳戶之間價值和資訊的直接轉移。 以太坊帳戶包含四個欄位: + +- **隨機數**,用來確定每個交易只能被處理一次的計數器 +- 帳戶目前的**以太幣餘額** +- 帳戶的**合約程式碼**(如存在) +- 帳戶的**存儲**(預設值為空白) + +「以太幣」是以太坊的主要內部加密燃料,用於支付交易費。 一般來說,有兩種類型的帳戶:由私鑰控制的**外部帳戶**,以及由合約程式碼控制的**合約帳戶**。 外部帳戶沒有程式碼,可以藉由建立和簽署交易,從外部帳戶送出訊息;在合約帳戶中,合約帳戶每次收到訊息後,其程式碼啟動,允許其讀取和寫入內部存儲,以及送出其他訊息或依次建立合約。 + +請注意,以太坊中的「合約」不應被視為應該「履行」或「遵守」的東西;相反,「合約」更像是生活在以太坊執行環境中的「自治代理」,當被訊息或交易「觸發」時總是執行特定的程式碼片段,並直接控制自己的以太幣餘額和自己的鍵/值存儲來追蹤持久變數。 + +### 訊息及交易 {#messages-and-transactions} + +以太坊中使用的術語「交易」是指已簽署資料包,其中儲存將從外部帳戶發送的訊息。 交易包含: + +- 訊息接收者 +- 識別發送者的簽章 +- 從發送者轉移到接收者的以太幣數量 +- 一可選數據段量 +- `STARTGAS` 值,表示交易執行允許使用的計算步驟之最大數量 +- `GASPRICE` 值,表示發送者為每個計算步驟支付的費用 + +前三個欄位是任何加密貨幣應有的標準欄位。 預設情況下資料欄位沒有函式,但虛擬機有操作碼,合約可以用操作碼來存取資料。例如,如果一個合約作為區塊鏈上的網域註冊服務,該合約可能希望將傳遞給它的資料解釋為含有兩個「欄位」,第一個欄位是要註冊的網域,第二個欄位是要註冊到的網際網路通訊協定地址。 合約將從訊息資料中讀取這些數值並且適當存儲。 + +`STARTGAS` 和 `GASPRICE` 欄位對以太坊的反拒絕服務模型很重要。 為了防止程式碼中出現意外或惡意的無限迴圈或其他計算浪費,每個交易都需要設定其可以使用的程式碼執行計算步驟數的限制。 計算的基本單位是「燃料」;通常,一個計算步驟花費 1 份燃料,但某些操作會花費更多的燃料,因為它們的計算成本更高,或者增加了必須作為狀態一部分儲存的資料量。 交易資料中每個位元組還需支付 5 份燃料。 收費系統的目的是要求攻擊者按比例為其消耗的每種資源付費,包括計算、頻寬和存儲;因此,任何導致網路消耗更多資源的交易都必須有與增量大致成正比的燃料費。 + +### 訊息 {#messages} + +合約能夠傳送「訊息」至其他合約。 訊息是虛擬物件,永遠不會被序列化且只存在以太坊的執行環境中。 訊息包含: + +- 訊息的發送者(隱含) +- 訊息接收者 +- 與訊息一起傳輸的以太幣數量 +- 一個可選擇的資料欄位 +- <0>STARTGAS 值 + +訊息與交易基本相似,但是訊息是由合約產生的,而不是由外部執行者產生。 當目前執行程式碼的合約執行 `CALL` 操作碼時,就會產生一則訊息,該操作碼會產生並執行一則訊息。 與交易一樣,訊息會使得接收者帳戶執行其程式碼。 因此,如同外部參與者與其他合約建立的關係一樣,合約可以與其他合約建立完全相同的關係。 + +請注意,交易或合約指定的燃料限額適用於該交易和所有子執行消耗的燃料總量。 例如:假如外部參與者 A 以 1000 份燃料發送交易給 B,在發送訊息給 C 之前 B 消費 600 份燃料,在返回前 C 的內部執行消耗 300 份燃料,然後,在用完燃料之前 B 還可以再花掉另外 100 份燃料。 + +### 以太坊狀態轉換函式 {#ethereum-state-transition-function} + +![以太幣狀態轉換](./ether-state-transition.png) + +以太坊狀態轉換函式 `APPLY(S,TX) -> S'` 可以定義如下: + +1. 檢查交易格式是否正確(即擁有正確數量的值)、簽章是否有效、以及隨機數是否匹配發送者帳戶中的隨機數。 如果為否,則傳回錯誤。 +2. 透過 `STARTGAS * GASPRICE` 計算出交易費,並從簽章中確定發送地址。 從發送者的帳戶餘額中減去費用並增加發送者的隨機數。 如果沒有足夠餘額可供使用,則傳回錯誤。 +3. 初始化 `GAS = STARTGAS`,並根據交易中的位元組數量為每個位元組扣除相應數量的燃料。 +4. 將交易數值從發送者帳戶轉移至接收帳戶。 如果接收帳戶尚不存在,則建立此帳戶。 如果接收帳戶是合約,執行該合約的程式碼直到運行結束或耗盡燃料。 +5. 如果因發送者資金不足或程式碼運行耗盡了燃料而導致轉帳失敗,則還原除支付費用之外的所有狀態變化,並將費用支付給礦工帳戶。 +6. 否則,將所有剩餘燃料的費用退還給發送者,並把為所消耗燃料而支付的費用發送給礦工。 + +例如,假設合約程式碼如下: + +```py +if !self.storage[calldataload(0)]: + self.storage[calldataload(0)] = calldataload(32) +``` + +請注意,合約程式碼實際上是用低階以太坊虛擬機程式碼編寫的;為清晰起見,此範例是用我們其中一種高階語言 Serpent 編寫的,它可以編譯為以太坊虛擬機程式碼。 假設合約的儲存一開始是空的,並發送了一個價值為 10 個以太幣的交易,消耗 2000 份燃料,燃料價格為 0.001 個以太幣,並且包含 64 位元組的資料,其中位元組 0-31 代表數字 `2`,位元組 32-63 代表字串 `CHARLIE`。 這種情況下,狀態轉移函式之流程如下: + +1. 檢查交易是否有效且格式正確。 +2. 檢查交易發送者是否至少有 2000 \* 0.001 = 2 以太幣。 如是,則從發送者的帳戶中減去 2 以太幣。 +3. 初始化燃料 = 2000,假設交易長度為 170 個位元組,每個位元組費用為 5 份燃料,減去 850 份燃料,因此剩下 1150 份燃料。 +4. 從發送者的帳戶中再減去 10 個以太幣,並將其新增至合約帳戶。 +5. 執行程式碼。 在本例中,執行過程比較簡單:函式檢查是否使用合約位於索引 `2` 的儲存,若未使用,則通知未使用;若使用,函式將位於索引 `2` 的存儲設定為值 `CHARLIE`。 假設執行過程花費 187 份燃料,那麼剩餘的燃料數量為 1150 - 187 = 963 +6. 將 963 \* 0.001 = 0.963 以太幣新增回發送者的帳戶,並傳回產生的狀態。 + +如果交易的接收一端沒有合約,那麼總交易費就等於提供的 `GASPRICE` 乘以交易的位元組長度,且和隨交易發送的資料無關。 + +請注意,訊息在還原方面與交易相同:如果訊息執行耗盡燃料,那麼該訊息的執行以及該執行觸發的所有其他執行都會還原,但父執行不需還原。 這意味著合約呼叫另一份合約是「安全的」,就好像 A 使用 G 份燃料呼叫 B,那麼可以保證 A 的執行最多損耗 G 份燃料。 最後,請注意有一個建立合約的操作碼 `CREATE`;它的執行機制通常類似於 `CALL`,不同之處在於執行的輸出決定了新建立合約的程式碼。 + +### 程式碼執行 {#code-execution} + +以太坊合約中的程式碼是用一種基於堆疊的低階位元組碼語言編寫,被稱為「以太坊虛擬機器程式碼」或「EVM 程式碼」。 該程式碼由一系列位元組組成,每個位元組代表一種操作。 通常,程式碼執行是一個無限迴圈,即重複執行當前程式計數器(由零開始)的操作,然後將程式計數器增加一,直到程式碼執行完畢或出現錯誤,或偵測到 `STOP` 或 `RETURN` 指令。 這些操作可以存取三種資料儲存空間: + +- ** 堆疊**,一種後進先出的資料容器,允許對資料做推入與彈出 +- **記憶體**,一個可無限擴充的位元組陣列 +- 合約的長期**存儲**,一個鍵/值儲存。 跟堆疊和記憶體會在計算結束後重置不同,存儲將長期持續存在。 + +程式碼也能存取傳入訊息的值、發送者與資料,以及區塊頭資料,並且程式碼也可以傳回資料位元組陣列作為輸出。 + +以太坊虛擬機程式碼的正式執行模型非常簡單。 當以太坊虛擬機運作時,其完整計算狀態可以由元組 `(block_state, transaction, message, code, memory, stack, pc, gas)` 來定義,其中 `block_state` 是包含所有帳戶的全域狀態並包含餘額和存儲。 在每一輪執行開始時,可以透過使用 `code` 的第 `pc` 個位元組(或 0,如果 `pc >= len(code)`)來找到當前指令,並且每條指令在元組影響方式方面都有自己的定義。 例如,`ADD` 將兩個項目彈出並將它們的和推入堆疊,將 `gas` 減少 1 並將 `pc` 增加1,`SSTORE` 將頂部的兩個項目彈出並將第二個項目插入合約存儲中第一個項目指定的索引處。 雖然有很多透過即時編譯來最佳化以太坊虛擬機執行的方法,但只需幾百行程式碼就可以完成以太坊的基本實作。 + +### 區塊鏈及挖礦 {#blockchain-and-mining} + +![以太坊應用框圖](./ethereum-apply-block-diagram.png) + +以太坊區塊鏈在許多方面與比特幣區塊鏈相似,雖然確實存在一些差異。 以太坊和比特幣在區塊鏈架構方面的主要區別在於,與比特幣不同,以太坊區塊包含交易清單和最新狀態的副本。 除此之外,另外兩個數值,即區塊編號和難度,也儲存在區塊中。 以太坊中基本的區塊驗證演算法如下: + +1. 檢查引用的前一個區塊是否存在並且有效。 +2. 檢查區塊的時間戳記是否大於引用的前一個區塊的時間戳記,並且在未來的 15 分鐘內。 +3. 檢查區塊編號、難度、交易根、叔根和燃料限制(各種以太坊特定的低階概念)是否有效。 +4. 確認區塊上的工作量證明是否有效。 +5. 使`S[0]`為前任區塊之最終狀態. +6. 令 `TX` 為區塊的交易清單,並且包含 `n` 筆交易。 對於 `0...n-1` 中的所有 `i`,設定 `S[i+1] = APPLY(S[i],TX[i])`。 如果任何應用程式傳回錯誤,或直到此時區塊中消耗的總燃料量超過 `GASLIMIT`,則傳回錯誤。 +7. 令 `S_FINAL` 為 `S[n]`,但加上支付給礦工的區塊獎勵。 +8. 檢查狀態 `S_FINAL` 的默克爾樹根是否等於區塊頭中提供的最終狀態根。 如果為是,則該區塊有效;否則該區塊無效。 + +這種方法乍看似乎效率很低,因為它需要儲存每個區塊的完整狀態,但實際上效率應該與比特幣相當。 原因是狀態儲存在樹狀結構中,而且在新增每個區塊後只需要更改樹的一小部分。 因此,一般來說在兩個相鄰區塊之間,樹的絕大部分應該是相同的,因此資料可以儲存一次並使用指標引用兩次(即子樹的雜湊值)。 一種稱為「帕特里夏樹」的特殊類型的樹用於實現此目的,它包括對默克爾樹概念的修改,允許高效地插入和刪除節點,而非僅僅更改。 此外,由於所有狀態資訊都存在於最後一個區塊內,因此無需儲存整個區塊鏈歷史 - 如果此策略可以應用於比特幣,可以節省 5-20 倍空間。 + +一個常見的問題是合約程式碼在實體硬體的「哪裡」執行。 這有一個簡單答案:合約程式碼的執行過程是狀態轉換函式定義的一部分,而該函式是區塊驗證演算法的一部分,因此若將交易新增到區塊 `B` 中,由該交易產生的程式碼執行將在現在和未來由所有節點執行,由此下載並驗證區塊 `B`。 + +## 應用 {#applications} + +基本上,以太坊上擁有三類應用。 第一類是金融應用,為使用者提供更強大的方式使用他們的資金來管理和簽訂合約。 這包括子貨幣、金融衍生品、對沖合約、儲蓄錢包、遺囑,甚至某些類別的完整僱傭合約。 第二類是涉及金錢的半金融應用,但很大部分功能也與資金無關;一個恰當的例子是針對解決計算難題的自動執行的懸賞。 最後,還有一些非金融性質的應用,例如線上投票和去中心化治理。 + +### 代幣系統 {#token-systems} + +區塊鏈上的代幣系統有許多應用,從代表美元或黃金等資產的子貨幣到公司股票等等,單一代幣可以代表智慧資產、安全且不可偽造的優惠券,甚至可代表作為激勵積分系統並與傳統價值完全沒有關聯的代幣系統。 代幣系統在以太坊的實作非常容易。 要理解的重點是所有貨幣或代幣系統,從根本上都是具有以下操作的資料庫:從 A 中減去 X 個單位並將 X 個單位新增給 B,附帶條件是 (1) A 在交易前至少有 X 個單位且 (2) 交易由 A 批准。實作代幣系統所需要做的就是將此邏輯實作到合約中。 + +使用 Serpent 實作代幣系統的基本程式碼如下: + +```py +def send(to, value): + if self.storage[msg.sender] >= value: + self.storage[msg.sender] = self.storage[msg.sender] - value + self.storage[to] = self.storage[to] + value +``` + +此程式碼本質上是本文檔前面部分詳細描述的「銀行系統」狀態轉換函式的字面實作。 需要額外添加幾行程式碼來規定,在最初以及其他一些邊緣案例下分配貨幣單位的初始步驟。理想情況下,應該新增一個函式讓其他合約查詢某個地址的餘額。 但這就是全部了。 理論上,基於以太坊的代幣系統在作為子貨幣時可能具有另一個重要特徵,該特徵是基於比特幣的鏈上元貨幣所缺乏的:就是直接以該貨幣支付交易費的能力。 實作這點的方式是合約會保持一定數量的以太幣餘額,用來向發送者退還用於支付費用的以太幣,合約也會透過收取費用的形式收集內部貨幣單位,並在持續不斷的拍賣中轉售貨幣,以此補充以太幣餘額。 因此,使用者需要用以太幣「啟動」他們的帳戶,但一旦帳戶中有以太幣,就可以重複使用,因為合約每次都會向帳戶退還資金。 + +### 金融衍生物及穩定價值貨幣 {#financial-derivatives-and-stable-value-currencies} + +金融衍生物是「智慧型合約」最常見的應用,也是最容易以程式碼實作的應用之一。 實作金融合約的主要挑戰在於,其中大多數合約都需要引用外部價格行情指示器;例如,一個非常理想的應用程式是對沖以太幣(或其他加密貨幣)相對於美元波動的智慧型合約,而這需要合約知道以太幣/美元的價值。 實現這一點的最簡單方法是藉助由特定方(例如納斯達克)維護的「資料饋送」合約,這種合約的設計讓特定方能夠根據需要更新合約並提供一個介面,允許其他合約向該合約發送訊息並傳回包含價格的回覆。 + +考慮到這一關鍵因素,對沖合約將如下所示: + +1. 等待 A 方輸入 1000 個以太幣。 +2. 等待 B 方輸入 1000 個以太幣。 +3. 將透過查詢資料饋送合約計算出的 1000 個以太幣的美元價值記錄在存儲中,假設為 $x。 +4. 30 天後,允許 A 或 B 「重新啟動」合約,以便將價值 $x 美元的以太幣(通過再次查詢資料饋送合約以獲得新價格來計算得出)發送給 A,並將其餘的發送給 B。 + +這種合約在加密貨幣商業上具有巨大潛力。 加密貨幣的主要問題之一是它的波動性。雖然許多使用者和商家可能希望獲得處理加密資產的安全性和便利性,但他們中許多人不希望面臨在一天內資金價值損失 23% 的景象。 目前為止,最常見的解決方案是發行者支持的資產;其想法是發行者創建一種子貨幣,他們有權發行和撤銷這種子貨幣單位,並且對於向發行者(離線)提供一個單位指定基礎資產(例如黃金、美元)的任何人,發行者可以向其(離線)提供一個單位的貨幣。 發行者然後承諾向返還一個單位加密資產的任何人提供一個單位基礎資產。 這種機制讓任何非加密資產「升級」為加密資產,前提為發行者是可信的。 + +然而實際上,發行者並不總是值得信賴,在某些情況下銀行基礎設施過於薄弱或過於不友好,以至無法提供此類服務。 金融衍生物提供了另一種選擇。 這種方案中,不是由單一發行者提供資金來支持資產,而是由一個去中心化的投機者市場承擔了這個角色,他們押注加密參考資產(例如以太幣)的價格會上漲。 與發行者不同,投機者無法在交易中違約,因為對沖合約託管他們的資金。 注意這種方法不是完全去中心化的,因為仍然需要一個可信來源提供價格行情指示器,但可以說在降低基礎設施要求(與發行者不同,發布價格饋送不需要許可證並且可能被歸類為言論自由)以及減少詐欺的可能性方面,這仍是一個巨大改進。 + +### 身分及信譽系統 {#identity-and-reputation-systems} + +最早的替代加密貨幣[域名幣](http://namecoin.org/),嘗試使用類似比特幣的區塊鏈提供一種名稱註冊系統,讓使用者可以在公共資料庫中註冊他們的姓名和其他資料。 主要用例是[網域名稱系統](https://wikipedia.org/wiki/Domain_Name_System),它將諸如「bitcoin.org」等域名(在域名幣的情況下,「bitcoin.bit」)映射到一個網際網路通訊協定地址。 其他用例包括電子郵件身份驗證系統和可能更高階的信譽系統。 以下是在以太坊上提供類似域名幣的名稱註冊系統的基本合約: + +```py +def register(name, value): + if !self.storage[name]: + self.storage[name] = value +``` + +合約非常簡單;它就是以太坊網路中的一個資料庫,可以向其中新增但不能修改或移除。 任何人都可以把名稱註冊為一個值,並且該註冊將永遠保留。 更複雜的名稱註冊合約還將具有允許其他合約查詢的「函式子句」,以及允許名稱「所有者」(即首個註冊者)更改資料或轉讓所有權的機制。 甚至可以在該合約上添加信譽和信任網路功能。 + +### 去中心化檔案存儲 {#decentralized-file-storage} + +過去幾年,大批受歡迎的線上檔案存儲新創公司不斷湧現,其中最著名的是 Dropbox。這家公司想讓使用者能夠上傳硬碟備份、提供備份儲存服務並允許使用者存取備份來收取月費。 然而,目前檔案存儲市場其實效率相對較低。在粗略了解各種現有解決方案後會發現,主流檔案存儲的月費比整個硬碟的成本還要高,特別是在被稱為「恐怖谷」的 20-200 GB 級別,既沒有免費額度也沒有企業級折扣。 以太坊合約讓去中心化檔案存儲生態系統得以發展,個人使用者可以將自己的硬碟租出去以獲得少量收益,而未使用的空間可用於進一步降低檔案存儲成本。 + +這個系統的關鍵組成部分就是我們所謂的「去中心化 Dropbox 合約」。 該合約的運作方式如下。 首先,使用者將需要將存儲的資料拆分成幾個區塊並對每個區塊加密以保護隱私,然後以此構建一個梅克爾樹。 然後建立一個包含以下規則的合約,對於每 N 個區塊,合約將從默克爾樹中選擇一個隨機索引(使用能夠被合約程式碼存取的上一個區塊的雜湊值作為隨機性來源),然後給予第一個實體 X 個以太幣,以提供包含簡單支付驗證(例如位於樹中特定索引處區塊的所有權證明)的交易。 當使用者想重新下載他們的檔案時,他們可以使用微支付通道協定(例如每 32 KB 支付 1 個szabo)恢復檔案;最節省費用的方法是支付者不到最後不發布交易,而是每 32 KB 後用一個更划算的、具有相同隨機數的交易取代原來的交易。 + +該協定的一個重要特點是,雖然似乎使用者相信許多隨機節點不會丟失檔案,但可以透過以下方法將這種風險降低到接近零:透過私鑰共享將檔案拆分成許多部分,並透過監控合約確定每一部分仍在某個節點中。 如果合約依然在支付款項,那就提供了一個加密證明,某人仍在利用此合約來保存檔案。 + +### 去中心化自治組織 (DAO) {#decentralized-autonomous-organizations} + +「去中心化自治組織」的一般概念是指擁有一定數量成員或股東的虛擬實體,它們大概擁有 67% 的大多數股權,有權使用實體的資金並修改其程式碼。 成員會集體決定該組織如何分配其資金。 去中心化自治組織的資金分配方式可以是賞金、薪資或更奇特的機制,例如用內部貨幣來獎勵工作。 這本質上複製了傳統公司或非營利組織的法律特徵,但僅使用加密區塊鏈技術來執行。 目前為止,許多關於去中心化自治組織的討論都圍繞著「去中心化自治公司」(DAC) 的「資本家」模式,其中有可獲得紅利的股東和可交易的股份;作為替代方案,有一種可能被稱為「去中心化自治社群」的實體會使所有成員在決策時擁有同等權利,並在增減成員時要求 67% 的現有成員多數同意。 由於每人只能擁有一個成員資格,所以需要群體來集體執行。 + +以下概括如何用程式碼實現去中心化自治組織。 最簡單的設計就是一段能夠在三分之二的成員同意變更時進行變更的自動修改程式碼。 雖然程式碼理論上是不可更改的,然而透過把程式碼片段放入不同的合約,並將要呼叫的合約的位址儲存在可修改的儲存中,使用者可以輕易解決這一問題及使程式碼事實上變得可修改。 在這種去中心化自治組織合約的簡單實作中,有三種交易類型可透過交易提供的資料區分: + +- `[0,i,K,V]` 在索引 `i` 處註冊提案,以便將儲存索引 `K` 的位址變更為值 ` V` +- `[1,i]` 註冊一張贊成提案 `i` 的投票 +- `[2,i]` 如果已獲得足夠的投票,則最終確定提案 `i` + +合約為每一種交易提供了子句。 它將維護所有開放儲存變更的記錄,以及投票支持者的清單。 它還會有全部成員的清單。 當三分之二之成員投票贊成儲存變更,一個最終化交易將執行此變更。 更複雜的框架可能還有針對發送交易、增減成員等功能的內建投票功能,甚至可以提供[流動式民主](https://wikipedia.org/wiki/Liquid_democracy)投票委託(即任何人都可以委託另外一個人代表自己投票,而這種委託關係是可以傳遞的,如果 A 委託了 B,然後 B 委託了 C,那麼 C 將決定 A 的投票)。 這種設計將使去中心化自治組織作為一個去中心化社群有機地成長,允許人們最終將篩選成員的任務委派給專家,但與「現有系統」不同,隨著時間推移,當個別社群成員改變他們的陣營時,專家可以輕鬆地加入或退出。 + +另一替代模型是去中心化公司,其中任何帳戶可以擁有零份或多份股份,需要有三分之二的股份才能做出決策。 完整框架將包括資產管理功能,即能夠出價購買或出售股份並且能夠接受報價(最好是合約裡有訂單匹配機制)。 委託也提供流動式民主形式,普及了「董事會」的概念。 + +### 更多應用 {#further-applications} + +**1. 儲蓄錢包**。 假設 Alice 想安全地保管她的資金,但她擔心自己的私鑰遺失或被破解。 她把以太幣放到和銀行 Bob 簽訂的一個合約裡,如下: + +- Alice 每天最多可以單獨提取 1% 的資金。 +- Bob 每天最多可以單獨提取 1% 的資金,但 Alice 可以用她的金鑰建立一個交易取消 Bob 的提款權限。 +- Alice 和 Bob 一起可以任意提取資金。 + +通常,每天 1% 的額度對於 Alice 來說已足夠,若 Alice 想提取更多資金,她可以聯繫 Bob 尋求幫助。 如果 Alice 的金鑰被破解,她可以立即聯絡 Bob 幫她將資金轉移到新合約。 如果她遺失了金鑰,Bob 最終會取出資金。 如果發現 Bob 是惡意的,她可以取消 Bob 的提款權限。 + +**2. 農作物保險**。 使用者可以輕鬆地建立金融衍生合約,但使用的是天氣而非任何價格指數的資料饋送。 如果愛荷華州的農民購買了一項金融衍生物,該產品基於愛荷華的降雨情況進行反向賠付,那麼如果遇到乾旱,該農民將自動收到賠付資金,而且如果降雨充足他會很開心,因為他的作物會有好收成。 這可以擴展到一般的自然災害保險。 + +**3. 去中心化資料餽送**。 對於金融差價合約,實際上有可能透過一種名為「[SchellingCoin](http://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/)」的協定將資料餽送服務去中心化。 SchellingCoin 的基本工作原理如下:N 個相關方都向系統輸入給定資料的值(例如以太幣/美元價格),對這些值進行排序,在第 25 和第 75 個百分位之間的每個人都會得到一個代幣作為獎勵。 每個人都有動力提供其他人都會提供的答案,而唯一能讓眾多參與者實際達成一致的值是顯而易見的:真相。 這樣就建立了一種去中心化協定,它理論上可以提供任何數量的數值,包括以太幣/美元價格、柏林的溫度甚至某個困難計算的結果。 + +**4. 智慧型合約多重簽章託管**。 比特幣允許多重簽章交易合約,例如,提供給定五個金鑰中的三個便可以使用資金。 以太坊允許更精細的控制;例如,提供五個金鑰中的四個可以使用任意數量的資金,提供五個金鑰中的三個可以每天最多使用 10% 的資金,提供五個金鑰中的兩個可以每天最多使用 0.5% 的資金。 此外,以太坊的多重簽章是非同步的 — 雙方可以在不同時間在區塊鏈上註冊他們的簽章,最後一個簽章將自動傳送交易。 + +**5. 雲端運算**。 以太坊虛擬機技術也可以用來建立一個可驗證的運算環境,讓使用者可以要求他人執行計算,並要求提供證據,證明某些隨機選擇檢查點處的計算被正確執行。 這允許創建一個雲端運算市場,任何使用者都可以使用他們的桌上型電腦、筆記型電腦或專用伺服器參與其中,並且可以使用抽查和保證金來確保系統是值得信賴的(即節點不能透過欺騙來獲利)。 雖然這種系統可能不適合所有任務;例如,需要高階的進程間通訊的任務無法在大型節點雲端上輕鬆完成。 然而,其他任務則更容易實現並行;例如 SETI@home、folding@home 和遺傳演算法等專案可以輕鬆地在這類平台上實作。 + +**6. 點對點賭博**。 任意數量的點對點賭博協議都可以在以太坊區塊鏈上實作,例如 Frank Stajano 和 Richard Clayton 的 [Cyber​​dice](http://www.cl.cam.ac.uk/~fms27/papers/2008-StajanoCla-cyberdice.pdf)。 最簡單的賭博協定實際上只是關於下一個區塊雜湊值的差價合約,並且可以在其基礎上構建更進階的協定,建立接近零費用且無法作弊的賭博服務。 + +**7. 預測市場**。 如果有預言機或 SchellingCoin,預測市場也很容易實作,預測市場與 SchellingCoin 一起有可能被證明是 [futarchy](http://hanson.gmu.edu/futarchy.html) 的第一個主流應用,作為去中心化組織的治理協定。 + +**8. 鏈上去中心化市場**,以身分和信譽系統為基礎。 + +## 雜項與憂慮 {#miscellanea-and-concerns} + +### 經修改之 GHOST 實作 {#modified-ghost-implementation} + +「貪婪最重可觀察子樹」(GHOST) 協定是由 Yonatan Sompolinsky 和 Aviv Zohar 在 [2013 年12 月](https://eprint.iacr.org/2013/881.pdf)首次提出的創新。 提出 GHOST 的動機是,具有快速確認時間的區塊鏈目前由於過時率高而安全性降低— 因為區塊需要一定的時間才能透過網路傳播,如果礦工 A 開採了一個區塊,然後礦工 B 碰巧在礦工 A 的區塊傳播到 B 之前開採了另一個區塊,那麼礦工 B 的區塊最終會被作廢,無法用於增加網路安全性。 此外,還有一個中心化問題:如果礦工 A 是一個擁有 30% 哈希算力的礦池,而 B 擁有 10% 哈希算力,那麼 A 將面臨 70% 的時間生產陳腐區塊的風險(因為在其他 30 % 的時間 A 產生了最後一個區塊,所以會立即獲得挖礦數據),而 B 將面臨 90% 的時間生產陳腐區塊的風險。 因此,如果區塊間隔短到足以使過時率較高,則 A 將僅憑藉其算力大小而顯著提高效率。 結合這兩種影響,快速產生區塊的區塊鏈很可能造就一個擁有足夠高比例網路哈希算力的礦池,從而對挖礦過程擁有事實上的控制。 + +正如 Sompolinsky 和 Zohar 所描述,GHOST 透過在計算哪條鏈「最長」時包含陳腐區塊來解決網路安全性降低的第一個問題;也就是說,在計算哪個區塊受到最大的總工作量證明支援時,不僅區塊的父塊和更遠的祖先,而且該區塊祖塊(在以太坊行話中稱為「叔塊」)的陳腐子代也都被添加到計算中。 為了解決第二個問題,即中心化偏差,我們跳出了 Sompolinsky 和 Zohar 描述的協定範疇,並且還為陳腐區塊提供區塊獎勵:陳腐區塊獲得其基礎獎勵的 87.5%,而包含陳腐區塊的侄塊獲得剩餘的 12.5%。 然而,交易費並不獎勵給叔塊。 + +以太坊實作了一個簡化版的 GHOST 協定,它僅僅深入七個層級。 具體來說,定義如下: + +- 一個區塊必須指定一個父塊,並且必須指定零個或多個叔塊 +- 包含在區塊 B 中的叔塊必須具有以下屬性: + - 它必須是區塊 B 的第 k 代祖先的直系子代,其中 `2 <= k <= 7`。 + - 它不能是 B 的祖先 + - 叔塊必須是有效的區塊頭,但不需要是先前驗證過的甚至是有效的區塊 + - 叔塊必須不同於前面區塊中包含的所有叔塊,並且不同於同一區塊中包含的所有其他叔塊(非雙重包含) +- 對於區塊 B 中的每個叔塊 U,區塊 B 的礦工獲得額外 3.125% 的鑄幣獎勵,而叔塊 U 的礦工獲得 93.75% 的標準鑄幣獎勵。 + +這種限製版的 GHOST 協議,最多只能包含 7 代叔塊,採用它有兩個原因。 首先,在計算給定區塊中哪些叔塊有效時,無限制 GHOST 會使得計算過於複雜。 第二,無限制 GHOST 協議採用了以太坊中使用的補償,取消了促使礦工在主鏈而不是公共攻擊者的鏈上挖礦的激勵措施。 + +### 手續費 {#fees} + +由於發佈到區塊鏈中的每筆交易都會為網路帶來下載和驗證的成本,因此需要一些通常涉及交易費用的監管機制來防止濫用。 比特幣使用的預設方法是純粹自願的手續費,依靠礦工充當看門人並設定動態最低限額。 這種方法特別在比特幣社群中受歡迎,是因為它「基於市場」,允許礦工和交易發送者之間的供需決定價格。 然而,這種想法的問題在於交易處理並不符合市場法則。雖然將交易處理解釋為礦工向發送者提供的服務直觀上很有吸引力,但實際上礦工收錄的每筆交易都需要由網絡中的每個節點處理,因此絕大部分交易處理成本由第三方而非由決定是否收錄交易的礦工承擔。 因此,公地悲劇的問題很可能發生。 + +然而,結果卻是,基於市場機制中的這個缺陷,在給出一個不準確的特定簡化假設時,會神奇地自我抵銷。 論證如下。 假設: + +1. 交易導致 `k` 個操作,將提供獎勵 `kR` 給添加它的任何礦工,其中 `R` 由發送者設定,`k` 和 `R` 事先(大體上)對礦工可見。 +2. 在任何節點,操作的處理成本為 `C`(即所有節點效率相同) +3. 有 `N` 個挖礦節點,每個節點的處理能力完全相同(即總處理能力的 `1/N`) +4. 沒有不挖礦的全節點。 + +如果預期獎勵大於成本,礦工將願意處理交易。 因此,預期獎勵為 `kR/N`,因為礦工有 `1/N` 機會處理下一個區塊,而礦工的處理成本僅為 `kC`。 因此,當 `kR/N > kC` 或 `R > NC` 時,礦工將會添加交易。 請注意 `R` 是發送者提供的每個操作的費用,因此是發送者從交易中獲得的收益的下限,`NC` 是整個網路共同處理一個操作的成本。 因此,礦工有動機只添加那些總實際收益超過成本的交易。 + +然而,這些假設在現實中會出現有些許重要偏離: + +1. 與其他驗證節點相比,礦工處理交易的成本確實更高,因為額外的驗證時間會延遲區塊傳播,從而增加區塊陳腐的機率。 +2. 確實存在不挖礦的全節點。 +3. 實際上挖礦能力的分配最終可能極度不平等。 +4. 想破壞網路的投機者、政敵和瘋子確實存在,他們可以巧妙地設定合約,讓他們的成本遠低於其他驗證節點支付的成本。 + +(1) 讓礦工傾向於添加較少的交易,並且 (2) 增加 `NC`;因此這兩種作用會互相 抵銷一部分。 [如何抵銷?](https://github.com/ethereum/wiki/issues/447#issuecomment-316972260) (3) 和 (4) 是主要問題,為了解決它們,我們簡單地制訂了一個浮動上限: 沒有區塊能夠包含比 `BLK_LIMIT_FACTOR` 乘以長期指數移動平均值更多的操作數。 具體來說: + +```js +blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR - 1) + +floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR) +``` + +`BLK_LIMIT_FACTOR` 和 `EMA_FACTOR` 是常數,暫時設定為 65536 和 1.5,但可能在進一步分析後會變更。 + +還有一個因素會抑制比特幣中的大區塊:大區塊將需要更長時間來傳播,因此有更大機率變成陳腐區塊。 在以太坊中,燃料消耗量高的區塊也可能需要更長時間來傳播,因為它們的物理大小更大,而且因為它們需要更長時間來處理交易狀態轉換以進行驗證。 這種延遲抑制因素在比特幣中是一個重要的考慮因素,但在以太坊中由於 GHOST 協定而較少考慮;因此,依靠受監管的區塊限制可提供更穩定的基準。 + +### 計算及圖零完整性 {#computation-and-turing-completeness} + +重點是以太坊虛擬機是圖靈完整的;這意味著以太坊虛擬機程式碼可以對任何設想可執行的計算進行編碼,包括無限迴圈。 以太坊虛擬機程式碼以兩種方式實作迴圈。 首先,使用一個 `JUMP` 指令,允許程式跳回至程式碼中的前一個位置,也使用一個 `JUMPI` 指令進行條件跳轉,允許諸如 `while x < 27: x = x * 2` 之類的語句。 第二,合約可以呼叫其他合約,有可能透過遞迴進行迴圈。 這很自然地導致一個問題:本質上,惡意使用者能夠透過迫使礦工和全節點進入無限迴圈而關閉它們嗎? 這個問題​源於電腦科學中的一個難題,稱為停機問題:在一般情況下,沒有辦法知道一個特定的程式是否會停止運作。 + +如狀態轉換部分所述,我們的解決方案要求交易設定一個允許執行的最大計算步驟數,如果超過執行時間,計算就會被還原但仍要支付費用。 訊息以同樣的方式運作。 為顯示我們解決方案背後的動機,請看下面的範例: + +- 攻擊者建立一個運行無限迴圈的合約,然後向礦工發送啟動該迴圈的交易。 礦工將處理該交易,運行無限迴圈直到燃料耗盡。 即使執行耗盡了燃料並中途停止,交易仍然有效而礦工仍然向攻擊者索取每個計算步驟的費用。 +- 攻擊者建立一個非常長的無限迴圈,目的是迫使礦工持續長時間計算,以至於計算結束時將有更多區塊產生出來,這樣礦工就不可能透過添加該交易來索取費用。 然而,攻擊者需要為 `STARTGAS` 提交一個值,限制執行可以進行的計算步驟數,因此礦工將提前知道該計算將進行相當多的步驟數。 +- 攻擊者看到一個合約,其中的程式碼形式為 `send(A,contract.storage[A]); contract.storage[A] = 0`,然後發送一個交易,但燃料只夠運行第一步而不足以運行第二步(即進行提款但不讓餘額減少)。 合約創建者無需擔心防備此類攻擊,因為若執行中途停止,變更會被還原。 +- 金融合約取九個專有資料餽送的中位數,以最大限度地降低風險。 攻擊者接管其中一個資料饋送,該資料饋送設計為可透過去中心化自治組織部分描述的變數-地址-呼叫機制修改,並將其轉換為運行無限迴圈,從而強制任何從金融合約索取資金的嘗試都因燃料耗盡中止。 然而,金融合約可以對訊息設定燃料限制來預防這個問題。 + +圖靈完整的替代方案是圖靈不完整,其中 `JUMP` 和 `JUMPI` 不存在,並且在任何給定時間每個合約只允許有一個副本存在於呼叫堆疊內。 在這個系統中,上述收費系統和關於我們解決方案效果的不確定性可能都是不必要的,因為執行一個合約的成本將由合約大小決定。 此外,圖靈不完整甚至不是一大限制;在我們內部構想的所有合約範例中,到目前為止只有一個需要迴圈,甚至那個迴圈也可以透過將一行程式碼重複 26 次來消除。 考慮到圖靈完整性帶來的嚴重影響和有限益處,為什麼不簡單地使用圖靈不完整的語言呢? 然而在現實中,圖靈不完整仍遠遠不能有效解決問題。 要了解原因,考慮以下合約: + +```sh +C0: call(C1); call(C1); +C1: call(C2); call(C2); +C2: call(C3); call(C3); +... +C49: call(C50); call(C50); +C50: (run one step of a program and record the change in storage) +``` + +現在,向 A 發送一筆交易。這樣,在 51 筆交易中,我們有一個合約需要 250 個計算步驟。 礦工可以嘗試提前偵測這種邏輯炸彈,方法是為每個合約維護一個值,指定合約可以進行的最大計算步驟數,然後對遞迴呼叫其他合約的合約進行計算,但是這需要礦工禁止建立其他合約的合約(因為上面 26 個合約的建立和執行可以很容易地匯集到一個單獨合約內)。 另一個問題是訊息地址欄位是一個變數,所以在一般情況下,甚至不可能提前知道某個合約將呼叫哪些合約。 因此,最終我們有了一個驚人結論:圖靈完整性十分容易管理,而在缺乏同樣的控制時,圖靈不完整的管理異常地困難,那為什麼不直接讓協定圖靈完整呢? + +### 貨幣與發行 {#currency-and-issuance} + +以太坊網路包括自己的內建貨幣以太幣,其扮演雙重角色:提供一個主要流動資金層,實現各種數位資產之間的高效交易,更重要的是,提供一種支付交易費的機制。 為方便起見並避免未來爭議(參考當前比特幣中的 mBTC/uBTC/satoshi 爭論),面額預先設定如下: + +- 1:wei +- 1012:szabo +- 1015:finney +- 1018:ehter + +這應該被視為「美元」和「美分」或「BTC」和「satoshi」概念的擴展版本。 在不久將來,我們期望「ehter」用於普通交易,「finney」用於微型交易,「szabo」和「wei」可以在圍繞費用和協定實作的技術討論中使用;其餘的面額可能會在以後變得有用,但目前不應包含在用戶端中。 + +發行模式如下: + +- 以太幣將以貨幣銷售的形式發行,價格為一個比特幣可購買 1000-2000 個以太幣,這種機制旨在為以太坊組織籌資和支付開發費用,且已被其他平台(如 Mastercoin 和 NXT)成功應用。 早期買家將從較大的折扣中獲益。 發售所得的比特幣將全部用來支付開發者的薪資和獎金,並用來投資以太坊和加密貨幣生態系統中的各種營利和非營利專案。 +- 0.099 倍的發售總量(60102216 個以太幣)將分配給以太坊組織,以補償早期貢獻者,並用以太幣計價的方式支付創世區塊誕生前的開銷。 +- 0.099 倍的發售總量將保留為長期準備金。 +- 發售後,將永久地每年為礦工分配 0.26 倍的發售總量。 + +| 群組 | 啟動時 | 一年後 | 五年後 | +| --------- | ------ | ------ | ------ | +| 貨幣數量 | 1.198X | 1.458X | 2.498X | +| 購買者 | 83.5% | 68.6% | 40.0% | +| 發售前花費的準備金 | 8.26% | 6.79% | 3.96% | +| 發售後使用的準備金 | 8.26% | 6.79% | 3.96% | +| 礦工 | 0% | 17.8% | 52.0% | + +#### 長期供應成長率(百分比) + +![以太坊通貨膨脹](./ethereum-inflation.png) + +_除了線性的貨幣發行方式外,與比特幣相似,以太幣的長期供應成長率也趨於零。_ + +上述模型提供了兩個主要選項:(1) 捐贈池的存在和規模,以及 (2) 永久增長的線性供應的存在,而比特幣採用了限制供應的方法。 捐贈池存在的理由如下。 如果捐贈池不存在,且線性發行量減少到​​總發售量的 0.217 倍以實現相同的通貨膨脹率,那麼以太幣總量將減少 16.5%,而每個單位將增值 19.8%。 因此,為了達成均衡,將會多發售 19.8% 的以太幣並購買,所以每個單位的價值將再次與以前完全一樣。 組織還將擁有 1.198 倍的比特幣,可以考慮將其分為兩部分:原有比特幣和額外的 0.198 倍比特幣。 因此,這種情況_完全等同於_捐贈,但有一個重要區別:該組織僅持有比特幣,因而沒有動機支持以太幣單位的價值。 + +永久性線性供應成長模型降低了有些人認為比特幣財富過度集中的風險,並為生活在當前和未來的人提供了獲取貨幣單位的公平機會,同時又保留了讓人獲取並持有以太幣的強效激勵措施,因為長期來看,用百分比表示的「供應成長率」仍將趨於零。 我們還推測由於加密貨幣總是會因為不小心、死亡等原因而丟失,而加密貨幣的損失可以被模擬為每年總供應量的百分比,因此流通中的貨幣總供應量實際上最終會穩定在一個等於每年發行量除以損失率的數值上(例如,在損失率為 1% 時,一旦供應量達到 26 倍,那麼每年將挖掘出 0.26 倍,0.26 倍丟失,形成一個平衡點)。 + +請注意,未來以太坊很可能會過渡到權益證明模型以確保安全,將每年的發行量減少到 0 至 0.05 倍之間。 如果以太坊組織失去資金或因任何其他原因消失,我們將開啟一個「社區合約」:任何人都有權創建以太坊的未來候選版本,唯一的條件是以太幣的數量必須最多等於 `60102216 * (1.198 + 0.26 * n)`,其中 `n` 是創世區塊之後的年數。 創作者可以自由地眾售,或以其他方式分配權益證明驅動的供應擴張和最大允許供應擴張之間的部分或全部差額,來支付開發費用。 不符合社區合約的候選升級可能會合理地被分叉為相容版本。 + +### 挖礦中心化 {#mining-centralization} + +比特幣挖礦演算法的原理是,讓礦工一次又一次地對區塊頭稍作修改的版本進行數百萬次 SHA256 計算,直到最終某個節點所產生版本的雜湊值小於目標值(目前大約為 2 192)。 然而,這種挖礦演算法容易出現兩種形式的中心化。 第一種,挖礦生態系統已經被 ASIC(特殊應用積體電路)所支配,這些電腦晶片專門為特定的比特幣挖礦任務而設計,因此效率提高了數千倍。 這意味著比特幣挖礦不再是一種高度去中心化和平等的追求,而是需要巨額資本才能有效參與。 第二,大部分比特幣礦工事實上不在本地完成區塊驗證;而是依賴中心化礦池提供區塊頭。 這個問題可以說很嚴重:截至撰寫本文時,最大的三個礦池間接地控制了大約比特幣網路 50% 的算力,雖然當一個礦池嘗試聯合發動 51% 攻擊時,礦工還是可以轉換到其他礦池來減輕此問題的嚴重性。 + +以太坊現在目的是使用一種挖礦演算法,要求礦工從狀態中獲取隨機資料,從區塊鏈的最後 N 個區塊中計算一些隨機選擇的交易,並傳回結果的雜湊值。 這有兩個重要好處。 首先,以太坊合約可以包含任何類型的計算,因此以太坊特殊應用積體電路本質上是用於一般計算的特殊應用積體電路,即更好的中央處理器。 其次,挖礦需要存取整條區塊鏈,這迫使礦工儲存整條區塊鏈並至少能夠驗證每筆交易。 這樣就消除了對中心化礦池的需求;雖然礦池仍然可以起到平衡獎勵分配隨機性的合法作用,但沒有中心化控制的點對點礦池同樣也可以很好地發揮此功能。 + +該模型未經測試,而在使用合約執行挖礦演算法時,避免某些巧妙最佳化過程中可能會遇到困難。 然而,這種演算法有一個值得注意的特點,任何人都可以透過將專用於抑制某些特殊應用積體電路的大量合約引入區塊鏈中,在「井裡投毒」。 由於存在經濟激勵,特殊應用積體電路製造商會使用這種方法互相攻擊。 因此,我們正在開發的解決方案最終是一種適應性人為經濟解決方案,而不是純粹的技術解決方案。 + +### 可擴展性 {#scalability} + +以太坊的一個常見問題是可擴展性問題。 與比特幣一樣,以太坊也存在缺陷,即每筆交易都需要由網路中的每個節點處理。 以比特幣來說,目前區塊鏈的大小約為 15 GB,每小時增長約 1 MB。 如果比特幣網路要像 Visa 那樣每秒處理 2000 筆交易,則每三秒鐘就會增加 1 MB(每小時 1 GB,每年 8 TB)。 以太坊可能也會經歷相似甚至更糟的增長模式,因為以太坊區塊鏈上還有很多應用程式,不像比特幣區塊鏈上只有貨幣,但以太坊全節點只需儲存狀態而不是完整的區塊鏈歷史,這一事實讓情況得到改善。 + +如此龐大的區塊鏈出現的問題是中心化風險。 如果區塊鏈大小增加到 100 TB,可能的情況是只有極少數大型企業能運行全節點,而所有普通使用者將使用簡單支付驗證輕量節點。 在這種情況下,可能會出現全節點合夥詐欺牟利(例如變更區塊獎勵,給他們自己比特幣等)這樣的問題。 輕節點無法立即偵測到這一點。 當然,可能至少存在一個誠實的全節點,而幾小時後有關詐騙的資訊會透過 Reddit 這種頻道洩露,但那時會為時已晚:由普通使用者互相組織協作將指定區塊列入黑名單,這種大型、很可能不切實際的協作在規模上無異於發動一次成功的 51% 攻擊。 就比特幣而言,目前這是一個問題,但 [Peter Todd 建議](https://web.archive.org/web/20140623061815/http://sourceforge.net/p/bitcoin/mailman/message/31709140/)對區塊鏈進行修改,以緩解這個問題。 + +在短期內,以太坊將使用兩種附加策略來應對這個問題。 首先,因為基於區塊鏈的挖礦演算法,至少每個礦工都會被強制成為一個全節點,為全節點的數量創建了下限。 接著更重要的是,處理完每筆交易後,我們會把一個中間狀態樹根收錄到區塊鏈中。 即使區塊驗證是中心化的,只要存在一個誠實的驗證節點,就可以透過驗證協議來規避中心化問題。 如果礦工發布了無效區塊,該區塊必定是格式錯誤,或是狀態 `S[n]` 不正確。 由於已知 `S[0]` 是正確的,因此必然存在第一個不正確的狀態 `S[i]`,但狀態 `S[i-1]` 是正確的。 驗證節點將提供索引 `i` 以及「無效證明」,該證明包括處理 `APPLY(S[i-1],TX[i]) -> S[i]` 所需的帕特里夏樹節點的子集。 節點將能夠使用那些節點來運行該部分計算,並查看生成的 `S[i]` 與提供的 `S[i]` 是否不匹配。 + +另一種更複雜的攻擊涉及惡意礦工發布不完整的區塊,因此甚至不存在完整訊息,致使無法確定區塊是否有效。 解決方案是查問-應答協議:驗證節點對目標交易索引發起「查問」,接受到質疑信息的輕型節點會對相應的區塊取消信任,直到另外無論是礦工還是另一個驗證者的節點,提供一個帕特里夏節點子集作為有效性證明。 + +## 結論 {#conclusion} + +以太坊協議最初被設想為加密貨幣的升級版本,透過高度通用的程式語言提供進階功能,如區塊鏈託管、提款限制、金融合約、博彩市場等。 以太坊協議不會直接「支援」任何應用程式,但圖靈完備程式語言的存在意味著,理論上可以為任何交易類型或應用程式建立任意合約。 然而關於以太坊更有趣的地方是,以太坊協議遠遠超出了貨幣的範疇。 圍繞去中心化檔案儲存、去中心化計算和去中心化預測市場的協議以及許多其他這類概念,有可能大大提高計算行業的效率,並首次透過添加經濟層來大力促進其他點對點協議的發展。 最後,還有大量與金錢完全無關的應用程式。 + +以太坊協議實作的任意狀態轉換函式的概念,提供了一個具有獨特潛力的平台,而不是一種專門針對資料儲存、賭博或金融領域內一系列特定應用程式的封閉式單用途協議。以太坊在設計上是開放式的,我們相信在今後幾年裡它非常適合作為大量金融和非金融協議的基礎層。 + +## 註釋與延伸閱讀 {#notes-and-further-reading} + +### 注釋 {#notes} + +1. 有經驗的讀者可能會注意到,事實上比特幣地址是橢圓曲線公鑰的雜湊值,而不是公鑰本身。 然而,事實上從密碼學術語角度把公鑰雜湊值稱為公鑰是完全合理的。 這是因為比特幣密碼學可以視為一種客製化的數位簽章演算法。在數位簽章演算法中,公鑰由橢圓曲線密碼學公鑰的雜湊值組成,簽章由連接了橢圓曲線密碼學簽章的橢圓曲線密碼學公鑰組成。而驗證演算法涉及用橢圓曲線密碼學公鑰雜湊值(作為公鑰提供)來檢查簽章中的橢圓曲線密碼學公鑰,然後用橢圓曲線密碼學公鑰來驗證橢圓曲線密碼學簽章。 +2. 技術上來說,前 11 個區塊的中位數。 +3. 在內部,2 和「CHARLIE」都是數字 [fn3](#notes),後者以高位元組在前基數 256 表示。 數字至少可以為 0,最多可以為 2256-1。 + +### 衍生閱讀 {#further-reading} + +1. [內在價值](http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/) +2. [智慧型資產](https://en.bitcoin.it/wiki/Smart_Property) +3. [智慧型合約](https://en.bitcoin.it/wiki/Contracts) +4. [B-money](http://www.weidai.com/bmoney.txt) +5. [可重複使用之工作量證明](https://nakamotoinstitute.org/finney/rpow/) +6. [利用所有者權限確保財產權](https://nakamotoinstitute.org/secure-property-titles/) +7. [比特幣白皮書](http://bitcoin.org/bitcoin.pdf) +8. [域名幣](https://namecoin.org/) +9. [Zooko 三角](https://wikipedia.org/wiki/Zooko's_triangle) +10. [彩色幣白皮書](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit) +11. [萬事達幣白皮書](https://github.com/mastercoin-MSC/spec) +12. [去中心化自治組織,Bitcoin Magazine](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/) +13. [簡單支付驗證](https://en.bitcoin.it/wiki/Scalability#Simplified_payment_verification) +14. [默克爾樹](https://wikipedia.org/wiki/Merkle_tree) +15. [帕特里夏樹](https://wikipedia.org/wiki/Patricia_tree) +16. [GHOST](https://eprint.iacr.org/2013/881.pdf) +17. [StorJ 及自治代理,Jeff Garzik](http://garzikrants.blogspot.ca/2013/01/storj-and-bitcoin-autonomous-agents.html) +18. [Mike Hearn 在圖靈節談論智慧型資產](https://www.youtube.com/watch?v=MVyv4t0OKe4) +19. [以太坊遞迴長度前綴](https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP) +20. [以太坊默克爾帕特里夏樹](https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-Patricia-Tree) +21. [Peter Todd 談論默克爾求和樹](https://web.archive.org/web/20140623061815/http://sourceforge.net/p/bitcoin/mailman/message/31709140/) + +_有關白皮書的歷史記錄,請參閱[此維基](https://github.com/ethereum/wiki/blob/old-before-deleting-all-files-go-to-wiki-wiki-instead/old-whitepaper-for-historical-reference.md)。_ + +_與許多社群驅動的開源軟體專案一樣,以太坊自最初誕生以來一直在不斷發展。 來學習更多最新以太坊發展及多年來之網路協議變動, 我們推薦你詳閱此[指南簡介](/learn/)._ diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/bridges/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/bridges/index.md new file mode 100644 index 00000000000..5c4cb94ccef --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/bridges/index.md @@ -0,0 +1,156 @@ +--- +title: 跨鏈橋 +description: 給開發者的跨鏈橋概述 +lang: zh-tw +--- + +隨著 Layer 1 區塊鏈 和 Layer 2 網路[擴容](/developers/docs/scaling/) 解決方案的激增,以及越來越多的去中心化應用程式需要跨鏈,跨鏈通訊和資產轉移需求已成為網路基礎設施的重要組成部分。 存在不同類型的跨鏈橋就是為了幫助解決這種需求。 + +## 為什麼需要跨鏈橋? {#need-for-bridges} + +跨鏈橋是一條負責在不同區塊鏈之間傳遞「訊息」的橋。 它連結不同的區塊鏈,幫助不同區塊鏈上的數位資產與資料進行互動。 + +每一個區塊鏈的運行都是各自獨立的,有其自身的規則、共識機制、原生代幣以及部署其上的智慧型合約。這意味著在自身的設計上每一個區塊鏈無法將內部的數位資產或儲存資料跨鏈轉移到另一個區塊鏈上。 儘管一個區塊鏈可以不斷發展並豐富自身內部的生態系,它始終缺乏連結不同區塊鏈、跨鏈共同運作的能力。 + +跨鏈橋有助於打破這些藩籬,整合各自孤立的區塊鏈生態系為一體。 它們在區塊鏈之間建立了一條傳輸路線,讓代幣、資訊、任意數據甚至 [智能合約](/developers/docs/smart-contracts/) 調用都可以從一條區塊鏈轉移到另一條。 + +## 跨鏈橋的好處 {#benefits-of-bridges} + +區塊鏈橋最重要的好處是允許不同的區塊鏈進行資料交換與跨鏈資產的轉移。 + +想像每一個區塊鏈都是一塊被海洋分隔開的大陸,不同的大陸有各自不同的資源,如果能將這些大陸的優勢結合起來,就可以創造一個繁榮的生態圈。同樣地,每一個區塊鏈都有各自的優勢與限制、在體系與應用程式的建構上都有其獨特的取捨(如重視速度、吞吐量、或安全成本等)。 跨鏈橋也同樣能將不同區塊鏈的優勢整合起來,幫助彼此有效運用各自的優勢,打造一個繁榮的生態圈。 + +對於開發者,鏈橋可以實現以下功能: + +- 跨鏈傳輸任何資料、資訊和資產。 +- 解鎖協議的新功能和應用場景,因為鏈橋擴展了協議可以提供的設計空間。 例如,最初部署在以太坊主網路上用於提供流動性礦池的協議,可以為所有相容於以太坊虛擬機的鏈提供流動資金池。 +- 可以利用不同區塊鏈的優勢的機會。 例如,開發者可以透過將去中心化應用程式部署在多個磁碟區上來享受不同二層網路解決方案帶來的較低費用,而側鍊和使用者可以在它們之間建立鏈橋。 +- 不同區塊鏈生態系統的開發者之間相互協作,建構新產品。 +- 吸引來自不同生態系統的使用者和社群使用他們的去中心化應用程式。 + +## 跨鏈橋如何運作? {#how-do-bridges-work} + +雖然 [types of bridge designs](https://li.fi/knowledge-hub/blockchain-bridges-and-classification/) 多種多樣,但以下三種方便資產跨鏈轉移的方法脫穎而出: + +- **Lock and mint – 鎖定源鏈上的資產並在目標鏈上鑄幣。 +- **Burn and mint –** 銷毀源鏈上的資產並在目標鏈上鑄幣。 +- **Atomic swaps –** 透過第三方將源鏈上的資產與目標鏈上的資產交換。 + +## 跨鏈橋的種類 {#bridge-types} + +鏈橋通常可以分為以下幾類之一: + +- **Native bridges –** 這些鏈橋通常用於加強特定區塊鏈上的流動性,使用戶更容易將資金轉移到生態系統。 例如,[Arbitrum Bridge](https://bridge.arbitrum.io/) 的目的就是為了方便用戶從以太坊主網橋接到 Arbitrum。 其他此鏈類橋包括 Polygon PoS 鏈橋、 +Optimism Gateway 等。 + + - ** 基於驗證者或預言機的鏈橋 –** 這些鏈橋依賴外部驗證者群組或預言機來驗證跨鏈轉移。 例如:Multichain 與 Across。 +- ** 通用資訊傳遞鏈橋 – 這些鏈橋可以跨鏈傳輸資產、資訊和任意資料。 舉例:Axelar, LayerZero 和 Nomad. + + - ** 流動性網路 –** 這些鏈橋主要是透過原子交換將資產從一條鏈轉移到另一條鏈。 一般來講,它們不支援跨鏈訊息傳遞。 例如:Connext 與 Hop。 + + + +## 權衡利弊 {#trade-offs} + +沒有完美的鏈橋解決方案。 有的只是為了實現目的而進行的權衡利弊。 開發者和使用者可以根據以下因素評估鏈橋: + +- ** 安全性 –** 誰來驗證系統? 通常,由外部驗證者保護的鏈橋不如由區塊鏈驗證者在本地保護的鏈橋安全。 +- ** 便利性 –** 完成一筆交易需要多長時間,使用者需要簽署多少筆交易? 對於開發者來說,整合一個鏈橋需要多長時間,這個過程有多複雜? +- ** 連結性 –** 一個鏈橋可以連接哪些不同的目標鏈(捲疊、側鏈、其他一層網路區塊鏈等),整合一條新區塊鏈有多難? +- ** 傳遞更複雜數據的能力 –** 鏈橋能夠跨鏈傳輸訊息和更複雜的任意數據,還是只支援跨鏈資產轉移? +- ** 成本效益 –** 透過鏈橋跨鏈轉移資產的成本是多少? 通常情況下,鏈橋收取固定或變動的費用,具體取決於燃料成本和特定路線的流動性。 根據確保鏈橋安全所需的資本來評估鏈橋的成本效益也是至關重要的。 + +在較高層面上,鏈橋可分為需要信任鏈橋和去信任鏈橋。 + +- ** 需信任鏈橋 –** 需信任鏈橋由外部驗證。 它們使用一組外部驗證者(具有多重簽章的聯盟、多方運算系統、預言機網路)跨鏈發送資料。 因此,它們可以提供出色的連通性,並完全支援跨鏈通用資訊傳遞。 在速度和成本效益方面它們通常也表現良好。 但這些是以安全性為代價的,因為使用者必須依賴鏈橋的安全性。 +- ** 去信任 –** 這類鏈橋依靠它們連接的區塊鏈及其驗證者來傳輸資訊和代幣。 它們是 “去信任” 的,因為它們沒有增加新的信任假設(區塊鏈除外)。 因此,我們認為去信任鏈橋比可信任鏈橋更安全。 + +為了根據其他因素評估去信任鏈橋,我們須將其分為通用資訊傳遞鏈橋和流動性網路。 + +- ** 通用資訊傳遞鏈橋 –** 這些鏈橋在安全性和跨鏈傳輸更複雜資料的能力方面表現卓越。 通常,它們還具有良好的成本效益。 然而,這些優點通常以輕客戶端鏈橋(例如 IBC)的連通性以及使用欺詐證明的樂觀鏈橋(例如 Nomad)的速度劣勢作為代價。 +- ** 流動性網路 –** 這些鏈橋使用原子交換轉移資產,並且是本地驗證系統 (即,它們使用底層區塊鏈的驗證者驗證交易)。 因此,它們在安全性和速度方面表現出色。 此外,流動性網路具有良好的成本效益和良好的連結性。 然而,最大的折衷之處是它們無法傳遞更複雜的資料 — 因為它們不支援跨鏈訊息傳遞。 + + + +## 跨鏈橋的風險 {#risk-with-bridges} + +去中心化金融領域中 最大的三次駭客攻擊 < 0 > 都是由鏈橋造成的,而且鏈橋目前仍處於開發階段早期。 使用任何鏈橋都有以下風險: + +- ** 智能合約風險–** 雖然許多鏈橋已經成功通過了審計,但只需智能合約中的一個缺陷就會使資產暴露在黑客攻擊中(例如:[Solana 的Wormhole 鏈橋 ](https://rekt.news/wormhole-rekt/))。 +- ** 系統性金融風險 ** – 許多鏈橋使用包裝資產在新的鏈上鑄造規範化的原始資產。 這使生態系統面臨系統性風險,正如我們所看到的那樣,包裝代幣遭到利用。 +- **交易對手風險 –** 有些鏈橋採用可信任設計,這要求使用者依靠一種假設,即驗證者不會串通起來竊取使用者的資金。 使用者需要信任這些第三方參與者,這使他們面臨一些風險,例如跑路、審查和其他惡意活動。 +- ** 未解決的問題–** 考慮到鏈橋處於發展階段初期,還有許多關於鏈橋在不同市場條件下如何表現的問題都尚未解決,如網絡擁塞期和在發生網絡級攻擊 或狀態回滾等不可預見的事件時。 這種不確定性帶來了一定的風險,且風險程度目前仍未知。 + + + +## 去中心化應用程式如何使用鏈橋? {#how-can-dapps-use-bridges} + +以下介紹一些實際應用,在這些應用中,開發者可以考慮鏈橋並讓他們的去中心化應用程式跨鏈: + + + +### 整合橋接 {#integrating-bridges} + +對於開發者來說,有很多方法可以添加對鏈橋的支援: + +1. **建立自己的鏈橋 –** 建立安全可靠的鏈橋並不容易,特別是在選擇進一步將信任最小化的方式時。 此外,還需要與可擴展性和互通性研究相關的多年經驗和技術專長。 另外,還需要一支親力親為的團隊來維護鏈橋,並吸引足夠的流動性使其可行。 + +2. ** 向用戶展示多種鏈橋選項 –** 很多 [ 去中心化應用程式 ](/developers/docs/dapps/) 要求用戶擁有原生代幣才能與它們互動。 為了使用戶能夠訪問他們的代幣,去中心化應用程式在其網站上提供了不同的鏈橋選項。 然而,這種方法是權宜之計,因為它使用戶離開去中心化應用程式介面但仍需要用戶與其他去中心化應用程式和鏈橋互動。 這是一種繁瑣的上手體驗,會增加出錯的範圍。 + +3. ** 整合一個鏈橋 – 此解決方案不需要去中心化應用程式將使用者傳送到外部鏈橋和去中心化交易所介面。 這讓去中心化應用程式能夠改善用戶的上手體驗。 然而,這種方法有其局限性:

+ + - 鏈橋的評估和維護既困難又耗時。 + - 選用一個鏈橋將造成單點故障和依賴性。 + - 去中心化應用程式受限於鏈橋的能力。 + - 光有鏈橋可能還不夠。 去中心化應用程式可能需要去中心化交易所提供更多功能,例如跨鏈交換。 + +4. ** 整合多個鏈橋 –** 此解決方案解決了許多與整合單一鏈橋相關的問題。 然而,它也有局限性,因為整合多個鏈橋會消耗資源,並為開發者帶來技術和通訊開銷 — 這是加密貨幣領域最稀缺的資源。 + +5. ** 整合鏈橋聚合器 –** 去中心化應用程式另一個選擇是整合鏈橋聚合解決方案,使它們能夠存取多個鏈橋。 鏈橋聚合器繼承了所有鏈橋的優點,因此不受任何單一鏈橋能力的限制。 值得注意的是,鏈橋聚合器通常維護鏈橋集成,這使去中心化應用程式避免了管控鏈橋集成技術和操作方面的麻煩。 + +儘管如此,鏈橋聚合器也有其限制。 比如說,雖然它們可以提供較多的鏈橋選擇,但除了聚合器平台上提供的鏈橋外,市場上通常還有更多的鏈橋。 此外,像鏈橋一樣,鏈橋聚合器也面臨智慧合約和技術風險(更多的智慧合約 = 更多的風險)。 + +如果去中心化應用程式規劃整合鏈橋或聚合器,那麼根據整合的深度會有不同的選擇。 例如,如果只是進行前端整合以改善用戶上手體驗,去中心化應用程式將整合小組件。 然而,如果整合是為了探索更深層的跨鏈策略,如質押、流動性礦池等,去中心化應用程式就整合軟體開發工具包或應用程式介面。 + + + +### 在多條鏈上部署去中心化應用程式 {#deploying-a-dapp-on-multiple-chains} + +要在多條鏈上部署去中心化應用程序,開發者可以使用 [Alchemy](https://www.alchemy.com/)、[ 安全帽](https://hardhat.org/)、[Truffle](https://trufflesuite.com/)、[Moralis](https://moralis.io/) 等開發平台。 這些平台通常提供可組合的插件,能夠支援去中心化應用程式跨鏈。 例如,開發者可以使用 [ 安全帽部署外掛程式 ](https://github.com/wighawag/hardhat-deploy) 提供的確定性部署代理程式。 + + + +#### 範例: + +- [如何建立跨鏈去中心化應用程式](https://moralis.io/how-to-build-cross-chain-dapps/) +- [建構跨鏈非同質化代幣市場](https://youtu.be/WZWCzsB1xUE) +- [Moralis:建立跨鏈非同質化代幣去中心化應用程式](https://www.youtube.com/watch?v=ehv70kE1QYo) + + + +### 監控跨鏈合約活動 {#monitoring-contract-activity-across-chains} + +要監控跨鏈合約活動,開發者可以使用子圖和 Tenderly 等開發者平台即時觀察智能合約。 這類平台上還有一些工具,提供更強大的跨鏈活動資料監控功能,例如,檢查有沒有 [合約觸發的事件](https://docs.soliditylang.org/en/v0.8.14/contracts.html? highlight=events#events) 等。 + + + +#### 工具 + +- [圖表](https://thegraph.com/en/) +- [Tenderly](https://tenderly.co/) + + + +## 延伸閱讀 {#further-reading} + +- [ 區塊鏈鏈橋接 ](/bridges/) — ethereum.org +- [ 區塊鏈鏈橋:建構加密網路的網路 ](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) 2021 年 9 月 8 日 - Dmitriy Berenzon +- [ 互通性的三難困境 ](https://blog.connext.network/the-interoperability-trilemma-657c2cf69f17) 2021 年 10 月 1 日 – Arjun Bhuptani +- [ 群集:可信任鏈橋與信任最小化鏈橋如何打造多鏈格局 ](https://blog.celestia.org/clusters/) 2021 年 10 月 4 日 – Mustafa Al-Bassam +- [LI.FI:有了鏈橋,信任就是一種範圍 ](https://blog.li.fi/li-fi-with-bridges-trust-is-a-spectrum-354cd5a1a6d8) 2022 年 4 月 28 日 – Arjun Chand + +此外,以下是 [James Prestwich](https://twitter.com/_prestwich) 的一些有頗有見解的講解,可以幫助我們更深入地理解鏈橋: + +- [建造鏈橋,而非建造有圍牆的花園](https://youtu.be/ZQJWMiX4hT0) +- [破壞鏈橋](https://youtu.be/b0mC-ZqN8Oo) +- [為何鏈橋在銷毀?](https://youtu.be/c7cm2kd20j8) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/blockchain-data-storage-strategies/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/blockchain-data-storage-strategies/index.md new file mode 100644 index 00000000000..734e672f1eb --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/blockchain-data-storage-strategies/index.md @@ -0,0 +1,118 @@ +--- +title: 區塊鏈資料儲存策略 +description: 有幾種方法透過區塊鏈儲存資料 此文章將會比較幾種儲存策略,成本、權衡以及安全適用的條件。 +lang: zh-tw +--- + +儲存資料的方法有幾種,直接上鏈儲存或是以某種被鏈保護的方式儲存: + +- EIP-4844 blobs +- Calldata +- 鏈下與L1的機制 +- 合約“程式碼” +- 事件 +- EVM 儲存 + +依據幾項指標來選擇使用什麼方法 + +- 資訊的來源 Calldata裡的資訊是無法直接從區塊鏈上傳來 +- 資訊的目的地 Calldata 只存在交易初建立之始 Events 在鏈上無法取得 +- 大家願意忍受多少麻煩呢? 全方位的節點可以比網頁程式跑的light client做更多的處理。 +- 讓所有的節點可以很簡單的獲得資訊是必要的嗎? +- 安全必要條件 + +## 安全必要條件{#security-requirements} + +總的來說,資訊安全由三個屬性構成: + +- _保密性_,沒有被授權的單位是無法讀取資訊的。 這在很多案例中是很重要的,但不是在這。 _在區塊鏈上沒有秘密_。 區塊鏈行得通是因為任何人都可以驗證交易狀態,所以無法直接用來儲存秘密, 有幾個方法可以在鏈上儲存機敏資料,但是都必須依賴一些鏈下的元件,例如:至少一把密鑰, + +- _完整性_,資訊正確,無法被未授權的單位或未授權的方法改變,例如,轉帳 [ERC-20 tokens](https://eips.ethereum.org/EIPS/eip-20#events) 不發`Transfer` event。 在區塊鏈上,為了確保完整性,每個節點都會驗證每個狀態的改變。 + +- _可用性_,任何被授權的單位皆可取得資訊, 在鏈上,通常為了達到在所有 [full node](https://ethereum.org/developers/docs/nodes-and-clients#full-node)上可以獲得資訊可以獲得資訊, + +不同的解決方案都有優秀的完整性,因為hashes 都會上到L1上。 而且,他們有各自的可用性保證。 + +## 先決條件 {#prerequisites} + +你應該對 [區塊鏈基礎](/developers/docs/intro-to-ethereum/) 有良好的理解, 同時也建議讀者熟悉[blocks](/developers/docs/blocks/), [transactions](/developers/docs/transactions/) ,和相關的主題。 + +## EIP-4844 blobs {#eip-4844-blobs} + +從 [坎昆升級](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/beacon-chain.md) 開始,以太坊納入了 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844),讓以太坊上的資料 blobs可以存在一小段時間(大約 [18 天](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/p2p-interface.md#configuration))。 儘管是相同的機制,Blobs根據[execution gas](/developers/docs/gas) 有不同的計價, 這是一個發布暫時性資料的便宜方法。 + +主要的EIP-4844 blobs應用場景是 rollups 發布發交易。 [Optimistic rollups](/developers/docs/scaling/optimistic-rollups) 需要發布交易到鏈上, 這些交易在[挑戰期間](https://docs.optimism.io/connect/resources/glossary#challenge-period) 都必須是讓所有人可得,讓[validators](https://docs.optimism.io/connect/resources/glossary#validator) 把 [sequencer](https://docs.optimism.io/connect/resources/glossary#sequencer) 在rollup時發布的state root錯誤有機會做修正。 + +一旦挑戰期過了而且state root 也已經進入最終狀態,最後獲得這些交易的方法是複製鏈的現有狀態。 只需要少數的處理,從鏈的節點上也可以取得這個狀態, 交易資訊仍應該存在其他地方,像是 [區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers),但不需要對以太坊的抗審查付費。 + +[Zero-knowledge rollups](/developers/docs/scaling/zk-rollups/#data-availability) 也會發布交易資訊讓其他的節點去複製現有的狀態以及有效性證明,但這也只是在短時間內可以取得。 + +EIP-4844 寫入的費用大約每byte 1wei (10-18 ETH),相較於 [每筆交易21000 execution gas基本交易費用,包含blobs 資料寫入、花費](https://eth.blockscout.com/tx/0xf6cfaf0431c73dd1d96369a5e6707d64f463ccf477a4131265397f1d81466929?tab=index) 微乎其微可忽略不計。 可以從此查看目前EIP-4844 的價格[blobscan.com](https://blobscan.com/blocks)。 + +Rollups常見的blobs 發布地址 + +| Rollup | Mailbox address | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | +| [Optimism](https://www.optimism.io/) | [`0xFF00000000000000000000000000000000000010`](https://blobscan.com/address/0xFF00000000000000000000000000000000000010) | +| [Arbitrum](https://arbitrum.io/) | [`0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6`](https://blobscan.com/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6) | +| [Base](https://base.org/) | [`0xFF00000000000000000000000000000000008453`](https://blobscan.com/address/0xFF00000000000000000000000000000000008453) | + +## Calldata {#calldata} + +Calldata 是交易中一起發送的bytes中的一部分, 將區塊鏈上的永久紀錄儲存於包含這筆交易的區塊之中。 + +這是在區塊鏈上儲存永久資料最經濟的方法, 每byte的不是4 execution gas(假設是0 byte) 就是 16 gas(其他數字). 一般來說資料是被壓縮過的,每個byte的價格會差不多,每byte平均花費15.95gas。 + +當寫入價格在12 gwei/gas與2300 $/ETH時,每kilobyte 約45美分, 因為這是在EIP-4844出現前最便宜的rollups 儲存交易資訊的方式,這些資訊用來提供[錯誤挑戰](https://docs.optimism.io/stack/protocol/overview#fault-proofs),但是不能直接從鏈上取得。 + +以下是常見的rollups 發布交易時使用的地址: + +| Rollup | Mailbox address | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | +| [Optimism](https://www.optimism.io/) | [`0xFF00000000000000000000000000000000000010`](https://eth.blockscout.com/address/0xFF00000000000000000000000000000000000010) | +| [Arbitrum](https://arbitrum.io/) | [`0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6`](https://eth.blockscout.com/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6) | +| [Base](https://base.org/) | [`0xFF00000000000000000000000000000000008453`](https://eth.blockscout.com/address/0xFF00000000000000000000000000000000008453) | + +## 鏈下與L1 的機制 {#offchain-with-l1-mechs} + +根據你對安全的取捨,可以將資料放在別處並運用機制確保資料可取得, 需要具備以下兩個條件才可以達成: + +1. 發布[hash](https://en.wikipedia.org/wiki/Cryptographic_hash_function) 到鏈上,叫做_input commitment_, 這是單個 32-byte 的字,不是很貴, 只要輸入的承諾是確實存在的,完整性就會被確保,因為不可能找到其他資料會有相同的hash, 因此,若提供錯誤的資料,會馬上被發現。 + +2. 有個確保資料可取得性的機制, 舉例來說,在 [Redstone](https://redstone.xyz/docs/what-is-redstone)任何節點都可以提交資料可取得的挑戰, 若sequencer沒有在鏈上即時回應,輸入的commitment就會被丟棄,因此會認爲這些資訊是從來沒有發布過的。 + +在Optimistic rollup上這樣的機制是可以被接受的,因為我們已經仰賴最少有一個對state root誠實的驗證者, 這個誠實的驗證者必須確認有資料去處理區塊,並且當在鏈下無法得資料時發起資料可取得的挑戰, 這種Optimistic rollup稱為[plasma](/developers/docs/scaling/plasma/)。 + +## 合約程式碼 {#contract-code} + +資訊只需要寫入一次,不會被覆寫,並可從鏈上取得且要作為合約程式碼儲存, 意味著我們用資料創造了“智慧合約”,並用 [`EXTCODECOPY`](https://www.evm.codes/#3c?fork=shanghai) 讀取資訊, 優點是複製程式碼相對便宜。 + +除了memory擴展的花費, `EXTCODECOPY`第一次讀取合約需要花2600 gas(當他還是”cold"的狀態),之後複製相同的合約需要100gas再加上每32 byte 3 gas, 相較於calldata,每byte花費 15.95,從一開始就節省了約200 bytes。 基於[擴展記憶體花費的公式](https://www.evm.codes/about#memoryexpansion),如果你不需要超過4MB 的記憶體,記憶體擴展的花費會少於用增加calldata的方式。 + +當然,這只是 _read_資料的花費, 建立合約需花費約32,000 gas + 200 gas/byte, 這是當不同的交易要多次讀取相同資料唯一經濟的方法。 + +合約程式碼可以是無意義的,只要不是`0xEF`開頭, 嚴格限制 `0xEF`開頭的合約代表 [ethereum object format](https://notes.ethereum.org/@ipsilon/evm-object-format-overview)。 + +## Events {#events} + +[Events](https://docs.alchemy.com/docs/solidity-events)是被合約觸發的,可以被鏈下軟體讀取, +好處是鏈下的程式碼可以監聽事件, 花費是用 [gas](https://www.evm.codes/#a0?fork=cancun) 計,375 加上每byte 8 gas。 當 12 gwei/gas、 ETH價格為2300美元時,每kilobyte 約1美分+22美分 + +## Storage {#storage} + +智慧合約有進入 [persistent storage](https://docs.alchemy.com/docs/smart-contract-storage-layout#what-is-storage-memory)的權利, 但是很貴, 寫入一個32byte原本空著的storage slot 會 [花費 22,100 gas](https://www.evm.codes/#55?fork=cancun), 當 12 gwei/gas、 ETH價格為2300美金時,每個操作大約是61美分或每kilobyte$19.5美元。 + +這是以太坊最貴的儲存方式。 + +## 總結 {#summary} + +下表列出了各種方式的優點和缺點: + +| 儲存方式 | 資料來源 | 可取得性保證 | 鏈上可取得性 | 其他限制 | +| -------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------- | ---------------------- | +| EIP-4844 blobs | 鏈下 | 以太坊保證[~約18 天](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/p2p-interface.md#configuration) | 只可取得Hash | | +| Calldata | 鏈下 | 以太坊永久保證(部分區塊鏈) | 只有在當寫入合約當下的交易中可取得 | | +| 鏈下與L1的機制 | 鏈下 | 在挑戰期內"One honest verifier" 保證 | 只有Hash | 只有在挑戰期間,由挑戰機制保護 | +| 合約程式碼 | 鏈上或鏈下 | 以太坊永久保證(部分區塊鏈) | 是 | 寫入“隨機”的地址,但不能是`0xEF`開頭 | +| 事件 | 鏈上 | 以太坊永久保證(部分區塊鏈) | 否 | | +| 儲存 | 鏈上 | 以太坊永久保證 (部分區塊鏈和目前的狀態直到被覆寫) | 是 | | diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/index.md new file mode 100644 index 00000000000..622c993994c --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/index.md @@ -0,0 +1,84 @@ +--- +title: 資料可用性 +description: 以太坊中的資料可得性問題與解決方案概覽 +lang: zh-tw +--- + +「不輕易相信,而是去驗證。」是以太坊盛行的座右銘, 意為你的節點可以通過執行從同行那裡接收的區塊中的所有交易,獨立驗證接收到的信息是否正確,以確保所提出的變更與節點獨立計算的變更完全相符, 這意味著節點不需要信任區塊的發送者是否為可信的, 如有任何資料缺失則這無法實現。 + +**資料可得性**指的是用戶可以對所需資料的可得性有多大的信心,以驗證該區塊的數據是否真的對所有網絡參與者皆可用。 相對於以太坊第一層的完整節點來說這很簡單;完整節點下載每個區塊中的所有資料副本 - 資料_必須_可用於下載。 有缺失資料的區塊將被捨棄,不會被添加到區塊鏈上。 這就是「鏈上資料可得性」,是大一統區塊鏈(相較於充滿了擴容方案如 rollups 的不太一統的區塊鏈)的功能之一。 完整節點不會被騙接受無效的交易,因為它們會下載並執行每個交易。 然而,對於模組化的區塊鏈、L2 rollups 和light clients,資料可用性的情境更為複雜,需要一些更為精密的驗證程序。 + +## 先備知識 {#prerequisites} + +讀者應該對於區塊鏈具備足夠的基本知識,特別是共識機制。 本頁面還假設讀者熟悉區塊、交易、節點、擴展解決方案以及其他相關主題。 + +## 資料可得性問題 {#the-data-availability-problem} + +資料可得性問題是,需要向整個網路證明正在添加到區塊鏈的某些交易資料的總結形式確實代表一組有效的交易,但不要求所有的節點都下載所有的資料。 為了獨立地驗證區塊,所有交易的資料是必要的,但要求所有節點都要下載全部的交易資料是個擴容的瓶頸。 因此,資料可得性問題的解決方案是希望向不下載、不儲存資料的網路參與者,提供足夠的保證來代表所有交易的資料是可得、可供取用於驗證的。 + +[輕節點](/developers/docs/nodes-and-clients/light-clients)和[L2 卷(rollups)](/developers/docs/scaling)就是需要強力的資料可得性保證、但不會自行下載與處理交易資料的經典案例。 畢竟,不下載交易資料才能稱作「輕」節點,而卷(rollups)才能有效的擴容。 + +資料可得性問題也對未來的[無狀態](/roadmap/statelessness)以太坊客戶端來說至關重要,這樣他們才不需要下載及儲存狀態的資料來驗證區塊。 無狀態的客戶端仍需要確信資料在_某處_是可取得的,而且有被正確地處理。 + +## 資料可得性解決方案 {#data-availability-solutions} + +### 資料可得性採樣(DAS) {#data-availability-sampling} + +資料可得性採樣(DAS)是指讓網路能檢查資料是可取得的,但同時不在任何的獨立節點上加諸太多要求。 每個節點(包含沒有質押的節點)下載所有交易資料的隨機一小部分, 若能成功地下載到採樣,我們就能高度相信所有資料都是可得的。 這要仰賴於糾刪碼,把一組原本的資料塞入冗余的資訊(其原理是把資料套上稱為_多項式_的函式(function),然後在該多項式上找出其他點來作為冗余的資訊)。 這讓原本的資料在必要時,可以透過冗余的資料來還原。 這種資料處理方式的結果是,如果有_任何_原本的資料不可得,那擴增資料的_一半_就也會遺失。 而每個節點下載的資料採樣樹可以被調整,來確保如果真的只有不到一半的資料是可得的,那每個客戶端至少會有一個資料片段是缺失的。 + +資料可得性採樣可以用以確保在[Full Danksharding](/roadmap/danksharding/#what-is-danksharding)上線後,卷的交易處理者需要讓交易的資料是可得的。 以太坊節點會隨機地向 blob 中的資料採樣,用前述提到的糾刪碼來確保所有資料真的都存在。 同樣的技術也可以用來確保區塊製造者會讓所有的資料都是可得的,來保障輕節點的安全性。 同樣的,在[區塊提議、製造者分離(PBS)](/roadmap/pbs)中,只有區塊製造者需要處理整個區塊,驗證者(提議者)只要驗證資料可得性的採樣。 + +### 資料可得性委員會 {#data-availability-committees} + +Data Availability Committees (DACs) are trusted parties that provide, or attest to, data availability. DACs can be used instead of, [or in combination with](https://hackmd.io/@vbuterin/sharding_proposal#Why-not-use-just-committees-and-not-DAS) DAS. The security guarantees that come with committees depends on the specific set up. Ethereum uses randomly sampled subsets of validators to attest to data availability for light nodes, for example. + +DACs are also used by some validiums. The DAC is a trusted set of nodes that stores copies of data offline. The DAC is required to make the data available in the event of a dispute. Members of the DAC also publish on-chain attestations to prove that the said data is indeed available. Some validiums replace DACs with a proof-of-stake (PoS) validator system. Here, anyone can become a validator and store data off-chain. However, they must provide a “bond”, which is deposited in a smart contract. In the event of malicious behavior, such as the validator withholding data, the bond can be slashed. 權益證明資料可用性委員會在安全性方面明顯優於一般資料可用性委員,因為它們直接激勵誠實的行為。 + +## 資料可用性與輕節點 {#data-availability-and-light-nodes} + +[Light nodes](/developers/docs/nodes-and-clients/light-clients) need to validate the correctness of the block headers they receive without downloading the block data. 輕節點輕量化的代價就是無法像全節點一樣在本地獨立地重新執行交易以驗證區塊頭。 + +Ethereum light nodes trust random sets of 512 validators that have been assigned to a _sync committee_. 同步委員會充當數據可用性委員會,使用加密簽名向輕節點表明區塊頭中的數據是正確的。 同步委員會每天都會刷新。 Each block header alerts light nodes as to which validators to expect to sign off the _next_ block, so they can't be tricked into trusting a malicious group pretending to be the real sync-committee. + +However, what happens if an attacker somehow _does_ manage to pass a malicious block header to light clients and convince them that it was signed off by an honest sync-committee? 在這種情況下,攻擊者可能會添加無效的交易,而輕節點將盲目地接受它們,因為輕節點無法獨立驗證匯總在區塊頭中的所有狀態變化。 為了防止這種情況,輕節點可以使用詐欺證明。 + +詐欺證明的工作原理如下:全節點發現一個無效狀態轉換在網路上廣播時,可以快速產生證明已提議狀態轉換不可能源自給定一組交易的一小段數據,並把這段數據廣播到對等節點。 輕節點可以選取這些詐欺證明並用來丟棄有害的區塊頭,確保它們和全節點留在相同的誠實區塊鏈上。 + +這仰仗於全節點能夠存取完整的交易資料。 廣播有害區塊頭並且不提供交易資料的攻擊者可能能夠阻止全節點產生詐欺證明。 全節點也許可以發出關於有害區塊的警告,但沒有證據來證明它們的警告,因為沒有可用於產生證明據的數據! + +數據可用性採樣可以解決這個數據可用性問題。 輕節點下載完整狀態資料的小隨機片段,並使用這些樣本驗證完整資料集可用。 The actual likelihood of incorrectly assuming full data availability after downloading N random chunks can be calculated ([for 100 chunks the chance is 10^-30](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html), i.e. incredibly unlikely). + +Even in this scenario, attacks that withhold just a few bytes could feasibly go unnoticed by clients making random data requests. Erasure coding fixes this by reconstructing small missing pieces of data that can be used to check proposed state changes. A fraud proof could then be constructed using the reconstructed data, preventing light nodes from accepting bad headers. + +**Note:** DAS and fraud proofs have not yet been implemented for proof-of-stake Ethereum light clients, but they are on the roadmap, most likely taking the form of ZK-SNARK based proofs. Today's light clients rely on a form of DAC: they verify the identities of the sync-committee and then trust the signed block headers they receive. + +## Data availability and layer 2 rollups {#data-availability-and-layer-2-rollups} + +[Layer 2 scaling solutions](/layer-2/), such as [rollups](/glossary/#rollups), reduce transaction costs and increase Ethereum's throughput by processing transactions off-chain. Rollup transactions are compressed and posted on Ethereum in batches. Batches represent thousands of individual off-chain transactions in a single transaction on Ethereum. This reduces congestion on the base layer and reduces fees for users. + +However, it is only possible to trust the 'summary' transactions posted to Ethereum if the state change proposed can be independently verified and confirmed to be the result of applying all the individual off-chain transactions. If rollup operators do not make the transaction data available for this verification, then they could send incorrect data to Ethereum. + +[Optimistic rollups](/developers/docs/scaling/optimistic-rollups/) post compressed transaction data to Ethereum and wait for some amount of time (typically 7 days) to allow independent verifiers to check the data. If anyone identifies a problem, they can generate a fraud-proof and use it to challenge the rollup. This would cause the chain to roll back and omit the invalid block. 只有在數據可用時,才能實現這一點。 目前,樂觀卷疊有兩種方式將交易資料發佈到一層網路。 Some rollups make data permanently available as `CALLDATA` which lives permanently on-chain. With the implementation of EIP-4844, some rollups post their transaction data to cheaper blob storage instead. This is not permanent storage. Independent verifiers have to query the blobs and raise their challenges within ~18 days before the data is deleted from Ethereum layer-1. Data availability is only guaranteed by the Ethereum protocol for that short fixed window. After that, it becomes the responsibility of other entities in the Ethereum ecosystem. Any node can verify data availability using DAS, i.e. by downloading small, random samples of the blob data. + +[Zero-knowledge (ZK) rollups](/developers/docs/scaling/zk-rollups) don't need to post transaction data since [zero-knowledge validity proofs](/glossary/#zk-proof) guarantee the correctness of state transitions. However, data availability is still an issue because we can't guarantee the functionality of the ZK-rollup (or interact with it) without access to its state data. For example, users cannot know their balances if an operator withholds details about the rollup’s state. Also, they cannot perform state updates using information contained in a newly added block. + +## Data availability vs. data retrievability {#data-availability-vs-data-retrievability} + +Data availability is different from data retrievability. Data availability is the assurance that full nodes have been able to access and verify the full set of transactions associated with a specific block. It does not necessarily follow that the data is accessible forever. + +Data retrievability is the ability of nodes to retrieve _historical information_ from the blockchain. This historical data is not needed for verifying new blocks, it is only required for syncing full nodes from the genesis block or serving specific historical requests. + +核心以太坊協議主要關注數據可用性,而不是數據可檢索性。 資料可檢索性可以由第三方運行的少量存檔節點提供,也可以使用去中心化檔案儲存(例如 [入口網站)在網路上分散網路](https://www.ethportal.net/)。 + +## 延伸閱讀 {#further-reading} + +- [WTF is Data Availability?](https://medium.com/blockchain-capital-blog/wtf-is-data-availability-80c2c95ded0f) +- [What Is Data Availability?](https://coinmarketcap.com/alexandria/article/what-is-data-availability) +- [The Ethereum Off-Chain Data Availability Landscape](https://blog.celestia.org/ethereum-off-chain-data-availability-landscape/) +- [A primer on data availability checks](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html) +- [An explanation of the sharding + DAS proposal](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling) +- [A note on data availability and erasure coding](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding#can-an-attacker-not-circumvent-this-scheme-by-releasing-a-full-unavailable-block-but-then-only-releasing-individual-bits-of-data-as-clients-query-for-them) +- [Data availability committees.](https://medium.com/starkware/data-availability-e5564c416424) +- [Proof-of-stake data availability committees.](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [Solutions to the data retrievability problem](https://notes.ethereum.org/@vbuterin/data_sharding_roadmap#Who-would-store-historical-data-under-sharding) +- [Data Availability Or: How Rollups Learned To Stop Worrying And Love Ethereum](https://ethereum2077.substack.com/p/data-availability-in-ethereum-rollups) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/dex-design-best-practice/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/dex-design-best-practice/index.md new file mode 100644 index 00000000000..faa2c37a809 --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/dex-design-best-practice/index.md @@ -0,0 +1,220 @@ +--- +title: 去中心化交易所(DEX) 設計的最佳實踐 +description: 交換代幣的 UX/UI 設計決策指南 +lang: zh-tw +--- + +自 2018 年 Uniswap 推出以來,已經有數百個去中心化交易所(DEX) 在不同的區塊鏈上推出。 +其中許多去中心化交易所引入新的元素或增加自己的特色,但他們依然保有整體介面的一致性。 + +能做到這樣的原因之一,就是遵循 Jackob 法則(Jakob’s Law): + +> 使用者大多數時間在使用其他網站, 他們會更喜歡您的網站與其他已經很熟悉的網站以相同方式運作。 + +多虧有像 Uniswap、Pancakeswap 和 Sushiswap 這類型的早期創新者,DeFi 使用者對去中心化交易所(DEX)的樣貌有了共同的認知。 +因此,現在有了「最佳實踐」。 我們看到越來越多不同平台的設計逐漸標準化。 你可以將去中心化交易所的演變,看成一個大型的即時測試案例。 有用的設計被保留下來,不好的設計會被淘汰, 雖然應該要保有設計彈性,但去中心化交易所的設計應遵循某些規範。 + +這篇文章會提到 + +- 要引入什麼 +- 如何提升易用性 +- 如何進行有彈性的設計 + +所有範例線框圖都是基於真實案例,專為本文製作而成。 + +Figma 工具包就放在文末,歡迎用來加速您的線框圖設計! + +## 拆解去中心化交易所的基本設計要素 {#basic-anatomy-of-a-dex} + +UI 通常包含下列三種元素: + +1. 主介面 +2. 按鍵 +3. 資訊選單 + +![Generic DEX UI, showing the three main elements](./1.png) + +## 變化 {#variations} + +這將是本文的通用主題,但這三個元素有許多不同的組織方式。 資訊頁面的變化包含: + +- 位在按鍵上方 +- 位在按鍵下方 +- 隱藏在折疊區內 +- 或者是在預覽模式內 + +請注意: 雖然預覽模式不是必要的,但若主介面顯示的資訊非常少,那就必須使用預覽模式。 + +## 主介面的架構 {#structure-of-the-main-form} + +您可以在這個區塊選擇要交換的代幣。 這個元件是由一個輸入欄位與一個小型按鍵排列組成。 + +去中心化交易所會根據使用情境,通常會在這個上方或下方,顯示額外的說明文字。 + +![Input row, with a details row above and below](./2.png) + +## 變化 {#variations2} + +Two UI variations are shown here; one without any borders, creating a very open design, and one where the input row has a border, creating a focus on that element. + +![Two UI variations of the main form](./3.png) + +This basic structure allows **four key pieces of info** to be shown in the design: one in each corner. If there is only one top/bottom row, then there are only two spots. + +During the evolution of DeFi, lots of different things have been included here. + +## 需要包含的關鍵資訊 {#key-info-to-include} + +- 錢包餘額 +- Max button +- 等價法定貨幣 +- Price impact on the “received” amount + +在去中心化金融的早期,等價法定貨幣常常被忽略。 無論你正在構建任何類型的 Web3 項目,顯示等價法定貨幣都是至關重要的。 用戶仍然以本地貨幣進行思考。因此,爲了與真實世界的心理模型相匹配,等價法定貨幣應該包含在内。 + +在第二個欄位 (你選擇交換的目標代幣),你還可以透過計算輸入金額與預計輸出金額之間的差異,在法定貨幣金額旁包含價格影響。 這是一個相當實用的細節。 + +Percentage buttons (e.g. 25%, 50%, 75%) can be a useful feature, but they take up more space, add more call to actions, and add more mental load. Same with percentage sliders. Some of these UI decisions will depend on your brand and your user type. + +Extra details can be shown below the main form. As this type of info is mostly for pro users, it makes sense to either: + +- keep it as minimal as possible, or; +- hide it in an accordion panel + +![Details shown in the corners of that main form](./4.png) + +## Extra info to include {#extra-info-to-include} + +- 幣價 +- 滑點 +- Minimum received +- Expected output +- Price impact +- 燃料成本估算 +- 其他費用 +- Order routing + +Arguably, some of these details could be optional. + +Order routing is interesting, but doesn’t make much difference to most users. + +Some other details are simply restating the same thing in different ways. For example “minimum received” and “slippage” are two sides of the same coin. If you have slippage set at 1%, then the minimum you can expect to receive = expected output-1%. Some UIs will show expected amount, minimum amount, and slippage… Which is useful but possibly overkill. + +Most users will leave default slippage anyway. + +“Price impact” is often shown in brackets next to the fiat equivalent in the “to” field. This is a great ux detail to add, but if it is shown here, does it really need to be shown again below? And then again on a preview screen? + +Many users (especially those swapping small amounts) will not care about these details; they will simply enter a number and hit swap. + +![Some details show the same thing](./5.png) + +Exactly what details are shown will depend on your audience and what feel you want the app to have. + +If you do include slippage tolerance in the details panel, you should also make it editable directly from here. This is a good example of an “accelerator”; a neat UX trick that can speed up experienced users’ flows, without impacting the general usability of the app. + +![Slippage can be controlled from the details panel](./6.png) + +It’s a good idea to think carefully about not just one specific piece of information on one screen, but about the entire flow through: +Entering numbers in Main Form → Scanning Details → Clicking to Preview Screen (if you have a preview screen). +Should the details panel be visible at all times, or does the user need to click it to expand? +Should you create friction by adding a preview screen? This forces the user to slow down and consider their trade, which can be useful. But do they want to see all the same info again? What is most useful to them at this point? + +## 設計選項 {#design-options} + +As mentioned, a lot of this comes down to your personal style +Who is your user? +What is your brand? +Do you want a “pro” interface showing every detail, or do you want to be minimalist? +Even if you’re aiming for the pro users who want all info possible, you should still remember Alan Cooper’s wise words: + +> No matter how beautiful, no matter how cool your interface, it would be better if there were less of it. + +### 結構 {#structure} + +- 代幣在左邊或是右邊 +- 2 行或 3 行 +- details above or below the button +- details expanded, minimized, or not shown + +### Component style {#component-style} + +- empty +- outlined +- filled + +From a pure UX point of view, UI style matters less than you think. Visual trends come and go in cycles, and a lot of preference is subjective. + +The easiest way to get a feel for this - and think about the various different configurations - is to take a look at some examples and then do some experimenting yourself. + +The included Figma kit contains empty, outlined and filled components. + +Take a look at the below examples to see different ways you can put it all together: + +![3 rows in a filled style](./7.png) + +![3 rows in a outlined style](./8.png) + +![2 rows in an empty style](./9.png) + +![3 rows in an outlined style, with a details panel](./10.png) + +![3 rows with the input row in an outlined style](./11.png) + +![2 rows in a filled style](./12.png) + +## But which side should the token go on? {#but-which-side-should-the-token-go-on} + +The bottom line is that it probably doesn’t make a huge difference to usability. There are a few things to bear in mind, however, which might sway you one way or the other. + +It’s been mildly interesting to see the fashion change with time. Uniswap initially had the token on the left, but has since moved it to the right. Sushiswap also made this change during a design upgrade. Most, but not all, protocols have followed suit. + +Financial convention traditionally puts the currency symbol before the number, e.g. $50, €50, £50, but we _say_ 50 dollars, 50 Euros, 50 pounds. + +對於一般用戶,特別是從左到右、從上到下閱讀的人,在右邊的代幣可能感覺更自然。 + +![A UI with tokens on the left](./13.png) + +Putting the token on the left and all the numbers on the right looks pleasingly symmetrical, which is a plus, but there is another downside to this layout. + +The law of proximity states that items that are close together are perceived as related. Accordingly, we want to place related items next to each other. The token balance is directly related to the token itself, and will change whenever a new token is selected. It therefore makes slightly more sense for the token balance to be next to the token select button. It could be moved underneath the token, but that breaks the symmetry of the layout. + +Ultimately, there are pluses and minuses for both options, but it is interesting how the trend appears to be towards token on the right. + +# 按鍵行為 {#button-behavior} + +Don’t have a separate button for Approve. Also don’t have a separate click for Approve. The user wants to Swap, so just say “swap” on the button and initiate the approval as the first step. A modal can show progress with a stepper, or a simple “tx 1 of 2 - approving” notification. + +![A UI with separate buttons for approve and swap](./14.png) + +![A UI with one button that says approve](./15.png) + +## Button as contextual help {#button-as-contextual-help} + +The button can do double duty as an alert! + +This is actually a fairly unusual design pattern outside of Web3, but has become standard within it. This is a good innovation as it saves space, and keeps attention focused. + +If the main action - SWAP - is unavailable due to an error, the reason why can be explained with the button, e.g.: + +- switch network +- 連結錢包 +- various errors + +The button can also be **mapped to the action** that needs to be performed. For example, if the user cannot swap because they are on the wrong network, the button should say “switch to Ethereum”, and when the user clicks on the button, it should switch the network to Ethereum. This speeds up the user flow significantly. + +![Key actions being initiated from the main CTA](./16.png) + +![Error message shown within the main CTA](./17.png) + +## Build your own with this figma file {#build-your-own-with-this-figma-file} + +Thanks to the hard work of multiple protocols, DEX design has improved a lot. We know what info the user needs, how we should show it, and how to make the flow as smooth as possible. +Hopefully this article provides a solid overview of the UX principles. + +If you want to experiment, please feel free to use the Figma wireframe kit. It is kept as simple as possible, but has enough flexibility to build the basic structure in various ways. + +[Figma wireframe kit](https://www.figma.com/community/file/1393606680816807382/dex-wireframes-kit) + +DeFi will continue to evolve, and there is always room for improvement. + +祝你好運! diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/heuristics-for-web3/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/heuristics-for-web3/index.md new file mode 100644 index 00000000000..dee361e060f --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/heuristics-for-web3/index.md @@ -0,0 +1,138 @@ +--- +title: 7 heuristics for Web3 interface design +description: Principles to improve the usability of Web3 +lang: zh-tw +--- + +可用性啓發法是廣泛的 “經驗法則”,你可以用其來衡量網站的可用性。 +這些啓發法是爲 Web3 量身定制的,并且應該與 Jakob Nielsen 的[介面設計的 10 條通用原則](https://www.nngroup.com/articles/ten-usability-heuristics/)一起使用。 + +## Seven usability heuristics for web3 {#seven-usability-heuristics-for-web3} + +1. Feedback follows action +2. Security and trust +3. The most important info is obvious +4. Understandable terminology +5. Actions are as short as possible +6. Network connections are visible and flexible +7. Control from the app, not the wallet + +## Definitions and examples {#definitions-and-examples} + +### 1. Feedback follows action {#feedback-follows-action} + +**It should be obvious when something has happened, or is happening.** + +Users decide on their next steps based on the outcome of their previous steps. Therefore it is essential that they remain informed about the system status. This is especially important in Web3 as transactions can sometimes take a short time to commit to the blockchain. If there is no feedback informing them to wait, users are unsure if anything has happened. + +**Tips:** + +- Inform the user via messaging, notifications, and other alerts. +- Communicate waiting times clearly. +- If an action is going to take longer than a few seconds, reassure the user with a timer or an animation to make them feel like something is happening. +- If there are multiple steps to a process, show each step. + +**Example:** +Showing each step involved in a transaction helps users know where they are in the process. Appropriate icons let the user know the status of their actions. + +![Informing the user about each step when swapping tokens](./Image1.png) + +### 2. Security and trust are baked in {#security-and-trust-are-backed-in} + +Security should be prioritized, and this should be emphasized for the user. +People care deeply about their data. Safety is often a primary concern for users, so it should be considered at all levels of the design. You should always be seeking to earn the trust of your users, but the way you do this can mean different things on different apps. It should not be an afterthought, but should be designed consciously throughout. Build trust throughout the user experience, including social channels and documentation, as well as the final UI. Things like the level of decentralization, the treasury multi-sig status, and whether the team is doxxed, all affect users' trust + +**Tips:** + +- List your audits proudly +- Get multiple audits +- Advertise any safety features that you designed +- Highlight possible risks, including underlying integrations +- Communicate complexity of strategies +- Consider non-UI issues that might affect your users' perception of safety + +**Example:** +Include your audits in the footer, at a prominent size. + +![Audits refernced in the website footer](./Image2.png) + +### 3 The most important info is obvious {#the-most-important-info-is-obvious} + +For complex systems, show only the most relevant data. Determine what is most important, and prioritize its display. +Too much information is overwhelming and users typically anchor on one piece of information when making decisions. In DeFi, this will probably be APR on yield apps and LTV on lending apps. + +**Tips:** + +- User research will uncover the most important metric +- Make the key info big, and the other details small and unobtrusive +- People don’t read, they scan; ensure your design is scannable + +**Example:** Large tokens in full color are easy to find when scanning. The APR is big and highlighted in an accent color. + +![The token and APR are easy to find](./Image3.png) + +### 4 Clear terminology {#clear-terminology} + +Terminology should be understandable and appropriate. +Technical jargon can be a huge blocker, because it requires the construction of a completely new mental model. Users are unable to relate the design to words, phrases and concepts they already know. Everything seems confusing and unfamiliar, and there is a steep learning curve before they can even attempt to use it. 用戶可能是出於省錢目的而接觸到去中心化金融的,而他們找到的卻是: 挖礦、礦池、質押、排放、賄賂、金庫、置物櫃、投票托管代幣、歸屬、時期、去中心化演算法、協議自有流動性… +Try to use simple terms that will be understood by the broadest group of people. Do not invent brand new terms just for your project. + +**Tips:** + +- Use simple and consistent terminology +- Use existing language as much as possible +- Don’t come up with your own terms +- Follow conventions as they appear +- Educate users as much as possible + +**Example:** +“Your rewards” is a broadly understood, neutral, term; not a new word made up for this project. The rewards are denominated in USD to match real world mental models, even if the rewards themselves are in another token. + +![Token rewards, displayed in U.S. dollars](./Image4.png) + +### 5 Actions are as short as possible {#actions-are-as-short-as-possible} + +Speed up the user’s interactions by grouping sub actions. +This may be done on the smart contract level, as well as the UI. 用戶不應該從系統的一部分移動到另一部分 - 或者完全離開系統 - 來完成一個常見的操作。 + +**Tips:** + +- Combine "Approve" with other actions where possible +- Bundle signing steps as close together as possible + +**Example:** Combining “add liquidity” and “stake” is a simple example of an accelerator that saves a user both time and gas. + +![Modal showing a switch to combine the deposit and stake actions](./Image5.png) + +### 6. Network connections are visible and flexible {#network-connections-are-visible-and-flexible} + +向用戶告知他們所連結的網路,並提供清晰的切換網路的快鍵。 +This is especially important on multichain apps. 當斷開連結或連結到不支持的網路時,應用程式的主要功能仍然應該可見。 + +**Tips:** + +- Show as much of the app as possible while disconnected +- Show which network the user is currently connected to +- Don’t make the user go to the wallet to change network +- If the app requires the user to switch network, prompt the action from the main call to action +- If the app contains markets or vaults for multiple networks, clearly state which set the user is currently looking at + +**例如:** 向用戶展示他們所連結的網路,並允許他們在應用程式欄中進行更改。 + +![Dropdown button showing the connected network](./Image6.png) + +### 7. Control from the app, not the wallet {#control-from-the-app-not-the-wallet} + +用戶介面應該告訴用戶他們需要知道的所有内容,並使他們能夠控制需要控制的一切。 +In Web3, there are actions you take in the UI, and actions you take in the wallet. Generally, you initiate an action in the UI, and then confirm it in the wallet. Users can feel uncomfortable if these two strands are not integrated carefully. + +**Tips:** + +- Communicate system status via feedback in the UI +- Keep a record of their history +- Provide links to block explorers for old transactions +- Provide shortcuts to change networks. + +**Example:** A subtle container shows the user what relevant tokens they have in their wallet, and the main CTA provides a shortcut to change the network. + +![Main CTA is prompting the user to switch network](./Image7.png) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/index.md new file mode 100644 index 00000000000..c5f9b5570aa --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/index.md @@ -0,0 +1,85 @@ +--- +title: Web3 中的設計和用戶體驗 +description: 介紹 Web3 領域和以太坊中的用戶體驗設計和研究 +lang: zh-tw +--- + +你不熟悉用以太坊進行設計嗎? 如果是的話,那麼這個地方你來對了。 以太坊社區中有很多介紹 Web3 的設計和研究資源。 你將學習一些核心概念,它們可能與你熟悉的其他應用程式設計不同。 + +需要先對 Web3 有更基本的瞭解嗎? 請瀏覽[**學習中心**](/learn/)。 + +## 從用戶研究開始 {#start-with-user-research} + +實用的介面設計勝過只是視覺上吸引人的設計, 還涉及到深入瞭解用戶需求、目標以及驅動因素。 因此,我們強烈建議所有設計師採用[**雙鑽石設計流程**](https://en.wikipedia.org/wiki/Double_Diamond_(design_process_model)),以確保其設計經過深思熟慮且有意為之。 + +- [Web3 需要更多用戶體驗研究人員和設計師](https://blog.akasha.org/akasha-conversations-9-web3-needs-more-ux-researchers-and-designers) - 當前設計成熟度概述 +- [在 Web3 中進行用戶體驗研究的簡明指南](https://uxplanet.org/a-complete-guide-to-ux-research-for-web-3-0-products-d6bead20ebb1) - 研究方法簡易指南 +- [Web3 中的設計決策](https://archive.devcon.org/archive/watch/6/data-empathy-how-to-approach-ux-decisions-in-web3/)定量分析與定性分析的差異概覽(影片, 6 min) +- [Web3 中擔任用戶體驗研究人員](https://medium.com/@georgia.rakusen/what-its-like-being-a-user-researcher-in-web3-6a4bcc096849) - Web3 中擔任用戶體驗研究人員的個人看法 + +## Web3 中的研究 {#research-in-web3} + +以下是一份可以幫助激發設計靈感和產品決策的精選清單: + +| 聚焦領域 | 姓名 | +|:----------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 加密貨幣入門 | [CRADL:加密貨幣中的用戶體驗](https://docs.google.com/presentation/d/1s2OPSH5sMJzxRYaJSSRTe8W2iIoZx0PseIV-WeZWD1s/edit?usp=sharing) | +| 加密貨幣入門 | [CRADL:加密貨幣入門](https://docs.google.com/presentation/d/1R9nFuzA-R6SxaGCKhoMbE4Vxe0JxQSTiHXind3LVq_w/edit?usp=sharing) | +| 加密貨幣入門 | [比特幣用戶體驗報告](https://github.com/patestevao/BitcoinUX-report/blob/master/report.md) | +| 加密貨幣入門 | [ConSensys:2023 年全球 Web3 認知度狀況](https://consensys.io/insight-report/web3-and-crypto-global-survey-2023) | +| 加密貨幣入門 | [NEAR:加速採用之路](https://drive.google.com/file/d/1VuaQP4QSaQxR5ddQKTMGI0b0rWdP7uGn/view) | +| 質押 | [質押:主要趨勢、要點與預測 - Eth Staker](https://lookerstudio.google.com/u/0/reporting/cafcee00-e1af-4148-bae8-442a88ac75fa/page/p_ja2srdhh2c?s=hmbTWDh9hJo) | +| 質押 | [各種質押App](https://github.com/threshold-network/UX-User-Research/blob/main/Multi-App%20Staking%20(MAS)/iterative-user-study/MAS%20Iterative%20User%20Study.pdf) | +| 去中心化自治組織 | [2022 年去中心化自治組織研究更新:去中心化自治組織構建者需要什麼?](https://blog.aragon.org/2022-dao-research-update/) | +| 去中央化金融 | [The state of Defi 2024](https://stateofdefi.org/) (ongoing survey) | +| 去中央化金融 | [Coverage pools](https://github.com/threshold-network/UX-User-Research/tree/main/Keep%20Coverage%20Pool) | +| 去中央化金融 | [ConSensys:2022 年去中心化金融用戶研究報告](https://cdn2.hubspot.net/hubfs/4795067/ConsenSys%20Codefi-Defi%20User%20ResearchReport.pdf) | +| 元宇宙 | [元宇宙:用戶研究報告](https://www.politico.com/f/?id=00000187-7685-d820-a7e7-7e85d1420000) | +| 元宇宙 | [Going on Safari: Researching Users in the Metaverse](https://archive.devcon.org/archive/watch/6/going-on-safari-researching-users-in-the-metaverse/?tab=YouTube) (video, 27 min) | +| Ethereum.org 用戶體驗數據 | [可用性與用戶滿意度調查儀表板 - Ethereum.org](https://lookerstudio.google.com/reporting/0a189a7c-a890-40db-a5c6-009db52c81c9) | + +## Web3 相關設計 {#design-for-web3} + +- [Web3 UX Design Handbook](https://web3ux.design/) - 設計Web3 apps 實際應用指南 +- [Web3 設計原則](https://medium.com/@lyricalpolymath/web3-design-principles-f21db2f240c1) - Dapp上的區塊鏈UX架構 +- [區塊鏈設計原則](https://medium.com/design-ibm/blockchain-design-principles-599c5c067b6e) - IBM 區塊鏈設計團隊的經驗教訓 +- [Web3 設計模式](https://www.web3designpatterns.io/) - 真實 Web3 產品的精選設計模式庫 +- [W3design.io](https://w3design.io/) - 生態系統中不同項目的精選用戶界面流程庫 +- [Neueux](https://neueux.com/apps) - 具有多種過濾選項的用戶界面流程庫 +- [Web3's Usability Crisis: What You NEED to Know!](https://www.youtube.com/watch?v=oBSXT_6YDzg) - A panel discussion on pitfalls of developer focused project building (video, 34 min) + +## Web3 設計案例研究 {#design-case-studies} + +- [加密貨幣用戶體驗手冊](https://deepwork.studio/case-studies/) +- [Crypto UX Handbook](https://www.cryptouxhandbook.com/) +- [在 OpenSea 售賣非同質化代幣](https://builtformars.com/case-studies/opensea) +- [Wallet UX teardown how wallets need to change](https://www.youtube.com/watch?v=oTpuxYj8JWI&ab_channel=ETHDenver) (video, 20 min) + +## 設計獎勵 {#bounties} + +- [Dework](https://app.dework.xyz/bounties) +- [Mirror Design System](https://app.buidlbox.io/) +- [ETHGlobal hackathons](https://ethglobal.com/) + +## 設計去中心化自治組織和社區 {#design-daos-and-communities} + +一起投入專業的自治組織或加入設計團體,與成員們聊聊設計、研究相關主題與趨勢。 + +- [Vectordao.com](https://vectordao.com/) +- [Deepwork.studio](https://www.deepwork.studio/) +- [Designer-dao.xyz](https://www.designer-dao.xyz/) +- [We3.co](https://we3.co/) +- [Openux.xyz](https://openux.xyz/) +- [Open Source Web3Design](https://www.web3designers.org/) + +## 設計系統 {#design-systems} + +- [Optimism Design](https://www.figma.com/@optimism) (Figma) +- [Ethereum.org Design system](https://www.figma.com/@ethdotorg) (Figma) +- [Finity, a design system by Polygon](https://www.figma.com/community/file/1073921725197233598/finity-design-system) (Figma) +- [Kleros Design System](https://www.figma.com/community/file/999852250110186964/kleros-design-system) (Figma) +- [Safe Design System](https://www.figma.com/community/file/1337417127407098506/safe-design-system) (Figma) +- [ENS Design system](https://thorin.ens.domains/) +- [Mirror Design System](https://degen-xyz.vercel.app/) + +**列在本頁的文章和專案不是由官方背書的**,僅作為資訊提供, 根據[列表政策](/contributing/design/adding-design-resources)在此頁中加入連結, 如果你想要新增計畫/文章,請在 [GitHub](https://github.com/ethereum/ethereum-org-website/blob/dev/public/content/developers/docs/design-and-ux/index.md)上編輯此頁。 diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/mev/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/mev/index.md new file mode 100644 index 00000000000..cf440090726 --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/mev/index.md @@ -0,0 +1,221 @@ +--- +title: 最大可提取價值 (MEV) +description: 最大可提取價值 (MEV) 簡介 +lang: zh-tw +--- + +最大可提取價值 (MEV) 是指透過在區塊中新增和排除交易並更改區塊中的交易順序,可以從區塊生產中提取的超過標準區塊獎勵和燃料費用的最大值。 + +## 最大可提取價值 {#maximal-extractable-value} + +最大可提取價值首先應用於[工作量證明](/developers/docs/consensus-mechanisms/pow/)背景下,最初稱為「礦工可提取價值」。 此是因為於工作量證明, 礦工能選擇來交易之納入, 不納入, 及順序. 然而,自從透過[合併](/roadmap/merge)過渡到權益證明以來,驗證者一直承擔著這些角色的職責,並且挖礦不再是以太坊協議的一部分。 但價值提取方法仍然存在,因此現在使用的術語是「最大可提取價值」。 + +## 先決條件 {#prerequisites} + +確保你已熟悉[交易](/developers/docs/transactions/)、[區塊](/developers/docs/blocks/)、[權益證明](/developers/docs/consensus-mechanisms/pos)和[燃料](/developers/docs/gas/)。 熟悉[去中心化應用程式](/dapps/)和[去中央化金融](/defi/)也很有幫助。 + +## 提取最大可提取價值 {#mev-extraction} + +理論上,最大可提取價值完全屬於驗證者,因為他們是唯一可以保證執行有利可圖的最大可提取價值機會的一方。 實際上,大部分最大可提取價值是由稱為「搜尋者」的獨立網路參與者提取的。 搜尋者在區塊鏈數據上運行複雜的演算法來檢測盈利的最大可提取價值的機會,並且有機器人自動將這些盈利交易提交到網路。 + +無論如何,驗證者確實會獲得全部最大可提取價值金額的一部分,因為搜尋者願意支付高昂的燃料費用(這些費用將歸驗證者所有),以換取更高可能性將其有利可圖的交易納入一個區塊。 假設尋找者為完全經濟合理, Gas費此研究者願意來支付最大為100%之MEV利益(因為如果Gas費高於利益, 尋找者將會賠錢). + +因此,對於一些競爭激烈的最大可提取價值機會,例如[去中心化交易所套利](#mev-examples-dex-arbitrage),搜尋者可能不得不將其最大可提取價值總收入的 90% 甚至更多作為燃料費用支付給驗證者,因為很多人都想進行同樣有利可圖的套利交易。 這是因為確保套利交易運作的唯一方法,是提交最高燃料費用的交易。 + +### 燃料高爾夫 {#mev-extraction-gas-golfing} + +這種動態讓「燃料高爾夫」— 即能夠使用最少數量燃料的程式交易,成為一種競爭優勢。因為它允許搜尋者設定較高的燃料價格,同時保持總燃料費不變(因為燃料費 = 燃料價格 \* 燃料用量)。 + +一些著名的燃料高爾夫技術包括:使用用長串零開頭的地址(如 [0x0000000000C521824EaFf97Eac7B73B084ef9306](https://etherscan.io/address/0x0000000000c521824eaff97eac7b73b084ef9306))因為他們需要的儲存空間較少(因而燃料也減少);並留下很小[ERC-20](/developers/docs/standards/tokens/erc-20/) 代幣餘額在合約中,因為相較於更新儲存插槽,初始化儲存插槽(餘額為 0 時)需要更多的燃料。 尋找更多減少燃料使用的技巧,是搜尋者在積極研究的一個領域。 + +### 一般偷跑者 {#mev-extraction-generalized-frontrunners} + +一些尋找者不自行尋找MEV榨取機會, 反之, 其成為一般偷跑者. 一般偷跑者為機器帳戶來監控交易內存池來發現榨益可能交易. 偷跑者將拷貝潛力榨取目標之交易程式, 取代地址部分利用偷跑者帳戶, 並於當地環境測試來確保此交易確實能榨取利益. 如測試結果為確實有利益, 偷跑者將提交此更改後交易使用一更高Gas費, 並"偷跑"先前於原始交易並榨取原先尋找者的MEV利益. + +### 快閃機器 {#mev-extraction-flashbots} + +快閃機器是一個獨立專案,透過一項服務擴展執行用戶端,該服務允許搜尋者將最大可提取價值交易提交給驗證者,而無需將它們透露給公共記憶體池。 此避免交易被其他尋找者發現並偷跑. + +## 最大可提取價值範例 {#mev-examples} + +最大可提取價值以多種方式出現在區塊鏈上。 + +### 去中心化交易所套購 {#mev-examples-dex-arbitrage} + +[去中央化交易所](/glossary/#dex) (DEX) 套購為一最簡單且有名之最大可提取價值範例。 因此,它也是競爭最激烈的。 + +其運作如此: 如果兩個DEXes列表一同一代幣但於不同價格, 某人能購入此代幣於低價DEX並販售此於高價DEX於一單一交易. 因為區塊鏈某些機制, 此為近於無風險之套購機會. + +[此為一套購範例](https://etherscan.io/tx/0x5e1657ef0e9be9bc72efefe59a2528d0d730d478cfc9e6cdd09af9f997bb3ef4), 於此立, 尋找者利用一成功套購交易來轉換1,000 ETH至1,045 ETH藉由發現ETH/DAI價差於Uniswap和SushiSwap. + +### 清算 {#mev-examples-liquidations} + +借貸協議之清算機制也是一有名MEV榨取機會. + +Maker 和 Aave 等借貸協議要求使用者存入一些抵押品(例如以太幣)。 然後,存入的抵押品將用於借出給其他使用者。 + +使用者然後可根據他們的需求向其他人借入資產和代幣(例如,若你想在 MakerDAO 治理提案中投票,你可以借入 MKR),最高可達他們所存抵押品的一定比例。 例如,如果借款金額不超過 30%,則將 100 DAI 存入協議的使用者最多可以借入價值 30 DAI 的另一種資產。 該協議確定了確切的借貸能力百分比。 + +隨著借款人抵押品的價值波動,他們的借款能力也會波動。 如果因市場波動,借入資產的價值超過其抵押品價值的 30%(同樣地,準確的百分比由協議確定),協議通常允許任何人清算抵押品,立即償還貸款人(這類似於傳統金融中的[追加保證金通知](https://www.investopedia.com/terms/m/margincall.asp))。 如果被清算,借款人通常必須支付高額清算費,其中一些費用會支付給清算人 — 這就是最大可提取價值機會的來源。 + +搜尋者競相以最快的速度解析區塊鏈資料,以判斷哪些借款人可以清算,並率先提交清算交易並自己收取清算費用。 + +### 三明治攻擊 {#mev-examples-sandwich-trading} + +三明治攻擊為另一常見攻略於MEV榨取. + +來做一三明治攻擊, 一尋找者必須監控大筆DEX交易於交易內存池. 例如, 假設某人欲想換10,000 UNI至DAI於Uniswap. 這類大額交易會對 UNI/DAI 對產生重大影響,可能會顯著提高 UNI 相對於 DAI 的價格。 + +搜尋者可以計算該大額交易對 UNI/DAI 對的大致價格影響,並在大額交易_之前_立即執行最優買單,低價買入 UNI,然後在大額交易_之後_立即執行賣單,以大額訂單造成的更高價格賣出。 + +三明治攻擊, 然而較具風險, 因為其依據交易後價格波動所影響(不像DEX套購攻擊), 且可能成為另一[沙門氏菌攻擊](https://github.com/Defi-Cartel/salmonella)之受害對象. + +### NFT MEV {#mev-examples-nfts} + +MEV於NFT環境為一崛起市場, 但其也具有多重風險. + +然而, 因為NFT交易發生於同樣共享之以太坊區塊鏈上, 尋找者能利用類似技術來於NFT市場. + +例如, 如一人氣NFT舉辦一空投活動, 而尋找者想要一或一組特定NFT, 他們能程式編輯一交易來使他們能成為第一個來購入此一或一整組之NFT於單一交易內. 或如一NFT被錯誤[列於一低於市場之價格](https://www.theblockcrypto.com/post/113546/mistake-sees-69000-cryptopunk-sold-for-less-than-a-cent), 尋找者能偷跑其他購入者來搶便宜. + +一著名NFT MEV發生於一尋找者花費700百萬美金[購入](https://etherscan.io/address/0x650dCdEB6ecF05aE3CAF30A70966E2F395d5E9E5)全數Cryptopunk於樓價. 一區塊鏈研究者[解釋於Twitter](https://twitter.com/IvanBogatyy/status/1422232184493121538)關於此買家與一MEV提供者合作來使其購入行動能保持秘密. + +### 長尾攻擊 {#mev-examples-long-tail} + +DEX套購, 清算, 及三明治為知名MEV榨取機會, 且極為競爭所以新尋找者幾乎無法賺錢. 然而, 其有另一較不出名的"長尾攻擊"MEV機會(NFT MEV為一用例). + +新尋找者或許能利用長尾攻擊來賺取較多利益. 快閃機器的[MEV 工作版](https://github.com/flashbots/mev-job-board)列出一系列新興機會. + +## 最大可提取價值的影響 {#effects-of-mev} + +最大可提取價值並不都是壞事 — 以太坊的最大可提取價值既有正面也有負面的影響。 + +### 正面影響 {#effects-of-mev-the-good} + +許多Defi計畫依靠套購利益尋求者來維持幣池價格與實際市場價格. 例如, DEX套購確保用戶們能取得最佳, 最正確之價格為其代幣, 且借出協議依賴快速清算來確保借出者確實有被支付. + +無理性尋找者來時時刻刻尋求經濟性機會且利用此優勢, Defi協議或許無法成長至其今日地位. + +### 負面影響 {#effects-of-mev-the-bad} + +於應用程式層面, 一些MEV如三明治攻擊, 時常導致極差用戶體驗. 用戶被夾三明治將面臨市價滑點及較差執行價格於其交易. + +於網路層面, 偷跑者及Gas費價格賭價時常導致網路堵塞及昂貴Gas費(當一或多方的偷跑者嘗試跑贏另一對手藉由提交更高額之Gas費賭價), 且無法使正常用戶來運行一般交易. + +且於區塊_內_問題外, MEV能具有多重負面影響於區塊_間_. 如果區塊中可用的最大可提取價值大幅超過標準區塊獎勵,驗證者可能會被激勵重組區塊並為自己捕獲最大可提取價值,從而導致區塊鏈重組和共識不穩。 + +區塊鏈順序重組被[先前討論於比特幣區塊鏈](https://dl.acm.org/doi/10.1145/2976749.2978408). 當比特幣的區塊獎勵多次砍半, 交易費將成為主要區塊獎勵, 而其將成為經濟性合理來使礦工來放棄下一區塊獎勵並重挖此區塊來賺取更多利益. 隨MEV增長, 相同憂慮將面臨於以太坊, 而直接威脅區塊鏈信賴度. + +## 最大可提取價值現狀 {#state-of-mev} + +MEV榨取暴增於2021年初期, 而其導長時間之高額Gas費. 快閃機器的最大可提取價中繼的出現,降低了普通偷跑者的效力,並將礦工費價格拍賣帶到鏈下,降低了普通使用者的礦工費。 + +雖然許多搜尋者仍然從最大可提取價值賺到很多錢,但隨著機會變得越來越廣為人知,越來越多的搜尋者爭奪相同的機會,驗證者將獲得越來越多的最大可提取價值總收入(因為如最初描述的相同類型的燃料拍賣也在快閃機器中發生,儘管是私下進行的,而驗證者將獲得由此產生的燃料收入)。 MEV並非專屬以太坊, 而當MEV環境越來越競爭, 許多尋找者已轉移戰場至BSC幣安智鏈, 而其具相同潛力之MEV機會與一較低競爭環境. + +另一方面,從工作量證明過渡到權益證明以及持續不斷使用卷軸來拓展以太坊,這些都以某種還不太清楚的方式改變著最大可提取價值的格局。 與工作量證明中的概率模型相比,具有保證的區塊提交者稍微提前知道會如何改變最大可提取價值提取的最新格局,以及當[單一秘密領導者選舉](https://ethresear.ch/t/secret-non-single-leader-election/11789)和[分佈式驗證者技術](/staking/dvt/)實現后會如何顛覆當前格局,目前還無從得知。 同樣,當大多數使用者活動遷離以太坊並轉移至其二層網路卷軸和分片時,存在哪些最大可提取價值機會還有待觀察。 + +## 以太坊權益證明 (PoS) 中的最大可提取價值 {#mev-in-ethereum-proof-of-stake} + +如前述,最大可提取價值對使用者綜合體驗和共識層安全性產生負面影響。 但以太坊向權益證明共識的過渡(稱為「合併」)也可能帶來與最大可提取價值有關的新風險: + +### 驗證者中心化 {#validator-centralization} + +在合併後的以太坊,驗證者(已存入 32 個以太幣作為保證金)就新增到信標鏈的區塊的有效性達成共識。 由於 32 個以太幣可能超出了許多人的能力範圍,[加入質押池](/staking/pools/)也許是一種更可行的選擇。 然而,[單獨質押者](/staking/solo/)健康分佈才是一種理想狀態,因為它減輕了驗證者的中心化並提高了以太坊的安全性。 + +不過,最大可提取價值提取被認為能夠加速驗證者中心化。 部分原因是,由於驗證者[提出區塊的收益要低於](/roadmap/merge/issuance/#how-the-merge-impacts-ETH-supply)礦工曾經提出區塊的收益,合併後最大可提取價值提取已經顯著[影響驗證者的收益](https://github.com/flashbots/eth2-research/blob/main/notebooks/mev-in-eth2/eth2-mev-calc.ipynb)。 + +更大的質押池可能會有更多的資源投資進行必要的最佳化,以抓住最大可提取價值機會。 這些質押池提取的最大可提取價值越多,它們用來提升最大可提取價值提取能力(並增加總收入)的資源就越多,這在本質上形成了[規模經濟](https://www.investopedia.com/terms/e/economiesofscale.asp#)。 + +由於可支配的資源較少,單獨質押者可能無法從最大可提取價值機會中獲利。 這可能會增加獨立驗證者加入強大的質押池以提高收益的壓力,從而削弱以太坊的去中心化。 + +### 許可記憶體池 {#permissioned-mempools} + +爲了應對三明治攻擊和搶先交易攻擊,交易者可能會開始與驗證者進行鏈下交易以確保交易隱私。 交易者將潛在的最大可提取價值交易直接發送到驗證者而非公共内存池,驗證者將交易添加到該區塊中並於交易者分配利潤。 + +“暗池” 是這種模式的升級版,是一種只供訪問的許可内存池,對願意支付特定費用的用戶開放。 該趨勢將弱化以太坊的無許可和去信任,並有可能將區塊鏈轉換爲一種有利於最高出價者的 “付費游玩” 機制。 + +許可内存池還會增加先前部分描述的中心化風險。 運行多個驗證者的大型池可能會受益於為交易者和使用者提供交易隱私,增加其最大可提取價值收入。 + +在合併後的以太坊中解決這些與最大可提取價值相關的問題,是一個核心研究領域。 迄今爲止,爲了減少最大可提取價值對合併后以太坊去中心化和安全性的消極影響,有兩種解決方法被提出: **提交者-構建者分離 (PBS)** 和 **構建者應用程式介面**。 + +### 提議者-建構者分離 {#proposer-builder-separation} + +在工作量證明和權益證明中,建構區塊的節點面向參與共識的其他節點提出區塊以將其新增到鏈中。 新區塊在另一位礦工在其上建立區塊(在工作量證明中)後,或從大多數驗證者那裡獲得認證(在權益證明中)後,成為規範鏈的一部分。 + +區塊生產者和區塊提交者角色的結合造成了大多數先前描述的與最大可提取價值相關的問題。 例如,在時間强盜攻擊中,共識節點被激勵觸發鏈重組,以最大限度增加最大可提取價值收入。 + +[提交者-構建者分離](https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725) (PBS) 旨在緩解最大可提取價值的影響,尤其是對共識層的影響。 PBS 的主要特點是區塊生產者與區塊提交者的分離。 驗證者仍然負責提交區塊並投票,但有一類新的專有實體 (被稱爲**區塊構建者**),其任務是對交易排序和構建區塊。 + +在 PBS 模式下,區塊構建者創建一個交易捆綁並出價將其納入信標鏈區塊中 (作爲 “執行有效負載”)。 被選中提出下一個區塊的驗證者隨後查看不同的出價,並選擇費用最高的交易包。 PBS 本質上創建了一個拍賣市場,使構建者和出售區塊空間的驗證者進行協調。 + +當前,PBS 設計使用一種[提交-揭露方案](https://gitcoin.co/blog/commit-reveal-scheme-on-ethereum/),即構建者只發佈對區塊内容 (區塊頭) 的加密承諾以及其出價。 在接受獲勝的出價后,提交者創建一個包括區塊頭的簽名區塊提案。 區塊建置者在看到簽名區塊提案後可能會發布整個區塊體,並且它必須還要從驗證者那裡獲得足夠多的[認證](/glossary/#attestation)後才能最終確定區塊。 + +#### 提議者-建構者分離如何減弱最大可提取價值的影響? {#how-does-pbs-curb-mev-impact} + +協議内的提交者-構建者分離將最大可提取價值從驗證者的權限中移除,降低了最大可提取價值對共識的影響。 相反,運行專用硬體的區塊建置者將抓住出現的最大可提取價值機會。 + +不過,這並不完全將驗證者排除在最大可提取價值相關收入之外,因為建置者必須出高價才能讓驗證者接受他們的區塊。 盡管如此,由於驗證者不再直接專注於如何盡可能提高最大可提取價值收入,時間强盜攻擊的威脅得以降低。 + +提出者-構建者分離也降低了最大可提取價值的中心化風險。 例如,使用提交-揭露方案,構建者就會信任驗證者不會竊取最大可提取價值機會或將其暴露給其他構建者。 這就低了單獨質押者從最大可提取價值獲益的門檻,否則建置者將傾向於支持有著鏈下聲譽的大型池並與它們進行鏈下交易。 + +同樣地,驗證者不必信任建置者不會隱藏區塊體或發布無效區塊,因為付款是無條件的。 即使提出的區塊不可用或被其他驗證者宣稱無效,驗證者的費用仍然會支付。 在後一種情況下,區塊被直接丟棄,迫使區塊建置者失去所有交易費和最大可提取價值收入。 + +### 建置者應用程式介面 {#builder-api} + +儘管提交者-構建者分離有望減少最大可提取價值的影響,但實現它需要對共識協議進行更改。 具體來說,信標鏈上的[分叉選擇](/developers/docs/consensus-mechanisms/pos/#fork-choice)規則需要更新。 [構建著應用程式介面](https://github.com/ethereum/builder-specs)是一種臨時解決方案,旨在有效實現提交者-構建者分離,然而需要更高的信任假設。 + +建置者應用程式介面是改良版的[引擎應用程式介面](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md),共識層用戶端使用它向執行層用戶端請求執行有效負載。 如[誠實驗證者規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/validator.md)所述,選中承擔區塊提出職責的驗證者向連接的執行用戶端請求交易包,並將交易包新增到提出的信標鏈區塊中。 + +建置者應用程式介面還充當驗證者和執行層用戶端之間的中介軟體;不同之處是它允許信標鏈上的驗證者從外部實體獲取區塊(而不是使用執行用戶端在本地構建區塊)。 + +以下簡述建置者應用程式介面如何運作: + +1. 建置者應用程式介面將驗證者連接到由運行執行層用戶端的區塊建置者組成的網路。 與 PBS 相同,構建者專注於投資消耗大量資源的區塊構建,並使用不同的策略最大限度地提提高從最大可提取價值 + 優先消費中賺取的收入。 + +2. 驗證者(運行共識層用戶端)向建置者網路請求執行有效負載及出價。 建置者的出價將包含執行有效負載標頭,即對有效負載內容的加密承諾,和向驗證者支付的費用。 + +3. 驗證者查看收到的出價並選擇費用最高的執行有效負載。 利用建置者應用程式介面,驗證者創建一個僅包括其簽名和執行有效負載標頭的「盲」信標區塊提案並發送給建置者。 + +4. 在看到盲區塊提案時,運行建置者應用程式介面的建置者可能會用完整的執行有效負載回應。 這讓驗證者可以創建一個在整個網路中傳播的「已簽署」信標區塊。 + +5. 如果區塊構建者未能及時響應,使用構建者應用程式介面的驗證者仍有可能在本地構建區塊,因此他們不會錯過區塊提交獎勵。 然而,驗證者不能使用當前揭露的交易或另一個集合創建另一個區塊,因爲這相當於_模棱兩可_ (簽署同一個時隙内的兩個區塊) ,是可罰沒的。 + +構建者應用程式接口的一個示例實現是 [MEV Boost](https://github.com/flashbots/mev-boost),它是對 [Flashbots 拍賣機制](https://docs.flashbots.net/Flashbots-auction/overview/)的改進,旨在抑制最大可提取價值在以太坊上的消極外部性。 Flashbots 拍賣允許權益證明中的驗證者將構建可獲利區塊的工作外包給專門的參與方,即**尋找者**。 + +尋找者尋找有利可圖的最大可提取價值機會,並向區塊提交者發送交易捆綁和[密封價格出價](https://en.wikipedia.org/wiki/First-price_sealed-bid_auction),以將交易捆綁納入區塊。 運行 mev-geth,即 go-ethereum (Geth) 用戶端的分叉版本的驗證者只需要選擇利潤最高的交易包,並將其新增到新區塊的一部分。 爲了避免區塊提交者 (驗證者) 收到垃圾郵件和無效交易,交易捆綁透過**中繼者**驗證,然後再到達提交者。 + +MEV Boost 的運作方式與原來的 Flashbots 拍賣相同,但增加了一些為以太坊向權益證明過渡而設計的新功能。 尋找著仍然尋找有利可圖的交易來將其納入區塊,但一類新的名爲**構建者**的專門參與方負責將交易聚合並捆綁到區塊中。 建置者接受搜尋者提供的價格密封出價,並執行最佳化以找到利潤最大的排序。 + +中繼者仍然負責驗證交易捆綁並將其傳送給提交者。 然而,MEV Boost 透過存儲構建者發送的區塊體和驗證者發送的區塊頭,引入了負責提供[數據可用性](/developers/docs/data-availability/)的**代管**。 對於代管,連結到中繼的驗證者請求可用的執行有效負載,並使用MEV Boost 的順序演算法選擇出價 + 最大可提取價值小費最高的有效負載頭。 + +#### 建置者應用程式介面如何減低最大可提取價值的影響? {#how-does-builder-api-curb-mev-impact} + +建置者應用程式介面的核心優勢在於,它有可能讓參與者平等獲得最大可提取價值機會。 使用提交-揭露方案消除了信任假設,降低了尋求從最大可提取價值中獲利的驗證者的進入門檻。 這應該可以減輕單獨質押者加入大型質押池,以提高最大可提取價值利潤的壓力。 + +建置者應用程式介面的廣泛實作將鼓勵區塊建置者之間進行更激烈的競爭,這將增強抗審查能力。 驗證者審查多個構建者的出價時,意圖審查一筆或多筆用戶交易的構建者必須出價高於所有其他不審查的構建者才能成功。 這大大增加了審查使用者的成本並對審查有所限制。 + +一些項目,例如 MEV Boost,將構建者應用程式介面作爲整體結構的一部分,旨在為某些參與方 (例如試圖避免搶先交易/三明治攻擊的交易者) 提供交易隱私。 這是透過在使用者和區塊建置者之間提供一條私密通訊通道來實現的。 與先前描述的許可内存池不同,這種方法是有益的,原因如下: + +1. 市場上有多種建置者存在讓審查變得不切實際,這是有利於使用者的。 相反,基於信任的中心化暗池的存在將權力集中在少數區塊構建者的手中,並增加了審查的可能性。 + +2. 建置者應用程式介面軟體是開源的,允許任何人提供區塊建置者服務。 這意味著使用者不會被迫使用任何特定的區塊建置者,並提高了以太坊的中立和無許可特性。 此外,尋求最大可提取價值的交易者不會因為使用私密交易管道而無意中促進中心化。 + +## 關連資訊 {#related-resources} + +- [Flashbots 文件](https://docs.flashbots.net/) +- [快閃機器於GitHub](https://github.com/flashbots/pm) +- [MEV-Explore](https://explore.flashbots.net/) - _用於最大可提取價值交易的儀表板和即時交易瀏覽器_ +- [mevnot.org](https://www.mevboost.org/) - _可提供MEV-Boost 中繼和區塊構建者即時統計數據的追蹤器_ + +## 了解更多 {#further-reading} + +- [最大(礦工) 榨取利益(MEV) 為何?](https://blog.chain.link/what-is-miner-extractable-value-mev/) +- [MEV和我](https://www.paradigm.xyz/2021/02/mev-and-me) +- [以太坊為一深邃森林](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest/) +- [逃離以太坊深邃森林](https://samczsun.com/escaping-the-dark-forest/) +- [快閃機器: 偷跑MEV危機](https://medium.com/flashbots/frontrunning-the-mev-crisis-40629a613752) +- [@bertcmiller的 MEV 線程](https://twitter.com/bertcmiller/status/1402665992422047747) +- [MEV-Boost:直接適用於合併的 Flashbots 架構](https://ethresear.ch/t/mev-boost-merge-ready-flashbots-architecture/11177) +- [什麼是 MEV Boost](https://www.alchemy.com/overviews/mev-boost) +- [為什麼要運行 mev-boost?](https://writings.flashbots.net/writings/why-run-mevboost/) +- [The Hitchhikers Guide To Ethereum](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/oracles/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/oracles/index.md new file mode 100644 index 00000000000..eb38002981d --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/oracles/index.md @@ -0,0 +1,433 @@ +--- +title: 預言機 (Oracles) +description: 預言機使以太坊智慧型合約得以取得現實世界的資料,替使用者增加更多使用情境以及價值。 +lang: zh-tw +--- + +預言機是產生數據來源的應用程式,使鏈下數據來源可供區塊鏈用於智慧型合約。 因為預設情況下,基於以太坊的智慧型合約無法存取儲存在區塊鏈網路外部的資訊,所以這是必要的。 + +賦予智慧型合約使用鏈下數據執行的能力,擴展了去中心化應用程式的效用和價值。 例如,鏈上預測市場依靠預言機提供有關結果的信息,用於驗證用戶的預測。 假設 Alice 押注 20 以太幣打賭誰會成為下任美國 總統。 在這種情況下,預測市場去中心化應用程式需要一個預言機來確認選舉結果並確定 Alice 是否有資格獲得付款。 + +## 先備知識 {#prerequisites} + +這頁面假定讀者已經熟悉以太坊基礎,例如[節點](/developers/docs/nodes-and-clients/),[共識機制](/developers/docs/consensus-mechanisms/),以及[以太坊虛擬機](/developers/docs/evm/)。 你應該也對[智慧型合約](/developers/docs/smart-contracts/)和其[解析](/developers/docs/smart-contracts/anatomy/),尤其是[事件](/glossary/#events)有所掌握。 + +## 什麼是區塊鏈預言機? {#what-is-a-blockchain-oracle} + +預言機用來提供、驗證以及傳送外部資料 (如:鏈外資料) 至區塊鏈上的智慧型合約使用。 除了「拉取」鏈下數據並在以太坊上廣播之外,預言機還可以將訊息從區塊鏈「推送」到外部系統,例如,一旦用戶透過以太坊交易發送費用就會解鎖智慧鎖。 + +如果沒有預言機,智慧型合約將完全局限於鏈上資料。 + +預言機依數據來源(一個或多個)、信任模型(中心化或去中心化)和系統架構(立即讀取、發布-訂閱模式和請求-回應模式)而有所不同。 我們還可以根據預言機是否檢索外部數據以供鏈上合約使用(輸入預言機)、將資訊從區塊鏈發送到鏈下應用程式(輸出預言機)或執行鏈下計算任務(計算預言機)來區分預言機。 + +## 為什麼智慧型合約需要預言機? {#why-do-smart-contracts-need-oracles} + +許多開發者將智慧型合約視為在區塊鏈上特定地址運行的程式碼。 然而,對[智慧型合約](/smart-contracts/)的更普遍的看法是,它們是自動執行的軟體程序,一旦滿足特定條件,就能夠在各方之間執行協議 - 因此稱為「智慧型合約」。 + +但考慮到以太坊的確定性,使用智慧型合約來執行人與人之間的協議並不簡單。 [確定性系統](https://en.wikipedia.org/wiki/Deterministic_algorithm)是一種在給定初始狀態和特定輸入的情況下始終產生相同結果的系統,這意味著從輸入計算輸出的過程中不存在隨機性或變化。 + +為了實現確定性執行,區塊鏈限制節點_僅_使用儲存在區塊鏈本身上的數據就簡單的二元 (true/false) 問題達成共識。 此類問題的範例包括: + +- 「帳戶所有者(由公鑰識別)是否使用配對的私鑰簽署了這筆交易?」 +- 「這個帳戶有足夠的資金來支付交易嗎?」 +- 「這筆交易在該智慧型合約的背景下有效嗎?」等等。 + +如果區塊鏈從外部來源(即來自現實世界)接收訊息,則無法實現確定性,從而阻止節點就區塊鏈狀態變更的有效性達成一致。 以一個智慧型合約為例,它根據從傳統價格應用程式介面取得的當前以太幣-美元匯率執行交易。 這個數字可能會經常變化(更不用說應用程式介面可能會被棄用或被駭客攻擊),這意味著執行相同合約程式碼的節點會得到不同結果。 + +對於像以太坊這樣在全球有數千個節點處理交易的公共區塊鏈來說,確定性至關重要。 由於沒有中央機構作為事實來源,節點需要在應用相同交易後達到相同狀態的機制。 如果節點 A 執行智慧型合約程式碼並得到 「3」,而節點 B 在運行同一交易後得到 「7」,則會導致共識崩潰,從而抹掉以太坊作為去中心化計算平台的價值。 + +這種情況也凸顯了設計區塊鏈從外部來源取得資訊的問題。 然而,預言機透過從鏈下來源獲取資訊,並將其儲存在區塊鏈上給智慧型合約使用來解決這個問題。 由於儲存在鏈上的信息是不可更改且公開的,以太坊節點可以安全地使用預言機導入的鏈下數據來計算狀態變化,而不會破壞共識。 + +為此,預言機通常由鏈上運行的智慧型合約和一些鏈下組件組成。 鏈上合約接收來自其他智慧型合約的數據請求,並將其傳遞給鏈下元件(稱為預言機節點)。 此預言機節點可以查詢數據來源,例如使用應用程式介面 (API),並發送交易以將請求的數據儲存在智慧型合約的儲存中。 + +本質上,區塊鏈預言機彌合了區塊鏈與外部環境之間的資訊鴻溝,創建了「混合智慧型合約」。 混合智慧型合約是一種基於鏈上合約程式碼和鏈下基礎設施組合的功能。 去中心化預測市場是混合智慧型合約的一個很好的例子。 其他例子可能包括農作物保險智慧型合約,當一組預言機確定某些天氣現象已發生,該合約就會作出賠付。 + +## 什麼是預言機問題? {#the-oracle-problem} + +預言機解決了一個重要問題,但也帶來了一些複雜性,例如: + +- 我們如何驗證注入的資訊是從正確的來源提取的或沒有被篡改? + +- 我們如何確保這些數據始終可用並定期更新? + +所謂的「預言機問題」展示了使用區塊鏈預言機向智慧型合約發送輸入所帶來的問題。 來自預言機的數據必須正確,智慧型合約才能正確執行。 此外,必須「信任」預言機運營商提供準確的資訊,會破壞智慧型合約的「去信任」方面。 + +不同的預言機為預言機問題提供了不同的解決方案,我們會稍後探討。 預言機通常會根據它們應對以下挑戰的能力被評估: + +1. **正確性**:預言機不應導致智慧型合約基於無效的鏈下資料觸發狀態變更。 預言機必須保證數據的_真實性_和_完整性_。 真實性意味著數據是從正確的來源獲得的,而完整性意味著數據在發送到鏈上之前保持完整(即沒有被更改)。 + +2. **可用性**:預言機不應延遲或阻止智慧型合約執行操作並觸發狀態變更。 這意味著來自預言機的數據必須_請求時可用_,且沒有間斷。 + +3. **激勵相容性**:預言機應該激勵鏈下數據提供者向智慧型合約提交正確的資訊, 激勵相容性包括了_可歸因性_和_問責性_。 可歸因性讓一段外部資訊與其提供者連結,而問責性則將數據提供者與他們提供的資訊綁定起來,讓他們能根據提供的資訊品質得到獎勵或懲罰。 + +## 區塊鏈預言機服務如何運作? {#how-does-a-blockchain-oracle-service-work} + +### 使用者 {#users} + +使用者是指需要區塊鏈外部資訊來完成特定操作的實體(即智慧型合約)。 預言機服務的基本工作流程從用戶向預言機合約發起數據請求開始。 數據請求通常會回應以下問題的一部分或全部: + +1. 鏈下節點可以在哪些來源查詢需要的資訊? + +2. 報告者如何處理來自數據來源的資訊,並提取有用的數據點? + +3. 有多少預言機節點可以參與數據擷取? + +4. 如何處理預言機報告中的差異? + +5. 應使用甚麼方法來過濾提交的資訊並將報告聚合為單一數值? + +### 預言機合約 {#oracle-contract} + +預言機合約是預言機服務的鏈上組件。 它負責監聽來自其他合約的數據請求,將數據查詢傳遞給預言機節點,並將返回的數據廣播給用戶端合約。 這份合約也可以對返回的數據點進行計算,以產生一個聚合值並將其發送給請求合約。 + +預言機合約公開了一些函數,讓用戶端合約在發出資料請求時使用。 當收到新的查詢時,智慧型合約會釋出一個包含資料請求細節的[日誌事件](/developers/docs/smart-contracts/anatomy/#events-and-logs)。 這會通知已經訂閱了日誌的鏈下節點(通常是使用類似 JSON-RPC 的 `eth_subscribe` 指令),繼續檢索在日誌事件中定義的數據。 + +以下是一個由 Pedro Costa 提供的[預言機合約的範例](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e)。 這是一個簡單的預言機服務,能依照其他智慧型合約的請求,查詢鏈下應用程式介面(API)並將請求的資訊儲存在區塊鏈上。 + +```solidity +pragma solidity >=0.4.21 <0.6.0; + +contract Oracle { + Request[] requests; //list of requests made to the contract + uint currentId = 0; //increasing request id + uint minQuorum = 2; //minimum number of responses to receive before declaring final result + uint totalOracleCount = 3; // Hardcoded oracle count + + // defines a general api request + struct Request { + uint id; //request id + string urlToQuery; //API url + string attributeToFetch; //json attribute (key) to retrieve in the response + string agreedValue; //value from key + mapping(uint => string) answers; //answers provided by the oracles + mapping(address => uint) quorum; //oracles which will query the answer (1=oracle hasn't voted, 2=oracle has voted) + } + + //event that triggers oracle outside of the blockchain + event NewRequest ( + uint id, + string urlToQuery, + string attributeToFetch + ); + + //triggered when there's a consensus on the final result + event UpdatedRequest ( + uint id, + string urlToQuery, + string attributeToFetch, + string agreedValue + ); + + function createRequest ( + string memory _urlToQuery, + string memory _attributeToFetch + ) + public + { + uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, "")); + Request storage r = requests[length-1]; + + // Hardcoded oracles address + r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1; + r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1; + r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1; + + // launch an event to be detected by oracle outside of blockchain + emit NewRequest ( + currentId, + _urlToQuery, + _attributeToFetch + ); + + // increase request id + currentId++; + } + + //called by the oracle to record its answer + function updateRequest ( + uint _id, + string memory _valueRetrieved + ) public { + + Request storage currRequest = requests[_id]; + + //check if oracle is in the list of trusted oracles + //and if the oracle hasn't voted yet + if(currRequest.quorum[address(msg.sender)] == 1){ + + //marking that this address has voted + currRequest.quorum[msg.sender] = 2; + + //iterate through "array" of answers until a position if free and save the retrieved value + uint tmpI = 0; + bool found = false; + while(!found) { + //find first empty slot + if(bytes(currRequest.answers[tmpI]).length == 0){ + found = true; + currRequest.answers[tmpI] = _valueRetrieved; + } + tmpI++; + } + + uint currentQuorum = 0; + + //iterate through oracle list and check if enough oracles(minimum quorum) + //have voted the same answer as the current one + for(uint i = 0; i < totalOracleCount; i++){ + bytes memory a = bytes(currRequest.answers[i]); + bytes memory b = bytes(_valueRetrieved); + + if(keccak256(a) == keccak256(b)){ + currentQuorum++; + if(currentQuorum >= minQuorum){ + currRequest.agreedValue = _valueRetrieved; + emit UpdatedRequest ( + currRequest.id, + currRequest.urlToQuery, + currRequest.attributeToFetch, + currRequest.agreedValue + ); + } + } + } + } + } +} +``` + +### 預言機節點 {#oracle-nodes} + +預言機節點是預言機服務的鏈下組件。 它從外部資料來源提取信息,例如由第三方伺服器託管的應用程式介面(API),並把資料放在鏈上供智慧型合約使用。 預言機節點監聽鏈上預言機合約的事件,並完成在日誌中描述的任務。 + +對預言機節點來說,一個常見的任務是發送一個 [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp) 請求到一個應用程式介面(API),分析回應以提取相關資料,把資料格式化成區塊鏈可讀的輸出,然後通過向預言機合約發送一個包含資料的交易,將其發送到鏈上。 預言機節點有時也會被要求用「真實性證明」去證明提交資料的有效性和完整性,我們稍後會再深入探討。 + +計算型預言機也依賴於鏈下節點,來執行那些在鏈上由於 gas 費用和區塊大小限制而無法執行的計算任務。 例如,預言機節點可能會被要求生成可驗證隨機數字(例如:用在基於區塊鏈的遊戲)。 + +## 預言機設計樣式 {#oracle-design-patterns} + +預言機有不同的種類,包括_即時讀取型_,_發佈-訂閱型_以及_請求-回應型_,後兩者在以太坊智慧型合約中最受歡迎。 這裏我們簡單介紹發佈-訂閱型和請求-回應型。 + +### 發佈-訂閱型預言機 {#publish-subscribe-oracles} + +這類預言機提供「數據餵送」,其他合約可以定期讀取以取得資訊。 在這種情況下,資料預計會頻繁變動,所以用戶端合約需要監聽在預言機中儲存的數據更新。 例如提供最新 ETH-USD 價格信息給使用者的預言機。 + +### 請求-回應型預言機 {#request-response-oracles} + +請求-回應的設置允許用戶端合約請求發佈-訂閱型預言機未提供的任意數據。 當數據集太大,無法儲存在智慧型合約時,或者使用者在任何時刻只需要數據的一小部分時,請求-回應型預言機是理想的選擇。 + +雖然比發佈-訂閱型預言機複雜,但請求-回應型預言機基本上和我們在上一節所描述的一樣。 預言機會有一個鏈上組件來接收資料請求,並傳遞給鏈下節點進行處理。 + +發起資料查詢的使用者需要負擔從鏈下來源檢索資訊的費用。 此外,使用者合約還必須提供資金,用來支付預言機合約通過請求中指定的回呼函數返回回應時所產生的 Gas 費用。 + +## 中心化與去中心化預言機 {#types-of-oracles} + +### 中心化預言機 {#centralized-oracles} + +中心化預言機由單一實體控制,此實體負責把鏈下資訊聚合並根據請求更新預言機合約中的數據。 由於中心化預言機依賴單一真實性來源,所以效率比較高。 當專有數據集由擁有者直接發佈,且帶有被廣泛接受的簽名時,中心化預言機的表現可能會更好。 但是,它們也帶來了一些缺點: + +#### 較低的準確性保證 {#low-correctness-guarantees} + +使用中心化預言機時,不能確認提供的資訊準確與否。 即使是「聲譽良好」的提供者也可能會變得不可靠或被駭客攻擊。 如果預言機被破壞,智慧型合約將會基於錯誤資料來運行。 + +#### 可用性差 {#poor-availability} + +中心化預言機無法保證能持續向其他智慧型合約提供鏈下資料。 如果提供者決定把服務關閉,或者一個駭客劫持了預言機的鏈下組件,你的智慧型合約會面臨拒絕服務(DoS)攻擊的風險。 + +#### 激勵相容性差 {#poor-incentive-compatibility} + +中心化預言機通常缺乏良好設計,或根本不存在激勵機制來促使數據提供者提供準確或未經更改的資訊。 向預言機付錢以保證正確性並不等同於保證誠實。 隨著智慧型合約控制的價值數量增加,這一問題變得更加嚴重。 + +### 去中心化預言機 {#decentralized-oracles} + +去中心化預言機旨在克服中心化預言機的限制,通過消除單點故障來提高可靠性。 去中心化預言機服務由點對點網路中的多個參與者組成,這些參與者在將鏈下數據發送到智慧型合約之前,會先對數據達成共識。 + +理想狀態下,去中心化預言機應該是無許可,去信任而且不受中心化組織管理;而在現實中,預言機有著不同程度的去中心化。 有一些半去中心化的預言機網路允許任何人參與,但由一個「所有者」根據節點的過往表現來批准和移除節點。 完全去中心化的預言機網路也存在,他們通常以獨立區塊鏈運行,並設有明確的共識機制來協調節點並懲罰不當行為。 + +使用去中化預言機有著以下的優點: + +### 較高的準確性保證 {#high-correctness-guarantees} + +去中心化預言機嘗試用不同的方法來達到數據的準確性。 這包括了使用證明來證實返回資訊的真實性和完整性,以及要求多個實體共同同意鏈下數據的有效性。 + +#### 真實性證明 {#authenticity-proofs} + +真實性證明是一個密碼學機制,能夠讓人們獨立驗證從外部來源檢索到的資訊。 這些證明可以驗證資訊的來源,並在檢索後檢測可能的變動。 + +真實性證明的範例包括: + +**傳輸層安全性(TLS) 證明**:言機節點通常使用基於傳輸層安全性(TLS)協議的安全 HTTP 連接從外部來源提取數據。 部分去中心化預言機使用真實性證明來驗證 TLS 會話(即確認節點和特定伺服器之間的資訊交換)並確證會話內容未被修改。 + +**可信任執行環境(TEE)證明**:[可信任執行環境](https://en.wikipedia.org/wiki/Trusted_execution_environment)(TEE)是一個和主機系統的操作進程隔離的沙盒計算環境。 TEEs 保證了在計算環境中儲存和使用的任何應用程式程式碼或數據都會保持完整性、機密性和不可竄改性。 使用者還可以生成一個證明來證明一個應用程式實例是在可信任執行環境中運行。 + +某些種類的去中心化預言機要求預言機節點的營運者提供 TEE 證明。 這能向使用者確保節點營運者是在可信任的執行環境中運行預言機用戶端的實例。 TEEs 防止外部進程修改或讀取應用程式的程式碼和數據,因此這些證明可以證實預言機節點有保持資訊的完整性和機密性。 + +#### 基於共識的資訊驗證 {#consensus-based-validation-of-information} + +向智慧型合約提供資料時,中心化預言機依賴於單一真實性來源,因此有可能發佈不準確的資訊。 去中心化預言機借由依靠多個預言機節點來查詢鏈下資訊,來解決這個問題。 通過比對不同來源的資料,去中心化預言機降低了向鏈上合約提供無效資訊的風險。 + +但是去中化預言機必需處理不同鏈下來源的資訊差異。 為了盡可能減少資訊差異並確保提供給預言機合約的數據反映了預言機節點的集體意見,去中心化預言機使用了以下的機制: + +##### 對資料的準確性投票或質押 + +有部分的去中心化預言機網路要求參與者使用網路的原生代幣對資料查詢答案的準確性進行投票或質押 (例如「誰贏了 2020 年的美國大選?」)。 一個匯總協議會匯總這些投票和質押,並把受到大多數支持的答案作為有效答案。 + +若節點提供的答案與大多數答案不一致將會受到懲罰,即把他們的代幣分發給其他提供了更正確數值的節點。 要求節點在提供數據前提供擔保可以激勵節點做出誠實的回應,因為這些節點都被認為是想得到最大回報的理性經濟參與者。 + +質押/投票還保護去中心化預言機免受[女巫攻擊](/glossary/#sybil-attack),在這種攻擊中,惡意參與者創建多個身份來利用共識系統。 但是,質押無法防範「佔便宜」的行為(預言機節點直接複製其他節點的資訊)和「懶惰驗證」(預言機節點遵循大多數而不親自驗證資訊)。 + +##### 謝林點機制 + +[謝林點](https://en.wikipedia.org/wiki/Focal_point_(game_theory))是一個賽局理論的概念,它假設了在缺乏任何溝通的前提下,大多數實體會總是默認為某個問題找到一個共同的解決方案。 謝林點機制常常被用在去中心化預言機網路,讓節點能就數據請求的答案達成共識。 + +早期的一個想法是 [SchellingCoin](https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/),這是一種提議的數據餵送機制,參與者提交對「標量」問題的回答(即答案可以用數量描述的問題,例如「ETH 的價格是多少?」)以及一筆押金。 提供值在第 25 和 第 75 [百分位](https://en.wikipedia.org/wiki/Percentile)之間的使用者會得到獎勵,而提供的值大幅偏離中間值的使用者會得到懲罰。 + +雖然 SchellingCoin 今天已經不存在,但許多去中心化預言機 - 特別是[ Maker 協議預言機](https://docs.makerdao.com/smart-contract-modules/oracle-module) - 仍使用謝林點機制來提高預言機資料的準確性。 每個 Maker 預言機都由一個鏈下的 P2P 網路的節點(「中繼者」和「餵送者」)組成,這些節點提交抵押資產的市場價格,然後由鏈上的「Medianizer」合約計算所有提供值的中位數。 當指定的延遲期結束,這個中位數值就成為相關資產的新參考價格。 + +其他使用謝林點機制的預言機範例包括[ Chainlink 鏈下部告](https://docs.chain.link/docs/off-chain-reporting/)和[ Witnet ](https://witnet.io/)。 在這兩個系統中,P2P 網路中的預言機節點回應會聚合成一個單一的聚合值,例如平均值或中間值。 節點將根據其回應與聚合值的一致程度或偏差程度來獲得獎勵或受到懲罰。 + +謝林點機制會具有吸引力,是因為他們降低了鏈上足跡(只有一筆交易需要被發送)的同時又保證了去中心化。 後者之所以可行,是因為節點需要在提交的回應清單上簽署,才可以將其輸入到生成平均值或中位數的演算法中。 + +### 可用性 {#availability} + +去中心化預言機服務為智慧型合約確保了鏈下數據的高可用性。 這是通過把鏈下資訊來源以及負責將信息傳輸至鏈上的節點同時去中心化來實現。 + +這確保了容錯能力,因為預言機合約可以依賴多個節點(這些節點也依賴於多個數據來源)來執行其他合約的查詢。 在源頭_和_節點營運者層級的去中心化至關重要—如果一個預言機節點網路提供的資訊來自同一個來源,將會遇到與中心化預言機相同的問題。 + +基於質押的預言機也可以對未能快速回應資料請求的節點運營者進行懲罰。 這大大激勵了預言機節點投資於容錯基礎設施,並及時提供數據。 + +### 激勵相容性好 {#good-incentive-compatibility} + +去中心化預言機採用了不同的激勵設計來避免預言機節點出現[拜占庭](https://en.wikipedia.org/wiki/Byzantine_fault)行為。 具體來說,它們實現了_可歸因性_和_問責性_: + +1. 去中心化預言機節點通常需要為他們對數據請求的回應簽署。 這個資訊有助於評估預言機節點的過往表現,讓使用者可以在提出數據請求時過濾掉不可靠的預言機節點。 例如 Witnet 的[演算法聲譽系統](https://docs.witnet.io/intro/about/architecture#algorithmic-reputation-system)。 + +2. 正如同前面所說,去中心化預言機可能要求節點對他們提交數據的真實性進行質押。 如果該聲明經過驗證無誤,這筆質押可以連同誠實服務的獎勵一併返還。 但如果資訊不準確,節點也可以被懲罰,這為問責提供了一定的保障。 + +## 預言機在智慧型合約中的應用 {#applications-of-oracles-in-smart-contracts} + +以下是以太坊中預言機的常見用例: + +### 檢索金融數據 {#retrieving-financial-data} + +[去中心化金融](/defi/)(DeFi)應用程式允許點到點借貸、借款和資產交易。 通常這會需要不同的金融資訊,包括匯率數據(用來計算加密貨幣的法幣價值或比較代幣價格)和資本市場數據(用來計算代幣化資產的價值,例如黃金或美元)。 + +例如,一個去中心化借貸協議需要查詢作為抵押品存入的資產(例如 ETH)的當前市場價格。 這令合約能確定扺押品的價值,以及確定它能從系統中借出多少。 + +在 DeFi 中,常見的「價格預言機」包括 Chainlink Price Feeds、Compound 協議的[ Open Price Feed ](https://compound.finance/docs/prices)、Uniswap 的[時間加權平均價格(TWAPs)](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles)以及[ Maker 預言機](https://docs.makerdao.com/smart-contract-modules/oracle-module)。 + +開發者在將這些價格預言機整合到他們的項目中之前,應該了解相關的注意事項。 這篇[文章](https://blog.openzeppelin.com/secure-smart-contract-guidelines-the-dangers-of-price-oracles/)將詳細分析在計劃使用上述任何價格預言機時需要考慮的因素。 + +以下是一個在你的智慧型合約中使用 Chainlink price feed 查詢最新 ETH 價格的範例: + +```solidity +pragma solidity ^0.6.7; + +import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; + +contract PriceConsumerV3 { + + AggregatorV3Interface internal priceFeed; + + /** + * Network: Kovan + * Aggregator: ETH/USD + * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331 + */ + constructor() public { + priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331); + } + + /** + * Returns the latest price + */ + function getLatestPrice() public view returns (int) { + ( + uint80 roundID, + int price, + uint startedAt, + uint timeStamp, + uint80 answeredInRound + ) = priceFeed.latestRoundData(); + return price; + } +} +``` + +### 生成可以驗證的隨機性 {#generating-verifiable-randomness} + +某些區塊鏈應用程式,例如基於區塊鏈的遊戲或彩劵方案,需要高度不可預測性和隨機性才能有效運作。 但是,區塊鏈的確定性執行方式消除了任何隨機性。 + +最初的方法是使用偽隨機加密函數,如 `blockhash`,但這些函數可能會被工作量證明算法的[礦工操縱](https://ethereum.stackexchange.com/questions/3140/risk-of-using-blockhash-other-miners-preventing-attack#:~:text=So%20while%20the%20miners%20can,to%20one%20of%20the%20players.)。 同時,以太坊[切換到權益證明](/roadmap/merge/)意味著開發者無法再依賴` blockhash `來獲得鏈上隨機性。 信標鏈的[ RANDAO 機制](https://eth2book.info/altair/part2/building_blocks/randomness)提供了一種替代的隨機性來源。 + +從鏈下生成隨機值並發往鏈上是可行的,但這會需要對使用者有很高的信任要求。 他們必須相信這個值確實是通過無法預測的機制來生成,而且沒有在傳輸的過程中被修改。 + +專為鏈下計算而設計的預言機解決了這個問題,它們通過在鏈下安全地生成隨機結果,並將結果與證明過程的不可預測性密碼學證明一起廣播到鏈上。 [Chainlink VRF ](https://docs.chain.link/docs/chainlink-vrf/)(Verifiable Random Function)便是其中一個範例,它是一個可證明公平性且防竄改的隨機數生成器 (RNG),用於為依靠不可預測結果的應用程式構建可靠的智慧型合約。 另一個範例是 API3 QRNG,它提供基於量子現象的量子隨機數生成(QRNG),這是由澳大利亞國立大學(ANU)提供的一種公共 Web3 隨機數生成方法。 + +### 取得事件結果 {#getting-outcomes-for-events} + +有了預言機後,創建能對現實世界事件做出反應的智慧型合約變得簡單。 預言機服務通過允許合約通過鏈下組件連結到外部 APIs 並從這些數據來源中獲取資訊,來讓這變得可能。 例如,前面提到的預測 dApp 可能會請求預言機從可信的鏈下來源(例如美聯社)返回選舉結果。 + +使用預言機來檢索基於現實世界結果的數據,使其他創新的應用場景變為可能;例如一個去中心化的保險產品需要準確的天氣、災害等資訊才能有效運作。 + +### 自動化智慧型合約 {#automating-smart-contracts} + +智慧型合約不會自動運行;而是必須由一個外部帳戶 (EOA)或其他合約帳戶觸發相應的函數來執行合約程式碼。 在大多數情況下,合約的大部分函數都是公開且能被 EOA 和其他合約調用。 + +但合約中也有一些_私有函數_,這些函數對其他人不可訪問,但對 dApp 的整體功能至關重要。 例如一個定期鑄造新 NFT 給使用者的` mintERC721Token() `函數、預期市場中支付獎金的函數或在 DEX 中解鎖質押代幣的函數。 + +開發者會需要定期觸發這些函數來讓應用程式順暢運行。 但是,這可能會讓開發者浪費更多時間在這些日常任務,這便是為甚麼自動化執行智慧型合約如此具吸引力。 + +部分去中心化預言機網路提供自動化服務,允許鏈下預言機節點按照使用者定義的參數來觸發智慧型合約的函數。 通常來說,這會需要把目標合約「登記」在預言機服務上,提供資金以支付預言機營運者的費用,以及定義好合約的觸發條件或時間。 + +Chainlink 的[ Keeper Network ](https://chain.link/keepers) 向智慧型合約提供了以最小信任和去中心化的方式外包定期維護任務的選項。 請參閱這份官方的[ Keeper 文檔](https://docs.chain.link/docs/chainlink-keepers/introduction/),了解如何使您的合約兼容 Keeper 以及如何使用 Upkeep 服務。 + +## 如何使用區塊鏈預言機 {#use-blockchain-oracles} + +你可以將多個預言機應用程式整合到你的以太坊去中心化應用程式中: + +**[Chainlink](https://chain.link/)** - _Chainlink 去中心化預言機網路提供防篡改的輸入、輸出和運算,以支援任何區塊鏈上的高級智慧型合約。_ + +**[Chronicle](https://chroniclelabs.org/)** - _ Chronicle 通過開發真正可擴展、成本高效、去中心化且可驗證的預言機,克服了當前將數據傳輸到鏈上的限制。_ + +**[Witnet](https://witnet.io/)** - _Witnet 是一個無許可、去中心化且抗審查的預言機,協助智慧型合約以強大的加密經濟保證來對現實世界事件做出反應。_ + +**[UMA 預言機](https://uma.xyz)** - _UMA 的樂觀預言機允許智慧型合約快速接收各種應用程式所需要的任何類型數據,包括保險、金融衍生品和預期市場。_ + +**[Tellor](https://tellor.io/)** - _Tellor 是一個透明且無許可的預言機協議,使你的智慧型合約能夠隨時輕鬆獲取任何數據。_ + +**[Band Protocol](https://bandprotocol.com/)** - _Band Protocol 是一個跨鏈數據預言機平台,將現實世界的數據和 API 聚合並連結到智慧型合約中。

+ +**[Paralink](https://paralink.network/)** - _Paralink 向在以太坊和其他流行區塊鏈上運行的智慧型合約提供了一個開源且去中心化的預言機平台。

+ +**[Pyth Network](https://pyth.network/)** - _Pyth network 是一個第一方金融預言機網路,旨在於一個防竄改、去中心化、且能自給自足的環境中,持續發佈真實世界的資料到鏈上。_ + +**[API3 DAO](https://www.api3.org/)** - _API3 DAO 提供第一方預言機解決方案,為智慧型合約提供更高的來源透明度、安全性和可擴展性的去中心化解決方案。_ + +**[Supra](https://supra.com/)** - 一個垂直整合的跨鏈解決方案工具包,將所有區塊鏈(無論是公共的 L1 和 L2 還是私有的企業區塊鏈)相互連結,提供可用於鏈上和鏈下應用場景的去中心化預言機價格餵送。 + +## 延伸閱讀 {#further-reading} + +**文章** + +- [什麼是區塊鏈預言機?](https://chain.link/education/blockchain-oracles) — _Chainlink_ +- [什麼是區塊鏈預言機?](https://betterprogramming.pub/what-is-a-blockchain-oracle-f5ccab8dbd72) - _Patrick Collins_ +- [去中心化預言機:綜合概述 ](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) – _Julien Thevenard_ +- [在以太坊實踐區塊鏈預言機](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) – _Pedro Costa_ +- [為何智慧型合約無法調用APIs?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) - _StackExchange_ +- [為何我們需要去中心化預言機](https://newsletter.banklesshq.com/p/why-we-need-decentralized-oracles) - _Bankless_ +- [所以你想使用價格預言機](https://samczsun.com/so-you-want-to-use-a-price-oracle/) -_samczsun_ + +**影片** + +- [預言機擴張區塊鏈用途](https://youtu.be/BVUZpWa8vpw) - _Real Vision Finance_ +- [第一方與第三方預言機的差別](https://blockchainoraclesummit.io/first-party-vs-third-party-oracles/) - _Blockchain Oracle Summit_ + +**教學** + +- [如何用Solidity於以太坊調用目前報價](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) - _Chainlink_ +- [如何使用預言機數據](https://docs.chroniclelabs.org/Developers/tutorials/Remix) - _Chronicle_ + +**專案範例** + +- [使用 solidity 的以太坊完整 Chainlink 入門項目](https://github.com/hackbg/chainlink-fullstack) - _HackBG_ diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/index.md new file mode 100644 index 00000000000..44aa90fc817 --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/index.md @@ -0,0 +1,59 @@ +--- +title: 以太坊開發標準 +description: +lang: zh-tw +incomplete: true +--- + +## 標準概覽 {#standards-overview} + +以太坊社群導入許多標準幫助其多項計畫(例如[以太坊客戶](/developers/docs/nodes-and-clients/)及錢包), 並確保智慧型合約與Dapp互通性. + +常見標準稱為[Ethereum 改進提案](/eips/) (EIP), 由社群成員透過[標準的討論過程](https://eips.ethereum.org/EIPS/eip-1)確定。 + +- [EIP 簡介](/eips/) +- [EIP 列表](https://eips.ethereum.org/) +- [EIP GItHub 程式碼庫](https://github.com/ethereum/EIPs) +- [EIP 討論板](https://ethereum-magicians.org/c/eips) +- [以太坊管制導論](/governance/) +- [Ethereum Governance Overview](https://web.archive.org/web/20201107234050/https://blog.bmannconsulting.com/ethereum-governance/) _March 31, 2019 - Boris Mann_ +- [以太坊共識管理發展及網路合作更新](https://hudsonjameson.com/2020-03-23-ethereum-protocol-development-governance-and-network-upgrade-coordination/) _March 23, 2020 - Hudson Jameson_ +- [以太坊核心開發會議者播放列](https://www.youtube.com/@EthereumProtocol) _(YouTube Playlist)_ + +## 標準種類 {#types-of-standards} + +EIP 有三種類別: + +- 標準類別:任何影響多數或全部以太坊實作的改變 +- [元類別](https://eips.ethereum.org/meta):描述與以太坊相關的進程(process),或是提議改變一個進程 +- [資訊類別](https://eips.ethereum.org/informational):以太坊的設計問題、關於以太坊社群的資訊或一般指導原則 + +此外,標準類別還能被細分為四個子類別: + +- [核心](https://eips.ethereum.org/core):需要共識層級的分叉的改進 +- [網路](https://eips.ethereum.org/networking):關於 devp2p、Light Ethereum Subprotocol、whisper 和 swarm 網路協議規範的改進 +- [介面](https://eips.ethereum.org/interface):關於用戶端應用程式介面(API)/RPC 及標準的改進,以及語言級別的標準,如程式方法名稱及合約的 ABI +- [ERC(以太坊評論請求)](https://eips.ethereum.org/erc):應用層的標準與慣例 + +更多這些不同類別的詳細資訊,詳見[EIP-1](https://eips.ethereum.org/EIPS/eip-1#eip-types) + +### 權杖標準 {#token-standards} + +- [ERC-20](/developers/docs/standards/tokens/erc-20/) -- 一標準互動介面為同質性(可替代) 代幣, 例如投票代幣, 質押代幣, 或虛擬代幣. + - [ERC-223](/developers/docs/standards/tokens/erc-223/):一同質化代幣標準,讓代幣能與以太幣一樣,支援收受代幣端(合約)在接收到代幣轉帳時進行邏輯的處理。 + - [ERC-1363](https://eips.ethereum.org/EIPS/eip-1363):與 ERC-20 代幣相容的介面,支援代幣接收者在 transfer 與 transferFrom 兩方法被調用後、及被授權代幣操作者在 approve 方法被調用後的邏輯執行。 +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - 非同質化代幣的標準接口,例如藝術品或歌曲的契約。 + - [ERC-2309](https://eips.ethereum.org/EIPS/eip-2309):在單一或是許多 ERC-721 代幣創造與轉移時,合約事件(event)的標準化發布方法。 + - [ERC-4400](https://eips.ethereum.org/EIPS/eip-4400):為 ERC-721 加入一“消費者/使用者”的擴充介面。 + - [ERC-4907](https://eips.ethereum.org/EIPS/eip-4907):為 ERC-721 加入具時效性、有限權力的角色。 +- [ERC-777](/developers/docs/standards/tokens/erc-777/):**(不建議使用)** 一改進 ERC-20 的代幣標準。 +- [ERC-1155](/developers/docs/standards/tokens/erc-1155/):一兼容同質化、非同質化代幣的代幣標準。 +- [ERC-4626](/developers/docs/standards/tokens/erc-4626/):一 ERC-20 代幣化的金庫(vault,通常指收受使用者存款進行保管或投資的智能合約)標準,以標準化、最佳化會產生利息的金庫的技術規範。 + +了解更多代幣標準的詳情 [ 代幣標準](/developers/docs/standards/tokens/)。 + +## 衍生閱讀 {#further-reading} + +- [以太坊改進提案(EIP)](/eips/) + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-1155/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-1155/index.md new file mode 100644 index 00000000000..d22d53fb24c --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-1155/index.md @@ -0,0 +1,146 @@ +--- +title: ERC-1155 多代幣標準 +description: +lang: zh-tw +--- + +## 簡介 {#introduction} + +用於多種代幣管理的合約標準介面 單一部署的合約可以包括同質化代幣、非同質化代幣或其他配置(例如半同質化代幣)的任意組合。 + +**多代幣標準是什麼意思?** + +這個想法很簡單,旨在創建一個智慧型合約介面,可以表示和控制任意數量的同質化和非同質化代幣類型。 這樣,ERC-1155 代幣就可以實現與 [ERC-20](/developers/docs/standards/tokens/erc-20/)和 [ERC-721](/developers/docs/standards/tokens/erc-721/)代幣相同的功能,甚至可以同時實現這兩種功能。 它改進了 ERC-20 和 ERC-721 標準的功能,使其更有效率並修正了明顯的實作錯誤。 + +ERC-1155 代幣在 [EIP-1155](https://eips.ethereum.org/EIPS/eip-1155) 中有完整描述。 + +## 基本資訊 {#prerequisites} + +為了更好地理解本頁,我們建議你先閱讀[代幣標準](/developers/docs/standards/tokens/),[ERC-20](/developers/docs/standards/tokens/erc-20/)和[ERC-721](/developers/docs/standards/tokens/erc-721/)。 + +## ERC-1155 的函式和功能: {#body} + +- [批量傳送](#batch_transfers):在一次調用內傳送多種資產。 +- [批量餘額](#batch_balance):在一次調用內取得多種資產的餘額。 +- [批量允許](#batch_approval):允許某個地址的所有代幣。 +- [Hook](#receive_hook):接收代幣的鉤子函數。 +- [非同質化代幣支援](#nft_support):如果供應量只有 1,則視為非同質化代幣。 +- [安全轉帳規則](#safe_transfer_rule):安全轉帳規則集。 + +### 批量傳送 {#batch-transfers} + +批量傳送的工作原理與常規 ERC-20 傳送非常相似。 讓我們來看看常規的 ERC-20 `transferFrom` 函數: + +```solidity +// ERC-20 +function transferFrom(address from, address to, uint256 value) external returns (bool); + +// ERC-1155 +function safeBatchTransferFrom( + address _from, + address _to, + uint256[] calldata _ids, + uint256[] calldata _values, + bytes calldata _data +) external; +``` + +ERC-1155 中唯一的區別是我們將值作爲陣列傳輸,同時也傳輸了 ids 陣列。 例如,給定 `ids=[3, 6, 13]` 和 `values=[100, 200, 5]`,傳送結果將會是 + +1. 將 100 個 ID 為 3 的代幣從 `_from` 傳送到 `_to`。 +2. 將 200 個 ID 為 6 的代幣從 `_from` 傳送到 `_to`。 +3. 將 5 個 ID 為 13 的代幣從 `_from` 傳送到 `_to`。 + +在 ERC-1155 中,我們只有 `transferFrom`,沒有 `transsfer`。 爲了像常規的 `transfer` 一樣使用它,只需要將 from 地址設置爲調用該函數的地址。 + +### 批量餘額 {#batch-balance} + +對應的 ERC-20 `balanceOf` 呼叫同樣具有支援批次的對應函數。 作爲對比,這是 ERC-20 的版本: + +```solidity +// ERC-20 +function balanceOf(address owner) external view returns (uint256); + +// ERC-1155 +function balanceOfBatch( + address[] calldata _owners, + uint256[] calldata _ids +) external view returns (uint256[] memory); +``` + +對於餘額調用來說更簡單,我們可以在一次調用中取得多個餘額。 我們傳輸所有者的陣列,然後是代幣 ids 的陣列。 + +例如,給定 `_ids=[3, 6, 13]` 和 `_owners=[0xbeef..., 0x1337..., 0x1111...]`,傳回值將為 + +```solidity +[ + balanceOf(0xbeef...), + balanceOf(0x1337...), + balanceOf(0x1111...) +] +``` + +### 批量審批 {#batch-approval} + +```solidity +// ERC-1155 +function setApprovalForAll( + address _operator, + bool _approved +) external; + +function isApprovedForAll( + address _owner, + address _operator +) external view returns (bool); +``` + +批准與 ERC-20 略有不同。 與批准特定金額不同,你透過 `setApprovalForAll` 函數將操作者設置爲已批准或未批准。 + +查看目前的審批狀態可以透過 `isApprovedForAll` 完成。 如你所見,要么全部批准,要么不批准。 不能定義要批准代幣的數量,甚至代幣類型。 + +這是考慮到簡潔性而故意設計的。 你只能批准一個地址的所有代幣。 + +### 接收鉤子 {#receive-hook} + +```solidity +function onERC1155BatchReceived( + address _operator, + address _from, + uint256[] calldata _ids, + uint256[] calldata _values, + bytes calldata _data +) external returns(bytes4); +``` + +基於 [EIP-165](https://eips.ethereum.org/EIPS/eip-165) 的協定支持,ERC-1155 只支援智慧合約的接收鉤子函數。 鉤子函數必須傳回一個事先預先定義的 4 位元組值,這個值被指定為: + +```solidity +bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) +``` + +當接收合約傳回此值時,表示合約知道如何處理 ERC-1155 代幣並接受轉帳。 太好了,代幣不會再卡在合約中了! + +### 支援非同質化代幣 {#nft-support} + +當供應量只有 1 時,該代幣本質上是非同質化代幣 (NFT)。 依照 ERC-721 標準,你可以定義一個元數據網址。 用戶端可以讀取和修改該網址,請參閱[此處](https://eips.ethereum.org/EIPS/eip-1155#metadata)。 + +### 安全轉帳規則 {#safe-transfer-rule} + +在前面的解釋中,我們已經提到過一些安全轉帳規則。 現在我們來看看最重要的規則: + +1. 呼叫者必須獲得批准才能從 `_from` 的帳戶地址消費代幣,或者呼叫者帳戶地址必須與 `_from` 的帳戶地址相同。 +2. 在以下情況下,轉帳呼叫將回退 + 1. `_to` 地址為 0。 + 2. `_ids` 的長度與 `_values` 的長度不同。 + 3. `_ids` 中代幣持有者的任何餘額都低於發送給接收者的對應 `_value` 金額。 + 4. 出現任何其他錯誤。 + +_注意_:包括鉤子在內的所有批次函數也均以非批次的版本存在。 這樣做是為了提高燃料效率,考慮到只轉移一種資產可能仍然是最常用的方式。 簡潔起見,我們在這裡沒有介紹這些非批次的版本,包括安全轉帳規則。 名稱是相同的,只需移除 'Batch'。 + +## 衍生閱讀 {#further-reading} + +- [EIP-1155:多代幣標準](https://eips.ethereum.org/EIPS/eip-1155) +- [ERC-1155:Openzeppelin 文檔](https://docs.openzeppelin.com/contracts/3.x/erc1155) +- [ERC-1155: GitHub Repo](https://github.com/enjin/erc-1155) +- [Alchemy NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-20/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-20/index.md new file mode 100644 index 00000000000..13656e589ee --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-20/index.md @@ -0,0 +1,172 @@ +--- +title: ERC-20 代幣標準 +description: +lang: zh-tw +--- + +## 簡介 {#introduction} + +**什麼是代幣?** + +代幣幾乎可以代表以太坊中的任何東西: + +- 線上平台信譽積分 +- 遊戲中角色的技能 +- 金融資產,如公司股份 +- 法定貨幣,如美元 +- 一盎司黃金 +- 以及更多... + +以太坊這麼強大的功能當然要由一個穩健的標準來處理,對吧? 這正是 ERC-20 發揮作用的地方! 這個標準允許開發者構建與其他產品和服務相互操作的代幣應用程式。 ERC-20 標準也用於為[以太](/glossary/#ether)提供附加功能。 + +**什麼是 ERC-20?** + +ERC-20 引入了同質化代幣的標準,換句話說,這些代幣具有一種屬性,使得每個代幣在類型和值上都與其他代幣完全相同。 例如,ERC-20 代幣就像以太幣一樣,意味著一個代幣會及永遠與其他代幣一樣。 + +## 基本資訊 {#prerequisites} + +- [帳戶](/developers/docs/accounts) +- [智慧型合約](/developers/docs/smart-contracts/) +- [權杖標準](/developers/docs/standards/tokens/) + +## 內文 {#body} + +ERC-20(以太坊意見請求 20)由 Fabian Vogelsteller 於 2015 年 11 月提出,是一種在智慧型合約中實作代幣應用程式介面的代幣標準。 + +ERC-20 的功能範例: + +- 將代幣從一個帳戶轉移到另一個帳戶 +- 取得帳戶當前代幣餘額 +- 取得網路上可用代幣的總供應量 +- 批准第三方帳戶是否可以使用帳戶中的一定數量代幣 + +如果智慧型合約實作以下方法和事件,則可以將其稱為 ERC-20 代幣合約。一旦部署,它將負責追蹤以太坊上創建的代幣。 + +來自 [EIP-20](https://eips.ethereum.org/EIPS/eip-20): + +### 方法 {#methods} + +```solidity +function name() public view returns (string) +function symbol() public view returns (string) +function decimals() public view returns (uint8) +function totalSupply() public view returns (uint256) +function balanceOf(address _owner) public view returns (uint256 balance) +function transfer(address _to, uint256 _value) public returns (bool success) +function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) +function approve(address _spender, uint256 _value) public returns (bool success) +function allowance(address _owner, address _spender) public view returns (uint256 remaining) +``` + +### 事件 {#events} + +```solidity +event Transfer(address indexed _from, address indexed _to, uint256 _value) +event Approval(address indexed _owner, address indexed _spender, uint256 _value) +``` + +### 範例 {#web3py-example} + +讓我們看看為何標準如此重要,去讓我們檢查以太坊上的任何 ERC-20 代幣合約變得簡單。 我們只需要合約應用程式二進位介面 (ABI) 來創建任何 ERC-20 代幣的介面。 如下所示,我們將使用簡化的 ABI,使其成為一個低門檻的範例。 + +#### Web3.py 範例 {#web3py-example} + +首先,請確保你已經安裝了 [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python 程式庫: + +``` +pip install web3 +``` + +```python +from web3 import Web3 + + +w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com")) + +dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI +weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Wrapped ether (WETH) + +acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 2 + +# This is a simplified Contract Application Binary Interface (ABI) of an ERC-20 Token Contract. +# It will expose only the methods: balanceOf(address), decimals(), symbol() and totalSupply() +simplified_abi = [ + { + 'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}], + 'name': 'balanceOf', + 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'decimals', + 'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'symbol', + 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'totalSupply', + 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + } +] + +dai_contract = w3.eth.contract(address=w3.to_checksum_address(dai_token_addr), abi=simplified_abi) +symbol = dai_contract.functions.symbol().call() +decimals = dai_contract.functions.decimals().call() +totalSupply = dai_contract.functions.totalSupply().call() / 10**decimals +addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decimals + +# DAI +print("===== %s =====" % symbol) +print("Total Supply:", totalSupply) +print("Addr Balance:", addr_balance) + +weth_contract = w3.eth.contract(address=w3.to_checksum_address(weth_token_addr), abi=simplified_abi) +symbol = weth_contract.functions.symbol().call() +decimals = weth_contract.functions.decimals().call() +totalSupply = weth_contract.functions.totalSupply().call() / 10**decimals +addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decimals + +# WETH +print("===== %s =====" % symbol) +print("Total Supply:", totalSupply) +print("Addr Balance:", addr_balance) +``` + +## 已知問題 {#erc20-issues} + +### ERC-20 代幣接收問題 {#reception-issue} + +當 ERC-20 代幣被發送到並非用於處理 ERC-20 代幣而設計的智慧型合約時,這些代幣可能會永久丟失。 發生這種情況是因為接收合約不具有識別或回應傳入代幣的功能,且 ERC-20 標準中沒有機制來通知接收合約有關傳入代幣的資訊。 這個問題形成的主要方式是: + +1. 代幣傳送機制 + - ERC-20 代幣使用了 transfer 或 transferFrom 函數傳送 + - 當用戶使用這些函數將代幣發送到合約地址時,無論接收合約是否為處理代幣而設,代幣都會被傳送 +2. 缺乏通知 + - 接收的合約沒有收到代幣已發送給它的通知或回調 + - 如果接收合約缺乏處理代幣的機制(例如,遞補函數或管理代幣接收的專用函數),則代幣實際上會卡在合約的地址中 +3. 沒有內建處理 + - ERC-20 標準沒有包括強制要求接收合約實作接收代幣的函數,這導致許多合約無法正確管理收到的代幣 + +一些替代標準,例如 [ERC-223](/developers/docs/standards/tokens/erc-223) 已經解決了這個問題 + +## 了解更多 {#further-reading} + +- [EIP20:ERC-20 代幣標準](https://eips.ethereum.org/EIPS/eip-20) +- [OpenZeppelin - 代幣](https://docs.openzeppelin.com/contracts/3.x/tokens#ERC20) +- [OpenZeppelin - ERC-20 實作](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) +- [Alchemy - Solidity ERC20 代幣指南](https://www.alchemy.com/overviews/erc20-solidity) + + +## 其他同質化代幣標準 {#fungible-token-standards} + +- [ERC-223](/developers/docs/standards/tokens/erc-223) +- [ERC-777](/developers/docs/standards/tokens/erc-777) +- [ERC-4626 - 代幣化金庫](/developers/docs/standards/tokens/erc-4626) \ No newline at end of file diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-223/index.md new file mode 100644 index 00000000000..1ec82963499 --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-223/index.md @@ -0,0 +1,197 @@ +--- +title: ERC-223代幣標準 +description: 關於 ERC-223 同質性代筆標準的概述,包含它的運作方式以及與 ERC-20 的對代幣 +lang: zh-tw +--- + +## 介紹 {#introduction} + +### 什麼是ERC-223? {#what-is-erc223} + +ERC-223 是一種同質性代筆標準,與 ERC-20 標準類似。 主要的區別在於 ERC-223 不但定義了代幣應用程式介面,還定義了從發送者向接收者傳送代幣的邏輯。 它引入了一個交流模型,使代幣傳送能夠在接收者處進行處理。 + +### 與 ERC-20 的區別 {#erc20-differences} + +ERC-223 解決了 ERC-20 的一些限制,並在代幣合約與可能接受代幣的合約之間引入了一種新的互動方法。 有幾件事情是 ERC-223 可以做到但 ERC-20 不能做到的: + +- 在接收者處處理代幣傳送: 接收者可以檢測 ERC-223 代幣的存入。 +- 拒絕不正確發送的代幣: 如果使用者向不應該接收代幣的合約傳送 ERC-223 代幣,合約可以拒絕該交易,以避免損失代幣。 +- 傳送中的元數據: ERC-223 代幣可以包含元數據,允許在代幣交易上附加任意資訊。 + +## 先決條件 {#prerequisites} + +- [賬戶](/developers/docs/accounts) +- [智能合約](/developers/docs/smart-contracts/) +- [代幣標準](/developers/docs/standards/tokens/) +- [ERC-20](/developers/docs/standards/tokens/erc-20/) + +## 主旨 {#body} + +ERC-223 是一種在智能合約中實現代幣應用程式介面的代幣標準。 它也爲應該接收 ERC-223 代幣的合約聲明了一個應用程式介面。 不支持 ERC-223 接收者應用程式介面的合約無法接收 ERC-223 代幣,這防止了使用者出錯。 + +實現了以下方法和事件的智能合約可以被稱爲 ERC-223 兼容代幣合約。 一旦被部署,它將負責追蹤在以太坊上創建的代幣。 + +合約能夠擁有的函數不只有這些,並且可以將各種代幣標準的任意其他功能添加到該合約。 例如,`approve` 和 `transferFrom` 函數不是 ERC-223 標準的一部分,但如果有必要,這些函數可以被實現。 + +來自 [EIP-223](https://eips.ethereum.org/EIPS/eip-223): + +### 方法 {#methods} + +ERC-223 代幣必須實現一下方法: + +```solidity +function name() public view returns (string) +function symbol() public view returns (string) +function decimals() public view returns (uint8) +function totalSupply() public view returns (uint256) +function balanceOf(address _owner) public view returns (uint256 balance) +function transfer(address _to, uint256 _value) public returns (bool success) +function transfer(address _to, uint256 _value, bytes calldata _data) public returns (bool success) +``` + +應該接收 ERC-223 代幣的合約必須實現以下方法: + +```solidity +function tokenReceived(address _from, uint _value, bytes calldata _data) +``` + +如果 ERC-223 代筆被發送到沒有實現 `tokenReceived(..)` 函數的合約,該傳送則必定會失效,並且代幣不會從發送者的餘額中移動。 + +### Events {#events} + +```solidity +event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes calldata _data) +``` + +### 範例 {#examples} + +ERC-223 代幣的應用程式介面與 ERC-20 的相似,因此從使用者介面開發的角度上看沒有區別。 唯一的區別是 ERC-223 代幣可能沒有 `approve` + `transferFrom` 函數,因爲這些函數對於該標準是可以選擇的。 + +#### Solidity 範例 {#solidity-example} + +以下範例説明了基礎的 ERC-223 代幣是如何運作的: + +```solidity +pragma solidity ^0.8.19; +abstract contract IERC223Recipient { + function tokenReceived(address _from, uint _value, bytes memory _data) public virtual; +} +contract VeryBasicERC223Token { + event Transfer(address indexed from, address indexed to, uint value, bytes data); + string private _name; + string private _symbol; + uint8 private _decimals; + uint256 private _totalSupply; + mapping(address => uint256) private balances; + function name() public view returns (string memory) { return _name; } + function symbol() public view returns (string memory) { return _symbol; } + function decimals() public view returns (uint8) { return _decimals; } + function totalSupply() public view returns (uint256) { return _totalSupply; } + function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } + function isContract(address account) internal view returns (bool) { + uint256 size; + assembly { size := extcodesize(account) } + return size > 0; + } + function transfer(address _to, uint _value, bytes calldata _data) public returns (bool success){ + balances[msg.sender] = balances[msg.sender] - _value; + balances[_to] = balances[_to] + _value; + if(isContract(_to)) { + IERC223Recipient(_to).tokenReceived(msg.sender, _value, _data); + } + emit Transfer(msg.sender, _to, _value, _data); + return true; + } + function transfer(address _to, uint _value) public returns (bool success){ + bytes memory _empty = hex"00000000"; + balances[msg.sender] = balances[msg.sender] - _value; + balances[_to] = balances[_to] + _value; + if(isContract(_to)) { + IERC223Recipient(_to).tokenReceived(msg.sender, _value, _empty); + } + emit Transfer(msg.sender, _to, _value, _empty); + return true; + } +} +``` + +現在我們希望另一個合約接受 `tokenA` 存款 (假設該 tokenA 是 ERC-223 代幣)。 該合約必須只接受 tokenA 並拒絕其他代幣。 當合約接收 tokenA 時,它必須釋出一個 `Deposit()` 事件並增加 `deposits` 變數的值。 + +程式碼如下: + +```solidity +contract RecipientContract is IERC223Recipient { + event Deposit(address whoSentTheTokens); + uint256 deposits = 0; + address tokenA; // The only token that we want to accept. + function tokenReceived(address _from, uint _value, bytes memory _data) public override + { + // It is important to understand that within this function + // msg.sender is the address of a token that is being received, + // msg.value is always 0 as the token contract does not own or send Ether in most cases, + // _from is the sender of the token transfer, + // _value is the amount of tokens that was deposited. + require(msg.sender == tokenA); + deposits += _value; + emit Deposit(_from); + } +} +``` + +## 常見問題 {#faq} + +### 如果我們將一些 tokenB 發送到合約會發生什麽? {#sending-tokens} + +交易會失敗,並且不會發生代幣傳送。 代幣將返回至發送者的地址。 + +### 我們要如何向該合約存款? {#contract-deposits} + +調用 ERC-223 代幣的 `transfer(address,uint256)` 或 `transfer(address,uint256,bytes)` 函數,指定 `RecipientContract` 的地址。 + +### 如果我們將 ERC-20 代币傳送到該合約會發生什麽? {#erc-20-transfers} + +如果 ERC-20 代幣被發送到 `RecipientContract`,這些代幣將被傳送,但該傳送不會被識別 (不會釋出 `Deposit()` 事件,存款值不會發生改變)。 無法過濾或防止不必要的 ERC-20 存款。 + +### 如果我們希望在代幣存款完成後執行一些函數呢? {#function-execution} + +有多種方法可以做到這一點。 在該範例中我們將繼續使用讓 ERC-223 傳送與以太幣傳送相同的方法: + +```solidity +contract RecipientContract is IERC223Recipient { + event Foo(); + event Bar(uint256 someNumber); + address tokenA; // The only token that we want to accept. + function tokenReceived(address _from, uint _value, bytes memory _data) public override + { + require(msg.sender == tokenA); + address(this).call(_data); // Handle incoming transaction and perform a subsequent function call. + } + function foo() public + { + emit Foo(); + } + function bar(uint256 _someNumber) public + { + emit Bar(_someNumber); + } +} +``` + +當 `RecipientContract` 接收 ERC-223 代幣時,合約會執行一個編碼為 `_data` 代幣交易參數的函數,與以太坊交易編碼函數調用交易 `data` 相同。 閲讀 [數據欄位](https://ethereum.org/en/developers/docs/transactions/#the-data-field) 以獲取更多資訊。 + +在上述範例中,ERC-223 必須被傳送到具有 `transfer(address,uin256,bytes calldata _data)` 函數的 `RecipientContract` 地址。 如果數據參數為 `0xc2985578` (`foo()` 函數的簽名),則在代幣存款被接收之後,foo() 函數將被調用,並且 Foo() 事件將會釋出。 + +參數也可以編碼在代幣傳送的「data」中,例如我們可以使用「_someNumber」的 12345 值來呼叫 bar() 函數。 在這種情況下,`data` 必須為`0x0423a13200000000000000000000000000000000000000000000000000000000000004d2`,其中 `0x0423a132` 是 `bar(uint256)` 函數的簽名,`00000000000000000000000000000000000000000000000000000000000004d2` 是 12345 作爲 uint256。 + +## 限制 {#limitations} + +雖然 ERC-223 解決了 ERC-20 標準中的一些問題,但它也有自己的限制: + +- 采用與兼容性: ERC-223 目前還未被廣泛采用,這可能會限制其與現存工具和平台的兼容性。 +- 向後兼容性: ERC-223 不向後兼容 ERC-20,這意味著現存的 ERC-20 合約和工具無法再未經修改的情況下與 ERC-223 代幣一起使用。 +- 燃料成本: 與 ERC-20 的交易相比,ERC-223 中的額外檢查與功能可能會導致更高的燃料成本。 + +## 延伸閱讀 {#further-reading} + +- [EIP-223: ERC-223 代幣標準](https://eips.ethereum.org/EIPS/eip-223) +- [初始 ERC-223 提案](https://github.com/ethereum/eips/issues/223) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-4626/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-4626/index.md new file mode 100644 index 00000000000..5f5eb77c228 --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-4626/index.md @@ -0,0 +1,211 @@ +--- +title: ERC-4626 代幣化金庫標準 +description: 收益金庫的標準。 +lang: zh-tw +--- + +## 簡介 {#introduction} + +ERC-4626 是優化和統一收益金庫技術參數的標準。 它為表示單一底層 ERC-20 代幣的份額的代幣化收益金庫,提供標準應用程式介面。 ERC-4626 還概述了使用 ERC-20 的代幣化金庫的可選擴展,提供存款、提取代幣和讀取餘額的基本功能。 + +**ERC-4626 在收益金庫的作用** + +借貸市場、聚合器和本息代幣可協助使用者透過執行不同的策略,找到加密代幣的最佳收益率。 這些策略在執行時會略有不同,可能會容易出錯或浪費開發資源。 + +收益金庫的 ERC-4626 標準透過創建更一致和健壯的實作模式,無需開發者提供專門的工作,就能減少整合工作量並解鎖在各種應用程式中獲取收益的途徑。 + +ERC-4626 代幣在 [EIP-4626](https://eips.ethereum.org/EIPS/eip-4626) 中有完整描述。 + +## 基本資訊 {#prerequisites} + +為了更好地理解本頁,我們建議你先閱讀[代幣標準](/developers/docs/standards/tokens/)和[ERC-20](/developers/docs/standards/tokens/erc-20/)。 + +## ERC-4626 的函式和功能: {#body} + +### 方法 {#methods} + +#### asset {#asset} + +```solidity +function asset() public view returns (address assetTokenAddress) +``` + +此函數傳回用於金庫記帳、存款、提款的基礎代幣的地址。 + +#### totalAssets {#totalassets} + +```solidity +function totalAssets() public view returns (uint256) +``` + +此函數傳回金庫持有的相關資產總金額。 + +#### convertToShares {#convertoshares} + +```solidity +function convertToShares(uint256 assets) public view returns (uint256 shares) +``` + +此函數傳回 `shares` 的數量,該數量將由金庫兌換為提供的 `assets` 數量。 + +#### convertToAssets {#convertoassets} + +```solidity +function convertToAssets(uint256 shares) public view returns (uint256 assets) +``` + +此函數傳回 `assets` 的數量,該數量將由金庫兌換為提供的 `shares` 數量。 + +#### maxDeposit {#maxdeposit} + +```solidity +function maxDeposit(address receiver) public view returns (uint256 maxAssets) +``` + +該函數返回 `receiver` 的單個 [`deposit`](#deposit) 調用中可以存入的最大標的資產數量。 + +#### previewDeposit {#previewdeposit} + +```solidity +function previewDeposit(uint256 assets) public view returns (uint256 shares) +``` + +該函數允許用戶模擬其在當前區塊的存款效果。 + +#### 存款 {#deposit} + +```solidity +function deposit(uint256 assets, address receiver) public returns (uint256 shares) +``` + +該函數將標的代幣的 `assets`存入金庫,並將 `shares` 的所有權授予 `receiver`。 + +#### maxMint {#maxmint} + +```solidity +function maxMint(address receiver) public view returns (uint256 maxShares) +``` + +該函數返回 `receiver` 在單個 [`mint`](#mint) 調用中可以鑄造的最大數量。 + +#### previewMint {#previewmint} + +```solidity +function previewMint(uint256 shares) public view returns (uint256 assets) +``` + +該函數允許用戶在當前區塊模擬其鑄造的效果。 + +#### 鑄造 {#mint} + +```solidity +function mint(uint256 shares, address receiver) public returns (uint256 assets) +``` + +該函數透過存入標的代筆的 `assets`,將 `shares` 金庫份額準確鑄造到 `receiver`。 + +#### maxWithdraw {#maxwithdraw} + +```solidity +function maxWithdraw(address owner) public view returns (uint256 maxAssets) +``` + +該函數返回可以透過單個 [`withdraw`](#withdraw) 調用從 `owner` 餘額中提取的最大標的資產數量。 + +#### previewWithdraw {#previewwithdraw} + +```solidity +function previewWithdraw(uint256 assets) public view returns (uint256 shares) +``` + +該函數允許用戶模擬其在當前區塊的提款效果。 + +#### 提款 {#withdraw} + +```solidity +function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares) +``` + +該函數從 `owner` 銷毀 `shares`,並將 `assets` 代幣從金庫準確發送到 `receiver`。 + +#### maxRedeem {#maxredeem} + +```solidity +function maxRedeem(address owner) public view returns (uint256 maxShares) +``` + +該函數返回可以透過 [`redeem`](#redeem)調用從 `owner` 餘額中贖回的最大份額。 + +#### previewRedeem {#previewredeem} + +```solidity +function previewRedeem(uint256 shares) public view returns (uint256 assets) +``` + +該函數允許允許用戶在當前區塊中模擬其贖回效果。 + +#### redeem {#redeem} + +```solidity +function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets) +``` + +該函數從 `owner` 贖回特定數量的 `shares`,並將標的代幣的 `assets` 從金庫發送到 `receiver`。 + +#### totalSupply {#totalsupply} + +```solidity +function totalSupply() public view returns (uint256) +``` + +返回流通中未贖回的資金庫份額總數。 + +#### balanceOf {#balanceof} + +```solidity +function balanceOf(address owner) public view returns (uint256) +``` + +返回 `owner` 目前擁有的資金庫份額總量。 + +### 介面圖 {#mapOfTheInterface} + +![ERC-4626 介面圖](./map-of-erc-4626.png) + +### 事件 {#events} + +#### 存款事件 + +**必須**在通過[`mint`](#mint) 和[`deposit`](#deposit) 方法將代幣存入資金庫前發出 + +```solidity +event Deposit( + address indexed sender, + address indexed owner, + uint256 assets, + uint256 shares +) +``` + +其中`sender` 是用`assets` 兌換`shares`,並將這些`shares` 轉移給`owner`的用戶。 + +#### 提款事件 + +**必須**在存款人用[`redeem`](#redeem) 或[ `withdraw`](#withdraw) 方法從資金庫中取出份額時發出。 + +```solidity +event Withdraw( + address indexed sender, + address indexed receiver, + address indexed owner, + uint256 assets, + uint256 shares +) +``` + +其中 `sender` 是觸發提款並將 `owner` 擁有的 `shares` 兌換為 `assets` 的使用者。 `receiver` 是收到被提取的 `assets` 的使用者。 + +## 衍生閱讀 {#further-reading} + +- [ERC-4626:代幣化金庫標準](https://eips.ethereum.org/EIPS/eip-4626) +- [ERC-4626: GitHub Repo](https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC4626.sol) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-721/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-721/index.md new file mode 100644 index 00000000000..22a07820770 --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-721/index.md @@ -0,0 +1,244 @@ +--- +title: ERC-721 非同質化代幣標準 +description: +lang: zh-tw +--- + +## 簡介 {#introduction} + +**什麼是非同質化代幣?** + +非同質化代幣 (NFT) 用於以獨一無二的方式來識別某物或某人。 這類型的代幣非常適合在提供收藏品、密鑰、彩票、音樂會和體育比賽的編號座位等平台上使用。 這種特殊類型的代幣具有驚人潛力,因此它應得一個適當標準,而 ERC-721 正是來解決這個問題! + +**什麼是 ERC-721?** + +ERC-721 引入了非同質化代幣標準,換句話說,這類型的代幣是獨一無二,並且可以與來自同一智慧型合約的另一種代幣有不同的價值,這可能是由於其存在時間、稀有性甚至是視覺觀感等其他原因。 等一下,視覺觀感? + +是的! 所有非同質化代幣都有一個名為 `tokenId` 的 `uint256` 變數,因此對於任何 ERC-721 合約,該對 `contract address, uint256 tokenId` 必須是全局唯一的。 也就是說,去中心化應用程式可以有一個「轉換器」,使用 `tokenId` 作為輸入並輸出一些很酷的事物圖像,例如殭屍、武器、技能或神奇的小貓咪! + +## 基本資訊 {#prerequisites} + +- [帳戶](/developers/docs/accounts/) +- [智慧型合約](/developers/docs/smart-contracts/) +- [權杖標準](/developers/docs/standards/tokens/) + +## 主旨 {#body} + +ERC-721(以太坊意見請求 721)由 William Entriken、Dieter Shirley、Jacob Evans、Nastassia Sachs 於 2018 年 1 月提出,是一種非同質化代幣標準,在智慧型合約中實作代幣應用程式介面。 + +它提供的功能包括將代幣從一個帳戶轉移到另一個帳戶、獲取帳戶當前的代幣餘額、獲取特定代幣的所有者以及網路上可用代幣的總供應量。 此外它還有一些其他功能,例如批准帳戶中一定數量的代幣可以被第三方帳戶轉移。 + +如果智慧型合約實作以下方法和事件,則可以將其稱為 ERC-721 非同質化代幣合約。一旦部署,它將負責追蹤以太坊上創建的代幣。 + +取自 [EIP-721](https://eips.ethereum.org/EIPS/eip-721): + +### 方法 {#methods} + +```solidity + function balanceOf(address _owner) external view returns (uint256); + function ownerOf(uint256 _tokenId) external view returns (address); + function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; + function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; + function transferFrom(address _from, address _to, uint256 _tokenId) external payable; + function approve(address _approved, uint256 _tokenId) external payable; + function setApprovalForAll(address _operator, bool _approved) external; + function getApproved(uint256 _tokenId) external view returns (address); + function isApprovedForAll(address _owner, address _operator) external view returns (bool); +``` + +### 事件 {#events} + +```solidity + event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); + event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); + event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); +``` + +### 範例 {#web3py-example} + +讓我們看看為何標準如此重要,去讓我們檢查以太坊上的任何 ERC-721 代幣合約變得簡單。 我們只需要合約應用程式二進位介面 (ABI) 來創建任何 ERC-721 代幣的介面。 以下內容將使用簡易ABI來簡單示範. + +#### Web3.py 範例 {#web3py-example} + +首先先確定你已安專[Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python 資料庫: + +``` +pip install web3 +``` + +```python +from web3 import Web3 +from web3._utils.events import get_event_data + + +w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com")) + +ck_token_addr = "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d" # CryptoKitties Contract + +acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # CryptoKitties Sales Auction + +# This is a simplified Contract Application Binary Interface (ABI) of an ERC-721 NFT Contract. +# It will expose only the methods: balanceOf(address), name(), ownerOf(tokenId), symbol(), totalSupply() +simplified_abi = [ + { + 'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}], + 'name': 'balanceOf', + 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], + 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'name', + 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [{'internalType': 'uint256', 'name': 'tokenId', 'type': 'uint256'}], + 'name': 'ownerOf', + 'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}], + 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'symbol', + 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'totalSupply', + 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, +] + +ck_extra_abi = [ + { + 'inputs': [], + 'name': 'pregnantKitties', + 'outputs': [{'name': '', 'type': 'uint256'}], + 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [{'name': '_kittyId', 'type': 'uint256'}], + 'name': 'isPregnant', + 'outputs': [{'name': '', 'type': 'bool'}], + 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True + } +] + +ck_contract = w3.eth.contract(address=w3.to_checksum_address(ck_token_addr), abi=simplified_abi+ck_extra_abi) +name = ck_contract.functions.name().call() +symbol = ck_contract.functions.symbol().call() +kitties_auctions = ck_contract.functions.balanceOf(acc_address).call() +print(f"{name} [{symbol}] NFTs in Auctions: {kitties_auctions}") + +pregnant_kitties = ck_contract.functions.pregnantKitties().call() +print(f"{name} [{symbol}] NFTs Pregnants: {pregnant_kitties}") + +# Using the Transfer Event ABI to get info about transferred Kitties. +tx_event_abi = { + 'anonymous': False, + 'inputs': [ + {'indexed': False, 'name': 'from', 'type': 'address'}, + {'indexed': False, 'name': 'to', 'type': 'address'}, + {'indexed': False, 'name': 'tokenId', 'type': 'uint256'}], + 'name': 'Transfer', + 'type': 'event' +} + +# We need the event's signature to filter the logs +event_signature = w3.keccak(text="Transfer(address,address,uint256)").hex() + +logs = w3.eth.get_logs({ + "fromBlock": w3.eth.block_number - 120, + "address": w3.to_checksum_address(ck_token_addr), + "topics": [event_signature] +}) + +# Notes: +# - Increase the number of blocks up from 120 if no Transfer event is returned. +# - If you didn't find any Transfer event you can also try to get a tokenId at: +# https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#events +# Click to expand the event's logs and copy its "tokenId" argument +recent_tx = [get_event_data(w3.codec, tx_event_abi, log)["args"] for log in logs] + +if recent_tx: + kitty_id = recent_tx[0]['tokenId'] # Paste the "tokenId" here from the link above + is_pregnant = ck_contract.functions.isPregnant(kitty_id).call() + print(f"{name} [{symbol}] NFTs {kitty_id} is pregnant: {is_pregnant}") +``` + +除了標準事件外,謎戀貓合約還有一些有趣的事件。 + +讓我們檢查其中兩個:`Pregnant` 和 `Birth`。 + +```python +#通過懷孕及誕生事件ABI來取得新喵咪資訊. +ck_extra_events_abi = [ + { + 'anonymous': False, + 'inputs': [ + {'indexed': False, 'name': 'owner', 'type': 'address'}, + {'indexed': False, 'name': 'matronId', 'type': 'uint256'}, + {'indexed': False, 'name': 'sireId', 'type': 'uint256'}, + {'indexed': False, 'name': 'cooldownEndBlock', 'type': 'uint256'}], + 'name': 'Pregnant', + 'type': 'event' + }, + { + 'anonymous': False, + 'inputs': [ + {'indexed': False, 'name': 'owner', 'type': 'address'}, + {'indexed': False, 'name': 'kittyId', 'type': 'uint256'}, + {'indexed': False, 'name': 'matronId', 'type': 'uint256'}, + {'indexed': False, 'name': 'sireId', 'type': 'uint256'}, + {'indexed': False, 'name': 'genes', 'type': 'uint256'}], + 'name': 'Birth', + 'type': 'event' + }] + +# We need the event's signature to filter the logs +ck_event_signatures = [ + w3.keccak(text="Pregnant(address,uint256,uint256,uint256)").hex(), + w3.keccak(text="Birth(address,uint256,uint256,uint256,uint256)").hex(), +] + +# Here is a Pregnant Event: +# - https://etherscan.io/tx/0xc97eb514a41004acc447ac9d0d6a27ea6da305ac8b877dff37e49db42e1f8cef#eventlog +pregnant_logs = w3.eth.get_logs({ + "fromBlock": w3.eth.block_number - 120, + "address": w3.to_checksum_address(ck_token_addr), + "topics": [ck_event_signatures[0]] +}) + +recent_pregnants = [get_event_data(w3.codec, ck_extra_events_abi[0], log)["args"] for log in pregnant_logs] + +# Here is a Birth Event: +# - https://etherscan.io/tx/0x3978028e08a25bb4c44f7877eb3573b9644309c044bf087e335397f16356340a +birth_logs = w3.eth.get_logs({ + "fromBlock": w3.eth.block_number - 120, + "address": w3.to_checksum_address(ck_token_addr), + "topics": [ck_event_signatures[1]] +}) + +recent_births = [get_event_data(w3.codec, ck_extra_events_abi[1], log)["args"] for log in birth_logs] +``` + +## 熱門的非同質化代幣 {#popular-nfts} + +- [Etherscan NFT Tracker](https://etherscan.io/tokens-nft) 按傳送量列出了以太坊上熱門的非同質化代幣。 +- [CryptoKitties](https://www.cryptokitties.co/) 是一款圍繞可繁殖、可收藏且非常可愛,我們稱之為謎戀貓的生物為中心的遊戲。 +- [Sorare](https://sorare.com/) 是一款全球的夢幻足球遊戲,你可以在其中收集限量版收藏品、管理你的球隊並透過競爭贏得獎品。 +- [以太坊名稱服務 (ENS)](https://ens.domains/) 提供了一種安全、去中心化的方式,使用簡單及人類可讀的名稱來辨識鏈上鏈下的資源。 +- [POAP](https://poap.xyz) 向參加活動或完成特定行動的人免費提供 NFT。 建立和分發 POAP 是免費的。 +- [Unstoppable Domains](https://unstoppabledomains.com/) 是一家位於舊金山的公司,專注於建立區塊鏈域名服務。 區塊鏈域名以人類可辨識名稱取代加密貨幣地址,並可用於啟用抗審查網站。 +- [Gods Unchained Cards](https://godsunchained.com/) 是以太坊區塊鏈上的集換式卡牌遊戲,它使用非同質化代幣為遊戲內資產帶來真正的所有權。 +- [無聊猿遊艇俱樂部](https://boredapeyachtclub.com)是一件由10000 個獨一無二的非同質化代幣(NFT)構成的收藏品,也是非常罕見的藝術品,它作為俱樂部會員資格代幣,可為成員提供多種特權和福利,而且在社區的努力下特權和福利還會隨著時間不斷增加。 + +## 衍生閱讀 {#further-reading} + +- [EIP-721:ERC-721 非同質化代幣標準](https://eips.ethereum.org/EIPS/eip-721) +- [OpenZeppelin - ERC-721 文檔](https://docs.openzeppelin.com/contracts/3.x/erc721) +- [OpenZeppelin - ERC-721 實作](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol) +- [Alchemy NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-777/index.md new file mode 100644 index 00000000000..e3580261ba5 --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-777/index.md @@ -0,0 +1,77 @@ +--- +title: ERC-777 代幣標準 +description: +lang: zh-tw +--- + +## {#introduction} + +**** + +**** + +Hooks為一功能函數於智慧型合約程式中. 其能被調用當代幣被接發經由一智慧型合約. 其使智慧型合約能與進發之代幣互動. + +## {#prerequisites} + +- []() +- []() +- []() + +## {#body} + +此類掛鉤通常被登記及發現利用一[ERC-1820](https://eips.ethereum.org/EIPS/eip-1820)標準. + +此標準還解決了 ERC-20 中引起的 `decimals` 混亂。 這種明確度改善了開發者的體驗。 + +ERC-777 合約可以像 ERC-20 合約一樣進行互動。 + +### {#methods} + +```solidity + +``` + +### {#events} + +```solidity + +``` + +### {#web3py-example} + +#### {#web3py-example} + +``` + +``` + +```python + + + + +``` + +```python + + +``` + +## {#popular-nfts} + +- +- +- +- +- +- +- +- + +## 衍生閱讀 {#further-reading} + +- []() +- []() +- []() +- []() diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/index.md new file mode 100644 index 00000000000..b88ef6b8ddd --- /dev/null +++ b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/index.md @@ -0,0 +1,39 @@ +--- +title: 代幣標準 +description: +lang: zh-tw +incomplete: true +--- + +## 簡介 {#introduction} + +許多以太坊開發標準都專注於代幣介面。 這些標準有助於確保智慧型合約保持可組合性,例如當新專案發行代幣時,它仍然與現有的去中心化交易所相容。 + +## 基本資訊 {#prerequisites} + +- [以太坊開發標準](/developers/docs/standards/) +- [智慧型合約](/developers/docs/smart-contracts/) + +## 權杖標準 {#token-standards} + +以下是以太坊上一些最受歡迎的代幣標準: + +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - 同質化(可互換)代幣的標準接口,例如投票代幣、質押代幣或虛擬貨幣。 + +### 非同質化代幣標準 {#nft-standards} + +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - 非同質化代幣的標準接口,例如藝術品或歌曲的契約。 +- [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - ERC-1155 允許更有效率的交易和交易捆綁 – 從而節省成本。 該代幣標準允許創建實用代幣(例如 $BNB 或 $BAT)和非同質化代幣如 CryptoPunks。 + +[ERC](https://eips.ethereum.org/erc) 提案的完整清單。 + +## 衍生閱讀 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關教學影片 {#related-tutorials} + +- [代幣互動列表](/developers/tutorials/token-integration-checklist/)_-- 提供與代幣互動需考慮事件列表._ +- [了解 ERC20 代幣智慧型合約](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _– 在以太坊測試網路上部署你的首個智慧型合約的簡介。_ +- [從 Solidity 智慧型合約傳送並批准 ERC20 代幣](/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/) _ – 如何使用智慧型合約與使用 Solidity 語言的代幣互動。_ +- [實作 ERC721 市場 [操作指南]](/developers/tutorials/how-to-implement-an-erc721-market/) _–如何將代幣化的商品放在去中心化分類板上出售。_ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/index.md" new file mode 100644 index 00000000000..6f70492c4d6 --- /dev/null +++ "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/index.md" @@ -0,0 +1,114 @@ +--- +title: 擴張 +description: 介紹以太坊社群目前正在開發的多種擴張方案。 +lang: zh-tw +sidebarDepth: 3 +--- + +## 擴張方案概覽 {#scaling-overview} + +隨著以太坊使用者數量暴增,該區塊鏈已抵達一定程度的處理能力極限。 這大幅提高了使用該網路所需的費用,引發了對「擴展解決方案」的需求。 目前正在研究、試驗和實作多種解決方案,採取不同的方法實現相似的目標。 + +可擴展性的主要目標是在不犧牲去中心化或安全性的情況下,提高交易速度(更快的最終性)和交易吞吐量(更高的每秒交易數)(更多資訊,請參閱[以太坊願景](/roadmap/vision/))。 在一層網路以太坊區塊鏈上,高需求導致交易速度下降和難以維繫的[燃料價格](/developers/docs/gas/)。 從速度和吞吐量方面提高網路處理能力,將成為促進以太坊廣泛運用的重要基礎。 + +雖然速度及吞吐量極為重要,但擴張解決方案在實現這些目標的同時保持去中心化和安全也很重要。 降低節點營運者的進入門檻,對於防止算力的中心化和非安全化演進至關重要。 + +概念上,我們首先將擴張歸為兩種類型:鏈上擴張和鏈外擴張. + +## 基本資訊 {#prerequisites} + +你需要全面了解以太坊的所有基礎概念。 擴張解決方案的實作尚未被廣泛接受,因為該技術較少歷經實戰檢驗,並且仍在研究和開發中。 + +## 鏈上擴張 {#on-chain-scaling} + +鏈上擴張需要更改以太坊協定(一層網路[主網](/glossary/#mainnet))。 長期以來,區塊鏈分片被寄望於擴張以太坊。 分片涉及將區塊鏈分割成單獨的片段(分片),並由部分驗證者進行驗證。 然而,透過二層網路卷軸進行擴張已經取而代之,成爲首要的擴張技術。 為了支援這一點,我們增加了一種新的較便宜的資料形式附加到以太坊區塊,該資料專門為了降低使用者使用卷軸的成本而設計。 + +### 分片 {#sharding} + +分片是分割資料庫的過程。 部分驗證者將負責單獨的分片,而無需追蹤整個以太坊。 分片曾長期居於以太坊[開發藍圖](/roadmap/)之上,並且在合併至權益證明之前一度計劃上線。 然而,[二層網路卷軸](#layer-2-scaling)的快速發展和 [Danksharding](/roadmap/danksharding) 的發明(將卷軸資料的二進位大型物件新增至可由驗證者非常高效地進行驗證的以太坊區塊),致使以太坊社群更傾向於采用以卷軸為中心的擴張,而不是透過分片擴張。 這也會有助於使以太坊的共識邏輯更為簡單。 + +## 鏈外擴張 {#off-chain-scaling} + +鏈外擴張與一層網路主網分開實作 - 它們不需要變更現有的以太坊協定。 一些被稱爲「二層網路」的解決方案,直接從一層網路以太坊共識獲得安全性,例如[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)、[零知識證明卷軸](/developers/docs/scaling/zk-rollups/)或[狀態通道](/developers/docs/scaling/state-channels/)。 其他解決方案涉及建立獨立於主網獲取安全性的各種形式的新鏈,例如[側鏈](#sidechains)、[Validium](#validium) 或 [Plasma 鏈](#plasma)。 這些解決方案與主網通訊,但以不同方式獲取其安全性以實現不同的目標。 + +### 二層網路擴張 {#layer-2-scaling} + +此類鏈外解決方案從以太坊主網獲取安全性。 + +二層網路是一種統稱,用於描述那些旨在透過在以太坊主網(一層網路)之外處理交易,同時利用主網强大的去中心化安全模型來幫助擴張應用程式的解決方案。 當網路堵塞時,交易速度會受到影響,這會使某些類型的去中心化應用程式的用戶體驗變差。 而且隨著網路更加堵塞,交易送發者需要用高價燃料費來標取處理優先權,導致燃料費漲價。 這會讓使用以太坊非常昂貴。 + +多數二層網路解決方案以一個伺服器或伺服器叢集為中心,分別可以稱為節點、驗證者、營運者、排序者、區塊生成者或類似術語。 視具體實作而定,這些二層網路節點可能由使用它們的個人、企業或實體,或由第三方營運者或大型個人群體(類似於主網)運行。 一般而言,交易被提交至這些二層網路節點而非直接提交至一層網路(主網)。 對於某些解決方案,二層網路執行個體接著將交易分批成組並錨定至一層網路,然後再由一層網路提供保護且無法被更改。 詳細實際狀況將依不同二層網路技術和實現而有所差異。 + +特定二層網路執行個體可能是開放的並由多個應用程式共用,也可能由一個專案部署並專用於支援其應用程式。 + +#### 為何需要二層網路? {#why-is-layer-2-needed} + +- 增加每秒交易量會極大提升用戶體驗,並減少以太坊主網上的網路擁塞。 +- 多筆交易被彙總到單筆交易中傳送至以太坊主網,這為用戶減少了燃料費用,並使以太坊對所有人更加包容且易於存取。 +- 任何可擴性更新不應以損害去中心化或安全性為代價 - 二層網路建置于以太坊之上。 +- 一些二層網路有特定的應用領域,在大規模處理資產時有很高的效率。 + +[瞭解更多關於二層網路的資訊](/layer-2/)。 + +#### 卷軸 {#rollups} + +卷軸在一層網路之外執行交易,接著將資料發佈到一層網路並在其上達成共識。 當交易資料被包含到一層網路區塊時,這讓卷軸能夠受到原生以太坊安全性的保障。 + +依不同安全模式,有兩種類型的卷軸: + +- **樂觀卷軸**:假設交易在預設條件下有效,並且僅在遇到挑戰時透過[**詐欺證明**](/glossary/#fraud-proof)執行計算。 [有關樂觀卷軸的更多資訊](/developers/docs/scaling/optimistic-rollups/)。 +- **零知識卷軸**:在鏈外執行計算並提交[**有效性證明**](/glossary/#validity-proof)至鏈上。 [有關零知識卷軸的更多資訊](/developers/docs/scaling/zk-rollups/)。 + +#### 狀態通道 {#channels} + +狀態通道使用多簽合約,讓參與者能夠快速、自由地在鏈外交易,然後與主網達成最終性。 這會減少網路擁塞,降低費用並縮短處理延遲。 目前主要有兩種類型的通道:狀態通道和支付通道。 + +瞭解更多關於[狀態通道](/developers/docs/scaling/state-channels/)的資訊。 + +### 側鏈 {#sidechains} + +側鏈是一個與以太坊相容,並與以太坊主網平行運行的獨立區塊鏈。 側鏈透過雙向跨鏈橋與以太坊相容,並運行自己選定的共識規則及區塊參數。 + +瞭解更多關於[側鏈](/developers/docs/scaling/sidechains/)的資訊。 + +### Plasma {#plasma} + +Plasma 是一條獨立的區塊鏈,與以太坊主鏈錨定,並使用詐欺證明(像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)一樣)來仲裁爭議。 + +瞭解更多關於 [Plasma](/developers/docs/scaling/plasma/) 的資訊。 + +### Validium {#validium} + +Validium 鏈使用零知識證明卷軸一類的有效性證明,但不是將資料儲存在以太坊一層網路主鏈上。 每個 Validium 鏈能有每秒 10,000 筆交易的處理速度,多個 Validium 鏈能平行運作。 + +瞭解更多關於 [Validium](/developers/docs/scaling/validium/) 的資訊。 + +## 為何我們需要那麼多擴張解決方案? {#why-do-we-need-these} + +- 多個解決方案有助於減少網路任一部分的整體擁塞,並防止出現單一故障點。 +- 整體大於各部分的總和。 不同解決方案能共存並協調發揮效益,對未來的交易速度和吞吐量產生指數級影響。 +- 並非所有解決方案都需要直接使用以太坊共識演算法,替代機制或許能提供其他共識機制無法達成之好處。 +- 沒有一種擴張解決方案能夠完全滿足[以太坊願景](/roadmap/vision/)。 + +## 想透過視覺方式學習? {#visual-learner} + + + +_請注意,此影片中的解釋使用「二層網路」指代所有鏈外擴張解決方案,而我們將其區分為透過一層網路主網共識機制獲取安全性的鏈外解決方案。_ + + + +## 衍生閱讀 {#further-reading} + +- [以卷軸為中心的以太坊開發藍圖](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) _Vitalik Buterin_ +- [以太坊二層網路擴展解決方案最新分析](https://www.l2beat.com/) +- [評估以太坊二層網路擴張解決方案:比較框架](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) +- [卷軸之不完整指南](https://vitalik.eth.limo/general/2021/01/05/rollup.html) +- [以太坊驅動的零知識證明卷軸:業界佼佼者](https://hackmd.io/@canti/rkUT0BD8K) +- [樂觀卷軸與零知識證明卷軸](https://limechain.tech/blog/optimistic-rollups-vs-zk-rollups/) +- [零知識區塊鏈可擴展性](https://ethworks.io/assets/download/zero-knowledge-blockchain-scaling-ethworks.pdf) +- [爲什麽說卷軸 + 資料分片是提高可擴展性的唯一可持續解決方案](https://polynya.medium.com/why-rollups-data-shards-are-the-only-sustainable-solution-for-high-scalability-c9aabd6fbb48) +- [什麽類型的三層網路才有意義?](https://vitalik.eth.limo/general/2022/09/17/layer_3.html) +- [Data Availability Or: How Rollups Learned To Stop Worrying And Love Ethereum](https://ethereum2077.substack.com/p/data-availability-in-ethereum-rollups) + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/optimistic-rollups/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/optimistic-rollups/index.md" new file mode 100644 index 00000000000..c547ae35aa8 --- /dev/null +++ "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/optimistic-rollups/index.md" @@ -0,0 +1,269 @@ +--- +title: 樂觀卷軸 +description: 介紹零知識卷軸 — 一種以太坊社群使用的擴張解決方案。 +lang: zh-tw +--- + +樂觀卷軸是二層網路 (L2) 協定,旨在擴展以太坊基礎層的吞吐量。 它們透過在鏈外處理交易來減少以太坊主鏈上的計算,從而顯著提高處理速度。 與其他擴張解決方案(如[側鏈](/developers/docs/scaling/sidechains/))不同,樂觀卷軸從主網(透過在鏈上發佈交易結果)或 [Plasma 鏈](/developers/docs/scaling/plasma/)(該鏈還使用詐欺證明驗證以太坊主網上的交易,但將資料儲存在其他地方)獲取安全性。 + +由於計算是使用以太坊時緩慢且昂貴的部分,樂觀卷軸可以提供高達 10-100 倍的可擴展性提升。 樂觀卷軸還會將交易以 `calldata` 或[二進位大型物件](/roadmap/danksharding/)的形式寫入以太坊,從而降低使用者的燃料成本。 + +## 先備知識 {#prerequisites} + +你應該已經閲讀並理解我們關於[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2/)的頁面。 + +## 什麽是樂觀卷軸? {#what-is-an-optimistic-rollup} + +樂觀卷軸是一種擴張以太坊的方法,涉及將計算和狀態存儲遷移到鏈外。 樂觀卷軸在以太坊之外執行交易,但將交易資料作爲 `calldata` 或[二進位大型物件](/roadmap/danksharding/)發佈到主網。 + +樂觀卷軸營運者將多個鏈外交易捆綁到一個大批次中,然後將其提交到以太坊。 此方法可將固定成本分散到每一批次的多筆交易中,從而降低最終使用者的費用。 樂觀卷軸還使用壓縮技術來減少發佈在以太坊上的資料量。 + +樂觀卷軸之所以被認爲是「樂觀的」,是因爲其假設鏈外交易有效,並且不會針對發佈到鏈上的交易批次發佈有效性證明。 這區分了樂觀卷軸與[零知識卷軸](/developers/docs/scaling/zk-rollups),後者會發佈鏈外交易的加密[有效性證明](/glossary/#validity-proof)。 + +相反,樂觀卷軸依賴詐欺證明方案來偵測交易計算不正確的情況。 在以太坊上提交卷軸批次后,會有一個時間窗口(稱爲挑戰期),在此期間任何人都可以透過計算[詐欺證明](/glossary/#fraud-proof)來挑戰卷軸交易的結果。 + +如果詐欺證明成功,卷軸協定就會重新執行交易並相應地更新卷軸的狀態。 詐欺證明成功的另一個影響是,負責將錯誤執行的交易納入區塊的排序者會收到懲罰。 + +如果在挑戰期過後卷軸批次仍未被挑戰(即所有交易都正確執行),則它被視爲有效並在以太坊上被接受。 其他人可以繼續構建未經確認的卷軸區塊,但需要注意:交易結果如果以先前發佈的錯誤執行的交易為基礎,則會被撤銷。 + +## 樂觀卷軸如何與以太坊互動? {#optimistic-rollups-and-Ethereum} + +樂觀卷軸是爲了在以太坊上運作而構建的[鏈外擴張解決方案](/developers/docs/scaling/#off-chain-scaling)。 每個樂觀卷軸都由部署在以太坊網路上的一組智慧型合約來管理。 樂觀卷軸在以太坊主鏈之外處理交易,但將鏈外交易(按批次)發佈到鏈上的卷軸合約。 像以太坊區塊鏈一樣,此交易記錄是不可變的,並形成「樂觀卷軸鏈」。 + +樂觀卷軸的架構由以下部分組成: + +**鏈上合約**:樂觀卷軸的運作由在以太坊上執行的智慧型合約控制。 這包括用於存儲卷軸區塊、監控卷軸狀態更新以及追蹤使用者存款的合約。 從這種意義上講,以太坊充當樂觀卷軸的基礎層或「一層網路」。 + +**鏈外虛擬機 (VM)**:雖然管理樂觀卷軸協定的合約在以太坊上執行,但卷軸協定在[以太坊虛擬機](/developers/docs/evm/)之外的另一個虛擬機上執行計算和狀態存儲。 鏈外虛擬機是應用程式活躍和執行狀態變更的地方;它是樂觀卷軸的上層或「二層網路」。 + +由於樂觀卷軸旨在執行為以太坊虛擬機編寫或編譯的程式,因此鏈外虛擬機包含許多以太坊虛擬機設計規範。 此外,鏈上計算的詐欺證明讓以太坊網路可以强制執行在鏈外虛擬機中計算的狀態變更的有效性。 + +樂觀卷軸被描述為「混合擴張解決方案」,因爲儘管它們作爲單獨的協定存在,但其安全屬性來自以太坊。 除此之外,以太坊還能保證卷軸鏈外計算的正確性和計算後台資料的可用性。 這使得樂觀卷軸比不依賴以太坊獲取安全性的純鏈外擴張協定(如[側鏈](/developers/docs/scaling/sidechains/))更安全。 + +樂觀卷軸在以下方面依賴以太坊的主要協定: + +### 資料可用性 {#data-availability} + +如前所述,樂觀卷軸將交易資料以 `calldata` 或[二進位大型物件](/roadmap/danksharding/)的形式發佈到以太坊。 由於卷軸鏈的執行以提交的交易為基礎,任何人都可以使用在以太坊基礎層上錨定的此資訊,來執行卷軸的狀態並驗證狀態轉換的正確性。 + +[資料可用性](/developers/docs/data-availability/)至關重要,因爲如果不能存取狀態資料,挑戰者就無法構建詐欺證明來對無效的卷軸作業提出爭論。 透過以太坊提供資料可用性,卷軸營運者逃脫惡意行爲(如提交無效區塊)懲罰的風險就降低了。 + +### 審查阻力 {#censorship-resistance} + +樂觀卷軸也依賴以太坊來提供抗審查性。 在樂觀卷軸中,中心化實體(營運者)負責處理交易並將卷軸區塊提交到以太坊。 這會產生一些影響: + +- 卷軸營運者可以透過完全離綫或拒絕產生包含某些交易的區塊來審查使用者。 + +- 卷軸營運者可以透過扣留默克爾所有權證明所需的狀態資料,來阻止使用者提取存放在卷軸合約中的資金。 扣留狀態資料還可以向使用者隱匿卷軸的狀態,並阻止他們與卷軸進行互動。 + +樂觀卷軸透過迫使營運者在以太坊上發佈與狀態更新相關的資料來解決該問題。 在鏈上發佈卷軸資料有以下好處: + +- 如果樂觀卷軸營運者離線或停止產生交易批次,另一個節點可以使用可用資料來重現卷軸的最後狀態並繼續區塊生產。 + +- 使用者可以使用交易資料來建立默克爾證明,以證明資金的所有權,並從卷軸中提取他們的資產。 + +- 使用者也可以在一層網路提交交易,而不是提交給排序者,在這種情況下,排序者必須在一定時間限制内納入交易,以繼續生產有效的區塊。 + +### 結算 {#settlement} + +以太坊在樂觀卷軸背景下扮演的另一個角色是結算層。 結算層錨定整個區塊鏈生態系統,建立安全性,並在另一條鏈(在該實例中為樂觀卷軸)上發生需要仲裁的爭議時提供客觀的最終性. + +以太坊主網為樂觀卷軸提供了一個中樞,以驗證詐欺證明並解決爭議。 此外,在卷軸上進行的交易只有當區塊在以太坊上被接受_之後_才是最終的。 一旦卷軸交易被提交到以太坊的基礎層,它就無法回滾(除非在極不可能的情況下發生鏈重組)。 + +## 樂觀卷軸如何運作? {#how-optimistic-rollups-work} + +### 交易執行和彙總 {#transaction-execution-and-aggregation} + +使用者向「營運者」提交交易,「營運者」則是樂觀卷軸上負責處理交易的節點。 營運者也稱爲「驗證者」或「彙總者」,負責彙總交易、壓縮底層資料,並在以太坊上發佈區塊。 + +儘管任何人都可以成爲驗證者,但樂觀卷軸驗證者與[權益證明系統](/developers/docs/consensus-mechanisms/pos/)很像,必須在生成區塊之前提供保證金。 如果驗證者發佈了無效的區塊或構建了原有但無效的區塊(即使他們的區塊是有效的),該保證金可能會被罰沒。 透過這種方式,樂觀卷軸利用加密經濟激勵來確保驗證者誠實行事。 + +樂觀卷軸鏈上的其他驗證者預期使用他們的卷軸狀態複本來執行提交的交易。 如果驗證者的最終狀態與營運者建議的狀態不同,他們可以發起挑戰並計算詐欺證明。 + +一些樂觀卷軸可能會放棄無需許可的驗證者系統並使用單個「排序者」來執行鏈。 與驗證者一樣,排序者會處理交易、生成卷軸區塊,並將卷軸交易提交到一層網路鏈(以太坊)。 + +排序者與常規卷軸營運者不同,因爲他們對交易的順序有更大的控制權。 此外,排序者具有卷軸鏈的優先存取權,並且是唯一被授權向鏈上合約提交交易的實體。 來自非排序者節點或常規使用者的交易只會在一個單獨的收件匣中排隊,直到排序者將其納入一個新批次。 + +#### 提交卷軸區塊到以太坊 {#submitting-blocks-to-ethereum} + +如前所述,樂觀卷軸的營運者將鏈外交易捆綁為一個批次,並將其發送到以太坊進行公證。 該程序涉及壓縮與交易相關的資料,並將其作爲 `calldata` 或二進位大型物件發佈到以太坊上。 + +`calldata` 是智慧型合約中不可修改、非持久的區域,其行爲與[記憶體](/developers/docs/smart-contracts/anatomy/#memory)極為相似。 儘管 `calldata` 作爲區塊鏈[歷史日志](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs)的一部分持續不變,但它不會儲存爲以太坊狀態的一部分。 由於 `calldata` 不觸及以太坊狀態的任何部分,因此它比在鏈上儲存資料的狀態更便宜。 + +`calldata` 關鍵字也在 Solidity 中用於在執行時傳送參數到智慧型合約函式。 `calldata` 辨識在交易期間被調用的函式,並以任意位元組序列的形式保存函式的輸入。 + +在樂觀卷軸的背景下,`calldata` 被用於將壓縮的交易資料發送到鏈上合約。 卷軸營運者透過呼叫卷軸合約中所需的函式,並將壓縮資料作爲函式引數傳送,來添加新批次。 使用 `calldata` 可以降低使用者費用,因爲卷軸產生的大部分成本來自鏈上储存資料。 + +以下是卷軸批次提交的[一個示例](https://etherscan.io/tx/0x9102bfce17c58b5fc1c974c24b6bb7a924fb5fbd7c4cd2f675911c27422a5591),展示了此概念如何運作。 排序者叫用 `appendSequencerBatch()` 方法並使用 `calldata` 將壓縮的交易資料作爲輸入傳送。 + +一些卷軸現在使用二進位大型物件將交易批次發佈到以太坊。 + +二進位大型物件是不可修改且非持久的(就像 `calldata`),并會在約 18 天后從歷史记录中刪除。 有關二進位大型物件的更多資訊,請参阅 [Danksharding](/roadmap/danksharding)。 + +### 狀態承諾 {#state-commitments} + +在任何時間,樂觀卷軸狀態(帳戶、餘額、合約程式碼等)都被組織為[默克爾樹](/whitepaper/#merkle-trees),也稱爲「狀態樹」。 該默克爾樹的根(狀態根)引用卷軸的最新狀態,經過雜湊並儲存在卷軸合約中。 鏈上的每個狀態轉換都會產生一個新的卷軸狀態,營運者透過計算新的狀態根來提交該狀態。 + +營運者在發佈批次時需要同時提交舊狀態根和新狀態根。 如果舊狀態根與鏈上合約中現有的狀態根相符,則現有狀態根會被丟棄並替換爲新狀態根。 + +卷軸營運者還需要為交易批次本身提交默克爾根。 這讓任何人都能透過提供[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/),證明交易已納入批次中(在一層網路上)。 + +狀態承諾,尤其是狀態根,對於證明樂觀卷軸中的狀態變更正確性非常必要。 卷軸合約在發佈後會立即接受來自營運者的新狀態根,但之後可以刪除無效的狀態根,將卷軸復原到其正確狀態。 + +### 詐欺證明 {#fraud-proving} + +如前所述,樂觀卷軸讓任何人都可以在不提供有效性證明的情況下發佈區塊。 然而,爲了確保鏈保持安全,樂觀卷軸指定了一個時間窗口,在此期間任何人都可以對狀態轉換提出異議。 因此,卷軸區塊被稱爲「斷言」,因爲任何人都可以質疑其有效性。 + +如果有人對斷言提出異議,卷軸協定會啓動詐欺證明計算。 每種類型的詐欺證明都是互動式的 — 必須有人發佈斷言,然後另一個人才能對其提出挑戰。 區別在於計算詐欺證明需要多少輪互動。 + +單輪互動式證明方案在一層網路回放有爭議的交易,以偵測無效斷言。 卷軸協定使用驗證者合約模擬在一層網路(以太坊)上重新執行有爭議的交易,利用計算出的狀態根確定誰贏得挑戰。 如果挑戰者關於卷軸正確狀態的聲明是正確的,營運者就會受到懲罰,他們的保證金將被罰沒。 + +然而,在一層網路重新執行交易以偵測欺詐,需要發佈單獨交易的狀態承諾,並增加必須在鏈上發佈的資料卷軸。 回放交易還會產生巨大的燃料成本。 出於這些原因,樂觀卷軸正在轉換到多輪互動式證明,以更高的效率實現相同的目標(即偵測無效卷軸作業)。 + +#### 多輪互動式證明 {#multi-round-interactive-proving} + +多輪互動式證明涉及斷言者與挑戰者之間的往返協定,該協定由一層網路驗證者合約監督,最終確定説謊方。 二層網路節點對斷言提出挑戰后,斷言者需要將有爭議的斷言分成相等的兩半。 在這種情況下,每個單獨的斷言都會包含與另一個斷言一樣多的計算步驟。 + +然後挑戰者會選擇其想要挑戰的斷言。 劃分過程(稱爲「二等分協定」)一直持續到雙方就_單個_執行步驟的斷言發生爭議。 此時,一層網路合約會透過評估指示(及其結果)來解決爭議,以抓住欺詐方。 + +斷言者需要提供「一步證明」來驗證有爭議的單步計算的有效性。 如果斷言者未能提供一步證明,或者一層網路驗證者認爲證明無效,他們便會輸掉挑戰。 + +關於此類詐欺證明的一些注意事項: + +1. 多輪互動式詐欺證明被認爲是有效率的,因爲它能最大限度減少一層網路鏈在爭議仲裁中必須完成的工作。 一層網路鏈無需回放整個交易,而只需要重新執行卷軸執行過程中的一個步驟。 + +2. 二等分協定減少了發佈在鏈上的資料量(無需為每筆交易發佈狀態承諾)。 此外,樂觀卷軸交易不受以太坊燃料限制的約束。 相反,樂觀卷軸重新執行交易時必須確保二層網路交易具有較低的燃料限制,以模擬其在單筆以太坊交易中的執行。 + +3. 惡意斷言者的保證金一部分被獎勵給挑戰者,而另一部分則會被銷毀。 銷毀可以防止驗證者之間串通;如果兩個驗證者串通起來發起虛假挑戰,他們仍然會損失其全部質押的很大一部分。 + +4. 多輪互動式證明需要雙方(斷言者和挑戰者)在指定的時間窗口内行動。 未能在最後期限前采取行動會導致違約方喪失挑戰機會。 + +#### 爲什麽詐欺證明對於樂觀卷軸很重要 {#fraud-proof-benefits} + +詐欺證明很重要,因爲它們促進了樂觀卷軸中的_去信任最終性_。 去信任最終性是樂觀卷軸的一項品質,它保證交易只要有效,最終將會被確認。 + +惡意節點可以嘗試透過啓動虛假挑戰來延遲對有效卷軸區塊的確認。 然而,詐欺證明最終會證明卷軸區塊的有效性並使其得到確認。 + +這也與樂觀卷軸的另一個安全屬性有關:鏈的有效性依賴於_一個_誠實節點的存在。 誠實節點可以透過發佈有效斷言或對無效斷言提出異議來正確地推進鏈。 無論如何,與誠實節點發生爭議的惡意節點會在詐欺證明過程中失去其質押。 + +### 一層網路/二層網路的互操作性 {#l1-l2-interoperability} + +樂觀卷軸旨在與以太坊主網的互操作性,並允許使用者在一層網路和二層網路之間傳輸訊息和任意資料。 它們還與以太坊虛擬機兼容,因此你可以將現有的[去中心化應用程式](/developers/docs/dapps/)移植到樂觀卷軸,或使用以太坊開發工具建立新的去中心化應用程式。 + +#### 1. 資產轉移 {#asset-movement} + +##### 進入卷軸 + +爲了使用樂觀卷軸,使用者需要將以太幣、ERC-20 代幣和其他被接受的資產存入一層網路上卷軸的[跨鏈橋](/developers/docs/bridges/)合約中。 跨鏈橋合約會將交易轉送到二層網路,在那裏鑄造等量的資產並發送到使用者在樂觀卷軸上選擇的地址。 + +使用者生成的交易(如一層網路 > 二層網路存款)通常需要排隊,直到排序者將其重新提交到卷軸合約。 然而,爲了保持抗審查性,如果交易延遲超過允許的最大時間,樂觀卷軸將允許使用者直接向鏈上卷軸合約提交交易。 + +一些樂觀卷軸采用更簡單的方法來防止排序者審查使用者。 這時,區塊由自前一個區塊以來提交給一層網路合約的所有交易(如存款)以及卷軸鏈上已處理的交易共同定義。 如果排序者忽略一層網路交易,它將發佈(可證明)錯誤的狀態根;因此,一旦使用者產生的訊息被發佈在一層網路上,排序者就不能將其延遲。 + +##### 退出卷軸 + +由於詐欺證明方案,從樂觀卷軸提款到以太坊更加困難。 如果使用者發起一個二層網路 > 一層網路的交易以提取在一層網路上托管的資金,他們就必須等到挑戰期(持續約 7 天)結束。 盡管如此,提款過程本身相當簡單。 + +在二層網路上發起提款請求後,該交易會被納入下一個批次,同時使用者在卷軸上的資產被銷毀。 一旦批次在以太坊上發佈,使用者就可以計算一個默克爾證明,來驗證其退出交易是否納入到區塊中。 然後只需要等待延遲期過後最終確定一層網路上的交易,並將資金提取到主網。 + +爲了避免向以太坊提款之前等待一周的時間,樂觀卷軸使用者可以雇用一個**流動性提供者** (LP)。 流動性提供者承擔待處理的二層網路提款的所有權,並在一層網路上向使用者付款(以換取費用)。 + +流動性提供者可以在釋放資金之前檢查使用者提款請求的有效性(透過自行執行鏈)。 這樣他們就可以保證交易最終會得到確認(即去信任最終性)。 + +#### 2. 以太坊虛擬機 (EVM) 相容性 {#evm-compatibility} + +對於開發者來講,樂觀卷軸的優勢在於,它們與[以太坊虛擬機 (EVM)](/developers/docs/evm/) 的相容性(或者更確切地說,等效性)。 與以太坊虛擬機相容的卷軸符合[以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf)中的規範,並在位元組碼級別支援以太坊虛擬機。 + +樂觀卷軸中的以太坊虛擬機相容性具有以下好處: + +i. 開發者可以將以太坊上的現有智慧型合約遷移到樂觀卷軸鏈,而無需大量修改程式碼庫。 這可以節省開發團隊在二層網路上部署以太坊智慧型合約的時間。 + +ii. 使用樂觀卷軸的開發者和專案團隊可以利用以太坊的基礎設施。 這包括程式設計語言、程式碼庫、測試工具、用戶端軟體、部署基礎設施等。 + +使用現有工具很重要,因爲這些工具多年來已經過廣泛的審核、除錯和改進。 它還讓以太坊開發者不需要學習如何使用全新的開發堆棧建置應用程式。 + +#### 3. 跨鏈合約呼叫 {#cross-chain-contract-calls} + +使用者(外部擁有的帳戶)透過向卷軸合約提交交易或者讓排序者或驗證者為其提交交易,來與二層網路合約進行互動。 樂觀卷軸還讓以太坊上的合約帳戶可以與二層網路互動,使用跨鏈橋合約來轉送訊息,並在一層網路和二層網路之間傳遞資料。 這意味著你可以在以太坊主網上編寫一層網路合約,來叫用屬於二層網路樂觀卷軸合約的函式。 + +跨鏈合約呼叫是非同步發生的 — 這意味著呼叫首先啓動,然後再執行。 這與以太坊上兩個合約之間的呼叫不同,那種呼叫會立即產生結果。 + +跨鏈合約的一個範例是先前描述的代幣存款。 一層網路上的合約托管使用者的代幣,並向配對的二層網路合約發送訊息,以在卷軸中鑄造等量的代幣。 + +由於跨鏈訊息呼叫會導致合約執行,因此發送者通常需要支付用於計算的[燃料成本](/developers/docs/gas/)。 建議設定較高的燃料限制,以防止交易在目標鏈上失敗。 代幣跨鏈橋場景就是一個很好的範例:如果交易的一層網路端(存入代幣)有效,但二層網路端(鑄造新代幣)由於燃料不足而失敗,則存款將無法恢復。 + +最後,我們應該注意,合約之間的二層網路 > 一層網路訊息呼叫需要考慮延遲(一層網路 > 二層網路呼叫通常在幾分鐘後執行)。 這是因爲從樂觀卷軸發送到主網的訊息在挑戰窗口到期之前無法執行。 + +## 樂觀卷軸的費用如何計算? {#how-do-optimistic-rollup-fees-work} + +樂觀卷軸使用與以太坊非常相似的燃料費方案來表示使用者為每筆交易支付的費用。 樂觀卷軸收取的費用取決於以下組成部分: + +1. **狀態寫入**:樂觀卷軸將交易資料和區塊頭(由前一個區塊頭的雜湊、狀態根、批次根組成)作爲 `blob`,即「二進位大型物件」,發佈到以太坊。 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) 為鏈上納入資料引入了具成本效益的解決方案。 `blob` 是一個新交易欄位,讓卷軸可以將壓縮的狀態轉換資料發佈到以太坊一層網路。 與鏈上永久保留的 `calldata` 不同,二進位大型物件的生命周期很短,在 [4096 個時期](https://github.com/ethereum/consensus-specs/blob/81f3ea8322aff6b9fb15132d050f8f98b16bdba4/configs/mainnet.yaml#L147)(約 18 天)后即會被用戶端刪除。 透過使用二進位大型物件發佈壓縮的交易批次,樂觀卷軸可以顯著降低向一層網路寫入交易的成本。 + +2. **二進位大型物件燃料使用**:二進位大型物件攜帶的交易采用類似於 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 中引入的動態費用機制。 3 型交易的燃料費會考慮二進位大型物件的基本費用,該費用由網路根據二進位大型物件空間需求和所發送交易的二進位大型物件空間使用來決定。 + +3. **二層網路營運者費用**:這是支付給卷軸節點的金額,用於補償處理交易時產生的計算成本,與以太坊上的燃料費非常相似。 由於二層網路處理能力更强,並且不會出現網路擁塞迫使以太坊上的驗證者優先處理費用更高的交易,卷軸節點收取的交易費更低。 + +樂觀卷軸套用了多種機制來降低使用者的費用,包括批次交易和壓縮 `calldata` 來降低資料發佈成本。 你可以查看[二層網路費用追蹤器](https://l2fees.info/)來即時瞭解使用基於以太坊的樂觀卷軸的成本。 + +## 樂觀卷軸如何擴張以太坊? {#scaling-ethereum-with-optimistic-rollups} + +如前所述,樂觀卷軸在以太坊上發佈壓縮的交易資料,以保證資料可用性。 壓縮鏈上發佈的資料的能力,對於透過樂觀卷軸來擴張以太坊的吞吐量至關重要。 + +以太坊主鏈限制了區塊可容納的資料量,以燃料單位計價([平均區塊大小](/developers/docs/blocks/#block-size)為 1500 萬燃料)。 雖然這限制了每筆交易可以使用的燃料數量,但也意味著我們可以透過減少與交易相關的資料來增加每個區塊處理的交易 — 直接改進了可擴展性。 + +樂觀卷軸使用多種技術來實現交易資料壓縮並提高每秒交易數速率。 例如,這篇[文章](https://vitalik.eth.limo/general/2021/01/05/rollup.html)將基本使用者交易(發送以太幣)在主網上產生的資料量與相同交易在卷軸上產生的資料量進行了比較: + +| 參數 | 以太坊(一層網路) | 卷軸(二層網路) | +| ------ | ----------------- | ------------ | +| 隨機數 | ~3 | 0 | +| 燃料價格 | ~8 | 0-0.5 | +| 燃料 | 3 | 0-0.5 | +| 目標 | 21 | 4 | +| 數值 | 9 | ~3 | +| 簽名 | ~68 (2 + 33 + 33) | ~0.5 | +| 來源 | 0(從簽名恢復) | 4 | +| **總計** | **~112 個位元組** | **~12 個位元組** | + +對這些數字進行一些初略計算,有助於顯示樂觀卷軸提供的可擴展性改進: + +1. 每個區塊的目標大小為 1500 萬燃料,驗證一個位元組的資料需要 16 燃料。 將平均區塊大小除以 16 燃料 (15,000,000/16),顯示了一般區塊可以容納 **937,500 個位元組的資料**。 +2. 如果一個基本卷軸交易使用 12 個位元組,則以太坊區塊平均可以處理 **78,125 筆卷軸交易** (937,5000/12) 或 **39 個卷軸批次**(如果每個批次平均包含 2,000 筆交易)。 +3. 如果每 15 秒在以太坊上產生一個新區塊,則卷軸的處理速度大約爲**每秒 5,208 筆交易**。 計算方法是,將以太坊區塊可以容納的基本卷軸交易數量 (**78,125**) 除以平均出塊時間(**15 秒**)。 + +鑒於樂觀卷軸交易不可能包含以太坊上的整個區塊,這是一個比較樂觀的預計。 但是,透過它可以大致瞭解樂觀卷軸可以為以太坊使用者提供多少可擴展性收益(當前實現可提供每秒高達 2,000 筆交易的速率)。 + +在以太坊上引入[資料分片](/roadmap/danksharding/)有望增加樂觀卷軸的可擴展性。 由於卷軸交易必須與其他非卷軸交易共用區塊空間,因此其最大處理能力受制於以太坊主鏈上的資料吞吐量。 Danksharding 使用更便宜的非永久型「二進位大型物件」存儲,而不是昂貴的永久型 `CALLDATA`,這將增加二層網路鏈上用於按區塊發佈資料的空間。 + +### 樂觀卷軸的優點和缺點 {#optimistic-rollups-pros-and-cons} + +| 優勢 | 劣勢 | +| ------------------------------------------------------------------ | --------------------------------------- | +| 在不犧牲安全和去信任的情況下大幅改進可擴展性。 | 潛在的欺詐挑戰導致交易最終性延遲。 | +| 交易資料儲存在一層網路鏈上,提高了透明性、安全性、抗審查性和去中心化。 | 中心化卷軸營運者(排序者)可以影響交易順序。 | +| 詐欺證明保證了去信任的最終性,並使誠實少數能夠保護鏈的安全。 | 如果沒有誠實節點,惡意營運者就可以透過發佈無效區塊和狀態承諾來竊取資金。 | +| 計算詐欺證明對常規二層網路節點開放,這與需要特殊硬體的有效性證明(用於零知識卷軸中)不同。 | 安全模式依賴於至少一個誠實節點執行卷軸交易並提交詐欺證明來挑戰無效的狀態轉換。 | +| 卷軸受益於「去信任活躍性」(任何人都可以透過執行交易和發佈斷言來强制鏈前進) | 使用者在將資金提取回以太坊之前,必須等待為期一周的挑戰期結束。 | +| 樂觀卷軸依賴於精心設計的加密激勵機制來提升鏈上安全性。 | 卷軸必須在鏈上發佈所有交易資料,這可能會增加成本。 | +| 與以太坊虛擬機和 Solidity 的相容性,讓開發者可以將以太坊原生智慧型合約移植到卷軸或使用現有工具來建立新的去中心化應用程式。 | | + +### 樂觀卷軸之視覺範例 {#optimistic-video} + +想透過視覺方式學習? 觀看 Finematics 解釋樂觀卷軸: + + + +### 使用樂觀卷軸 {#use-optimistic-rollups} + +樂觀卷軸存在多種實作,可供你整合到去中心化應用程式: + + + +## 有關樂觀卷軸的延伸閲讀 + +- [樂觀卷軸如何運作(完整指引)](https://www.alchemy.com/overviews/optimistic-rollups) +- [什麽是區塊鏈卷軸? (技術介紹)](https://www.ethereum-ecosystem.com/blog/what-is-a-blockchain-rollup-a-technical-introduction) +- [Arbitrum 之概要指引](https://newsletter.banklesshq.com/p/the-essential-guide-to-arbitrum) +- [樂觀卷軸究竟如何運作?](https://www.paradigm.xyz/2021/01/how-does-optimisms-rollup-really-work) +- [樂觀虛擬機深入探索](https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52) +- [什麽是樂觀虛擬機?](https://www.alchemy.com/overviews/optimistic-virtual-machine) diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/plasma/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/plasma/index.md" new file mode 100644 index 00000000000..1f74e0ceff7 --- /dev/null +++ "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/plasma/index.md" @@ -0,0 +1,175 @@ +--- +title: Plasma 鏈 +description: 介紹目前作為擴張解決方案供以太坊社群使用的 Plasma 鏈。 +lang: zh-tw +incomplete: true +sidebarDepth: 3 +--- + +Plasma 鏈是錨定以太坊主網的獨立區塊鏈,其交易在鏈外執行並有自己的區塊驗證機制。 Plasma 鏈有時被稱為「子」鏈,本質上是以太坊主網的縮小複製版, 使用[詐欺證明](/glossary/#fraud-proof)(如[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/))來仲裁爭議。 + +使用默克爾樹可以建立這些鏈的無限堆疊,將父母鏈(包括以太坊主網)的頻寬載荷轉移到 Plasma 鏈。 然而,雖然這些鏈會繼承以太坊的一些安全性(透過詐欺證明),但它們的安全性和效率受多項設計限制的影響。 + +## 基本資訊 {#prerequisites} + +推薦你先熟悉以太坊的所有基本概念,並大致了解[以太坊擴張](/developers/docs/scaling/)。 + +## 何謂 Plasma 鏈? + +Plasma 是一個改善公共區塊鏈(如以太坊)可擴展性的框架。 如原始版 [Plasma 白皮書](http://plasma.io/plasma.pdf)中所述,Plasma 鏈建置在另一個區塊鏈(稱為「根鏈」)之上。 每個「子鏈」都是從根鏈延伸而來,通常由部署於父母鏈上的智慧型合約來管理。 + +Plasma 合約的功能之一是作為[跨鏈橋](/developers/docs/bridges/),讓使用者可以在以太坊主網和 Plasma 鏈之間移動資產。 雖然這讓 Plasma 鏈看似很像[側鏈](/developers/docs/scaling/sidechains/),但不同的是,Plasma 鏈至少某種程度上受益於以太坊主網的安全性, 而側鏈則是完全為自身的安全性負責,與以太坊主網無關。 + +## Plasma 鏈如何運作? + +Plasma 鏈的基本組成部分有: + +### 鏈外計算 {#off-chain-computation} + +以太坊目前的處理速度限制約是每秒 15 到 20 筆交易,短期內無法有效地擴張以面對更多使用者。 存在這個問題的原因是,以太坊的[共識機制](/developers/docs/consensus-mechanisms/)需要大量點對點節點來驗證區塊鏈狀態的每次更新。 + +雖然以太坊的共識機制對於安全性是必需的,但這並不適用於所有使用案例。 例如,Alice 不需要讓整個以太坊網路來驗證她每天付給 Bob 的咖啡錢,畢竟她跟 Bob 雙方之間已經有一定的信任關係了。 + +Plasma 鏈假設以太坊主網不需要驗證所有交易。 相反,我們可以在主網外處理交易,讓節點不必驗證每一筆交易。 + +由於 Plasma 鏈可以最佳化速度和成本,鏈外運算是有必要的。 舉例來說,Plasma 鏈可能(實際上經常如此)使用單一的「營運者」來管理交易的排序與執行。 既然只有一個實體驗證交易,在 Plasma 鏈上處理交易的速度就比以太坊主網快得多。 + +### 狀態承諾 {#state-commitments} + +儘管 Plasma 鏈在鏈外執行交易,這些交易仍會在以太坊主網的執行層結算,否則 Plasma 鏈也無法受益於以太坊的安全保障。 但如果在最終確定鏈外交易時未能獲知 Plasma 鏈的狀態,那將打破前述安全性模型,並可能導致無效交易氾濫。 這就是為何在 Plasma 鏈上負責產生區塊的營運者,需要定期在以太坊主網上發布「狀態承諾」。 + +[承諾方案](https://en.wikipedia.org/wiki/Commitment_scheme)是一種密碼學技術,用以在不洩漏給另一方的情況下承諾某個價值或是主張。 承諾就其意義而言是一種約束,一旦做出承諾就無法變更承諾的價值或主張。 Plasma 鏈上的狀態承諾會採用「默克爾根」(源自[默克爾樹](/whitepaper/#merkle-trees))的形式,營運者會定期把狀態承諾傳送到以太坊鏈上的 Plasma 合約。 + +默克爾根為密碼學基元,讓我們得以將大量資訊進行壓縮。 默克爾根(在這一情境下也稱「區塊根」)可以代表區塊內的所有交易。 默克爾根還讓我們可以很容易地驗證,一小份資料是否存在於較大資料集中。 舉例來說,使用者可以透過產生一個[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/#main-content),來證明一筆交易有被納入特定區塊中。 + +默克爾根非常重要,用於把鏈外狀態的相關資訊提供給以太坊。 我們可以把默克爾根想像成「暫存點」:營運者表示,「這是 Plasma 鏈在時間點 x 的狀態,以此默克爾根為證」。 營運者承諾 Plasma 鏈的_目前狀態_,並附上一個默克爾根,也就是所謂的「狀態承諾」。 + +### 進入與退出 {#entries-and-exits} + +以太坊的使用者如果想要享受到 Plasma 的好處,會需要一個機制來在以太坊主網與 Plasma 鏈之間轉移資金。 我們不能把以太幣隨意地傳送到 Plasma 鏈上的地址,不過由於兩個鏈並不相容,所以交易結果不是失敗就是資金消失。 + +Plasma 鏈使用一個在以太坊上執行的主合約來處理使用者的進入和退出。 這個主合約也負責追蹤狀態承諾(上文提到的),並依據詐欺證明來懲罰不誠實的行為(我們等等會詳談)。 + +#### 進入 Plasma 鏈 {#entering-the-plasma-chain} + +若要進入 Plasma 鏈,Alice(使用者)會需要存入以太幣或是任意 ERC-20 代幣到 Plasma 合約。 Plasma 上負責監視合約存款的營運者,會建立一筆與 Alice 的首筆存款等額的資產並發放到她在 Plasma 鏈上的地址。 Alice 需要在子鏈上證明有收到這筆資金,接著就可以使用這些資金進行交易。 + +#### 退出 Plasma 鏈 {#exiting-the-plasma-chain} + +退出 Plasma 鏈則因為各種原因,比進入時複雜了許多。 最大的原因是,雖然以太坊有關於 Plasma 鏈狀態的資訊,但以太坊並無法驗證那些資訊是否真實。 惡意使用者可以不實地宣稱(如「我有 1000 枚以太幣」),透過提供虛假證明來支持其謊言並逍遙法外。 + +為了避免惡意提款,「挑戰期」應運而生。 在挑戰期間(通常為一週),任何人都可以使用詐欺證明,對一個提款請求進行挑戰。 如果挑戰成功,提款請求就會被拒絕。 + +不過,使用者通常都是誠實的,對其擁有資金的宣稱也是正確的。 延續 Alice 的情境,她會透過向 Plasma 合約提交一筆交易,在根鏈(以太坊)上發起提款請求。 + +她還必須提供一個默克爾證明,驗證 Plamsa 鏈上有一筆建立 Alice 資金的交易已被納入到區塊中。 這對於 Plasma 的迭代實作來說很有必要,如 [Plasma MVP](https://www.learnplasma.org/en/learn/mvp.html),它採用的是[未花費交易輸出 (UTXO)](https://en.wikipedia.org/wiki/Unspent_transaction_output) 模型。 + +其他的實作方案如 [Plasma Cash](https://www.learnplasma.org/en/learn/cash.html),將資金視作[非同質化代幣](/developers/docs/standards/tokens/erc-721/),而非未花費交易輸出模型。 在這一實作方案中,提款時需要附上 Plasma 鏈上代幣的擁有權證明。 這可以透過提交兩筆包含代幣的最新交易,及一份默克爾證明,驗證這兩筆交易有被打包進區塊。 + +使用者也需要在提款請求中加入保證金,來擔保其行為誠實。 如果有挑戰者證明 Alice 的提款請求是無效的,她的保證金會被罰沒,其中一部分保證金會給挑戰者作為獎勵。 + +如果直至挑戰期結束,仍沒有任何人提供詐欺證明,Alice 的提款要求就會被視為有效,她便能把存款從以太鏈上的 Plasma 合約中取回。 + +### 爭議仲裁 {#dispute-arbitration} + +與任何區塊鏈一樣,Plasma 鏈需要一種機制來確保交易的完整性,防範參與者的惡意行爲(例如,雙重消費資金)。 爲此,Plasma 鏈使用詐欺證明來對有關狀態轉換有效性的爭議進行仲裁並懲罰不良行爲。 詐欺證明可作爲一種機制,Plasma 子鏈可以透過它向父母鏈或根鏈提出投訴。 + +詐欺證明只是聲明特定的狀態轉換無效。 例如,如果使用者 Alice 嘗試兩次消費同一資金。 也許她在與 Bob 的交易中消費了未花費交易輸出 (UTXO),並希望在另一筆交易中消費相同的未花費交易輸出(但現在是 Bob 的了)。 + +爲了防止提款,Bob 將透過提供 Alice 在之前交易中消費上述未花費交易輸出 (UTXO) 的證據以及該交易已納入區塊的默克爾證明,來建構詐欺證明。 在 Plasma Cash 中使用相同的程序 — Bob 需要提交證明,證明 Alice 先前已經傳送了她嘗試提取的代幣。 + +如果 Bob 挑戰成功,Alice 的提款請求將被取消。 然而,這種方法依賴於 Bob 有能力監視鏈上的提款請求。 如果 Bob 離綫,一旦挑戰期結束,Alice 就可以處理這筆惡意提款。 + +## Plasma 鏈中的大規模退出問題 {#the-mass-exit-problem-in-plasma} + +當大量使用者試圖同時從 Plasma 鏈提款時,就會出現大規模退出問題。 出現該問題的原因與 Plasma 的最大問題之一有關:**資料不可用性**。 + +資料可用性是驗證所提議區塊的資訊是否已實際發佈在區塊鏈網路上的能力。 如果生產者自己發佈區塊但保留用於建立區塊的資料,則該區塊是「不可用的」。 + +如果節點要能夠下載區塊並驗證交易的有效性,區塊必須是可用的。 區塊鏈透過迫使區塊生產者在鏈上發佈所有交易資料來確保資料可用性。 + +資料可用性還有助於保護建構於以太坊基礎層之上的鏈外擴張協議。 透過迫使這些鏈上營運者在以太坊上發佈交易資料,任何人都可以藉由構建引用正確鏈狀態的詐欺證明,來挑戰無效區塊。 + +Plasma 鏈主要儲存與營運者的交易資料,並且**不在主網上發佈任何資料**(即除了定期狀態承諾之外)。 這意味著如果使用者需要建立詐欺證明來挑戰無效交易,他們就必須仰賴營運者提供交易資料。 如果該系統正常運作,則使用者始終可以使用詐欺證明來保護資金。 + +當進行惡意行爲的是營運者而不僅僅是使用者時,問題就開始了。 由於營運者完全控制區塊鏈,他們更有動力更大規模地推進無效狀態轉換,例如竊取 Plasma 鏈上屬於使用者的資金。 + +在這種情況下,使用經典的詐欺證明系統是行不通的。 營運者可以簡單地進行無效交易,將 Alice 和 Bob 的資金傳送到其錢包中,並隱藏建立詐欺證明所需的資料。 這是可能的,因爲營運者不需要向使用者或主網提供資料。 + +因此,最樂觀的解決方案是嘗試從 Plasma 鏈上「大規模退出」使用者。 大規模退出減慢了惡意營運者竊取資金的計劃,並為使用者提供了一定程度的保護。 提款請求根據每個未花費交易輸出 (UTXO)(或代幣)的建立時間排序,以防止惡意營運者搶先交易誠實的使用者。 + +盡管如此,我們仍然需要一種方法來驗證大規模退出期間提款請求的有效性,以防止機會主義個人在處理無效退出的混亂中獲利。 解決方案很簡單:要求使用者發佈最後一個**有效的鏈狀態**來退出其資金。 + +但這種方法仍然存在問題。 例如,如果 Plasma 鏈上的所有使用者都需要退出(在惡意營運者的情況下是可能的),Plasma 鏈的整個有效狀態就必須立即轉儲到以太坊的基礎層。 由於 Plasma 鏈可能為任意大小(高吞吐量 = 更多資料)和以太坊處理速度的限制,這不是一個理想的解決方案。 + +儘管退出游戲在理論上聽起來不錯,但現實中的大規模退出可能會引發以太坊本身的全網路擁塞。 除了損害以太坊的功能之外,協調不善的大規模退出意味著使用者可能無法在營運者耗盡 Plasma 鏈上的每個帳戶之前提取資金。 + +## Plasma 的優勢和劣勢 {#pros-and-cons-of-plasma} + +| 優勢 | 劣勢 | +| ----------------------------------------------------------------------------- | --------------------------------------------------- | +| 提供高吞吐量和低單位交易成本。 | 不支援一般運算(無法執行智慧型合約)。 僅透過特定運用邏輯支援基本的代幣轉移、交換及其他幾種交易類型。 | +| 適合任意使用者之間的交易(若雙方使用者都處於 Plasma 鏈上,則不會產生任何開銷) | 需要本人定期監看網路(活躍性要求)或委託他人監看,以保障資金安全。 | +| Plasma 鏈可以適應與主鏈無關的特定使用案例。 包括企業在内的任何人,都可以自訂 Plasma 智慧型合約,以提供可在不同情境下運作的可擴展基礎設施。 | 仰賴一或多個營運者來儲存資料並根據要求提供此資料。 | +| 透過將計算和存儲遷移到鏈外來減少以太坊主網的載荷。 | 提款可被延遲數日以容許挑戰。 對於同質化資產,流動性提供者可以緩解這種情況,但存在相關的資本成本。 | +| | 如果太多使用者同時嘗試退出,以太坊主網可能會擁塞。 | + +## Plasma 與二層網路擴張協定 {#plasma-vs-layer-2} + +雖然 Plasma 曾被視爲對以太坊有用的擴張解決方案,但後來被棄用,由[二層網路 (L2) 擴張協定](/layer-2/)所取代。 二層網路擴張解決方案解決了 Plasma 的幾個問題: + +### 效率 {#efficiency} + +[零知識卷軸](/developers/docs/scaling/zk-rollups)為在鏈外處理的每批交易的有效性產生加密證明。 這可防止使用者(和營運者)推進無效的狀態轉換,因而不再需要挑戰期和退出游戲。 這也意味著使用者不必透過定期監視鏈來保護其資金安全。 + +### 支援智慧型合約 {#support-for-smart-contracts} + +Plasma 框架的另一個問題是[無法支援以太坊智慧型合約的執行](https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598/4)。 因此,Plasma 的大多數實作主要是用於簡單的支付或 ERC-20 代幣交換。 + +相反,樂觀卷軸與[以太坊虛擬機](/developers/docs/evm/)相容,並且可以執行以太坊原生[智慧型合約](/developers/docs/smart-contracts/),使其成爲擴張[去中心化應用程式](/developers/docs/dapps/)的實用且_安全_的解決方案。 類似地,[建立以太坊虛擬機的零知識實作 (zkEVM)](https://ethresear.ch/t/a-zk-evm-specification/11549) 正在計劃中,使零知識卷軸能夠處理任意邏輯並執行智慧型合約。 + +### 資料不可用 {#data-unavailability} + +如前所述,Plasma 存在資料可用性問題。 如果惡意營運者在 Plasma 鏈上推進了無效轉換,使用者將無法挑戰它,因爲營運者可以扣留建立詐欺證明所需的資料。 卷軸迫使營運者在以太坊上發佈交易資料,允許任何人驗證鏈的狀態並在必要時建立詐欺證明,從而解決了該問題。 + +### 大規模退出問題 {#mass-exit-problem} + +零知識卷軸和樂觀卷軸都以不同方式解決了 Plasma 的大規模退出問題。 例如,零知識卷軸依賴加密機制來確保營運者在任何情況下都無法竊取使用者的資金。 + +類似地,樂觀卷軸對提款施加了延遲期,在延遲期内任何人都可以發起挑戰並阻止惡意的提款請求。 儘管這與 Plasma 類似,但區別在於,驗證者可以存取建立詐欺證明所需的資料。 因此,卷軸使用者無需瘋狂地「爭先恐後」般遷移到以太坊主網。 + +## Plasma 與側鏈和分片有何不同? {#plasma-sidechains-sharding} + +Plasma、側鏈和分片技術有一定的相似,因爲它們都以某種方式連線到以太坊主網。 然而,連線到以太坊主網的級別和强度有所不同,影響這些擴張解決方案的安全屬性。 + +### Plasma 與側鏈 {#plasma-vs-sidechains} + +[側鏈](/developers/docs/scaling/sidechains/)是一種獨立運行的區塊鏈,透過雙向跨鏈橋連線到以太坊主網。 [跨鏈橋](/bridges/)讓使用者可以在兩條區塊鏈之間交換代幣,以便在側鏈進行交易,降低了以太坊主網上的擁塞並增加了可擴展性。 側鏈使用獨立的共識機制,並且它們通常比以太坊主網小得多。 因此,將資產橋接到這些區塊鏈會增加風險;由於側鏈模型中缺少從以太坊主網繼承的安全保證,在側鏈受到攻擊時,使用者會承擔資金損失的風險。 + +相反,Plasma 鏈的安全性來自主網。 這使其明顯比側鏈更安全。 側鏈和 Plasma 鏈都可以使用不同的共識協定。但區別是,Plasma 鏈在以太坊主網上發佈每個區塊的默克爾根。 區塊根是小段的資訊,可用於驗證在 Plasma 鏈上進行的相關交易的資訊。 如果 Plasma 鏈受到攻擊,使用者可以使用適當的證明來安全地將資金提取回主網。 + +### Plasma 與分片 {#plasma-vs-sharding} + +Plasma 鏈和分片鏈都會定期向以太坊主網發佈加密證明。 然而,它們的安全屬性有所不同。 + +分片鏈向主網提交「定序頭」,其中包含有關每個資料分片的詳細資訊。 主網上的節點驗證和執行資料分片的有效性,減少了無效分片轉換的可能性並防止網路上出現惡意活動。 + +Plasma 有所不同,因爲主網只接收最少量的子鏈狀態資訊。 這意味著主網無法有效驗證子鏈上進行的交易,降低了交易的安全性。 + +**請注意**,以太坊區塊鏈分片已經不再包含在開發藍圖中。 它已經被卷軸和 [Danksharding](/roadmap/danksharding) 擴張所取代。 + +### 使用 Plasma {#use-plasma} + +有多項專案提供 Plasma 實作,歡迎整合到你的去中心化應用程式: + +- [Polygon](https://polygon.technology/)(前身為 Matic 網路) + +## 延伸閱讀 {#further-reading} + +- [瞭解 Plasma](https://www.learnplasma.org/en/) +- [「共用安全性」的含義及其重要性概覽](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) +- [側鏈、Plasma 與分片](https://vitalik.eth.limo/general/2019/06/12/plasma_vs_sharding.html) +- [瞭解 Plasma,第一部分:基礎知識](https://www.theblockcrypto.com/amp/post/10793/understanding-plasma-part-1-the-basics) +- [Plasma 的生與死](https://medium.com/dragonfly-research/the-life-and-death-of-plasma-b72c6a59c5ad#) + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/sidechains/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/sidechains/index.md" new file mode 100644 index 00000000000..711afd99424 --- /dev/null +++ "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/sidechains/index.md" @@ -0,0 +1,73 @@ +--- +title: 側鏈 +description: 介紹目前作為擴張解決方案供以太坊社群使用的側鏈。 +lang: zh-tw +sidebarDepth: 3 +--- + +側鏈是獨立於以太坊運行的獨立區塊鏈,並透過雙向跨鏈橋連線到以太坊主網。 側鏈可以有單獨的區塊參數和[共識演算法](/developers/docs/consensus-mechanisms/),通常是為了高效處理交易而設計。 然而,使用側鏈需要權衡,因為它們不會繼承以太坊的安全屬性。 與[二層網路擴張解決方案](/layer-2/)不同,側鏈不會將狀態變更和交易數據發佈回以太坊主網。 + +側鏈也犧牲了一些去中心化或安全性措施來實現高吞吐量([可擴展性三難困境](https://vitalik.eth.limo/general/2021/05/23/scaling.html))。 然而,正如其升級[願景聲明](/roadmap/vision/)中所述,以太坊致力於在不影響去中心化和安全性的情況下擴張。 + +## 側鏈的工作原理 {#how-do-sidechains-work} + +側鏈是獨立的區塊鏈,具有不同的歷史記錄、開發藍圖和設計考量。 雖然側鏈可能與以太坊有一些表面上的相似,但它有幾個獨特功能。 + +### 共識演算法 {#consensus-algorithms} + +讓側鏈獨一無二(即不同於以太坊)的特質之一是所使用的共識演算法。 側鏈不依賴以太坊達成共識,並可以選擇適合其需求的替代共識協議。 側鏈上使用的共識演算法的一些範例包括: + +- [權威證明](/developers/docs/consensus-mechanisms/poa/) +- [委託權益證明](https://en.bitcoin.it/wiki/Delegated_proof_of_stake) +- [拜占庭容錯](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained)。 + +跟以太坊一樣,側鏈也有驗證節點去驗證和處理交易、產生區塊並儲存區塊鏈狀態。 驗證者也負責維護整個網路的共識,並確保它不受惡意攻擊。 + +#### 區塊參數 {#block-parameters} + +以太坊對[出塊時間](/developers/docs/blocks/#block-time)(即產生新區塊所需時間)和[區塊大小](/developers/docs/blocks/#block-size)(即以燃料為計量單位,每個區塊包含的資料量)設定了限制。 相反地,側鏈通常會採用不同的參數,例如更快的出塊時間和更高的燃料限制,以達到高吞吐量、快速交易和低費用。 + +雖然這樣做有一些好處,但對網路去中心化和安全性卻有重大影響。 高速的出塊時間和大的區塊大小這些區塊參數,增加了運行全節點的難度,讓一些「超級節點」負責保護區塊鏈的安全。 在這種情況下,驗證者串通或惡意接管鏈的可能性就會增加。 + +若要在不損害去中心化的情況下擴大區塊鏈的規模,就必須讓人人都能運行節點,而不一定是擁有專門硬體的人。 這就是我們一直在努力確保每個人都能在以太坊網路上[運行全節點](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node)的原因。 + +### 以太坊虛擬機 (EVM) 相容性 {#evm-compatibility} + +一些側鏈與以太坊虛擬機相容,並且能夠執行為[以太坊虛擬機 (EVM)](/developers/docs/evm/) 開發的合約。 相容於以太坊虛擬機的側鏈支援以 [Solidity 編寫](/developers/docs/smart-contracts/languages/)的智慧型合約,也支援其他以太坊虛擬機智慧型合約語言,這意味著為以太坊主網編寫的智慧型合約也將在相容於以太坊虛擬機的側鏈上有效。 + +這意味著若你想在側鏈上使用你的[去中心化應用程式](/developers/docs/dapps/),只需將你的[智慧型合約](/developers/docs/smart-contracts/)部署到該側鏈即可。 側鏈的外觀、給人的感覺和行為與主鏈相似 — 你可以用 Solidity 編寫合約,並透過側鏈遠端程序呼叫與側鏈互動。 + +由於側鏈和以太坊虛擬機相容,因而被視為對以太坊原生去中心化應用程式有效的[擴張解決方案](/developers/docs/scaling/)。 去中心化應用程式部署到側鏈後,使用者可以盡享更低的燃料費用和更快的交易速度,尤其是在主網擁塞的情況下。 + +不過,如前所述,使用側鏈涉及重大取捨。 每條側鏈負責其安全性,不會繼承以太坊的安全屬性。 這會增加惡意行為的可能性,影響你的使用者或讓他們的資金面臨風險。 + +### 資產轉移 {#asset-movement} + +爲了使一條獨立區塊鏈成爲以太坊主網的側鏈,區塊鏈需要支持在它與以太坊主網之間傳送資產。 這種與以太坊的互操作性是使用區塊鏈跨鏈橋實現的。 [跨鏈橋](/bridges/)使用部署在以太坊主網和側鏈上的智慧型合約控制兩者之間的資金橋接。 + +儘管跨鏈橋可以幫助使用者在以太坊和側鏈之間傳送資金,但實體資產不會在兩條鏈之間移動。 相反,通常采用與鑄造和銷毀相關的機制跨鏈傳送價值。 更多關於[跨鏈橋如何運作](/developers/docs/bridges/#how-do-bridges-work)的資訊。 + +## 側鏈的優勢和劣勢 {#pros-and-cons-of-sidechains} + +| 優勢 | 劣勢 | +| ------------------------------------------ | ------------------------------------ | +| 支撐側鏈的技術是成熟的,並得益於廣泛的研究和設計的改進。 | 側鏈犧牲了一定程度的去中心化和去信任以換取可擴展性。 | +| 側臉支援通用計算並提供以太坊虛擬機相容性(它們能夠運行以太坊原生去中心化應用程式)。 | 側鏈使用單獨的共識機制,並且不從以太坊的安全保證中獲益。 | +| 側鏈使用不同的共識模型,為使用者高效處理交易並降低交易費。 | 側鏈需要更高的信任假設(例如,惡意側鏈驗證者達到一定人數可以進行欺詐)。 | +| 與以太坊虛擬機相容的側鏈讓去中心化應用程式可以擴展其生態系統。 | | + +### 使用側鏈 {#use-sidechains} + +有多項專案提供側鏈實作,歡迎整合到你的去中心化應用程式: + +- [Polygon PoS](https://polygon.technology/solutions/polygon-pos) +- [Skale](https://skale.network/) +- [Gnosis Chain(前身為 xDai)](https://www.gnosischain.com/) +- [Loom Network](https://loomx.io/) +- [Metis Andromeda](https://www.metis.io/) + +## 衍生閱讀 {#further-reading} + +- [透過側鏈擴張以太坊去中心化應用程式](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _2018 年 2 月 8 日 - Georgios Konstantopoulos_ + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/state-channels/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/state-channels/index.md" new file mode 100644 index 00000000000..abc7c29a79b --- /dev/null +++ "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/state-channels/index.md" @@ -0,0 +1,67 @@ +--- +title: 狀態通道 +description: 介紹狀態通道和支付通道,作為以太坊社群目前使用的擴展解決方案。 +lang: zh-tw +sidebarDepth: 3 +--- + +狀態通道允許參與者安全地進行鏈外交易,同時將與以太坊主網的互動保持在最低水平。 通道對等方可進行任意數量的鏈外交易,同時只需提交兩個鏈上交易來開啟和關閉通道。 這允許極高的交易吞吐量並降低使用者的成本。 + +## {#how-do-sidechains-work} + +以太坊等公共區塊鏈因其分散式架構,即鏈上交易必須由所有節點執行,而面臨可擴展性挑戰。 節點必須能夠使用普通硬體來處理區塊中的交易量,為了保持網路去中心化而限制了交易吞吐量。 + +### {#consensus-algorithms} + +通道是簡單的點對點協定,它讓雙方可以在彼此之間進行多筆交易,然後只將最終結果發佈到區塊鏈。 通道使用密碼學證明產生的摘要資料確實是一組有效中間交易的結果。 [「多簽」](/developers/docs/smart-contracts/#multisig)智慧型合約確保交易由正確的各方簽署。 + +- []() +- []() +- + +透過通道,狀態變更由相關各方執行和驗證,最大限度地減少了以太坊執行層上的計算。 這減少了以太坊的擁堵並提高了使用者的交易處理速度。 + +#### {#block-parameters} + +每個通道均由在以太坊上執行的[多簽智慧型合約](/developers/docs/smart-contracts/#multisig)管理。 要開啟通道,參與者在鏈上部署通道合約並向其中存入資金。 + +若要關閉通道,參與者會在鏈上提交最後商定的通道狀態。 之後,智慧型合約會根據每位參與者在通道最終狀態的餘額來分配鎖定的資金。 + +對於一些預先定義的參與者希望以高頻率進行交易而不產生可見開銷的情況,點對點通道特別適用。 區塊鏈通道分為兩類:**支付通道**和**狀態通道**。 + +### {#evm-compatibility} + +將支付通道描述成由兩個使用者共同維護的「雙向帳本」最為恰當。 帳本的初始餘額是通道開放階段鎖定到鏈上合約的存款總和。 + +帳本餘額的更新(即支付通道的狀態)需要通道中所有方批准。 通道更新在所有通道參與者簽署后被視爲最終確定,這和以太坊上的交易非常相似。 + +支付通道是最早的擴張解決方案之一,用於最大限度減少因簡單的使用者互動帶來的高成本鏈上活動(例如,以太幣傳送、原子交換、小額支付)。 通道參與者彼此之間可以進行不限數額的即時、無費用交易,只要他們傳送的净總和不超過存入的代幣。 + +除了支援鏈外支付以外,支付通道尚未被證明可用於處理通用狀態轉換邏輯。 建立狀態通道是爲了解決該問題,並使通道可用於擴張通用計算。 + +### {#asset-movement} + +狀態通道與支付通道仍有許多共同點。 例如,當使用者透過交換加密簽名的訊息(交易)進行互動時,其他通道參與者也必須簽署訊息。 如果提議的狀態更新沒有獲得所有參與者的簽名,則被認爲無效。 + +## {#pros-and-cons-of-sidechains} + +| | | +| | | +| | | +| | | +| | | +| | | + +### {#use-sidechains} + +- []() +- []() +- []() +- []() +- []() + +## {#further-reading} + +- + +_ _ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/validium/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/validium/index.md" new file mode 100644 index 00000000000..acf85470894 --- /dev/null +++ "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/validium/index.md" @@ -0,0 +1,165 @@ +--- +title: Validium +description: 介紹目前作為擴張解決方案供以太坊社群使用的 Validium。 +lang: zh-tw +sidebarDepth: 3 +--- + +Validium 是一種[擴張解決方案](/developers/docs/scaling/),使用如[零知識卷軸](/developers/docs/scaling/zk-rollups/)之類的有效性證明來強制執行交易的完整性,但它不在以太坊主網上儲存交易資料。 雖然鏈外資料可用性會帶來取捨,但卻能大幅提升可擴展性(Validium [每秒](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)可處理 [~9,000 個交易,甚至更多](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263))。 + +## 前置要求 {#prerequisites} + +你應該已經在我們的頁面上閲讀並理解有關[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2)的内容。 + +## 什麼是 Validium? {#what-is-validium} + +Validium 是使用鏈外資料可用性和計算的擴張解決方案,旨在透過在以太坊主網外處理交易來提高吞吐量。 與零知識卷軸 (ZK-rollup) 一樣,Validium 發佈[零知識證明](/glossary/#zk-proof)以在以太坊上驗證鏈外交易。 這能夠防止無效的狀態轉換並增强 Validium 鏈的安全保證。 + +這些「有效性證明」可以是 ZK-SNARK(零知識簡潔非互動式知識論證)或 ZK-STARK(零知識可擴展透明知識論證)兩種形式。 更多有關[零知識證明](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/)的資訊。 + +屬於 Validium 使用者的資金由以太坊上的智慧型合約控制。 Validium 與零知識卷軸很像,能夠提供幾乎即時的提款;在主網上驗證提款請求的有效性證明后,使用者可以透過提供[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/)來提取資金。 默克爾證明驗證使用者的提款交易是否包含在經過驗證的交易批次中,這讓鏈上合約可以處理提款。 + +然而,Validium 使用者的資金可能會被凍結,並受到提款限制。 如果 Validium 鏈上資料可用性管理器拒絕向使用者提供鏈外狀態資料,就會發生這種情況。 如果無法存取交易資料,使用者將無法計算證明資金所有權和執行提款所需的默克爾證明。 + +這是 Validium 和零知識卷軸之間的主要區別,即它們在資料可用性範圍上的位置不同。 兩種解決方案處理資料存儲的方式不同,這會影響安全性和去信任。 + +## Validium 如何與以太坊互動? {#how-do-validiums-interact-with-ethereum} + +Validium 是建置在現有以太坊鏈上的擴張協定。 儘管它在鏈外執行交易,但 Validium 鏈由部署在主網上的一系列智慧型合約管理,包括: + +1. **驗證者合約**:驗證者合約驗證 Validium 營運者在進行狀態更新時所提交證明的有效性。 該合約需要證明鏈外交易正確性的有效性證明,和驗證鏈外交易資料存在的資料可用性證明。 + +2. **主合約**:主合約儲存區塊生產者提交的狀態承諾(默克爾根),並在有效性證明完成鏈上驗證后更新 Validium 的狀態。 該合約還處理 Validium 鏈上的存款和提款。 + +Validium 還依賴於以太坊主鏈來獲得: + +### 結算 {#settlement} + +在 Validium 上執行的交易無法完全確認,直至父母鏈驗證其有效性。 所有在 Validium 上進行的業務最終都必須在主網上結算。 以太坊區塊鏈還為 Validium 使用者提供了「結算保證」,這意味鏈外交易一旦提交到鏈上,就無法逆轉或改變。 + +### 安全性 {#security} + +充當結算層的以太坊也保證 Validium 上狀態轉換的有效性。 在 Validium 鏈上執行的鏈外交易透過以太坊基礎層上的智慧型合約進行驗證。 + +如果鏈上驗證者合約認爲證明無效,交易就會被拒絕。 這意味著營運者在更新 Validium 的狀態之前,必須滿足以太坊協定強制執行的有效性條件。 + +## Validium 如何運作? {#how-does-validium-work} + +### 交易 {#transactions} + +使用者向營運者提交交易 - 營運者是負責在 Validium 鏈上執行交易的節點。 一些 Validium 可能使用單個營運者來執行鏈,或依賴[權益證明 (PoS)](/developers/docs/consensus-mechanisms/pos/) 機制來輪換營運者。 + +營運者將交易彙總到一個批次中,並將其發送到證明電路進行證明。 證明電路接受交易批次(以及其他有關資料)作爲輸入,並輸出驗證作業正確執行的有效性證明。 + +### 狀態承諾 {#state-commitments} + +Validium 的狀態被雜處理湊為默克爾樹,其根儲存在以太坊的主合約中。 默克爾根,又稱爲狀態根,充當對 Validium 上當前帳戶狀態和餘額的加密承諾。 + +爲了執行狀態更新,營運者必須(在執行交易后)計算一個新的狀態根並將其提交給鏈上合約。 如果有效性證明得到驗證,提議的狀態就會被接受,Validium 將切換到新的狀態根。 + +### 存款和提款 {#deposits-and-withdrawals} + +使用者透過在鏈上合約中存入以太幣(或任何與 ERC 兼容的代幣),將資金從以太坊轉移到 Validium。 該合約將存款事件轉發到鏈外 Validium,並向使用者在 Validium 上的地址存入與其存款相同的金額。 營運者還會將該存款交易包含在新批次中。 + +爲了將資金轉移回主網,Validium 使用者需要發起提款交易並提交到營運者,營運者將驗證提款請求並將其包含在批次中。 使用者在 Validium 鏈上的資產也會被銷毀,才能退出系統。 一旦與該批次相關的有效性證明得到驗證,使用者就可以呼叫主合約來提取剩餘的初始存款。 + +作爲一種抗審查機制,Validium 協定允許使用者直接從 Validium 合約提款,而無需透過營運者。 在這種情況下,使用者需要向驗證者合約提供默克爾證明,展示帳戶包含在狀態根内。 如果證明被接受,使用者就能夠呼叫主合約的提款函式,從 Validium 中提取其資金。 + +### 批次提交 {#batch-submission} + +在執行一批交易后,營運者向驗證者合約提交相關的有效性證明,並向主合約提議新的狀態根。 如果證明有效,主合約就會更新 Validium 的狀態並最終確定批次中交易的結果。 + +與零知識卷軸不同,Validium 上的區塊生產者不需要發佈交易批次的交易資料(僅發佈區塊頭)。 這使 Validium 成爲一個純鏈外擴張協定,而不是在以太坊主鏈上發佈狀態資料(如 `calldata`)的「混合」擴張協定(即[二層網路](/layer-2/))。 + +### 資料可用性 {#data-availability} + +如前所述,Validium 利用一個鏈外資料可用性模型,營運者會將所有交易資料儲存在其中,而不是以太坊主網。 Validium 的鏈上資料足跡較低,這提升了可擴展性(吞吐量不受以太坊的資料處理能力限制),並降低了使用者費用(發佈 `calldata` 的成本降低)。 + +然而,鏈外資料可用性導致了一個問題:建立或驗證默克爾證明所需的資料可能不可用。 這意味著,如果營運者采取惡意行爲,使用者就可能無法從鏈上合約中提取資金。 + +各種 Validium 解決方案試圖透過將狀態資料的儲存去中心化來解決此問題。 這涉及迫使區塊生產者將底層資料發送至「資料可用性管理者」,由他們負責儲存鏈外資料並在使用者請求時提供給使用者。 + +Validium 中的資料可用性管理者透過簽署每個 Validium 批次,來證明鏈外交易資料的可用性。 這些簽名構成了一種「可用性證明」,鏈上驗證者合約會在批准狀態更新之前進行檢查。 + +Validium 的資料可用性管理方法不同。 一些依賴可信方儲存狀態資料,另一些則使用隨機指定的驗證者完成此工作。 + +#### 資料可用性委員會 (DAC) {#data-availability-committee} + +爲了保證鏈外資料的可用性,一些 Validium 解決方案指定了一組可信實體(統稱爲資料可用性委員會 (DAC))來儲存狀態複本並提供資料可用性證明。 由於成員較少,資料可用性委員會更容易實作,並且需要的協調更少。 + +然而,使用者必須信任資料可用性委員會,以便在需要時獲得資料(例如,用於產生默克爾證明)。 資料可用性委員會的成員有可能[被惡意行爲者損害](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view),然後後者會扣留鏈外資料。 + +[更多有關 Validium 中資料可用性委員會的資訊](https://medium.com/starkware/data-availability-e5564c416424)。 + +#### 有保證金的資料可用性 {#bonded-data-availability} + +其他 Validium 需要負責儲存離綫資料的參與者,在承擔其角色之前在智慧型合約中質押(即鎖定)代幣。 該質押充當一種「保證金」,保證資料可用性管理者之間誠實行事並減少信任假設。 如果這些參與者未能證明資料可用性,該保證金就會被罰沒。 + +在有保證金的資料可用性方案中,任何人在提供需要的質押后,都可以被指定保存鏈外資料。 這擴展了合格資料可用性管理者池,減少了影響資料可用性委員會 (DAC) 的中心化。 更重要的是,這種方法依賴於加密經濟激勵措施來防止惡意活動,這相比指定可信方在 Validium 中保護離綫資料要安全很多。 + +[更多有關 Validium 中有保證金的資料可用性的資訊](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf)。 + +## Volition 和 Validium {#volitions-and-validium} + +Validium 提供許多好處,但也會有取捨(最明顯的就是資料可用性)。 但是,與許多擴張解決方案一樣,Validium 適合特定的用例 - 這就是為何建立 Volition 的原因。 + +Volition 結合了零知識卷軸和 Validium 鏈,它允許使用者在兩種擴張解決方案之間切換。 使用 Volition,使用者能夠利用 Validium 的鏈外資料可用性進行某些交易,同時可以在需要時自由地切換到鏈上資料可用性解決方案(零知識卷軸)。 這本質上讓使用者能夠根據其獨特情況自由地進行權衡。 + +去中心化交易所 (DEX) 可能偏好使用 Validium 的可擴展和隱私基礎設施進行高價值交易。 它還可以為需要零知識卷軸的更高安全性保證和去信任的使用者使用零知識卷軸。 + +## Validium 和以太坊虛擬機的相容性 {#validiums-and-evm-compatibility} + +與零知識卷軸一樣,Validium 最適合簡單的應用程式,例如代幣交換和支付。 由於在零知識證明電路中證明[以太坊虛擬機](/developers/docs/evm/)指示的開銷很大,因此很難實作在 Validium 之間為通用計算和智慧型合約執行提供支援。 + +一些 Validium 專案嘗試透過編譯與以太坊虛擬機兼容的語言(例如 Solidity、Viper),來建立為高效證明而最佳化的自訂位元組碼,從而回避這個問題。 這種方法的一個缺點是,零知識證明友好的新虛擬機可能不支援重要的以太坊虛擬機作業碼,並且開發者必須直接使用高階語言進行編寫才能獲得最佳體驗。 這導致了更多問題:它迫使開發者使用全新的開發堆棧構建去中心化應用程式,並破壞了與目前以太坊基礎設施的相容性。 + +然而,一些團隊正在嘗試針對零知識證明電路最佳化現有的以太坊虛擬機作業碼。 這包括對零知識以太坊虛擬機 (zkEVM) 的開發,這是一種與以太坊虛擬機兼容的虛擬機,可以生成驗證程式是否正確執行的證明。 使用零知識以太坊虛擬機,Validium 鏈可以在鏈外執行智慧型合約並提交有效性證明,以在以太坊上驗證鏈外計算(無需重新執行合約)。 + +[更多有關零知識以太坊虛擬機的資訊](https://www.alchemy.com/overviews/zkevm)。 + +## Validium 如何擴張以太坊? {#scaling-ethereum-with-validiums} + +### 1. 鏈外資料存儲 {#off-chain-data-storage} + +二層網路擴張項目,例如樂觀卷軸和零知識卷軸,透過將部分交易資料發佈到一層網路,犧牲了純鏈外擴容協定(如 [Plasma](/developers/docs/scaling/plasma/))的無限可擴展性來換取安全性。 然而,這意味著卷軸的可擴展性屬性受到以太坊主網上資料帶寬的限制(因此提出[資料分片](/roadmap/danksharding/)以提高以太坊的資料存儲容量)。 + +Validium 透過將所有交易資料保存在鏈外,並在轉送狀態更新到以太坊主鏈時僅發佈狀態承諾(及有效性證明),實現了可擴展性。 然而,有效性證明的存在為 Validium 提供了比其他純鏈外擴張解決方案(包括 Plasma 和[側鏈](/developers/docs/scaling/sidechains/))更高的安全保證。 透過減少以太坊在驗證鏈外交易之前必須處理的資料量,Validium 設計極大地提升了主網上的吞吐量。 + +### 2. 遞迴證明 {#recursive-proofs} + +遞迴證明是一種有效性證明,可驗證其他證明的有效性。 這些「證明的證明」透過以遞迴方式彙總多個證明,直到建立一個可以驗證所有先前證明的最終證明。 遞迴證明透過增加每個有效性證明可以驗證的交易數量來提升區塊鏈處理速度。 + +通常,Validium 營運者提交到以太坊來驗證的每個有效性證明都會驗證單個區塊的完整性。 而一個遞迴證明可用於同時確認幾個 Validium 區塊的有效性 - 這是有可能的,因爲證明電路能夠以遞迴方式將幾個區塊證明彙總為一個最終證明。 如果鏈上驗證者合約接受遞迴證明,則所有底層區塊都會立即被最終確定。 + +## Validium 的優勢和劣勢 {#pros-and-cons-of-validium} + +| 優勢 | 劣勢 | +| ------------------------------------ | ------------------------------------------------------- | +| 有效性證明强制驗證鏈外交易的完整性,並防止營運者最終確定無效的狀態更新。 | 生成有效性證明需要使用特定硬體,這會導致中心化風險。 | +| 提高使用者的資本效率(將資金提取回以太坊時不會出現延遲) | 對通用計算/智慧型合約的支持有限;開發需要使用專業化語言。 | +| 對高價值應用程式中的詐欺證明型系統所面臨的某些經濟攻擊有高抵抗性。 | 生成零知識證明需要强大的算力;對於低吞吐量的應用程式不具有成本效益。 | +| 透過不將回呼資料發佈到以太坊主網來降低使用者的燃料費用。 | 較慢的主觀最終性時間(生成零知識證明需要 10 - 30 分鐘),但完全最終性會快一些,因爲沒有爭議時間延遲。 | +| 這適用於特定用例,例如優先考慮交易隱私和可擴展性的交易或區塊鏈游戲。 | 可能會阻止使用者提取資金,因爲生成所有權的默克爾證明需要鏈外資料始終可用。 | +| 鏈外資料可用性提升了吞吐量並增加了可擴展性。 | 安全模型依賴於信任假設和加密經濟激勵措施,與完全依賴加密安全機制的零知識卷軸不同。 | + +### 使用 Validium/Volition {#use-validium-and-volitions} + +有多項專案提供 Validium 和 Volition 實作,歡迎整合到你的去中心化應用程式: + +**StarkWare StarkEx** - _StarkEx 是基於有效性證明的以太坊二層網路 (L2) 可擴展性解決方案。 它能夠在零知識卷軸或 Validium 資料可用性模式下運作。_ + +- [文件](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes#validium) +- [網站](https://starkware.co/starkex/) + +**Matter Labs zkPorter**- _zkPorter 是一個二層網路擴張協定,它使用一種結合了零知識卷軸與分片理念的混合方法來處理資料可用性。 它可支援任意數量的分片,每個分片都有自己的資料可用性原則。_ + +- [部落格](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [文件](https://docs.zksync.io/zk-stack/concepts/data-availability) +- [網站](https://zksync.io/) + +## 衍生閱讀 {#further-reading} + +- [Validium 及二層網路二合一 — 第 99 期](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) +- [零知識卷軸與 Validium 的比較](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) +- [Volition 和新興資料可用性範圍](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) +- [卷軸、Validium 和 Volition:瞭解最熱門的以太坊擴張解決方案](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/zk-rollups/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/zk-rollups/index.md" new file mode 100644 index 00000000000..1799f2f5b78 --- /dev/null +++ "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/zk-rollups/index.md" @@ -0,0 +1,259 @@ +--- +title: 零知識證明卷軸 +description: 零知識證明卷軸介紹 — 一個以太坊社群所使用的擴張解決方案。 +lang: zh-tw +--- + +零知識證明卷軸 (ZK-rollup) 是二層網路的[擴張解決方案](/developers/docs/scaling/),透過將計算和狀態儲存遷移至鏈外來提高以太坊主網上的吞吐量。 零知識證明卷軸可以一次批量處理數千個交易,然後僅將一些最低限度的摘要資料發佈到主網。 此摘要資料定義了以太坊狀態應進行的變更以及一些確保這些更變正確的密碼學證明。 + +## 前置要求 {#prerequisites} + +你應該已經在我們的頁面上閲讀並理解有關[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2)的内容。 + +## 什麼是零知識證明卷軸? {#what-are-zk-rollups} + +**零知識證明卷軸 (ZK-rollup)** 將交易批量打包(或「捲起來」),然後在鏈外執行。 鏈外計算減少了必須發佈到區塊鏈的資料量。 零知識證明卷軸提交代表批次中所有交易所需變更的匯總,而不是單獨發送每一筆交易。 它們還產生[有效性證明](/glossary/#validity-proof)來證明其變更的正確性。 + +零知識證明卷軸的狀態由部署在以太坊網路上的智慧型合約維護。 爲了更新該狀態,零知識證明卷軸必須提交有效性證明來進行驗證。 如上所述,有效性證明是一種加密保證,證明卷軸提交的狀態變更確實是執行給定批量交易的結果。 這意味著零知識證明卷軸只需要提供有效性證明就可以在以太坊上最終確定交易,而無需像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)一樣將所有交易資料發佈到鏈上。 + +將資金從零知識證明卷軸轉移到以太坊沒有延遲,因爲一旦零知識證明卷軸合約驗證有效性證明,退出交易就會被執行。 相反,從樂觀卷軸提取資金則可能會有延遲,以便任何人都可以使用[詐欺證明](/glossary/#fraud-proof)來挑戰退出交易。 + +零知識證明卷軸將交易作爲 `calldata` 寫入以太坊。 對智慧型合約函式的外部調用中包含的資料就存儲在 `calldata` 中。 `calldata` 中的資訊被發佈到區塊鏈上,讓任何人都能夠獨立重建卷軸的狀態。 零知識證明卷軸使用壓縮技術來減少交易資料 — 例如,由索引而非地址來代表帳戶,這將節省 28 個位元組的資料。 鏈上資料發佈是卷軸的一大成本,因此資料壓縮能夠降低使用者的費用。 + +## 零知識證明卷軸如何與以太坊互動? {#zk-rollups-and-ethereum} + +零知識證明卷軸鏈是一種在以太坊區塊鏈之上運作的鏈外協定,並由鏈上的以太坊智慧型合約管理。 零知識證明卷軸在主網之外執行交易,但定期將鏈外交易批次提交到鏈上卷軸合約。 這種交易記錄是不可變的(與以太坊非常像),並且形成了零知識證明卷軸鏈, + +零知識證明卷軸的核心架構由以下部分構成: + +1. **鏈上合約**:如前所述,零知識證明卷軸協定由在以太坊上執行的智慧型合約控制。 這包括存儲卷軸區塊、追蹤存款,以及監控狀態更新的主要合約。 另一個鏈上合約(驗證者合約)驗證區塊生產者提交的零知識證明。 因此,以太坊充當零知識證明卷軸的基礎層或「一層網路」。 + +2. **鏈外虛擬機 (VM)**:儘管零知識證明卷軸活躍於以太坊上,但交易執行和狀態存儲發生在獨立於[以太坊虛擬機](/developers/docs/evm/)的單獨虛擬機。 這種鏈外虛擬機是零知識證明卷軸交易的執行環境,並充當零知識證明卷軸協定的次層或「二層網路」。 在以太坊主網上驗證的有效性證明可保證鏈外虛擬機中狀態轉換的正確性。 + +零知識證明卷軸是「混合擴張解決方案」— 獨立運作但從以太坊獲得安全性的鏈外協定。 具體來講,以太坊網路在零知識證明卷軸上執行狀態有效性更新,並保證每次更新卷軸狀態時的背景資料可用性。 因此,零知識證明卷軸比純鏈外擴張解決方案安全很多,例如自行負責安全屬性的[側鏈](/developers/docs/scaling/sidechains/),或同樣使用有效性證明在以太坊上驗證交易,但將交易資料存儲在其他地方的 [Validium](/developers/docs/scaling/validium/)。 + +零知識證明卷軸依賴以太坊協定來獲得: + +### 資料可用性 {#data-availability} + +零知識證明卷軸將鏈外處理的每筆交易的狀態資料發佈到以太坊。 透過這些資料,個人或企業能夠復現卷軸的狀態並自行驗證鏈。 以太坊將這些資料作爲 `calldata` 提供給所有網路參與者。 + +零知識證明卷軸不需要在鏈上發佈很多交易資料,因爲有效性證明已經驗證了狀態轉換的真實性。 盡管如此,在鏈上儲存資料仍然重要,因爲這樣便可以對二層網路鏈的狀態進行無需許可的獨立驗證,從而使任何人都能提交批次交易,防止惡意營運者審查或凍結鏈。 + +使用者需要在鏈上與卷軸互動。 如果無法存取狀態資料,使用者將無法查詢帳戶餘額或發起依賴狀態資訊的交易(如提款)。 + +### 交易最終性 {#transaction-finality} + +以太坊充當零知識證明卷軸的結算層:只有當一層網路合約接受有效性證明時,二層網路交易才會最終確定。 這消除了惡意營運者破壞鏈的風險(例如,竊取卷軸資金),因爲每筆交易都必須在主網上得到批准。 此外,以太坊還保證使用者作業一旦在一層網路上最終確定,就無法被撤銷。 + +### 審查阻力 {#censorship-resistance} + +大多數零知識證明卷軸使用「超級節點」(營運者)來執行交易、生產批次,以及提交區塊到一層網路。 儘管這確保了效率,但也增加了審查風險:惡意零知識證明卷軸營運者可以透過拒絕將使用者的交易添加到批次交易來審查使用者。 + +作爲一項安全措施,零知識證明卷軸允許使用者在認爲自己受到營運者審查時,直接向主網上的卷軸合約提交交易。 這讓使用者能夠强制從零知識證明卷軸退出到以太坊,而無需依賴營運者的許可。 + +## 零知識證明卷軸如何運作? {#how-do-zk-rollups-work} + +### 交易 {#transactions} + +零知識證明卷軸中的使用者簽署交易,提交給二層網路營運者進行處理並添加到下一個批次中。 在某些情況下,營運者是一個被稱爲排序者的中心化實體,它會執行交易,將交易彙總到批次中,然後提交到一層網路。 該系統中的排序者是唯一被允許產生二層網路區塊並將卷軸交易新增到零知識證明卷軸合約的實體。 + +其他零知識證明卷軸可以透過使用一組[權益證明](/developers/docs/consensus-mechanisms/pos/)驗證者來輪換營運者的角色。 潛在的營運者將資金存入卷軸合約,每份質押的大小會影響質押者被選中產生下一批次卷軸的機會。 如果營運者實施惡意行爲,其質押會被罰沒,這會激勵其發佈有效的區塊。 + +#### 零知識證明卷軸如何在以太坊上發佈交易資料 {#how-zk-rollups-publish-transaction-data-on-ethereum} + +如前所述,交易資料作爲 `calldata` 被發佈到以太坊上。 `calldata` 是智慧型合約中的資料區域,用於將引數傳送給函式,其行爲類似於[記憶體](/developers/docs/smart-contracts/anatomy/#memory)。 儘管 `calldata` 不會存儲到以太坊的狀態中,但其作爲以太坊鏈[歷史日志](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs)的一部分一直存在於鏈上。 `calldata` 不會影響以太坊的狀態,這使其成爲一種在鏈上存儲資料的便宜方法。 + +`calldata` 關鍵字通常標識交易所呼叫的智慧型合約方法,並以任意位元組序列的形式保存對方法的輸入。 零知識證明卷軸使用 `calldata` 將壓縮的交易資料發佈到鏈上;卷軸營運者只需要透過呼叫卷軸合約中所需的函式來添加一個新批次,並將壓縮資料作爲函式引數進行傳送。 這有助於降低使用者的成本,因爲卷軸費用的很大一部分用於在鏈上儲存交易資料。 + +### 狀態承諾 {#state-commitments} + +零知識證明卷軸的狀態包括二層網路帳戶和餘額,用[默克爾樹](/whitepaper/#merkle-trees)表示。 默克爾樹根(默克爾根)的加密雜湊儲存在鏈上合約中,這使卷軸協定能夠追蹤零知識證明卷軸狀態的變化。 + +在執行一組新交易后,卷軸轉換到新狀態。 發起狀態轉換的營運者需要計算新的狀態根並提交到鏈上合約。 如果與批次相關的有效性證明經過驗證者合約的驗證,新的默克爾根將成爲零知識證明卷軸的規範狀態根。 + +除了計算狀態根以外,零知識證明卷軸營運者還會建立一個批次根 — 包含批次中所有交易的默克爾樹根。 當提交新批次時,卷軸合約會儲存批次根,讓使用者能夠證明交易(如提款請求)包含在批次中。 使用者必須提供交易詳情、批次根和顯示包含路徑的[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/)。 + +### 有效性證明 {#validity-proofs} + +零知識證明卷軸營運者提交到一層網路合約的新狀態根是更新卷軸狀態的結果。 假設 Alice 向 Bob 發送了 10 枚代幣,營運者只需要將 Alice 的餘額減少 10,並將 Bob 的餘額增加 10。 然後營運者對更新后的帳戶資料進行雜湊處理,重建卷軸的默克爾樹,並將新的默克爾根提交到鏈上合約。 + +但是,在營運者證明新默克爾根是由卷軸狀態的正確更新產生之前,卷軸合約不會自動接受提議的狀態承諾。 零知識證明卷軸營運者透過生成有效性證明來做到這一點,有效性證明是一種簡潔的加密承諾,用於驗證批次交易的正確性。 + +有效性證明允許各方在不揭露聲明本身的情況下證明聲明的正確性,因此又被稱爲零知識證明。 零知識證明卷軸使用有效性證明確認鏈外狀態轉換的正確性,而無需在以太坊上重新執行交易。 這些證明可以是 [ZK-SNARK](https://arxiv.org/abs/2202.06877)(零知識簡潔非互動式知識論證)或 [ZK-STARK](https://eprint.iacr.org/2018/046)(零知識可擴展透明知識論證)兩種形式。 + +SNARK(簡潔非互動式知識論證)和 STARK(可擴展透明知識論證)都有助於證明零知識證明卷軸中鏈外計算的完整性,儘管每種證明類型都有不同的功能。 + +**ZK-SNARK(零知識簡潔非互動式知識論證)** + +爲了使 ZK-SNARK 協定正常運作,需要建立公共參考串 (CRS):公共參考串提供公共參數來證明和驗證有效性證明。 證明系統的安全性取決於公共參考串設定;如果用於建立公共參數的資訊落入惡意行爲者手中,他們或許能夠產生虛假的有效性證明。 + +一些零知識證明卷軸嘗試透過采用[多方計算儀式 (MPC)](https://zkproof.org/2021/06/30/setup-ceremonies/amp/) 來解決該問題,即由可信的個人為 ZK-SNARK 電路產生公共參數。 每一方都貢獻一些隨機性(稱為「有毒廢棄物」)來構建公共參考串,而且必須立即將其銷毀。 + +使用可信的設定,因爲這會提高公共參考串設定的安全性。 只要誠實的參與者銷毀其輸入,ZK-SNARK 系統的安全性就會得到保證。 這種方法仍然需要信任相關人員刪除他們采樣的隨機性,並且不會破壞系統的安全保證。 + +抛開信任假設不談,ZK-SNARK 因其更小的證明大小和恆定時間驗證而受到歡迎。 由於執行零知識證明卷軸的大部分成本用於一層網路上的證明驗證,因此二層網路使用 ZK-SNARK 來產生可在主網上快速、便宜地進行驗證的證明。 + +**ZK-STARK** + +與 ZK-SNARK 相似,ZK-STARK 在不揭露輸入的情況下證明鏈外計算的有效性。 然而,ZK-STARK 因其具有可擴展性和透明性,被認爲是對 ZK-SNARK 的改進。 + +ZK-STARK 是「透明的」,因爲它能夠在沒有可信的公共參考串 (CRS) 設定的情況下正常運作。 相反,ZK-STARK 則依賴可公開驗證的隨機性來設定用於產生和驗證證明的參數。 + +ZK-STARK 還提供了更多可擴展性,因爲證明和驗證有效性證明所需的時間相對於底層計算的複雜性呈_准綫性_增長。 對於 ZK-SNARK,證明和驗證時間相對於底層計算的規模呈_綫性_擴張。 這意味著當涉及大資料集時,ZK-STARK 相比 ZK-SNARK 需要的證明和驗證時間更少,因而適用於大批量應用程式。 + +ZK-STARK 對於量子電腦也是安全的,而 ZK-SNARK 中使用的橢圓曲綫密碼學 (ECC) 則被廣范認爲容易受到量子電腦攻擊。 ZK-STARK 的缺點是其產生的證明大小更大,在以太坊上進行驗證時更加昂貴。 + +#### 有效性證明如何在零知識證明卷軸中運作? {#validity-proofs-in-zk-rollups} + +##### 證明產生 + +在接受交易之前,營運者會執行常規檢查。 這包括確認: + +- 發送者和接收者帳戶是狀態樹的一部分。 +- 發送者有足夠的資金處理交易。 +- 交易是正確的並與卷軸上的發送者公鑰相符。 +- 發送者的隨機數是正確的,等等。 + +一旦零知識證明卷軸節點擁有足夠的交易,就會將這些交易彙總成一個批次,並為證明電路編譯輸入,以編譯成簡潔的零知識證明。 這包括: + +- 包含批次中所有交易的默克爾樹根。 +- 用於證明交易包含在批次中的默克爾交易證明。 +- 交易中每個發送者-接收者對的默克爾證明,用於證明這些帳戶是卷軸狀態樹的一部分。 +- 一組中間狀態根,源於應用每筆交易的狀態更新(即減少發送者帳戶餘額並增加接收者帳戶餘額)後更新狀態根。 + +證明電路透過「遍歷」每筆交易並執行並營運者完成的相同檢查來計算有效性證明,然後處理交易。 首先,它使用提供的默克爾證明來驗證發送者的帳戶是現有狀態根的一部分。 然後,它會減少發送者的餘額,增加他們的隨機數,對更新的帳戶資料進行雜湊處理,並將其與默克爾證明合併以生成新的默克爾根。 + +該默克爾根反映了零知識證明卷軸狀態的唯一變化:發送者餘額和隨機數的變化。 這是有可能的,因爲用於證明帳戶存在的默克爾證明也用於產生新的狀態根。 + +證明電路對接收者帳戶執行相同的過程。 它會(使用默克爾證明)檢查接收者帳戶是否存在于中間狀態根下,增加它們的餘額,對帳戶資料重新進行雜湊處理,並將其與默克爾證明合併以產生新的狀態根。 + +該過程會對每一筆交易重複;每次「循環」都會透過更新發送者帳戶建立一個新的狀態根,隨後透過更新接收者帳戶建立一個新的狀態根。 如前所述,狀態根的每次更新都代表卷軸狀態樹一部分發生變更。 + +零知識證明電路迭代處理整個交易批次,並在執行最後一筆交易后對產生最終狀態根的更新序列進行驗證。 最後計算的默克爾根成爲零知識證明卷軸的最新規範狀態根。 + +##### 證明驗證 + +在證明電路驗證狀態更新的正確性后,二層網路營運者將計算后的有效性證明提交給一層網路上的驗證者合約。 合約的驗證電路驗證證明的有效性,並檢查證明中包含的公開輸入: + +- **前狀態根**:零知識證明卷軸的舊狀態根(即在交易批次被執行之前),反映二層網路鏈的上一個已知有效狀態。 + +- **后狀態根**:零知識證明卷軸的新狀態根(即交易批次執行之後),反映二層網路鏈的最新狀態。 后狀態根是在證明電路中應用狀態更新后產生的最終根。 + +- **批次根**:批次的默克爾根,透過對批次中的交易進行_默克爾化_和對樹根進行雜湊處理得到。 + +- **交易輸入**:與在已提交批次中執行的交易相關的資料。 + +如果證明滿足電路條件(即證明有效),則意味著存在一系列有效交易,這些交易將卷軸從先前狀態(由前狀態根提供加密指紋)轉換為新狀態(由后狀態根提供加密指紋)。 如果前狀態根與儲存在卷軸合約中的根相符,並且證明是有效的,则卷軸合約就會從證明中獲取后狀態根並更新其狀態樹以反映卷軸的狀態變化。 + +### 進入與退出 {#entries-and-exits} + +使用者透過向部署在一層網路鏈上的卷軸合約中存入代幣,來進入零知識證明卷軸。 該交易已排隊,因爲只有營運者能夠將交易提交到卷軸合約。 + +如果待處理的存款隊列開始填滿,零知識證明卷軸營運者將接受存款交易並將其提交到卷軸合約。 一旦使用者的資金進入卷軸,他們就可以開始交易,將交易發送到營運者進行處理。 使用者可以透過對其帳戶進行杂凑處理,將杂凑發送到卷軸合約,並提供針對當前狀態根進行驗證的默克爾證明,以此驗證他們在卷軸上的餘額。 + +從零知識證明卷軸提款到一層網路非常簡單。 使用者透過將其卷軸上的資產發送到指定帳戶進行銷毀,來發起退出交易。 如果營運者將該交易添加到下一個批次中,使用者就可以向鏈上合約提交提款請求。 該提款請求包含以下内容: + +- 默克爾證明,證明使用者的交易添加到交易批次中的銷毀帳戶。 + +- 交易資料 + +- 批次根 + +- 用於接收存入資金的一層網路地址 + +卷軸合約對交易資料進行杂凑處理,檢查批次根是否存在,並使用默克爾證明檢查交易杂凑是否為批次根的一部分。 之後,合約會執行退出交易並將資金發送到使用者選擇的一層網路上的地址。 + +## 零知識證明卷軸和以太坊虛擬機的相容性 {#zk-rollups-and-evm-compatibility} + +與樂觀卷軸不同,零知識證明卷軸不直接與[以太坊虛擬機 (EVM)](/developers/docs/evm/) 相容。 在電路中證明通用以太坊虛擬機計算比證明簡單計算(如先前描述的代幣傳送)更加困難,且更消耗資源。 + +然而,[零知識技術的進步](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now)重新點燃了將以太坊虛擬機計算包裝在零知識證明中的興趣。 這些努力旨在建立一個零知識以太坊虛擬機 (zkEVM) 實作,能夠高效地驗證程式執行的正確性。 零知識以太坊虛擬機重新建立在電路中進行證明/驗證的現有以太坊虛擬機作業碼,使其能夠執行智慧型合約。 + +與以太坊虛擬機相似,零知識以太坊虛擬機在對某些輸入執行計算之後,會在狀態之間轉換。 區別在於,零知識以太坊虛擬機還會建立零知識證明,以驗證程式執行中每一步的正確性。 有效性證明可以驗證涉及虛擬機狀態(記憶體、堆棧、存儲)和計算本身的作業的正確性(即作業是否調用了正確的作業碼並正確地執行它們?)。 + +與以太坊虛擬機相容的零知識證明卷軸的引入,有望幫助開發者利用零知識證明的可擴展性和安全保證。 更重要的是,與原生以太坊基礎設施的相容性意味著,開發者可以使用熟悉(且經過實地檢驗)的工具和語言構建零知識友好的去中心化應用程式。 + +## 零知識證明卷軸費用如何運作? {#how-do-zk-rollup-fees-work} + +使用者為零知識證明卷軸上的交易支付多少費用取決於燃料費,就像在以太坊主網上一樣。 然而,燃料費在二層網路上的運作方式不同,並且受以下費用影響: + +1. **狀態寫入**:寫入以太坊狀態(即,在以太坊區塊鏈上提交交易)有固定費用。 零知識證明卷軸透過進行批次交易並將固定費用分攤給多名使用者,降低了該費用。 + +2. **資料發佈**:零知識證明卷軸將每筆交易的狀態資料作爲 `calldata` 發佈到以太坊。 `calldata` 費用目前由 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 管控,它規定 `calldata` 的非零位元組和零位元組的費用分別爲 16 燃料和 4 燃料。 每筆交易支付的費用受到需要在鏈上爲其發佈的 `calldata` 數量所影響。 + +3. **二層網路營運者費用**:這是支付給卷軸營運者的金額,作爲處理交易所產生的計算費用的補償,很像以太坊主網上的[交易「優先費」(小費)](/developers/docs/gas/#how-are-gas-fees-calculated)。 + +4. **證明產生和驗證**:零知識證明卷軸營運者必須為交易批次生成有效性證明,這會消耗大量資源。 在主網上驗證零知識證明也會花費燃料(約 500,000 燃料)。 + +除了進行批次交易之外,零知識證明卷軸還透過壓縮交易資料來降低使用者的費用。 你可以[查看即時概覽](https://l2fees.info/)來瞭解使用以太坊零知識證明卷軸的費用。 + +## 零知識證明卷軸如何擴張以太坊? {#scaling-ethereum-with-zk-rollups} + +### 交易資料壓縮 {#transaction-data-compression} + +零知識證明卷軸透過在鏈外計算來提高以太坊基礎層的吞吐量,但真正提升擴展的手段是壓縮交易資料。 以太坊的[區塊大小](/developers/docs/blocks/#block-size)限制了每個區塊能夠保存的資料,進而限制了每個區塊處理的交易數量。 透過壓縮交易相關的資料,零知識證明卷軸顯著增加了每個區塊處理的交易數量。 + +零知識證明卷軸能夠比樂觀卷軸更好地壓縮交易資料,因爲它不必發佈驗證每筆交易所需的所有資料。 它只需要發佈在卷軸上重建帳戶最新狀態和餘額所需的最少資料。 + +### 遞迴證明 {#recursive-proofs} + +零知識證明的一個優點是,證明可以驗證其他證明。 例如,單個 ZK-SNARK 可以驗證其他的 ZK-SNARK。 這種「證明的證明」被稱爲遞迴證明,它顯著提高了零知識證明卷軸的吞吐量。 + +目前,有效性證明是逐塊產生的,並被提交到一層網路合約進行驗證。 然而,驗證單個區塊證明限制了零知識證明卷軸可以實現的吞吐量,因爲當營運者提交證明時只能最終確定一個區塊。 + +然而,遞迴證明可以使用一個有效性證明最終確定多個區塊。 這是因爲證明電路會遞迴彙總多個區塊證明,直到建立一個最終證明。 二層網路營運者提交該遞迴證明,如果合約接受它,所有相關的區塊將會立即最終確定。 使用遞迴證明,可以定期在以太坊上最終確定的零知識證明卷軸交易的數量將會增加。 + +### 零知識證明卷軸的優勢和劣勢 {#zk-rollups-pros-and-cons} + +| 優勢 | 劣勢 | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | +| 有效性證明確保鏈外交易的正確性,並防止營運者執行無效的狀態轉換。 | 與計算和驗證有效性證明相關的成本很高,並且可能會增加卷軸使用者的費用。 | +| 一旦在一層網路上驗證了有效性證明,當狀態更新獲得批准後,交易會更快地最終確定。 | 由於零知識技術的複雜性,構建與以太坊虛擬機相容的零知識證明卷軸很困難。 | +| 依賴去信任加密機制來保證安全,而不是像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/#optimistic-pros-and-cons)一樣依賴受激勵行爲者的誠實。 | 生成有效性證明需要專業化硬體,這可能會鼓勵一些參與方對鏈進行集中化控制。 | +| 將恢復鏈外狀態所需的資料儲存在一層網路上,這保證了安全性、抗審查性和去中心化。 | 中心化營運者(排序者)可以影響交易的順序。 | +| 使用者從更高的資本效率中受益,並且可以立即從二層網路提取資金。 | 硬體要求可能會減少能夠强制推進鏈的參與者數量,這增加了惡意營運者凍結卷軸狀態和審查使用者的風險。 | +| 不依賴於活躍性假設,使用者不必驗證鏈也能保護其資金。 | 一些證明系統(如 ZK-SNARK)需要可信的設定,如果處理不當,可能會損害零知識證明卷軸的安全模型。 | +| 更好的資料壓縮有助於降低在以太坊上發佈 `calldata` 的成本,並將使用者的卷軸費用降到最低。 | | + +### 零知識證明卷軸之視覺解釋 {#zk-video} + +觀看 Finematics 的零知識證明卷軸影片: + + + +### 使用零知識證明卷軸 {#use-zk-rollups} + +零知識證明卷軸存在多種實作,可供你整合到去中心化應用程式: + + + +## 零知識以太坊虛擬機上有哪些項目? {#zkevm-projects} + +零知識以太坊虛擬機上運作的專案包括: + +- **[zkEVM](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _zkEVM 是由以太坊基金會資助的專案,旨在開發與以太坊虛擬機相容的零知識證明卷軸,以及為以太坊區塊產生有效性證明的機制。_ + +- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _是以太坊主網上的一個去中心化零知識證明卷軸,它在零知識以太坊虛擬機 (zkEVM) 上運作,以透明的方式執行以太坊交易,包括具有零知識證明驗證的智慧型合約。_ + +- **[Scroll](https://scroll.io/blog/zkEVM)** - _是一家技術驅動型公司,致力於為以太坊構建原生零知識以太坊虛擬機二層網路解決方案。_ + +- **[Taiko](https://taiko.xyz)** - _Taiko 是等同於以太坊的去中心化零知識證明卷軸([第一類零知識以太坊虛擬機](https://vitalik.eth.limo/general/2022/08/04/zkevm.html))。_ + +- **[ZKsync](https://docs.zksync.io/)** - _ZKsync Era 是與以太坊個虛擬機相容的零知識證明卷軸,由 Matter Labs 構建,並由其自己的零知識以太坊虛擬機提供支援。_ + +- **[Starknet](https://starkware.co/starknet/)** - _StarkNet 是一個與以太坊虛擬機相容的二層網路擴張解決方案,由 StarkWare 構建。_ + +- **[Morph](https://www.morphl2.io/)** - _Morph 是一個利用零知識證明來解決二層網路狀態挑戰問題的混合卷軸擴張解決方案。_ + +## 深入閲讀零知識證明卷軸的相關内容 {#further-reading-on-zk-rollups} + +- [什麼是零知識證明卷軸?](https://coinmarketcap.com/alexandria/glossary/zero-knowledge-rollups) +- [什麼是零知識證明卷軸?](https://alchemy.com/blog/zero-knowledge-rollups) +- [STARK 和 SNARK 的比較](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) +- [什麽是零知識以太坊虛擬機?](https://www.alchemy.com/overviews/zkevm) +- [零知識以太坊虛擬機類型:等同於以太坊、等同於以太坊虛擬機、第 1 類、第 4 類,以及其他難以理解的拗口詞](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4) +- [介紹零知識以太坊虛擬機](https://hackmd.io/@yezhang/S1_KMMbGt) +- [超贊的零知識以太坊虛擬機資源](https://github.com/LuozhuZhang/awesome-zkevm) +- [深入瞭解 ZK-SNARK](https://vitalik.eth.limo/general/2017/02/01/zk_snarks.html) +- [如何實現 SNARK?](https://vitalik.eth.limo/general/2021/01/26/snarks.html) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/index.md new file mode 100644 index 00000000000..505b1639240 --- /dev/null +++ b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/index.md @@ -0,0 +1,32 @@ +--- +title: 資料結構和編碼 +description: 以太坊基本資料結構概覽。 +lang: zh-tw +sidebarDepth: 2 +--- + +以太坊會建立、儲存和傳送大量資料。 該資料必須使用標準化格式和節省記憶體的方式,以便任何人都能夠在相對一般的消費級硬體上[運行節點](/run-a-node/)。 爲了實現這一點,以太坊堆棧中使用了一些特定的資料結構。 + +## 前置要求 {#prerequisites} + +你應該對以太坊和[用戶端軟體](/developers/docs/nodes-and-clients/)的基本原理已經有所了解。 熟悉網路層和[以太坊白皮書](/whitepaper/)會更加好。 + +## 資料結構 {#data-structures} + +### 帕特里夏默克爾樹 {#patricia-merkle-tries} + +帕特里夏默克爾樹是一種資料結構,將鍵值對編碼為具有確定性且經過加密驗證的樹。 這些資料結構被廣泛用於以太坊執行層。 + +[有關帕特里夏默克爾樹的更多資訊](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) + +### 遞迴長度前置詞 {#recursive-length-prefix} + +遞迴長度前置詞 (RLP) 是一種在以太坊執行層中廣泛使用的序列化方法。 + +[有關遞迴長度前置詞的更多資訊](/developers/docs/data-structures-and-encoding/rlp) + +### 簡易序列化 {#simple-serialize} + +簡單序列化 (SSZ) 因爲與默克爾化功能相容,是以太坊共識層主要序列化格式。 + +[有關簡易序列化的更多資訊](/developers/docs/data-structures-and-encoding/ssz) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md new file mode 100644 index 00000000000..a1d46f18502 --- /dev/null +++ b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -0,0 +1,263 @@ +--- +title: 默克爾帕特里夏樹 +description: 介紹默克爾帕特里夏樹。 +lang: zh-tw +sidebarDepth: 2 +--- + +以太坊的狀態(所有帳戶、餘額和智慧型合約的總體)被編碼成一種特殊版本的資料結構,這種結構在計算機科學界通常被稱作默克爾樹。 這種結構在密碼學中的許多應用中都非常有用,因為它會在默克爾樹中所有互相有關的資料片段之間建立了一種可驗證的關係,產生可用於驗證相關資料的單一**根**值。 + +以太坊的資料結構是「改良版的默克爾帕特里夏樹」,之所以會這樣命名,是因為它借鑒了一些 PATRICIA(字母數字編碼的資訊擷取實用演算法)的部分特徵,同時它是為了對構成以太坊狀態的項目進行有效率的資料**擷取**而設計的。 + +默克爾帕特里夏樹是確定性的,並且可以透過加密方式驗證:生成狀態根的唯一方式是從每個單獨的狀態進行計算,且兩個相同的狀態可以透過比較根雜湊和其父雜湊(_默克爾證明_)來簡單地證明相同。 相反,無法用同一個根雜湊建立兩個不同的狀態,任何用不同值修改狀態的嘗試都會導致不同的狀態根雜湊。 從理論上講,這種結構為置入、查找和刪除提供了完美的 `O(log(n))` 效率。 + +在不久的將來,以太坊計劃遷移到[沃克爾樹](https://ethereum.org/en/roadmap/verkle-trees)結構,這將為未來的協定改進帶來更多新的可能性。 + +## 前置要求 {#prerequisites} + +為了更容易理解本文,具備以下基礎知識會很有幫助:[雜湊](https://en.wikipedia.org/wiki/Hash_function)、[默克爾樹](https://en.wikipedia.org/wiki/Merkle_tree)、[字典树](https://en.wikipedia.org/wiki/Trie)和[序列化](https://en.wikipedia.org/wiki/Serialization)。 本文從基本的[基數樹](https://en.wikipedia.org/wiki/Radix_tree)描述開始,然後逐步介紹使以太坊資料結構更爲優化的必要修改。 + +## 基數樹 {#basic-radix-tries} + +在基數樹中,每個節點看起來如下: + +``` + [i_0, i_1 ... i_n, value] +``` + +其中,`i_0 ... i_n` 代表字母表的符號(通常是二進位或十六進位),`value` 是節點的終值,`i_0, i_1 ... i_n` 插槽中的值為 `NULL` 或指向其他節點(在我們的示例中,是其他節點的雜湊)的指針。 這形成了基本的 `(key, value)` 存儲。 + +假設你想使用基數樹資料結構永久保存一組鍵值對的順序。 爲了在字典樹中找到目前與鍵 `dog` 對應的值,你首先需要把 `dog` 轉換為字母表中的字母(提供 `64 6f 67`),然後沿著該路徑向下遍歷字典樹,直到找到該值。 也就是説,爲了找到字典樹的根節點,你首先需要在平面鍵/值資料庫中找到根雜湊。 它表示指向其他節點的一個鍵陣列。 你將使用索引 `6` 的值作爲鍵,並通過在平面鍵/值資料庫中查找該鍵來獲取下一級的節點。 然後選取索引 `4` 查找下一個值,再選取索引 `6`,依此類推,直到遍歷路徑 `root -> 6 -> 4 -> 6 -> 15 -> 6 -> 7` 后,你會找到該節點的值並返回結果。 + +從「樹」中和從底層平面鍵/值「資料庫」中進行查找有所區別。 它們都定義了鍵/值排列,但底層資料庫能夠對鍵執行傳統的一步查找。 在樹中查找一個鍵對應的值則需要在底層資料庫中查詢多次,才能得到上述的最終值。 讓我們將後者稱爲 `path`,以消除歧義。 + +基數樹的更新和刪除操作可被定義如下: + +``` + def update(node,path,value): + curnode = db.get(node) if node else [ NULL ] * 17 + newnode = curnode.copy() + if path == '': + newnode[-1] = value + else: + newindex = update(curnode[path[0]],path[1:],value) + newnode[path[0]] = newindex + db.put(hash(newnode),newnode) + return hash(newnode) + + def delete(node,path): + if node is NULL: + return NULL + else: + curnode = db.get(node) + newnode = curnode.copy() + if path == '': + newnode[-1] = NULL + else: + newindex = delete(curnode[path[0]],path[1:]) + newnode[path[0]] = newindex + + if all(x is NULL for x in newnode): + return NULL + else: + db.put(hash(newnode),newnode) + return hash(newnode) +``` + +「默克爾」基數樹是透過使用確定性產生的加密雜湊摘要連結節點來構建的。 這種(鍵/值資料庫中 `key == keccak256(rlp(value))`)内容尋址提供了儲存資料的加密完整性保證。 如果給定字典樹的根雜湊是公開的,則任何能夠訪問底層葉資料的人都可以透過提供將特定值與樹根連結的每個節點的雜湊,來證明該字典樹在特定路徑中包含給定值。 + +對於攻擊者來講,他們無法證明 `(path, value)` 對不存在,因爲根雜湊最終基於其下方的所有雜湊。 任何底層修改都會改變根雜湊。 你可以將雜湊想做是資料結構資訊的一種壓縮表示,並透過雜湊函式的預映射保護保證安全。 + +我們將基數樹的原子單位(例如單個十六進位字元或 4 位二進位數字)稱爲「nibble」。 如上所述,以 nibble 為單位遍歷路徑時,節點最多可以指向 16 個子節點,但是還包括一個 `value` 元素。 因此,我們將它們表示爲長度 17 的陣列。 我們將這 17 個元素的陣列稱爲「分支節點」。 + +## 默克爾帕特里夏樹 {#merkle-patricia-trees} + +基數樹有一個主要限制:效率低下。 如果你希望將一個 `(path, value)` 繫結儲存在路徑長度為 64 字符(`bytes32` 中的 nibble 數)的位置,如以太坊中,我們需要超過一千個位元組的額外空間將每個字元存儲一個等級,並且每次查詢或刪除都需要執行完整的 64 步。 下文介紹的帕特里夏樹解決了這個問題。 + +### 最佳化 {#optimization} + +默克爾帕特里夏樹中的節點可以是以下其中一種: + +1. `NULL`(表示爲空字串) +2. `branch` 一個 17 項目節點 `[ v0 ... v15, vt ]` +3. `leaf` 一個 2 項目節點 `[ encodedPath, value ]` +4. `extension` 一個 2 項目節點 `[ encodedPath, key ]` + +在 64 字元的路徑中,遍歷樹的前幾層后,你將會達到一個至少下游部分不再有分支路徑的節點。 爲了避免在路徑中建立多達 15 個稀疏 `NULL` 節點,我們需要透過設置一個形式爲 `[ encodedPath, key ]` 的 `extension` 節點來簡化向下遍歷,其中 `encodedPath` 包含要跳過的「部分路徑」(使用下面描述的壓縮編碼),`key` 用於下一次資料庫查詢。 + +對於 `leaf` 節點,可以使用 `encodedPath` 的第一個 nibble 中的標記來標注,該路徑編碼了所有先前節點的路徑片段,並且我們可以直接查找 `value`。 + +然而,上述優化帶來了歧義。 + +當 nibble 遍歷路徑時,最後我們可能需要遍歷奇數個 nibble,但是所有資料都需要以 `bytes` 形式儲存。 兩者之間是無法區分的,例如,nibble `1` 和 nibble `01`(兩者都必須存儲爲 `<01>`)。 爲了指定奇數長度,這部分路徑需要用標記作爲前置詞。 + +### 規範:具有可選終止符的十六進位序列壓縮編碼 {#specification} + +如上所述,_剩餘部分路徑長度為奇數 vs 偶數_和_葉節點 vs 擴展節點_的標記位於任意 2 項目節點中部分路徑的第一個 nibble。 它們會產生以下結果: + + hex char bits | node type partial path length + ---------------------------------------------------------- + 0 0000 | extension even + 1 0001 | extension odd + 2 0010 | terminating (leaf) even + 3 0011 | terminating (leaf) odd + +對於剩餘路徑長度為偶數的情況(`0` 或 `2`),一定會附加一個 `0`「填充」nibble。 + +``` + def compact_encode(hexarray): + term = 1 if hexarray[-1] == 16 else 0 + if term: hexarray = hexarray[:-1] + oddlen = len(hexarray) % 2 + flags = 2 * term + oddlen + if oddlen: + hexarray = [flags] + hexarray + else: + hexarray = [flags] + [0] + hexarray + // hexarray now has an even length whose first nibble is the flags. + o = '' + for i in range(0,len(hexarray),2): + o += chr(16 * hexarray[i] + hexarray[i+1]) + return o +``` + +範例: + +``` + > [ 1, 2, 3, 4, 5, ...] + '11 23 45' + > [ 0, 1, 2, 3, 4, 5, ...] + '00 01 23 45' + > [ 0, f, 1, c, b, 8, 10] + '20 0f 1c b8' + > [ f, 1, c, b, 8, 10] + '3f 1c b8' +``` + +下面是獲取默克爾帕特里夏樹中節點的擴展程式碼: + +``` + def get_helper(node,path): + if path == []: return node + if node = '': return '' + curnode = rlp.decode(node if len(node) < 32 else db.get(node)) + if len(curnode) == 2: + (k2, v2) = curnode + k2 = compact_decode(k2) + if k2 == path[:len(k2)]: + return get(v2, path[len(k2):]) + else: + return '' + elif len(curnode) == 17: + return get_helper(curnode[path[0]],path[1:]) + + def get(node,path): + path2 = [] + for i in range(len(path)): + path2.push(int(ord(path[i]) / 16)) + path2.push(ord(path[i]) % 16) + path2.push(16) + return get_helper(node,path2) +``` + +### 示例樹 {#example-trie} + +假設我們想要一個包含四個路徑/值對 `('do', 'verb')`、`('dog', 'puppy')`、`('doge', 'coins')`、`('horse', 'stallion')` 的樹。 + +首先,我們需要將路徑和值都轉換爲 `bytes`。 如下,_paths_ 的實際位元組代表由 `<>` 表示,而 _values_ 仍然顯示爲字串,由 `"` 表示,以方便理解(值也應該為 `bytes`): + +``` + <64 6f> : 'verb' + <64 6f 67> : 'puppy' + <64 6f 67 65> : 'coins' + <68 6f 72 73 65> : 'stallion' +``` + +現在,我們使用底層資料庫中的以下鍵/值對構建了這樣一顆樹: + +``` + rootHash: [ <16>, hashA ] + hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] +``` + +當一個節點在另一個節點内部被引用時,包含的内容是 `H(rlp.encode(node))`,其中 `H(x) = keccak256(x) if len(x) >= 32 else x` 並且 `rlp.encode` 是[遞迴長度前置詞](/developers/docs/data-structures-and-encoding/rlp)編碼函式。 + +請注意,更新樹時,_如果_新建立的節點長度 >= 32,則需要將鍵/值對 `(keccak256(x), x)` 儲存在一個持續不變的查找表中。 然而,如果節點比這短,則不需要儲存任何資料,因爲函式 f(x) = x 是可逆的。 + +## 以太坊中的樹 {#tries-in-ethereum} + +以太坊執行層中的所有默克爾樹都使用默克爾帕特里夏樹。 + +在區塊頭,有來自其中 3 棵樹的 3 個根。 + +1. stateRoot +2. transactionsRoot +3. receiptsRoot + +### 狀態樹 {#state-trie} + +有一個全域狀態樹,每次用戶端處理一個區塊時它都會更新。 其中,`path` 始終為 `keccak256(ethereumAddress)`,並且 `value` 始終為 `rlp(ethereumAccount)`。 具體來講,一個以太坊 `account` 是包含 4 個項目的陣列:`[nonce,balance,storageRoot,codeHash]`。 此時,值得注意的是,該 `storageRoot` 是另一個帕特里夏樹的根: + +### 存儲樹 {#storage-trie} + +存儲樹是保存_所有_合約資料的地方。 每個帳戶都有一棵單獨的存儲樹。 爲了用給定地址檢索位於特定存儲位置的值,需要有存儲地址、存儲中所儲存資料的整數位置,以及區塊 ID。 之後,這些資料可以作爲引數傳入 JSON-RPC 應用程式介面中定義的 `eth_getStorageAt`,例如,用於檢索地址 `0x295a70b2de5e3953354a6a8344e616ed314d7251` 的存儲插槽 0 中的資料: + +``` +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 + +{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} + +``` + +檢索存儲中的其他元素稍微複雜一些,因爲必須首先計算存儲樹中的位置。 該位置作爲地址和存儲位置的 `keccak256` 雜湊進行計算,兩者都從左側開始,用零填充 32 位元組的長度。 例如,地址 `0x391694e7e0b0cce554cb130d723a9d27458f9298` 存儲插槽 1 中的資料位置是: + +``` +keccak256(decodeHex("000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001")) +``` + +在 Geth 主控台中,可以按以下方式計算: + +``` +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +因此,`path` 為 `keccak256(<6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9>)`。 與之前一樣,該地址現在可用於從存儲樹檢索資料: + +``` +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 + +{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} +``` + +注:如果不是合約帳戶,以太坊帳戶的 `storageRoot` 預設為空。 + +### 交易樹 {#transaction-trie} + +每個區塊都有一個獨立的交易樹,也用於儲存 `(key, value)` 對。 此處的路徑為:`rlp(transactionIndex)`,代表了對應一個值的鍵,該值由以下程式碼決定: + +``` +if legacyTx: + value = rlp(tx) +else: + value = TxType | encode(tx) +``` + +在 [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) 文件中可以找到更多相關資訊。 + +### 收據樹 {#receipts-trie} + +每個區塊都有其收據樹。 此處的 `path` 是:`rlp(transactionIndex)`。 `transactionIndex` 是其所在區塊中的索引。 收據樹從不更新。 與交易樹類似,它也有當前和以前的收據。 爲了在收據樹中查詢特定的收據,需要提供區塊中交易的索引、收據承載以及交易類型。 返回的收據可以是 `Receipt` 類型,該類型被定義爲 `TransactionType` 和 `ReceiptPayload` 的串聯,也可以是 `LegacyReceipt` 類型,該類型被定義爲 `rlp([status, cumulativeGasUsed, logsBloom, logs])`。 + +在 [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) 文件中可以找到更多相關資訊。 + +## 衍生閱讀 {#further-reading} + +- [修改後的默克爾帕特里夏樹 — 以太坊如何保存狀態](https://medium.com/codechain/modified-merkle-patricia-trie-how-ethereum-saves-a-state-e6d7555078dd) +- [以太坊中的默克爾](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/) +- [瞭解以太坊樹](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/rlp/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/rlp/index.md new file mode 100644 index 00000000000..30cef3a9519 --- /dev/null +++ b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/rlp/index.md @@ -0,0 +1,163 @@ +--- +title: 遞迴長度前置詞 (RLP) 序列化 +description: 以太坊執行層中的遞迴長度前置詞編碼的定義 +lang: zh-tw +sidebarDepth: 2 +--- + +遞迴長度前置詞 (RLP) 序列化在以太坊執行層用戶端中廣泛使用。 遞迴長度前置詞以節省空間的格式標準化資料在節點之間的傳送。 遞迴長度前置詞的目的在於,對任意嵌套的二進位資料陣列進行編碼,而遞迴長度前置詞是用於序列化以太坊執行層中物件的主要編碼方法。 遞迴長度前置詞的主要目的是對結構進行解碼;除了正整數外,遞迴長度前置詞將特定資料類型(例如字串、浮點數)的編碼委托給更高階的協定。 正整數必須以沒有前導零的大端二進位形式表示(因而使整數值零相當於空位元組陣列)。 任何使用遞迴長度前置詞的高階協定都必須將具有前導零的反序列化正整數視爲無效。 + +更多資訊請參閱[以太坊黃皮書(附錄 B)](https://ethereum.github.io/yellowpaper/paper.pdf#page=19)。 + +要使用遞迴長度前置詞對字典進行編碼,建議的兩種規範形式為: + +- 配合按字典順序排序的鍵使用 `[[k1,v1],[k2,v2]...]` +- 像以太坊一樣使用更高階的帕特里夏樹編碼 + +## 定義 {#definition} + +遞迴長度前置詞編碼函式接受一個項目。 該項目的定義如下: + +- 一個字串(即位元組陣列)是一個項目 +- 一個項目清單是一個項目 +- 一個正整數是一個項目 + +例如,下列所述都是項目: + +- 空字串; +- 包含單詞「cat」的字串; +- 包含任意數量字串的清單; +- 以及更複雜的資料結構,例如 `["cat", ["puppy", "cow"], "horse", [[]], "pig", [""], "sheep"]`。 +- 數字 `100` + +請注意,在本頁剩餘部分的情境下,「字串」表示「一定數量的二進位資料位元組」;不使用特殊編碼,並且不隱含有關字串内容的知識(除非針對非最小正整數的規則有要求)。 + +遞迴長度前置詞編碼的定義如下: + +- 對於正整數,將其轉換爲最短位元組陣列,其大端解釋為整數,然後根據下面的規則編碼為字串。 +- 對於值在 `[0x00, 0x7f]`(十進位 `[0, 127]`)範圍内的單一位元組,該位元組就是它自己的遞迴長度前置詞編碼。 +- 否則,如果字串的長度為 0-55 位元組,則遞迴長度前置詞編碼包含一個值為 **0x80**(十進位 128)的單一位元組,加上該字串后字串的長度。 因此,第一個位元組的範圍是 `[0x80, 0xb7]`(十進位 `[128, 183]`)。 +- 如果字串的長度超過 55 位元組,則遞迴長度前置詞編碼的組成為:一個值為 **0xb7**(十進位 183)的單一位元組,加上二進位形式的字串長度之長度(以位元組為單位),后跟字串的長度,然後是字串。 例如,一個 1024 位元組長的字串將被編碼為 `\xb9\x04\x00`(十進位 `185, 4, 0`),後跟該字串。 在這裏,`0xb9` (183 + 2 = 185) 為第一個位元組,然後是表示實際字串長度的 2 個位元組 `0x0400`(十進位 1024)。 因此,第一個位元組的範圍是 `[0xb8, 0xbf]`(十進位 `[184, 191]`)。 +- 如果字串長度為 2^64 位元組或者更長,則可能不會對其進行編碼。 +- 如果清單的縂承載長度(即其所有經過遞迴長度前置詞編碼的項目的組合長度)為 0-55 位元組,則遞迴長度前置詞編碼包含一個值為 **0xc0** 的單一位元組,加上承載長度,後跟項目遞迴長度前置詞編碼的串聯。 因此,第一個字節位元組的範圍是 `[0xc0, 0xf7]`(十進位 `[192, 247]`)。 +- 如果清單的縂承載長度超過 55 位元組,則遞迴長度前置詞編碼包含一個值為 **0xf7** 的單一位元組,加上二進位形式的承載長度(以位元組為單位),後跟承載的長度,後跟項目遞迴長度前置詞編碼的串聯。 因此,第一個字節位元組的範圍是 `[0xf8, 0xff]`(十進位 `[248, 255]`)。 + +對應的程式碼為: + +```python +def rlp_encode(input): + if isinstance(input,str): + if len(input) == 1 and ord(input) < 0x80: + return input + return encode_length(len(input), 0x80) + input + elif isinstance(input, list): + output = '' + for item in input: + output += rlp_encode(item) + return encode_length(len(output), 0xc0) + output + +def encode_length(L, offset): + if L < 56: + return chr(L + offset) + elif L < 256**8: + BL = to_binary(L) + return chr(len(BL) + offset + 55) + BL + raise Exception("input too long") + +def to_binary(x): + if x == 0: + return '' + return to_binary(int(x / 256)) + chr(x % 256) +``` + +## 範例 {#examples} + +- 字串 "dog" = [ 0x83, 'd', 'o', 'g' ] +- 清單 [ "cat", "dog" ] = `[ 0xc8, 0x83, 'c', 'a', 't', 0x83, 'd', 'o', 'g' ]` +- 空字串 ('null') = `[ 0x80 ]` +- 空清單 = `[ 0xc0 ]` +- 整數 0 = `[ 0x80 ]` +- 位元組 '\\x00' = `[ 0x00 ]` +- 位元組 '\\x0f' = `[ 0x0f ]` +- 位元組 '\\x04\\x00' = `[ 0x82, 0x04, 0x00 ]` +- 3 的[集合理論表示](http://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers),`[ [], [[]], [ [], [[]] ] ] = [ 0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0 ]` +- 字串 "Lorem ipsum dolor sit amet, consectetur adipisicing elit" = `[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ... , 'e', 'l', 'i', 't' ]` + +## 遞迴長度前置詞解碼 {#rlp-decoding} + +根據遞迴長度前置詞編碼的規則和過程,遞迴長度前置詞解碼的輸入被視爲一個二進位資料陣列。 遞迴長度前置詞解碼過程如下: + +1. 根據輸入資料的第一個位元組(即前置詞),解碼資料類型、實際資料長度和位移; + +2. 根據資料的類型和位移,對資料進行相應的解碼,遵循正整數的最小編碼規則; + +3. 繼續解碼輸入的剩餘部分; + +其中,解碼資料類型和位移的規則如下: + +1. 如果第一個位元組(即前置詞)的範圍是 [0x00, 0x7f],則資料為字串,并且字串本身就是第一個位元組; + +2. 如果第一個位元組的範圍是 [0x80, 0xb7],則資料為字串,并且第一個位元組后跟長度等於第一個位元組減去 0x80 的字串; + +3. 如果第一個位元組的範圍是 [0xb8, 0xbf],則資料為字串,第一個位元組后跟長度等於第一個位元組減去 0xb7 的字串長度,后跟該字串; + +4. 如果第一個位元組的範圍是 [0xc0, 0xf7],則資料為清單,第一個位元組後跟清單中所有項目的遞迴長度前置詞編碼串聯,而清單的縂承載等於第一個位元組減去 0xc0; + +5. 如果第一個位元組的範圍是 [0xf8, 0xff],則資料為清單,第一個位元組后跟長度等於第一個位元組減去 0xf7 的縂承載,而清單所有項目的遞迴長度前置詞編碼串聯則跟在清單的縂承載之後; + +對應的程式碼為: + +```python +def rlp_decode(input): + if len(input) == 0: + return + output = '' + (offset, dataLen, type) = decode_length(input) + if type is str: + output = instantiate_str(substr(input, offset, dataLen)) + elif type is list: + output = instantiate_list(substr(input, offset, dataLen)) + output += rlp_decode(substr(input, offset + dataLen)) + return output + +def decode_length(input): + length = len(input) + if length == 0: + raise Exception("input is null") + prefix = ord(input[0]) + if prefix <= 0x7f: + return (0, 1, str) + elif prefix <= 0xb7 and length > prefix - 0x80: + strLen = prefix - 0x80 + return (1, strLen, str) + elif prefix <= 0xbf and length > prefix - 0xb7 and length > prefix - 0xb7 + to_integer(substr(input, 1, prefix - 0xb7)): + lenOfStrLen = prefix - 0xb7 + strLen = to_integer(substr(input, 1, lenOfStrLen)) + return (1 + lenOfStrLen, strLen, str) + elif prefix <= 0xf7 and length > prefix - 0xc0: + listLen = prefix - 0xc0; + return (1, listLen, list) + elif prefix <= 0xff and length > prefix - 0xf7 and length > prefix - 0xf7 + to_integer(substr(input, 1, prefix - 0xf7)): + lenOfListLen = prefix - 0xf7 + listLen = to_integer(substr(input, 1, lenOfListLen)) + return (1 + lenOfListLen, listLen, list) + raise Exception("input does not conform to RLP encoding form") + +def to_integer(b): + length = len(b) + if length == 0: + raise Exception("input is null") + elif length == 1: + return ord(b[0]) + return ord(substr(b, -1)) + to_integer(substr(b, 0, -1)) * 256 +``` + +## 衍生閱讀 {#further-reading} + +- [以太坊中的遞迴長度前置詞](https://medium.com/coinmonks/data-structure-in-ethereum-episode-1-recursive-length-prefix-rlp-encoding-decoding-d1016832f919) +- [深入瞭解以太坊:遞迴長度前置詞](https://medium.com/coinmonks/ethereum-under-the-hood-part-3-rlp-decoding-df236dc13e58) +- [Coglio, A. (2020)。 ACL2 中的以太坊遞迴長度前置詞。 arXiv 預印本 arXiv:2009.13769。](https://arxiv.org/abs/2009.13769) + +## 相關主題 {#related-topics} + +- [帕特里夏默克爾樹](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/ssz/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/ssz/index.md new file mode 100644 index 00000000000..efb6450536c --- /dev/null +++ b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/ssz/index.md @@ -0,0 +1,149 @@ +--- +title: 簡單序列化 +description: 以太坊簡單序列化 (SSZ) 格式的解釋説明。 +lang: zh-tw +sidebarDepth: 2 +--- + +**簡單序列化 (SSZ)** 是信標鏈上使用的序列化方法。 它取代了遞迴長度前置詞序列化,後者在除了對等點發現協定以外的共識層到執行層上廣泛使用。 簡單序列化被設計爲具有確定性,並且也能夠有效率地進行默克爾化。 簡單序列化可以被認爲有兩個組成部分:序列化方案和默克爾化方案,其中默克爾化方案旨在有效率地處理序列化資料結構。 + +## 簡單序列化如何運作? {#how-does-ssz-work} + +### 序列化 {#serialization} + +簡單序列化是一種非自我描述的序列化方案 - 依賴於必須提前知道的方案。 簡單序列化的目標是將任意複雜性的物件用位元組字串來表示。 對於「基本類型」來講,這是一個非常簡單的過程。 元素被簡單地轉換爲十六進位位元組。 基本類型包括: + +- 無號整數 +- 布林值 + +對於複雜的「複合」類型,序列化會更加複雜,因爲複合類型包含多個可能具有不同類型或不同大小或兩者都有的元素。 在這些物件都具有固定長度的情況下(即無論它們的實際值如何,元素的大小將始終保持不變),序列化只是將複合類型中的每個元素轉換爲小端位元組字串。 這些位元組字串會連結在一起。 序列化物件用位元組清單表示,清單中的元素具有固定長度,它們的排序順序與其在反序列化物件中的順序相同。 + +對於具有可變長度的類型,實際資料會被序列化物件中該元素位置的「位移」值取代。 實際資料會添加到序列化物件末尾的堆中。 位移值是堆中實際資料開始的索引,充當指向相關位元組的指針。 + +下面的範例説明了位移如何作用於具有固定和可變長度元素的容器: + +```Rust + + struct Dummy { + + number1: u64, + number2: u64, + vector: Vec, + number3: u64 + } + + dummy = Dummy{ + + number1: 37, + number2: 55, + vector: vec![1,2,3,4], + number3: 22, + } + + serialized = ssz.serialize(dummy) + +``` + +`serialized` 將具有以下結構(這裏只填充到 4 個位元,實際會填充到 32 個位元,並爲了清晰起見保留 `int` 表示): + +``` +[37, 0, 0, 0, 55, 0, 0, 0, 16, 0, 0, 0, 22, 0, 0, 0, 1, 2, 3, 4] +------------ ----------- ----------- ----------- ---------- + | | | | | + number1 number2 offset for number 3 value for + vector vector + +``` + +爲了清晰起見,分成幾行: + +``` +[ + 37, 0, 0, 0, # little-endian encoding of `number1`. + 55, 0, 0, 0, # little-endian encoding of `number2`. + 16, 0, 0, 0, # The "offset" that indicates where the value of `vector` starts (little-endian 16). + 22, 0, 0, 0, # little-endian encoding of `number3`. + 1, 2, 3, 4, # The actual values in `vector`. +] +``` + +這仍然是簡化版 - 上述示意圖中的整數和零實際上將儲存在位元組清單中,就像這樣: + +``` +[ + 10100101000000000000000000000000 # little-endian encoding of `number1` + 10110111000000000000000000000000 # little-endian encoding of `number2`. + 10010000000000000000000000000000 # The "offset" that indicates where the value of `vector` starts (little-endian 16). + 10010110000000000000000000000000 # little-endian encoding of `number3`. + 10000001100000101000001110000100 # The actual value of the `bytes` field. +] +``` + +因此,可變長度類型的實際值儲存在序列化物件末尾的堆中,它們的位移則儲存在有序欄位清單中的正確位置。 + +還有一些特殊情況需要特殊處理,例如 `BitList` 類型需要在序列化過程中新增長度上限,並在反序列化過程中移除該上限。 在[簡單序列化規範](https://github.com/ethereum/consensus-specs/blob/dev/ssz/simple-serialize.md)中查看完整詳情。 + +### 反序列化 {#deserialization} + +反序列化該物件需要一個方案。 方案會定義序列化資料的精確配置,以便每個特定元素都可以從一個位元組二進位大型物件反序列化為一些有意義的物件,其中的元素具有正確的類型、值、大小和位置。 該方案告訴反序列化器哪些值是實際值,哪些是位移值。 當物件被序列化時,所有欄位名稱都會消失,但會根據方案在反序列化時被重新具現化。 + +參閱 [ssz.dev](https://www.ssz.dev/overview) 上關於此主題的互動式解釋。 + +## 默克爾化 {#merkleization} + +該簡單序列化物件之後可以被默克爾化 - 即轉換爲表示相同資料的默克爾樹。 首先,確定序列化物件中的 32 位元組區塊數量。 這些都是樹的「葉子」。 葉子的總數必須為 2 的冪,以便將葉子散列到一起,最終產生單個雜湊樹根。 如果情況並非如此,則會新增包含 32 位元組零的額外葉子。 如圖所示: + +``` + hash tree root + / \ + / \ + / \ + / \ + hash of leaves hash of leaves + 1 and 2 3 and 4 + / \ / \ + / \ / \ + / \ / \ + leaf1 leaf2 leaf3 leaf4 +``` + +在某些情況下,樹的葉子不會像上述範例中一樣自然均匀分佈。 例如,葉子 4 可能是一個包含多個元素的容器,需要向默克爾樹增加額外的「深度」,從而建立一棵不均匀的樹。 + +與其將這些樹元素稱爲葉子 X、節點 X 等,我們可以賦予它們廣義索引,從根 = 1 開始,沿著每個層級從左往右計數。 這就是之前解釋的廣義索引。 序列化清單中的每個元素都有一個等於 `2**depth + idx` 的廣義索引,其中 idx 是其在序列化物件中的零索引位置,depth 是默克爾樹的層級數,可以計算爲元素(葉子)數量以 2 為底的對數。 + +## 廣義索引 {#generalized-indices} + +廣義索引是一個整數,表示二進位默克爾樹中的一個節點,其中每個節點都有一個廣義索引 `2 ** depth + index in row`。 + +``` + 1 --depth = 0 2**0 + 0 = 1 + 2 3 --depth = 1 2**1 + 0 = 2, 2**1+1 = 3 + 4 5 6 7 --depth = 2 2**2 + 0 = 4, 2**2 + 1 = 5... + +``` + +這種表示爲默克爾樹中的每條資料產生一個節點索引。 + +## 多重證明 {#multiproofs} + +提供表示特定元素的廣義索引清單,以使我們可以根據雜湊樹根來對其進行驗證。 該根是我們接受的現實版本。 我們提供的任何資料都可以根據現實進行驗證,即,將資料插入默克爾樹中的正確位置(由其廣義索引確定),然後觀察根是否保持不變。 [此處](https://github.com/ethereum/consensus-specs/blob/dev/ssz/merkle-proofs.md#merkle-multiproofs)的規範中包含了一些函式,這些函式展示了如何計算所需的最小節點集,來驗證一組特定廣義索引的内容。 + +例如,爲了驗證下面樹中索引 9 中的資料,我們需要索引 8、9、5、3、1 處資料的雜湊。 (8,9) 的雜湊應該等於 (4) 的雜湊,它與 5 進行雜湊計算將產生 2,與 3 進行雜湊計算將產生樹根 1。 如果為 9 提供了不正確的資料,根將會改變,我們會檢測到這個問題並無法驗證分支。 + +``` +* = data required to generate proof + + 1* + 2 3* + 4 5* 6 7 +8* 9* 10 11 12 13 14 15 + +``` + +## 進一步閱讀 {#further-reading} + +- [升級以太坊:簡單序列化](https://eth2book.info/altair/part2/building_blocks/ssz) +- [升級以太坊:默克爾化](https://eth2book.info/altair/part2/building_blocks/merkleization) +- [簡單序列化實作](https://github.com/ethereum/consensus-specs/issues/2138) +- [簡單序列化計算器](https://simpleserialize.com/) +- [SSZ.dev](https://www.ssz.dev/) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md new file mode 100644 index 00000000000..858d1258106 --- /dev/null +++ b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md @@ -0,0 +1,189 @@ +--- +title: Web3 金鑰儲存的定義 +description: Web3 金鑰儲存的正式定義 +lang: zh-tw +sidebarDepth: 2 +--- + +要讓應用程式在以太坊上執行,可以使用 web3.js 程式庫提供的 web3 物件。 在底層,它透過遠端程序呼叫與區域節點通訊。 [web3](https://github.com/ethereum/web3.js/) 可與任何有公開遠端程序呼叫層的以太坊節點一起使用。 + +`web3` 包含 `eth` 物件 - web3.eth。 + +```js +var fs = require("fs") +var recognizer = require("ethereum-keyfile-recognizer") + +fs.readFile("keyfile.json", (err, data) => { + var json = JSON.parse(data) + var result = recognizer(json) +}) + +/** result + * [ 'web3', 3 ] web3 (v3) keyfile + * [ 'ethersale', undefined ] Ethersale keyfile + * null invalid keyfile + */ +``` + +以下記載了**第 3 版** Web3 金鑰儲存定義。 + +## 定義 {#definition} + +除了加密演算法不再綁定 AES-128-CBC 外(現在最低要求是 AES-128-CTR),和第一版對照,檔案的編碼和解碼方式差異不大。 大部分意義/演算法與第 1 版本相似,但 `mac` 除外,它是衍生金鑰最左邊算起第二組 16 位元組與完整的 `ciphertext` 串連在一起的 SHA3 (keccak-256)。 + +秘密金鑰檔案直接儲存在 `~/.web3/keystore`(類 Unix 系統)和 `~/AppData/Web3/keystore`(Windows 系統)中。 該檔案可以任意命名,但良好的慣例是以 `.json` 命名,其中 `` 是賦予秘密金鑰(秘密金鑰地址的隱私保護代理程式)的 128 位元 UUID。 + +所有這類的檔案都有一個相關的密碼。 要導出給定 `.json` 檔案的秘密金鑰,首先要導出這個檔案的加密金鑰,完成這工作要透過取得檔案的密碼,並將它傳給 `kdf` 金鑰中記述的金鑰導出函式。 KDF 函式的靜態和動態 KDF 依存參數是記述在 `kdfparams` 金鑰裡。 + +KDF 函式的靜態和動態 KDF 依存參數是記述在 `kdfparams` 金鑰裡。 + +- `kdf`:`pbkdf2` + +就 PBKDF2 而言,kdfparams 包含: + +- `prf`:必須是 `hmac-sha256`(未來可能會增加長度)。 +- `c`:反覆次数; +- `salt`:傳送給 PBKDF 的 salt +- `dklen`:衍生金鑰的長度。 必需大於或等於 32。 + +一旦檔案的金鑰導出後,必須透過 MAC 的導出進行驗証。 MAC 是由串聯衍生金鑰最左算起第二組 16 位元組和`ciphertext` 金鑰的內容所形成的位元組陣列的 SHAK3 (keccak-256) 雜湊值,也就是: + +```js +KECCAK(DK[16..31] ++ ) +``` + +(其中 `++` 是串連運算子) + +這數值應該和 `mac` 金鑰的內容進行比較;如果不同,會被要求提供替代密碼(否則運算會被取消)。 + +檔案的金鑰被驗證後,加密文字(檔案內的`ciphertext` 金鑰)可用 `cipher` 金鑰指定的對稱式加密演算法進行解碼,並透過 `cipherparams` 執行參數化。 如果衍生金鑰的長度和演算法的金鑰大小不一樣,則用 0 填滿,衍生金鑰最右邊的位元組應當用作演算法的金鑰。 + +所有最低限度合規實作都必須支援 AES-128-CTR 演算法,表示如下: + +- `cipher: aes-128-ctr` + +這密碼取得下列參數,作為 cipherparams 金鑰的金鑰提供: + +- `iv`:加密的 128 位元初始化向量。 + +加密金鑰是衍生金鑰的最左 16 位元組,也就是 `DK[0..15]`。 + +祕密金鑰的建立/加密基本上應該是這些步驟的反序操作。 確認 `uuid`、`salt` 和 `iv` 的確是隨機數。 + +除了 `version` 欄位應該作為版本的「硬」識別碼外,實作中也可以使用 `minorversion` 來追蹤較小的非破壞性格式變更。 + +## 測試向量 {#test-vectors} + +詳細資料: + +- `Address`: `008aeeda4d805471df9b2a5b0f38a0c3bcba786b` +- `ICAP`: `XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67` +- `UUID`: `3198bc9c-6672-5ab3-d9954942343ae5b6` +- `Password`: `testpassword` +- `Secret`: `7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d` + +### PBKDF2-SHA-256 {#PBKDF2-SHA-256} + +測試向量使用 `AES-128-CTR` 和 `PBKDF2-SHA-256`: + +`~/.web3/keystore/3198bc9c-6672-5ab3-d9954942343ae5b6.json` 檔案的內容: + +```json +{ + "crypto": { + "cipher": "aes-128-ctr", + "cipherparams": { + "iv": "6087dab2f9fdbbfaddc31a909735c1e6" + }, + "ciphertext": "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46", + "kdf": "pbkdf2", + "kdfparams": { + "c": 262144, + "dklen": 32, + "prf": "hmac-sha256", + "salt": "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd" + }, + "mac": "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2" + }, + "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version": 3 +} +``` + +**中間事物**: + +`Derived key`: `f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551` `MAC Body`: `e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46` `MAC`: `517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2` `Cipher key`: `f06d69cdc7da0faffb1008270bca38f5` + +### Scrypt {#scrypt} + +測試向量使用 AES-128-CTR 和 Scrypt: + +```json +{ + "crypto": { + "cipher": "aes-128-ctr", + "cipherparams": { + "iv": "740770fce12ce862af21264dab25f1da" + }, + "ciphertext": "dd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2", + "kdf": "scrypt", + "kdfparams": { + "dklen": 32, + "n": 262144, + "p": 1, + "r": 8, + "salt": "25710c2ccd7c610b24d068af83b959b7a0e5f40641f0c82daeb1345766191034" + }, + "mac": "337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c" + }, + "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version": 3 +} +``` + +**中間事物**: + +`衍生金鑰`:`7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d` `MAC 本體`:`edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2` `MAC`:`337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c` `加密金鑰`:`7446f59ecc301d2d79bc3302650d8a5c` + +## 對第一版的修正 {#alterations-from-v2} + +這版本修正了與發佈於[此處](https://github.com/ethereum/homestead-guide/blob/master/old-docs-for-reference/go-ethereum-wiki.rst/Passphrase-protected-key-store-spec.rst)的第一版的若干不一致的地方。 簡述如下: + +- 大小寫未對齊和不一致(scrypt 為小寫字母,Kdf 為大小寫字母混合,MAC 為大寫字母)。 +- 不必要的地址和侵害隱私權。 +- `Salt` 本質上是金鑰衍生函式的一個參數,一般而言應該與金鑰衍生函式而不是與加密相關聯。 +- _SaltLen_ 是不需要的(因為它是從 Salt 衍生的)。 +- 給定了金鑰衍生函式,但加密演算法是硬式指定的。 +- `Version` 本質上是數値但卻設為字串(結構化版本管理對於字串是可能的,但對於難得修改的設定檔案格式可能被認定超出範圍)。 +- `KDF` 和 `cipher` 理論上是同層級概念但組織方式卻不一樣。 +- `MAC` 是透過無關空白位置的資料片段 (!) 計算出來的。 + +已變更格式,賦予下列檔案等同先前連結頁面所述範例的功能: + +```json +{ + "crypto": { + "cipher": "aes-128-cbc", + "ciphertext": "07533e172414bfa50e99dba4a0ce603f654ebfa1ff46277c3e0c577fdc87f6bb4e4fe16c5a94ce6ce14cfa069821ef9b", + "cipherparams": { + "iv": "16d67ba0ce5a339ff2f07951253e6ba8" + }, + "kdf": "scrypt", + "kdfparams": { + "dklen": 32, + "n": 262144, + "p": 1, + "r": 8, + "salt": "06870e5e6a24e183a5c807bd1c43afd86d573f7db303ff4853d135cd0fd3fe91" + }, + "mac": "8ccded24da2e99a11d48cda146f9cc8213eb423e2ea0d8427f41c3be414424dd", + "version": 1 + }, + "id": "0498f19a-59db-4d54-ac95-33901b4f1870", + "version": 2 +} +``` + +## 對第二版的修正 {#alterations-from-v2} + +第二版是早期的 C++ 實作,有若干缺陷。 所有基本元素保留不變。 diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/index.md new file mode 100644 index 00000000000..669968f52d2 --- /dev/null +++ b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/index.md @@ -0,0 +1,155 @@ +--- +title: 網路層(Networking Layer) +description: 以太坊網路層簡介 +lang: zh-tw +sidebarDepth: 2 +--- + +以太坊是擁有數千節點的點對點網路,必須仰賴標準化協定與彼此通訊。 「網路層」則是一系列讓節點尋找彼此並交換資訊的協定, 包含全網路「八卦(gossiping)」資訊(一對多通訊)以及特定節點間交換請求與回應(一對一通訊)。 每個節點都必須遵守特定網路規則,確保發送與接收正確資訊。 + +用戶端軟體有兩個部分(執行用戶端和共識用戶端),每個都有自己獨特的網路堆疊。 除了與其他以太坊節點通訊之外,執行用戶端和共識用戶端還必須相互通訊。 本頁介紹對支援此通訊的協定。 + +執行用戶端透過執行層的點對點網路廣播交易。 這需要經過驗證的對等點之間進行加密通訊。 當一名驗證者被選擇來提議區塊,來自區域交易池的交易將會透過區域遠端程序呼叫連線傳遞到共識用戶端,然後被打包進信標區塊中。 之後,共識用戶端將在其點對點網路中廣播信標區塊。 這需要兩個獨立的點對點網路:一個連線執行用戶端來廣播交易,另一個連線共識用戶端來廣播區塊。 + +## 前置要求 {#prerequisites} + +對以太坊[節點和用戶端](/developers/docs/nodes-and-clients/)稍有瞭解將有助於理解本文。 + +## 執行層 {#execution-layer} + +執行層的網路協定被分爲兩個堆疊: + +- 發現堆疊:建立於使用者資料包通訊協定之上,使新節點能夠找到對等點進行連線 + +- DevP2P 堆疊:建立於傳輸控制通訊協定之上,使節點能夠交換資訊 + +這兩個堆疊平行運作。 發現堆疊將新的網路參與者傳送到網路中,而 DevP2P 堆疊則使它們能夠進行互動。 + +### 發現 {#discovery} + +發現是在網路中尋找其他節點的過程。 這會使用一小組引導節點來啓動(地址被[硬編碼](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go)到用戶端中的節點,因此它們能夠立即被找到並將用戶端連線到對等點)。 這些引導節點只用於將新節點引入到一組對等點 - 這是它們唯一的目的,它們不參與正常的用戶端任務,如同步鏈,並且它們只在用戶端第一次啓動時使用。 + +用於節點-引導節點互動的協定是 [Kademlia](https://medium.com/coinmonks/a-brief-overview-of-kademlia-and-its-use-in-various-decentralized-platforms-da08a7f72b8f) 的修改版本,它使用[分散式雜湊資料表](https://en.wikipedia.org/wiki/Distributed_hash_table)來共用節點清單。 每個節點都有一個該資料表的版本,其中包含連線到其最近對等點所需的資訊。 這裏的「近」不是地理上的 - 距離是由節點 ID 的相似性來定義的。 每個節點的資料表都會定期刷新,作爲一種安全功能。 例如,在 [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) 中,發現協定節點也可以發送「ads」來展示用戶端支持的子協定,這允許對等點協調它們可以用於通訊的協定。 + +發現從 PING-PONG 游戲開始。 一個成功的 PING-PONG 將新節點「連結綁定」到一個引導節點。 通知引導節點有新節點進入網路的初始訊息為 `PING`。 此 `PING` 包括關於新節點、引導節點和過期時間戳的雜湊資訊。 引導節點接收 `PING` 並返回包含 `PING` 雜湊的 `PONG`。 如果 `PING` 和 `PONG` 的雜湊相吻合,新節點和引導節點之間的連線就會被驗證,然後它們就被認爲「已綁定連結」。 + +一旦綁定連結,新節點就可以向引導節點發送 `FIND-NEIGHBOURS` 請求。 引導節點返回的資料包含一個新節點可以連線的對等點清單。 如果節點沒有綁定連結,`FIND-NEIGHBOURS` 請求將會失敗,因而新節點將無法進入網路。 + +一旦新節點從引導節點收到鄰居清單,就會開始與每個鄰居節點進行 PING-PONG 交換。 成功的 PING-PONG 會將新節點與鄰居節點連結綁定,以實現訊息交換。 + +``` +start client --> connect to bootnode --> bond to bootnode --> find neighbours --> bond to neighbours +``` + +執行用戶端目前使用 [Discv4](https://github.com/ethereum/devp2p/blob/master/discv4.md) 發現協定,並且正在努力遷移到 [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) 協定。 + +#### ENR:以太坊節點記錄 {#enr} + +[以太坊節點記錄 (ENR)](/developers/docs/networking-layer/network-addresses/) 是一個包含 3 個基本元素的物件:一個簽名(根據某種商定同意的身分識別方案產生的記錄内容的雜湊),一個追蹤記錄變更的序列編號,以及一個鍵值配對的任意清單。 這是一種面向未來的格式,它使得新對等點之間身分識別資訊的交換更加容易,並且是以太坊節點偏好的[網路地址](/developers/docs/networking-layer/network-addresses)格式。 + +#### 爲什麽在使用者資料包通訊協定之上建置發現? {#why-udp} + +使用者資料包通訊協定不支持任何錯誤檢查、失敗資料包的重新發送,或者動態開啓和關閉連線 - 相反,它只是向目標發送連續的訊息流,無論是否被成功接收。 這種最少的功能產生的開銷也最少,使得這種連線非常快速。 對於發現來講,如果某個節點只希望使其他節點知道其存在,以便與某個對等點建立正式的連線,使用使用者資料包通訊協定就足夠了。 然而,對於網路堆疊的其餘部分,使用者資料包通訊協定並不適合。 節點之間的資訊交換是相當複雜的,並因此需要更多功能齊全的協定來支持重新發送、錯誤檢查等等。 與傳輸控制通訊協定相關的額外開銷相對其額外功能而言是值得的。 因此,大多數點對點堆疊在傳輸控制通訊協定上運作。 + +### DevP2P {#devp2p} + +DevP2P 本身是以太坊爲了建立和維護點對點網路而實作的一整套協定。 新節點進入網路之後,其互動由 [DevP2P](https://github.com/ethereum/devp2p)堆疊中的協定管理。 這些都建立於傳輸控制通訊協定之上,包括 RLPx 傳輸協定、綫路協定和一些子協定。 [RLPx](https://github.com/ethereum/devp2p/blob/master/rlpx.md) 是管理啓動、驗證和維護節點之間工作階段的協定 RLPx 使用 RLP(遞迴長度前綴)編碼訊息,這是一種將資料編碼為最小結構來在節點之間發送的方法,這種方法非常節省空間。 + +兩個節點之間的 RLPx 工作階段從初始加密握手開始。 這需要節點發送身份驗證訊息,然後對等點會進行驗證。 成功驗證後,對等點會生成驗證確認訊息,並將其返回初始節點。 這是一個密鈅交換程序,使節點能夠私密且安全地進行通訊。 成功的加密握手會觸發兩個節點「在綫上」互相發送「hello」訊息。 綫路協定透過成功交換 hello 訊息來發起。 + +hello 訊息包含: + +- 協定版本 +- 用戶端 ID +- 連接埠 +- 節點 ID +- 支援的子協定清單 + +這是成功互動所需的訊息,因爲它定義了在兩個節點之間共用的功能並配置了通訊。 有一個子協定協調的程序,其中會將每個節點支援的子協定清單進行比較,並能將兩個節點共用的子協定用於工作階段中。 + +除了「hello」訊息以外,綫路協定還可以發送「disconnect」訊息,該訊息警告對等點連線將會被關閉。 綫路協定還包含定期發送的 PING 和 PONG 訊息,以保持工作階段開放。 因此,RLPx 和綫路協定的交換為節點之間的通訊奠定了基礎,並為根據特定子協定交換的有用資訊提供了平台。 + +### 子協定 {#sub-protocols} + +#### 綫路協定 {#wire-protocol} + +一旦對等點連線並且 RLPx 工作階段啓動,綫路協定就會定義對等點的通訊方式。 一開始,綫路協定會定義三個主要任務:鏈同步、區塊傳播和交易交換。 然而,以太坊切換到權益證明後,區塊傳播和鏈同步變成了共識層的一部分。 但交易交換仍然由執行用戶端負責。 交易交換指的是節點之間交換等待處理的交易,以便區塊建置者能夠選擇其中一些放到下一個區塊中。 請在[此處](https://github.com/ethereum/devp2p/blob/master/caps/eth.md)查看有關這些任務的詳細資訊。 支持這些子協定的用戶端透過 [JSON-RPC](/developers/docs/apis/json-rpc/) 將自己公開。 + +#### les(輕量以太坊子協定) {#les} + +這是用於同步輕量級用戶端的最小協定。 傳統上,該協定很少被使用,因爲全節點需要在沒有激勵的情況下向輕用戶端提供資料。 執行用戶端的預設行爲不是透過 les 為輕量級用戶端提供服務。 請在 les [規範](https://github.com/ethereum/devp2p/blob/master/caps/les.md)中查看更多相關資訊。 + +#### 快照 {#snap} + +[快照協定](https://github.com/ethereum/devp2p/blob/master/caps/snap.md#ethereum-snapshot-protocol-snap)是一種可選的擴充功能,它使對等點能夠交換最近狀態的快照,從而無需下載默克爾樹的内部節點就能驗證帳戶及存儲資料。 + +#### Wit(見證協定) {#wit} + +[見證協定](https://github.com/ethereum/devp2p/blob/master/caps/wit.md#ethereum-witness-protocol-wit)是一種可選的擴充功能,使對等點之間能夠交換狀態見證,幫助用戶端與鏈前端同步。 + +#### Whisper {#whisper} + +Whisper 是一個旨在實現安全的點對點資訊傳輸,而不需要向區塊鏈寫入任何資訊的協定。 它曾是 DevP2P 綫路協定的一部分,但現在已經棄用。 其他[相關專案](https://wakunetwork.com/)也有類似目標。 + +## 共識層 {#consensus-layer} + +共識用戶端參與具有不同規範的單獨點對點網路。 共識用戶端需要參與區塊廣播,以便其能夠從對等點接受新區塊,並在輪到其成爲區塊提議者時廣播它們。 與執行層類似,這首先需要一個發現協定,一邊節點可以找到對等點並建立安全的工作階段來交換區塊、證明等。 + +### 發現 {#consensus-discovery} + +與執行用戶端類似,共識用戶端使用使用者資料包通訊協定上的 [discv5](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-discovery-domain-discv5) 尋找對等點。 discv5 的共識層實現與執行用戶端的區別僅在於,它包含一個將 discv5 連線到 [libP2P](https://libp2p.io/) 堆疊的適配器,棄用了 DevP2P。 執行層的 RLPx 工作階段被棄用,代之以 libP2P 的噪音安全通道握手。 + +### 以太坊節點記錄 {#consensus-enr} + +共識節點的以太坊節點記錄包括節點的公鑰、IP 地址、使用者資料包通訊協定和傳輸控制通訊協定連接埠,以及兩個共識特定欄位:證明子網路位元欄位和 `eth2` 金鑰。 前者使節點更容易找到參與特定證明廣播子網路的對等點。 `eth2` 金輪包含節點正在使用的以太坊分叉版本的資訊,以確保對等點連線到正確的以太坊。 + +### libP2P {#libp2p} + +libP2P 堆疊支持發現之後的所有通訊。 用戶端可以根據其以太坊節點記錄的定義在 IPv4 和/或 IPv6 上撥號和接聽。 libP2P 層上的協定可以細分爲廣播和請求/響應域。 + +### 廣播 {#gossip} + +廣播域包括必須在整個網路中快速傳播的所有資訊。 這包括信標區區塊、證據、證明、退出和罰沒。 這是使用 libP2P gossipsub v1 傳輸的,並且依賴於在每個節點本機儲存的各種中繼資料,包括接收和傳輸的廣播承載的上限。 請在[此處](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-gossip-domain-gossipsub)查看有關廣播域的詳細資訊。 + +### 請求-回應 {#request-response} + +請求-回應域包含用戶端從其對等點請求特定資訊的協定。 範例包括請求匹配某些根雜湊或在一定時隙範圍内的特定信標區塊。 回應始終以快速壓縮的簡單序列化編碼位元組形式傳回。 + +## 為什麼共識用戶端喜歡簡單序列化而非遞迴長度前置詞? {#ssz-vs-rlp} + +SSZ 代表簡單序列化。 它使用固定位移,能夠簡單地解碼編碼訊息的單獨部分,而無需解碼整個結構,這對於共識用戶端非常有用,因爲它可以高效地從編碼訊息中獲取特定資訊片段。 它還專門設計於與默克爾協定整合,並提升與默克爾化相關的效率。 由於共識層中的所有雜湊都是默克爾根,這會帶來顯著的改進。 簡單序列化也保證值的唯一表示。 + +## 連線執行用戶端和共識用戶端 {#connecting-clients} + +共識用戶端和執行用戶端平行運作。 它們需要彼此連線,以便共識用戶端向執行用戶端提供指示,並使執行用戶端能夠向執行用戶端傳送需要納入信標區塊的交易捆綁。 兩個用戶端之間的通訊可以透過本機遠端程序呼叫連線來實現。 名爲[「Engine-API」](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)的應用程式介面定義兩個用戶端之間發送的指示。 由於兩個用戶端共用一個網路身分,它們也共用一個 ENR(以太坊節點記錄),其中包含每個用戶端的單獨金鑰(eth1 金鑰和 eth2 金鑰)。 + +如下展示了控制流摘要,括號中是相關的網路堆疊。 + +### 當共識用戶端不是區塊生產者時: {#when-consensus-client-is-not-block-producer} + +- 共識用戶端透過區塊廣播協定(共識點對點)接收區塊 +- 共識用戶端預驗證區塊,即確保它來自具有正確中繼資料的有效發送者 +- 區塊中的交易作爲執行承載發送到執行層(本機遠端程序呼叫連線) +- 執行層執行交易並驗證區塊頭中的狀態(即檢查雜湊是否相符) +- 執行層將驗證資料傳送回共識層,區塊現在被認爲已驗證(本機遠端程序呼叫連線) +- 共識層將區塊添加到其區塊鏈頭並證明該區塊,透過網路廣播證明(共識點對點) + +### 當共識用戶端是區塊生產者時: {#when-consensus-client-is-block-producer} + +- 共識用戶端收到其將成爲下一個區塊生產者的通知(共識點對點) +- 共識層在執行用戶端調用 `create block` 方法(本機遠端程序呼叫) +- 執行層訪問已由交易廣播協定填充的交易内存池(執行點對點) +- 執行用戶端將交易捆綁進一個區塊,執行交易並產生一個區塊雜湊 +- 共識用戶端從執行用戶端獲取交易和區塊雜湊,並將其新增至信標區塊(本機遠端程序呼叫) +- 共識用戶端透過區塊廣播協定廣播區塊(共識點對點) +- 其他用戶端透過區塊廣播協定接收提議的區塊,並如上述進行驗證(共識點對點) + +一旦區塊被足夠多的驗證者證明后,就會被新增到鏈頭,經過合理化並最終確定。 + +![](cons_client_net_layer.png) ![](exe_client_net_layer.png) + +共識用戶端和執行用戶端的網路層示意圖,取自 [ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) + +## 衍生閱讀 {#further-reading} + +[DevP2P](https://github.com/ethereum/devp2p) [LibP2p](https://github.com/libp2p/specs) [共識層網路規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) [kademlia 到 discv5](https://vac.dev/kademlia-to-discv5) [kademlia 論文](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) [以太坊點對點簡介](https://p2p.paris/en/talks/intro-ethereum-networking/) [eth1/eth2 的關係](http://ethresear.ch/t/eth1-eth2-client-relationship/7248) [合併和 eth2 用戶端詳情影片](https://www.youtube.com/watch?v=zNIrIninMgg) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/network-addresses/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/network-addresses/index.md new file mode 100644 index 00000000000..029dba3a0d2 --- /dev/null +++ b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/network-addresses/index.md @@ -0,0 +1,38 @@ +--- +title: 網路地址(Network addresses) +description: 網路地址簡介 +lang: zh-tw +sidebarDepth: 2 +--- + +以太坊節點必須使用一些基本資訊識別自身,以連接對等節點。 為了確保任何潛在對等節點都能解釋該資訊,需要使用任何以太網節點都能理解的三種標準化格式中的一種進行轉送:Multiaddr、Enode 或以太坊節點記錄 (ENR)。 以太坊節點紀錄 (ENR) 是目前的以太坊網路地址標準。 + +## 先備知識 {#prerequisites} + +要理解本頁內容,需具備一些以太坊[網路層](/developers/docs/networking-layer/)的基本知識。 + +## Multiaddr {#multiaddr} + +原始以太坊節點地址的格式為「multiaddr」(簡稱「多重地址」)。 Multiaddr 是為點對點網絡設計的通用格式。 這些地址利用鍵值配對表示,其中的鍵與值以斜線分隔。 例如,對於一個 IPv4 地址為 `192.168.22.27`、監聽傳輸控制通訊協定 (TCP) 連接埠 `33000` 的節點,其 Multiaddr 可以表示為: + +`/ip4/192.168.22.27/tcp/33000` + +若以太坊節點為例,含有節點 ID(其公鑰的雜湊值)的 Multiaddr 可以表示為: + +`/ip4/192.168.22.27/tcp/33000/p2p/5t7Nv7dG2d6ffbvAiewVsEwWweU3LdebSqX2y1bPrW8br` + +## Enode {#enode} + +Enode 使得以太坊節點可以用統一資源定位器地址格式識別。 在統一資源定位器的使用者名稱部分編碼十六進位的節點 ID,並使用 @ 將其與主機名稱分開。 主機名稱只能使用 IP 地址表示;不能使用網域名稱服務名稱。 主機名稱部分的連接埠是傳輸控制通訊協定 (TCP) 監聽連接埠。 如果傳輸控制通訊協定 (TCP) 與使用者資料包通訊協定 (UDP) 連接埠不同,則使用者資料包通訊協定 (UDP) 連接埠必須宣告為查詢參數「discport」。 + +下述範例中,節點統一資源定位器由 IP 地址 `10.3.58.6`、傳輸控制通訊協定 (TCP) 連接埠 `30303` 以及使用者資料包通訊協定 (UDP) 探索連接埠 `30301` 組成。 + +`enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301` + +## 以太坊節點紀錄 (ENR) {#enr} + +以太坊節點紀錄 (ENR) 是目前以太坊網路地址的標準化格式。 它取代了 Multiaddr 與 Encode 格式, 並允許節點間更大量的資訊交換,這一點尤其有用。 以太坊節點紀錄包含簽章、序列編號和多個欄位,這些欄位詳細說明用於產生和驗證簽章的身分識別方案。 以太坊節點紀錄也可以填入任意組織為鍵值配對形式的資料。 這些鍵值配對包含節點的 IP 地址以及節點能使用的子通訊協定相關資訊。 共識用戶端使用一種[特定的以太坊節點記錄結構](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure)來識別引導節點,並且也包含一個 `eth2` 欄位,其中包含有關目前以太坊分叉和證明八卦子網路(該子網路將節點連線到一組已將其證明彙總到一起的特定對等方)的資訊。 + +## 衍生閱讀 {#further-reading} + +[EIP-778:以太坊節點記錄 (ENR)](https://eips.ethereum.org/EIPS/eip-778)
[以太坊中的網路地址](https://dean.eigenmann.me/blog/2020/01/21/network-addresses-in-ethereum/)
[LibP2P:Multiaddr-Enode-ENR?!](https://consensys.net/diligence/blog/2020/09/libp2p-multiaddr-enode-enr/) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/portal-network/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/portal-network/index.md new file mode 100644 index 00000000000..b8ed30ab824 --- /dev/null +++ b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/portal-network/index.md @@ -0,0 +1,83 @@ +--- +title: 入口網路 +description: 入口網路概覽 - 一個開發中的網路,設計用來支援資源匱乏的客戶端。 +lang: zh-tw +--- + +以太坊是一個由執行以太坊用戶端軟體的電腦所構成的網路。 每一台這類的電腦就是一個所謂的「節點」。 用戶端軟體允許一個節點在以太坊網路上傳送和接收資料,和對照以太坊協定規則驗證資料。 節點保存了許多歷史資料在它們的磁碟存儲裝置裏,並在它們從網路上的其他節點接收到新的封包訊息(又稱區塊)時新增到其中。 有必要經常確認節點擁有的資訊與網路其餘節點的資訊是否一致。 這意味著經營一個節點需要大量的磁碟空間。 某些節點的運作也可能需要大量的隨機存取記憶體。 + +為規避磁碟儲存問題,可向全節點要求資訊而不是儲存所有資料在節點本身的「輕量級」節點已經被開發出來了。 然而,這意味著輕量級節點不會獨立驗證資訊,而是信任另一個節點。 這也意味著全節點需要承擔額外的工作來服務這些輕量級節點。 + +入口網路是為以太坊開發的新型網路設計。藉由以小塊方式在整個網路分享必要性的資料,輕量級節點不需要信任或增加全節點負擔的方式,解決資料可用性問題。 + +更多資訊請參閱[節點和用戶端](/developers/docs/nodes-and-clients/) + +## 為什麼我們需要入口網路 {#why-do-we-need-portal-network} + +以太坊節點儲存以太坊區塊鏈的全部或部分複製資料。 這些區域性的複本被用來驗證交易和確保節點沿著正確的區塊鏈行進。 在區域儲存資料使節點能夠獨立驗證進來的資料有效和正確與否,不需要依賴任何其他實體。 + +區塊鏈以及相關狀態和收據資料的區域複本佔據節點硬碟相當大的空間。 例如:使用 [Geth](https://geth.ethereum.org) 搭配共識用戶端來經營一個節點,建議要有 2TB 的硬碟。 使用只儲存比較近期的區塊組的鏈資料的快照同步,Geth 通常佔用約 650GB 的磁碟空間,但以約 14GB/周在成長(你可以定期向下修整節點至 650GB)。 + +這意味著經營節點的成本是很高的,因為以太坊需要大量的專用磁碟空間。 在以太坊開發藍圖上對這個問題有若干解決方法,包括[歷史有效期限](/roadmap/statelessness/#history-expiry)、[狀態有效期限](/roadmap/statelessness/#state-expiry)和[無狀態](/roadmap/statelessness/)。 然而,這可能要若干年後才有可能實行。 還有不必保存自己的鏈上資料複本的[輕量級節點](/developers/docs/nodes-and-clients/light-clients/),它們需要向全節點請求資料。 然而,這意味著輕量級節點必須信任全節點會提供真實的資料,並且強調全節點必須提供輕量級節點需要的資料。 + +入口網路旨在提供一種替代方法,使輕量級節點能夠獲取它們的資料,而無需信任或顯著增加全節點必須完成的工作。 讓整個網路上的以太坊節點可以分享資料,需要引入新的方法。 + +## 入口網路如何運作? {#how-does-portal-network-work} + +以太坊節點有嚴格的協定來定義它們如何相互通訊。 執行用戶端使用一組稱為 [DevP2P](/developers/docs/networking-layer/#devp2p) 的子協定通訊,而共識用戶端則使用一組不同的被稱為 [libP2P](/developers/docs/networking-layer/#libp2p) 的子協定。 它們定義了可以在節點之間傳遞的資料類型。 + +![devP2P 和 libP2P](portal-network-devp2p-libp2p.png) + +節點可以經由 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)提供特定資料,這是應用程式和電子錢包與以太坊節點交換資訊的方式。 然而,這些都不是用來提供資料給輕量級用戶端的理想協定。 + +輕量級用戶端目前無法透過 DevP2P 或 libP2p 請求具體的鏈資料,因爲那些協定只被設計來實現鏈同步和廣播區塊與交易。 輕量級用戶端不想下載這些資訊,因為這樣它們將不再是「輕量」的。 + +JSON-RPC 應用程式介面也不是輕量級用戶端資料請求的理想選擇,因爲它依賴於與能夠提供資料的特定全節點或中心化遠端程序呼叫提供者的連線。 這意味著輕量級用戶端必須信任特定節點/提供者是誠實的,並且該全節點可能也必須處理來自許多輕量級用戶端的大量請求,這增加了其帶寬要求。 + +入口網路的重點在於重新思考整個設計,專門為輕便而建立,不受現有以太坊用戶端的設計限制。 + +入口網路的核心思想是使用[分散式雜湊資料表](https://en.wikipedia.org/wiki/Distributed_hash_table)(類似於 Bittorrent),透過輕量 DevP2P 式的點對點去中心化網絡啓用輕量級用戶端所需的資訊,例如歷史資料和目前鏈頭的身份,從而充分利用目前網路堆棧的最佳部分。 + +這個概念是新增小部分的以太坊全體歷史資料和一些特定節點責任到每一個節點。 然後,尋找儲存所請求特定資料的節點,擷取這些資料,將資料提供給請求。 + +這倒轉了輕量級節點尋找單獨節點、要求過濾和提供大量資料的正規模式,取而代之的是迅速過濾分別負責小量資料的大量網路節點。 + +目標是讓輕量級入口用戶端的去中心化網路能夠: + +- 追蹤鏈頭 +- 同步近期和歷史鏈資料 +- 擷取狀態資料 +- 廣播交易 +- 使用[以太坊虛擬機](/developers/docs/evm/)執行交易 + +這個網路設計的優勢是: + +- 降低對中心化提供者的依存 +- 降低網際網路頻寬的使用 +- 同步處理減到最少或零 +- 可存取資源有限的裝置(<1 GB RAM,<100 MB 磁碟空間,1 個 CPU) + +下圖顯示可由入口網路提供的現存用戶端功能,如此讓使用者能在低資源裝置上存取這些功能。 + +![入口網路資料表](portal-network-table2.png) + +## 預設的用戶端多樣性 {#client-diversity-as-default} + +入口網路開發者最初也決定建立三種不同的入口網路用戶端設計。 + +入口網路用戶端如下: + +- [Trin](https://github.com/ethereum/trin):以 Rust 編寫 +- [Fluffy](https://nimbus.team/docs/fluffy.html):以 Nim 編寫 +- [Ultralight](https://github.com/ethereumjs/ultralight):以 Typescript 編寫 +- [Shisui](https://github.com/GrapeBaBa/shisui):以 Go 編寫 + +有多個獨立用戶端安裝啟用,增強了以太坊網路的回復力和去中心化。 + +假如一個用戶端遭受問題或漏洞,其他用戶端能繼續順暢運作,可以防止單點失靈。 此外,多樣化的用戶端安裝啟用能促進創新和競爭,驅使改善,和降低在這生態系統的單一文化風險。 + +## 了解更多 {#futher-reading} + +- [入口網路(Piper Merriam 在 Bogota 舉辦的 Devcon 大會)](https://www.youtube.com/watch?v=0stc9jnQLXA)。 +- [入口網路 discord](https://discord.gg/CFFnmE7Hbs) +- [入口網路網站](https://www.ethportal.net/) diff --git a/public/content/translations/zh-tw/26) Miscellaneous/about/index.md b/public/content/translations/zh-tw/26) Miscellaneous/about/index.md new file mode 100644 index 00000000000..c078a882609 --- /dev/null +++ b/public/content/translations/zh-tw/26) Miscellaneous/about/index.md @@ -0,0 +1,127 @@ +--- +title: 關於我們 +description: 有關 ethereum.org 的團隊,社群以及目標 +lang: zh-tw +--- + +# 關於 ethereum.org {#about-ethereumorg} + +ethereum.org 是一個屬於以太坊社群的開放原始碼資源,所有人都可貢獻一己之力。 我們有一個小型核心團隊致力於維護和開發網站,也有全球數千名社群成員做出貢獻。 + +## 有關名字的說明 {#a-note-on-names} + +人們常常混淆以太坊領域的名稱,這可能會導致人們難以理解以太坊的運作方式。 這裡有簡明解釋作釐清: + +### 以太坊 {#ethereum} + +以太坊是一個公共網路、區塊鏈和開放原始碼協議 — 由數以萬計的開發者、節點營運者、以太幣持有者和使用者運營、治理、管理和擁有組成的全球社群。 + +[有關以太坊的更多資訊](/what-is-ethereum/) + +[有關以太坊治理的更多資訊](/governance/) + +### 以太幣 (ETH) {#ether-or-eth} + +以太幣(其代碼也稱為 ETH)是在以太坊上交易的原生貨幣。 使用以太坊網路需要 ETH 來支付費用(以交易費的形式)。 透過質押 ETH,也可用於保護以太坊網路安全。 當人們談論以太坊的價格時,他們指的是 ETH 這種資產。 + +[有關以太幣的更多資訊](/eth/) + +[有關質押以太幣的更多資訊](/staking/) + +### 以太坊基金會 {#ethereum-foundation} + +最初由 ETH 眾籌融資的非營利組織,致力於支持以太坊網路和生態系統。 + +[有關以太坊基金會的更多資訊](/foundation/) + +### ethereum.org {#ethereum-org} + +為以太坊社群提供的開放原始碼網站和教育資源。 ethereum.org 由以太坊基金會資助的一個小型核心團隊領導,並得到全球數千名社群成員做出貢獻。 + +此頁面涵蓋有關 ethereum.org 的更多資訊。 + +## 我們的使命 {#our-mission} + +**ethereum.org 的使命是成為日益增長的以太坊社群的最佳入口網站。** + +為了幫助新的使用者熟悉以太坊與它的核心概念,我們努力打造一個淺顯易懂的教育資源,涵蓋所有與以太坊有關的主題。 我們希望: + +- 向新人介紹以太坊這個新科技 +- 幫助新成員著手使用 ETH 和以太坊 +- 幫助新的開發者起步 +- 報導以太坊世界的新聞 +- 展示我們的社群所創造的資源 +- 儘可能用多種語言散佈以太坊的相關知識 + +欲達成此使命,我們的團隊著重於 ethereum.org 的兩個主要目標: + +### 1. 改善 ethereum.org 的使用者體驗 {#visitors} + +- 延伸、改善及持續更新內容 +- 透過本地化和網路開發最佳案例來改善可用性和可存取性 +- 透過調查、測驗和 Web3 整合來提升使用者的參與度 +- 保持網站輕量與高效 + +### 2. 賦權貢獻者社群並使其成長與茁壯 {#community} + +- 增加網站貢獻者的總數 +- 透過參與、致謝和酬勞提高貢獻者的留存率。 +- 賦權社群成員,使他們做出越來越重要的貢獻 +- 促進貢獻的多樣性:程式碼、内容、設計、翻譯、修改 +- 持續更新程式庫,使其保持簡潔並有據可查 + +## 核心原則 {#core-principles} + +我們踐行一些核心原則,幫助並引導我們完成使命。 + +### 1. ethereum.org 是以太坊的入口網站 🌏 {#core-principles-1} + +我們想要激發使用者的興趣和解答他們的問題。 所以我們的入口網站要組合信息與「芝麻開門的時刻」以及現有的社區內傑出資源的鏈結。 我們的目的不是成為大量已有資源的替代品,而是作爲一個「新手教學」內容。 我們致力於支持與整合社群所建的資源,讓更多人發現和看到他們。 [以太坊的社群](/community/)便處於這一切的中心,我們不只是為之服務,更要與他們協作並納入其意見回饋。 這個網站不只是屬於現有社群,它更是屬於我們希望將來歡迎的新成員。 我們必須銘記,我們的社群是國際化的,包含著來自不同語言、地區和文化的人。 + +### 2. ethereum.org 不停演進 🛠 {#core-principles-2} + +以太坊及其社群也在不斷演進, 所以 ethereum.org 也是。 這也正造就了這個網站的簡單設計與模組化結構。 我們依據人們的使用習慣和社群的需求反覆對網站做出改變。 我們開放原始碼平台擁有著一群卓越的貢獻者,因此任何人都可以提出改變或者提供協助。 [了解如何貢獻](/contributing/) + +### 3. ethereum.org 不是典型的產品網站 🦄 {#core-principles-3} + +以太坊是一個非常大的專案:它囊括了一個社群,一種科技,一套全新的理念等。 這意味著網站需要處理許多不同的使用者旅程,從「需要特定工具的開發者」到「剛購買了一些以太幣但不知道錢包是什麽的新手」。 「什麼才是當之無愧的區塊鏈最佳平台?」一直都是個尋求解答的問題——我們便是先趨。 付諸實踐才能看到答案。 + +## 產品開發藍圖 {#roadmap} + +爲了使我們的工作更加易於存取,並促進更多社群合作,ethereum.org 核心團隊發佈了一份季度開發藍圖目標的概述。 + +[查看我們的 2024 年第三季產品開發藍圖](https://github.com/ethereum/ethereum-org-website/issues/13399) + +**這聽起來怎麽樣?**我們始終感謝對我們開發藍圖提出的意見回饋——如果你認爲我們有某些方面需要改善,請告訴我們! 我們歡迎來自社群中任何人的想法和提取請求。 + +**想要參與?**[瞭解更多有關貢獻的資訊](/contributing/),[在 X(前身為 Twitter)上聯係我們](https://twitter.com/ethdotorg),或者加入我們在 [ Discord 服務器](https://discord.gg/ethereum-org)上的社群討論。 + +## 設計理念 {#design-principles} + +我們利用一組重要[設計原則](/contributing/design-principles/)來指引這個網站的內容創作及決策。 + +## 設計系統 {#design-system} + +我們構建並發佈了一個[設計系統](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System?node-id=0%3A1&t=QBt9RkhpPqzE3Aa6-1),以加快功能上綫的速度,並讓社群成員參與 ethereum.org 的開放設計。 + +想要參與?[在 Figma 中追隨 ](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System) [GitHub 問題](https://github.com/ethereum/ethereum-org-website/issues/6284) 並加入我們在 [#design Discord 頻道](https://discord.gg/ethereum-org)中的討論。 + +## 設計指南 {#style-guide} + +我們有一個[設計指南](/contributing/style-guide/)來標準化某方面的寫作內容,以使貢獻過程更加暢順。 + +如果你想[為網站做出貢獻](/contributing/),請確認你已閱讀[我們的原則](/contributing/design-principles/)和[我們的設計指南](/contributing/style-guide/)。 + +歡迎對我們的設計原則、設計系統和設計指南提供意見回饋。 請記住,ethereum.org 來自社群,服務社群。 + +## 證照 {#license} + +除非另有説明,ethereum.org 是一個開放原始碼網站,並基於[ MIT 證照](https://github.com/ethereum/ethereum-org-website/blob/dev/LICENSE)構建。 更多有關 ethereum.org [使用條款](/terms-of-use/)的資訊。 + +## 空缺職位 {#open-jobs} + +雖然此為開放原始碼網站且任何人能在此自由貢獻,我們依舊需要一熱誠工作團隊致力於 ethereum.org 及其他以太坊基金會網頁專案。 + +我們將公告任何開放職位於此。 如果您找不到適合的職位,請移駕至[我們的 Discord 伺服器](https://discord.gg/ethereum-org)並讓我們知道你想加入我們! + +想加入 ethereum.org 團隊嗎? [歡迎查看其他以太坊相連職位](/community/get-involved/#ethereum-jobs/)。 diff --git a/public/content/translations/zh-tw/26) Miscellaneous/enterprise/index.md b/public/content/translations/zh-tw/26) Miscellaneous/enterprise/index.md new file mode 100644 index 00000000000..0a31a3da2e3 --- /dev/null +++ b/public/content/translations/zh-tw/26) Miscellaneous/enterprise/index.md @@ -0,0 +1,162 @@ +--- +title: 以太坊主網上的企業 +description: 有關公共以太坊區塊鏈上的企業應用程式的指南、文章和工具 +lang: zh-tw +--- + +# 企業級以太坊 {#ethereum-for-enterprise} + +以太坊可以幫助包括大公司在內的多種企業: + +- 增加企業各方之間的信任並降低協調成本 +- 提高企業網路問責性和營運效率 +- 建立新的商業模式和價值創造的機會 +- 提高企業組織的未來競爭性 + +早些年前,許多企業區塊鏈應用程式都是建構在私有權限的以太坊相容區塊鏈或聯盟鏈上。 如今,得益於技術進步帶來的更高吞吐量、更低的交易成本以及隱私保護,大多數使用以太坊技術的企業應用程式都是在公共以太坊主網或[二層網路](/layer-2)鏈上構建的。 + + +## 資源 {#enterprise-resources} + +### 了解更多 {#further-reading} + +用於了解企業如何從以太坊受益的非技術資源 + +- [為什麼區塊鏈對商業有益?](https://entethalliance.org/why-are-blockchains-useful-for-business/) - _從可預測性的角度討論區塊鏈的價值_ +- [企業以太坊聯盟 2023 年商業準備報告](https://entethalliance.org/eea-ethereum-business-readiness-report-2023/) - _調查了公共以太坊和更廣泛的企業以太坊生態系統的潛力和能力_ +- [_《以太坊商業》_ 作者 Paul Brody](https://www.uapress.com/product/ethereum-for-business/) - _一本簡單易懂的英文用例指南,内容包括從資產管理、支付以及供應鏈獲取回報_ + +### 組織 {#organizations} + +一些組織已經通力合作讓以太坊更適合企業使用 + +- [企業以太坊聯盟 (EEA)](https://entethalliance.org/) - 幫助組織在日常業務運營中採用以太坊技術。 其目標是通過專業和商業支持、倡導和研究、標準開發以及生態系統信任服務,加速企業以太坊的發展。 +- [全球區塊鏈商業委員會 (GBBC)](https://www.gbbc.io/)——區塊鏈技術生態系統的行業協會。 通過與政策制定者和監管機構的互動、策劃活動和深入討論,以及推動研究,全球區塊鏈商業委員會致力於推動區塊鏈的進一步採用,以創建更安全、公平和功能更強的社會。 + + +## 企業開發者資源 {#enterprise-developer-resources} + +### 產品和服務 {#products-and-services} + +- [4EVERLAND](https://www.4everland.org/) - _提供應用程式介面、遠端程序呼叫服務和工具,用於託管去中心化應用程式並在以太坊上啟用去中心化存儲_ +- [Alchemy](https://www.alchemy.com/) - _提供應用程式介面服務和工具,用於在以太坊上建立和監控應用程式_ +- [Blast](https://blastapi.io/) - _一個應用程式介面平台,為以太坊歸檔主網和測試網 提供 RPC/WSS 應用程式介面。_ +- [Blockapps](https://blockapps.net/) - _構成 STRATO 平台的企業以太坊協議、工具和應用程式介面的實作_ +- [Chainstack](https://chainstack.com/) - _主網和測試網以太坊基礎結構,託管在公共隔離的客戶雲端中_ +- [ConsenSys](https://consensys.io/) - _提供一系列用於在以太坊上構建的產品和工具,以及諮詢和定制開發服務_ +- [Crossmint](http://crossmint.com/) _企業級 web3 開發平台,用於部署智慧型合約,支援信用卡和跨鏈支付,並使用應用程式介面來建立、分發、銷售、儲存和編輯非同質化代幣。_ +- [Envision Blockchain](https://envisionblockchain.com/) - _提供專門針對以太坊主網的企業級諮詢和開發服務_ +- [EY OpsChain](https://blockchain.ey.com/products/contract-manager) - _透過在你值得信賴的業務合作夥伴網路中發出報價請求、合約、採購訂單和發票來提供採購工作流程_ +- [Hyperledger Besu](https://www.hyperledger.org/use/besu) - _一個以企業為中心的開放原始碼以太坊用戶端,在 Apache 2.0 許可下開發並用 Java 編寫_ +- [Infura](https://infura.io/) - _對以太坊和星際檔案系統網路的可擴展應用程式介面存取_ +- [Kaleido](https://kaleido.io/) - _以企業為中心的開發平台,提供簡化的區塊鏈和數位資產應用程式_ +- [NodeReal](https://nodereal.io/) - _為 Web3 生態系統提供可擴展的區塊鏈基礎結構和應用程式介面服務供應商_ +- [Moralis](http://moralis.io/) - _具備 SOC2 第 2 類認證的企業級應用程式介面與節點_ +- [Provide](https://provide.services/) - _企業零知識中介軟體_ +- [QuickNode](https://www.quicknode.com/) - _提供可靠、快速的節點以及 NFT API、Token API 等高階應用程式介面,同時提供統一的產品套件和企業級解決方案_ +- [Tenderly](https://tenderly.co) - _一個 Web3 開發平台,為開發、測試、監控和操作智慧型合約提供偵錯、可觀察性和基礎結構構建塊_ +- [Unibright](https://unibright.io/) - _一支由區塊鏈專家、架構師、開發者和顧問組成的團隊,擁有 20 多年的業務流程與整合經驗_ +- [Zeeve](https://www.zeeve.io/) - _提供一系列用於在以太坊上構建的產品和工具,以及用於企業 Web3 應用程式的基礎結構和應用程式介面。_ + +### 工具及程式庫 {#tooling-and-libraries} + +- [Baseline 專案](https://www.baseline-protocol.org/) - _Baseline 協議是一組工具和程式庫,協助企業在隱私的情況下協調複雜的多方業務流程和工作流程,同時將資料保存在各自的記錄系統中。 此標準使兩個或多個狀態機器,透過使用網路作為公共參考框架,來實現和維護資料一致性和工作流程連續性。_ +- [Chainlens](https://www.chainlens.com/) - _來自 Web3 實驗室的質押即服務和本地區塊鏈數據及分析平台_ +- [Ernst & Young's 'Nightfall'](https://github.com/EYBlockchain/nightfall_3) - _使用樂觀卷軸的應用程式,在零知識下轉移 ERC20、ERC721 和 ERC1155 應用程式_ +- [Truffle 套件](https://trufflesuite.com) - _區塊鏈開發套件(Truffle、Ganache、Drizzle)_ + +### 可擴展性解決方案 {#scalability-solutions} + +大多數新的區塊鏈應用程式都建構在[二層網路](/layer-2)鏈上。 二層網路是一組運行在以太坊(一層網路)之上的技術或系統,繼承了一層網路的安全性,並提供比一層網路更大的交易處理能力(吞吐量)、更低的交易費用(運營成本),以及更快的交易確認速度。 二層網路擴展解決方案由一層網路保護,但它們使區塊鏈應用程式能夠處理比一層網路所能容納的更多的使用者、操作或資料。 其中許多利用密碼學和零知識 (ZK) 證明的最新進展,來最大限度地提高效能和安全性,有些還提供額外的隱私等級。 + +## 以太坊主網上運行的企業應用程式 {#enterprise-live-on-mainnet} + +以下是一些由傳統、非區塊鏈公司在公共以太坊主網和二層網路之上構建的企業應用程式。 + +### 付款 {#payments} + +- [Brave Browser](https://basicattentiontoken.org/) - _向使用者支付對廣告的關注,並且用戶可以透過 Basic Attention 代幣向發布商付費以支持他們_ +- [瑞士盧加諾市](https://bitcoinsuisse.com/news/city-of-lugano-accepts-crypto-payments) - _繳稅和其他市政服務_ +- [EthereumAds](https://ethereumads.com/) - _讓網站經營者出售廣告空間並透過以太坊獲得報酬_ +- [hCaptcha](https://www.hcaptcha.com/) - _預防機器人的驗證碼系統,根據使用者為機器學習標記資料所做的工作向網站營運商付費。 目前由 Cloudflare 部署_ +- [Opera MiniPay](https://www.opera.com/products/minipay) - _讓擁有非託管錢包的非洲人更容易、更安全地使用行動支付,並利用電話號碼輕鬆交易_ +- [Roxpay](https://www.roxpay.ch/) - _自動執行按使用付費的資產發票和付款_ +- [SAP 數位貨幣中心](https://community.sap.com/t5/technology-blogs-by-sap/cross-border-payments-made-easy-with-digital-money-experience-the-future/ba-p/13560384) - _穩定幣跨境支付_ +- [Toku](https://www.toku.com/) - _薪資單、代幣授予管理、稅務合規、當地就業、福利和分散式人力資源解決方案_ +- [Xerof](https://www.xerof.com/) - _促進快速且廉價的國際(跨境)企業對企業支付_ + +### 金融 {#finance} + +- [荷蘭銀行](https://tokeny.com/tokeny-fuels-abn-amro-bank-in-tokenizing-green-bonds-on-polygon/) - _使用 Tokeny、代幣化綠色債券_ +- [Crowdz](https://crowdz.io/) - _發票/應收帳款融資和保理平台_ +- [Mata Capital](https://consensys.io/blockchain-use-cases/finance/mata-capital) - _房地產投資代幣化_ +- [Obligate](https://www.obligate.com/) - _受監管且經過 KYC 的鏈上債券和商業票據_ +- [西門子](https://press.siemens.com/global/en/pressrelease/siemens-issues-first-digital-bond-blockchain) - _債券發行_ +- [Sila](https://silamoney.com/) - _使用穩定幣的銀行和代收代付業務之基礎設施即服務_ +- [法國興業銀行 FORGE](https://www.sgforge.com/product/bonds/) - _債券發行_ +- [Taurus](https://www.taurushq.com/) - _發行代幣化證券_ + +### 資產代幣化 {#tokenization} + +- [AgroToken](https://agrotoken.io/en/) - _農產品代幣化與交易_ +- [Bitbond](https://www.bitbond.com/) - _透過代幣化改善金融資產的發行、結算和託管_ +- [Blocksquare](https://blocksquare.io/) - _房地產代幣化基礎設施_ +- [Centrifuge](https://centrifuge.io/) - _代幣化應收帳款融資、債務和資產_ +- [Clearmatics](https://www.clearmatics.com) - _為代幣化價值的點對點交換建構去中心化網路平台_ +- [dClimate](https://www.dclimate.net/) - _去中心化氣候資訊生態系統_ +- [Fabrica](https://www.fabrica.land/) - _用於數位化房地產資產、支援去中心化金融借貸和房地產交易的平台_ +- [Fasset](https://www.fasset.com/) - _支援永續基礎設施的平台_ +- [Nori](https://nori.com/) - _開源市場基礎設施​​,讓碳清除專案衡量其活動並從中賺取利潤_ +- [Propy](https://propy.com/) - _透過智慧型合約實現住宅房地產交易自動化的平台_ +- [RealT](https://realt.co/) - _全球各地的投資者可以透過完全合規、分級和代幣化所有權在美國房地產市場上購買物業_ +- [Ruby](https://www.rubey.be/) - _一個將高端藝術品代幣化以供零售投資者使用的平台_ +- [Swarm](https://swarm.com/) - _一個專注於以合規方式實現真實世界資產數位化和交易的平台_ +- [Thallo](https://www.thallo.io/) - _將數位碳信用融入商業交易的平台_ +- [Tokenchampions](https://tokenchampions.com/) - _代幣化歐洲足球員的肖像權_ + +### 數據公證 {#notarization-of-data} + +- [ANSA](https://www.ansa.it/english/news/science_tecnology/2020/04/06/ansa-using-blockchain-to-help-readers_af820b4f-0947-439b-843e-52e114f53318.html) - _義大利通訊社,它打擊假新聞並使讀者能夠透過將新聞報導記錄在主網上來驗證新聞報導的來源_ +- [Breitling](https://www.coindesk.com/breitling-arianee-all-new-watches-ethereum) - _在以太坊上記錄手錶的出處和維修歷史_ +- [BRØK](https://www.xn--brk-1na.no/) - _挪威政府為公眾非上市公司提供的股權結構表平台_ +- [Certifaction](https://certifaction.com/) - _具有隱私設計的合法有效電子簽名_ +- [EthSign](https://ethsign.xyz/) - _在以太坊區塊鏈上記錄簽名的電子文檔_ +- [Stacktical](https://stacktical.com/) - _透過本地代管功能實現服務等級協定 (SLA) 的軟體開發、數位發行和數位簽名_ +- [Verizon](https://decrypt.co/46745/verizon-news-press-releases-ethereum-full-transparency) - _在以太坊上記錄新聞稿,以確保企業責任和信任_ +- [WolfTown](https://www.mef.net/edge-view-blog/automated-secure-timely-sla-reporting-is-finally-a-reality/) - _ 屬於 MEF 與 Sage Management,自動執行電信業者之間的服務等級協定報告_ + +### 供應鏈 {#supply-chain} + +- [Birra Peroni](https://www.ey.com/en_gl/news/2021/05/birra-peroni-is-the-first-industrial-organization-to-mint-unique-non-fungible-tokens-using-ey-opschain-traceability) _為每批新啤酒鑄造非同質化代幣,從而提高整個供應鏈的可見度和效率_ +- [CargoX](https://cargox.io/) - _用於運輸的電子提單和文件傳輸提供者_ +- [Circularize](https://www.circularise.com/) - _產品原料的端到端可追溯性解決方案_ +- [EY OpsChain 合約管理器](https://blockchain.ey.com/products/contract-manager) - _透過業務夥伴網路發出詢價、合約、採購訂單和發票,使公司能夠參與採購工作流程_ +- [Minespider](https://www.minespider.com/) - _供應鏈追蹤和來源監測,以及二氧化碳排放追蹤_ +- [Morpheus.network](https://morpheus.network/) - _供應鏈自動化平台_ +- [StaTwig](https://statwig.com/) - _供應鏈營運_ +- [TradeTrust](https://www.tradetrust.io/) - _驗證國際運輸的電子提單 (eBL)_ +- [Transmute](https://transmute.industries/) - _全球貿易資料交換平台;支援以太坊上使用去中心化身分的交易_ + +### 保險 {#insurance} + +- [Arbol](https://www.arbolmarket.com/) - _涵蓋天氣相關風險的參數型保險_ +- [Etherisc](https://etherisc.com/) - _針對各種風險的去中心化保險_ +- [Nayms](https://www.nayms.com/) - _使用 AON 構建的數位空間,用於創建保險計劃、籌集和交易資本、風險記錄以及保費和索賠交易的支付方式_ + +### 身分、憑證和認證 {#credentials} + +- [BCdiploma](https://www.bcdiploma.com/) - _數位化並驗證文憑、證書和微型認證_ +- [Hyland Credentials](https://www.hylandcredentials.com) - _數位文憑和其他教育認證、執照和證書_ +- [帛琉數位居留計劃](https://rns.id/) - _讓全球公民能夠擁有帛琉政府頒發的合法身分證_ +- [Spherity](https://www.spherity.com/) - _提供數位身分管理解決方案,以在生態系統中建立數位信任,專注於去中心化身分和可驗證的憑證_ +- [Zug Digital ID](https://ezug.ch/en/) - _是瑞士基於區塊鏈的身份系統,為居民提供對政府服務的數位存取和支援功能,例​​如租借電動自行車和市政投票_ + +### 娛樂、非同質化代幣、忠誠度 + +- [Adidas Virtual Gear](https://www.adidas.com/metaverse) - _虛擬裝備非同質化代幣收藏_ +- [大英博物館的沙盒](https://decrypt.co/150405/british-museum-enter-metaverse-via-sandbox) - _非同質化代幣收藏_ +- [Fruitlab](https://fruitlab.com/) - _遊戲玩家透過觀看、分享和玩線上遊戲來賺錢的平台_ +- [Nike Swoosh](https://www.swoosh.nike/) - _非同質化代幣平台_ +- [Sothbebys Metaverse](https://metaverse.sothebys.com/) - _蘇富比的數位藝術非同質化代幣市場_ + +如你願意添增至此清單,請查看[貢獻方案程序簡介](/contributing/)。 diff --git a/public/content/translations/zh-tw/26) Miscellaneous/enterprise/private-ethereum/index.md b/public/content/translations/zh-tw/26) Miscellaneous/enterprise/private-ethereum/index.md new file mode 100644 index 00000000000..86a75fafd73 --- /dev/null +++ b/public/content/translations/zh-tw/26) Miscellaneous/enterprise/private-ethereum/index.md @@ -0,0 +1,26 @@ +--- +title: 企業級私有以太坊 +description: 有關私有以太坊區塊鏈上的企業應用程式的資源。 +lang: zh-tw +--- + +# 企業級私有以太坊 {#private-ethereum-for-enterprise} + +企業區塊鏈應用程式可以建立在公共且無需許可的以太坊主網上,或者依據以太坊技術研發的私有區塊鏈之上。 有關在公有以太坊主網上建立應有程式的更多資訊,請見[企業級以太坊主網](/enterprise/)。 + +## 私有企業用以太坊開發者資源 {#developer-resources-private-enterprise-ethereum} + +### 組織 {#organisations} + +透過不同組織間的共同努力以及合作,以太坊對於企業來說更加友善: + +- [企業以太坊聯盟](https://entethalliance.org/) EEA 幫助組織在日常業務運營中採用以太坊技術。 我們深耕以太坊生態系統,開發更多新的商業機會、促進產業採納並互相學習合作。 +- [Hyperledger](https://hyperledger.org) _ Hyperledger 是一個旨在推動區塊鏈跨行業應用的開放原始碼專案。 它具國際合作性,由 Linux 基金會主導發起,成員包括金融、銀行、物聯網、供應鏈、製造和科技業。 基金會有一些與以太坊技術堆棧配合使用的專案,包括 [Besu](https://www.hyperledger.org/use/besu)。_ + +### 協議和基礎結構 {#protocol-and-infrastructure} + +- [ Chainstack ](https://chainstack.com/) _多雲端和多協議平台即服務,使企業能夠快速建置、部署和管理去中心化網路和服務_ +- [Clearmatics Autonity](https://www.clearmatics.com/about/) _一種為用戶端提供軟體和基礎結構的 P2P 協議套件_ +- [Hyperledger Besu](https://www.hyperledger.org/use/besu) _在 Apache 2.0 許可證下開發,以 Java 編寫的開放原始碼以太坊用戶端,其中包括 PoW 和 PoA 等多種共識演算法(IBFT、IBFT 2.0、Ethash 和 Clique)。 它的複雜許可機制是為了聯盟環境所設計。_ +- [Kaleido](https://kaleido.io/) _用於建置和執行跨雲端、混合式企業生態系統的全堆棧平台_ +- [Zeeve](https://www.zeeve.io/) _提供一系列用於在以太坊上構建的產品和工具,以及企業 Web3 應用程式的基礎結構和 API_ diff --git a/public/content/translations/zh-tw/26) Miscellaneous/foundation/index.md b/public/content/translations/zh-tw/26) Miscellaneous/foundation/index.md new file mode 100644 index 00000000000..12ff3f0867d --- /dev/null +++ b/public/content/translations/zh-tw/26) Miscellaneous/foundation/index.md @@ -0,0 +1,40 @@ +--- +title: 以太坊基金會 +description: 了解更多關於以太坊基金會 (EF) 的資訊,這是一個致力於支持以太坊及相關技術的非營利組織。 +hideEditButton: true +lang: zh-tw +--- + +# 關於以太坊基金會 {#about-the-ethereum-foundation} + + + +[以太坊基金會 (EF)](http://ethereum.foundation/) 是一個致力於支持[以太坊](/what-is-ethereum/)與相關技術的非營利組織。 + +以太坊基金會並不是公司,甚至不是傳統的非營利組織。 其角色並不控制或主導以太坊發展方向,也僅是資助以太坊相關技術發展的眾多組織之一。 以太坊基金會是更大[生態系統](/community/)的一部分。 + +## 以太坊基金會倡議 {#ethereum-foundation-initiatives} + +### 生態系支援計畫 {#ecosystem-support-program} + +[生態系支援計畫](https://esp.ethereum.foundation/)旨在為更大以太坊社群內的專案和實體提供經濟及非經濟支援,從而刺激生態系成長。 生態系統支援計畫是最初以太坊資助計畫之擴充,後者關注經濟支援。 + +請造訪 [esp.ethereum.foundation](https://esp.ethereum.foundation/) 了解更多有關生態系統支持計畫、過去資助接收者及資助申請流程的資訊。 你也可閱覽[生態系統支持計畫部落格](https://blog.ethereum.org/category/ecosystem-support-program/)或關注 [@EF_ESP](https://twitter.com/EF_ESP) 取得最新消息及公告。 + +### 開發者展會 {#devcon} + +自 2014 年以來,以太坊基金會組織了以太坊開發者大會 Devcon,這是匯聚眾多以太坊開發者、研究者、思考者及創作者的年度盛會。 + +你可造訪 [archive.devcon.org](https://archive.devcon.org/) 閱覽自成立以來的年度會議影片資料。 + +請造訪 [devcon.org](https://devcon.org/) 了解更多資訊,查看 [Devcon 部落格](https://devcon.org/en/blogs/),或關注 [@efdevcon](https://twitter.com/EFDevcon) 取得最新公告。 + +### 夥伴計畫 {#fellowship-program} + +[以太坊基金會夥伴計畫](https://fellowship.ethereum.foundation/)是一項解決不同文化、國籍與社會階級差距的倡議。 夥伴計劃旨在透過識別和支援獨特且有才華的個人來彌合這些差距,幫助實現以太坊的相關性,並為那些將成為 Web3 未來但代表性不足的的人們和社群打破進入障礙。 + +[請造訪 fellowship.ethereum.foundation 了解更多資訊](https://fellowship.ethereum.foundation/)。 + +
+ +有關基金會及其工作的更多資訊,請訪造 [ethereum.foundation](http://ethereum.foundation/),或查看[以太坊基金會部落格](https://blog.ethereum.org/)以取得以太坊基金會的最新消息及公告。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/design-principles/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/design-principles/index.md new file mode 100644 index 00000000000..a4f53596b44 --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/design-principles/index.md @@ -0,0 +1,93 @@ +--- +title: 設計原則 +lang: zh-tw +description: ethereum.org 設計與內容決策背後的原則 +--- + +# 我們的設計原則 {#contributing-to-ethereumorg-} + + 你好,歡迎瞭解 ethereum.org 的設計原則。 這是 ethereum.org 不斷發展和改進過程的一部分。 + +我們的原則決定了網站的外觀和感覺以及網站上的內容。 + +為 [ethereum.org 做出貢獻](/contributing/)前,你應該閱讀以下內容。 + +## 設計原則是什麼? {#ways-to-contribute} + +別擔心,設計原則非常簡單! **設計原則**是我們在設計(即建立、維護或更新)某些東西時參考的一組準則。 + +在 ethereum.org 的背景下,這些設計原則是我們希望網站向世界呈現和展示的內容的基礎。 它們既能表達我們的抱負,**也**實現功能。 這不僅僅是網站_外觀_,還體現網站的_運作方式_,甚至是網站給人的_感覺_。從顏色到頁面佈局,再到我們在網站上談論以太坊的方式,一切都應該遵循這些原則。 + +## 原則實踐 {#how-decisions-about-the-site-are-made} + +讓我們來看一個例子。 其中一項原則是「可信」,這意味著我們希望網站訪問者_感受_並_知道_網站值得信賴 — 就像更寬泛的以太坊生態系統一樣。 在該原則下,我們有 3 個功能性「次原則」,這些是我們可以採取的可行步驟,以使網站具有可信度: + +- _“新鮮”_,即保持內容最新。 +- _“社會認同”_,即展示生態繫統的規模、多樣性和活躍度(你知道的:以太坊昇級進度、去中心化金融、遊戲、所有黑客馬拉鬆等) +- _“一緻”_,即網站設計以及冩作的基調和準確性是一緻的。 + +因此,當我們做出設計或文案決策時,我們可以參考「可信」原則並自問: + +- _「網站是否反映了目前的資訊?」_ +- _「我們如何以及在哪裡展示生態繫統的規模和活動?」_ +- _「我正在審核的由社群成員提出的新貢獻內容是否與網站上目前的設計和文風一致?」_ + +## Ethereum.org 設計原則 {#contributors} + +### 1. 啟發性 {#1-inspirational} + +網站應該能夠激發使用者,想象以太坊能如何改變世界。 應該能夠激勵人們去探索、體驗和修複以太坊生態繫統的工具和應用程式。 + +- **鬥誌昂揚:**網站應該傳達以太坊雄心勃勃的目標,即有意義地改變世界。 應該清楚的是,以太坊不僅僅是一些新技術的堆疊 - 它是一種變革性的技術。 +- **通過教育賦予權力:**網站應該對人們進行教導,以便他們了解以太坊的潛力,在生態繫統中找到自己的位置,並感到有權參與其中。 + +視覺導航 • 內容 + +### 2. 通用性 {#2-universal} + +以太坊是一個全球性的、去中心化的專案,我們的使用者反映了這一點。 網站應該致力於讓每個人都能存取,並體現出世界上的多元文化。 + +- **無障礙:**網站應遵循無障礙指南 - 包括允許低帶寬連接的人訪問。 +- **簡單明了:**網站應該是簡單而明確的。 文案不應使用可能被誤解的用語或意思缺失的譯文。 +- **以太坊是多麵的:**以太坊是一個專案、一個代碼庫、一個社區和一個願景 以太坊出於不同的原因對不同的人都有價值,參與的方式也多種多樣。 + +冩作系統 • 色彩的使用 • 視覺導航 • 內容 + +### 3 好故事 {#3-a-good-story} + +網站的運作應該像一個好故事一樣。 訪客就像在旅途中,而你所貢獻的內容是旅途的一部分。 你的貢獻應該運用清晰的敘述技巧:一個有開頭(介紹/切入點)、中間(一些經驗和見解)和結尾(指向相關資源或後續步驟的連結)。 + +- **層次分明:**如果內容具有一個清晰的、有層次的信息架構,這將有助於 ethereum.org 的訪問者在尋求達到他們的目的時“像讀故事一樣”瀏覽網站。 +- **踏腳石:**我們是來網站尋找答案的訪問者的踏腳石。 我們不想取代許多現有資源或成爲這些資源的替代品。 我們給出答案並提供可靠的後續步驟。 + +使用者旅程 • 內容 + +### 4 可信 {#4-credible} + +人們可能想要初步了解以太坊生態系統,或者對以太坊保持懷疑態度。 你的溝通方式發揮重要作用。 請確保他們在離開網站時對以太坊生態系統更加有信心。 + +- **最新:**始終保持最新。 +- **社會認同:**展示生態繫統的規模、多樣性和活躍度。 +- **一緻:**設計和內容的一緻性傳達了可信度。 + +視覺導航 • 內容 + +### 5 協作改進 {#5-collaborative-improvement} + +網站是許多貢獻者的産物,就像整個生態系統一樣。 + +- **開放性:**爲整個生態繫統的源代碼、流程和專案的透明度而歡呼吧。 +- **可擴展性:**模塊化是我們一切努力背後的關鍵重點,所以貢獻也應該是模塊化的。 核心設計、組件程式碼和網站的實作應使其能夠在未來輕鬆擴展。 +- **實驗性:**我們正在不斷地進行實驗、測試和迭代。 +- **協作性:**這個專案將我們所有人聚集在一起。 +- **可持續性:**爲社區長期維護而設置。 + +你可以看到[我們的整個網站](/)充分體現了我們的設計原則。 + +## 提供意見回饋 {#give-feedback} + +**分享你對本文檔的意見回饋!**我們提出的原則之一是「**協作改進**」,這意味着我們希望網站是衆多貢獻者的産物。 因此,基於這一原則,我們希望與以太坊社群分享這些設計原則。 + +雖然這些原則主要體現在 ethereum.org 網站上,但我們希望其中許多原則能夠代表以太坊生態系統的整體價值(例如,你可以看到[以太坊白皮書的原則](https://github.com/ethereum/wiki/wiki/White-Paper#philosophy)的影響)。 也許你甚至想將其中一些原則運用到你自己的專案中! + +請透過 [Discord 伺服器](https://discord.gg/ethereum-org)或[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=)來讓我們知道你的想法。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/design/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/design/index.md new file mode 100644 index 00000000000..806346c7328 --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/design/index.md @@ -0,0 +1,77 @@ +--- +title: 設計貢獻 +description: 為 ethereum.org 作出設計貢獻 +lang: zh-tw +--- + +# 為 ethereum.org 作出設計貢獻 {#design-contributions} + +設計是任何專案的關鍵組成部分,把你的時間和設計技能投入到 Ethereum.org,有助替我們的訪客改善使用者體驗。 替開源專案做出貢獻,會為你提供機會以獲取相關經驗,並在協作環境中發展技能。 你有機會與其他擁有獨特觀點和見解的設計師、開發者和社群成員合作。 + +最後,這是建立多元且令人印象深刻的作品集,以展示你設計技能的好方式。 + +## 如何做出貢獻? + +###  對早期設計原型提供意見回饋 {#design-critique} + +有時候我們需要獲得幫助來測試我們的原始構想。 這是在沒有任何技術知識的情況下做出貢獻的好方法。 + +1. 設計團隊會在 [Discord](https://discord.com/invite/ethereum-org) 和 [GitHub](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) 上分享模型設計。 +2. 你會在指導下熟悉這些設計,並透過評論功能提供意見回饋。 +3. 結果將在 GitHub 議題中分享,然後由團隊關閉。 + +###  參與調查研究 {#answer-surveys} + +透過以下方式在我們網站上提供意見回饋: + +1. 造訪 ethereum.org 並閱讀有關頁面。 +2. 點擊右下角的意見回饋小工具,並回答與設計和內容相關的問題。 +3. 重點關注開放式問題。 + +###  尋找網站上與設計相關的問題並回報 {#report-design-issues} + +Ethereum.org 是個擁有許多功能和內容,而且快速發展的網站。 某些使用者介面很容易過時或需要改進。 如果你遇到這類情況,請報告以讓我們注意。 + +1. 瀏覽網站並注意其設計。 +2. 如果你發現任何視覺或使用者體驗方面問題,請取得螢幕擷取畫面並記錄下來。 +3. 使用[錯誤報告](https://github.com/ethereum/ethereum-org-website/issues/new/choose)來報告發現的問題。 + +###  提出設計變更 {#propose-design-changes} + +如果你願意接受設計挑戰,可以造訪我們的 GitHub 議題板並篩選[設計相關議題](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8)。 + +1. 瀏覽我們的網站並注意其設計,或訪問我們的 GitHub 儲存庫並查看標示 [「Design required」標籤](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8)的議題。 +2. 構思解決方案並進行設計。 (最好使用我們的[設計系統](https://www.figma.com/community/file/1134414495420383395))。 +3. 在對應的 GitHub 議題中提出解決方案或[建立一個新的議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A&template=feature_request.yaml&title=Feature+request)。 +4. 等待設計團隊審核。 + +###  一起構建設計系統 {#Contribute-to-design-system} + +利用我們的設計系統,讓設計 ethereum.org 變得輕鬆有趣。 如果你是位經驗豐富的設計師,便可以幫助我們為網站準備許多組件。 + +1. 從 GitHub 上的[設計系統板](https://github.com/ethereum/ethereum-org-website/labels/design%20system)選擇要處理的議題,或建立一個新的議題。 +2. 請求將選定的議題分配給你。 +3. 開始在 figma 中設計要求的元件。 +4. 需要審核或指導時,請在 GitHub 上將組件分享給設計團隊。 +5. 設計團隊將進行審核。 +6. 設計團隊會將變更合併到主檔案中,並將它發佈到社群。 + +###  在網站上撰寫與設計相關的內容 {#write-design-articles} + +以太坊開發者社群很強大,但設計社群稍顯落後。 如果你是具備 Web3 知識的設計師,請考慮與廣大社群分享你的知識,讓我們可以共同成長和進步;我們有一個[關於以太坊設計的頁面](/developers/docs/design-and-ux/),你可以在此做出貢獻。 你也可以查看我們的[上架政策](/contributing/design/adding-design-resources)。 + +1. 構思 ethereum.org 上應該涵蓋的設計主題,會對該領域的設計師有所裨益。 +2. 前往我們的 GitHub 儲存庫,[發起議題](https://github.com/ethereum/ethereum-org-website/issues/new)來建議主題(先不要寫內容)。 +3. 等待設計團隊核准。 +4. 一旦核准,開始撰寫內容。 +5. 在相應的 GH 議題中提交。 + +###  繪製新插圖 {#prepare-illustrations} + +可視化是用來解釋抽象主題的其中一種最強大工具。 透過新增圖表和資訊圖,可以發掘巨大潛力。 畢竟,一張圖片勝過千言萬語。 + +1. 訪問我們的網站,並查看可以新增一些新資訊圖的頁面。 +2. 確保插圖風格與我們的[網站](/assets/)相對應。 +3. 前往我們的 GitHub 儲存庫並[發起議題](https://github.com/ethereum/ethereum-org-website/issues/new)來建議插圖。 +4. 設計團隊將會審核。 +5. 我們建立一個新議題,並邀請開發者來實作該新圖像。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/index.md new file mode 100644 index 00000000000..eaf36252a59 --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/index.md @@ -0,0 +1,117 @@ +--- +title: 參與貢獻 +description: 瞭解為 ethereum.org 做出貢獻的不同方法 +lang: zh-tw +--- + +# 為 ethereum.org 做出貢獻 🦄 {#contributing-to-ethereumorg} + +Ethereum.org 是一個開源專案,擁有超過 **12000 名**貢獻者,幫助翻譯、編寫、設計和維護網站。 + +我們是個熱情的社群,將助你在以太坊生態系統中成長和學習,同時讓你做出有意義的貢獻,並獲得相關實踐經驗! + +## 貢獻方法 {#ways-to-contribute} + +**翻譯** +- [加入翻譯計劃](/contributing/translation-program/) – 幫助我們把 ethereum.org 內容翻譯成新語言 + +**開發** +- [處理未解決的問題](https://github.com/ethereum/ethereum-org-website/issues) – 我們確定為需要完成的工作 + +**設計** +- [幫助設計網站](/contributing/design/)設計師不論資歷,都可以為改進網站做出貢獻 + +**內容** +- [建立/編輯內容](/contributing/#how-to-update-content) – 提議建立新頁面或對已有內容稍微改進 +- [新增社群資源](/contributing/content-resources/) – 將有用的文章或資源加入相關頁面 +- [建議設計資源](/contributing/design/adding-design-resources/) – 新增、更新和刪除設計資源 +- [新增詞彙表術語](/contributing/adding-glossary-terms/) – 幫助我們繼續擴大以太坊的[詞彙表](/glossary/) +- [測驗](/contributing/quizzes/) – 新增、更新和刪除相關頁面的測驗題庫 + +**特色功能的想法** +- [請求一項特色功能](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) – 讓我們知道有關你對新特色功能或設計的任何想法 + +**產品列表** +- [新增交易所](/contributing/adding-exchanges/) – 新增交易所到我們的 [交易所搜尋工具](/get-eth/#country-picker) +- [新增產品](/contributing/adding-products/) – 新增去中心化應用程式或錢包到相關頁面 +- [新增開發者工具](/contributing/adding-developer-tools/) – 新增開發者工具到相關頁面 +- [新增二層網路](/contributing/adding-layer-2s/) – 新增二層網路到相關頁面 +- [新增質押產品或服務](/contributing/adding-staking-products/) – 新增專案以幫助加速單獨質押、聯合質押,或質押即服務 +- [新增錢包](/contributing/adding-wallets/) – 為[查找錢包頁面](/wallets/find-wallet/)新增錢包 +- [為我們的去中心化科學頁面建議一個專案](/contributing/adding-desci-projects/) – 新增一個基於以太坊構建專案,為去中心化科學做出貢獻 + +有問題嗎? 🤔 加入我們的 [Discord 伺服器](https://discord.gg/ethereum-org) + +## 開始貢獻的首要任務 + +目前這裡有些你可以助我們解決並負責的任務。 大致上說你將需要 GitHub 帳戶,因為幾乎所有網站變更都是透過 GitHub 進行的。 + + + +查看所有任務 + +## 如何開展 ethereum.org 相關工作 {#how-to-update-content} + +如你希望為[翻譯計劃](/contributing/translation-program/)做出貢獻,我們需要你在 [Crowdin](https://crowdin.com/project/ethereum-org) 上建立帳戶。 對於其他事項,例如在網站上新增或編輯內容或視覺效果、修復錯誤、處理未完成的任務,你將需要一個 [GitHub](https://github.com/) 帳戶。 + +所有更新會透過 GitHub 提取請求 (PR) 流程完成。 這意味著你建立網站的一個本機副本,做出變更並要求合併你的變更。 如你未曾執行過該操作,請遵照 [GitHub 儲存庫](https://github.com/ethereum/ethereum-org-website) 底部的說明。 + +你不需要許可即可開始任何工作內容,但最好始終告知我們你打算做什麼。 你可以透過以下方式向我們告知你的計劃: + +- 在 [GitHub](https://github.com/ethereum/ethereum-org-website) 內對一個議題或提取請求做出評論 +- 在我們的 [Discord 伺服器](https://discord.gg/ethereum-org)上作訊息交流 + +在做出貢獻前,請確定你熟悉下列內容: + +- 不斷演化的 [ethereum.org 願景](/about/) +- 我們的[設計原則](/contributing/design-principles/) +- 我們的[風格指南](/contributing/style-guide/) +- 我們的[行為準則](/community/code-of-conduct) + + + +## 如何做出有關網站的決定 {#how-decisions-about-the-site-are-made} + +有關個人提取請求、設計演進和主要更新的決定由來自整個以太坊生態系統的人員組成的團隊作出。 該團隊包括專案管理人、開發者、設計師、市場和溝通部門,以及內容專家。 社群意見為每個決定提供參考:因此,請在議題中提出問題、提交提取請求或聯絡團隊: + +- [website@ethereum.org](mailto:website@ethereum.org) +- [@ethdotorg](https://twitter.com/ethdotorg) +- [Discord服務器](https://discord.gg/ethereum-org) + +### 有關抄襲的說明 {#plagiarism} + +向 ethereum.org 貢獻任何內容或作品時,請只使用原創作品或你有權使用的內容。 以太坊生態系統內的很多專案使用開放原始碼授權,允許自由分享資訊。 但是,如你未能找到有關開放原始碼授權的資訊,不要嘗試將其新增到 ethereum.org。 任何看似抄襲的提取請求將會被拒絕。 + +## 剛開始接觸開放原始碼項目? {#new-to-open-source} + +在我們的 GitHub 儲存庫,問題的准入門檻很低,有些問題特別適合新接觸開放原始碼項目的開發者查看。我們將這類問題標記為[適合入門問題](https://github.com/ethereum/ethereum-org-website/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)。 + +## 領取你的鏈上成就代幣 (OAT) {#oat} + +如果你的貢獻合併到 ethereum.org,你將有機會在 [Galxe](https://app.galxe.com/quest/ethereumorg) 上領取特殊徽章。 鏈上成就代幣 (OAT) 證明你曾經協助生態系統變得更加出色。 + +[有關鏈上成就代幣的更多資訊](https://help.galxe.com/en/articles/7067290-galxe-oats-reward-and-celebrate-achievements) + +### 如何領取 +1. 加入我們的 [Discord 伺服器](https://discord.gg/ethereum-org)。 +2. 將你貢獻內容的連結貼到 `#🥇 | proof-of-contribution` 頻道 +3. 等待我們團隊的成員向你發送前往你的鏈上成就代幣的連結。 +4. 領取你的鏈上成就代幣! + +你應該只用自行保管的錢包來領取鏈上成就代幣。 請勿使用交易所帳戶或你未持有私密金鑰的其他帳戶,因為這些帳戶將不容許你存取和管理你的鏈上成就代幣。 + +## 領取你的 GitPOAP {#claim-gitpoap} + +GitPOAP 還會自動識別你的合併貢獻,並讓你在其平臺上,鑄造一個獨有的貢獻者 POAP! + + +### 如何領取 {#how-to-claim} + +1. 造訪 [GitPOAP](https://www.gitpoap.io)。 +2. 透過你的錢包建立連接,甚至以電子郵件登入選項來連接。 +3. 搜尋你的 GitHub 使用者名稱、以太幣地址、以太坊域名服務名稱或任何 GitPOAP 以檢查你是否符合條件。 +4. 如果你的 GitHub 帳戶符合條件,那麼你就可以鑄造一個 GitPOAP! + +## 貢獻者 {#contributors} + + diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/faq/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/faq/index.md new file mode 100644 index 00000000000..87dc605464d --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/faq/index.md @@ -0,0 +1,119 @@ +--- +title: 翻譯計劃常見問題 (FAQ) +lang: zh-tw +description: ethereum.org 翻譯計劃常見問題 +--- + +# ethereum.org 翻譯指南 {#translating-ethereum-guide} + +如果你對翻譯計劃不熟悉,不確定要不要加入其中,這裡的一些常見問題會有所幫助。 使用這份指南來找到常見問題的答案。 + +## 翻譯 ethereum.org 上的內容能夠得到補償嗎? {#compensation} + +Ethereum.org 是一個開源網站,這意味著任何人都能參與其中,做出貢獻。 + +ethereum.org 翻譯計劃是其延伸,並且其組織方式考慮了相近的理念。 + +翻譯計劃的目標是讓所有人能夠使用以太坊內容,無論他們說哪種語言。 也讓任何雙語人員參與到以太坊生態系統中,並以可行的方式作出貢獻。 + +因此,翻譯計劃的性質是開放和自願的,而且參與其中不會得到補償。 如果我們要按照翻譯字數給譯者提供補償,我們只會邀請那些具有足夠翻譯經驗的人員(專業譯者)加入翻譯計劃。 這會讓翻譯計劃具有排他性,妨礙我們達成所概述的目標,具體而言:讓所有人參加和參與到生態系統中。 + +我們盡一切努力讓貢獻者在以太坊生態系統中取得成功;許多非貨幣性激勵措施已就位,如:[提供 POAP](/contributing/translation-program/acknowledgements/#poap)、[譯者證書](/contributing/translation-program/acknowledgements/#certificate)、整理 [翻譯排行榜](/contributing/translation-program/acknowledgements/),以及 [在網站上列出我們所有的譯者](/contributing/translation-program/contributors/)。 + +## 如何翻譯帶有 `` 的語句? {#tags} + +並非每個語句都以純文本形式編寫。 有些語句包含 HTML 標籤 (`<0>`, ``) 等混合腳本。這些標籤通常用於表示句子中間的一些超連結或其他格式。 + +- 翻譯標籤內的文字,但不翻譯標籤本身。 不能翻譯或刪除 `<` 和 `>` 中的任何內容。 +- 為了保持語句完整,建議按一下左下方的「複製原文」按鈕。 這將複製原文語句,並貼進文本框中。 這讓你釐清標籤的位置,幫助你避免錯誤。 + +![Crowdin 介面醒目顯示「複製原文」按鈕](./html-tag-strings.png) + +你可以在語句中移動標籤的位置,使其在句子中更加自然 — 但請確保移動整個標籤。 + +更多關於處理標籤和程式碼片段的詳細資訊,請參閱 [ethereum.org 翻譯風格指南](/contributing/translation-program/translators-guide/#dealing-with-tags)。 + +## 上下文在哪裡? {#strings} + +一般而言,光是原文語句可能不足以讓你提供準確翻譯。 + +- 看看「screenshots」和「screenshots」來獲得更多資訊。 在原文語句區段,你將看到附上的螢幕擷取畫面,從而瞭解該語句的上下文。 +- 如你依然有疑惑,請在「Comments」區段中提出問題。 [不確定要如何留下一則評論?](#comment) + +![顯示如何透過螢幕擷取畫面提供語句上下文](./source-string.png) + +![新增一個用來提供上下文的範例螢幕擷取畫面](./source-string-2.png) + +## 如何留下評論或提出問題? 我想要標記問題或錯別字... {#comment} + +如果你想標記某個需要注意的語句,可以隨時提交一則評論。 + +- 按一下右上方欄目的第二個按鈕。 隱藏標籤將會在你的右邊顯示出來。 留下一則新評論,並按一下底部的核取方塊「Issue」。 你可以從下拉式功能表選擇一個選項,指明問題類型。 +- 問題一旦提交,將會報告給我們的團隊。 我們將解決這個問題,並透過回覆你的評論和關閉問題來回應你。 +- 如果你上報錯誤的翻譯,那麼在下次審查期間,母語人士將審核目前的翻譯以及你建議的翻譯。 + +![展示如何評論和提出問題](./comment-issue.png) + +## 甚麼是翻譯記憶 (TM)? {#translation-memory} + +翻譯記憶 (TM) 是 Crowdin 的一項功能,能夠儲存 [ethereum.org](http://ethereum.org/) 中所有先前翻譯過的語句。 翻譯過的語句會自動儲存到專案 TM 中。 這款實用工具可以幫助你節省時間! + +- 查看「TM and MT Suggestions」區段,你可以看到其他譯者如何翻譯相同或類似語句。 如果發現匹配率很高的建議,可以按一下該建議來引用該翻譯內容。 +- 如果清單中沒有任何內容,你可以搜索 TM 中以前做過的翻譯,並重新使用以保持一致性。 + +![翻譯記憶的螢幕擷取畫面](./translation-memory.png) + +## 如何使用 Crowdin 詞彙表? {#glossary} + +以太坊術語是我們翻譯工作的另一個關鍵部分,因為通常新的技術術語在許多語言中還沒有完成本地化。 另外,有些術語在不同的上下文中有不同的含義。 [更多關於以太坊術語的資訊](#terminology) + +Crowdin 詞彙表是釐清術語和定義的最佳場所。 有兩種方法來參考詞彙表。 + +- 首先,當你在原文語句中發現帶底線的術語時,將滑鼠移到上面,就能夠看到概要定義。 + +![一個詞彙表定義範例](./glossary-definition.png) + +- 其次,如果看見一個不熟悉但沒有底線的術語,你可以在詞彙表標籤(右邊欄目的第三個按鈕)內搜尋該術語。 你將找到特定術語和專案中常用術語的解釋。 + +![顯示 Crowdin 中詞彙表標籤位置的螢幕擷取畫面](./glossary-tab.png) + +- 如果仍舊找不到該術語,可以藉此機會添加新術語! 我們建議你在搜尋引擎上進行搜尋,並將描述新增到詞彙表。 這將非常有助於其他譯者更好地理解該術語。 + +![展示如何向 Crowdin 新增詞彙表術語的螢幕擷取畫面](./add-glossary-term.png) + +### 術語翻譯原則 {#terminology} + +_適用於名稱(品牌、公司、人員)和新技術術語(信標鏈、分片鏈,等等)。_ + +以太坊提出了很多最近提出的新術語。 由於沒有各自語言的官方譯文,因此譯者對有些術語的翻譯不同。 這種不一致會導致誤解且降低可讀性。 + +由於語言多樣性和每種語言的標準化程度不同,幾乎不可能提出可適合所有支持語言的統一術語翻譯原則。 + +經過謹慎的考慮後,我們決定將最常用的術語留給譯者翻譯。 + +如果發現你不熟悉的術語,建議你: + +- 參考[術語詞彙表](#glossary),你可能會找到其他譯者之前的譯法。 如你覺得先前翻譯的術語不恰當,請隨時向 Crowdin 詞彙表新增一個新術語來還原你的翻譯準確度。 +- 如果詞彙表中先前沒有翻譯,建議你在搜尋引擎或媒體文章中搜尋,以說明該術語在社群中的實際使用情況。 +- 如果根本找不到任何參考資料,請按你的直覺和理解進行翻譯! +- 如果不確定術語的涵義,可以保留不譯。 有時候,英文術語足以傳達準確定義。 + +我們建議將品牌、公司和人員名稱保留不譯,因為翻譯這些內容可能造成不必要的混亂和搜尋引擎優化困難。 + +## 審核過程是怎樣進行的? {#review-process} + +為確保我們的翻譯品質和一致性達到一定水平,我們與 [Acolad](https://www.acolad.com/) 合作。Acolad 是全球最大的語言服務提供者之一。 Acolad 有 20,000 名專業語言學家,這意味著表他們可以針對我們需要的每種語言以及內容類型提供專業的審核人員。 + +審核過程簡單直接;一旦一個特定 [內容門類](/contributing/translation-program/content-buckets) 100% 翻譯完成,我們便安排對該內容進行審核。 審核過程直接在 Crowdin 中進行。 一旦審核完成,我們會把翻譯好的內容更新到網站中。 + +## 如何以我的語言新增內容? {#adding-foreign-language-content} + +現時,所有非英文內容是直接從英文來源內容翻譯過來的,並且任何英文中不存在的內容都不能新增到其他語言中。 + +若要為 ethereum.org 提議新內容,你可以在 GitHub 上[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues)。 如果要添加內容,將以英文編寫並透過 Crowdin 翻譯成其他語言。 + +我們計劃在不久的將來支持以非英文新增內容。 + +## 聯絡我們 {#contact} + +感謝你閱讀整篇文章。 我們希望這對你加入我們的專案有所幫助。 歡迎隨時加入我們的 [Discord 翻譯頻道](https://discord.gg/ethereum-org),提問並與其他譯者合作,或透過 translations@ethereum.org 聯絡我們! diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/how-to-translate/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/how-to-translate/index.md new file mode 100644 index 00000000000..160cbb719da --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/how-to-translate/index.md @@ -0,0 +1,89 @@ +--- +title: 如何翻譯 +lang: zh-tw +description: 使用 Crowdin 翻譯 ethereum.org 的說明 +--- + +# 如何翻譯 {#how-to-translate} + +## 影片指南 {#visual-guide} + +對於喜歡從影片學習者,請觀看 Luka 演示逐步完成設定 Crowdin。 此外,你可以在下一節的書面格式中找到相同步驟。 + + + +## 書寫指南 {#written-guide} + +### 在 Crowdin 中加入我們的專案 {#join-project} + +你需要登入 Crowdin 帳戶,如果你還沒有則請註冊帳戶。 只需要電子郵件帳戶和密碼便可註冊。 + + + 參與專案 + + +### 選擇語言 {#open-language} + +登入 Crowdin 後,你將看到專案描述和所有可用語言的清單。 每種語言還包含有關可翻譯單字總數的資訊,以及特定語言已翻譯和核准的內容數量的概述。 + +打開你要翻譯的語言,查看可進行翻譯的檔案清單。 + +![Crowdin 的語言列表](./list-of-languages.png) + +### 尋找要翻譯的文件 {#find-document} + +網站內容分為許多文件和內容門類。 你可以在右邊查看每份文件的進度—如果翻譯進程低過100%,請你不吝作出貢獻吧! + +找不到你的語言? [開啟一個議題](https://github.com/ethereum/ethereum-org-website/issues/new/choose) 或在我們的 [Discord](/discord/) 頻道內提問。 + +![Crowdin 中已翻譯和未翻譯的檔案](./crowdin-files.png) + +關於內容門類的說明:我們在 Crowdin 內用「內容門類」來先釋出最高優先順序的內容。 當你查看一種語言時,例如,[菲律賓語](https://crowdin.com/project/ethereum-org/fil#) ,你將會看見「內容門類」的一些文件夾(「1. Homepage」、「2. Essentials」、「3. Exploring」等)。 + +我們建議你按照數字順序來翻譯 (1 → 2 → 3 → ⋯),以確保影響力最大的頁面最先翻譯。 + +[瞭解有關 ethereum.org 內容門類的更多資訊](/contributing/translation-program/content-buckets/) + +### 翻譯 {#translate} + +當你選擇想翻譯的檔案後,它將在線上編輯器內開啟。 如果你從未使用過 Crowdin,可使用這份快速指南來瞭解基礎知識。 + +![Crowdin 線上編輯器](./online-editor.png) + +**_1 — 左側邊欄_** + +- 未翻譯(紅色)— 尚未翻譯的文字。 這些是你應該翻譯的語句。 +- 翻譯完成(綠色)— 已翻譯但尚未審核的文字。 歡迎你提出其他翻譯建議,或使用加號「+」和減號「-」按鈕在編輯器內對現有翻譯投票。 +- 已核准(核取記號)— 已審核並且已經在網站上使用的文字。 + +你也可以使用頂部的按鈕來搜尋一些特定字串,透過狀態篩選或變更視圖。 + +**_2 — 編輯區域_** + +主要的翻譯區域 — 原文顯示在頂部,如果有的話,還有上下文和螢幕擷取畫面可提供。 要提議新翻譯,請在「Enter translation here」欄位輸入你的翻譯並按一下「Save」。 + +你還可以在此區段找到語句的現有翻譯和其他語言的翻譯、翻譯記憶匹配項和機器翻譯建議。 + +**_3 — 右側邊欄_** + +在這裡你可以找到評論、翻譯記憶和詞彙表條目。 預設視圖會顯示評論,讓譯者能夠互相溝通,提出問題或報告錯誤的翻譯。 + +透過使用頂部的按鈕,你還可以切換到翻譯記憶。在那裡,你可以搜尋現有的翻譯,或者切換到「詞彙表」,其中包含關鍵術語的描述和標準翻譯。 + +想瞭解更多嗎? 請隨時查看[有關使用 Crowdin 線上編輯器的文件](https://support.crowdin.com/online-editor/) + +### 審核過程 {#review-process} + +一旦你已經完成了翻譯(即內容門類中的所有檔案都顯示為 100%),我們的專業翻譯服務將會審核(並可能會編輯)這些內容。 一旦審核完成(如:審核進度為 100%),我們將把內容新增到網站上。 + + + 請不要使用機器翻譯來翻譯這個專案。 所有翻譯將會在新增到網站之前進行審核。 如果你建議的翻譯被發現是機器翻譯的,它們將不被考慮採用,而經常使用機器翻譯的貢獻者將從專案中被移除。 + + +### 聯絡我們 {#get-in-touch} + +還有其他問題嗎? 或是想要跟我們的團隊和其他譯者合作? 請在我們的 [ethereum.org Discord 伺服器](/discord/)的 #translations 頻道中發布帖子 + +也可以透過 translations@ethereum.org 聯絡我們 + +感謝你參與 ethereum.org 翻譯計劃! diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/index.md new file mode 100644 index 00000000000..3ae33a2bb04 --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/index.md @@ -0,0 +1,90 @@ +--- +title: 翻譯計劃 +lang: zh-tw +description: 有關 ethereum.org 翻譯計劃的資訊 +--- + +# 翻譯計畫 {#translation-program} + +翻譯計劃是一項協作計劃,致力於將 ethereum.org 內容翻譯成不同語言,讓數以億計的全球非英文使用者能夠使用網站內容。 + +![](./enterprise-eth.png) + +## 幫助我們翻譯 {#help-us-translate} + +ethereum.org 翻譯計劃是開放的,所有人都可以參與其中! + +1. 你將需要登入 Crowdin 帳戶或是註冊一個 Crowdin 帳戶。 +2. 選擇你想要翻譯的語言。 +3. 在開始之前,請查看[如何翻譯](/contributing/translation-program/how-to-translate/)指南,學習如何使用 Crowdin 和[翻譯風格指南](/contributing/translation-program/translators-guide/),瞭解翻譯小提示和最佳做法。 +4. 機器翻譯將無法通過審核。 +5. 所有翻譯在加進網站前都會經過審核,所以你的翻譯上線前會有短暫的延遲。 + +_加入 [ethereum.org Discord](/discord/) 合作翻譯、提出問題、分享回饋和想法,或加入翻譯小組。_ + + + 開始翻譯 + + +## 關於翻譯計劃 {#about-us} + +以太坊社群旨在成為全球化和包容性的社群,但大部分內容僅面向英語使用者,忽略了全球 60 億非英語使用者。 為了讓 ethereum.org 成為全球社群接觸以太坊的入口網站,我們認為很有必要為非英語國家人士以其母語提供以太坊內容。 + +ethereum.org 翻譯計劃旨在透過將 ethereum.org 和其他以太坊內容翻譯成盡可能多的語言,讓所有人都能參與以太坊。 + +詳細瞭解 ethereum.org 翻譯計劃的[使命和願景](/contributing/translation-program/mission-and-vision)。 + +### 我們迄今為止取得的進展 {#our-progress} + +- [**超過 6,000 位**譯者](/contributing/translation-program/contributors/) +- 網站支持 **62** 種語言 +- [2023 年翻譯了 **300 萬**字](/contributing/translation-program/acknowledgements/) + + + +### 致謝 {#acknowledgements} + +數以千計的社群成員參與 Ethereum.org 網站的翻譯,是翻譯計劃的關鍵組成部分。 我們想感謝我們的譯者,並為他們的職業生涯提供支援。 以下是我們對譯者的一些致謝: + +#### 證書 {#certificate} + +如果你為翻譯計劃作出貢獻,並且至少有 5000 個翻譯單字已獲核准,就有資格獲得 ethereum.org 譯者證書。 [有關證書的更多資訊](/contributing/translation-program/acknowledgements/#certificate) + +#### 鏈上成就代幣 (OAT) {#oats} + +根據 2024 年翻譯的字數,翻譯計畫的貢獻者有資格獲得不同的 OAT(鏈上成就代幣)。 鏈上成就代幣是非同質化代幣 (NFT),可以證明你對 ethereum.org 翻譯計劃的貢獻。 [有關鏈上成就代幣的更多資訊](/contributing/translation-program/acknowledgements/#oats) + +#### 致謝譯者 {#translator-acknowledgements} + +透過[排行榜](/contributing/translation-program/acknowledgements/)和[翻譯計劃貢獻者清單](/contributing/translation-program/contributors/),對我們的最優秀譯者公開致謝。 + +#### 酬勞 {#rewards} + +過去,我們追加獎勵了最活躍的貢獻者,為其提供參加 [Devcon](https://devcon.org/en/) 和 [Devconnect](https://devconnect.org/) 等以太坊會議的門票,以及獨家 ethereum.org 商品。 + +我們不斷思考創新方式來獎勵我們的貢獻者,敬請期待! + +### 指南及資源 {#guides-and-resources} + +如果你正在為翻譯計劃做出貢獻或考慮參與其中,應該查看以下翻譯指南: + +- [翻譯風格指南](/contributing/translation-program/translators-guide/)_ — 給 ethereum.org 譯者的說明和小提示_ +- [翻譯常見問題](/contributing/translation-program/faq/)_ — 有關 ethereum.org 翻譯計劃的常見問題和答案_ +- [Crowdin 線上編輯器指南](https://support.crowdin.com/online-editor/)_ — 使用 Crowdin 線上編輯器和 Crowdin 的一些進階功能的深度指南_ +- [內容門類](/contributing/translation-program/content-buckets/)_ — ethereum.org 每個內容門類包含哪些頁面_ + +有關其他有用的翻譯工具、譯者社群和翻譯計劃部落格文章,請造訪[資源頁面](/contributing/translation-program/resources/)。 + +## 聯繫我們 {#get-in-touch} + +還有其他問題嗎? 或是想要跟我們的團隊和其他譯者合作? 請在我們 [ethereum.org Discord 伺服器](https://discord.gg/ethereum-org)的 #translations 頻道發帖 + +也可以透過 translations@ethereum.org 聯絡我們 + +## 開啟你自己的翻譯計劃 {#starting-a-translation-program} + +我們致力於將以太坊內容翻譯成盡可能多的語言,並且向所有人提供教育內容。 我們很重視翻譯,想協助其他以太坊專案整合、管理,和改善它們自身的翻譯工作。 + +因此,我們製作了一份[翻譯計劃手冊](/contributing/translation-program/playbook/),裡面有一些我們在翻譯 ethereum.org 過程中發現的小提示和最佳做法。 + +想要進一步和我們合作,或使用我們的某些翻譯資源嗎? 對手冊有任何意見回饋? 歡迎你透過 translations@ethereum.org 向我們反饋你的意見。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/mission-and-vision/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/mission-and-vision/index.md new file mode 100644 index 00000000000..733dbc905af --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/mission-and-vision/index.md @@ -0,0 +1,25 @@ +--- +title: 使命和願景 +lang: zh-tw +description: ethereum.org 翻譯計畫的使命和願景 +--- + +# 使命和願景 {#mission-and-vision} + +以太坊社群旨在成為全球化和包容性的社群,但大部分內容僅面向英語使用者,忽略了全球 60 億非英語使用者。 為了讓 ethereum.org 成為全球社群接觸以太坊的入口網站,我們認為很有必要為非英語國家人士以其母語提供以太坊內容。 + +ethereum.org 翻譯計劃旨在透過將 ethereum.org 和其他以太坊內容翻譯成盡可能多的語言,讓所有人都能參與以太坊。 + +## 我們的使命 {#our-mission} + +- 提供網站的翻譯版本,讓全球訪客能夠以母語了解以太坊 +- 促進更多成員加入全球以太坊社群 +- 支持以更易取得和更具包容性的方式分享以太坊資訊及知識 +- 支持社群成員為以太坊提供翻譯,並在生態系統中留下自己的痕跡 +- 辨識、聯絡希望參與生態系統的熱情貢獻者,並為其提供指導 + +## 我們的願景 {#our-vision} + +- 為全球盡可能多的國家/地區的以太坊社群成員翻譯基本內容 +- 支援跨語種的知識分享,以建立一個資訊豐富和受教育程度高的以太坊社群。 +- 通過消除非英語人士加入生態系統時的語言障礙,提高以太坊的包容性和可及性。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/resources/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/resources/index.md new file mode 100644 index 00000000000..6de44085724 --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/resources/index.md @@ -0,0 +1,45 @@ +--- +title: 供譯者使用的資源 +lang: zh-tw +description: 對 ethereum.org 譯者有用的資源 +--- + +# 資源 {#resources} + +你可以在下面找到一些對 ethereum.org 譯者有用的指南和工具,以及翻譯社群和更新。 + +## 指南 {#guides} + +- [翻譯風格指南](/contributing/translation-program/translators-guide/) _ — 給 ethereum.org 譯者的說明和小提示_ +- [翻譯常見問題](/contributing/translation-program/faq/)_ — 有關 ethereum.org 翻譯計劃的常見問題和答案_ +- [Crowdin 線上編輯器指南](https://support.crowdin.com/online-editor/)_ — 使用 Crowdin 線上編輯器和 Crowdin 的一些進階功能的深度指南_ +- [內容門類](/contributing/translation-program/content-buckets/)_ — ethereum.org 每個內容門類包含哪些頁面_ + +## 工具 {#tools} + +- [微軟語言入口網站](https://www.microsoft.com/en-us/language)_ — 在尋找和檢查技術術語的標準翻譯時很有用處_ +- [Linguee](https://www.linguee.com/)。 _ — 翻譯和字典搜尋引擎,可按詞或短語進行搜尋_ +- [Proz 術語搜尋](https://www.proz.com/search/) _ — 特殊術語的翻譯字典和詞彙表資料庫_ +- [Eurotermbank](https://www.eurotermbank.com/)_ — 42 種語言的歐洲術語集_ + +## 社群 {#communities} + +- [特定語言的 Discord 翻譯群組](/discord/) _ — 把 ethereum.org 譯者連結到翻譯群組的計劃_ +- [中文譯者的群組](https://www.notion.so/Ethereum-org-05375fe0a94c4214acaf90f42ba40171)_ — 為了讓中國譯者之間更輕鬆地進行協調的概念頁面_ + +## 最近更新 {#latest-updates} + +要瞭解翻譯計劃的最新進展,你可以追蹤[以太坊基金會部落格](https://blog.ethereum.org/): + +- [2021 年 10 月里程碑更新](https://blog.ethereum.org/2021/10/04/translation-program-update/) +- [2020 年 12 月里程碑更新](https://blog.ethereum.org/2020/12/21/translation-program-milestones-updates-20/) +- [2020 年 7 月里程碑更新](https://blog.ethereum.org/2020/07/29/ethdotorg-translation-milestone/) +- [2019 年 8 月翻譯計劃啟動](https://blog.ethereum.org/2019/08/20/translating-ethereum-for-our-global-community/) + +## 譯者辦公時間 {#office-hours} + +我們在每月的第二個星期三會定期舉辦「譯者辦公時間」活動。 這會在 [ethereum.org Discord](/discord/) 的語音頻道 #office-hours 舉辦,你也可以在此確認舉辦的確切時間以及進一步的細節資訊。 + +在「譯者辦公時間」活動中,我們的譯者可以詢問有關翻譯過程的問題、提供有關專案的意見回饋、分享想法,或只是與 ethereum.org 核心團隊聊天。 最後,我們想利用這些通話溝通一下翻譯計劃近期的發展,與我們的貢獻者分享關鍵的翻譯小提示和說明。 + +如果你已經是或是想成為 ethereum.org 譯者,歡迎在這些階段加入我們。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/translators-guide/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/translators-guide/index.md new file mode 100644 index 00000000000..00c2a1f2bb6 --- /dev/null +++ b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/translators-guide/index.md @@ -0,0 +1,293 @@ +--- +title: 譯者指南 +lang: zh-tw +description: 給 ethereum.org 譯者的說明和小提示 +--- + +# Ethereum.org 翻譯風格指南 {#style-guide} + +Ethereum.org 翻譯風格指南包含一些給譯者的最重要的準則、說明和小提示,能夠幫助我們將網站本土化。 + +這份文件是一份通用指南,並不特定於任何一種語言。 + +如你有任何問題、建議或意見回饋,請隨時透過 translations@ethereum.org 聯絡我們,在 Crowdin 上向 @ethdotorg 傳送訊息,或者[加入我們的 Discord](https://discord.gg/ethereum-org),你可以在當中透過 #translations 頻道聯絡我們,或者聯絡任何團隊成員。 + +## 使用 Crowdin {#using-crowdin} + +你可以在[翻譯計劃頁面](/contributing/translation-program/#how-to-translate)中找到有關如何在 Crowdin 中加入專案以及如何使用 Crowdin 線上編輯器的基本說明。 + +若你想要學習更多有關 Crowdin 及如何使用其某些進階功能的資訊,[Crowdin 知識庫](https://support.crowdin.com/online-editor/)內有很多針對所有 Crowdin 功能的深度指南和總觀。 + +## 傳達訊息的重點 {#capturing-the-essence} + +翻譯 ethereum.org 的內容時,請避免字面翻譯。 + +翻譯能夠傳達訊息的重點很重要。 這可能意味著改寫某些短語,或者使用描述性翻譯而不是逐字翻譯。 + +不同語言有不同的文法規則、慣例和字詞順序。 翻譯時,請注意目標語言中句子的結構,避免字面翻譯英文原文,因為這會導致句子結構不佳且可讀性差。 + +建議你閱讀整個句子,並對其進行調整以適應目標語言的慣例,而不是逐字翻譯原文。 + +## 正式與非正式 {#formal-vs-informal} + +我們使用正式的稱呼形式,這對所有訪客都是有禮貌且妥當的。 + +使用正式的稱呼可以讓我們避免聽起來不官方或冒犯,並且無論訪客的年齡和性別如何都可以適用。 + +多數印歐語係和亞非語係語言都使用特定於性別的第二人稱人稱代詞,以區分男性和女性。 在稱呼使用者或或使用所有格代名詞時,我們可以避免對訪客的性別作出假設,因為正式的稱呼形式通常適用且一致,無論他們如何定位自己的性別。 + +## 簡單清楚的詞彙和意思 {#simple-vocabulary} + +我們的目標是讓盡可能多的人能夠理解網站上的內容。 + +在大多數情況下,這可以透過使用易於理解的簡短單詞輕鬆實現。 如果在你的語言中對某一個單詞有多種含義相同的翻譯,最佳選擇通常是能夠清楚地反映含義的最短單字。 + +## 書寫系統 {#writing-system} + +Ethereum.org 透過拉丁語外的不同書寫系統(或書寫腳本)提供多種語言版本。 + +所有內容都應該使用適合你的語言的正確書寫系統進行翻譯,並且不應該包含使用拉丁文字書寫的任何文字。 + +翻譯內容時,應該確保翻譯內容一致,且不包含任何拉丁字符。 + +一個常見的錯誤觀念:Ethereum 應該一直用拉丁文來書寫。 這在大多情況下都是不正確的,請根據你的語言而改變「以太坊」的拼字(如在中文中是「以太坊」,在阿拉伯文中是「إيثيريوم」)。 + +**以上規則不適用於通常不應翻譯專有名詞的語言。** + +## 翻譯頁面中繼資料 {#translating-metadata} + +某些頁面含有頁面上的中繼資料,像「title」、「lang」、「description」、「sidebar」等等。 + +在將新頁面上傳到 Crowdin 時,我們隱藏了譯者不應該翻譯的內容,這意味著 Crowdin 中對譯者可見的所有中繼資料都應該翻譯。 + +翻譯源文本為「en」的任何語句中,請格外留意。 這代表頁面提供的語言,並且應該翻譯為[你的語言的 ISO 語言代碼](https://www.andiamo.co.uk/resources/iso-language-codes/)。 這些字串應該始終翻譯為拉丁文字元,而不是對應目標語言的書寫腳本。 + +如你不確定要使用哪個語言代碼,可以在 Crowdin 中查看翻譯記憶,或在 Crowdin 線上編輯器中的頁面 URL 內尋找目標語言的語言代碼。 + +最廣泛使用的語言的語言代碼範例: + +- 阿拉伯語 - ar +- 簡體中文 - zh +- 法語 - fr +- 印地語 - hi +- 西班牙語 - es + +## 外部文章的標題 {#external-articles} + +一些語句中包含外部文章的標題。 我們的大多數開發者文件頁面,都包含外部文章的連結以供進一步閱讀。 不論文章是何種語言,都需要翻譯包含文章標題的語句,以確保以母語檢視頁面的訪客取得一致的使用者體驗。 + +你可以在下方找到譯者會遇到的這類字串,以及如何辨認出這類字串(文章的連結大多位於頁面底部的「延伸閱讀」區段): + +![sidebar.png 中的文章標題](./article-titles-in-sidebar.png) ![editor.png 中的文章標題](./article-titles-in-editor.png) + +## Crowdin 警告 {#crowdin-warnings} + +Crowdin 有一個內建功能,在譯者即將出錯時發出警告。 在儲存翻譯之前,如果你忘記包含原文中的標籤、翻譯了不應翻譯的元素、添加了多個連續空格、忘記結尾標點符號等,Crowdin 會自動警告你。 若你看見這類警告,請返回並仔細檢查你所提議的翻譯。 + +**永遠不要忽視這類警告,因為它們通常意味著翻譯存在問題,或者缺少源文本中的關鍵部分。** + +當你忘記在翻譯中新增標籤時會出現的 Crowdin 警告範例: ![Crowdin 警告範例](./crowdin-warning-example.png) + +## 處理標籤和程式碼片段 {#dealing-with-tags} + +很多源內容包含標籤和變數,它們在 Crowdin 編輯器中以黃色醒目顯示。 它們提供不同功能,因而應該正確處理。 + +**Crowdin 設定** + +為了更輕鬆地管理標籤並直接從原文複製它們,我們建議在 Crowdin 編輯器中更改你的設定。 + +1. 開啟設定 ![如何在編輯器中開啟設定](./editor-settings.png) + +2. 向下捲動至「HTML tags displaying」區段 + +3. 選擇「Hide」 ![請選擇「Hide」](./hide-tags.png) + +4. 按一下「Save」 + +透過選擇此選項,完整的標籤文本將不再顯示,並會替換為數字。 翻譯時,點擊該標籤會自動將準確的標籤複製到翻譯欄位。 + +**連結** + +你可能注意到指向 ethereum.org 或其他網站的頁面的完整連結。 + +這些連結應與原文相同,並且不得更改或翻譯。 若你翻譯或以任何方式更改了連結,就算只是移除連結的一部份,如斜線 (/),也將導致連結中斷和無法使用。 + +處理連結的最佳方式是直接從原文中複製連結,可以透過按一下連結或使用「複製原文」按鈕(快捷鍵是「Alt+C」)。 + +![link.png 的例子](./example-of-link.png) + +連結也會以標籤的形式出現在源文本中(即 <0> ). 若你將滑鼠停留在標籤上,編輯器將顯示標籤的全部內容 - 有時候這些標籤將會代表連結。 + +從原文複製連結並且不要改變連結的順序是很重要的。 + +如果標籤的順序改變,其所代表的連結將中斷。 + +![tags.png 內的連結的範例](./example-of-links-inside-tags.png) + +**標籤和變數** + +原文包含許多不同類型的標籤,應該始終從原文中複製連結並且不做任何變更。 跟上述相似,這些標籤在翻譯中的順序應該與原文一致。 + +標籤始終包含一個開始和結束標籤。 在多數情況下,開始標籤和結束標籤中間的文字應該翻譯。 + +例子:``Decentralized`` + +`` - _讓文字變粗體的開始標籤_ + +Decentralized - _可翻譯的文字_ + +`` - _結束標籤_ + +![「strong」tags.png 的例子](./example-of-strong-tags.png) + +程式碼片段的處理方式與其他標籤略有不同,因為其包含不應翻譯的程式碼。 + +例子:``nonce`` + +`` - _開始標籤,其中含有一個程式碼片段_ + +nonce - _不可翻譯的文字_ + +`` - _結束標籤_ + +![程式碼 snippets.png 的例子](./example-of-code-snippets.png) + +原文還包含縮短的標籤,這類標籤只含有數字,這意味著標籤的功能不明顯。 你可以將滑鼠停留在這些標籤上,查看標籤的確切功能。 + +在下面的例子中,可以看見滑鼠停留在標籤上時, <0> 會顯示標籤代表 ``,並且含有一個程式碼片段,因此標籤內的內容不應該翻譯。 + +![意義含糊的 tags.png 例子](./example-of-ambiguous-tags.png) + +## 簡短與完整形式/縮寫 {#short-vs-full-forms} + +網站上使用很多縮寫,例如 dapps、NFT、DAO、DeFi 等等。 這些縮寫通常用於英語,並且多數網站的訪客都熟悉這些縮寫。 + +由於這些縮寫通常在其他語言中沒有既定翻譯,處理這些或類似術語最佳方法是提供完整形式的描述性翻譯,並在括號中添加英文縮寫。 + +不要翻譯這些縮寫,因為多數人對它們不熟悉,而且本土化後的翻譯版本對多數訪客來說沒有意義。 + +如何翻譯 dapps 的例子: + +- Decentralized applications (dapps) → _完整翻譯形式 (括號內為英文縮寫)_ + +## 沒有既定翻譯的術語 {#terms-without-established-translations} + +某些術語在其他語言中可能沒有既定翻譯,並且以原始英語術語的形式廣為人知。 這類術語主要包括較新的概念,如工作量證明、權益證明、信標鏈、質押等。 + +雖然這些術語的翻譯可能聽起來不自然,但由於英文版本也常用於其他語言,因此強烈建議翻譯這些術語。 + +翻譯時,請自由發揮創意,使用描述性翻譯,或直接按字面翻譯。 + +**大多數術語應該翻譯而不是將其中一些保留英文的原因是,隨著越來越多的人開始使用以太坊和相關技術,這種新術語將在未來變得更加普及。 如果我們想讓來自世界各地的更多人加入這個領域,我們需要以盡可能多的語言提供易於理解的術語,即使需要我們自行創建這些術語。** + +## 按鈕和行動呼籲 {#buttons-and-ctas} + +網站包含很多按鈕,其翻譯方式與其他內容不同。 + +可以透過檢視上下文螢幕擷取畫面、與大多數字串連結或通過查看編輯器中的上下文(包括詞語「按鈕」)來辨認出按鈕文字。 + +按鈕的翻譯應該越短越好,以防止格式不匹配。 此外,按鈕翻譯應採用命令式,如:呈現命令或請求。 + +![如何尋找 button.png](./how-to-find-a-button.png) + +## 翻譯的包容性 {#translating-for-inclusivity} + +Ethereum.org 的訪客來自世界各地和不同的背景。 因此,網站上的語言應該是中性的,歡迎所有人且沒有排他性。 + +其中一個重要方面是性別中性。 透過在翻譯中使用正式稱呼,並避免任何指代特定性別的單字可以輕鬆實現這一點。 + +包容性的另一種形式是,嘗試針對全球受眾進行翻譯,而不是針對特定國家、種族或地區。 + +最後,語言應該對所有受眾和年齡組來說都是適宜的。 + +## 特定語言的翻譯 {#language-specific-translations} + +翻譯時,重要的是要遵循你的語言中的文法規則、慣例和格式,而不是從原文直接字面翻譯。 原文遵循英文文法的規則和慣例,而這並不能套用在很多其他語言上。 + +你應該瞭解自己語言的規則,並進行相應地翻譯。 若你需要幫助,請聯絡我們,我們將幫你尋找關於如何在你的語言中使用這些元素的資源。 + +需要特別留意事項的具體例子: + +### 標點符號、格式 {#punctuation-and-formatting} + +**大寫** + +- 不同語言的大寫有著很大的差異。 +- 在英文中,標題和名稱、月份和日期、語言名稱、假期等中的所有單詞通常會大寫。 在很多其他語言中,這在文法上是不正確的,這些語言有自己的一套大寫規則。 +- 一些語言也有關於將個人代名詞、名詞和某些形容詞大寫的規則,這些詞在英文中是不大寫的。 + +**間距** + +- 正字法規則定義了每種語言中空格的使用。 由於空格的使用很廣泛,所以這些規則最獨特,而空格是最容易錯譯的元素。 +- 英語和其他語言在空格用法上的一些常見差異: + - 測量和貨幣單位(如:USD、EUR、kB、MB)前的空格 + - 溫度符號(如:°C、℉)前的空格 + - 一些標點符號前的空格,尤其是省略號 (…) + - 斜線 (/) 前後的空格 + +**清單** + +- 每種語言都有一套多樣化和複雜的規則來編寫清單。 這些規則可能與英語大不相同。 +- 在一些語言中,每個新行的第一個字詞需要大寫,而在其他語言中,新行應以小寫字母開頭。 許多語言對清單中的大小寫也有不同的規則,具體取決於每行的長度。 +- 這同樣適用於列項目的標點符號。 清單中的結束標點可以是句號(**。**)、逗號(**,**)、或分號(**;**),具體取決於語言。 + +**引號** + +- 各種不同的語言使用各式各樣的引號。 簡單複製原文中的英文引號通常是錯誤的。 +- 一些最常見的引號類型包括: + - „範例文字“ + - ‚範例文字’ + - »範例文字« + - “範例文字” + - ‘範例文字’ + - «範例文字» + +**連字號和破折号** + +- 在英語中,連字號 (-) 是用來連接單詞或單詞的不同部分,而破折號 (—) 是用來標示範圍或停頓。 +- 很多語言在使用連字符和破折號上有不同的規則,應該遵循這些規則。 + +### 格式 {#formats} + +**數字** + +- 不同語言中,數字書寫的主要區別是小數和千位數的分離符號。 對於千位數,分隔符號可以是句號、逗號或空格。 同樣,一些語言使用句號小數點,而其他語言則使用逗號小數點。 + - 一些大數的例子: + - 英語 - **1,000.50** + - 西班牙語 - **1.000,50** + - 法語 - **1 000,50** +- 在翻譯數字時,另外一個重要考慮因素是百分比符號。 它能以不同方法書寫:**100%**、**100 %**或**%100**。 +- 最後,依據語言類型,負數可以有不同的形式:-100、100-、(100) 或 [100]。 + +**日期** + +- 在翻譯日期時,有許多依據語言的考慮和差異。 其中包括日期格式、分隔符號、大寫和前導零。 全寫日期和數字日期之間也有差異。 + - 一些不同日期格式的範例: + - 英語(英國)(dd/mm/yyyy) – 1st January, 2022 + - 英語(美國)(mm/dd/yyyy) – January 1st, 2022 + - 中文 (yyyy-mm-dd) – 2022 年 1 月 1 日 + - 法語 (dd/mm/yyyy) – 1er janvier 2022 + - 意大利語 (dd/mm/yyyy) – 1º gennaio 2022 + - 德語 (dd/mm/yyyy) – 1. Januar 2022 + +**貨幣** + +- 貨幣翻譯可能有難度,這是因為貨幣之間不同的格式、慣例和轉換。 作為一般規則,請與原文中的貨幣保持一致。 為了便於讀者,你可以在括號中新增你本地貨幣和轉換值。 +- 不同語言書寫貨幣的主要差異包括符號位置、逗號小數點、句號小數點、空格和縮寫與符號。 + - 符號位置:$100 或 100$ + - 逗號小數點與句號小數點:100,50$ 或 100.50$ + - 空格:100$ 或 100 $ + - 縮寫與符號:100 $ 或 100 USD + +**測量單位** + +- 作為一般規則,請依據原文保留測量單位。 如你的國家/地區使用不同的系統,可以在括號中新增轉換值。 +- 除了測量單位的本土化外,注意語言對這些單位的處理方式差異也很重要。 主要差異為數字與單位間的間距,這可能依據語言不同而不同。 這方面的範例包括 100kB 與 100 kB,或 50ºF 與 50 ºF。 + +## 結論 {#conclusion} + +翻譯 ethereum.org 是學習以太坊不同方面的絕佳機會。 + +翻譯時,不要匆忙完成。 放輕鬆,享受過程吧! + +感謝你參與翻譯計劃並幫助我們讓更廣泛的受眾可以訪問網站。 以太坊社群是全球性的,我們很高興你成為其中的一份子! diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-desci-projects/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-desci-projects/index.md new file mode 100644 index 00000000000..7a4decec4da --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-desci-projects/index.md @@ -0,0 +1,44 @@ +--- +title: 新增去中心化科研專案 +description: 我們在 ethereum.org 的去中心化科研頁面上新增專案連結時使用的政策 +lang: zh-tw +--- + +# 新增專案 {#adding-projects} + +我們希望確保展示各種專案,並提供去中心化科研全景的一個準確簡況。 + +任何人都可以在 ethereum.org 的去中心化科研頁面上推薦可上架的專案。 同樣地,任何人如發現某個專案已不再相關或不再符合我們的資格標準,也可以隨時建議我們將其移除。 + +## 決策框架 {#the-decision-framework} + +### 納入標準:必備條件 {#the-must-haves} + +- **開源程式碼/資料** - 開放的程式碼和資料是去中心化科研的核心原則,因此去中心化科研專案不得閉源。 程式碼庫應該是可存取的,並且最好對拉取請求開放。 +- **DeSci 專案應明顯去中心化** - 這可能包括由去中心化自治組織 (DAO) 管理,或透過使用包括非託管錢包在內的去中心化技術堆疊進行建置。 它可能涉及以太坊上的可審核智慧型合約。 +- **上架資訊真實準確** - 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 +- **擴大科學普及的明確承諾** - 去中心化科研專案應該能夠闡明它們如何擴大公眾對科學的參與,而不僅僅包括代幣/非同質化代幣持有者。 +- **全球皆可存取** - 你的專案沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 +- **資訊豐富的網站和文件** - 讓專案網站的訪客能夠了解該專案的實際用途、如何為去中心化科學基礎設施做出貢獻以及如何參與,這些都非常重要。 +- **專案應該是以太坊生態系統一部分** - 在 ethereum.org,我們相信以太坊(及其二層網路)是去中心化科研運動的合適基礎層。 +- **專案已相當完善** - 該專案擁有真實使用者,在幾個月中都能夠存取該專案服務。 + +### 加分項 + +- **支援多種語言** - 你的專案已經翻譯成多種語言,全球使用者皆可存取。 +- **教育資源/文件** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 +- **第三方審核** - 你的產品已經由可靠第三方進行了專業的漏洞審核。 +- **聯絡人** - 實施變更時,專案聯絡人(可能是去中心化自治組織或社群的代表)將大力幫助我們獲得準確資訊。 這樣將在日後收集資訊時,確保 ethereum.org 的更新可控。 + +## 維護 {#maintenance} + +由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: + +- 確保列出的所有專案仍符合我們的標準 +- 驗證建議的產品不比目前列出的產品更符合我們的標準 + +Ethereum.org 由開源社群維護,我們依靠社群來助其保持最新狀態。 如果你發現所列專案有任何資訊需要更新,請在我們的 GitHub 存放庫上建立一個議題或拉取請求。 + +## 使用條款 {#terms-of-use} + +另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-developer-tools/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-developer-tools/index.md new file mode 100644 index 00000000000..df281f40858 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-developer-tools/index.md @@ -0,0 +1,61 @@ +--- +title: 新增開發者工具 +lang: zh-tw +description: 我們在 ethereum.org 上架開發者工具的標準 +--- + +# 新增開發者工具 {#contributing-to-ethereumorg-} + +我們想要確保盡可能地將最佳的開發者資源上架,讓開發者能夠自信地構建並獲取他們需要的支持。 + +如果我們遺漏了某個實用的開發者工具,請你在合適的地方提出建議。 + +我們目前在我們的[開發者門戶](/developers/)中上架開發者工具。 + +**請隨時去適當的頁面提出新增工具。** + +## 我們怎樣決定的 {#ways-to-contribute} + +提交的開發者工具將按照以下標準進行評估: + +**它是否與已經上架的工具有明顯的區別?** + +- 是否是新分類或類型的工具 +- 相較於已有相似工具,是否具有新的功能 +- 是否針對現有類似工具未涵蓋的獨特用例 + +**該工具是否有完善的說明文件?** + +- 是否存在相關文件? +- 相關文件是否足以使用該工具? +- 文件近期是否有過更新? + +**該工具是否被廣泛使用?** + +- 我們將會考慮 GitHub 星數、下載數量統計以及是否被知名公司或專案使用等指標作為參考 + +**該工具的品質是否足夠好?** + +- 是否有重複出現的錯誤? +- 工具是否可靠? +- 工具是否得到積極維護? + +**工具是否開源?** + +以太坊領域的許多專案都是開源的。 我們更有可能上架開源專案,讓社群開發者能夠檢查程式碼並為此做出貢獻。 + +--- + +## 產品次序 {#product-ordering} + +除非指定產品以特定順序排列,如按照英文字母順序,否則將按照最早至最晚新增到頁面的順序顯示。 換句話說,最新的產品會被新增到清單的底部。 + +--- + +## 新增你的開發者工具 {#how-decisions-about-the-site-are-made} + +如果你想為 ethereum.org 新增開發者工具並且該工具符合條件,請在 GitHub 上建立一個議題。 + + + 建立議題 + diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-exchanges/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-exchanges/index.md new file mode 100644 index 00000000000..520e047f8a3 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-exchanges/index.md @@ -0,0 +1,40 @@ +--- +title: 新增交易所 +description: 向 ethereum.org 新增交易所時使用的政策 +lang: zh-tw +--- + +# 新增以太坊交易所 {#adding-ethereum-exchanges} + +任何人都可以在 ethereum.org 上自由提議新的交易所。 + +我們目前將這些交易所列於: + +- [ethereum.org/get-eth](/get-eth/) + +使用者在這個頁面輸入他們的居住地,就能查看他們可以使用哪些交易所。 這有助於儘早發現任何地域限制。 + +鑑於此類情況,當你建議交易所時我們需要一些具體資訊。 + +**注意:**如果你想列出去中心化交易所,請查看我們的[錢包和去中心化應用程式上架政策](/contributing/adding-products/)。 + +## 我們需要的資訊 {#what-we-need} + +- 適用於交易所的地域限制。 與交易所相關的地域限制應在交易所網站的專門頁面詳細說明。 +- 使用者可以用來購買以太幣的貨幣 +- 證明該交易所是合法營運的公司的證據 +- 你可能擁有的任何額外資訊 - 這可能是有關公司的信息,例如經營年限、財務支持等。 + +我們需要這些資訊,以便我們精準[幫助使用者找到他們可以使用的交易所](/get-eth/#country-picker), + +這樣 ethereum.org 也能夠更加確保交易所可以提供合法且安全的兌換服務。 + +--- + +## 新增你的交易所 {#add-exchange} + +如果你想向 ethereum.org 新增交易所,請在 GitHub 上建立一個議題。 + + + 建立一個議題 + diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-glossary-terms/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-glossary-terms/index.md new file mode 100644 index 00000000000..f69ed7c6175 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-glossary-terms/index.md @@ -0,0 +1,26 @@ +--- +title: 新增詞彙表術語 +lang: zh-tw +description: 我們在 ethereum.org 詞彙表增加新術語的標準 +--- + +# 增加術語表 {#contributing-to-ethereumorg-} + +以太坊的世界日新月異。 以太坊使用者需要不斷應對層出不窮的新術語,因此我們需要你幫助我們提供最準確、最新的參照。 查看目前的[詞彙表](/glossary/),如果你想做出貢獻,請參考下列內容! + +## 標準 {#criteria} + +新的詞彙表術語將按照以下標準進行評估: + +- 這個術語/定義是否是最新並且相關的? +- 術語表中是否已經有類似的術語? (如果有,請衡量新增一個新術語相對於更新現有術語的好處) +- 這個術語/定義是否不涉及產品廣告或其他的宣傳內容? +- 這個術語/定義是否與以太坊直接相關? +- 這個定義是否客觀、準確、並且不包含主觀的判斷和意見? +- 資料來源是否可信? 資料來源是否有引用相應的出處? + +--- + +## 新增你的術語 {#how-decisions-about-the-site-are-made} + +如果你想新增符合以上標準的術語到 ethereum.org,[請在 GitHub 上建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_glossary_term.yaml)。 diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-layer-2s/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-layer-2s/index.md new file mode 100644 index 00000000000..9a6c4a5bd46 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-layer-2s/index.md @@ -0,0 +1,97 @@ +--- +title: 新增二層網路 +description: 向 ethereum.org 新增二層網路時使用的政策 +lang: zh-tw +--- + +# 新增二層網路 {#adding-layer-2} + +我們想確保上架最佳的資源,讓使用者能夠以安全放心的方式瀏覽二層網路空間。 + +任何人都可以建議在 ethereum.org 上新增二層網路。 如我們有遺漏二層網絡,**[請提出建議](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_layer2.yaml)!** + +我們目前在以下頁面上架二層網路: + +- [Optimistic rollup (樂觀卷軸)](/developers/docs/scaling/optimistic-rollups/) +- [ZK零知識證明卷軸](/developers/docs/scaling/zk-rollups/) +- [層二(Layer 2)](/layer-2/) + +二層網路是以太坊相對較新且令人興奮的範式。 我們嘗試在 ethereum.org 上創建一個公平的考量框架,但納入標準會隨時間推移而變化和發展。 + +## 決策框架 {#decision-framework} + +### 納入標準:必備條件 {#criteria-for-inclusion-the-must-haves} + +**在 L2BEAT 上架** + +- 要被納入考量範圍,專案必須已在 [L2BEAT](https://l2beat.com) 上架。 L2BEAT 為二層網路專案提供了可靠的風險評估,供我們評估二層網路專案。 **如果專案未在 L2BEAT 上架,我們不會在 ethereum.org 上將其作為二層網路上架。** +- [了解如何將二層網路專案新增到 L2BEAT](https://github.com/l2beat/l2beat/blob/master/CONTRIBUTING.md)。 + +**開源** + +- 你的程式碼必須是可存取的,同時你應接受來自更廣泛社群的拉取請求 (PR)。 + +**二層網路類別** + +我們目前將以下列為二層網路解決方案: + +- 樂觀卷軸 +- 零知識卷軸 + +_我們認為,其他不使用以太坊來實現資料可用性或安全性的擴張解決方案,不是二層網路。_ + +**以太坊的資料可用性** + +- 資料可用性是其他擴張方案與二層網路方案之間的重要區分因素。 一個專案**必須**使用以太坊主網來實現資料可用性,才能考慮讓其上架。 + +**跨鏈橋** + +- 使用者怎樣才能登錄利用二層網路? + +**專案上線日期** + +- 二層網路已在主網「上線」超過 6 個月 + +- 未經使用者實際測試的較新專案不太可能上架。 + +**外部安全審核** + +- 無論是透過審核、內部安全團隊或其他方法,你的產品安全性都必須經可靠測試。 對我們的用戶而言,這會減低相關風險,並且向我們顯示出你有認真思考產品安全的問題。 + +**持續的使用者群** + +- 我們會考慮總鎖定價值 (TVL) 歷史記錄、交易統計數據以及是否被知名公司或專案使用等指標 + +**活躍的開發團隊** + +- 我們不會上架沒有活躍團隊去開發專案的二層網路。 + +**區塊瀏覽器** + +- 上架的專案需要正常運作的區塊瀏覽器,讓使用者輕鬆瀏覽區塊鏈。 + +### 其他標準:加分項 {#nice-to-haves} + +**交易所對專案的支援** + +- 使用者能否直接存款到交易所和/或從交易所提款? + +**二層網絡生態系統的去中心化應用程式連結** + +- 我們希望能夠提供有關使用者可以在此二層網路上執行哪些操作的資訊。 (例如 https://portal.arbitrum.io/、https://www.optimism.io/apps) + +**代幣合約清單** + +- 由於資產會在二層網路擁有新地址,如有可用的代幣清單資源,請分享。 + +**支援原生錢包** + +- 是否有任何錢包原生支援二層網路? + +## 新增你的二層網絡 {#add-exchange} + +如果你想在 ethereum.org 上新增二層網路層,請在 GitHub 上建立議題。 + + + 建立一個議題 + diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-products/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-products/index.md new file mode 100644 index 00000000000..2fb80a6e099 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-products/index.md @@ -0,0 +1,100 @@ +--- +title: 新增產品 +description: 向 ethereum.org 新增去中心化應用程式時使用的政策 +lang: zh-tw +--- + +# 新增以太坊產品 {#adding-products} + +任何人都可以在適當情況下,向 ethereum.org 的內容上推薦新的去中心化應用程式。 **但我們不會在網站首頁列出你的去中心化應用程式** 😜 + +目前所有去中心化應用程式都列於: + +- ethereum.org/dapps +- ethereum.org/get-eth + +**請僅在上列頁面上建議新增新的去中心化應用程式。** + +雖然我們歡迎新增新的去中心化應用程式,但目前我們以我們努力為使用者創造的使用體驗為基準來選擇去中心化應用程式。 此使用體驗基於下方一些設計原則: + +- _具啟發性_:ethereum.org 上的任何事物都應該讓使用者耳目一新 +- _好故事_:列出的內容應該讓人感到驚嘆 +- _可信_:所有業務/專案都應該是合法的,以最大程度降低使用者面臨的風險 + +整體而言,**ethereum.org 想為新的使用者提供「無縫加入體驗」**。 為此,我們會根據下列條件來新增去中心化應用程式: + +- 方便使用 +- 與其他產品的互通性 +- 安全性 +- 耐用 + +以下是關於我們決策框架的更詳細資訊。 請隨時提供意見回饋或更改建議。 + +## 決策框架 {#decision-framework} + +### 納入標準:必備條件 {#criteria-for-inclusion-the-must-haves} + +- **產品通過安全測試** — 無論是透過審核、內部安全團隊或某些其他方法,你的產品安全必須通過可靠測試。 這將降低我們的使用者面臨的風險,並向我們表明你非常重視安全性。 +- **產品已「上線」超過 6 個月** — 這是產品安全性的另一個指標。 6 個月是發現嚴重錯誤和漏洞的最佳時間窗口。 +- **由活躍的團隊開發** — 這有助於確保品質,並讓使用者的查詢得到支援。 +- **上架資訊真實準確** — 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 + +### 排名標準:加分項 {#criteria-for-ranking-the-nice-to-haves} + +你的去中心化應用程式或因以下標準,未能像其他產品一樣在 ethereum.org 顯眼地方列出。 + +**去中心化應用程式** + +- **可以透過大多數上架的錢包存取** - 去中心化應用程式應該與 ethereum.org 上架的大多數錢包相容。 +- **使用者可以自行試用 –** 個人使用者應該能夠使用你的去中心化應用程式並執行一些實際操作。 +- **入門培訓** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 +- **非託管模式** – 使用者可以控制自己的資金。 如果你的產品消失,使用者仍然可以存取和轉移他們的資金。 +- **全球皆可存取** – 你的產品沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 +- **開源** – 你的程式碼應該易於存取,並應接受來自更廣泛社群的拉取請求 (PR)。 +- **社群** – 你有一個專門社群,例如 Discord,使用者可以在其中與你的團隊互動,以獲得幫助或建議新功能。 + +## 實踐中的標準 {#criteria-in-practice} + +你達到的標準越多,你的產品就越有可能進入 ethereum.org。 + +如果建議的新產品符合必備條件和其中幾個加分條件,僅符合必備條件的已上架產品則可能會被移除。 + +會影響此決定的其他因素: + +- 新增應用程式而非替換應用程式的話,會破壞頁面的使用者體驗嗎? + - 我們的網站主要是教育性的,目的是解釋以太坊及其相關概念。 為使用者新增太多選項,頁面可讀性或會變得較差,導致實用性降低。 +- 該頁面目前是否讓使用者難以選擇? + - 就像你坐上幾個小時瀏覽 Netflix,因為你無法決定要觀看的內容。 提供太多選擇會讓新使用者迷惑,這是一種風險。 + +ethereum.org 負責做出這種設計決策。 + +但請放心,**我們會提供一些網站的連結,這些網站對更多去中心化應用程式進行排名** + +### 產品訂購 {#product-ordering} + +除非指定產品以特定順序排列,如按照英文字母順序,否則將按照最晚至最早新增到頁面的順序顯示。 換句話說,最新的產品會被新增到清單的底部。 + +### 使用條款 {#terms-of-use} + +另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 + +## 維護 {#maintenance} + +由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: + +- 確保列出的所有去中心化應用程式仍符合我們的標準 +- 驗證建議的產品不比目前列出的產品更符合我們的標準 + +你可以查驗上述兩項,並告知我們查驗結果,以此提供幫助。 [建立議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=)或發送電子郵件至 [website@ethereum.org](mailto:website@ethereum.org) + +_我們也在研究投票的可能性,讓社群可以表明偏好,並突顯最好的產品供我們推薦。_ + +--- + +## 新增你的產品 {#add-your-product} + +如果你想將去中心化應用程式新增至 ethereum.org 並且該應用程式符合標準,請在 GitHub 上建立一個議題。 + + + 創建一個議題 + diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-staking-products/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-staking-products/index.md new file mode 100644 index 00000000000..8606b09e29a --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-staking-products/index.md @@ -0,0 +1,176 @@ +--- +title: 新增質押產品或服務 +description: 向 ethereum.org 新增質押產品或服務時使用的政策 +lang: zh-tw +--- + +# 添加質押的產品或服務 {#adding-staking-products-or-services} + +我們想要確保上架最佳的資源,讓使用者能夠安全放心。 + +任何人都可以建議在 ethereum.org 上新增質押產品或服務。 如我們有遺漏,**[請提出建議](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_staking_product.yaml)!** + +我們目前在以下頁面上架質押產品與服務: + +- [單獨質押](/staking/solo/) +- [質押即服務](/staking/saas/) +- [質押池](/staking/pools/) + +信標鏈上的權益證明自 2020 年 12 月 1 日起生效。 雖然質押仍然相對較新,但我們嘗試在 ethereum.org 建立一個公平透明的考慮框架,但上架標準會隨著時間推移而變化和發展,最終由 ethereum.org 網站團隊自行決定。 + +## 決策框架 {#the-decision-framework} + +是否在 ethereum.org 上架產品並非由單一因素決定。 當要決定上架一個產品或服務時,會同時考慮多個標準。 符合以下標準越多,產品或服務上架的可能性就越高。 + +**首先,它是屬於哪個類別的產品或服務呢?** + +- 節點或用戶端工具 +- 金鑰管理 +- 質押即服務 (SaaS) +- 質押池 + +目前,我們僅上架以下類別的產品或服務。 + +### 納入標準 {#criteria-for-inclusion} + +提交的質押產品或服務將按照以下標準進行評估: + +**該專案或服務是何時啟動的?** + +- 是否有證據證明該產品或服務開放給大眾的時間? +- 這用來確定產品的「實戰測試」評分。 + +**專案是否得到積極維護?** + +- 是否有活躍的團隊開發專案? 有誰參與到當中了? +- 只有積極維護的產品才會被考慮。 + +**產品或服務是否不需要可信賴/人工中間人?** + +- 在使用者使用產品或服務的過程中,哪些步驟需要信賴他人來保管其資金金鑰,或妥善分配酬勞? +- 這用來確定產品或服務「去信賴」評分。 + +**該專案是否提供準確可靠的資訊?** + +- 產品網站提供最新、準確且無誤導性的資訊至關重要,尤其涉及以太坊協定或其他相關技術。 +- 提交內容中包含錯誤資訊、過時細節或有關以太坊或其他相關主題的潛在誤導性陳述將不會被上架,如果已經上架,則將被移除。 + +**支援哪些平台?** + +- 如: Linux,、macOS、Windows、iOS、Android + +#### 軟體與智慧型合約 {#software-and-smart-contracts} + +對於涉及的任何客製化軟體或者智慧型合約: + +**一切都是開源的嗎?** + +- 開源專案應該有一個開放給公眾的原始程式碼存放庫 +- 這用來確定產品的「開源」評分。 + +**產品是否完成_測試版_開發?** + +- 產品處於開發週期的哪個階段? +- 處於測試階段的產品不會納入 ethereum.org + +**軟體是否經過外部安全審核?** + +- 如果為否,是否有計畫進行外部審核? +- 這用來確定產品的「審核」評分。 + +**專案是否有漏洞懸賞計畫?** + +- 如果沒有該項計畫,是否打算建立漏洞懸賞計畫? +- 這用來確定產品的「漏洞懸賞」評分。 + +#### 節點或用戶端模組化 {#node-or-client-tooling} + +對於有關節點或用戶端設定、管理或移植的軟體產品: + +**支援哪些共識層用戶端(例如 Lighthouse、Teku、Nimbus 和 Prysm)?** + +- 支援哪些用戶端? 使用者可以自己選擇嗎? +- 這用來確定產品的「多樣用戶端」評分。 + +#### 質押即服務(SaaS) {#staking-as-a-service} + +對於[質押即服務的上架](/staking/saas/)(即委託節點操作): + +**使用該服務有哪些相關費用?** + +- 它的費用結構是甚麼?例如:該服務是否有定期收取月費? +- 有任何額外的質押需求嗎? + +**使用者需要註冊帳戶嗎?** + +- 使用者是否可以在未經許可或身分驗證的情況下使用服務? +- 這用來確定產品的「無需許可」評分。 + +**誰會持有簽名金鑰及取款金鑰呢?** + +- 使用者可以存取哪些金鑰? 服務可以存取哪些金鑰? +- 這用來決定產品的「去信賴」評分。 + +**所運作節點的用戶端多樣性是怎樣的?** + +- 有多少比例的驗證者金鑰正在主流共識層 (CL) 用戶端運行? +- 截止上一次的編輯,大多數節點運營者都在運行 Prysm 這一共識層用戶端,這對網路是危險的。 如果目前有超過 33% 的網路在使用某一共識層用戶端,我們會索取該用戶端使用情況的相關數據。 +- 這用來決定產品的「多樣用戶端」評分。 + +#### 質押池 {#staking-pool} + +對於[聯合質押服務](/staking/pools/): + +**質押最少需要多少以太幣?** + +- 例如 0.01 以太幣 + +**涉及哪些費用或質押需求?** + +- 有多少百分比的獎勵作為費用被扣除? +- 有任何額外的質押需求嗎? + +**有流動性代幣嗎?** + +- 涉及哪些代幣? 它們是如何運作的? 合約地址是什麼? +- 這用來確定產品的「流動性代幣」評分。 + +**使用者可以作為節點運營者參與嗎?** + +- 使用聯合資金運行驗證者用戶端需要什麼條件? +- 這是否需要個人、公司或去中心化自治組織的許可? +- 這用來確定產品的「無需許可節點」評分。 + +**質押池內節點營運商用戶端多樣性是怎樣的?** + +- 有多少比例的節點營運商正在運行主流共識層 (CL) 用戶端? +- 截止上一次的編輯,大多數節點運營者都在運行 Prysm 這一共識層用戶端,這對網路是危險的。 如果目前有超過 33% 的網路在使用某一共識層用戶端,我們會索取該用戶端使用情況的相關數據。 +- 這用來決定產品的「多樣用戶端」評分。 + +### 其它範疇:有的話會比較好的元素 {#other-criteria} + +**支援哪些使用者介面?** + +- 如: 瀏覽器應用程式、桌面應用程式、行動應用程式、命令列介面 + +**對於節點工具,該軟體是否提供了在用戶端之間切換的簡單方法?** + +- 用戶可以透過該工具來輕易並安全地改變用戶端嗎? + +**對於質押即服務,該服務目前正在運作多少個驗證者?** + +- 這讓我們能夠了解你至今為止的服務範圍。 + +## 我們會怎樣顯示結果 {#product-ordering} + +上述[納入標準](#criteria-for-inclusion)將用於計算每個產品或服務的累計評分。 該評分用來對滿足特定客觀標準的產品進行排序和展示。 能夠證實滿足的標準越多,產品的排序就越高,且載入時是隨機排列的。 + +這些標準的程式碼邏輯和權重目前包含在我們存放庫的[這個 JavaScript 元件](https://github.com/ethereum/ethereum-org-website/blob/dev/src/components/Staking/StakingProductsCardGrid.js#L350)。 + +## 新增你的產品或服務 {#add-product} + +如果你想在 ethereum.org 上新增質押產品或服務,請在 GitHub 上建立一個議題。 + + + 建立一個議題 + diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-wallets/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-wallets/index.md new file mode 100644 index 00000000000..40ab8f14771 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-wallets/index.md @@ -0,0 +1,80 @@ +--- +title: 新增錢包 +description: 向 ethereum.org 上新增錢包時使用的政策 +lang: zh-tw +--- + +# 新增錢包 {#adding-wallets} + +我們希望確保展示各種錢包,涵蓋它們所有不同功能,讓使用者可以放心使用以太坊。 + +任何人都可以建議向 ethereum.org 新增錢包。 如我們遺漏了某個錢包,請提出建議! + +目前所有錢包都列於: + +- [ethereum.org/wallets/find-wallet/](/wallets/find-wallet/) + +以太坊中的錢包日新月異。 我們嘗試在 ethereum.org 上創建一個公平的考量框架,但納入標準會隨時間推移而變化和發展。 + +## 決策框架 {#the-decision-framework} + +### 納入標準:必備條件 {#the-must-haves} + +- **經過安全測試的產品** - 無論是透過審核、內部安全團隊、開源編碼或其他方法,你的錢包的安全性都必須可靠。 這將降低我們的使用者面臨的風險,並向我們表明你非常重視安全性。 +- **錢包已「上線」超過六個月或由具有良好記錄的團體發布** - 這是安全性的另一指標。 六個月是發現嚴重錯誤和漏洞的最佳時間窗口。 我們要求六個月的時間,來幫助篩選出那些作為專案很快就被放棄的分叉。 +- **由活躍的團隊開發** - 這有助於確保品質,並讓使用者的查詢得到支援。 +- **上架資訊真實準確** — 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 +- **聯絡人** - 實施變更時,錢包的聯絡人將大力幫助我們獲得準確資訊。 這樣將在日後收集資訊時,確保 ethereum.org 的更新可控。 +- **EIP-1559(第 2 類)交易** - 你的錢包必須支援 EIP-1559(第 2 類)交易,才能在以太坊主網上進行交易。 +- **良好的使用者體驗** - 雖然使用者體驗是主觀的,但如果多位核心團隊成員在測試產品後,發現產品難以使用,我們保留拒絕該錢包的權利,並會提供有用的改進建議。 這樣做是為了保護我們的使用者群,因為它主要由初學者組成。 + +### 產品移除 {#product-removals} + +- **更新資訊** - 錢包提供者有責任每 6 個月重新提交錢包資訊,以確保其有效性和相關性(即使他們的產品沒有變化)。 如果產品團隊未能這麼做,ethereum.org 或會從頁面上移除該專案。 + +### 其他標準:加分項 {#the-nice-to-haves} + +- **全球皆可存取** - 你的錢包沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 +- **支援多種語言** - 你的錢包已經翻譯成多種語言,讓全球使用者都能存取它。 +- **開源** - 你整個專案的程式碼庫(不只是模組)應可被存取,並且你應該接受來自更廣泛社群的拉取請求。 +- **非託管模式** - 使用者可以控制自己的資金。 如果你的產品消失,使用者仍然可以存取和轉移他們的資金。 +- **支援硬體錢包** - 使用者可以連接硬體錢包來簽署交易。 +- **WalletConnect** - 使用者可以使用 WalletConnect 連接到去中心化應用程式。 +- **匯入以太坊遠端程序呼叫 (RPC) 端點** - 使用者可以匯入節點遠端程序呼叫資料,讓它們連接到自己選擇的節點或其他以太坊虛擬機相容網路。 +- **非同質化代幣** - 使用者能夠查看錢包中的非同質化代幣並與之互動。 +- **連接到以太坊應用程式** - 使用者能夠連接並使用以太坊應用程式。 +- **質押** - 使用者可以直接透過錢包質押。 +- **兌換** - 使用者可以透過錢包兌換代幣。 +- **多鏈網路** - 你的錢包預設支援使用者存取多個區塊鏈網路。 +- **二層網路** - 你的錢包預設支援使用者存取二層網路。 +- **自訂燃料費** - 你的錢包允許使用者自訂其交易燃料費(基本費用、優先費和最高費用)。 +- **支援以太坊名稱服務** - 你的錢包允許使用者傳送交易到 ENS 名稱。 +- **支援 ERC-20** - 你的錢包允許使用者匯入 ERC-20 代幣合約,或自動查詢並顯示 ERC-20 代幣。 +- **購買加密貨幣** - 你的錢包支援使用者直接購買和操作加密貨幣。 +- **以法幣出售** - 你的錢包支援使用者以法幣出售加密貨幣,並直接以法幣提款到銀行卡或銀行帳戶。 +- **多重簽名** - 你的錢包支援多重簽名來簽署交易。 +- **社交恢復** - 你的錢包支援守護人功能,當使用者遺失了種子助記詞,可以透過守護人來恢復他們的錢包。 +- **專屬支援團隊** - 你的錢包擁有專屬的支援團隊,使用者遇到問題時可以向該團隊尋求協助。 +- **教育資源/文件** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 + +## 新增錢包 {#adding-a-wallet} + +如果你想向 ethereum.org 新增錢包,請在 GitHub 上建立一個議題。 + + + 建立一個議題 + + +## 維護 {#maintenance} + +由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: + +- 確保上架的所有錢包和去中心化應用程式仍符合我們的標準 +- 驗證建議的產品不比目前列出的產品更符合我們的標準 + +ethereum.org 由開源社群維護,我們依靠社群來助其保持最新狀態。 如果你發現有任何關於上架錢包的資訊需要更新,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=wallet+%3Apurse%3A&template=suggest_wallet.yaml)或[拉取請求](https://github.com/ethereum/ethereum-org-website/pulls)! + + +## 使用條款 {#terms-of-use} + +另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/content-resources/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/content-resources/index.md new file mode 100644 index 00000000000..51cc723e439 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/content-resources/index.md @@ -0,0 +1,32 @@ +--- +title: 添加內容資源 +lang: zh-tw +description: 我們在 ethereum.org 上列出內容資源的標準 +--- + +# 添加內容資源 {#adding-content-resources} + +我們無法涵蓋所有有關以太坊的內容,所以我們會嘗試展示一些由社群建立的出色的文章、使用教學、電子報、工作展示板,和各式內容資源。 這些資源通常為使用者可能感興趣的主題提供更深入的資訊。 + +如果這裡有你感到應該新增到頁面的一份內容資源,請隨時在適合的地方提出建議。 + +## 我們是如何決策的 {#how-we-decide} + +學習資源將按照以下標準評估: + +- 內容是最新的嗎? +- 內容是否需要付費? +- 資訊準確嗎? 它是根據客觀事實,還是根據主觀意見? +- 作者可信嗎? 他們會引用文本出處麼? +- 這份內容是否提供了現存資源/連結沒有的獨特價值? +- 這份內容是否服務於我們其中一部分[使用者](https://www.notion.so/efdn/Ethereum-org-User-Persona-Memo-b44dc1e89152457a87ba872b0dfa366c)? + +--- + +## 新增你的內容資源 {#add-your-content-resource} + +如果你想將內容資源新增至 ethereum.org 並且它符合標準,請在 GitHub 上建立一個議題。 + + + 創建一個議題 + diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/design/adding-design-resources/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/design/adding-design-resources/index.md new file mode 100644 index 00000000000..60fce770821 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/design/adding-design-resources/index.md @@ -0,0 +1,69 @@ +--- +title: 新增設計資源 +description: 確保 ethereum.org 上設計材料品質的指南和要求 +lang: zh-tw +--- + +# 新增設計資源 {#adding-design-resources} + +任何人都可以為 [web3 頁面中的設計和使用者體驗區域](/developers/docs/design-and-ux/)建議新的設計材料。 + +請注意本頁面的重點,是為有抱負的 web3 設計師提供使用者價值。 設計部分不是為了宣傳你的服務、產品或平台。 + +為確保我們維持高標準的資訊並推廣有價值的見解,我們制定了上架政策: + +## 研究和儀表板 {#Research-studies} + +1. 健全的方法論 + +a. 方法應明確定義如何收集資料。 + +b. 應說明研究參與人數。 + +c. 應描述所採用的研究方法。 + +2. 與 Web3 設計師和常見設計用例的相關性 + +a. 研究主題應該與 web3 設計師相關,並處理常見的設計用例。 + +3. 專注於提供見解 + +a. 文本的主要目標應為分享見解,而非宣傳特定專案或公司。 + +## 文章 {#Articles} + +1. 與 Web3 設計師/研究人員和常見 Web3 設計用例的相關性 + +a. 文章主題應該與 web3 設計師和研究人員有關,並專注於常見的 web3 設計用例。 + +2. 基本寫作品質 + +a. 文章應沒有語法和拼字錯誤。 + +b. 重點應放在提供關鍵見解和學習。 + +c. 寫作應簡明扼要。 + +3. 文本的目標 + +a. 文章主要目標應為分享見解,而非宣傳特定專案或公司。 + +## 社群/去中心化自治組織 {#Communities-and-DAOs} + +1. 網站必須清楚說明如何加入去中心化自治組織/社群 + +2. 成為會員的明確益處 + +a. 應把成為會員的益處顯著展示。 + +**範例**:收到工作回饋、獲得工作機會或懸賞、分享設計和研究見解。 + +3. Discord 上積極活躍溝通 + +a. Discord 社群應展現活躍且積極的溝通。 + +b. 版主應積極參與維護社群並促進討論。 + +c. 社群應展示過去兩週內有價值及成果的討論記錄。 + +透過遵守這些標準,我們目標是在社群內營造一個充滿生氣和知識共享的環境。 我們相信,該白名單政策將確保我們的使用者能夠存取可靠、相關且富有見解的資源。 感謝你的理解與合作,以維護我們平台的內容品質。 diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/quizzes/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/quizzes/index.md new file mode 100644 index 00000000000..6ddd4ba5e77 --- /dev/null +++ b/public/content/translations/zh-tw/28) Contributing 2/contributing/quizzes/index.md @@ -0,0 +1,62 @@ +--- +title: 新增測驗 +description: 向 ethereum.org 新增測驗時使用的政策 +lang: zh-tw +--- + +# 測驗 {#quizzes} + +測驗讓使用者有機會測試自己,是否理解剛剛閱讀的頁面內容。 問題只應基於頁面上提供的內容,而不應問及頁面上未提供的資訊。 + +問題結構如下。 問題提示、1 個正確答案以及為什麼正確的解釋、3 個錯誤答案以及為什麼錯誤的解釋。 + +一些現有測驗的範例可以在下面找到: + +- [二層網路](/layer-2) +- [非同質化代幣](/nft/) +- [什麼是以太坊?](/what-is-ethereum/) +- [什麼是以太幣?](/eth/) + +## 新增學習測驗 + +如果有頁面尚未建立學習測驗,請為其[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)。 + +請提供以下資訊: + +- 你想新增測驗的頁面 +- 包含以下資訊的 5 個問題: + - 問題所依據的頁面內容 + - 問題提示 + - 1 個正確答案以及為什麼正確的解釋 + - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 + +## 新增測驗問題 + +如果你想將一個問題新增到測驗的問題庫中,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)並提供以下資訊: + +- 你想新增測驗問題的頁面 +- 對於每個問題,請提供以下資訊: + - 問題所依據的頁面內容 + - 問題提示 + - 1 個正確答案以及為什麼正確的解釋 + - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 + +## 更新測驗問題 + +如果你想在測驗的問題庫中更新問題,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)並提供以下資訊: + +- 你想更新測驗問題的頁面 +- 對於每個更新的問題,請提供以下資訊: + - 問題所依據的頁面內容 + - 你想更新問題的問題提示 + - 更新的問題提示 + - 1 個正確答案以及為什麼正確的解釋 + - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 + +## 刪除測驗問題 + +如果頁面上和問題相關的內容不再存在並且需要刪除問題,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)以刪除測驗問題並提供以下資訊: + +- 你想刪除測驗問題的頁面 +- 你想刪除的問題 +- 如必要,請解釋為什麼應刪除該問題 diff --git a/public/content/translations/zh-tw/about/index.md b/public/content/translations/zh-tw/about/index.md new file mode 100644 index 00000000000..c078a882609 --- /dev/null +++ b/public/content/translations/zh-tw/about/index.md @@ -0,0 +1,127 @@ +--- +title: 關於我們 +description: 有關 ethereum.org 的團隊,社群以及目標 +lang: zh-tw +--- + +# 關於 ethereum.org {#about-ethereumorg} + +ethereum.org 是一個屬於以太坊社群的開放原始碼資源,所有人都可貢獻一己之力。 我們有一個小型核心團隊致力於維護和開發網站,也有全球數千名社群成員做出貢獻。 + +## 有關名字的說明 {#a-note-on-names} + +人們常常混淆以太坊領域的名稱,這可能會導致人們難以理解以太坊的運作方式。 這裡有簡明解釋作釐清: + +### 以太坊 {#ethereum} + +以太坊是一個公共網路、區塊鏈和開放原始碼協議 — 由數以萬計的開發者、節點營運者、以太幣持有者和使用者運營、治理、管理和擁有組成的全球社群。 + +[有關以太坊的更多資訊](/what-is-ethereum/) + +[有關以太坊治理的更多資訊](/governance/) + +### 以太幣 (ETH) {#ether-or-eth} + +以太幣(其代碼也稱為 ETH)是在以太坊上交易的原生貨幣。 使用以太坊網路需要 ETH 來支付費用(以交易費的形式)。 透過質押 ETH,也可用於保護以太坊網路安全。 當人們談論以太坊的價格時,他們指的是 ETH 這種資產。 + +[有關以太幣的更多資訊](/eth/) + +[有關質押以太幣的更多資訊](/staking/) + +### 以太坊基金會 {#ethereum-foundation} + +最初由 ETH 眾籌融資的非營利組織,致力於支持以太坊網路和生態系統。 + +[有關以太坊基金會的更多資訊](/foundation/) + +### ethereum.org {#ethereum-org} + +為以太坊社群提供的開放原始碼網站和教育資源。 ethereum.org 由以太坊基金會資助的一個小型核心團隊領導,並得到全球數千名社群成員做出貢獻。 + +此頁面涵蓋有關 ethereum.org 的更多資訊。 + +## 我們的使命 {#our-mission} + +**ethereum.org 的使命是成為日益增長的以太坊社群的最佳入口網站。** + +為了幫助新的使用者熟悉以太坊與它的核心概念,我們努力打造一個淺顯易懂的教育資源,涵蓋所有與以太坊有關的主題。 我們希望: + +- 向新人介紹以太坊這個新科技 +- 幫助新成員著手使用 ETH 和以太坊 +- 幫助新的開發者起步 +- 報導以太坊世界的新聞 +- 展示我們的社群所創造的資源 +- 儘可能用多種語言散佈以太坊的相關知識 + +欲達成此使命,我們的團隊著重於 ethereum.org 的兩個主要目標: + +### 1. 改善 ethereum.org 的使用者體驗 {#visitors} + +- 延伸、改善及持續更新內容 +- 透過本地化和網路開發最佳案例來改善可用性和可存取性 +- 透過調查、測驗和 Web3 整合來提升使用者的參與度 +- 保持網站輕量與高效 + +### 2. 賦權貢獻者社群並使其成長與茁壯 {#community} + +- 增加網站貢獻者的總數 +- 透過參與、致謝和酬勞提高貢獻者的留存率。 +- 賦權社群成員,使他們做出越來越重要的貢獻 +- 促進貢獻的多樣性:程式碼、内容、設計、翻譯、修改 +- 持續更新程式庫,使其保持簡潔並有據可查 + +## 核心原則 {#core-principles} + +我們踐行一些核心原則,幫助並引導我們完成使命。 + +### 1. ethereum.org 是以太坊的入口網站 🌏 {#core-principles-1} + +我們想要激發使用者的興趣和解答他們的問題。 所以我們的入口網站要組合信息與「芝麻開門的時刻」以及現有的社區內傑出資源的鏈結。 我們的目的不是成為大量已有資源的替代品,而是作爲一個「新手教學」內容。 我們致力於支持與整合社群所建的資源,讓更多人發現和看到他們。 [以太坊的社群](/community/)便處於這一切的中心,我們不只是為之服務,更要與他們協作並納入其意見回饋。 這個網站不只是屬於現有社群,它更是屬於我們希望將來歡迎的新成員。 我們必須銘記,我們的社群是國際化的,包含著來自不同語言、地區和文化的人。 + +### 2. ethereum.org 不停演進 🛠 {#core-principles-2} + +以太坊及其社群也在不斷演進, 所以 ethereum.org 也是。 這也正造就了這個網站的簡單設計與模組化結構。 我們依據人們的使用習慣和社群的需求反覆對網站做出改變。 我們開放原始碼平台擁有著一群卓越的貢獻者,因此任何人都可以提出改變或者提供協助。 [了解如何貢獻](/contributing/) + +### 3. ethereum.org 不是典型的產品網站 🦄 {#core-principles-3} + +以太坊是一個非常大的專案:它囊括了一個社群,一種科技,一套全新的理念等。 這意味著網站需要處理許多不同的使用者旅程,從「需要特定工具的開發者」到「剛購買了一些以太幣但不知道錢包是什麽的新手」。 「什麼才是當之無愧的區塊鏈最佳平台?」一直都是個尋求解答的問題——我們便是先趨。 付諸實踐才能看到答案。 + +## 產品開發藍圖 {#roadmap} + +爲了使我們的工作更加易於存取,並促進更多社群合作,ethereum.org 核心團隊發佈了一份季度開發藍圖目標的概述。 + +[查看我們的 2024 年第三季產品開發藍圖](https://github.com/ethereum/ethereum-org-website/issues/13399) + +**這聽起來怎麽樣?**我們始終感謝對我們開發藍圖提出的意見回饋——如果你認爲我們有某些方面需要改善,請告訴我們! 我們歡迎來自社群中任何人的想法和提取請求。 + +**想要參與?**[瞭解更多有關貢獻的資訊](/contributing/),[在 X(前身為 Twitter)上聯係我們](https://twitter.com/ethdotorg),或者加入我們在 [ Discord 服務器](https://discord.gg/ethereum-org)上的社群討論。 + +## 設計理念 {#design-principles} + +我們利用一組重要[設計原則](/contributing/design-principles/)來指引這個網站的內容創作及決策。 + +## 設計系統 {#design-system} + +我們構建並發佈了一個[設計系統](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System?node-id=0%3A1&t=QBt9RkhpPqzE3Aa6-1),以加快功能上綫的速度,並讓社群成員參與 ethereum.org 的開放設計。 + +想要參與?[在 Figma 中追隨 ](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System) [GitHub 問題](https://github.com/ethereum/ethereum-org-website/issues/6284) 並加入我們在 [#design Discord 頻道](https://discord.gg/ethereum-org)中的討論。 + +## 設計指南 {#style-guide} + +我們有一個[設計指南](/contributing/style-guide/)來標準化某方面的寫作內容,以使貢獻過程更加暢順。 + +如果你想[為網站做出貢獻](/contributing/),請確認你已閱讀[我們的原則](/contributing/design-principles/)和[我們的設計指南](/contributing/style-guide/)。 + +歡迎對我們的設計原則、設計系統和設計指南提供意見回饋。 請記住,ethereum.org 來自社群,服務社群。 + +## 證照 {#license} + +除非另有説明,ethereum.org 是一個開放原始碼網站,並基於[ MIT 證照](https://github.com/ethereum/ethereum-org-website/blob/dev/LICENSE)構建。 更多有關 ethereum.org [使用條款](/terms-of-use/)的資訊。 + +## 空缺職位 {#open-jobs} + +雖然此為開放原始碼網站且任何人能在此自由貢獻,我們依舊需要一熱誠工作團隊致力於 ethereum.org 及其他以太坊基金會網頁專案。 + +我們將公告任何開放職位於此。 如果您找不到適合的職位,請移駕至[我們的 Discord 伺服器](https://discord.gg/ethereum-org)並讓我們知道你想加入我們! + +想加入 ethereum.org 團隊嗎? [歡迎查看其他以太坊相連職位](/community/get-involved/#ethereum-jobs/)。 diff --git a/public/content/translations/zh-tw/community/get-involved/index.md b/public/content/translations/zh-tw/community/get-involved/index.md index 5c12f88912e..e502f7648f7 100644 --- a/public/content/translations/zh-tw/community/get-involved/index.md +++ b/public/content/translations/zh-tw/community/get-involved/index.md @@ -15,15 +15,17 @@ lang: zh-tw - 造訪 [ethereum.org/developers/](/developers/),瞭解和嘗試使用以太坊 - 參加你附近的 [ETHGlobal](http://ethglobal.co/) 駭客松活動。 - 留意[與你的專業領域或偏好的編程語言有關的專案](/developers/docs/programming-languages/) -- 觀看或參與[核心開發者會議](https://www.youtube.com/@EthereumProtocol) +- 觀看或參與[共識層與執行層的會議](https://www.youtube.com/@EthereumProtocol/streams) - [以太坊生態系統支持計劃願望清單](https://esp.ethereum.foundation/wishlist/) - 以太坊生態系統支持計劃正積極尋找工具、文件和基礎設施領域的資助申請 - [Web3Bridge](https://www.web3bridge.com/) - 加入有抱負的 Web3 社群,一起積極尋找、培訓和支持整個非洲數百名開發人員和社群成員 +- 加入[以太坊研發 Discord](https://discord.com/invite/VmG7Uxc) - 加入[以太坊牧貓人組織的 Discord](https://discord.com/invite/Nz6rtfJ8Cu) ## 研究人員和學術工作者 {#researchers-and-academics} 你有數學、虛擬貨幣或者經濟學相關的學術背景嗎? 你可能會對以太坊生態中的一些前線工作有興趣。 +- 加入[以太坊研發 Discord](https://discord.com/invite/VmG7Uxc) - 撰寫或審查以太坊改進提案 - 撰寫以太坊改進提案 1. 將你的想法提交至[以太坊魔法師協會](https://ethereum-magicians.org) @@ -38,7 +40,7 @@ lang: zh-tw - [Ethresear.ch](https://ethresear.ch) - 以太坊為研究而設的主要論壇,同時也是加密貨幣經濟學在世界上最有影響力的論壇。 - [以太坊基金會研究線上問答](https://old.reddit.com/r/ethereum/comments/vrx9xe/ama_we_are_ef_research_pt_8_07_july_2022) - 由研究人員提供的問答系列。 當下階段開放時,任何人都可以提出問題。 - [生態系統支援計劃的願望清單](https://esp.ethereum.foundation/wishlist/) - 以太坊生態系統支援計劃正在積極籌備資助申請的領域 -- [AllWalletDevs](https://allwallet.dev) - 讓以太坊開發者、設計師和有興趣的使用者,定期聚到一起並討論錢包的論壇 +- [AllWalletDevs](https://allwallet.dev) - 讓以太坊開發者、設計師和有興趣的使用者,定期聚在一起並討論錢包的論壇 [探索更多活躍的研究領域](/community/research/)。 diff --git a/public/content/translations/zh-tw/community/grants/index.md b/public/content/translations/zh-tw/community/grants/index.md index a0b477aa41b..1133d58cfba 100644 --- a/public/content/translations/zh-tw/community/grants/index.md +++ b/public/content/translations/zh-tw/community/grants/index.md @@ -33,7 +33,7 @@ lang: zh-tw - [SKALE 網路資助計劃](https://skale.space/developers#grants) - _[SKALE 網路](https://skale.space/)生態系統_ - [Swarm 基金會資助計劃](https://my.ethswarm.org/grants) - _[Swarm 基金會](https://www.ethswarm.org/)生態系統_ - [The Graph](https://thegraph.com/ecosystem/grants/) – _[The Graph](https://thegraph.com/) 生態系統_ -- [Uniswap 資助計劃](https://www.uniswapfoundation.org/grants) – _[Uniswap](https://uniswap.org/) 社群_ +- [Uniswap 資助計劃](https://www.uniswapfoundation.org/approach) – _[Uniswap](https://uniswap.org/) 社群_ ## 二次融資 {#quadratic-funding} diff --git a/public/content/translations/zh-tw/community/language-resources/index.md b/public/content/translations/zh-tw/community/language-resources/index.md index e2428e66462..7923de44574 100644 --- a/public/content/translations/zh-tw/community/language-resources/index.md +++ b/public/content/translations/zh-tw/community/language-resources/index.md @@ -91,6 +91,24 @@ Ethereum.org 已翻譯為 40 多種語言,你可以透過我們的語言選擇 - [Microsoft Learn(以太坊網路)](https://docs.microsoft.com/de-de/learn/modules/blockchain-ethereum-networks/)- 連接並部署以太坊網路 - [Microsoft Learn(區塊鏈)](https://docs.microsoft.com/de-de/learn/paths/ethereum-blockchain-development/)- 進入區塊鏈開發 +### 希伯來文 {#he} + +- [Udi Wertheimer - 比特幣愛好者可以從以太坊學到什麼](https://www.cryptojungle.co.il/udi-wertheimer-what-bitcoiners-can-learn-from-ethereum/) +- [Omer Greismen (OpenZeppelin) - 我們如何防止 150 億美元的智慧型合約遭到駭客攻擊](https://www.cryptojungle.co.il/omer-greisman-openzeppelin/) +- [Shy Datika (INX) - 代幣化和證券的未來,內容包括「以太坊是一種證券嗎」](https://www.cryptojungle.co.il/shy-datika-tokenization/) +- [Roy Confino (Lemonade) - 以太坊保險](https://www.cryptojungle.co.il/roy-confino-insurance/) +- [Idan Ofrat (Fireblocks) - 機構採用](https://www.cryptojungle.co.il/idan-ofrat-fireblocks/) +- [Gal Weizman (MetaMask) - 什麼是 MetaMask](https://www.cryptojungle.co.il/gal-weizman-metamask/) +- [Dror Aviely (Consensys) - 以太坊的中心](https://www.cryptojungle.co.il/dror-aviely-ethereum-center/) +- [Nir Rozin - 成為加密龐克](https://www.cryptojungle.co.il/nir-rozin-cryptopunk/) +- [Adan Kedem - 遊戲與元宇宙](https://www.cryptojungle.co.il/adan-kedem-web3-gaming/) +- [Uri Kolodny (Starkware) - 以太坊與區塊鏈分層](https://www.cryptojungle.co.il/uri-kolodny-starkware/) +- [Udi Wertheimer - 以太坊 2.0 與競爭對手](https://www.cryptojungle.co.il/udi-on-eth2/) +- [Ben Samocha(本從) - 以太坊 2.0 是機會嗎?](https://www.cryptojungle.co.il/etherurm2-week-summary/) +- [Alon Muroch (Bloxstake) - 什麼是以太坊 2.0?](https://www.cryptojungle.co.il/alon-moroch-eth2/) +- [Eilon Aviv (Collider Ventures) - 以太坊 2.0 可能會出現哪些問題](https://www.cryptojungle.co.il/eilon-aviv-eth2-0/) +- [Eilon Aviv (Collider Ventures) - 為什麼我們需要以太坊 2.0](https://www.cryptojungle.co.il/eilon-aviv-ethereum-2-0/) + ### 義大利語 {#it} - [Ethereum Italia](https://www.ethereum-italia.it/) - 提供以太坊教育資源、活動和新聞,專注於智慧型合約和區塊鏈技術 @@ -99,9 +117,19 @@ Ethereum.org 已翻譯為 40 多種語言,你可以透過我們的語言選擇 - [Microsoft Learning(智慧型合約)](https://docs.microsoft.com/it-it/learn/modules/blockchain-solidity-ethereum-smart-contracts/)- 學習用 Solidity 撰寫智慧型合約 - [Microsoft Learn(去中心化應用程式)](https://docs.microsoft.com/it-it/learn/modules/blockchain-create-ui-decentralized-apps/)- 使用去中心化應用程式建立使用者介面 +### 日語 {#ja} + +- [日本網路和虛擬貨幣資產交易組織](https://jvcea.or.jp/) +- [日本虛擬資產商業組織](https://cryptocurrency-association.org/) +- [區塊鏈開發入門 - 學習 | 微軟文件](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - 該學習路徑將向你介紹以太坊平台上的區塊鏈和發展 +- [精通以太坊](https://www.oreilly.co.jp/books/9784873118963/) - 日語版《精通以太坊》 +- [手把手教你使用 Solidity 和以太坊制訂智慧型合約](https://www.oreilly.co.jp/books/9784873119342/) - 日語版《手把手教你使用 Solidity 和以太坊制訂智慧型合約》 + ### 俄語 {#ru} - [Cyber Academy](https://cyberacademy.dev) -Web3 建造者的教育空間 +- [Forklog](https://forklog.com) - 有關一般加密貨幣、不同區塊鏈的現有技術和未來升級的新聞和教育文章 +- [BeInCrypto](https://ru.beincrypto.com) - 新聞、加密貨幣價格分析以及非技術文章,通俗易懂地講解有關加密貨幣的所有內容 ### 西班牙語 {#es} @@ -123,11 +151,3 @@ Ethereum.org 已翻譯為 40 多種語言,你可以透過我們的語言選擇 - [Tino Group](https://wiki.tino.org/ethereum-la-gi/) - 以太坊、去中心化應用程式、錢包和常見問題的概述 - [Tap Chi Bitcoin](https://tapchibitcoin.io/tap-chi/tin-tuc-ethereum-eth) - 以太坊新聞和教育子頁面的網頁平台 - [Coin68](https://coin68.com/ethereum-tieu-diem/) - 提供以太坊新聞和教育內容的加密貨幣入口網站 - -### 日語 {#ja} - -- [日本網路和虛擬貨幣資產交易組織](https://jvcea.or.jp/) -- [日本虛擬資產商業組織](https://cryptocurrency-association.org/) -- [區塊鏈開發入門 - 學習 | 微軟文件](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - 該學習路徑將向你介紹以太坊平台上的區塊鏈和發展 -- [精通以太坊](https://www.oreilly.co.jp/books/9784873118963/) - 日語版《精通以太坊》 -- [手把手教你使用 Solidity 和以太坊制訂智慧型合約](https://www.oreilly.co.jp/books/9784873119342/) - 日語版《手把手教你使用 Solidity 和以太坊制訂智慧型合約》 diff --git a/public/content/translations/zh-tw/community/research/index.md b/public/content/translations/zh-tw/community/research/index.md index 0453e9de605..8f95e0f1745 100644 --- a/public/content/translations/zh-tw/community/research/index.md +++ b/public/content/translations/zh-tw/community/research/index.md @@ -1,59 +1,59 @@ --- title: 以太坊研究的活躍領域 -description: 探索不同領域的開放研究,並了解如何參與。 +description: 探索不同領域的開放研究,並瞭解如何參與。 lang: zh-tw --- # 以太坊研究的活躍領域 {#active-areas-of-ethereum-research} -以太坊的其中一個主要優勢是有活躍的研究和工程社群在持續改進它。 來自世界各地的許多熱情、有才能人們都希望能解決以太坊中的未解問題,但找出這些問題是什麼並不總是很容易。 此頁面概述了關鍵的活躍研究領域,作為以太坊前沿的粗略指南。 +以太坊的其中一個主要優勢是有活躍的研究和工程社群在持續改進以太坊。 來自世界各地的許多熱情、有才能的人們都致力於解決以太坊中的未解問題,但找出這些問題有時並不容易。 此頁面概述了關鍵的活躍研究領域,粗略介紹以太坊的前沿資訊。 ## 以太坊研究如何進行 {#how-ethereum-research-works} -以太坊研究是公開透明的,體現了[去中心化科研 (DeSci)](https://hackernoon.com/desci-decentralized-science-as-our-chance-to-recover-the-real-science) 的原則。 這種文化使研究工具和輸出盡可能開放且可以互動,例如通過可執行筆記本。 以太坊研究進步非常迅速,有新的發現都會在開放論壇(如 [ethresear.ch](https://ethresear.ch/))上發文和討論,而非經過多輪同行評審後,再透過傳統出版物傳達給社群。 +以太坊研究是公開透明的,體現了 [去中心化科研 (DeSci)](https://hackernoon.com/desci-decentralized-science-as-our-chance-to-recover-the-real-science) 的原則。 這種文化使研究工具和產出盡可能開放且可以互動,例如透過可執行筆記本達成此目的。 以太坊研究進步非常迅速,新的發現都會在開放論壇如 [ethresear.ch](https://ethresear.ch/) 上發文和討論,而非經過多輪同行評審後,再透過傳統出版物傳達給社群。 -## 通用研究資源 {#general-research-resources} +## 一般研究資源 {#general-research-resources} -不論是哪個特定主題,在 [ethresear.ch](https://ethresear.ch) 和[以太坊研發 Discord 頻道](https://discord.gg/qGpsxSA)都能獲得大量關於以太坊研究的資訊。 這些是以太坊研究者討論最新想法和發展機會的主要場所。 +不論是哪個特定主題,在 [ethresear.ch](https://ethresear.ch) 和 [以太坊研發 Discord 頻道](https://discord.gg/qGpsxSA) 都能獲得大量關於以太坊研究的資訊。 這些是以太坊研究者討論最新想法和開發機會的主要場所。 -這份由 [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) 在 2022 年 5 月發佈的報告詳細地介紹了以太坊路線圖。 +這份由 [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) 在 2022 年 5 月發佈的報告詳細地介紹了以太坊開發藍圖。 -## 募資來源 {#sources-of-funding} +## 資金來源 {#sources-of-funding} -你可以參與以太坊研究並獲得報酬! 舉例來說,[以太坊基金會](/foundation/)最近舉行了[學術募資輪](https://esp.ethereum.foundation/academic-grants)。 你可以在[以太坊資助頁面](/community/grants/)找到有關目前和即將到來的募資機會的資訊。 +你可以參與以太坊研究並獲得報酬! 舉例來說,[以太坊基金會](/foundation/) 最近舉行了 [一輪學術募資](https://esp.ethereum.foundation/academic-grants)。 你可以在 [以太坊資助頁面](/community/grants/) 找到有關目前和即將到來的募資機會的資訊。 -## 協議研究 {#protocol-research} +## 協定研究 {#protocol-research} -協議研究涉及以太坊的基礎層 - 定義了如何連接節點、通訊、交換和儲存以太坊資料,並就區塊鏈狀態達成共識的一組規則。 協議研究分為兩大類別:共識和執行。 +協定研究涉及以太坊的基礎層 - 定義了節點如何連線、通訊、交換和儲存以太坊資料,並就區塊鏈狀態達成共識的一組規則。 協定研究分為兩大類別:共識和執行。 ### 共識 {#consensus} -共識研究涉及[以太坊權益證明機制](/developers/docs/consensus-mechanisms/pos/)。 一些共識機制的研究主題如下: +共識研究涉及 [以太坊權益證明機制](/developers/docs/consensus-mechanisms/pos/)。 一些共識研究主題如下: - 識別和修復漏洞; - 量化加密經濟安全; -- 提高用戶端實現的安全性或性能; +- 提高用戶端實作的安全性或效能; - 以及開發輕量用戶端。 -除了前瞻性研究外,以太坊也在研究如何重新設計一些基本協議,例如單時隙最終性,以實現以太坊的重大改進。 此外,效率、安全和監控共識用戶端之間的點對點網路也是重要的研究課題。 +除了前瞻性研究外,以太坊也在研究如何重新設計一些基本協定,例如單一時隙最確定性,以實作以太坊的重大改進。 此外,效率、安全和監控共識用戶端之間的點對點網路也是重要的研究課題。 #### 背景介紹讀物 {#background-reading} - [權益證明簡介](/developers/docs/consensus-mechanisms/pos/) - [Casper-FFG paper](https://arxiv.org/abs/1710.09437) -- [解釋 Casper-FFG 如何運作](https://arxiv.org/abs/1710.09437) -- [Gasper paper](https://arxiv.org/abs/2003.03052) +- [Casper-FFG 說明](https://arxiv.org/abs/1710.09437) +- [Gasper 論文](https://arxiv.org/abs/2003.03052) #### 近期研究 {#recent-research} - [Ethresear.ch 共識](https://ethresear.ch/c/consensus/29) -- [可用性/最終性兩難問題](https://arxiv.org/abs/2009.04987) +- [可用性/最終確定性兩難問題](https://arxiv.org/abs/2009.04987) - [單一時隙最終確定性](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) - [提交者-建置者分離](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) ### 執行 {#execution} -執行層負責執行交易,運行[以太坊虛擬機](/developers/docs/evm/),以及產生有效負載以傳遞給共識層。 活躍的研究領域有很多,包括: +執行層負責執行交易,運行 [以太坊虛擬機 (EVM)](/developers/docs/evm/),以及產生執行有效負載以傳遞給共識層。 活躍的研究領域有很多,包括: - 發展輕量用戶端支援; - 研究燃料限制; @@ -66,65 +66,65 @@ lang: zh-tw #### 近期研究 {#recent-research-1} -- [資料庫最優化](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) +- [資料庫最佳化](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) - [狀態過期](https://notes.ethereum.org/@vbuterin/state_expiry_eip) - [狀態過期的路徑](https://hackmd.io/@vbuterin/state_expiry_paths) -- [Verkel 和狀態過期提案](https://notes.ethereum.org/@vbuterin/verkle_and_state_expiry_proposal) +- [沃克爾樹和狀態過期提案](https://notes.ethereum.org/@vbuterin/verkle_and_state_expiry_proposal) - [歷史紀錄管理](https://eips.ethereum.org/EIPS/eip-4444) - [沃克爾樹](https://vitalik.eth.limo/general/2021/06/18/verkle.html) - [資料可用性取樣](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) ## 用戶端開發 {#client-development} -以太坊用戶端是以太坊協議的實現。 用戶端開發將協議研究的成果構建於用戶端中,以實現這些成果。 用戶端開發包括了更新用戶端規範和建構特定實現。 +以太坊用戶端是以太坊協定的協定。 用戶端開發將協定研究的成果建置於用戶端中,以實作這些成果。 用戶端開發包括了更新用戶端規範和建置特定實作。 -以太坊節點需要運行兩個軟體: +以太坊節點需要執行兩個軟體: -1. 持續追蹤區塊鏈頭部、流言區塊和處理共識邏輯的共識用戶端 +1. 能夠追蹤區塊鏈頭部、廣播區塊以及處理共識邏輯的共識用戶端 2. 支援以太坊虛擬機和執行交易及智慧型合約的執行用戶端 -查看[節點及用戶端頁面](/developers/docs/nodes-and-clients/)以獲得關於節點和用戶端的詳細資訊,以及所有當前用戶端實現的列表。 你也可以在[歷史紀錄頁面](/history/)找到以太坊所有的歷史升級紀錄。 +查看 [節點及用戶端頁面](/developers/docs/nodes-and-clients/) 以獲得關於節點和用戶端的詳細資訊,以及所有目前用戶端實作的清單。 你也可以在 [歷史紀錄頁面](/history/) 找到以太坊的所有升級的歷史紀錄。 ### 執行用戶端 {#execution-clients} - [執行用戶端規範](https://github.com/ethereum/execution-specs) -- [執行 API 規範](https://github.com/ethereum/execution-apis) +- [執行應用程式介面規範](https://github.com/ethereum/execution-apis) ### 共識用戶端 {#consensus-clients} - [共識用戶端規範](https://github.com/ethereum/consensus-specs) - [信標應用程式介面規範](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) -## 擴容與性能 {#scaling-and-performance} +## 擴容與效能 {#scaling-and-performance} -擴容以太坊是以太坊研究者關注的重大領域。 目前的方法包括了將交易卸載到卷軸上,以及透過資料二進位大型物件讓它們儘可能便宜。 以太坊擴容的相關介紹可以在我們的[擴容頁面](/developers/docs/scaling)查看。 +擴容以太坊是以太坊研究者關注的重大領域。 目前的方法包括將交易轉移到卷軸上,以及透過資料二進位大型物件讓交易儘可能便宜。 擴容以太坊的相關介紹可以在 [擴容頁面](/developers/docs/scaling) 查看。 -### 第二層 {#layer-2} +### 二層網路 {#layer-2} -目前有許多使用不同技術以擴容以太坊的二層網路協議,以在一層網路上實現批量交易並保護交易。 這是個快速發展的主題,且有很大的研究及開發潛力。 +目前有多種二層網路協定透過使用不同技術在一層網路上實現批量交易並確保交易,來擴容以太坊。 這是個快速發展的主題,且有很大的研究及開發潛力。 #### 背景介紹讀物 {#background-reading-2} - [二層網路簡介](/layer-2/) -- [Polynya:卷軸、數據可用性和模組化鏈](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) +- [Polynya:卷軸、資料可用性和模組化鏈](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) #### 近期研究 {#recent-research-2} -- [Arbitrum 的排序者公平排序](https://eprint.iacr.org/2021/1465) +- [排序者的 Arbitrum 公平排序](https://eprint.iacr.org/2021/1465) - [ethresear.ch 二層網路](https://ethresear.ch/c/layer-2/32) -- [卷軸導向的路線圖](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) +- [以卷軸為中心的開發藍圖](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) - [L2Beat](https://l2beat.com/) ### 跨鏈橋 {#bridges} -二層網路需要更多研究和開發的一個特別領域是安全有效的跨鏈橋。 這包含了各種二層網路之間的跨鏈橋,以及一層網路和二層網路之間的跨鏈橋。 這是一個特別重要的研究領域,因為跨鏈橋常被駭客瞄準。 +二層網路需要更多研究和開發的一個特別領域是安全有效的跨鏈橋。 這包含了各種二層網路之間的跨鏈橋,以及一層網路和二層網路之間的跨鏈橋。 這是一個特別重要的研究領域,因為跨鏈橋通常是駭客的攻擊目標。 #### 背景介紹讀物 {#background-reading-3} - [區塊鏈跨鏈橋簡介](/bridges/) - [Vitalik 討論跨鏈橋](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) - [區塊鏈跨鏈橋文章](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) -- [跨鏈橋中鎖定之資金](https://dune.com/eliasimos/Bridge-Away-(from-Ethereum)) +- [跨鏈橋中鎖定之資金](https://dune.com/eliasimos/Bridge-Away-\(from-Ethereum\)) #### 近期研究 {#recent-research-3} @@ -132,7 +132,11 @@ lang: zh-tw ### 分片 {#sharding} -以太坊區塊鏈分片一直在開發路線圖上。 然而,新的擴容解決方案如「Danksharding」正是目前的焦點。 +以太坊區塊鏈分片一直都是開發藍圖的一部分。 然而,新的擴容解決方案如「Danksharding」正是目前的焦點。 + +全面 Danksharding 的前身稱為 Proto-Danksharding,已隨著 Cancun-Deneb(「坎昆」)網路升級上線。 + +[更多有關坎昆升級的資訊](/roadmap/dencun/) #### 背景介紹讀物 {#background-reading-4} @@ -143,28 +147,28 @@ lang: zh-tw #### 近期研究 {#recent-research-4} -- [EIP-4844:Proto-Danksharding](https://eips.ethereum.org/EIPS/eip-4844) +- [EIP-4844: Proto-Danksharding](https://eips.ethereum.org/EIPS/eip-4844) - [Vitalik 討論分片與資料可用性取樣](https://hackmd.io/@vbuterin/sharding_proposal) ### 硬體 {#hardware} -在最普通的硬體上[運行節點](/developers/docs/nodes-and-clients/run-a-node/)是使以太坊保持去中心化的基礎。 所以,最小化運行節點硬體需求的活躍研究是重要的研究領域。 +在普通的硬體上 [運行節點](/developers/docs/nodes-and-clients/run-a-node/) 是使以太坊保持去中心化的基礎。 所以,最大程度上降低運行節點的硬體需求的活躍研究是重要的研究領域。 #### 背景介紹讀物 {#background-reading-5} -- [Ethereum on ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) +- [ARM 架構上的以太坊](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) #### 近期研究 {#recent-research-5} -- [FPGA 上的橢圓曲線加密演算法](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) +- [FPGA 上的橢圓曲線數位簽章演算法](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) ## 安全性 {#security} -安全是個廣泛的議題,可能包含了垃圾訊息/詐騙預防、錢包安全、硬體安全、加密經濟安全、漏洞懸賞、應用程式測試和用戶端軟體及金鑰管理。 貢獻知識至這些領域將有助於加速主流採用。 +安全性是個廣泛的議題,可能包含了垃圾郵件/詐騙預防、錢包安全、硬體安全、加密經濟安全、漏洞懸賞、應用程式和用戶端軟體的偵錯和測試及金鑰管理。 貢獻這些領域的知識將有助於加速主流採用。 ### 密碼學與零知識證明 {#cryptography--zkp} -零知識證明 (ZKP) 和密碼學都對在以太坊和其應用程式上實現隱私性及安全性非常重要。 零知識證明是一個相對年輕但快速發展的領域,有許多開放研究與開發機會。 一些可能性包括開發更高效的 [Keccak 雜湊演算法](https://hackmd.io/sK7v0lr8Txi1bgION1rRpw?view#Overview)實現、找到比現存更好的多項式承諾,或降低橢圓曲線簽章演算法產生公鑰和驗證簽名邏輯的費用。 +零知識證明 (ZKP) 和密碼學都對在以太坊和其應用程式上實現隱私性及安全性非常重要。 零知識是一個相對新穎但快速發展的領域,有許多開放研究與開發機會。 一些可能的機會包括開發更高效的 [Keccak 雜湊演算法](https://hackmd.io/sK7v0lr8Txi1bgION1rRpw?view#Overview) 實作、找到比現存更好的多項式承諾,或降低產生橢圓曲線簽章演算法公鑰和簽章驗證電路的成本。 #### 背景介紹讀物 {#background-reading-6} @@ -179,26 +183,26 @@ lang: zh-tw ### 錢包 {#wallets} -以太坊錢包可以是瀏覽器插件、桌面版和手機應用程式,又或者是以太坊上的智慧型合約。 目前正在積極研究社交恢復錢包,該錢包可以降低與個人金鑰管理相關的風險。 與錢包開發相關的是研究帳戶抽象的替代形式,這是新興研究的一個重要領域。 +以太坊錢包可以是瀏覽器擴充功能、桌上型電腦和行動應用程式,又或者是以太坊上的智慧型合約。 目前正在積極研究社交恢復錢包,該錢包可以降低與個人使用者金鑰管理相關的風險。 與錢包開發相關的是研究帳戶抽象的替代形式,這是新興研究的一個重要領域。 #### 背景介紹讀物 {#background-reading-7} -- [錢包介紹](/wallets/) -- [錢包安全介紹](/security/) -- [ethresear.ch 安全](https://ethresear.ch/tag/security) +- [錢包簡介](/wallets/) +- [錢包安全簡介](/security/) +- [ethresear.ch 安全性](https://ethresear.ch/tag/security) - [EIP-2938 帳戶抽象](https://eips.ethereum.org/EIPS/eip-2938) - [EIP-4337 帳戶抽象](https://eips.ethereum.org/EIPS/eip-4337) #### 近期研究 {#recent-research-7} - [專注於智慧型合約錢包的驗證](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) -- [以太坊帳戶的未來](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [帳戶的未來](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) - [EIP-3074 AUTH 和 AUTHCALL 操作碼](https://eips.ethereum.org/EIPS/eip-3074) - [在外部帳戶地址發佈程式碼](https://eips.ethereum.org/EIPS/eip-5003) ## 社群、教育及外展 {#community-education-and-outreach} -讓新的使用者加入以太坊需要新的教育資源及外展方法。 這可能包括部落格文章、書籍、播客、迷因、教學資源活動以及任何建構社群、迎接新手及教授人們以太坊相關知識所需的資源。 +讓新的使用者加入以太坊需要新的教育資源及外展方法。 這可能包括部落格文章、書籍、播客、迷因、教學資源、活動以及任何建構社群、迎接新手及教授人們以太坊相關知識所需的資源。 ### 使用者體驗/介面 {#uxui} @@ -216,7 +220,7 @@ lang: zh-tw ### 經濟學 {#economics} -以太坊的經濟學研究主要遵循兩種方法:驗證依賴經濟激勵機制的安全性(「微觀經濟學」),以及分析協議、應用程式和使用者間的價值流動(「宏觀經濟學」)。 以太坊的原生資產(以太幣)和基於以太幣創建的代幣(例如非同質化代幣和 ERC20 代幣)之間存在著複雜的加密經濟因素。 +以太坊的經濟學研究主要遵循兩種方法:驗證依賴經濟激勵之機制的安全性(「微觀經濟學」),以及分析協定、應用程式和使用者間的價值流動(「宏觀經濟學」)。 以太坊的原生資產(以太幣)和基於以太幣建構的代幣(例如非同質化代幣和 ERC20 代幣)存在著複雜的加密經濟因素。 #### 背景介紹讀物 {#background-reading-9} @@ -226,19 +230,19 @@ lang: zh-tw #### 近期研究 {#recent-research-9} - [EIP1559 的實證分析](https://arxiv.org/abs/2201.05574) -- [循環供應量平衡](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954) +- [流通供應量平衡](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954) - [量化最大可提取價值:森林究竟有多黑暗?](https://arxiv.org/abs/2101.05511) -### 區塊空間與燃料費市場 {#blockspace-fee-markets} +### 區塊空間與費用市場 {#blockspace-fee-markets} -區塊空間市場管理最終使用者交易的納入,無論是直接在以太坊(一層網路)上還是在橋接網路上,例如卷軸(二層網路)。 在以太坊上,交易會被提交到在 EIP-1559 部署的燃料費市場,以保護鏈免於垃圾訊息及定價堵塞。 在這兩層上,交易都可能產生外部成本,如最大可提取價值 (MEV),這會導致新的市場結構抓住或管理這些外部成本。 +區塊空間市場管理最終使用者交易的納入,無論是直接在以太坊(一層網路)上還是在橋接網路上,例如卷軸(二層網路)。 在以太坊上,交易會被提交到作為 EIP-1559 部署的費用市場,以保護鏈免於垃圾郵件及定價堵塞。 在這兩層上,交易都可能產生外部效應,如最大可提取價值 (MEV),這會導致產生新的市場結構來獲取或管理這些外部效應。 #### 背景介紹讀物 {#background-reading-10} - [為以太坊區塊鏈設計的交易費機制:EIP-1559 的經濟學分析(Tim Roughgarden,2020 年)](https://timroughgarden.org/papers/eip1559.pdf) - [EIP-1559 模擬(穩健激勵群組)](https://ethereum.github.io/abm1559) -- [由第一原理(註:最基本的命題或假設,不能被省略或刪除)了解卷軸經濟](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) -- [Flash Boys 2.0:去中心化交易所的交易搶跑、交易紀錄和共識不穩定](https://arxiv.org/abs/1904.05234) +- [由第一原理瞭解卷軸經濟](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) +- [Flash Boys 2.0:去中心化交易所的交易搶跑、交易重新排序和共識不穩定性](https://arxiv.org/abs/1904.05234) #### 近期研究 {#recent-research-10} @@ -248,53 +252,53 @@ lang: zh-tw ### 權益證明激勵 {#proof-of-stake-incentives} -驗證者使用以太坊的原生資產(以太幣)作為對抗不誠實行為的抵押品。 它的加密經濟學決定了以太坊的安全性。 經驗老道的驗證者可利用激勵層的細微差別發動明確的攻擊。 +驗證者使用以太坊的原生資產(以太幣)作為對抗不誠實行為的抵押品。 其加密經濟學決定了網路的安全性。 經驗老道的驗證者可利用激勵層的細微差別發動明確的攻擊。 #### 背景介紹讀物 {#background-reading-11} - [精通以太坊經濟學課程與經濟模型](https://github.com/CADLabs/ethereum-economic-model) -- [權益證明模擬(穩健激勵群組)](https://ethereum.github.io/beaconrunner/) +- [權益證明激勵模擬(穩健激勵群組)](https://ethereum.github.io/beaconrunner/) #### 近期研究 {#recent-research-11} - [在提交者/建置者分離 (PBS) 機制下提升交易的抗審查性](https://notes.ethereum.org/s3JToeApTx6CKLJt8AbhFQ) - [權益證明以太坊上的三種攻擊方式](https://arxiv.org/abs/2110.10086) -### 流動性質押及衍生品 {#liquid-staking-and-derivatives} +### 流動性質押和衍生品 {#liquid-staking-and-derivatives} -流動性質押藉由將以太幣兌換成一種代表質押以太幣,且可以用於去中心化金融的代幣,讓持有低於 32 個以太幣的使用者也能獲得質押收益。 然而,流動性質押相關的激勵措施和市場動態仍在發掘階段,它對以太坊安全性的影響(例如中心化風險)亦然。 +流動性質押藉由將以太幣兌換成一種代表質押以太幣,且可以用於去中心化金融的代幣,讓持有低於 32 個以太幣的使用者也能獲得質押收益。 然而,流動性質押相關的激勵和市場動態仍在發掘階段,它對以太坊安全性的影響(例如中心化風險)亦然。 #### 背景介紹讀物 {#background-reading-12} - [Ethresear.ch 流動性質押](https://ethresear.ch/search?q=liquid%20staking) -- [Lido:邁向無需信任的以太坊質押之路](https://blog.lido.fi/the-road-to-trustless-ethereum-staking/) -- [Rocket Poo:質押協議介紹](https://medium.com/rocket-pool/rocket-pool-staking-protocol-part-1-8be4859e5fbd) +- [Lido:邁向去信任的以太坊質押之路](https://blog.lido.fi/the-road-to-trustless-ethereum-staking/) +- [Rocket Pool:質押協定介紹](https://medium.com/rocket-pool/rocket-pool-staking-protocol-part-1-8be4859e5fbd) #### 近期研究 {#recent-research-12} -- [處理從 Lido 提款](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-staking-protocol/8873) -- [提款證明](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) +- [處理從 Lido 提款](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-stake-protocol/8873) +- [提款憑證](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) - [流動性質押衍生品的風險](https://notes.ethereum.org/@djrtwo/risks-of-lsd) ## 測試 {#testing} -### 正式驗證 {#formal-verification} +### 形式化驗證 {#formal-verification} -正式驗證透過編寫程式碼來驗證以太坊共識規範正確無誤且沒有漏洞。 此規範有個以 Python 撰寫的可執行版本,需要維護和開發。 進一步的研究可以幫助改進 Python 對規範的實現,並新增一些能夠更穩健的驗證正確性和偵測問題的工具。 +形式化驗證透過編寫程式碼來驗證以太坊共識規範正確無誤且沒有錯誤。 此規範有個以 Python 撰寫的可執行版本,需要維護和開發。 進一步的研究可以幫助改進規範的 Python 實作,並新增一些能夠更穩健地驗證正確性和偵測問題的工具。 #### 背景介紹讀物 {#background-reading-13} -- [正式驗證介紹](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) -- [正式驗證 (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) +- [形式化驗證簡介](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) +- [形式化驗證 (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) #### 近期研究 {#recent-research-13} -- [存款合約的正式驗證](https://github.com/runtimeverification/deposit-contract-verification) -- [信標鏈規範的正式驗證](https://github.com/runtimeverification/deposit-contract-verification) +- [存款合約的形式化驗證](https://github.com/runtimeverification/deposit-contract-verification) +- [信標鏈規範的形式化驗證](https://github.com/runtimeverification/deposit-contract-verification) ## 資料科學與分析 {#data-science-and-analytics} -需要更多能夠提供以太坊活動及網路健康度詳細資訊的資料分析工具和儀表板 +需要更多能夠提供以太坊活動及網路健康度詳細資訊的資料分析工具和儀表板。 ### 背景介紹讀物 {#background-reading-14} @@ -305,27 +309,27 @@ lang: zh-tw - [穩健激勵群組資料分析](https://ethereum.github.io/rig/) -## 應用程式及專用工具 {#apps-and-tooling} +## 應用程式和工具 {#apps-and-tooling} -應用層支援多種程式生態系統,可在以太坊基礎層上結算交易。 開發團隊一直在尋找新方法,以利用以太坊創建可組合、無許可和抗審查的重要 Web2 應用程式,或創造全新的 Web3 原生概念。 於此同時,新的專用工具被開發出來,使在以太坊上建構應用程式更加簡單。 +應用層支援多種程式生態系統,可在以太坊基礎層上結算交易。 開發團隊一直在尋找新方法,以利用以太坊建立可組合、無許可和抗審查的重要 Web2 應用程式,或建立全新的 Web3 原生概念。 於此同時,新的專用工具被開發出來,使在以太坊上建構應用程式不太複雜。 -### 去中央化金融 {#defi} +### 去中心化金融 {#defi} -去中心化金融 (DeFi) 是建立在以太坊之上的主要應用程式類別之一。 去中心化金融旨在建立可組合的「貨幣樂高」,讓使用者可以透過智慧型合約儲存、轉移、出借、借用和投資加密資產。 去中心化金融是發展快速且常常更新的領域。 需要持續對安全、效率及可存取協議進行研究。 +去中心化金融 (DeFi) 是建立在以太坊之上的主要應用程式類別之一。 去中心化金融旨在建立可組合的「貨幣樂高」,讓使用者可以透過智慧型合約儲存、轉移、出借、借用和投資加密資產。 去中心化金融是發展快速且常常更新的領域。 需要持續對安全、效率及可存取協定進行研究。 #### 背景介紹讀物 {#background-reading-15} -- [去中央化金融](/defi/) +- [去中心化金融](/defi/) - [Coinbase:去中心化金融是什麼?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) #### 近期研究 {#recent-research-15} -- [去中心化金融,中心化擁有權?](https://arxiv.org/pdf/2012.09306.pdf) +- [去中心化金融,中心化所有權?](https://arxiv.org/pdf/2012.09306.pdf) - [Optimism:邁向低於一美元交易費用之路](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) ### 去中心化自治組織 {#daos} -以太坊一個頗具影響力的使用案例是透過使用去中心化自治組織,以去中心化的方式進行整合。 以太坊上有許多活躍的研究,關乎如何開發和利用去中心化自治組織執行管理體系的改進形態,作為一種所需信任最小化的協調工具,大幅擴展了除了傳統公司和組織之外的選擇。 +以太坊一個頗具影響力的使用案例是透過使用去中心化自治組織,以去中心化的方式進行整合。 目前,有許多活躍的研究,關乎如何開發和利用以太坊上的去中心化自治組織,將其作為一種所需信任最小化的協調工具,大幅擴展了人們的選擇,不在限於傳統公司和組織。 #### 背景介紹讀物 {#background-reading-16} @@ -334,18 +338,18 @@ lang: zh-tw #### 近期研究 {#recent-research-16} -- [對應去中心化自治組織生態系統](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) +- [規劃去中心化自治組織生態系統](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) -### 開發人員工具 {#developer-tools} +### 開發者工具 {#developer-tools} -為以太坊開發者打造的工具日新月異。 在這個領域中,有許多積極的研究和發展工作要做。 +為以太坊開發者打造的工具日新月異。 在這個領域中,有許多活躍的研究和開發工作要做。 #### 背景介紹讀物 {#background-reading-17} - [依程式語言分類的開發工具](/developers/docs/programming-languages/) - [開發者框架](/developers/docs/frameworks/) - [共識開發者工具列表](https://github.com/ConsenSys/ethereum-developer-tools-list) -- [權杖標準](/developers/docs/standards/tokens/) +- [代幣標準](/developers/docs/standards/tokens/) - [CryptoDevHub:以太坊虛擬機工具](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) #### 近期研究 {#recent-research-17} @@ -354,26 +358,26 @@ lang: zh-tw ### 預言機 {#oracles} -預言機透過無需許可和去中心化的方式將鏈下資料導入鏈上。 將此資料上鏈使去中心化應用程式可對現實世界的現象做出反應,如現實世界的資產價格波動、鏈下應用程式的事件,甚至是天氣變化。 +預言機透過無需許可和去中心化的方式將鏈下資料匯入區塊鏈上。 將此資料上鏈使去中心化應用程式可對現實世界的現象做出反應,如現實世界的資產價格波動、鏈下應用程式的事件,甚至是天氣變化。 #### 背景介紹讀物 {#background-reading-18} -- [預言機介紹](/developers/docs/oracles/) +- [預言機簡介](/developers/docs/oracles/) #### 近期研究 {#recent-research-18} - [區塊鏈預言機調查](https://arxiv.org/pdf/2004.07140.pdf) - [Chainlink 白皮書](https://chain.link/whitepaper) -### 應用程式安全 {#app-security} +### 應用程式安全性 {#app-security} -一般發生在以太坊上的攻擊都是利用單一應用程式的漏洞,而非協議本身的漏洞。 駭客和應用程式開發者正在進行一場軍備競賽,以開發新的攻擊和防禦手段。 這表示研究和發展對保持應用程式的安全、遠離被駭一直都很重要。 +一般發生在以太坊上的攻擊都是利用單一應用程式的漏洞,而非協定本身的漏洞。 駭客和應用程式開發者正在進行一場競賽,分別開發新的攻擊和防禦手段。 這表示研究和發展對保持應用程式的安全、遠離被駭一直都很重要。 #### 背景介紹讀物 {#background-reading-19} - [Wormhole 漏洞報告](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) - [遭駭以太坊合約事後分析列表](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) -- [Rekt 新聞](https://twitter.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) +- [Rekt 新聞](https://twitter.com/RektHQ?s=20\&t=3otjYQdM9Bqk8k3n1a1Adg) #### 近期研究 {#recent-research-19} @@ -385,7 +389,7 @@ lang: zh-tw #### 背景介紹讀物 {#background-reading-20} -- [以太坊技術堆棧](/developers/docs/ethereum-stack/) +- [以太坊堆疊](/developers/docs/ethereum-stack/) - [Coinbase:Web3 堆疊簡介](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) - [智慧型合約簡介](/developers/docs/smart-contracts/) - [去中心化儲存簡介](/developers/docs/storage/) diff --git a/public/content/translations/zh-tw/community/support/index.md b/public/content/translations/zh-tw/community/support/index.md index e02dc8007b6..df0cd880b9c 100644 --- a/public/content/translations/zh-tw/community/support/index.md +++ b/public/content/translations/zh-tw/community/support/index.md @@ -91,6 +91,7 @@ lang: zh-tw - [Nethermind](https://discord.gg/YJx3pm8z5C) - [Besu](https://discord.gg/p8djYngzKN) - [Erigon](https://github.com/ledgerwatch/erigon/issues) +- [Reth](https://github.com/paradigmxyz/reth/discussions) ### 共識用戶端 {#consensus-clients} diff --git a/public/content/translations/zh-tw/contributing/adding-desci-projects/index.md b/public/content/translations/zh-tw/contributing/adding-desci-projects/index.md new file mode 100644 index 00000000000..7a4decec4da --- /dev/null +++ b/public/content/translations/zh-tw/contributing/adding-desci-projects/index.md @@ -0,0 +1,44 @@ +--- +title: 新增去中心化科研專案 +description: 我們在 ethereum.org 的去中心化科研頁面上新增專案連結時使用的政策 +lang: zh-tw +--- + +# 新增專案 {#adding-projects} + +我們希望確保展示各種專案,並提供去中心化科研全景的一個準確簡況。 + +任何人都可以在 ethereum.org 的去中心化科研頁面上推薦可上架的專案。 同樣地,任何人如發現某個專案已不再相關或不再符合我們的資格標準,也可以隨時建議我們將其移除。 + +## 決策框架 {#the-decision-framework} + +### 納入標準:必備條件 {#the-must-haves} + +- **開源程式碼/資料** - 開放的程式碼和資料是去中心化科研的核心原則,因此去中心化科研專案不得閉源。 程式碼庫應該是可存取的,並且最好對拉取請求開放。 +- **DeSci 專案應明顯去中心化** - 這可能包括由去中心化自治組織 (DAO) 管理,或透過使用包括非託管錢包在內的去中心化技術堆疊進行建置。 它可能涉及以太坊上的可審核智慧型合約。 +- **上架資訊真實準確** - 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 +- **擴大科學普及的明確承諾** - 去中心化科研專案應該能夠闡明它們如何擴大公眾對科學的參與,而不僅僅包括代幣/非同質化代幣持有者。 +- **全球皆可存取** - 你的專案沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 +- **資訊豐富的網站和文件** - 讓專案網站的訪客能夠了解該專案的實際用途、如何為去中心化科學基礎設施做出貢獻以及如何參與,這些都非常重要。 +- **專案應該是以太坊生態系統一部分** - 在 ethereum.org,我們相信以太坊(及其二層網路)是去中心化科研運動的合適基礎層。 +- **專案已相當完善** - 該專案擁有真實使用者,在幾個月中都能夠存取該專案服務。 + +### 加分項 + +- **支援多種語言** - 你的專案已經翻譯成多種語言,全球使用者皆可存取。 +- **教育資源/文件** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 +- **第三方審核** - 你的產品已經由可靠第三方進行了專業的漏洞審核。 +- **聯絡人** - 實施變更時,專案聯絡人(可能是去中心化自治組織或社群的代表)將大力幫助我們獲得準確資訊。 這樣將在日後收集資訊時,確保 ethereum.org 的更新可控。 + +## 維護 {#maintenance} + +由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: + +- 確保列出的所有專案仍符合我們的標準 +- 驗證建議的產品不比目前列出的產品更符合我們的標準 + +Ethereum.org 由開源社群維護,我們依靠社群來助其保持最新狀態。 如果你發現所列專案有任何資訊需要更新,請在我們的 GitHub 存放庫上建立一個議題或拉取請求。 + +## 使用條款 {#terms-of-use} + +另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 diff --git a/public/content/translations/zh-tw/contributing/adding-developer-tools/index.md b/public/content/translations/zh-tw/contributing/adding-developer-tools/index.md new file mode 100644 index 00000000000..df281f40858 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/adding-developer-tools/index.md @@ -0,0 +1,61 @@ +--- +title: 新增開發者工具 +lang: zh-tw +description: 我們在 ethereum.org 上架開發者工具的標準 +--- + +# 新增開發者工具 {#contributing-to-ethereumorg-} + +我們想要確保盡可能地將最佳的開發者資源上架,讓開發者能夠自信地構建並獲取他們需要的支持。 + +如果我們遺漏了某個實用的開發者工具,請你在合適的地方提出建議。 + +我們目前在我們的[開發者門戶](/developers/)中上架開發者工具。 + +**請隨時去適當的頁面提出新增工具。** + +## 我們怎樣決定的 {#ways-to-contribute} + +提交的開發者工具將按照以下標準進行評估: + +**它是否與已經上架的工具有明顯的區別?** + +- 是否是新分類或類型的工具 +- 相較於已有相似工具,是否具有新的功能 +- 是否針對現有類似工具未涵蓋的獨特用例 + +**該工具是否有完善的說明文件?** + +- 是否存在相關文件? +- 相關文件是否足以使用該工具? +- 文件近期是否有過更新? + +**該工具是否被廣泛使用?** + +- 我們將會考慮 GitHub 星數、下載數量統計以及是否被知名公司或專案使用等指標作為參考 + +**該工具的品質是否足夠好?** + +- 是否有重複出現的錯誤? +- 工具是否可靠? +- 工具是否得到積極維護? + +**工具是否開源?** + +以太坊領域的許多專案都是開源的。 我們更有可能上架開源專案,讓社群開發者能夠檢查程式碼並為此做出貢獻。 + +--- + +## 產品次序 {#product-ordering} + +除非指定產品以特定順序排列,如按照英文字母順序,否則將按照最早至最晚新增到頁面的順序顯示。 換句話說,最新的產品會被新增到清單的底部。 + +--- + +## 新增你的開發者工具 {#how-decisions-about-the-site-are-made} + +如果你想為 ethereum.org 新增開發者工具並且該工具符合條件,請在 GitHub 上建立一個議題。 + + + 建立議題 + diff --git a/public/content/translations/zh-tw/contributing/adding-exchanges/index.md b/public/content/translations/zh-tw/contributing/adding-exchanges/index.md new file mode 100644 index 00000000000..520e047f8a3 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/adding-exchanges/index.md @@ -0,0 +1,40 @@ +--- +title: 新增交易所 +description: 向 ethereum.org 新增交易所時使用的政策 +lang: zh-tw +--- + +# 新增以太坊交易所 {#adding-ethereum-exchanges} + +任何人都可以在 ethereum.org 上自由提議新的交易所。 + +我們目前將這些交易所列於: + +- [ethereum.org/get-eth](/get-eth/) + +使用者在這個頁面輸入他們的居住地,就能查看他們可以使用哪些交易所。 這有助於儘早發現任何地域限制。 + +鑑於此類情況,當你建議交易所時我們需要一些具體資訊。 + +**注意:**如果你想列出去中心化交易所,請查看我們的[錢包和去中心化應用程式上架政策](/contributing/adding-products/)。 + +## 我們需要的資訊 {#what-we-need} + +- 適用於交易所的地域限制。 與交易所相關的地域限制應在交易所網站的專門頁面詳細說明。 +- 使用者可以用來購買以太幣的貨幣 +- 證明該交易所是合法營運的公司的證據 +- 你可能擁有的任何額外資訊 - 這可能是有關公司的信息,例如經營年限、財務支持等。 + +我們需要這些資訊,以便我們精準[幫助使用者找到他們可以使用的交易所](/get-eth/#country-picker), + +這樣 ethereum.org 也能夠更加確保交易所可以提供合法且安全的兌換服務。 + +--- + +## 新增你的交易所 {#add-exchange} + +如果你想向 ethereum.org 新增交易所,請在 GitHub 上建立一個議題。 + + + 建立一個議題 + diff --git a/public/content/translations/zh-tw/contributing/adding-glossary-terms/index.md b/public/content/translations/zh-tw/contributing/adding-glossary-terms/index.md new file mode 100644 index 00000000000..f69ed7c6175 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/adding-glossary-terms/index.md @@ -0,0 +1,26 @@ +--- +title: 新增詞彙表術語 +lang: zh-tw +description: 我們在 ethereum.org 詞彙表增加新術語的標準 +--- + +# 增加術語表 {#contributing-to-ethereumorg-} + +以太坊的世界日新月異。 以太坊使用者需要不斷應對層出不窮的新術語,因此我們需要你幫助我們提供最準確、最新的參照。 查看目前的[詞彙表](/glossary/),如果你想做出貢獻,請參考下列內容! + +## 標準 {#criteria} + +新的詞彙表術語將按照以下標準進行評估: + +- 這個術語/定義是否是最新並且相關的? +- 術語表中是否已經有類似的術語? (如果有,請衡量新增一個新術語相對於更新現有術語的好處) +- 這個術語/定義是否不涉及產品廣告或其他的宣傳內容? +- 這個術語/定義是否與以太坊直接相關? +- 這個定義是否客觀、準確、並且不包含主觀的判斷和意見? +- 資料來源是否可信? 資料來源是否有引用相應的出處? + +--- + +## 新增你的術語 {#how-decisions-about-the-site-are-made} + +如果你想新增符合以上標準的術語到 ethereum.org,[請在 GitHub 上建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_glossary_term.yaml)。 diff --git a/public/content/translations/zh-tw/contributing/adding-layer-2s/index.md b/public/content/translations/zh-tw/contributing/adding-layer-2s/index.md new file mode 100644 index 00000000000..9a6c4a5bd46 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/adding-layer-2s/index.md @@ -0,0 +1,97 @@ +--- +title: 新增二層網路 +description: 向 ethereum.org 新增二層網路時使用的政策 +lang: zh-tw +--- + +# 新增二層網路 {#adding-layer-2} + +我們想確保上架最佳的資源,讓使用者能夠以安全放心的方式瀏覽二層網路空間。 + +任何人都可以建議在 ethereum.org 上新增二層網路。 如我們有遺漏二層網絡,**[請提出建議](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_layer2.yaml)!** + +我們目前在以下頁面上架二層網路: + +- [Optimistic rollup (樂觀卷軸)](/developers/docs/scaling/optimistic-rollups/) +- [ZK零知識證明卷軸](/developers/docs/scaling/zk-rollups/) +- [層二(Layer 2)](/layer-2/) + +二層網路是以太坊相對較新且令人興奮的範式。 我們嘗試在 ethereum.org 上創建一個公平的考量框架,但納入標準會隨時間推移而變化和發展。 + +## 決策框架 {#decision-framework} + +### 納入標準:必備條件 {#criteria-for-inclusion-the-must-haves} + +**在 L2BEAT 上架** + +- 要被納入考量範圍,專案必須已在 [L2BEAT](https://l2beat.com) 上架。 L2BEAT 為二層網路專案提供了可靠的風險評估,供我們評估二層網路專案。 **如果專案未在 L2BEAT 上架,我們不會在 ethereum.org 上將其作為二層網路上架。** +- [了解如何將二層網路專案新增到 L2BEAT](https://github.com/l2beat/l2beat/blob/master/CONTRIBUTING.md)。 + +**開源** + +- 你的程式碼必須是可存取的,同時你應接受來自更廣泛社群的拉取請求 (PR)。 + +**二層網路類別** + +我們目前將以下列為二層網路解決方案: + +- 樂觀卷軸 +- 零知識卷軸 + +_我們認為,其他不使用以太坊來實現資料可用性或安全性的擴張解決方案,不是二層網路。_ + +**以太坊的資料可用性** + +- 資料可用性是其他擴張方案與二層網路方案之間的重要區分因素。 一個專案**必須**使用以太坊主網來實現資料可用性,才能考慮讓其上架。 + +**跨鏈橋** + +- 使用者怎樣才能登錄利用二層網路? + +**專案上線日期** + +- 二層網路已在主網「上線」超過 6 個月 + +- 未經使用者實際測試的較新專案不太可能上架。 + +**外部安全審核** + +- 無論是透過審核、內部安全團隊或其他方法,你的產品安全性都必須經可靠測試。 對我們的用戶而言,這會減低相關風險,並且向我們顯示出你有認真思考產品安全的問題。 + +**持續的使用者群** + +- 我們會考慮總鎖定價值 (TVL) 歷史記錄、交易統計數據以及是否被知名公司或專案使用等指標 + +**活躍的開發團隊** + +- 我們不會上架沒有活躍團隊去開發專案的二層網路。 + +**區塊瀏覽器** + +- 上架的專案需要正常運作的區塊瀏覽器,讓使用者輕鬆瀏覽區塊鏈。 + +### 其他標準:加分項 {#nice-to-haves} + +**交易所對專案的支援** + +- 使用者能否直接存款到交易所和/或從交易所提款? + +**二層網絡生態系統的去中心化應用程式連結** + +- 我們希望能夠提供有關使用者可以在此二層網路上執行哪些操作的資訊。 (例如 https://portal.arbitrum.io/、https://www.optimism.io/apps) + +**代幣合約清單** + +- 由於資產會在二層網路擁有新地址,如有可用的代幣清單資源,請分享。 + +**支援原生錢包** + +- 是否有任何錢包原生支援二層網路? + +## 新增你的二層網絡 {#add-exchange} + +如果你想在 ethereum.org 上新增二層網路層,請在 GitHub 上建立議題。 + + + 建立一個議題 + diff --git a/public/content/translations/zh-tw/contributing/adding-products/index.md b/public/content/translations/zh-tw/contributing/adding-products/index.md new file mode 100644 index 00000000000..2fb80a6e099 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/adding-products/index.md @@ -0,0 +1,100 @@ +--- +title: 新增產品 +description: 向 ethereum.org 新增去中心化應用程式時使用的政策 +lang: zh-tw +--- + +# 新增以太坊產品 {#adding-products} + +任何人都可以在適當情況下,向 ethereum.org 的內容上推薦新的去中心化應用程式。 **但我們不會在網站首頁列出你的去中心化應用程式** 😜 + +目前所有去中心化應用程式都列於: + +- ethereum.org/dapps +- ethereum.org/get-eth + +**請僅在上列頁面上建議新增新的去中心化應用程式。** + +雖然我們歡迎新增新的去中心化應用程式,但目前我們以我們努力為使用者創造的使用體驗為基準來選擇去中心化應用程式。 此使用體驗基於下方一些設計原則: + +- _具啟發性_:ethereum.org 上的任何事物都應該讓使用者耳目一新 +- _好故事_:列出的內容應該讓人感到驚嘆 +- _可信_:所有業務/專案都應該是合法的,以最大程度降低使用者面臨的風險 + +整體而言,**ethereum.org 想為新的使用者提供「無縫加入體驗」**。 為此,我們會根據下列條件來新增去中心化應用程式: + +- 方便使用 +- 與其他產品的互通性 +- 安全性 +- 耐用 + +以下是關於我們決策框架的更詳細資訊。 請隨時提供意見回饋或更改建議。 + +## 決策框架 {#decision-framework} + +### 納入標準:必備條件 {#criteria-for-inclusion-the-must-haves} + +- **產品通過安全測試** — 無論是透過審核、內部安全團隊或某些其他方法,你的產品安全必須通過可靠測試。 這將降低我們的使用者面臨的風險,並向我們表明你非常重視安全性。 +- **產品已「上線」超過 6 個月** — 這是產品安全性的另一個指標。 6 個月是發現嚴重錯誤和漏洞的最佳時間窗口。 +- **由活躍的團隊開發** — 這有助於確保品質,並讓使用者的查詢得到支援。 +- **上架資訊真實準確** — 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 + +### 排名標準:加分項 {#criteria-for-ranking-the-nice-to-haves} + +你的去中心化應用程式或因以下標準,未能像其他產品一樣在 ethereum.org 顯眼地方列出。 + +**去中心化應用程式** + +- **可以透過大多數上架的錢包存取** - 去中心化應用程式應該與 ethereum.org 上架的大多數錢包相容。 +- **使用者可以自行試用 –** 個人使用者應該能夠使用你的去中心化應用程式並執行一些實際操作。 +- **入門培訓** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 +- **非託管模式** – 使用者可以控制自己的資金。 如果你的產品消失,使用者仍然可以存取和轉移他們的資金。 +- **全球皆可存取** – 你的產品沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 +- **開源** – 你的程式碼應該易於存取,並應接受來自更廣泛社群的拉取請求 (PR)。 +- **社群** – 你有一個專門社群,例如 Discord,使用者可以在其中與你的團隊互動,以獲得幫助或建議新功能。 + +## 實踐中的標準 {#criteria-in-practice} + +你達到的標準越多,你的產品就越有可能進入 ethereum.org。 + +如果建議的新產品符合必備條件和其中幾個加分條件,僅符合必備條件的已上架產品則可能會被移除。 + +會影響此決定的其他因素: + +- 新增應用程式而非替換應用程式的話,會破壞頁面的使用者體驗嗎? + - 我們的網站主要是教育性的,目的是解釋以太坊及其相關概念。 為使用者新增太多選項,頁面可讀性或會變得較差,導致實用性降低。 +- 該頁面目前是否讓使用者難以選擇? + - 就像你坐上幾個小時瀏覽 Netflix,因為你無法決定要觀看的內容。 提供太多選擇會讓新使用者迷惑,這是一種風險。 + +ethereum.org 負責做出這種設計決策。 + +但請放心,**我們會提供一些網站的連結,這些網站對更多去中心化應用程式進行排名** + +### 產品訂購 {#product-ordering} + +除非指定產品以特定順序排列,如按照英文字母順序,否則將按照最晚至最早新增到頁面的順序顯示。 換句話說,最新的產品會被新增到清單的底部。 + +### 使用條款 {#terms-of-use} + +另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 + +## 維護 {#maintenance} + +由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: + +- 確保列出的所有去中心化應用程式仍符合我們的標準 +- 驗證建議的產品不比目前列出的產品更符合我們的標準 + +你可以查驗上述兩項,並告知我們查驗結果,以此提供幫助。 [建立議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=)或發送電子郵件至 [website@ethereum.org](mailto:website@ethereum.org) + +_我們也在研究投票的可能性,讓社群可以表明偏好,並突顯最好的產品供我們推薦。_ + +--- + +## 新增你的產品 {#add-your-product} + +如果你想將去中心化應用程式新增至 ethereum.org 並且該應用程式符合標準,請在 GitHub 上建立一個議題。 + + + 創建一個議題 + diff --git a/public/content/translations/zh-tw/contributing/adding-staking-products/index.md b/public/content/translations/zh-tw/contributing/adding-staking-products/index.md new file mode 100644 index 00000000000..8606b09e29a --- /dev/null +++ b/public/content/translations/zh-tw/contributing/adding-staking-products/index.md @@ -0,0 +1,176 @@ +--- +title: 新增質押產品或服務 +description: 向 ethereum.org 新增質押產品或服務時使用的政策 +lang: zh-tw +--- + +# 添加質押的產品或服務 {#adding-staking-products-or-services} + +我們想要確保上架最佳的資源,讓使用者能夠安全放心。 + +任何人都可以建議在 ethereum.org 上新增質押產品或服務。 如我們有遺漏,**[請提出建議](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_staking_product.yaml)!** + +我們目前在以下頁面上架質押產品與服務: + +- [單獨質押](/staking/solo/) +- [質押即服務](/staking/saas/) +- [質押池](/staking/pools/) + +信標鏈上的權益證明自 2020 年 12 月 1 日起生效。 雖然質押仍然相對較新,但我們嘗試在 ethereum.org 建立一個公平透明的考慮框架,但上架標準會隨著時間推移而變化和發展,最終由 ethereum.org 網站團隊自行決定。 + +## 決策框架 {#the-decision-framework} + +是否在 ethereum.org 上架產品並非由單一因素決定。 當要決定上架一個產品或服務時,會同時考慮多個標準。 符合以下標準越多,產品或服務上架的可能性就越高。 + +**首先,它是屬於哪個類別的產品或服務呢?** + +- 節點或用戶端工具 +- 金鑰管理 +- 質押即服務 (SaaS) +- 質押池 + +目前,我們僅上架以下類別的產品或服務。 + +### 納入標準 {#criteria-for-inclusion} + +提交的質押產品或服務將按照以下標準進行評估: + +**該專案或服務是何時啟動的?** + +- 是否有證據證明該產品或服務開放給大眾的時間? +- 這用來確定產品的「實戰測試」評分。 + +**專案是否得到積極維護?** + +- 是否有活躍的團隊開發專案? 有誰參與到當中了? +- 只有積極維護的產品才會被考慮。 + +**產品或服務是否不需要可信賴/人工中間人?** + +- 在使用者使用產品或服務的過程中,哪些步驟需要信賴他人來保管其資金金鑰,或妥善分配酬勞? +- 這用來確定產品或服務「去信賴」評分。 + +**該專案是否提供準確可靠的資訊?** + +- 產品網站提供最新、準確且無誤導性的資訊至關重要,尤其涉及以太坊協定或其他相關技術。 +- 提交內容中包含錯誤資訊、過時細節或有關以太坊或其他相關主題的潛在誤導性陳述將不會被上架,如果已經上架,則將被移除。 + +**支援哪些平台?** + +- 如: Linux,、macOS、Windows、iOS、Android + +#### 軟體與智慧型合約 {#software-and-smart-contracts} + +對於涉及的任何客製化軟體或者智慧型合約: + +**一切都是開源的嗎?** + +- 開源專案應該有一個開放給公眾的原始程式碼存放庫 +- 這用來確定產品的「開源」評分。 + +**產品是否完成_測試版_開發?** + +- 產品處於開發週期的哪個階段? +- 處於測試階段的產品不會納入 ethereum.org + +**軟體是否經過外部安全審核?** + +- 如果為否,是否有計畫進行外部審核? +- 這用來確定產品的「審核」評分。 + +**專案是否有漏洞懸賞計畫?** + +- 如果沒有該項計畫,是否打算建立漏洞懸賞計畫? +- 這用來確定產品的「漏洞懸賞」評分。 + +#### 節點或用戶端模組化 {#node-or-client-tooling} + +對於有關節點或用戶端設定、管理或移植的軟體產品: + +**支援哪些共識層用戶端(例如 Lighthouse、Teku、Nimbus 和 Prysm)?** + +- 支援哪些用戶端? 使用者可以自己選擇嗎? +- 這用來確定產品的「多樣用戶端」評分。 + +#### 質押即服務(SaaS) {#staking-as-a-service} + +對於[質押即服務的上架](/staking/saas/)(即委託節點操作): + +**使用該服務有哪些相關費用?** + +- 它的費用結構是甚麼?例如:該服務是否有定期收取月費? +- 有任何額外的質押需求嗎? + +**使用者需要註冊帳戶嗎?** + +- 使用者是否可以在未經許可或身分驗證的情況下使用服務? +- 這用來確定產品的「無需許可」評分。 + +**誰會持有簽名金鑰及取款金鑰呢?** + +- 使用者可以存取哪些金鑰? 服務可以存取哪些金鑰? +- 這用來決定產品的「去信賴」評分。 + +**所運作節點的用戶端多樣性是怎樣的?** + +- 有多少比例的驗證者金鑰正在主流共識層 (CL) 用戶端運行? +- 截止上一次的編輯,大多數節點運營者都在運行 Prysm 這一共識層用戶端,這對網路是危險的。 如果目前有超過 33% 的網路在使用某一共識層用戶端,我們會索取該用戶端使用情況的相關數據。 +- 這用來決定產品的「多樣用戶端」評分。 + +#### 質押池 {#staking-pool} + +對於[聯合質押服務](/staking/pools/): + +**質押最少需要多少以太幣?** + +- 例如 0.01 以太幣 + +**涉及哪些費用或質押需求?** + +- 有多少百分比的獎勵作為費用被扣除? +- 有任何額外的質押需求嗎? + +**有流動性代幣嗎?** + +- 涉及哪些代幣? 它們是如何運作的? 合約地址是什麼? +- 這用來確定產品的「流動性代幣」評分。 + +**使用者可以作為節點運營者參與嗎?** + +- 使用聯合資金運行驗證者用戶端需要什麼條件? +- 這是否需要個人、公司或去中心化自治組織的許可? +- 這用來確定產品的「無需許可節點」評分。 + +**質押池內節點營運商用戶端多樣性是怎樣的?** + +- 有多少比例的節點營運商正在運行主流共識層 (CL) 用戶端? +- 截止上一次的編輯,大多數節點運營者都在運行 Prysm 這一共識層用戶端,這對網路是危險的。 如果目前有超過 33% 的網路在使用某一共識層用戶端,我們會索取該用戶端使用情況的相關數據。 +- 這用來決定產品的「多樣用戶端」評分。 + +### 其它範疇:有的話會比較好的元素 {#other-criteria} + +**支援哪些使用者介面?** + +- 如: 瀏覽器應用程式、桌面應用程式、行動應用程式、命令列介面 + +**對於節點工具,該軟體是否提供了在用戶端之間切換的簡單方法?** + +- 用戶可以透過該工具來輕易並安全地改變用戶端嗎? + +**對於質押即服務,該服務目前正在運作多少個驗證者?** + +- 這讓我們能夠了解你至今為止的服務範圍。 + +## 我們會怎樣顯示結果 {#product-ordering} + +上述[納入標準](#criteria-for-inclusion)將用於計算每個產品或服務的累計評分。 該評分用來對滿足特定客觀標準的產品進行排序和展示。 能夠證實滿足的標準越多,產品的排序就越高,且載入時是隨機排列的。 + +這些標準的程式碼邏輯和權重目前包含在我們存放庫的[這個 JavaScript 元件](https://github.com/ethereum/ethereum-org-website/blob/dev/src/components/Staking/StakingProductsCardGrid.js#L350)。 + +## 新增你的產品或服務 {#add-product} + +如果你想在 ethereum.org 上新增質押產品或服務,請在 GitHub 上建立一個議題。 + + + 建立一個議題 + diff --git a/public/content/translations/zh-tw/contributing/adding-wallets/index.md b/public/content/translations/zh-tw/contributing/adding-wallets/index.md new file mode 100644 index 00000000000..40ab8f14771 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/adding-wallets/index.md @@ -0,0 +1,80 @@ +--- +title: 新增錢包 +description: 向 ethereum.org 上新增錢包時使用的政策 +lang: zh-tw +--- + +# 新增錢包 {#adding-wallets} + +我們希望確保展示各種錢包,涵蓋它們所有不同功能,讓使用者可以放心使用以太坊。 + +任何人都可以建議向 ethereum.org 新增錢包。 如我們遺漏了某個錢包,請提出建議! + +目前所有錢包都列於: + +- [ethereum.org/wallets/find-wallet/](/wallets/find-wallet/) + +以太坊中的錢包日新月異。 我們嘗試在 ethereum.org 上創建一個公平的考量框架,但納入標準會隨時間推移而變化和發展。 + +## 決策框架 {#the-decision-framework} + +### 納入標準:必備條件 {#the-must-haves} + +- **經過安全測試的產品** - 無論是透過審核、內部安全團隊、開源編碼或其他方法,你的錢包的安全性都必須可靠。 這將降低我們的使用者面臨的風險,並向我們表明你非常重視安全性。 +- **錢包已「上線」超過六個月或由具有良好記錄的團體發布** - 這是安全性的另一指標。 六個月是發現嚴重錯誤和漏洞的最佳時間窗口。 我們要求六個月的時間,來幫助篩選出那些作為專案很快就被放棄的分叉。 +- **由活躍的團隊開發** - 這有助於確保品質,並讓使用者的查詢得到支援。 +- **上架資訊真實準確** — 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 +- **聯絡人** - 實施變更時,錢包的聯絡人將大力幫助我們獲得準確資訊。 這樣將在日後收集資訊時,確保 ethereum.org 的更新可控。 +- **EIP-1559(第 2 類)交易** - 你的錢包必須支援 EIP-1559(第 2 類)交易,才能在以太坊主網上進行交易。 +- **良好的使用者體驗** - 雖然使用者體驗是主觀的,但如果多位核心團隊成員在測試產品後,發現產品難以使用,我們保留拒絕該錢包的權利,並會提供有用的改進建議。 這樣做是為了保護我們的使用者群,因為它主要由初學者組成。 + +### 產品移除 {#product-removals} + +- **更新資訊** - 錢包提供者有責任每 6 個月重新提交錢包資訊,以確保其有效性和相關性(即使他們的產品沒有變化)。 如果產品團隊未能這麼做,ethereum.org 或會從頁面上移除該專案。 + +### 其他標準:加分項 {#the-nice-to-haves} + +- **全球皆可存取** - 你的錢包沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 +- **支援多種語言** - 你的錢包已經翻譯成多種語言,讓全球使用者都能存取它。 +- **開源** - 你整個專案的程式碼庫(不只是模組)應可被存取,並且你應該接受來自更廣泛社群的拉取請求。 +- **非託管模式** - 使用者可以控制自己的資金。 如果你的產品消失,使用者仍然可以存取和轉移他們的資金。 +- **支援硬體錢包** - 使用者可以連接硬體錢包來簽署交易。 +- **WalletConnect** - 使用者可以使用 WalletConnect 連接到去中心化應用程式。 +- **匯入以太坊遠端程序呼叫 (RPC) 端點** - 使用者可以匯入節點遠端程序呼叫資料,讓它們連接到自己選擇的節點或其他以太坊虛擬機相容網路。 +- **非同質化代幣** - 使用者能夠查看錢包中的非同質化代幣並與之互動。 +- **連接到以太坊應用程式** - 使用者能夠連接並使用以太坊應用程式。 +- **質押** - 使用者可以直接透過錢包質押。 +- **兌換** - 使用者可以透過錢包兌換代幣。 +- **多鏈網路** - 你的錢包預設支援使用者存取多個區塊鏈網路。 +- **二層網路** - 你的錢包預設支援使用者存取二層網路。 +- **自訂燃料費** - 你的錢包允許使用者自訂其交易燃料費(基本費用、優先費和最高費用)。 +- **支援以太坊名稱服務** - 你的錢包允許使用者傳送交易到 ENS 名稱。 +- **支援 ERC-20** - 你的錢包允許使用者匯入 ERC-20 代幣合約,或自動查詢並顯示 ERC-20 代幣。 +- **購買加密貨幣** - 你的錢包支援使用者直接購買和操作加密貨幣。 +- **以法幣出售** - 你的錢包支援使用者以法幣出售加密貨幣,並直接以法幣提款到銀行卡或銀行帳戶。 +- **多重簽名** - 你的錢包支援多重簽名來簽署交易。 +- **社交恢復** - 你的錢包支援守護人功能,當使用者遺失了種子助記詞,可以透過守護人來恢復他們的錢包。 +- **專屬支援團隊** - 你的錢包擁有專屬的支援團隊,使用者遇到問題時可以向該團隊尋求協助。 +- **教育資源/文件** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 + +## 新增錢包 {#adding-a-wallet} + +如果你想向 ethereum.org 新增錢包,請在 GitHub 上建立一個議題。 + + + 建立一個議題 + + +## 維護 {#maintenance} + +由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: + +- 確保上架的所有錢包和去中心化應用程式仍符合我們的標準 +- 驗證建議的產品不比目前列出的產品更符合我們的標準 + +ethereum.org 由開源社群維護,我們依靠社群來助其保持最新狀態。 如果你發現有任何關於上架錢包的資訊需要更新,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=wallet+%3Apurse%3A&template=suggest_wallet.yaml)或[拉取請求](https://github.com/ethereum/ethereum-org-website/pulls)! + + +## 使用條款 {#terms-of-use} + +另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 diff --git a/public/content/translations/zh-tw/contributing/content-resources/index.md b/public/content/translations/zh-tw/contributing/content-resources/index.md new file mode 100644 index 00000000000..51cc723e439 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/content-resources/index.md @@ -0,0 +1,32 @@ +--- +title: 添加內容資源 +lang: zh-tw +description: 我們在 ethereum.org 上列出內容資源的標準 +--- + +# 添加內容資源 {#adding-content-resources} + +我們無法涵蓋所有有關以太坊的內容,所以我們會嘗試展示一些由社群建立的出色的文章、使用教學、電子報、工作展示板,和各式內容資源。 這些資源通常為使用者可能感興趣的主題提供更深入的資訊。 + +如果這裡有你感到應該新增到頁面的一份內容資源,請隨時在適合的地方提出建議。 + +## 我們是如何決策的 {#how-we-decide} + +學習資源將按照以下標準評估: + +- 內容是最新的嗎? +- 內容是否需要付費? +- 資訊準確嗎? 它是根據客觀事實,還是根據主觀意見? +- 作者可信嗎? 他們會引用文本出處麼? +- 這份內容是否提供了現存資源/連結沒有的獨特價值? +- 這份內容是否服務於我們其中一部分[使用者](https://www.notion.so/efdn/Ethereum-org-User-Persona-Memo-b44dc1e89152457a87ba872b0dfa366c)? + +--- + +## 新增你的內容資源 {#add-your-content-resource} + +如果你想將內容資源新增至 ethereum.org 並且它符合標準,請在 GitHub 上建立一個議題。 + + + 創建一個議題 + diff --git a/public/content/translations/zh-tw/contributing/design/adding-design-resources/index.md b/public/content/translations/zh-tw/contributing/design/adding-design-resources/index.md new file mode 100644 index 00000000000..60fce770821 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/design/adding-design-resources/index.md @@ -0,0 +1,69 @@ +--- +title: 新增設計資源 +description: 確保 ethereum.org 上設計材料品質的指南和要求 +lang: zh-tw +--- + +# 新增設計資源 {#adding-design-resources} + +任何人都可以為 [web3 頁面中的設計和使用者體驗區域](/developers/docs/design-and-ux/)建議新的設計材料。 + +請注意本頁面的重點,是為有抱負的 web3 設計師提供使用者價值。 設計部分不是為了宣傳你的服務、產品或平台。 + +為確保我們維持高標準的資訊並推廣有價值的見解,我們制定了上架政策: + +## 研究和儀表板 {#Research-studies} + +1. 健全的方法論 + +a. 方法應明確定義如何收集資料。 + +b. 應說明研究參與人數。 + +c. 應描述所採用的研究方法。 + +2. 與 Web3 設計師和常見設計用例的相關性 + +a. 研究主題應該與 web3 設計師相關,並處理常見的設計用例。 + +3. 專注於提供見解 + +a. 文本的主要目標應為分享見解,而非宣傳特定專案或公司。 + +## 文章 {#Articles} + +1. 與 Web3 設計師/研究人員和常見 Web3 設計用例的相關性 + +a. 文章主題應該與 web3 設計師和研究人員有關,並專注於常見的 web3 設計用例。 + +2. 基本寫作品質 + +a. 文章應沒有語法和拼字錯誤。 + +b. 重點應放在提供關鍵見解和學習。 + +c. 寫作應簡明扼要。 + +3. 文本的目標 + +a. 文章主要目標應為分享見解,而非宣傳特定專案或公司。 + +## 社群/去中心化自治組織 {#Communities-and-DAOs} + +1. 網站必須清楚說明如何加入去中心化自治組織/社群 + +2. 成為會員的明確益處 + +a. 應把成為會員的益處顯著展示。 + +**範例**:收到工作回饋、獲得工作機會或懸賞、分享設計和研究見解。 + +3. Discord 上積極活躍溝通 + +a. Discord 社群應展現活躍且積極的溝通。 + +b. 版主應積極參與維護社群並促進討論。 + +c. 社群應展示過去兩週內有價值及成果的討論記錄。 + +透過遵守這些標準,我們目標是在社群內營造一個充滿生氣和知識共享的環境。 我們相信,該白名單政策將確保我們的使用者能夠存取可靠、相關且富有見解的資源。 感謝你的理解與合作,以維護我們平台的內容品質。 diff --git a/public/content/translations/zh-tw/contributing/design/index.md b/public/content/translations/zh-tw/contributing/design/index.md index 67eadc3f7f7..806346c7328 100644 --- a/public/content/translations/zh-tw/contributing/design/index.md +++ b/public/content/translations/zh-tw/contributing/design/index.md @@ -6,7 +6,7 @@ lang: zh-tw # 為 ethereum.org 作出設計貢獻 {#design-contributions} -設計是任何專案的關鍵組成部分,把你的時間和設計技能投入到 ethereum.org,有助替我們的訪客改善使用者體驗。 替開源專案做出貢獻,會為你提供機會以獲取相關經驗,並在協作環境中發展技能。 你有機會與其他擁有獨特觀點和見解的設計師、開發者和社群成員合作。 +設計是任何專案的關鍵組成部分,把你的時間和設計技能投入到 Ethereum.org,有助替我們的訪客改善使用者體驗。 替開源專案做出貢獻,會為你提供機會以獲取相關經驗,並在協作環境中發展技能。 你有機會與其他擁有獨特觀點和見解的設計師、開發者和社群成員合作。 最後,這是建立多元且令人印象深刻的作品集,以展示你設計技能的好方式。 @@ -18,7 +18,7 @@ lang: zh-tw 1. 設計團隊會在 [Discord](https://discord.com/invite/ethereum-org) 和 [GitHub](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) 上分享模型設計。 2. 你會在指導下熟悉這些設計,並透過評論功能提供意見回饋。 -3. 結果將在 GitHub 提議中分享,然後由團隊關閉。 +3. 結果將在 GitHub 議題中分享,然後由團隊關閉。 ###  參與調查研究 {#answer-surveys} @@ -30,7 +30,7 @@ lang: zh-tw ###  尋找網站上與設計相關的問題並回報 {#report-design-issues} -ethereum.org 是個擁有許多功能和內容,而且快速發展的網站。 某些使用者介面很容易過時或需要改進。 如果你遇到這類情況,請報告以讓我們注意。 +Ethereum.org 是個擁有許多功能和內容,而且快速發展的網站。 某些使用者介面很容易過時或需要改進。 如果你遇到這類情況,請報告以讓我們注意。 1. 瀏覽網站並注意其設計。 2. 如果你發現任何視覺或使用者體驗方面問題,請取得螢幕擷取畫面並記錄下來。 @@ -51,7 +51,7 @@ ethereum.org 是個擁有許多功能和內容,而且快速發展的網站。 1. 從 GitHub 上的[設計系統板](https://github.com/ethereum/ethereum-org-website/labels/design%20system)選擇要處理的議題,或建立一個新的議題。 2. 請求將選定的議題分配給你。 -3. 開始在 Figma 中設計所需組件。 +3. 開始在 figma 中設計要求的元件。 4. 需要審核或指導時,請在 GitHub 上將組件分享給設計團隊。 5. 設計團隊將進行審核。 6. 設計團隊會將變更合併到主檔案中,並將它發佈到社群。 @@ -64,7 +64,7 @@ ethereum.org 是個擁有許多功能和內容,而且快速發展的網站。 2. 前往我們的 GitHub 儲存庫,[發起議題](https://github.com/ethereum/ethereum-org-website/issues/new)來建議主題(先不要寫內容)。 3. 等待設計團隊核准。 4. 一旦核准,開始撰寫內容。 -5. 在相應的 GitHub 議題中提交。 +5. 在相應的 GH 議題中提交。 ###  繪製新插圖 {#prepare-illustrations} @@ -74,4 +74,4 @@ ethereum.org 是個擁有許多功能和內容,而且快速發展的網站。 2. 確保插圖風格與我們的[網站](/assets/)相對應。 3. 前往我們的 GitHub 儲存庫並[發起議題](https://github.com/ethereum/ethereum-org-website/issues/new)來建議插圖。 4. 設計團隊將會審核。 -5. 我們建議一個新議題,邀請開發者來實作該新圖像。 +5. 我們建立一個新議題,並邀請開發者來實作該新圖像。 diff --git a/public/content/translations/zh-tw/contributing/index.md b/public/content/translations/zh-tw/contributing/index.md index 05e04a5b221..eaf36252a59 100644 --- a/public/content/translations/zh-tw/contributing/index.md +++ b/public/content/translations/zh-tw/contributing/index.md @@ -68,7 +68,7 @@ Ethereum.org 是一個開源專案,擁有超過 **12000 名**貢獻者,幫 - 我們的[風格指南](/contributing/style-guide/) - 我們的[行為準則](/community/code-of-conduct) - + ## 如何做出有關網站的決定 {#how-decisions-about-the-site-are-made} diff --git a/public/content/translations/zh-tw/contributing/quizzes/index.md b/public/content/translations/zh-tw/contributing/quizzes/index.md new file mode 100644 index 00000000000..6ddd4ba5e77 --- /dev/null +++ b/public/content/translations/zh-tw/contributing/quizzes/index.md @@ -0,0 +1,62 @@ +--- +title: 新增測驗 +description: 向 ethereum.org 新增測驗時使用的政策 +lang: zh-tw +--- + +# 測驗 {#quizzes} + +測驗讓使用者有機會測試自己,是否理解剛剛閱讀的頁面內容。 問題只應基於頁面上提供的內容,而不應問及頁面上未提供的資訊。 + +問題結構如下。 問題提示、1 個正確答案以及為什麼正確的解釋、3 個錯誤答案以及為什麼錯誤的解釋。 + +一些現有測驗的範例可以在下面找到: + +- [二層網路](/layer-2) +- [非同質化代幣](/nft/) +- [什麼是以太坊?](/what-is-ethereum/) +- [什麼是以太幣?](/eth/) + +## 新增學習測驗 + +如果有頁面尚未建立學習測驗,請為其[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)。 + +請提供以下資訊: + +- 你想新增測驗的頁面 +- 包含以下資訊的 5 個問題: + - 問題所依據的頁面內容 + - 問題提示 + - 1 個正確答案以及為什麼正確的解釋 + - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 + +## 新增測驗問題 + +如果你想將一個問題新增到測驗的問題庫中,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)並提供以下資訊: + +- 你想新增測驗問題的頁面 +- 對於每個問題,請提供以下資訊: + - 問題所依據的頁面內容 + - 問題提示 + - 1 個正確答案以及為什麼正確的解釋 + - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 + +## 更新測驗問題 + +如果你想在測驗的問題庫中更新問題,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)並提供以下資訊: + +- 你想更新測驗問題的頁面 +- 對於每個更新的問題,請提供以下資訊: + - 問題所依據的頁面內容 + - 你想更新問題的問題提示 + - 更新的問題提示 + - 1 個正確答案以及為什麼正確的解釋 + - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 + +## 刪除測驗問題 + +如果頁面上和問題相關的內容不再存在並且需要刪除問題,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)以刪除測驗問題並提供以下資訊: + +- 你想刪除測驗問題的頁面 +- 你想刪除的問題 +- 如必要,請解釋為什麼應刪除該問題 diff --git a/public/content/translations/zh-tw/contributing/translation-program/how-to-translate/index.md b/public/content/translations/zh-tw/contributing/translation-program/how-to-translate/index.md index 5fd69e162e5..160cbb719da 100644 --- a/public/content/translations/zh-tw/contributing/translation-program/how-to-translate/index.md +++ b/public/content/translations/zh-tw/contributing/translation-program/how-to-translate/index.md @@ -18,7 +18,7 @@ description: 使用 Crowdin 翻譯 ethereum.org 的說明 你需要登入 Crowdin 帳戶,如果你還沒有則請註冊帳戶。 只需要電子郵件帳戶和密碼便可註冊。 - + 參與專案 @@ -70,7 +70,7 @@ description: 使用 Crowdin 翻譯 ethereum.org 的說明 透過使用頂部的按鈕,你還可以切換到翻譯記憶。在那裡,你可以搜尋現有的翻譯,或者切換到「詞彙表」,其中包含關鍵術語的描述和標準翻譯。 -想了解更多嗎? 請隨時查看[有關使用 Crowdin 線上編輯器的文件](https://support.crowdin.com/online-editor/) +想瞭解更多嗎? 請隨時查看[有關使用 Crowdin 線上編輯器的文件](https://support.crowdin.com/online-editor/) ### 審核過程 {#review-process} diff --git a/public/content/translations/zh-tw/developers/docs/accounts/index.md b/public/content/translations/zh-tw/developers/docs/accounts/index.md index 55baa281c8e..5412c9bfca5 100644 --- a/public/content/translations/zh-tw/developers/docs/accounts/index.md +++ b/public/content/translations/zh-tw/developers/docs/accounts/index.md @@ -51,7 +51,7 @@ lang: zh-tw ## 外部帳戶和金鑰組 {#externally-owned-accounts-and-key-pairs} -帳戶由加密金鑰組組成:公開金鑰及私密金鑰。 金鑰組有助於證明交易確實由發送者簽署,並可防止偽造。 私密金鑰用於簽署交易,為你授予與帳戶相關的資金的監管權。 你從未真正持有加密貨幣,你持有的是私密金鑰 – 資金始終處於以太坊帳本中。 +帳戶由一對加密金鑰所組成:公鑰和私鑰。 金鑰組有助於證明交易確實由發送者簽署,並可防止偽造。 私密金鑰用於簽署交易,為你授予與帳戶相關的資金的監管權。 你從未真正持有加密貨幣,你持有的是私密金鑰 – 資金始終處於以太坊帳本中。 這樣可防止惡意行為者廣播假造交易,因為你始終都能驗證交易的發送者。 @@ -69,6 +69,12 @@ lang: zh-tw 公開金鑰是使用[橢圓曲線數位簽名演算法](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm)從私密金鑰產生的。 你的帳戶的公開地址由公開金鑰 Keccak-256 雜湊值的後 20 位在開頭加上 `0x` 組成。 +這意味著一個外部帳戶 (EOA) 會有一個 42 字元的地址(20 位元組的片段,即 40 個十六進制的字元加上前綴 `0x`)。 + +案例: + +`0x5e97870f263700f46aa00d967821199b9bc5a120` + 下面的範例展示如何使用一種簽名工具 [Clef](https://geth.ethereum.org/docs/tools/clef/introduction) 來產生一個新帳戶。 Clef 是一種與以太坊用戶端 [Geth](https://geth.ethereum.org) 綁定的帳戶管理與簽名工具。 `clef newaccount` 命令建立一個新的金鑰組並將其儲存於加密的密鑰庫。 ``` @@ -86,7 +92,7 @@ Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120 [Geth 文件](https://geth.ethereum.org/docs) -可以透過私密金鑰衍生出公開金鑰,但無法使用公開金鑰衍生出私密金鑰。 顧名思義,**私密**意味著保障私密金鑰安全很重要。 +可以透過私密金鑰衍生出公開金鑰,但無法使用公開金鑰衍生出私密金鑰。 顧名思義,**私密**意味著確保私密金鑰安全至關重要。 你需要使用私密金鑰來簽署訊息和交易,並輸出一個簽章。 之後,其他人能夠使用該簽章衍生出你的公開金鑰,證明你是這條訊息的創作者。 在你的應用程式中,你可以使用 JavaScript 程式庫將交易發送至網路。 @@ -94,7 +100,7 @@ Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120 合約帳戶亦有一個含有 42 個字元的 16 進位地址: -案例: +範例: `0x06012c8cf97bead5deae237070f9587f8e7a266d` @@ -108,7 +114,7 @@ Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120 ## 關於錢包的備註 {#a-note-on-wallets} -帳戶並非錢包。 帳戶是使用者持有的以太坊帳戶的金鑰組。 錢包則是一個介面或應用程式,讓你能夠和你的以太坊帳戶互動。 +帳戶並非錢包。 錢包是一個介面或應用程式,可讓你與你的以太坊帳戶(外部帳戶或合約帳戶)互動。 ## 視覺範例 {#a-visual-demo} diff --git a/public/content/translations/zh-tw/developers/docs/apis/backend/index.md b/public/content/translations/zh-tw/developers/docs/apis/backend/index.md new file mode 100644 index 00000000000..9492893476d --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/apis/backend/index.md @@ -0,0 +1,207 @@ +--- +title: 後端應用程式介面程式庫 +description: 讓你能夠從應用程式與區塊鏈互動的以太坊用戶端應用程式介面簡介。 +lang: zh-tw +--- + +為了讓軟體應用程式能夠和以太坊區塊鏈互動(例如:讀取區塊鏈資料及/或傳送交易到網路),必須先連結以太坊節點。 + +為了這個目的,每個以太坊用戶端需實作 [JSON-RPC](/developers/docs/apis/json-rpc/) 規範,如此一來,應用程式就可以使用這些一組統一的[方法](/developers/docs/apis/json-rpc/#json-rpc-methods)。 + +如果你想用特定程式設計語言連結以太坊節點,生態系統中有很多便利的程式庫幫助你更輕易完成。 借助這些程式庫,開發者可以編寫直覺的單行方法來初始化與以太坊互動的 JSON-RPC 請求(在後台)。 + +## 先備知識 {#prerequisites} + +瞭解[以太坊堆疊](/developers/docs/ethereum-stack/)和[以太坊用戶端](/developers/docs/nodes-and-clients/)可能會有幫助。 + +## 為何使用程式庫? {#why-use-a-library} + +這些程式庫顯著降低了直接和以太坊節點互動的複雜度。 這些應用程式介面還提供公用程式功能(例如將 ETH 轉換為 Gwei),使得開發者可以花更少的時間處理複雜的以太坊用戶端,將更多的時間專注於應用程式的特定功能。 + +## 可用程式庫 {#available-libraries} + +### 基礎設施和節點服務 {#infrastructure-and-node-services} + +**Alchemy -** **_以太坊開發平台。_** + +- [alchemy.com](https://www.alchemy.com/) +- [文件](https://docs.alchemy.com/) +- [Github](https://github.com/alchemyplatform) +- [Discord](https://discord.com/invite/alchemyplatform) + +**All That Node -** **_節點即服務。_** + +- [All That Node.com](https://www.allthatnode.com/) +- [文件](https://docs.allthatnode.com) +- [Discord](https://discord.gg/GmcdVEUbJM) + +**Bware Labs 的 Blast -** **_以太坊主網和測試網的去中心化應用程式介面。_** + +- [blastapi.io](https://blastapi.io/) +- [文件](https://docs.blastapi.io) +- [Discord](https://discord.gg/bwarelabs) + +**BlockPi -** **_提供更高效及快速的遠端程序呼叫服務_** + +- [blockpi.io](https://blockpi.io/) +- [文檔](https://docs.blockpi.io/) +- [Github](https://github.com/BlockPILabs) +- [Discord](https://discord.com/invite/xTvGVrGVZv) + +**Cloudflare 以太坊閘道。** + +- [cloudflare-eth.com](https://www.cloudflare.com/application-services/products/web3/) + +**Etherscan - 區塊瀏覽器和交易應用程式介面** +- [文件](https://docs.etherscan.io/) + +**GetBlock-** **_用於 Web3 開發的區塊鏈即服務_** + +- [GetBlock.io](https://getblock.io/) +- [文檔](https://getblock.io/docs/) + +**Infura -** **_以太坊應用程式介面即服務。_** + +- [infura.io](https://infura.io) +- [文件](https://docs.infura.io/api) +- [Github](https://github.com/INFURA) + +**Node RPC - _有成本效益的以太坊虛擬機 JSON-RPC 提供者_** + +- [noderpc.xyz](https://www.noderpc.xyz/) +- [文檔](https://docs.noderpc.xyz/node-rpc) + +**NOWNodes - _全節點和區塊瀏覽器。_** + +- [NOWNodes.io](https://nownodes.io/) +- [文件](https://documenter.getpostman.com/view/13630829/TVmFkLwy#intro) + +**QuickNode -** **_區塊鏈基礎設施即服務。_** + +- [quicknode.com](https://quicknode.com) +- [文檔](https://www.quicknode.com/docs/welcome) +- [Discord](https://discord.gg/quicknode) + +**Rivet -** **_由開源軟體支援的以太坊和以太坊經典應用程式介面即服務_** + +- [rivet.cloud](https://rivet.cloud) +- [文件](https://rivet.cloud/docs/) +- [Github](https://github.com/openrelayxyz/ethercattle-deployment) + +**Zmok -** **_速度導向的以太坊節點即 JSON-RPC/WebSockets 應用程式介面。_** + +- [zmok.io](https://zmok.io/) +- [Github](https://github.com/zmok-io) +- [文檔](https://docs.zmok.io/) +- [Discord](https://discord.gg/fAHeh3ka6s) + +### 開發工具 {#development-tools} + +**ethers-kt -** **_適用基於以太坊虛擬機區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。_** + +- [Github](https://github.com/Kr1ptal/ethers-kt) +- [範例](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) +- [Discord](https://discord.gg/rx35NzQGSb) + +**Nethereum -** **_區塊鏈的開源 .NET 整合程式庫。_** + +- [Github](https://github.com/Nethereum/Nethereum) +- [文檔](http://docs.nethereum.com/en/latest/) +- [Discord](https://discord.com/invite/jQPrR58FxX) + +**Python Tooling -** **_透過 Python 進行以太坊互動的各種程式庫。_** + +- [py.ethereum.org](https://python.ethereum.org/) +- [web3.py GitHub](https://github.com/ethereum/web3.py) +- [web3.py 聊天室](https://gitter.im/ethereum/web3.py) + +**Tatum -** **_最好的區塊鏈開發平台。_** + +- [Tatum](https://tatum.io/) +- [GitHub](https://github.com/tatumio/) +- [文檔](https://docs.tatum.io/) +- [Discord](https://discord.gg/EDmW3kjTC9) + +**web3j -** **_以太坊的 Java/Android/Kotlin/Scala 整合程式庫。 _** + +- [Github](https://github.com/web3j/web3j) +- [文件](https://docs.web3j.io/) +- [Gitter](https://gitter.im/web3j/web3j) + +### 區塊鏈服務 {#blockchain-services} + +**BlockCypher -** **_以太坊 Web 應用程式介面。_** + +- [blockcypher.com](https://www.blockcypher.com/) +- [文件](https://www.blockcypher.com/dev/ethereum/) + +**Chainbase -** **_以太坊的一體化 web3 資料基礎設施。_** + +- [chainbase.com](https://chainbase.com/) +- [文件](https://docs.chainbase.com/) +- [Discord](https://discord.gg/Wx6qpqz4AF) + +**Chainstack -** **_彈性且專用的以太坊節點即服務。_** + +- [chainstack.com](https://chainstack.com) +- [文件](https://docs.chainbase.com/docs) +- [以太坊應用程式介面參考資料](https://docs.chainstack.com/reference/ethereum-getting-started) + +**Coinbase 雲端節點 -** **_區塊鏈基礎設施應用程式介面。_** + +- [Coinbase 雲端節點](https://www.coinbase.com/cloud) +- [文件](https://docs.cloud.coinbase.com/) + +**DataHub by Figment -** **_以太坊主網和測試網的 Web3 應用程式介面服務。_** + +- [DataHub](https://www.figment.io/) +- [文件](https://docs.figment.io/) + +**Moralis -** **_企業級以太坊虛擬機應用程式介面提供者。_** + +- [moralis.io](https://moralis.io) +- [文件](https://docs.moralis.io/) +- [GitHub](https://github.com/MoralisWeb3) +- [Discord](https://moralis.io/joindiscord/) +- [論壇](https://forum.moralis.io/) + +**NFTPort -** **_以太坊資料及鑄造應用程式介面。_** + +- [nftport.xyz](https://www.nftport.xyz/) +- [文件](https://docs.nftport.xyz/) +- [GitHub](https://github.com/nftport/) +- [Discord](https://discord.com/invite/K8nNrEgqhE) + +**Tokenview -** **_通用多重加密區塊鏈應用程式介面平台。_** + +- [services.tokenview.io](https://services.tokenview.io/) +- [文件](https://services.tokenview.io/docs?type=api) +- [GitHub](https://github.com/Tokenview) + +**Watchdata -** **_提供簡單可靠的應用程式介面來存取以太坊區塊鏈。_** + +- [Watchdata](https://watchdata.io/) +- [文件](https://docs.watchdata.io/) +- [Discord](https://discord.com/invite/TZRJbZ6bdn) + +**Covalent -** **_200 多條鏈的已擴充區塊鏈應用程式介面。_** + +- [covalenthq.com](https://www.covalenthq.com/) +- [文件](https://www.covalenthq.com/docs/api/) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + + +## 了解更多 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [節點和用戶端](/developers/docs/nodes-and-clients/) +- [開發架構](/developers/docs/frameworks/) + +## 相關教學影片 {#related-tutorials} + +- [設定 Web3js 以在 Javascript 中使用以太坊區塊鏈](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– 在專案中設定 web3.js 的說明。_ +- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _ – 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。 diff --git a/public/content/translations/zh-tw/developers/docs/apis/javascript/index.md b/public/content/translations/zh-tw/developers/docs/apis/javascript/index.md new file mode 100644 index 00000000000..f78e9eea38d --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/apis/javascript/index.md @@ -0,0 +1,295 @@ +--- +title: JavasScript API 圖書館 +description: JavaScript 用戶端程式庫簡介,可讓你從應用程式與區塊鏈進行互動。 +lang: zh-tw +--- + +為了使網路應用程式能夠與以太坊區塊鏈互動(即讀取區塊鏈資料和/或將交易傳送到網路),它必須連結到以太坊節點。 + +為了這個目的,每個以太坊用戶端需實作 [JSON-RPC](/developers/docs/apis/json-rpc/) 規範,如此一來,應用程式就可以使用一組統一的[方法](/developers/docs/apis/json-rpc/#json-rpc-methods)。 + +如果你想使用 JavaScript 與以太坊節點連結,可以使用普通 JavaScript,但生態系統中存在幾個便利的程式庫,讓連結變得更加容易。 借助這些程式庫,開發者可以編寫直覺的單行方法來初始化與以太坊互動的 JSON-RPC 請求(在後台)。 + +請注意,在[合併](/roadmap/merge/)後,如要運行節點,需要兩個互相連結的以太坊軟體:執行用戶端和共識用戶端。 請確定你的節點包含執行用戶端和共識用戶端。 如果你的節點不在本地機器上(比如你的節點在 AWS 執行個體上),請相應地修改教學中的 IP 位址。 更多資訊請見我們的[運行節點](/developers/docs/nodes-and-clients/run-a-node/)頁面。 + +## 基本資訊 {#prerequisites} + +除了瞭解 JavaScript 之外,瞭解<0>以太坊堆疊和<1>以太坊用戶端可能也會有所幫助。 + +## 為何使用資料圖書庫 {#why-use-a-library} + +函式庫簡化與以太坊節點的複雜步驟. 並提供其他效功能(例如: 轉化以太(ETH)到Gwei)使開發者花少時間處理以太坊客戶, 且花更多時間在提升應用程式獨特功能. + +## 程式庫功能 {#library-features} + +### 連結以太坊節點 {#connect-to-ethereum-nodes} + +使用提供者,這些程式庫讓你能夠連結到以太坊並讀取其資料,無論是透過 JSON-RPC、INFURA、Etherscan、Alchemy 還是 MetaMask。 + +**Ethers 範例** + +```js +// BrowserProvider 包裝了一個標準的 Web3 提供者 +// 這就是 MetaMask 注入到每個頁面中的 window.ethereum +const provider = new ethers.BrowserProvider(window.ethereum) + +// MetaMask 外掛程式也允許簽署交易 +// 以傳送以太幣並支付以改變區塊鏈中的狀態。 +//為此, 我們須帳戶簽署者 +const signer = provider.getSigner() +``` + +**Web3js 範例** + +```js +var web3 = new Web3("http://localhost:8545") +// 或 +var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) + +// 更改Provider +web3.setProvider("ws://localhost:8546") +// 或 +web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546")) + +// 使用 IPC provider 於 node.js +var net = require("net") +var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path +// 或 +var web3 = new Web3( + new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net) +) // mac os 路徑 +// windows 路徑為: "\\\\.\\pipe\\geth.ipc" +// linux 路徑為: "/users/myuser/.ethereum/geth.ipc" +``` + +設定完成後,將能夠在區塊鏈查詢: + +- 區塊編碼 +- 燃料預估值 +- 智慧型合約活動 +- 網路 id +- 和更多相關內容... + +### 錢包功能 {#wallet-functionality} + +這些程式庫為你提供建立錢包、管理金鑰和簽署交易的功能。 + +下面是以太幣範例 + +```js +//由助記符(mnemonic) 創建錢包 +mnemonic = + "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol" +walletMnemonic = Wallet.fromPhrase(mnemonic) + +// ...或者從私鑰建立 +walletPrivateKey = new Wallet(walletMnemonic.privateKey) + +walletMnemonic.address === walletPrivateKey.address +// true + +// 根據簽署者應用程式介面取得地址(以 Promise 形式) +walletMnemonic.getAddress() +// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' } + +// 錢包地址也可以同步獲取 +walletMnemonic.address +// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' + +// 內部加密組件 +walletMnemonic.privateKey +// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db' +walletMnemonic.publicKey +// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64' + +// 錢包助記詞 +walletMnemonic.mnemonic +// { +// locale: 'en', +// path: 'm/44\'/60\'/0\'/0/0', +// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol' +// } + +// 注意:用私鑰建立的錢包 +// 沒有助記詞(因為衍生過程不支援) +walletPrivateKey.mnemonic +// null + +// 簽署訊息 +walletMnemonic.signMessage("Hello World") +// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' } + +tx = { + to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72", + value: utils.parseEther("1.0"), +} + +// 簽署交易 +walletMnemonic.signTransaction(tx) +// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' } + +// 連接方法返回一個新的連接到提供者的 +// 錢包執行個體, +wallet = walletMnemonic.connect(provider) + +// 查詢網路 +wallet.getBalance() +// { Promise: { BigNumber: "42" } } +wallet.getTransactionCount() +// { Promise: 0 } + +// 發送以太幣 +wallet.sendTransaction(tx) +``` + +[閱讀完整文檔](https://docs.ethers.io/v5/api/signer/#Wallet) + +設定完成後,你將能夠: + +- 建立帳戶 +- 傳送交易 +- 簽署交易 +- 和更多... + +### 與智慧型合約功能互動 {#interact-with-smart-contract-functions} + +JavaScript 用戶端程式庫讓你的應用程式能透過讀取編譯合約的應用程式二進位介面 (ABI) 呼叫智慧型合約函式。 + +應用程式二進位介面本質上以 JSON 格式解釋了合約的功能,並讓你能夠像使用普通 JavaScript 物件一樣使用合約。 + +以下為 Solidity 合約範例: + +```solidity +contract Test { + uint a; + address d = 0x12345678901234567890123456789012; + + function Test(uint testInt) { a = testInt;} + + event Event(uint indexed b, bytes32 c); + + event Event2(uint indexed b, bytes32 c); + + function foo(uint b, bytes32 c) returns(address) { + Event(b, c); + return d; + } +} +``` + +將產生以下 JSON: + +```json +[{ + "type":"constructor", + "payable":false, + "stateMutability":"nonpayable" + "inputs":[{"name":"testInt","type":"uint256"}], + },{ + "type":"function", + "name":"foo", + "constant":false, + "payable":false, + "stateMutability":"nonpayable", + "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}], + "outputs":[{"name":"","type":"address"}] + },{ + "type":"event", + "name":"Event", + "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}], + "anonymous":false + },{ + "type":"event", + "name":"Event2", + "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}], + "anonymous":false +}] +``` + +這意味著你可以: + +- 傳送交易至智慧型合約並執行其方法 +- 呼叫以預估在以太坊虛擬機中執行時方法將花費的燃料 +- 部署合約 +- 和更多... + +### 公用程式功能 {#utility-functions} + +公用程式功能提供了方便的捷徑,讓以太坊中的構建變得更加容易。 + +以太幣值預設以 Wei 為單位。 1 以太幣 = 1,000,000,000,000,000,000 WEI – 這意味著你正在處理大量數字! `web3.utils.toWei` 自動將以太幣轉換至 Wei。 + +在以太幣中,如下所示: + +```js +// 取得帳戶殘額(藉由地址或ENS名) +balance = await provider.getBalance("ethers.eth") +// { BigNumber: "2337132817842795605" } + +// 因用戶通常想看到以太(ETH)殘額, 通常開發者需 +// 顯示以太(ETH)殘額, 而不是Wei. +ethers.utils.formatEther(balance) +// '2.337132817842795605' +``` + +- [Web3js 公用程式功能](https://docs.web3js.org/api/web3-utils) +- [Ethers 公用程式功能](https://docs.ethers.io/v5/api/utils/) + +## 可用資料圖書庫 {#available-libraries} + +**Web3.js -** **_以太坊 JavaScript 應用程式介面。 _** + +- [文件](https://docs.web3js.org/) +- [Github](https://github.com/ethereum/web3.js/) + +**Ethers.js -** **_使用 JavaScript 和 TypeScript 的完整以太坊錢包實作和公用程式。 _** + +- [文件](https://docs.ethers.io/) +- [Github](https://github.com/ethers-io/ethers.js/) + +**The Graph -** **_用於為以太坊和星際檔案係統資料編製索引並使用 GraphQL 進行查詢的協議。_** + +- [The Graph](https://thegraph.com/) +- [Graph Explorer](https://thegraph.com/explorer/) +- [文件](https://thegraph.com/docs/) +- [Github](https://github.com/graphprotocol/) +- [Discord](https://thegraph.com/discord) + +**light.js ****_針對輕量用戶端最佳化的高階回應式 JS 程式庫。_** + +- [Github](https://github.com/openethereum/js-libs/tree/master/packages/light.js) + +**Web3-wrapper -** **_可替代 Web3.js 的 Typescript。_** + +- [文件](https://0x.org/docs/web3-wrapper#introduction) +- [Github](https://github.com/0xProject/0x-monorepo/tree/development/packages/web3-wrapper) + +**Alchemyweb3 -** **_具有自動重試和增強型應用程式介面的 Web3.js 包裝函式。_** + +- [文件](https://docs.alchemy.com/reference/api-overview) +- [Github](https://github.com/alchemyplatform/alchemy-web3) + +**Alchemy 非同質化代幣應用程式介面 -** **_用於擷取非同質化代幣資料的應用程式介面,包括所有權、中繼資料屬性以及更多。_** + +- [文件](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) +- [GitHub](https://github.com/alchemyplatform/alchemy-web3) + +**viem -** **_以太坊的 TypeScript 介面。_** + +- [文件](https://viem.sh) +- [GitHub](https://github.com/wagmi-dev/viem) + +## 衍生閱讀 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [節點和用戶端](/developers/docs/nodes-and-clients/) +- [開發架構](/developers/docs/frameworks/) + +## 相關教學影片 {#related-tutorials} + +- [設定 Web3js 以在 Javascript 中使用以太坊區塊鏈](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– 在專案中設定 web3.js 的說明。_ +- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _ – 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。 +- [使用 web3 和 Alchemy 傳送交易](/developers/tutorials/sending-transactions-using-web3-and-alchemy/)_ -- 從後端傳送交易的逐步演練。_ diff --git a/public/content/translations/zh-tw/developers/docs/apis/json-rpc/index.md b/public/content/translations/zh-tw/developers/docs/apis/json-rpc/index.md new file mode 100644 index 00000000000..c22d564ca1c --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/apis/json-rpc/index.md @@ -0,0 +1,1771 @@ +--- +title: JSON-RPC 應用程式介面 +description: 一種無狀態、輕量的以太坊用戶端遠端程序呼叫 (RPC) 協定。 +lang: zh-tw +--- + +為了讓軟體應用程式能夠和以太坊區塊鏈互動(例如:讀取區塊鏈資料,發送交易到網路),必須先連結以太坊節點。 + +為此,每個[以太坊用戶端](/developers/docs/nodes-and-clients/#execution-clients)都實作 [JSON-RPC 規範](https://github.com/ethereum/execution-apis),因此無論特定節點或用戶端實作如何,應用程式都可以依賴一組統一的方法。 + +[JSON-RPC](https://www.jsonrpc.org/specification) 是一種無狀態、輕量級的遠端程序呼叫 (RPC) 協定。 該協定定義了幾種資料結構及其處理規則。 它與傳輸無關,因為這些概念可以在同一進程中、透過通訊端、透過超文字傳輸協定或在許多不同的訊息傳遞環境中使用。 它使用 JSON (RFC 4627) 作為資料格式。 + +## 用戶端實作 {#client-implementations} + +每個以太坊用戶端在實作 JSON-RPC 規範時可能會使用不同的程式設計語言。 有關特定程式設計語言的更多詳細資料,請參閱各個[用戶端文件](/developers/docs/nodes-and-clients/#execution-clients)。 我們建議檢查每個用戶端的文件以取得最新的應用程式介面支援資訊。 + +## 便利程式庫 {#convenience-libraries} + +雖然可以選擇透過 JSON-RPC 應用程式介面直接與以太坊用戶端互動,但對於去中心化應用程式開發者來說通常有更簡單的選擇。 許多 [JavaScript](/developers/docs/apis/javascript/#available-libraries) 和[後端應用程式介面](/developers/docs/apis/backend/#available-libraries) 程式庫都是為了在 JSON-RPC 應用程式介面之上提供包裝函式。 借助這些程式庫,開發者可以用自己選擇的程式語言編寫直覺的單行方法,以初始化與以太坊互動的 JSON-RPC 請求(在後台)。 + +## 共識用戶端應用程式介面 {#consensus-clients} + +本頁面主要討論以太坊執行用戶端使用的 JSON-RPC 應用程式介面。 然而,共識用戶端也有一個遠端程序呼叫應用程式介面,讓使用者能夠直接從節點查詢有關節點的資訊、請求信標區塊、信標狀態和其他共識相關資訊。 [信標應用程式介面網頁](https://ethereum.github.io/beacon-APIs/#/)上記錄了此應用程式介面。 + +內部應用程式介面也用於節點內的用戶端間通訊 - 也就是說,它讓共識用戶端和執行用戶端能夠交換資料。 這被稱為「引擎應用程式介面」,其規範可在 [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) 上取得。 + +## 執行用戶端規範 {#spec} + +[在 GitHub 上閱讀完整的 JSON-RPC 應用程式介面規範](https://github.com/ethereum/execution-apis)。 此應用程式介面記錄在[執行應用程式介面網頁](https://ethereum.github.io/execution-apis/api-documentation/)上,並包含一個檢查器來嘗試所有可用的方法。 + +## 慣例 {#conventions} + +### 十六進位值編碼 {#hex-encoding} + +透過 JSON 傳遞兩種關鍵資料類型:未格式化的位元組陣列和數量。 兩者都以十六進位編碼傳遞,但對格式有不同的要求。 + +#### 數量 {#quantities-encoding} + +編碼數量(整數、數字)時:編碼為十六進位,前綴為「0x」,最緊湊的表示形式(輕微例外:零應表示為「0x0」)。 + +下面有些範例: + +- 0x41(在十進位中是 65) +- 0x400(在十進位中是 1024) +- 錯誤:0x(應始終至少有一位數字,零是「0x0」) +- 錯誤:0x0400(不允許有前導零) +- 錯誤:ff(必須有前綴 0x) + +### 無格式資料 {#unformatted-data-encoding} + +編碼無格式資料(位元組陣列、帳戶位址、雜湊值、位元組碼陣列)時:編碼為十六進位,前綴為「0x」,每個位元組兩個十六進位數字。 + +這裡有些範例: + +- 0x41(大小為 1,「A」) +- 0x004200(大小為 3,「0B0」) +- 0x(大小為 0,"") +- 錯誤:0xf0f0f(位數必須為偶數) +- 錯誤:004200(必須以 0x 為前綴) + +### 預設區塊參數 {#default-block} + +下列方法有一個額外的預設區塊參數: + +- [eth_getBalance](#eth_getbalance) +- [eth_getCode](#eth_getcode) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_call](#eth_call) + +當發出對以太坊狀態進行動作的請求時,最後一個預設區塊參數決定了區塊的高度。 + +defaultBlock 參數可以使用以下選項: + +- `HEX String` - 表示整數區塊編號 +- `String "earliest"` 表示最早的/創世區塊 +- `String "latest"` - 表示最新提議的區塊 +- `String "safe"` - 表示最新安全的頭部區塊 +- `String "finalized"` - 表示最新最終確定的區塊 +- `String "pending"` - 表示未決的狀態/交易 + +## 範例 + +在此頁面上,我們提供了有關如何透過命令列工具 [curl](https://curl.se) 使用各 JSON_RPC 應用程式介面端點的範例。 這些單獨的端點範例位於下面的 [Curl 範例](#curl-examples)部分。 在頁面下方,我們還提供了一個使用 Geth 節點、JSON_RPC 應用程式介面和 curl 來編譯和部署智慧型合約的[端到端範例](#usage-example)。 + +## Curl 範例 {#curl-examples} + +下面提供了使用 JSON_RPC 應用程式介面向以太坊節點發出 [curl](https://curl.se) 請求的範例。 每個範例包含對特定端點的描述、其參數、傳回類型,以及應該如何使用的可行範例。 + +curl 請求可能會傳回與內容類型相關的錯誤訊息。 這是因為 `--data` 選項將內容類型設定為 `application/x-www-form-urlencoded`。 如果你的節點確實抱怨這一點,請手動在呼叫程式開始處放置 `-H "Content-Type: application/json"` 來設定標頭。 這些範例也不包括 URL/IP 和通訊埠組合,該組合必須是給 curl 的最後一個引數(例如 `127.0.0.1:8545`)。 完整的 curl 請求包含採用以下形式的附加資料: + +```shell +curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 +``` + +## Gossip、State、History {#gossip-state-history} + +少數重要的 JSON-RPC 方法需要來自以太坊網路的資料,這些資料分屬於三個種類:<0>Gossip、State 和 History。 利用這些章節中的連結移動至每個方法,或利用目錄探索完整的方法清單。 + +### Gossip 方法 {#gossip-methods} + +> 這些方法用於追蹤鏈頭。 這就是交易如何在網路中傳播、進入區塊以及用戶端如何發現新區塊的方式。 + +- [eth_blockNumber](#eth_blocknumber) +- [eth_sendRawTransaction](#eth_sendrawtransaction) + +### State 方法 {#state_methods} + +> 報告所有已存儲資料的目前狀態的方法。 「狀態」像是一大塊可分享的隨機存取記憶體,包含帳戶餘額、合約資料和燃料預估。 + +- [eth_getBalance](#eth_getbalance) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getCode](#eth_getcode) +- [eth_call](#eth_call) +- [eth_estimateGas](#eth_estimategas) + +### History 方法 {#history_methods} + +> 取得包括創世區塊在內的每一區塊的歷史記錄。 這像一個大型只能附加資料的檔案,包括所有區塊頭、區塊體、叔塊和交易收據。 + +- [eth_getBlockTransactionCountByHash](#eth_getblocktransactioncountbyhash) +- [eth_getBlockTransactionCountByNumber](#eth_getblocktransactioncountbynumber) +- [eth_getUncleCountByBlockHash](#eth_getunclecountbyblockhash) +- [eth_getUncleCountByBlockNumber](#eth_getunclecountbyblocknumber) +- [eth_getBlockByHash](#eth_getblockbyhash) +- [eth_getBlockByNumber](#eth_getblockbynumber) +- [eth_getTransactionByHash](#eth_gettransactionbyhash) +- [eth_getTransactionByBlockHashAndIndex](#eth_gettransactionbyblockhashandindex) +- [eth_getTransactionByBlockNumberAndIndex](#eth_gettransactionbyblocknumberandindex) +- [eth_getTransactionReceipt](#eth_gettransactionreceipt) +- [eth_getUncleByBlockHashAndIndex](#eth_getunclebyblockhashandindex) +- [eth_getUncleByBlockNumberAndIndex](#eth_getunclebyblocknumberandindex) + +## JSON-RPC 應用程式介面訓練場 + +你可以使用[訓練場工具](https://ethereum-json-rpc.com)去發掘和試用應用程式介面方法。 訓練場也顯示不同的節點提供者支援的方法和網路。 + +## JSON-RPC 應用程式介面方法 {#json-rpc-methods} + +### web3_clientVersion {#web3_clientversion} + +傳回目前用戶端版本。 + +**參數** + +無 + +**傳回** + +`String` - 目前用戶端版本 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc":"2.0", + "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1" +} +``` + +### web3_sha3 {#web3_sha3} + +傳回給定資料的 Keccak-256(_不是_ 標準化的 SHA3-256)。 + +**參數** + +1. `DATA` - 要轉換為 SHA3 雜湊值的資料 + +```js +params: ["0x68656c6c6f20776f726c64"] +``` + +**返回** + +`DATA` - 給定字串的 SHA3 結果。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' +// Result +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" +} +``` + +### net_version {#net_version} + +傳回目前網路 ID。 + +**參數** + +無 + +**返回** + +`String` - 目前網路 ID。 + +目前網路 ID 的完整清單可在 [chainlist.org](https://chainlist.org) 上找到。 一些常用的如下: + +- `1`:以太坊主網 +- `5`:Goerli 測試網 +- `11155111`:Sepolia 測試網 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "3" +} +``` + +### net_listening {#net_listening} + +如果用戶端正在主動偵聽網路連結,則傳回 `true`。 + +**參數** + +無 + +**返回** + +`Boolean` - 偵聽時為 `true`,否則為 `false`。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc":"2.0", + "result":true +} +``` + +### net_peerCount {#net_peercount} + +傳回目前連線到用戶端的對等點數量。 + +**參數** + +無 + +**返回** + +`QUANTITY` - 表示連結的對等點數量的整數。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' +// Result +{ + "id":74, + "jsonrpc": "2.0", + "result": "0x2" // 2 +} +``` + +### eth_protocolVersion {#eth_protocolversion} + +傳回目前的以太坊協定版本。 請注意此方法[在 Geth 中不可用](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924)。 + +**參數** + +無 + +**返回** + +`String` - 目前的以太坊協定版本 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "54" +} +``` + +### eth_syncing {#eth_syncing} + +傳回一個物件,其中包含有關同步狀態的資料或傳回 `false`。 + +**參數** + +無 + +**返回** + +準確的傳回資料因用戶端實作而異。 當節點未同步時,所有用戶端傳回 `False`,並且所有用戶端傳回下列欄位。 + +`Object|Boolean`,具有同步狀態資料的物件,或不同步時為 `FALSE`: + +- `startingBlock`: `QUANTITY` - 匯入之開始區塊(僅在同步到達其頭部後才會重設) +- `currentBlock`: `QUANTITY` - 目前區塊,與 eth_blockNumber 相同 +- `highestBlock`: `QUANTITY` - 估計的最高區塊 + +然而,個別用戶端也可以提供額外的資料。 例如 Geth 傳回如下資料: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "currentBlock": "0x3cf522", + "healedBytecodeBytes": "0x0", + "healedBytecodes": "0x0", + "healedTrienodes": "0x0", + "healingBytecode": "0x0", + "healingTrienodes": "0x0", + "highestBlock": "0x3e0e41", + "startingBlock": "0x3cbed5", + "syncedAccountBytes": "0x0", + "syncedAccounts": "0x0", + "syncedBytecodeBytes": "0x0", + "syncedBytecodes": "0x0", + "syncedStorage": "0x0", + "syncedStorageBytes": "0x0" + } +} +``` + +而 Besu 傳回: + +```json +{ + "jsonrpc": "2.0", + "id": 51, + "result": { + "startingBlock": "0x0", + "currentBlock": "0x1518", + "highestBlock": "0x9567a3", + "pulledStates": "0x203ca", + "knownStates": "0x200636" + } +} +``` + +請參閱特定用戶端的文檔以獲得更多詳細資料。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": { + startingBlock: '0x384', + currentBlock: '0x386', + highestBlock: '0x454' + } +} +// Or when not syncing +{ + "id":1, + "jsonrpc": "2.0", + "result": false +} +``` + +### eth_coinbase {#eth_coinbase} + +傳回用戶端的 coinbase 地址。 + +**參數** + +無 + +**傳回** + +`DATA`,20 位元組 - 目前 coinbase 地址。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' +// Result +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1" +} +``` + +### eth_chainId {#eth_chainId} + +傳回用來簽署重新執行攻擊保護交易的區塊鏈 ID。 + +**參數** + +無 + +**傳回** + +`chainId`,十六進位數值字串,表示目前區塊鏈 ID 的整數值。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' +// Result +{ + "id":67, + "jsonrpc": "2.0", + "result": "0x1" +} +``` + +### eth_mining {#eth_mining} + +如果用戶端正活躍地開採新區塊,則傳回 `true`。 這方法只對工作量證明網路傳回 `true` 且自[合併](/roadmap/merge/)後這方法不可用在某些用戶端。 + +**參數** + +無 + +**傳回** + +`Boolean` - 如果用戶端正在挖礦,則傳回 `true`,否則傳回 `false`。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' +// +{ + "id":71, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_hashrate {#eth_hashrate} + +傳回正在挖礦的節點每秒的雜湊值數量。 這方法只對工作量證明網路傳回 `true` 且自[合併](/roadmap/merge/)後這方法不可用在某些用戶端。 + +**參數** + +無 + +**傳回** + +`QUANTITY` - 每秒的雜湊數。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' +// Result +{ + "id":71, + "jsonrpc": "2.0", + "result": "0x38a" +} +``` + +### eth_gasPrice {#eth_gasprice} + +傳回預估的目前燃料價格,以 wei 為單位。 例如:Besu 用戶端檢查最後面 100 個區塊並預設傳回燃料單價中位數。 + +**參數** + +無 + +**傳回** + +`QUANTITY` - 表示目前燃料價格的整數,以 wei 為單位。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +// Result +{ + "id":73, + "jsonrpc": "2.0", + "result": "0x1dfd14000" // 8049999872 Wei +} +``` + +### eth_accounts {#eth_accounts} + +傳回用戶端擁有的地址清單。 + +**參數** + +無 + +**傳回** + +`Array of DATA`,20 位元組 - 用戶端擁有的地址。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] +} +``` + +### eth_blockNumber {#eth_blocknumber} + +傳回最近的區塊編號。 + +**參數** + +無 + +**傳回** + +`QUANTITY` - 表示用戶端目前所在區塊編號的整數。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' +// Result +{ + "id":83, + "jsonrpc": "2.0", + "result": "0x4b7" // 1207 +} +``` + +### eth_getBalance {#eth_getbalance} + +傳回給定地址的帳戶餘額。 + +**參數** + +1. `DATA`,20 位元組 - 要檢查餘額的地址。 +2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +```js +params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] +``` + +**傳回** + +`QUANTITY` - 表示目前餘額的整數,以 wei 為單位。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0234c8a3397aab58" // 158972490234375000 +} +``` + +### eth_getStorageAt {#eth_getstorageat} + +從給定地址的存儲位置傳回值。 + +**參數** + +1. `DATA`,20 位元組 - 存儲地址。 +2. `QUANTITY` - 表示存儲中的位置的整數。 +3. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"`、`"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +**傳回** + +`DATA` - 此存儲位置的值。 + +**範例** 正確的位置計算取決於要擷取的存儲。 考慮透過地址 `0x391694e7e0b0cce554cb130d723a9d27458f9298` 部署在 `0x295a70b2de5e3953354a6a8344e616ed314d7251` 的以下合約。 + +``` +contract Storage { + uint pos0; + mapping(address => uint) pos1; + function Storage() { + pos0 = 1234; + pos1[msg.sender] = 5678; + } +} +``` + +擷取 pos0 的值很簡單。 + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} +``` + +擷取對應的元素較困難。 對應中元素位置是依照下列方式計算的: + +```js +keccak(LeftPad32(key, 0), LeftPad32(map position, 0)) +``` + +這意味著要擷取 pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] 處的存儲,我們需要以下列方式計算位置: + +```js +keccak( + decodeHex( + "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + + "0000000000000000000000000000000000000000000000000000000000000001" + ) +) +``` + +可以使用 web3 程式庫的 Geth 控制台進行計算: + +```js +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +現在擷取存儲: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} +``` + +### eth_getTransactionCount {#eth_gettransactioncount} + +傳回從一個地址_發送_的交易數量。 + +**參數** + +1. `DATA`,20 位元組 - 地址。 +2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +```js +params: [ + "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + "latest", // state at the latest block +] +``` + +**傳回** + +`QUANTITY` - 表示從該地址發送的交易數量的整數。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} + +傳回區塊中從符合給定區塊雜湊值的交易數量。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值 + +```js +params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] +``` + +**傳回** + +`QUANTITY` - 表示該區塊中交易數量的整數。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} + +傳回與給定區塊編號相符的區塊中的交易數量。 + +**參數** + +1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 + +```js +params: [ + "0x13738ca", // 20396234 +] +``` + +**傳回** + +`QUANTITY` - 表示該區塊中交易數量的整數。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} + +傳回區塊中符合給定區塊雜湊值的叔塊數量。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值 + +```js +params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] +``` + +**傳回** + +`QUANTITY` - 表示該區塊中叔塊數量的整數。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} + +傳回區塊中符合給定區塊編號的叔塊數量。 + +**參數** + +1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +```js +params: [ + "0xe8", // 232 +] +``` + +**傳回** + +`QUANTITY` - 表示該區塊中叔塊數量的整數。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0" // 0 +} +``` + +### eth_getCode {#eth_getcode} + +傳回給定地址的程式碼。 + +**參數** + +1. `DATA`,20 位元組 - 地址 +2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +```js +params: [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x5daf3b", // 6139707 +] +``` + +**傳回** + +`DATA` - 來自給定地址的程式碼。 + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}' +// 結果 +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029" +} +``` + +### eth_sign {#eth_sign} + +Sign 方法按以下方式計算以太坊特定簽章:`sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`。 + +透過在訊息中加入前綴,可以將計算出的簽章識別為以太坊特定簽章。 這可以防止濫用,即惡意去中心化應用程式簽署任意資料(例如交易)並使用簽章來冒充受害者。 + +注意:要簽章的地址必須解鎖。 + +**參數** + +1. `DATA`,20 位元組 - 地址 +2. `DATA`,N 位元組 - 要簽署的訊息。 + +**傳回** + +`DATA`:簽章 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_signTransaction {#eth_signtransaction} + +簽署交易,稍後可使用 [eth_sendRawTransaction](#eth_sendrawtransaction) 將交易提交到網路。 + +**參數** + +1. `Object` - 交易物件 + +- `type`: +- `from`: `DATA`,20 位元組 - 發送交易的地址。 +- `to`: `DATA` 20 位元組 -(建立新合約時可選)交易指向的地址。 +- `gas`: `QUANTITY` -(可選,預設:90000)表示為交易執行提供的燃料的整數。 將傳回未使用的燃料。 +- `gasPrice`: `QUANTITY` -(可選,預設:尚未決定)表示每次支付燃料時的燃料價格的整數(單位為 Wei)。 +- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數(單位為 Wei)。 +- `data`: `DATA` - 合約的編譯程式碼,或叫用的方法簽章和編碼參數的雜湊。 +- `nonce`: `QUANTITY` -(可選)表示隨機數的整數。 這允許覆寫你自己的使用相同隨機數的待處理交易。 + +**傳回** + +`DATA`,特定帳戶簽署的遞迴長度前綴編碼的交易物件。 + +**範例** + +```js +// Request +curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' +// Result +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_sendTransaction {#eth_sendtransaction} + +如果資料欄位包含程式碼,則建立新的訊息呼叫交易或建立合約,並使用 `from` 中指定的帳戶對其進行簽署。 + +**參數** + +1. `Object` - 交易物件 + +- `from`: `DATA`,20 位元組 - 發送交易的地址。 +- `to`: `DATA` 20 位元組 -(建立新合約時可選)交易指向的地址。 +- `gas`: `QUANTITY` -(可選,預設:90000)表示為交易執行提供的燃料的整數。 將傳回未使用的燃料。 +- `gasPrice`: `QUANTITY` -(可選,預設:尚未決定)表示每次支付燃料時的燃料價格的整數。 +- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數。 +- `input`: `DATA` - 合約的編譯程式碼,或叫用的方法簽章和編碼參數的雜湊值。 +- `nonce`: `QUANTITY` -(可選)表示隨機數的整數。 這允許覆寫你自己的使用相同隨機數的待處理交易。 + +```js +params: [ + { + from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", + to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + gas: "0x76c0", // 30400 + gasPrice: "0x9184e72a000", // 10000000000000 + value: "0x9184e72a", // 2441406250 + input: + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", + }, +] +``` + +**傳回** + +`DATA`,32 位元組 - 交易雜湊值,如果交易尚未可用則為零雜湊值。 + +建立合約時,在區塊中提議交易後,使用 [eth_getTransactionReceipt](#eth_gettransactionreceipt) 取得合約地址。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_sendRawTransaction {#eth_sendrawtransaction} + +建立新的訊息呼叫交易或為簽署的交易建立合約。 + +**參數** + +1. `DATA`,簽署的交易資料。 + +```js +params: [ + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", +] +``` + +**傳回** + +`DATA`,32 位元組 - 交易雜湊值,如果交易尚未可用則為零雜湊值。 + +建立合約時,在區塊中提議交易後,使用 [eth_getTransactionReceipt](#eth_gettransactionreceipt) 取得合約地址。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_call {#eth_call} + +立即執行一個新的訊息呼叫,但不在區塊鏈上建立交易。 通常用於執行唯讀智慧型合約函式,例如 ERC-20 合約的 ` balanceOf`。 + +**參數** + +1. `Object` - 交易呼叫物件 + +- `from`: `DATA`,20 位元組 -(可選)發送交易的地址。 +- `to`: `DATA`,20 位元組 - 交易指向的地址。 +- `gas`: `QUANTITY` -(可選)表示為交易執行提供的燃料的整數。 eth_call 消耗零燃料,但某些執行可能需要此參數。 +- `gasPrice`: `QUANTITY` -(可選)表示每次支付燃料時的燃料價格的整數 +- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數 +- `input`: `DATA` -(可選)方法簽章和編碼參數的雜湊值。 詳細資料請參考 [Solidity 文檔中的以太坊合約應用程式二進位介面](https://docs.soliditylang.org/en/latest/abi-spec.html)。 + +2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) + +**傳回** + +`DATA` - 已執行合約的傳回值。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x" +} +``` + +### eth_estimateGas {#eth_estimategas} + +產生和傳回完成交易所必需的燃料量預估值。 交易將不會新增至區塊鏈。 請注意,由於以太坊虛擬機機制和節點效能等種種原因,預估值可能明顯地大於交易實際使用的燃料量。 + +**參數** + +請參閱 <0>eth_call 參數,但所有屬性都是可選的。 假如沒有明確說明燃料限制,Geth 將使用來自待處理區塊的區塊燃料限制作為上限。 因此,當燃料量高於待處理區塊燃料限制時,傳回的預估值可能不足以執行呼叫或交易。 + +**傳回** + +`QUANTITY` - 使用的燃料數量。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x5208" // 21000 +} +``` + +### eth_getBlockByHash {#eth_getblockbyhash} + +根據雜湊值傳回區塊資訊。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值。 +2. `Boolean` - 如果為 `true`,傳回完整交易物件,如果為 `false`,只傳回交易的雜湊值。 + +```js +params: [ + "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + false, +] +``` + +**傳回** + +`Object` - 區塊物件,或如果未找到區塊,則為 `null`: + +- `number`: `QUANTITY` - 區塊編號。 當為待處理區塊時,為 `null`。 +- `hash`: `DATA`,32 位元組 - 區塊的雜湊值。 當為待處理區塊時,為 `null`。 +- `parentHash`: `DATA`,32 位元組 - 父區塊的雜湊值。 +- `nonce`: `DATA`,8 位元組 - 產生的工作量證明的雜湊值。 當為待處理區塊時,為 `null`。 +- `sha3Uncles`: `DATA`,32 位元組 - 區塊中叔塊資料的第三代安全雜湊演算法。 +- `logsBloom`: `DATA`,256 位元組 - 區塊日誌的布隆篩選器。 當為待處理區塊時,為 `null`。 +- `transactionsRoot`: `DATA`,32 位元組 - 區塊交易樹的根。 +- `stateRoot`: `DATA`,32 位元組 - 區塊最終狀態樹的根。 +- `receiptsRoot`: `DATA`,32 位元組 - 區塊收據樹的根。 +- `miner`: `DATA`,20 位元組 - 挖礦獎勵受款人的地址。 +- `difficulty`: `QUANTITY` - 表示區塊難度的整數。 +- `totalDifficulty`: `QUANTITY` - 表示此區塊前的區塊鏈的總難度的整數。 +- `extraData`: `DATA` - 該區塊的「額外資料」欄位。 +- `size`: `QUANTITY` - 表示此區塊大小的整數,以位元組為單位。 +- `gasLimit`: `QUANTITY` - 此區塊允許的最大燃料量。 +- `gasUsed`: `QUANTITY` - 此區塊所有交易所使用的總燃料量。 +- `timestamp`: `QUANTITY` - 整理區塊時的 unix 時間戳。 +- `transactions`: `Array` - 交易物件陣列,或是 32 位元組交易雜湊值,取決於最後一個給定的參數。 +- `uncles`: `Array` - 叔塊雜湊值陣列。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' +// Result +{ +{ +"jsonrpc": "2.0", +"id": 1, +"result": { + "difficulty": "0x4ea3f27bc", + "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32", + "gasLimit": "0x1388", + "gasUsed": "0x0", + "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171", + "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843", + "nonce": "0x689056015818adbe", + "number": "0x1b4", + "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x220", + "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d", + "timestamp": "0x55ba467c", + "totalDifficulty": "0x78ed983323d", + "transactions": [ + ], + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncles": [ + ] +} +} +``` + +### eth_getBlockByNumber {#eth_getblockbynumber} + +根據區塊編號傳回關於區塊的資訊。 + +**參數** + +1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 +2. `Boolean` - 如果為 `true`,傳回完整交易物件,如果為 `false`,只傳回交易的雜湊值。 + +```js +params: [ + "0x1b4", // 436 + true, +] +``` + +**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' +``` + +結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_getTransactionByHash {#eth_gettransactionbyhash} + +傳回有關按交易雜湊值請求的交易的資訊。 + +**參數** + +1. `DATA`,32 位元組 - 交易的雜湊值 + +```js +params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] +``` + +**傳回** + +`Object` - 交易物件,或當找不到交易時為 `null`: + +- `blockHash`: `DATA`,32 位元組 - 此交易所在區塊的雜湊值。 當為待處理時,為 `null`。 +- `blockNumber`: `QUANTITY` - 此交易所在的區塊編號。 當為待處理時,為 `null`。 +- `from`: `DATA`,20 位元組 - 發送者的地址。 +- `gas`: `QUANTITY` - 發送者提供的燃料。 +- `gasPrice`: `QUANTITY` - 發送者提供的燃料價格,以 Wei 為單位。 +- `hash`: `DATA`,32 位元組 - 交易的雜湊值。 +- `input`: `DATA` - 隨交易一起傳送的資料。 +- `nonce`: `QUANTITY` - 發送者在這之前所進行的交易數量。 +- `to`: `DATA`,20 位元組 - 接收者的地址。 如果是合約建立交易,則為 `null`。 +- `transactionIndex`: `QUANTITY` - 表示區塊中交易索引位置的整數。 當為待處理時,為 `null`。 +- `value`: `QUANTITY` - 傳輸的值,以 Wei 為單位。 +- `v`: `QUANTITY` - 橢圓曲線數位簽章演算法復原 ID +- `r`: `QUANTITY` - 橢圓曲線數位簽章演算法簽章 r +- `s`: `QUANTITY` - 橢圓曲線數位簽章演算法簽章 s + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' +// Result +{ + "jsonrpc":"2.0", + "id":1, + "result":{ + "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "blockNumber":"0x5daf3b", // 6139707 + "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d", + "gas":"0xc350", // 50000 + "gasPrice":"0x4a817c800", // 20000000000 + "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", + "input":"0x68656c6c6f21", + "nonce":"0x15", // 21 + "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb", + "transactionIndex":"0x41", // 65 + "value":"0xf3dbb76162000", // 4290000000000000 + "v":"0x25", // 37 + "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" + } +} +``` + +### eth_getTransactionByBlockHashAndIndex {#eth_gettransactionbyblockhashandindex} + +按區塊雜湊值和交易索引位置傳回有關交易的資訊。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值。 +2. `QUANTITY` - 表示交易索引位置的整數。 + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**傳回** 請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +結果請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} + +按區塊編號和交易索引位置傳回有關交易的資訊。 + +**參數** + +1. `QUANTITY|TAG` - 區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 +2. `QUANTITY` - 交易索引位置。 + +```js +params: [ + "0x9c47cf", // 10241999 + "0x24", // 36 +] +``` + +**傳回** 請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' +``` + +結果請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionReceipt {#eth_gettransactionreceipt} + +按交易雜湊值返回交易的收據。 + +**注意**待處理交易沒有收據。 + +**參數** + +1. `DATA`,32 位元組 - 交易的雜湊值 + +```js +params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] +``` + +**傳回** `Object` - 交易收據物件,或當找不到收據時為 `null`: + +- `transactionHash`: `DATA`,32 位元組 - 交易的雜湊值。 +- `transactionIndex`: `QUANTITY` - 表示區塊中交易索引位置的整數。 +- `blockHash`: `DATA`,32 位元組 - 此交易所在區塊的雜湊值。 +- `blockNumber`: `QUANTITY` - 此交易所在的區塊編號。 +- `from`: `DATA`,20 位元組 - 發送者的地址。 +- `to`: `DATA`,20 位元組 - 接收者的地址。 如果是合約建立交易,則為 null。 +- `cumulativeGasUsed`: `QUANTITY` - 當區塊執行此交易時所使用的總燃料量。 +- `effectiveGasPrice`: `QUANTITY` - 每單位燃料支付的基本費用和小費的總和。 +- `gasUsed`: `QUANTITY` - 僅此特定交易所使用的燃料量。 +- `contractAddress`: `DATA`,20 位元組 - 如果交易為建立合約,則為建立的合約地址,否則為 `null`。 +- `logs`: `Array` - 此交易產生的日誌物件陣列。 +- `logsBloom`: `DATA`,256 位元組 - 給輕量用戶端快速擷取相關日誌的布隆篩選器。 +- `type`: `QUANTITY` - 表示交易類型的整數,`0x0` 表示傳統交易,`0x1` 表示存取清單類型, `0x2` 表示動態費用。 + +它也傳回 _以下兩者之一_: + +- `root` : `DATA` 32 位元組的交易後狀態根(拜占庭升級之前) +- `status`: `QUANTITY` 要麼 `1`(成功)要麼 `0`(失敗) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' +// Result +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "blockHash": + "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", + "blockNumber": "0xeff35f", + "contractAddress": null, // string of the address if it was created + "cumulativeGasUsed": "0xa12515", + "effectiveGasPrice": "0x5a9c688d4", + "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", + "gasUsed": "0xb4c8", + "logs": [{ + // logs as returned by getFilterLogs, etc. + }], + "logsBloom": "0x00...0", // 256 byte bloom filter + "status": "0x1", + "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "transactionHash": + "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5", + "transactionIndex": "0x66", + "type": "0x2" + } +} +``` + +### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} + +按雜湊值和叔塊索引位置傳回關於區塊的叔塊資訊。 + +**參數** + +1. `DATA`,32 位元組 - 區塊的雜湊值。 +2. `QUANTITY` - 叔塊的索引位置。 + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) + +**範例** + +```js +// 請求 +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) + +**注意**:叔塊不包含單獨交易。 + +### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} + +按編號和叔塊索引位置傳回關於區塊的叔塊資訊。 + +**參數** + +1. `QUANTITY|TAG` - 區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 +2. `QUANTITY` - 叔塊的索引位置。 + +```js +params: [ + "0x29c", // 668 + "0x0", // 0 +] +``` + +**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) + +**注意**:叔塊不包含單獨交易。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' +``` + +結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_newFilter {#eth_newfilter} + +根據篩選條件選項建立一個篩選條件物件,以在狀態改變時發出通知(日誌)。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 + +**關於指定主題篩選條件的說明:** 主題跟順序相關。 以下主題篩選條件將匹配日誌中包含主題 [A, B] 的交易: + +- `[]`「任意值」 +- `[A]`「第一個位置為 A(其後為任意值)」 +- `[null, B]`「第一位置為任意值,且第二位置為 B(其後為任意值)」 +- `[A, B]`「第一位置為 A,且第二位置為 B(其後為任意值)」 +- `[[A, B], [A, B]]`「第一位置為(A 或 B)且第二位置為(A 或 B)(其後為任意值)」 +- **參數** + +1. `Object` - 篩選條件選項: + +- `fromBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 +- `toBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 +- `address`: `DATA|Array`,20 位元組 - (可選)合約地址或日誌起源的地址清單。 +- `topics`: `Array of DATA`,(可選)32 位元組陣列 `DATA` 主題。 主題與順序相關。 每個主題也可以為帶有「或」選項的 DATA 陣列。 + +```js +params: [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0x8888f1f195afa192cfee860698584c030f4c9db1", + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + null, + [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc", + ], + ], + }, +] +``` + +**傳回** `QUANTITY` - 篩選條件 ID。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newBlockFilter {#eth_newblockfilter} + +在節點中建立一個篩選條件,以在新區塊到達時發出通知。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 + +**參數** 無 + +**傳回** `QUANTITY` - 篩選條件 ID。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} + +在節點中建立一個篩選條件,以在新的待處理交易到達時發出通知。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 + +**參數** 無 + +**傳回** `QUANTITY` - 篩選條件 ID。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_uninstallFilter {#eth_uninstallfilter} + +根據給定 ID 解除安裝篩選條件。 當不再需要監視時,應始終對其進行呼叫。 另外,當在一段時間內未使用 [eth_getFilterChanges](#eth_getfilterchanges) 請求篩選條件時,篩選條件會逾時。 + +**參數** + +1. `QUANTITY` - 篩選條件 ID。 + +```js +params: [ + "0xb", // 11 +] +``` + +**傳回** `Boolean` - 如果成功解除安裝篩選條件,則為 `true`,否則為 `false`。 + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' +// Result +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_getFilterChanges {#eth_getfilterchanges} + +篩選條件輪詢方法,傳回自從上次輪詢後產生的日誌陣列。 + +**參數** + +1. `QUANTITY` - 篩選條件 ID。 + +```js +params: [ + "0x16", // 22 +] +``` + +**傳回** `Array` - 日誌物件陣列,或如果自上次輪詢沒有任何變更,則為空陣列。 + +- 對於使用 `eth_newBlockFilter` 建立的篩選條件,傳回值是區塊雜湊值(`DATA`,32 位元組),例如 `["0x3454645634534..."]`。 +- 對於使用 `eth_newPendingTransactionFilter` 建立的篩選條件,傳回值是交易雜湊值(`DATA`,32 位元組),例如 `["0x6345343454645..."]`。 +- 對於使用 `eth_newFilter` 建立的篩選條件,日誌是包含下列參數的物件: + - `removed`: `TAG` - 當日誌由於鏈重組被移除時,為 `true`。 如果是有效日誌,則為 `false`。 + - `logIndex`: `QUANTITY` - 表示區塊內日誌索引位置的整數。 當為待處理日誌時,為 `null`。 + - `transactionIndex`: `QUANTITY` - 表示從中建立日誌的交易索引位置的整數。 當為待處理日誌時,為 `null`。 + - `transactionHash`: `DATA`,32 位元組 - 從中建立此日誌的交易的雜湊值。 當為待處理日誌時,為 `null`。 + - `blockHash`: `DATA`,32 位元組 - 此日誌所在區塊的雜湊值。 當為待處理時,為 `null`。 當為待處理日誌時,為 `null`。 + - `blockNumber`: `QUANTITY` - 此日誌所在的區塊編號。 當為待處理時,為 `null`。 當為待處理日誌時,為 `null`。 + - `address`: `DATA`,20 位元組 -此日誌的來源地址。 + - `data`: `DATA` - 包含零個或多個 32 位元組非索引日誌引數。 + - `topics`: `Array of DATA` - 索引日誌引數的 0 到 4 個 32 位元組 `DATA` 陣列。 (在 _solidity_:第一個主題是事件簽章的_雜湊值_(例如 `Deposit(address,bytes32,uint256)`),除非你使用說明符 `anonymous` 宣告了該事件)。 +- **範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' +// Result +{ + "id":1, + "jsonrpc":"2.0", + "result": [{ + "logIndex": "0x1", // 1 + "blockNumber":"0x1b4", // 436 + "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf", + "transactionIndex": "0x0", // 0 + "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "data":"0x0000000000000000000000000000000000000000000000000000000000000000", + "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"] + },{ + ... + }] +} +``` + +### eth_getFilterLogs {#eth_getfilterlogs} + +傳回與給定 ID 之篩選條件相符的所有日誌的陣列。 + +**參數** + +1. `QUANTITY` - 篩選條件 ID。 + +```js +params: [ + "0x16", // 22 +] +``` + +**傳回** 請參閱 [eth_getFilterChanges](#eth_getfilterchanges) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' +``` + +結果請參閱 [eth_getFilterChanges](#eth_getfilterchanges) + +### eth_getLogs {#eth_getlogs} + +傳回與給定篩選條件物件相符的所有日誌的陣列。 + +**參數** + +1. `Object` - 篩選條件選項: + +- `fromBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 +- `toBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 +- `address`: `DATA|Array`,20 位元組 - (可選)合約地址或日誌起源的地址清單。 +- `topics`: `Array of DATA`,(可選)32 位元組陣列 `DATA` 主題。 主題與順序相關。 每個主題也可以為帶有「或」選項的 DATA 陣列。 +- `blockhash`: `DATA`,32 位元組 - (可選,**future**),新增 EIP-234 後,`blockHash` 將是一個新的篩選條件選項,會將傳回的日誌限制為具有 32 位元組雜湊值 `blockHash` 的單一區塊。 使用 `blockHash` 等於 `fromBlock` = `toBlock` = 具有雜湊值 `blockHash` 的區塊編號。 如果 `blockHash` 出現在篩選條件中,則 `fromBlock` 和 `toBlock` 都不允許使用。 + +```js +params: [ + { + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + ], + }, +] +``` + +**傳回** 請參閱 [eth_getFilterChanges](#eth_getfilterchanges) + +**範例** + +```js +// Request +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' +``` + +結果請參閱 [eth_getFilterChanges](#eth_getfilterchanges) + +## 使用範例 {#usage-example} + +### 使用 JSON_RPC 部署合約 {#deploying-contract} + +這部分示範如何只使用遠端程序呼叫介面部署合約。 有其他的部署合約方法可以消除這種複雜性,例如,使用建置在遠端程序呼叫介面之上的程式庫,例如 [web3.js](https://web3js.readthedocs.io/) 和 [web3.py](https://github.com/ethereum/web3.py)。 雖然在抽象化之後,一般來說比較容易理解和較不易出錯,但理解在後台發生了什麼是有益的。 + +下面是一個名為 `Multiply7` 的簡單智慧型合約,將使用 JSON-RPC 介面把其部署到以太坊節點。 本教學假設讀者已經執行一個 Geth 節點。 更多節點和用戶端的資訊可以在[這裡](/developers/docs/nodes-and-clients/run-a-node)獲得。 請參考個別的[用戶端](/developers/docs/nodes-and-clients/)文件瞭解如何為非 Geth 用戶端開啟 HTTP JSON-RPC。 大多數用戶端預設在 `localhost:8545` 上提供服務。 + +```javascript +contract Multiply7 { + event Print(uint); + function multiply(uint input) returns (uint) { + Print(input * 7); + return input * 7; + } +} +``` + +首先,確定啟用了 HTTP 遠端程序呼叫介面。 也就是說,在啟動時我們為 Geth 提供 `--http` 旗標。 在這個例子中,我們使用私有開發鏈的 Geth 節點。 使用這個方法,將不需要真實網路上的以太幣。 + +```bash +geth --http --dev console 2>>geth.log +``` + +這將在 `http://localhost:8545` 上啟動 HTTP 遠端程序呼叫介面。 + +我們可以使用 [curl](https://curl.se) 擷取 Coinbase 地址和餘額來驗證介面正在執行。 請注意,這些範例中的資料與你的本地節點有所不同。 如果你想嘗試這些命令,請將第二個 curl 請求中的請求參數替換為第一個請求返回的結果。 + +```bash +curl --data '{"jsonrpc":"2.0","method":"eth_coinbase", "id":1}' -H "Content-Type: application/json" localhost:8545 +{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]} + +curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 +{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"} +``` + +由於數字是十六進位編碼的,因此餘額以十六進位字串形式形式傳回(單位為 wei)。 如果想要以數位形式獲得以太幣餘額,可以使用 Geth 控制台中的 web3。 + +```javascript +web3.fromWei("0x1639e49bba16280000", "ether") +// "410" +``` + +現在我們的私有開發鏈上有一些以太幣,我們可以部署合約了。 第一步是把 Multiply7 合約編譯成可以傳送到以太坊虛擬機的字元組程式碼。 要安裝 Solidity 編譯器 solc,請參考 [Solidity 文件](https://docs.soliditylang.org/en/latest/installing-solidity.html)。 (為符合[我們的範例中使用的編譯器版本](https://github.com/ethereum/solidity/releases/tag/v0.4.20),你可能想要使用較舊的 `solc` 版本。) + +下一步是把 Multiply7 合約編譯成可以傳送到以太坊虛擬機的字元組程式碼。 + +```bash +echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin + +======= :Multiply7 ======= +Binary: +6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029 +``` + +現在我們有了編譯後的程式碼,我們需要確定部署程式碼需要花費多少燃料。 遠端程序呼叫介面有 `eth_estimateGas` 方法可以給我們預估值。 + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":5,"result":"0x1c31e"} +``` + +最後部署合約。 + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545 +{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"} +``` + +交易被節點接受且傳回交易雜湊值。 雜湊值可以用來追蹤交易。 下一步是確定將合約部署至的地址。 每一個被執行的交易將會產生一份收據。 此收據包含各種關於交易的資訊,例如:交易包含在哪一個區塊中,以及以太坊虛擬機使用多少燃料。 假如交易建立一個合約,交易也將包含合約地址。 我們可以用 `eth_getTransactionReceipt` 遠端程序呼叫方法擷取收據。 + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}} +``` + +我們的合約是建立在 `0x4d03d617d700cf81935d7f797f4e2ae719648262`。 結果為 null 而不是收據時,表示交易尚未列入區塊中。 稍等一下,並檢查你的共識用戶端是否正常執行,然後重試一次。 + +#### 與智能合約互動 {#interacting-with-smart-contract} + +在此範例中,我們將使用 `eth_sendTransaction` 向合約的 `multiply` 方法傳送交易。 + +`eth_sendTransaction` 需要若干引數,特別是 `from`、`to` 和 `data`。 `From` 是我們帳戶的公共地址,`to` 是合約地址。 `data` 引數包含有效負載,定義了必須呼叫哪個方法以及使用哪些引數。 這是 [ABI(應用程式二進位介面)](https://docs.soliditylang.org/en/latest/abi-spec.html)發揮作用的地方。 應用程式二進位介面是定義如何為以太坊虛擬機定義和編碼資料的 JSON 檔案。 + +有效負載中的位元組定義要呼叫合約中的哪個方法。 這是函式名稱及其引數類型的 Keccak 雜湊值的前 4 個位元組(十六進位編碼)。 Multiply 函式接受 uint,它是 uint256 的別名。 我們得到以下結果: + +```javascript +web3.sha3("multiply(uint256)").substring(0, 10) +// "0xc6888fa1" +``` + +下一步是對引數進行編碼。 只有一個 uint256,例如值 6。 應用程式二進制介面有一個部分指定如何對 uint256 類型進行編碼。 + +`int: enc(X)` 是 X 的高位元組在前二進位補碼編碼,對於負 X 在高位(左側)填充 0xff,對於正 X 填充零 > 位元組,使得長度為 32 位元組的倍數。 + +這編碼為 `000000000000000000000000000000000000000000000000000000000000006`。 + +結合函式選擇器和已編碼的引數,我們的資料如下:`0xc6888fa10000000000000000000000000000000000000000000000000000000000000006`。 + +現在可將其傳送到節點: + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545 +{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"} +``` + +由於傳送了交易,因此傳回了交易雜湊值。 擷取收據得到以下內容: + +```javascript +{ + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + contractAddress: null, + cumulativeGasUsed: 22631, + gasUsed: 22631, + logs: [{ + address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + data: "0x000000000000000000000000000000000000000000000000000000000000002a", + logIndex: 0, + topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 + }], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 +} +``` + +收據包含了日誌。 此日誌由以太坊虛擬機在交易執行時產生並包含在收據中。 `multiply` 函式顯示 `Print` 事件在輸入乘以 7 時觸發。 由於 `Print` 事件的引數是 uint256,我們可以根據應用程式二進位介面規則對其進行解碼,得到預期的十進位數 42。 除了資料之外,值得注意的是,主題可用於確定哪個事件建立了日誌: + +```javascript +web3.sha3("Print(uint256)") +// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" +``` + +這只是對一些最常見任務的簡要介紹,演示了 JSON-RPC 的直接使用。 + +## 相關主題 {#related-topics} + +- [JSON-RPC 規範](http://www.jsonrpc.org/specification) +- [節點和用戶端](/developers/docs/nodes-and-clients/) +- [Javascript 應用程式介面](/developers/docs/apis/javascript/) +- [後端應用程式介面](/developers/docs/apis/backend/) +- [執行用戶端](/developers/docs/nodes-and-clients/#execution-clients) diff --git a/public/content/translations/zh-tw/developers/docs/blocks/index.md b/public/content/translations/zh-tw/developers/docs/blocks/index.md index 95d4c344e95..fa1751a2c29 100644 --- a/public/content/translations/zh-tw/developers/docs/blocks/index.md +++ b/public/content/translations/zh-tw/developers/docs/blocks/index.md @@ -139,11 +139,11 @@ lang: zh-tw ## 區塊大小 {#block-size} -最後一個重要事項:區塊本身具大小限制。 每個區塊具 15M 單位燃料用量之目標大小,但區塊大小將跟隨網路需求增減,最大可達到 30M 燃料用量的區塊大小限制(目標區塊大小之兩倍)。 區塊中所有交易消耗的總燃料用量須少於區塊燃料限制。 這一點非常重要,因其確保區塊不能成為任意大小。 若區塊可以任意大,由於空間及速度方面的要求,那些效能一般的全節點可能逐漸跟不上網路。 區塊愈大,在下一個時隙中及時處理它們所需的算力就愈多。 這是一種中心化力量,可以透過限制區塊大小來抵制。 +最後一個重要事項:區塊本身具大小限制。 每個區塊具 15M 單位燃料用量之目標大小,但區塊大小將跟隨網路需求增減,最大可達到 30M 燃料用量的區塊大小限制(目標區塊大小之兩倍)。 區塊的燃料限制可以比前一個區塊的燃料限制上調或下調 1/1024。 因此,驗證者可以透過共識來改變區塊的燃料限制。 區塊中所有交易消耗的總燃料用量須少於區塊燃料限制。 這一點非常重要,因其確保區塊不能成為任意大小。 若區塊可以任意大,由於空間及速度方面的要求,那些效能一般的全節點可能逐漸跟不上網路。 區塊愈大,在下一個時隙中及時處理它們所需的算力就愈多。 這是一種中心化力量,可以透過限制區塊大小來抵制。 ## 衍生閱讀 {#further-reading} -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ ## 相關主題 {#related-topics} diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/index.md new file mode 100644 index 00000000000..832a6b165cf --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/index.md @@ -0,0 +1,92 @@ +--- +title: 共識機制 +description: 解釋分佈式系統中的共識協定及其於以太坊中扮演的角色。 +lang: zh-tw +--- + +「共識機制」一詞常泛指「權益證明」、「工作量證明」或「權威證明」協定。 然而,這些證明方式僅為共識機制當中用來抵禦[女巫攻擊](/glossary/#sybil-attack)的組成部分。 共識機制是由一整套想法、協定和激勵構成的體系,使得一系列分佈式節點能夠就區塊鏈狀態達成一致。 + +## 基本資訊 {#prerequisites} + +為了加深對本頁內容的理解,我們推薦你先仔細閱讀我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 + +## 何為共識? {#what-is-consensus} + +提到共識,我們意指公共合意已被達成。 考慮一群想去看電影的人。 如果他們對於提議「看某部電影」沒有任何異議,那就可以說共識達成了。 如果存在異議,那他們就必須透過某種方法決定要看哪一部電影。 在極端情況下,這群人就會分開。 + +對於以太坊區塊鏈來說,該過程是標準化的,達成共識意味著全網路中至少 66% 的節點就網路的全域狀態達成一致。 + +## 何為共識機制? {#what-is-a-consensus-mechanism} + +共識機制一詞是指一整套由協定、激勵和想法構成的體系,使得整個網路的節點能夠就區塊鏈狀態達成一致。 + +以太坊採用基於權益證明的共識機制,其加密經濟安全性源於對質押者的鎖定資本實施的一系列獎勵和懲罰措施。 這種激勵體系鼓勵各個質押者誠信運作驗證者節點,並懲罰那些有不良行為的質押才,讓攻擊網路的行為付出極為高昂的代價。 + +還有一個協定,用於規範如何選擇誠實的驗證者,讓它們提議或驗證區塊、處理交易並投票支持其鏈頭部的視圖。 在極少數情況下,如果鏈頭部附近的同一位置存在多個區塊,就會利用一個分叉選擇機制來選擇組成「最重」的鏈的區塊。區塊權重根據為相應區塊投票的驗證者數量進行計算,並按驗證者質押的以太幣餘額進行加權。 + +有些關於共識的重要概念並未在規範中明確定義,例如由潛在「帶外社交協調」提供的額外安全保障,可作為防禦網路攻擊的最後一道防線。 + +這些部分共同組成了共識機制。 + +## 共識機制種類 {#types-of-consensus-mechanisms} + +### 基於工作量證明 {#proof-of-work} + +和比特幣類似,以太坊也曾經使用基於**工作量證明 (PoW)** 的共識協定。 + +#### 區塊建立 {#pow-block-creation} + +礦工相互競爭以建立包含已處理交易的新區塊。 贏家將與網路其餘部分分享新區塊,並獲得一些新鑄造的以太幣。 解決數學問題速度最快的電腦會在比賽中獲勝。 這會產生當前區塊和之前的區塊之間的加密連結。 解決此數學問題便是「工作量證明」所做的工作。 隨後由一條分叉選擇規則確定規範鏈,該規則會選擇一組在挖礦工作方面做得最多的區塊。 + +#### 安全性 {#pow-security} + +你需要控制 51% 的網路算力才能欺騙網路,這一事實確保了網路安全。 發起攻擊需要鉅額的設備和能源投入;你花費的可能會比你賺的還要多。 + +更多關於[工作量證明](/developers/docs/consensus-mechanisms/pow/)的資訊 + +### 基於權益證明 {#proof-of-stake} + +以太坊目前使用基於**權益證明 (PoS)** 的共識協定。 + +#### 區塊生成 {#pos-block-creation} + +驗證者建立區塊。 每個時隙都會隨機選擇一個驗證者成為區塊提議者。 區塊提議者的共識用戶端請求配對的執行用戶端對交易打包,作為「執行有效負載」。 然後它們將其包裝成共識資料以形成區塊,再把這個區塊傳送給以太坊網路上的其他節點。 這樣的區塊產生會得到以太幣獎勵。 在極少數情況下,當一個時隙中存在多個可能的區塊,或節點在不同時間收到區塊,分叉選擇演算法就會選擇使形成的鏈具有最大證明權重的區塊(證明權重是指提供證明的驗證者數量,並按驗證者質押的以太幣餘額進行調整)。 + +#### 安全性 {#pos-security} + +權益證明系統以加密經濟的方式保障安全,因為攻擊者若試圖控制整個鏈,就必須銷毀大量以太幣。 獎勵機制會獎勵誠實行事的質押者,而懲罰機制則會抑制質押者做出惡意行為。 + +更多關於[權益證明](/developers/docs/consensus-mechanisms/pos/)的資訊 + +### 視覺導覽 {#types-of-consensus-video} + +觀看以太坊上所用不同類型之共識機制的更多資訊: + + + +### 抵禦女巫攻擊與區塊鏈選擇 {#sybil-chain} + +僅僅工作量證明和權益證明還不能構成共識協定,但為了簡便起見,通常將它們稱為共識協定。 它們實際是抵禦女巫攻擊機制及區塊鏈創作者選擇程式;提供了一種方法來決定誰能成為最新區塊創作者。 另一個重要組成部分是鏈選擇(又稱分叉選擇)演算法,在同一位置有多個區塊的情況下,它讓節點可以在鏈頭部選擇一個正確的區塊。 + +**抵禦女巫攻擊**衡量協定有效對抗女巫攻擊的能力。 抵禦此類攻擊對於去中心化區塊鏈至關緊要,可使所有礦工與驗證者能夠基於其投入的資源平等地獲得獎勵。 工作量證明及權益證明透過讓使用者耗費大量能源或投入大量抵押,來防範此類攻擊。 此類保護會對女巫攻擊形成經濟上的威懾。 + +**區塊鏈選擇規則**被用來決定哪條鏈為「正確」的鏈。 比特幣使用「最長鏈」規則。這意味著,任何最長的區塊鏈,都會被其他節點接受並與之合作。 對於工作量證明區塊鏈,最長鏈取決於該鏈所累積之工作量證明總難度。 以太坊也曾經用過最長鏈規則;但現在以太坊在權益證明機制下運作,採用了經過更新的分叉選擇演算法來衡量鏈的「權重」。 權重是累積的驗證者投票數累積總和,並以驗證者質押的以太幣餘額進行加權。 + +以太坊使用一種被稱為 [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) 的共識機制,它結合了 [Casper 友善最終確定性組件權益證明](https://arxiv.org/abs/1710.09437)和[最貪婪最重觀測子樹 (GHOST) 分叉選擇規則](https://arxiv.org/abs/2003.03052)。 + +## 衍生閱讀 {#further-reading} + +- [何為區塊鏈共識演算法?](https://academy.binance.com/en/articles/what-is-a-blockchain-consensus-algorithm) +- [何為 Nakamoto 共識? 完整初學者指南](https://blockonomi.com/nakamoto-consensus/) +- [Casper 機制如何運作?](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) +- [關於權益證明區塊鏈的安全性及效能](https://eprint.iacr.org/2016/555.pdf) +- [拜占庭問題](https://en.wikipedia.org/wiki/Byzantine_fault) + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ + +## 相關主題 {#related-topics} + +- [工作量證明](/developers/docs/consensus-mechanisms/pow/) +- [挖礦](/developers/docs/consensus-mechanisms/pow/mining/) +- [持有量證明(又稱:權益證明)](/developers/docs/consensus-mechanisms/pos/) +- [權威證明](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/poa/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/poa/index.md index b97cd72b55e..26c55d4681f 100644 --- a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/poa/index.md +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/poa/index.md @@ -22,7 +22,7 @@ lang: zh-tw 在權威證明中,選擇一組授權簽署者來建立新區塊。 簽署者是根據他們的聲譽來選擇的,並且是唯一被允許建立新區塊的人。 簽署者以輪轉方式選擇,每個簽署者被允許在特定的時間範圍內建立一個區塊。 區塊建立時間是固定的,簽署者需要在該時間範圍內建立區塊。 -在這種情況下,聲譽不是一個量化的東西,而是微軟和谷歌等知名公司的聲譽,因此選擇受信任簽署者的方式不是演算法,而是信任實體的正常人類行為。例如,微軟在成百上千家初創公司之間建立了一個權威證明專用網路,以自己作為唯一受信任的簽署者,並且將來有可能添加其他知名簽署者(如谷歌),那麼初創公司毫無疑問會信任微軟始終以誠實的方式行事並使用網路。 這就滿足了在為不同目的而建置的不同小型/專用網路中進行質押以保持其去中心化和正常運行的需求,以及會消耗大量電力和資源的礦工需求。 一些專用網路使用權威證明標準(例如 VeChain),還有一些對其進行了修改,例如採用 [PoSA](https://academy.binance.com/en/glossary/proof-of-staked-authority-posa) 標準的幣安。PoSA 是權威證明和權益證明的自訂修改版本。 +在這種情況下,聲譽不是一個量化的東西,而是微軟和谷歌等知名公司的聲譽,因此選擇受信任簽署者的方式不是演算法,而是信任實體的正常人類行為。例如,微軟在成百上千家初創公司之間建立了一個權威證明專用網路,以自己作為唯一受信任的簽署者,並且將來有可能添加其他知名簽署者(如谷歌),那麼初創公司毫無疑問會信任微軟始終以誠實的方式行事並使用網路。 這解決了在不同的小型/私有網路中進行質押的需求,這些用途各異的網路為了保持去中心化和運行而建立,並且還消除了對消耗大量能源和資源之礦工的需求。 一些專用網路使用權威證明標準(例如 VeChain),還有一些對其進行了修改,例如採用 [PoSA](https://academy.binance.com/en/glossary/proof-of-staked-authority-posa) 標準的幣安。PoSA 是權威證明和權益證明的自訂修改版本。 投票過程由簽署者自行完成。 每個簽署者在建立新區塊時都會投票決定在其區塊中新增或刪除簽署者。 投票由節點進行統計,並根據達到特定閾值「SIGNER_LIMIT」的投票結果來新增或刪除簽署者。 @@ -32,7 +32,7 @@ lang: zh-tw ### 惡意簽署者 {#malicious-signers} -惡意使用者可能會被新增至簽署者清單中,或者簽署金鑰/機器可能遭到洩漏/攻擊。 在這種情況下,協定需要能夠防禦重組和垃圾郵件攻擊。 建議的解決方案是,給定 N 個授權簽署者的清單,任何簽署者只能從每 K 個區塊鑄造 1 個區塊。這將確保損失有限,並且剩餘曠工可以投票逐出惡意使用者。 +惡意使用者可能會被新增至簽署者清單中,或者簽署金鑰/機器可能遭到洩漏/攻擊。 在這種情況下,協定需要能夠防禦重組和垃圾郵件攻擊。 建議的解決方案是,給定 N 個授權簽署者的清單,任何簽署者只能從每 K 個區塊鑄造 1 個區塊。這將確保損失有限,並且剩餘驗證者可以投票逐出惡意使用者。 ### 審查制度 {#censorship-attack} @@ -44,9 +44,9 @@ lang: zh-tw ### 並發區塊 {#concurrent-blocks} -在權威證明網路中,當有 N 個授權簽署者時,每個簽署者都可以從 K 個區塊鑄造 1 個區塊,這意味著允許 N-K+1 個礦工在任意給定時間點進行鑄造。 為了防止這些礦工爭奪區塊,每個簽署者應該在其發布新區塊的時間上增加一個小的隨機「偏移量」。 儘管這個過程確保小分叉很少見,但偶爾的分叉仍可能發生,就像主網一樣。 如果發現某個簽署者濫用權力並造成混亂,其他簽署者可以投票將其逐出。 +在權威證明網路中,當有 N 個授權簽署者時,每個簽署者都可以從 K 個區塊鑄造 1 個區塊,這意味著允許 N-K+1 個驗證者在任意給定時間點鑄造區塊。 為了防止這些驗證者爭奪區塊,每個簽署者應該在發布新區塊的時間上增加一個小的隨機「偏移量」。 儘管這個過程確保小分叉很少見,但偶爾的分叉仍可能發生,就像主網一樣。 如果發現某個簽署者濫用權力並造成混亂,其他簽署者可以投票將其逐出。 -例如,如果有 10 個授權簽署者,並且每個簽署者被允許從 20 個區塊建立 1 個區塊,那麼在任意給定時間,有 11 個礦工可以建立區塊。 為了防止他們競相建立區塊,每個簽署者都會在發布新區塊的時間上增加一個小的隨機「偏移量」。 這就減少了小分叉的發生,但仍然允許偶爾分叉,如以太坊主網上所見。 如果簽署者濫用權力並造成破壞,他們可能會被投票逐出網路。 +例如,如果有 10 個授權簽署者,並且每個簽署者可以從 20 個區塊建立 1 個區塊,那麼在任意給定時間,有 11 個驗證者可以建立區塊。 為了防止他們競相建立區塊,每個簽署者都會在發布新區塊的時間上增加一個小的隨機「偏移量」。 這就減少了小分叉的發生,但仍然允許偶爾分叉,如以太坊主網上所見。 如果簽署者濫用權力並造成破壞,他們可能會被投票逐出網路。 ## 優點和缺點 {#pros-and-cons} diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md new file mode 100644 index 00000000000..a2431847b90 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md @@ -0,0 +1,163 @@ +--- +title: 以太坊權益證明之攻擊與防禦 +description: 瞭解以太坊權益證明的已知攻擊媒介,以及如何進行防禦。 +lang: zh-tw +--- + +小偷和破壞者不斷尋找機會攻擊以太坊的用戶端軟體。 本頁概述了以太坊共識層的已知攻擊媒介,以及如何防禦這些攻擊。 本頁上的資訊改編自一個[更長格式的版本](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs)。 + +## 先備知識 {#prerequisites} + +需要瞭解一些關於[權益證明](/developers/docs/consensus-mechanisms/pos/)的基本知識。 此外,對以太坊的[激勵層](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties)和分叉選擇演算法 [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper) 有基本瞭解,也會有所助益。 + +## 攻擊者的企圖 {#what-do-attackers-want} + +一個常見的誤解是,成功的攻擊者可以產生新的以太幣,或者從任意帳戶中取走以太幣。 由於所有交易都由網路上的所有執行用戶端執行,所以這兩種情況都是不可能的。 交易必須滿足基本的有效性條件(例如,交易由發送者的私密金鑰簽署,發送者有足夠的餘額等),否則它們將被直接還原。 攻擊者的真實目標可能有三類結果:區塊重組、雙重最終確定性或最終確定性延遲。 + +**「區塊重組」**是將區塊重新排列成新的順序,或許在規範鏈中進行一些區塊的增減。 惡意的區塊重組可能確保納入或排除特定的區塊,允許透過預先交易和尾随交易(最大可提取价值)進行雙重支付或價值提取。 區塊重組也可以用來阻止某些交易被納入規範鏈中 - 這是一種審查形式。 區塊重組的最極端形式是「最終確定性反轉」,它會移除或替換先前已最終確定的區塊。 只有當攻擊者摧毀了總質押以太幣的 ⅓ 以上時,這才有可能 - 這一保證被稱為「經濟最終確定性」- 稍後會有詳細說明。 + +**雙重最終確定性**是一種不太可能但很嚴重的狀況,其中兩個分叉能夠同時最終確定,造成鏈中的永久分裂。 對於願意以 34% 的縂質押以太幣來冒險的攻擊者來說,這在理論上是可能的。 社群將被迫在鏈下協調並就跟隨哪條鏈達成協定,這將需要社交層面的力量。 + +**最終確定性延遲**攻擊會阻止網路達到最終確定鏈段的必要條件。 沒有最終確定性,就很難信任建立在以太坊之上的金融應用程式。 最終確定性延遲攻擊的目的可能僅僅是破壞以太坊,而不是直接獲利,除非攻擊者有一些策略性的短融資。 + +對社交層的攻擊可能旨在破壞公眾對以太坊的信任,讓以太幣貶值、減少採用,或削弱以太坊社群以增加帶外協調的難度。 + +在確定對手可能為何攻擊以太坊後,以下部分將探討他們可能採用的_攻擊方法_。 + +## 攻擊方法 {#methods-of-attack} + +### 0 層網路攻擊 {#layer-0} + +首先,那些不積極參與以太坊(透過運行用戶端軟件)的個人可以透過針對社交層(0 層網路)進行攻擊。 0 層網路是建立以太坊的基礎,因此它代表了一個潛在的攻擊面,其後果會在整個堆疊中產生波及效應。 一些例子可能包括: + +- 一個虛假資訊宣傳活動可能會侵蝕社群對以太坊的開發藍圖、開發者團隊、應用程式等的信任。 然後,這可能會減少願意參與保護網路的個人數量,降低去中心化和加密經濟安全性。 +- 針對開發者社群的有針對性的攻擊或恐嚇。 這可能導致開發者自願退出,並減慢以太坊的進展。 + +- 過度熱衷的監管也可以被認為是對 0 層網路的攻擊,因為它可能迅速挫傷參與和採用的積極性。 +- 將知識淵博的惡意行為者滲透到開發者社群中,目的是透過無意義的討論、延遲關鍵決策、建立垃圾郵件等手段減緩進展。 +- 向以太坊生態系統的關鍵參與者行賄以影響決策。 + +這些攻擊特別危險的原因是,在許多情況下幾乎不需要太多資本或技術知識。 0 層網路攻擊可能是加密經濟攻擊的倍增器。 例如,如果惡意的多數質押持有者實現了審查或最終確定性反轉,則破壞社交層可能導致帶外協調社群響應變得更困難。 + +防禦 0 層網路攻擊可能並不簡單,但可以確立一些基本原則。 其中一個原則是由誠實社群成員透過部落格、Discord 伺服器、註釋規範、書籍、播客和 YouTube 等媒體建立和傳播有關以太坊的公共資訊並保持整體高信噪比。 在 ethereum.org,我們努力維護準確的資訊並嘗試將其翻譯成盡可能多的語言。 在一個領域充斥著高品質的資訊和模因可以有效防止錯誤資訊的傳播。 + +另一個對抗社交層攻擊的重要防禦措施是明確的使命宣言和管理體系協定。 以太坊已將自身定位為智慧型合約 1 層網路中的去中心化和安全性擁護者,同時高度重視可擴展性和永續性。 無論以太坊社群中出現何種分歧,這些核心原則都極少受到損害。 根據這些核心原則評估一個敘述,並透過 EIP(以太坊改進提案)程序中的連續審查來檢視它們,可能有助於社群區分良好行為者與惡意行為者,並限制惡意行為者影響以太坊之未來方向的範圍。 + +最後,以太坊社群保持對所有參與者開放和友好至關重要。 一個帶有門戶守衛和排外性的社群特別容易受到社交攻擊,因為容易形成「我們和他們」的敘事。 部落主義和有害的極端主義會傷害社群,削弱 0 層網路的安全性。 對以太坊網路安全具有既得利益的以太坊社群成員,應該將他們在線上和實體世界中的行為視為對以太坊 0 層網路安全的直接促進因素。 + +### 攻擊協定 {#attacking-the-protocol} + +任何人都可以執行以太坊的用戶端軟體。 要將驗證者新增至用戶端,使用者需要將 32 個以太幣質押到存款合約中。 驗證者允許使用者透過提交和證明新區塊來積極參與以太坊網路的安全性。 現在,驗證者可以發聲,影響區塊鏈的未來內容 - 他們可以誠實行事,透過獎勵來增加他們的以太幣儲備,或者他們可以冒著失去其質押的風險,試圖操縱程序以謀取自己的利益。 一種發動攻擊的方法是累積更大比例的總質押,然後用它來在投票中超過誠實的驗證者。 攻擊者控制的質押比例越大,他們的投票權就越大,尤其是在我們稍後將探討的某些經濟里程碑上。 然而,大多數攻擊者將無法累積足夠的以太幣以此方式進行攻擊,因此他們必須使用微妙的技巧來操縱誠實的大多數人採取特定的行動。 + +從根本上說,所有小規模質押攻擊都是兩種驗證者不當行為的微妙變體:活動不足(未能證明/提議或者延後這樣做)或者活動過多(在一個時隙內提議/證明的次數過多)。 在最普遍的形式下,這些行動可以很容易地由分叉選擇演算法和激勵層進行處理,但也有聰明的方式可以讓攻擊者操縱系統以獲得優勢。 + +### 使用少量以太幣的攻擊 {#attacks-by-small-stakeholders} + +#### 區塊重組 {#reorgs} + +有幾篇論文解釋了在以太坊上使用僅佔總質押以太幣一小部分便實現了區塊重組或最終確定性延遲的攻擊。 這些攻擊通常依賴於攻擊者向其他驗證者隱瞞某些資訊,然後以某種微妙的方式和/或在某個適當的時刻發佈該資訊。 它們通常旨在取代規範鏈中的一些誠實區塊。 [Neuder 等人在 2020 年的研究](https://arxiv.org/pdf/2102.02247.pdf)中展示了一個攻擊驗證者如何在特定時隙 `n+1` 建立和證明一個區塊 (`B`),但未將其傳播到網路上的其他節點。 相反,他們保留該已證明的區塊,直到下一個時隙 `n+2`。 一個誠實的驗證者在時隙 `n+2` 提交了一個區塊 (`C`)。 幾乎同時,攻擊者可以發佈他們所保留的區塊 (`B`) 及為其保留的證明,並且在時隙 `n+2` 透過他們的投票證明區塊 `B` 為鏈頭,有效地否認了誠實區塊 `C` 的存在。 當誠實區塊 `D` 發佈時,分叉選擇演算法會看到建置在 `B` 之上的 `D` 比建置在 `C` 之上的 `D` 有更多權重。 因此,攻擊者成功地使用 1 個區塊的事前重組,在時隙 `n+2` 從規範鏈中移除了誠實區塊 `C`。 [擁有 34% 的質押份額的攻擊者](https://www.youtube.com/watch?v=6vzXwwk12ZE)在這次攻擊中有很大的機會成功,正如[這條注釋](https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair)中所解釋的。 然而,從理論上講,這種攻擊也可以使用較小的質押份額來嘗試。 [Neuder 等人在 2020 年的研究](https://arxiv.org/pdf/2102.02247.pdf)描述了這種攻擊在 30% 的質押份額下的運作,但後來證明它在[總質押份額的 2%](https://arxiv.org/pdf/2009.04987.pdf) 下可行,然後[單個驗證者](https://arxiv.org/abs/2110.10086#)使用我們將在下一節中探討的平衡技巧亦有效。 + +![事前重組](reorg-schematic.png) + +上述一個區塊重組攻擊的概念示意圖(改編自 https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair) + +一種更複雜的攻擊可以將誠實的驗證者集合分成擁有不同鏈頭檢視的不同群組。 這被稱為**平衡攻擊**。 攻擊者等待著提出區塊的機會,當機會到來時,他們模稜兩可地提出兩個區塊。 他們將一個區塊發送給一半的誠實驗證者集合,將另一個區塊發送給另一半。 這種模稜兩可的行為會被分叉選擇演算法偵測到,區塊提議者將被懲處並從網路中驅逐,但這兩個區塊仍然存在,並在每個分叉擁有約一半驗證者集合的證明。 同時,其餘的惡意驗證者保留他們的證明。 然後,透過在分叉選擇演算法執行時選擇性地向足夠的驗證者釋放有利於某一分叉或另一分叉的證明,他們將證明的累積權重傾向於其中一個或另一個分叉。 這種做法可以無限期地繼續下去,攻擊驗證者則在兩個分叉之間保持驗證者的平均分配。 由於兩個分叉都無法吸引到 2/3 的絕對多數,網路將無法最終確定。 + +**反彈攻擊**與之類似。 攻擊驗證者同樣保留了投票。 他們不是透過釋放投票來保持兩個分叉之間的平均分配,而是在適當的時刻使用他們的投票來證明在分叉 A 和分叉 B 之間交替的檢查點。這種在兩個分叉之間翻轉的證明方式,阻止了可以在任何鏈上最終確定的被證明來源和目標檢查點對的出現,從而終止了最終確定性。 + + + +反彈和平衡攻擊都依賴於攻擊者對網路上的訊息時間具有非常精細的控制,這是不太可能的。 然而,協定中內建了防禦機制,與較慢訊息相比,給予了及時訊息額外的加權。 這被稱為[提議者權重增強](https://github.com/ethereum/consensus-specs/pull/2730)。 為了防範反彈攻擊,分叉選擇演算法已經更新,使得在[每個時期的前 1/3 時隙內](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114),最新的被證明檢查點只能切換到另一個鏈的檢查點。 這個條件防止攻擊者儲存投票以便稍後部署 - 分叉選擇演算法只是在時期的前 1/3 對它選擇的檢查點保持忠誠,而在這段時間內大多數誠實的驗證者已經完成投票。 + +綜合考慮,這些措施創造了這樣的情況:一個誠實的區塊提議者在時隙開始後很快就發出他們的區塊,然後有大約 1/3 個時隙(約 4 秒)的時間,新的區塊可能會導致分叉選擇演算法切換到另一個鏈。 在同樣的截止期限之後,來自緩慢驗證者的證明相較於之前到達的證明會被降低權重。 這非常有利於及時的提議者和驗證者來確定鏈頭,並大幅降低了平衡或反彈攻擊成功的可能性。 + +值得注意的是,僅僅進行提議者加強只能防禦“廉價的重組攻擊”,即由持有較小質押份額的攻擊者嘗試的重組攻擊。 事實上,提議者加強本身可能會被更大的質押持有者利用。 [這篇文章的作者](https://ethresear.ch/t/change-fork-choice-rule-to-mitigate-balancing-and-reorging-attacks/11127)描述了一個持有 7% 質押份額的攻擊者如何可以戰略性地部署他們的投票,欺騙誠實的驗證者在他們的分叉上建置,將誠實的區塊重組掉。 這種攻擊是在假設極端理想的延遲條件下設計的,而這種情況非常不太可能。 對於攻擊者來說,勝算仍然非常渺茫,而更大的質押份額也意味著更多的資本風險和更強大的經濟阻力。 + +還提出了一種專門針對最新訊息導向 (LMD) 規則的[平衡攻擊](https://ethresear.ch/t/balancing-attack-lmd-edition/11853),儘管有提議者加強,但這種攻擊據認為仍然是可行的。 攻擊者透過模稜兩可的區塊提議設立了兩條競爭的鏈,並將每個區塊各傳播給大約一半的網路,從而在分叉之間建立起近似的平衡。 然後,串通的驗證者模稜兩可地投票,並安排時間,使得一半的網路首先收到他們對分叉 `A` 的投票,另一半首先收到他們對分叉 `B` 的投票。 由於最新訊息導向規則會丟棄每個驗證者的第二個證明,而只保留第一個證明,所以一半的網路看到對 `A` 的投票,沒有對 `B` 的投票,另一半則看到對 `B` 的投票,沒有對 `A` 的投票。 作者描述了最新訊息導向規則賦予了對手「卓越的力量」來發動平衡攻擊。 + +這種最新訊息導向攻擊媒介已透過[更新分叉選擇演算法](https://github.com/ethereum/consensus-specs/pull/2845)予以關閉,從而在分叉選擇考量中完全排除了模稜兩可的驗證者。 模稜兩可的驗證者的未來影響也受到分叉選擇演算法的削減。 這可以防止上面概述的平衡攻擊,同時保持了對雪崩攻擊的強韌性。 + +另一類攻擊稱為[**雪崩攻擊**](https://ethresear.ch/t/avalanche-attack-on-proof-of-stake-ghost/11854/3),在一份 [2022 年 3 月的論文](https://arxiv.org/pdf/2203.01315.pdf)中進行了描述。 為了發動雪崩攻擊,攻擊者需要控制幾個連續的區塊提議者。 在每個區塊提議的時隙中,攻擊者扣留他們的區塊,將它們收集起來,直到誠實的鏈與保留的區塊達到相等的子樹權重。 然後,保留的區塊被釋放出來,使它們最大程度地模稜兩可。 作者指出,提議者加強 - 對抗平衡和反彈攻擊的主要防禦手段 - 並不能防範某些變種的雪崩攻擊。 然而,作者們只在高度理想化的以太坊分叉選擇演算法版本上展示了這種攻擊(他們使用了不帶最新訊息導向 (LMD) 的最貪婪、最重的可觀察子樹 (GHOST))。 + +透過最新訊息導向的最貪婪、最重的可觀察子樹分叉選擇演算法的最新訊息導向部分可以緩解雪崩攻擊。 LMD 為「latest-message-driven(最新訊息導向)」,指的是每個驗證者保存的一份表格,其中包含了從其他驗證者處收到的最新訊息。 該欄位只有在以下情況才會更新:新的訊息來自比驗證者表格中某個現存的時隙更晚的時隙。 實際上,這表示在每個時隙中,接收的第一則訊息會被接受,其他的則會當作模糊訊息被忽略。 換句話說,共識用戶端不會計算模糊的訊息 - 它們只會使用從每個驗證者處收到的第一則訊息,其他模糊訊息將被丟棄以避免雪崩攻擊。 + +未來有其他多個對分叉選擇規則的潛在升級,可藉由提議者增強以提升安全性。 其一為[檢視合併](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739),指的是證明者會在時隙開始前的 `n` 秒凍結他們的分叉選擇檢視,然後由提議者協助同步整個網路上的鏈檢視。 另一個潛在的升級是[單時隙最終確定性](https://notes.ethereum.org/@vbuterin/single_slot_finality),其透過在一個時隙後立即最終確定區塊鏈,以保護鏈免於基於訊息時間類型的攻擊。 + +#### 最終確定性延遲 {#finality-delay} + +在首次描述低成本單區塊重組攻擊的[同一篇論文](https://econcs.pku.edu.cn/wine2020/wine2020/Workshop/GTiB20_paper_8.pdf)中,還描述了最終確定性延遲(又稱「活躍性失效」)攻擊,此攻擊仰賴攻擊者同時為時期邊界區塊的區塊提議者。 這非常重要,因為時期邊界區塊會成為 Casper FFG 用來最終確定一部分鏈的檢查點。 攻擊者只需扣留他們的區塊,直到足夠多的誠實驗證者使用他們的友善最終確定性組件投票支持前一個時期邊界區塊作為目前的最終確定目標。 接著,他們會釋放被其扣留的區塊。 攻擊者證明其區塊,其餘誠實的驗證者也會使用不同的目標檢查點建立分叉。 如果時機抓的準,他們將阻止最終確定性,因為達不到 2/3 的絕對多數來證明任何一個分叉。 質押的以太幣越少,由攻擊者直接控制的證明越少,攻擊者控制驗證者提交特定時期邊界區塊的機率就越低,因此攻擊者就需要越精準地控制時機。 + +#### 遠程攻擊 {#long-range-attacks} + +還有種針對權益證明區塊鏈的攻擊,涉及了參與創世區塊的驗證者,他們與誠實的驗證者一起維護區塊鏈的單獨分叉,並在很久以後的某個適當時機,最終說服誠實的驗證者集合切換到該分叉。 此類型的攻擊在以太坊上不可能發生,因為最終確定性組件會在固定時間間隔(「檢查點」)確認所有驗證者都同意誠實鏈的狀態。 這個簡單的機制抵禦了遠程攻擊者,因為以太坊用戶端不會重組已最終確定的區塊。 為此,加入網路的新節點會尋找最近且受信任狀態的雜湊(即「[弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/)」檢查點),並將該檢查點作為偽創世區塊,以在其上建置。 這會在剛加入網路的新節點開始驗證自身資訊前,為它們建立「信任閘道」。 + +#### 阻斷服務攻擊 {#denial-of-service} + +以太坊的權益證明機制會在每個時隙,從驗證者集合中選出一個單一的驗證者作為區塊提議者。 這可以透過公開函式算出,且攻擊者可能在區塊提交前一小段時間,預先識別出下個區塊提議者。 接著,攻擊者可以對區塊提議者發送垃圾訊息,阻止他們與其對等節點交換訊息。 對網路的其餘部分來說,此時的區塊提議者視同離線,而時隙則為空。 這可能會是針對特定驗證者的一種審查方式,阻止他們在區塊鏈上新增資訊。 實現單一秘密領導者選舉 (SSLE) 或非單一秘密領導者選舉可以緩解阻斷服務攻擊風險,這是因為只有區塊提議者知道自己被選上,且無法預先知道選舉結果。 這部分尚未實現,但目前已是活躍的[研究與開發](https://ethresear.ch/t/secret-non-single-leader-election/11789)領域。 + +這些都表明了一個事實:要透過少量質押來成功攻擊以太坊非常困難。 此處描述的可行攻擊需要理想化的分叉選擇演算法、極端網路條件,或者已透過相對較小的用戶端軟體修補關閉了攻擊媒介。 當然,這還是無法排除現有零日攻擊逍遙在外的可能性,但它證明了在攻擊者質押量不高時,需要有非常高超的技術、對共識層的瞭解,以及運氣才有可能完成有效攻擊。 站在攻擊者的角度,最佳選擇可能是儘可能累積大量的以太幣,並提高自己在總質押中的佔比。 + +### 使用超過或等於 33% 質押總量的攻擊者 {#attackers-with-33-stake} + +攻擊者用於投票的質押以太幣用於投票,且有越多的驗證者可能在每個時隙被選中並提交區塊,那麼上述文章中提到的所有攻擊就越有可能成功。 惡意驗證者的目標可能是控制盡可能多的質押以太幣。 + +33% 的質押以太幣是攻擊者的基準指標,因為只要大於此數量,攻擊者不需要精細控制其他驗證者的行為就能夠阻止鏈的最終確定。 他們可以一起消失。 如果超過 1/3 的質押以太幣為惡意證明或無法證明,則 2/3 的絕對多數就不存在,鏈也就無法最終確定。 能防禦此攻擊的方法為怠惰逐減懲罰。 怠惰逐減懲罰會識別無法證明或與多數證明相反的驗證者。 這些不進行證明的驗證者所質押的以太幣會逐漸流失,直到它們的集體佔比最終小於總量的 1/3,至此,鏈就能繼續最終確定。 + +怠惰逐減懲罰的目的是讓鏈能繼續最終確定。 然而,攻擊者也會損失它們質押的部分以太幣。 持有 33% 質押以太幣總量的驗證者持續不活躍的代價十分高昂,即使在驗證者沒有被罰沒的狀況下仍然如此。 + +假設以太坊網路是異步的(即發送和接收訊息間有延遲),攻擊者控制了 34% 質押總量可能會造成雙重最終確定性。 這是因為攻擊者在被選為區塊生產者時,他們可以模稜兩可,並與他們的所有驗證者完成雙重投票。 這會產生一種情況:區塊鏈分叉,且每個分叉都有 34% 的質押以太幣為它投票。 每個分叉只需要剩下驗證者的 50% 投票,就能獲得絕對多數支持,在這種情況下,兩條鏈都能最終確定(因為攻擊者驗證者的 34% + 剩下驗證者的 66% 的一半 = 每個分叉上的 67%)。 每個競爭區塊都必須被約 50% 的誠實驗證者接收,因此這種攻擊只在特定情況下可行:攻擊者對網路上傳播訊息的時間有一定的控制,這樣他們就可以將一半的誠實驗證者推到每條鏈上。 攻擊者必須銷毀他們的質押的全部以太幣(目前驗證者集合約計 1000 萬以太幣的 34%)才能實現雙重最終確定性,因為他們驗證者的 34% 會同時進行雙重投票 — 這是一種會受到罰沒的行為,具有最大的相關性懲罰。 防禦此攻擊的方式代價巨大,即銷毀 34% 總質押以太幣。 要從這種攻擊中復原,以太坊社群需要進行「帶外」協調,同意選擇其中一個分叉,並忽略另一個。 + +### 使用約 50% 質押總量的攻擊者 {#attackers-with-50-stake} + +在攻擊者持有 50% 以太幣的情況下,理論上一群作惡的驗證者可以將鏈拆分成兩個大小相同的分叉,然後使用他們全部 50% 的質押以太幣投票反對誠實的驗證者集合,從而維持這兩個分叉並阻止最終確定性。 兩條鏈上的怠惰逐減懲罰最終都會導致鏈的最終確定。 至此,從攻擊中復原的唯一選擇就是社交恢復。 + +在誠實驗證者數量、網路延遲等因素變動的情況下,敵對驗證者群體能夠持續精確控制質押總量的 50% 的可能性非常小。對理性的攻擊者來說,發動攻擊的高成本及低成功率,是抑制其發動攻擊的強烈因素,尤其是當一小點額外的投資就能獲得_超過_ 50% 的佔比以解鎖更多攻擊能力時。 + +在攻擊者有大於 50% 總質押以太幣的情況下,攻擊者可以支配分叉選擇演算法。 在這種情況下,攻擊者自身即有能力以多數投票來完成證明,不需要再透過欺騙誠實的用戶端才能完成短期重組。 誠實的驗證者會效仿攻擊者,因為他們的分叉選擇演算法將攻擊者的鏈視為權重最高的鏈,如此一來該鏈就能最終確定。 這使得攻擊者可以審查某些交易,以有利於他們的方式進行短距重組以及透過重新排序區塊來提取最大的礦工可提取價值。 對此攻擊的防禦手段是讓攻擊者付出大多數質押的巨大成本(目前略低於 190 億美元),這會讓攻擊者面臨風險,因為社交層可能會介入並採納誠實的少數分叉,讓攻擊者的質押大幅貶值。 + +### 使用超過或等於 66% 質押總量的攻擊者 {#attackers-with-66-stake} + +擁有 66% 或更多總質押以太幣的攻擊者,無需脅迫任何誠實驗證者即可最終確定他們所支持的鏈。 攻擊者只需要給他們支持的分叉進行投票並最終確定它,因為他們有絕對多數的不誠實投票。 作為絕對多數的質押擁有者,攻擊者始終可以控制最終確定的區塊的內容,擁有支出、回退和再次支出、審查某些交易以及隨意重組鏈的能力。 透過購買額外的以太幣來控制 66% 而不是 51%,攻擊者實際上購買了進行事後重組和最終確定性反轉的能力(即改變過去並控制未來)。 唯一實際可操作的防禦方法是付出 66% 總質押以太幣的高昂成本,並選擇回退到社交層來協調採納另一個分叉。 我們將在下一部分詳細探討這一點。 + +## 人:最後的防線 {#people-the-last-line-of-defense} + +如果不誠實的驗證者設法最終確定他們所支援的鍊版本,以太坊社群將陷入困境。 規範鏈將在其歷史記錄中包含不誠實部分,同時誠實的驗證者可能會因證明另一條(誠實)鏈而被懲罰。 注意,最終確定的但不正確的鏈也可能是主流用戶端的漏洞引起的。 最後,最終的回退需要依賴社交層 - 0 層網路 - 來解決。 + +以太坊權益證明共識的其中一個優點是存在[一系列的防禦策略 ](https://youtu.be/1m12zgJ42dI?t=1712),社群在面對攻擊的時候可以實施這些策略。 最起碼的回應是在不實施任何懲罰的情況下強制攻擊者的驗證者離開網路。 為了重新進入網路,攻擊者必須加入到一個激活隊列,確保驗證者集合逐步增加。 例如,增加足夠的驗證者讓質押的以太幣翻倍需要約 200 天,攻擊者要再一次嘗試 51% 攻擊,需要提前 200 天收買誠實的驗證者。 但是,社群也可以決定更嚴厲地懲罰攻擊者,方法是撤銷以往的獎勵或銷毀其一定比例的(高達 100%)質押資本。 + +不管攻擊者受到什麼懲罰,社群還必須一起確認不誠實鏈實際上是否無效,儘管它被以太坊用戶端的分叉選擇演算法所支援。社群應該在誠實的鏈上建構。 誠實的驗證者可以集體同意在被社群認可的以太坊區塊鏈分叉上進行建構,例如,該分叉可能在攻擊開始之前就已經從規範鏈上分叉出來,或者攻擊者的驗證者被強行移除。 誠實的驗證者會受到激勵來建構這條鏈,因為他們可以避免因無法(正確地)證明攻擊者的鏈而受到懲罰。 建構在以太坊上的交易所、入口和應用程式可能更願意位於誠實鏈上,並且跟隨誠實驗證者的誠實區塊鏈。 + +但是,這是一個重大的管理體系挑戰。 有些使用者和驗證者會在切換回誠實鏈時無可避免地產生損失,因為攻擊後被驗證的區塊中的交易可能會回滾,從而擾亂應用程式層。這很容易破壞一些相信“程式碼就是法律”的使用者的道德原則。 交易所和應用程式很可能已經把脫鏈行為和現在可能要回滾的鏈上交易關聯起來,並開始一連串的撤回和修訂,很難公平地進行取捨,特別是如果不義之財混雜在其中,存入了去中心化金融或其他衍生品,都會對誠實使用者產生二次影響。 毫無疑問,那些因為精明或機緣巧合已經從不誠實鏈獲利的一些使用者甚至機構,可能會反對分叉以保護他們的利益。 目前已經有呼籲要求社群對大於 51% 攻擊的回應進行演練,以便可以快速執行合理的協調緩解措施。 Vitalik 在 ethresear.ch 上的[這裡](https://ethresear.ch/t/timeliness-detectors-and-51-attack-recovery-in-blockchains/6925)和[這裡](https://ethresear.ch/t/responding-to-51-attacks-in-casper-ffg/6363)以及 Twitter 上的[這裡](https://twitter.com/skylar_eth/status/1551798684727508992?s=20&t=oHZ1xv8QZdOgAXhxZKtHEw)發起了一些有用的討論。 協調社交回應的目的應該是非常有針對性和具體地懲罰攻擊者並儘量減少對其他使用者的影響。 + +管理體系已經是一個複雜的議題。 管理 0 層網路緊急回應透過不誠實行為最終確定的鏈,對於以太坊社群來說毋庸置疑是一個挑戰,但在以太坊歷史上[已經發生過](/history/#dao-fork-summary)[兩次](/history/#tangerine-whistle)。 + +儘管如此,在現實世界的最後回滾中,還是有一些令人相當滿意的東西。 最後,即使在我們之上有著如此驚人的技術堆棧,但如果最壞的情況發生了,現實中的人們也必將協調出一條屬於他們的出路。 + +## 總結 {#summary} + +本頁探討了攻擊者試圖利用以太坊權益證明共識協定的一些方法。 隨著總質押以太幣比例不斷增加,探討了攻擊者可能造成的重組和最終確定性延遲。 總的來說,較富裕的攻擊者成功的幾率更大,因為他們的質押將變成有力的投票,從而影響未來區塊的內容。 在一定門檻的質押以太幣數量下,攻擊者的力量會逐級上升: + +33%:最終確定性延遲 + +34%:最終確定性延遲、雙重最終確定性 + +51%%:最終確定性延遲、雙重最終確定性、審查、控制區塊鏈的未來 + +66%:最終確定性延遲、雙重最終確定性、審查、控制區塊鏈的未來以及過去 + +還有一系列更複雜攻擊是運用少量質押以太幣發起的,但是需要非常有經驗的攻擊者精細控制訊息發佈時機,說服誠實驗證者支持他們。 + +總的來說,儘管存在這些潛在的攻擊媒介,但攻擊成功的機率仍非常低,低於在工作量證明機制下實施的同類攻擊。 這是因為攻擊者需要冒著巨大的質押以太幣成本風險,以便利用他們的投票權壓倒誠實的驗證者。 內建的「恩威並濟」激勵層可以防止大多數的惡意行為,尤其是對於擁有少量質押的攻擊者。 更微妙的彈跳和平衡攻擊也不太可能成功,因為在現實的網路條件下,很難精細地控制訊息向特定驗證者子集的傳遞,如果發現了已知的彈跳、平衡和雪崩攻擊媒介,用戶端團隊也能透過簡單的補丁快速修復。 + +34%、51% 或 66% 攻擊可能需要帶外的社交協調來解決。 雖然對社群來說是痛苦的,但是社群的帶外響應能力對於攻擊者來說是一種強大的抑制力量。 以太坊的社交層是最終的後盾 - 從技術上取得成功的攻擊仍然會被社群同意採用誠實鏈所瓦解。 攻擊者和以太坊社群之間存在一場競賽 - 花費在 66% 攻擊上的數十億美元可能會被成功的社交協調所抹去,從而給攻擊者留下沉重的包袱,因為它們質押的以太幣將在被以太坊社群忽略的不誠實鏈上無法流動。 最終為攻擊者帶來利益的可能性非常低,這足以成為一種有效的威懾。 這就是為什麼投資於維持擁有共同價值觀和凝聚力的社交層如此重要。 + +## 衍生閱讀 {#further-reading} + +- [本頁面的更詳細版本](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [Vitalik 關於結算最終確定性的看法](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) +- [關於最新訊息導向的最貪婪、最重的可觀察子樹的論文](https://arxiv.org/abs/2003.03052) +- [關於 Casper-FFG 的論文](https://arxiv.org/abs/1710.09437) +- [關於 Gasper 的論文](https://arxiv.org/pdf/2003.03052.pdf) +- [提議者權重增強共識層規範](https://github.com/ethereum/consensus-specs/pull/2730) +- [Ethresear.ch 上的反彈攻擊](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) +- [單一秘密領導者選舉研究](https://ethresear.ch/t/secret-non-single-leader-election/11789) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/attestations/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/attestations/index.md new file mode 100644 index 00000000000..69d7856804a --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/attestations/index.md @@ -0,0 +1,92 @@ +--- +title: 證明 +description: 關於在權益證明以太坊上進行證明的描述。 +lang: zh-tw +--- + +驗證者需要在每個時期建立、簽署和廣播證明。 本頁概述這些證明是什麼樣的,以及它們是如何處理和如何在共識用戶端之間交流的。 + +## 什麼是證明? {#what-is-an-attestation} + +每個[時期](/glossary/#epoch)(6.4 分鐘)驗證者都會向網路提交一個證明。 這個證明針對時期內的一個特定時隙。 證明的目的是投票贊成驗證者對於鏈的看法,特別是最近的合理區塊和當前時期內的第一個區塊(稱為`來源`和`目標`檢查點)。 所有參與的驗證者的資訊都會合併,使得網路可以達成關於區塊鏈狀態的共識。 + +證明包含以下組成部分: + +- `aggregation_bits`:驗證者的位元列表,其位置對應到委員會中的驗證者索引;(0/1) 數值表示驗證者是否簽署了 `data`(即,他們是否活躍和同意區塊提議者) +- `data`:與證明相關的細節,如下方的定義 +- `signature`:彙總了個人驗證者簽署的 Boneh-Lynn-Shacham 簽章 + +證明驗證者的第一個任務是建置 `data`。 `data` 包含以下資訊: + +- `slot`:證明參考的時隙號碼 +- `index`:一個數字,用來辨識驗證者在給定的時隙中所屬的委員會 +- `beacon_block_root`:驗證者在鏈頭看到的區塊的根雜湊(套用分叉選擇演算法的結果) +- `source`:最終確定性投票的一部分,表示驗證者認為的最新的合理區塊 +- `target`:最終確定性投票的一部分,表示驗證者認為的當前時段的第一個區塊 + +一旦 `data` 建置完成,驗證者就可以將 `aggregation_bits` 中對應於他們自己的驗證者索引的位元從 0 翻轉到 1,表示他們已經參與。 + +最終,驗證者簽署證明並且在網路上進行廣播。 + +### 彙總的證明 {#aggregated-attestation} + +每個驗證者在網路上傳遞此資料時,都會產生大量的相關開銷。 因此,個人驗證者在更廣泛的廣播前,先會在子網內彙總。 這包括將簽章彙總在一起,以讓廣播出去的證明包含共識 `data` 及一個單一簽章,此為所有同意該 `data` 的驗證者之簽章合併而成的簽章。 這可以透過 `aggregation_bits` 來檢查,因為它提供了每個驗證者在其委員會(委員會 ID 在 `data` 中提供)中的索引,可用於查詢個人簽章。 + +在每個時期,每個子網中都會選出 16 個驗證者來擔任`聚合者`。 聚合者會收集它在廣播網路中監聽到的與其自身 `data` 相同的所有證明。 每個符合證明的發送者會被記錄在 `aggregation_bits` 中。 然後,聚合者將彙總證明廣播到更廣泛的網路。 + +當驗證者被選為區塊提議者時,它們會將最新時隙來自子網的彙總證明打包到新區塊中。 + +### 證明包含生命週期 {#attestation-inclusion-lifecycle} + +1. 產生 +2. 傳播 +3. 彙總 +4. 傳播 +5. 納入 + +證明的生命週期如下圖所示: + +![證明的生命週期](./attestation_schematic.png) + +## 酬勞 {#rewards} + +驗證者提交證明可以獲得獎勵。 證明的獎勵依參與標記(來源、目標和頭部)、基礎獎勵和參與率而定。 + +每個參與標記都可以為 true 或 false,視提交的證明及納入延遲而定。 + +最佳情況是所有 3 個標記皆為 true,在這種情況下,驗證者的每個正確標記可以賺取: + +`獎勵 += 基礎獎勵 * 標記加權 * 標記證明率 / 64` + +標記證明率是透過特定標記的「所有證明驗證者的有效餘額總和」與「總活躍有效餘額」的比較來計算的。 + +### 基礎獎勵 {#base-reward} + +基礎獎勵是根據參與證明的驗證者數量及其質押的有效以太幣餘額計算的: + +`base reward = validator effective balance x 2^6 / SQRT(Effective balance of all active validators)` + +#### 納入延遲 {#inclusion-delay} + +當驗證者在鏈頭 (`block n`) 上投票時,`block n+1` 尚未提議。 所以,證明自然會在**經過一個區塊之後**被納入區塊,因此所有在作為鏈頭的 `block n` 上投票的證明都會在 `block n+1` 被納入,**納入延遲**爲 1。 若納入延遲加倍至 2 個時隙,則證明的獎勵會減半,這是因爲證明獎勵的計算方式爲基礎獎勵乘以納入延遲的倒數。 + +### 證明場景 {#attestation-scenarios} + +#### 缺少參加投票的驗證者 {#missing-voting-validator} + +驗證者最多有一個時期能夠提交他們的證明。 若錯過了在時期 0 時提交證明的機會,則它們可在時期 1 時提交(經過一個納入延遲)。 + +#### 缺少聚合者 {#missing-aggregator} + +每個時期總共有 16 個聚合者。 此外,驗證者會隨機訂閱**兩個子網路並持續 256 個時期**,並在缺少聚合者時作為備用。 + +#### 缺少區塊提議者 {#missing-block-proposer} + +值得注意的是,在一些情況下幸運的聚合者可能同時被選為區塊提議者。 若因為區塊提議者消失而導致證明未被納入,則下個區塊提議者會取得已彙總的證明並納入下一個區塊。 但是,**納入延遲**會因此增加 1。 + +## 衍生閱讀 {#further-reading} + +- [Vitalik 註解的共識規範中的證明](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#attestationdata) +- [eth2book.info 中的證明](https://eth2book.info/capella/part3/containers/dependencies/#attestationdata) + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md new file mode 100644 index 00000000000..c2329bdf429 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md @@ -0,0 +1,76 @@ +--- +title: 區塊提出 +description: 解釋在權益證明以太坊中如何提議區塊。 +lang: zh-tw +--- + +區塊是區塊鏈中的基本單位。 區塊是節點之間傳送,達成共識並新增到每個節點資料庫的獨立資訊單元。 本頁會解釋它們是如何產生的。 + +## 先決條件 {#prerequisites} + +區塊提議是權益證明協定的一部分。 為了幫助瞭解本頁的資訊,我們推薦你閱讀關於[權益證明](/developers/docs/consensus-mechanisms/pos/)與[區塊架構](/developers/docs/blocks/)的相關內容。 + +## 區塊由誰生產? {#who-produces-blocks} + +驗證者帳戶負責提議區塊。 驗證者帳戶由節點營運商負責管理,節點營運商執行驗證者軟體(當作執行的一部分)和共識用戶端,並且已經向存款合約中存入至少 32 個以太幣。 然而,每個驗證者只會偶爾負責提議一個區塊。 以太坊以時隙與時期來衡量時間。 每個時隙為十二秒,而 32 個時隙(6.4分鐘)為一個時期。 每個時隙都是在以太坊上新增區塊的機會。 + +### 隨機選擇 {#random-selection} + +每個時隙會有一個以偽隨機方式選擇的驗證者來提議區塊。 在區塊鏈中沒有實質的隨機性,因為如果每個節點都產生真實的隨機數,那麼它們是無法達成共識的。 相反的,目的是讓驗證者的選擇過程無法預測。 以太坊使用一種名為 RanDAO 的演算法來達到隨機性,這種演算法會將區塊提議者的雜湊值與一個隨著每個區塊而更新的種子混在一起。 這個值會被用來從整個驗證者集合中選出一個特定的驗證者。 驗證者的選擇會提前兩個時期鎖定,這種方式可以防範特定類型的種子操控。 + +儘管驗證者會在每個時隙添增 RANDAO,全域 RANDAO 值每個時期僅更新一次。 為了計算下一個區塊提議者的索引,RANDAO 值會跟時隙號碼混合,為每個時隙提供一個獨特數值。 一個驗證者被選中的機率並不是簡單的 `1/N`(其中 `N`= 活躍驗證者總數)。 相反的,它會依照每個驗證者的有效以太幣餘額進行加權。 最大有效餘額為 32 個以太幣(這代表著 `balance < 32 ETH` 會產生低於 `balance == 32 ETH` 的加權,但是 `balance > 32 ETH` 並不會產生高於 `balance == 32 ETH` 的加權)。 + +每個時隙只有一個區塊提議者會被選中。 在正常的情況下,一個區塊生產者會在其專門的時隙中建立並且釋出一個區塊。 在一個時隙中建立兩個區塊是一種很嚴重的罪行,通常被稱為「模棱兩可」。 + +## 區塊如何建立? {#how-is-a-block-created} + +區塊提議者預計會廣播一個已簽署的信標區塊,該區塊建置在根據他們自己在本地運行的分叉選擇演算法所看到的最近鏈頭之上。 分叉選擇演算法會套用上一個時隙留下的任何排隊證明,然後在其歷史記錄中尋找具有最大累積證明權重的區塊。 該區塊便是由提議者建立的新區塊的父塊。 + +區塊提議者透過從自己的本機資料庫和鏈檢視中收集資料來建立區塊。 區塊的內容如以下程式碼片段所示: + +```rust +class BeaconBlockBody(Container): + randao_reveal: BLSSignature + eth1_data: Eth1Data + graffiti: Bytes32 + proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] + attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS] + attestations: List[Attestation, MAX_ATTESTATIONS] + deposits: List[Deposit, MAX_DEPOSITS] + voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] + sync_aggregate: SyncAggregate + execution_payload: ExecutionPayload +``` + +`randao_reveal` 欄位取一個可驗證的隨機值,該值是區塊提議者透過簽署當前的時期編號建立的。 `eth1_data` 是就區塊提議者對存款合約的看法進行的投票,包括存款默克爾樹的根和使新存款能夠被驗證的總存款數。 `graffiti` 是一個可選欄位,可用來在區塊中新增一條訊息。 `proposer_slashings` 和 `attester_slashings` 欄位包含了某些驗證者根據區塊提議者對鏈的看法已經犯下可罰沒行為的證據。 `deposits` 是區塊提議者所知道的新驗證者存款的清單,`voluntary_exits` 是區塊提議者從共識層廣播網路上監聽到的希望退出的驗證者的清單。 `sync_aggregate` 是一個向量,顯示哪些驗證者之前被分配到一個同步委員會(服務於輕量用戶端資料的驗證者子集)並參與了資料簽章。 + +`execution_payload` 使得關於交易的資訊可以在執行用戶端和共識用戶端之間傳遞。 `execution_payload` 是一個被嵌套在信標鏈區塊內部的執行資料區塊。 `execution_payload` 中的欄位反映了以太坊黃皮書中概述的區塊結構,只不過其中沒有親戚區塊,並且 `prev_randao` 取代了 `difficulty`。 執行用戶端可以存取它在自己的 Gossip 網路上監聽到的本機交易池。 這些交易在本機執行,以產生一個被稱為「後狀態」的更新狀態樹。 這些交易被包含在 `execution_payload` 中名為 `transactions` 的清單中,後狀態則在 `state-root` 欄位中提供。 + +所有這些資料都被收集在一個信標區塊中,經過簽署並廣播給區塊提議者的對等節點,再由他們傳播給他們的對等節點,以此類推。 + +閱讀更多關於 +區塊剖析的內容。

+ + + +## 區塊會發生什麼? {#what-happens-to-blocks} + +區塊被新增至區塊提議者的本機資料庫,並透過共識層廣播網路廣播給對等節點。 當驗證者接收到區塊時,它會驗證其中的資料,包括檢查區塊是否有正確的父塊、是否對應正確的時隙、提議者索引是否符合預期、RANDAO 揭示是否有效,以及提議者是否被罰沒。 `execution_payload` 被解綁,驗證者的執行用戶端重新執行清單中的交易,以檢查所提議的狀態變化。 假設區塊通過了所有這些檢查,每個驗證者將區塊新增到自己的規範鏈中。 然後,在下一個時隙中重新開始這個過程。 + + + +## 區塊獎勵 {#block-rewards} + +區塊提議者會收到他們工作的報酬。 有一個 `base_reward`,是根據活躍驗證者的數量和他們的有效餘額來計算的。 然後,區塊提議者會因為區塊中包含的每個有效證明而收到 `base_reward` 的一部分;證明區塊的驗證者越多,區塊提議者獲得的獎勵就越高。 還有一個獎勵是報告應該被罰沒的驗證者,數額等於每個被罰沒的驗證者的 `1/512 * effective balance`。 + +[更多關於獎勵和懲罰的資訊](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) + + + +## 了解更多 {#further-reading} + +- [區塊簡介](/developers/docs/blocks/) +- [權益證明簡介](/developers/docs/consensus-mechanisms/pos/) +- [以太坊共識規範](https://github.com/ethereum/consensus-specs) +- [Gasper 簡介](/developers/docs/consensus-mechanisms/pos/) +- [升級以太坊](https://eth2book.info/) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/faqs/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/faqs/index.md new file mode 100644 index 00000000000..9b03a6e67e9 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/faqs/index.md @@ -0,0 +1,172 @@ +--- +title: 常見問題 +description: 有關以太坊權益證明的常見問題 +lang: zh-tw +--- + +## 何謂權益證明 (PoS)? {#what-is-proof-of-stake} + +權益證明是一種演算法,透過確保行為不檢的攻擊者失去有價值的資產,來保障區塊鏈的安全。 權益證明系統需要一組驗證者抵押部分資產,當其中有人被證實有不誠實行為,他的資產將被銷毀。 以太坊使用權益證明機制來保護區塊鏈。 + +## 權益證明與工作量證明哪個較好? {#comparison-to-proof-of-work} + +工作量證明和權益證明都是以經濟手段抑制惡意行為者向網路傳送垃圾訊息或進行詐欺的機制。 兩者都需要積極參與共識的節點「向網路中」投入一些資產,如果他們行為不當,便會喪失這些資產。 + +在工作量證明中,這個資產是能源。 節點或又稱為礦工,運行一個演算法,目標是比其他的節點更快計算出一個特定的值。 速度最快的節點獲得提議區塊的權利。 如果礦工希望更改鏈上的歷史紀錄,或主導區塊提議,他們必須要有足夠的算力讓他們能一直贏得比賽。 這個機制執行起來極度的昂貴和困難,也因此保護了區塊鏈免受攻擊。 在工作量證明中「挖礦」所需的能源,是礦工支付的現實世界資產。 + +權益證明則需要節點(又稱為驗證者)明確地向智慧型合約提交加密貨幣資產。 如果驗證者行為不檢,這種加密資產可以被銷毀,因為驗證者是直接「質押」他們的資產到區塊鏈中,而非間接地透過能源消耗來質押。 + +工作量證明的能耗要高得多,因為在挖礦的過程中需要消耗大量電力。 相反,權益證明僅需要極少量的能源 - 以太坊驗證者甚至可以在樹莓派這類低功率的裝置上運行。 以太坊的權益證明機制被認為比工作量證明更加安全,因為攻擊的成本更高,且對攻擊者造成的影響更加嚴重。 + +工作量證明和權益證明的比較是一個有爭議性的話題。 [Vitalik Buterin 的部落格](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-are-the-benefits-of-proof-of-stake-as-opposed-to-proof-of-work)、Justin Drake 和 Lyn Alden 之間的辯論,都提供了很好的總結。 + + + +## 權益證明的能源效益高嗎? {#is-pos-energy-efficient} + +是的, 權益證明網路中的節點僅使用極少量的能源。 一項第三方研究指出,基於整個權益證明的以太坊網路每年消耗大約 0.0026 太瓦時,僅約美國遊戲市場的 1/13,000。 + +[更多關於以太坊能耗的資訊](/energy-consumption/)。 + +## 權益證明安全嗎? {#is-pos-secure} + +以太坊權益證明非常安全。 這個機制在上線前經過了 8 年的研究、開發和嚴格的測試。 它的安全保證不同於工作量證明區塊鏈。 在權益證明中,惡意驗證者會遭到主動懲罰(「罰沒」)並從驗證者集合中踢出,致使其損失大量的以太幣。 而在工作量證明中,攻擊者擁有足夠的雜湊算力就可以持續反覆攻擊。 相較工作量證明,對權益證明以太坊發動相同攻擊的成本也更高。 若要影響區塊鏈的活躍性,至少需要網路中總質押以太幣的 33%(除非進行高度複雜且成功率極低的攻擊)。 如果要控制未來區塊的內容,至少需要網路中總質押以太幣的 51%,如果要重寫歷史紀錄,則需要超過總質押量的 66%。 以太坊協定會在遭到 33% 或 51% 攻擊時銷毀這些資產,並以社交共識來應對 66% 攻擊的情境。 + +- [更多保護以太坊權益證明免受攻擊者攻擊的相關資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense) +- [更多關於權益證明設計的資訊](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) + +## 權益證明令使用以太坊的成本更低嗎? {#does-pos-make-ethereum-cheaper} + +否。 傳送交易的成本(燃料費)取決於費用市場動態,該成本會隨著網路需求而增加。 共識機制不會直接影響交易成本。 + +[更多關於燃料的資訊](/developers/docs/gas)。 + +## 何謂節點、用戶端和驗證者? {#what-are-nodes-clients-and-validators} + +節點是連線到以太坊網路的電腦。 用戶端是將電腦轉化成節點所需運行的軟體。 有兩種類型的用戶端:執行用戶端和共識用戶端。 建立一個節點,兩種用戶端都需要。 驗證者是共識用戶端的一個選擇附加元件,讓節點可以參與權益證明共識。 參與共識機制是指被選中建立和提議區塊,以及證明從網路上接收到的區塊。 若要運行一個驗證者,節點營運商必須向存款合約中存入 32 個以太幣。 + +- [更多關於節點和用戶端的資訊](/developers/docs/nodes-and-clients) +- [更多權益質押相關資訊](/staking) + +## 權益證明是一個新概念嗎? {#is-pos-new} + +否。 在 2011 年的 BitcoinTalk 論壇上,就有使用者[提出權益證明的基本概念](https://bitcointalk.org/index.php?topic=27787.0)作為比特幣的升級版。 11 年後,它才準備好在以太坊主網上實作。 一些其他的區塊鏈較以太坊更早實行權益證明,但並非以太坊的特定機制(稱為 Gasper)。 + +## 以太坊的權益證明有甚麼特別之處? {#why-is-ethereum-pos-special} + +以太坊的權益證明機制設計非常獨特。 它不是第一個被設計並且實行的權益證明機制,但它是最穩健的。 這個權益證明機制被稱為「Casper」。 Casper 定義了如何挑選驗證者來提議區塊、如何以及何時進行證明、這些證明如何計算、給予驗證者的獎勵和懲處、罰沒條件、故障安全機制(如怠惰逐減懲罰),以及「最終確定性」的條件。 最終確定性是指一個區塊被認為是規範鏈上永久存在部分的條件,它必須獲得網路上至少 66% 的總質押以太幣的投票。 研究人員專門為以太坊開發了 Casper,而以太坊是第一個也是唯一個實行它的區塊鏈。 + +除了 Casper,以太坊的權益證明還採用一種叫做 LMD-GHOST 的分叉選擇演算法。 在同一時隙存在兩個區塊的情況下需要它。 這會建立區塊鏈的兩個分叉。 LMD-GHOST 會選擇具有最大證明「權重」的一個分叉。 權重是證明數量以驗證者有效餘額加權過後的數值。 LMD-GHOST 是以太坊獨有的機制。 + +Casper 和 LMD_GHOST 的組合被稱為 Gasper。 + +[更多關於 Gasper 的資訊](/developers/docs/consensus-mechanisms/pos/gasper/) + +## 什麼是罰沒? {#what-is-slashing} + +罰沒是指銷毀驗證者的部分質押並將驗證者從網路中驅逐。 被罰沒的以太幣數量取決於有多少驗證者遭到罰沒 - 這意味串通起來的驗證者會比個別的驗證者受到更多懲罰。 + +[更多關於罰沒的資訊](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties#slashing) + +## 為甚麼驗證者需要 32 個以太幣? {#why-32-eth} + +驗證者需要質押以太幣,如果他們行為不當,就會失去一些東西。 之所以需要質押 32 個以太幣,是為了讓節點能在適當的硬體上運作。 如果每個驗證者所需要的最少以太幣較少,則驗證者的數量以及每個時隙必須處理的訊息數就會增加,這意味需要更強大的硬體來運作節點。 + +## 如何挑選驗證者? {#how-are-validators-selected} + +每個時隙都會透過一個名為 RANDAO 的演算法,以偽隨機的方式選出一個驗證者來提議區塊,該演算法會將區塊提議者的雜湊值和一個每區塊都會更新的種子混雜在一起。 所產生的這個數值會用來從整個驗證者集合中選出一個特定的驗證者。 驗證者的選擇會提前兩個時期固定。 + +[更多關於驗證者挑選的資訊](/developers/docs/consensus-mechanisms/pos/block-proposal) + +## 什麼是權益粉碎攻擊? {#what-is-stake-grinding} + +權益粉碎攻擊是針對權益證明網路的攻擊類別,攻擊者會試圖使驗證者選擇演算法偏向自己的驗證者。 對 RANDAO 發動權益粉碎攻擊,大約需要已質押以太幣總數的一半。 + +[更多關於權益粉碎攻擊的資訊](https://eth2book.info/altair/part2/building_blocks/randomness/#randao-biasability) + +## 什麼是社交罰沒? {#what-is-social-slashing} + +社交罰沒是指社群透過協調區塊鏈分叉來應對攻擊的能力。 它使社群能夠從攻擊者最終確定不誠實鏈中恢復。 社交罰沒也可以用來抵禦審查攻擊。 + +- [更多關於社交罰沒的資訊](https://ercwl.medium.com/the-case-for-social-slashing-59277ff4d9c7) +- [Vitalik Buterin 談社交罰沒](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) + +## 我會受到罰沒嗎? {#will-i-get-slashed} + +作為驗證者,除非你故意涉入惡意行為,否則是很難遭到罰沒的。 罰沒只有在非常特定的情境下會被實行,比如驗證者在同一個時隙下提議多個區塊,或是在其證明中互相矛盾時 - 這些情況不太可能意外出現。 + +[更多關於罰沒條件的資訊](https://eth2book.info/altair/part2/incentives/slashing) + +## 什麼是無利害關係問題? {#what-is-nothing-at-stake-problem} + +無利害關係問題是一些權益證明機制中的一個概念性議題,在此種機制下只有獎勵而沒有懲罰。 如果沒有任何利害關係,那麼務實的驗證者會樂於證明任何甚至多個區塊鏈分叉,因為這會讓他們的獎勵增加。 以太坊透過最終性條件和罰沒來解決這個問題,確保只有一條規範鏈。 + +[更多關於無利害關係問題的資訊](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed) + +## 什麼是分叉選擇演算法? {#what-is-a-fork-choice-algorithm} + +分叉選擇演算法貫徹規則,以決定哪一條鏈是規範鏈。 在最佳的情況下,不需要使用分叉選擇規則,因為在每一個時隙下只有一個區塊提議者和一個可供選擇的區塊。 然而,偶爾會出現多個區塊在同一個時隙的情況,或是晚到的資訊導致鏈頭附近的區塊有多種組織方式。 在這種情況下,所有的用戶端必須遵循相同的規則來確保它們權選擇正確的區塊序列。 分叉選擇演算法透過編碼實行了這些規則。 + +以太坊的分叉選擇演算法被稱為 LMD-GHOST。 它會選擇擁有最大證明權重的分叉,也就是得到最多質押以太幣投票支持的分叉。 + +[更多關於 LMD-GHOST 的資訊](/developers/docs/consensus-mechanisms/pos/gasper/#fork-choice) + +## 什麼是權益證明中的最終確定性? {#what-is-finality} + +在權益證明中,最終確定性是指保證特定的區塊是規範鏈的永久一部分,除非存在共識失敗,即攻擊者銷毀了總質押以太幣的 33%,否則該區塊就不會被撤銷。 這是「加密經濟」上的最終確定性,與工作量證明區塊鏈相關的「機率最終確定性」不同。 在機率最終確定性中,區塊沒有明確的最終確定或非最終確定狀態 - 隨著區塊在鏈上存在的時間越長,該區塊從鏈上被移除的機率會逐漸降低,並且由使用者自行確定在他們對區塊有足夠信心時自行認定它是安全的。 在加密經濟上的最終確定性中,成對的檢查點區塊必須獲得總質押以太幣的 66% 的投票支持。 如果滿足這個條件,則這些檢查點之間的區塊將明確地「最終確定」。 + +[更多關於最終確定性的資訊](/developers/docs/consensus-mechanisms/pos/#finality) + +## 什麼是「弱主觀性」? {#what-is-weak-subjectivity} + +弱主觀性是權益證明網絡的一個特性,即社交資訊被用來確認區塊鏈當下的狀態。 新節點或長時間離線後重新加入網路的節點可以獲得最新的狀態,因此節點能夠立刻知道它們是否在正確的鏈上。 這些狀態被稱為「弱主觀性檢查點」,可以從其他節點營運商的帶外通道,或從區塊瀏覽器和多個公共端點取得。 + +[更多關於弱主觀性的資訊](/developers/docs/consensus-mechanisms/pos/weak-subjectivity) + +## 權益證明是否具有抗審查的特性? {#is-pos-censorship-resistant} + +目前很難證明權益證明的抗審查性。 然而,與工作量證明不同,權益證明提供了協調罰沒機制,以懲罰審查驗證者。 該協定即將修改為將區塊建構者與區塊提議者分開,並實行建構者必須在每個區塊中包含的交易清單。 此提案被稱為「提議者 - 建構者分離」,有助於防止驗證者審查交易。 + +[更多關於提議者 - 建構者分離的資訊](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Original-basic-scheme) + +## 以太坊的權益證明系統會受到 51% 攻擊嗎? {#pos-51-attack} + +是的, 權益證明和工作量證明一樣,也易受 51% 攻擊。 攻擊者不需要掌控 51% 的網路算力,而是需要掌控已質押以太幣總數的 51%。 累積了總質押量 51% 的攻擊者,便可以控制分叉選擇演算法。 這使得攻擊者能夠審查某些交易、進行短程重組,並透過以有利於他們的方式重新排序區塊來提取最大可提取價值。 + +[更多關於權益證明攻擊的資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense) + +## 什麼是社交協調,為什麼需要它? {#what-is-social-coordination} + +社交協調是以太坊上的最後一道防線,讓誠實鏈可以從已最終確定不誠實區塊的攻擊中恢復。 在這種情況下,以太坊社群必須進行「帶外」協調,並采納一個誠實的少數分叉,在此過程中懲處攻擊者的驗證者。 這也需要應用程式和交易所能夠識別誠實的分叉。 + +[更多關於社交協調的資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense#people-the-last-line-of-defense) + +## 權益證明會讓富者越富嗎? {#do-rich-get-richer} + +人們質押的以太幣越多,他們能夠運作的驗證者就越多,能夠獲得的獎勵也越多。 獎勵隨著質押以太幣的數量綫性增加,所有人都獲得相同的回報百分比。 相比權益證明,工作量證明更容易讓富者越富,因爲大規模購買硬體的富有礦工會從規模經濟中受益,這意味著財富與獎勵之間的關係是非綫性的。 + +## 權益證明比工作量證明更中心化嗎? {#is-pos-decentralized} + +不,工作量證明趨於中心化,因爲挖礦成本增加,導致個人礦工被淘汰,接著是小公司被淘汰,依此類推。 權益證明目前的問題是流動性質押衍生品 (LSD) 的影響。 這些代幣代表由某個供應商質押的以太幣,任何人都可以在二級市場交換它們,而無需實際取消以太幣的質押。 流動性質押衍生品讓使用者可以用少於 32 個以太幣進行質押,這也帶來了中心化風險,一些大型組織最終可以控制大部分質押。 這就是爲什麽說[單獨質押](/staking/solo)是以太坊的最佳選項。 + +[更多流動性質押衍生品中心化的相關資訊](https://notes.ethereum.org/@djrtwo/risks-of-lsd) + +## 為什麼我只能質押以太幣? {#why-can-i-only-stake-eth} + +以太幣是以太坊的原生貨幣。 讓所有質押都以單一貨幣計價至關重要,這既是爲了計算加權投票的有效餘額,也是爲了增加安全性。 以太幣本身是以太坊的基本組成部分,但不是智慧型合約的基本組成部分。 引入其他貨幣將顯著增加複雜性,並降低質押的安全性。 + +## 以太坊是唯一使用權益證明的區塊鏈嗎? {#is-ethereum-the-only-pos-blockchain} + +不是,有多條使用權益證明的區塊鏈。 其中沒有一條鏈與以太坊相同;以太坊的權益證明機制是獨一無二的。 + +## 合併是什麼? {#what-is-the-merge} + +合併是指以太坊關閉基於工作量證明的共識機制,並啓用基於權益證明的共識機制的時刻。 合併發生與 2022 年 9 月 15 日。 + +[合併案的相關細節](/roadmap/merge) + +## 什麽是活躍性與安全性? {#what-are-liveness-and-safety} + +活躍性和安全性是區塊鏈的兩大基礎安全問題。 活躍性是指最終確定鏈的可用性。 如果鏈停止最終確定或者用戶無法很容易地存取它,這就是活躍性失效。 使用成本極高也可以視爲活躍性失效。 安全性是指攻擊鏈(即最終確定衝突檢查點)的難度。 + +[閱讀更多關於 Casper 的論文](https://arxiv.org/pdf/1710.09437.pdf) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/gasper/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/gasper/index.md new file mode 100644 index 00000000000..dd861e76a1c --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/gasper/index.md @@ -0,0 +1,52 @@ +--- +title: Gasper +description: Gasper 權益證明機制的解釋。 +lang: zh-tw +--- + +Gasper 是由 Casper 友善最終確定性組件 (Casper-FFG) 及 LMD-GHOST 分叉選擇演算法組成的。 這些部分共同構成了保護權益證明以太坊的共識機制。 Casper 是將特定區塊升級至「最終確定」的機制,這樣新加入網路的節點就可以確定它們正在同步的是規範鏈。 分叉選擇演算法使用累積的投票,以確保節點能在區塊鏈發生分叉時很容易地選擇正確的鏈。 + +**注意**:由於 Casper-FFG 包含在 Gasper 中,因此其原始定義有小幅更新。 此頁面中的定義為更新後的版本。 + +## 前置要求 + +要瞭解本頁的內容,推薦先閱讀[權益證明](/developers/docs/consensus-mechanisms/pos/)的介紹頁面。 + +## Gasper 扮演的角色 {#role-of-gasper} + +Gasper 建立於權益證明區塊鏈之上,節點會提供以太幣作為保證金,若其在提議或驗證區塊時懶惰或不誠實,該保證金可能會被銷毀。 Gasper 是定義如何獎勵及處罰驗證者,決定應接受和拒絕哪個區塊,以及在區塊鏈的哪個分叉上建構的機制。 + +## 最終確定性是什麼? {#what-is-finality} + +最終確定性是某些區塊的屬性,指的是除非在共識嚴重失效或攻擊者已銷毀了至少 1/3 的總質押以太幣,否則該區塊無法被還原。 最終確定的區塊可以視為已經被區塊鏈確定的資訊。 區塊需要經過一個 2 步驟升級程序才能被最終確定: + +1. 三分之二的總質押以太幣必須投票支持將該區塊納入規範連。 此條件將區塊升級至「合理化」狀態。 合理區塊不太可能被還原,但在某些情況下也有可能。 +2. 當另一個區塊在一個合理區塊上被合理化時,該區塊將被升級至「最終確定」狀態。 最終確定一個區塊是將其納入規範鏈的承諾。 除非攻擊者銷毀了數百萬枚以太幣(數十億 $USD),否則該區塊無法被還原。 + +並非每個時隙都會發生這種區塊升級。 相反,只有時期邊界的區塊可以被合理化並最終確定。 這些區塊被稱爲「檢查點」。 升級需要考慮成對的檢查點。 兩個連續的檢查點中間必須存在一個「絕對多數連結」(即三分之二的縂質押以太幣投票支持檢查點 B 是檢查點 A 的正確子代),才能將較早的檢查點升級至最終確定狀態,並將較新的區塊升級至合理化狀態。 + +由於最終性需要三分之二的縂質押以太幣同意某個區塊是規範區塊,因此攻擊者無法在缺少下列條件的情況下建立另一條最終確定鏈: + +1. 擁有或操縱三分之二的縂質押以太幣。 +2. 銷毀至少三分之一的縂質押以太幣。 + +第一個條件出現的原因是需要三分之二的質押以太幣來最終確定一條鏈。 之所以有第二個條件,是因爲如果三分之二的質押總量投票支持了兩個分叉,則必然有三分之一的質押總量同時投票支持了兩個分叉。 雙重投票符合罰沒條件,會受到最大程度的懲罰,銷毀三分之一的質押縂量。 截至 2022 年 5 月,這需要攻擊者銷毀價值約 100 億美元的以太幣。 Gasper 中用於合理化並最終確定區塊的演算法是[友善最終確定性組件 (Casper-FFG)](https://arxiv.org/pdf/1710.09437.pdf) 的輕微改動版本。 + +### 激勵與罰沒 {#incentives-and-slashing} + +誠實地提議和驗證區塊的驗證者會獲得獎勵。 以太幣將作爲獎勵新增到他們的質押中。 另一方面,缺席或在被呼叫時未能響應的驗證者將錯過這些獎勵,有時還會損失他們現有質押的一小部分。 然而,離綫的處罰是較小的,在多數情況下,僅為錯失獎勵的機會成本。 但是,有些驗證者的行爲很難是無意爲之,並且表現出某種惡意企圖,例如在同一個時隙提議多個區塊、在同一個時隙證明多個區塊,或與先前的檢查點投票自相矛盾。 這些「可罰沒」行爲將受到更嚴厲的懲罰 - 罰沒將導致驗證者的部分質押被銷毀,並將驗證者移出驗證者網路。 這個過程需要 36 天。 在第 1 天,會有最高 1 個以太幣的初始懲罰。 之後,被罰沒驗證者的以太幣將在退出期間緩慢耗盡,但在第 18 天,他們會受到「相關性懲罰」,當更多的驗證者在大致同一時間被罰沒時,該懲罰的力度也會更大。 懲罰的上限是全部質押。 這些獎勵和懲罰旨在激勵誠實的驗證者,並抑制對網路的攻擊。 + +### 怠惰逐減懲罰 {#inactivity-leak} + +除了安全性外,Gasper 也提供「合理的活躍性」。 條件是只要三分之二的縂質押以太幣誠實地投票並遵循協定,無論是否有任何其他活動產生(例如攻擊、延遲問題或罰沒),鏈都能被最終確定。 換言之,想要阻止區塊鏈被最終確定,必須以某種方式損毀三分之一的縂質押以太幣。 在 Gasper 中,還有另一道防綫來防範活躍性失效,它就是「怠惰逐減懲罰」。 如果鏈未能在 4 個時期内最終確定,該機制就會啓動。 未能積極證明主鏈的驗證者的質押將會逐漸被消耗,直到主鏈重新獲得三分之二的縂質押投票,確保活躍性失效只是暫時的。 + +### 分叉選擇 {#fork-choice} + +Casper-FFG 的原始定義包含一種分叉選擇演算法,該演算法規定:`遵循包含具有最大高度的合理化檢查點的鏈`,其中高度被定義爲距離創世區塊的最遠距離。 在 Gasper 中,原始的分叉選擇規則已被棄用,轉而采用一種名為 LMD-GHOST 的更精密演算法。 請注意,在正常情況下,分叉選擇規則是不必要的 - 每個時隙只有一個區塊提議者,并有誠實的驗證者進行證明。 只有當網路非同步性過大或不誠實的區塊提議者模棱兩可的情況下,才需要分叉選擇演算法。 然而,當這些情況真的發生時,分叉選擇演算法是確保正確鏈的重要防禦措施。 + +LMD-GHOST 代表「最新訊息驅動的最貪婪、最重的可觀察子樹 (latest message-driven greedy heaviest observed sub-tree)」。 這是一個行話味很重的術語,用來定義這樣一種演算法:選擇具有最大累積證明權重的分叉作爲規範分叉(貪婪最重子樹),並且如果收到來自驗證者的多條訊息,則只考慮最新的訊息(最新訊息驅動)。 在將最重區塊新增到其規範鏈之前,每名驗證者都會使用此規則來評估每個區塊。 + +## 衍生閱讀 {#further-reading} + +- [Gasper:最貪婪、最重的可觀察子樹 (GHOST) 與 Casper 的結合](https://arxiv.org/pdf/2003.03052.pdf) +- [Casper 友善最終確定性組件](https://arxiv.org/pdf/1710.09437.pdf) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/index.md new file mode 100644 index 00000000000..96e6219c9bf --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/index.md @@ -0,0 +1,99 @@ +--- +title: 權益證明 (PoS) +description: 對權益證明共識協定及其在以太坊中之作用的解釋。 +lang: zh-tw +--- + +權益證明 (PoS) 是支撐以太坊[共識機制](/developers/docs/consensus-mechanisms/)的基礎。 以太坊於 2022 年啟用了權益證明機制,這一轉變主要因為相較於之前的[工作量證明](/developers/docs/consensus-mechanisms/pow)架構,權益證明機制在安全性上更為可靠,且能源消耗更低,為實現新的擴容解決方案提供了更優越的基礎。 + +## 先決條件 {#prerequisites} + +為了更好地理解此頁面,我們建議你先閱讀[共識機制](/developers/docs/consensus-mechanisms/)的相關資料。 + +## 什麼是權益證明 (PoS)? {#what-is-pos} + +權益證明是一種證明驗證者已經將有價值物品質押到網路上的方法。如果驗證者有失信行為,這些物品可能會被銷毀。 在以太坊的權益證明機制下,驗證者明確地透過以太幣將資產質押到以太坊上的智慧型合約中。 之後,驗證者負責檢查在網路上傳播的新區塊是否有效,偶爾自己也建立和傳播新區塊。 當他們試圖欺騙網路時(例如,在應該傳送一個區塊時提議多個區塊,或傳送衝突的證明),他們質押的部分或全部以太幣可能會被銷毀。 + +## 驗證者 {#validators} + +要作為驗證者參與,使用者必須向存款合約存入 32 個以太幣並執行三種獨立的軟體:執行用戶端、共識用戶端和驗證者用戶端。 存入以太幣時,使用者會加入一個激活隊列,限制新驗證者加入網路的速度。 激活後,驗證者會從以太坊網路上的對等節點接收新區塊。 區塊中的交易會被重新執行,以檢查提議的以太坊狀態變更是否有效,並檢查區塊的簽章。 然後驗證者在整個網路上傳送支持該區塊的投票(稱為證明)。 + +在工作量證明中,產生區塊的時間是由挖礦難度決定的,而在權益證明中,節奏是固定的。 權益證明以太坊中的時間分為時隙(12 秒)和時期(32 個時隙)。 在每個時隙會隨機選擇一位驗證者作為區塊提議者。 該驗證者負責建立新區塊並傳送給網路上的其他節點。 另外在每個時隙中,都會隨機選擇一個驗證者委員會,透過他們的投票來確定所提議區塊的有效性。 將驗證者集合劃分為若干個委員會對於保持網路負載易於管理非常重要。 委員會將驗證者集合分成不同部分,以便每個活躍的驗證者在每個時期都會出示證明,但並非每個時隙都這樣做。 + +## 如何在以太坊權益證明中執行交易 {#transaction-execution-ethereum-pos} + +以下提供了關於如何在以太坊權益證明中執行交易的全面解釋。 + +1. 使用者使用他們的私鑰建立並簽署[交易](/developers/docs/transactions/)。 這通常由錢包或程式庫處理,例如 [ether.js](https://docs.ethers.io/v5/)、[web3js](https://docs.web3js.org/)、[web3py](https://web3py.readthedocs.io/en/v5/) 等,但本質上是使用者在使用以太坊 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)向節點發出請求。 使用者定義他們準備支付的一定數量的燃料,作為給驗證者的小費,以鼓勵他們將交易納入到區塊中。 [小費](/developers/docs/gas/#priority-fee)支付給驗證者,而[基本費用](/developers/docs/gas/#base-fee)則會被銷毀。 +2. 交易提交給以太坊[執行層用戶端](/developers/docs/nodes-and-clients/#execution-client)以驗證其有效性。 這意味著確保發送者有足夠的以太幣來完成交易,並且他們已經使用正確的金鑰來簽署交易。 +3. 如果交易有效,執行層用戶端將其新增至其本機記憶體池(待處理交易清單),並透過執行層廣播網路將其廣播到其他節點。 當其他節點聽到關於交易的消息時,它們也會將其添加到本地記憶體池中。 進階使用者可能會避免廣播他們的交易,而是將其轉發給專門的區塊建置者,例如 [Flashbots Auction](https://docs.flashbots.net/flashbots-auction/overview)。 這使他們能夠在即將到來的區塊中組織交易以獲得最大利潤([最大可提取價值](/developers/docs/mev/#mev-extraction))。 +4. 網路上的驗證者節點之一是當前時隙的區塊提議者,該提議者是之前使用 RANDAO 以偽隨機方式選取的。 該節點負責建立和廣播下一個要新增至以太坊區塊鏈的區塊並更新全域狀態。 此節點由三個部分組成:執行用戶端、共識用戶端和驗證者用戶端。 執行層用戶端將來自本機記憶體池的交易捆綁到「執行有效負載」中,並在本機執行它們以產生狀態變更。 此資訊被傳遞到共識用戶端,在該用戶端,執行有效載荷被包裝為「信標區塊」的一部分。該信標區塊還包含有關獎勵、懲罰、罰沒、證明等的資訊,從而使網路能夠就鏈頭的區塊順序達成一致。 [連線共識用戶端和執行用戶端](/developers/docs/networking-layer/#connecting-clients)中更詳細地描述了執行用戶端和共識用戶端之間的通訊。 +5. 其他節點在共識層廣播網路上接收新的信標區塊, 並將其傳遞給它們的執行用戶端。在執行用戶端上,交易在本機重新執行以確保提議的狀態變更有效。 然後,驗證者用戶端證明該區塊是有效的,並且根據他們的看法,這在邏輯上是鏈上的下一個區塊(這意味著它建置在如[分叉選擇規則](/developers/docs/consensus-mechanisms/pos/#fork-choice)所定義的具有最大證明權重的鏈上)。 該區塊被新增到證明它的每個節點的本機資料庫中。 +6. 如果交易已經成為兩個檢查點之間具有「絕對多數連結」的鏈的一部分,那麼可以認為該交易已經「最終確定」。 檢查點發生在每個時期的開始,它們的存在是為了兼顧以下事實:每個時隙只有活躍驗證者的子集會提供證明,但所有活躍驗證者在每個完整時期內都會提供證明。 因此,只有在時期之間才能證明「絕對多數連結」(即網路上總質押以太幣的 66% 同意兩個檢查點的情況)。 + +關於最終確定性的更多詳細資訊,請參見下文。 + +## 最終性 {#finality} + +交易在分佈式網路中具有「最終確定性」是指,該交易是區塊的一部分,而且除非銷毀大量以太幣,否則便無法變更。 在權益證明以太坊上,最終確定性是透過「檢查點」區塊來管理的。 每個時期中的第一個區塊便是檢查點。 驗證者為其認為有效的「檢查點對」投票。 如果一對檢查點獲得了質押以太幣總數中三分之二以上的投票,那麼這對檢查點將被升級。 這兩個(目標)中較新的一個會變成「合理化」狀態。 較舊的一個檢查點已經是合理化狀態,因為它是上一個時期中的「目標」。 現在,這個檢查點已升級為「最終確定」狀態。 + +要撤銷最終確定的區塊,攻擊者將承擔至少相當於質押以太幣總數三分之一的損失。 這篇[以太坊基金會部落格文章](https://blog.ethereum.org/2016/05/09/on-settlement-finality/)解釋了其確切原因。 由於最終確定性需要獲得三分之二的多數投票,攻擊者可以用質押以太幣總數的三分之一投票來阻止網路實現最終確定性。 有一種可以防禦此種攻擊行為的機制:[怠惰逐減懲罰](https://eth2book.info/bellatrix/part2/incentives/inactivity)。 如果鏈未能在四個時期內最終確定,此機制就會啟動。 怠惰逐減懲罰會逐漸消耗驗證者投票反對大多數驗證者的質押以太幣,使大多數驗證者重新獲得三分之二多數投票,以最終確定鏈。 + +## 加密經濟安全性 {#crypto-economic-security} + +運行驗證者是一個承諾。 驗證者應要維持足夠的硬體和連線,以參與區塊驗證和提議。 作為回報,驗證者會獲得以太幣(他們的質押餘額增加)。 另一方面,作為驗證者參與也會開啟新渠道,讓使用者為了個人利益或為破壞而攻擊網路。 為了預防此種情況,如果驗證者在被調用時並未能參與,將會錯過以太幣獎勵,且他們如果有不誠實行為,目前的質押可能會被銷毀。 兩種主要的行為會被視為不誠實:在一個時隙中提議多個區塊(模稜兩可),以及提交相互矛盾的證明。 + +罰沒的以太幣數量視大致同一時間受到罰沒的驗證者數量而定。 這稱為[「相關性懲罰」](https://eth2book.info/bellatrix/part2/incentives/slashing#the-correlation-penalty)。相關性懲罰可以很輕微(單個驗證者被罰沒約 1% 的質押),或是造成驗證者 100% 的質押被銷毀(大額罰沒事件)。 這種懲處在強制退出期執行,首先是第一天的立即懲罰(最高 1 枚以太幣),接下來是第 18 天的相關性懲罰,最後是第 36 天的逐出網路。 如果驗證者在網路上但未提交投票,驗證者每天會受到輕微的證明懲罰。 以上均表明,協同攻擊對攻擊者來說代價將極其高昂。 + +## 分叉選擇 {#fork-choice} + +當網路以最佳狀態誠信運行時,鏈頭始終只會有一個新區塊並且所有驗證者都會證明它。 然而,由於網路延遲或因為區塊提議者提出多個區塊(模棱兩可),驗證者可能會看到不同的鏈頭視圖。 因此,共識用戶端需要一種演算法來確定支援哪一個區塊。 在權益證明以太坊中所用的演算法稱為 [LMD-GHOST](https://arxiv.org/pdf/2003.03052.pdf),其工作原理是識別在其歷史記錄中具有最大證明權重的分叉。 + +## 權益證明及安全性 {#pos-and-security} + +[51% 攻擊](https://www.investopedia.com/terms/1/51-attack.asp)的威脅如在工作量證明中一樣仍存在於權益證明,但對攻擊者來說風險更大。 攻擊者將需要 51% 的質押以太幣。 然後他們可以使用自己的證明,確保其首選的分叉為最多累積證明的分叉。 共識用戶端使用累積證明的「權重」來決定正確的鏈,使攻擊者能夠因此讓他們的分叉成為規範分叉。 然而,相較於工作量證明,權益證明的優勢在於社群可以靈活地發動反擊。 例如,誠實的驗證者可以決定繼續在非多數鏈上建置,忽略攻擊者的分叉,同時鼓勵應用程式、交易所和池也這樣做。 他們也可以決定強行將攻擊者從網路中移除,並銷毀其質押以太幣。 這些都是針對 51% 攻擊強而有力的經濟防禦。 + +除了 51% 攻擊,不良行為者也可能嘗試其他惡意活動,例如: + +- 遠程攻擊(但是最終確定性小工具能抵銷此種攻擊媒介) +- 短距「區塊重組」(但是提議者增強和證明截止可以緩解此情況) +- 反彈和平衡攻擊(也能透過提議者增強來緩解,且這些攻擊也只有在理想化的網路情況下展示過) +- 雪崩攻擊(透過分叉選擇演算法只考慮最新訊息的規則加以抵銷) + +整體來說,以太坊上實行的權益證明在經濟方面展現為比工作量證明更安全。 + +## 優勢及劣勢 {#pros-and-cons} + +| 優勢 | 劣勢 | +| ----------------------------------------------------------------------- | -------------------------- | +| 質押使個人更容易參與保障網路安全,促進去中心化。 驗證者節點可以在普通筆電上運行。 質押池讓使用者在沒有 32 個以太幣的情況下也能進行質押。 | 權益證明比起工作量證明更為初期且經歷過的實戰測試較少 | +| 質押更加去中心化。 規模經濟不像在工作量證明挖礦中那樣適用於權益證明。 | 實行權益證明比起工作量證明更為複雜 | +| 權益證明比起工作量證明提供了更多加密經濟安全性 | 使用者需要執行三個軟體才能參與以太坊質押 | +| 僅需發行更少的以太幣就能激勵網路參與者 | | + +### 與工作量證明的比較 {#comparison-to-proof-of-work} + +以太坊最初使用工作量證明,但在 2022 年 9 月轉為權益證明。 權益證明比工作量證明具有多項優勢,例如: + +- 能源效率更高 – 無需在工作量證明計算上使用大量能源 +- 參與門檻更低,更低的硬體要求 – 不需要頂尖硬體以獲得建立新區塊的機會 +- 更低的中心化風險 – 權益證明應可以增加保護網路安全的節點 +- 因為能源要求低,發行較少的以太幣就可以激勵參與 +- 與工作量證明相比,不當行為的經濟懲罰使發動 51% 攻擊的攻擊者須付出更高的代價 +- 如果 51% 攻擊攻破加密經濟防禦,社群可以採取誠實鏈的社交恢復。 + +## 了解更多 {#further-reading} + +- [權益證明常見問題](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html) - _Vitalik Buterin_ +- [什麼是權益證明?](https://consensys.net/blog/blockchain-explained/what-is-proof-of-stake/)- _ConsenSys_ +- [權益證明是什麼,又有何重要性?](https://bitcoinmagazine.com/culture/what-proof-of-stake-is-and-why-it-matters-1377531463)- _Vitalik Buterin_ +- [為什麼採用權益證明(2020 年 11 月)](https://vitalik.eth.limo/general/2020/11/06/pos2020.html)- _Vitalik Buterin_ +- [權益證明:我如何學著愛上弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) - _Vitalik Buterin_ +- [權益證明以太坊攻擊與防禦](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [權益證明的設計哲學](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) - _Vitalik Buterin_ +- [影片:Vitalik Buterin 向 Lex Fridman 解釋權益證明](https://www.youtube.com/watch?v=3yrqBG-7EVE) + +## 相關主題 {#related-topics} + +- [工作量證明(PoW)](/developers/docs/consensus-mechanisms/pow/) +- [權威證明](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/keys/index.md new file mode 100644 index 00000000000..b0cc78f1648 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -0,0 +1,96 @@ +--- +title: 權益證明以太坊中的金鑰 +description: 說明太坊權益證明共識機制中使用的金鑰 +lang: zh-tw +--- + +以太坊使用公私金鑰密碼學來保護使用者資產。 公鑰是以太坊地址的基礎,可被大眾看見並用作一個獨特的身分識別。 私鑰(或「密鑰」)則永遠只能由帳戶擁有者存取。 私鑰被用來「簽署」交易和資料,以便密碼學可以驗證私鑰持有者核准特定私鑰的某些動作。 + +以太坊的金鑰透過[橢圓曲線密碼學](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography)產生。 + +然而,當以太坊從[工作量證明](/developers/docs/consensus-mechanisms/pow)轉換為[權益證明](/developers/docs/consensus-mechanisms/pos)後,一種新型態的金鑰加入到以太坊中。 原始的金鑰仍維持相同的運作 — 使用基於橢圓曲線密碼學的金鑰來保障帳戶安全沒有變化。 然而,使用者需要一種新型態的金鑰,透過質押以太幣和運作驗證者來參與權益證明。 這個需求源於擴容帶來的挑戰,許多訊息需要在眾多的驗證者間傳遞,過程中需要一種可以輕鬆彙總的密碼學方法,以減少網路達成共識所需的通訊量。 + +這種新型態的金鑰使用 [**Boneh-Lynn-Shacham (BLS)** 簽章方案](https://wikipedia.org/wiki/BLS_digital_signature)。 BLS 能高效率地彙總簽名,同時允許對彙總的單獨驗證者金鑰進行逆向工程,非常適合管理驗證者之間的動作。 + +## 兩種類型的驗證者金鑰 {#two-types-of-keys} + +在以太坊過渡到權益證明之前,使用者只有一個基於橢圓曲線密碼學的私密金鑰來存取他們的資金。 隨著權益證明的引入,希望成為單獨質押者的使用者還需要**驗證者金鑰**和**提款金鑰**。 + +### 驗證者金鑰 {#validator-key} + +驗證者的簽章金鑰包含兩個元素: + +- 驗證者**私**鑰 +- 驗證者**公**鑰 + +驗證者私鑰的作用是簽署鏈上作業,像是區塊提議和證明區塊。 因此,這些私鑰必須存放在熱錢包中。 + +這種彈性的優勢是可以快速地在不同裝置間移轉驗證者簽章金鑰,然而,如果這些金鑰遺失或被偷,那竊盜者便可透過以下方式進行**惡意行為**: + +- 使驗證者遭受罰沒: + - 做為提議者,在同一個時隙簽署兩個不同的信標區塊 + - 做為證明者,簽署一個「包圍」另一個證明的證明 + - 做為證明者,簽署兩個具有相同目標的不同證明 +- 強制執行自願退出,使驗證者停止質押並授權提款金鑰擁有者存取其以太幣餘額。 + +當使用者將以太幣存入質押存款合約時,**驗證者公鑰**會被包含在交易資料中。 這被稱為_存款資料_,讓以太坊能夠辨識驗證者。 + +### 提款憑證 {#withdrawal-credentials} + +每個驗證者都會有一個稱為_提款憑證_的屬性。 這是一個 32 位元組的欄位,以 `0x00` 開頭,代表 Boneh-Lynn-Shacham 提款憑證,或是以 `0x01` 開頭,代表指向一個執行地址的憑證。 + +持有 `0x00` Boneh-Lynn-Shacham 金鑰的驗證者,必須更新這些憑證,將其指向執行地址以啟用超額獎勵發放或全額質押提款。 驗證者可以在初始金鑰產生的階段,就將執行地址包含在存款資料中,_或_後續透過使用提款金鑰來簽署和廣播一則 `BLSToExecutionChange` 訊息。 + +### 提款金鑰 {#withdrawal-key} + +如果在初始存款階段沒有設定,則需要提款金鑰來更新提款憑證,將其指向執行地址。 此設定使超額獎勵發放能夠開始處理,也讓使用者能將他們質押的以太幣全額提款。 + +如同驗證者金鑰,提款金鑰也由兩個元件組成: + +- 提款**私**鑰 +- 提款**公**鑰 + +如果在更新提款憑證為 `0x01` 類型前遺失金鑰,則意味著喪失對驗證者餘額的存取權限。 驗證者依舊可以簽署證明和區塊,因為這些動作只需要驗證者私鑰,然而遺失了提款私鑰就幾乎沒有激勵。 + +將驗證者金鑰與以太坊帳戶金鑰分離,可以讓一個使用者運行多個驗證者。 + +![驗證者金鑰示意圖](validator-key-schematic.png) + +## 從種子助記詞派生金鑰 {#deriving-keys-from-seed} + +如果每質押 32 個以太幣都需要一組新的 2 個完全獨立的金鑰,那金鑰管理很快就會變得無效率,尤其對那些運行多個驗證者的使用者而言。 相反,多個驗證者金鑰可以從一個共同的秘鑰派生,並且儲存這個秘鑰就允許存取多個驗證者金鑰。 + +[助記詞](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase)和路徑通常是[使用者存取](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0)自己的錢包時最重要的工具。 助記詞是一連串的文字,做為私密金鑰的初始種子。 當助記詞和額外的資料結合,即可產生一個稱為「主密鑰」的雜湊值。 這可以視為一個樹的根部。 然後從這個根部開始,使用階層路徑來派生分支,使子節點可以作為其父節點的雜湊值及其在樹中的索引之組合而存在。 閱讀 [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) 及 [BIP-19](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki),瞭解基於助記詞生成金鑰的標準。 + +這些路徑具有以下結構,與硬體錢包有過互動的使用者會相對熟悉: + +``` +m/44'/60'/0'/0` +``` + +這些路徑中的斜線將私鑰的組成部分區分如下: + +``` +master_key / purpose / coin_type / account / change / address_index +``` + +因為樹根是相同的,變化發生在分支,所以這個邏輯讓使用者能將盡可能多的驗證者附加到一個**助記詞**上。 使用者可以從助記詞中**派生任意數量的金鑰**。 + +``` + [m / 0] + / + / +[m] - [m / 1] + \ + \ + [m / 2] +``` + +每一個分支由 `/` 來區分,因此 `m/2` 代表從主金鑰開始並遵循分支 2。 下圖顯示,一個助記詞用來儲存三個提款金鑰,每一個金鑰有兩個關聯的驗證者。 + +![驗證者金鑰邏輯](multiple-keys.png) + +## 衍生閱讀 {#further-reading} + +- [Carl Beekhuizen 發布的以太坊基金會部落格文章](https://blog.ethereum.org/2020/05/21/keys/) +- [EIP-2333 BLS12-381 金鑰產生](https://eips.ethereum.org/EIPS/eip-2333) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md new file mode 100644 index 00000000000..5f1cf2ff576 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md @@ -0,0 +1,69 @@ +--- +title: 權益證明與工作量證明的比較 +description: 基於權益證明與工作量證明的以太坊共識機制比較 +lang: zh-tw +--- + +在以太坊推出時,權益證明還需要許多的研究及開發以確保其可以保護以太坊, 而工作量證明則是一個較簡單且已被比特幣驗證過的機制,這表示核心開發者可以直接實行它並讓以太坊上線。 從那時候到可以實行權益證明,一共又花費了八年的開發時間。 + +本頁解釋以太坊從工作量證明移過渡到權益證明的源由,及其所牽涉的取捨。 + +## 安全性 {#security} + +以太坊研究者認為權益證明相較工作量證明是一個更安全的機制。 然而,它最近才在以太坊的主網上實行,運行時間也少於工作量證明。 在接下來的部分,我們將討論相較於工作量證明,權益證明安全模型的利與弊。 + +### 攻擊成本 {#cost-to-attack} + +在權益證明中,驗證者需要在智慧型合約中代管(「質押」)至少 32 個以太幣。 以太坊能夠在驗證者行為不端時,將質押的以太幣銷毀作為懲罰。 為了達成共識,至少 66% 的總質押以太幣需要投票贊成某個特定的區塊集合。 獲得 >= 66% 的質押以太幣投票贊成的區塊會「最終確定」,代表這些區塊無法再被移除或是重組。 + +攻擊網路可能是阻止鏈的最終確定,或是確保規範鏈內的某種區塊組織以某種方式讓攻擊者受益。 這需要攻擊者透過累積大量以太幣並直接投票,或是欺騙誠實的驗證者,讓他們投出特定的票,將誠實的共識改道。 複雜且概率較低的攻擊會欺騙誠實的驗證者,除此之外,攻擊以太坊的成本就是攻擊者必須累積的以有利於他們的方式影響共識的質押以太幣。 + +最低攻擊成本是 >33% 的總質押以太幣。 持有 >33% 質押總量的攻擊者可以簡單地透過離線造成最終確定性延遲。 這對網路造成的影響相對較小,因為有一種叫做「怠惰逐減懲罰」的機制,它會將離線驗證者的質押逐漸消減,直到線上的多數驗證者的質押佔比達到 66%,這時就可以重新對鏈進行最終確定。 攻擊者理論上也可以透過持有稍高於 33% 的質押總量來製造雙重最終確定性,即攻擊者會在他們被要求產生區塊時,用他們的所有驗證者去重複投票並建立不止一個區塊。 每個分叉只需 50% 的剩餘誠實驗證者就能先看到每個區塊,所以如果他們控制訊息傳送時間得宜,他們有可能讓兩個分叉都能最終確定。 這種攻擊的成功率很低,但如果攻擊者有辦法做到雙重最終確定性,以太坊社群將不得不決定採用其中一個分叉,這種情況下,另一個分叉上攻擊者的驗證者必然會遭到罰沒。 + +擁有 >33% 的質押總量,攻擊者就有機會對以太坊網路造成輕微(最終確定性延遲)或是嚴重(雙重最終確定性)的影響。 當在網路上質押大於 14,000,000 個以太幣時,以代表性的價格 1000 美元/以太幣計算,這些攻擊的最低成本為 `1000 x 14,000,000 x 0.33 = $4,620,000,000`。 攻擊者遭到罰沒時會失去這些錢並被逐出以太坊。 如果他們想要再次攻擊,則需要再次累積 >33% 的質押以太幣,然後再把這些錢銷毀一次。 每次嘗試攻擊以太坊網路都需要 >46 億美元的成本(以 1000 美元/以太幣及 1400 萬質押以太幣計算)。 攻擊者在被罰沒時也會被驅逐出以太坊,如果他們想再次加入,則需要重新排隊。 這表示重複攻擊的速率不只受制於攻擊者需要累積 >33% 的質押總量,還需要花時間等待其所有的驗證者加入以太坊網路。 每一次的攻擊都會讓攻擊者變得更窮,而剩餘的社群則得益於供給衝擊的結果而變得更富。 + +其他攻擊,如 51% 攻擊或是透過 66% 質押總量的最終確定性反轉,都需要更多的以太幣,相對來說也會耗費攻擊者更高的成本。 + +下面把權益證明與工作量證明做下比較。 在工作量證明以太坊上,發起攻擊的成本即是持續擁有 >50% 以太幣總算力的成本。 這相當於擁有充足算力的硬件和運行成本,可勝過其他礦工持續計算工作量證明的解的硬體及其運行花費。 在以太坊挖礦主要透過圖形處理單元而不是專用積體電路,這讓成本有所降低(但如果讓以太坊繼續使用工作量證明,專用積體電路挖礦可能已變得更加受歡迎)。 對手會需要購買大量的硬體並支付高昂的電費以攻擊工作量證明,但總成本還是比累積足夠的以太幣以發動攻擊低。 在工作量證明上發動 51% 攻擊要比在權益證明上便宜約[ 20 倍](https://youtu.be/1m12zgJ42dI?t=1562)。 如果攻擊被偵測到,且以太坊透過硬分叉移除了所造成的改變,攻擊者還是可以使用相同的硬體,對新分叉重複發動攻擊。 + +### 複雜性 {#complexity} + +權益證明比工作量證明複雜得多。 這可能會是工作量證明的好處之一,因為它比較難導入錯誤,或是對較簡易的協定造成意外影響。 不過,歷經多年的研究、開發、模擬及測試網實行,這樣的複雜性已經被馴化。 權益證明協定已經由五個獨立團隊(在各個執行層及共識層上)用五種不同的程式設計語言獨立地實行,以增強對用戶端錯誤的韌性。 + +為了能夠安全地開發及測試權益證明的共識邏輯,在以太坊實行權益證明的兩年前就已啟動信標鏈。 信標鏈作為權益證明測試的沙盒,是一條實行權益證明共識邏輯的即時區塊鏈,但不會影響實際以太坊交易,能有效地自行達成共識。 在它持續表現穩定且沒有發生任何錯誤足夠長的時間後,信標鏈被「合併」進以太坊主網中。 這些都能協助降低權益證明的複雜性,讓發生非計畫性後果或用戶端錯誤的風險變得極低。 + +### 攻擊媒介 {#attack-surface} + +權益證明比工作量證明更複雜,這意味著需要處理更多的攻擊媒介。 與一個連線用戶端的點對點網路不同,權益證明有兩個點對點網路,分別實行不同的協定。 在每個時隙預先選擇一名特定驗證者可能會造成阻斷服務攻擊,其中大量的網路流量會導致該特定驗證者離綫。 + +攻擊者還有一些方法可以精心安排其區塊或證明的釋放時間,使它們被特定比例的誠實網路所接收,從而影響他們以特定方式進行投票。 最後,攻擊者可以簡單地累積足夠多的以太幣進行質押,並主導共識機制。 所有這些[攻擊媒介都有相應的防禦措施](/developers/docs/consensus-mechanisms/pos/attack-and-defense),但工作量證明機制下,並未提供這些防禦措施。 + +## 去中心化 {#decentralization} + +權益證明比工作量證明更加去中心化,因爲挖礦硬體的軍備競賽趨於淘汰個人礦工和小型組織。 雖然從技術上講,任何人都可以使用一般的硬體進行挖礦,但與機構化的挖礦作業相比,他們獲得獎勵的可能性微乎其微。 而在權益證明機制中,每個人的質押成本和回報百分比都是相同的。 目前,運行一個驗證者需要質押 32 個以太幣。 + +另一方面,流動性質押衍生品的出現引起了對中心化的憂慮,因爲一些大型供應商管理了大量的質押以太幣。 這個問題確實存在,并且需要儘快更正,但實際情況也比看起來更微妙。 中心化的質押供應商不一定會對驗證者進行中心化控制 - 這通常只是建立中心化以太幣池的一種方式,讓許多獨立節點營運商能夠進行質押,而不要求每名參與者都擁有 32 個以太幣。 + +對於以太坊,最佳的選項是讓驗證者在家用電腦上本機運作,以實現最大程度的去中心化。 這就是爲什麽以太坊拒絕提高運作節點/驗證者的硬體要求。 + +## 永續性 {#sustainability} + +權益證明是一種保護區塊鏈的低碳方式。 在工作量證明機制下,礦工會爭奪區塊的開采權。 能夠更快執行運算的礦工更容易成功,這刺激了對硬體的投資和能源消耗。 以太坊在過渡到權益證明之前就觀察到了這一點。 在過渡到權益證明的前夕,以太坊的年耗電量約爲 78 太瓦時 - 相當於一個小型國家的用電量。 但在過渡到權益證明后,該能源消耗減少了約 99.98%。 權益證明使以太坊成爲一個節能、低碳的平台。 + +[更多關於以太坊能源消耗的資訊](/energy-consumption) + +## 發行 {#issuance} + +權益證明以太坊在支付其安全成本時,發行的代幣比工作量證明以太坊少得多,因爲驗證者無需支付高昂的電力成本。 因此,以太幣可以降低通貨膨脹,在大量以太幣被銷毀時,甚至會出現通貨緊縮。 更低的通貨膨脹水平意味著以太坊的安全成本相比工作量證明機制更低。 + +## 想透過視覺方式學習? {#visual-learner} + +觀看 Justin Drake 解釋權益證明相較於工作量證明的優點: + + + +## 了解更多 {#further-reading} + +- [Vitalik 的權益證明設計理念](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) +- [Vitalik 的權益證明常見問答](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) +- [關於權益證明與工作量證明的「簡介」影片](https://www.youtube.com/watch?v=M3EFi_POhps) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md new file mode 100644 index 00000000000..4327e6c0d60 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md @@ -0,0 +1,90 @@ +--- +title: 權益證明獎勵和懲罰 +description: 瞭解權益證明以太坊的協定內激勵措施。 +lang: zh-tw +--- + +以太坊是運用其原生加密貨幣以太幣 (ETH) 來保障安全的。 希望參與驗證區塊和識別鏈頭的節點營運商,需要將以太幣存入以太坊上的[存款合約](/staking/deposit-contract/)。 然後他們將獲得以太幣支付來運作驗證者軟體,檢查在點對點網絡上收到的新區塊的有效性,並套用分叉選擇演算法來辨識鏈頭。 + +驗證者有兩個主要角色:1) 檢查新區塊並證明它們的有效性,2) 從全體驗證者池中被隨機選取時提議新的區塊。 如果驗證者在被要求時無法執行上述工作中的任意一個,他們便無法取得以太幣支付。 驗證者有時也會被賦予彙總簽章和參與同步委員會的工作。 + +有些行爲很難無意爲之並表現出某種惡意企圖,例如在同一個時隙提議多個區塊或在同一個時隙證明多個區塊。 這些「可罰沒」的行為會導致驗證者一定數量的以太幣(多達 1 枚以太幣)被銷毀,之後將其從網絡中移除,此過程需時 36 天。 被罰沒驗證者的以太幣將在退出期間緩慢耗盡,但在第 18 天,他們會受到「相關性懲罰」,當更多的驗證者同時被罰沒時,該懲罰的力度也會更大。 共識機制的激勵結構以此方式獎賞誠實,同時也懲罰不良行為者。 + +所有獎勵和懲罰每個時期套用一次。 + +繼續閱讀,以瞭解更多詳情... + +## 獎勵和懲罰 {#rewards} + +### 酬勞 {#rewards} + +驗證者獲得獎勵的情景有:當他們與大多數其他驗證者的投票結果一致時,當他們提議區塊時,以及當他們參與同步委員會時。 每個時期的獎勵價值按 `base_reward` 計算。 這是用來計算其他獎勵的基本單位。 `base_reward` 代表一個最佳狀況下的驗證者在每個時期收到的平均獎勵。 這是按以下公式,根據驗證者的有效餘額和活躍驗證者總數來計算的: + +``` +base_reward = effective_balance * (base_reward_factor / (base_rewards_per_epoch * sqrt(sum(active_balance)))) +``` + +其中 `base_reward_factor` 為 64,`base_rewards_per_epoch` 為 4,`sum(active balance)` 為所有活躍驗證者質押的以太幣總數。 + +這意味著基本獎勵與驗證者的有效餘額成正比,與網路中的驗證者數量成反比。 驗證者越多,總體發行量越大(`sqrt(N)` 形式),但每個驗證者的 `base_reward` 越小(`1/sqrt(N)` 形式)。 這些因素會影響質押節點的年利率。 閲讀 [Vitalik 的筆記](https://notes.ethereum.org/@vbuterin/rkhCgQteN?type=view#Base-rewards)中與之有關的原理。 + +縂獎勵的計算方式為 5 個組成部分的總和,每個部分各有一個權重,決定該組成部分在縂獎勵中的加成。 組成部分包括: + +``` +1. source vote: the validator has made a timely vote for the correct source checkpoint +2. target vote: the validator has made a timely vote for the correct target checkpoint +3. head vote: the validator has made a timely vote for the correct head block +4. sync committee reward: the validator has participated in a sync committee +5. proposer reward: the validator has proposed a block in the correct slot +``` + +每個組成部分的權重如下: + +``` +TIMELY_SOURCE_WEIGHT uint64(14) +TIMELY_TARGET_WEIGHT uint64(26) +TIMELY_HEAD_WEIGHT uint64(14) +SYNC_REWARD_WEIGHT uint64(2) +PROPOSER_WEIGHT uint64(8) +``` + +這些權重的總和為 64。 獎勵的計算方式為適用權重除以 64 的總和。 及時為來源、目標和鏈頭投票、提議區塊和參與同步委員會的驗證者,可以獲得 `64/64 * base_reward == base_reward`。 不過,驗證者通常不是區塊提議者,因此他們的最大獎勵為 `64-8 /64 * base_reward == 7/8 * base_reward`。 既不是區塊提議者,也沒有參與同步委員會的驗證者,可以獲得 `64-8-2 / 64 * base_reward == 6.75/8 * base_reward`。 + +以太坊還新增了一個額外獎勵來激勵快速證明。 它就是 `inclusion_delay_reward`。 該獎勵的值等於 `base_reward` 乘以 `1/delay`,其中 `delay` 是分隔區塊提議和證明的時隙數。 例如,如果在區塊提議的一個時隙内提交證明,證明者就會獲得 `base_reward * 1/1 == base_reward`。 如果證明在下個時隙到達,證明者就會獲得 `base_reward * 1/2`,依此類推。 + +包含在區塊内的**每個有效證明**都會讓區塊提議者獲得 `8 / 64 * base_reward`,因此實際獎勵的價值與證明驗證者的數量成正比。 區塊提議者也可以透過在提議的區塊中包含其他驗證者不良行爲的證據來增加其獎勵。 這些獎勵是鼓勵驗證者保持誠實的「紅蘿蔔」。 包含罰沒的區塊提議者將獲得 `slashed_validators_effective_balance / 512`。 + +### 懲罰 {#penalties} + +到目前爲止,我們已經考慮了行爲良好的驗證者,但對於那些沒有及時為鏈頭、來源和目標投票或投票速度非常慢的驗證者,應該怎樣做呢? + +錯過目標和來源投票的懲罰等同於證明者提交它們時獲得的獎勵。 這意味不會有獎勵新增到他們的餘額中,反而會從餘額中移除相應的價值。 錯過鏈頭投票不會受到懲罰(即鏈頭投票只會獲得獎勵,不會受到懲罰)。 也沒有與 `inclusion_delay` 相關的懲罰 - 只是不會新增獎勵到驗證者的餘額中。 未能提議區塊也不會受到懲罰。 + +閱讀[共識規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md)中有關獎勵和懲罰的更多資訊。 獎勵和懲罰在 Bellatrix 升級中進行了調整 - 在[以太坊改善提議解讀視頻](https://www.youtube.com/watch?v=iaAEGs1DMgQ)中觀看 Danny Ryan 和 Vitalik 關於此話題的討論。 + +## 罰沒 {#slashing} + +罰沒是一種更嚴厲的行為,會導致驗證者被強制逐出網路,同時損失其質押的以太幣。 導致驗證者被罰沒的情況有三種,以下所有行為都相當於不誠實地提議或證明區塊: + +- 在同一個時隙提議並簽署兩個不同的區塊 +- 證明一個「包圍」了另一個區塊的區塊(有效地改變歷史記錄) +- 透過證明同一區塊的兩個候選區塊進行「雙重投票」 + +如果偵測到這些行爲,驗證者將被罰沒。 這意味著他們質押的以太幣的 1/32(最多不超過 1 枚以太幣)將被立即銷毀,然後開始為期 36 天的驅逐期。 在驅逐期内,驗證者的質押會逐漸流失。 在中間點(第 18 天),會有一項額外的懲罰,其力度與罰沒事件前 36 天内所有被罰沒驗證者的縂質押以太幣成正比。 這意味著當有更多驗證者被罰沒時,罰沒的力度就會增加。 最大罰沒力度是所有被罰沒驗證者的全部有效餘額(即如果有很多驗證者被罰沒,他們將失去全部質押)。 另一方面,一次孤立的罰沒事件只會銷毀驗證者質押的一小部分。 這個與被罰沒驗證者的數量成正比的中間點懲罰稱爲「相關性懲罰」。 + +## 怠惰逐減懲罰 {#inactivity-leak} + +如果共識層未能在四個時期内最終確定,一種稱爲「怠惰逐減懲罰」的應急協定將會啓用。 怠惰逐減懲罰的最終目標是為鏈恢復最終確定性創造條件。 如上所述,最終確定需要 2/3 的多數縂質押以太幣同意來源和目標檢查點。 如果超過 1/3 的總計驗證者離綫或未能提交正確的證明,就不可能有 2/3 的絕對多數來最終確定檢查點。 怠惰逐減懲罰使不活躍驗證者的質押逐漸流失,直至他們控制的質押少於質押縂量的 1/3,使剩餘的活躍驗證者可以最終確定鏈。 無論不活躍驗證者的池有多大,剩餘的活躍驗證者最終都會控制超過 2/3 的質押。 質押的損失是促使不活躍驗證者儘快重新活躍的强大激勵措施。 Medalla 測試網上曾出現過一個怠惰逐減懲罰案例,當時不到 66% 的活躍驗證者成功在最新區塊鏈鏈頭達成共識。 怠惰逐減懲罰被啟動,最後重新獲得了最終確定性! + +共識機制中的獎勵、懲罰與罰沒設計,都是鼓勵個人驗證者正確行事。 然而,從這些設計選擇中形成了一個系統,强烈激勵在多個用戶端平等分配驗證者,並且强烈抑制單一用戶端取得主導地位。 + +## 衍生閱讀 {#further-reading} + +- [升級以太坊:激勵層](https://eth2book.info/altair/part2/incentives) +- [以太坊混合 Casper 協定中的激勵措施](https://arxiv.org/pdf/1903.04205.pdf) +- [Vitalik 的規範註解](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#rewards-and-penalties-1) +- [以太坊 2 罰沒預防技巧](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) + +_資源_ + +- _[https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/](https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/)_ diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md new file mode 100644 index 00000000000..d2aab3c1fc4 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md @@ -0,0 +1,39 @@ +--- +title: 弱主觀性 +description: 關於弱主觀性及其在權益證明以太坊中所扮演角色的解釋。 +lang: zh-tw +--- + +區塊鏈中的主觀性是指依賴社交資訊來達成對當前狀態的共識。 可能有多個有效分叉,可根據從網路上其他對等節點收集而來的資訊進行選擇。 主觀性的反面是客觀性,是指只存在唯一一條可能有效的鏈,所有節點都需要透過套用其程式碼規則達成共識。 還有第三種狀態,稱為弱主觀性。 這是指在擷取一些初始社交資訊種子後,可以客觀地繼續運作的區塊鏈。 + +## 前置要求 {#prerequisites} + +要理解本頁內容,需先理解[權益證明](/developers/docs/consensus-mechanisms/pos/)的基礎知識。 + +## 弱主觀性解決了什麼問題? {#problems-ws-solves} + +主觀性是權益證明區塊鏈固有的,因為從多個分叉中選擇正確的鏈是透過計算歷史投票結果得來的。 這使區塊鏈暴露在多種攻擊媒介之下,包含遠程攻擊,即很早就加入區塊鏈的節點維護了另一個分叉,並在很久後為了自身利益將其釋放。 或者,如果 33% 的驗證者提取其質押、但繼續證明和產生區塊,他們可能會產生另一個與規範鏈衝突的分叉。 新的節點或是下線許久的節點可能會沒有意識到這些發動攻擊的驗證者已經提取他們的資金,所以攻擊者可能哄騙這些節點跟隨不正確的區塊鏈。 以太坊可以透過施加約束,將機制的主觀方面及由此而來的信任假設減少到最低限度,來解決這些攻擊媒介。 + +## 弱主觀性檢查點 {#ws-checkpoints} + +弱主觀性透過使用「弱主觀性檢查點」在權益證明以太坊上實行。 它們是網路上所有節點都同意屬於規範鏈的狀態根。 除了不直接位於區塊鏈上的創世位置之外,它們有著與創世區塊相同的「普適真理」用途。 分叉選擇演算法信任在該檢查點中所定義的區塊鏈狀態是正確的,且從該點開始獨立並客觀地驗證區塊鏈。 因為位於弱主觀性檢查點之前的區塊不能被改變,這些檢查點作為「還原限制」。 只需透過定義遠端分叉為無效且當作機制設計的一部分,即可瓦解遠程攻擊。 確保弱主觀性檢查點的間隔距離小於驗證者提款期間的間隔距離,能夠確保將區塊鏈分叉的驗證者在能夠提取其質押前至少被罰沒一定的門檻數量,且新進者不會被已經提取質押的驗證者誘騙至跟隨不正確的分叉。 + +## 弱主觀性檢查點與最終確定區塊的區別 {#difference-between-ws-and-finalized-blocks} + +以太坊節點以不同方式處理最終確定的區塊和弱主觀性檢查點。 如果一個節點意識到有兩個競爭的最終確定區塊,則會左右為難;它沒有辦法自動辨識出哪個為規範分叉。 這是共識失敗的症狀。 相反,一個節點直接拒絕與其弱主觀性檢查點衝突的任何區塊。 從節點的角度來說,弱主觀性檢查點代表無法被其對等節點的新認知損害的絕對事實。 + +## 多弱是為弱? {#how-weak-is-weak} + +以太坊權益證明的主觀方面是要求從可信來源同步最近狀態(弱主觀性檢查點)。 因為可以根據幾個獨立的公開來源(例如區塊瀏覽器或多個節點)對弱主觀性檢查點進行檢查,所以獲得不佳的弱主觀性檢查點的風險非常低。 然而,執行任何軟體應用程式總是需要一定程度的信任,例如,相信軟體開發者產出誠實的軟體。 + +弱主觀性檢查點甚至可能作為用戶端軟體的一部分出現。 可以說,攻擊者能夠破壞軟體內的檢查點,就能非常容易地破壞軟體本身。 雖然沒有能夠完全避免此問題的加密貨幣經濟方法,但以太坊透過多個獨立的用戶端團隊最小化了不可信開發者帶來的影響。每個團隊以不同語言建構等效的軟體,而所有團隊在維護誠實區塊鏈上有既得利益。 區塊瀏覽器也可以提供弱主觀性檢查點,或者提供一種方法,將從其他地方獲得的檢查點與其他來源進行交叉比對。 + +最後,可以從其他節點要求檢查點;或許另一個運作全節點的以太坊使用者可以提供一個檢查點,然後由驗證者比對來自區塊瀏覽器的資料進行驗證。 整體來說,信任弱主觀性檢查點的提供者被認為跟信任用戶端開發者一樣存在問題。 需要的整體信任很低。 值得注意的是,只有當大多數驗證者串謀產生區塊鏈的另一個分叉這種微乎其微的情況下,上述考量才會變得非常重要。 其他情況下,只有一個以太坊鏈可供選擇。 + +## 衍生閱讀 {#further-reading} + +- [以太坊 2.0 中的弱主觀性](https://notes.ethereum.org/@adiasg/weak-subjectvity-eth2) +- [Vitalik:我如何愛上弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) +- [弱主觀性(Teku 文件)](https://docs.teku.consensys.net/en/latest/Concepts/Weak-Subjectivity/) +- [階段 0 弱主觀性指南](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md) +- [以太坊 2.0 中的弱主觀性分析](https://github.com/runtimeverification/beacon-chain-verification/blob/master/weak-subjectivity/weak-subjectivity-analysis.pdf) diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/index.md index fa58be03dc5..45905ed8629 100644 --- a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/index.md +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/index.md @@ -56,7 +56,7 @@ lang: zh-tw 工作量證明還負責發行新貨幣至系統中,獎勵礦工參與挖礦工作。 -自[君士坦丁堡升級](/history/#constantinople)以來,成功建立區塊的礦工將獲得兩枚新鑄造的以太幣及部分交易費作為獎勵。 叔塊也會補償 1.75 枚以太幣。 叔塊是由一個礦工與另一個建立了規範區塊的曠工幾乎同時建立的有效區塊,規範區塊最終取決於首先在其上建置的鏈。 叔塊通常是因網路延遲而發生。 +自[君士坦丁堡升級](/history/#constantinople)以來,成功建立區塊的礦工將獲得兩枚新鑄造的以太幣及部分交易費作為獎勵。 Ommer 區塊也會補償 1.75 枚以太幣。 Ommer 區塊是由一個礦工與另一個建立了規範區塊的曠工幾乎同時建立的有效區塊,規範區塊最終取決於首先在其上建置的鏈。 Ommer 區塊通常是因網路延遲而發生。 ## 最終確定性 {#finality} diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/mining/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/mining/index.md index 6e7e0ac4e14..c4618c7ef59 100644 --- a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -56,11 +56,11 @@ lang: zh-tw 每筆交易只被挖掘一次(包含在新區塊中並首次傳播),但在推進規範化以太坊虛擬機狀態的過程中會被每個參與者執行並驗證。 這強調了區塊鏈的中心信念之一:**不信任,而是驗證**。 -## 親戚區塊(叔塊) {#ommer-blocks} +## Ommer(叔)區塊 {#ommer-blocks} -基於工作量證明的區塊挖掘具有概率性,這意味著有時由於網路延遲,會同時發布兩個有效區塊。 在這種情況下,協定必須確定最長(因此也是最「有效」)的鏈,同時透過針對已提交但未被包含的有效區塊給予部分獎勵,來確保對曠工的公平性。 這促使網路進一步去中心化,因為小規模礦工可能面臨更大的延遲,但仍然可以透過[叔塊](/glossary/#ommer)獎勵獲得回報。 +基於工作量證明的區塊挖掘具有概率性,這意味著有時由於網路延遲,會同時發布兩個有效區塊。 在這種情況下,協定必須確定最長(因此也是最「有效」)的鏈,同時透過針對已提交但未被包含的有效區塊給予部分獎勵,來確保對曠工的公平性。 這促使網路進一步去中心化,因為小規模礦工可能面臨更大的延遲,但仍然可以透過 [Ommer](/glossary/#ommer) 區塊獎勵獲得回報。 -對於父區塊的相鄰區塊來說,「ommer/親戚」一詞是首選的不分性別的詞,但有時也被稱為「uncle/叔」塊。 **自以太坊過渡至權益證明以來,就沒有繼續挖掘叔塊了**,因為現在每個時隙只會選出一名提交者。 你能透過查看已挖掘叔塊的[歷史圖表](https://ycharts.com/indicators/ethereum_uncle_rate)來了解這項變更。 +對於父區塊的兄弟姐妹區塊來說,「ommer/兄弟姐妹」一詞是首選的不分性別的詞,但有時也被稱為「uncle/叔」塊。 **自以太坊過渡至權益證明以來,就沒有繼續挖掘 Ommer 區塊了**,因為現在每個時隙只會選出一名提交者。 你能透過查看已挖掘 Ommer 區塊的[歷史圖表](https://ycharts.com/indicators/ethereum_uncle_rate)來了解這項變更。 ## 視覺範例 {#a-visual-demo} diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md index 72b272019f7..c9f90a011ff 100644 --- a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md @@ -135,7 +135,7 @@ def calc_dataset(full_size, cache): ## 主循環 {#main-loop} -現在,我們指定了類似「hashimoto」的主要循環。在此循環中,我們匯總了整個資料集的資料,以產生特定區塊頭和隨機數的最終值。 在下面的程式碼中,`header` 代表一個_被截斷_區塊頭的遞歸長度前綴表示的 SHA3-256 _雜湊值_。被截斷是指區塊頭排除了 **mixHash** 和 **nonce** 欄位。 `nonce` 是八字節位元組的 64 位元無符號整數,採用高位元優先序。 因此,`nonce [::-1]` 是上述值的八字節位元組低位元優先序表示: +現在,我們指定了類似「hashimoto」的主要循環。在此循環中,我們匯總了整個資料集的資料,以產生特定區塊頭和隨機數的最終值。 在下面的程式碼中,`header` 代表一個_被截斷_區塊頭的遞歸長度前綴表示的 SHA3-256 _雜湊值_。被截斷是指區塊頭排除了 **mixHash** 和 **nonce** 欄位。 `nonce` 是八字節位元組的 64 位元無符號整數,採用高位元組在前順序。 因此,`nonce [::-1]` 是上述值的八位元組高位元組在前順序表示: ```python def hashimoto(header, nonce, full_size, dataset_lookup): diff --git a/public/content/translations/zh-tw/developers/docs/dapps/index.md b/public/content/translations/zh-tw/developers/docs/dapps/index.md index 4db52e88bed..fd7e5a7d869 100644 --- a/public/content/translations/zh-tw/developers/docs/dapps/index.md +++ b/public/content/translations/zh-tw/developers/docs/dapps/index.md @@ -72,7 +72,7 @@ lang: zh-tw - [首頁](https://thirdweb.com/) - [文件](https://portal.thirdweb.com/) -- [Github](https://github.com/thirdweb-dev/) +- [GitHub](https://github.com/thirdweb-dev/) **Crossmint _- 企業級 Web3 開發平台,可用於部署智慧型合約,支援信用卡和跨鏈支付,並使用應用程式介面來建立、分發、銷售、儲存和編輯非同質化代幣。_** @@ -88,9 +88,9 @@ lang: zh-tw - [去中心化應用程式為何?](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) - _Gemini_ - [熱門去中心化應用程式](https://www.alchemy.com/dapps) - _Alchemy_ -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ ## 相關主題 {#related-topics} -- [Ethereum 技術堆棧簡介](/developers/docs/ethereum-stack/) +- [以太坊堆疊簡介](/developers/docs/ethereum-stack/) - [開發架構](/developers/docs/frameworks/) diff --git a/public/content/translations/zh-tw/developers/docs/data-and-analytics/block-explorers/index.md b/public/content/translations/zh-tw/developers/docs/data-and-analytics/block-explorers/index.md new file mode 100644 index 00000000000..f31b67ad51f --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/data-and-analytics/block-explorers/index.md @@ -0,0 +1,257 @@ +--- +title: 區塊瀏覽器 +description: 區塊瀏覽器簡介,這是你進入區塊鏈資料世界的入口,在這裡你可以查詢有關交易、帳戶、合約等資訊。 +lang: zh-tw +sidebarDepth: 3 +--- + +區塊瀏覽器是你存取以太坊資料的入口。 你可以使用區塊瀏覽器來查看區塊、交易、驗證者、帳戶及其他鏈上活動的即時資料。 + +## 基本資訊 {#prerequisites} + +你應該瞭解以太坊的基本概念,以便能夠理解區塊瀏覽器提供的資料。 推薦你從[以太坊簡介](/developers/docs/intro-to-ethereum/)開始。 + +## 服務 {#services} + +- [Etherscan](https://etherscan.io/) -_ 也提供中文、韓文、俄文及日文版_ +- [3xpl](https://3xpl.com/ethereum) +- [Beaconcha.in](https://beaconcha.in/) +- [Blockchair](https://blockchair.com/ethereum) -_也提供西班牙文、法文、義大利文、荷蘭文、葡萄牙文、俄文、中文及波斯文版_ +- [Blockscout](https://eth.blockscout.com/) +- [Chainlens](https://www.chainlens.com/) +- [DexGuru Block Explorer](https://ethereum.dex.guru/) +- [Etherchain](https://www.etherchain.org/) +- [Ethernow](https://www.ethernow.xyz/) +- [Ethplorer](https://ethplorer.io/) -_ 也提供中文、西班牙文、法文、土耳其文、俄文、韓文及越南文版_ +- [EthVM](https://www.ethvm.com/) +- [OKLink](https://www.oklink.com/eth) +- [Rantom](https://rantom.app/) + +## 開源工具 {#open-source-tools} + +- [Otterscan](https://otterscan.io/) +- [lazy-etherscan](https://github.com/woxjro/lazy-etherscan) + +## 數據資料 {#data} + +以太坊的設計是透明的,因此一切都是可驗證的。 區塊瀏覽器提供了獲取此資訊的介面。 如果你需要這些資料,這適用於以太坊主網和測試網。 資料被分為執行資料和共識資料。 執行資料指的是特定區塊中已被執行的交易。 共識資料指的是區塊本身及提出區塊的驗證者。 + +以下是可以從區塊瀏覽器取得的資料類型的摘要。 + +### 執行資料 {#execution-data} + +新區塊每 12 秒會添加到以太坊上(除非區塊提議者漏掉了其提議輪次),因此接近恆定的資料流被加到區塊瀏覽器上。 區塊包含許多你可能覺得有用的重要資料: + +**標準資料** + +- 區塊高度 - 目前區塊建立時,區塊的編號及區塊鏈的長度(以區塊為單位) +- 時間戳 - 區塊被提議的時間 +- 交易 - 被打包進區塊的交易數量 +- 費用接收者 - 從交易中收到燃料費與小費的地址 +- 區塊獎勵 - 提出區塊的驗證者獲得的以太幣數量 +- 大小 - 區塊中的資料大小(以位元組計算) +- 消耗的燃料 - 區塊中交易消耗的燃料單位總數 +- 燃料限制 - 區塊中交易設定的總燃料限制 +- 每單位燃料的基本費用 - 讓交易能夠打包進區塊所需的最低乘數 +- 銷毀費用 - 區塊中銷毀的以太幣數量 +- 額外資料 - 任何建置者加進區塊的額外資料 + +**進階資料** + +- 雜湊 - 代表區塊頭(區塊的唯一識別碼)的密碼學雜湊。 +- 父雜湊 - 目前區塊之前區塊的雜湊 +- StateRoot - 默克爾樹的根雜湊,存儲了整個系統的狀態 + +### Gas費 {#gas} + +區塊瀏覽器不僅會為你提供有關交易和區塊中燃料使用情況的資料,而且有些還會提供有關網路當前燃料價格的資訊。 這將幫助瞭解網路使用情況、提交安全交易並且不會超支燃料。 尋找可以幫助你將此資訊輸入產品介面的應用程式介面。 燃料的特定資料包括: + +- 安全但緩慢的交易所需的預估燃料單位(+ 預估價格和持續時間) +- 中等速度交易所需的預估燃料單位(+ 預估價格和持續時間) +- 快速交易所需的預估燃料單位(+ 預估價格和持續時間) +- 基於燃料價格的平均確認時間 +- 正在消耗燃料的合約 - 換句話說,正在網路上大量使用的熱門產品 +- 正在花費燃料的帳戶 - 換句話說,頻繁使用網路的使用者 + +### 交易 {#transactions} + +區塊瀏覽器已成為追蹤交易進度的常見方式。 這是因為你可以取得的詳細程度提供了額外的確定性。 交易資料包括: + +**標準數據** + +- 交易雜湊 - 當交易被提交時產生的雜湊 +- 狀態 - 指示交易為待處理、失敗還是成功 +- 區塊 - 交易被打包進的區塊 +- 時間戳 - 交易被納入由驗證者提議的區塊的時間 +- 發送者 - 提交此交易的帳戶地址 +- 接收者 - 接收者或與交易互動的智慧型合約的地址 +- 轉移的代幣 - 做為交易的一部分被轉移的代幣清單 +- 價值 - 轉移的以太幣總價值 +- 交易費用 - 支付給驗證者處理交易的金額(計算方法為燃料價格\*使用的燃料) + +**進階數據** + +- 燃料限制 - 此交易最高可消耗多少單位的燃料 +- 使用的燃料 - 交易實際消耗的燃料單位量 +- 燃料價格 - 每單位燃料的價格 +- 隨機數 - `from` 地址的交易編號(注意,隨機數從 0 開始算,所以隨機數 `100` 實際上是此帳戶提交的第 101 筆交易) +- 輸入資料 - 交易所需的任何額外資訊 + +### 帳戶 {#accounts} + +你可以存取有關帳戶的大量資料。 這就是為什麼通常建議使用多個帳戶,以便你的資產和價值不易被追蹤。 還有一些解決方案正在開發中,以使交易和帳戶活動更加私密。 但以下是帳戶可用的資料: + +**使用者帳戶:** + +- 帳戶地址 - 你可以向其中發送資金的公開地址 +- 以太幣餘額 - 該帳戶的以太幣餘額 +- 以太幣總價值 - 以太幣的價值 +- 代幣 - 與該帳戶有關的代幣及其價值 +- 交易記錄 - 此帳戶作為發送者或接受者的所有交易的清單 + +**智慧型合約** + +雖然智慧型合約帳戶擁有使用者帳戶將擁有的所有資料,但某些區塊瀏覽器甚至還會顯示一些程式碼資訊。 範例包含: + +- 合約建立者 - 將合約部署至主網的地址 +- 建立交易 - 包括將合約部署到主網的交易 +- 原始程式碼 - 智慧型合約的 Solidity 或 Vyper 程式碼 +- 合約 ABI - 合約的應用程式二進位介面 - 合約進行的呼叫和接收的資料 +- 合約建立程式碼 - 智慧型合約經編譯的位元組碼 - 在你編譯以 Solidity 或 Vyper 等語言編寫的智慧型合約時產生 +- 合約事件 - 智慧型合約中呼叫的方法的歷史紀錄 - 基本上是查看合約如何使用以及使用頻率的一種方式 + +### 代幣 {#tokens} + +代幣是一種合約,因此它們具有與智慧型合約類似的資料。 但因為它們有價值並且可以交易,因此有額外的資料點: + +- 類型 - 是 ERC-20、ERC-721 或其他代幣標準 +- 價格 - 如果是 ERC-20,就會有目前市場價值 +- 市值 - 如果是 ERC-20,就會有市值(計算方法為價格\*總供應量) +- 總供應量 - 流通的代幣數量 +- 持有者 - 持有該代幣的地址數量 +- 轉移 - 代幣在帳戶間被轉移的次數 +- 交易記錄 - 代幣的所有交易歷史記錄 +- 合約地址 - 部署到主網的代幣的地址 +- 小數 - ERC-20 代幣是可分割的,且具有小數位 + +### 網路 {#network} + +一些區塊資料更全面地關注以太坊的健康狀況。 + +- 總交易數量 - 自以太坊建立以來的交易數量 +- 每秒交易數量 - 每秒可處理的交易數量 +- 以太幣價格 - 目前 1 個以太幣的價值 +- 以太幣總供應量 - 流通的以太幣數量 - 請記得,當新區塊建立時,新以太幣會被做為區塊獎勵而產生 +- 市值 - 價格\*供應量的計算結果 + +## 共識層資料 {#consensus-layer-data} + +### 時期 {#epoch} + +由於安全考量,會在每個時期(每 6.4 分鐘)結束時建立隨機化驗證者委員會。 時期資料包含: + +- 時期編號 +- 最終狀態 - 時期是否已完成(是/否) +- 時間 - 時期結束的時間 +- 證明 - 時期中的證明數量(對時隙內區塊的投票) +- 存款 - 時期內包含的以太幣存款數量(驗證者必須質押以太幣才能成為驗證者) +- 罰沒 - 對區塊提議者或證明者的處罰次數 +- 投票參與 - 用於證明區塊的質押以太幣數量 +- 驗證者 - 在該時期中活躍的驗證者數量 +- 驗證者平均餘額 - 活躍驗證者的平均餘額 +- 時隙 - 時期中包含的時隙數量(時隙包含一個有效區塊) + +### 時隙 {#slot} + +時隙是建立區塊的機會,每個時隙可用的資料包括: + +- 時期 - 時隙在其中有效的時期 +- 時隙編號 +- 狀態 - 時隙狀態(已提議/缺失) +- 時間 - 時隙的時間戳 +- 提議者 - 在該時隙提議區塊的驗證者 +- 區塊根 - 信標區塊的雜湊樹根 +- 父根 - 前一個區塊的雜湊 +- 狀態根 - 信標狀態的雜湊樹根 +- 簽名 +- Randao 揭示 +- Graffiti - 區塊提議者可以在其區塊提議中包含 32 位元組的訊息 +- 執行資料 + - 區塊雜湊 + - 存款計數 + - 存款根 +- 證明 - 此時隙中的區塊的證明數量 +- 存款 - 此時隙內的存款數量 +- 自願退出 - 此時隙內退出的驗證者數量 +- 罰沒 - 對區塊提議者或證明者的處罰次數 +- 投票 - 此時隙中為區塊投票的驗證者 + +### 區塊 {#blocks-1} + +權益證明將時間分割為時期與時隙。 這意味著新資料! + +- 提議者 - 經演算法選出的提議新區塊的驗證者 +- 時期 - 提議區塊的時期 +- 時隙 - 提議區塊的時隙 +- 證明 - 時隙中包含的證明數量 - 證明就像投票一樣,表示區塊已準備好進入信標鏈 + +### 驗證者 {#validators} + +驗證者負責在時隙內提議區塊並證明區塊。 + +- 驗證者編號 - 代表驗證者的唯一編號 +- 目前餘額 - 驗證者的餘額(包含獎勵) +- 有效餘額 - 驗證者用於質押的餘額 +- 收入 - 驗證者收到的獎勵或處罰 +- 狀態 - 驗證者目前是否在線和是否活躍 +- 證明有效性 - 驗證者的證明被加入鏈上的平均時間 +- 啟用資格 - 驗證者可以開始驗證的日期(和時期) +- 啟用開始時間 - 驗證者的啟用日期(和時期) +- 提議的區塊 - 驗證者提議的區塊 +- 證明 - 驗證者提供的證明 +- 存款 - 發送者地址、交易雜湊、區塊編號、時間戳、驗證者的質押存款金額及狀態 + +### 證明 {#attestations} + +證明是投票「同意」將區塊包含在鏈中。 它們的資料與證明紀錄和進行證明的驗證者相關。 + +- 時隙 - 證明發生的時隙 +- 委員會索引 - 在給定時隙的委員會的索引 +- 聚合位元 - 表示證明中所有參與驗證者的聚合證明 +- 驗證者 - 提供證明的驗證者 +- 信標區塊根 - 指向驗證者正在證明的區塊 +- 來源 - 指向最新的已證明時期 +- 目標 - 指向最新的時期邊界 +- 簽名 + +### 網路 {#network-1} + +共識層頂層資料包括以下內容: + +- 目前時期 +- 目前時隙 +- 活躍驗證者 - 活躍驗證者的數量 +- 等待中驗證者 - 等待啟用的驗證者數量 +- 質押的以太幣 - 網路中質押的以太幣數量 +- 平均餘額 - 驗證者的平均以太幣餘額 + +## 區塊瀏覽器 {#block-explorers} + +- [Etherscan](https://etherscan.io/) - 可用於擷取以太坊主網及 Goerli 測試網資料的區塊瀏覽器 +- [3xpl](https://3xpl.com/ethereum) - 一個允許下載其資料集的無廣告開源以太坊瀏覽器 +- [Beaconcha.in](https://beaconcha.in/) -用於以太坊主網及 Goerli 測試網的開源區塊瀏覽器 +- <0>Blockchair -- 最私密的以太坊瀏覽器。 也用於排序和篩選(記憶體池)資料 +- [Etherchain](https://www.etherchain.org/) - 以太坊主網的區塊瀏覽器 +- [Ethplorer](https://ethplorer.io/) - 專為以太坊主網及 Kovan 測試網代幣打造的區塊瀏覽器 +- [Rantom](https://rantom.app/) - 方便使用的開源去中心化金融及非同質化代幣交易檢視器,可提供詳細的訊息 +- [Ethernow](https://www.ethernow.xyz/) - 即時交易瀏覽器,讓你能夠查看以太坊主網鏈前層 + +## 延伸閱讀 {#further-reading} + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ + +## 相關主題 {#related-topics} + +- [交易](/developers/docs/transactions/) +- [帳戶](/developers/docs/accounts/) +- [網路](/developers/docs/networks/) diff --git a/public/content/translations/zh-tw/developers/docs/data-and-analytics/index.md b/public/content/translations/zh-tw/developers/docs/data-and-analytics/index.md new file mode 100644 index 00000000000..4c68011fcc3 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/data-and-analytics/index.md @@ -0,0 +1,55 @@ +--- +title: 數據分析 +description: 如何獲取鏈上分析和資料以供你的去中心化應用程式使用 +lang: zh-tw +--- + +## 簡介 {#Introduction} + +隨著網路使用量的增長,鏈上資料中將存在越來越多有價值的信息。 隨著資料量的迅速增加,計算和匯總這些資訊以報告或驅動去中心化應用程式可能變得非常耗時且繁重。 + +利用現有的資料提供者可以加快開發過程,產生更準確的結果,並減少持續的維護工作。 這將使團隊能夠專注於其專案要提供的核心功能。 + +## 基本資訊 {#prerequisites} + +你應該瞭解[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)的基本概念,以便更好地理解在資料分析背景中如何使用它們。 此外,熟悉[索引](/glossary/#index)的概念以瞭解它們對系統設計所帶來的好處。 + +在架構基礎方面,瞭解[應用程式介面](https://www.wikipedia.org/wiki/API)和 [ REST ](https://www.wikipedia.org/wiki/Representational_state_transfer) 的基本概念,即使只是理論上的也很重要。 + +## 區塊瀏覽器 {#block-explorers} + +許多[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)提供 [RESTful ](https://www.wikipedia.org/wiki/Representational_state_transfer) [應用程式介面](https://www.wikipedia.org/wiki/API)閘道,這些閘道能夠讓開發者查看區塊、交易、驗證者、帳戶及其他鏈上活動的即時資料。 + +開發者可以進一步處理和轉換這些資料,以提供使用者獨特的見解和與[區塊鏈](/glossary/#blockchain)的互動。 例如,[Etherscan](https://etherscan.io) 在每個 12 秒時隙都提供執行和共識資料。 + +## 圖表 {#the-graph} + +[Graph Network](https://thegraph.com/) 是一個去中心化的索引協議,用於組織區塊鏈資料。 與其建立和管理鏈下的集中式資料儲存來匯總鏈上資料,使用 The Graph 可以讓開發者構建完全在公共基礎設施上運行的無伺服器應用程式。 + +透過使用 [GraphQL](https://graphql.org/),開發者可以查詢稱為子圖的精選開放應用程式介面,以獲取驅動其去中心化應用程式所需的必要資訊。 透過查詢這些已索引的子圖,報告及去中心化應用程式不僅能獲得效能和可擴充性的好處,還能享受由網路共識提供的內建準確性。 隨著新改進和/或子圖新增至網路中,你的專案可以迅速迭代,以利用這些增強功能。 + +## 用戶的多樣化 + +[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity/)對以太坊網路的整體健康至關重要,因為它提供了針對錯誤和漏洞的韌性。 目前有幾個用戶端多樣性儀表板,包括 [clientdiversity.org](https://clientdiversity.org/)、[rated.network](https://www.rated.network)、[supermajority.info](https://supermajority.info//) 和 [Ethernodes](https://ethernodes.org/)。 + +## Dune Analytics {#dune-analytics} + +[Dune Analytics](https://dune.com/) 將區塊鏈資料預處理成關聯資料庫(PostgreSQL 和 DatabricksSQL)表格,允許使用者使用 SQL 查詢區塊鏈資料並根據查詢結果建立儀表板。 鏈上資料組織成 4 個原始表格:`blocks`、`transactions`、(事件)`logs` 和(呼叫)`traces`。 常見的合約和協定已被解碼,而每個合約和協定都有自己的事件和呼叫表格集。 這些事件和呼叫表格被進一步處理並按協定類型組織成抽象表格,例如去中心化交易所、借貸、穩定幣等。 + +## SubQuery 網路 {#subquery-network} + +[SubQuery](https://subquery.network/) 是一個領先的資料索引器服務,為開發者提供快速、可靠、去中心化且自訂的應用程式介面以支援其 Web3 專案。 SubQuery 賦能來自超過 165 個生態系統(包括以太坊)的開發者,提供豐富的索引資料,以構建直觀且沉浸式的使用者體驗。 SubQuery 網路為你提供銳不可當、堅韌且有去中心化基礎設施網路的應用程式。 使用 SubQuery 的區塊鏈開發者工具組,構建未來的 Web3 應用程式,無需花時間為資料處理活動建立自訂後端。 + +首先,請瀏覽[以太坊快速入門指南](https://academy.subquery.network/quickstart/quickstart_chains/ethereum-gravatar.html),在本地 Docker 環境中快速開始索引以太坊區塊鏈資料以進行測試,然後再上線到 [SubQuery 的受管理服務](https://managedservice.subquery.network/) 或 [SubQuery 的去中心化網路](https://app.subquery.network/dashboard)。 + +## Ethernow - 記憶體池資料程式 {#ethernow} +[Blocknative](https://www.blocknative.com/) 提供了對其以太坊歷史[記憶體池資料存檔](https://www.ethernow.xyz/mempool-data-archive)的開放存取。 這使研究人員和社群公益專案能夠探索以太坊主網的鏈前層。 該資料集得到積極維護,代表了以太坊生態系統中記憶體池交易事件的最全面歷史紀錄。 請參見 [Ethernow](https://www.ethernow.xyz/) 瞭解更多資訊。 + +## 衍生閱讀 {#further-reading} + +- [Graph Network 概覽](https://thegraph.com/docs/en/about/network/) +- [Graph Query 訓練場](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) +- [EtherScan 上的應用程式介面程式碼範例](https://etherscan.io/apis#contracts) +- [Beaconcha.in 信標鏈瀏覽器](https://beaconcha.in) +- [Dune 基礎知識](https://docs.dune.com/#dune-basics) +- [SubQuery 以太坊快速入門指南](https://academy.subquery.network/indexer/quickstart/quickstart_chains/ethereum-gravatar.html) diff --git a/public/content/translations/zh-tw/developers/docs/development-networks/index.md b/public/content/translations/zh-tw/developers/docs/development-networks/index.md new file mode 100644 index 00000000000..5f118003e4f --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/development-networks/index.md @@ -0,0 +1,83 @@ +--- +title: 開發網路 +description: 可用於協助構建以太坊應用程式的開發網路和工具的概觀。 +lang: zh-tw +--- + +當使用智慧型合約建立以太坊應用程式時,你需要在本地網路上運行該應用程式,以在部署之前瞭解其的工作原理。 + +與在電腦上執行本地伺服器進行 Web 開發的方式類似,你可以使用開發網路建立本機區塊鏈執行個體來測試你的去中心化應用程式。 這些以太坊開發網路提供的功能比公共測試網的迭代速度快得多(例如,你不需要從測試網水龍頭取得以太幣)。 + +## 基本資訊 {#prerequisites} + +在深入瞭解開發網路之前,應該先瞭解[以太坊堆疊的基礎知識](/developers/docs/ethereum-stack/)和[以太坊網路](/developers/docs/networks/)。 + +## 什麼是開發網路? {#what-is-a-development-network} + +開發網路本質上是專為本地開發而設計的以太坊用戶端(以太坊的實作)。 + +**為什麼不在本地運行一個標準的以太坊節點呢?** + +你_可以_[運行節點](/developers/docs/nodes-and-clients/#running-your-own-node),但由於開發網路是專門為開發而建立,它們往往會具有一些快速方便的功能,例如: + +- 確定性地用資料植入你的本地區塊鏈(例如具有以太幣餘額的帳戶) +- 用接收的每筆交易,依照順序及零延遲即時產生區塊 +- 增強的偵錯和日誌記錄功能 + +## 可用工具 {#available-projects} + +**注意**:大多數[開發架構](/developers/docs/frameworks/)包含一個內建開發網路。 推薦你從一個架構開始[設定你的本地開發環境](/developers/local-environment/)。 + +### Ganache {#ganache} + +快速啟動個人以太坊區塊鏈,你可以使用該區塊鏈運行測試、執行命令和檢查狀態,同時控制鏈的運作方式。 + +Ganache 提供桌面應用程式 (Ganache UI) 和命令列工具 (`ganache-cli`)。 它是 Truffle 工具套件的一部分。 + +- [網站](https://www.trufflesuite.com/ganache) +- [Github](https://github.com/trufflesuite/ganache) +- [文件](https://www.trufflesuite.com/docs/ganache/overview) + +### Hardhat 網路 {#hardhat-network} + +專為開發而設計的本地以太坊網路。 它讓你能夠部署合約、運行測試和偵錯程式碼。 + +Hardhat 網路內建了 Hardhat,這是一個專業以太坊開發環境。 + +- [官網](https://hardhat.org/) +- [GitHub](https://github.com/nomiclabs/hardhat) + +### 本地信標鏈 {#local-beacon-chains} + +一些共識用戶端具有內建工具,用於啟動本地信標鏈以進行測試。 Lighthouse、Nimbus 和 Lodestar 的說明如下: + +- [使用 Lodestar 的本地測試網](https://chainsafe.github.io/lodestar/usage/local/) +- [使用 Lighthouse 的本地測試網](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) +- [使用 Nimbus 的本地測試網](https://github.com/status-im/nimbus-eth1/blob/master/fluffy/docs/local_testnet.md) + +### 公共以太坊測試鏈 {#public-beacon-testchains} + +以太坊還有兩個維護中的公共測試實作​​:Goerli 和 Sepolia。 推薦使用受長期受支援的測試網 Goerli,任何人都可以自由在其上驗證。 Sepolia 是一個較新、規模較小的測試鏈,預計在可見未來也會得到維護。Sepolia 上有獲得許可的驗證者集,這意味著不可以對此測試網上的新驗證者進行常規存取。 Ropsten 鏈預計將於 2022 年第四季棄用,Rinkeby 鏈預計將於 2023 年第二/第三季棄用。 + +- [Goerli 質押啟動面板](https://goerli.launchpad.ethereum.org/) +- [Ropsten、Rinkeby 和 Kiln 棄用公告](https://blog.ethereum.org/2022/06/21/testnet-deprecation) + +### Kurtosis 以太坊套件 {#kurtosis} + +Kurtosis 是一個用於多容器測試環境的構建系統,讓開發者能夠在本地建立區塊鏈網路的可複現執行個體。 + +以太坊 Kurtosis 套件可用於透過 Docker 或 Kubernetes 快速具現化一個可參數化、高擴展性的私人以太坊測試網。 此套件支援所有主要的執行層 (EL) 和共識層 (CL) 用戶端。 Kurtosis 從容處理代表網路的所有本地端口映射和服務連線,以用於與以太坊核心基礎設施相關的驗證和測試工作流程。 + +- [以太坊網路套件](https://github.com/kurtosis-tech/ethereum-package) +- [網站](https://www.kurtosis.com/) +- [GitHub](https://github.com/kurtosis-tech/kurtosis) +- [文件](https://docs.kurtosis.com/) + +## 衍生閱讀 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [開發架構](/developers/docs/frameworks/) +- [設定本地開發環境](/developers/local-environment/) diff --git a/public/content/translations/zh-tw/developers/docs/ethereum-stack/index.md b/public/content/translations/zh-tw/developers/docs/ethereum-stack/index.md new file mode 100644 index 00000000000..6cd6a777150 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/ethereum-stack/index.md @@ -0,0 +1,61 @@ +--- +title: 以太坊堆疊簡介 +description: 演練以太坊堆疊的不同層以及它們如何組合在一起。 +lang: zh-tw +--- + +與任何軟體堆疊一樣,完整的「以太坊堆疊」將根據你的目標而因專案而異。 + +然而,以太坊的核心元件有助於為軟體應用程式如何與以太坊區塊鏈互動提供思維模型。 理解堆疊的各層將幫助瞭解將以太坊整合到軟體專案中的不同方式。 + +## 等級 1:以太坊虛擬機器 {#ethereum-virtual-machine} + +[以太坊虛擬機器](/developers/docs/evm/)是以太坊上智慧型合約的執行階段環境。 以太坊區塊鏈上的所有智慧型合約和狀態變更均由<0>交易執行。 以太坊虛擬機器負責處理以太坊網路上的所有交易。 + +與任何虛擬機器一樣,以太坊虛擬機器在執行程式碼和執行機器(以太坊節點)之間建立了一個抽象層。 目前,以太坊虛擬機器運行在分佈於全球的數千個節點上。 + +在後台,以太坊虛擬機器使用一組操作碼指令來執行特定任務。 這些(140 個獨特的)操作碼讓以太坊虛擬機器是**圖靈完備**的,這表示只要提供足夠資源,以太坊虛擬機器就可以進行任何運算。 + +作為去中心化應用程式開發者,不需要瞭解太多關於以太坊虛擬機器的知識,只需要瞭解其存在以及能夠可靠地為以太坊上的所有應用程式提供無停機的支援。 + +## 等級 2:智慧型合約 {#smart-contracts} + +[智慧型合約](/developers/docs/smart-contracts/)為在以太坊區塊鏈上運行的可執行程式。 + +智慧型合約使用特定[程式語言](/developers/docs/smart-contracts/languages/)來編譯至以太坊虛擬機器位元組碼(稱為操作碼的低階機器指令)。 + +智慧型合約不僅充當開源程式庫,而且本質上是始終運行且無法關閉的開放應用程式介面服務。 智慧型合約提供使用者和應用程式([去中心化應用程式](/developers/docs/dapps/))無需許可即可與之互動的公共功能。 任何應用程式都可以與已部署的智慧型合約整合以構成功能,例如新增[資料饋送](/developers/docs/oracles/)或支援代幣兌換。 此外,任何人都可以將新的智慧型合約部署到以太坊,以新增自訂功能來滿足其應用程式的需求。 + +作為去中心化應用程式開發者,只有當你想在以太坊區塊鏈上新增自訂功能時,才需要編寫智慧型合約。 你可能會發現,只需與現有智慧型合約整合即可實現專案的大部分或全部需求,例如,如果想支援穩定幣支付或實現代幣的去中心化交易。 + +## 等級 3:以太坊節點 {#ethereum-nodes} + +為了使應用程式能夠與以太坊區塊鏈互動,必須連結至[以太坊節點](/developers/docs/nodes-and-clients/)。 連結至節點可讓你讀取區塊鏈資料和/或將交易傳送到網路。 + +以太坊節點是運行軟體的電腦 - 以太坊用戶端。 用戶端是以太坊的實作,會驗證每個區塊中的所有交易,保持網路安全和資料準確。 **以太坊節點就是以太坊區塊鏈**。 以太坊節點共同存儲以太坊區塊鏈的狀態,並就交易達成共識以改變區塊鏈狀態。 + +透過將你的應用程式連結到以太坊節點(透過 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)),應用程式能夠從區塊鏈讀取資料(例如使用者帳戶餘額)並向網路廣播新交易(例如在使用者帳戶之間轉移以太幣或執行智慧型合約的功能)。 + +## 等級 4:以太坊用戶端應用程式介面 {#ethereum-client-apis} + +許多便利的程式庫(由以太坊的開源社群建立和維護)允許你的應用程式連結到以太坊區塊鏈並與之通訊。 + +如果你的面向使用者的應用程式是網路應用程式,可以選擇直接在前端透過 `npm install` 安裝 [JavaScript API](/developers/docs/apis/javascript/)。 或者,你可能會選擇使用 [Python](/developers/docs/programming-languages/python/) 或 [Java](/developers/docs/programming-languages/java/) 應用程式介面在伺服器端實作此功能。 + +雖然這些應用程式介面不是堆疊的必要組成部分,但顯著降低了與以太坊節點直接互動的複雜度。 這些應用程式介面還提供公用程式功能(例如將 ETH 轉換為 Gwei),使得開發者可以花更少的時間處理複雜的以太坊用戶端,將更多的時間專注於應用程式的特定功能。 + +## 等級 5:終端使用者應用程式 {#end-user-applications} + +堆疊的頂層是面向使用者的應用程式。 它們是目前經常使用和建立的標準​​應用程式:主要是 Web 和行動應用程式。 + +開發這些使用者介面的方式基本上保持不變。 通常,使用者不需要知道他們正在使用的應用程式是使用區塊鏈建立的。 + +## 準備好選擇你的堆疊了嗎? {#ready-to-choose-your-stack} + +請查看我們的指南,瞭解如何為你的以太坊應用程式[設定本地開發環境](/developers/local-environment/)。 + +## 衍生閱讀 {#further-reading} + +- [Web 3.0 應用程式的架構](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git a/public/content/translations/zh-tw/developers/docs/evm/index.md b/public/content/translations/zh-tw/developers/docs/evm/index.md index 9f01939e727..449d559a645 100644 --- a/public/content/translations/zh-tw/developers/docs/evm/index.md +++ b/public/content/translations/zh-tw/developers/docs/evm/index.md @@ -61,7 +61,6 @@ Y(S, T)= S' - [Py-EVM](https://github.com/ethereum/py-evm) - _Python_ - [evmone](https://github.com/ethereum/evmone) - _C++_ - [ethereumjs-vm](https://github.com/ethereumjs/ethereumjs-vm) - _JavaScript_ -- [eEVM](https://github.com/microsoft/eevm) - _C++_ - [revm](https://github.com/bluealloy/revm) - _Rust_ ## 延伸閱讀 {#further-reading} diff --git a/public/content/translations/zh-tw/developers/docs/evm/opcodes/index.md b/public/content/translations/zh-tw/developers/docs/evm/opcodes/index.md index 47fed3fc434..58812e2ebd4 100644 --- a/public/content/translations/zh-tw/developers/docs/evm/opcodes/index.md +++ b/public/content/translations/zh-tw/developers/docs/evm/opcodes/index.md @@ -63,7 +63,7 @@ lang: zh-tw | 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `。` | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | copy returned data from last external call | | 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hash` | | hash = addr.exists ? keccak256(addr.code) : 0 | | 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | | -| 41 | COINBASE | 2 | `。` | `block.coinbase` | | address of miner of current block | +| 41 | COINBASE | 2 | `。` | `block.coinbase` | | 目前區塊提交者的地址 | | 42 | TIMESTAMP | 2 | `。` | `block.timestamp` | | timestamp of current block | | 43 | NUMBER | 2 | `。` | `block.number` | | number of current block | | 44 | PREVRANDAO | 2 | `。` | `randomness beacon` | | randomness beacon | diff --git a/public/content/translations/zh-tw/developers/docs/frameworks/index.md b/public/content/translations/zh-tw/developers/docs/frameworks/index.md new file mode 100644 index 00000000000..122cd9f9839 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/frameworks/index.md @@ -0,0 +1,147 @@ +--- +title: 去中心化應用程式開發架構 +description: 探索架構優勢及比較現有選項。 +lang: zh-tw +--- + +## 架構簡介 {#introduction-to-frameworks} + +建構成熟的去中心化應用程式需要 不同的技術。 軟體架構包含許多必要功能, 或提供簡單的外掛程式系統來選擇 你需要的工具。 + +架構帶有許多非常規功能, 例如: + +- 編列系統內區塊鏈功能. +- 編輯和測試你的智慧型合約. +- 用戶端開發外掛程式可在同一專案/儲存庫中建立 面向使用者的應用程式。 +- 用於連結到以太坊網路並部署 合約的設定,無論是連接到本地運行的執行個體 還是連結到以太坊的公共網路之一。 +- 去中心化應用程式分發 - 與星際檔案系統 等存儲選項整合。 + +## 基本資訊 {#prerequisites} + +在深入介紹這些架構之前,推薦你先閱讀下面的[去中心化應用程式](/developers/docs/dapps/)和[以太坊堆疊](/developers/docs/ethereum-stack/)簡介。 + +## 可用架構 {#available-frameworks} + +**Foundry** - **_Foundry 是一款快速、便攜和模組化的工具包,用於以太坊應用程式開發_** + +- [安裝 Foundry](https://book.getfoundry.sh/) +- [Foundry 手册](https://book.getfoundry.sh/) +- [Telegram 上的 Foundry 社群聊天](https://t.me/foundry_support) +- [Awesome Foundry](https://github.com/crisgarner/awesome-foundry) + +**Hardhat -** **_專業以太坊開發環境。_** + +- [hardhat.org](https://hardhat.org) +- [GitHub](https://github.com/nomiclabs/hardhat) + +**Ape -** **_Python 程式人員、資料科學家和安全性專業人員適用的智慧型合約開發工具。_** + +- [文件](https://docs.apeworx.io/ape/stable/) +- [GitHub](https://github.com/ApeWorX/ape) + +**Web3j -** **_用於在 JAVA 虛擬機上開發區塊鏈應用程式的平台。_** + +- [首頁](https://www.web3labs.com/web3j-sdk) +- [文件](https://docs.web3j.io) +- [GitHub](https://github.com/web3j/web3j) + +**ethers-kt -** **_適用基於以太坊虛擬機區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。_** + +- [GitHub](https://github.com/Kr1ptal/ethers-kt) +- [範例](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) +- [Discord](https://discord.gg/rx35NzQGSb) + +**Create Eth App -** **_使用一個命令建立以太坊支援的應用程式。 包含多種使用者介面架構與去中心化金融模板供你選擇。_** + +- [GitHub](https://github.com/paulrberg/create-eth-app) +- [模板](https://github.com/PaulRBerg/create-eth-app/tree/develop/templates) + +**Scaffold-Eth -** **_Ethers.js + Hardhat + React 元件和 web3 掛勾:開始構建由智慧型合約支援的去中心化應用程式所需的一切。_** + +- [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) + +**Tenderly -** **_Web3 開發平台,使區塊鏈開發者能夠建立、測試、除錯、監控和操作智慧型合約並改進去中心化應用程式使用者體驗。_** + +- [網站](https://tenderly.co/) +- [文件](https://docs.tenderly.co/ethereum-development-practices) + +**The Graph****_高效率查詢區塊鏈資料的圖表。_** + +- [網站](https://thegraph.com/) +- [使用教學](/developers/tutorials/the-graph-fixing-web3-data-querying/) + +**Alchemy -** **_以太坊開發平台。_** + +- [alchemy.com](https://www.alchemy.com/) +- [GitHub](https://github.com/alchemyplatform) +- [Discord](https://discord.com/invite/alchemyplatform) + +**NodeReal -** **_以太坊開發平台。_** + +- [Nodereal.io](https://nodereal.io/) +- [GitHub](https://github.com/node-real) +- [Discord](https://discord.gg/V5k5gsuE) + +**thirdweb SDK -** **_透過我們的強大軟體開發套件和命令列介面,可以建構與你的智慧型合約互動的 Web3 應用程式。_** + +- [文件](https://portal.thirdweb.com/sdk/) +- [Github](https://github.com/thirdweb-dev/) + +**Chainstack -** **_Web3(以太坊及其他區塊鏈)開發平台。_** + +- [chainstack.com](https://www.chainstack.com/) +- [Github](https://github.com/chainstack) +- [Discord](https://discord.gg/BSb5zfp9AT) + +**Crossmint -** **_企業級 web3 開發平台,讓你在所有主要鏈以太坊虛擬機器鏈上建立非同質化代幣應用程式。_** + +- [網站](https://www.crossmint.com) +- [文件](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) + +**Brownie -** **_基於 Python 的開發環境和測試架構。_** + +- [文件](https://eth-brownie.readthedocs.io/en/latest/) +- [GitHub](https://github.com/eth-brownie/brownie) +- **Brownie 目前未有維護** + +**Truffle -** **_開發環境、測試架構、部署通道及其他工具。 _** + +- [trufflesuite.com](https://www.trufflesuite.com/) +- [GitHub](https://github.com/trufflesuite/truffle) +- **Truffle 開發已結束** - [瞭解更多](https://twitter.com/trufflesuite/status/1704946902393860589?t=NlIWeLTbBSAaJmS5uUAhSA&s=19) + +**OpenZeppelin 軟體開發套件 -** **_終極智慧型合約工具組:一套幫助你開發、編譯、升級、部署智慧型合約以及與智慧型合約互動的工具。_** + +- [OpenZeppelin 軟體開發套件](https://openzeppelin.com/sdk/) +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-sdk) +- [社群論壇](https://forum.openzeppelin.com/c/support/17) +- **OpenZeppelin 軟體開發套件開發已結束** + +**Catapulta -** **_多鏈智慧型合約部署工具,在區塊瀏覽器中自動驗證,追蹤部署的智慧型合約並分享部署報告,Foundry 和 Hardhat 專案隨插即用。_** + +- [網站](https://catapulta.sh/) +- [文件](https://catapulta.sh/docs) +- [Github](https://github.com/catapulta-sh) + +**Covalent -** **_200 多條鏈的已擴充區塊鏈應用程式介面。_** + +- [covalenthq.com](https://www.covalenthq.com/) +- [文件](https://www.covalenthq.com/docs/api/) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + +**Wake -** **_用於合約測試、模糊測試、部署、漏洞掃描和程式碼導航的一體化 Python 框架。_** + +- [首頁](https://getwake.io/) +- [文件](https://ackeeblockchain.com/wake/docs/latest/) +- [GitHub](https://github.com/Ackee-Blockchain/wake) +- [VS Code 擴充功能](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) + +## 了解更多 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ + +## 相關主題 {#related-topics} + +- [設定本地開發環境](/developers/local-environment/) diff --git a/public/content/translations/zh-tw/developers/docs/gas/index.md b/public/content/translations/zh-tw/developers/docs/gas/index.md index 32b00d0feba..230c5cf3df6 100644 --- a/public/content/translations/zh-tw/developers/docs/gas/index.md +++ b/public/content/translations/zh-tw/developers/docs/gas/index.md @@ -117,7 +117,7 @@ lang: zh-tw 二層網路擴容為一項主要倡議,可大幅減低燃料費用並加強用戶體驗及可擴容性。 [更多二層網路擴容相關資訊](/developers/docs/scaling/#layer-2-scaling)。 -## 監控燃料費 {#moitoring-gas-fees} +## 監控燃料費 {#monitoring-gas-fees} 若你想要監控燃料價格,以便能以更低的費用發送以太幣,你可以使用許多不同的工具,例如: diff --git a/public/content/translations/zh-tw/developers/docs/ides/index.md b/public/content/translations/zh-tw/developers/docs/ides/index.md new file mode 100644 index 00000000000..e67e15e5e48 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/ides/index.md @@ -0,0 +1,71 @@ +--- +title: 整合開發環境 +description: +lang: zh-tw +--- + +在設定[整合開發環境 (IDE)](https://wikipedia.org/wiki/Integrated_development_environment) 時,以太坊上的應用程式程式設計與任何其他軟體專案的程式設計類似。 有很多選項可供選擇,因此最終請選擇最適合你喜好設定的整合開發環境或程式碼編輯器。 最適合你以太坊開發的整合開發環境選項很可能是你已經用於傳統軟體開發的整合開發環境。 + +## 網頁型整合開發環境 {#web-based-ides} + +如果你想在[設定本地開發環境](/developers/local-environment/)之前試一下程式碼,以下網頁應用程式是為以太坊智慧型合約開發客製化構建的。 + +**[Remix](https://remix.ethereum.org/)** - **_網頁型整合開發環境,內建靜態分析與區塊鏈測試虛擬機_** + +- [文件](https://remix-ide.readthedocs.io/en/latest/#) +- [Gitter](https://gitter.im/ethereum/remix) + +**[ChainIDE](https://chainide.com/)** - **_一個支援多鏈的雲端整合開發環境_** + +- [文件](https://chainide.gitbook.io/chainide-english-1/) +- [幫助論壇](https://forum.chainide.com/) + +**[Replit(Solidity 新手教學 - Beta)](https://replit.com/@replit/Solidity-starter-beta)** - **_一個可自訂的以太坊開發環境,提供熱重載、錯誤檢查和一流的測試網支援_** + +- [文件](https://docs.replit.com/) + +**[Tenderly Sandbox](https://sandbox.tenderly.co/)** - **_一個快速的原型建置環境,讓你可以使用 Solidity 和 JavaScript 在瀏覽器中編寫、執行智慧型合約並對其偵錯_** + +**[EthFiddle](https://ethfiddle.com/)** - **_網頁型整合開發環境 (IDE),可讓你編寫、編譯智慧型合約並對其偵錯_** + +- [Gitter](https://gitter.im/loomnetwork/ethfiddle) + +## 桌上型整合開發環境 {#desktop-ides} + +大多數成熟的整合開發環境都內建了外掛程式來增強以太坊開發體驗。 這些整合開發環境至少為[智慧型合約語言](/developers/docs/smart-contracts/languages/)提供語法醒目提示。 + +**Visual Studio Code -** **_專業跨平台整合開發環境,獲以太坊官方支援_** + +- [Visual Studio Code](https://code.visualstudio.com/) +- [Azure Blockchain Workbench](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/microsoft-azure-blockchain.azure-blockchain-workbench?tab=Overview) +- [程式碼範例](https://github.com/Azure-Samples/blockchain/blob/master/blockchain-workbench/application-and-smart-contract-samples/readme.md) +- [GitHub](https://github.com/microsoft/vscode) + +**Atom -** **_21 世紀適用的可破解文字編輯器_** + +- [Atom](https://atom.io/) +- [GitHub](https://github.com/atom) +- [Ethereum 方案](https://atom.io/packages/search?utf8=%E2%9C%93&q=keyword%3Aethereum&commit=Search) + +**JetBrains 整合開發環境(IntelliJ IDEA 等) -****_軟體開發者和團隊的必備工具_** + +- [JetBrains](https://www.jetbrains.com/) +- [GitHub](https://github.com/JetBrains) +- [IntelliJ Solidity](https://github.com/intellij-solidity/intellij-solidity/) + +**Remix Desktop -****_在本地機器上體驗 Remix 整合開發環境_** + +- [下載](https://github.com/ethereum/remix-desktop/releases) +- [GitHub](https://github.com/ethereum/remix-desktop) + +## 外掛程式和擴充功能 {#plugins-extensions} + +- [solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) - 支援 Visual Studio Code 的以太坊 Solidity 語言 +- [支援 VS Code 的 Solidity + Hardhat ](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Hardhat 團隊提供 Solidity 和 Hardhat 支援 +- [Prettier Soliditty](https://github.com/prettier-solidity/prettier-plugin-solidity) - 使用 prettier 的程式碼格式器 + +## 衍生閱讀 {#further-reading} + +- [以太坊整合開發環境](https://www.alchemy.com/list-of/web3-ides-on-ethereum) _ - Alchemy 提供的以太坊整合開發環境清單_ + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ diff --git a/public/content/translations/zh-tw/developers/docs/intro-to-ethereum/index.md b/public/content/translations/zh-tw/developers/docs/intro-to-ethereum/index.md index 82fd9a36238..ba3941f4ab6 100644 --- a/public/content/translations/zh-tw/developers/docs/intro-to-ethereum/index.md +++ b/public/content/translations/zh-tw/developers/docs/intro-to-ethereum/index.md @@ -36,7 +36,7 @@ lang: zh-tw **以太幣 (ETH)** 是以太坊的原生加密貨幣。 以太坊的作用是提供一個計算市場。 此類市場為參與者提供經濟獎勵,激勵其驗證並執行交易請求,並且向網路提供計算資源。 -任何廣播交易請求的參與者還必須給網路提供一定數量的以太幣,作為賞金。 網路將此類賞金獎勵給最終驗證交易、執行交易、將交易提交至區塊鏈及廣播交易至網路的任何人。 +任何廣播交易請求的參與者還必須給網路提供一定數量的以太幣,作為賞金。 網路將銷毀部分賞金並將餘下的獎勵給最終驗證交易、執行交易、將交易提交至區塊鏈及廣播交易至網路的任何人。 支付的以太幣數量對應於執行此計算所需的資源。 這些賞金也能阻止惡意參與者蓄意透過請求執行無限計算或其他資源密集類型的指令碼來堵塞網路,因為惡意參與者必須支付使用計算資源的費用。 @@ -107,7 +107,7 @@ lang: zh-tw ## 了解更多 {#further-reading} - [以太坊白皮書](/whitepaper/) -- [以太坊到底是怎麼運作的?](https://www.preethikasireddy.com/post/how-does-ethereum-work-anyway) - _Preethi Kasireddy_(**注意**:此資源仍有參考價值,但請注意它早於[合併](/roadmap/merge),因此仍然引述以太坊的工作量證明機制 - 實際上目前是由[權益證明](/developers/docs/consensus-mechanisms/pos)保障以太坊的安全) +- [以太坊到底是如何運作的?](https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369) - _Preethi Kasireddy_(**注意**:此資源仍有參考價值,但留意它是早於[以太網合併](/roadmap/merge)的文獻,因此引述的仍然是以太坊的工作量證明機制 - 以太坊實際上目前是由[權益證明](/developers/docs/consensus-mechanisms/pos)來保障安全) _知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ diff --git a/public/content/translations/zh-tw/developers/docs/networks/index.md b/public/content/translations/zh-tw/developers/docs/networks/index.md index 7aa26e1a522..cb17a8b9388 100644 --- a/public/content/translations/zh-tw/developers/docs/networks/index.md +++ b/public/content/translations/zh-tw/developers/docs/networks/index.md @@ -61,6 +61,7 @@ lang: zh-tw - [Alchemy Sepolia 水龍頭](https://sepoliafaucet.com/) - [Infura Sepolia 水龍頭](https://www.infura.io/faucet) - [Chainstack Sepolia 水龍頭](https://faucet.chainstack.com/sepolia-faucet) +- [以太坊生態系統水龍頭](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) #### Goerli_(長期支援)_ {#goerli} diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/archive-nodes/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/archive-nodes/index.md index 408d2ca4b2c..32e2fbefaa5 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/archive-nodes/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/archive-nodes/index.md @@ -7,7 +7,7 @@ sidebarDepth: 2 歸檔節點是一個以太坊用戶端的實例,經設定用來建立所有歷史狀態的存檔。 它是某些用例的有用工具,但可能比運行一個全節點更加複雜。 -## 基本資訊 {#prerequisites} +## 先決條件 {#prerequisites} 你應該瞭解[以太坊節點](/developers/docs/nodes-and-clients/)的概念,[其架構](/developers/docs/nodes-and-clients/node-architecture/)、[同步策略](/developers/docs/nodes-and-clients/#sync-modes)、[運行](/developers/docs/nodes-and-clients/run-a-node/)和[使用它們](/developers/docs/apis/json-rpc/)的實踐方法。 diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/client-diversity/index.md index ac17b83df41..fd54ff97e9b 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/client-diversity/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/client-diversity/index.md @@ -31,7 +31,7 @@ sidebarDepth: 2 超過 33% 的以太坊節點共識用戶端中都存在的錯誤可能會阻止共識層的最終確定,這表示使用者沒辦法相信交易在某個時刻不會被撤銷或更改。 這對建立在以太坊上的許多應用程式是非常大的問題,尤其是去中心化金融。 - 更糟糕的是,在兩三個主流用戶端中的重大錯誤可能會導致鏈錯誤地分叉和最終確定,使大量的驗證者被卡在無效的鏈上。 如果這些驗證者想重新加入正確的鏈,它們可能會面臨罰沒或緩慢且昂貴的自願提款和重新啟用流程。 罰沒的規模與有罪節點的數量成正比,其中三分之二的主流節點會被罰沒最高金額(32 以太幣)。 + 更糟糕的是,在兩三個主流用戶端中的重大錯誤可能會導致鏈錯誤地分叉和最終確定,使大量的驗證者被卡在無效的鏈上。 如果這些驗證者想重新加入正確的鏈,它們可能會面臨罰沒或緩慢且昂貴的自願提款和重新啟用流程。 罰沒的規模與有罪節點的數量成正比,其中三分之二的主流節點會被罰沒最高金額(32 以太幣)。 雖然這些情況不太可能發生,以太坊生態系可以透過平均分佈用戶端至各個活躍節點以降低風險。 理想上,不會有共識用戶端超過總節點數的 33%。 diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md index 60877735a1d..5e6184393d0 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md @@ -45,7 +45,6 @@ sidebarDepth: 2 - Etherscan 提供的[節點地圖](https://etherscan.io/nodetracker) - Bitfly 提供的[Ethernodes](https://ethernodes.org/) -- [以太坊節點爬蟲](https://crawler.ethereum.org/) - Chainsafe 提供的 [Nodewatch](https://www.nodewatch.io/),爬取共識節點 ## 節點類型 {#node-types} @@ -130,14 +129,14 @@ sidebarDepth: 2 此表總結了不同的用戶端。 所有這些用戶端都通過了[用戶端測試](https://github.com/ethereum/tests),並積極維護以保持最新的網路升級狀態。 -| 用戶端 | 語言 | 作業系統 | 網路 | 同步策略 | 狀態修剪 | -| ---------------------------------------------------------------------- | ---------- | --------------------- | ------------------------- | --------------- | ------ | -| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | 快照、完整 | 歸檔、已修剪 | -| [Nethermind](http://nethermind.io/) | C#、.NET | Linux、Windows、macOS | Mainnet, Sepolia, Holesky | 快照(不提供服務)、快速、完整 | 歸檔, 緩衝 | -| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | 快照、快速、完整 | 歸檔, 緩衝 | -| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | 完整 | 歸檔, 緩衝 | -| [Reth](https://github.com/paradigmxyz/reth) _(測試版)_ | Rust | Linux、Windows、macOS | Mainnet, Sepolia, Holesky | 完整 | 歸檔、已修剪 | -| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo)_(測試版)_ | TypeScript | Linux, Windows, macOS | Sepolia、Holesky | 完整 | 已修剪 | +| 用戶端 | 語言 | 作業系統 | 網路 | 同步策略 | 狀態修剪 | +| ---------------------------------------------------------------------- | ---------- | --------------------- | ------------------------- | -------------------------------------------------- | ------ | +| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync)、[完整](#full-sync) | 歸檔、已修剪 | +| [Nethermind](https://www.nethermind.io/) | C#、.NET | Linux、Windows、macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync) (不提供服務)、快速、[完整](#full-sync) | 歸檔, 緩衝 | +| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync)、[快速](#fast-sync)、[完整](#full-sync) | 歸檔, 緩衝 | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [完整](#full-sync) | 歸檔, 緩衝 | +| [Reth](https://reth.rs/) | Rust | Linux、Windows、macOS | Mainnet, Sepolia, Holesky | [完整](#full-sync) | 歸檔、已修剪 | +| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo)_(測試版)_ | TypeScript | Linux, Windows, macOS | Sepolia、Holesky | [完整](#full-sync) | 已修剪 | 有關受支援網路的更多信息,請閱讀[以太坊網路](/developers/docs/networks/)。 @@ -165,10 +164,18 @@ Nethermind 是使用 C# .NET 技術堆疊開發的以太坊實作,以 LGPL-3.0 - 最佳化的虛擬機 - 狀態存取 -- 網路和豐富的功能,如 Prometheus/Grafana 儀表板、seq 企業日誌記錄支援、JSON RPC 追蹤和分析插件。 +- 網路和豐富的功能,如 Prometheus/Grafana 儀表板、seq 企業日誌記錄支援、JSON-RPC 追蹤和分析插件。 Nethermind 也為高級使用者提供[詳細文件](https://docs.nethermind.io)、強大的開發支援、線上社群和全年無休支援。 +### Reth {#reth} + +Reth(Rust Etherum 的簡稱)是以太坊全節點的實作,致力於達成使用者友善、高度模組化、快速高效等目標。 Reth 最初由 Paradigm 開發並推動,且使用了 Apache 和 MIT 授權。 + +Reth 是生產就緒的執行用戶端,且適用於質押或高正常運作時間的服務等重要任務上。 在一些高效能、高利潤下的使用案例中表現優秀,如遠端程序呼叫、最大可提取價值、索引、模擬和點對點活動等。 + +查看 [Reth Book](https://reth.rs/) 或 [ Reth 的 GitHub 儲存庫](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth)以獲得更多資訊。 + ### 開發中 {#execution-in-development} 這些用戶端仍處於開發早期階段,尚未推薦正式使用。 @@ -231,21 +238,32 @@ Teku 以 Java 編寫,並以 Apache 2.0 授權發佈。 它由 ConsenSys 的 Pr ### 執行層同步模式 {#execution-layer-sync-modes} -#### 完整歸檔同步 {#full-sync} +執行層可以於不同的模式下運行,從重新執行區塊鏈的全域狀態到僅與來自可信任檢查點的鏈尖同步,以適應不同的用例。 + +#### 完整同步 {#full-sync} -完整同步下載所有區塊(包括區塊頭、交易和收據),並透過執行創世塊以來的每個區塊來增量生成區塊鏈的狀態。 +完整同步會下載所有區塊(包括區塊頭和區塊體),並透過執行創世區塊以來的每個區塊來增量地重新生成區塊鏈的狀態。 - 透過驗證每筆交易,最大限度地減少信任依賴並提供最高的安全性。 - 隨著交易數量不斷增加,處理所有交易可能需要幾天到幾週的時間。 -#### 完整快照同步 {#snap-sync} +[歸檔節點](#archive-node)執行完整同步,以建立(並保留)每個區塊中每個交易所做的狀態變更的完整歷史記錄。 -如同完整歸檔同步一樣,快照同步會逐區塊驗證區塊鏈。然而,快照同步不會從創世塊開始驗證,而是從更近期的「受信任」檢查點開始,該檢查點已知為真實區塊鏈的一部分。 節點會儲存週期性檢查點,同時刪除比某時間點早的資料。 這些快照用於在需要時重新產生狀態資料,而不是永久保存狀態資料。 +#### 快速同步 {#fast-sync} -- 最快的同步策略,以太坊主網上當前預設為此策略 -- 在不犧牲安全性的情況下節省大量磁碟使用和網路帶寬 +與完整同步一樣,快速同步會下載所有區塊(包括區塊頭、交易和收據)。 然而,快速同步不會重新處理歷史交易,而是依賴收據直到它到達最近的區塊頭,此時它切換到匯入和處理區塊以提供完整節點。 -[關於同步的更多資訊](https://github.com/ethereum/devp2p/blob/master/caps/snap.md) +- 快速同步策略。 +- 減少處理需求,有利頻寬使用。 + +#### 快照同步 {#snap-sync} + +快照同步也會逐塊去驗證鏈。 然而,快照同步不是從創世區塊開始,而是從更新的及已知是真正區塊鏈一部分的「可信任」檢查點開始。 節點會儲存週期性檢查點,同時刪除比某時間點早的資料。 這些快照用於根據需要重新產生狀態資料,而不是永久儲存該資料。 + +- 最快的同步策略,目前為以太坊主網的預設策略。 +- 在不犧牲安全性的情況下,節省了大量的磁碟空間和網路頻寬。 + +[更多有關快照同步的資訊](https://github.com/ethereum/devp2p/blob/master/caps/snap.md)。 #### 輕量同步 {#light-sync} @@ -270,14 +288,12 @@ Teku 以 Java 編寫,並以 Apache 2.0 授權發佈。 它由 ConsenSys 的 Pr 檢查點同步又稱弱主觀性同步,在同步信標節點時提供優異的使用者體驗。 它是基於[弱主觀性](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/)假設,使信標鏈能夠從近期的弱主觀性檢查點開始同步,而不是從創世塊開始。 檢查點同步顯著縮短了初始同步時間,其信任假設與從[創世塊](/glossary/#genesis-block)開始同步相同。 -在實際運作上,這表示你的節點會連接至遠端服務,以下載近期最終確定的狀態,並從該點開始繼續驗證資料。 提供資料的第三方會受信任,因此應謹慎選擇。 +在實際運作上,這表示你的節點會連接至遠端服務,以下載近期最終確定的狀態,並從該點開始繼續驗證資料。 提供資料的第三方會受到信任,因此應謹慎選擇。 關於[檢查點同步](https://notes.ethereum.org/@djrtwo/ws-sync-in-practice)的更多資訊 ## 衍生閱讀 {#further-reading} -網路上有很多關於以太坊用戶端的資訊。 以下是一些可能有幫助的資源。 - - [以太坊 101 - 第 2 部分 - 瞭解節點](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes,2019 年 2 月 13 日_ - [運行以太坊全節點:針對幾乎沒有動力的人提供的指南](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31)_ – Justin Leroux,2019 年 11 月 7 日_ diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/node-architecture/index.md index fa652ff8379..e876df86beb 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/node-architecture/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/node-architecture/index.md @@ -12,8 +12,6 @@ lang: zh-tw ![](node-architecture-text-background.png) -_此圖借用自 geth.ethereum.org,並使用 Geth 標誌代表執行用戶端;執行用戶端還有其他選項,如 Erigon、Nethermind 和 Besu。_ - 要讓這兩種用戶端架構運作,驗證用戶端必須能夠將大量交易傳送至執行用戶端。 透過在本機執行交易,用戶端驗證交易沒有違反任何以太坊的規則且提議的以太坊狀態更新是否正確。 同樣地,當節點被選為區塊生產者,共識用戶端必須能夠從 Geth 請求各種交易,以添加到新的區塊裡並執行它們來更新全域狀態。 用戶端間的通訊由本機遠端程序呼叫連線使用[引遠端程序呼叫](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)處理。 ## 執行用戶端的作用為何? {#execution-client} diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/nodes-as-a-service/index.md index ba8dcb0b38b..5439ec30368 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/nodes-as-a-service/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -63,6 +63,7 @@ sidebarDepth: 2 - 包含 Request Explorer、Mempool Watcher 和 Composer 的儀表板 - 整合測試網水龍頭存取 - 超過 1.8 萬使用者的活躍 Discord 建構者社群 + - [**All That Node**](https://allthatnode.com/) - [文件](https://docs.allthatnode.com/) - 特徵 @@ -75,7 +76,8 @@ sidebarDepth: 2 - 使用不限數量的應用程式介面金鑰進行無限的端點存取 - 支援追蹤/除錯應用程式介面 - 自動更新 -- [**亞馬遜託管區塊鏈**](https://aws.amazon.com/managed-blockchain/) + +- [**Amazon Managed Blockchain**](https://aws.amazon.com/managed-blockchain/) - [文件](https://aws.amazon.com/managed-blockchain/resources/) - 功能 - 完全託管的以太坊節點 @@ -84,6 +86,7 @@ sidebarDepth: 2 - 支援 3 條鏈 - 服務等級協定,全年無休的 AWS 支援 - Go-ethereum 及 Lighthouse + - [**Ankr**](https://www.ankr.com/) - [文件](https://docs.ankr.com/) - 特徵 @@ -96,6 +99,7 @@ sidebarDepth: 2 - 儀表板 - 遠端程序呼叫、超文字安全傳輸通訊協定及 WSS 端點 - 直接支援 + - [**Blast**](https://blastapi.io/) - [文件](https://docs.blastapi.io/) - 功能 @@ -110,12 +114,14 @@ sidebarDepth: 2 - 全年無休監控及通知 - 總 SLA 達到 99.9% - 可使用加密貨幣付款 + - [**BlockDaemon**](https://blockdaemon.com/) - [文件](https://ubiquity.docs.blockdaemon.com/) - 優點 - 控制面板 - 基於節點 - 分析 + - [**BlockPI**](https://blockpi.io/) - [文件](https://docs.blockpi.io/) - 功能 @@ -127,9 +133,19 @@ sidebarDepth: 2 - 自訂方案及隨用隨付方案 - 可使用加密貨幣付款 - 直接支援與技術支援 + +- [**Chainbase**](https://www.chainbase.com/) + - [文件](https://docs.chainbase.com) + - 功能 + - 高可用性、快速及可擴容的遠端程序呼叫服務 + - 多鏈支援 + - 免關稅 + - 使用者友善的儀表板 + - 提供遠端程序呼叫以外的區塊鏈資料服務 + - [**Chainstack**](https://chainstack.com/) - [文件](https://docs.chainstack.com/) - - 功能 + - 特徵 - 免費共享節點 - 共享歸檔節點 - GraphQL 支援 @@ -139,9 +155,10 @@ sidebarDepth: 2 - 自攜雲端 - 按小時付費定價 - 全年無休直接支援 + - [**DataHub**](https://datahub.figment.io) - [文件](https://docs.figment.io/) - - 特徵 + - 功能 - 免費方案 3,000,000 次請求/月 - RPC 及 WSS 末端 - 專用之全及歸檔節點 @@ -151,7 +168,8 @@ sidebarDepth: 2 - 控制面板 - 全年無休直接支援 - 可用加密貨幣付款(企業) -- [DRPC](https://drpc.org/) + +- [**DRPC**](https://drpc.org/) - [文件](https://docs.drpc.org/) - 功能 - 去中心化遠端程序呼叫節點 @@ -160,11 +178,12 @@ sidebarDepth: 2 - 免費方案每個月擁有無上限的運算單元 - 資料驗證 - 自訂端點 - - 超文字傳輸協定及 WSS 端點 + - 超文字安全傳輸通訊協定與 WSS 端點 - 不限數量的金鑰(免費和付費方案) - 彈性的備援選項 - [公共端點](https://eth.drpc.org) - 免費共享歸檔節點 + - [**GetBlock**](https://getblock.io/) - [文件](https://getblock.io/docs/get-started/authentication-with-api-key/) - 功能 @@ -176,8 +195,9 @@ sidebarDepth: 2 - 進階分析 - 自動更新 - 技術支援 + - [**InfStones**](https://infstones.com/) - - 功能 + - 特色功能 - 免費方案選項 - 隨時擴容 - 分析 @@ -187,6 +207,7 @@ sidebarDepth: 2 - 針對專門部署的快速同步時間 - 全年無休直接支援 - 存取超過 50 個區塊鏈節點 + - [**Infura**](https://infura.io/) - [文件](https://infura.io/docs) - 特色功能 @@ -195,9 +216,10 @@ sidebarDepth: 2 - 付費歸檔資料 - 直接支援 - 儀表板 + - [**Kaleido**](https://kaleido.io/) - [文件](https://docs.kaleido.io/) - - 特色功能 + - 特徵 - 免費新手方案 - 一鍵部署以太坊節點 - 可自訂的用戶端與演算法(Geth、 Quorum 和 Besu || PoA、IBFT 和 Raft) @@ -211,10 +233,11 @@ sidebarDepth: 2 - 雲端 HSM 私密金鑰管理 - 以太坊主網繫連 - ISO 27k 與 SOC 2、Type 2 驗證 - - 動態運行時間配置(例如新增雲端整合、變更節點入口等等) + - 動態執行階段配置(例如新增雲端整合、變更節點入口等等) - 支援多雲端、多區域和混合部署編排 - 單純按小時的基於 SaaS 的定價 - SLA 與全年無休支援 + - [**Lava Network**](https://www.lavanet.xyz/) - [文件](https://docs.lavanet.xyz/) - 特徵 @@ -226,9 +249,10 @@ sidebarDepth: 2 - 直覺化的專案管理介面 - 以共識為基礎的資料整合 - 支援多鏈 + - [**Moralis**](https://moralis.io/) - [文件](https://docs.moralis.io/) - - 特徵 + - 功能 - 免費共享節點 - 免費共享歸檔節點 - 注重隱私(無日誌政策) @@ -238,6 +262,7 @@ sidebarDepth: 2 - 獨特的以太坊軟體開發套件 - 獨特應用程式介面端點 - 直接技術支援 + - [**NodeReal MegaNode**](https://nodereal.io/) - [文件](https://docs.nodereal.io/nodereal/meganode/introduction) - 功能 @@ -245,6 +270,7 @@ sidebarDepth: 2 - 專為 Web3 開發者打造的增強版應用程式介面 - 多鏈支援 - 免費開始試用 + - [**NOWNodes**](https://nownodes.io/) - [文件](https://documenter.getpostman.com/view/13630829/TVmFkLwy) - 功能 @@ -255,6 +281,7 @@ sidebarDepth: 2 - 全年無休支援團隊 - 個人帳戶管理器 - 共享、歸檔、備份和專用節點 + - [**Pocket Network**](https://www.pokt.network/) - [文件](https://docs.pokt.network/home/) - 功能 @@ -275,6 +302,7 @@ sidebarDepth: 2 - 最私密、抗審查之選項 - 實際開發者支援 - [Pocket Portal](https://bit.ly/ETHorg_POKTportal) 儀表板和分析 + - [**QuickNode**](https://www.quicknode.com) - [文件](https://www.quicknode.com/docs/) - 功能 @@ -288,11 +316,13 @@ sidebarDepth: 2 - 非同質化代幣資料及分析應用程式介面 - [已獲得 SOC2 認證](https://www.quicknode.com/security) - 適合開發者和企業 + - [**Rivet**](https://rivet.cloud/) - [文件](https://rivet.readthedocs.io/en/latest/) - 功能 - 免費方案選項 - 隨時擴容 + - [**SenseiNode**](https://senseinode.com) - [文件](https://docs.senseinode.com/) - 功能 @@ -300,6 +330,7 @@ sidebarDepth: 2 - 儀表板 - 在拉丁美洲不同地點的多個託管商上託管 AWS - Prysm 和 Lighthouse 用戶端 + - [**SettleMint**](https://console.settlemint.com/) - [文件](https://docs.settlemint.com/) - 功能 @@ -313,6 +344,7 @@ sidebarDepth: 2 - 儀表板 - 按小時付費定價 - 直接支援 + - [**Tenderly**](https://tenderly.co/web3-gateway) - [文件](https://docs.tenderly.co/web3-gateway/web3-gateway) - 功能 @@ -320,13 +352,26 @@ sidebarDepth: 2 - 免費存取歷史資料 - 讀取密集型工作負載速度高達 8 倍 - 100% 一致的讀取存取 - - JSON RPC 端點 + - JSON-RPC 端點 - 基於使用者介面的遠端程序呼叫請求建構器和請求預覽 - 與 Tenderly 的開發、除錯及測試工具緊密整合 - 模擬交易 - 使用情況分析和過濾 - 可輕鬆存取的金鑰管理 - 透過聊天、電子郵件和 Discord 的專門工程支援 + +- [**Tokenview**](https://services.tokenview.io/) + - [文件](https://services.tokenview.io/docs?type=nodeService) + - 功能 + - 全年無休技術支援和 Telegram 開發者社群 + - 支援多鏈(比特幣、以太坊、波場、BNB 智能鏈、以太坊經典) + - 遠端程序呼叫和 WSS 端點均開放使用 + - 無限制存取歸檔資料應用程式介面 + - 有 Request Explorer 和 Mempool Watcher 的儀表板 + - 非同質化代幣資料應用程式介面和 Webhook 通知 + - 使用加密貨幣付款 + - 對額外行為要求的外部支援 + - [**Watchdata**](https://watchdata.io/) - [文件](https://docs.watchdata.io/) - 功能 @@ -338,6 +383,7 @@ sidebarDepth: 2 - 支援多種節點 - 資源擴充 - 高處理速度 + - [**ZMOK**](https://zmok.io/) - [文件](https://docs.zmok.io/) - 功能 @@ -346,39 +392,18 @@ sidebarDepth: 2 - 發送交易時,手續費和燃料費皆無限制 - 可最快取得新區塊及讀取區塊鏈 - 單個應用程序介面呼叫的最佳價格保證 -- [**Chainbase**](https://www.chainbase.com/) - - [文件](https://docs.chainbase.com) + +- [**Zeeve**](https://www.zeeve.io/) + - [文件](https://www.zeeve.io/docs/) - 功能 - - 高可用性、快速及可擴容的遠端程序呼叫服務 - - 多鏈支援 - - 免關稅 - - 使用者友善的儀表板 - - 提供遠端程序呼叫以外的區塊鏈資料服務 + - 企業級的無程式碼自動化平臺,提供了部署、監測和管理區塊鏈節點和網路的功能 + - 支援及整合超過 30 個以上協定,持續增加中 + - 增值 Web3 基礎設施服務,如去中心化儲存、去中心化身份和用於現實世界的區塊鏈帳本資料應用程度介面 + - 全年無休支援和主動監控以確保節點健康。 + - 遠端程序呼叫端點提供了經驗證的應用程式介面存取,透過直覺式的儀表板和分析輕鬆愉快地進行管理。 + - 提供託管雲端服務和使用自己的雲端服務兩種選項,支援所有主流的雲端提供商,如 AWS、Azure、Google Cloud、Digital Ocean 和本地部署雲端。 + - 我們總是使用智慧路由以連接最靠近你的使用者的節點 -[**Zeeve**](https://www.zeeve.io/) - -- [文件](https://www.zeeve.io/docs/) -- 功能 - - 企業級的無程式碼自動化平臺,提供了部署、監測和管理區塊鏈節點和網路的功能 - - 支援及整合超過 30 個以上協定,持續增加中 - - 增值 Web3 基礎設施服務,如去中心化儲存、去中心化身份和用於現實世界的區塊鏈帳本資料應用程度介面 - - 全年無休支援和主動監控以確保節點健康。 - - 遠端程序呼叫端點提供了經驗證的應用程度介面存取,透過直覺式的儀表板和分析輕鬆愉快的進行管理。 - - 提供託管雲端服務和使用自己的雲端服務兩種選項,支援所有主流的雲端提供商,如 AWS、Azure、Google Cloud、Digital Ocean 和本地部署雲端。 - - 我們總是使用智慧路由以連接最靠近你的使用者的節點 - -[**Tokenview**](https://services.tokenview.io/) - -- [文件](https://services.tokeniew/docs?type=nodeService) -- 功能 - - 全年無休技術支援和 Telegram 開發者社群 - - 支援多鏈(比特幣、以太坊、波場、BNB 智能鏈、以太坊經典) - - 遠端程序呼叫和 WSS 端點均開放使用 - - 無限制存取歸檔資料應用程式介面 - - 有 Request Explorer 和 Mempool Watcher 的儀表板 - - 非同質化代幣資料應用程式介面和 Webhook 通知 - - 使用加密貨幣付款 - - 對額外行為要求的外部支援 ## 延伸閱讀 {#further-reading} @@ -391,4 +416,4 @@ sidebarDepth: 2 ## 相關教程 {#related-tutorials} - [使用 Alchemy 開始以太坊開發](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) -- [使用 web3 和 Alchmey 傳送交易的指南](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) +- [使用 web3 和 Alchemy 發送交易的指南](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/run-a-node/index.md index 9b2d787ad3e..e8f907d7bb1 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/run-a-node/index.md @@ -92,12 +92,13 @@ sidebarDepth: 2 | 客戶 | 磁碟空間(快速同步) | 磁碟空間(完整歸檔) | | ---------- | ---------- | ---------- | -| Geth | 500GB 以上 | 12TB 以上 | -| Nethermind | 500GB 以上 | 12TB 以上 | | Besu | 800GB 以上 | 12TB 以上 | | Erigon | 不適用 | 2.5TB 以上 | +| Geth | 500GB 以上 | 12TB 以上 | +| Nethermind | 500GB 以上 | 12TB 以上 | +| Reth | 不適用 | 2.2TB 以上 | -- 注意:Erigon 並不提供快速同步,但有提供完整修剪(約 500GB) +- 注意:Erigon 和 Reth 不提供快照同步,但支援完全修剪(Erigon 約 2TB,Reth 約 1.2TB) 至於共識用戶端,所需硬碟容量也視用戶端實作及啟用的功能而定 (如罰沒驗證者的功能),但通常還需要額外的 200G 以儲存信標資料。 由於龐大的驗證者數量,帶寬負載也隨之增長。 你可以[在此分析中找到有關共識用戶端要求的詳細資料](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc)。 @@ -154,6 +155,7 @@ sidebarDepth: 2 - [Erigon](https://github.com/ledgerwatch/erigon/releases) - [Geth](https://geth.ethereum.org/downloads/) - [Nethermind](https://downloads.nethermind.io/) +- [Reth](https://reth.rs/installation/installation.html) 值得注意的是,用戶端多樣性是[執行層上的一個問題](/developers/docs/nodes-and-clients/client-diversity/#execution-layer)。 建議讀者們考慮運行小眾執行用戶端。 @@ -177,7 +179,7 @@ sidebarDepth: 2 另一種驗證方式是確定你下載軟體的雜湊(獨一無二的密碼學指紋)和開發者提供的雜湊相符。 這比使用 PGP 進行驗證更加容易,有些用戶端也只提供此選項。 只需對下載的軟體運行雜湊函數,並將其與軟體發佈頁面的雜湊比較即可。 例如: -``` +```sh sha256sum teku-22.6.1.tar.gz 9b2f8c1f8d4dab0404ce70ea314ff4b3c77e9d27aff9d1e4c1933a5439767dde @@ -213,7 +215,7 @@ sha256sum teku-22.6.1.tar.gz 此驗證權杖由用戶端軟體自動產生,但某些情況下,你可能需要自行手動產生。 你可以透過 [OpenSSL](https://www.openssl.org/) 產生它: -``` +```sh openssl rand -hex 32 > jwtsecret ``` @@ -221,12 +223,12 @@ openssl rand -hex 32 > jwtsecret 此章節將引導你啟動執行用戶端。 它僅做為基本設定的範例,此範例會以下列設定啟動用戶端: -- 指定欲連接的網路,在此例子中為主網 +- 指定欲連線的網路,在此例子中為主網 - 你可以選擇[任意一個測試網](/developers/docs/networks/),以初步測試你的設定 - 定義資料目錄,用於儲存所有包含區塊鏈的資料 - 請確保將預設路徑替換成真實路徑:如指向你外部硬碟的路徑 - 啟用與用戶端通訊的介面 - - 包括用於與共識用戶端通訊的 JSON RPC 和引擎應用程式介面 + - 包括用於與共識用戶端通訊的 JSON-RPC 和引擎應用程式介面 - 定義經過驗證的應用程式介面的 `jwtsecret` 路徑 - 請確保將範例路徑替換成用戶端能夠存取的真實路徑,如:`/tmp/jwtsecret` @@ -236,9 +238,9 @@ openssl rand -hex 32 > jwtsecret ##### 運行 Besu -此範例在主網上運行 Besu,將區塊鏈資料以預設格式儲存在 `/data/ethereum`,啟用 JSON RPC 及引擎應用程式介面以連接至共識用戶端。 引擎應用程式介面使用 `jwtsecret` 權杖驗證,且只允許來自 `localhost` 的呼叫。 +此範例在主網上運行 Besu,將區塊鏈資料以預設格式儲存在 `/data/ethereum`,啟用 JSON-RPC 及引擎遠端程序呼叫以連線至共識用戶端。 引擎應用程式介面使用 `jwtsecret` 權杖驗證,且只允許來自 `localhost` 的呼叫。 -``` +```sh besu --network=mainnet \ --data-path=/data/ethereum \ --rpc-http-enabled=true \ @@ -250,7 +252,7 @@ besu --network=mainnet \ Besu 還有個啟動器選項,會詢問一系列問題並產生設定檔案。 透過以下指令運行互動式啟動器: -``` +```sh besu --Xlauncher ``` @@ -258,9 +260,9 @@ besu --Xlauncher ##### 運行 Erigon -此範例在主網上運行 Erigon,將區塊鏈資料儲存在 `/data/ethereum`,啟用 JSON RPC,定義了哪些命名空間是允許的,並啟用由 `jwtsecret` 路徑定義的共識用戶端連接身份驗證。 +此範例在主網上運行 Erigon,將區塊鏈資料儲存在 `/data/ethereum`,啟用 JSON-RPC,定義了哪些命名空間是允許的,並啟用連線由 `jwtsecret` 路徑定義的共識用戶端時的身份驗證。 -``` +```sh erigon --chain mainnet \ --datadir /data/ethereum \ --http --http.api=engine,eth,web3,net \ @@ -271,9 +273,9 @@ Erigon 預設與 8GB 的硬碟執行完整同步,這會產生超過 2TB 的歸 ##### 運行 Geth -此範例在主網上運行 Geth,將區塊鏈資料儲存在 `/data/ethereum`,啟用 JSON RPC 並定義了哪些命名空間是允許的。 它也啟用了連接至共識用戶端的身份驗證,這需要 `jwtsecrest` 路徑並可以選擇定義哪些連接是允許的,在這個例子中,只允許 `localhost`。 +此範例在主網上運行 Geth,將區塊鏈資料儲存在 `/data/ethereum`,啟用 JSON-RPC 並定義了哪些命名空間是允許的。 它也啟用了連接至共識用戶端的身份驗證,這需要 `jwtsecrest` 路徑並可以選擇定義哪些連接是允許的,在這個例子中,只允許 `localhost`。 -``` +```sh geth --mainnet \ --datadir "/data/ethereum" \ --http --authrpc.addr localhost \ @@ -286,9 +288,9 @@ geth --mainnet \ ##### 運行 Nethermind -Nethermind 提供多種 [安裝選項](https://docs.nethermind.io/nethermind/first-steps-with-nethermind/getting-started)。 此套件包含許多二進位檔案,包括有引導式設定的啟動器,可以互動式幫助你建立設定。 或者,你可以找到可執行執行器,並使用設定標記執行它。 預設啟用 JSON RPC。 +Nethermind 提供多種 [安裝選項](https://docs.nethermind.io/nethermind/first-steps-with-nethermind/getting-started)。 此套件包含許多二進位檔案,包括有引導式設定的啟動器,可以互動式幫助你建立設定。 或者,你可以找到可執行執行器,並使用設定標記執行它。 JSON-RPC 是預設啟用的。 -``` +```sh Nethermind.Runner --config mainnet \ --datadir /data/ethereum \ --JsonRpc.JwtSecretFile=/path/to/jwtsecret @@ -298,6 +300,19 @@ Nethermind 文檔提供了與共識用戶端一起運行 Nethermind 的 [完整 執行用戶端會啟用它的核心功能、選擇端點並開始尋找對等用戶端。 成功發現對等用戶端後,用戶端開始同步。 執行用戶端會等待來自共識用戶端的連接。 在用戶端成功與目前狀態同步以後,目前的區塊鏈資料就可以使用。 +##### 運行 Reth + +此範例在主網上運行 Reth,使用預設的資料儲存路徑。 啟用 JSON-RPC 和引擎遠端程序呼叫驗證,以連線由 `jwtsecret` 路徑定義的共識用戶端,並且僅允許來自 `localhost` 的調用。 + +```sh +reth node \ + --authrpc.jwtsecret /path/to/jwtsecret \ + --authrpc.addr 127.0.0.1 \ + --authrpc.port 8551 +``` + +請參閱[設定 Reth](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) 以瞭解有關預設資料目錄的更多資訊。 [Besu 文件](https://reth.rs/run/mainnet.html)包含了額外的選項及設定細節。 + #### 啟動共識用戶端 {#starting-the-consensus-client} 共識用戶端必須在正確的連接埠設定下啟動,以建立與執行用戶端的本地遠端程序呼叫連接。 共識用戶端在執行時需要使用公開的執行用戶端通訊埠作為設定參數。 @@ -308,13 +323,13 @@ Nethermind 文檔提供了與共識用戶端一起運行 Nethermind 的 [完整 當在測試網上開始運行信標節點時,藉由[檢查點同步](https://notes.ethereum.org/@launchpad/checkpoint-sync)的公共端點,可以大幅縮短同步時間。 -#### 運行共識用戶端 +#### 運行共識用戶端 {#running-a-consensus-client} ##### 運行 Lighthouse 在運行 Lighthouse 前,請在 [Lighthouse 手冊](https://lighthouse-book.sigmaprime.io/installation.html)中了解如何安裝並設定。 -``` +```sh lighthouse beacon_node \ --network mainnet \ --datadir /data/ethereum \ @@ -327,7 +342,7 @@ lighthouse beacon_node \ 透過編譯 Lodestar 軟體或下載 Docker 映像檔來安裝 Lodestar 軟體。 在[文檔](https://chainsafe.github.io/lodestar/)中了解更多,在[設定指南](https://hackmd.io/@philknows/rk5cDvKmK)中獲得更完整的資訊。 -``` +```sh lodestar beacon \ --rootDir="/data/ethereum" \ --network=mainnet \ @@ -340,7 +355,7 @@ lodestar beacon \ Nimbus 包括共識用戶端與執行用戶端。 它可在各種裝置上運行,即使是性能不高的裝置。 在[安裝依賴項和 Nimbus 本體](https://nimbus.guide/quick-start.html)後,你可以透過以下指令運行共識用戶端: -``` +```sh nimbus_beacon_node \ --network=mainnet \ --web3-url=http://127.0.0.1:8551 \ @@ -352,7 +367,7 @@ nimbus_beacon_node \ Prysm 有可以輕鬆自動安裝的腳本。 詳情請見 [Prysm 文檔](https://docs.prylabs.network/docs/install/install-with-script)。 -``` +```sh ./prysm.sh beacon-chain \ --mainnet \ --datadir /data/ethereum \ @@ -362,7 +377,7 @@ Prysm 有可以輕鬆自動安裝的腳本。 詳情請見 [Prysm 文檔](https: ##### 運行 Teku -``` +```sh teku --network mainnet \ --data-path "/data/ethereum" \ --ee-endpoint http://localhost:8551 \ @@ -377,7 +392,7 @@ teku --network mainnet \ 運行自己的驗證者允許[單獨質押](/staking/solo/),單獨質押是支援以太坊的最具影響且最去信任的方法。 然而,單獨質押要求存入 32 以太幣。 若要以較少的以太幣在你自己的節點上運行驗證者,你可能會對擁有無需許可的節點營運者的去中心化質押池 (如 [Rocket Pool](https://rocketpool.net/node-operators))感興趣。 -開始質押和產生驗證者金鑰最簡單的方法就是使用 [Goerli 測試網質押啟動面板](https://goerli.launchpad.ethereum.org/),這可讓你透過[在 Goerli 上運行節點](https://notes.ethereum.org/@launchpad/goerli)以測試你的設定。 當你準備好部署到主網時,即可使用[主網質押啟動面板](https://launchpad.ethereum.org/)重複這些步驟。 +開始質押和產生驗證者金鑰最簡單的方法就是使用 [Holesky 測試網質押啟動面板](https://holesky.launchpad.ethereum.org/),這可讓你透過[在 Holesky 上運行節點](https://notes.ethereum.org/@launchpad/holesky)來測試你的設定。 當你準備好部署到主網時,即可使用[主網質押啟動面板](https://launchpad.ethereum.org/)重複這些步驟。 請見[質押頁面](/staking)以查看質押選項概覽。 diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/dart/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/dart/index.md new file mode 100644 index 00000000000..911e1cf9d61 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/dart/index.md @@ -0,0 +1,30 @@ +--- +title: Dart 開發者適用的以太坊資源 +description: 學習如何使用 Dart 語言進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +## 指導手冊 {#tutorials} + +- [Flutter 與區塊鏈 – Hello World 去中心化應用程式](https://www.geeksforgeeks.org/flutter-and-blockchain-hello-world-dapp/)帶您完成入門的所有步驟: + 1. 安裝 [Truffle 開發套件](https://www.trufflesuite.com/) + 2. 使用 [Solidity](https://soliditylang.org/) 編寫智慧型合約 + 3. 使用 Dart 編寫使用者介面 +- 如果你已有基礎知識,[使用 Flutter 建立行動去中心化應用程式](https://medium.com/dash-community/building-a-mobile-dapp-with-flutter-be945c80315a)的篇幅要短很多, 可能是更好選擇 +- 如果你偏好透過觀看影片來學習,可以觀看[建立你的第一個區塊鏈 Flutter 應用程式](https://www.youtube.com/watch?v=3Eeh3pJ6PeA),片長約一小時 +- 如果你時間不足,可能更喜歡[在以太坊上使用 Flutter 和 Dart 建立區塊鏈去中心化應用程式](https://www.youtube.com/watch?v=jaMFEOCq_1s),只需大約二十分鐘 +- [透過 WalletConnect 的 Web3Modal 將 MetaMask 整合到 Flutter 應用程式](https://www.youtube.com/watch?v=v_M2buHCpc4) - 這段簡短影片會一步一步帶你使用 WalletConnect 的 [Web3Modal](https://pub.dev/packages/web3modal_flutter) 程式庫,將 MetaMask 整合到 Flutter 應用程式中 +- [Flutter 去中心化應用程式簡易錢包](https://youtu.be/JMfIBpuAhKA) 和[首個 Flutter 去中心化應用程式 - Solidity、Truffle、Ganache](https://youtu.be/bHw2gQZxJ_s) - 這些影片展示如何使用 Truffle 和 Ganache 在 Flutter 建立簡易的去中心化應用程式 +- [Solidity 和 Flutter 行動區塊鏈開發者訓練營課程](https://youtube.com/playlist?list=PL4V4Unlk5luhQ26ERO6hWEbcUwHDSSmVH) - 全端行動區塊鏈開發者課程播放列表 + +## 與以太坊客戶合作工作 {#working-with-ethereum-clients} + +你可以使用以太坊,來建立能夠利用加密貨幣與區塊鏈技術長處的去中心化應用程式(或稱「dapp」)。 目前至少有兩個維護的程式庫 可供 Dart 使用以太坊的 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)。 + +1. [simonbutler.eu 的 Web3dart](https://pub.dev/packages/web3dart) +1. [來自 darticulate.com 的以太坊 5.0.0](https://pub.dev/packages/ethereum) + +還有其他程式庫讓你能夠操作特定的以太坊地址, 或擷取各種加密貨幣的價格。 [你在這裡可以看到完整清單](https://pub.dev/dart/packages?q=ethereum)。 diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/delphi/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/delphi/index.md new file mode 100644 index 00000000000..cb6f61cbfcb --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/delphi/index.md @@ -0,0 +1,56 @@ +--- +title: Delphi 開發者適用的以太坊資源 +description: 學習如何使用 Delphi 程式設計語言進行以太坊開發 +lang: zh-tw +incomplete: true +--- + + + +學習如何使用 Delphi 程式設計語言進行以太坊開發 + + + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +在以太坊上構建去中心化應用程式,並使用 Delphi 程式設計語言與智慧型合約互動! + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-the-solidity-language} + +**邁出第一步,整合 Delphi 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者參考和連結 {#beginner-references-and-links} + +**Delphereum 程式庫簡介** + +- [甚麼是 Delphereum?](https://github.com/svanas/delphereum/blob/master/README.md) +- [將 Delphi 連結到本地(記憶體內部)區塊鏈](https://medium.com/@svanas/connecting-delphi-to-a-local-in-memory-blockchain-9a1512d6c5b0) +- [將 Delphi 連結到以太坊主網](https://medium.com/@svanas/connecting-delphi-to-the-ethereum-main-net-5faf1feffd83) +- [將 Delphi 連結到智慧型合約](https://medium.com/@svanas/connecting-delphi-to-smart-contracts-3146b12803a1) + +**想要跳過設定,並直接跳至範例?** + +- [三分鐘的智慧型合約和 Delphi - 第 1 部分](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-61d998571d) +- [三分鐘的智慧型合約和 Delphi - 第 2 部分](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-part-2-446925faa47b) + +## 中階文章 {#intermediate-articles} + +- [使用 Delphi 產生以太坊簽名的訊息簽章](https://medium.com/@svanas/generating-an-ethereum-signed-message-signature-in-delphi-75661ce5031b) +- [使用 Delphi 傳送以太幣](https://medium.com/@svanas/transferring-ether-with-delphi-b5f24b1a98a4) +- [使用 Delphi 傳送 ERC-20 代幣](https://medium.com/@svanas/transferring-erc-20-tokens-with-delphi-bb44c05b295d) + +## 進階使用模式 {#advanced-use-patterns} + +- [Delphi 和以太坊名稱服務 (ENS)](https://medium.com/@svanas/delphi-and-ethereum-name-service-ens-4443cd278af7) +- [QuikNode、以太坊 和 Delphi](https://medium.com/@svanas/quiknode-ethereum-and-delphi-f7bfc9671c23) +- [Delphi 和以太坊黑暗森林](https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93) +- [在 Delphi 中將一種代幣兌換成另一種代幣](https://svanas.medium.com/swap-one-token-for-another-in-delphi-bcb999c47f7) + +想取得更多資源? 請瀏覽[ethereum.org/developers](/developers/) diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/dot-net/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/dot-net/index.md new file mode 100644 index 00000000000..14f8a735568 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/dot-net/index.md @@ -0,0 +1,86 @@ +--- +title: .NET 開發者適用的以太坊資源 +description: 學習如何使用 .NET 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 .NET 型專案和工具進行以太坊開發 + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +使用 Microsoft 技術堆疊中的工具和語言在以太坊上構建去中心化應用程式並與智慧型合約進行 互動 - 跨 .NET Framework/.NET Core/.NET Standard 在 VSCode 和 Visual Studio 等工具上支援 C#、# Visual Basic .NET 和 F#。 在幾分鐘內使用 Microsoft Azure 區塊鏈在 Azure上部署以太坊區塊鏈。 將對 .NET 的喜愛轉移至以太坊! + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-the-solidity-language} + +**邁出第一步,整合 .NET 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者參考和連結 {#beginner-references-and-links} + +**Nethereum 程式庫和 VS Code Solidity 簡介** + +- [Nethereum 入門](https://docs.nethereum.com/en/latest/getting-started/) +- [安裝 VS Code Solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) +- [.NET 開發者建立和調用以太坊智慧型合約的工作流程](https://medium.com/coinmonks/a-net-developers-workflow-for-creating-and-calling-ethereum-smart-contracts-44714f191db2) +- [智慧型合約與 Nethereum 的整合](https://kauri.io/#collections/Getting%20Started/smart-contracts-integration-with-nethereum/#smart-contracts-integration-with-nethereumm) +- [使用 Nethereum 連接 .NET 和以太坊區塊鏈智慧型合約](https://medium.com/my-blockchain-development-daily-journey/interfacing-net-and-ethereum-blockchain-smart-contracts-with-nethereum-2fa3729ac933),也可參考此[中文版](https://medium.com/my-blockchain-development-daily-journey/%E4%BD%BF%E7%94%A8nethereum%E9%80%A3%E6%8E%A5-net%E5%92%8C%E4%BB%A5%E5%A4%AA%E7%B6%B2%E5%8D%80%E5%A1%8A%E9%8F%88%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84-4a96d35ad1e1) +- [Nethereum - 區塊鏈的開放源始碼 .NET 整合程式庫](https://kauri.io/#collections/a%20hackathon%20survival%20guide/nethereum-an-open-source-.net-integration-library/) +- [使用 Nethereum 將以太坊交易寫入 SQL 資料庫](https://medium.com/coinmonks/writing-ethereum-transactions-to-sql-database-using-nethereum-fd94e0e4fa36) +- [瞭解如何使用 C# 和 VisualStudio 輕鬆部署以太坊智慧型合約](https://koukia.ca/deploy-ethereum-smart-contracts-using-c-and-visualstudio-5be188ae928c) + +**想要跳過設定,直接了解範例?** + +- [訓練場](http://playground.nethereum.com/) - 與以太坊互動,並學習如何透過瀏覽器使用 Nethereum。 + - 查詢帳戶餘額 [C#](http://playground.nethereum.com/csharp/id/1001) [VB.NET](http://playground.nethereum.com/vb/id/2001) + - 查詢 ERC20 智慧型合約餘額 [C#](http://playground.nethereum.com/csharp/id/1005) [VB.NET](http://playground.nethereum.com/vb/id/2004) + - 將以太幣傳送至帳戶 [C#](http://playground.nethereum.com/csharp/id/1003) [VB.NET](http://playground.nethereum.com/vb/id/2003) + - ... 和更多相關內容! + +## 中級文章 {#intermediate-articles} + +- [Nethereum 活頁簿/範例清單](http://docs.nethereum.com/en/latest/Nethereum.Workbooks/docs/) +- [部署你自己的開發測試鏈](https://github.com/Nethereum/Testchains) +- [Solidity 的 VSCode 程式碼產生外掛程式](https://docs.nethereum.com/en/latest/nethereum-codegen-vscodesolidity/) +- [Unity 和以太坊:為何以及如何](https://www.raywenderlich.com/5509-unity-and-ethereum-why-and-how) +- [為以太坊去中心化應用程式建立 ASP.NET 核心 Web 應用程式介面](https://tech-mint.com/blockchain/create-asp-net-core-web-api-for-ethereum-dapps/) +- [使用 Nethereum Web3 實作供應鏈追踪系統](http://blog.pomiager.com/post/using-nethereum-web3-to-implement-a-supply-chain-traking-system4) +- [Nethereum 區塊處理](https://nethereum.readthedocs.io/en/latest/nethereum-block-processing-detail/),包含 [C# 訓練場範例](http://playground.nethereum.com/csharp/id/1025) +- [Nethereum Websocket 串流](https://nethereum.readthedocs.io/en/latest/nethereum-subscriptions-streaming/) +- [Kaleido 和 Nethereum](https://kaleido.io/kaleido-and-nethereum/) +- [Quorum 和 Nethereum](https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Quorum/README.md) + +## 進階使用模式 {#advanced-use-patterns} + +- [Azure 金鑰保存庫和 Nethereum](https://github.com/Azure-Samples/bc-community-samples/tree/master/akv-nethereum) +- [Nethereum.DappHybrid](https://github.com/Nethereum/Nethereum.DappHybrid) +- [Ujo Nethereum 後端參考架構](https://docs.nethereum.com/en/latest/nethereum-ujo-backend-sample/) + +## .NET 專案、工具及其他有趣內容 {#dot-net-projects-tools-and-other-fun-stuff} + +- [Nethereum 訓練場](http://playground.nethereum.com/) - _在瀏覽器中編譯、建立和執行 Nethereum 程式碼片段_ +- [Nethereum Codegen Blazor](https://github.com/Nethereum/Nethereum.CodeGen.Blazor) - _Blazor 中的 Nethereum 程式碼產生使用者介面_ +- [Nethereum Blazor](https://github.com/Nethereum/NethereumBlazor) - _.NET Wasm 單頁應用程式輕量區塊鏈瀏覽器和簡易錢包_ +- [Wonka Business Rules Engine](https://docs.nethereum.com/en/latest/wonka/) - _本質上由中繼資料驅動的業務規則引擎(同時適用於. NET 平台和以太坊平台)_ +- [Nethermind](https://github.com/NethermindEth/nethermind) - _.NET Core 以太坊用戶端,適用於 Linux、Windows 和 MacOS_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _使用以太坊相關程式碼庫的公用程式函式_ +- [TestChains](https://github.com/Nethereum/TestChains) - _可實現快速回應的預先設定的 .NET 開發鏈 (PoA)_ + +想取得更多資源? 請瀏覽[ethereum.org/developers](/developers/) + +## .NET 社群貢獻者 {#dot-net-community-contributors} + +在 Nethereum,我們主要活躍於 [Gitter](https://gitter.im/Nethereum/Nethereum) 上,任何人都可以前來提問/回答問題,獲得協助或者放鬆一下。 隨意在 [Nethereum GitHub 儲存庫](https://github.com/Nethereum)上提交拉取請求或開立一個議題,或僅瀏覽我們提供的許多小專案/範例專案。 你也可以在 [Discord](https://discord.gg/jQPrR58FxX) 上找到我們! + +如果你是 Nethermind 新手並需要入門幫助,請加入我們的 [Discord](http://discord.gg/PaCMRFdvWT)。 我們的開發者隨時準備回答你的問題。 隨時在 [Nethermind GitHub 存儲庫](https://github.com/NethermindEth/nethermind)上建立拉取請求或提出任何議題。 + +## 其他彙總列表 {#other-aggregated-lists} + +[官方 Nethereum 網站](https://nethereum.com/) +[官方 Nethermind 網站](https://nethermind.io/) diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/golang/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/golang/index.md new file mode 100644 index 00000000000..b0533e8065b --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/golang/index.md @@ -0,0 +1,85 @@ +--- +title: Go 開發者適用的 Ethereum 資源 +description: 學習如何使用 Go 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 Go 型專案和工具進行以太坊開發 + +使用以太坊建立去中心化應用程式(或稱「dapp」)。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程式是去中心化的,意味著它們在點對點網路上運行,並且不存在單點故障。 這些應用程式不會被單一實體或個人控制,並且幾乎不可能對其進行審查。 它們可以控制數位資產以建立新型應用程式。 + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Go 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [合約教學](https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial) + +## 初學者文章和書籍 {#beginner-articles-and-books} + +- [選擇 Ethereum 用戶端](https://www.trufflesuite.com/docs/truffle/reference/choosing-an-ethereum-client) +- [Geth 入門](https://medium.com/@tzhenghao/getting-started-with-geth-c1a30b8d6458) +- [使用 Golang 連結至以太坊](https://www.youtube.com/watch?v=-7uChuO_VzM) +- [使用 Golang 部署以太坊智慧型合約](https://www.youtube.com/watch?v=pytGqQmDslE) +- [使用 Go 測試和部署以太坊智慧型合約的逐步指南](https://hackernoon.com/a-step-by-step-guide-to-testing-and-deploying-ethereum-smart-contracts-in-go-9fc34b178d78) +- [電子書:使用 Go 開發以太坊](https://goethereumbook.org/) - _使用 Go 開發以太坊應用程式_ + +## 中階文章和文件 {#intermediate-articles-and-docs} + +- [Go 以太坊相關文件](https://geth.ethereum.org/docs/) - _官方以太坊 Golang 相關文件_ +- [Erigon 程式設計者指南](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _圖文指南包括狀態樹、多重證明和交易處理_ +- [Erigon 和無狀態以太坊](https://youtu.be/3-Mn7OckSus?t=394) - _2020 年以太坊社群會議 (EthCC 3)_ +- [Erigon:最佳化以太坊用戶端](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 年開發者大會 4 _ +- [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) +- [在 Go 上使用 Geth 建立去中心化應用程式](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) +- [透過 Golang 和 Geth 使用以太坊專用網路](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) +- [使用 Go 對以太坊上的 Solidity 合約進行單元測試](https://medium.com/coinmonks/unit-testing-solidity-contracts-on-ethereum-with-go-3cc924091281) +- [使用 Geth 作為程式庫的快速參考](https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e) + +## 進階使用模式 {#advanced-use-patterns} + +- [GETH 模擬後端](https://kauri.io/#collections/An%20ethereum%20test%20toolkit%20in%20Go/the-geth-simulated-backend/#_top) +- [使用以太坊和 Quorum 的區塊鏈即服務應用程式](https://blockchain.dcwebmakers.com/blockchain-as-a-service-apps-using-ethereum-and-quorum.html) +- [以太坊區塊鏈應用程式中的分佈式存儲星際檔案系統和 Swarm](https://blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html) +- [行動用戶端:程式庫和 Inproc 以太坊節點](https://github.com/ethereum/go-ethereum/wiki/Mobile-Clients:-Libraries-and-Inproc-Ethereum-Nodes) +- [原生去中心化應用程式:以太坊合約的 Go 繫結](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) + +## Go 專案和工具 {#go-projects-and-tools} + +- [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _以太坊協定的官方 Go 實作_ +- [Go Ethereum 程式碼分析](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _審查和分析 Go Ethereum 原始程式碼_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Go 以太坊的更快衍生品,專注於歸檔節點_ +- [Golem](https://github.com/golemfactory/golem) - _Golem 正在建立一個算力全球市場_ +- [Quorum](https://github.com/jpmorganchase/quorum) - _支援資料隱私的許可制以太坊實作_ +- [Prysm](https://github.com/prysmaticlabs/prysm) - _以太坊「Serenity」2.0 Go 實作_ +- [Eth Tweet](https://github.com/kyokan/plasma) - _去中心化 Twitter:在以太坊區塊鏈上執行的微型部落格服務_ +- [Plasma MVP Golang](https://github.com/kyokan/plasma) — _Golang 實作以及最小可行性 Plasma 規範的擴展_ +- [Open Ethereum Mining Pool](https://github.com/sammy007/open-ethereum-pool) - _以太坊開源礦池_ +- [Ethereum HD Wallet](https://github.com/miguelmota/go-ethereum-hdwallet) - _使用 Go 的 Ethereum 硬體錢包衍生品_ +- [Multi Geth](https://github.com/multi-geth/multi-geth) - _支援多種以太坊網路_ +- [Geth Light Client](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _輕量級以太坊子協定的 Geth 實作_ +- [以太坊 Golang 軟體開發套件](https://github.com/everFinance/goether) - _使用 Golang 的簡單以太坊錢包實作和公用程式_ +- [Covalent Golang 軟體開發套件](https://github.com/covalenthq/covalent-api-sdk-go) - _透過 Go 軟體開發套件高效率存取 200 多個區塊鏈的資料_ + +想取得更多資源? 請查看 [ethereum.org/developers](/developers/) + +## Go 社群貢獻者 {#go-community-contributors} + +- [Geth Discord](https://discordapp.com/invite/nthXNEv) +- [Geth Gist](https://gitter.im/ethereum/go-ethereum) +- [Gophers Slack](https://invite.slack.golangbridge.org/) - [#以太坊頻道](https://gophers.slack.com/messages/C9HP1S9V2) +- [StackExchange - 以太坊](https://ethereum.stackexchange.com/) +- [Multi Geth Gitter](https://gitter.im/ethoxy/multi-geth) +- [Ethereum Gitter](https://gitter.im/ethereum/home) +- [Geth light Client Gitter](https://gitter.im/ethereum/light-client) + +## 其他彙總列表 {#other-aggregated-lists} + +- [Awesome Ethereum](https://github.com/btomashvili/awesome-ethereum) +- [Consensys:以太坊開發者工具的最終清單](https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974) | [GitHub 來源](https://github.com/ConsenSys/ethereum-developer-tools-list) diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/index.md new file mode 100644 index 00000000000..a18a3d8dacd --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/index.md @@ -0,0 +1,29 @@ +--- +title: 程式語言 +description: +lang: zh-tw +--- + +常見的誤解是,開發者必須編寫[智慧型合約](/developers/docs/smart-contracts/)才能在以太坊上構建。 這是錯誤的。 以太坊網路和社群的優點之一是幾乎可以使用任何程式設計語言[參與](/community/)其中。 + +以太坊及其社群推崇開放原始碼。 你能找到各種語言的社群專案:用戶端實作、應用程式介面、開發架構、測試工具。 + +## 選擇你的語言 {#data} + +選擇你的程式設計語言以尋找專案、資源和虛擬社群: + +- [Dart開發者適用的 Ethereum 資源](/developers/docs/programming-languages/dart/) +- [Delphi 開發者適用的Ethereum 資源](/developers/docs/programming-languages/delphi/) +- [.NET 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/dot-net/) +- [Go 開發者適用的以太坊資源](/developers/docs/programming-languages/golang/) +- [Java 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/java/) +- [JavaScript 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/javascript/) +- [Python 開發者適用的以太坊資源](/developers/docs/programming-languages/python/) +- [Ruby 開發者適用的以太坊資源](/developers/docs/programming-languages/ruby/) +- [Rust 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/rust/) + +### 如果我的語言不受支援,該怎麼辦 {#other-lang} + +如果想連結到資源或指向其他程式設計語言的虛擬社區,可以透過[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new/choose)來請求新頁面。 + +如果只是想使用目前不支援的語言編寫程式碼來連結區塊鏈, 可以使用 [JSON-RPC 介面](/developers/docs/apis/json-rpc/)連結到以太坊網路。 任何可以 使用 TCP/IP 的程式設計語言都可以使用該介面。 diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/java/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/java/index.md new file mode 100644 index 00000000000..7ed8da743d6 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/java/index.md @@ -0,0 +1,65 @@ +--- +title: Java 開發者適用的以太坊資源 +description: 學習如何使用 Java 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 Java 型專案和工具進行以太坊開發 + +使用以太坊建立去中心化應用程式(或稱「dapp」),發揮加密貨幣和區塊鏈技術的優勢。 這些去中心化應用程式是可信的,這意味著一旦部署到以太坊後,它們就會始終按照設定執行。 這些應用程式可以控制數位資產,以便建立新型金融應用程式。 這些應用程式是去中心化的,這意味著任何單一實體或個人都無法控制它們,並且應用程式幾乎不可能被審查。 + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Java 與以太坊** + +需要先看看更基礎的入門指南? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [瞭解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編譯和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 使用以太坊用戶端 {#working-with-ethereum-clients} + +學習如何使用兩種先進的 Java 以太坊用戶端 [Web3J](https://github.com/web3j/web3j) 和 Hyperledger Besu + +- [使用 Java 、Eclipse 和 Web3J 連線以太坊用戶端](https://kauri.io/article/b9eb647c47a546bc95693acc0be72546/connecting-to-an-ethereum-client-with-java-eclipse-and-web3j) +- [使用 Java 和 Web3j 管理以太坊帳戶](https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3j) +- [從智慧型合約產生 Java 包裝函式](https://kauri.io/article/84475132317d4d6a84a2c42eb9348e4b/generate-a-java-wrapper-from-your-smart-contract) +- [與以太坊智慧型合約互動](https://kauri.io/article/14dc434d11ef4ee18bf7d57f079e246e/interacting-with-an-ethereum-smart-contract-in-java) +- [偵聽以太坊智慧型合約事件](https://kauri.io/article/760f495423db42f988d17b8c145b0874/listening-for-ethereum-smart-contract-events-in-java) +- [使用 Linux 下的 Java 以太坊用戶端 Besu (Pantheon)](https://kauri.io/article/276dd27f1458443295eea58403fd6965/using-pantheon-the-java-ethereum-client-with-linux) +- [在 Java 整合測試中執行 Hyperledger Besu (Pantheon) 節點](https://kauri.io/article/7dc3ecc391e54f7b8cbf4e5fa0caf780/running-a-pantheon-node-in-java-integration-tests) +- [Web3j 速查表](https://kauri.io/web3j-cheat-sheet-(java-ethereum)/5dfa1ea941ac3d0001ce1d90/c) + +學習如何使用非同步高效能 Kotlin 程式庫 [ethers-kt](https://github.com/Kr1ptal/ethers-kt),用來與基於以太坊虛擬機的區塊鏈互動。 針對 JVM 和 Android 平台。 +- [傳送 ERC20 代幣](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/abi/TransferERC20.kt) +- [通過偵聽事件實現 UniswapV2 兌換](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/tokenswapwitheventlistening/TokenSwapWithEventListening.kt) +- [以太幣 / ERC20 餘額追蹤器](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/balancetracker/BalanceTracker.kt) + +## 中階文章 {#intermediate-articles} + +- [使用星際檔案系統在 Java 應用程式中管理存儲](https://kauri.io/article/3e8494f4f56f48c4bb77f1f925c6d926/managing-storage-in-a-java-application-with-ipfs) +- [使用 Web3j 在 Java 中管理 ERC20 代幣](https://kauri.io/article/d13e911bbf624108b1d5718175a5e0a0/manage-erc20-tokens-in-java-with-web3j) +- [Web3j 交易管理程式](https://kauri.io/article/4cb780bb4d0846438d11885a25b6d7e7/web3j-transaction-managers) + +## 進階使用模式 {#advanced-use-patterns} + +- [使用 Eventeum 建置 Java 智慧型合約資料快取](使用 Eventeum 構建Java 智慧型合約數據緩存) + +## Java 專案和工具 {#java-projects-and-tools} + +- [Hyperledger Besu (Pantheon)(以太坊用戶端)](https://docs.pantheon.pegasys.tech/en/stable/) +- [Web3J(用來與以太坊用戶端互動的程式庫)](https://github.com/web3j/web3j) +- [ethers-kt(適用於基於以太坊虛擬機的區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。)](https://github.com/Kr1ptal/ethers-kt) +- [Eventeum(事件偵聽程式)](https://github.com/ConsenSys/eventeum) +- [Mahuta(星際檔案系統開發者工具)](https://github.com/ConsenSys/mahuta) + +想取得更多資源? 請參考 [ethereum.org/developers。](/developers/) + +## Java 社群貢獻者 {#java-community-contributors} + +- [IO Builders](https://io.builders) +- [Kauri](https://kauri.io) +- [Besu HL 聊天室](https://chat.hyperledger.org/channel/besu) diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/javascript/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/javascript/index.md new file mode 100644 index 00000000000..efaac18d40a --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/javascript/index.md @@ -0,0 +1,73 @@ +--- +title: JavaScript 開發者適用的以太坊資源 +description: 學習如何使用 JavaScript 型專案和工具進行以太坊開發。 +lang: zh-tw +--- + +JavaScript 是以太坊生態系統中最常用的語言之一。 事實上,有[團隊](https://github.com/ethereumjs)致力於將盡可能多的以太坊內容引入 JavaScript。 + +有機會在[堆疊的所有層級](/developers/docs/ethereum-stack/)編寫 JavaScript(或類似內容)。 + +## 與以太坊互動 {#interact-with-ethereum} + +### Javascript 應用程式介面程式庫 {#javascript-api-libraries} + +如果想編寫 JavaScript 來查詢區塊鏈、傳送交易等,最方便的方法是使用 [JavaScript 應用程式介面程式庫](/developers/docs/apis/javascript/)。 這些應用程式介面讓開發者能夠輕鬆與[以太坊網路中的節點](/developers/docs/nodes-and-clients/)進行互動。 + +你可以使用這些程式庫與以太坊上的智慧型合約進行互動,因此可以構建一個去中心化應用程式,在此去中心化應用程式中,你只需使用 JavaScript 就能夠與預先存在的合約進行互動。 + +**查看** + +- [Web3.js](https://web3js.readthedocs.io/) +- [Ethers.js](https://docs.ethers.io/) _– 包含 JavaScript 和 TypeScript 的以太坊錢包實作和公用程式。_ +- [viem](https://viem.sh) – 以太坊的 TypeScript 介面,提供用於與以太坊互動的低階無狀態基元。 + +### 智慧型合約 {#smart-contracts} + +如果你是 JavaScript 開發者,並打算編寫自己的智慧型合約,那你會想瞭解 [Solidity](https://solidity.readthedocs.io)。 這是最常用的智慧型合約語言,它在語法上與 JavaScript 類似,因而可能更容易學習。 + +更多[智慧型合約](/developers/docs/smart-contracts/)相關資訊。 + +## 理解協定 {#understand-the-protocol} + +### 以太坊虛擬機 {#the-ethereum-virtual-machine} + +[以太坊虛擬機](/developers/docs/evm/)有 JavaScript 實作。 該虛擬機支援最新的分叉規則。 分叉規則是指由於計劃的升級而對以太坊虛擬機所做的變更。 + +分叉規則分為各種 JavaScript 包,可以查看這些包取得更深入的理解: + +- 帳戶 +- 區塊 +- 區塊鏈本身 +- 交易紀錄 +- 和更多相關內容... + +這將幫助你理解「帳戶的資料結構是什麼?」等問題。 + +如果你喜歡閱讀程式碼,此 JavaScript 可能是閱讀我們文件的絕佳替代方案。 + +**請查看 monorepo** +[`ethereumjs`](https://github.com/ethereumjs/ethereumjs-vm) + +### 節點和客戶 {#nodes-and-clients} + +目前正在開發的 Ethereum.js 讓你能夠深入瞭解以太坊用戶端如何用你理解的語言 JavaScript 運作! + +它曾經托管於獨立的[`儲存庫`](https://github.com/ethereumjs/ethereumjs-client)中,但後來作為一個包被併入 EthereumVM monorepo 中。 + +**請查看用戶端** +[`ethereumjs-client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client) + +## 其他專案 {#other-projects} + +以太坊 JavaScript 領域也發生了許多其他事情,包括: + +- 錢包公用程式程式庫。 +- 用於產生匯入和匯出以太坊金鑰的工具。 +- `merkle-patricia-tree` 的實作 – 以太坊黃皮書中概述的資料結構。 + +在 [EthereumJS repo](https://github.com/ethereumjs) 深入瞭解你感興趣的任何內容 + +## 了解更多 {#further-reading} + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/python/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/python/index.md new file mode 100644 index 00000000000..1cc55207439 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/python/index.md @@ -0,0 +1,90 @@ +--- +title: Python 開發者適用的以太坊資源 +description: 學習如何使用 Python 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 Python 型專案和工具進行以太坊開發 + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Python 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者文章 {#beginner-articles} + +- [以太坊 (Python) 開發者指南](https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/) +- [2023 年報告 Python 在區塊鏈中的狀態](https://tradingstrategy.ai/blog/the-state-of-python-in-blockchain-in-2023) +- [使用 Vyper 的智慧型合約簡介](https://kauri.io/#collections/Getting%20Started/an-introduction-to-smart-contracts-with-vyper/) +- [使用 Pyhthon 及 Brownie 來部署你自己的 ERC20 代幣](https://betterprogramming.pub/python-blockchain-token-deployment-tutorial-create-an-erc20-77a5fd2e1a58) +- [如何使用 Python Flask 開發 Ethereum 合約?](https://medium.com/coinmonks/how-to-develop-ethereum-contract-using-python-flask-9758fe65976e) +- [Web3.py 簡介 · Python 開發者適用的 Ethereum 資源](https://www.dappuniversity.com/articles/web3-py-intro) +- [如何使用 Python 和 web3.py 叫用智慧型合約函數?](https://stackoverflow.com/questions/57580702/how-to-call-a-smart-contract-function-using-python-and-web3-py) + +## 中階文章 {#intermediate-articles} + +- [適用 Python 程式設計者的去中心化應用程式開發](https://levelup.gitconnected.com/dapps-development-for-python-developers-f52b32b54f28) +- [建立 Python 以太坊介面:第 1 部分](https://hackernoon.com/creating-a-python-ethereum-interface-part-1-4d2e47ea0f4d) +- [使用 Python 編寫的以太坊智慧型合約:完整(不確定)指南](https://hackernoon.com/ethereum-smart-contracts-in-python-a-comprehensive-ish-guide-771b03990988) +- [使用 Brownie 和 Python 部屬智慧型合約](https://dev.to/patrickalphac/using-brownie-for-to-deploy-smart-contracts-1kkp) +- [使用 Brownie 於 OpenSea 建立非同質化代幣](https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/) + +## 進階使用模式 {#advanced-use-patterns} + +- [使用 Python 編譯、部署和呼叫以太坊智慧型合約](https://yohanes.gultom.id/2018/11/28/compiling-deploying-and-calling-ethereum-smartcontract-using-python/) +- [使用 Slither 分析 Solidity 智慧型合約](https://kauri.io/#collections/DevOps/analyze-solidity-smart-contracts-with-slither/#analyze-solidity-smart-contracts-with-slither) +- [區塊鏈金融科技教學:使用 Python 實作借貸](https://blog.chain.link/blockchain-fintech-defi-tutorial-lending-borrowing-python/) + +## Python 專案和工具 {#python-projects-and-tools} + +### 使用中: {#active} + +- [Web3.py](https://github.com/ethereum/web3.py) - _用於與以太坊互動的 Python 程式庫_ +- [Vyper](https://github.com/ethereum/vyper/) - _用於以太坊虛擬機的 Python 智慧型合約語言_ +- [Ape](https://github.com/ApeWorX/ape) - _ Python 程式人員、資料科學家和安全性專業人員適用的智慧合約開發工具_ +- [py-evm](https://github.com/ethereum/py-evm) - _以太坊虛擬機實作_ +- [eth-tester](https://github.com/ethereum/eth-tester) - _基於以太坊的應用程式的測試工具_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _使用 Ethereum 相關程式碼庫的公用程式函數_ +- [py-solc-x](https://pypi.org/project/py-solc-x/) - _適用於 solc solidity 編譯器(支援 0.5.x)的 Python 包裝函式_ +- [pymaker](https://github.com/makerdao/pymaker) - _用於 Maker 合約的 Python 應用程式介面_ +- [siwe](https://github.com/spruceid/siwe-py) - _用於 Python 的以太坊 (siwe) 登入_ +- [用於以太坊整合的 Web3 去中心化金融](https://github.com/tradingstrategy-ai/web3-ethereum-defi) - _一個預先整合 ERC-20、Uniswap 和其他受歡迎專案的 Python 包_ +- [Wake](https://getwake.io) - _用於合約測試、初略模糊、部署、漏洞掃描和程式碼導航的一體化 Python 框架(語言伺服器 - [Solidity 工具](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity))_ + +### 已歸檔/不再維護: {#archived--no-longer-maintained} + +- [Trinity](https://github.com/ethereum/trinity) - _以太坊 Python 用戶端_ +- [Mamba](https://github.com/arjunaskykok/mamba) - _用於編寫、編譯和部署使用 Vyper 語言編寫的智慧型合約的架構_ +- [Brownie](https://github.com/eth-brownie/brownie) - _用於部署、測試和與以太坊智慧型合約互動的 Python 框架_ +- [pydevp2p](https://github.com/ethereum/pydevp2p) - _以太坊點對點堆疊的實作_ +- [py-wasm](https://github.com/ethereum/py-wasm) - _網路組件解釋器 Python 實作_ + +想取得更多資源? 請查看 [ethereum.org/developers](/developers/)。 + +## 使用 Python 工具的專案 {#projects-using-python-tooling} + +以下基於以太坊的專案使用本頁提到的工具。 相關的開放原始碼儲存庫可以作為範例程式碼的良好參考和最佳做法。 + +- [Yearn Finance](https://yearn.finance/) 及 [Yearn Vault 合約儲存庫](https://github.com/yearn/yearn-vaults) +- [Curve](https://curve.fi/) 及 [Curve 智慧型合約儲存庫](https://github.com/curvefi/curve-contract) +- [BadgerDAO](https://badger.com/) 及 [使用 Brownie 工具鏈的智慧型合約](https://github.com/Badger-Finance/badger-system) +- [Sushi](https://sushi.com/) 使用 [Python 管理和部署其歸屬合約](https://github.com/sushiswap/sushi-vesting-protocols) +- [ Alpha Finance](https://alphafinance.io/) 以 Alpha Homora 聞名,使用 [Brownie 測試和部署智慧型合約](https://github.com/AlphaFinanceLab/alpha-staking-contract) + +## Python 社群討論 {#python-community-contributors} + +- [以太坊 Python 社群 Discord](https://discord.gg/9zk7snTfWe),可討論 Web3.py 與其他 Python 架構 +- [Vyper Discord](https://discord.gg/SdvKC79cJk) ,可討論 Vyper 智慧型合約程式設計語言 + +## 其他彙總清單 {#other-aggregated-lists} + +Vyper 維基百科提供[完善的 Vyper 資源清單](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) \ No newline at end of file diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/ruby/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/ruby/index.md new file mode 100644 index 00000000000..d9865a9bfde --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/ruby/index.md @@ -0,0 +1,61 @@ +--- +title: Ruby 開發者適用的以太坊資源 +description: 學習使用 Ruby 型專案和工具進行以太坊開發。 +lang: zh-tw +incomplete: false +--- + +學習使用 Ruby 型專案和工具進行以太坊開發。 + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式是無需信任的,這意味著一旦部署到以太坊後,就會始終按程式執行。 它們可以控制數位資產來建立新型的金融應用程式。 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Ruby 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者文章 {#beginner-articles} + +- [終於理解以太坊帳戶](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [使用 MetaMask 最終驗證 Rails 使用者](https://dev.to/q9/finally-authenticating-rails-users-with-metamask-3fj) +- [Sign-In with Ethereum - Ruby 程式庫和 Rails 範例發佈](https://blog.spruceid.com/sign-in-with-ethereum-ruby-library-release-and-rails-examples/) +- [如何使用 Ruby 連接到以太坊網路](https://www.quicknode.com/guides/web3-sdks/how-to-connect-to-the-ethereum-network-using-ruby) +- [如何使用 Ruby 產生新的以太坊地址](https://www.quicknode.com/guides/web3-sdks/how-to-generate-a-new-ethereum-address-in-ruby) + +## 中階文章 {#intermediate-articles} + +- [使用 Ruby 編寫的區塊鏈應用程式](https://www.nopio.com/blog/blockchain-app-ruby/) +- [使用 Ruby 連接到以太坊來執行智慧型合約](https://titanwolf.org/Network/Articles/Article?AID=87285822-9b25-49d5-ba2a-7ad95fff7ef9) + +## Rust 專案和工具 {#ruby-projects-and-tools} + +### 使用中 {#active} + +- [eth.rb](https://github.com/q9f/eth.rb) - _Ruby 程式庫與遠端程序呼叫用戶端,用於處理以太坊帳戶、訊息以及交易_ +- [keccak.rb](https://github.com/q9f/keccak.rb) - _以太坊使用的 Keccak (SHA3) 雜湊值_ +- [siwe-ruby](https://github.com/spruceid/siwe-ruby) - _Sign-In with Ethereum的 Ruby 實作_ +- [siwe_rails](https://github.com/spruceid/siwe_rails) - _添加 SIWE 本地登入路由的 Rails gem_ +- [siwe-rails-examples](https://github.com/spruceid/siwe-rails-examples) - _使用 Ruby on Rails 的 SIWE 範例(含自訂控製器)_ +- [omniauth-siwe](https://github.com/spruceid/omniauth-siwe) - _面向 Sign In With Ethereum (SIWE) 的 OmniAuth 策略_ +- [omniauth-nft](https://github.com/valthon/omniauth-nft) - _面向通過非同質化代幣所有權進行身份驗證的 OmniAuth 策略_ +- [ethereum-on-rails](https://github.com/q9f/ethereum-on-rails) - _Ethereum on Rails 範本,允許將 MetaMask 連結到 Ruby on Rails_ + +### 已歸檔/不再維護 {#archived--no-longer-maintained} + +- [web3-eth](https://github.com/spikewilliams/vtada-ethereum) - _使用 Ruby 呼叫以太坊節點的遠端程序遠呼叫方法_ +- [ethereum_tree](https://github.com/longhoangwkm/ethereum_tree) - _用於根據 BIP32 標準從分層確定性錢包產生以太幣地址的 Ruby 程式庫_ +- [etherlite](https://github.com/budacom/etherlite) - _Ruby on Rails 的以太坊整合_ +- [ethereum.rb](https://github.com/EthWorks/ethereum.rb) - _使用 JSON-RPC 介面傳送交易、建立合約並與之互動的 Ruby 以太坊用戶端以及可使用以太坊節點的有用工具組_ +- [omniauth-ethereum.rb](https://github.com/q9f/omniauth-ethereum.rb) - _實作面向 OmniAuth 的以太坊提供者策略_ + +想取得更多資源? 請查看[開發者首頁](/developers/)。 + +## Ruby 社群貢獻者 {#ruby-community-contributors} + +[以太坊 Ruby Telegram 群組](https://t.me/ruby_eth)是一個快速發展的社群,是討論上述任何專案和相關主題的專用資源。 diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/rust/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/rust/index.md new file mode 100644 index 00000000000..25e1afbcdce --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/rust/index.md @@ -0,0 +1,64 @@ +--- +title: Rust 開發者適用的以太坊資源 +description: 學習如何使用 Rust 型專案和工具進行以太坊開發 +lang: zh-tw +incomplete: true +--- + +學習如何使用 Rust 型專案和工具進行以太坊開發 + +使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 + +## 智慧型合約及 Solidity 語言入門 {#getting-started-with-smart-contracts-and-solidity} + +**邁出第一步,整合 Rust 與以太坊** + +需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 + +- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## 初學者文章 {#beginner-articles} + +- [選擇以太坊用戶端](https://www.trufflesuite.com/docs/truffle/reference/choosing-an-ethereum-client) +- [Rust 以太坊用戶端](https://openethereum.github.io/) \* **請注意 OpenEthereum [已棄用](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd)且不再維護。**如欲使用此用戶端,請小心謹慎,最好改用其他用戶端實作。 +- [使用 Rust 向以太坊傳送交易](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/) +- [使用 Rust 為 Kovan 編寫 Wasm 合約的逐步教學](https://github.com/paritytech/pwasm-tutorial) + +## 中階文章 {#intermediate-articles} + +## 進階使用模式 {#advanced-use-patterns} + +- [與類 Ethereum 網路互動的 pwasm_ethereum 外部程式庫](https://github.com/openethereum/pwasm-ethereum) +- [使用 JavaScript 和 Rust 建置去中心化聊天室](https://medium.com/perlin-network/build-a-decentralized-chat-using-javascript-rust-webassembly-c775f8484b52) +- [使用 Vue.js 和 Rust 建置去中心化待辦事項應用程式](https://medium.com/@jjmace01/build-a-decentralized-todo-app-using-vue-js-rust-webassembly-5381a1895beb) + +- [使用 Rust 構建區塊鏈](https://blog.logrocket.com/how-to-build-a-blockchain-in-rust/) + +## Rust 專案和工具 {#rust-projects-and-tools} + +- [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _與類以太坊網路互動的外部程式庫集合_ +- [Lighthouse](https://github.com/sigp/lighthouse) - _快速以太坊共識層用戶端_ +- [ Ethereum WebAssembly](https://ewasm.readthedocs.io/en/mkdocs/) - _對以太坊智慧型合約執行層提議的重新設計,使用了 WebAssembly 的確定性子集_ +- [oasis_std](https://docs.rs/oasis-std/latest/oasis_std/index.html) - _OASIS 應用程式介面參考_ +- [Solaris](https://github.com/paritytech/sol-rs) - _使用原生 Parity 用戶端以太坊虛擬機的 Solidity 智慧型合約單元測試框架。_ +- [SputnikVM](https://github.com/rust-blockchain/evm) - _Rust 以太坊虛擬機實作_ +- [rust-web3](https://github.com/tomusdrw/rust-web3) - _ 使用 Rust 語言的 Wavelet 智慧型合約_ +- [Foundry](https://github.com/foundry-rs/foundry) - _以太坊應用程式開發工具組_ +- [Alloy](https://alloy.rs) - _高效能、經過充分測試和有記載的程式庫,用於與以太坊及其他基於以太坊虛擬機的鏈進行互動。_ +- [Ethers_rs](https://github.com/gakonst/ethers-rs) - _以太坊程式庫和錢包實作_ +- [SewUp](https://github.com/second-state/SewUp) - _程式庫,正如普通後端開發一樣,能夠協助使用 Rust 語言構建以太坊 Webassembly 合約_ +- [Substreams](https://github.com/streamingfast/substreams) - _平行化區塊鏈資料索引技術_ +- [Reth](https://github.com/paradigmxyz/reth) - Reth(Rust 以太坊的簡稱)是新的以太坊全節點實作 +- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _在以太坊生態系統中用 Rust 編寫的專案精選集合_ + +想取得更多資源? 請查看 [ethereum.org/developers](/developers/)。 + +## Rust 社群貢獻者 {#rust-community-contributors} + +- [Ethereum WebAssembly](https://gitter.im/ewasm/Lobby) +- [Oasis Gitter](https://gitter.im/Oasis-official/Lobby) +- [Parity Gitter](https://gitter.im/paritytech/parity) +- [Enigma](https://discord.gg/SJK32GY) diff --git a/public/content/translations/zh-tw/developers/docs/scaling/index.md b/public/content/translations/zh-tw/developers/docs/scaling/index.md new file mode 100644 index 00000000000..6f70492c4d6 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/scaling/index.md @@ -0,0 +1,114 @@ +--- +title: 擴張 +description: 介紹以太坊社群目前正在開發的多種擴張方案。 +lang: zh-tw +sidebarDepth: 3 +--- + +## 擴張方案概覽 {#scaling-overview} + +隨著以太坊使用者數量暴增,該區塊鏈已抵達一定程度的處理能力極限。 這大幅提高了使用該網路所需的費用,引發了對「擴展解決方案」的需求。 目前正在研究、試驗和實作多種解決方案,採取不同的方法實現相似的目標。 + +可擴展性的主要目標是在不犧牲去中心化或安全性的情況下,提高交易速度(更快的最終性)和交易吞吐量(更高的每秒交易數)(更多資訊,請參閱[以太坊願景](/roadmap/vision/))。 在一層網路以太坊區塊鏈上,高需求導致交易速度下降和難以維繫的[燃料價格](/developers/docs/gas/)。 從速度和吞吐量方面提高網路處理能力,將成為促進以太坊廣泛運用的重要基礎。 + +雖然速度及吞吐量極為重要,但擴張解決方案在實現這些目標的同時保持去中心化和安全也很重要。 降低節點營運者的進入門檻,對於防止算力的中心化和非安全化演進至關重要。 + +概念上,我們首先將擴張歸為兩種類型:鏈上擴張和鏈外擴張. + +## 基本資訊 {#prerequisites} + +你需要全面了解以太坊的所有基礎概念。 擴張解決方案的實作尚未被廣泛接受,因為該技術較少歷經實戰檢驗,並且仍在研究和開發中。 + +## 鏈上擴張 {#on-chain-scaling} + +鏈上擴張需要更改以太坊協定(一層網路[主網](/glossary/#mainnet))。 長期以來,區塊鏈分片被寄望於擴張以太坊。 分片涉及將區塊鏈分割成單獨的片段(分片),並由部分驗證者進行驗證。 然而,透過二層網路卷軸進行擴張已經取而代之,成爲首要的擴張技術。 為了支援這一點,我們增加了一種新的較便宜的資料形式附加到以太坊區塊,該資料專門為了降低使用者使用卷軸的成本而設計。 + +### 分片 {#sharding} + +分片是分割資料庫的過程。 部分驗證者將負責單獨的分片,而無需追蹤整個以太坊。 分片曾長期居於以太坊[開發藍圖](/roadmap/)之上,並且在合併至權益證明之前一度計劃上線。 然而,[二層網路卷軸](#layer-2-scaling)的快速發展和 [Danksharding](/roadmap/danksharding) 的發明(將卷軸資料的二進位大型物件新增至可由驗證者非常高效地進行驗證的以太坊區塊),致使以太坊社群更傾向於采用以卷軸為中心的擴張,而不是透過分片擴張。 這也會有助於使以太坊的共識邏輯更為簡單。 + +## 鏈外擴張 {#off-chain-scaling} + +鏈外擴張與一層網路主網分開實作 - 它們不需要變更現有的以太坊協定。 一些被稱爲「二層網路」的解決方案,直接從一層網路以太坊共識獲得安全性,例如[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)、[零知識證明卷軸](/developers/docs/scaling/zk-rollups/)或[狀態通道](/developers/docs/scaling/state-channels/)。 其他解決方案涉及建立獨立於主網獲取安全性的各種形式的新鏈,例如[側鏈](#sidechains)、[Validium](#validium) 或 [Plasma 鏈](#plasma)。 這些解決方案與主網通訊,但以不同方式獲取其安全性以實現不同的目標。 + +### 二層網路擴張 {#layer-2-scaling} + +此類鏈外解決方案從以太坊主網獲取安全性。 + +二層網路是一種統稱,用於描述那些旨在透過在以太坊主網(一層網路)之外處理交易,同時利用主網强大的去中心化安全模型來幫助擴張應用程式的解決方案。 當網路堵塞時,交易速度會受到影響,這會使某些類型的去中心化應用程式的用戶體驗變差。 而且隨著網路更加堵塞,交易送發者需要用高價燃料費來標取處理優先權,導致燃料費漲價。 這會讓使用以太坊非常昂貴。 + +多數二層網路解決方案以一個伺服器或伺服器叢集為中心,分別可以稱為節點、驗證者、營運者、排序者、區塊生成者或類似術語。 視具體實作而定,這些二層網路節點可能由使用它們的個人、企業或實體,或由第三方營運者或大型個人群體(類似於主網)運行。 一般而言,交易被提交至這些二層網路節點而非直接提交至一層網路(主網)。 對於某些解決方案,二層網路執行個體接著將交易分批成組並錨定至一層網路,然後再由一層網路提供保護且無法被更改。 詳細實際狀況將依不同二層網路技術和實現而有所差異。 + +特定二層網路執行個體可能是開放的並由多個應用程式共用,也可能由一個專案部署並專用於支援其應用程式。 + +#### 為何需要二層網路? {#why-is-layer-2-needed} + +- 增加每秒交易量會極大提升用戶體驗,並減少以太坊主網上的網路擁塞。 +- 多筆交易被彙總到單筆交易中傳送至以太坊主網,這為用戶減少了燃料費用,並使以太坊對所有人更加包容且易於存取。 +- 任何可擴性更新不應以損害去中心化或安全性為代價 - 二層網路建置于以太坊之上。 +- 一些二層網路有特定的應用領域,在大規模處理資產時有很高的效率。 + +[瞭解更多關於二層網路的資訊](/layer-2/)。 + +#### 卷軸 {#rollups} + +卷軸在一層網路之外執行交易,接著將資料發佈到一層網路並在其上達成共識。 當交易資料被包含到一層網路區塊時,這讓卷軸能夠受到原生以太坊安全性的保障。 + +依不同安全模式,有兩種類型的卷軸: + +- **樂觀卷軸**:假設交易在預設條件下有效,並且僅在遇到挑戰時透過[**詐欺證明**](/glossary/#fraud-proof)執行計算。 [有關樂觀卷軸的更多資訊](/developers/docs/scaling/optimistic-rollups/)。 +- **零知識卷軸**:在鏈外執行計算並提交[**有效性證明**](/glossary/#validity-proof)至鏈上。 [有關零知識卷軸的更多資訊](/developers/docs/scaling/zk-rollups/)。 + +#### 狀態通道 {#channels} + +狀態通道使用多簽合約,讓參與者能夠快速、自由地在鏈外交易,然後與主網達成最終性。 這會減少網路擁塞,降低費用並縮短處理延遲。 目前主要有兩種類型的通道:狀態通道和支付通道。 + +瞭解更多關於[狀態通道](/developers/docs/scaling/state-channels/)的資訊。 + +### 側鏈 {#sidechains} + +側鏈是一個與以太坊相容,並與以太坊主網平行運行的獨立區塊鏈。 側鏈透過雙向跨鏈橋與以太坊相容,並運行自己選定的共識規則及區塊參數。 + +瞭解更多關於[側鏈](/developers/docs/scaling/sidechains/)的資訊。 + +### Plasma {#plasma} + +Plasma 是一條獨立的區塊鏈,與以太坊主鏈錨定,並使用詐欺證明(像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)一樣)來仲裁爭議。 + +瞭解更多關於 [Plasma](/developers/docs/scaling/plasma/) 的資訊。 + +### Validium {#validium} + +Validium 鏈使用零知識證明卷軸一類的有效性證明,但不是將資料儲存在以太坊一層網路主鏈上。 每個 Validium 鏈能有每秒 10,000 筆交易的處理速度,多個 Validium 鏈能平行運作。 + +瞭解更多關於 [Validium](/developers/docs/scaling/validium/) 的資訊。 + +## 為何我們需要那麼多擴張解決方案? {#why-do-we-need-these} + +- 多個解決方案有助於減少網路任一部分的整體擁塞,並防止出現單一故障點。 +- 整體大於各部分的總和。 不同解決方案能共存並協調發揮效益,對未來的交易速度和吞吐量產生指數級影響。 +- 並非所有解決方案都需要直接使用以太坊共識演算法,替代機制或許能提供其他共識機制無法達成之好處。 +- 沒有一種擴張解決方案能夠完全滿足[以太坊願景](/roadmap/vision/)。 + +## 想透過視覺方式學習? {#visual-learner} + + + +_請注意,此影片中的解釋使用「二層網路」指代所有鏈外擴張解決方案,而我們將其區分為透過一層網路主網共識機制獲取安全性的鏈外解決方案。_ + + + +## 衍生閱讀 {#further-reading} + +- [以卷軸為中心的以太坊開發藍圖](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) _Vitalik Buterin_ +- [以太坊二層網路擴展解決方案最新分析](https://www.l2beat.com/) +- [評估以太坊二層網路擴張解決方案:比較框架](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) +- [卷軸之不完整指南](https://vitalik.eth.limo/general/2021/01/05/rollup.html) +- [以太坊驅動的零知識證明卷軸:業界佼佼者](https://hackmd.io/@canti/rkUT0BD8K) +- [樂觀卷軸與零知識證明卷軸](https://limechain.tech/blog/optimistic-rollups-vs-zk-rollups/) +- [零知識區塊鏈可擴展性](https://ethworks.io/assets/download/zero-knowledge-blockchain-scaling-ethworks.pdf) +- [爲什麽說卷軸 + 資料分片是提高可擴展性的唯一可持續解決方案](https://polynya.medium.com/why-rollups-data-shards-are-the-only-sustainable-solution-for-high-scalability-c9aabd6fbb48) +- [什麽類型的三層網路才有意義?](https://vitalik.eth.limo/general/2022/09/17/layer_3.html) +- [Data Availability Or: How Rollups Learned To Stop Worrying And Love Ethereum](https://ethereum2077.substack.com/p/data-availability-in-ethereum-rollups) + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git a/public/content/translations/zh-tw/developers/docs/scaling/optimistic-rollups/index.md b/public/content/translations/zh-tw/developers/docs/scaling/optimistic-rollups/index.md new file mode 100644 index 00000000000..c547ae35aa8 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/scaling/optimistic-rollups/index.md @@ -0,0 +1,269 @@ +--- +title: 樂觀卷軸 +description: 介紹零知識卷軸 — 一種以太坊社群使用的擴張解決方案。 +lang: zh-tw +--- + +樂觀卷軸是二層網路 (L2) 協定,旨在擴展以太坊基礎層的吞吐量。 它們透過在鏈外處理交易來減少以太坊主鏈上的計算,從而顯著提高處理速度。 與其他擴張解決方案(如[側鏈](/developers/docs/scaling/sidechains/))不同,樂觀卷軸從主網(透過在鏈上發佈交易結果)或 [Plasma 鏈](/developers/docs/scaling/plasma/)(該鏈還使用詐欺證明驗證以太坊主網上的交易,但將資料儲存在其他地方)獲取安全性。 + +由於計算是使用以太坊時緩慢且昂貴的部分,樂觀卷軸可以提供高達 10-100 倍的可擴展性提升。 樂觀卷軸還會將交易以 `calldata` 或[二進位大型物件](/roadmap/danksharding/)的形式寫入以太坊,從而降低使用者的燃料成本。 + +## 先備知識 {#prerequisites} + +你應該已經閲讀並理解我們關於[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2/)的頁面。 + +## 什麽是樂觀卷軸? {#what-is-an-optimistic-rollup} + +樂觀卷軸是一種擴張以太坊的方法,涉及將計算和狀態存儲遷移到鏈外。 樂觀卷軸在以太坊之外執行交易,但將交易資料作爲 `calldata` 或[二進位大型物件](/roadmap/danksharding/)發佈到主網。 + +樂觀卷軸營運者將多個鏈外交易捆綁到一個大批次中,然後將其提交到以太坊。 此方法可將固定成本分散到每一批次的多筆交易中,從而降低最終使用者的費用。 樂觀卷軸還使用壓縮技術來減少發佈在以太坊上的資料量。 + +樂觀卷軸之所以被認爲是「樂觀的」,是因爲其假設鏈外交易有效,並且不會針對發佈到鏈上的交易批次發佈有效性證明。 這區分了樂觀卷軸與[零知識卷軸](/developers/docs/scaling/zk-rollups),後者會發佈鏈外交易的加密[有效性證明](/glossary/#validity-proof)。 + +相反,樂觀卷軸依賴詐欺證明方案來偵測交易計算不正確的情況。 在以太坊上提交卷軸批次后,會有一個時間窗口(稱爲挑戰期),在此期間任何人都可以透過計算[詐欺證明](/glossary/#fraud-proof)來挑戰卷軸交易的結果。 + +如果詐欺證明成功,卷軸協定就會重新執行交易並相應地更新卷軸的狀態。 詐欺證明成功的另一個影響是,負責將錯誤執行的交易納入區塊的排序者會收到懲罰。 + +如果在挑戰期過後卷軸批次仍未被挑戰(即所有交易都正確執行),則它被視爲有效並在以太坊上被接受。 其他人可以繼續構建未經確認的卷軸區塊,但需要注意:交易結果如果以先前發佈的錯誤執行的交易為基礎,則會被撤銷。 + +## 樂觀卷軸如何與以太坊互動? {#optimistic-rollups-and-Ethereum} + +樂觀卷軸是爲了在以太坊上運作而構建的[鏈外擴張解決方案](/developers/docs/scaling/#off-chain-scaling)。 每個樂觀卷軸都由部署在以太坊網路上的一組智慧型合約來管理。 樂觀卷軸在以太坊主鏈之外處理交易,但將鏈外交易(按批次)發佈到鏈上的卷軸合約。 像以太坊區塊鏈一樣,此交易記錄是不可變的,並形成「樂觀卷軸鏈」。 + +樂觀卷軸的架構由以下部分組成: + +**鏈上合約**:樂觀卷軸的運作由在以太坊上執行的智慧型合約控制。 這包括用於存儲卷軸區塊、監控卷軸狀態更新以及追蹤使用者存款的合約。 從這種意義上講,以太坊充當樂觀卷軸的基礎層或「一層網路」。 + +**鏈外虛擬機 (VM)**:雖然管理樂觀卷軸協定的合約在以太坊上執行,但卷軸協定在[以太坊虛擬機](/developers/docs/evm/)之外的另一個虛擬機上執行計算和狀態存儲。 鏈外虛擬機是應用程式活躍和執行狀態變更的地方;它是樂觀卷軸的上層或「二層網路」。 + +由於樂觀卷軸旨在執行為以太坊虛擬機編寫或編譯的程式,因此鏈外虛擬機包含許多以太坊虛擬機設計規範。 此外,鏈上計算的詐欺證明讓以太坊網路可以强制執行在鏈外虛擬機中計算的狀態變更的有效性。 + +樂觀卷軸被描述為「混合擴張解決方案」,因爲儘管它們作爲單獨的協定存在,但其安全屬性來自以太坊。 除此之外,以太坊還能保證卷軸鏈外計算的正確性和計算後台資料的可用性。 這使得樂觀卷軸比不依賴以太坊獲取安全性的純鏈外擴張協定(如[側鏈](/developers/docs/scaling/sidechains/))更安全。 + +樂觀卷軸在以下方面依賴以太坊的主要協定: + +### 資料可用性 {#data-availability} + +如前所述,樂觀卷軸將交易資料以 `calldata` 或[二進位大型物件](/roadmap/danksharding/)的形式發佈到以太坊。 由於卷軸鏈的執行以提交的交易為基礎,任何人都可以使用在以太坊基礎層上錨定的此資訊,來執行卷軸的狀態並驗證狀態轉換的正確性。 + +[資料可用性](/developers/docs/data-availability/)至關重要,因爲如果不能存取狀態資料,挑戰者就無法構建詐欺證明來對無效的卷軸作業提出爭論。 透過以太坊提供資料可用性,卷軸營運者逃脫惡意行爲(如提交無效區塊)懲罰的風險就降低了。 + +### 審查阻力 {#censorship-resistance} + +樂觀卷軸也依賴以太坊來提供抗審查性。 在樂觀卷軸中,中心化實體(營運者)負責處理交易並將卷軸區塊提交到以太坊。 這會產生一些影響: + +- 卷軸營運者可以透過完全離綫或拒絕產生包含某些交易的區塊來審查使用者。 + +- 卷軸營運者可以透過扣留默克爾所有權證明所需的狀態資料,來阻止使用者提取存放在卷軸合約中的資金。 扣留狀態資料還可以向使用者隱匿卷軸的狀態,並阻止他們與卷軸進行互動。 + +樂觀卷軸透過迫使營運者在以太坊上發佈與狀態更新相關的資料來解決該問題。 在鏈上發佈卷軸資料有以下好處: + +- 如果樂觀卷軸營運者離線或停止產生交易批次,另一個節點可以使用可用資料來重現卷軸的最後狀態並繼續區塊生產。 + +- 使用者可以使用交易資料來建立默克爾證明,以證明資金的所有權,並從卷軸中提取他們的資產。 + +- 使用者也可以在一層網路提交交易,而不是提交給排序者,在這種情況下,排序者必須在一定時間限制内納入交易,以繼續生產有效的區塊。 + +### 結算 {#settlement} + +以太坊在樂觀卷軸背景下扮演的另一個角色是結算層。 結算層錨定整個區塊鏈生態系統,建立安全性,並在另一條鏈(在該實例中為樂觀卷軸)上發生需要仲裁的爭議時提供客觀的最終性. + +以太坊主網為樂觀卷軸提供了一個中樞,以驗證詐欺證明並解決爭議。 此外,在卷軸上進行的交易只有當區塊在以太坊上被接受_之後_才是最終的。 一旦卷軸交易被提交到以太坊的基礎層,它就無法回滾(除非在極不可能的情況下發生鏈重組)。 + +## 樂觀卷軸如何運作? {#how-optimistic-rollups-work} + +### 交易執行和彙總 {#transaction-execution-and-aggregation} + +使用者向「營運者」提交交易,「營運者」則是樂觀卷軸上負責處理交易的節點。 營運者也稱爲「驗證者」或「彙總者」,負責彙總交易、壓縮底層資料,並在以太坊上發佈區塊。 + +儘管任何人都可以成爲驗證者,但樂觀卷軸驗證者與[權益證明系統](/developers/docs/consensus-mechanisms/pos/)很像,必須在生成區塊之前提供保證金。 如果驗證者發佈了無效的區塊或構建了原有但無效的區塊(即使他們的區塊是有效的),該保證金可能會被罰沒。 透過這種方式,樂觀卷軸利用加密經濟激勵來確保驗證者誠實行事。 + +樂觀卷軸鏈上的其他驗證者預期使用他們的卷軸狀態複本來執行提交的交易。 如果驗證者的最終狀態與營運者建議的狀態不同,他們可以發起挑戰並計算詐欺證明。 + +一些樂觀卷軸可能會放棄無需許可的驗證者系統並使用單個「排序者」來執行鏈。 與驗證者一樣,排序者會處理交易、生成卷軸區塊,並將卷軸交易提交到一層網路鏈(以太坊)。 + +排序者與常規卷軸營運者不同,因爲他們對交易的順序有更大的控制權。 此外,排序者具有卷軸鏈的優先存取權,並且是唯一被授權向鏈上合約提交交易的實體。 來自非排序者節點或常規使用者的交易只會在一個單獨的收件匣中排隊,直到排序者將其納入一個新批次。 + +#### 提交卷軸區塊到以太坊 {#submitting-blocks-to-ethereum} + +如前所述,樂觀卷軸的營運者將鏈外交易捆綁為一個批次,並將其發送到以太坊進行公證。 該程序涉及壓縮與交易相關的資料,並將其作爲 `calldata` 或二進位大型物件發佈到以太坊上。 + +`calldata` 是智慧型合約中不可修改、非持久的區域,其行爲與[記憶體](/developers/docs/smart-contracts/anatomy/#memory)極為相似。 儘管 `calldata` 作爲區塊鏈[歷史日志](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs)的一部分持續不變,但它不會儲存爲以太坊狀態的一部分。 由於 `calldata` 不觸及以太坊狀態的任何部分,因此它比在鏈上儲存資料的狀態更便宜。 + +`calldata` 關鍵字也在 Solidity 中用於在執行時傳送參數到智慧型合約函式。 `calldata` 辨識在交易期間被調用的函式,並以任意位元組序列的形式保存函式的輸入。 + +在樂觀卷軸的背景下,`calldata` 被用於將壓縮的交易資料發送到鏈上合約。 卷軸營運者透過呼叫卷軸合約中所需的函式,並將壓縮資料作爲函式引數傳送,來添加新批次。 使用 `calldata` 可以降低使用者費用,因爲卷軸產生的大部分成本來自鏈上储存資料。 + +以下是卷軸批次提交的[一個示例](https://etherscan.io/tx/0x9102bfce17c58b5fc1c974c24b6bb7a924fb5fbd7c4cd2f675911c27422a5591),展示了此概念如何運作。 排序者叫用 `appendSequencerBatch()` 方法並使用 `calldata` 將壓縮的交易資料作爲輸入傳送。 + +一些卷軸現在使用二進位大型物件將交易批次發佈到以太坊。 + +二進位大型物件是不可修改且非持久的(就像 `calldata`),并會在約 18 天后從歷史记录中刪除。 有關二進位大型物件的更多資訊,請参阅 [Danksharding](/roadmap/danksharding)。 + +### 狀態承諾 {#state-commitments} + +在任何時間,樂觀卷軸狀態(帳戶、餘額、合約程式碼等)都被組織為[默克爾樹](/whitepaper/#merkle-trees),也稱爲「狀態樹」。 該默克爾樹的根(狀態根)引用卷軸的最新狀態,經過雜湊並儲存在卷軸合約中。 鏈上的每個狀態轉換都會產生一個新的卷軸狀態,營運者透過計算新的狀態根來提交該狀態。 + +營運者在發佈批次時需要同時提交舊狀態根和新狀態根。 如果舊狀態根與鏈上合約中現有的狀態根相符,則現有狀態根會被丟棄並替換爲新狀態根。 + +卷軸營運者還需要為交易批次本身提交默克爾根。 這讓任何人都能透過提供[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/),證明交易已納入批次中(在一層網路上)。 + +狀態承諾,尤其是狀態根,對於證明樂觀卷軸中的狀態變更正確性非常必要。 卷軸合約在發佈後會立即接受來自營運者的新狀態根,但之後可以刪除無效的狀態根,將卷軸復原到其正確狀態。 + +### 詐欺證明 {#fraud-proving} + +如前所述,樂觀卷軸讓任何人都可以在不提供有效性證明的情況下發佈區塊。 然而,爲了確保鏈保持安全,樂觀卷軸指定了一個時間窗口,在此期間任何人都可以對狀態轉換提出異議。 因此,卷軸區塊被稱爲「斷言」,因爲任何人都可以質疑其有效性。 + +如果有人對斷言提出異議,卷軸協定會啓動詐欺證明計算。 每種類型的詐欺證明都是互動式的 — 必須有人發佈斷言,然後另一個人才能對其提出挑戰。 區別在於計算詐欺證明需要多少輪互動。 + +單輪互動式證明方案在一層網路回放有爭議的交易,以偵測無效斷言。 卷軸協定使用驗證者合約模擬在一層網路(以太坊)上重新執行有爭議的交易,利用計算出的狀態根確定誰贏得挑戰。 如果挑戰者關於卷軸正確狀態的聲明是正確的,營運者就會受到懲罰,他們的保證金將被罰沒。 + +然而,在一層網路重新執行交易以偵測欺詐,需要發佈單獨交易的狀態承諾,並增加必須在鏈上發佈的資料卷軸。 回放交易還會產生巨大的燃料成本。 出於這些原因,樂觀卷軸正在轉換到多輪互動式證明,以更高的效率實現相同的目標(即偵測無效卷軸作業)。 + +#### 多輪互動式證明 {#multi-round-interactive-proving} + +多輪互動式證明涉及斷言者與挑戰者之間的往返協定,該協定由一層網路驗證者合約監督,最終確定説謊方。 二層網路節點對斷言提出挑戰后,斷言者需要將有爭議的斷言分成相等的兩半。 在這種情況下,每個單獨的斷言都會包含與另一個斷言一樣多的計算步驟。 + +然後挑戰者會選擇其想要挑戰的斷言。 劃分過程(稱爲「二等分協定」)一直持續到雙方就_單個_執行步驟的斷言發生爭議。 此時,一層網路合約會透過評估指示(及其結果)來解決爭議,以抓住欺詐方。 + +斷言者需要提供「一步證明」來驗證有爭議的單步計算的有效性。 如果斷言者未能提供一步證明,或者一層網路驗證者認爲證明無效,他們便會輸掉挑戰。 + +關於此類詐欺證明的一些注意事項: + +1. 多輪互動式詐欺證明被認爲是有效率的,因爲它能最大限度減少一層網路鏈在爭議仲裁中必須完成的工作。 一層網路鏈無需回放整個交易,而只需要重新執行卷軸執行過程中的一個步驟。 + +2. 二等分協定減少了發佈在鏈上的資料量(無需為每筆交易發佈狀態承諾)。 此外,樂觀卷軸交易不受以太坊燃料限制的約束。 相反,樂觀卷軸重新執行交易時必須確保二層網路交易具有較低的燃料限制,以模擬其在單筆以太坊交易中的執行。 + +3. 惡意斷言者的保證金一部分被獎勵給挑戰者,而另一部分則會被銷毀。 銷毀可以防止驗證者之間串通;如果兩個驗證者串通起來發起虛假挑戰,他們仍然會損失其全部質押的很大一部分。 + +4. 多輪互動式證明需要雙方(斷言者和挑戰者)在指定的時間窗口内行動。 未能在最後期限前采取行動會導致違約方喪失挑戰機會。 + +#### 爲什麽詐欺證明對於樂觀卷軸很重要 {#fraud-proof-benefits} + +詐欺證明很重要,因爲它們促進了樂觀卷軸中的_去信任最終性_。 去信任最終性是樂觀卷軸的一項品質,它保證交易只要有效,最終將會被確認。 + +惡意節點可以嘗試透過啓動虛假挑戰來延遲對有效卷軸區塊的確認。 然而,詐欺證明最終會證明卷軸區塊的有效性並使其得到確認。 + +這也與樂觀卷軸的另一個安全屬性有關:鏈的有效性依賴於_一個_誠實節點的存在。 誠實節點可以透過發佈有效斷言或對無效斷言提出異議來正確地推進鏈。 無論如何,與誠實節點發生爭議的惡意節點會在詐欺證明過程中失去其質押。 + +### 一層網路/二層網路的互操作性 {#l1-l2-interoperability} + +樂觀卷軸旨在與以太坊主網的互操作性,並允許使用者在一層網路和二層網路之間傳輸訊息和任意資料。 它們還與以太坊虛擬機兼容,因此你可以將現有的[去中心化應用程式](/developers/docs/dapps/)移植到樂觀卷軸,或使用以太坊開發工具建立新的去中心化應用程式。 + +#### 1. 資產轉移 {#asset-movement} + +##### 進入卷軸 + +爲了使用樂觀卷軸,使用者需要將以太幣、ERC-20 代幣和其他被接受的資產存入一層網路上卷軸的[跨鏈橋](/developers/docs/bridges/)合約中。 跨鏈橋合約會將交易轉送到二層網路,在那裏鑄造等量的資產並發送到使用者在樂觀卷軸上選擇的地址。 + +使用者生成的交易(如一層網路 > 二層網路存款)通常需要排隊,直到排序者將其重新提交到卷軸合約。 然而,爲了保持抗審查性,如果交易延遲超過允許的最大時間,樂觀卷軸將允許使用者直接向鏈上卷軸合約提交交易。 + +一些樂觀卷軸采用更簡單的方法來防止排序者審查使用者。 這時,區塊由自前一個區塊以來提交給一層網路合約的所有交易(如存款)以及卷軸鏈上已處理的交易共同定義。 如果排序者忽略一層網路交易,它將發佈(可證明)錯誤的狀態根;因此,一旦使用者產生的訊息被發佈在一層網路上,排序者就不能將其延遲。 + +##### 退出卷軸 + +由於詐欺證明方案,從樂觀卷軸提款到以太坊更加困難。 如果使用者發起一個二層網路 > 一層網路的交易以提取在一層網路上托管的資金,他們就必須等到挑戰期(持續約 7 天)結束。 盡管如此,提款過程本身相當簡單。 + +在二層網路上發起提款請求後,該交易會被納入下一個批次,同時使用者在卷軸上的資產被銷毀。 一旦批次在以太坊上發佈,使用者就可以計算一個默克爾證明,來驗證其退出交易是否納入到區塊中。 然後只需要等待延遲期過後最終確定一層網路上的交易,並將資金提取到主網。 + +爲了避免向以太坊提款之前等待一周的時間,樂觀卷軸使用者可以雇用一個**流動性提供者** (LP)。 流動性提供者承擔待處理的二層網路提款的所有權,並在一層網路上向使用者付款(以換取費用)。 + +流動性提供者可以在釋放資金之前檢查使用者提款請求的有效性(透過自行執行鏈)。 這樣他們就可以保證交易最終會得到確認(即去信任最終性)。 + +#### 2. 以太坊虛擬機 (EVM) 相容性 {#evm-compatibility} + +對於開發者來講,樂觀卷軸的優勢在於,它們與[以太坊虛擬機 (EVM)](/developers/docs/evm/) 的相容性(或者更確切地說,等效性)。 與以太坊虛擬機相容的卷軸符合[以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf)中的規範,並在位元組碼級別支援以太坊虛擬機。 + +樂觀卷軸中的以太坊虛擬機相容性具有以下好處: + +i. 開發者可以將以太坊上的現有智慧型合約遷移到樂觀卷軸鏈,而無需大量修改程式碼庫。 這可以節省開發團隊在二層網路上部署以太坊智慧型合約的時間。 + +ii. 使用樂觀卷軸的開發者和專案團隊可以利用以太坊的基礎設施。 這包括程式設計語言、程式碼庫、測試工具、用戶端軟體、部署基礎設施等。 + +使用現有工具很重要,因爲這些工具多年來已經過廣泛的審核、除錯和改進。 它還讓以太坊開發者不需要學習如何使用全新的開發堆棧建置應用程式。 + +#### 3. 跨鏈合約呼叫 {#cross-chain-contract-calls} + +使用者(外部擁有的帳戶)透過向卷軸合約提交交易或者讓排序者或驗證者為其提交交易,來與二層網路合約進行互動。 樂觀卷軸還讓以太坊上的合約帳戶可以與二層網路互動,使用跨鏈橋合約來轉送訊息,並在一層網路和二層網路之間傳遞資料。 這意味著你可以在以太坊主網上編寫一層網路合約,來叫用屬於二層網路樂觀卷軸合約的函式。 + +跨鏈合約呼叫是非同步發生的 — 這意味著呼叫首先啓動,然後再執行。 這與以太坊上兩個合約之間的呼叫不同,那種呼叫會立即產生結果。 + +跨鏈合約的一個範例是先前描述的代幣存款。 一層網路上的合約托管使用者的代幣,並向配對的二層網路合約發送訊息,以在卷軸中鑄造等量的代幣。 + +由於跨鏈訊息呼叫會導致合約執行,因此發送者通常需要支付用於計算的[燃料成本](/developers/docs/gas/)。 建議設定較高的燃料限制,以防止交易在目標鏈上失敗。 代幣跨鏈橋場景就是一個很好的範例:如果交易的一層網路端(存入代幣)有效,但二層網路端(鑄造新代幣)由於燃料不足而失敗,則存款將無法恢復。 + +最後,我們應該注意,合約之間的二層網路 > 一層網路訊息呼叫需要考慮延遲(一層網路 > 二層網路呼叫通常在幾分鐘後執行)。 這是因爲從樂觀卷軸發送到主網的訊息在挑戰窗口到期之前無法執行。 + +## 樂觀卷軸的費用如何計算? {#how-do-optimistic-rollup-fees-work} + +樂觀卷軸使用與以太坊非常相似的燃料費方案來表示使用者為每筆交易支付的費用。 樂觀卷軸收取的費用取決於以下組成部分: + +1. **狀態寫入**:樂觀卷軸將交易資料和區塊頭(由前一個區塊頭的雜湊、狀態根、批次根組成)作爲 `blob`,即「二進位大型物件」,發佈到以太坊。 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) 為鏈上納入資料引入了具成本效益的解決方案。 `blob` 是一個新交易欄位,讓卷軸可以將壓縮的狀態轉換資料發佈到以太坊一層網路。 與鏈上永久保留的 `calldata` 不同,二進位大型物件的生命周期很短,在 [4096 個時期](https://github.com/ethereum/consensus-specs/blob/81f3ea8322aff6b9fb15132d050f8f98b16bdba4/configs/mainnet.yaml#L147)(約 18 天)后即會被用戶端刪除。 透過使用二進位大型物件發佈壓縮的交易批次,樂觀卷軸可以顯著降低向一層網路寫入交易的成本。 + +2. **二進位大型物件燃料使用**:二進位大型物件攜帶的交易采用類似於 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 中引入的動態費用機制。 3 型交易的燃料費會考慮二進位大型物件的基本費用,該費用由網路根據二進位大型物件空間需求和所發送交易的二進位大型物件空間使用來決定。 + +3. **二層網路營運者費用**:這是支付給卷軸節點的金額,用於補償處理交易時產生的計算成本,與以太坊上的燃料費非常相似。 由於二層網路處理能力更强,並且不會出現網路擁塞迫使以太坊上的驗證者優先處理費用更高的交易,卷軸節點收取的交易費更低。 + +樂觀卷軸套用了多種機制來降低使用者的費用,包括批次交易和壓縮 `calldata` 來降低資料發佈成本。 你可以查看[二層網路費用追蹤器](https://l2fees.info/)來即時瞭解使用基於以太坊的樂觀卷軸的成本。 + +## 樂觀卷軸如何擴張以太坊? {#scaling-ethereum-with-optimistic-rollups} + +如前所述,樂觀卷軸在以太坊上發佈壓縮的交易資料,以保證資料可用性。 壓縮鏈上發佈的資料的能力,對於透過樂觀卷軸來擴張以太坊的吞吐量至關重要。 + +以太坊主鏈限制了區塊可容納的資料量,以燃料單位計價([平均區塊大小](/developers/docs/blocks/#block-size)為 1500 萬燃料)。 雖然這限制了每筆交易可以使用的燃料數量,但也意味著我們可以透過減少與交易相關的資料來增加每個區塊處理的交易 — 直接改進了可擴展性。 + +樂觀卷軸使用多種技術來實現交易資料壓縮並提高每秒交易數速率。 例如,這篇[文章](https://vitalik.eth.limo/general/2021/01/05/rollup.html)將基本使用者交易(發送以太幣)在主網上產生的資料量與相同交易在卷軸上產生的資料量進行了比較: + +| 參數 | 以太坊(一層網路) | 卷軸(二層網路) | +| ------ | ----------------- | ------------ | +| 隨機數 | ~3 | 0 | +| 燃料價格 | ~8 | 0-0.5 | +| 燃料 | 3 | 0-0.5 | +| 目標 | 21 | 4 | +| 數值 | 9 | ~3 | +| 簽名 | ~68 (2 + 33 + 33) | ~0.5 | +| 來源 | 0(從簽名恢復) | 4 | +| **總計** | **~112 個位元組** | **~12 個位元組** | + +對這些數字進行一些初略計算,有助於顯示樂觀卷軸提供的可擴展性改進: + +1. 每個區塊的目標大小為 1500 萬燃料,驗證一個位元組的資料需要 16 燃料。 將平均區塊大小除以 16 燃料 (15,000,000/16),顯示了一般區塊可以容納 **937,500 個位元組的資料**。 +2. 如果一個基本卷軸交易使用 12 個位元組,則以太坊區塊平均可以處理 **78,125 筆卷軸交易** (937,5000/12) 或 **39 個卷軸批次**(如果每個批次平均包含 2,000 筆交易)。 +3. 如果每 15 秒在以太坊上產生一個新區塊,則卷軸的處理速度大約爲**每秒 5,208 筆交易**。 計算方法是,將以太坊區塊可以容納的基本卷軸交易數量 (**78,125**) 除以平均出塊時間(**15 秒**)。 + +鑒於樂觀卷軸交易不可能包含以太坊上的整個區塊,這是一個比較樂觀的預計。 但是,透過它可以大致瞭解樂觀卷軸可以為以太坊使用者提供多少可擴展性收益(當前實現可提供每秒高達 2,000 筆交易的速率)。 + +在以太坊上引入[資料分片](/roadmap/danksharding/)有望增加樂觀卷軸的可擴展性。 由於卷軸交易必須與其他非卷軸交易共用區塊空間,因此其最大處理能力受制於以太坊主鏈上的資料吞吐量。 Danksharding 使用更便宜的非永久型「二進位大型物件」存儲,而不是昂貴的永久型 `CALLDATA`,這將增加二層網路鏈上用於按區塊發佈資料的空間。 + +### 樂觀卷軸的優點和缺點 {#optimistic-rollups-pros-and-cons} + +| 優勢 | 劣勢 | +| ------------------------------------------------------------------ | --------------------------------------- | +| 在不犧牲安全和去信任的情況下大幅改進可擴展性。 | 潛在的欺詐挑戰導致交易最終性延遲。 | +| 交易資料儲存在一層網路鏈上,提高了透明性、安全性、抗審查性和去中心化。 | 中心化卷軸營運者(排序者)可以影響交易順序。 | +| 詐欺證明保證了去信任的最終性,並使誠實少數能夠保護鏈的安全。 | 如果沒有誠實節點,惡意營運者就可以透過發佈無效區塊和狀態承諾來竊取資金。 | +| 計算詐欺證明對常規二層網路節點開放,這與需要特殊硬體的有效性證明(用於零知識卷軸中)不同。 | 安全模式依賴於至少一個誠實節點執行卷軸交易並提交詐欺證明來挑戰無效的狀態轉換。 | +| 卷軸受益於「去信任活躍性」(任何人都可以透過執行交易和發佈斷言來强制鏈前進) | 使用者在將資金提取回以太坊之前,必須等待為期一周的挑戰期結束。 | +| 樂觀卷軸依賴於精心設計的加密激勵機制來提升鏈上安全性。 | 卷軸必須在鏈上發佈所有交易資料,這可能會增加成本。 | +| 與以太坊虛擬機和 Solidity 的相容性,讓開發者可以將以太坊原生智慧型合約移植到卷軸或使用現有工具來建立新的去中心化應用程式。 | | + +### 樂觀卷軸之視覺範例 {#optimistic-video} + +想透過視覺方式學習? 觀看 Finematics 解釋樂觀卷軸: + + + +### 使用樂觀卷軸 {#use-optimistic-rollups} + +樂觀卷軸存在多種實作,可供你整合到去中心化應用程式: + + + +## 有關樂觀卷軸的延伸閲讀 + +- [樂觀卷軸如何運作(完整指引)](https://www.alchemy.com/overviews/optimistic-rollups) +- [什麽是區塊鏈卷軸? (技術介紹)](https://www.ethereum-ecosystem.com/blog/what-is-a-blockchain-rollup-a-technical-introduction) +- [Arbitrum 之概要指引](https://newsletter.banklesshq.com/p/the-essential-guide-to-arbitrum) +- [樂觀卷軸究竟如何運作?](https://www.paradigm.xyz/2021/01/how-does-optimisms-rollup-really-work) +- [樂觀虛擬機深入探索](https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52) +- [什麽是樂觀虛擬機?](https://www.alchemy.com/overviews/optimistic-virtual-machine) diff --git a/public/content/translations/zh-tw/developers/docs/scaling/plasma/index.md b/public/content/translations/zh-tw/developers/docs/scaling/plasma/index.md new file mode 100644 index 00000000000..1f74e0ceff7 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/scaling/plasma/index.md @@ -0,0 +1,175 @@ +--- +title: Plasma 鏈 +description: 介紹目前作為擴張解決方案供以太坊社群使用的 Plasma 鏈。 +lang: zh-tw +incomplete: true +sidebarDepth: 3 +--- + +Plasma 鏈是錨定以太坊主網的獨立區塊鏈,其交易在鏈外執行並有自己的區塊驗證機制。 Plasma 鏈有時被稱為「子」鏈,本質上是以太坊主網的縮小複製版, 使用[詐欺證明](/glossary/#fraud-proof)(如[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/))來仲裁爭議。 + +使用默克爾樹可以建立這些鏈的無限堆疊,將父母鏈(包括以太坊主網)的頻寬載荷轉移到 Plasma 鏈。 然而,雖然這些鏈會繼承以太坊的一些安全性(透過詐欺證明),但它們的安全性和效率受多項設計限制的影響。 + +## 基本資訊 {#prerequisites} + +推薦你先熟悉以太坊的所有基本概念,並大致了解[以太坊擴張](/developers/docs/scaling/)。 + +## 何謂 Plasma 鏈? + +Plasma 是一個改善公共區塊鏈(如以太坊)可擴展性的框架。 如原始版 [Plasma 白皮書](http://plasma.io/plasma.pdf)中所述,Plasma 鏈建置在另一個區塊鏈(稱為「根鏈」)之上。 每個「子鏈」都是從根鏈延伸而來,通常由部署於父母鏈上的智慧型合約來管理。 + +Plasma 合約的功能之一是作為[跨鏈橋](/developers/docs/bridges/),讓使用者可以在以太坊主網和 Plasma 鏈之間移動資產。 雖然這讓 Plasma 鏈看似很像[側鏈](/developers/docs/scaling/sidechains/),但不同的是,Plasma 鏈至少某種程度上受益於以太坊主網的安全性, 而側鏈則是完全為自身的安全性負責,與以太坊主網無關。 + +## Plasma 鏈如何運作? + +Plasma 鏈的基本組成部分有: + +### 鏈外計算 {#off-chain-computation} + +以太坊目前的處理速度限制約是每秒 15 到 20 筆交易,短期內無法有效地擴張以面對更多使用者。 存在這個問題的原因是,以太坊的[共識機制](/developers/docs/consensus-mechanisms/)需要大量點對點節點來驗證區塊鏈狀態的每次更新。 + +雖然以太坊的共識機制對於安全性是必需的,但這並不適用於所有使用案例。 例如,Alice 不需要讓整個以太坊網路來驗證她每天付給 Bob 的咖啡錢,畢竟她跟 Bob 雙方之間已經有一定的信任關係了。 + +Plasma 鏈假設以太坊主網不需要驗證所有交易。 相反,我們可以在主網外處理交易,讓節點不必驗證每一筆交易。 + +由於 Plasma 鏈可以最佳化速度和成本,鏈外運算是有必要的。 舉例來說,Plasma 鏈可能(實際上經常如此)使用單一的「營運者」來管理交易的排序與執行。 既然只有一個實體驗證交易,在 Plasma 鏈上處理交易的速度就比以太坊主網快得多。 + +### 狀態承諾 {#state-commitments} + +儘管 Plasma 鏈在鏈外執行交易,這些交易仍會在以太坊主網的執行層結算,否則 Plasma 鏈也無法受益於以太坊的安全保障。 但如果在最終確定鏈外交易時未能獲知 Plasma 鏈的狀態,那將打破前述安全性模型,並可能導致無效交易氾濫。 這就是為何在 Plasma 鏈上負責產生區塊的營運者,需要定期在以太坊主網上發布「狀態承諾」。 + +[承諾方案](https://en.wikipedia.org/wiki/Commitment_scheme)是一種密碼學技術,用以在不洩漏給另一方的情況下承諾某個價值或是主張。 承諾就其意義而言是一種約束,一旦做出承諾就無法變更承諾的價值或主張。 Plasma 鏈上的狀態承諾會採用「默克爾根」(源自[默克爾樹](/whitepaper/#merkle-trees))的形式,營運者會定期把狀態承諾傳送到以太坊鏈上的 Plasma 合約。 + +默克爾根為密碼學基元,讓我們得以將大量資訊進行壓縮。 默克爾根(在這一情境下也稱「區塊根」)可以代表區塊內的所有交易。 默克爾根還讓我們可以很容易地驗證,一小份資料是否存在於較大資料集中。 舉例來說,使用者可以透過產生一個[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/#main-content),來證明一筆交易有被納入特定區塊中。 + +默克爾根非常重要,用於把鏈外狀態的相關資訊提供給以太坊。 我們可以把默克爾根想像成「暫存點」:營運者表示,「這是 Plasma 鏈在時間點 x 的狀態,以此默克爾根為證」。 營運者承諾 Plasma 鏈的_目前狀態_,並附上一個默克爾根,也就是所謂的「狀態承諾」。 + +### 進入與退出 {#entries-and-exits} + +以太坊的使用者如果想要享受到 Plasma 的好處,會需要一個機制來在以太坊主網與 Plasma 鏈之間轉移資金。 我們不能把以太幣隨意地傳送到 Plasma 鏈上的地址,不過由於兩個鏈並不相容,所以交易結果不是失敗就是資金消失。 + +Plasma 鏈使用一個在以太坊上執行的主合約來處理使用者的進入和退出。 這個主合約也負責追蹤狀態承諾(上文提到的),並依據詐欺證明來懲罰不誠實的行為(我們等等會詳談)。 + +#### 進入 Plasma 鏈 {#entering-the-plasma-chain} + +若要進入 Plasma 鏈,Alice(使用者)會需要存入以太幣或是任意 ERC-20 代幣到 Plasma 合約。 Plasma 上負責監視合約存款的營運者,會建立一筆與 Alice 的首筆存款等額的資產並發放到她在 Plasma 鏈上的地址。 Alice 需要在子鏈上證明有收到這筆資金,接著就可以使用這些資金進行交易。 + +#### 退出 Plasma 鏈 {#exiting-the-plasma-chain} + +退出 Plasma 鏈則因為各種原因,比進入時複雜了許多。 最大的原因是,雖然以太坊有關於 Plasma 鏈狀態的資訊,但以太坊並無法驗證那些資訊是否真實。 惡意使用者可以不實地宣稱(如「我有 1000 枚以太幣」),透過提供虛假證明來支持其謊言並逍遙法外。 + +為了避免惡意提款,「挑戰期」應運而生。 在挑戰期間(通常為一週),任何人都可以使用詐欺證明,對一個提款請求進行挑戰。 如果挑戰成功,提款請求就會被拒絕。 + +不過,使用者通常都是誠實的,對其擁有資金的宣稱也是正確的。 延續 Alice 的情境,她會透過向 Plasma 合約提交一筆交易,在根鏈(以太坊)上發起提款請求。 + +她還必須提供一個默克爾證明,驗證 Plamsa 鏈上有一筆建立 Alice 資金的交易已被納入到區塊中。 這對於 Plasma 的迭代實作來說很有必要,如 [Plasma MVP](https://www.learnplasma.org/en/learn/mvp.html),它採用的是[未花費交易輸出 (UTXO)](https://en.wikipedia.org/wiki/Unspent_transaction_output) 模型。 + +其他的實作方案如 [Plasma Cash](https://www.learnplasma.org/en/learn/cash.html),將資金視作[非同質化代幣](/developers/docs/standards/tokens/erc-721/),而非未花費交易輸出模型。 在這一實作方案中,提款時需要附上 Plasma 鏈上代幣的擁有權證明。 這可以透過提交兩筆包含代幣的最新交易,及一份默克爾證明,驗證這兩筆交易有被打包進區塊。 + +使用者也需要在提款請求中加入保證金,來擔保其行為誠實。 如果有挑戰者證明 Alice 的提款請求是無效的,她的保證金會被罰沒,其中一部分保證金會給挑戰者作為獎勵。 + +如果直至挑戰期結束,仍沒有任何人提供詐欺證明,Alice 的提款要求就會被視為有效,她便能把存款從以太鏈上的 Plasma 合約中取回。 + +### 爭議仲裁 {#dispute-arbitration} + +與任何區塊鏈一樣,Plasma 鏈需要一種機制來確保交易的完整性,防範參與者的惡意行爲(例如,雙重消費資金)。 爲此,Plasma 鏈使用詐欺證明來對有關狀態轉換有效性的爭議進行仲裁並懲罰不良行爲。 詐欺證明可作爲一種機制,Plasma 子鏈可以透過它向父母鏈或根鏈提出投訴。 + +詐欺證明只是聲明特定的狀態轉換無效。 例如,如果使用者 Alice 嘗試兩次消費同一資金。 也許她在與 Bob 的交易中消費了未花費交易輸出 (UTXO),並希望在另一筆交易中消費相同的未花費交易輸出(但現在是 Bob 的了)。 + +爲了防止提款,Bob 將透過提供 Alice 在之前交易中消費上述未花費交易輸出 (UTXO) 的證據以及該交易已納入區塊的默克爾證明,來建構詐欺證明。 在 Plasma Cash 中使用相同的程序 — Bob 需要提交證明,證明 Alice 先前已經傳送了她嘗試提取的代幣。 + +如果 Bob 挑戰成功,Alice 的提款請求將被取消。 然而,這種方法依賴於 Bob 有能力監視鏈上的提款請求。 如果 Bob 離綫,一旦挑戰期結束,Alice 就可以處理這筆惡意提款。 + +## Plasma 鏈中的大規模退出問題 {#the-mass-exit-problem-in-plasma} + +當大量使用者試圖同時從 Plasma 鏈提款時,就會出現大規模退出問題。 出現該問題的原因與 Plasma 的最大問題之一有關:**資料不可用性**。 + +資料可用性是驗證所提議區塊的資訊是否已實際發佈在區塊鏈網路上的能力。 如果生產者自己發佈區塊但保留用於建立區塊的資料,則該區塊是「不可用的」。 + +如果節點要能夠下載區塊並驗證交易的有效性,區塊必須是可用的。 區塊鏈透過迫使區塊生產者在鏈上發佈所有交易資料來確保資料可用性。 + +資料可用性還有助於保護建構於以太坊基礎層之上的鏈外擴張協議。 透過迫使這些鏈上營運者在以太坊上發佈交易資料,任何人都可以藉由構建引用正確鏈狀態的詐欺證明,來挑戰無效區塊。 + +Plasma 鏈主要儲存與營運者的交易資料,並且**不在主網上發佈任何資料**(即除了定期狀態承諾之外)。 這意味著如果使用者需要建立詐欺證明來挑戰無效交易,他們就必須仰賴營運者提供交易資料。 如果該系統正常運作,則使用者始終可以使用詐欺證明來保護資金。 + +當進行惡意行爲的是營運者而不僅僅是使用者時,問題就開始了。 由於營運者完全控制區塊鏈,他們更有動力更大規模地推進無效狀態轉換,例如竊取 Plasma 鏈上屬於使用者的資金。 + +在這種情況下,使用經典的詐欺證明系統是行不通的。 營運者可以簡單地進行無效交易,將 Alice 和 Bob 的資金傳送到其錢包中,並隱藏建立詐欺證明所需的資料。 這是可能的,因爲營運者不需要向使用者或主網提供資料。 + +因此,最樂觀的解決方案是嘗試從 Plasma 鏈上「大規模退出」使用者。 大規模退出減慢了惡意營運者竊取資金的計劃,並為使用者提供了一定程度的保護。 提款請求根據每個未花費交易輸出 (UTXO)(或代幣)的建立時間排序,以防止惡意營運者搶先交易誠實的使用者。 + +盡管如此,我們仍然需要一種方法來驗證大規模退出期間提款請求的有效性,以防止機會主義個人在處理無效退出的混亂中獲利。 解決方案很簡單:要求使用者發佈最後一個**有效的鏈狀態**來退出其資金。 + +但這種方法仍然存在問題。 例如,如果 Plasma 鏈上的所有使用者都需要退出(在惡意營運者的情況下是可能的),Plasma 鏈的整個有效狀態就必須立即轉儲到以太坊的基礎層。 由於 Plasma 鏈可能為任意大小(高吞吐量 = 更多資料)和以太坊處理速度的限制,這不是一個理想的解決方案。 + +儘管退出游戲在理論上聽起來不錯,但現實中的大規模退出可能會引發以太坊本身的全網路擁塞。 除了損害以太坊的功能之外,協調不善的大規模退出意味著使用者可能無法在營運者耗盡 Plasma 鏈上的每個帳戶之前提取資金。 + +## Plasma 的優勢和劣勢 {#pros-and-cons-of-plasma} + +| 優勢 | 劣勢 | +| ----------------------------------------------------------------------------- | --------------------------------------------------- | +| 提供高吞吐量和低單位交易成本。 | 不支援一般運算(無法執行智慧型合約)。 僅透過特定運用邏輯支援基本的代幣轉移、交換及其他幾種交易類型。 | +| 適合任意使用者之間的交易(若雙方使用者都處於 Plasma 鏈上,則不會產生任何開銷) | 需要本人定期監看網路(活躍性要求)或委託他人監看,以保障資金安全。 | +| Plasma 鏈可以適應與主鏈無關的特定使用案例。 包括企業在内的任何人,都可以自訂 Plasma 智慧型合約,以提供可在不同情境下運作的可擴展基礎設施。 | 仰賴一或多個營運者來儲存資料並根據要求提供此資料。 | +| 透過將計算和存儲遷移到鏈外來減少以太坊主網的載荷。 | 提款可被延遲數日以容許挑戰。 對於同質化資產,流動性提供者可以緩解這種情況,但存在相關的資本成本。 | +| | 如果太多使用者同時嘗試退出,以太坊主網可能會擁塞。 | + +## Plasma 與二層網路擴張協定 {#plasma-vs-layer-2} + +雖然 Plasma 曾被視爲對以太坊有用的擴張解決方案,但後來被棄用,由[二層網路 (L2) 擴張協定](/layer-2/)所取代。 二層網路擴張解決方案解決了 Plasma 的幾個問題: + +### 效率 {#efficiency} + +[零知識卷軸](/developers/docs/scaling/zk-rollups)為在鏈外處理的每批交易的有效性產生加密證明。 這可防止使用者(和營運者)推進無效的狀態轉換,因而不再需要挑戰期和退出游戲。 這也意味著使用者不必透過定期監視鏈來保護其資金安全。 + +### 支援智慧型合約 {#support-for-smart-contracts} + +Plasma 框架的另一個問題是[無法支援以太坊智慧型合約的執行](https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598/4)。 因此,Plasma 的大多數實作主要是用於簡單的支付或 ERC-20 代幣交換。 + +相反,樂觀卷軸與[以太坊虛擬機](/developers/docs/evm/)相容,並且可以執行以太坊原生[智慧型合約](/developers/docs/smart-contracts/),使其成爲擴張[去中心化應用程式](/developers/docs/dapps/)的實用且_安全_的解決方案。 類似地,[建立以太坊虛擬機的零知識實作 (zkEVM)](https://ethresear.ch/t/a-zk-evm-specification/11549) 正在計劃中,使零知識卷軸能夠處理任意邏輯並執行智慧型合約。 + +### 資料不可用 {#data-unavailability} + +如前所述,Plasma 存在資料可用性問題。 如果惡意營運者在 Plasma 鏈上推進了無效轉換,使用者將無法挑戰它,因爲營運者可以扣留建立詐欺證明所需的資料。 卷軸迫使營運者在以太坊上發佈交易資料,允許任何人驗證鏈的狀態並在必要時建立詐欺證明,從而解決了該問題。 + +### 大規模退出問題 {#mass-exit-problem} + +零知識卷軸和樂觀卷軸都以不同方式解決了 Plasma 的大規模退出問題。 例如,零知識卷軸依賴加密機制來確保營運者在任何情況下都無法竊取使用者的資金。 + +類似地,樂觀卷軸對提款施加了延遲期,在延遲期内任何人都可以發起挑戰並阻止惡意的提款請求。 儘管這與 Plasma 類似,但區別在於,驗證者可以存取建立詐欺證明所需的資料。 因此,卷軸使用者無需瘋狂地「爭先恐後」般遷移到以太坊主網。 + +## Plasma 與側鏈和分片有何不同? {#plasma-sidechains-sharding} + +Plasma、側鏈和分片技術有一定的相似,因爲它們都以某種方式連線到以太坊主網。 然而,連線到以太坊主網的級別和强度有所不同,影響這些擴張解決方案的安全屬性。 + +### Plasma 與側鏈 {#plasma-vs-sidechains} + +[側鏈](/developers/docs/scaling/sidechains/)是一種獨立運行的區塊鏈,透過雙向跨鏈橋連線到以太坊主網。 [跨鏈橋](/bridges/)讓使用者可以在兩條區塊鏈之間交換代幣,以便在側鏈進行交易,降低了以太坊主網上的擁塞並增加了可擴展性。 側鏈使用獨立的共識機制,並且它們通常比以太坊主網小得多。 因此,將資產橋接到這些區塊鏈會增加風險;由於側鏈模型中缺少從以太坊主網繼承的安全保證,在側鏈受到攻擊時,使用者會承擔資金損失的風險。 + +相反,Plasma 鏈的安全性來自主網。 這使其明顯比側鏈更安全。 側鏈和 Plasma 鏈都可以使用不同的共識協定。但區別是,Plasma 鏈在以太坊主網上發佈每個區塊的默克爾根。 區塊根是小段的資訊,可用於驗證在 Plasma 鏈上進行的相關交易的資訊。 如果 Plasma 鏈受到攻擊,使用者可以使用適當的證明來安全地將資金提取回主網。 + +### Plasma 與分片 {#plasma-vs-sharding} + +Plasma 鏈和分片鏈都會定期向以太坊主網發佈加密證明。 然而,它們的安全屬性有所不同。 + +分片鏈向主網提交「定序頭」,其中包含有關每個資料分片的詳細資訊。 主網上的節點驗證和執行資料分片的有效性,減少了無效分片轉換的可能性並防止網路上出現惡意活動。 + +Plasma 有所不同,因爲主網只接收最少量的子鏈狀態資訊。 這意味著主網無法有效驗證子鏈上進行的交易,降低了交易的安全性。 + +**請注意**,以太坊區塊鏈分片已經不再包含在開發藍圖中。 它已經被卷軸和 [Danksharding](/roadmap/danksharding) 擴張所取代。 + +### 使用 Plasma {#use-plasma} + +有多項專案提供 Plasma 實作,歡迎整合到你的去中心化應用程式: + +- [Polygon](https://polygon.technology/)(前身為 Matic 網路) + +## 延伸閱讀 {#further-reading} + +- [瞭解 Plasma](https://www.learnplasma.org/en/) +- [「共用安全性」的含義及其重要性概覽](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) +- [側鏈、Plasma 與分片](https://vitalik.eth.limo/general/2019/06/12/plasma_vs_sharding.html) +- [瞭解 Plasma,第一部分:基礎知識](https://www.theblockcrypto.com/amp/post/10793/understanding-plasma-part-1-the-basics) +- [Plasma 的生與死](https://medium.com/dragonfly-research/the-life-and-death-of-plasma-b72c6a59c5ad#) + +_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git a/public/content/translations/zh-tw/developers/docs/scaling/sidechains/index.md b/public/content/translations/zh-tw/developers/docs/scaling/sidechains/index.md new file mode 100644 index 00000000000..711afd99424 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/scaling/sidechains/index.md @@ -0,0 +1,73 @@ +--- +title: 側鏈 +description: 介紹目前作為擴張解決方案供以太坊社群使用的側鏈。 +lang: zh-tw +sidebarDepth: 3 +--- + +側鏈是獨立於以太坊運行的獨立區塊鏈,並透過雙向跨鏈橋連線到以太坊主網。 側鏈可以有單獨的區塊參數和[共識演算法](/developers/docs/consensus-mechanisms/),通常是為了高效處理交易而設計。 然而,使用側鏈需要權衡,因為它們不會繼承以太坊的安全屬性。 與[二層網路擴張解決方案](/layer-2/)不同,側鏈不會將狀態變更和交易數據發佈回以太坊主網。 + +側鏈也犧牲了一些去中心化或安全性措施來實現高吞吐量([可擴展性三難困境](https://vitalik.eth.limo/general/2021/05/23/scaling.html))。 然而,正如其升級[願景聲明](/roadmap/vision/)中所述,以太坊致力於在不影響去中心化和安全性的情況下擴張。 + +## 側鏈的工作原理 {#how-do-sidechains-work} + +側鏈是獨立的區塊鏈,具有不同的歷史記錄、開發藍圖和設計考量。 雖然側鏈可能與以太坊有一些表面上的相似,但它有幾個獨特功能。 + +### 共識演算法 {#consensus-algorithms} + +讓側鏈獨一無二(即不同於以太坊)的特質之一是所使用的共識演算法。 側鏈不依賴以太坊達成共識,並可以選擇適合其需求的替代共識協議。 側鏈上使用的共識演算法的一些範例包括: + +- [權威證明](/developers/docs/consensus-mechanisms/poa/) +- [委託權益證明](https://en.bitcoin.it/wiki/Delegated_proof_of_stake) +- [拜占庭容錯](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained)。 + +跟以太坊一樣,側鏈也有驗證節點去驗證和處理交易、產生區塊並儲存區塊鏈狀態。 驗證者也負責維護整個網路的共識,並確保它不受惡意攻擊。 + +#### 區塊參數 {#block-parameters} + +以太坊對[出塊時間](/developers/docs/blocks/#block-time)(即產生新區塊所需時間)和[區塊大小](/developers/docs/blocks/#block-size)(即以燃料為計量單位,每個區塊包含的資料量)設定了限制。 相反地,側鏈通常會採用不同的參數,例如更快的出塊時間和更高的燃料限制,以達到高吞吐量、快速交易和低費用。 + +雖然這樣做有一些好處,但對網路去中心化和安全性卻有重大影響。 高速的出塊時間和大的區塊大小這些區塊參數,增加了運行全節點的難度,讓一些「超級節點」負責保護區塊鏈的安全。 在這種情況下,驗證者串通或惡意接管鏈的可能性就會增加。 + +若要在不損害去中心化的情況下擴大區塊鏈的規模,就必須讓人人都能運行節點,而不一定是擁有專門硬體的人。 這就是我們一直在努力確保每個人都能在以太坊網路上[運行全節點](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node)的原因。 + +### 以太坊虛擬機 (EVM) 相容性 {#evm-compatibility} + +一些側鏈與以太坊虛擬機相容,並且能夠執行為[以太坊虛擬機 (EVM)](/developers/docs/evm/) 開發的合約。 相容於以太坊虛擬機的側鏈支援以 [Solidity 編寫](/developers/docs/smart-contracts/languages/)的智慧型合約,也支援其他以太坊虛擬機智慧型合約語言,這意味著為以太坊主網編寫的智慧型合約也將在相容於以太坊虛擬機的側鏈上有效。 + +這意味著若你想在側鏈上使用你的[去中心化應用程式](/developers/docs/dapps/),只需將你的[智慧型合約](/developers/docs/smart-contracts/)部署到該側鏈即可。 側鏈的外觀、給人的感覺和行為與主鏈相似 — 你可以用 Solidity 編寫合約,並透過側鏈遠端程序呼叫與側鏈互動。 + +由於側鏈和以太坊虛擬機相容,因而被視為對以太坊原生去中心化應用程式有效的[擴張解決方案](/developers/docs/scaling/)。 去中心化應用程式部署到側鏈後,使用者可以盡享更低的燃料費用和更快的交易速度,尤其是在主網擁塞的情況下。 + +不過,如前所述,使用側鏈涉及重大取捨。 每條側鏈負責其安全性,不會繼承以太坊的安全屬性。 這會增加惡意行為的可能性,影響你的使用者或讓他們的資金面臨風險。 + +### 資產轉移 {#asset-movement} + +爲了使一條獨立區塊鏈成爲以太坊主網的側鏈,區塊鏈需要支持在它與以太坊主網之間傳送資產。 這種與以太坊的互操作性是使用區塊鏈跨鏈橋實現的。 [跨鏈橋](/bridges/)使用部署在以太坊主網和側鏈上的智慧型合約控制兩者之間的資金橋接。 + +儘管跨鏈橋可以幫助使用者在以太坊和側鏈之間傳送資金,但實體資產不會在兩條鏈之間移動。 相反,通常采用與鑄造和銷毀相關的機制跨鏈傳送價值。 更多關於[跨鏈橋如何運作](/developers/docs/bridges/#how-do-bridges-work)的資訊。 + +## 側鏈的優勢和劣勢 {#pros-and-cons-of-sidechains} + +| 優勢 | 劣勢 | +| ------------------------------------------ | ------------------------------------ | +| 支撐側鏈的技術是成熟的,並得益於廣泛的研究和設計的改進。 | 側鏈犧牲了一定程度的去中心化和去信任以換取可擴展性。 | +| 側臉支援通用計算並提供以太坊虛擬機相容性(它們能夠運行以太坊原生去中心化應用程式)。 | 側鏈使用單獨的共識機制,並且不從以太坊的安全保證中獲益。 | +| 側鏈使用不同的共識模型,為使用者高效處理交易並降低交易費。 | 側鏈需要更高的信任假設(例如,惡意側鏈驗證者達到一定人數可以進行欺詐)。 | +| 與以太坊虛擬機相容的側鏈讓去中心化應用程式可以擴展其生態系統。 | | + +### 使用側鏈 {#use-sidechains} + +有多項專案提供側鏈實作,歡迎整合到你的去中心化應用程式: + +- [Polygon PoS](https://polygon.technology/solutions/polygon-pos) +- [Skale](https://skale.network/) +- [Gnosis Chain(前身為 xDai)](https://www.gnosischain.com/) +- [Loom Network](https://loomx.io/) +- [Metis Andromeda](https://www.metis.io/) + +## 衍生閱讀 {#further-reading} + +- [透過側鏈擴張以太坊去中心化應用程式](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _2018 年 2 月 8 日 - Georgios Konstantopoulos_ + +_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git a/public/content/translations/zh-tw/developers/docs/scaling/state-channels/index.md b/public/content/translations/zh-tw/developers/docs/scaling/state-channels/index.md new file mode 100644 index 00000000000..abc7c29a79b --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/scaling/state-channels/index.md @@ -0,0 +1,67 @@ +--- +title: 狀態通道 +description: 介紹狀態通道和支付通道,作為以太坊社群目前使用的擴展解決方案。 +lang: zh-tw +sidebarDepth: 3 +--- + +狀態通道允許參與者安全地進行鏈外交易,同時將與以太坊主網的互動保持在最低水平。 通道對等方可進行任意數量的鏈外交易,同時只需提交兩個鏈上交易來開啟和關閉通道。 這允許極高的交易吞吐量並降低使用者的成本。 + +## {#how-do-sidechains-work} + +以太坊等公共區塊鏈因其分散式架構,即鏈上交易必須由所有節點執行,而面臨可擴展性挑戰。 節點必須能夠使用普通硬體來處理區塊中的交易量,為了保持網路去中心化而限制了交易吞吐量。 + +### {#consensus-algorithms} + +通道是簡單的點對點協定,它讓雙方可以在彼此之間進行多筆交易,然後只將最終結果發佈到區塊鏈。 通道使用密碼學證明產生的摘要資料確實是一組有效中間交易的結果。 [「多簽」](/developers/docs/smart-contracts/#multisig)智慧型合約確保交易由正確的各方簽署。 + +- []() +- []() +- + +透過通道,狀態變更由相關各方執行和驗證,最大限度地減少了以太坊執行層上的計算。 這減少了以太坊的擁堵並提高了使用者的交易處理速度。 + +#### {#block-parameters} + +每個通道均由在以太坊上執行的[多簽智慧型合約](/developers/docs/smart-contracts/#multisig)管理。 要開啟通道,參與者在鏈上部署通道合約並向其中存入資金。 + +若要關閉通道,參與者會在鏈上提交最後商定的通道狀態。 之後,智慧型合約會根據每位參與者在通道最終狀態的餘額來分配鎖定的資金。 + +對於一些預先定義的參與者希望以高頻率進行交易而不產生可見開銷的情況,點對點通道特別適用。 區塊鏈通道分為兩類:**支付通道**和**狀態通道**。 + +### {#evm-compatibility} + +將支付通道描述成由兩個使用者共同維護的「雙向帳本」最為恰當。 帳本的初始餘額是通道開放階段鎖定到鏈上合約的存款總和。 + +帳本餘額的更新(即支付通道的狀態)需要通道中所有方批准。 通道更新在所有通道參與者簽署后被視爲最終確定,這和以太坊上的交易非常相似。 + +支付通道是最早的擴張解決方案之一,用於最大限度減少因簡單的使用者互動帶來的高成本鏈上活動(例如,以太幣傳送、原子交換、小額支付)。 通道參與者彼此之間可以進行不限數額的即時、無費用交易,只要他們傳送的净總和不超過存入的代幣。 + +除了支援鏈外支付以外,支付通道尚未被證明可用於處理通用狀態轉換邏輯。 建立狀態通道是爲了解決該問題,並使通道可用於擴張通用計算。 + +### {#asset-movement} + +狀態通道與支付通道仍有許多共同點。 例如,當使用者透過交換加密簽名的訊息(交易)進行互動時,其他通道參與者也必須簽署訊息。 如果提議的狀態更新沒有獲得所有參與者的簽名,則被認爲無效。 + +## {#pros-and-cons-of-sidechains} + +| | | +| | | +| | | +| | | +| | | +| | | + +### {#use-sidechains} + +- []() +- []() +- []() +- []() +- []() + +## {#further-reading} + +- + +_ _ diff --git a/public/content/translations/zh-tw/developers/docs/scaling/validium/index.md b/public/content/translations/zh-tw/developers/docs/scaling/validium/index.md new file mode 100644 index 00000000000..acf85470894 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/scaling/validium/index.md @@ -0,0 +1,165 @@ +--- +title: Validium +description: 介紹目前作為擴張解決方案供以太坊社群使用的 Validium。 +lang: zh-tw +sidebarDepth: 3 +--- + +Validium 是一種[擴張解決方案](/developers/docs/scaling/),使用如[零知識卷軸](/developers/docs/scaling/zk-rollups/)之類的有效性證明來強制執行交易的完整性,但它不在以太坊主網上儲存交易資料。 雖然鏈外資料可用性會帶來取捨,但卻能大幅提升可擴展性(Validium [每秒](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)可處理 [~9,000 個交易,甚至更多](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263))。 + +## 前置要求 {#prerequisites} + +你應該已經在我們的頁面上閲讀並理解有關[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2)的内容。 + +## 什麼是 Validium? {#what-is-validium} + +Validium 是使用鏈外資料可用性和計算的擴張解決方案,旨在透過在以太坊主網外處理交易來提高吞吐量。 與零知識卷軸 (ZK-rollup) 一樣,Validium 發佈[零知識證明](/glossary/#zk-proof)以在以太坊上驗證鏈外交易。 這能夠防止無效的狀態轉換並增强 Validium 鏈的安全保證。 + +這些「有效性證明」可以是 ZK-SNARK(零知識簡潔非互動式知識論證)或 ZK-STARK(零知識可擴展透明知識論證)兩種形式。 更多有關[零知識證明](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/)的資訊。 + +屬於 Validium 使用者的資金由以太坊上的智慧型合約控制。 Validium 與零知識卷軸很像,能夠提供幾乎即時的提款;在主網上驗證提款請求的有效性證明后,使用者可以透過提供[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/)來提取資金。 默克爾證明驗證使用者的提款交易是否包含在經過驗證的交易批次中,這讓鏈上合約可以處理提款。 + +然而,Validium 使用者的資金可能會被凍結,並受到提款限制。 如果 Validium 鏈上資料可用性管理器拒絕向使用者提供鏈外狀態資料,就會發生這種情況。 如果無法存取交易資料,使用者將無法計算證明資金所有權和執行提款所需的默克爾證明。 + +這是 Validium 和零知識卷軸之間的主要區別,即它們在資料可用性範圍上的位置不同。 兩種解決方案處理資料存儲的方式不同,這會影響安全性和去信任。 + +## Validium 如何與以太坊互動? {#how-do-validiums-interact-with-ethereum} + +Validium 是建置在現有以太坊鏈上的擴張協定。 儘管它在鏈外執行交易,但 Validium 鏈由部署在主網上的一系列智慧型合約管理,包括: + +1. **驗證者合約**:驗證者合約驗證 Validium 營運者在進行狀態更新時所提交證明的有效性。 該合約需要證明鏈外交易正確性的有效性證明,和驗證鏈外交易資料存在的資料可用性證明。 + +2. **主合約**:主合約儲存區塊生產者提交的狀態承諾(默克爾根),並在有效性證明完成鏈上驗證后更新 Validium 的狀態。 該合約還處理 Validium 鏈上的存款和提款。 + +Validium 還依賴於以太坊主鏈來獲得: + +### 結算 {#settlement} + +在 Validium 上執行的交易無法完全確認,直至父母鏈驗證其有效性。 所有在 Validium 上進行的業務最終都必須在主網上結算。 以太坊區塊鏈還為 Validium 使用者提供了「結算保證」,這意味鏈外交易一旦提交到鏈上,就無法逆轉或改變。 + +### 安全性 {#security} + +充當結算層的以太坊也保證 Validium 上狀態轉換的有效性。 在 Validium 鏈上執行的鏈外交易透過以太坊基礎層上的智慧型合約進行驗證。 + +如果鏈上驗證者合約認爲證明無效,交易就會被拒絕。 這意味著營運者在更新 Validium 的狀態之前,必須滿足以太坊協定強制執行的有效性條件。 + +## Validium 如何運作? {#how-does-validium-work} + +### 交易 {#transactions} + +使用者向營運者提交交易 - 營運者是負責在 Validium 鏈上執行交易的節點。 一些 Validium 可能使用單個營運者來執行鏈,或依賴[權益證明 (PoS)](/developers/docs/consensus-mechanisms/pos/) 機制來輪換營運者。 + +營運者將交易彙總到一個批次中,並將其發送到證明電路進行證明。 證明電路接受交易批次(以及其他有關資料)作爲輸入,並輸出驗證作業正確執行的有效性證明。 + +### 狀態承諾 {#state-commitments} + +Validium 的狀態被雜處理湊為默克爾樹,其根儲存在以太坊的主合約中。 默克爾根,又稱爲狀態根,充當對 Validium 上當前帳戶狀態和餘額的加密承諾。 + +爲了執行狀態更新,營運者必須(在執行交易后)計算一個新的狀態根並將其提交給鏈上合約。 如果有效性證明得到驗證,提議的狀態就會被接受,Validium 將切換到新的狀態根。 + +### 存款和提款 {#deposits-and-withdrawals} + +使用者透過在鏈上合約中存入以太幣(或任何與 ERC 兼容的代幣),將資金從以太坊轉移到 Validium。 該合約將存款事件轉發到鏈外 Validium,並向使用者在 Validium 上的地址存入與其存款相同的金額。 營運者還會將該存款交易包含在新批次中。 + +爲了將資金轉移回主網,Validium 使用者需要發起提款交易並提交到營運者,營運者將驗證提款請求並將其包含在批次中。 使用者在 Validium 鏈上的資產也會被銷毀,才能退出系統。 一旦與該批次相關的有效性證明得到驗證,使用者就可以呼叫主合約來提取剩餘的初始存款。 + +作爲一種抗審查機制,Validium 協定允許使用者直接從 Validium 合約提款,而無需透過營運者。 在這種情況下,使用者需要向驗證者合約提供默克爾證明,展示帳戶包含在狀態根内。 如果證明被接受,使用者就能夠呼叫主合約的提款函式,從 Validium 中提取其資金。 + +### 批次提交 {#batch-submission} + +在執行一批交易后,營運者向驗證者合約提交相關的有效性證明,並向主合約提議新的狀態根。 如果證明有效,主合約就會更新 Validium 的狀態並最終確定批次中交易的結果。 + +與零知識卷軸不同,Validium 上的區塊生產者不需要發佈交易批次的交易資料(僅發佈區塊頭)。 這使 Validium 成爲一個純鏈外擴張協定,而不是在以太坊主鏈上發佈狀態資料(如 `calldata`)的「混合」擴張協定(即[二層網路](/layer-2/))。 + +### 資料可用性 {#data-availability} + +如前所述,Validium 利用一個鏈外資料可用性模型,營運者會將所有交易資料儲存在其中,而不是以太坊主網。 Validium 的鏈上資料足跡較低,這提升了可擴展性(吞吐量不受以太坊的資料處理能力限制),並降低了使用者費用(發佈 `calldata` 的成本降低)。 + +然而,鏈外資料可用性導致了一個問題:建立或驗證默克爾證明所需的資料可能不可用。 這意味著,如果營運者采取惡意行爲,使用者就可能無法從鏈上合約中提取資金。 + +各種 Validium 解決方案試圖透過將狀態資料的儲存去中心化來解決此問題。 這涉及迫使區塊生產者將底層資料發送至「資料可用性管理者」,由他們負責儲存鏈外資料並在使用者請求時提供給使用者。 + +Validium 中的資料可用性管理者透過簽署每個 Validium 批次,來證明鏈外交易資料的可用性。 這些簽名構成了一種「可用性證明」,鏈上驗證者合約會在批准狀態更新之前進行檢查。 + +Validium 的資料可用性管理方法不同。 一些依賴可信方儲存狀態資料,另一些則使用隨機指定的驗證者完成此工作。 + +#### 資料可用性委員會 (DAC) {#data-availability-committee} + +爲了保證鏈外資料的可用性,一些 Validium 解決方案指定了一組可信實體(統稱爲資料可用性委員會 (DAC))來儲存狀態複本並提供資料可用性證明。 由於成員較少,資料可用性委員會更容易實作,並且需要的協調更少。 + +然而,使用者必須信任資料可用性委員會,以便在需要時獲得資料(例如,用於產生默克爾證明)。 資料可用性委員會的成員有可能[被惡意行爲者損害](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view),然後後者會扣留鏈外資料。 + +[更多有關 Validium 中資料可用性委員會的資訊](https://medium.com/starkware/data-availability-e5564c416424)。 + +#### 有保證金的資料可用性 {#bonded-data-availability} + +其他 Validium 需要負責儲存離綫資料的參與者,在承擔其角色之前在智慧型合約中質押(即鎖定)代幣。 該質押充當一種「保證金」,保證資料可用性管理者之間誠實行事並減少信任假設。 如果這些參與者未能證明資料可用性,該保證金就會被罰沒。 + +在有保證金的資料可用性方案中,任何人在提供需要的質押后,都可以被指定保存鏈外資料。 這擴展了合格資料可用性管理者池,減少了影響資料可用性委員會 (DAC) 的中心化。 更重要的是,這種方法依賴於加密經濟激勵措施來防止惡意活動,這相比指定可信方在 Validium 中保護離綫資料要安全很多。 + +[更多有關 Validium 中有保證金的資料可用性的資訊](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf)。 + +## Volition 和 Validium {#volitions-and-validium} + +Validium 提供許多好處,但也會有取捨(最明顯的就是資料可用性)。 但是,與許多擴張解決方案一樣,Validium 適合特定的用例 - 這就是為何建立 Volition 的原因。 + +Volition 結合了零知識卷軸和 Validium 鏈,它允許使用者在兩種擴張解決方案之間切換。 使用 Volition,使用者能夠利用 Validium 的鏈外資料可用性進行某些交易,同時可以在需要時自由地切換到鏈上資料可用性解決方案(零知識卷軸)。 這本質上讓使用者能夠根據其獨特情況自由地進行權衡。 + +去中心化交易所 (DEX) 可能偏好使用 Validium 的可擴展和隱私基礎設施進行高價值交易。 它還可以為需要零知識卷軸的更高安全性保證和去信任的使用者使用零知識卷軸。 + +## Validium 和以太坊虛擬機的相容性 {#validiums-and-evm-compatibility} + +與零知識卷軸一樣,Validium 最適合簡單的應用程式,例如代幣交換和支付。 由於在零知識證明電路中證明[以太坊虛擬機](/developers/docs/evm/)指示的開銷很大,因此很難實作在 Validium 之間為通用計算和智慧型合約執行提供支援。 + +一些 Validium 專案嘗試透過編譯與以太坊虛擬機兼容的語言(例如 Solidity、Viper),來建立為高效證明而最佳化的自訂位元組碼,從而回避這個問題。 這種方法的一個缺點是,零知識證明友好的新虛擬機可能不支援重要的以太坊虛擬機作業碼,並且開發者必須直接使用高階語言進行編寫才能獲得最佳體驗。 這導致了更多問題:它迫使開發者使用全新的開發堆棧構建去中心化應用程式,並破壞了與目前以太坊基礎設施的相容性。 + +然而,一些團隊正在嘗試針對零知識證明電路最佳化現有的以太坊虛擬機作業碼。 這包括對零知識以太坊虛擬機 (zkEVM) 的開發,這是一種與以太坊虛擬機兼容的虛擬機,可以生成驗證程式是否正確執行的證明。 使用零知識以太坊虛擬機,Validium 鏈可以在鏈外執行智慧型合約並提交有效性證明,以在以太坊上驗證鏈外計算(無需重新執行合約)。 + +[更多有關零知識以太坊虛擬機的資訊](https://www.alchemy.com/overviews/zkevm)。 + +## Validium 如何擴張以太坊? {#scaling-ethereum-with-validiums} + +### 1. 鏈外資料存儲 {#off-chain-data-storage} + +二層網路擴張項目,例如樂觀卷軸和零知識卷軸,透過將部分交易資料發佈到一層網路,犧牲了純鏈外擴容協定(如 [Plasma](/developers/docs/scaling/plasma/))的無限可擴展性來換取安全性。 然而,這意味著卷軸的可擴展性屬性受到以太坊主網上資料帶寬的限制(因此提出[資料分片](/roadmap/danksharding/)以提高以太坊的資料存儲容量)。 + +Validium 透過將所有交易資料保存在鏈外,並在轉送狀態更新到以太坊主鏈時僅發佈狀態承諾(及有效性證明),實現了可擴展性。 然而,有效性證明的存在為 Validium 提供了比其他純鏈外擴張解決方案(包括 Plasma 和[側鏈](/developers/docs/scaling/sidechains/))更高的安全保證。 透過減少以太坊在驗證鏈外交易之前必須處理的資料量,Validium 設計極大地提升了主網上的吞吐量。 + +### 2. 遞迴證明 {#recursive-proofs} + +遞迴證明是一種有效性證明,可驗證其他證明的有效性。 這些「證明的證明」透過以遞迴方式彙總多個證明,直到建立一個可以驗證所有先前證明的最終證明。 遞迴證明透過增加每個有效性證明可以驗證的交易數量來提升區塊鏈處理速度。 + +通常,Validium 營運者提交到以太坊來驗證的每個有效性證明都會驗證單個區塊的完整性。 而一個遞迴證明可用於同時確認幾個 Validium 區塊的有效性 - 這是有可能的,因爲證明電路能夠以遞迴方式將幾個區塊證明彙總為一個最終證明。 如果鏈上驗證者合約接受遞迴證明,則所有底層區塊都會立即被最終確定。 + +## Validium 的優勢和劣勢 {#pros-and-cons-of-validium} + +| 優勢 | 劣勢 | +| ------------------------------------ | ------------------------------------------------------- | +| 有效性證明强制驗證鏈外交易的完整性,並防止營運者最終確定無效的狀態更新。 | 生成有效性證明需要使用特定硬體,這會導致中心化風險。 | +| 提高使用者的資本效率(將資金提取回以太坊時不會出現延遲) | 對通用計算/智慧型合約的支持有限;開發需要使用專業化語言。 | +| 對高價值應用程式中的詐欺證明型系統所面臨的某些經濟攻擊有高抵抗性。 | 生成零知識證明需要强大的算力;對於低吞吐量的應用程式不具有成本效益。 | +| 透過不將回呼資料發佈到以太坊主網來降低使用者的燃料費用。 | 較慢的主觀最終性時間(生成零知識證明需要 10 - 30 分鐘),但完全最終性會快一些,因爲沒有爭議時間延遲。 | +| 這適用於特定用例,例如優先考慮交易隱私和可擴展性的交易或區塊鏈游戲。 | 可能會阻止使用者提取資金,因爲生成所有權的默克爾證明需要鏈外資料始終可用。 | +| 鏈外資料可用性提升了吞吐量並增加了可擴展性。 | 安全模型依賴於信任假設和加密經濟激勵措施,與完全依賴加密安全機制的零知識卷軸不同。 | + +### 使用 Validium/Volition {#use-validium-and-volitions} + +有多項專案提供 Validium 和 Volition 實作,歡迎整合到你的去中心化應用程式: + +**StarkWare StarkEx** - _StarkEx 是基於有效性證明的以太坊二層網路 (L2) 可擴展性解決方案。 它能夠在零知識卷軸或 Validium 資料可用性模式下運作。_ + +- [文件](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes#validium) +- [網站](https://starkware.co/starkex/) + +**Matter Labs zkPorter**- _zkPorter 是一個二層網路擴張協定,它使用一種結合了零知識卷軸與分片理念的混合方法來處理資料可用性。 它可支援任意數量的分片,每個分片都有自己的資料可用性原則。_ + +- [部落格](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [文件](https://docs.zksync.io/zk-stack/concepts/data-availability) +- [網站](https://zksync.io/) + +## 衍生閱讀 {#further-reading} + +- [Validium 及二層網路二合一 — 第 99 期](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) +- [零知識卷軸與 Validium 的比較](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) +- [Volition 和新興資料可用性範圍](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) +- [卷軸、Validium 和 Volition:瞭解最熱門的以太坊擴張解決方案](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) diff --git a/public/content/translations/zh-tw/developers/docs/scaling/zk-rollups/index.md b/public/content/translations/zh-tw/developers/docs/scaling/zk-rollups/index.md new file mode 100644 index 00000000000..1799f2f5b78 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/scaling/zk-rollups/index.md @@ -0,0 +1,259 @@ +--- +title: 零知識證明卷軸 +description: 零知識證明卷軸介紹 — 一個以太坊社群所使用的擴張解決方案。 +lang: zh-tw +--- + +零知識證明卷軸 (ZK-rollup) 是二層網路的[擴張解決方案](/developers/docs/scaling/),透過將計算和狀態儲存遷移至鏈外來提高以太坊主網上的吞吐量。 零知識證明卷軸可以一次批量處理數千個交易,然後僅將一些最低限度的摘要資料發佈到主網。 此摘要資料定義了以太坊狀態應進行的變更以及一些確保這些更變正確的密碼學證明。 + +## 前置要求 {#prerequisites} + +你應該已經在我們的頁面上閲讀並理解有關[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2)的内容。 + +## 什麼是零知識證明卷軸? {#what-are-zk-rollups} + +**零知識證明卷軸 (ZK-rollup)** 將交易批量打包(或「捲起來」),然後在鏈外執行。 鏈外計算減少了必須發佈到區塊鏈的資料量。 零知識證明卷軸提交代表批次中所有交易所需變更的匯總,而不是單獨發送每一筆交易。 它們還產生[有效性證明](/glossary/#validity-proof)來證明其變更的正確性。 + +零知識證明卷軸的狀態由部署在以太坊網路上的智慧型合約維護。 爲了更新該狀態,零知識證明卷軸必須提交有效性證明來進行驗證。 如上所述,有效性證明是一種加密保證,證明卷軸提交的狀態變更確實是執行給定批量交易的結果。 這意味著零知識證明卷軸只需要提供有效性證明就可以在以太坊上最終確定交易,而無需像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)一樣將所有交易資料發佈到鏈上。 + +將資金從零知識證明卷軸轉移到以太坊沒有延遲,因爲一旦零知識證明卷軸合約驗證有效性證明,退出交易就會被執行。 相反,從樂觀卷軸提取資金則可能會有延遲,以便任何人都可以使用[詐欺證明](/glossary/#fraud-proof)來挑戰退出交易。 + +零知識證明卷軸將交易作爲 `calldata` 寫入以太坊。 對智慧型合約函式的外部調用中包含的資料就存儲在 `calldata` 中。 `calldata` 中的資訊被發佈到區塊鏈上,讓任何人都能夠獨立重建卷軸的狀態。 零知識證明卷軸使用壓縮技術來減少交易資料 — 例如,由索引而非地址來代表帳戶,這將節省 28 個位元組的資料。 鏈上資料發佈是卷軸的一大成本,因此資料壓縮能夠降低使用者的費用。 + +## 零知識證明卷軸如何與以太坊互動? {#zk-rollups-and-ethereum} + +零知識證明卷軸鏈是一種在以太坊區塊鏈之上運作的鏈外協定,並由鏈上的以太坊智慧型合約管理。 零知識證明卷軸在主網之外執行交易,但定期將鏈外交易批次提交到鏈上卷軸合約。 這種交易記錄是不可變的(與以太坊非常像),並且形成了零知識證明卷軸鏈, + +零知識證明卷軸的核心架構由以下部分構成: + +1. **鏈上合約**:如前所述,零知識證明卷軸協定由在以太坊上執行的智慧型合約控制。 這包括存儲卷軸區塊、追蹤存款,以及監控狀態更新的主要合約。 另一個鏈上合約(驗證者合約)驗證區塊生產者提交的零知識證明。 因此,以太坊充當零知識證明卷軸的基礎層或「一層網路」。 + +2. **鏈外虛擬機 (VM)**:儘管零知識證明卷軸活躍於以太坊上,但交易執行和狀態存儲發生在獨立於[以太坊虛擬機](/developers/docs/evm/)的單獨虛擬機。 這種鏈外虛擬機是零知識證明卷軸交易的執行環境,並充當零知識證明卷軸協定的次層或「二層網路」。 在以太坊主網上驗證的有效性證明可保證鏈外虛擬機中狀態轉換的正確性。 + +零知識證明卷軸是「混合擴張解決方案」— 獨立運作但從以太坊獲得安全性的鏈外協定。 具體來講,以太坊網路在零知識證明卷軸上執行狀態有效性更新,並保證每次更新卷軸狀態時的背景資料可用性。 因此,零知識證明卷軸比純鏈外擴張解決方案安全很多,例如自行負責安全屬性的[側鏈](/developers/docs/scaling/sidechains/),或同樣使用有效性證明在以太坊上驗證交易,但將交易資料存儲在其他地方的 [Validium](/developers/docs/scaling/validium/)。 + +零知識證明卷軸依賴以太坊協定來獲得: + +### 資料可用性 {#data-availability} + +零知識證明卷軸將鏈外處理的每筆交易的狀態資料發佈到以太坊。 透過這些資料,個人或企業能夠復現卷軸的狀態並自行驗證鏈。 以太坊將這些資料作爲 `calldata` 提供給所有網路參與者。 + +零知識證明卷軸不需要在鏈上發佈很多交易資料,因爲有效性證明已經驗證了狀態轉換的真實性。 盡管如此,在鏈上儲存資料仍然重要,因爲這樣便可以對二層網路鏈的狀態進行無需許可的獨立驗證,從而使任何人都能提交批次交易,防止惡意營運者審查或凍結鏈。 + +使用者需要在鏈上與卷軸互動。 如果無法存取狀態資料,使用者將無法查詢帳戶餘額或發起依賴狀態資訊的交易(如提款)。 + +### 交易最終性 {#transaction-finality} + +以太坊充當零知識證明卷軸的結算層:只有當一層網路合約接受有效性證明時,二層網路交易才會最終確定。 這消除了惡意營運者破壞鏈的風險(例如,竊取卷軸資金),因爲每筆交易都必須在主網上得到批准。 此外,以太坊還保證使用者作業一旦在一層網路上最終確定,就無法被撤銷。 + +### 審查阻力 {#censorship-resistance} + +大多數零知識證明卷軸使用「超級節點」(營運者)來執行交易、生產批次,以及提交區塊到一層網路。 儘管這確保了效率,但也增加了審查風險:惡意零知識證明卷軸營運者可以透過拒絕將使用者的交易添加到批次交易來審查使用者。 + +作爲一項安全措施,零知識證明卷軸允許使用者在認爲自己受到營運者審查時,直接向主網上的卷軸合約提交交易。 這讓使用者能夠强制從零知識證明卷軸退出到以太坊,而無需依賴營運者的許可。 + +## 零知識證明卷軸如何運作? {#how-do-zk-rollups-work} + +### 交易 {#transactions} + +零知識證明卷軸中的使用者簽署交易,提交給二層網路營運者進行處理並添加到下一個批次中。 在某些情況下,營運者是一個被稱爲排序者的中心化實體,它會執行交易,將交易彙總到批次中,然後提交到一層網路。 該系統中的排序者是唯一被允許產生二層網路區塊並將卷軸交易新增到零知識證明卷軸合約的實體。 + +其他零知識證明卷軸可以透過使用一組[權益證明](/developers/docs/consensus-mechanisms/pos/)驗證者來輪換營運者的角色。 潛在的營運者將資金存入卷軸合約,每份質押的大小會影響質押者被選中產生下一批次卷軸的機會。 如果營運者實施惡意行爲,其質押會被罰沒,這會激勵其發佈有效的區塊。 + +#### 零知識證明卷軸如何在以太坊上發佈交易資料 {#how-zk-rollups-publish-transaction-data-on-ethereum} + +如前所述,交易資料作爲 `calldata` 被發佈到以太坊上。 `calldata` 是智慧型合約中的資料區域,用於將引數傳送給函式,其行爲類似於[記憶體](/developers/docs/smart-contracts/anatomy/#memory)。 儘管 `calldata` 不會存儲到以太坊的狀態中,但其作爲以太坊鏈[歷史日志](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs)的一部分一直存在於鏈上。 `calldata` 不會影響以太坊的狀態,這使其成爲一種在鏈上存儲資料的便宜方法。 + +`calldata` 關鍵字通常標識交易所呼叫的智慧型合約方法,並以任意位元組序列的形式保存對方法的輸入。 零知識證明卷軸使用 `calldata` 將壓縮的交易資料發佈到鏈上;卷軸營運者只需要透過呼叫卷軸合約中所需的函式來添加一個新批次,並將壓縮資料作爲函式引數進行傳送。 這有助於降低使用者的成本,因爲卷軸費用的很大一部分用於在鏈上儲存交易資料。 + +### 狀態承諾 {#state-commitments} + +零知識證明卷軸的狀態包括二層網路帳戶和餘額,用[默克爾樹](/whitepaper/#merkle-trees)表示。 默克爾樹根(默克爾根)的加密雜湊儲存在鏈上合約中,這使卷軸協定能夠追蹤零知識證明卷軸狀態的變化。 + +在執行一組新交易后,卷軸轉換到新狀態。 發起狀態轉換的營運者需要計算新的狀態根並提交到鏈上合約。 如果與批次相關的有效性證明經過驗證者合約的驗證,新的默克爾根將成爲零知識證明卷軸的規範狀態根。 + +除了計算狀態根以外,零知識證明卷軸營運者還會建立一個批次根 — 包含批次中所有交易的默克爾樹根。 當提交新批次時,卷軸合約會儲存批次根,讓使用者能夠證明交易(如提款請求)包含在批次中。 使用者必須提供交易詳情、批次根和顯示包含路徑的[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/)。 + +### 有效性證明 {#validity-proofs} + +零知識證明卷軸營運者提交到一層網路合約的新狀態根是更新卷軸狀態的結果。 假設 Alice 向 Bob 發送了 10 枚代幣,營運者只需要將 Alice 的餘額減少 10,並將 Bob 的餘額增加 10。 然後營運者對更新后的帳戶資料進行雜湊處理,重建卷軸的默克爾樹,並將新的默克爾根提交到鏈上合約。 + +但是,在營運者證明新默克爾根是由卷軸狀態的正確更新產生之前,卷軸合約不會自動接受提議的狀態承諾。 零知識證明卷軸營運者透過生成有效性證明來做到這一點,有效性證明是一種簡潔的加密承諾,用於驗證批次交易的正確性。 + +有效性證明允許各方在不揭露聲明本身的情況下證明聲明的正確性,因此又被稱爲零知識證明。 零知識證明卷軸使用有效性證明確認鏈外狀態轉換的正確性,而無需在以太坊上重新執行交易。 這些證明可以是 [ZK-SNARK](https://arxiv.org/abs/2202.06877)(零知識簡潔非互動式知識論證)或 [ZK-STARK](https://eprint.iacr.org/2018/046)(零知識可擴展透明知識論證)兩種形式。 + +SNARK(簡潔非互動式知識論證)和 STARK(可擴展透明知識論證)都有助於證明零知識證明卷軸中鏈外計算的完整性,儘管每種證明類型都有不同的功能。 + +**ZK-SNARK(零知識簡潔非互動式知識論證)** + +爲了使 ZK-SNARK 協定正常運作,需要建立公共參考串 (CRS):公共參考串提供公共參數來證明和驗證有效性證明。 證明系統的安全性取決於公共參考串設定;如果用於建立公共參數的資訊落入惡意行爲者手中,他們或許能夠產生虛假的有效性證明。 + +一些零知識證明卷軸嘗試透過采用[多方計算儀式 (MPC)](https://zkproof.org/2021/06/30/setup-ceremonies/amp/) 來解決該問題,即由可信的個人為 ZK-SNARK 電路產生公共參數。 每一方都貢獻一些隨機性(稱為「有毒廢棄物」)來構建公共參考串,而且必須立即將其銷毀。 + +使用可信的設定,因爲這會提高公共參考串設定的安全性。 只要誠實的參與者銷毀其輸入,ZK-SNARK 系統的安全性就會得到保證。 這種方法仍然需要信任相關人員刪除他們采樣的隨機性,並且不會破壞系統的安全保證。 + +抛開信任假設不談,ZK-SNARK 因其更小的證明大小和恆定時間驗證而受到歡迎。 由於執行零知識證明卷軸的大部分成本用於一層網路上的證明驗證,因此二層網路使用 ZK-SNARK 來產生可在主網上快速、便宜地進行驗證的證明。 + +**ZK-STARK** + +與 ZK-SNARK 相似,ZK-STARK 在不揭露輸入的情況下證明鏈外計算的有效性。 然而,ZK-STARK 因其具有可擴展性和透明性,被認爲是對 ZK-SNARK 的改進。 + +ZK-STARK 是「透明的」,因爲它能夠在沒有可信的公共參考串 (CRS) 設定的情況下正常運作。 相反,ZK-STARK 則依賴可公開驗證的隨機性來設定用於產生和驗證證明的參數。 + +ZK-STARK 還提供了更多可擴展性,因爲證明和驗證有效性證明所需的時間相對於底層計算的複雜性呈_准綫性_增長。 對於 ZK-SNARK,證明和驗證時間相對於底層計算的規模呈_綫性_擴張。 這意味著當涉及大資料集時,ZK-STARK 相比 ZK-SNARK 需要的證明和驗證時間更少,因而適用於大批量應用程式。 + +ZK-STARK 對於量子電腦也是安全的,而 ZK-SNARK 中使用的橢圓曲綫密碼學 (ECC) 則被廣范認爲容易受到量子電腦攻擊。 ZK-STARK 的缺點是其產生的證明大小更大,在以太坊上進行驗證時更加昂貴。 + +#### 有效性證明如何在零知識證明卷軸中運作? {#validity-proofs-in-zk-rollups} + +##### 證明產生 + +在接受交易之前,營運者會執行常規檢查。 這包括確認: + +- 發送者和接收者帳戶是狀態樹的一部分。 +- 發送者有足夠的資金處理交易。 +- 交易是正確的並與卷軸上的發送者公鑰相符。 +- 發送者的隨機數是正確的,等等。 + +一旦零知識證明卷軸節點擁有足夠的交易,就會將這些交易彙總成一個批次,並為證明電路編譯輸入,以編譯成簡潔的零知識證明。 這包括: + +- 包含批次中所有交易的默克爾樹根。 +- 用於證明交易包含在批次中的默克爾交易證明。 +- 交易中每個發送者-接收者對的默克爾證明,用於證明這些帳戶是卷軸狀態樹的一部分。 +- 一組中間狀態根,源於應用每筆交易的狀態更新(即減少發送者帳戶餘額並增加接收者帳戶餘額)後更新狀態根。 + +證明電路透過「遍歷」每筆交易並執行並營運者完成的相同檢查來計算有效性證明,然後處理交易。 首先,它使用提供的默克爾證明來驗證發送者的帳戶是現有狀態根的一部分。 然後,它會減少發送者的餘額,增加他們的隨機數,對更新的帳戶資料進行雜湊處理,並將其與默克爾證明合併以生成新的默克爾根。 + +該默克爾根反映了零知識證明卷軸狀態的唯一變化:發送者餘額和隨機數的變化。 這是有可能的,因爲用於證明帳戶存在的默克爾證明也用於產生新的狀態根。 + +證明電路對接收者帳戶執行相同的過程。 它會(使用默克爾證明)檢查接收者帳戶是否存在于中間狀態根下,增加它們的餘額,對帳戶資料重新進行雜湊處理,並將其與默克爾證明合併以產生新的狀態根。 + +該過程會對每一筆交易重複;每次「循環」都會透過更新發送者帳戶建立一個新的狀態根,隨後透過更新接收者帳戶建立一個新的狀態根。 如前所述,狀態根的每次更新都代表卷軸狀態樹一部分發生變更。 + +零知識證明電路迭代處理整個交易批次,並在執行最後一筆交易后對產生最終狀態根的更新序列進行驗證。 最後計算的默克爾根成爲零知識證明卷軸的最新規範狀態根。 + +##### 證明驗證 + +在證明電路驗證狀態更新的正確性后,二層網路營運者將計算后的有效性證明提交給一層網路上的驗證者合約。 合約的驗證電路驗證證明的有效性,並檢查證明中包含的公開輸入: + +- **前狀態根**:零知識證明卷軸的舊狀態根(即在交易批次被執行之前),反映二層網路鏈的上一個已知有效狀態。 + +- **后狀態根**:零知識證明卷軸的新狀態根(即交易批次執行之後),反映二層網路鏈的最新狀態。 后狀態根是在證明電路中應用狀態更新后產生的最終根。 + +- **批次根**:批次的默克爾根,透過對批次中的交易進行_默克爾化_和對樹根進行雜湊處理得到。 + +- **交易輸入**:與在已提交批次中執行的交易相關的資料。 + +如果證明滿足電路條件(即證明有效),則意味著存在一系列有效交易,這些交易將卷軸從先前狀態(由前狀態根提供加密指紋)轉換為新狀態(由后狀態根提供加密指紋)。 如果前狀態根與儲存在卷軸合約中的根相符,並且證明是有效的,则卷軸合約就會從證明中獲取后狀態根並更新其狀態樹以反映卷軸的狀態變化。 + +### 進入與退出 {#entries-and-exits} + +使用者透過向部署在一層網路鏈上的卷軸合約中存入代幣,來進入零知識證明卷軸。 該交易已排隊,因爲只有營運者能夠將交易提交到卷軸合約。 + +如果待處理的存款隊列開始填滿,零知識證明卷軸營運者將接受存款交易並將其提交到卷軸合約。 一旦使用者的資金進入卷軸,他們就可以開始交易,將交易發送到營運者進行處理。 使用者可以透過對其帳戶進行杂凑處理,將杂凑發送到卷軸合約,並提供針對當前狀態根進行驗證的默克爾證明,以此驗證他們在卷軸上的餘額。 + +從零知識證明卷軸提款到一層網路非常簡單。 使用者透過將其卷軸上的資產發送到指定帳戶進行銷毀,來發起退出交易。 如果營運者將該交易添加到下一個批次中,使用者就可以向鏈上合約提交提款請求。 該提款請求包含以下内容: + +- 默克爾證明,證明使用者的交易添加到交易批次中的銷毀帳戶。 + +- 交易資料 + +- 批次根 + +- 用於接收存入資金的一層網路地址 + +卷軸合約對交易資料進行杂凑處理,檢查批次根是否存在,並使用默克爾證明檢查交易杂凑是否為批次根的一部分。 之後,合約會執行退出交易並將資金發送到使用者選擇的一層網路上的地址。 + +## 零知識證明卷軸和以太坊虛擬機的相容性 {#zk-rollups-and-evm-compatibility} + +與樂觀卷軸不同,零知識證明卷軸不直接與[以太坊虛擬機 (EVM)](/developers/docs/evm/) 相容。 在電路中證明通用以太坊虛擬機計算比證明簡單計算(如先前描述的代幣傳送)更加困難,且更消耗資源。 + +然而,[零知識技術的進步](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now)重新點燃了將以太坊虛擬機計算包裝在零知識證明中的興趣。 這些努力旨在建立一個零知識以太坊虛擬機 (zkEVM) 實作,能夠高效地驗證程式執行的正確性。 零知識以太坊虛擬機重新建立在電路中進行證明/驗證的現有以太坊虛擬機作業碼,使其能夠執行智慧型合約。 + +與以太坊虛擬機相似,零知識以太坊虛擬機在對某些輸入執行計算之後,會在狀態之間轉換。 區別在於,零知識以太坊虛擬機還會建立零知識證明,以驗證程式執行中每一步的正確性。 有效性證明可以驗證涉及虛擬機狀態(記憶體、堆棧、存儲)和計算本身的作業的正確性(即作業是否調用了正確的作業碼並正確地執行它們?)。 + +與以太坊虛擬機相容的零知識證明卷軸的引入,有望幫助開發者利用零知識證明的可擴展性和安全保證。 更重要的是,與原生以太坊基礎設施的相容性意味著,開發者可以使用熟悉(且經過實地檢驗)的工具和語言構建零知識友好的去中心化應用程式。 + +## 零知識證明卷軸費用如何運作? {#how-do-zk-rollup-fees-work} + +使用者為零知識證明卷軸上的交易支付多少費用取決於燃料費,就像在以太坊主網上一樣。 然而,燃料費在二層網路上的運作方式不同,並且受以下費用影響: + +1. **狀態寫入**:寫入以太坊狀態(即,在以太坊區塊鏈上提交交易)有固定費用。 零知識證明卷軸透過進行批次交易並將固定費用分攤給多名使用者,降低了該費用。 + +2. **資料發佈**:零知識證明卷軸將每筆交易的狀態資料作爲 `calldata` 發佈到以太坊。 `calldata` 費用目前由 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 管控,它規定 `calldata` 的非零位元組和零位元組的費用分別爲 16 燃料和 4 燃料。 每筆交易支付的費用受到需要在鏈上爲其發佈的 `calldata` 數量所影響。 + +3. **二層網路營運者費用**:這是支付給卷軸營運者的金額,作爲處理交易所產生的計算費用的補償,很像以太坊主網上的[交易「優先費」(小費)](/developers/docs/gas/#how-are-gas-fees-calculated)。 + +4. **證明產生和驗證**:零知識證明卷軸營運者必須為交易批次生成有效性證明,這會消耗大量資源。 在主網上驗證零知識證明也會花費燃料(約 500,000 燃料)。 + +除了進行批次交易之外,零知識證明卷軸還透過壓縮交易資料來降低使用者的費用。 你可以[查看即時概覽](https://l2fees.info/)來瞭解使用以太坊零知識證明卷軸的費用。 + +## 零知識證明卷軸如何擴張以太坊? {#scaling-ethereum-with-zk-rollups} + +### 交易資料壓縮 {#transaction-data-compression} + +零知識證明卷軸透過在鏈外計算來提高以太坊基礎層的吞吐量,但真正提升擴展的手段是壓縮交易資料。 以太坊的[區塊大小](/developers/docs/blocks/#block-size)限制了每個區塊能夠保存的資料,進而限制了每個區塊處理的交易數量。 透過壓縮交易相關的資料,零知識證明卷軸顯著增加了每個區塊處理的交易數量。 + +零知識證明卷軸能夠比樂觀卷軸更好地壓縮交易資料,因爲它不必發佈驗證每筆交易所需的所有資料。 它只需要發佈在卷軸上重建帳戶最新狀態和餘額所需的最少資料。 + +### 遞迴證明 {#recursive-proofs} + +零知識證明的一個優點是,證明可以驗證其他證明。 例如,單個 ZK-SNARK 可以驗證其他的 ZK-SNARK。 這種「證明的證明」被稱爲遞迴證明,它顯著提高了零知識證明卷軸的吞吐量。 + +目前,有效性證明是逐塊產生的,並被提交到一層網路合約進行驗證。 然而,驗證單個區塊證明限制了零知識證明卷軸可以實現的吞吐量,因爲當營運者提交證明時只能最終確定一個區塊。 + +然而,遞迴證明可以使用一個有效性證明最終確定多個區塊。 這是因爲證明電路會遞迴彙總多個區塊證明,直到建立一個最終證明。 二層網路營運者提交該遞迴證明,如果合約接受它,所有相關的區塊將會立即最終確定。 使用遞迴證明,可以定期在以太坊上最終確定的零知識證明卷軸交易的數量將會增加。 + +### 零知識證明卷軸的優勢和劣勢 {#zk-rollups-pros-and-cons} + +| 優勢 | 劣勢 | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | +| 有效性證明確保鏈外交易的正確性,並防止營運者執行無效的狀態轉換。 | 與計算和驗證有效性證明相關的成本很高,並且可能會增加卷軸使用者的費用。 | +| 一旦在一層網路上驗證了有效性證明,當狀態更新獲得批准後,交易會更快地最終確定。 | 由於零知識技術的複雜性,構建與以太坊虛擬機相容的零知識證明卷軸很困難。 | +| 依賴去信任加密機制來保證安全,而不是像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/#optimistic-pros-and-cons)一樣依賴受激勵行爲者的誠實。 | 生成有效性證明需要專業化硬體,這可能會鼓勵一些參與方對鏈進行集中化控制。 | +| 將恢復鏈外狀態所需的資料儲存在一層網路上,這保證了安全性、抗審查性和去中心化。 | 中心化營運者(排序者)可以影響交易的順序。 | +| 使用者從更高的資本效率中受益,並且可以立即從二層網路提取資金。 | 硬體要求可能會減少能夠强制推進鏈的參與者數量,這增加了惡意營運者凍結卷軸狀態和審查使用者的風險。 | +| 不依賴於活躍性假設,使用者不必驗證鏈也能保護其資金。 | 一些證明系統(如 ZK-SNARK)需要可信的設定,如果處理不當,可能會損害零知識證明卷軸的安全模型。 | +| 更好的資料壓縮有助於降低在以太坊上發佈 `calldata` 的成本,並將使用者的卷軸費用降到最低。 | | + +### 零知識證明卷軸之視覺解釋 {#zk-video} + +觀看 Finematics 的零知識證明卷軸影片: + + + +### 使用零知識證明卷軸 {#use-zk-rollups} + +零知識證明卷軸存在多種實作,可供你整合到去中心化應用程式: + + + +## 零知識以太坊虛擬機上有哪些項目? {#zkevm-projects} + +零知識以太坊虛擬機上運作的專案包括: + +- **[zkEVM](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _zkEVM 是由以太坊基金會資助的專案,旨在開發與以太坊虛擬機相容的零知識證明卷軸,以及為以太坊區塊產生有效性證明的機制。_ + +- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _是以太坊主網上的一個去中心化零知識證明卷軸,它在零知識以太坊虛擬機 (zkEVM) 上運作,以透明的方式執行以太坊交易,包括具有零知識證明驗證的智慧型合約。_ + +- **[Scroll](https://scroll.io/blog/zkEVM)** - _是一家技術驅動型公司,致力於為以太坊構建原生零知識以太坊虛擬機二層網路解決方案。_ + +- **[Taiko](https://taiko.xyz)** - _Taiko 是等同於以太坊的去中心化零知識證明卷軸([第一類零知識以太坊虛擬機](https://vitalik.eth.limo/general/2022/08/04/zkevm.html))。_ + +- **[ZKsync](https://docs.zksync.io/)** - _ZKsync Era 是與以太坊個虛擬機相容的零知識證明卷軸,由 Matter Labs 構建,並由其自己的零知識以太坊虛擬機提供支援。_ + +- **[Starknet](https://starkware.co/starknet/)** - _StarkNet 是一個與以太坊虛擬機相容的二層網路擴張解決方案,由 StarkWare 構建。_ + +- **[Morph](https://www.morphl2.io/)** - _Morph 是一個利用零知識證明來解決二層網路狀態挑戰問題的混合卷軸擴張解決方案。_ + +## 深入閲讀零知識證明卷軸的相關内容 {#further-reading-on-zk-rollups} + +- [什麼是零知識證明卷軸?](https://coinmarketcap.com/alexandria/glossary/zero-knowledge-rollups) +- [什麼是零知識證明卷軸?](https://alchemy.com/blog/zero-knowledge-rollups) +- [STARK 和 SNARK 的比較](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) +- [什麽是零知識以太坊虛擬機?](https://www.alchemy.com/overviews/zkevm) +- [零知識以太坊虛擬機類型:等同於以太坊、等同於以太坊虛擬機、第 1 類、第 4 類,以及其他難以理解的拗口詞](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4) +- [介紹零知識以太坊虛擬機](https://hackmd.io/@yezhang/S1_KMMbGt) +- [超贊的零知識以太坊虛擬機資源](https://github.com/LuozhuZhang/awesome-zkevm) +- [深入瞭解 ZK-SNARK](https://vitalik.eth.limo/general/2017/02/01/zk_snarks.html) +- [如何實現 SNARK?](https://vitalik.eth.limo/general/2021/01/26/snarks.html) diff --git a/public/content/translations/zh-tw/developers/docs/storage/index.md b/public/content/translations/zh-tw/developers/docs/storage/index.md new file mode 100644 index 00000000000..7743865a665 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/storage/index.md @@ -0,0 +1,217 @@ +--- +title: 去中心化存儲 +description: 去中心化存儲及可以將該存儲整合到去中心化應用程式的可用工具概觀 +lang: zh-tw +--- + +與單一公司或組織運作的中心化伺服器不同,去中心化存儲系統由持有全部資料中部分資料的使用者和營運者的點對點網路組成,建立了一個彈性文件存儲共用系統。 這些存儲系統可以位於基於區塊鏈的應用程式或任何點對點網路中。 + +以太坊本身可以用作去中心化存儲系統,所有智慧型合約中的程式碼存儲都是如此。 然而,當涉及大量資料時,就不符合以太坊的設計目的。 該鏈正在穩步增長,但在撰寫本文時,以太坊鏈約為 500GB - 1TB([取決於用戶端](https://etherscan.io/chartsync/chaindefault)),網路上的每個節點都需要能夠存儲所有資料。 如果鏈上資料量擴大(例如 5TB),所有節點都無法繼續運作。 此外,由於[燃料](/developers/docs/gas)費用,將這麼多資料部署到主網的成本將非常昂貴。 + +由於這些限制,我們需要不同的鏈或方法來以去中心化方式存儲大量資料。 + +在考慮去中心化儲存 (dStorage) 選項時,使用者必須牢記一些事項。 + +- 持久性機制 / 激勵結構 +- 資料保留強制 +- 去中心化 +- 共識 + +## 持續機制 / 誘因架構 {#persistence-mechanism} + +### 基於區塊鏈 {#blockchain-based} + +為了讓一段資料永久保存,我們需要使用持久性機制。 例如,在以太坊上,持久性機制意味著運行一個節點時需要考慮整條鏈。 新的資料被新增至鏈的末端,並且鏈會繼續增長,並要求每個節點複製所有內嵌的資料。 + +這稱為**基於區塊鏈**的持久性。 + +基於區塊鏈的持久性會出現區塊鏈過大,無法維護和存儲所有資料的問題(例如[許多機構](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/)預測整條區塊鏈網路需要 40ZB 的存儲容量)。 + +區塊鏈也必須具有某種類型的激勵結構。 為實現基於區塊鏈的持久性,需要向驗證者支付費用。 資料被新增到鏈上後,向驗證者支付以讓其繼續添加資料。 + +具有基於區塊鏈的持久性的平台: + +- Ethereum +- [Arweave](https://www.arweave.org/) + +### 基於合約 {#contract-based} + +我們能直觀地感受到,**基於合約**的持久性使得資料不能被每個節點複製並永久存儲,而必須根據合約協定進行維護。 這些是與多個節點簽訂的協定,承諾在一段時間內保存一段資料。 一旦時間結束,就必須向節點續費,以保持資料的持久性。 + +在大多數情況下,不會將所有資料存儲在鏈上,而是存儲資料在鏈上位置的雜湊值。 這樣,就不需要擴充整個鏈來保留所有資料。 + +具有基於合約的持久性的平台: + +- [Filecoin](https://docs.filecoin.io/about-filecoin/what-is-filecoin/) +- [Skynet](https://siasky.net/) +- [Storj](https://storj.io/) +- [0Chain](https://0chain.net/) +- [Crust Network](https://crust.network) +- [Swarm](https://www.ethswarm.org/) +- [4EVERLAND](https://www.4everland.org/) + +### 其他考量 {#additional-consideration} + +星際檔案系統是一個儲存和存取檔案、網站、應用程式和資料的分散式系統。 雖然它沒有內建激勵計劃,但可以與上述任何基於合約的激勵解決方案一起使用,以獲得更長期的持久性。 另一個將資料持久儲存在星際檔案系統上的方法是與某項固定服務(表示將你的資料固定在某處)一起使用。 你甚至可以運行自己的星際檔案系統節點來為該網路做出貢獻,從而將你和/或他人的資料免費且持久地儲存在星際檔案系統上。 + +- [星際檔案系統](https://docs.ipfs.io/concepts/what-is-ipfs/) +- [Pinata](https://www.pinata.cloud/)_(星際檔案系統固定服務)_ +- [web3.storage](https://web3.storage/)_(星際檔案系統/菲樂幣固定服務)_ +- [Infura](https://infura.io/product/ipfs)_(星際檔案系統固定服務)_ +- [IPFS Scan](https://ipfs-scan.io) _(星際檔案系統固定瀏覽器)_ +- +- [Filebase](https://filebase.com)_(星際檔案系統固定服務)_ +- [Spheron Network](https://spheron.network/) _(星際檔案系統/菲樂幣固定服務)_ + +SWARM 是一種去中心化的資料儲存和分發技術,具有儲存激勵系統和儲存空間租金價格預測機。 + +## 資料保留 {#data-retention} + +為了保留資料,系統必須有某種機制來確保已保留資料。 + +### 質詢機制 {#challenge-mechanism} + +確保已保留資料的最常用方法之一是使用向節點發出的某種類型的加密質詢以確保節點仍然擁有資料。 一個簡單的例子就是查看Arweave的存取證明。 它們向節點發出質詢,看看節點是否擁有最新區塊和過去隨機區塊的資料。 如果節點無法給出答案,就會受到處罰。 + +具有查問機制的去中心化存儲類型: + +- 0Chain +- Skynet +- Arweave +- Filecoin +- Crust Network +- 4EVERLAND + +### 去中央化性 {#decentrality} + +沒有很好的工具來衡量平台的去中心化程度,但一般來說,你會希望使用不具有某種形式的「認識客戶」的工具來提供平台並非中心化的證據。 + +無「認識客戶」之去中心化工具: + +- 0Chain(實作非 KYC 版本) +- Skynet +- Arweave +- Filecoin +- IPFS +- Ethereum +- Crust Network +- 4EVERLAND + +### 共識 {#consensus} + +這些工具中的大多數都有自己的[共識機制](/developers/docs/consensus-mechanisms/)版本,但通常它們基於[**工作量證明 (PoW)**](/developers/docs/consensus-mechanisms/pow/) 或[**權益證明 (PoS)**](/developers/docs/consensus-mechanisms/pos/)。 + +基於工作量證明: + +- Skynet +- Arweave + +基於權益證明: + +- 以太坊 +- Filecoin +- 0Chain +- Crust Network + +## 相關工具 {#related-tools} + +**IPFS - _星際檔案系統是以太坊的去中心化存儲和檔案引用系統。_** + +- [Ipfs.io](https://ipfs.io/) +- [文件](https://docs.ipfs.io/) +- [Github](https://github.com/ipfs/ipfs) + +**Storj DCS - _為開發者提供安全、私有且相容 S3 的去中心化雲端物件存儲。_** + +- [Storj.io](https://storj.io/) +- [文件](https://docs.storj.io/) +- [GitHub](https://github.com/storj/storj) + +**Skynet - _Skynet 是一個致力於去中心化網路的去中心化工作量證明鏈。

+ +- [Skynet.net](https://siasky.net/) +- [文件](https://siasky.net/docs/) +- [Github](https://github.com/SkynetLabs/) + +**Filecoin - _Filecoin 是由星際檔案系統背後的同一團隊建立的。 它是星際檔案系統概念之上的激勵層。_** + +- [Filecoin.io](https://filecoin.io/) +- [文件](https://docs.filecoin.io/) +- [Github](https://github.com/filecoin-project/) + +**Arweave - _Arweave 是一個用於存儲資料的去中心化存儲平台。_** + +- [Arweave.org](https://www.arweave.org/) +- [文件](https://docs.arweave.org/info/) +- [Arweave](https://github.com/ArweaveTeam/arweave/) + +**0chain - _0Chain 是具有分片和 blobber 的權益證明去中心化存儲平台。_** + +- [0Chain.net](https://0chain.net/) +- [文件](https://docs.0chain.net/0chain/) +- [Github](https://github.com/0chain/) + +**Crust Network - _Crust 是基於星際檔案系統的去中心化存儲平台。_** + +- [Crust.network](https://crust.network) +- [文件](https://wiki.crust.network) +- [GitHub](https://github.com/crustio) + +**Swarm - _用於以太坊 web3 堆疊的分佈式存儲平台和內容分發服務。_** + +- [EthSwarm.org](https://www.ethswarm.org/) +- [文件](https://docs.ethswarm.org/docs/) +- [Github](https://github.com/ethersphere/) + +**OrbitDB - _基於星際檔案系統的去中心化點對點資料庫。_** + +- [OrbitDB.org](https://orbitdb.org/) +- [文件](https://github.com/orbitdb/field-manual/) +- [Github](https://github.com/orbitdb/orbit-db/) + +**Aleph.im - _去中心化雲端專案(資料庫、檔案存儲、運算和去中心化身分)。 鏈下和鏈上點對點技術的獨特融合。 星際檔案系統和多鏈相容性。_** + +- [Aleph.im](https://aleph.im/) +- [文件](https://aleph.im/#/developers/) +- [Github](https://github.com/aleph-im/) + +**Ceramic - _使用者控制的星際檔案系統資料庫存儲,用於資料豐富且引人入勝的應用程式。_** + +- [Ceramic.network](https://ceramic.network/) +- [文件](https://developers.ceramic.network/learn/welcome/) +- [Github](https://github.com/ceramicnetwork/js-ceramic/) + +**Filebase - _ S3 相容的去中心化存儲和異地備援星際檔案系統固定服務。 所有透過 Filebase 上傳到星際檔案系統的檔案,都會自動被固定到 Filebase 基礎設施,並在全球複製 3 份。_** + +- [Filebase.com](https://filebase.com/) +- [文檔](https://docs.filebase.com/) +- [Github](https://github.com/filebase) + +**4EVERLAND - _Web 3.0 雲端運算平台,集存儲、運算和網路核心能力於一身,相容於 S3 並在星際檔案系統和 Arweave 等去中心化存儲網路上提供同步資料存儲。_** + +- [4everland.org](https://www.4everland.org/) +- [文件](https://docs.4everland.org/) +- [GitHub](https://github.com/4everland) + +**Kaleido - _區塊鏈即服務平台,具有點擊按鈕的星際檔案系統節點_** + +- [Kaleido](https://kaleido.io/) +- [文件](https://docs.kaleido.io/kaleido-services/ipfs/) +- [GitHub](https://github.com/kaleido-io) + +**Spheron Network - _Spheron 是一個平台即服務 (PaaS),專為希望在去中心化基礎設施上以最佳效能啟動其應用程式的去中心化應用程式而設計。 它提供開箱即用的運算、去中心化存儲、內容傳遞網路和網頁寄存。_** + +- [spheron.network](https://spheron.network/) +- [文件](https://docs.spheron.network/) +- [GitHub](https://github.com/spheronFdn) + +## 衍生閱讀 {#further-reading} + +- [什麼是去中心化存儲?](https://coinmarketcap.com/alexandria/article/what-is-decentralized-storage-a-deep-dive-by-filecoin) - _CoinMarketCap_ +- [打破關於去中心化存儲的五個常見誤解](https://www.storj.io/blog/busting-five-common-myths-about-decentralized-storage) - _Storj_ + +_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ + +## 相關主題 {#related-topics} + +- [開發架構](/developers/docs/frameworks/) diff --git a/public/content/translations/zh-tw/developers/docs/transactions/index.md b/public/content/translations/zh-tw/developers/docs/transactions/index.md index c0dd27f668c..fe0c577f705 100644 --- a/public/content/translations/zh-tw/developers/docs/transactions/index.md +++ b/public/content/translations/zh-tw/developers/docs/transactions/index.md @@ -153,12 +153,19 @@ Alice 的帳戶將存入 **+1.0 以太幣** 驗證者將保留 **+0.000210 以太幣**的小費 -所有智慧型合約互動也需要燃料。 ![顯示如何退還未使用燃料的圖表](./gas-tx.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ 任何交易中未使用的燃料都會退還給使用者帳戶。 +### 智慧型合約互動 {#smart-contract-interactions} + +任何涉及智慧型合約的交易都需要燃料。 + +智慧型合約也可以包含稱為 [`view`](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) 或 [`pure`](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions) 的函數,而不會改變合約的狀態。 因此,從外部帳戶調用這些函數不需要任何燃料。 此場景的底層遠端程序調用 [`eth_call`](/developers/docs/apis/json-rpc#eth_call) + +與使用 `eth_call` 存取不同,這些 `view` 或 `pure` 函數也通常被內部調用(即從合約本身調用或從另一個合約調用),這會消耗燃料。 + ## 交易的生命週期 {#transaction-lifecycle} 一旦交易被提交,就會發生以下情況: @@ -191,6 +198,16 @@ Alice 的帳戶將存入 **+1.0 以太幣** - `TransactionType` - 介於 0 和 0x7f 之間的數字,代表總計 128 種可能的交易類型。 - `TransactionPayload` - 由交易類型定義的任意字節位元組陣列。 +根據 `TransactionType` 值,交易可以分類為 + +1. **類型 0(傳統)交易:**自以太坊推出以來使用的原始交易格式。 它們不包括 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 的功能,例如動態燃料費計算或智慧型合約的存取清單。 傳統交易缺少在序列化形式中指示交易類型的特定前綴,在使用[遞迴長度前綴 (RLP) ](/developers/docs/data-structures-and-encoding/rlp)編碼時,該前綴以位元組 `0xf8` 開始。 這些交易的 TransactionType 值為 `0x0`。 + +2. **類型 1 交易:**在 [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) 中引入作為以太坊[柏林升級](/history/#berlin)的一部分,這些交易包含一個 `accessList` 參數。 此清單指定了交易期望存取的地址和儲存金鑰,有助於潛在降低涉及智慧型合約的複雜交易的[燃料](/developers/docs/gas/)成本。 EIP-1559 的費用市場變化不會包含在類型 1 交易中。 類型 1 交易也包含一個 `yParity` 參數,該參數可以是 `0x0` 或 `0x1`,表示 secp256k1 簽章的 y 值的奇偶性。 此類交易透過開頭的位元組 `0x01` 開頭辨識,其 TransactionType 值為 `0x1`。 + +3. **類型 2 交易**,通常稱為 EIP-1559 交易,是以太坊[倫敦升級](/history/#london)裡 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 中引入的交易。 這類交易已成為以太坊網路上的標準交易類型。 這些交易引入了一種新的費用市場機制,透過將交易費用分為基本費用和優先費來提高可預測性。 這些交易的開頭為位元組 `0x02`,並包含 `maxPriorityFeePerGas` 和 `maxFeePerGas` 等欄位。 類型 2 交易因其靈活性和效率而成為預設交易,在網路高度擁塞期間尤其受到青睞,因為它們能夠幫助使用者更好地預測及管理交易費用。 這些交易的 TransactionType 值為 `0x2`。 + + + ## 衍生閱讀 {#further-reading} - [EIP-2718:Typed Transaction Envelope 交易](https://eips.ethereum.org/EIPS/eip-2718) diff --git a/public/content/translations/zh-tw/developers/docs/wrapped-eth/index.md b/public/content/translations/zh-tw/developers/docs/wrapped-eth/index.md new file mode 100644 index 00000000000..defbdf83881 --- /dev/null +++ b/public/content/translations/zh-tw/developers/docs/wrapped-eth/index.md @@ -0,0 +1,65 @@ +--- +title: 甚麼是包裝以太幣 (WETH) +description: 包裝以太幣 (WETH) 簡介 — 以太幣 (ETH) 的一種 ERC20 相容包裝函式。 +lang: zh-tw +--- + +# 包裝以太幣 (WETH) {#intro-to-weth} + +以太幣 (ETH) 是以太坊的主要貨幣。 以太幣有多種用途,例如質押、作為貨幣使用、以及支付計算所需要的燃料費。 **包裝以太幣實際上是以太幣的升級形式,具備許多應用程式和 [ERC-20 代幣](/glossary/#erc-20)(即以太坊上其他類型的數位資產)所需的額外功能。** 要與這些代幣互動,以太幣需要遵循與它們相同的規則,這些規則被稱為 ERC-20 標準。 + +為了彌合這一差距,包裝以太幣 (WETH) 應運而生。 **包裝以太幣是一種智慧型合約,讓你能夠存入任何數量的以太幣,並獲得同樣數量的符合 ERC-20 代幣標準的鑄造包裝以太幣**。 包裝以太幣是以太幣的一種表現形式,讓你能夠以 ERC-20 代幣的方式與其互動,而不是以原生資產以太幣的方式。 你會依然需要一些原生以太幣來支付燃料費,所以當你存入時請確保保留一些以太幣。 + +你也可以通過包裝以太幣智慧型合約將包裝以太幣換回以太幣。 你可以使用包裝以太幣智慧型合約贖回任意數量的包裝以太幣,而你會收到相同數量的以太幣。 存入的包裝以太幣會被銷毀,並從包裝以太幣的流通量中移除。 + +**流通中的以太幣有大概 3% 被鎖定在包裝以太幣代幣合約中**,令其成為其中一個最常用的 [智慧型合約](/glossary/#smart-contract)。 包裝以太幣對於與去中心化金融 (DeFi) 中的應用程式互動的使用者尤為重要。 + +## 為甚麼我們要把以太幣包裝成 ERC-20? {#why-do-we-need-to-wrap-eth} + +[ERC-20](/developers/docs/standards/tokens/erc-20/) 為可轉讓代幣定義了一個標準介面,讓所有人都可以建立能和以太坊生態系統中使用該標準的代幣和應用程式無縫互動的代幣。 因為**以太幣的出現早於 ERC-20 標準**,因此以太幣並不符合此規範。 這意味著**你無法簡單地**把以太幣和其他 ERC-20 代幣進行交換,或**無法在使用 ERC-20 標準的應用程式中使用以太幣。** 把以太幣包裝起來後,你可以進行以下操作: + +- **把以太幣換成其他 ERC-20 代幣**:你無法直接把以太幣換成其他 ERC-20 代幣。 包裝以太幣是一種符合 ERC-20 同質化代幣標準的以太幣表現形式,可以與其他 ERC-20 代幣進行交換。 + +- **在去中心化應用程式中使用以太幣**:因為以太幣與 ERC-20 標準不相容,開發者需要在去中心化應用程式中建立獨立的介面(一個用於以太幣,另一個用於 ERC-20 代幣)。 包裝以太幣消除了這一障礙,使開發者能夠在同一個去中心化應用程式中處理以太幣和其他代幣。 許多去中心化金融應用程式使用此標準,並建立了用於交換這些代幣的市場。 + +## 包裝以太幣 (WETH) 與以太幣 (ETH):有何不同? {#weth-vs-eth-differences} + +| | **以太幣 (ETH)** | **包裝以太幣 (WETH)** | +| --- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| 供應 | 以太幣的供應由以太坊協定管理。 以太幣的 [發行](/roadmap/merge/issuance) 由以太坊的驗證者在處理交易和建立區塊時進行。 | 包裝以太幣是一種 ERC-20 代幣,其供應由智慧型合約管理。 當合約接收到使用者存入的以太幣後,便會發行新的包裝以太幣;或者當使用者希望將包裝以太幣換回以太幣時,會將對應的包裝以太幣銷毀。 | +| 所有權 | 所有權是透過你的帳戶餘額由以太坊協定管理的。 | 包裝以太幣的所有權由包裝以太幣代幣智慧型合約管理,並由以太坊協定保障安全。 | +| 燃料 | 以太幣 (ETH) 是以太坊網路上針對計算的公認的支付單位。 燃料費以 gwei(以太幣的一種單位)來計價。 | 以包裝以太幣支付燃料費原生不受支援。 | + +## 常見問題 {#faq} + + + +你需要支付燃料費來使用包裝以太幣智慧型合約來兌換或贖回以太幣。 + + + + + +包裝以太幣通常被認為是安全的,因為它基於一個簡單且經過實證的智慧型合約。 包裝以太幣合約也已經經過正式驗證,這是以太坊上智慧型合約的最高安全標準。 + + + + + +除了本頁描述的 [包裝以太幣的規範化實作](https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)外,還有其他變體存在於市場中。 這些可能是由應用程式開發者建立的自訂代幣,或在其他區塊鏈上發行的版本,可能會有不同的行為或具有不同的安全屬性。 **始終仔細檢查代幣資訊,以確認你正在與哪一種包裝以太幣實作進行互動。** + + + + + +- [以太坊主網](https://etherscan.io/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) +- [Arbitrum](https://arbiscan.io/token/0x82af49447d8a07e3bd95bd0d56f35241523fbab1) +- [Optimism](https://optimistic.etherscan.io/token/0x4200000000000000000000000000000000000006) + + + +## 延伸閱讀 {#further-reading} + +- [包裝以太幣究竟是什麼?](https://weth.tkn.eth.limo/) +- [Etherscan 上的包裝以太幣代幣資訊](https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2) +- [包裝以太幣的形式化驗證](https://zellic.io/blog/formal-verification-weth) diff --git a/public/content/translations/zh-tw/eips/index.md b/public/content/translations/zh-tw/eips/index.md index 5db0d1a72cf..9465f252a3a 100644 --- a/public/content/translations/zh-tw/eips/index.md +++ b/public/content/translations/zh-tw/eips/index.md @@ -54,10 +54,18 @@ lang: zh-tw 若有興趣進一步瞭解以太坊改進提案,請參閱[以太坊改進提案網站](https://eips.ethereum.org/)和 [EIP-1](https://eips.ethereum.org/EIPS/eip-1)。 以下為一些實用連結: -- [以太坊改進提案完整清單](https://eips.ethereum.org/all) +- [每個以太坊改進提案的清單](https://eips.ethereum.org/all) - [所有以太坊改進提案類型的說明](https://eips.ethereum.org/EIPS/eip-1#eip-types) - [所有以太坊改進提案狀態的說明](https://eips.ethereum.org/EIPS/eip-1#eip-process) +### 社群教育專案 {#community-projects} + +- [PEEPanEIP](https://www.youtube.com/playlist?list=PL4cwHXAawZxqu0PKKyMzG_3BJV_xZTi1F) — *PEEPanEIP 是一個教育影片系列,討論以太坊改進提案 (EIP) 以及即將到來的升級的主要功能。* +- [EIPs For Nerds](https://ethereum2077.substack.com/t/eip-research) — *EIPs For Nerds 以ELI5 風格、全面概述各種以太坊改進提案 (EIP),包括核心 EIP 和應用程式/基礎設施層 EIP (ERC),以教育讀者並圍繞以太坊協定的提議變更達成共識。* +- [EIPs.wtf](https://www.eips.wtf/) — *EIPs.wtf 提供以太坊改進提案 (EIP) 的額外資訊,包括它們的狀態、實作細節、相關拉取請求和社群意見回饋。* +- [EIP.Fun](https://eipfun.substack.com/) — *EIP.Fun 提供有關以太坊改進提案 (EIP) 的最新消息,EIP 會議更新等等。* +- [EIPs Insight](https://eipsinsight.com/) — *EIPs Insight 根據從不同資源收集的資訊,展示以太坊改進提案 (EIP) 流程的狀態和統計資料。* + ## 參與方式 {#participate} 所有人皆可建立以太坊改進提案。 提交提案前必須閱讀 [EIP-1](https://eips.ethereum.org/EIPS/eip-1),其中概述了以太坊改進提案流程以及撰寫以太坊改進提案的方法;並至[以太坊魔術師](https://ethereum-magicians.org/)徵求意見回饋,提交草案之前應先在這裡與社群討論提案。 diff --git a/public/content/translations/zh-tw/enterprise/index.md b/public/content/translations/zh-tw/enterprise/index.md index 6172480e80e..0a31a3da2e3 100644 --- a/public/content/translations/zh-tw/enterprise/index.md +++ b/public/content/translations/zh-tw/enterprise/index.md @@ -1,89 +1,162 @@ --- -title: 企業 -description: 關於企業級應用的公共和私人以太坊區塊鏈的指南、文章和工具 +title: 以太坊主網上的企業 +description: 有關公共以太坊區塊鏈上的企業應用程式的指南、文章和工具 lang: zh-tw --- -# 企業級 Ethereum {#ethereum-for-enterprise} +# 企業級以太坊 {#ethereum-for-enterprise} -企業級公開或私有 Ethereum 區塊鏈的相關指南、文章和工具。 +以太坊可以幫助包括大公司在內的多種企業: -## 為什麼選擇企業版 Ethereum? {#why-enterprise-ethereum} +- 增加企業各方之間的信任並降低協調成本 +- 提高企業網路問責性和營運效率 +- 建立新的商業模式和價值創造的機會 +- 提高企業組織的未來競爭性 -選擇企業版 Ethereum 的原因為何? +早些年前,許多企業區塊鏈應用程式都是建構在私有權限的以太坊相容區塊鏈或聯盟鏈上。 如今,得益於技術進步帶來的更高吞吐量、更低的交易成本以及隱私保護,大多數使用以太坊技術的企業應用程式都是在公共以太坊主網或[二層網路](/layer-2)鏈上構建的。 -- 新的商業模式以及創造價值的機會 -- 減少合作夥伴之間的信任以及協作成本 -- 增加企業網絡中究責與經營上的效率 -- 證明企業的未來競爭力 -- 公有主鏈與私有鏈的相容性 -如需了解更多資訊,請參考下列相關文章: +## 資源 {#enterprise-resources} -- [為什麼企業級以太坊遠超於分佈式賬本技術的 5 個理由](https://media.consensys.net/5-reasons-why-enterprise-ethereum-is-so-much-more-than-a-distributed-ledger-technology-c9a89db82cb5) -- [區塊鏈行業案例及應用](https://media.consensys.net/enterprise-ethereum-blockchain-use-cases-and-applications-by-industry-3914d1210049) -- [安永向公共領域發布零知識證明區塊鏈交易技術以提高區塊鏈隱私標準](https://www.ey.com/en_gl/news/2019/04/ey-releases-zero-knowledge-proof-blockchain-transaction-technology-to-the-public-domain-to-advance-blockchain-privacy-standards) -- [Quorum 簡介:金融業的區塊鏈](https://medium.com/blockchain-at-berkeley/introduction-to-quorum-blockchain-for-the-financial-sector-58813f84e88c) +### 了解更多 {#further-reading} -## 組織 {#organizations} +用於了解企業如何從以太坊受益的非技術資源 -透過不同組織間的共同努力以及合作,Ethereum 對於企業來說更加友善。 +- [為什麼區塊鏈對商業有益?](https://entethalliance.org/why-are-blockchains-useful-for-business/) - _從可預測性的角度討論區塊鏈的價值_ +- [企業以太坊聯盟 2023 年商業準備報告](https://entethalliance.org/eea-ethereum-business-readiness-report-2023/) - _調查了公共以太坊和更廣泛的企業以太坊生態系統的潛力和能力_ +- [_《以太坊商業》_ 作者 Paul Brody](https://www.uapress.com/product/ethereum-for-business/) - _一本簡單易懂的英文用例指南,内容包括從資產管理、支付以及供應鏈獲取回報_ -- [EEA](https://entethalliance.org/) _Ethereum 企業聯盟是會員制導向的組職,主要為商業活動和全世界的消費者開發一個強調協作以及互通的區塊鏈。 我們的組織由領導人、採用者、創新者、開發者、以及企業所組成,目標是共同開創一個開放、去中心化的網路。_ +### 組織 {#organizations} -- [Hyperledger Foundation](https://hyperledger.org) _Hyperledger 是一個開放原始碼資源,目的在共同打造跨產業的區塊鏈科技。 這是一項全球性的合作計畫,由 Linux 基金會主持,其中包含財經、銀行、物聯網、供應鏈、製造業以及科技方面的領袖參與其中\_\_。Linux 基金會也有與 Ethereum 合作的計畫:_ -[Hyperledger Besu](https://www.hyperledger.org/blog/2019/08/29/announcing-hyperledger-besu) -- Hyperledger Burrow +一些組織已經通力合作讓以太坊更適合企業使用 -## 企業聚焦的服務 {#enterprise-focused-services} +- [企業以太坊聯盟 (EEA)](https://entethalliance.org/) - 幫助組織在日常業務運營中採用以太坊技術。 其目標是通過專業和商業支持、倡導和研究、標準開發以及生態系統信任服務,加速企業以太坊的發展。 +- [全球區塊鏈商業委員會 (GBBC)](https://www.gbbc.io/)——區塊鏈技術生態系統的行業協會。 通過與政策制定者和監管機構的互動、策劃活動和深入討論,以及推動研究,全球區塊鏈商業委員會致力於推動區塊鏈的進一步採用,以創建更安全、公平和功能更強的社會。 -下列是提供企業級架構的區塊鏈服務: -- [Blockapps](https://blockapps.net/) _透過 STRATO 平台實作企業版的 Ethereum 協定、模型和 API_ -- [Clearmatics](https://www.clearmatics.com/about) _區塊鏈研發公司,致力於協議以及點對點平台架構_ -- [PegaSys Plus](https://pegasys.tech/enterprise/) _提供與 HF Besu 相同的功能和特性的同時,額外提供聚焦於企業級應用的優點_ -- [Quorum](https://www.goquorum.com/) _開源區塊鏈平台,將公共以太坊社區的創新與增強功能相結合,以便滿足企業需求_ +## 企業開發者資源 {#enterprise-developer-resources} + +### 產品和服務 {#products-and-services} -## 協定以及基礎建設 {#protocol-and-infrastructure} +- [4EVERLAND](https://www.4everland.org/) - _提供應用程式介面、遠端程序呼叫服務和工具,用於託管去中心化應用程式並在以太坊上啟用去中心化存儲_ +- [Alchemy](https://www.alchemy.com/) - _提供應用程式介面服務和工具,用於在以太坊上建立和監控應用程式_ +- [Blast](https://blastapi.io/) - _一個應用程式介面平台,為以太坊歸檔主網和測試網 提供 RPC/WSS 應用程式介面。_ +- [Blockapps](https://blockapps.net/) - _構成 STRATO 平台的企業以太坊協議、工具和應用程式介面的實作_ +- [Chainstack](https://chainstack.com/) - _主網和測試網以太坊基礎結構,託管在公共隔離的客戶雲端中_ +- [ConsenSys](https://consensys.io/) - _提供一系列用於在以太坊上構建的產品和工具,以及諮詢和定制開發服務_ +- [Crossmint](http://crossmint.com/) _企業級 web3 開發平台,用於部署智慧型合約,支援信用卡和跨鏈支付,並使用應用程式介面來建立、分發、銷售、儲存和編輯非同質化代幣。_ +- [Envision Blockchain](https://envisionblockchain.com/) - _提供專門針對以太坊主網的企業級諮詢和開發服務_ +- [EY OpsChain](https://blockchain.ey.com/products/contract-manager) - _透過在你值得信賴的業務合作夥伴網路中發出報價請求、合約、採購訂單和發票來提供採購工作流程_ +- [Hyperledger Besu](https://www.hyperledger.org/use/besu) - _一個以企業為中心的開放原始碼以太坊用戶端,在 Apache 2.0 許可下開發並用 Java 編寫_ +- [Infura](https://infura.io/) - _對以太坊和星際檔案系統網路的可擴展應用程式介面存取_ +- [Kaleido](https://kaleido.io/) - _以企業為中心的開發平台,提供簡化的區塊鏈和數位資產應用程式_ +- [NodeReal](https://nodereal.io/) - _為 Web3 生態系統提供可擴展的區塊鏈基礎結構和應用程式介面服務供應商_ +- [Moralis](http://moralis.io/) - _具備 SOC2 第 2 類認證的企業級應用程式介面與節點_ +- [Provide](https://provide.services/) - _企業零知識中介軟體_ +- [QuickNode](https://www.quicknode.com/) - _提供可靠、快速的節點以及 NFT API、Token API 等高階應用程式介面,同時提供統一的產品套件和企業級解決方案_ +- [Tenderly](https://tenderly.co) - _一個 Web3 開發平台,為開發、測試、監控和操作智慧型合約提供偵錯、可觀察性和基礎結構構建塊_ +- [Unibright](https://unibright.io/) - _一支由區塊鏈專家、架構師、開發者和顧問組成的團隊,擁有 20 多年的業務流程與整合經驗_ +- [Zeeve](https://www.zeeve.io/) - _提供一系列用於在以太坊上構建的產品和工具,以及用於企業 Web3 應用程式的基礎結構和應用程式介面。_ -- [Hyperledger Besu](https://www.hyperledger.org/projects/besu) _以 Apache 2.0 許可開發並用 Java 編寫的開源以太坊客戶端_ -- [Infura](https://infura.io/) _對以太坊和 IPFS 網絡的可擴展 API 訪問_ -- [Kaleido](https://kaleido.io/) _用於構建和運行跨雲、混合式企業生態系統的全棧平台_ -- [Autonity](https://www.clearmatics.com/about/) _實現 p2p 協議並提供客戶端軟件和基礎結構的協議套件_ -- [Chainstack](https://chainstack.com/) _多雲和多協議平台即服務,使企業能夠快速構建、部署和管理去中心化網絡和服務_ +### 工具及程式庫 {#tooling-and-libraries} -## 企業版特色 {#enterprise-features} +- [Baseline 專案](https://www.baseline-protocol.org/) - _Baseline 協議是一組工具和程式庫,協助企業在隱私的情況下協調複雜的多方業務流程和工作流程,同時將資料保存在各自的記錄系統中。 此標準使兩個或多個狀態機器,透過使用網路作為公共參考框架,來實現和維護資料一致性和工作流程連續性。_ +- [Chainlens](https://www.chainlens.com/) - _來自 Web3 實驗室的質押即服務和本地區塊鏈數據及分析平台_ +- [Ernst & Young's 'Nightfall'](https://github.com/EYBlockchain/nightfall_3) - _使用樂觀卷軸的應用程式,在零知識下轉移 ERC20、ERC721 和 ERC1155 應用程式_ +- [Truffle 套件](https://trufflesuite.com) - _區塊鏈開發套件(Truffle、Ganache、Drizzle)_ -對於網路參與者來說,公開與私有的 Ethereum 網路需要有各自的特色。 以下列舉一些特點: +### 可擴展性解決方案 {#scalability-solutions} -### 權限管理 {#permissioning} +大多數新的區塊鏈應用程式都建構在[二層網路](/layer-2)鏈上。 二層網路是一組運行在以太坊(一層網路)之上的技術或系統,繼承了一層網路的安全性,並提供比一層網路更大的交易處理能力(吞吐量)、更低的交易費用(運營成本),以及更快的交易確認速度。 二層網路擴展解決方案由一層網路保護,但它們使區塊鏈應用程式能夠處理比一層網路所能容納的更多的使用者、操作或資料。 其中許多利用密碼學和零知識 (ZK) 證明的最新進展,來最大限度地提高效能和安全性,有些還提供額外的隱私等級。 -- [Pegasys 權限合同](https://github.com/PegaSysEng/permissioning-smart-contracts) -- [Quorum 權限解決方案](https://github.com/jpmorganchase/quorum/wiki/Security) +## 以太坊主網上運行的企業應用程式 {#enterprise-live-on-mainnet} -### 隱私 {#privacy} +以下是一些由傳統、非區塊鏈公司在公共以太坊主網和二層網路之上構建的企業應用程式。 -- [Ernst & Young's ‘Nightfall'](https://github.com/EYBlockchain/nightfall) _更多信息 [here](https://bravenewcoin.com/insights/ernst-and-young-rolls-out-'nightfall-to-enable-private-transactions-on)_ -- [Pegasys 的獵戶座](https://docs.pantheon.pegasys.tech/en/stable/Concepts/Privacy/Privacy-Overview/) _[更多信息](https://pegasys.tech/privacy-in-pantheon-how-it-works-and-why-your-enterprise-should-care/)_ -- [Quorum's Tessera](https://docs.goquorum.com/en/latest/Privacy/Tessera/Tessera/) _更多信息[這裡](https://github.com/jpmorganchase/tessera/wiki/How-Tessera-works)_ +### 付款 {#payments} -### 安全性 {#security} +- [Brave Browser](https://basicattentiontoken.org/) - _向使用者支付對廣告的關注,並且用戶可以透過 Basic Attention 代幣向發布商付費以支持他們_ +- [瑞士盧加諾市](https://bitcoinsuisse.com/news/city-of-lugano-accepts-crypto-payments) - _繳稅和其他市政服務_ +- [EthereumAds](https://ethereumads.com/) - _讓網站經營者出售廣告空間並透過以太坊獲得報酬_ +- [hCaptcha](https://www.hcaptcha.com/) - _預防機器人的驗證碼系統,根據使用者為機器學習標記資料所做的工作向網站營運商付費。 目前由 Cloudflare 部署_ +- [Opera MiniPay](https://www.opera.com/products/minipay) - _讓擁有非託管錢包的非洲人更容易、更安全地使用行動支付,並利用電話號碼輕鬆交易_ +- [Roxpay](https://www.roxpay.ch/) - _自動執行按使用付費的資產發票和付款_ +- [SAP 數位貨幣中心](https://community.sap.com/t5/technology-blogs-by-sap/cross-border-payments-made-easy-with-digital-money-experience-the-future/ba-p/13560384) - _穩定幣跨境支付_ +- [Toku](https://www.toku.com/) - _薪資單、代幣授予管理、稅務合規、當地就業、福利和分散式人力資源解決方案_ +- [Xerof](https://www.xerof.com/) - _促進快速且廉價的國際(跨境)企業對企業支付_ -- [Clef](https://geth.ethereum.org/docs/clef/tutorial) _用於簽署交易和數據,旨在代替 Geth 的帳戶管理_ -- [EthSigner](https://github.com/ConsenSys/ethsigner) _與 Web3 應用提供商一起使用的交易簽名應用程序_ +### 金融 {#finance} -### 模組化 {#tooling} +- [荷蘭銀行](https://tokeny.com/tokeny-fuels-abn-amro-bank-in-tokenizing-green-bonds-on-polygon/) - _使用 Tokeny、代幣化綠色債券_ +- [Crowdz](https://crowdz.io/) - _發票/應收帳款融資和保理平台_ +- [Mata Capital](https://consensys.io/blockchain-use-cases/finance/mata-capital) - _房地產投資代幣化_ +- [Obligate](https://www.obligate.com/) - _受監管且經過 KYC 的鏈上債券和商業票據_ +- [西門子](https://press.siemens.com/global/en/pressrelease/siemens-issues-first-digital-bond-blockchain) - _債券發行_ +- [Sila](https://silamoney.com/) - _使用穩定幣的銀行和代收代付業務之基礎設施即服務_ +- [法國興業銀行 FORGE](https://www.sgforge.com/product/bonds/) - _債券發行_ +- [Taurus](https://www.taurushq.com/) - _發行代幣化證券_ -- [Alathio](https://explorer.aleth.io/) _以太坊數據分析平台_ -- [Treum](https://treum.io/) _使用區塊鏈技術為供應鏈帶來透明度、可追溯性和可交易性_ +### 資產代幣化 {#tokenization} -## 企業開發社群 {#enterprise-developer-community} - -- [Alethio Discord](https://discord.gg/d2t8NuU) -- [Infura Discourse](https://community.infura.io/) -- [Kaleido Twitter](https://twitter.com/Kaleido_io) -- [Hyperledger Rocketchat](https://chat.hyperledger.org/) -- [Hyperledger Rocketchat (Besu channel)](https://chat.hyperledger.org/channel/besu) -- [Hyperledger Rocketchat (Burrow channel)](https://chat.hyperledger.org/channel/burrow) -- [PegaSys Twitter](https://twitter.com/Kaleido_io) -- [Quorum Slack channel](http://bit.ly/quorum-slack) -- [Chainstack Gitter](https://gitter.im/chainstack/Lobby) +- [AgroToken](https://agrotoken.io/en/) - _農產品代幣化與交易_ +- [Bitbond](https://www.bitbond.com/) - _透過代幣化改善金融資產的發行、結算和託管_ +- [Blocksquare](https://blocksquare.io/) - _房地產代幣化基礎設施_ +- [Centrifuge](https://centrifuge.io/) - _代幣化應收帳款融資、債務和資產_ +- [Clearmatics](https://www.clearmatics.com) - _為代幣化價值的點對點交換建構去中心化網路平台_ +- [dClimate](https://www.dclimate.net/) - _去中心化氣候資訊生態系統_ +- [Fabrica](https://www.fabrica.land/) - _用於數位化房地產資產、支援去中心化金融借貸和房地產交易的平台_ +- [Fasset](https://www.fasset.com/) - _支援永續基礎設施的平台_ +- [Nori](https://nori.com/) - _開源市場基礎設施​​,讓碳清除專案衡量其活動並從中賺取利潤_ +- [Propy](https://propy.com/) - _透過智慧型合約實現住宅房地產交易自動化的平台_ +- [RealT](https://realt.co/) - _全球各地的投資者可以透過完全合規、分級和代幣化所有權在美國房地產市場上購買物業_ +- [Ruby](https://www.rubey.be/) - _一個將高端藝術品代幣化以供零售投資者使用的平台_ +- [Swarm](https://swarm.com/) - _一個專注於以合規方式實現真實世界資產數位化和交易的平台_ +- [Thallo](https://www.thallo.io/) - _將數位碳信用融入商業交易的平台_ +- [Tokenchampions](https://tokenchampions.com/) - _代幣化歐洲足球員的肖像權_ + +### 數據公證 {#notarization-of-data} + +- [ANSA](https://www.ansa.it/english/news/science_tecnology/2020/04/06/ansa-using-blockchain-to-help-readers_af820b4f-0947-439b-843e-52e114f53318.html) - _義大利通訊社,它打擊假新聞並使讀者能夠透過將新聞報導記錄在主網上來驗證新聞報導的來源_ +- [Breitling](https://www.coindesk.com/breitling-arianee-all-new-watches-ethereum) - _在以太坊上記錄手錶的出處和維修歷史_ +- [BRØK](https://www.xn--brk-1na.no/) - _挪威政府為公眾非上市公司提供的股權結構表平台_ +- [Certifaction](https://certifaction.com/) - _具有隱私設計的合法有效電子簽名_ +- [EthSign](https://ethsign.xyz/) - _在以太坊區塊鏈上記錄簽名的電子文檔_ +- [Stacktical](https://stacktical.com/) - _透過本地代管功能實現服務等級協定 (SLA) 的軟體開發、數位發行和數位簽名_ +- [Verizon](https://decrypt.co/46745/verizon-news-press-releases-ethereum-full-transparency) - _在以太坊上記錄新聞稿,以確保企業責任和信任_ +- [WolfTown](https://www.mef.net/edge-view-blog/automated-secure-timely-sla-reporting-is-finally-a-reality/) - _ 屬於 MEF 與 Sage Management,自動執行電信業者之間的服務等級協定報告_ + +### 供應鏈 {#supply-chain} + +- [Birra Peroni](https://www.ey.com/en_gl/news/2021/05/birra-peroni-is-the-first-industrial-organization-to-mint-unique-non-fungible-tokens-using-ey-opschain-traceability) _為每批新啤酒鑄造非同質化代幣,從而提高整個供應鏈的可見度和效率_ +- [CargoX](https://cargox.io/) - _用於運輸的電子提單和文件傳輸提供者_ +- [Circularize](https://www.circularise.com/) - _產品原料的端到端可追溯性解決方案_ +- [EY OpsChain 合約管理器](https://blockchain.ey.com/products/contract-manager) - _透過業務夥伴網路發出詢價、合約、採購訂單和發票,使公司能夠參與採購工作流程_ +- [Minespider](https://www.minespider.com/) - _供應鏈追蹤和來源監測,以及二氧化碳排放追蹤_ +- [Morpheus.network](https://morpheus.network/) - _供應鏈自動化平台_ +- [StaTwig](https://statwig.com/) - _供應鏈營運_ +- [TradeTrust](https://www.tradetrust.io/) - _驗證國際運輸的電子提單 (eBL)_ +- [Transmute](https://transmute.industries/) - _全球貿易資料交換平台;支援以太坊上使用去中心化身分的交易_ + +### 保險 {#insurance} + +- [Arbol](https://www.arbolmarket.com/) - _涵蓋天氣相關風險的參數型保險_ +- [Etherisc](https://etherisc.com/) - _針對各種風險的去中心化保險_ +- [Nayms](https://www.nayms.com/) - _使用 AON 構建的數位空間,用於創建保險計劃、籌集和交易資本、風險記錄以及保費和索賠交易的支付方式_ + +### 身分、憑證和認證 {#credentials} + +- [BCdiploma](https://www.bcdiploma.com/) - _數位化並驗證文憑、證書和微型認證_ +- [Hyland Credentials](https://www.hylandcredentials.com) - _數位文憑和其他教育認證、執照和證書_ +- [帛琉數位居留計劃](https://rns.id/) - _讓全球公民能夠擁有帛琉政府頒發的合法身分證_ +- [Spherity](https://www.spherity.com/) - _提供數位身分管理解決方案,以在生態系統中建立數位信任,專注於去中心化身分和可驗證的憑證_ +- [Zug Digital ID](https://ezug.ch/en/) - _是瑞士基於區塊鏈的身份系統,為居民提供對政府服務的數位存取和支援功能,例​​如租借電動自行車和市政投票_ + +### 娛樂、非同質化代幣、忠誠度 + +- [Adidas Virtual Gear](https://www.adidas.com/metaverse) - _虛擬裝備非同質化代幣收藏_ +- [大英博物館的沙盒](https://decrypt.co/150405/british-museum-enter-metaverse-via-sandbox) - _非同質化代幣收藏_ +- [Fruitlab](https://fruitlab.com/) - _遊戲玩家透過觀看、分享和玩線上遊戲來賺錢的平台_ +- [Nike Swoosh](https://www.swoosh.nike/) - _非同質化代幣平台_ +- [Sothbebys Metaverse](https://metaverse.sothebys.com/) - _蘇富比的數位藝術非同質化代幣市場_ + +如你願意添增至此清單,請查看[貢獻方案程序簡介](/contributing/)。 diff --git a/public/content/translations/zh-tw/enterprise/private-ethereum/index.md b/public/content/translations/zh-tw/enterprise/private-ethereum/index.md new file mode 100644 index 00000000000..86a75fafd73 --- /dev/null +++ b/public/content/translations/zh-tw/enterprise/private-ethereum/index.md @@ -0,0 +1,26 @@ +--- +title: 企業級私有以太坊 +description: 有關私有以太坊區塊鏈上的企業應用程式的資源。 +lang: zh-tw +--- + +# 企業級私有以太坊 {#private-ethereum-for-enterprise} + +企業區塊鏈應用程式可以建立在公共且無需許可的以太坊主網上,或者依據以太坊技術研發的私有區塊鏈之上。 有關在公有以太坊主網上建立應有程式的更多資訊,請見[企業級以太坊主網](/enterprise/)。 + +## 私有企業用以太坊開發者資源 {#developer-resources-private-enterprise-ethereum} + +### 組織 {#organisations} + +透過不同組織間的共同努力以及合作,以太坊對於企業來說更加友善: + +- [企業以太坊聯盟](https://entethalliance.org/) EEA 幫助組織在日常業務運營中採用以太坊技術。 我們深耕以太坊生態系統,開發更多新的商業機會、促進產業採納並互相學習合作。 +- [Hyperledger](https://hyperledger.org) _ Hyperledger 是一個旨在推動區塊鏈跨行業應用的開放原始碼專案。 它具國際合作性,由 Linux 基金會主導發起,成員包括金融、銀行、物聯網、供應鏈、製造和科技業。 基金會有一些與以太坊技術堆棧配合使用的專案,包括 [Besu](https://www.hyperledger.org/use/besu)。_ + +### 協議和基礎結構 {#protocol-and-infrastructure} + +- [ Chainstack ](https://chainstack.com/) _多雲端和多協議平台即服務,使企業能夠快速建置、部署和管理去中心化網路和服務_ +- [Clearmatics Autonity](https://www.clearmatics.com/about/) _一種為用戶端提供軟體和基礎結構的 P2P 協議套件_ +- [Hyperledger Besu](https://www.hyperledger.org/use/besu) _在 Apache 2.0 許可證下開發,以 Java 編寫的開放原始碼以太坊用戶端,其中包括 PoW 和 PoA 等多種共識演算法(IBFT、IBFT 2.0、Ethash 和 Clique)。 它的複雜許可機制是為了聯盟環境所設計。_ +- [Kaleido](https://kaleido.io/) _用於建置和執行跨雲端、混合式企業生態系統的全堆棧平台_ +- [Zeeve](https://www.zeeve.io/) _提供一系列用於在以太坊上構建的產品和工具,以及企業 Web3 應用程式的基礎結構和 API_ diff --git a/public/content/translations/zh-tw/foundation/index.md b/public/content/translations/zh-tw/foundation/index.md new file mode 100644 index 00000000000..12ff3f0867d --- /dev/null +++ b/public/content/translations/zh-tw/foundation/index.md @@ -0,0 +1,40 @@ +--- +title: 以太坊基金會 +description: 了解更多關於以太坊基金會 (EF) 的資訊,這是一個致力於支持以太坊及相關技術的非營利組織。 +hideEditButton: true +lang: zh-tw +--- + +# 關於以太坊基金會 {#about-the-ethereum-foundation} + + + +[以太坊基金會 (EF)](http://ethereum.foundation/) 是一個致力於支持[以太坊](/what-is-ethereum/)與相關技術的非營利組織。 + +以太坊基金會並不是公司,甚至不是傳統的非營利組織。 其角色並不控制或主導以太坊發展方向,也僅是資助以太坊相關技術發展的眾多組織之一。 以太坊基金會是更大[生態系統](/community/)的一部分。 + +## 以太坊基金會倡議 {#ethereum-foundation-initiatives} + +### 生態系支援計畫 {#ecosystem-support-program} + +[生態系支援計畫](https://esp.ethereum.foundation/)旨在為更大以太坊社群內的專案和實體提供經濟及非經濟支援,從而刺激生態系成長。 生態系統支援計畫是最初以太坊資助計畫之擴充,後者關注經濟支援。 + +請造訪 [esp.ethereum.foundation](https://esp.ethereum.foundation/) 了解更多有關生態系統支持計畫、過去資助接收者及資助申請流程的資訊。 你也可閱覽[生態系統支持計畫部落格](https://blog.ethereum.org/category/ecosystem-support-program/)或關注 [@EF_ESP](https://twitter.com/EF_ESP) 取得最新消息及公告。 + +### 開發者展會 {#devcon} + +自 2014 年以來,以太坊基金會組織了以太坊開發者大會 Devcon,這是匯聚眾多以太坊開發者、研究者、思考者及創作者的年度盛會。 + +你可造訪 [archive.devcon.org](https://archive.devcon.org/) 閱覽自成立以來的年度會議影片資料。 + +請造訪 [devcon.org](https://devcon.org/) 了解更多資訊,查看 [Devcon 部落格](https://devcon.org/en/blogs/),或關注 [@efdevcon](https://twitter.com/EFDevcon) 取得最新公告。 + +### 夥伴計畫 {#fellowship-program} + +[以太坊基金會夥伴計畫](https://fellowship.ethereum.foundation/)是一項解決不同文化、國籍與社會階級差距的倡議。 夥伴計劃旨在透過識別和支援獨特且有才華的個人來彌合這些差距,幫助實現以太坊的相關性,並為那些將成為 Web3 未來但代表性不足的的人們和社群打破進入障礙。 + +[請造訪 fellowship.ethereum.foundation 了解更多資訊](https://fellowship.ethereum.foundation/)。 + +
+ +有關基金會及其工作的更多資訊,請訪造 [ethereum.foundation](http://ethereum.foundation/),或查看[以太坊基金會部落格](https://blog.ethereum.org/)以取得以太坊基金會的最新消息及公告。 diff --git a/public/content/translations/zh-tw/governance/index.md b/public/content/translations/zh-tw/governance/index.md index e771a1048a8..e1f3dfeedff 100644 --- a/public/content/translations/zh-tw/governance/index.md +++ b/public/content/translations/zh-tw/governance/index.md @@ -48,7 +48,7 @@ _雖然以太坊管理體系在協定層級為鏈下,但許多建立在以太 - **節點運營商**:其執行能廣播區塊及交易的節點,拒絕發現的任何無效的交易或區塊。 [更多節點相關資訊](/developers/docs/nodes-and-clients/)。 - **以太坊改進提案作者**:其提出以太坊改進提案,提議變更以太坊協定。 [更多以太坊改進提案相關資訊](/eips/)。 - **驗證者**:其執行能為以太坊區塊鏈新增區塊的節點。 -- **協定開發者**(俗稱 「核心開發者」):其維護多種不同的以太坊實作 ,例如執行層的 go-ethereum、Nethermind、Besu、Erigon,或共識層的 Prysm、Lighthouse、Nimbus、Teku、Lodestar。 [更多以太坊用戶端相關資訊](/developers/docs/nodes-and-clients/)。 +- **協定開發者**(俗稱 「核心開發者」):這些人維護著各種以太坊實作(例如,執行層的 go-ethereum、Nethermind、Besu、Erigon、Reth 或共識層的 Prysm、Lighthouse、Nimbus、Teku、Lodestar)。 [更多以太坊用戶端相關資訊](/developers/docs/nodes-and-clients/)。 _注意:任何人都能參與多個組別,例如,協定開發者可以支援以太坊改進提案、執行信標鏈驗證者,並使用去中心化金融應用程式。 但為了清楚交代概念,區分這些相關方是最簡易的作法。_ @@ -120,7 +120,7 @@ _注意:任何人都能參與多個組別,例如,協定開發者可以支 實行去中心化自治組織分叉是因為 [2016 DAO 攻擊](https://www.coindesk.com/understanding-dao-hack-journalists),[去中心化自治組織](/glossary/#dao)合約不夠安全,被駭客榨取超過 360 萬以太幣。 使用分叉後,資金從這份有缺陷的合約轉移到新的合約,當時因駭客攻擊而損失資金的人,後來都拿回了資金。 -這個做法是以太坊社群投票的結果。 任何ETH持有者都能投票藉由交易於一[投票平台](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/). 許多人支持分叉的決定,投票率超過 85%。 +這個做法是以太坊社群投票的結果。 所有以太幣持有者都能透過[投票平台](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/)上的交易進行投票。 許多人支持分叉的決定,投票率超過 85%。 要注意的是,雖然協定當時利用分叉轉危為安,但投票在決定分叉時所佔的重要性,仍存在爭議,原因如下: diff --git a/public/content/translations/zh-tw/guides/how-to-create-an-ethereum-account/index.md b/public/content/translations/zh-tw/guides/how-to-create-an-ethereum-account/index.md index 4186b74e53d..0b30e32ff0c 100644 --- a/public/content/translations/zh-tw/guides/how-to-create-an-ethereum-account/index.md +++ b/public/content/translations/zh-tw/guides/how-to-create-an-ethereum-account/index.md @@ -6,16 +6,17 @@ lang: zh-tw # 如何建立一個以太坊帳戶 -任何人都可以隨時且免費建立以太坊帳戶。 有幾種方式,但最簡單且最常見的方式是使用稱為錢包的應用程式。 錢包會創建並保護[金鑰](/glossary/#key),讓你能使用以太坊。 你可以使用你的錢包來傳送交易,檢查你的代幣餘額以及連接到建置於以太坊上的應用程式,例如代幣交易所、遊戲、[非同質化代幣](/glossary/#nft)交易市場,等等。 有些「web2」應用程式現在也允許你使用以太坊登入。 +**任何人都可以免費建立以太坊帳戶。**你只需要安裝一個加密錢包應用程式。 錢包建立並與管理你的以太坊帳戶。 它們可以發送交易、查看你的餘額,並讓你連線到其他構建在以太坊網路的應用程式。 -與跟公司建立新帳戶不同,建立以太坊帳戶完全自由、不公開,且不需要許可。 帳戶由錢包軟體協助你建立的金鑰所控制,不由第三方發行,也不儲存在中央登記庫。 +藉由使用錢包,你也可以立即登入任何代幣交易所、遊戲和[非同質化代幣](/glossary/#nft)市場。 無需單獨註冊,一個帳戶即可共用於所有構建在以太坊網路上的應用程式。 ## 第一步:建立一個錢包 -錢包是一個幫助你管理以太坊帳戶的應用程式。 它使用你的金鑰來收發交易以及登入應用程式。 錢包有數十種不同的選擇,包括手機、桌面甚至是瀏覽器擴展元件。 +錢包是一個幫助你管理以太坊帳戶的應用程式。 有數十種不同的錢包可供選擇:包括行動端、桌面版,甚至是瀏覽器擴充功能。 + - 尋找錢包 + 錢包列表 如果你第一次使用,可以在「找到一個錢包」頁面選擇「加密貨幣新手」篩選條件,得知哪些錢包應含有適合新手使用的所有必要功能。 @@ -30,43 +31,43 @@ lang: zh-tw ## 步驟 3:打開應用程式並建立你的以太坊帳戶 -第一次打開新錢包時,系統可能會要求你選擇建立新帳戶或匯入現有帳戶。 按一下新帳戶建立。 +第一次打開新錢包時,系統可能會要求你選擇建立新帳戶或匯入現有帳戶。 按一下新帳戶建立。 **這是錢包軟體產生你的以太坊帳戶的步驟。** ## 步驟 4:儲存助記詞 -有些應用程式會請你儲存秘密的「種子助記詞」,也可能取名為「助記詞」或「助憶」。 好好保存種子助記詞非常重要! 種子助記詞用於產生帳戶私鑰,能用於簽署以及傳送交易。 任何人只要知道種子助記詞,都能控制其產生的任何帳戶。 千萬不要跟任何人共享種子助記詞。 種子助記詞應包含 12 到 24 組隨機產生的單字,單字的順序是有意義的。 - -一旦儲存種子助記詞後,你該看看錢包儀表板裡的餘額。 查看我們的指南:[如何使用錢包。](/guides/how-to-use-a-wallet) +有些應用程式會要求你記下一組秘密的「恢復助記詞」(有時稱為「種子助記詞」或「助記符」)。 妥善保管好這組助記詞非常重要! 它用於產生你的以太坊帳戶並且可以用來提交交易。 -
+**任何知道這組助記詞的人都可以掌管所有資金。**切勿與任何人分享此資訊。 這組助記詞應包含 12 到 24 個隨機產生的單字(這些單字的順序很重要)。 +
-
想要學習更多功能嗎?
- - 查看我們的其他指南 +
錢包安裝了嗎?
瞭解如何使用它。
+ + 如何使用錢包
+
+ +對其他指南有興趣嗎? 查看我們的[逐步指南](/guides/) ## 常見問題 ### 我的錢包和我的以太坊帳戶是否相同? -否。 錢包是協助管理帳戶的管理工具。 一個錢包也許能讓人存取幾個不同的帳戶,多個錢包也能存取同一個帳戶。 種子助記詞用於建立帳戶,帳戶之後由錢包控制。 - -可以把帳戶想成樹上的樹葉,各帳戶都是從一個種子助記詞「長出來」的。 每個獨特的種子,將長出不同的帳戶組。 +否。 錢包是協助管理帳戶的管理工具。 單個錢包可以存取多個帳戶,單個帳戶可以被多個錢包存取。 恢復助記詞用於建立帳戶並授予錢包應用程式管理資產的權限。 ### 我可以將比特幣傳送到以太坊地址,或將以太幣傳送到比特幣地址嗎? -沒有辦法。 比特幣和以太幣是兩個獨立的網路(即不同的區塊鏈),有各自的簿記模型及地址格式。 人們嘗試以不同的方式橋接這兩個不同的網路,最活躍的是 [Wrapped Bitcoin,簡稱 WBTC](https://www.bitcoin.com/get-started/what-is-wbtc/)。 這不是一種認可背書,因為 WBTC 是一個託管解決方案(即由一組人控制某些關鍵功能),此處提供的資訊僅供參考。 +沒有辦法。 比特幣和以太幣存在於兩個獨立的網路上(即不同的區塊鏈),每個網路都有自己獨特的記帳和地址格式。 曾有各種將這兩個不同的網路橋接在一起的嘗試,目前最活躍的是[包裝比特幣或 WBTC](https://www.bitcoin.com/get-started/what-is-wbtc/)。 這不是一種認可背書,因為 WBTC 是一個託管解決方案(即由一組人控制某些關鍵功能),此處提供的資訊僅供參考。 ### 如果我有一個以太幣地址,我在其他區塊鏈上也擁有同一個地址嗎? -區塊鏈只要使用與以太坊類似的底層軟體(稱為「與以太坊虛擬機相容」),你都可以在所有這些區塊鏈上使用同一個地址。 此[列表](https://chainlist.org/)將展示出同一地址所適用的區塊鏈。 比特幣等某些區塊鏈,實作了一整套獨立的網路規則,你將需要一個不同格式的不同地址。 如果你有智慧型合約錢包,應查看其產品網站,以深入了解哪些區塊鏈受支援。 +區塊鏈只要使用與以太坊類似的底層軟體(稱為「與以太坊虛擬機相容」),你都可以在所有這些區塊鏈上使用同一個地址。 此[列表](https://chainlist.org/)將展示出同一地址所適用的區塊鏈。 比特幣等某些區塊鏈,實作了一整套獨立的網路規則,你將需要一個不同格式的不同地址。 如果你有智慧型合約錢包,你應該查看其產品網站以更多瞭解它支援哪些區塊鏈,因為這些錢包通常支援的範圍有限但更安全。 ### 擁有自己的錢包,比將資金存放在交易所上更安全嗎? -擁有自己的錢包代表你自行負責資產的安全。 很遺憾,目前有許多失敗的交易所,將客戶的錢搞丟了。 信任由某個實體持有你的資產是有風險的,持有自己的錢包(含種子助記詞)能消除此風險。 然而,你必須保護金鑰,並避免被釣魚事件詐騙、意外批准交易或暴露金鑰、和假網站互動,以及其他自我託管風險。 風險與好處並不相同。 +擁有自己的錢包代表你自行負責資產的安全。 很遺憾,目前有許多失敗的交易所,將客戶的錢搞丟了。 擁有一個錢包(帶有恢復助記詞)可以消除將資產托付給某個實體所涉及的風險。 然而,你必須親自保管錢包並避免釣魚詐騙、意外批准交易或暴露助記詞、與假網站互動以及其他自我保管的風險。 風險與好處並不相同。 ### 如果手機/硬體錢包遺失,需要再次用同一個錢包應用程式恢復遺失的資金嗎? -不,你可以使用其他錢包。 只要你有種子助記詞,可輸入到大多數的錢包,就能恢復帳戶。 需要這麼做時請小心,恢復錢包時最好確保避免連網,以免種子助記詞不慎外洩。 沒有種子助記詞,資金遺失後經常不可能再拿回。 +不,你可以使用其他錢包。 只要你有種子助記詞,可輸入到大多數的錢包,就能恢復帳戶。 需要這麼做時請小心,恢復錢包時最好確保避免連網,以免種子助記詞不慎外洩。 如果沒有恢復助記詞,通常不可能恢復失去的資金。 diff --git a/public/content/translations/zh-tw/guides/how-to-revoke-token-access/index.md b/public/content/translations/zh-tw/guides/how-to-revoke-token-access/index.md index 533b28ef623..22ca709d420 100644 --- a/public/content/translations/zh-tw/guides/how-to-revoke-token-access/index.md +++ b/public/content/translations/zh-tw/guides/how-to-revoke-token-access/index.md @@ -48,7 +48,7 @@ lang: zh-tw
-
想要學習更多功能嗎?
+
想瞭解更多嗎?
查看我們的其他指南 diff --git a/public/content/translations/zh-tw/roadmap/account-abstraction/index.md b/public/content/translations/zh-tw/roadmap/account-abstraction/index.md index b1068c40cd4..fd6a009a74f 100644 --- a/public/content/translations/zh-tw/roadmap/account-abstraction/index.md +++ b/public/content/translations/zh-tw/roadmap/account-abstraction/index.md @@ -1,5 +1,5 @@ --- -title: 帳戶抽象 +title: 帳戶摘要 description: 以太坊讓使用者帳戶更簡潔、更安全的計劃概述 lang: zh-tw summaryPoints: @@ -8,7 +8,7 @@ summaryPoints: - 可以使用多個備份來恢復遺失和暴露的金鑰 --- -# 帳戶抽象 {#account-abstraction} +# 帳戶摘要 {#account-abstraction} 使用者使用**[外部帳戶 (EOA)](/glossary/#eoa)** 與以太坊互動。 這是開啟交易或執行智慧型合約的唯一方法, 限制了使用者與以太坊互動的方式。 舉例而言,它使得批次處理交易變得困難,並且要求使用者始終保持一定的以太幣餘額來支付燃料費用。 diff --git a/public/content/translations/zh-tw/roadmap/danksharding/index.md b/public/content/translations/zh-tw/roadmap/danksharding/index.md index 3d99f487e4f..7fb7c6b3888 100644 --- a/public/content/translations/zh-tw/roadmap/danksharding/index.md +++ b/public/content/translations/zh-tw/roadmap/danksharding/index.md @@ -58,7 +58,7 @@ EIP-4844 KZG 儀式已向公眾開放,有數萬人參與並新增自己的隨 - Danksharding 和 Proto-Danksharding 都不遵循傳統的「分片」模式,此模式旨在將區塊鏈分成多個部分。 分片鏈不再是以太坊開發藍圖的一部分。 相反,Danksharding 使用跨二進位大型物件的分散式資料採樣來實現以太坊擴容。 這在實作上容易很多。 此模型有時又稱「資料分片」。 + Danksharding 和 Proto-Danksharding 都不遵循傳統的「分片」模型,此模型旨在將區塊鏈分成多個部分。 分片鏈不再是以太坊開發藍圖的一部分。 相反,Danksharding 使用跨二進位大型物件的分散式資料採樣來實現以太坊擴容。 這在實作上容易很多。 此模型有時又稱「資料分片」。 ## Danksharding 是什麼? {#what-is-danksharding} diff --git a/public/content/translations/zh-tw/roadmap/dencun/index.md b/public/content/translations/zh-tw/roadmap/dencun/index.md new file mode 100644 index 00000000000..c7ce62c50d2 --- /dev/null +++ b/public/content/translations/zh-tw/roadmap/dencun/index.md @@ -0,0 +1,120 @@ +--- +title: Cancun-Deneb(坎昆)升級常見問題解答 +description: 有關 Cancun-Deneb(坎昆)網路升級的常見問題 +lang: zh-tw +--- + +# Cancun-Deneb(坎昆) {#dencun} + +Cancun-Deneb(坎昆)是以太坊網路的一次升級,這項升級啟用了 **Proto-Danksharding (EIP-4844)**,引入了臨時資料 **二進位大型物件**,以實現更便宜的[二層網路 (L2)](/glossary/#layer-2) 卷軸儲存。 + +新的交易類型使卷軸提供者能夠更經濟高效地在所謂的「二進位大型物件」中儲存資料。 二進位大型物件確保可在網路上使用約18 天(更準確地說,4096個 [時期](/glossary/#epoch))。 在此期間之後,將從網路中刪除二進位大型物件,但應用程式仍使用證明來驗證其資料的有效性。 + +這顯著降低了卷軸成本,限制了鏈的增長,並有助於支援更多使用者,同時保持安全性和一組去中心化的節點營運者。 + +## 我們預計什麼時候卷軸會反映出 Proto-Danksharding 帶來的較低費用? {#when} + +- 本次升級時間為時期 269568,即\*\* 2024 年 03 月 13 日下午 13:55 (UTC)\*\* +- 所有主要的卷軸提供者,例如 Arbitrum 或 Optimism,都已經表示在升級後將立即支援二進位大型物件。 +- 單個卷軸支援的時間表可能有所不同,因爲每個提供者都必須升級其系統才能使用新的二進位大型物件空間。 + +## 硬分叉之後以太幣該如何兌換? {#scam-alert} + +- **你的以太幣無需執行任何操作**:以太坊在坎昆升級之後,無需兌換或升級你的以太幣。 你的帳戶餘額將維持不變,同時你目前持有的以太幣在硬分叉之後,仍將保持以現有的形式存取。 +- **謹防詐騙!**  **任何要求你「升級」你的以太幣的人都是在嘗試欺騙你。** 本次升級你無須進行任何操作。 你的資產將完全不受影響。 請記住,隨時瞭解情況是防範詐騙的最佳方法。 + +[關於辨識和避免詐騙的更多資訊](/security/) + +## 坎昆網路升級解決什麼問題? {#network-impact} + +坎昆升級主要透過**便宜的費用**解決**可擴容性**(能夠處理更多使用者和交易)問題,同時使網路**保持去中心化**。 + +以太坊社群一直使用「以卷軸為中心」的方式成長,以二層網路卷軸作爲安全支援更多使用者的主要手段。 + +卷軸網路處理獨立於主網的交易的 _處理_ (或「執行」),然後將結果的加密證明和/或壓縮後的交易資料發佈回主網以保存紀錄。 儲存這些證明會產生([燃料](/glossary/#gas) 形式的)費用,而在 Proto-Danksharding 實作前,所有的網路節點營運者必須永久儲存這些證明,使其成爲費用高昂的任務。 + +坎昆升級引入 Proto-Danksharding 後,這些證明的資料儲存變得更便宜,因為只要求節點營運者儲存這些資料約 18 天,之後就能安全地刪除這些資料,避免了更高的硬體要求。 由於卷軸的提取期間通常為 7 天,只要二進位大型物件在此期間於一層網路可以使用,卷軸的安全模型不會改變。 18 天的修剪窗口為此期間提供了重要的時間緩衝。 + +[更多關於以太坊擴容的資訊](/roadmap/scaling/) + +## 如何存取舊的二進位大型物件資料? {#historical-access} + +雖然常規的以太坊節點會一直保存網路的_目前狀態_,但二進位大型物件歷史資料可以在其引入約 18 天后刪除。 在刪除這些資料之前,以太坊會確保這些資料對所有網路參與者可用,為以下各項留有時間: + +- 供相關方下載和儲存資料。 +- 所有卷軸挑戰期間結束。 +- 最終確定卷軸交易。 + +可能出於多種原因需要二進位大型物件的_歷史_資料,并且可以使用多個去中心化協定儲存和存取該資料: + +- **第三方索引協定**,如 The Graph,透過由加密經濟機制激勵的節點營運者的去中心化網路來儲存這些資料。 +- **BitTorrent**,這是一種去中心化協定,使志願者能夠保存該資料並將其分發給其他人。 +- \*\*[以太坊入口網路](/developers/docs/networking-layer/portal-network/)\*\*的目的是使用節點營運者去中心化網路,透過在參與者之分發資料(類似於 BitTorrent)來提供對所有以太坊資料的存取。 +- **個人使用者**始終可以自由地儲存其希望作爲歷史參考的任何資料的副本。 +- **卷軸提供者**在激勵的作用下儲存這些資料來提升其卷軸的使用者體驗。 +- **區塊瀏覽器**通常運行歸檔節點來索引和儲存全部這些資料,讓使用者能夠透過網路介面存取簡單的歷史參考。 + +需要注意的是,恢復歷史狀態是在 **1-of-N 信任模型**上運行的。 這意味著你只需要來自_單個可信任來源_的資料,就可以使用當前網路狀態驗證其正確性。 + +## 這項升級對更廣泛的以太坊開發藍圖有哪些貢獻? {#roadmap-impact} + +Proto-Danksharding 爲 [Danksharding](/roadmap/danksharding/) 的完全實作奠定了基礎。 Danksharding 旨在將卷軸資料的儲存分散到節點營運者,這樣,每個節點營運者只需要處理全部資料中的一小部分。 這種分散會增加每個區塊的二進位大型物件資料量,這對於擴充以太坊以處理更多使用者和交易至關重要。 + +要在保持網路去中心化的同時,以便宜的費用和更高階的應用程式 [支援數十億以太坊使用者](/roadmap/scaling/),這種可擴容性是至關重要的。 如果沒有這些改變,節點營運者的硬體需求會不斷提升,導致需要越來越昂貴的設備。 較小型營運者將被迫退出,導致網路由一些大型營運者中心化控制,這與去中心化的原則背道而馳。 + +## 這次的升級是否會影響到所有以太坊共識層和驗證者用戶端? {#client-impact} + +會,執行用戶端和共識用戶端都需要升級 Proto-Danksharding (EIP-4844)。 所有主要的以太坊用戶端都已經發佈了支持該升級的版本。 爲了在升級之後與以太坊網路保持同步,節點營運者需要確保其運行的是受支援的用戶端版本。 請注意,關於用戶端版本的資訊具有時效性,使用者應該參考最新資訊以取得最新詳細資料。 [檢視受支援的用戶端版本詳細資料](https://blog.ethereum.org/2024/02/27/dencun-mainnet-announcement#client-releases)。 + +共識用戶端處理_驗證者_軟體,這類軟體已全部更新以支援這項升級。 + +## Cancun-Deneb(坎昆)升級是否對 Goerli 或其他以太坊測試網有影響? {#testnet-impact} + +- Devnets、Goerli、Sepolia 和 Holesky 測試網都已經完成了坎昆升級,同時 Proto-Danksharding 已經全面運行 +- 卷軸開發者可使用這些網路進行 EIP-4844 測試。 +- 大多數的使用者完全不會受到此測試網變更的影響。 + +## 二層網路上的所有交易目前都使用臨時二進位大型物件空間嗎,還是可以就此進行選擇? {#calldata-vs-blobs} + +以太坊二層網路 (L2) 上的卷軸交易有兩種資料儲存類型可以選擇:臨時二進位大型物件空間或永久智慧型合約 calldata。 二進位大型物件空間是一種經濟的選擇,以更低的成本提供臨時儲存。 能夠保證資料在所有必要挑戰期間内的可用性。 另一方面,智慧型合約 calldata 提供永久性儲存,但更加昂貴。 + +主要由卷軸提供者決定使用二進位大型物件空間或 calldata。 他們會基於當前對二進位大型物件空間的需求做出選擇。 如果對二進位大型物件空間的需求很高,卷軸可能會選擇 calldata 以確保資料及時發佈。 + +儘管從理論上講,使用者可以選擇自己慣用的儲存類型,但該決定通常由卷軸提供者做出。 讓使用者進行選擇會增加複雜性,尤其是在具有成本效益的捆綁交易中。 對於關於該選擇的具體詳細資料,使用者可以參考不同卷軸提供者提供的文件。 + +## Eip-4844 會降低一層網路的燃料費嗎? {#l1-fee-impact} + +不會顯著減少。 會專門為二進位大型物件空間引入一個新的燃料市場,供卷軸提供者使用。 _儘管透過將卷軸資料下放到二進位大型物件可能會減少一層網路的費用,但這次升級主要專注於減少二層網路費用。 一層網路(主網)的費用可能會因爲二階效應小幅減少。_ + +- 一層網路燃料的減少量與卷軸提供者采用/使用的二進位大型物件資料成正比 +- 一層網路燃料很可能在非卷軸相關活動中保持競爭力 +- 使用二進位大型物件空間的卷軸需要的一層網路燃料更少,這將在短期内推動一層網路燃料費用減少 +- 二進位大型物件空間仍然有一些限制,因此,如果一個區塊内的二進位大型物件飽和/已滿,卷軸就可能需要同時將它們的資料作爲永久資料發佈,這將增加一層網路和二層網路的燃料價格 + +## 這項升級會減少其他以太坊虛擬機一層網路區塊鏈上的費用嗎? {#alt-l1-fee-impact} + +否。 Proto-Danksharding 只對將證明儲存在以太坊一層網路(主網)上的以太坊二層網路卷軸有好處。 + +僅僅是與以太坊虛擬機 (EVM) 相容并不代表網路會從這項升級中得到好處。 獨立於以太坊運行的網路(無論是否與以太坊虛擬機相容)不會將它們的資料儲存在以太坊上,也就不會從該升級中得到任何好處。 + +[瞭解更多有關二層網路卷軸的資訊](/layer-2/) + +## 想透過視覺方式學習? {#visual-learner} + + + +_解鎖以太坊的擴容,EIP-4844 — Finematics _ + + + +_Domothy 的二進位大型物件空間基礎教學 — Bankless_ + +## 延伸閱讀 {#further-reading} + +- [EIP4844.com](https://www.eip4844.com/) +- [EIP-4844:分片二進位大型物件交易 (Proto-Danksharding)](https://eips.ethereum.org/EIPS/eip-4844) +- [坎昆升級主網公告](https://blog.ethereum.org/2024/02/27/dencun-mainnet-announcement) - _以太坊基金會部落格_ +- [以太坊漫遊指南:Proto-Danksharding](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum/#proto-danksharding-eip-4844) - _Jon Charbonneau_ +- [Proto-Danksharding 常見問題](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) - _Vitalik Buterin_ +- [EIP-4844 深入解讀:坎昆升級的核心](https://medium.com/@ebunker.io/an-in-depth-explanation-of-eip-4844-the-core-of-the-cancun-upgrade-de7b13761d2c) - _Ebunker_ +- [AllCoreDevs 更新 016](https://tim.mirror.xyz/HzH5MpK1dnw7qhBSmzCfdCIxpwpD6DpwlfxtaAwEFro) - _Tim Beiko_ diff --git a/public/content/translations/zh-tw/roadmap/future-proofing/index.md b/public/content/translations/zh-tw/roadmap/future-proofing/index.md index 09b39b73c6e..5440b45592a 100644 --- a/public/content/translations/zh-tw/roadmap/future-proofing/index.md +++ b/public/content/translations/zh-tw/roadmap/future-proofing/index.md @@ -29,10 +29,10 @@ template: roadmap ## 目前進度 {#current-progress} -面向未來的以太坊所需的大部分升級**仍在研究階段,且距離實作還有數年時間**。 像移除 SELF-DESTRUCT 以及統一執行和共識用戶端中所用的壓縮方案這樣的升級,可能比引入抗量子密碼學更快實現。 +面向未來的以太坊所需的大部分升級**仍在研究階段,且距離實作還有數年時間**。 像移除 SELFDESTRUCT 和統一執行層與共識層用戶端使用的壓縮方案這樣的升級,可能會比抗量子密碼學更早實現。 **了解更多** - [燃料](/developers/docs/gas) - [以太坊虛擬機](/developers/docs/evm) -- [Data structures](/developers/docs/data-structures-and-encoding) +- [資料結構](/developers/docs/data-structures-and-encoding) diff --git a/public/content/translations/zh-tw/roadmap/index.md b/public/content/translations/zh-tw/roadmap/index.md index 7ee6f018ff4..1a5c0a596b6 100644 --- a/public/content/translations/zh-tw/roadmap/index.md +++ b/public/content/translations/zh-tw/roadmap/index.md @@ -78,7 +78,7 @@ buttons: **是的,幾乎一定會**。 開發藍圖是最新的以太坊升級計劃,涵蓋近期和未來的計劃。 我們預計隨著新資訊和技術的出現,開發藍圖也會變更。 -將以太坊的開發藍圖視為改進以太坊的一系列意圖;這是核心研究者和開發者對以太坊最優前進路徑的最佳假設。 +將以太坊的路線圖視為改進以太坊的一系列意圖;這是核心研究者和開發者對以太坊最優前進路徑的最佳假設。 ## 開發藍圖將於何時完成? {#when-will-the-roadmap-be-finished} diff --git a/public/content/translations/zh-tw/roadmap/merge/index.md b/public/content/translations/zh-tw/roadmap/merge/index.md index 409681ca232..34e5f063f91 100644 --- a/public/content/translations/zh-tw/roadmap/merge/index.md +++ b/public/content/translations/zh-tw/roadmap/merge/index.md @@ -108,7 +108,7 @@ id="developers"> ## 合併與能耗 {#merge-and-energy} -合併標誌著以太坊工作量證明的結束,並開啟了更永續、更環保的以太坊紀元。 以太坊的能耗預計下降了 99.95%,使得以太坊成為綠色區塊鏈。 瞭解關於[以太坊能耗](/energy-consumption/)的更多資訊。 +合併標誌著以太坊工作量證明的結束,並開啟了更具可持續性和環保的以太坊紀元。 以太坊的能耗預計下降了 99.95%,使得以太坊成為綠色區塊鏈。 瞭解關於[以太坊能耗](/energy-consumption/)的更多資訊。 ## 合併與擴容 {#merge-and-scaling} diff --git a/public/content/translations/zh-tw/roadmap/single-slot-finality/index.md b/public/content/translations/zh-tw/roadmap/single-slot-finality/index.md index 9511f888a25..e0a77a395a2 100644 --- a/public/content/translations/zh-tw/roadmap/single-slot-finality/index.md +++ b/public/content/translations/zh-tw/roadmap/single-slot-finality/index.md @@ -8,7 +8,7 @@ lang: zh-tw 最終確定一個以太坊區塊大約需要 15 分鐘。 然而,我們可以讓以太坊的共識機制更有效率地驗證區塊,明顯縮短最終確定耗費的時間。 使用者可以在同一時隙提交和最終確定區塊,而無需等待 15 分鐘。 這個概念被稱為**單一時隙最終確定性 (SSF)**。 -## 最終性是什麼? {#what-is-finality} +## 最終確定性是什麼? {#what-is-finality} 在以太坊基於權益證明的共識機制下,最終確定性指的是在不銷毀至少 33% 質押以太幣總量的情況下,保證不能更改或從區塊鏈中刪除區塊。 這是「加密經濟」上的安全性,因為改變鏈的順序或內容所帶來的極高成本,會讓任何理性的經濟參與者止步。 diff --git a/public/content/translations/zh-tw/roadmap/verkle-trees/index.md b/public/content/translations/zh-tw/roadmap/verkle-trees/index.md index 50c93cb35a3..bec5b0ea2e4 100644 --- a/public/content/translations/zh-tw/roadmap/verkle-trees/index.md +++ b/public/content/translations/zh-tw/roadmap/verkle-trees/index.md @@ -33,7 +33,7 @@ Merkle 樹的結構導致證據非常大,以至於無法在 12 秒的時隙內 -證據大小各有差異,取決於其所含的葉子數量。 假設證據有 1000 片葉子,梅克爾樹的證據大約是 3.5MB(假設樹有 7 層)。 相同資料的證據在沃克爾(假設樹有 4 層)中大概是 150 kB - **縮減了大約 23 倍**。 證據大小的縮減將使無狀態用戶端證據小到可以接受。 多項式證據的大小一般在 0.128 - 1kB 之間,取決於使用哪個特定多項式承諾。 +證據大小各有差異,取決於其所含的葉子數量。 假設證據有 1000 片葉子,梅克爾樹的證據大約是 3.5MB(假設樹有 7 層)。 相同資料的證據在沃克爾(假設樹有 4 層)中大概是 150 kB - **縮減了大約 23 倍**。 證據大小的縮減將使無狀態用戶端證據小到可以接受。 多項式證據的大小一般在 0.128 - 1 kB 之間,取決於使用哪個特定多項式承諾。 @@ -60,7 +60,7 @@ Verkle 樹是 `(key,value)` 對,其中鍵是 32 字節位元組要素,由 31 - [Guillaume Ballet 在 ETHGlobal 上對沃克爾樹的說明](https://www.youtube.com/watch?v=f7bEtX3Z57o) - [「沃克爾樹如何讓以太坊變得更加精幹而簡約」Guillaume Ballet 在 Devcon 6 發表的演講](https://www.youtube.com/watch?v=Q7rStTKwuYs) - [Piper Merriam 談 ETHDenver 2020 的無狀態用戶端](https://www.youtube.com/watch?v=0yiZJNciIJ4) -- [Dankrad Feist 在「零知識」播客上談沃克爾樹和無狀態用戶端](https://zeroknowledge.fm/episode-202-stateless-ethereum-verkle-tries-with-dankrad-feist/) +- [Dankrad Feist 在「零知識」播客上談沃克爾樹和無狀態性](https://zeroknowledge.fm/episode-202-stateless-ethereum-verkle-tries-with-dankrad-feist/) - [Vitalik Buterin 談沃克爾樹](https://vitalik.eth.limo/general/2021/06/18/verkle.html) - [Dankrad Feist 談沃克爾樹](https://dankradfeist.de/ethereum/2021/06/18/verkle-trie-for-eth1.html) - [以太坊改進提案文件:沃克爾樹](https://notes.ethereum.org/@vbuterin/verkle_tree_eip#Illustration) diff --git a/public/content/translations/zh-tw/security/index.md b/public/content/translations/zh-tw/security/index.md index 6716f9b2e07..9866665cea5 100644 --- a/public/content/translations/zh-tw/security/index.md +++ b/public/content/translations/zh-tw/security/index.md @@ -242,15 +242,7 @@ _注意:有些衍生的代幣/行情指示器可能代表被質押的以太幣
- 注意:使用簡訊型雙因素驗證,很容易發生 - - SIM 卡挾持 - - ,也不安全。 為了獲得最佳安全性,請使用 {" "} - - Google Authenticator - - 或 Authy 等服務。 + 注意:使用基於簡訊的雙因素驗證容易受到 SIM 卡交換攻擊,因此並不安全。 為了獲得最佳安全性,請使用 Google AuthenticatorAuthy 等服務。
diff --git a/public/content/translations/zh-tw/staking/solo/index.md b/public/content/translations/zh-tw/staking/solo/index.md index ce1f67289fc..26aa59c6595 100644 --- a/public/content/translations/zh-tw/staking/solo/index.md +++ b/public/content/translations/zh-tw/staking/solo/index.md @@ -4,7 +4,7 @@ description: 如何開始單獨質押你的以太幣概覽 lang: zh-tw template: staking emoji: ":money_with_wings:" -image: /images/staking/leslie-solo.png +image: /images/staking/leslie-withdrawal.png alt: 萊斯利犀牛在她自己的電腦晶片上。 sidebarDepth: 2 summaryPoints: diff --git a/public/content/translations/zh-tw/whitepaper/index.md b/public/content/translations/zh-tw/whitepaper/index.md new file mode 100644 index 00000000000..17c5a263eb8 --- /dev/null +++ b/public/content/translations/zh-tw/whitepaper/index.md @@ -0,0 +1,517 @@ +--- +title: 以太坊白皮書 +description: 介紹以太坊的白皮書,於 2013 年以太坊正式啟動之前發表。 +lang: zh-tw +sidebarDepth: 2 +hideEditButton: true +--- + +# 以太坊白皮書 {#ethereum-whitepaper} + +_2015 年專案啟動之前,[以太坊](/what-is-ethereum/)創辦人 Vitalik Buterin 於 2014 年首次發表了這篇介紹性白皮書。 值得一提的是,與許多社群驅動的開源軟體專案一樣,以太坊自最初誕生以來一直在不斷發展。_ + +_雖然已經過去多年,我們仍在維護此白皮書,因為此白皮書仍然可以作為有用的參考資料,並準確地表達以太坊及其願景。 要了解以太坊的最新發展以及協定如何更改,我們推薦你參閱[本指南](/learn/)。_ + +[研究人員和學者如需本白皮書歷史或標準版本 [自2014年12月起],應使用此 PDF。](./whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf) + +## 新一代智慧型合約及去中心化應用程式平台 {#a-next-generation-smart-contract-and-decentralized-application-platform} + +中本聰於 2009 年發明的比特幣常被譽為金錢與貨幣領域的革命性發展,作為第一種數位資產的範例,它沒有擔保或「[內在價值](http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/)」,也沒有中心化發行人及掌控者。 然而,比特幣實驗的另一個可以說更重要的部分是作為分佈式共識工具的底層區塊鏈技術,人們的注意力正迅速開始轉移到比特幣的這個面向。 通常提及的區塊鏈技術的其他應用包括使用區塊鏈上的數位資產來代表自訂貨幣和金融工具(「[彩色幣](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)」)、底層實體裝置的所有權(「[智慧財產](https://en.bitcoin.it/wiki/Smart_Property)」)、網域名稱(「[域名幣](http://namecoin.org)」)等非同質化資產,以及一些更複雜的應用,其中涉及由一段實作任意規則的程式碼(「[智慧型合約](http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/idea.html)」)甚至基於區塊鏈的「[去中心化自治組織](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/)」(DAO) 直接控制的數位資產。 以太坊打算提供一條內建完全成熟、圖靈完備的程式設計語言的區塊鏈,該語言可用於建立可用來編碼任意狀態轉換函式的「合約」,從而讓使用者能夠建立上述任何系統,以及許多其他我們尚未想像到的事務,只需用幾行程式碼編寫邏輯即可。 + +## 比特幣及現有概念簡介 {#introduction-to-bitcoin-and-existing-concepts} + +### 歷史 {#history} + +去中心化數位貨幣的概念以及財產登記等其他應用已經存在了幾十年。 1980 年代和 1990 年代的匿名電子現金協定主要依賴於稱為喬姆盲簽 (Chaumian blinding) 的密碼原語,提供了一種具有高度隱私性的貨幣,但這些協定基本上未能獲得關注,因為它們依賴於中心化仲介。 1998 年,戴偉 (Wei Dai) 的 [B-money](http://www.weidai.com/bmoney.txt) 成為第一個提出透過解决計算難題及去中心化共識來創造貨幣之概念的提案,但該提案未提供關於如何實際實作去中心化共識的細節。 2005 年,哈爾·芬尼 (Hal Finney) 提出了「[可重複使用的工作量證明](https://nakamotoinstitute.org/finney/rpow/)」的概念,這個體系使用 B-money 的概念以及亞當·貝克 (Adam Back) 計算難度大的 Hashcash 難題來創造加密貨幣的概念,但由於依賴可信計算作為後端,再次未能達到理想的效果。 2009 年,中本聰將透過公鑰密碼學管理所有權的成熟原語與用於跟踪貨幣所有者的共識演算法相結合,首次真正意義上實作了去中心化貨幣,被稱為「工作量證明」。 + +工作量證明機制是該領域的一項突破,因為它同時解决了兩個問題。 首先,這項機制提供了一種簡單且比較有效的共識演算法,讓網路中的節點能够全體對比特幣帳本狀態的一組規範更新達成一致。 接著,其提供了一種允許自由進入共識過程的機制,解决了决定誰來影響共識的政治問題,同時防止了女巫攻擊。 該機制透過用經濟參與障礙取代正式參與障礙(例如要求作為唯一實體在特定清單上登記)來實現這一點 - 共識投票過程中單一節點的權重與該節點的算力成正比。 從那時起,又提出了一種稱為_權益證明_的替代方法,節點的權重與其持有的貨幣量成正比,不再與計算資源成正比;這兩種方法相對優點的討論不在本文的討論範圍內,但應該指出的是,這兩種方法都可以用作加密貨幣的支柱。 + +### 比特幣作為狀態轉換系統 {#bitcoin-as-a-state-transition-system} + +![以太坊狀態轉換](./ethereum-state-transition.png) + +從技術角度來看,比特幣等加密貨幣的帳本可以被認為是狀態轉換系統,其中存在一個由所有現有比特幣的所有權狀態組成的「狀態」和一個接受狀態和交易並輸出新狀態(即結果)的「狀態轉換函式」。 例如,在標準銀行系統中,狀態是資產負債表,交易是將 $X 從 A 轉移到 B 的請求,狀態轉換函式將 A 帳戶中的價值減少 $X 美元,並將 B 帳戶中的價值增加 $X 美元。 如果 A 的帳戶最初價值少於 $X 美元,則狀態轉換函式將傳回錯誤。 因此,可以正式定義: + +``` +APPLY(S,TX) -> S' or ERROR +``` + +在上面定義的銀行系統中: + +```js +APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 } +``` + +但是: + +```js +APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR +``` + +比特幣中的「狀態」是所有已鑄造但尚未花費的貨幣(從技術上講,「未花費的交易輸出 (UTXO)」)的集合,每個未花費的交易輸出都有一個面額和一個所有者(由 20 位元組地址定義,該地址本質上是一個加密公鑰[fn1](#notes))。 一筆交易包含一個或多個輸入以及一個或多個輸出,每個輸入包含對現有未花費的交易輸出的引用以及由與所有者地址關聯的私鑰生成的加密簽章,而每個輸出包含要新增到狀態的新未花費的交易輸出。 + +狀態轉換函式 `APPLY(S,TX) -> S'` 可以大致定義如下: + +
    +
  1. + 對於 TX 中的每個輸入: +
      +
    • + 如果引用的未花費的交易輸出不在 S 中,則傳回錯誤。 +
    • +
    • + 如果提供的簽章與未花費的交易輸出的所有者不匹配,則傳回錯誤 +
    • +
    +
  2. +
  3. + 如果所有輸入未花費的交易輸出的面值總和小於所有輸出未花費的交易輸出的面值總和,則傳回錯誤。 +
  4. +
  5. + 傳回 S,並刪除所有輸入未花費的交易輸出以及新增所有輸出未花費的交易輸出。 +
  6. +
+ +第一步的前半部分防止交易傳送者花費不存在的貨幣,第一步的後半部分防止交易傳送者花費其他人的貨幣,而第二步確保價值守恆。 為了將此用於支付,協定如下。 假設 Alice 想傳送 11.7 BTC 給 Bob。 首先,Alice 將尋找她擁有的一組可用的未花費的交易輸出,總計至少為 11.7 BTC。 實際上,Alice 無法剛剛好獲得 11.7 BTC;假設她能得到的最小數是 6+4+2=12。 然後,她使用這三個輸入和兩個輸出來建立一個交易。 第一個輸出將為 11.7 BTC 且以 Bod 的地址作為其所有者,而第二個輸出為餘下的 0.3 BTC「零頭」且所有者為 Alice。 + +### 挖礦 {#mining} + +![以太坊區塊](./ethereum-blocks.png) + +如果我們能夠存取值得信賴的中心化服務,那麼該系統的實作將很簡單;它可以簡單地按照描述進行編碼,使用中心化伺服器的硬碟來追蹤狀態。 然而,透過比特幣,我們試圖構建一個去中心化貨幣系統,因此我們需要將狀態交易系統與共識系統結合起來,以確保每個人都同意交易順序。 比特幣的去中心化共識過程要求網路中的節點不斷嘗試產生稱為「區塊」的交易包。 該網路嘗試大約每十分鐘生成一個區塊,每個區塊包含一個時間戳記、一個隨機數、對前一個區塊的引用(即雜湊值)以及自前一個區塊以來發生的所有交易的清單。 隨著時間的推移,這會建立一個持久的、不斷增長的「區塊鏈」,區塊鏈會不斷更新以代表比特幣帳本的最新狀態。 + +在這個範例中,檢查區塊是否有效的演算法如下: + +1. 確認區塊引用之前一區塊是否存在並有效。 +2. 確認區塊的時間戳記是否大於前一個區塊的時間戳記 [fn2](#notes) 並且在未來的 2 小時內。 +3. 確認區塊上的工作量證明是否有效。 +4. 使 `S[0]` 為前一個區塊末端的狀態。 +5. 假設 `TX` 是區塊的交易清單,其中有 `n` 個交易。 對於 `0...n-1` 中的所有 `i`,設定 `S[i+1] = APPLY(S[i],TX[i])`。如果任何應用程式傳回錯誤,則結束並傳回 false。 +6. 傳回 true,並將 <0>S[n] 註冊為該區塊末端的狀態。 + +本質上,區塊中的每個交易都必須提供一個有效的狀態轉換,即從交易執行之前的規範狀態轉換到某個新狀態。 請注意,狀態不會以任何方式編碼在區塊中;它純粹是驗證節點要記住的抽象,並且只能透過從創世狀態開始並順序應用每個區塊中的每個交易來(安全地)計算任何區塊。 此外,請注意,礦工將交易放入區塊的順序很重要;如果一個區塊中有兩個交易 A 和 B,並且 B 花費了 A 創造的未花費的交易輸出,那麼如果 A 出現在 B 之前,則該區塊將有效,否則無效。 + +上述清單中存在的而在其他系統中沒有的一個有效性條件是對「工作量證明」的要求。 具體的條件是,每個區塊的雙 SHA256 雜湊值(為 256 位元數字)必須小於動態調整的目標,截至撰寫本文時約為 2187。 這樣做的目的是使區塊建立在計算上變得「困難」,從而防止女巫攻擊者為取得利益而重建整個區塊鏈。 由於 SHA256 被設計為完全不可預測的偽隨機函式,因此建立有效區塊的唯一方法只不過是 試錯法,即重複增加隨機數並查看新的雜湊值是否匹配。 + +在目前目標大約為 2187 下,網路必須平均嘗試大致 269 次才能找到有效區塊;一般來說,網路每 2016 個區塊就會重新校準一次目標,因此網路中的某個節點平均每十分鐘就會產生一個新區塊。 為了就此項計算工作補償礦工,每個區塊的礦工都有權包含一筆交易,獎勵曠工 25 BTC。 此外,如果任何交易的輸入總面額高於其輸出,則差額也會作為「交易費」轉給礦工。 順便說一句,這也是比特幣的唯一發行機制;創世狀態根本不包含比特幣。 + +為了更加瞭解挖礦的意義,讓我們先分析當比特幣網路遭惡意攻擊時會發生甚麼情況。 由於比特幣的底層加密技術是安全的,因此攻擊者將攻擊比特幣系統中不受加密技術直接保護的部分:交易順序。 攻擊者之策略十分簡單: + +1. 向商家傳送 100 BTC 以換取某些產品(最好是快速交付的數位商品) +2. 等待產品交付 +3. 產生另一筆交易,將同一 100 BTC 傳送給他自己 +4. 試著讓網路相信他對自己的交易是先發生的。 + +一旦步驟 (1) 發生,幾分鐘後,一些礦工會將交易包含在一個區塊中,例如區塊編號 270000。 大約一小時後,在該區塊之後,鏈上將新增另外五個區塊,其中每個區塊都間接指向該交易,從而「確認」該交易。 此時,商家將接受最終確定的付款並交付產品;由於我們假設這是一種數位商品,因此交付即時完成。 現在,攻擊者建立另一筆交易,將這 100 BTC 傳送給自己。 如果攻擊者只是向全網廣播這一資訊,則交易將不會被處理;礦工將嘗試執行 `APPLY(S,TX)` 並將注意到 `TX` 消耗了不再處於該狀態的未花費的交易輸出。 因此,攻擊者會建立區塊鏈的「分叉」,首先挖掘另一版本的區塊 270000,讓其指向同一父塊 269999,並用新交易取代舊交易。 因為區塊資料不同,這就需要重新進行工作量證明。 此外,攻擊者的新版本區塊 270000 具有不同的雜湊值,因此原始區塊 270001 至 270005 不會「指向」該區塊;因此,原始鏈和攻擊者的新鏈是完全分開的。 規則是,在分叉時,最長的區塊鏈被視為正確的鏈,因此合法礦工將處理 270005 鏈,而攻擊者獨自處理 270000 鏈。 攻擊者為了使其區塊鏈最長,需要擁有比網路其他部分加起來還要多的算力才能偽裝成正確的鏈(因此,被稱為「51% 攻擊」)。 + +### 默克爾樹 {#merkle-trees} + +![比特幣簡單支付驗證](./spv-bitcoin.png) + +_左:只需在默克爾樹中呈現少量節點即可證明分支的有效性。_ + +_右:改變默克爾樹的任何部分的任何嘗試最終都會導致鏈上某個地方的不一致。_ + +比特幣的一個重要的可擴展性特徵是區塊儲存在多層資料結構中。 區塊的「雜湊值」實際上只是區塊頭的雜湊值,區塊頭是一段大約 200 位元組的資料,其中包含時間戳記、隨機數、前一個區塊的雜湊值以及儲存區塊中所有交易的資料結構(稱為默克爾樹)的根雜湊值。 默克爾樹是一種二元樹,包括一組擁有大量葉節點的節點(這些葉節點位於樹底部儲存著底層資料),一組中間節點(其中每個節點都是其兩個子節點的雜湊值),以及一個代表樹的「頂部」的根節點(根節點亦由其兩個子節點的雜湊值組成)。 默克爾樹的用途是允許區塊中的資料分段傳送:節點可以只從一個來源下載區塊頭,從另一個來源下載與它們相關的樹的一小部分,並且仍然可以確認所有資料都正確。 這樣做的原因是雜湊值向上傳播:如果惡意使用者嘗試將虛假交易交換到默克爾樹的底部,則此變更將導致上面的節點發生變化,然後導致該節點上面的節點發生變化,最終改變樹的根,從而改變區塊的雜湊值,導致協定將其註冊為完全不同的區塊(幾乎確定包含無效的工作量證明)。 + +默克爾樹協定可以說對於長期永續性至關重要。 截至 2014 年 4 月,比特幣網路中的「全節點」(儲存和處理每個區塊的全部資料)佔用比特幣網路中約 15 GB 的磁碟空間,並且每月增長超過 1 GB。 目前,這對於某些桌上型電腦是可行的但不適用行動電話,將來只有企業和業餘愛好者才能參與。 一種稱為「簡單支付驗證」(SPV) 的協定允許存在另一類稱為「輕節點」的節點,這種節點下載區塊頭,驗證區塊頭上的工作量證明,並僅下載與其相關的交易的相關「分支」。 這使得輕節點能夠在強力的安全保證下確定任何比特幣交易的狀態及其目前餘額,同時僅下載整個區塊鏈的極一小部分。 + +### 其他區塊鏈應用 {#alternative-blockchain-applications} + +將區塊鏈底層理念應用於其他概念的想法也有著很長的歷史。 2005 年,尼克·薩博 (Nick Szabo) 提出了「利用所有者權限確保財產權」的概念,該文件描述了「複製資料庫技術的新進展」將如何允許基於區塊鏈的系統來儲存誰擁有哪些土地的登記表,建立一個包括宅基地、逆權管有和喬治亞土地稅等概念的複雜架構。 然而,不幸的是,當時沒有有效的複製資料庫系統可用,因此該協定從未在實踐中實作。 然而,2009 年之後,在比特幣的去中心化共識開發出來後,許多其他應用迅速開始出現。 + +- **域名幣** - 建立於 2010 年,[域名幣](https://namecoin.org/)描述為去中心化名稱註冊資料庫最為恰當。 在 Tor、比特幣和 BitMessage 等去中心化協議中,需要某種方式來識別帳戶,以便其他人可以與這些帳戶互動,但在所有現有解決方案中,唯一可用的標識符是偽隨機雜湊值,如 `1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy`。 理想情況下,人們希望能夠擁有具有名稱的帳戶,例如「george」。 但問題是,如果一個人可以建立名為「george」的帳戶,那麼其他人也可以使用相同的流程為自己註冊「george」並冒充他人。 唯一的解決方案是「首先申請」範式,其中第一個註冊者成功,第二個註冊者失敗 - 這個範式非常適合比特幣共識協定。 域名幣是使用這種概念的最早、最成功的名稱註冊系統的實作。 +- **彩色幣** - [彩色幣](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)用作一種協議,讓人們能夠在區塊鏈上建立自己的數位貨幣 - 或者,在重要但瑣碎的情況下,建立數位代幣。 在彩色幣協議中,透過公開為特定的比特幣未花費的交易輸出指定顏色來「發行」一種新貨幣,並且該協議遞迴地將其他未花費的交易輸出的顏色定義為與創建這些未花費的交易輸出之交易所花費的輸入相同的顏色(一些特殊規則適用於混合顏色輸入的情況)。 這讓使用者能夠維護僅包含特定顏色的未花費的交易輸出的錢包,並像普通比特幣一樣傳送未花費的交易輸出,透過區塊鏈回溯以確定他們收到的任何未花費的交易輸出的顏色。 +- **元幣** - 元幣背後的想法是擁有一個基於比特幣的協議,使用比特幣交易來儲存元幣交易,但具有不同的狀態轉換函數 `APPLY'`。 由於元幣協議無法阻止比特幣區塊鏈中出現無效的元幣交易,因此增加了一條規則,即如果 `APPLY'(S,TX)` 傳回錯誤,則協議預設為 `APPLY'(S,TX) = S` 這為建立任意加密貨幣協議提供了一種簡單的機制,可能具有無法在比特幣本身內部實現的先進功能,且開發成本非常低,因為比特幣協議已經處理了挖礦和網路的複雜性。 元幣已被用於實作某些類別的金融合約、名稱註冊和去中心化交易。 + +因此,一般來說,建立共識協議有兩種方法:建立獨立網路以及在比特幣之上建立協議。 前一種方法雖然在域名幣等應用中相當成功,但很難實作;每個單獨的實作都需要啟動一個獨立的區塊鏈,以及建立和測試所有必要的狀態轉換和網路程式碼。 此外,我們預測去中心化共識技術的應用程式集將遵循冪律分布,其中絕大多數應用程式太小而無法保證自己的區塊鏈,並且我們注意到存在大量需要相互互動的去中心化應用程式,特別是去中心化自治組織。 + +另一方面,基於比特幣的方法有缺陷,即它沒有繼承比特幣的簡單支付驗證功能。 簡單支付驗證適用於比特幣,因為它可以使用區塊鏈深度作為有效性的代理;在某種程度上,只要交易的祖先可以追溯到足夠久遠的時間,就可以安全地認為它們是合法狀態的一部分。 另一方面,基於區塊鏈的元幣協議不能迫使區塊鏈排除在其自己的協議中無效的交易。 因此,完全安全的簡單支付驗證元幣協議實作需要向後一致掃描到比特幣區塊鏈的開頭,以確定某些交易是否有效。 目前,基於比特幣的元幣協議的所有「輕型」實作都依賴受信任的伺服器來提供資料,這可以說是一個非常次優的結果,特別是當加密貨幣的主要目的之一是消除信任需求。 + +### 腳本 {#scripting} + +即使沒有任何擴充功能,比特幣協議實際上也構成了弱化版本的「智慧型合約」。 比特幣中的未花費的交易輸出不僅可以由公鑰擁有,還可以由用簡單的基於堆疊的程式語言編寫的更複雜的腳本擁有。 在這個範式中,一筆花費該未花費的交易輸出的交易必須提供滿足腳本的資料。 事實上,即使是基本的公鑰所有權機制也是透過指令碼實作的:腳本將橢圓曲線簽章作為輸入,根據交易和擁有未花費的交易輸出的位址對其進行驗證,並且如果驗證成功則傳回 1,否則傳回 0。 對於各種附加使用案例,還有其他更複雜的腳本。 例如,可以建構一個腳本,要求要驗證的給定三個私鑰中的兩個私鑰的簽章(「多簽」),這是一種對公司帳戶、安全儲蓄帳戶和某些商家託管情況有用的設定。 腳本還可以用於支付計算問題解決方案的賞金,人們甚至可以建構一個腳本,上面寫著「如果你能提供簡單支付驗證證明,證明你向我傳送了該面額的狗狗幣交易,那麼這個比特幣未花費的交易輸出就是你的」,本質上允許去中心化的加密貨幣間的兌換。 + +然而,比特幣中實作的腳本語言有幾個重要限制: + +- **缺乏圖零完整性** - 也就是說,雖然比特幣腳本語言支援很大一部分計算,但它幾乎不支援其他東西。 最主要的問題是缺乏迴圈。 這樣做是為了避免在交易驗證過程中出現無限迴圈;從理論上講,這對腳本程式設計師來說是一個可以克服的障礙,因為任何迴圈都可以透過簡單地使用 if 語句多次重複底層程式碼來模擬,但它確實會導致腳本空間效率非常低。 例如,實作替代的橢圓曲線簽章演算法可能需要 256 次重複乘法輪次,所有輪次都單獨包含在程式碼中。 +- **價值盲** - 未花費的交易輸出腳本無法對可提取金額作精細控制。 例如,預言機合約的一個強大用例是對沖合約,其中 A 和 B 存入了價值 $1000 的比特幣,30 天後,腳本將價值 $1000 的比特幣傳送給 A,其餘的傳送給 B。這需要預言機來確定 1 個比特幣的美元價值,但即便如此,與現有的完全中心化解決方案相比,它在信任和基礎設施要求方面還是一個巨大改進。 然而,由於未花費的交易輸出是全有或全無的,實現這一點的唯一方法是透過非常低效的破解手段,即擁有許多不同面額的未花費的交易輸出(例如,對於每個最多可達 30 的 k,有一個 2k 的未花費的交易輸出)並讓預言機選擇將哪個未花費的交易輸出傳送給 A,將哪個未花費的交易輸出傳送給 B。 +- **缺少狀態** - 未花費的交易輸出要麼是已使用,要麼是未使用;用於保存任何其他內部狀態的多階段合約或腳本是沒有機會出現的。 這會使得難以創建多階段期權合約、去中心化交易報價或兩階段加密承諾協定(為安全計算賞金必需)。 這也意味著未花費的交易輸出只能用於建構簡單的一次性合約,而不是去中心化組織等更複雜的「有狀態」合約,並且讓元協定難以實作。 二元狀態加上價值盲也意味著另一個重要應用(提款限制)是不可能實現的。 +- **區塊鏈盲** - 未花費的交易輸出看不到區塊鏈的資料,例如隨機數、時間戳記和上一個區塊的雜湊值。 由於該腳本語言無法透過隨機性來創造可能的價值,因此它在博彩和其他幾個類別的應用受到嚴重限制。 + +這樣,我們瞭解了在加密貨幣之上建立進階應用程式的三種方法:構建新的區塊鏈、在比特幣之上使用腳本以及在比特幣之上構建元協定。 構建新的區塊鏈可以在建立功能集方面提供無限的自由,但需要犧牲開發時間、啟動工作和安全性。 使用腳本這一方法很容易實作和標準化,但其功能非常有限,而且元協定雖然簡單,但在可擴展性方面存在缺陷。 透過以太坊,我們打算建立一個替代架構,使得開發更簡單、輕量用戶端性能更強大,同時允許應用程式共享經濟的環境和區塊鏈安全性。 + +## Ethereum {#ethereum} + +以太坊的目的是創造一個用於構建去中心化應用程式的替代協定,提供一套我們認為對於一大類去中心化應用程式非常有用的不同折衷方案,特別是快速開發時間、小型和不常用應用程式的安全性以及應用程式間高效互動能力很重要的情形。 以太坊透過建立本質上的終極抽象基礎層來實現這一點:具有內建圖靈完整程式語言的區塊鏈,允許任何人編寫智慧型合約和去中心化應用程式,他們可以在其中建立自己的所有權、交易格式和狀態轉換函式的任意規則。 域名幣的基本版本可以用兩行程式碼編寫,而貨幣和信譽系統等其他協定的構建需要不超過二十行程式碼。 智慧型合約是包含價值的加密「盒子」,只有在滿足某些條件時才解鎖,也可以構建在平台之上,由於圖零完整性、價值意識、區塊鏈意識和狀態的附加功能,其功能比比特幣腳本提供的功能要強大得多。 + +### 以太坊帳戶 {#ethereum-accounts} + +在以太坊中,狀態由稱為「帳戶」的物件組成,每個帳戶都有一個 20 位元組地址,並且狀態轉換是帳戶之間價值和資訊的直接轉移。 以太坊帳戶包含四個欄位: + +- **隨機數**,用來確定每個交易只能被處理一次的計數器 +- 帳戶目前的**以太幣餘額** +- 帳戶的**合約程式碼**(如存在) +- 帳戶的**存儲**(預設值為空白) + +「以太幣」是以太坊的主要內部加密燃料,用於支付交易費。 一般來說,有兩種類型的帳戶:由私鑰控制的**外部帳戶**,以及由合約程式碼控制的**合約帳戶**。 外部帳戶沒有程式碼,可以藉由建立和簽署交易,從外部帳戶送出訊息;在合約帳戶中,合約帳戶每次收到訊息後,其程式碼啟動,允許其讀取和寫入內部存儲,以及送出其他訊息或依次建立合約。 + +請注意,以太坊中的「合約」不應被視為應該「履行」或「遵守」的東西;相反,「合約」更像是生活在以太坊執行環境中的「自治代理」,當被訊息或交易「觸發」時總是執行特定的程式碼片段,並直接控制自己的以太幣餘額和自己的鍵/值存儲來追蹤持久變數。 + +### 訊息及交易 {#messages-and-transactions} + +以太坊中使用的術語「交易」是指已簽署資料包,其中儲存將從外部帳戶發送的訊息。 交易包含: + +- 訊息接收者 +- 識別發送者的簽章 +- 從發送者轉移到接收者的以太幣數量 +- 一可選數據段量 +- `STARTGAS` 值,表示交易執行允許使用的計算步驟之最大數量 +- `GASPRICE` 值,表示發送者為每個計算步驟支付的費用 + +前三個欄位是任何加密貨幣應有的標準欄位。 預設情況下資料欄位沒有函式,但虛擬機有操作碼,合約可以用操作碼來存取資料。例如,如果一個合約作為區塊鏈上的網域註冊服務,該合約可能希望將傳遞給它的資料解釋為含有兩個「欄位」,第一個欄位是要註冊的網域,第二個欄位是要註冊到的網際網路通訊協定地址。 合約將從訊息資料中讀取這些數值並且適當存儲。 + +`STARTGAS` 和 `GASPRICE` 欄位對以太坊的反拒絕服務模型很重要。 為了防止程式碼中出現意外或惡意的無限迴圈或其他計算浪費,每個交易都需要設定其可以使用的程式碼執行計算步驟數的限制。 計算的基本單位是「燃料」;通常,一個計算步驟花費 1 份燃料,但某些操作會花費更多的燃料,因為它們的計算成本更高,或者增加了必須作為狀態一部分儲存的資料量。 交易資料中每個位元組還需支付 5 份燃料。 收費系統的目的是要求攻擊者按比例為其消耗的每種資源付費,包括計算、頻寬和存儲;因此,任何導致網路消耗更多資源的交易都必須有與增量大致成正比的燃料費。 + +### 訊息 {#messages} + +合約能夠傳送「訊息」至其他合約。 訊息是虛擬物件,永遠不會被序列化且只存在以太坊的執行環境中。 訊息包含: + +- 訊息的發送者(隱含) +- 訊息接收者 +- 與訊息一起傳輸的以太幣數量 +- 一個可選擇的資料欄位 +- <0>STARTGAS 值 + +訊息與交易基本相似,但是訊息是由合約產生的,而不是由外部執行者產生。 當目前執行程式碼的合約執行 `CALL` 操作碼時,就會產生一則訊息,該操作碼會產生並執行一則訊息。 與交易一樣,訊息會使得接收者帳戶執行其程式碼。 因此,如同外部參與者與其他合約建立的關係一樣,合約可以與其他合約建立完全相同的關係。 + +請注意,交易或合約指定的燃料限額適用於該交易和所有子執行消耗的燃料總量。 例如:假如外部參與者 A 以 1000 份燃料發送交易給 B,在發送訊息給 C 之前 B 消費 600 份燃料,在返回前 C 的內部執行消耗 300 份燃料,然後,在用完燃料之前 B 還可以再花掉另外 100 份燃料。 + +### 以太坊狀態轉換函式 {#ethereum-state-transition-function} + +![以太幣狀態轉換](./ether-state-transition.png) + +以太坊狀態轉換函式 `APPLY(S,TX) -> S'` 可以定義如下: + +1. 檢查交易格式是否正確(即擁有正確數量的值)、簽章是否有效、以及隨機數是否匹配發送者帳戶中的隨機數。 如果為否,則傳回錯誤。 +2. 透過 `STARTGAS * GASPRICE` 計算出交易費,並從簽章中確定發送地址。 從發送者的帳戶餘額中減去費用並增加發送者的隨機數。 如果沒有足夠餘額可供使用,則傳回錯誤。 +3. 初始化 `GAS = STARTGAS`,並根據交易中的位元組數量為每個位元組扣除相應數量的燃料。 +4. 將交易數值從發送者帳戶轉移至接收帳戶。 如果接收帳戶尚不存在,則建立此帳戶。 如果接收帳戶是合約,執行該合約的程式碼直到運行結束或耗盡燃料。 +5. 如果因發送者資金不足或程式碼運行耗盡了燃料而導致轉帳失敗,則還原除支付費用之外的所有狀態變化,並將費用支付給礦工帳戶。 +6. 否則,將所有剩餘燃料的費用退還給發送者,並把為所消耗燃料而支付的費用發送給礦工。 + +例如,假設合約程式碼如下: + +```py +if !self.storage[calldataload(0)]: + self.storage[calldataload(0)] = calldataload(32) +``` + +請注意,合約程式碼實際上是用低階以太坊虛擬機程式碼編寫的;為清晰起見,此範例是用我們其中一種高階語言 Serpent 編寫的,它可以編譯為以太坊虛擬機程式碼。 假設合約的儲存一開始是空的,並發送了一個價值為 10 個以太幣的交易,消耗 2000 份燃料,燃料價格為 0.001 個以太幣,並且包含 64 位元組的資料,其中位元組 0-31 代表數字 `2`,位元組 32-63 代表字串 `CHARLIE`。 這種情況下,狀態轉移函式之流程如下: + +1. 檢查交易是否有效且格式正確。 +2. 檢查交易發送者是否至少有 2000 \* 0.001 = 2 以太幣。 如是,則從發送者的帳戶中減去 2 以太幣。 +3. 初始化燃料 = 2000,假設交易長度為 170 個位元組,每個位元組費用為 5 份燃料,減去 850 份燃料,因此剩下 1150 份燃料。 +4. 從發送者的帳戶中再減去 10 個以太幣,並將其新增至合約帳戶。 +5. 執行程式碼。 在本例中,執行過程比較簡單:函式檢查是否使用合約位於索引 `2` 的儲存,若未使用,則通知未使用;若使用,函式將位於索引 `2` 的存儲設定為值 `CHARLIE`。 假設執行過程花費 187 份燃料,那麼剩餘的燃料數量為 1150 - 187 = 963 +6. 將 963 \* 0.001 = 0.963 以太幣新增回發送者的帳戶,並傳回產生的狀態。 + +如果交易的接收一端沒有合約,那麼總交易費就等於提供的 `GASPRICE` 乘以交易的位元組長度,且和隨交易發送的資料無關。 + +請注意,訊息在還原方面與交易相同:如果訊息執行耗盡燃料,那麼該訊息的執行以及該執行觸發的所有其他執行都會還原,但父執行不需還原。 這意味著合約呼叫另一份合約是「安全的」,就好像 A 使用 G 份燃料呼叫 B,那麼可以保證 A 的執行最多損耗 G 份燃料。 最後,請注意有一個建立合約的操作碼 `CREATE`;它的執行機制通常類似於 `CALL`,不同之處在於執行的輸出決定了新建立合約的程式碼。 + +### 程式碼執行 {#code-execution} + +以太坊合約中的程式碼是用一種基於堆疊的低階位元組碼語言編寫,被稱為「以太坊虛擬機器程式碼」或「EVM 程式碼」。 該程式碼由一系列位元組組成,每個位元組代表一種操作。 通常,程式碼執行是一個無限迴圈,即重複執行當前程式計數器(由零開始)的操作,然後將程式計數器增加一,直到程式碼執行完畢或出現錯誤,或偵測到 `STOP` 或 `RETURN` 指令。 這些操作可以存取三種資料儲存空間: + +- ** 堆疊**,一種後進先出的資料容器,允許對資料做推入與彈出 +- **記憶體**,一個可無限擴充的位元組陣列 +- 合約的長期**存儲**,一個鍵/值儲存。 跟堆疊和記憶體會在計算結束後重置不同,存儲將長期持續存在。 + +程式碼也能存取傳入訊息的值、發送者與資料,以及區塊頭資料,並且程式碼也可以傳回資料位元組陣列作為輸出。 + +以太坊虛擬機程式碼的正式執行模型非常簡單。 當以太坊虛擬機運作時,其完整計算狀態可以由元組 `(block_state, transaction, message, code, memory, stack, pc, gas)` 來定義,其中 `block_state` 是包含所有帳戶的全域狀態並包含餘額和存儲。 在每一輪執行開始時,可以透過使用 `code` 的第 `pc` 個位元組(或 0,如果 `pc >= len(code)`)來找到當前指令,並且每條指令在元組影響方式方面都有自己的定義。 例如,`ADD` 將兩個項目彈出並將它們的和推入堆疊,將 `gas` 減少 1 並將 `pc` 增加1,`SSTORE` 將頂部的兩個項目彈出並將第二個項目插入合約存儲中第一個項目指定的索引處。 雖然有很多透過即時編譯來最佳化以太坊虛擬機執行的方法,但只需幾百行程式碼就可以完成以太坊的基本實作。 + +### 區塊鏈及挖礦 {#blockchain-and-mining} + +![以太坊應用框圖](./ethereum-apply-block-diagram.png) + +以太坊區塊鏈在許多方面與比特幣區塊鏈相似,雖然確實存在一些差異。 以太坊和比特幣在區塊鏈架構方面的主要區別在於,與比特幣不同,以太坊區塊包含交易清單和最新狀態的副本。 除此之外,另外兩個數值,即區塊編號和難度,也儲存在區塊中。 以太坊中基本的區塊驗證演算法如下: + +1. 檢查引用的前一個區塊是否存在並且有效。 +2. 檢查區塊的時間戳記是否大於引用的前一個區塊的時間戳記,並且在未來的 15 分鐘內。 +3. 檢查區塊編號、難度、交易根、叔根和燃料限制(各種以太坊特定的低階概念)是否有效。 +4. 確認區塊上的工作量證明是否有效。 +5. 使`S[0]`為前任區塊之最終狀態. +6. 令 `TX` 為區塊的交易清單,並且包含 `n` 筆交易。 對於 `0...n-1` 中的所有 `i`,設定 `S[i+1] = APPLY(S[i],TX[i])`。 如果任何應用程式傳回錯誤,或直到此時區塊中消耗的總燃料量超過 `GASLIMIT`,則傳回錯誤。 +7. 令 `S_FINAL` 為 `S[n]`,但加上支付給礦工的區塊獎勵。 +8. 檢查狀態 `S_FINAL` 的默克爾樹根是否等於區塊頭中提供的最終狀態根。 如果為是,則該區塊有效;否則該區塊無效。 + +這種方法乍看似乎效率很低,因為它需要儲存每個區塊的完整狀態,但實際上效率應該與比特幣相當。 原因是狀態儲存在樹狀結構中,而且在新增每個區塊後只需要更改樹的一小部分。 因此,一般來說在兩個相鄰區塊之間,樹的絕大部分應該是相同的,因此資料可以儲存一次並使用指標引用兩次(即子樹的雜湊值)。 一種稱為「帕特里夏樹」的特殊類型的樹用於實現此目的,它包括對默克爾樹概念的修改,允許高效地插入和刪除節點,而非僅僅更改。 此外,由於所有狀態資訊都存在於最後一個區塊內,因此無需儲存整個區塊鏈歷史 - 如果此策略可以應用於比特幣,可以節省 5-20 倍空間。 + +一個常見的問題是合約程式碼在實體硬體的「哪裡」執行。 這有一個簡單答案:合約程式碼的執行過程是狀態轉換函式定義的一部分,而該函式是區塊驗證演算法的一部分,因此若將交易新增到區塊 `B` 中,由該交易產生的程式碼執行將在現在和未來由所有節點執行,由此下載並驗證區塊 `B`。 + +## 應用 {#applications} + +基本上,以太坊上擁有三類應用。 第一類是金融應用,為使用者提供更強大的方式使用他們的資金來管理和簽訂合約。 這包括子貨幣、金融衍生品、對沖合約、儲蓄錢包、遺囑,甚至某些類別的完整僱傭合約。 第二類是涉及金錢的半金融應用,但很大部分功能也與資金無關;一個恰當的例子是針對解決計算難題的自動執行的懸賞。 最後,還有一些非金融性質的應用,例如線上投票和去中心化治理。 + +### 代幣系統 {#token-systems} + +區塊鏈上的代幣系統有許多應用,從代表美元或黃金等資產的子貨幣到公司股票等等,單一代幣可以代表智慧資產、安全且不可偽造的優惠券,甚至可代表作為激勵積分系統並與傳統價值完全沒有關聯的代幣系統。 代幣系統在以太坊的實作非常容易。 要理解的重點是所有貨幣或代幣系統,從根本上都是具有以下操作的資料庫:從 A 中減去 X 個單位並將 X 個單位新增給 B,附帶條件是 (1) A 在交易前至少有 X 個單位且 (2) 交易由 A 批准。實作代幣系統所需要做的就是將此邏輯實作到合約中。 + +使用 Serpent 實作代幣系統的基本程式碼如下: + +```py +def send(to, value): + if self.storage[msg.sender] >= value: + self.storage[msg.sender] = self.storage[msg.sender] - value + self.storage[to] = self.storage[to] + value +``` + +此程式碼本質上是本文檔前面部分詳細描述的「銀行系統」狀態轉換函式的字面實作。 需要額外添加幾行程式碼來規定,在最初以及其他一些邊緣案例下分配貨幣單位的初始步驟。理想情況下,應該新增一個函式讓其他合約查詢某個地址的餘額。 但這就是全部了。 理論上,基於以太坊的代幣系統在作為子貨幣時可能具有另一個重要特徵,該特徵是基於比特幣的鏈上元貨幣所缺乏的:就是直接以該貨幣支付交易費的能力。 實作這點的方式是合約會保持一定數量的以太幣餘額,用來向發送者退還用於支付費用的以太幣,合約也會透過收取費用的形式收集內部貨幣單位,並在持續不斷的拍賣中轉售貨幣,以此補充以太幣餘額。 因此,使用者需要用以太幣「啟動」他們的帳戶,但一旦帳戶中有以太幣,就可以重複使用,因為合約每次都會向帳戶退還資金。 + +### 金融衍生物及穩定價值貨幣 {#financial-derivatives-and-stable-value-currencies} + +金融衍生物是「智慧型合約」最常見的應用,也是最容易以程式碼實作的應用之一。 實作金融合約的主要挑戰在於,其中大多數合約都需要引用外部價格行情指示器;例如,一個非常理想的應用程式是對沖以太幣(或其他加密貨幣)相對於美元波動的智慧型合約,而這需要合約知道以太幣/美元的價值。 實現這一點的最簡單方法是藉助由特定方(例如納斯達克)維護的「資料饋送」合約,這種合約的設計讓特定方能夠根據需要更新合約並提供一個介面,允許其他合約向該合約發送訊息並傳回包含價格的回覆。 + +考慮到這一關鍵因素,對沖合約將如下所示: + +1. 等待 A 方輸入 1000 個以太幣。 +2. 等待 B 方輸入 1000 個以太幣。 +3. 將透過查詢資料饋送合約計算出的 1000 個以太幣的美元價值記錄在存儲中,假設為 $x。 +4. 30 天後,允許 A 或 B 「重新啟動」合約,以便將價值 $x 美元的以太幣(通過再次查詢資料饋送合約以獲得新價格來計算得出)發送給 A,並將其餘的發送給 B。 + +這種合約在加密貨幣商業上具有巨大潛力。 加密貨幣的主要問題之一是它的波動性。雖然許多使用者和商家可能希望獲得處理加密資產的安全性和便利性,但他們中許多人不希望面臨在一天內資金價值損失 23% 的景象。 目前為止,最常見的解決方案是發行者支持的資產;其想法是發行者創建一種子貨幣,他們有權發行和撤銷這種子貨幣單位,並且對於向發行者(離線)提供一個單位指定基礎資產(例如黃金、美元)的任何人,發行者可以向其(離線)提供一個單位的貨幣。 發行者然後承諾向返還一個單位加密資產的任何人提供一個單位基礎資產。 這種機制讓任何非加密資產「升級」為加密資產,前提為發行者是可信的。 + +然而實際上,發行者並不總是值得信賴,在某些情況下銀行基礎設施過於薄弱或過於不友好,以至無法提供此類服務。 金融衍生物提供了另一種選擇。 這種方案中,不是由單一發行者提供資金來支持資產,而是由一個去中心化的投機者市場承擔了這個角色,他們押注加密參考資產(例如以太幣)的價格會上漲。 與發行者不同,投機者無法在交易中違約,因為對沖合約託管他們的資金。 注意這種方法不是完全去中心化的,因為仍然需要一個可信來源提供價格行情指示器,但可以說在降低基礎設施要求(與發行者不同,發布價格饋送不需要許可證並且可能被歸類為言論自由)以及減少詐欺的可能性方面,這仍是一個巨大改進。 + +### 身分及信譽系統 {#identity-and-reputation-systems} + +最早的替代加密貨幣[域名幣](http://namecoin.org/),嘗試使用類似比特幣的區塊鏈提供一種名稱註冊系統,讓使用者可以在公共資料庫中註冊他們的姓名和其他資料。 主要用例是[網域名稱系統](https://wikipedia.org/wiki/Domain_Name_System),它將諸如「bitcoin.org」等域名(在域名幣的情況下,「bitcoin.bit」)映射到一個網際網路通訊協定地址。 其他用例包括電子郵件身份驗證系統和可能更高階的信譽系統。 以下是在以太坊上提供類似域名幣的名稱註冊系統的基本合約: + +```py +def register(name, value): + if !self.storage[name]: + self.storage[name] = value +``` + +合約非常簡單;它就是以太坊網路中的一個資料庫,可以向其中新增但不能修改或移除。 任何人都可以把名稱註冊為一個值,並且該註冊將永遠保留。 更複雜的名稱註冊合約還將具有允許其他合約查詢的「函式子句」,以及允許名稱「所有者」(即首個註冊者)更改資料或轉讓所有權的機制。 甚至可以在該合約上添加信譽和信任網路功能。 + +### 去中心化檔案存儲 {#decentralized-file-storage} + +過去幾年,大批受歡迎的線上檔案存儲新創公司不斷湧現,其中最著名的是 Dropbox。這家公司想讓使用者能夠上傳硬碟備份、提供備份儲存服務並允許使用者存取備份來收取月費。 然而,目前檔案存儲市場其實效率相對較低。在粗略了解各種現有解決方案後會發現,主流檔案存儲的月費比整個硬碟的成本還要高,特別是在被稱為「恐怖谷」的 20-200 GB 級別,既沒有免費額度也沒有企業級折扣。 以太坊合約讓去中心化檔案存儲生態系統得以發展,個人使用者可以將自己的硬碟租出去以獲得少量收益,而未使用的空間可用於進一步降低檔案存儲成本。 + +這個系統的關鍵組成部分就是我們所謂的「去中心化 Dropbox 合約」。 該合約的運作方式如下。 首先,使用者將需要將存儲的資料拆分成幾個區塊並對每個區塊加密以保護隱私,然後以此構建一個梅克爾樹。 然後建立一個包含以下規則的合約,對於每 N 個區塊,合約將從默克爾樹中選擇一個隨機索引(使用能夠被合約程式碼存取的上一個區塊的雜湊值作為隨機性來源),然後給予第一個實體 X 個以太幣,以提供包含簡單支付驗證(例如位於樹中特定索引處區塊的所有權證明)的交易。 當使用者想重新下載他們的檔案時,他們可以使用微支付通道協定(例如每 32 KB 支付 1 個szabo)恢復檔案;最節省費用的方法是支付者不到最後不發布交易,而是每 32 KB 後用一個更划算的、具有相同隨機數的交易取代原來的交易。 + +該協定的一個重要特點是,雖然似乎使用者相信許多隨機節點不會丟失檔案,但可以透過以下方法將這種風險降低到接近零:透過私鑰共享將檔案拆分成許多部分,並透過監控合約確定每一部分仍在某個節點中。 如果合約依然在支付款項,那就提供了一個加密證明,某人仍在利用此合約來保存檔案。 + +### 去中心化自治組織 (DAO) {#decentralized-autonomous-organizations} + +「去中心化自治組織」的一般概念是指擁有一定數量成員或股東的虛擬實體,它們大概擁有 67% 的大多數股權,有權使用實體的資金並修改其程式碼。 成員會集體決定該組織如何分配其資金。 去中心化自治組織的資金分配方式可以是賞金、薪資或更奇特的機制,例如用內部貨幣來獎勵工作。 這本質上複製了傳統公司或非營利組織的法律特徵,但僅使用加密區塊鏈技術來執行。 目前為止,許多關於去中心化自治組織的討論都圍繞著「去中心化自治公司」(DAC) 的「資本家」模式,其中有可獲得紅利的股東和可交易的股份;作為替代方案,有一種可能被稱為「去中心化自治社群」的實體會使所有成員在決策時擁有同等權利,並在增減成員時要求 67% 的現有成員多數同意。 由於每人只能擁有一個成員資格,所以需要群體來集體執行。 + +以下概括如何用程式碼實現去中心化自治組織。 最簡單的設計就是一段能夠在三分之二的成員同意變更時進行變更的自動修改程式碼。 雖然程式碼理論上是不可更改的,然而透過把程式碼片段放入不同的合約,並將要呼叫的合約的位址儲存在可修改的儲存中,使用者可以輕易解決這一問題及使程式碼事實上變得可修改。 在這種去中心化自治組織合約的簡單實作中,有三種交易類型可透過交易提供的資料區分: + +- `[0,i,K,V]` 在索引 `i` 處註冊提案,以便將儲存索引 `K` 的位址變更為值 ` V` +- `[1,i]` 註冊一張贊成提案 `i` 的投票 +- `[2,i]` 如果已獲得足夠的投票,則最終確定提案 `i` + +合約為每一種交易提供了子句。 它將維護所有開放儲存變更的記錄,以及投票支持者的清單。 它還會有全部成員的清單。 當三分之二之成員投票贊成儲存變更,一個最終化交易將執行此變更。 更複雜的框架可能還有針對發送交易、增減成員等功能的內建投票功能,甚至可以提供[流動式民主](https://wikipedia.org/wiki/Liquid_democracy)投票委託(即任何人都可以委託另外一個人代表自己投票,而這種委託關係是可以傳遞的,如果 A 委託了 B,然後 B 委託了 C,那麼 C 將決定 A 的投票)。 這種設計將使去中心化自治組織作為一個去中心化社群有機地成長,允許人們最終將篩選成員的任務委派給專家,但與「現有系統」不同,隨著時間推移,當個別社群成員改變他們的陣營時,專家可以輕鬆地加入或退出。 + +另一替代模型是去中心化公司,其中任何帳戶可以擁有零份或多份股份,需要有三分之二的股份才能做出決策。 完整框架將包括資產管理功能,即能夠出價購買或出售股份並且能夠接受報價(最好是合約裡有訂單匹配機制)。 委託也提供流動式民主形式,普及了「董事會」的概念。 + +### 更多應用 {#further-applications} + +**1. 儲蓄錢包**。 假設 Alice 想安全地保管她的資金,但她擔心自己的私鑰遺失或被破解。 她把以太幣放到和銀行 Bob 簽訂的一個合約裡,如下: + +- Alice 每天最多可以單獨提取 1% 的資金。 +- Bob 每天最多可以單獨提取 1% 的資金,但 Alice 可以用她的金鑰建立一個交易取消 Bob 的提款權限。 +- Alice 和 Bob 一起可以任意提取資金。 + +通常,每天 1% 的額度對於 Alice 來說已足夠,若 Alice 想提取更多資金,她可以聯繫 Bob 尋求幫助。 如果 Alice 的金鑰被破解,她可以立即聯絡 Bob 幫她將資金轉移到新合約。 如果她遺失了金鑰,Bob 最終會取出資金。 如果發現 Bob 是惡意的,她可以取消 Bob 的提款權限。 + +**2. 農作物保險**。 使用者可以輕鬆地建立金融衍生合約,但使用的是天氣而非任何價格指數的資料饋送。 如果愛荷華州的農民購買了一項金融衍生物,該產品基於愛荷華的降雨情況進行反向賠付,那麼如果遇到乾旱,該農民將自動收到賠付資金,而且如果降雨充足他會很開心,因為他的作物會有好收成。 這可以擴展到一般的自然災害保險。 + +**3. 去中心化資料餽送**。 對於金融差價合約,實際上有可能透過一種名為「[SchellingCoin](http://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/)」的協定將資料餽送服務去中心化。 SchellingCoin 的基本工作原理如下:N 個相關方都向系統輸入給定資料的值(例如以太幣/美元價格),對這些值進行排序,在第 25 和第 75 個百分位之間的每個人都會得到一個代幣作為獎勵。 每個人都有動力提供其他人都會提供的答案,而唯一能讓眾多參與者實際達成一致的值是顯而易見的:真相。 這樣就建立了一種去中心化協定,它理論上可以提供任何數量的數值,包括以太幣/美元價格、柏林的溫度甚至某個困難計算的結果。 + +**4. 智慧型合約多重簽章託管**。 比特幣允許多重簽章交易合約,例如,提供給定五個金鑰中的三個便可以使用資金。 以太坊允許更精細的控制;例如,提供五個金鑰中的四個可以使用任意數量的資金,提供五個金鑰中的三個可以每天最多使用 10% 的資金,提供五個金鑰中的兩個可以每天最多使用 0.5% 的資金。 此外,以太坊的多重簽章是非同步的 — 雙方可以在不同時間在區塊鏈上註冊他們的簽章,最後一個簽章將自動傳送交易。 + +**5. 雲端運算**。 以太坊虛擬機技術也可以用來建立一個可驗證的運算環境,讓使用者可以要求他人執行計算,並要求提供證據,證明某些隨機選擇檢查點處的計算被正確執行。 這允許創建一個雲端運算市場,任何使用者都可以使用他們的桌上型電腦、筆記型電腦或專用伺服器參與其中,並且可以使用抽查和保證金來確保系統是值得信賴的(即節點不能透過欺騙來獲利)。 雖然這種系統可能不適合所有任務;例如,需要高階的進程間通訊的任務無法在大型節點雲端上輕鬆完成。 然而,其他任務則更容易實現並行;例如 SETI@home、folding@home 和遺傳演算法等專案可以輕鬆地在這類平台上實作。 + +**6. 點對點賭博**。 任意數量的點對點賭博協議都可以在以太坊區塊鏈上實作,例如 Frank Stajano 和 Richard Clayton 的 [Cyber​​dice](http://www.cl.cam.ac.uk/~fms27/papers/2008-StajanoCla-cyberdice.pdf)。 最簡單的賭博協定實際上只是關於下一個區塊雜湊值的差價合約,並且可以在其基礎上構建更進階的協定,建立接近零費用且無法作弊的賭博服務。 + +**7. 預測市場**。 如果有預言機或 SchellingCoin,預測市場也很容易實作,預測市場與 SchellingCoin 一起有可能被證明是 [futarchy](http://hanson.gmu.edu/futarchy.html) 的第一個主流應用,作為去中心化組織的治理協定。 + +**8. 鏈上去中心化市場**,以身分和信譽系統為基礎。 + +## 雜項與憂慮 {#miscellanea-and-concerns} + +### 經修改之 GHOST 實作 {#modified-ghost-implementation} + +「貪婪最重可觀察子樹」(GHOST) 協定是由 Yonatan Sompolinsky 和 Aviv Zohar 在 [2013 年12 月](https://eprint.iacr.org/2013/881.pdf)首次提出的創新。 提出 GHOST 的動機是,具有快速確認時間的區塊鏈目前由於過時率高而安全性降低— 因為區塊需要一定的時間才能透過網路傳播,如果礦工 A 開採了一個區塊,然後礦工 B 碰巧在礦工 A 的區塊傳播到 B 之前開採了另一個區塊,那麼礦工 B 的區塊最終會被作廢,無法用於增加網路安全性。 此外,還有一個中心化問題:如果礦工 A 是一個擁有 30% 哈希算力的礦池,而 B 擁有 10% 哈希算力,那麼 A 將面臨 70% 的時間生產陳腐區塊的風險(因為在其他 30 % 的時間 A 產生了最後一個區塊,所以會立即獲得挖礦數據),而 B 將面臨 90% 的時間生產陳腐區塊的風險。 因此,如果區塊間隔短到足以使過時率較高,則 A 將僅憑藉其算力大小而顯著提高效率。 結合這兩種影響,快速產生區塊的區塊鏈很可能造就一個擁有足夠高比例網路哈希算力的礦池,從而對挖礦過程擁有事實上的控制。 + +正如 Sompolinsky 和 Zohar 所描述,GHOST 透過在計算哪條鏈「最長」時包含陳腐區塊來解決網路安全性降低的第一個問題;也就是說,在計算哪個區塊受到最大的總工作量證明支援時,不僅區塊的父塊和更遠的祖先,而且該區塊祖塊(在以太坊行話中稱為「叔塊」)的陳腐子代也都被添加到計算中。 為了解決第二個問題,即中心化偏差,我們跳出了 Sompolinsky 和 Zohar 描述的協定範疇,並且還為陳腐區塊提供區塊獎勵:陳腐區塊獲得其基礎獎勵的 87.5%,而包含陳腐區塊的侄塊獲得剩餘的 12.5%。 然而,交易費並不獎勵給叔塊。 + +以太坊實作了一個簡化版的 GHOST 協定,它僅僅深入七個層級。 具體來說,定義如下: + +- 一個區塊必須指定一個父塊,並且必須指定零個或多個叔塊 +- 包含在區塊 B 中的叔塊必須具有以下屬性: + - 它必須是區塊 B 的第 k 代祖先的直系子代,其中 `2 <= k <= 7`。 + - 它不能是 B 的祖先 + - 叔塊必須是有效的區塊頭,但不需要是先前驗證過的甚至是有效的區塊 + - 叔塊必須不同於前面區塊中包含的所有叔塊,並且不同於同一區塊中包含的所有其他叔塊(非雙重包含) +- 對於區塊 B 中的每個叔塊 U,區塊 B 的礦工獲得額外 3.125% 的鑄幣獎勵,而叔塊 U 的礦工獲得 93.75% 的標準鑄幣獎勵。 + +這種限製版的 GHOST 協議,最多只能包含 7 代叔塊,採用它有兩個原因。 首先,在計算給定區塊中哪些叔塊有效時,無限制 GHOST 會使得計算過於複雜。 第二,無限制 GHOST 協議採用了以太坊中使用的補償,取消了促使礦工在主鏈而不是公共攻擊者的鏈上挖礦的激勵措施。 + +### 手續費 {#fees} + +由於發佈到區塊鏈中的每筆交易都會為網路帶來下載和驗證的成本,因此需要一些通常涉及交易費用的監管機制來防止濫用。 比特幣使用的預設方法是純粹自願的手續費,依靠礦工充當看門人並設定動態最低限額。 這種方法特別在比特幣社群中受歡迎,是因為它「基於市場」,允許礦工和交易發送者之間的供需決定價格。 然而,這種想法的問題在於交易處理並不符合市場法則。雖然將交易處理解釋為礦工向發送者提供的服務直觀上很有吸引力,但實際上礦工收錄的每筆交易都需要由網絡中的每個節點處理,因此絕大部分交易處理成本由第三方而非由決定是否收錄交易的礦工承擔。 因此,公地悲劇的問題很可能發生。 + +然而,結果卻是,基於市場機制中的這個缺陷,在給出一個不準確的特定簡化假設時,會神奇地自我抵銷。 論證如下。 假設: + +1. 交易導致 `k` 個操作,將提供獎勵 `kR` 給添加它的任何礦工,其中 `R` 由發送者設定,`k` 和 `R` 事先(大體上)對礦工可見。 +2. 在任何節點,操作的處理成本為 `C`(即所有節點效率相同) +3. 有 `N` 個挖礦節點,每個節點的處理能力完全相同(即總處理能力的 `1/N`) +4. 沒有不挖礦的全節點。 + +如果預期獎勵大於成本,礦工將願意處理交易。 因此,預期獎勵為 `kR/N`,因為礦工有 `1/N` 機會處理下一個區塊,而礦工的處理成本僅為 `kC`。 因此,當 `kR/N > kC` 或 `R > NC` 時,礦工將會添加交易。 請注意 `R` 是發送者提供的每個操作的費用,因此是發送者從交易中獲得的收益的下限,`NC` 是整個網路共同處理一個操作的成本。 因此,礦工有動機只添加那些總實際收益超過成本的交易。 + +然而,這些假設在現實中會出現有些許重要偏離: + +1. 與其他驗證節點相比,礦工處理交易的成本確實更高,因為額外的驗證時間會延遲區塊傳播,從而增加區塊陳腐的機率。 +2. 確實存在不挖礦的全節點。 +3. 實際上挖礦能力的分配最終可能極度不平等。 +4. 想破壞網路的投機者、政敵和瘋子確實存在,他們可以巧妙地設定合約,讓他們的成本遠低於其他驗證節點支付的成本。 + +(1) 讓礦工傾向於添加較少的交易,並且 (2) 增加 `NC`;因此這兩種作用會互相 抵銷一部分。 [如何抵銷?](https://github.com/ethereum/wiki/issues/447#issuecomment-316972260) (3) 和 (4) 是主要問題,為了解決它們,我們簡單地制訂了一個浮動上限: 沒有區塊能夠包含比 `BLK_LIMIT_FACTOR` 乘以長期指數移動平均值更多的操作數。 具體來說: + +```js +blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR - 1) + +floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR) +``` + +`BLK_LIMIT_FACTOR` 和 `EMA_FACTOR` 是常數,暫時設定為 65536 和 1.5,但可能在進一步分析後會變更。 + +還有一個因素會抑制比特幣中的大區塊:大區塊將需要更長時間來傳播,因此有更大機率變成陳腐區塊。 在以太坊中,燃料消耗量高的區塊也可能需要更長時間來傳播,因為它們的物理大小更大,而且因為它們需要更長時間來處理交易狀態轉換以進行驗證。 這種延遲抑制因素在比特幣中是一個重要的考慮因素,但在以太坊中由於 GHOST 協定而較少考慮;因此,依靠受監管的區塊限制可提供更穩定的基準。 + +### 計算及圖零完整性 {#computation-and-turing-completeness} + +重點是以太坊虛擬機是圖靈完整的;這意味著以太坊虛擬機程式碼可以對任何設想可執行的計算進行編碼,包括無限迴圈。 以太坊虛擬機程式碼以兩種方式實作迴圈。 首先,使用一個 `JUMP` 指令,允許程式跳回至程式碼中的前一個位置,也使用一個 `JUMPI` 指令進行條件跳轉,允許諸如 `while x < 27: x = x * 2` 之類的語句。 第二,合約可以呼叫其他合約,有可能透過遞迴進行迴圈。 這很自然地導致一個問題:本質上,惡意使用者能夠透過迫使礦工和全節點進入無限迴圈而關閉它們嗎? 這個問題​源於電腦科學中的一個難題,稱為停機問題:在一般情況下,沒有辦法知道一個特定的程式是否會停止運作。 + +如狀態轉換部分所述,我們的解決方案要求交易設定一個允許執行的最大計算步驟數,如果超過執行時間,計算就會被還原但仍要支付費用。 訊息以同樣的方式運作。 為顯示我們解決方案背後的動機,請看下面的範例: + +- 攻擊者建立一個運行無限迴圈的合約,然後向礦工發送啟動該迴圈的交易。 礦工將處理該交易,運行無限迴圈直到燃料耗盡。 即使執行耗盡了燃料並中途停止,交易仍然有效而礦工仍然向攻擊者索取每個計算步驟的費用。 +- 攻擊者建立一個非常長的無限迴圈,目的是迫使礦工持續長時間計算,以至於計算結束時將有更多區塊產生出來,這樣礦工就不可能透過添加該交易來索取費用。 然而,攻擊者需要為 `STARTGAS` 提交一個值,限制執行可以進行的計算步驟數,因此礦工將提前知道該計算將進行相當多的步驟數。 +- 攻擊者看到一個合約,其中的程式碼形式為 `send(A,contract.storage[A]); contract.storage[A] = 0`,然後發送一個交易,但燃料只夠運行第一步而不足以運行第二步(即進行提款但不讓餘額減少)。 合約創建者無需擔心防備此類攻擊,因為若執行中途停止,變更會被還原。 +- 金融合約取九個專有資料餽送的中位數,以最大限度地降低風險。 攻擊者接管其中一個資料饋送,該資料饋送設計為可透過去中心化自治組織部分描述的變數-地址-呼叫機制修改,並將其轉換為運行無限迴圈,從而強制任何從金融合約索取資金的嘗試都因燃料耗盡中止。 然而,金融合約可以對訊息設定燃料限制來預防這個問題。 + +圖靈完整的替代方案是圖靈不完整,其中 `JUMP` 和 `JUMPI` 不存在,並且在任何給定時間每個合約只允許有一個副本存在於呼叫堆疊內。 在這個系統中,上述收費系統和關於我們解決方案效果的不確定性可能都是不必要的,因為執行一個合約的成本將由合約大小決定。 此外,圖靈不完整甚至不是一大限制;在我們內部構想的所有合約範例中,到目前為止只有一個需要迴圈,甚至那個迴圈也可以透過將一行程式碼重複 26 次來消除。 考慮到圖靈完整性帶來的嚴重影響和有限益處,為什麼不簡單地使用圖靈不完整的語言呢? 然而在現實中,圖靈不完整仍遠遠不能有效解決問題。 要了解原因,考慮以下合約: + +```sh +C0: call(C1); call(C1); +C1: call(C2); call(C2); +C2: call(C3); call(C3); +... +C49: call(C50); call(C50); +C50: (run one step of a program and record the change in storage) +``` + +現在,向 A 發送一筆交易。這樣,在 51 筆交易中,我們有一個合約需要 250 個計算步驟。 礦工可以嘗試提前偵測這種邏輯炸彈,方法是為每個合約維護一個值,指定合約可以進行的最大計算步驟數,然後對遞迴呼叫其他合約的合約進行計算,但是這需要礦工禁止建立其他合約的合約(因為上面 26 個合約的建立和執行可以很容易地匯集到一個單獨合約內)。 另一個問題是訊息地址欄位是一個變數,所以在一般情況下,甚至不可能提前知道某個合約將呼叫哪些合約。 因此,最終我們有了一個驚人結論:圖靈完整性十分容易管理,而在缺乏同樣的控制時,圖靈不完整的管理異常地困難,那為什麼不直接讓協定圖靈完整呢? + +### 貨幣與發行 {#currency-and-issuance} + +以太坊網路包括自己的內建貨幣以太幣,其扮演雙重角色:提供一個主要流動資金層,實現各種數位資產之間的高效交易,更重要的是,提供一種支付交易費的機制。 為方便起見並避免未來爭議(參考當前比特幣中的 mBTC/uBTC/satoshi 爭論),面額預先設定如下: + +- 1:wei +- 1012:szabo +- 1015:finney +- 1018:ehter + +這應該被視為「美元」和「美分」或「BTC」和「satoshi」概念的擴展版本。 在不久將來,我們期望「ehter」用於普通交易,「finney」用於微型交易,「szabo」和「wei」可以在圍繞費用和協定實作的技術討論中使用;其餘的面額可能會在以後變得有用,但目前不應包含在用戶端中。 + +發行模式如下: + +- 以太幣將以貨幣銷售的形式發行,價格為一個比特幣可購買 1000-2000 個以太幣,這種機制旨在為以太坊組織籌資和支付開發費用,且已被其他平台(如 Mastercoin 和 NXT)成功應用。 早期買家將從較大的折扣中獲益。 發售所得的比特幣將全部用來支付開發者的薪資和獎金,並用來投資以太坊和加密貨幣生態系統中的各種營利和非營利專案。 +- 0.099 倍的發售總量(60102216 個以太幣)將分配給以太坊組織,以補償早期貢獻者,並用以太幣計價的方式支付創世區塊誕生前的開銷。 +- 0.099 倍的發售總量將保留為長期準備金。 +- 發售後,將永久地每年為礦工分配 0.26 倍的發售總量。 + +| 群組 | 啟動時 | 一年後 | 五年後 | +| --------- | ------ | ------ | ------ | +| 貨幣數量 | 1.198X | 1.458X | 2.498X | +| 購買者 | 83.5% | 68.6% | 40.0% | +| 發售前花費的準備金 | 8.26% | 6.79% | 3.96% | +| 發售後使用的準備金 | 8.26% | 6.79% | 3.96% | +| 礦工 | 0% | 17.8% | 52.0% | + +#### 長期供應成長率(百分比) + +![以太坊通貨膨脹](./ethereum-inflation.png) + +_除了線性的貨幣發行方式外,與比特幣相似,以太幣的長期供應成長率也趨於零。_ + +上述模型提供了兩個主要選項:(1) 捐贈池的存在和規模,以及 (2) 永久增長的線性供應的存在,而比特幣採用了限制供應的方法。 捐贈池存在的理由如下。 如果捐贈池不存在,且線性發行量減少到​​總發售量的 0.217 倍以實現相同的通貨膨脹率,那麼以太幣總量將減少 16.5%,而每個單位將增值 19.8%。 因此,為了達成均衡,將會多發售 19.8% 的以太幣並購買,所以每個單位的價值將再次與以前完全一樣。 組織還將擁有 1.198 倍的比特幣,可以考慮將其分為兩部分:原有比特幣和額外的 0.198 倍比特幣。 因此,這種情況_完全等同於_捐贈,但有一個重要區別:該組織僅持有比特幣,因而沒有動機支持以太幣單位的價值。 + +永久性線性供應成長模型降低了有些人認為比特幣財富過度集中的風險,並為生活在當前和未來的人提供了獲取貨幣單位的公平機會,同時又保留了讓人獲取並持有以太幣的強效激勵措施,因為長期來看,用百分比表示的「供應成長率」仍將趨於零。 我們還推測由於加密貨幣總是會因為不小心、死亡等原因而丟失,而加密貨幣的損失可以被模擬為每年總供應量的百分比,因此流通中的貨幣總供應量實際上最終會穩定在一個等於每年發行量除以損失率的數值上(例如,在損失率為 1% 時,一旦供應量達到 26 倍,那麼每年將挖掘出 0.26 倍,0.26 倍丟失,形成一個平衡點)。 + +請注意,未來以太坊很可能會過渡到權益證明模型以確保安全,將每年的發行量減少到 0 至 0.05 倍之間。 如果以太坊組織失去資金或因任何其他原因消失,我們將開啟一個「社區合約」:任何人都有權創建以太坊的未來候選版本,唯一的條件是以太幣的數量必須最多等於 `60102216 * (1.198 + 0.26 * n)`,其中 `n` 是創世區塊之後的年數。 創作者可以自由地眾售,或以其他方式分配權益證明驅動的供應擴張和最大允許供應擴張之間的部分或全部差額,來支付開發費用。 不符合社區合約的候選升級可能會合理地被分叉為相容版本。 + +### 挖礦中心化 {#mining-centralization} + +比特幣挖礦演算法的原理是,讓礦工一次又一次地對區塊頭稍作修改的版本進行數百萬次 SHA256 計算,直到最終某個節點所產生版本的雜湊值小於目標值(目前大約為 2 192)。 然而,這種挖礦演算法容易出現兩種形式的中心化。 第一種,挖礦生態系統已經被 ASIC(特殊應用積體電路)所支配,這些電腦晶片專門為特定的比特幣挖礦任務而設計,因此效率提高了數千倍。 這意味著比特幣挖礦不再是一種高度去中心化和平等的追求,而是需要巨額資本才能有效參與。 第二,大部分比特幣礦工事實上不在本地完成區塊驗證;而是依賴中心化礦池提供區塊頭。 這個問題可以說很嚴重:截至撰寫本文時,最大的三個礦池間接地控制了大約比特幣網路 50% 的算力,雖然當一個礦池嘗試聯合發動 51% 攻擊時,礦工還是可以轉換到其他礦池來減輕此問題的嚴重性。 + +以太坊現在目的是使用一種挖礦演算法,要求礦工從狀態中獲取隨機資料,從區塊鏈的最後 N 個區塊中計算一些隨機選擇的交易,並傳回結果的雜湊值。 這有兩個重要好處。 首先,以太坊合約可以包含任何類型的計算,因此以太坊特殊應用積體電路本質上是用於一般計算的特殊應用積體電路,即更好的中央處理器。 其次,挖礦需要存取整條區塊鏈,這迫使礦工儲存整條區塊鏈並至少能夠驗證每筆交易。 這樣就消除了對中心化礦池的需求;雖然礦池仍然可以起到平衡獎勵分配隨機性的合法作用,但沒有中心化控制的點對點礦池同樣也可以很好地發揮此功能。 + +該模型未經測試,而在使用合約執行挖礦演算法時,避免某些巧妙最佳化過程中可能會遇到困難。 然而,這種演算法有一個值得注意的特點,任何人都可以透過將專用於抑制某些特殊應用積體電路的大量合約引入區塊鏈中,在「井裡投毒」。 由於存在經濟激勵,特殊應用積體電路製造商會使用這種方法互相攻擊。 因此,我們正在開發的解決方案最終是一種適應性人為經濟解決方案,而不是純粹的技術解決方案。 + +### 可擴展性 {#scalability} + +以太坊的一個常見問題是可擴展性問題。 與比特幣一樣,以太坊也存在缺陷,即每筆交易都需要由網路中的每個節點處理。 以比特幣來說,目前區塊鏈的大小約為 15 GB,每小時增長約 1 MB。 如果比特幣網路要像 Visa 那樣每秒處理 2000 筆交易,則每三秒鐘就會增加 1 MB(每小時 1 GB,每年 8 TB)。 以太坊可能也會經歷相似甚至更糟的增長模式,因為以太坊區塊鏈上還有很多應用程式,不像比特幣區塊鏈上只有貨幣,但以太坊全節點只需儲存狀態而不是完整的區塊鏈歷史,這一事實讓情況得到改善。 + +如此龐大的區塊鏈出現的問題是中心化風險。 如果區塊鏈大小增加到 100 TB,可能的情況是只有極少數大型企業能運行全節點,而所有普通使用者將使用簡單支付驗證輕量節點。 在這種情況下,可能會出現全節點合夥詐欺牟利(例如變更區塊獎勵,給他們自己比特幣等)這樣的問題。 輕節點無法立即偵測到這一點。 當然,可能至少存在一個誠實的全節點,而幾小時後有關詐騙的資訊會透過 Reddit 這種頻道洩露,但那時會為時已晚:由普通使用者互相組織協作將指定區塊列入黑名單,這種大型、很可能不切實際的協作在規模上無異於發動一次成功的 51% 攻擊。 就比特幣而言,目前這是一個問題,但 [Peter Todd 建議](https://web.archive.org/web/20140623061815/http://sourceforge.net/p/bitcoin/mailman/message/31709140/)對區塊鏈進行修改,以緩解這個問題。 + +在短期內,以太坊將使用兩種附加策略來應對這個問題。 首先,因為基於區塊鏈的挖礦演算法,至少每個礦工都會被強制成為一個全節點,為全節點的數量創建了下限。 接著更重要的是,處理完每筆交易後,我們會把一個中間狀態樹根收錄到區塊鏈中。 即使區塊驗證是中心化的,只要存在一個誠實的驗證節點,就可以透過驗證協議來規避中心化問題。 如果礦工發布了無效區塊,該區塊必定是格式錯誤,或是狀態 `S[n]` 不正確。 由於已知 `S[0]` 是正確的,因此必然存在第一個不正確的狀態 `S[i]`,但狀態 `S[i-1]` 是正確的。 驗證節點將提供索引 `i` 以及「無效證明」,該證明包括處理 `APPLY(S[i-1],TX[i]) -> S[i]` 所需的帕特里夏樹節點的子集。 節點將能夠使用那些節點來運行該部分計算,並查看生成的 `S[i]` 與提供的 `S[i]` 是否不匹配。 + +另一種更複雜的攻擊涉及惡意礦工發布不完整的區塊,因此甚至不存在完整訊息,致使無法確定區塊是否有效。 解決方案是查問-應答協議:驗證節點對目標交易索引發起「查問」,接受到質疑信息的輕型節點會對相應的區塊取消信任,直到另外無論是礦工還是另一個驗證者的節點,提供一個帕特里夏節點子集作為有效性證明。 + +## 結論 {#conclusion} + +以太坊協議最初被設想為加密貨幣的升級版本,透過高度通用的程式語言提供進階功能,如區塊鏈託管、提款限制、金融合約、博彩市場等。 以太坊協議不會直接「支援」任何應用程式,但圖靈完備程式語言的存在意味著,理論上可以為任何交易類型或應用程式建立任意合約。 然而關於以太坊更有趣的地方是,以太坊協議遠遠超出了貨幣的範疇。 圍繞去中心化檔案儲存、去中心化計算和去中心化預測市場的協議以及許多其他這類概念,有可能大大提高計算行業的效率,並首次透過添加經濟層來大力促進其他點對點協議的發展。 最後,還有大量與金錢完全無關的應用程式。 + +以太坊協議實作的任意狀態轉換函式的概念,提供了一個具有獨特潛力的平台,而不是一種專門針對資料儲存、賭博或金融領域內一系列特定應用程式的封閉式單用途協議。以太坊在設計上是開放式的,我們相信在今後幾年裡它非常適合作為大量金融和非金融協議的基礎層。 + +## 註釋與延伸閱讀 {#notes-and-further-reading} + +### 注釋 {#notes} + +1. 有經驗的讀者可能會注意到,事實上比特幣地址是橢圓曲線公鑰的雜湊值,而不是公鑰本身。 然而,事實上從密碼學術語角度把公鑰雜湊值稱為公鑰是完全合理的。 這是因為比特幣密碼學可以視為一種客製化的數位簽章演算法。在數位簽章演算法中,公鑰由橢圓曲線密碼學公鑰的雜湊值組成,簽章由連接了橢圓曲線密碼學簽章的橢圓曲線密碼學公鑰組成。而驗證演算法涉及用橢圓曲線密碼學公鑰雜湊值(作為公鑰提供)來檢查簽章中的橢圓曲線密碼學公鑰,然後用橢圓曲線密碼學公鑰來驗證橢圓曲線密碼學簽章。 +2. 技術上來說,前 11 個區塊的中位數。 +3. 在內部,2 和「CHARLIE」都是數字 [fn3](#notes),後者以高位元組在前基數 256 表示。 數字至少可以為 0,最多可以為 2256-1。 + +### 衍生閱讀 {#further-reading} + +1. [內在價值](http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/) +2. [智慧型資產](https://en.bitcoin.it/wiki/Smart_Property) +3. [智慧型合約](https://en.bitcoin.it/wiki/Contracts) +4. [B-money](http://www.weidai.com/bmoney.txt) +5. [可重複使用之工作量證明](https://nakamotoinstitute.org/finney/rpow/) +6. [利用所有者權限確保財產權](https://nakamotoinstitute.org/secure-property-titles/) +7. [比特幣白皮書](http://bitcoin.org/bitcoin.pdf) +8. [域名幣](https://namecoin.org/) +9. [Zooko 三角](https://wikipedia.org/wiki/Zooko's_triangle) +10. [彩色幣白皮書](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit) +11. [萬事達幣白皮書](https://github.com/mastercoin-MSC/spec) +12. [去中心化自治組織,Bitcoin Magazine](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/) +13. [簡單支付驗證](https://en.bitcoin.it/wiki/Scalability#Simplified_payment_verification) +14. [默克爾樹](https://wikipedia.org/wiki/Merkle_tree) +15. [帕特里夏樹](https://wikipedia.org/wiki/Patricia_tree) +16. [GHOST](https://eprint.iacr.org/2013/881.pdf) +17. [StorJ 及自治代理,Jeff Garzik](http://garzikrants.blogspot.ca/2013/01/storj-and-bitcoin-autonomous-agents.html) +18. [Mike Hearn 在圖靈節談論智慧型資產](https://www.youtube.com/watch?v=MVyv4t0OKe4) +19. [以太坊遞迴長度前綴](https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP) +20. [以太坊默克爾帕特里夏樹](https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-Patricia-Tree) +21. [Peter Todd 談論默克爾求和樹](https://web.archive.org/web/20140623061815/http://sourceforge.net/p/bitcoin/mailman/message/31709140/) + +_有關白皮書的歷史記錄,請參閱[此維基](https://github.com/ethereum/wiki/blob/old-before-deleting-all-files-go-to-wiki-wiki-instead/old-whitepaper-for-historical-reference.md)。_ + +_與許多社群驅動的開源軟體專案一樣,以太坊自最初誕生以來一直在不斷發展。 來學習更多最新以太坊發展及多年來之網路協議變動, 我們推薦你詳閱此[指南簡介](/learn/)._ diff --git a/src/intl/zh-tw/glossary-tooltip.json b/src/intl/zh-tw/glossary-tooltip.json new file mode 100644 index 00000000000..6bb25c1fc0c --- /dev/null +++ b/src/intl/zh-tw/glossary-tooltip.json @@ -0,0 +1,164 @@ +{ + "51%-attack-term": "51% 攻擊", + "51%-attack-definition": "一種攻擊類型,其中一個群組獲得大多數節點的控制權。這將使他們能夠透過撤銷交易和雙重支付以太幣及其他代幣,來欺詐區塊鏈。", + "abi-term": "應用程式二進位介面 (ABI)", + "abi-definition": "一個 JSON 格式的檔案,定義了智慧型合約中的函式和變數。應用程式二進位介面使位元組碼可以對應到人類可讀格式。", + "account-term": "帳戶", + "account-definition": "以太坊帳戶是以太坊區塊鏈上的數位身分,允許使用者傳送、接收以太幣或其他數位資產,並與智慧型合約互動。", + "address-term": "地址", + "address-definition": "以太坊地址是用於接收代幣的唯一識別碼,其功能類似於加密貨幣的銀行帳號。它用於識別你的以太坊帳戶。", + "anti-sybil-term": "反女巫", + "anti-sybil-definition": "是一種能夠防止個人在網路上同時假裝成多個使用者的方法,確保每位使用者皆為真實、獨立的人類。此舉可以確保線上的活動是平等且誠實的。", + "apr-term": "年利率", + "apr-definition": "年利率 (APR) 以百分比反映每年的借貸成本,包含了利息和費用。", + "attestation-term": "證明", + "attestation-definition": "實體所做的關於某事件屬實的聲明。就以太坊而言,共識驗證者必須對他們認為的鏈狀態做出聲明。在指定時間,每個驗證者負責發布不同的證明,正式聲明自己對於鏈的看法,包括最後一個最終確定的檢查點和最新的區塊頭。更多關於證明的資訊。", + "block-term": "區塊", + "block-definition": "區塊是存儲交易或數位操作的地方。一旦一個區塊填滿,它會連結到前一個區塊,形成一條有多個區塊的鏈或「區塊鏈」。更多關於區塊的資訊。", + "blockchain-term": "區塊鏈", + "blockchain-definition": "區塊鏈是一個交易資料庫,在網路中的所有電腦上複製和共享,確保資料無法被事後修改。", + "bridge-term": "跨鏈橋", + "bridge-definition": "區塊鏈跨鏈橋用於將資產從一個區塊鏈網路轉移到另一個區塊鏈網路。", + "consensus-term": "共識", + "consensus-definition": "當網路上超過 2/3 電腦都同意一套共同的資料集,確保所有人的資料同步。這和它們所遵循的規則無關,而是為了確保它們擁有相同的資訊。", + "consensus-client-term": "共識用戶端", + "consensus-client-definition": "共識用戶端(例如 Prysm、Teku、Nimbus、Lighthouse、Lodestar)運行以太坊的權益證明共識演算法,允許網路就信標鏈頭達成一致。共識用戶端不會參與驗證/廣播交易或執行狀態轉換,這是由執行用戶端完成的。共識用戶端不會證明或提出新的區塊,這是由驗證者用戶端完成的,它是共識用戶端的可選附加功能。", + "consensus-layer-term": "共識層", + "consensus-layer-definition": "以太坊的共識層是共識用戶端的網路。", + "cryptoeconomics-term": "加密經濟學", + "cryptoeconomics-definition": "研究數學和經濟原理以設計安全且值得信賴的數位平台。目標是確保所有參與者遵守規則並因對網路安全和營運做出的貢獻而獲得獎勵。", + "cryptography-term": "密碼學", + "cryptography-definition": "這是把通訊變得私密及安全的做法,使得只有訊息的目標受眾才能閱讀該訊息。", + "dao-term": "去中心化自治組織 (DAO)", + "dao-definition": "去中心化自治組織是一個按照區塊鏈上編碼的規則運行的數位組織,其中的決策是由成員投票,而不是中央機構所作出的。 關於去中心化自治組織 (DAO) 的更多資訊。", + "dapp-term": "去中心化應用程式", + "dapp-definition": "去中心化應用程式是一種在區塊鏈網路上運行的去中心化應用程式,無需中心化的控制機構即可提供服務。 關於去中心化應用程式的更多資訊。", + "data-availability-term": "資料可用性", + "data-availability-definition": "任何節點都可以獨立驗證區塊鏈上的交易,以保持系統的透明度和信任。", + "defi-term": "去中央化金融", + "defi-definition": "以太坊應用程式的一大類別,旨在提供由區塊鏈支援的金融服務,無需任何中介機構。更多關於去中心化金融 (DeFi) 的資訊", + "dex-term": "去中心化交易所 (DEX)", + "dex-definition": "一種以太坊應用程式,可讓你與網路上的對等節點交換代幣。去中心化交易所不像中心化交易所那樣受到地理限制 — 任何人都可以參與。", + "difficulty-bomb-term": "難度炸彈", + "difficulty-bomb-definition": "工作量證明難度設定預定呈指數增加,用以促進系統過渡到權益證明,以減少分叉的可能性。在合併之後,難度炸彈已被棄用。", + "ecdsa-term": "橢圓曲線數位簽章演算法 (ECDSA)", + "ecdsa-definition": "以太坊使用的加密演算法,確保資金只能由其所有者使用。這是創建公鑰和私鑰的首選方法。與帳戶位址生成和交易驗證相關。", + "ens-term": "以太坊名稱服務 (ENS)", + "ens-definition": "以太坊名稱服務就像是以太坊地址的網際網路電話簿。以太坊名稱服務讓你可以使用簡單的名稱,如「john.eth」來發送和接收數位貨幣和資產,而無需使用長錢包地址。", + "epoch-term": "時期", + "epoch-definition": "32 個時隙組成的期間,每個時隙為 12 秒,共有 6.4 分鐘。基於安全性考量,驗證者委員會每個時期都會重新洗牌。每個時期都有讓區塊鏈達到最終確定的機會。每個驗證者在時期開始時都會被分配新的職責。關於權益證明的更多資訊。", + "eoa-term": "外部帳戶 (EOA)", + "eoa-definition": "外部帳戶 (EOA) 是最常見的以太坊帳戶類型。這種帳戶由一個人透過私鑰/助記詞控制。更多關於以太坊錢包的資訊。", + "erc-term": "以太坊開發者公開徵求意見 (ERC)", + "erc-definition": "ERC(以太坊開發者公開徵求意見)是一種技術文檔,用於以太坊社群中提出以太坊網路的新使用標準。", + "erc-1155-term": "ERC-1155", + "erc-1155-definition": "一種類似於非同質化代幣(例如獨特收藏品)的以太坊代幣標準,該標準也允許在單一智慧型合約中創建可互換的項目(例如貨幣)。", + "erc-20-term": "ERC-20", + "erc-20-definition": "是以太坊網路上大多數代幣建立時所使用的標準規則集。", + "erc-721-term": "ERC-721", + "erc-721-definition": "用於建立 NFT(非同質化代幣)的標準規則集。", + "ether-term": "以太幣", + "ether-definition": "以太坊的原生加密貨幣,通常稱為「以太幣」。它用於支付使用以太坊生態系統和應用程式時的交易費。更多關於以太幣的資訊。", + "events-term": "事件", + "events-definition": "允許使用以太坊虛擬機器日誌記錄工具。去中心化應用程式可以監聽事件並使用它們在使用者介面中觸發 JavaScript 回調。更多關於事件和日誌的資訊", + "execution-client-term": "執行用戶端", + "execution-client-definition": "執行用戶端(以前稱為「Eth1 用戶端」),例如 Besu、Erigon、Go-Ethereum (Geth)、Nethermind,負責處理和廣播交易及管理以太坊的狀態。它們使用以太坊虛擬機執行每筆交易的計算,以確保遵循協定規則。", + "execution-layer-term": "執行層", + "execution-layer-definition": "以太坊的執行層是執行用戶端的網路。", + "finality-term": "最終確定性", + "finality-definition": "最終確定性指在不損失大量以太幣的情況下保證一組交易無法被更改。", + "fork-term": "分叉", + "fork-definition": "協定變化導致另一條鏈的創建。", + "fraud-proof-term": "詐欺證明", + "fraud-proof-definition": "某些二層網絡解決方案的安全模型,為了提高速度,交易被彙總成批次並在單一交易中提交到以太坊。其他網路參與者可以重新執行交易以檢查它們是否被誠實執行。如果他們發現發布的資料與他們自己的版本之間存在差異,他們可以發布加密證明來證明詐欺發生的地點。一些卷軸使用有效性證明。", + "gas-term": "燃料", + "gas-definition": "燃料是為區塊鏈(如以太坊)上的交易和智慧型合約支付的手續費。更多有關燃料和手續費的資訊。", + "genesis-block-term": "創世區塊", + "genesis-block-definition": "區塊鏈上的第一個區塊,用於初始化特定網路及其加密貨幣。", + "gwei-term": "Gwei", + "gwei-definition": "gigawei 的縮寫,一種以太幣面額,通常用於為燃料定價。1 gwei = 109 wei。109 gwei = 1 以太幣。", + "hash-term": "雜湊值", + "hash-definition": "由雜湊函式產生的可變大小輸入的固定長度指紋。(參閱 keccak-256)。", + "holographic-consensus-term": "全息共識", + "holographic-consensus-definition": "指的是如何透過讓一小群有代表性的人投票來做出一個重大集體決策。然後其他人都會同意遵循,只要他們相信這個小組的決策過程是可靠的。", + "index-term": "索引", + "index-definition": "一種網路結構,旨在透過提供通往存儲來源的高效路徑來最佳化跨區塊鏈的資訊查詢。", + "key-term": "金鑰", + "key-definition": "在以太坊的背景下,金鑰是數位程式碼:公鑰用於接收交易,私鑰則用於存取和發送資金。", + "layer-2-term": "第二層", + "layer-2-definition": "二層網路是建立在以太坊主網路之上的另一個網絡,旨在使交易更快、更便宜。 有關二層網路的更多資訊。", + "liquidity-tokens-term": "流動性代幣", + "liquidity-tokens-definition": "流動性代幣 (LT) 是向將資產存入流動性池的參與者發行的數位代幣,流動性池是鎖定在智慧型合約中的資金集合,用於促進去中心化交易所 (DEX) 上的交易。", + "mainnet-term": "主網", + "mainnet-definition": "主網 (Mainnet) 是「main network」的縮寫,是主要的公共以太坊區塊鏈。", + "mev-term": "最大可提取價值", + "mev-definition": "一種在區塊鏈上根據費用優先處理某些操作的機制,影響交易的結果和順序。", + "multisig-term": "多簽", + "multisig-definition": "Multisig(多重簽章)是指數位錢包或帳戶需要多個簽章或批准才能執行交易,從而增強安全性。", + "nft-term": "非同質化代幣 (NFT)", + "nft-definition": "非同質化代幣 (NFT) 是一種你可以擁有的獨特數位物品,例如藝術品或收藏品,並透過區塊鏈技術進行驗證。 更多有關非同質化代幣 (NFT) 的資訊。", + "node-term": "節點", + "node-definition": "參與網路的軟體用戶端。更多關於節點和用戶端的資訊。", + "ommer-term": "Ommer(叔)區塊", + "ommer-definition": "當工作量證明礦工發現有效的區塊時,另一個礦工可能已經發布了首先新增到區塊鏈頂端的競爭區塊。這個有效但過時的區塊可以作為 ommer 被新區塊包含,並獲得部分區塊獎勵。術語「ommer」是對父塊的兄弟姐妹區塊的首選中性術語,但有時也被稱為「叔」。當以太坊仍是工作證明網路時,這對於以太坊來說很常見。現在以太坊使用權益證明,每個時隙只會選擇一個區塊提議者。", + "on-chain-term": "鏈上", + "on-chain-definition": "指在區塊鏈上發生且公開的操作或交易。", + "optimistic-rollup-term": "樂觀卷軸", + "optimistic-rollup-definition": "樂觀卷軸是一種二層網路解決方案,可以加速以太坊上的交易,假設除非受到挑戰,否則預設交易都是有效的。更多關於樂觀卷軸的資訊。", + "peer-to-peer-network-term": "點對點網路", + "peer-to-peer-network-definition": "由電腦(對等節點)組成的網路,能夠集體執行功能而無需集中式的伺服器服務。", + "permissionless-term": "無需許可", + "permissionless-definition": "使用像以太坊這樣的系統不需要任何許可或批准,且沒有人能夠阻止你使用它。它全天候開放供所有人參與。", + "private-key-term": "私密金鑰", + "private-key-definition": "私鑰是個秘密代碼,可以證明你擁有你的數位貨幣並允許你使用它,就像你帳戶的 PIN 碼一樣。切勿分享它。", + "poap-term": "POAP", + "poap-definition": "出席證明協議用於創建數位收藏品 (非同質化代幣),證明你參加了特定事件或活動。", + "pos-term": "權益證明 (PoS)", + "pos-definition": "加密貨幣區塊鏈協議旨在實現分散式共識的方法。權益證明要求使用者證明擁有一定數量的加密貨幣(他們在網路中的「權益」),以便能夠參與交易驗證。有關權益證明的更多資訊。", + "pow-term": "工作量證明 (PoW)", + "pow-definition": "區塊鏈的一種安全機制,要求節點以計算的形式消耗能量來找到某個值。", + "public-goods-term": "公共物品", + "public-goods-definition": "公共物品是每個人都可以免費使用的東西,例如公園或乾淨空氣,使用它們並不能阻止其他人也同樣使用。政府經常提供這些服務,因為企業不能輕易向使用它們的人收費,所以通常不會提供這些服務。", + "public-key-term": "公鑰", + "public-key-definition": "公鑰是一組字符,可以讓其他人安全地向你發送數位貨幣,就像金錢的電子郵件地址一樣。", + "quadratic-voting-term": "二次投票", + "quadratic-voting-definition": "是一種投票方法,選民可以表達他們對問題的強烈感受。它不僅可以讓選民表現出偏好,還有他們偏好的強度。", + "recovery-phrase-term": "種子助記詞/助記詞", + "recovery-phrase-definition": "創建數位錢包時向你提供的單字清單。它就像一個密碼,可以幫助你在失去存取權限時重新進入錢包,確保你不會丟失數位貨幣或代幣。", + "rollups-term": "卷軸", + "rollups-definition": "一種二層網路擴展解決方案,可批量處理多個交易並在單一交易中將其提交到以太坊主鏈。這可以降低燃料成本並增加交易吞吐量。有樂觀和零知識卷軸,它們使用不同的安全方法來提供這些可擴展性收益。更多關於卷軸的資訊。", + "rpc-term": "遠端程序呼叫 (RPC)", + "rpc-definition": "遠端程序呼叫允許一台電腦透過網路向另一台電腦要求資料或操作,例如索要遙控相關的資訊。", + "sequencer-term": "排序者", + "sequencer-definition": "排序者是一個負責在區塊鏈網路上給交易排序的程式。", + "smart-contract-term": "智慧型合約", + "smart-contract-definition": "智慧型合約是一種在區塊鏈上自動執行協定的程式,就像自我執行的數位合約一樣。智慧型合約簡介。", + "stablecoin-term": "穩定幣", + "stablecoin-definition": "穩定幣是一種具有穩定價值的加密貨幣,通常與貨幣或商品(如美元)掛鉤,以最大限度地減少價格波動。更多關於穩定幣的資訊。", + "staking-term": "質押", + "staking-definition": "存入一定數量的以太幣(你的質押)即可成為驗證者並保護網路。驗證者檢查交易並在權益證明共識模型下提出區塊。質押為你提供經濟激勵,讓你以網路的最佳利益行事。你將因履行驗證者職責而獲得獎勵,但若否,則會損失不同數量的以太幣。更多關於以太坊質押的資訊。", + "staking-pool-term": "質押池", + "staking-pool-definition": "多個以太坊質押者的以太幣總和,用於達到啟動一組驗證器金鑰所需的 32 個以太幣。節點營運商使用這些金鑰參與共識,而區塊獎勵會在貢獻者之間分配。質押池或委託質押並不是以太坊協定原生的,但社群已經建立了許多解決方案。更多關於聯合質押的資訊。", + "sybil-attack-term": "女巫攻擊", + "sybil-attack-definition": "女巫攻擊是指個人欺騙系統使某個系統認為他們是多個人而增加他們的影響力。", + "terminal-total-difficulty-term": "終端總難度 (TTD)", + "terminal-total-difficulty-definition": "總難度是截至區塊鏈中某個特定點的所有區塊的 Ethash 挖礦難度總和。終端總難度是總難度的特定值,用於觸發執行用戶端關閉挖礦和區塊廣播功能,使網路過渡到權益證明。由於以太坊已轉向權益證明,此概念不再相關。", + "transaction-fee-term": "交易費", + "transaction-fee-definition": "每當你使用以太坊網路時都需要支付的費用。例如從你的錢包發送資金或去中心化應用程式互動,如兌換代幣或購買收藏品。你可以將其視為服務費。該費用將根據網路繁忙程度而變化。這是因為驗證者,即負責處理你的交易的人員,可能會優先考慮費用較高的交易 - 因此擁堵會迫使價格上漲。

從技術層面來說,你的交易費與你的交易需要多少燃料有關。

降低交易費是目前人們強烈關注的議題。請參閱二層網路。", + "trust-assumptions-term": "信任假設", + "trust-assumptions-definition": "信任假設是關於系統安全性和可靠性的基本信念,指引我們信任什麼才能讓系統運作。", + "validator-term": "驗證者", + "validator-definition": "權益證明系統中的節點,負責儲存資料、處理交易、並向區塊鏈添加新區塊。要啟動驗證軟體,你需要質押 32 個以太幣。更多關於以太坊質押的資訊。", + "validity-proof-term": "有效性證明", + "validity-proof-definition": "某些二層網路解決方案的安全模型,為了提高速度,交易被匯總成批次並在單一交易中提交到以太坊。交易計算在鏈下完成,然後提供給主鏈並提供其有效性證明。這種方法在保障安全性的同時增加了可能的交易量。一些卷軸使用欺詐證明更多關於零知識卷軸的資訊。", + "wallet-term": "錢包", + "wallet-definition": "錢包是一種用於存儲、發送和接收數位貨幣的數位工具,就像你的線上貨幣的虛擬錢包一樣。更多關於以太坊錢包的資訊。", + "web2-term": "Web2", + "web2-definition": "是目前的網際網路,專注於由少數公司控制的使用者產生內容和社群媒體。Web3 是一種加密信念,認為使用者應該控制他們的資料和交易。", + "web3-term": "Web3", + "web3-definition": "Web3 是使用區塊鏈的新網際網路,由使用者而非公司控制其資料和交易。無需分享任何個人資訊。更多關於 web3 的資訊。", + "wei-term": "Wei", + "wei-definition": "以太幣的最小面額。1018 wei = 1 以太幣。", + "zk-proof-term": "零知識證明", + "zk-proof-definition": "零知識證明是一種密碼學方法,允許個人證明某個陳述是真實而無需傳達任何附加資訊。更多關於零知識卷軸的資訊。" +} diff --git a/src/intl/zh-tw/glossary.json b/src/intl/zh-tw/glossary.json new file mode 100644 index 00000000000..d49ea5756d2 --- /dev/null +++ b/src/intl/zh-tw/glossary.json @@ -0,0 +1,399 @@ +{ + "51%-attack-term": "51% 攻擊", + "51%-attack-definition": "一種某群組控制了多數節點的攻擊。這使他們可以透過逆轉交易及雙重支付以太幣和其他代幣來欺詐區塊鏈。

在權益證明以太坊中,透過累積超過半數總質押以太幣可以實現此攻擊。這會讓攻擊者可以決定要將哪個新區塊加到區塊鏈。然而,要還原鏈或實現雙重支付,攻擊者需至少取得 66% 的總質押以太幣。", + "account-term": "帳戶", + "account-definition": "以太坊帳戶是以太坊區塊鏈上的數位身分,讓使用者可以收發以太幣,並與智慧型合約互動。

技術層面:
以太坊帳戶是一種物件,包含了地址、餘額、隨機數及選用的存儲空間及程式碼。帳戶可以是合約帳戶或外部帳戶 (EOA)。", + "address-term": "地址", + "address-definition": "以太坊地址是用來接收代幣的唯一識別碼,功能上類似於加密貨幣版本的銀行帳號。可用於識別你的以太坊帳戶。

地址是橢圓曲線數位簽章演算法公鑰的 Keccak 雜湊值的最右邊 160 位。", + "anti-sybil-term": "反女巫", + "anti-sybil-definition": "是一種能夠防止個人在網路上同時假裝成多個使用者的方法,確保每位使用者皆為真實、獨立的人類。此舉可以確保線上的活動是平等且誠實的。", + "abi-term": "應用程式二進位介面 (ABI)", + "abi-definition": "一個 JSON 格式的檔案,定義了智慧型合約中的函式和變數。應用程式二進位介面使位元組碼可以對應到人類可讀格式。", + "api-term": "應用程式介面 (API)", + "api-definition": "應用程式介面 (API) 是一組關於如何使用軟體的定義。應用程式介面位於應用程式和網頁伺服器之間,促進了它們之間的資料傳輸。", + "apr-term": "年利率", + "apr-definition": "年利率 (APR) 以百分比反映每年的借貸成本,包含了利息和費用。", + "asic-term": "特殊應用積體電路", + "asic-definition": "特殊應用積體電路。一般是指客製化、用於加密貨幣挖礦的積體電路。", + "assert-term": "斷言", + "assert-definition": "在 Solidity 語言裡,“assert(false)”被編譯為“0xfe”,這是一個無效操作碼,會消耗完剩餘的燃料並還原所有變更。當有“assert()”語句失效時,表示出現了非常嚴重且沒有預料到的問題,你將需要修復程式碼。應該使用“assert()”以避免此類永遠不應發生的情況。更多有關智慧型合約安全的資訊。", + "attestation-term": "證明", + "attestation-definition": "實體所做的關於某事件屬實的聲明。就以太坊而言,共識驗證者必須對他們認為的鏈狀態做出聲明。在指定時間,每個驗證者負責發布不同的證明,正式聲明自己對於鏈的看法,包括最後一個最終確定的檢查點和最新的區塊頭。更多關於證明的資訊。", + "base-fee-term": "基本費用", + "base-fee-definition": "每個區塊都有一個底價,稱為「基本費用」。這是使用者必須支付的最低燃料費才能將交易包含在下一個區塊中。更多關於燃料和手續費的資訊。", + "beacon-chain-term": "信標鏈", + "beacon-chain-definition": "信標鏈是將權益證明驗證者引入以太坊的區塊鏈。從 2020 年 12 月起,它與工作量證明以太坊主網一起運行,直到 2022 年 9 月這兩條鏈合併形成今天的以太坊。更多關於信標鏈的資訊。", + "big-endian-term": "高位元組在前", + "big-endian-definition": "一種按位元計數的表示方式,其中高位元組保存在記憶體的低位元地址中。與之相反的是低位元組在前,即低位元組保存在記憶體的低位元地址中。", + "block-term": "區塊", + "block-definition": "區塊是存儲交易或數位操作的地方。一旦區塊被填滿,它就會連結到前一個區塊,形成一連串區塊或「區塊鏈」。更多關於區塊的資訊

\n區塊是一個捆綁的資訊單元,其中包括交易的有序清單和共識相關資訊。區塊由權益證明驗證者提出,此時它們在整個點對點網路中共享,並且可以輕鬆地由所有其他節點獨立驗證。共識規則控制區塊的哪些內容被認為是有效的,並且網路將忽略任何無效的區塊。這些區塊的排序和其中的交易創建了一個確定性的事件鏈,其末端代表網路的目前狀態。", + "block-explorer-term": "區塊瀏覽器", + "block-explorer-definition": "允許使用者搜尋來自區塊鏈以及有關其資訊的介面。這包括檢索單一交易、與特定地址相關的活動以及有關網路的資訊。", + "block-header-term": "區塊頭", + "block-header-definition": "區塊頭是有關區塊的中繼資料的集合以及執行有效負載中包含的交易摘要。", + "block-propagation-term": "區塊傳播", + "block-propagation-definition": "將已確認的區塊傳輸到網路中所有其他節點的過程。", + "block-proposer-term": "區塊提議者", + "block-proposer-definition": "被選擇在特定時隙中建立區塊的特定驗證者。", + "block-reward-term": "區塊獎勵", + "block-reward-definition": "獎勵給新有效區塊的提議者的以太幣數量。", + "block-status-term": "區塊狀態", + "block-status-definition": "區塊可以存在的狀態。可能的狀態包括:

  • 已提議:區塊由一名驗證者提議
  • 已排程:驗證者正在提交資料
  • 被遺漏/跳過:提議者未在有效時間内提議區塊
  • 被孤立:區塊被分叉選擇演算法移除
", + "block-time-term": "區塊時間", + "block-time-definition": "新增到區塊鏈的區塊之間的時間間隔。", + "block-validation-term": "區塊驗證", + "block-validation-definition": "檢查新區塊是否包含有效交易和簽名的過程,是否建立在有最長歷史的鏈上(意味著在其歷史上累積了最多證明的鏈),並遵循所有其他共識規則。有效區塊被新增到鏈的開頭,並傳播到網路上的其他節點。無效的區塊會被忽略。", + "blockchain-term": "區塊鏈", + "blockchain-definition": "區塊鏈是一個交易資料庫,在網路中的所有電腦上複製和共享,確保資料無法追溯更改。

每個區塊都透過引用前一個區塊的雜湊值連結到其前一個區塊,一直連結到創世區塊。區塊鏈的完整性透過基於權益證明的共識機制以加密經濟方式得到保障。什麼是區塊鏈?", + "bootnode-term": "引導節點", + "bootnode-definition": "運行節點時可用於啟動發現過程的節點。引導節點將新節點「引入」到其他現有節點,以便它們可以快速獲得對等點,而不必搜尋初始對等點。這些節點的端點通常在以太坊用戶端原始程式碼中提供,但使用者可以提供自己的啟動節點清單。", + "bridge-term": "跨鏈橋", + "bridge-definition": "區塊鏈跨鏈橋用於將資產從一個區塊鏈網路轉移到另一個區塊鏈網路。例如,你可以使用跨鏈橋將以太幣從主以太坊網路轉移到更便宜的二層網路擴展解決方案。", + "bytecode-term": "位元組碼", + "bytecode-definition": "程式碼以緊湊的數字形式表示,以便可以由<0>以太坊虛擬機器高效地執行。", + "byzantium-fork-term": "拜占庭分叉", + "byzantium-fork-definition": "大都會開發階段的前兩個硬分叉。它包含了 EIP-649 大都會難度炸彈的延遲及區塊獎勵減少,使冰河期延遲一年,並讓區塊獎勵從 5 以太幣減至 3 以太幣。", + "casper-ffg-term": "Casper FFG", + "casper-ffg-definition": "Casper 友善最終性組件 (Casper-FFG) 是一種權益證明共識協議,常與 LMD-GHOST 分叉選擇演算法結合使用,以使共識用戶端和信標鏈的標頭達成一致。", + "checkpoint-term": "檢查點", + "checkpoint-definition": "信標鏈的時間週期分為時隙(12 秒)和時期(32 個時隙)。每個時期中的時隙都是一個檢查點。當絕對多數驗證者證明兩個檢查點之間的關聯時,他們就可以被認定為合法的,當其之後的檢查點也被認定為合法後,即可最終確定上述檢查點。", + "compiling-term": "編譯", + "compiling-definition": "將以高階程式語言(例如 Solidity)編寫的程式碼轉換為低階語言(例如以太坊虛擬機位元組碼)。更多關於編譯智慧型合約的資訊", + "committee-term": "委員會", + "committee-definition": "一組至少 128 個驗證者,受到指派在每個時隙驗證區塊。委員會其中一個驗證者是聚合者,負責聚合委員會中同意證明的所有其他驗證者的簽章。不要跟同步委員會混淆。", + "computational-infeasibility-term": "運算不可行性", + "computational-infeasibility-definition": "如果某個流程對於有興趣執行它的人來說,所需執行時間長到不切實際(如十億年),我們稱其為運算上不可行。", + "consensus-term": "共識", + "consensus-definition": "當網路上超過 2/3 電腦都同意一套共同的資料集,確保所有人的資料同步。這和它們所遵循的規則無關,而是為了確保它們擁有相同的資訊。", + "consensus-client-term": "共識用戶端", + "consensus-client-definition": "共識用戶端(例如 Prysm、Teku、Nimbus、Lighthouse、Lodestar)運行以太坊的權益證明共識演算法,允許網路就信標鏈頭達成一致。共識用戶端不會參與驗證/廣播交易或執行狀態轉換,這是由執行用戶端完成的。共識用戶端不會證明或提出新的區塊,這是由驗證者用戶端完成的,它是共識用戶端的可選附加功能。", + "consensus-layer-term": "共識層", + "consensus-layer-definition": "以太坊的共識層是共識用戶端的網路。", + "consensus-rules-term": "共識規則", + "consensus-rules-definition": "全節點為了與其他節點保持共識而遵循的區塊驗證規則。不要跟共識混淆。", + "cfi-term": "納入考量 (CFI)", + "cfi-definition": "一個尚未在主網啟用的核心以太坊改進提案,用戶端開發者普遍對此呈積極態度。假設它滿足了所有納入主網的要求,它可能被納入網路升級(但不一定是下一個)。", + "constantinople-fork-term": "君士坦丁堡分叉", + "constantinople-fork-definition": "大都會開發階段的第二部分,原本預計於 2018 中期上線。除了其他變更,預計還包括切換到工作量證明/權益證明混合共識演算法。", + "contract-account-term": "合約帳戶", + "contract-account-definition": "指包含程式碼的帳戶,在接收到來自其他帳戶外部帳戶合約帳戶)的交易時程式碼會執行。", + "contract-creation-transaction-term": "合約建立交易", + "contract-creation-transaction-definition": "包含了合約初始化程式碼的特殊交易。接收者被設為“null”,且合約部署至由使用者位置和“nonce”產生的地址,該“nonce”用於註冊合約並將其記錄在以太坊區塊鏈上。", + "cryptoeconomics-term": "加密經濟學", + "cryptoeconomics-definition": "研究數學和經濟原理以設計安全且值得信賴的數位平台。目標是確保所有參與者遵守規則並因對網路安全和營運做出的貢獻而獲得獎勵。", + "cryptography-term": "密碼學", + "cryptography-definition": "這是透過使用程式碼來保護通訊和資料的做法,以便只有資訊的目標受眾才能閱讀和處理。
它涉及加密(將可讀資訊轉換為不可讀格式)和解密(將其轉換回可讀格式)技術,以確保機密性。", + "doge-d-term": "Đ", + "doge-d-definition": "Đ(有一劃的 D)在古英語、中古英語、冰島語和法羅語中用來代表大寫字母「Eth」。它被用於 ĐEV 或 Đapp(去中心化應用程式)等單詞,其中 Đ 是挪威語字母「eth」。大寫的 eth (Ð) 也用來象徵加密貨幣狗狗幣。這在舊的以太坊文獻中很常見,但現在很少使用。", + "dag-term": "DAG", + "dag-definition": "DAG 代表有向無環圖。它是由節點和節點之間的連結所組成的資料結構。在合併之前,以太坊在其工作量證明演算法 Ethash 中使用了有向無環圖,但已不再用於權益證明中。", + "dapp-term": "去中心化應用程式", + "dapp-definition": "去中心化應用程式是一種在區塊鏈網路上運行的去中心化應用程式,無需中央控制機構即可提供服務。更多關於去中心化應用程式的資訊
去中心化應用程式至少有一個連結到網路介面的智慧型合約。此外,許多去中心化應用程式包括去中心化存儲和/或訊息協定和平台。", + "data-availability-term": "資料可用性", + "data-availability-definition": "任何節點都可以獨立驗證區塊鏈上的交易,以保持系統的透明度和信任。", + "decentralization-term": "去中心化", + "decentralization-definition": "將流程的控制和執行移離中央實體的概念。", + "dao-term": "去中心化自治組織 (DAO)", + "dao-definition": "去中心化自治組織是一個按照區塊鏈上編碼的規則運行的數位組織,其中決策是由成員投票而非中央機構做出的。更多關於去中心化自治組織 (DAO) 的資訊
每個成員的投票權通常與其持有的代幣數量相關。去中心化自治組織旨在實現決策和營運民主化,聚焦於透明度和社群治理。", + "dex-term": "去中心化交易所 (DEX)", + "dex-definition": "一種以太坊應用程式,可讓你與網路上的對等節點交換代幣。去中心化交易所不像中心化交易所那樣受到地理限制 — 任何人都可以參與。", + "deposit-contract-term": "存款合約", + "deposit-contract-definition": "在以太坊上進行質押的閘道。存款合約是以太坊上的智慧型合約,接受以太幣存款並管理驗證者餘額。如果未將以太幣存入此合約,則驗證者無法啟動。該合約需要以太幣和輸入資料。此輸入資料包括由驗證者私鑰簽署的驗證者公鑰和提款公鑰。權益證明網路需要這些資料來識別和批准驗證者。", + "defi-term": "去中央化金融", + "defi-definition": "以太坊應用程式的一大類別,旨在提供由區塊鏈支援的金融服務,無需任何中介機構。更多關於去中心化金融 (DeFi) 的資訊", + "difficulty-term": "難度", + "difficulty-definition": "工作量證明網路中的全網路的設定,用於控制找到有效隨機數所需的平均運算量。難度由產生的區塊雜湊值中令區域有效的前導零的數量表示。隨著以太坊過渡到權益證明,此概念已被棄用。", + "difficulty-bomb-term": "難度炸彈", + "difficulty-bomb-definition": "工作量證明難度設定預定呈指數增加,用以促進系統過渡到權益證明,以減少分叉的可能性。在合併之後,難度炸彈已被棄用。", + "digital-signatures-term": "數位簽章", + "digital-signatures-definition": "使用者使用私鑰為文件產生的短資料字串,因此任何擁有對應公鑰、簽章和文件的人都可以驗證 (1) 該文件由該特定私鑰的所有者「簽署」,並且 (2) 該文件在簽署後沒有變更。", + "discovery-term": "發現", + "discovery-definition": "以太坊節點尋找其他節點進行連結的過程。", + "distributed-hash-table-term": "分佈式雜湊表 (DHT)", + "distributed-hash-table-definition": "以太坊節點所使用的包含了“(key, value)”對的資料結構,用於識別要連結的對等節點並決定使用何種協定通訊。", + "double-spend-term": "雙重支付", + "double-spend-definition": "一個故意的區塊鏈分叉,其中具有足夠大的挖礦能力/質押的使用者發送一筆交易,將一些貨幣轉移到鏈下(例如兌換為法定貨幣或作出鏈下購買),然後重新組織區塊鏈以刪除該交易。成功的雙重支付會讓攻擊者同時擁有鏈上和鏈下資產。", + "ecdsa-term": "橢圓曲線數位簽章演算法 (ECDSA)", + "ecdsa-definition": "以太坊使用的加密演算法,確保資金只能由其所有者使用。這是創建公鑰和私鑰的首選方法。與帳戶位址生成和交易驗證相關。", + "encryption-term": "加密", + "encryption-definition": "加密是將電子資料轉換為除正確解密金鑰的所有者之外任何人都無法讀取的形式。", + "entropy-term": "熵", + "entropy-definition": "在加密學裡,指缺乏可預測性與隨機性水平。在產生秘密資訊時(例如私鑰),演算法通常依賴高熵來源來確保輸出是不可預測的。", + "epoch-term": "時期", + "epoch-definition": "32 個時隙組成的期間,每個時隙為 12 秒,共有 6.4 分鐘。基於安全性考量,驗證者委員會每個時期都會重新洗牌。每個時期都有讓區塊鏈達到最終確定的機會。每個驗證者在時期開始時都會被分配新的職責。關於權益證明的更多資訊。", + "equivocation-term": "模稜兩可", + "equivocation-definition": "驗證者發送兩則互相矛盾的訊息。舉個簡單的例子,交易的發送者同時發送兩則具有相同隨機數的交易。另一個例子是區塊提議者在同個區塊高度(或相同的時隙)提議兩個區塊。", + "eth1-term": "以太坊 1", + "eth1-definition": "「Eth1」指主網以太坊,即現有的工作量證明區塊鏈的術語。此後該術語已被棄用,取而代之的是「執行層」。詳細了解此名稱變更。", + "eth2-term": "以太坊 2", + "eth2-definition": "「Eth2」指的是一系列以太坊協議升級的術語,包括以太坊過渡成權益證明。此後該術語已被棄用,取而代之的是「共識層」。詳細了解此名稱變更。", + "eip-term": "以太坊改進提案 (EIP)", + "eip-definition": "向以太坊社群提供資訊的設計文件,描述擬議的新功能或其流程或環境(請參閱以太坊開發者公開徵求意見 (ERC))。以太坊改進提案簡介", + "ens-term": "以太坊名稱服務 (ENS)", + "ens-definition": "以太坊名稱服務就像是以太坊位址的網路電話簿。以太坊名稱服務不使用長錢包位址,而是讓你使用「john.eth」等簡單名稱來發送和接收數位貨幣和資產。

技術:
以太坊名稱服務註冊表是一個單一的中央合約,提供從域名到所有者和解析器的映射,如 EIP-137 中所述。造訪 ens.domains 以了解更多。", + "erc-1155-term": "ERC-1155", + "erc-1155-definition": "ERC-1155 是一種新型以太坊代幣標準,類似於非同質化代幣(如獨特收藏品),也允許在單一智慧型合約中創建可互換的物品(如貨幣)。
這讓管理各種類型的數位資產變得更容易、更有效率,特別是對於視訊遊戲或數位收藏等應用程式。", + "erc-20-term": "ERC-20", + "erc-20-definition": "ERC-20 是以太坊網路上用於創建大多數代幣的標準。
普遍例子是 DAI 和 USDC 等穩定幣或 Uniswap 的 UNI 等交易所代幣。類似於我們在傳統系統中擁有的任何形式的替代貨幣……即獎勵積分、信用系統甚至股票等等。", + "erc-721-term": "ERC-721", + "erc-721-definition": "NFT(非同質化代幣)是使用一組稱為 ERC-721 的標準規則建立的。
非同質化代幣可以代表任何獨特事物的所有權,例如數位藝術品或收藏品,每個代幣都有其自己的獨特特徵和價值。每個非同質化代幣都是獨一無二的,並且很容易與任何其他非同質化代幣區分開來。", + "execution-client-term": "執行用戶端", + "execution-client-definition": "執行用戶端(以前稱為「Eth1 用戶端」),例如 Besu、Erigon、Go-Ethereum (Geth)、Nethermind,負責處理和廣播交易及管理以太坊的狀態。它們使用以太坊虛擬機執行每筆交易的計算,以確保遵循協定規則。", + "execution-layer-term": "執行層", + "execution-layer-definition": "以太坊的執行層是執行用戶端的網路。", + "eoa-term": "外部帳戶 (EOA)", + "eoa-definition": "外部帳戶 (EOA) 是最常見的以太坊帳戶類型。這種帳戶由一個人透過私鑰/助記詞控制。更多關於以太坊錢包的資訊。", + "erc-term": "以太坊開發者公開徵求意見 (ERC)", + "erc-definition": "ERC(以太坊開發者公開徵求意見)是以太坊社群使用的一種技術文檔,旨在為以太坊網路提出新的使用標準。

這些提案可以涵蓋廣泛的主題,包括新的代幣標準(例如用於代幣的 ERC-20 和用於非同質化代幣的 ERC-721)。", + "ethash-term": "Ethash", + "ethash-definition": "在轉換為權益證明之前在以太坊上使用的工作量證明演算法。了解更多", + "ether-term": "以太幣", + "ether-definition": "以太坊的原生加密貨幣,通常稱為「以太幣」。它用於支付使用以太坊生態系統和應用程式時的交易費。更多關於以太幣的資訊。", + "events-term": "事件", + "events-definition": "允許使用以太坊虛擬機器日誌記錄工具。去中心化應用程式可以監聽事件並使用它們在使用者介面中觸發 JavaScript 回調。更多關於事件和日誌的資訊", + "evm-term": "以太坊虛擬機 (EVM)", + "evm-definition": "執行位元組碼的基於堆疊的虛擬機。在以太坊中,執行模型指定了在給定一系列位元組碼指令和一小組環境資料的情況下如何變更系統狀態。這是透過虛擬狀態機的正式模型來指定的。更多關於以太坊虛擬機的資訊。", + "evm-assembly-language-term": "以太坊虛擬機組合語言", + "evm-assembly-language-definition": "人類可讀形式的以太坊虛擬機位元組碼。", + "fallback-function-term": "遞補函式", + "fallback-function-definition": "在沒有資料或宣告的函式名稱的情況下呼叫的預設函式。", + "faucet-term": "水龍頭", + "faucet-definition": "一種透過智慧型合約執行的服務,該服務以可在測試網上使用的免費測試以太幣的形式分配資金。", + "finality-term": "最終確定性", + "finality-definition": "最終確定性指在不損失大量以太幣的情況下保證一組交易無法被更改。", + "finney-term": "Finney", + "finney-definition": "以太幣的面額。1 finney= 1015 wei。103 finney = 1 以太幣。", + "fork-term": "分叉", + "fork-definition": "協定變化導致另一條鏈的創建。", + "fork-choice-algorithm-term": "分叉選擇演算法", + "fork-choice-algorithm-definition": "用於識別區塊鏈頭的演算法。在以太坊中,鏈頭被識別為具有最大證明「權重」的分叉。權重是證明數量與進行證明的驗證者有效餘額的乘積。這意味著真實鏈頭是擁有最多質押以太幣投票的鏈頭。在共識層上,分叉選擇演算法稱為 LMD_GHOST。", + "fraud-proof-term": "詐欺證明", + "fraud-proof-definition": "某些二層網絡解決方案的安全模型,為了提高速度,交易被彙總成批次並在單一交易中提交到以太坊。其他網路參與者可以重新執行交易以檢查它們是否被誠實執行。如果他們發現發布的資料與他們自己的版本之間存在差異,他們可以發布加密證明來證明詐欺發生的地點。一些卷軸使用有效性證明。", + "frontier-term": "前沿升級", + "frontier-definition": "以太坊的初步測試開發階段,從 2015 年 7 月持續到 2016 年 3 月。", + "gas-term": "燃料", + "gas-definition": "燃料是為區塊鏈(如以太坊)上的交易和智慧型合約支付的手續費。更多有關燃料和手續費的資訊。", + "gas-limit-term": "燃料限制", + "gas-limit-definition": "交易區塊可消耗之燃料的最大數量。", + "gas-price-term": "燃料價格", + "gas-price-definition": "交易中指定的一單位燃料的以太幣價格。", + "genesis-block-term": "創世區塊", + "genesis-block-definition": "區塊鏈上的第一個區塊,用於初始化特定網路及其加密貨幣。", + "geth-term": "Geth", + "geth-definition": "Go Ethereum。以太坊協定最著名的實作之一,用 Go 編寫。 造訪 geth.ethereum.org 以了解更多", + "gwei-term": "Gwei", + "gwei-definition": "gigawei 的縮寫,一種以太幣面額,通常用於為燃料定價。1 gwei = 109 wei。109 gwei = 1 以太幣。", + "hard-fork-term": "硬分叉", + "hard-fork-definition": "區塊鏈中的永久分歧;也稱為硬分叉變更。通常會發生於當未升級的節點無法驗證遵循較新共識規則的已升級節點創建的區塊時。不要與分叉、軟分叉、軟體分叉或 Git 分叉混淆。", + "hash-term": "雜湊值", + "hash-definition": "由雜湊函式產生的可變大小輸入的固定長度指紋。(參閱 keccak-256)。", + "hash-rate-term": "雜湊率", + "hash-rate-definition": "運行挖礦軟體的電腦每秒進行的雜湊值計算次數。", + "homestead-term": "家園升級", + "holographic-consensus-term": "全息共識", + "holographic-consensus-definition": "指透過讓一小部分有代表性的人投票來做出一個重大群體決策。然後,其他人只要相信這一小部分人做得很好,就會同意配合。
有些網路社群使用這種方法來快速做出決定,而不需要每個人都對所有事情投票,同時也能確保決定是公平的,代表了大多數人的意願。", + "homestead-definition": "於 2016 年 3 月在區塊 1,150,000 啟動的以太坊第二個開發階段。", + "index-term": "索引", + "index-definition": "一種網路結構,旨在透過提供通往存儲來源的高效路徑來最佳化跨區塊鏈的資訊查詢。", + "ide-term": "整合開發環境 (IDE)", + "ide-definition": "通常結合了程式碼編輯器、編譯器、運行時間和偵錯器的使用者介面。更多關於整合開發環境的資訊。", + "immutable-deployed-code-problem-term": "不可變的部署程式碼問題", + "immutable-deployed-code-problem-definition": "一旦部署了合約的(或程式庫的)程式碼,它就變得不可變。標準軟體開發實踐依賴於修復可能的錯誤和新增新功能的能力,因此這對智慧型合約開發來說是個挑戰。有關部署智慧型合約的更多資訊。", + "internal-transaction-term": "內部交易", + "internal-transaction-definition": "從合約帳戶發送到另一個合約帳戶或外部帳戶交易(請參閱訊息)。", + "issuance-term": "發行", + "issuance-definition": "鑄造新的以太幣來獎勵區塊提議、證明和舉報。", + "kdf-term": "金鑰派生函式 (KDF)", + "kdf-definition": "也稱為「密碼拉伸演算法」,keystore 格式以重複散列密碼片語使用該函式來防止對密碼加密的暴力、字典和彩虹表攻擊。", + "keystore-term": "金鑰庫", + "keystore-definition": "每個帳戶的私鑰/位址對都作為以太坊用戶端中的單一金鑰檔案存在。這些是包含帳戶的加密私鑰 JSON 文字檔案,只能使用帳戶建立期間輸入的密碼解密。", + "keccak-256-term": "Keccak-256", + "keccak-256-definition": "以太坊中使用的加密雜湊值函式。Keccak-256 被標準化為 SHA-3。", + "key-term": "金鑰", + "key-definition": "在以太坊的背景下,金鑰是數位代碼:用於接收交易的公鑰和用於存取和發送資金的私鑰。
公鑰:可以公開分享。
私鑰:由所有者保密。", + "layer-1-term": "一層網路", + "layer-1-definition": "一層網路是指多層區塊鏈網路中的主區塊鏈。例如,以太坊和比特幣是第一層區塊鏈。許多第二層區塊鏈將資源密集型交易卸載到其單獨的區塊鏈,同時出於安全目的繼續使用以太坊或比特幣的第一層區塊鏈。", + "layer-2-term": "第二層", + "layer-2-definition": "二層網路是建立在以太坊主網路之上的另一個網絡,旨在使交易更快、更便宜。 有關二層網路的更多資訊。", + "library-term": "程式庫", + "library-definition": "一種特殊類型的合約,沒有支付函式,沒有遞補函式,也沒有資料儲存。因此,它不能接收或保存以太幣,也不能儲存資料。程式庫充當先前已部署的程式碼,讓其他合約可以呼叫該程式碼進行唯讀計算。更多關於智慧型合約程式庫的資訊。", + "light-client-term": "輕量用戶端", + "light-client-definition": "以太坊用戶端不會儲存區塊鏈的本地副本,也不會驗證區塊和交易。它提供錢包功能並且可以創建和廣播交易。", + "liquidity-term": "流動性", + "liquidity-definition": "流動性是指資產轉換為現金或其他資產的速度和容易度。像 Uniswap 這樣的去中心化交易所擁有多個流動性池,資產持有者可以將其資產存入其中,交易者可以用去中心化的方式買賣資產以換取獎勵。", + "liquidity-tokens-term": "流動性代幣", + "liquidity-tokens-definition": "流動性代幣 (LST) 是向將資產存入流動性池的參與者發行的數位代幣,流動性池是鎖定在智慧型合約中的資金集合,用於促進去中心化交易所 (DEX) 上的交易。
這些代幣代表參與者在礦池中的份額,可以隨後兌換為初始存款加上礦池活動產生的部分交易費用。本質上,流動性代幣充當流動性池中所有權或質押的證明,允許持有者獲得獎勵,同時為其他人高效地交易不同的加密貨幣對提供必要的流動性。", + "lmd-ghost-term": "LMD-GHOST", + "lmd-ghost-definition": "以太坊共識用戶端用來辨識鏈頭的分叉選擇演算法。LMD-GHOST 是「最新訊息驅動的最貪婪、最重的可觀察子樹」的縮寫,意思是鏈頭是在它的歷史中累積最多證明的區塊。", + "mainnet-term": "主網", + "mainnet-definition": "主網 (Mainnet) 是「main network」的縮寫,是主要的公共以太坊區塊鏈。", + "max-fee-per-gas-term": "每單位燃料最高費用", + "max-fee-per-gas-definition": "最高費用是使用者為讓交易包含到區塊中而願意為每單位燃料 (gwei) 支付的絕對最高金額。", + "merkle-patricia-tree-term": "默克爾帕特里夏樹 (MPT)", + "merkle-patricia-tree-definition": "以太坊中用於高效存儲鍵值對的資料結構。", + "merkle-root-term": "默克爾根", + "merkle-root-definition": "默克爾根是默克爾樹的單一頂部雜湊值。它驗證區塊內的所有交易。", + "message-term": "訊息", + "message-definition": "永遠不會序列化且僅在以太坊虛擬機內傳送的內部交易。", + "message-call-term": "訊息調用", + "message-call-definition": "將訊息從一個帳戶傳遞到另一個帳戶的行為。如果目標帳戶與以太坊虛擬機程式碼關聯,則虛擬機將以該物件的狀態和執行的訊息啟動。", + "mev-term": "最大可提取價值 (MEV)", + "mev-definition": "透過包含、排除和更改區塊中的交易順序,可以從區塊生產中提取超出標準區塊獎勵和燃料費用的最大值。更多關於最大可提取價值 (MEV) 的資訊。", + "mining-term": "挖礦", + "mining-definition": "對區塊頭重複進行雜湊同時遞增隨機數的過程,直到結果包含任意數量的前導二進位零。這是將新區塊新增到工作量證明區塊鏈的過程。這就是以太坊在過渡到權益證明之前的安全保障方式。", + "miner-term": "礦工", + "miner-definition": "網路節點,透過重複傳遞雜湊找到新區塊的有效工作量證明(參見 Ethash)。礦工不再是以太坊的一部分 — 當以太坊轉向權益證明時,他們被驗證者取代。", + "mint-term": "鑄幣", + "mint-definition": "鑄幣是創造新代幣並將其投入流通以供使用的過程。這是一種去中心化的機制,可以在沒有中央機構參與的情況下創建新代幣。", + "multisig-term": "多簽", + "multisig-definition": "多簽(多重簽章)是指數位錢包或帳戶需要多個簽章或批准才能執行交易,從而增強安全性。
與僅需要一人批准的傳統單簽章帳戶相比,這增加了額外的安全性。", + "network-term": "網路", + "network-definition": "指以太坊網路,一種將交易和區塊傳播到每個以太坊節點(網路參與者)的點對點網路。更多關於網路的資訊。", + "network-hashrate-term": "網路雜湊率", + "network-hashrate-definition": "整個挖礦網路產生的集體雜湊率。當以太坊轉向權益證明時,以太坊上的挖礦就被關閉。", + "nft-term": "非同質化代幣 (NFT)", + "nft-definition": "非同質化代幣 (NFT) 是一種你可以擁有的獨特數位物品,例如藝術品或收藏品,並透過區塊鏈技術進行驗證。 更多有關非同質化代幣 (NFT) 的資訊。", + "node-term": "節點", + "node-definition": "參與網路的軟體用戶端。更多關於節點和用戶端的資訊。", + "nonce-term": "隨機數", + "nonce-definition": "在密碼學裏,只能使用一次的值。帳戶隨機數是每個帳戶中的交易計數器,用於防止重播攻擊。", + "off-chain-term": "鏈下", + "off-chain-definition": "鏈下是指存在於區塊鏈以外的任何交易或資料。由於在鏈上提交每筆交易可能成本高昂且效率低下,因此第三方工具(例如處理定價資料的預言機)或執行更高吞吐量交易的二層網路解決方案,在鏈下處理大量工作並會以較低的頻率提交資訊到鏈上。", + "ommer-term": "Ommer(叔)區塊", + "ommer-definition": "當工作量證明礦工發現有效的區塊時,另一個礦工可能已經發布了首先新增到區塊鏈頂端的競爭區塊。這個有效但過時的區塊可以作為 ommer 被新區塊包含,並獲得部分區塊獎勵。術語「ommer」是對父塊的兄弟姐妹區塊的首選中性術語,但有時也被稱為「叔」。當以太坊仍是工作證明網路時,這對於以太坊來說很常見。現在以太坊使用權益證明,每個時隙只會選擇一個區塊提議者。", + "on-chain-term": "鏈上", + "on-chain-definition": "指在區塊鏈上發生且公開的操作或交易。

可以將其視為在一個共享大筆記本中寫一些東西,每個人都可以看到和檢查,確保所寫的內容(例如傳送數位貨幣或簽訂合約)是永久性的並且無法更改或刪除。", + "optimistic-rollup-term": "樂觀卷軸", + "optimistic-rollup-definition": "樂觀卷軸是一種二層網路解決方案,可以加速以太坊上的交易,假設除非受到挑戰,否則預設交易都是有效的。更多關於樂觀卷軸的資訊。", + "oracle-term": "預言機", + "oracle-definition": "預言機是區塊鏈和現實世界之間的橋樑。它們充當鏈上應用程式介面,可以查詢資訊並在智慧型合約中使用。更多關於預言機的資訊。", + "peer-term": "對等節點", + "peer-definition": "運行以太坊用戶端軟體並具有相同的區塊鏈副本的聯網電腦。", + "peer-to-peer-network-term": "點對點網路", + "peer-to-peer-network-definition": "電腦(對等節點)網路,無需中心化、基於伺服器的服務即可共同執行功能。
此設定通常用於共用檔案(即 Bit torrent)、資訊或數位貨幣,從而允許使用者之間進行更直接且可能更高效的交換。", + "permissionless-term": "無需許可", + "permissionless-definition": "無許可意味著任何人都可以加入並使用像以太坊這樣的系統。它向所有人開放而無需任何批准。", + "plasma-term": "Plasma", + "plasma-definition": "使用欺詐證明的鏈下擴展解決方案,例如樂觀卷軸。Plasma 僅限於簡單的交易,例如基本的代幣轉移和交換。更多關於 plasma 的資訊。", + "private-key-term": "私密金鑰", + "private-key-definition": "私鑰是個秘密代碼,可以證明你擁有你的數位貨幣並允許你使用它,就像你帳戶的 PIN 碼一樣。切勿分享它。", + "public-goods-term": "公共物品", + "public-goods-definition": "公共物品是每個人都可以免費使用的東西,例如公園或乾淨空氣,使用它們並不能阻止其他人也同樣使用。政府經常提供這些服務,因為企業不能輕易向使用它們的人收費,所以通常不會提供這些服務。", + "private-chain-term": "私鏈", + "private-chain-definition": "完全私有的區塊鏈是一種需要存取許可的區塊鏈,不能公開使用。", + "poap-term": "POAP", + "poap-definition": "出席證明協議用於創建數位收藏品 (非同質化代幣),證明你參加了特定事件或活動。", + "pos-term": "權益證明 (PoS)", + "pos-definition": "加密貨幣區塊鏈協議旨在實現分散式共識的方法。權益證明要求使用者證明擁有一定數量的加密貨幣(他們在網路中的「權益」),以便能夠參與交易驗證。有關權益證明的更多資訊。", + "pow-term": "工作量證明 (PoW)", + "pow-definition": "區塊鏈的一種安全機制,要求節點以計算的形式消耗能量來找到某個值。", + "proto-danksharding-term": "Proto-Danksharding", + "proto-danksharding-definition": "一種接受以太坊的「二進位大型物件」資料的新交易類型。此「二進位大型物件」資料在信標鏈上暫時儲存 4096 個時期(約 18.2 天),並且可以選擇在之後修剪,以協助降低節點營運者的硬體需求。", + "public-key-term": "公鑰", + "public-key-definition": "公鑰是一組字符,可以讓其他人安全地向你發送數位貨幣,就像金錢的電子郵件地址一樣。", + "quadratic-voting-term": "二次投票", + "quadratic-voting-definition": "是一種投票方法,選民可以表達他們對問題的強烈感受。它不僅可以讓選民表現出偏好,還有他們偏好的強度。", + "receipt-term": "收據", + "receipt-definition": "以太坊用戶端傳回的資料表示特定交易的結果,包括交易的雜湊值、其區塊編號、使用的燃料數量,以及合約的地址(在部署智慧型合約的情況下)。", + "recovery-phrase-term": "種子助記詞/助記詞", + "recovery-phrase-definition": "創建數位錢包時向你提供的單字清單。它就像一個密碼,可以幫助你在失去存取權限時重新進入錢包,確保你不會丟失數位貨幣或代幣。", + "re-entrancy-attack-term": "重入攻擊", + "re-entrancy-attack-definition": "由攻擊者合約呼叫受害者合約函式組成的攻擊,其方式是在執行過程中受害者再次遞迴地呼叫攻擊者合約。例如,這可能會導致透過跳過受害者合約中更新餘額或計算提款金額的環節來竊取資金。< href=\"/developers/docs/smart-contracts/security/#re-entrancy\">更多關於重入的資訊。", + "reward-term": "獎勵", + "reward-definition": "在每個時隙中,給執行某些功能的驗證者的一定數量的以太幣獎勵,這些功能包括提議區塊或參與同步委員會。", + "rlp-term": "遞迴長度前綴 (RLP)", + "rlp-definition": "由以太坊開發者設計的編碼標準,用於對任意複雜度和長度的物件(資料結構)進行編碼和序列化。", + "rollups-term": "卷軸", + "rollups-definition": "一種二層網路擴展解決方案,可批量處理多個交易並在單一交易中將其提交到以太坊主鏈。這可以降低燃料成本並增加交易吞吐量。有樂觀和零知識卷軸,它們使用不同的安全方法來提供這些可擴展性收益。更多關於卷軸的資訊。", + "rpc-term": "遠端程序呼叫 (RPC)", + "rpc-definition": "遠端程序呼叫允許一台電腦透過網路向另一台電腦要求資料或操作,例如索要遙控相關的資訊。", + "sha-term": "安全雜湊演算法 (SHA)", + "sha-definition": "美國國家標準與技術研究院 (NIST) 發布的一系列加密雜湊函式。", + "serialization-term": "序列化", + "serialization-definition": "將資料結構轉換為位元組序列的過程。", + "sequencer-term": "排序者", + "sequencer-definition": "排序者是一個負責對區塊鏈網路中的交易進行排序的程式,特別是在二層網路擴容解決方案中。", + "shard-term": "分片 / 分片鏈", + "shard-definition": "分片鏈是整個區塊鏈的離散部分,由驗證者子集負責。這最初是以太坊擴展到每秒數百萬筆交易的方式,但現在已經被使用卷軸擴展的快速發展所取代。", + "sidechain-term": "側鏈", + "sidechain-definition": "一種擴容解決方案,使用具有不同且通常更快的共識規則的單獨鏈。需要一個跨鏈橋來將這些側鏈連結到主網卷軸也使用側鏈,但它們與主網協作運作。更多關於側鏈的資訊。", + "signing-term": "簽署", + "signing-definition": "以加密方式證明交易已獲得特定私鑰持有者的批准。", + "singleton-term": "單例", + "singleton-definition": "電腦程式設計術語,描述只能存在單一執行個體的物件。", + "slasher-term": "懲罰者", + "slasher-definition": "懲罰者是一個掃描證明以尋找可懲罰犯錯的實體。懲罰會被廣播到網路,而下一個區塊提議者將證明新增到區塊中。然後區塊提議者會因懲罰惡意驗證者而獲得獎勵。", + "slot-term": "時隙", + "slot-definition": "一段(12 秒)的時間期間,讓驗證者可以在權益證明系統中提出新區塊。時隙可能是空的。32 個時隙組成一個時期更多關於權益證明的資訊。", + "smart-contract-term": "智慧型合約", + "smart-contract-definition": "智慧型合約是一種在區塊鏈上自動執行協定的程式,就像自我執行的數位合約一樣。智慧型合約簡介。", + "snark-term": "簡潔非交互式知識論證", + "snark-definition": "「簡潔非互動式知識論證」的縮寫,簡潔非互動式知識論證是一種零知識證明更多關於零知識卷軸的資訊。", + "soft-fork-term": "軟分叉", + "soft-fork-definition": "當共識規則發生變化時,區塊鏈會出現分歧。與硬分叉相反,軟分叉是反向相容的;升級後的節點只要遵循新的共識規則就可以驗證未升級節點所建立的區塊。", + "solidity-term": "Solidity", + "solidity-definition": "程序式(命令式)程式語言,語法類似 JavaScript、C++ 或 Java。以太坊智慧型合約最受歡迎、最常用的語言。由 Gavin Wood 博士所創。更多關於 Solidity 的資訊。", + "solidity-inline-assembly-term": "Solidity 行內組譯", + "solidity-inline-assembly-definition": "Solidity 程式中的以太坊虛擬機組合語言。Solidity 對行內組譯的支援讓編寫某些操作變得更加容易。", + "stablecoin-term": "穩定幣", + "stablecoin-definition": "穩定幣是一種具有穩定價值的加密貨幣,通常與貨幣或商品(如美元)掛鉤,以最大限度地減少價格波動。更多關於穩定幣的資訊。", + "staking-term": "質押", + "staking-definition": "存入一定數量的以太幣(你的質押)即可成為驗證者並保護網路。驗證者檢查交易並在權益證明共識模型下提出區塊。質押為你提供經濟激勵,讓你以網路的最佳利益行事。你將因履行驗證者職責而獲得獎勵,但若否,則會損失不同數量的以太幣。更多關於以太坊質押的資訊。", + "staking-pool-term": "質押池", + "staking-pool-definition": "多個以太坊質押者的以太幣總和,用於達到啟動一組驗證器金鑰所需的 32 個以太幣。節點營運商使用這些金鑰參與共識,而區塊獎勵會在貢獻者之間分配。質押池或委託質押並不是以太坊協定原生的,但社群已經建立了許多解決方案。更多關於聯合質押的資訊。", + "stark-term": "可擴容透明知識論證", + "stark-definition": "「可擴容透明知識論證」的縮寫,可擴容透明知識論證是一種零知識證明更多關於零知識卷軸的資訊。", + "state-term": "狀態", + "state-definition": "區塊鏈上特定時間點的所有餘額和資料的快照,通常指特定區塊的狀況。", + "state-channels-term": "狀態通道", + "state-channels-definition": "二層網路解決方案,在參與者之間建立通道,讓他們可以自由且低價地交易。只有用於設定通道和關閉通道的交易會發送到主網。這允許非常高的交易吞吐量,但確實依賴於預先了解參與者的數量並鎖定資金。更多關於狀態通道的資訊。", + "supermajority-term": "絕對多數", + "supermajority-definition": "絕對多數是指超過 2/3 (66%) 的總質押以太幣,這些以太幣確保了以太坊的安全。要在信標鏈上最終確定區塊需要絕對多數投票。", + "sybil-attack-term": "女巫攻擊", + "sybil-attack-definition": "女巫攻擊是指個人欺騙系統使某個系統認為他們是多個人而增加他們的影響力。", + "syncing-term": "同步", + "syncing-definition": "將區塊鏈的整個最新版本下載到節點的過程。", + "sync-committee-term": "同步委員會", + "sync-committee-definition": "同步委員會是隨機選擇的驗證者群組,每約 27 小時刷新一次。他們的目的是將他們的簽章新增到有效的區塊頭中。同步委員會允許輕量用戶端追蹤區塊鏈的頭部,而無需存取整個驗證者集。", + "szabo-term": "Szabo", + "szabo-definition": "以太幣的面額。1 szabo = 1012 wei。106 szabo = 1 以太幣。", + "terminal-total-difficulty-term": "終端總難度 (TTD)", + "terminal-total-difficulty-definition": "總難度是截至區塊鏈中某個特定點的所有區塊的 Ethash 挖礦難度總和。終端總難度是總難度的特定值,用於觸發執行用戶端關閉挖礦和區塊廣播功能,使網路過渡到權益證明。由於以太坊已轉向權益證明,此概念不再相關。", + "testnet-term": "測試網", + "testnet-definition": "測試網 (Testnet) 是「測試網路 (test network)」的縮寫,用於模擬以太坊主網路行為的網路。", + "token-term": "代幣", + "token-definition": "在以太坊區塊鏈上的智慧型合約中定義的可交易虛擬商品。", + "transaction-term": "交易", + "transaction-definition": "提交到以太坊區塊鏈的資料由原始帳戶簽署,針對特定地址。交易包含中繼資料,例如該交易的燃料限制更多關於交易的資訊。", + "transaction-fee-term": "交易費", + "transaction-fee-definition": "每當你使用以太坊網路時都需要支付的費用。例如從你的錢包發送資金或去中心化應用程式互動,如兌換代幣或購買收藏品。你可以將其視為服務費。該費用將根據網路繁忙程度而變化。這是因為驗證者,即負責處理你的交易的人員,可能會優先考慮費用較高的交易 - 因此擁堵會迫使價格上漲。

從技術層面來說,你的交易費與你的交易需要多少燃料有關。

降低交易費是目前人們強烈關注的議題。請參閱二層網路。", + "trust-assumptions-term": "信任假設", + "trust-assumptions-definition": "信任假設是關於系統安全性和可靠性的基本信念,指引我們信任什麼才能讓系統運作。", + "trustlessness-definition": "網路調解交易的能力,任何相關方都無需信任第三方。", + "turing-complete-term": "圖靈完備", + "turing-complete-definition": "以英國數學家和電腦科學家 Alan Turing 命名的概念 - 一個資料處理規則系統(例如電腦指令集、程式語言或細胞自動機),如果可以用來模擬任何圖靈機器,就稱為「圖靈完備」 或「計算通用」。", + "validator-term": "驗證者", + "validator-definition": "權益證明系統中的節點,負責儲存資料、處理交易、並向區塊鏈添加新區塊。要啟動驗證軟體,你需要質押 32 個以太幣。更多關於以太坊質押的資訊。", + "validator-lifecycle-term": "驗證者生命週期", + "validator-lifecycle-definition": "驗證者可以處於的狀態序列。包括:

  • 已存款:驗證者已把至少 32 個以太幣存入存款合約
  • 待處理:驗證者在激活隊列中,等待現有驗證者投票使其進入網路
  • 活躍:目前正在證明和提議區塊
  • 懲處:驗證者因不當行為被懲處
  • 退出中:驗證者被標記為退出網路,無論他們是自願還是被驅逐的。
", + "validity-proof-term": "有效性證明", + "validity-proof-definition": "某些二層網路解決方案的安全模型,為了提高速度,交易被匯總成批次並在單一交易中提交到以太坊。交易計算在鏈下完成,然後提供給主鏈並提供其有效性證明。這種方法在保障安全性的同時增加了可能的交易量。一些卷軸使用欺詐證明更多關於零知識卷軸的資訊。", + "validium-term": "Validium", + "validium-definition": "一種使用有效性證明來提高交易吞吐量的鏈下解決方案。跟零知識卷軸不同,validium 資料不會存儲一層網路主網上。更多關於 validium 的資訊。", + "vyper-term": "Vyper", + "vyper-definition": "一種具有類似 Python 語法的高階程式語言。旨在更接近純函數式語言。由 Vitalik Buterin 創建。更多關於 Vyper 的資訊。", + "wallet-term": "錢包", + "wallet-definition": "錢包是一種用於存儲、發送和接收數位貨幣的數位工具,就像你的線上貨幣的虛擬錢包一樣。更多關於以太坊錢包的資訊。", + "web2-term": "Web2", + "web2-definition": "是目前的網際網路,專注於由少數公司控制的使用者產生內容和社群媒體。Web3 是一種加密信念,認為使用者應該控制他們的資料和交易。", + "web3-term": "Web3", + "web3-definition": "Web3 是使用區塊鏈的新網際網路,由使用者而非公司控制其資料和交易。無需分享任何個人資訊。更多關於 web3 的資訊。", + "wei-term": "Wei", + "wei-definition": "以太幣的最小面額。1018 wei = 1 以太幣。", + "zero-address-term": "零地址", + "zero-address-definition": "一個完全由零組成的以太坊地址,常被用來從擁有的流通中移除代幣。透過 burn() 方法正式從智慧型合約索引中移除的代幣,與傳送到此地址的代幣是有區別的。", + "zk-proof-term": "零知識證明", + "zk-proof-definition": "零知識證明是一種密碼學方法,允許個人證明某個陳述是真實而無需傳達任何附加資訊。更多關於零知識卷軸的資訊。", + "zk-rollup-term": "零知識卷軸", + "zk-rollup-definition": "使用有效性證明來提供更高的二層網路交易吞吐量的交易卷軸,同時使用主網(一層網路)提供的安全性。雖然它們無法處理複雜的交易類型(例如樂觀卷軸),但它們不存在延遲問題,因為交易在提交時可證明是有效的。更多關於零知識卷軸的資訊。" +} diff --git a/src/intl/zh-tw/learn-quizzes.json b/src/intl/zh-tw/learn-quizzes.json index 04bd5f27868..6458f80635f 100644 --- a/src/intl/zh-tw/learn-quizzes.json +++ b/src/intl/zh-tw/learn-quizzes.json @@ -107,15 +107,15 @@ "b004-c-explanation": "部分正確,但這僅是以太幣的眾多用途之一。", "b004-d-label": "以上皆是", "b004-d-explanation": "以太坊交易無法被審查,在以太坊上進行任何轉帳都需要以太幣。這對去中心化金融生態系統的穩定性非常重要。", - "c001-prompt": "Web3 允許使用者透過什麼直接擁有數位資產:", - "c001-a-label": "去中心化自治組織", - "c001-a-explanation": "DAO(去中心化自治組織)是沒有中心領導者,由成員擁有的社群。", + "c001-prompt": "Web3 可以透過什麼讓使用者直接擁有數位資產:", + "c001-a-label": "代幣", + "c001-a-explanation": "代幣提供了一種方式來表示可互換的價值單位,且由以太坊帳戶擁有。雖然代幣可以代表所有權,但在以太坊上擁有數位資產的方式還有很多。", "c001-b-label": "NFTs (分同質化代幣)", - "c001-b-explanation": "NFT(非同質化代幣)提供了一種方式,可以將任何唯一的物品轉換成基於以太坊的資產。", + "c001-b-explanation": "NFT(非同質化代幣)提供了一種方式,能夠將任何獨特的事物用以太坊資產來表示。雖然非同質化代幣可以代表所有權,但在以太坊上擁有數位資產的方式還有很多。", "c001-c-label": "以太坊名稱服務", - "c001-c-explanation": "ENS(以太坊名稱服務)是以太坊區塊鏈上的一種去中心化名稱服務。", - "c001-d-label": "Github", - "c001-d-explanation": "GitHub 是一個中心平臺,主要用途為使用分散式版本控制儲存程式碼。GitHub 不允許你擁有自己資料及數位資產的所有權。", + "c001-c-explanation": "ENS(以太坊域名服務)是一種以太坊區塊鏈上的去中心化的域名服務。它們可以代表擁有權,但在以太坊上擁有數位資產的方式還有很多。", + "c001-d-label": "以上皆是", + "c001-d-explanation": "所有這些選項都提供了在以太坊上擁有數字資產的方式。代幣、非同質化代幣和以太坊域名服務都是表示數字資產所有權的方式。", "c002-prompt": "Web1 是唯讀,Web2 是可讀寫,Web3 則描述為:", "c002-a-label": "可讀、可寫、可售", "c002-a-explanation": "Web3 沒有被這樣描述過。", @@ -161,15 +161,15 @@ "d001-c-explanation": "網頁版錢包的安全性低於硬體錢包,因為私密金鑰儲存在連網裝置上。", "d001-d-label": "桌面版錢包", "d001-d-explanation": "桌面版錢包將私密金鑰存在電腦硬碟上,一般來說是連網的,因此可能會受到其他惡意軟體的攻擊。", - "d002-prompt": "根據下列選項,哪個保存種子助記詞的方式最安全?", + "d002-prompt": "你應該如何儲存你的種子助記詞?", "d002-a-label": "截圖存在手機上", "d002-a-explanation": "這不是最安全的選項。若此照片被上傳到雲端儲存空間,駭客就有可能拿到這張圖片並取得存取你帳戶的權限。", "d002-b-label": "存在你電腦的檔案中", "d002-b-explanation": "這不是最安全的選項。駭客越來越常在目標裝置上搜尋加密貨幣相關資訊。如果駭客存取內有你種子助記詞的檔案,那他就有權存取你的以太坊帳戶。", - "d002-c-label": "寫在紙上", - "d002-c-explanation": "所有選項中,將你的種子助記詞寫在紙上是最安全的方法。", - "d002-d-label": "放在傳給你信任的家庭成員的文字訊息中", - "d002-d-explanation": "你永遠不該將你的種子助記詞傳給任何人。因為訊息可能被第三方攔截,即使你絕對相信這個人,你也沒有辦法確定誰會使用他們的手機。", + "d002-c-label": "儲存在你傳送給你信任的家庭成員的簡訊中", + "d002-c-explanation": "你永遠不該將你的種子助記詞傳給任何人。因為訊息可能被第三方攔截,即使你絕對相信這個人,你也沒有辦法確定誰會使用他們的手機。", + "d002-d-label": "以上皆非", + "d002-d-explanation": "你的種子助記詞應該以安全、最好是離線的方式儲存。因此,通常建議將它寫在紙上,但安全的密碼管理器是個不錯的選擇。", "d003-prompt": "你應該將你的種子助記詞 / 私密金鑰交給誰?", "d003-a-label": "你付款的對象", "d003-a-explanation": "永遠不該將你的種子助記詞或私密金鑰傳給任何人。你應該透過交易傳送對應的代幣至他們的錢包地址。", @@ -269,11 +269,11 @@ "g002-d-explanation": "為了擴容,大部分同類型一層網路主要會犧牲安全性以及去中心化程度。", "g003-prompt": "下列何者不被視為二層網路?", "g003-a-label": "Validium", - "g003-a-explanation": "Validiums 不被視為二層網路解決方案,因為它們並沒有從以太坊獲得安全性或資料可用性。", + "g003-a-explanation": "Validium 不被視為二層網路解決方案,因為它們並沒有繼承以太坊的安全性或資料可用性。這不是唯一的正確答案。", "g003-b-label": "側鏈", - "g003-b-explanation": "側鏈不被視為二層網路解決方案,因為它們並沒有從以太坊獲得安全性或資料可用性。", + "g003-b-explanation": "側鏈不被視為二層網路解決方案,因為它們並沒有繼承以太坊的安全性或資料可用性。這不是唯一的正確答案。", "g003-c-label": "其他一層網路區塊鏈", - "g003-c-explanation": "其他一層網路區塊鏈不被視為二層網路解決方案。", + "g003-c-explanation": "其他一層網路區塊鏈不被視為二層網路解決方案。這不是唯一的正確答案。", "g003-d-label": "以上皆是", "g003-d-explanation": "Validiums、側鏈以及其他一層網路區塊鏈不被視為二層網路解決方案,因為它們並沒有從以太坊獲得安全性或資料可用性。", "g004-prompt": "為什麼以太坊沒有「官方」的二層網路?", @@ -326,6 +326,51 @@ "h005-c-explanation": "以太坊 1 是執行層而非共識層的原有名稱。", "h005-d-label": "質押", "h005-d-explanation": "質押是指將以太幣存入智慧型合約以協助保護區塊鏈網路的安全。", + "i001-prompt": "關於去中心化自治組織的真實情況是甚麼?", + "i001-a-label": "去中心化自治組織是透過治理代幣集體所擁有", + "i001-a-explanation": "去中心化自治組織是集體擁有的,但是這不是唯一的正確答案。", + "i001-b-label": "去中心化自治組織由其成員治理", + "i001-b-explanation": "去中心化自治組織由其成員治理,但是這不是唯一的正確答案。", + "i001-c-label": "他們為一個共同的使命而努力", + "i001-c-explanation": "去中心化自治組織為一個共同的使命而努力,但這不是唯一的正確答案。", + "i001-d-label": "以上皆是", + "i001-d-explanation": "正確,去中心化自治組織為一種集體擁有、由區塊鏈治理,並致力於一個共同使命的組織。", + "i002-prompt": "有哪些關於如何使用去中心化自治組織的實際範例?", + "i002-a-label": "去中心化協議,成員投票決定協議相關事務或產品該如何開發", + "i002-a-explanation": "協議去中心化自治組織是其中一個例子,但是去中心化自治組織並不限於此類型。", + "i002-b-label": "集體擁有,如非同質化代幣或實體資產", + "i002-b-explanation": "收藏品去中心化自治組織是其中一個例子,但是去中心化自治組織並不限於此類型。", + "i002-c-label": "風險投資和資助,匯集資本並投票決定要資助的專案", + "i002-c-explanation": "風險投資或資助去中心化自治組織是其中一個例子,但去中心化自治組織並不限於此類型。", + "i002-d-label": "以上皆是", + "i002-d-explanation": "一個去中心化自治組織可以擁有多重「使命」。", + "i003-prompt": "跟傳統組織不同,去中心化自治組織是…", + "i003-a-label": "通常等級分明", + "i003-a-explanation": "去中心化自治組織通常是扁平且完全民主化的。", + "i003-b-label": "他們的活動透明且完全公開", + "i003-b-explanation": "由於使用鏈上投票,決策在區塊鏈上變得透明。討論和決策過程中的其他要素對所有成員都是公開的。", + "i003-c-label": "由核心一方控制", + "i003-c-explanation": "變更需要由成員投票決定。提供的服務以去中心化的方式自動處理。", + "i003-d-label": "對於誰可以提出變更建議有限制", + "i003-d-explanation": "通常,每位去中心化自治組織成員都可以提出變更建議。", + "i004-prompt": "智慧型合約對去中心化自治組織有哪些重要意義?", + "i004-a-label": "智慧型合約的程式碼可以被修改", + "i004-a-explanation": "一旦合約在以太坊上啟動,除了透過投票外沒有人可以改變規則。這使得去中心化自治組織能夠按照其編程時設定的規則運行。", + "i004-b-label": "它有一個保留了對資金庫進行變更和發送資金權限的個人擁有者。", + "i004-b-explanation": "資金庫由智慧型合約定義。要使用資金,需要得到團體的批准。", + "i004-c-label": "對底層區塊鏈的分散式共識的信任", + "i004-c-explanation": "對於去中心化自治組織來說,底層區塊鏈不被操控是非常重要的。以太坊自身的共識機制是分散式的而且已經足夠成熟,使得組織可以信任該網路。", + "i004-d-label": "去中心化自治組織不需要智慧型合約", + "i004-d-explanation": "去中心化自治組織背後的運作架構為其智慧型合約,智慧型合約定義組織的規則,並持有該團體的資金庫。", + "i005-prompt": "哪一個並非去中心化自治組織的治理機制?", + "i005-a-label": "代幣型成員", + "i005-a-explanation": "基於代幣的治理得到廣泛使用。它通常是完全無需許可的,並且通常用於治理廣泛的去中心化協議和/或代幣本身。", + "i005-b-label": "股份型成員", + "i005-b-explanation": "股份型去中心化自治組織需要擁有更多權力,但仍然相當公開。任何潛在成員都可以提交加入去中心化自治組織的提案,通常需要以代幣或工作形式提供一定價值的貢獻。", + "i005-c-label": "信譽型成員", + "i005-c-explanation": "與基於代幣或股份的成員資格不同,信譽型去中心化自治組織不會將所有權轉移給貢獻者。去中心化自治組織成員必須通過參與來獲得信譽。", + "i005-d-label": "執行董事會和鏈下資金庫管理", + "i005-d-explanation": "這種方法使用高度中心化且不透明的治理機制。相對而言,去中心化自治組織使用可驗證的投票機制和鏈上資金庫管理,以確保透明度和問責性。", "j001-prompt": "關於罰沒的敘述,下列何者正確?", "j001-a-label": "離線會被處罰,重新上線後可以取回獎勵", "j001-a-explanation": "離線並不會導致罰沒。離線會受到小額的處罰,獎勵會在驗證者重新上線並恢復證明時恢復。", @@ -479,4 +524,4 @@ "l006-a-label": "是", "l006-a-explanation": "你無法透過單純運行客戶端軟體來獲得獎勵。要贏得獎勵,你還必須同時質押。", "l006-b-label": "否" -} \ No newline at end of file +} diff --git a/src/intl/zh-tw/page-about.json b/src/intl/zh-tw/page-about.json index bfc253f20c0..5f84edec642 100644 --- a/src/intl/zh-tw/page-about.json +++ b/src/intl/zh-tw/page-about.json @@ -1,9 +1,31 @@ { + "page-about-h2": "功能請求", + "page-about-h3": "此功能仍在開發中", + "page-about-h3-1": "已實現的功能", + "page-about-h3-2": "計畫中的功能", + "page-about-li-1": "進行中", + "page-about-li-2": "已計畫", + "page-about-li-3": "已實現", + "page-about-li-4": "已實作", + "page-about-link-1": "此存放庫的原始程式碼已獲 MIT 授權認可", + "page-about-link-2": "GitHub", + "page-about-link-3": "在 GitHub 上查看進行中工作的完整清單", + "page-about-link-4": "加入我們的 Discord 伺服器", + "page-about-link-5": "在 X(前身為 Twitter)上聯絡我們", + "page-about-link-6": "在 GitHub 上查看已實作工作的完整清單", + "page-about-link-7": "在 GitHub 上提出問題", + "page-about-p-1": "自從 ethereum.org 成立以來,我們努力著將經營模式維持透明化。這是我們的核心價值觀之一,因為我們認為透明化對於以太坊的成功至關重要。", + "page-about-p-2": "我們用作", + "page-about-p-3": "主要專案管理工具。我們將工作分為以下三類:", + "page-about-p-4": "我們盡最大努力讓社群知道每個工作的狀態", + "page-about-p-5": "我們正在實作的工作", + "page-about-p-6": "我們下一個要列入的實作工作", + "page-about-p-7": "最近完成的工作", + "page-about-p-8": "你有如何改善 ethereum.org 的點子嗎?我們非常願意跟你合作!", "page-what-is-ethereum-energy-consumption-chart-legend": "年度能源消耗 (TWh/年)", - "energy-consumption-chart-youtube-label": "YouTube", - "energy-consumption-chart-gold-mining-galaxy-label": "黃金開採 (Galaxy Digital)", "energy-consumption-chart-global-data-centers-label": "全球資料中心", - "energy-consumption-chart-gold-mining-cbeci-label": "黃金開採(劍橋比特幣電力消耗指數)", + "energy-consumption-chart-airbnb-label": "AirBnB", + "energy-consumption-gold-mining-cbeci-label": "開採金礦", "energy-consumption-chart-btc-pow-label": "比特幣工作量證明", "energy-consumption-chart-netflix-label": "網飛", "energy-consumption-chart-eth-pow-label": "以太幣工作量證明", diff --git a/src/intl/zh-tw/page-assets.json b/src/intl/zh-tw/page-assets.json index 6043faefba4..635e46050b7 100644 --- a/src/intl/zh-tw/page-assets.json +++ b/src/intl/zh-tw/page-assets.json @@ -1,3 +1,61 @@ { - "page-assets-doge": "在使用去中心化應用程式的狗狗" + "page-assets-bazaar": "以太坊市集", + "page-assets-beacon-chain": "信標鏈", + "page-assets-blocks": "正在建立區塊", + "page-assets-dao": "去中心化自治組織", + "page-assets-defi": "去中央化金融", + "page-assets-merge": "合併", + "page-assets-doge": "在使用去中心化應用程式的狗狗", + "page-assets-download-artist": "藝術家:", + "page-assets-download-download": "下載", + "page-assets-enterprise": "企業版以太坊", + "page-assets-eth": "以太幣 (ETH)", + "page-assets-eth-diamond-color": "以太幣鑽石(彩色)", + "page-assets-eth-diamond-glyph": "以太幣鑽石(象形文)", + "page-assets-eth-diamond-gray": "以太幣鑽石(灰)", + "page-assets-eth-diamond-purple": "以太幣鑽石(紫)", + "page-assets-eth-diamond-white": "以太幣鑽石(白)", + "page-assets-eth-diamond-colored": "以太幣鑽石(填色)", + "page-assets-eth-diamond-colored-svg": "以太幣鑽石(填色,可縮放矢量圖型)", + "page-assets-eth-glyph-video-dark": "以太幣象形文影片(深色)", + "page-assets-eth-glyph-video-light": "以太幣象形文影片(淺色)", + "page-assets-eth-logo-landscape-gray": "橫向以太幣標誌(灰)", + "page-assets-eth-logo-landscape-purple": "橫向以太幣標誌(紫)", + "page-assets-eth-logo-landscape-white": "橫向以太幣標誌(白)", + "page-assets-eth-logo-portrait-gray": "直向以太幣標誌(灰)", + "page-assets-eth-logo-portrait-purple": "直向以太幣標誌(紫)", + "page-assets-eth-logo-portrait-white": "直向以太幣標誌(白)", + "page-assets-eth-wordmark-gray": "以太幣文字商標(灰)", + "page-assets-eth-wordmark-purple": "以太幣文字商標(紫)", + "page-assets-eth-wordmark-white": "以太幣文字商標(白)", + "page-assets-ethereum-brand-assets": "以太坊「品牌」資產", + "page-assets-finance": "金融", + "page-assets-future": "未來", + "page-assets-h1": "ethereum.org 資產", + "page-assets-hero": "ethereum.org 主圖", + "page-assets-hero-panda": "ethereum.org 主圖和熊貓合併", + "page-assets-merge-panda": "熊貓合并", + "page-assets-merge-panda-svg": "熊貓合併 SVG", + "page-assets-hero-particles": "以太幣粒子影像", + "page-assets-historical-artwork": "過去作品", + "page-assets-illustrations": "插圖", + "page-assets-impact": "影響", + "page-assets-infrastructure": "基礎架構", + "page-assets-leslie-the-rhino": "萊斯利犀牛", + "page-assets-meta-desc": "探索並下載以太坊和 ethereum.org 的品牌資產、插圖和媒體。", + "page-assets-meta-title": "以太坊品牌資產", + "page-assets-mainnet": "主網", + "page-assets-page-assets-solid-background": "單色背景", + "page-assets-page-assets-transparent-background": "透明背景", + "page-assets-robot": "機器人錢包", + "page-assets-sharding": "分片", + "page-assets-hackathon": "駭客松", + "page-assets-learn-hero-name": "未來派大學", + "page-assets-community-hero-name": "社群聚會", + "page-assets-quizzes-hero-name": "無限遊樂場", + "page-assets-developers-hero-name": "建設未來", + "page-assets-garden-name": "以太坊花園", + "page-assets-roadmap-hero-name": "邁向未來的路", + "page-assets-layer-2-hero-name": "正在構建以太坊", + "page-assets-guides-hero-name": "以太坊實驗室" } diff --git a/src/intl/zh-tw/page-bug-bounty.json b/src/intl/zh-tw/page-bug-bounty.json new file mode 100644 index 00000000000..2bcbeeb1c5e --- /dev/null +++ b/src/intl/zh-tw/page-bug-bounty.json @@ -0,0 +1,138 @@ +{ + "page-upgrades-bug-bounty-annotated-specs": "規範注釋", + "page-upgrades-bug-bounty-annotations": "查看以下注釋可能有所幫助:", + "page-upgrades-bug-bounty-client-bugs": "用戶端錯誤", + "page-upgrades-bug-bounty-client-bugs-desc": "用戶端運行以太坊網路,它們需要遵循規範中的邏輯設定並安全防範潛在的攻擊。我們想要找出與協議實現相關的漏洞。", + "page-upgrades-bug-bounty-client-bugs-desc-2": "目前執行層用戶端(Besu、Erigon、Geth、Nethermind 和 Reth)和共識層用戶端(Lighthouse、Lodestar、Nimbus、Teku 和 Prysm)都包含在漏洞懸賞計劃内。當完成審計並準備好在生產環境中使用時,可能會添加更多的用戶端。", + "page-upgrades-bug-bounty-clients": "加入懸賞計劃的用戶端", + "page-upgrades-bug-bounty-clients-type-1": "規範兼容性問題", + "page-upgrades-bug-bounty-clients-type-2": "意外崩潰、遠端程式碼執行或阻斷服務 (DOS) 漏洞", + "page-upgrades-bug-bounty-clients-type-3": "任何無法恢復之共識分裂問題將被分隔於其他網路", + "page-upgrades-bug-bounty-misc-bugs": "Solidity 錯誤", + "page-upgrades-bug-bounty-misc-bugs-desc": "查看 Solidity SECURITY.MD 以獲取更多關於該範圍包含哪些漏洞的詳情。", + "page-upgrades-bug-bounty-misc-bugs-desc-2": "Solidity 不對不受信任的編譯提供安全保證,並且針對 solc 編譯器在編譯惡意生成的數據時出現的崩潰,我們不會提供獎勵。", + "page-upgrades-bug-bounty-deposit-bugs": "儲放合約錯誤", + "page-upgrades-bug-bounty-deposit-bugs-desc": "信標鏈存款合約的規範和原始程式碼都是漏洞懸賞計劃的一部分。", + "page-upgrades-bug-bounty-dependency-bugs": "依賴性錯誤", + "page-upgrades-bug-bounty-dependency-bugs-desc": "某些依賴關係對於以太坊網路的運行至關重要,其中有一些已經被添加到漏洞懸賞計劃。目前,漏洞懸賞計劃中包含的依賴關係清單有 C-KZG-4844 和 Go-KZG-484。", + "page-upgrades-bug-bounty-docking": "合併", + "page-upgrades-bug-bounty-email-us": "電郵我們:", + "page-upgrades-bug-bounty-help-links": "實用連結", + "page-upgrades-bug-bounty-hunting": "漏洞尋找規則", + "page-upgrades-bug-bounty-hunting-desc": "漏洞懸賞計劃是為針對活躍以太坊社群的可自由裁量的實驗性獎勵計劃,旨在鼓勵和獎勵那些一直幫助改善平台的人。該計劃不是比賽。你需要知道我們隨時可以取消該計劃,並且獎勵由以太坊基金會的漏洞懸賞小組全權決定。此外,我們無法向制裁名單上的個人或所處國家(即北韓、伊朗等)在制裁清單上的個人提供獎勵。當地法律需要我們向你索要身份證明。你需要支付所有與獎勵相關的稅費。所有獎勵都受到法律的約束。最後,你的測試也不能違反任何法律或損害任何他人的數據,並且必須在本地運行的測試網上進行。", + "page-upgrades-bug-bounty-hunting-leaderboard": "共識層漏洞懸賞計劃排行榜", + "page-upgrades-bug-bounty-hunting-execution-leaderboard": "執行層漏洞懸賞計劃排行榜", + "page-upgrades-bug-bounty-hunting-leaderboard-subtitle": "找出共識層漏洞,躋身本排行榜", + "page-upgrades-bug-bounty-hunting-execution-leaderboard-subtitle": "找出執行層漏洞,躋身本排行榜", + "page-upgrades-bug-bounty-hunting-li-1": "未提供概念證明、已經被其他用戶提交過或者規範和用戶端維護人員已經瞭解的問題,不適用於懸賞獎勵。", + "page-upgrades-bug-bounty-hunting-li-2": "未經過事先同意公開揭露漏洞或向其他方報告,都會使漏洞不適用於懸賞。", + "page-upgrades-bug-bounty-hunting-li-3": "以太坊基金會的員工和承攬人或懸賞計劃範圍内的用戶端團隊可以參與該計劃,但只會纍積積分而不會收到金錢獎勵。", + "page-upgrades-bug-bounty-hunting-li-4": "以太坊懸賞計劃在決定獎勵時會考慮許多可變因素。參與資格的判定、分數以及所有獎勵相關的條款由以太坊基金會漏洞懸賞小組全權決定。", + "page-upgrades-bug-bounty-leaderboard": "查看完整排行榜", + "page-upgrades-bug-bounty-leaderboard-list": "漏洞懸賞排行榜", + "page-upgrades-bug-bounty-leaderboard-points": "積分", + "page-upgrades-bug-bounty-ledger-desc": "以太坊規範詳細説明了執行層和共識層的設計原理。", + "page-upgrades-bug-bounty-ledger-title": "規範漏洞", + "page-upgrades-bug-bounty-meta-description": "以太坊漏洞懸賞計劃概述:如何參與以及獎勵資訊", + "page-upgrades-bug-bounty-meta-title": "以太坊漏洞懸賞計畫", + "page-upgrades-bug-bounty-not-included": "超出範圍", + "page-upgrades-bug-bounty-not-included-desc": "只有適用範圍中列出的目標漏洞是漏洞懸賞計劃的一部分。這意味著我們的基礎設施,例如網頁、域名系統、電子郵件等並不在懸賞範圍内。ERC20 合約漏洞通常也不在合約範圍内。然而,我們可以幫助聯係受影響方,例如作者或交易所。以太坊名稱服務由以太坊名稱服務基金會進行維護,不在懸賞範圍内。需要使用者公開他們應用程式介面(如 JSON-RPC 或信標應用程式介面)的漏洞也不在漏洞懸賞計劃的範圍内。", + "page-upgrades-bug-bounty-owasp": "查看開放式 Web 應用程式安全計劃 (OWASP) 的方法", + "page-upgrades-bug-bounty-points": "以太坊基金會也將基於以下提供獎勵:", + "page-upgrades-bug-bounty-points-error": "載入數據時出錯... 請刷新。", + "page-upgrades-bug-bounty-points-exchange": "積分兌換", + "page-upgrades-bug-bounty-points-loading": "載入數據中...", + "page-upgrades-bug-bounty-points-payout-desc": "以太坊基金會將用以太幣或 DAI 支付美元價值。", + "page-upgrades-bug-bounty-points-point": "1 積分", + "page-upgrades-bug-bounty-points-rights-desc": "以太坊基金會有修改此內容的權利,而無需發出事前通知。", + "page-upgrades-bug-bounty-points-usd": "2 USD", + "page-upgrades-bug-bounty-quality": "描述品質", + "page-upgrades-bug-bounty-quality-desc": ": 清晰, 描寫清楚提交件將獲得高獎勵", + "page-upgrades-bug-bounty-quality-fix": "修復品質(如果包含):明確描述如何修復問題的內容將獲得更高的獎勵。", + "page-upgrades-bug-bounty-quality-repro": "再現性的品質", + "page-upgrades-bug-bounty-quality-repro-desc": ":必須包含概念證明 (POC) 才有資格獲得獎勵。請包含測試程式碼、腳本和詳細說明。對我們來說,重現和驗證漏洞越容易,獎勵就越高。", + "page-upgrades-bug-bounty-questions": "有問題嗎?", + "page-upgrades-bug-bounty-rules": "閱讀規則", + "page-upgrades-bug-bounty-slogan": "漏洞懸賞計劃", + "page-upgrades-bug-bounty-specs": "共識層規範", + "page-upgrades-bug-bounty-execution-specs": "執行層規範", + "page-upgrades-bug-bounty-specs-docs": "規範文件", + "page-upgrades-bug-bounty-submit": "提交漏洞", + "page-upgrades-bug-bounty-submit-desc": "每發現一個有效的漏洞,你都將獲得獎勵。獎勵數量將根據嚴重程度而有所不同。嚴重性是基於對以太坊網路的影響和可能性、採用 OWASP 風險評級模型來計算。", + "page-upgrades-bug-bounty-subtitle": "透過尋找影響以太坊網路的協議、用戶端和 Solidity 漏洞,賺取高達 250,000 USD 並躋身排行榜。", + "page-upgrades-bug-bounty-title": "已開放供提交", + "page-upgrades-bug-bounty-title-1": "信標鏈", + "page-upgrades-bug-bounty-title-2": "分叉選擇", + "page-upgrades-bug-bounty-title-3": "Solidity 存款合約", + "page-upgrades-bug-bounty-title-4": "點對點網絡", + "page-upgrades-bug-bounty-type-1": "破壞安全性/最終性的漏洞", + "page-upgrades-bug-bounty-type-2": "阻斷服務 (DOS) 媒介", + "page-upgrades-bug-bounty-type-3": "不一致假設,例如誠實驗證者大數減少情況", + "page-upgrades-bug-bounty-type-4": "計算或參數不一致", + "page-upgrades-bug-bounty-types": "漏洞類型", + "page-upgrades-bug-bounty-validity": "適用範圍", + "page-upgrades-bug-bounty-validity-desc": "我們的漏洞懸賞計劃涵蓋端到端:從協議的健全性(例如區塊鏈共識模型、有線和點對點協議、權益證明等)及協議/實作合規性到網路安全和共識完整性。經典的用戶端安全性以及加密原語的安全性也是該計劃的一部分。如有疑問,請發送電子郵件至 bounty@ethereum.org 並詢問我們。你也可以直接向 bounty@ethereum.org 提交揭露/漏洞,在這種情況下,我們要求你使用我們的PGP 金鑰加密訊息", + "page-upgrades-bug-bounty-card-critical": "危急", + "page-upgrades-bug-bounty-card-critical-risk": "提交嚴重風險漏洞", + "page-upgrades-bug-bounty-card-h2": "中", + "page-upgrades-bug-bounty-card-high": "高", + "page-upgrades-bug-bounty-card-high-risk": "提交高風險漏洞", + "page-upgrades-bug-bounty-card-label-1": "高達 1,000 積分", + "page-upgrades-bug-bounty-card-label-2": "高達 2,000 USD", + "page-upgrades-bug-bounty-card-label-3": "高達 5,000 積分", + "page-upgrades-bug-bounty-card-label-4": "高達 10,000 USD", + "page-upgrades-bug-bounty-card-label-5": "高達 10,000 積分", + "page-upgrades-bug-bounty-card-label-6": "高達 50,000 USD", + "page-upgrades-bug-bounty-card-label-7": "高達 25,000 積分", + "page-upgrades-bug-bounty-card-label-8": "高達 250,000 USD", + "page-upgrades-bug-bounty-card-li-1": "低影響力,中等可能性", + "page-upgrades-bug-bounty-card-li-2": "中等影響力,低可能性", + "page-upgrades-bug-bounty-card-li-3": "高影響力,低可能性", + "page-upgrades-bug-bounty-card-li-4": "中等影響力,中等可能性", + "page-upgrades-bug-bounty-card-li-5": "低影響力,高可能性", + "page-upgrades-bug-bounty-card-li-6": "高影響力,中等可能性", + "page-upgrades-bug-bounty-card-li-7": "中等影響力,高可能性", + "page-upgrades-bug-bounty-card-li-8": "高影響力,高可能性", + "page-upgrades-bug-bounty-card-low": "低", + "page-upgrades-bug-bounty-card-low-risk": "提交低風險漏洞", + "page-upgrades-bug-bounty-card-medium-risk": "提交中等風險漏洞", + "page-upgrades-bug-bounty-card-subheader": "嚴重程度", + "page-upgrades-bug-bounty-card-subheader-2": "範例", + "page-upgrades-bug-bounty-card-text": "攻擊者將可能置節點於非正常狀態並使其有 1% 驗證者失敗接收率。", + "page-upgrades-bug-bounty-card-text-1": "攻擊者可以成功對一類節點(具有 4 個前導零字節位元組的對等 ID)進行日蝕攻擊", + "page-upgrades-bug-bounty-card-text-2": "攻擊者可以成功分割網路的大部分,而且攻擊者很容易觸發該漏洞", + "page-upgrades-bug-bounty-card-text-3": "攻擊者可以在大多數用戶端成功進行遠端程式碼執行,並且攻擊者很容易觸發該漏洞", + "page-upgrades-question-title": "常見問題", + "bug-bounty-faq-q1-title": "良好的漏洞提交應該是怎樣的?", + "bug-bounty-faq-q1-contentPreview": "查看品質漏洞提交的真實範例。", + "bug-bounty-faq-q1-content-1": "描述:使用未經驗證的區塊進行遠端阻斷服務攻擊", + "bug-bounty-faq-q1-content-2": "攻擊場景:攻擊者可以發送可能需要大量計算(最大 gasLimit)但沒有工作量證明的區塊。如果攻擊者連續發送區塊,攻擊者可能會迫使受害節點達到 100% 的中央處理器使用率。", + "bug-bounty-faq-q1-content-3": "影響:攻擊者可以濫用遠端節點上的中央處理器使用率,可能導致完全阻斷服務。", + "bug-bounty-faq-q1-content-4": "元件: Go 用戶端版本 v0.6.8", + "bug-bounty-faq-q1-content-5": "重現:傳送一個包含許多交易但沒有有效工作量證明的區塊到 Go 節點。", + "bug-bounty-faq-q1-content-6": "詳細資訊:區塊在方法 Process(Block, dontReact) 中進行驗證。此方法執行昂貴的中央處理器密集型任務,例如執行交易 (sm.ApplyDiff),然後驗證工作量證明 (sm.ValidateBlock())。這允許攻擊者發送可能需要大量計算(最大 gasLimit)但沒有工作量證明的區塊。如果攻擊者連續發送區塊,攻擊者可能會迫使受害節點達到 100% 中央處理器使用率。", + "bug-bounty-faq-q1-content-7": "修正:倒轉檢查的順序。", + "bug-bounty-faq-q2-title": "漏洞懸賞計劃有時間限制嗎?", + "bug-bounty-faq-q2-contentPreview": "否。", + "bug-bounty-faq-q2-content-1": "目前尚未設定結束日期。請參閱以太坊基金會部落格以了解最新消息。", + "bug-bounty-faq-q3-title": "懸賞是如何支付的?", + "bug-bounty-faq-q3-contentPreview": "獎勵用以太幣或 DAI 幣支付。", + "bug-bounty-faq-q3-content-1": "提交經過驗證後獎勵將用以太幣或 DAI 形式支付,通常需時幾天。當地法律要求我們索取你的身分證明。此外,我們還需要你的以太幣地址。", + "bug-bounty-faq-q4-title": "我能把我的獎勵捐給慈善機構嗎?", + "bug-bounty-faq-q4-contentPreview": "是的!", + "bug-bounty-faq-q4-content-1": "我們可以將你的獎勵捐贈給你選擇的知名慈善組織。", + "bug-bounty-faq-q5-title": "我報告了問題 / 漏洞,但尚未收到回應!", + "bug-bounty-faq-q5-contentPreview": "請等待數天以便有人回覆你提交的內容。", + "bug-bounty-faq-q5-content-1": "我們的目標是盡快回覆提交的內容。如果你在一兩天內沒有收到回覆,請隨時發送電子郵件至 bounty@ethereum.org。", + "bug-bounty-faq-q6-title": "我想匿名 / 我不想讓我的名字出現在排行榜上。", + "bug-bounty-faq-q6-contentPreview": "你可以這樣做,但可能會使你失去獲得獎勵資格。", + "bug-bounty-faq-q6-content-1": "匿名或使用筆名提交是可以的,但會使你失去獲得 以太幣/DAI 獎勵的資格。為了有資格獲得以太幣/DAI 的獎勵,我們需要你的真實姓名和身分證明。將你的賞金捐給慈善機構並不需要你的身分證明。", + "bug-bounty-faq-q6-content-2": "如果你不想你的名字/暱稱顯示在排行榜上,請告訴我們。", + "bug-bounty-faq-q7-title": "排行榜上的積分是甚麼?", + "bug-bounty-faq-q7-contentPreview": "每個發現的漏洞 / 問題都獲分配一個分數", + "bug-bounty-faq-q7-content-1": "每個發現的漏洞 / 問題都獲分配一個分數。懸賞獵人在我們的排行榜上按總積分排名。", + "bug-bounty-faq-q8-title": "你有 PGP 金鑰嗎?", + "bug-bounty-faq-q8-contentPreview": "是的。展開以查看詳情。", + "bug-bounty-faq-q8-content-1": "請使用 AE96 ED96 9E47 9B00 84F3 E17F E88D 3334 FA5F 6A0A", + "bug-bounty-faq-q8-PGP-key": "PGP 金鑰" +} diff --git a/src/intl/zh-tw/page-dapps.json b/src/intl/zh-tw/page-dapps.json index d0550287024..ea205a5a015 100644 --- a/src/intl/zh-tw/page-dapps.json +++ b/src/intl/zh-tw/page-dapps.json @@ -41,6 +41,7 @@ "page-dapps-choose-category": "選擇類別", "page-dapps-category-social": "社交媒體", "page-dapps-category-content": "內容", + "page-dapps-category-community": "社群", "page-dapps-category-messaging": "傳訊", "page-dapps-category-identity": "身份", "page-dapps-collectibles-benefits-1-description": "當藝術在以太坊上代幣化,所有權可以證明給所有人知道。你可以追蹤藝術作品從作者到目前持有人的旅程。可以避免偽造。", @@ -95,6 +96,7 @@ "page-dapps-dapp-description-loopring": "為快速交易打造的點對點平台。", "page-dapps-dapp-description-marble-cards": "以統一資源定位符為基礎創作並交易獨特數位卡牌。", "page-dapps-dapp-description-matcha": "搜尋數家交易所幫助你找到最佳價格。", + "page-dapps-dapp-description-meeds": "為分散式工作的時代而生的 Web3 社群中心。公平透明地獎勵重要貢獻者。", "page-dapps-dapp-description-mirror": "以 Web3 為本的強大發佈平台 Mirror,突破網上寫作的界限", "page-dapps-dapp-description-multichain": "終極的 web3 路由器。這是為任意跨鏈互動而開發的基礎設施。", "page-dapps-dapp-description-nifty-gateway": "在區塊鏈上購入頂尖藝術家、運動員、樂團及創作者之作品。", @@ -113,6 +115,7 @@ "page-dapps-dapp-description-rotki": "尊重你隱私的開源投資組合追蹤、分析、管理,及稅金報告工具。", "page-dapps-dapp-description-krystal": "一個能夠存取所有你最喜愛的去中心化金融服務的一站式平台。", "page-dapps-dapp-description-rarible": "創作、販賣及購買代幣化收藏品。", + "page-dapps-dapp-description-request-finance": "一套用於加密貨幣發票、薪資和支出的金融工具。", "page-dapps-dapp-description-rubic": "為使用者和去中心化應用程式而設的跨鏈技術聚合器。", "page-dapps-dapp-description-sablier": "即時流通資金。", "page-dapps-dapp-description-spatial": "建立個人的虛擬形象和 3D 世界", @@ -217,6 +220,7 @@ "page-dapps-marble-cards-logo-alt": "marble.cards 標誌", "page-dapps-async-logo-alt": "Async 標誌", "page-dapps-matcha-logo-alt": "Matcha 標誌", + "page-dapps-meeds-logo-alt": "Meeds 標誌", "page-dapps-metaverse-benefits-title": "元宇宙", "page-dapps-metaverse-benefits-description": "以太坊的哪些特點,讓元宇宙蓬勃發展?", "page-dapps-metaverse-benefits-1-title": "非同質化代幣", @@ -241,6 +245,7 @@ "page-dapps-ready-button": "開始", "page-dapps-ready-description": "選一個去中心化應用程式試試看", "page-dapps-ready-title": "準備好了嗎?", + "page-dapps-request-finance-logo-alt": "Request Finance 標誌", "page-dapps-rubic-logo-alt": "Rubic 標誌", "page-dapps-sablier-logo-alt": "Sablier 標誌", "page-dapps-set-up-a-wallet-button": "尋找錢包", @@ -281,5 +286,7 @@ "page-dapps-dapp-description-dodo": "DODO 是鏈上流動性提供者,採用了主動做市商 (PMM) 演算法。", "page-dapps-dodo-image-alt": "DODO 標誌", "page-dapps-dapp-description-artblocks": "Art Blocks 致力於將引人入勝的當代生成式藝術的藝術品帶入生活中", - "page-dapps-artblocks-image-alt": "Art Blocks 標誌" + "page-dapps-artblocks-image-alt": "Art Blocks 標誌", + "page-dapps-explore-title": "想瀏覽更多應用程式嗎?", + "page-dapps-explore": "查看數百種去中心化應用程式" } diff --git a/src/intl/zh-tw/page-developers-docs.json b/src/intl/zh-tw/page-developers-docs.json index daf007be35a..093bfa85052 100644 --- a/src/intl/zh-tw/page-developers-docs.json +++ b/src/intl/zh-tw/page-developers-docs.json @@ -20,6 +20,7 @@ "docs-nav-data-and-analytics": "資料與分析", "docs-nav-data-and-analytics-description": "區塊鏈資料如何總匯、組織及實作至去中心化應用程式", "docs-nav-data-availability": "資料可用性", + "docs-nav-data-availability-storage-strategies": "區塊鏈資料儲存策略", "docs-nav-dart": "Dart", "docs-nav-delphi": "Delphi", "docs-nav-deploying-smart-contracts": "部署智慧型合約", @@ -30,6 +31,7 @@ "docs-nav-development-frameworks-description": "令以太坊相關開發更為容易的工具", "docs-nav-development-networks": "開發網路", "docs-nav-development-networks-description": "本機區塊鏈環境,用於在部署前測試去中心化應用程式", + "docs-nav-dex-design-best-practice": "去中心化交易所 (DEX) 設計最佳做法", "docs-nav-dot-net": ".NET", "docs-nav-erc-20": "ERC-20:同質化代幣", "docs-nav-erc-721": "ERC-721:非同質化代幣", @@ -45,6 +47,7 @@ "docs-nav-gas": "Gas", "docs-nav-gas-description": "處理交易所需的算力,費用由交易發送者使用以太幣支付", "docs-nav-golang": "Golang", + "docs-nav-heuristics-for-web3": "Web3 的啟發法", "docs-nav-integrated-development-environments-ides": "整合開發環境 (IDE)", "docs-nav-integrated-development-environments-ides-description": "編寫去中心化應用程式的最佳環境", "docs-nav-intro-to-dapps": "去中心化應用程式簡介", diff --git a/src/intl/zh-tw/page-developers-index.json b/src/intl/zh-tw/page-developers-index.json index 302a8cf70ed..9f99d94e5f4 100644 --- a/src/intl/zh-tw/page-developers-index.json +++ b/src/intl/zh-tw/page-developers-index.json @@ -44,7 +44,7 @@ "page-developers-language-desc": "以慣用的語言使用 Ethereum", "page-developers-languages": "程式語言", "page-developers-learn": "學習 Ethereum 開發", - "page-developers-learn-desc": "參閱我們的文件,了解核心概念和以太坊技術堆棧", + "page-developers-learn-desc": "參閱我們的文件,深入了解核心概念和以太坊技術堆棧。", "page-developers-learn-tutorials": "透過教學課程學習", "page-developers-learn-tutorials-cta": "觀看教學課程", "page-developers-learn-tutorials-desc": "向經驗豐富的建置者逐步學習 Ethereum 開發", diff --git a/src/intl/zh-tw/page-developers-learning-tools.json b/src/intl/zh-tw/page-developers-learning-tools.json index c99ffd63f7b..05980a505c8 100644 --- a/src/intl/zh-tw/page-developers-learning-tools.json +++ b/src/intl/zh-tw/page-developers-learning-tools.json @@ -6,6 +6,10 @@ "page-learning-tools-browse-docs": "瀏覽文件", "page-learning-tools-capture-the-ether-description": "「捕捉以太」這個遊戲可以讓你破解以太坊智慧型合約,藉此學習安全議題。", "page-learning-tools-capture-the-ether-logo-alt": "捕捉以太標誌", + "page-learning-tools-node-guardians-description": "Node Guardians 是一個遊戲化的教育平台,讓 Web3 開發者透過奇幻主題任務沉浸其中,以掌握 Solidity、Cairo、Noir 和 Huff 的程式設計。", + "page-learning-tools-node-guardians-logo-alt": "Node Guardians 標誌", + "page-learning-tools-chainshot-description": "由講師教授的遠距以太坊開發者訓練營及額外課程。", + "page-learning-tools-chainshot-logo-alt": "ChainShot 標誌", "page-learning-tools-coding": "透過編寫程式學習", "page-learning-tools-coding-subtitle": "如果你偏好互動性高的學習體驗,這些工具會幫助你試用以太坊功能。", "page-learning-tools-consensys-academy-description": "線上以太坊開發者訓練營。", @@ -14,6 +18,8 @@ "page-learning-tools-buildspace-logo-alt": "_buildspace 標誌", "page-learning-tools-cryptozombies-description": "學習 Solidity,打造自己的殭屍遊戲。", "page-learning-tools-cryptozombies-logo-alt": "CryptoZombies 標誌", + "page-learning-tools-dapp-world-description": "包括課程、測驗、實作練習和每週競賽的區塊鏈技能提升生態系統。", + "page-learning-tools-dapp-world-logo-alt": "Dapp World 標誌", "page-learning-tools-documentation": "閱讀文件學習", "page-learning-tools-documentation-desc": "想了解更多嗎?請前往我們的文件,尋找需要的解釋。", "page-learning-tools-eth-dot-build-description": "一個教育性的 Web3 沙箱,包括拖放式的程式設計和開源的建構區塊。", @@ -26,10 +32,12 @@ "page-learning-tools-game-tutorials-desc": "邊玩邊學。這些教學在遊戲中解釋基礎知識。", "page-learning-tools-meta-desc": "網頁版程式設計工具和互動式學習經驗讓你試驗以太坊的開發環境。", "page-learning-tools-meta-title": "開發者學習工具", + "page-learning-tools-atlas-logo-alt": "Atlas 標誌", + "page-learning-tools-atlas-description": "使用 Atlas 整合開發環境在幾分鐘內編寫、測試和部署智慧型合約。", "page-learning-tools-questbook-description": "以自己的步調進行,透過建構了解 Web3.0 的教學", "page-learning-tools-questbook-logo-alt": "Questbook 標誌", "page-learning-tools-remix-description": "開發、部屬及管理以太坊智慧型合約,可按照 Learneth 插件的使用教學操作。", - "page-learning-tools-remix-description-2": "Remix、Replit 和 Replit 不僅僅是沙箱 — 開發者可以使用它们編寫、編譯和部署智慧型合約。", + "page-learning-tools-remix-description-2": "Remix、Replit、ChainIDE 和 Atlas 不僅僅是沙箱 — 開發者可以使用它們編寫、編譯和部署智慧型合約。", "page-learning-tools-replit-description": "一個可以自訂的以太坊開發環境,具備即時重新載入、錯誤檢查及絕佳的測試網支援。", "page-learning-tools-chainIDE-description": "透過 ChainIDE 編寫以太坊智慧型合約,開始你的 Web3 旅程。利用內建模板學習可以節省時間。", "page-learning-tools-chainIDE-logo-alt": "ChainIDE 標誌", @@ -46,6 +54,8 @@ "page-learning-tools-vyperfun-logo-alt": "Vyper.fun 標誌", "page-learning-tools-nftschool-description": "從技術層面探索非同質性代幣的進展。", "page-learning-tools-nftschool-logo-alt": "非同質性代幣學校標誌", + "page-learning-tools-pointer-description": "在有趣的互動教學中學習 Web3 開發技巧,並在過程中贏得加密貨幣獎勵", + "page-learning-tools-pointer-logo-alt": "Pointer 標誌", "page-learning-tools-platzi-description": "學習如何在 Web3 建立去中心化應用程式並精通所有成為區塊鏈開發者所需的技能。", "page-learning-tools-platzi-logo-alt": "Platzi 標誌", "page-learning-tools-alchemy-university-description": "透過課程、專案、和程式碼發展你的 Web3 職涯。", diff --git a/src/intl/zh-tw/page-developers-local-environment.json b/src/intl/zh-tw/page-developers-local-environment.json index 6b347907e29..161bed09dd0 100644 --- a/src/intl/zh-tw/page-developers-local-environment.json +++ b/src/intl/zh-tw/page-developers-local-environment.json @@ -30,6 +30,8 @@ "page-local-environment-setup-title": "設定你的本機開發環境", "page-local-environment-solidity-template-desc": "預先設置的 Solidity 智慧型合約 GitHub 模板。包括 Hardhat 本機網路、Waffle 測試、Ethers 錢包實作以及更多。", "page-local-environment-solidity-template-logo-alt": "Solidity 模板標誌", + "page-local-environment-truffle-desc": "Truffle 套件讓開發者能以輕鬆的方式將想法導入去中心化應用程式。", + "page-local-environment-truffle-logo-alt": "Truffle 標誌", "page-local-environment-waffle-desc": "最先進的智慧型合約測試區。可單獨使用,或是與 Scaffold-eth、Hardhat 一起使用。", "page-local-environment-waffle-logo-alt": "Waffle 標誌" } diff --git a/src/intl/zh-tw/page-layer-2.json b/src/intl/zh-tw/page-layer-2.json index 50507333fbb..68ea573822e 100644 --- a/src/intl/zh-tw/page-layer-2.json +++ b/src/intl/zh-tw/page-layer-2.json @@ -125,7 +125,7 @@ "boba-description": "Boba 是一種樂觀卷軸,最初從樂觀分叉而來。「樂觀」是一種擴容解決方案,旨在減少燃料費,提高交易吞吐量,並擴展智慧型合約的功能。", "base-description": "Base 是安全、低成本及開發者友善的以太坊二層網路,目標是帶領 10 億使用者進入 Web3。它是由 Coinbase 孵化,建構於開源 OP 堆棧上的以太坊二層網路。", "loopring-description": "路印 (Loopring) 是零知識證明卷軸的二層網路解決方案,旨在提供與以太坊主網相同的安全性保障,並大規模提升可擴展性:交易吞吐量增加 1000 倍,交易費減低至一層網路的 0.1%。", - "zksync-description": "zkSync 是一種零知識卷軸,目的是在不降低以太坊安全性及去中心化程度的情況下,對以太坊及其價值進行擴容,以促進主流採用。", + "zksync-description": "ZkSync 是一種零知識卷軸,目的是在不降低以太坊安全性及去中心化程度的情況下,對以太坊及其價值進行擴容,以促進主流採用。", "zkspace-description": "ZKSpace 平台由三個主要部分所組成:使用零知識證明卷軸技術建立的二層網路自動化做市商去中心化交易所(名為 ZKSwap);名為 ZKSquare 的支付服務;以及名為 ZKSea 的非同質化代幣交易市場。", "aztec-description": "Aztec 網路是第一個在以太坊上的私有零知識證明卷軸,使去中心化應用程式能存取隱私和擴張。", "starknet-description": "Starknet 是一個驗證卷軸二層網路。它不僅提供高流量、低燃料成本,并且保持了以太坊一層網路的安全等級。", @@ -133,5 +133,7 @@ "layer-2-ecosystem-portal": "生態系統相關入口網站", "layer-2-token-lists": "代幣清單", "layer-2-explore": "探索", - "page-dapps-ready-button": "開始" + "page-dapps-ready-button": "開始", + "layer-2-information": "資訊", + "layer-2-wallet-managers": "錢包管理工具" } diff --git a/src/intl/zh-tw/page-stablecoins.json b/src/intl/zh-tw/page-stablecoins.json index e8f360670a4..250ada73018 100644 --- a/src/intl/zh-tw/page-stablecoins.json +++ b/src/intl/zh-tw/page-stablecoins.json @@ -163,5 +163,6 @@ "makerdao-logo": "MakerDao 標誌", "matcha-logo": "Matcha 標誌", "summerfi-logo": "Summer.fi 標誌", - "uniswap-logo": "Uniswap 標誌" + "uniswap-logo": "Uniswap 標誌", + "page-stablecoins-go-to": "前往" } diff --git a/src/intl/zh-tw/page-staking.json b/src/intl/zh-tw/page-staking.json index fe420f40c97..be1bb3f6724 100644 --- a/src/intl/zh-tw/page-staking.json +++ b/src/intl/zh-tw/page-staking.json @@ -13,10 +13,10 @@ "comp-withdrawal-credentials-upgraded-1": "驗證者索引 {{validatorIndex}} 已準備開始接收酬勞!", "comp-withdrawal-credentials-upgraded-2": "鏈接至執行地址的提款憑證:", "comp-withdrawal-credentials-not-upgraded-1": "我們需要升級此驗證者。", - "comp-withdrawal-credentials-not-upgraded-1-testnet": "我們需要升級此 Holesky 測試網驗證者。", + "comp-withdrawal-credentials-not-upgraded-1-testnet": "這個 Holesky 測試網驗證者需要升級。", "comp-withdrawal-credentials-not-upgraded-2": "程式升級說明現已發佈於質押啟動面板", "comp-withdrawal-credentials-verify-mainnet": "主網中驗證", - "comp-withdrawal-credentials-verify-holesky": "Holesky 中驗證", + "comp-withdrawal-credentials-verify-holesky": "在 Holesky 上進行驗證", "page-staking-withdrawals-when": "已上線!", "page-staking-image-alt": "質押啟動面板的 Rhino 吉祥物圖像。", "page-staking-benefits-1-title": "賺取酬勞", @@ -152,7 +152,7 @@ "page-staking-launchpad-widget-mainnet-label": "主網", "page-staking-launchpad-widget-mainnet-start": "開始在主網上質押", "page-staking-launchpad-widget-span": "選擇網路", - "page-staking-launchpad-widget-p1": "在冒資金風險之前,單獨驗證者應在 Holesky 測試網測試它們的設定和營運技能。記住,選擇非主流用戶端非常重要,因為這可以改善網路的安全性並減低你的風險。", + "page-staking-launchpad-widget-p1": "單獨驗證者在冒險投入資金之前,應該在 Holesky 測試網上測試他們的設定和營運技能。請記得選擇一個非主流用戶端非常重要,因為這樣能夠提升網路的安全性並減少你面臨的風險。", "page-staking-launchpad-widget-p2": "如果你熟悉相關技能,你可以單獨使用質押啓動面板,透過指令介面來設定所需要的一切。", "page-staking-launchpad-widget-p3": "為了讓事情變得更簡單,請查看下面的一些工具和指南,它們可以幫助你使用質押啓動面板來輕鬆設定你的用戶端。", "page-staking-launchpad-widget-link": "軟體工具和指南", @@ -229,5 +229,8 @@ "page-staking-withdrawals-important-notices": "重要通知", "page-staking-withdrawals-important-notices-desc": "現在尚未提供提款服務,如欲瞭解更多,請閲讀以太坊 2 合併及合併後階段的常見問題。", "page-upgrades-merge-btn": "合併案的相關細節", - "subscribe-to-ef-blog": "訂閱以太坊基金會部落格,接收最新協議公告的電子郵件通知。" + "subscribe-to-ef-blog": "訂閱以太坊基金會部落格,接收最新協議公告的電子郵件通知。", + "page-staking-comparison-with-other-options": "與其他方案的比較", + "page-staking-any-amount": "任意數量", + "page-staking-testnet": "測試網" } diff --git a/src/intl/zh-tw/page-upgrades-get-involved.json b/src/intl/zh-tw/page-upgrades-get-involved.json index f3b83251abe..f9118495ef2 100644 --- a/src/intl/zh-tw/page-upgrades-get-involved.json +++ b/src/intl/zh-tw/page-upgrades-get-involved.json @@ -8,7 +8,7 @@ "page-upgrades-get-involved-bug-li": "規範不合規問題", "page-upgrades-get-involved-bug-li-2": "最終性致命錯誤", "page-upgrades-get-involved-bug-li-3": "阻斷服務 (DOS) 媒介", - "page-upgrades-get-involved-bug-li-4": "和更多...", + "page-upgrades-get-involved-bug-li-4": "以及更多...", "page-upgrades-get-involved-desc-1": "執行用戶端意味著你將積極使用以太坊。你的用戶端可幫助追蹤交易並檢查新區塊。", "page-upgrades-get-involved-desc-2": "如果你有以太幣,可以將其質押以成為驗證者並幫助保護網路安全。驗證者可以賺取以太幣獎勵。", "page-upgrades-get-involved-desc-3": "加入社群測試工作!在以太坊升級上線之前幫助進行測試、尋找錯誤並贏取獎勵。", diff --git a/src/intl/zh-tw/page-what-is-ethereum.json b/src/intl/zh-tw/page-what-is-ethereum.json index 72bd81e50ac..152ad9e9f88 100644 --- a/src/intl/zh-tw/page-what-is-ethereum.json +++ b/src/intl/zh-tw/page-what-is-ethereum.json @@ -3,7 +3,7 @@ "page-what-is-ethereum-alt-img-comm": "插圖:以太坊社群成員一起工作", "page-what-is-ethereum-alt-img-lego": "插圖:一隻手正在將樂高積木組成以太幣標誌", "page-what-is-ethereum-banking-card": "屬於所有人的銀行", - "page-what-is-ethereum-banking-card-desc": "並非所有人都能享有金融服務。但只要有網際網路連線,你就可以訪問以太坊,並使用以太坊上的借貸、借款或儲蓄產品。", + "page-what-is-ethereum-banking-card-desc": "並非每個人都能夠取得金融服務。只需要網際網路連線,你就可以使用以太坊以及建立在其上的借貸、借款和儲蓄產品。", "page-what-is-ethereum-build": "與以太坊一起打造新事物", "page-what-is-ethereum-build-desc": "如果你想在以太坊上建立專案,先閱讀文件、試試看教學,或是先查看你需要使用的工具。", "page-what-is-ethereum-censorless-card": "抗審查性", @@ -51,7 +51,7 @@ "page-what-is-ethereum-slide-1-desc-2": "以太坊和穩定幣簡化了向海外匯款的過程。相較於普通銀行在全球各地轉移資金可能需要幾個工作日甚至幾週,以太坊通常只需要幾分鐘,而且手續費只是總金額的一小部分。此外,進行高額交易不會收取額外費用,並且對匯款地點或原因不會有任何限制。", "page-what-is-ethereum-slide-2-title": "危機時刻的最快幫助", "page-what-is-ethereum-slide-2-desc-1": "如果你足夠幸運,在你生活的地方有值得信賴的機構提供多種銀行業務選擇,你可能認為它們提供的財務自由、安全和穩定是理所當然的。但對於世界上許多面臨政治壓迫或經濟困難的人來說,金融機構可能無法提供他們需要的保護或服務。", - "page-what-is-ethereum-slide-2-desc-2": "當戰爭、經濟災難或對公民自由的鎮壓影響委內瑞拉古巴阿富汗奈及利亞白俄羅斯烏克蘭的居民時,加密貨幣是保留金融機構最快且通常是唯一的途徑。1從這些例子中可以看出,當人們與外界隔絕時,像以太坊這樣的加密貨幣可以讓人們不受限制地參與全球經濟。此外,在當地貨幣因惡性通貨膨脹而崩潰時,穩定幣提供了一種保值的手段。", + "page-what-is-ethereum-slide-2-desc-2": "當戰爭、經濟災難或對公民自由的鎮壓影響委內瑞拉古巴阿富汗奈及利亞白俄羅斯烏克蘭的居民時,加密貨幣是保留金融機構最快且通常是唯一的途徑。1從這些例子中可以看出,當人們與外界隔絕時,像以太坊這樣的加密貨幣可以讓人們不受限制地參與全球經濟。此外,在當地貨幣因惡性通貨膨脹崩潰時,穩定幣提供了一種保值的手段。", "page-what-is-ethereum-slide-3-title": "賦予創作者權力", "page-what-is-ethereum-slide-3-desc-1": "僅在 2021 年,藝術家、音樂家、作家和其他創作者透過使用以太坊總共賺取了約 35 億美元。這使得以太坊成為最大的全球創作者平台之一,與 Spotify、YouTube 和 Etsy 並駕齊驅。了解詳情。", "page-what-is-ethereum-slide-4-title": "賦予遊戲玩家權力", From 6ea492247ea81a8e91f6c00b3e69bb42ca0a38ac Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:46:18 -0700 Subject: [PATCH 2/6] revert: rm unintentional file imports --- .../zh-tw/04) Exploring/nft/index.md | 114 -- .../zh-tw/05) Use Ethereum Pages/dao/index.md | 166 -- .../zh-tw/06) Use Cases/defi/index.md | 357 ---- .../06) Use Cases/smart-contracts/index.md | 82 - .../zh-tw/06) Use Cases/web3/index.md | 157 -- .../07) Staking Pages/staking/dvt/index.md | 91 - .../07) Staking Pages/staking/pools/index.md | 86 - .../07) Staking Pages/staking/saas/index.md | 95 - .../07) Staking Pages/staking/solo/index.md | 206 -- .../staking/withdrawals/index.md | 218 -- .../decentralized-identity/index.md | 191 -- .../zh-tw/08) Use cases 2/desci/index.md | 136 -- .../zh-tw/08) Use cases 2/refi/index.md | 81 - .../08) Use cases 2/social-networks/index.md | 106 - .../zh-tw/09) Learn Pages/bridges/index.md | 128 -- .../energy-consumption/index.md | 82 - .../zh-tw/09) Learn Pages/governance/index.md | 182 -- .../zh-tw/09) Learn Pages/security/index.md | 293 --- .../zero-knowledge-proofs/index.md | 214 -- .../index.md | 73 - .../guides/how-to-id-scam-tokens/index.md | 97 - .../how-to-revoke-token-access/index.md | 73 - .../guides/how-to-swap-tokens/index.md | 67 - .../guides/how-to-use-a-bridge/index.md | 70 - .../guides/how-to-use-a-wallet/index.md | 88 - .../10) Guides and Quizzes/guides/index.md | 27 - .../zh-tw/11) Roadmap/eips/index.md | 79 - .../11) Roadmap/roadmap/beacon-chain/index.md | 75 - .../roadmap/future-proofing/index.md | 38 - .../zh-tw/11) Roadmap/roadmap/index.md | 119 -- .../zh-tw/11) Roadmap/roadmap/merge/index.md | 229 --- .../roadmap/merge/issuance/index.md | 134 -- .../11) Roadmap/roadmap/scaling/index.md | 51 - .../11) Roadmap/roadmap/security/index.md | 48 - .../roadmap/user-experience/index.md | 36 - .../roadmap/account-abstraction/index.md | 126 -- .../roadmap/danksharding/index.md | 95 - .../12) Roadmap 2/roadmap/dencun/index.md | 120 -- .../zh-tw/12) Roadmap 2/roadmap/pbs/index.md | 51 - .../roadmap/secret-leader-election/index.md | 44 - .../roadmap/single-slot-finality/index.md | 66 - .../roadmap/statelessness/index.md | 103 - .../roadmap/verkle-trees/index.md | 66 - .../developers/docs/accounts/index.md | 136 -- .../developers/docs/blocks/index.md | 152 -- .../developers/docs/dapps/index.md | 96 - .../developers/docs/evm/index.md | 78 - .../developers/docs/evm/opcodes/index.md | 174 -- .../developers/docs/gas/index.md | 139 -- .../developers/docs/index.md | 25 - .../developers/docs/intro-to-ether/index.md | 78 - .../docs/intro-to-ethereum/index.md | 116 -- .../developers/docs/networks/index.md | 149 -- .../developers/docs/transactions/index.md | 221 -- .../developers/docs/web2-vs-web3/index.md | 62 - .../developers/docs/wrapped-eth/index.md | 65 - .../community/code-of-conduct/index.md | 77 - .../community/events/index.md | 24 - .../community/get-involved/index.md | 135 -- .../community/grants/index.md | 47 - .../community/language-resources/index.md | 153 -- .../community/online/index.md | 50 - .../community/research/index.md | 399 ---- .../community/support/index.md | 104 - .../nodes-and-clients/archive-nodes/index.md" | 80 - .../nodes-and-clients/bootnodes/index.md" | 31 - .../client-diversity/index.md" | 109 - .../docs/nodes-and-clients/index.md" | 307 --- .../nodes-and-clients/light-clients/index.md" | 61 - .../node-architecture/index.md" | 57 - .../nodes-as-a-service/index.md" | 419 ---- .../nodes-and-clients/run-a-node/index.md" | 480 ----- .../docs/consensus-mechanisms/index.md" | 92 - .../pos/attack-and-defense/index.md" | 163 -- .../pos/attestations/index.md" | 92 - .../pos/block-proposal/index.md" | 76 - .../consensus-mechanisms/pos/faqs/index.md" | 172 -- .../consensus-mechanisms/pos/gasper/index.md" | 52 - .../docs/consensus-mechanisms/pos/index.md" | 99 - .../consensus-mechanisms/pos/keys/index.md" | 96 - .../pos/pos-vs-pow/index.md" | 69 - .../pos/rewards-and-penalties/index.md" | 90 - .../pos/weak-subjectivity/index.md" | 39 - .../docs/consensus-mechanisms/poa/index.md" | 79 - .../docs/consensus-mechanisms/pow/index.md" | 109 - .../consensus-mechanisms/pow/mining/index.md" | 81 - .../dagger-hashimoto/index.md" | 334 ---- .../mining/mining-algorithms/ethash/index.md" | 1014 ---------- .../pow/mining/mining-algorithms/index.md" | 37 - .../developers/docs/apis/backend/index.md" | 207 -- .../developers/docs/apis/javascript/index.md" | 295 --- .../developers/docs/apis/json-rpc/index.md" | 1771 ----------------- .../block-explorers/index.md" | 257 --- .../docs/data-and-analytics/index.md" | 55 - .../docs/development-networks/index.md" | 83 - .../developers/docs/ethereum-stack/index.md" | 61 - .../developers/docs/frameworks/index.md" | 147 -- .../developers/docs/ides/index.md" | 71 - .../docs/programming-languages/dart/index.md" | 30 - .../programming-languages/delphi/index.md" | 56 - .../programming-languages/dot-net/index.md" | 86 - .../programming-languages/golang/index.md" | 85 - .../docs/programming-languages/index.md" | 29 - .../docs/programming-languages/java/index.md" | 65 - .../javascript/index.md" | 73 - .../programming-languages/python/index.md" | 90 - .../docs/programming-languages/ruby/index.md" | 61 - .../docs/programming-languages/rust/index.md" | 64 - .../developers/docs/storage/index.md" | 217 -- .../zh-tw/19) Learn Pages 2/glossary/index.md | 499 ----- .../zh-tw/19) Learn Pages 2/history/index.md | 624 ------ .../docs/smart-contracts/anatomy/index.md" | 655 ------ .../docs/smart-contracts/compiling/index.md" | 282 --- .../docs/smart-contracts/deploying/index.md" | 81 - .../developers/docs/smart-contracts/index.md" | 112 -- .../docs/smart-contracts/languages/index.md" | 323 --- .../docs/smart-contracts/libraries/index.md" | 117 -- .../docs/smart-contracts/security/index.md" | 580 ------ .../smart-contracts/composability/index.md" | 76 - .../formal-verification/index.md" | 283 --- .../docs/smart-contracts/testing/index.md" | 308 --- .../docs/smart-contracts/upgrading/index.md" | 168 -- .../docs/smart-contracts/verifying/index.md" | 107 - .../zh-tw/21) Whitepaper/whitepaper/index.md | 517 ----- .../developers/docs/bridges/index.md | 156 -- .../index.md | 118 -- .../docs/data-availability/index.md | 84 - .../dex-design-best-practice/index.md | 220 -- .../heuristics-for-web3/index.md | 138 -- .../developers/docs/design-and-ux/index.md | 85 - .../developers/docs/mev/index.md | 221 -- .../developers/docs/oracles/index.md | 433 ---- .../developers/docs/standards/index.md | 59 - .../docs/standards/tokens/erc-1155/index.md | 146 -- .../docs/standards/tokens/erc-20/index.md | 172 -- .../docs/standards/tokens/erc-223/index.md | 197 -- .../docs/standards/tokens/erc-4626/index.md | 211 -- .../docs/standards/tokens/erc-721/index.md | 244 --- .../docs/standards/tokens/erc-777/index.md | 77 - .../developers/docs/standards/tokens/index.md | 39 - .../developers/docs/scaling/index.md" | 114 -- .../docs/scaling/optimistic-rollups/index.md" | 269 --- .../developers/docs/scaling/plasma/index.md" | 175 -- .../docs/scaling/sidechains/index.md" | 73 - .../docs/scaling/state-channels/index.md" | 67 - .../docs/scaling/validium/index.md" | 165 -- .../docs/scaling/zk-rollups/index.md" | 259 --- .../data-structures-and-encoding/index.md | 32 - .../patricia-merkle-trie/index.md | 263 --- .../data-structures-and-encoding/rlp/index.md | 163 -- .../data-structures-and-encoding/ssz/index.md | 149 -- .../web3-secret-storage-definition/index.md | 189 -- .../developers/docs/networking-layer/index.md | 155 -- .../network-addresses/index.md | 38 - .../networking-layer/portal-network/index.md | 83 - .../zh-tw/26) Miscellaneous/about/index.md | 127 -- .../26) Miscellaneous/enterprise/index.md | 162 -- .../enterprise/private-ethereum/index.md | 26 - .../26) Miscellaneous/foundation/index.md | 40 - .../contributing/design-principles/index.md | 93 - .../contributing/design/index.md | 77 - .../27) Contributing/contributing/index.md | 117 -- .../translation-program/faq/index.md | 119 -- .../how-to-translate/index.md | 89 - .../contributing/translation-program/index.md | 90 - .../mission-and-vision/index.md | 25 - .../translation-program/resources/index.md | 45 - .../translators-guide/index.md | 293 --- .../adding-desci-projects/index.md | 44 - .../adding-developer-tools/index.md | 61 - .../contributing/adding-exchanges/index.md | 40 - .../adding-glossary-terms/index.md | 26 - .../contributing/adding-layer-2s/index.md | 97 - .../contributing/adding-products/index.md | 100 - .../adding-staking-products/index.md | 176 -- .../contributing/adding-wallets/index.md | 80 - .../contributing/content-resources/index.md | 32 - .../design/adding-design-resources/index.md | 69 - .../contributing/quizzes/index.md | 62 - 179 files changed, 27097 deletions(-) delete mode 100644 public/content/translations/zh-tw/04) Exploring/nft/index.md delete mode 100644 public/content/translations/zh-tw/05) Use Ethereum Pages/dao/index.md delete mode 100644 public/content/translations/zh-tw/06) Use Cases/defi/index.md delete mode 100644 public/content/translations/zh-tw/06) Use Cases/smart-contracts/index.md delete mode 100644 public/content/translations/zh-tw/06) Use Cases/web3/index.md delete mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/dvt/index.md delete mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/pools/index.md delete mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/saas/index.md delete mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/solo/index.md delete mode 100644 public/content/translations/zh-tw/07) Staking Pages/staking/withdrawals/index.md delete mode 100644 public/content/translations/zh-tw/08) Use cases 2/decentralized-identity/index.md delete mode 100644 public/content/translations/zh-tw/08) Use cases 2/desci/index.md delete mode 100644 public/content/translations/zh-tw/08) Use cases 2/refi/index.md delete mode 100644 public/content/translations/zh-tw/08) Use cases 2/social-networks/index.md delete mode 100644 public/content/translations/zh-tw/09) Learn Pages/bridges/index.md delete mode 100644 public/content/translations/zh-tw/09) Learn Pages/energy-consumption/index.md delete mode 100644 public/content/translations/zh-tw/09) Learn Pages/governance/index.md delete mode 100644 public/content/translations/zh-tw/09) Learn Pages/security/index.md delete mode 100644 public/content/translations/zh-tw/09) Learn Pages/zero-knowledge-proofs/index.md delete mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-create-an-ethereum-account/index.md delete mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-id-scam-tokens/index.md delete mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-revoke-token-access/index.md delete mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-swap-tokens/index.md delete mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-bridge/index.md delete mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-wallet/index.md delete mode 100644 public/content/translations/zh-tw/10) Guides and Quizzes/guides/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/eips/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/beacon-chain/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/future-proofing/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/merge/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/merge/issuance/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/scaling/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/security/index.md delete mode 100644 public/content/translations/zh-tw/11) Roadmap/roadmap/user-experience/index.md delete mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/account-abstraction/index.md delete mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/danksharding/index.md delete mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/dencun/index.md delete mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/pbs/index.md delete mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/secret-leader-election/index.md delete mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/single-slot-finality/index.md delete mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/statelessness/index.md delete mode 100644 public/content/translations/zh-tw/12) Roadmap 2/roadmap/verkle-trees/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/accounts/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/blocks/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/dapps/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/opcodes/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/gas/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ether/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ethereum/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/networks/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/transactions/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/web2-vs-web3/index.md delete mode 100644 public/content/translations/zh-tw/13) Foundational Docs/developers/docs/wrapped-eth/index.md delete mode 100644 public/content/translations/zh-tw/14) Community Pages/community/code-of-conduct/index.md delete mode 100644 public/content/translations/zh-tw/14) Community Pages/community/events/index.md delete mode 100644 public/content/translations/zh-tw/14) Community Pages/community/get-involved/index.md delete mode 100644 public/content/translations/zh-tw/14) Community Pages/community/grants/index.md delete mode 100644 public/content/translations/zh-tw/14) Community Pages/community/language-resources/index.md delete mode 100644 public/content/translations/zh-tw/14) Community Pages/community/online/index.md delete mode 100644 public/content/translations/zh-tw/14) Community Pages/community/research/index.md delete mode 100644 public/content/translations/zh-tw/14) Community Pages/community/support/index.md delete mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/archive-nodes/index.md" delete mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/bootnodes/index.md" delete mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/client-diversity/index.md" delete mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/index.md" delete mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/light-clients/index.md" delete mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/node-architecture/index.md" delete mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/nodes-as-a-service/index.md" delete mode 100644 "public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/run-a-node/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attestations/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/block-proposal/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/faqs/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/gasper/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/keys/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md" delete mode 100644 "public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md" delete mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/poa/index.md" delete mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/index.md" delete mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/index.md" delete mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md" delete mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md" delete mode 100644 "public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/backend/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/javascript/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/json-rpc/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/block-explorers/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/development-networks/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ethereum-stack/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/frameworks/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ides/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dart/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/delphi/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dot-net/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/golang/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/java/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/javascript/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/python/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/ruby/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/rust/index.md" delete mode 100644 "public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/storage/index.md" delete mode 100644 public/content/translations/zh-tw/19) Learn Pages 2/glossary/index.md delete mode 100644 public/content/translations/zh-tw/19) Learn Pages 2/history/index.md delete mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/anatomy/index.md" delete mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/compiling/index.md" delete mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/deploying/index.md" delete mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/index.md" delete mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/languages/index.md" delete mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/libraries/index.md" delete mode 100644 "public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/security/index.md" delete mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/composability/index.md" delete mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/formal-verification/index.md" delete mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/testing/index.md" delete mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/upgrading/index.md" delete mode 100644 "public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/verifying/index.md" delete mode 100644 public/content/translations/zh-tw/21) Whitepaper/whitepaper/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/bridges/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/blockchain-data-storage-strategies/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/dex-design-best-practice/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/heuristics-for-web3/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/mev/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/oracles/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-1155/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-20/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-223/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-4626/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-721/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-777/index.md delete mode 100644 public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/index.md delete mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/index.md" delete mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/optimistic-rollups/index.md" delete mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/plasma/index.md" delete mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/sidechains/index.md" delete mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/state-channels/index.md" delete mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/validium/index.md" delete mode 100644 "public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/zk-rollups/index.md" delete mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/index.md delete mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md delete mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/rlp/index.md delete mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/ssz/index.md delete mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md delete mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/index.md delete mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/network-addresses/index.md delete mode 100644 public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/portal-network/index.md delete mode 100644 public/content/translations/zh-tw/26) Miscellaneous/about/index.md delete mode 100644 public/content/translations/zh-tw/26) Miscellaneous/enterprise/index.md delete mode 100644 public/content/translations/zh-tw/26) Miscellaneous/enterprise/private-ethereum/index.md delete mode 100644 public/content/translations/zh-tw/26) Miscellaneous/foundation/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/design-principles/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/design/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/faq/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/how-to-translate/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/mission-and-vision/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/resources/index.md delete mode 100644 public/content/translations/zh-tw/27) Contributing/contributing/translation-program/translators-guide/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-desci-projects/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-developer-tools/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-exchanges/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-glossary-terms/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-layer-2s/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-products/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-staking-products/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/adding-wallets/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/content-resources/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/design/adding-design-resources/index.md delete mode 100644 public/content/translations/zh-tw/28) Contributing 2/contributing/quizzes/index.md diff --git a/public/content/translations/zh-tw/04) Exploring/nft/index.md b/public/content/translations/zh-tw/04) Exploring/nft/index.md deleted file mode 100644 index d36e25d70a2..00000000000 --- a/public/content/translations/zh-tw/04) Exploring/nft/index.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: 非同質化代幣 (NFT) -description: 以太坊生態系非同質化代幣概要 -lang: zh-tw -template: use-cases -emoji: ":frame_with_picture:" -sidebarDepth: 2 -image: /images/infrastructure_transparent.png -alt: 全息投影顯示的以太幣標誌。 -summaryPoint1: 一種用以太坊資產來呈現任何獨特事物的方式。 -summaryPoint2: 非同質化代幣賦予了內容創作者前所未有的強大力量。 -summaryPoint3: 由建置於以太坊區塊鏈上的智慧型合約提供支援。 ---- - -## 什麼是非同質化代幣? {#what-are-nfts} - -非同質化代幣是一種**獨一無二**的代幣。<0> 每個非同質化代幣都有不同的屬性(非同質性),它們的稀缺性是可以驗證的。 非同質化代幣與[以太幣](/glossary/#ether)和其他基於以太坊的代幣(例如 USDC)不同,後者的每一個代幣都一樣的,具有相同的特性(「同質化」)。 你不會在乎你錢包內的其中一張鈔票(以太幣),因為它們都一樣且價值相同。 但你_確實會_在意你自己持有的特定非同質化代幣,因為它們不同於其他的資產,全都有各自的屬性(非同質化)。 - -每個非同質化代幣的獨特性使藝術品、收藏品,甚至房地產等等事物能夠代幣化,即一個特定的唯一非同質化代幣對應到現實世界的一些特定且獨一無二的物品或數位物品。 資產的所有權在以太坊[區塊鏈](/glossary/#blockchain)上被公開驗證。 - - - -## 資產網路 {#internet-of-assets} - -非同質化代幣和以太坊解決了網際網路上現存的某些問題。 隨著一切變得越來越數位化,有需求以不受中心組織控制的方式來複製實體物品的屬性,例如稀缺性、唯一性和所有權證明。 舉例來說,透過非同質化代幣,你可以在所有基於以太坊的應用程式上擁有某個音樂 mp3 檔 的所有權,不必綁定於單一公司特定的音樂 App 上,如 Spotify 或 Apple Music。 你可以擁有可出售或交換的社交媒體帳號,且該帳號**無法被平臺提供者任意奪走**。 - -相較於我們大多數人今天使用的網際網路,非同質化代幣網際網路的特色如下... - -### 比較 {#nft-comparison} - -| 非同質化代幣網際網路 | 目前的網際網路 | -| --------------------------------------------------------------------------------- | -------------------------------------------------- | -| **你擁有自己的資產!**只有你才可以出售或交換這些資產。 | **你向某些組織借用資產時**,這些資產可能被奪走。 | -| 非同質化代幣具有**數位獨特性**,每個非同質化代幣皆獨一無二。 | **往往無法區分複製品和正品**。 | -| 非同質化代幣的所有權儲存在區塊鏈上,任何人都可**公開驗證**該所有權。 | 數位物品的所有權紀錄儲存在**由機構控制**的伺服器上,必須在機構同意後才能獲取所有權紀錄。 | -| 非同質化代幣是以太坊上的[智能合約](/glossary/#smart-contract)。 這表示它們**可以直接在以太坊上的其他智能合約**和應用程式上使用! | 擁有數位物品的公司通常**需要自己的「封閉平台 (walled garden)」基礎架構**。 | -| 內容**創作者可以在任何地點出售自己的作品**,還能打入全球市場。 | 創作者依賴其使用的平台所提供的基礎架構和發佈通路。 這些通常會受到使用條款和**地理限制**的約束。 | -| 非同質化代幣創作者**可保有對自己作品的所有權**,並將版稅直接寫入非同質化代幣的智能合約。 | **音樂串流服務等平台分到大部分的銷售利潤**。 | - -## 非同質化代幣有哪些用途? {#nft-use-cases} - -非同質化代幣有許多用途,包括: - -- 證明你參加過某活動 -- 證明你完成一堂課程 -- 可擁有的遊戲物品 -- 數位藝術 -- 現實資產代幣化 -- 證明你的線上身分 -- 限制內容存取 -- 票務 -- 去中心化的網際網路網域名稱 -- [去中心化金融](/glossary/#defi)的抵押品 - -或許你是位藝術家,想透過非同質化代幣分享你的作品,同時不失去對藝術品的控制權,並且不會因中介而損失收益。 你可以建立一份新合約,並明訂非同質化代幣的數量、屬性,以及連到某些特定藝術品的連結。 作為藝術家,**你可以將您應得的版稅寫入智能合約**(如:每當非同質化代幣被轉移時,支付銷售價格的 5% 給合約擁有者)。 你可以隨時證明該非同質化代幣由您建立,因為您擁有部署該合約的[錢包](/glossary/#wallet)。 你的買家可輕易證明他們擁有賣家收藏品的**正版非同質化代幣**,因為他們的錢包[地址](/glossary/#address)與賣家智能合約中的代幣相關聯。 他們可以在以太坊生態系統中使用非同質化代幣,並可信任代幣的真實性。 - - -
探索、購買或建立你個人的非同質化代幣藝術品/收藏品……
- - 探索非同質化代幣藝術品 - -
- -又或者以體育賽事的門票為例, 如同**賽事主辦者可以決定要販售幾張門票**,非同質化代幣的創作者也可以決定要發行幾份複製品。 有時可能是完全相同的複製品,例如 5000 張普通門票; 有時可能會製作好幾種極為類似,但各自略有不同的複製品,例如指定席的票券。 此類票券可以在不需要給票務員付款的情況下進行點對點買賣,買家可以隨時檢查合約地址,以確保票券的真實性。 - -在 ethereum.org 上,**非同質化代幣被用來證明大家對我們的 Github 儲存庫做出了有意義的貢獻**(對網站進行編程、撰寫或修改文章等等)、翻譯我們的文字内容,或參加了我們的社群電話會議,以及我們甚至擁有專屬的非同質化代幣域名。 如果你對 ethereum.org 有貢獻,你可以領取[出席證明協定 (POAP)](/glossary/#poap) 非同質化代幣。 某些加密貨幣聚會使用 POAP 作為入場門票。 [深入了解如何貢獻](/contributing/#poap)。 - -![ethereum.org POAP](./poap.png) - -此網站也有一個由非同質化代幣提供支援的替代網域名稱:**ethereum.eth**。 我們的 `.org` 位址是由網域名稱系統 (DNS) 供應商集中管理,而 ethereum`.eth` 則是透過以太坊名稱服務 (ENS) 於以太坊註冊, 為我們所有,且由我們管理。 [查看我們的以太坊名稱服務記錄](https://app.ens.domains/name/ethereum.eth) - -[更多以太坊名稱服務相關資訊](https://app.ens.domains) - - - -## 非同質化代幣如何運作? {#how-nfts-work} - -與以太坊區塊鏈上的任何數位物品一樣,非同質化代幣是透過一種稱爲「智慧型合約」的基於以太坊的特殊電腦程式所建立。 這些合約會遵循特定的規則,如 [ERC-721](/glossary/#erc-721) 或 [ERC-1155](/glossary/#erc-1155) 標準,這些規則決定了合約的用途。 - -非同質化代幣智慧型合約的一些關鍵用途: - -- **建立非同質化代幣:**能製造新的非同質化代幣。 -- **分配所有權:**透過將非同質化代幣連結到特定的以太坊地址來追蹤其擁有者。 -- **為每一個非同質化代幣分配一個 ID:**每一個非同質化代幣都擁有一個獨一無二的編號。 此外,通常還會附加一些額外信息(元數據),描述該非同質化代幣所代表的含義。 - -當人們「建立」或「鑄造」非同質化代幣時,他們主要是在告訴智慧型合約將特定非同質化代幣的所有權賦予他們。 該資訊被安全和公開地儲存在區塊鏈中。 - -此外,合約創作者可以添加額外的規則。 可以限制某種非同質化代幣的製造數量或者決定每當非同質化代幣易手時都應獲得一小筆版稅。 - -### 非同質化代幣的安全性 {#nft-security} - -以太坊的安全性來自[權益證明](/glossary/#pos)。 以太坊從經濟性的角度抑制惡意行為,這讓以太坊得以防竄改。 這也讓非同質化代幣得以成真。 一旦包含你的非同質化代幣交易的[區塊](/glossary/#block)[最終化](/glossary/#finality),攻擊者要對其作出變更,就得花費數百萬以太幣。 任何運行以太坊軟體的人皆能立即偵測到對非同質化代幣進行的欺詐性篡改,且惡意行為者也會遭到經濟處罰及驅逐。 - -與非同質化代幣有關的安全問題最常與釣魚詐騙、智慧型合約漏洞或使用者錯誤(如無意間洩漏私密金鑰)有關,所以良好的錢包安全性對非同質化代幣持有者十分重要。 - - - 更多安全相關資訊 - - -## 了解更多 {#further-reading} - -- [非同質化代幣入門指南](https://linda.mirror.xyz/df649d61efb92c910464a4e74ae213c4cab150b9cbcc4b7fb6090fc77881a95d) – _Linda Xie,2020 年 1 月_ -- [Etherscan 的非同質化代幣追蹤器](https://etherscan.io/nft-top-contracts) -- [ERC-721 代幣標準](/developers/docs/standards/tokens/erc-721/) -- [ERC-1155 代幣標準](/developers/docs/standards/tokens/erc-1155/) -- [熱門非同質化代幣應用程式和工具](https://www.ethereum-ecosystem.com/blockchains/ethereum/nfts) - -## 其他資源 {#other-resources} - -- [NFTScan](https://nftscan.com/) - - - - diff --git a/public/content/translations/zh-tw/05) Use Ethereum Pages/dao/index.md b/public/content/translations/zh-tw/05) Use Ethereum Pages/dao/index.md deleted file mode 100644 index 718a8a2c57c..00000000000 --- a/public/content/translations/zh-tw/05) Use Ethereum Pages/dao/index.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: 去中心化自治組織 (DAO) -description: 以太坊上的去中心化自治組織概要 -lang: zh-tw -template: use-cases -emoji: ":handshake:" -sidebarDepth: 2 -image: /images/use-cases/dao-2.png -alt: 在對提案投票的去中心化自治組織代表。 -summaryPoint1: 沒有中心化領導的成員共有社群。 -summaryPoint2: 一個與網路上陌生人合作的安全方式。 -summaryPoint3: 一個將資產投入特定事業的安全場所。 ---- - -## 什麼是去中心化自治組織 {#what-are-daos} - -去中心化自治組織為一種集體擁有,並致力於共同使命的組織。 - -去中心化自治組織使我們不需信任一個良善的領導者來管理資金或經營,便能與世界各地志趣相投的人們共事。 沒有執行長能夠衝動使用資金,也沒有財務長可以作假帳。 取而代之的是,由基於區塊鏈上程式碼所制定的規則來定義組織如何運作以及如何使用資金。 - -組織擁有自己的資金庫,未經團體核准,任何人都無權使用。 決策經由提案和投票來治理,以確保每位組織成員都能發聲,且任何事都在[鏈上](/glossary/#on-chain)進行,公開透明。 - -## 為何我們需要去中心化自治組織? {#why-dao} - -要和他人合作創立涉及經費和金錢的組織,你必須高度信任你的合夥人。 但你很難信任一個只在網路上互動過的人。 使用去中心化自治組織,你不必信任團體中的每個人,只需要相信 100% 透明、任何人都能驗證的去中心化自治組織程式碼。 - -這開啟了許多全球協作與合作的新機會。 - -### 比較 {#dao-comparison} - -| 去中心化自治組織 | 傳統組織 | -| ------------------------- | --------------------------- | -| 通常是扁平組織,而且完全民主。 | 通常等級嚴明。 | -| 任何更改都需要成員投票決定後才能實施。 | 視組織結構而定,可能由部分人進行決策,也可能投票表決。 | -| 不需要可信的中間人便能自動統計投票、執行結果。 | 如果允許投票,會在內部計票,而且投票結果必須人工執行。 | -| 以去中心化方式自動提供服務(例如慈善基金的分配)。 | 需要人工處理,或集中管控自動處理,易受操縱。 | -| 所有活動皆完全公開透明。 | 活動通常是隱密進行,公開程度有限。 | - -### 去中心化自治組織範例 {#dao-examples} - -為了幫助你了解,以下略舉幾個去中心化自治組織的使用範例: - -- **慈善機構** – 你可以接受來自全世界任何人的捐贈,並投票決定要資助的事業。 -- **共同擁有權** – 你可以購買實體或虛擬資產,且組織成員可以對如何使用資產進行投票。 -- **風險投資和資助** – 你可以成立風險基金,透過該基金匯集投資資本並投票決定要進行的風險投資。 後續收益可以分配給相應的去中心化自治組織成員。 - - - -## 去中心化自治組織如何運作? {#how-daos-work} - -去中心化自治組織的基礎為其[智慧型合約](/glossary/#smart-contract),該合約定義組織的規則,並對該團體的資金庫進行規範。 一旦在以太坊上部署合約,除非投票通過,否則不能修改規則。 任何不符合程式碼規則和邏輯的行為都會失效。 由於資金庫也是以智慧型合約定義,因此任何人都無法不經團體核准而挪用資金。 這意味著去中心化自治組織不需要中心化管理機構。 相反地,團體會共同做出決定,而付款會在投票通過之後自動獲得授權。 - -之所以能夠做到這一點,是因為智慧型合約一旦部署於以太坊,就無法被篡改。 一切都是公開的,只要有人修改程式碼(去中心化自治組織的規則)就會被發現。 - -## 以太坊與去中心化自治組織 {#ethereum-and-daos} - -以太坊為去中心化自治組織提供了極佳的基礎,原因如下: - -- 以太坊本身的共識足夠去中心化,同時建立已久,足以讓組織信任其網路。 -- 智慧型合約程式碼部署後便無法修改,即使是所有人亦然。 這使得去中心化自治組織可以完全按照程式設定的規則運作。 -- 智慧型合約可以發送/接收資金。 如果少了這點,你就需要可信的中間人來管理團體的資金。 -- 事實證明,比起競爭,以太坊社群更趨向合作,使得最佳做法和支援系統得以快速發展。 - -## 去中心化自治組織的治理 {#dao-governance} - -治理去中心化自治組織時有許多考量,例如投票及提案該如何運作。 - -### 授權 {#governance-delegation} - -委託類似去中心化自治組織版本的代議民主。 代幣持有者向自我提名、並承諾管理協定且掌握最新消息的使用者委託選票。 - -#### 知名案例 {#governance-example} - -[以太坊名稱服務](https://claim.ens.domains/delegate-ranking) – 以太坊名稱服務持有者可將其選票委託給參與活動的社群成員,以代表他們。 - -### 自動交易治理 {#governance-example} - -在許多去中心化自治組織中,如達法定人數的成員投票同意,交易將自動執行。 - -#### 知名案例 {#governance-example} - -[Nouns](https://nouns.wtf) – 在去中心化組織 Nouns 中,如票數達法定數量且大多數票投票同意,只要不被創辦人所否決,交易就會自動執行。 - -### 多簽治理 {#governance-example} - -雖然去中心化自治組織可有成千上萬的投票成員,資金可存放在一個由 5-20 名受信任且通常資訊公開(有社群所知的公開身份)的活躍社群成員共管的[錢包](/glossary/#wallet)中。 投票後,[多簽](/glossary/#multisig)簽署人會執行社群的意願。 - -## 去中心化自治組織相關法律 {#dao-laws} - -1977 年,懷俄明州創造了有限責任公司制度,以保護企業家並限定其責任。 更近期,懷俄明州首創去中心化自治組織相關法律,給予去中心化自治組織法律地位。 目前,懷俄明州、佛蒙特州以及維京群島皆建立某種形式的去中心化自治組織相關法律。 - -### 知名案例 {#law-example} - -[CityDAO](https://citydao.io) – CityDAO 透過懷俄明州去中心化自治組織的相關法律購買了黃石國家公園附近 40 英畝的地。 - -## 去中心化自治組織成員 {#dao-membership} - -去中心化自治組織的成員有多種模式。 成員可以決定投票方式和去中心化自治組織的其他重要事務。 - -### 代幣型成員 {#token-based-membership} - -通常完全[無需許可](/glossary/#permissionless),視所用的代幣而定。 這類治理代幣大部分都能在[去中心化交易所](/glossary/#dex)自由交易,無需許可。 其他少部分則必須透過提供流動性或其他某些「工作量證明」來賺取。 無論是哪一種方式,只要持有代幣就能獲得投票權。 - -_通常用於治理廣泛的去中心化協定及/或代幣本身。_ - -#### 知名案例 {#token-example} - -[MakerDAO](https://makerdao.com) – MakerDAO 的代幣 MKR 在去中心化交易所廣泛提供,且任何人皆可買進投票權來決定 Maker 協定的未來。 - -### 股份型成員 {#share-based-membership} - -股份型去中心化自治組織擁的許可制程度更高,但仍然相當公開。 任何潛在的成員都可以申請加入去中心化自治組織,通常以代幣或工作的形式提供有價值的貢獻。 股份代表直接投票權及所有權。 成員可以隨時帶著自己所佔的資金庫股份退出。 - -_通常用於關係較為緊密、以人為中心的組織,例如慈善機構、勞工團體、投資俱樂部等, 也可以治理協定及代幣。_ - -#### 知名案例 {#share-example} - -[MolochDAO](http://molochdao.com/) – MolochDAO 致力於資助以太坊專案。 想加入為成員必須提出申請,以便團體評估你是否具備必要的專業知識和資本來對潛在的受資助者作出明智判斷。 你無法直接在公開市場購買加入該去中心化自治組織的資格。 - -### 信譽型成員 {#reputation-based-membership} - -信譽代表參與證明,並能授予去中心化自治組織的投票權。 不同於代幣型或股份型成員,信譽型去中心化自治組織不會將所有權轉讓給貢獻者。 信譽不能購買、移轉或委託;去中心化自治組織成員必須透過參與來獲得信譽。 鏈上投票無需許可,潛在成員可以自由提出加入去中心化自治組織的申請,並要求獲得信譽和代幣作為其貢獻的獎勵。 - -_通常用於協定和[去中心化應用程式](/glossary/#dapp)的去中心化開發及治理,但也非常適合各種組織,如慈善機構、勞工團體、投資俱樂部等。_ - -#### 知名案例 {#reputation-example} - -[DXdao](https://DXdao.eth.limo) – DXdao 是一個全球主權聯合組織,自 2019 年以來一直致力於建構與治理去中心化協定和應用程式。 它利用信譽型治理和[全息共識](/glossary/#holographic-consensus)來協調和管理資金,這意味著沒有人可以透過金錢來影響其未來或治理決策。 - -## 參與/建立去中心化自治組織 {#join-start-a-dao} - -### 加入去中心化自治組織 (DAO) {#join-a-dao} - -- [以太坊社群去中心化自治組織](/community/get-involved/#decentralized-autonomous-organizations-daos) -- [DAOHaus 的去中心化自治組織清單](https://app.daohaus.club/explore) -- [Tally.xyz 的去中心化自治組織清單](https://www.tally.xyz) - -### 建立去中心化自治組織 {#start-a-dao} - -- [使用 DAOHaus 建立去中心化自治組織](https://app.daohaus.club/summon) -- [使用 Tally 建立一個治理者型去中心化自治組織](https://www.tally.xyz/add-a-dao) -- [建立由 Aragon 支援的去中心化自治組織](https://aragon.org/product) -- [建立 colony](https://colony.io/) -- [使用 DAOstack 全息共識建立去中心化自治組織](https://alchemy.daostack.io/daos/create) - -## 延伸閱讀 {#further-reading} - -### 去中心化自治組織相關文章 {#dao-articles} - -- [什麼是去中心化自治組織?](https://aragon.org/dao)– [Aragon](https://aragon.org/) -- [去中心化自治組織之家](https://wiki.metagame.wtf/docs/great-houses/house-of-daos) – [Metagame](https://wiki.metagame.wtf/) -- [何謂去中心化自治組織?它有何用途?](https://daohaus.substack.com/p/-what-is-a-dao-and-what-is-it-for)– [DAOhaus](https://daohaus.club/) -- [如何創立由去中心化自治組織支援的數位社群](https://daohaus.substack.com/p/four-and-a-half-steps-to-start-a) – [DAOhaus](https://daohaus.club/) -- [什麼是去中心化自治組織?](https://coinmarketcap.com/alexandria/article/what-is-a-dao)– [Coinmarketcap](https://coinmarketcap.com) -- [什麼是全息共識?](https://medium.com/daostack/holographic-consensus-part-1-116a73ba1e1c)- [DAOstack](https://daostack.io/) -- [Vitalik,《去中心化自治組織並非法人團體:去中心化在自治組織裡的重要之處》](https://vitalik.eth.limo/general/2022/09/20/daos.html) -- [去中心化自治組織、去中心化自治公司、去中心化應用程式等:不完整術語指引](https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide) - [以太坊部落格](https://blog.ethereum.org) - -### 影片 {#videos} - -- [什麼是加密貨幣世界的去中心化自治組織?](https://youtu.be/KHm0uUPqmVE) -- [一個去中心化自治組織是否能建立一座城市?](https://www.ted.com/talks/scott_fitsimones_could_a_dao_build_the_next_great_city)– [TED](https://www.ted.com/) - - - - diff --git a/public/content/translations/zh-tw/06) Use Cases/defi/index.md b/public/content/translations/zh-tw/06) Use Cases/defi/index.md deleted file mode 100644 index 53f63389e32..00000000000 --- a/public/content/translations/zh-tw/06) Use Cases/defi/index.md +++ /dev/null @@ -1,357 +0,0 @@ ---- -title: 去中心化金融 (DeFi) -description: 以太坊生態系之去中心化金融概要 -lang: zh-tw -template: use-cases -emoji: ":money_with_wings:" -image: /images/use-cases/defi.png -alt: 以樂高積木製作的以太幣標誌。 -sidebarDepth: 2 -summaryPoint1: 現行金融系統的全球開放性替代方案。 -summaryPoint2: 讓你借款、儲蓄、投資、交易和進行更多應用的產品。 -summaryPoint3: 基於所有人都可以編寫的開放原始碼技術。 ---- - -去中心化金融是專為網際網路時代建構的開放式全球金融系統,可取代不透明、遭到嚴密控制、以幾十年前的基礎設施和流程維繫的系統, 讓你有能力控制及監管自己的資金, 觸及全球市場,並獲得本地貨幣或銀行以外的替代選項。 去中心化金融產品向所有擁有網際網路連線的人開放金融服務,同時主要是由使用者控制和維護。 到目前為止,已有價值數百億的加密貨幣透過去中心化金融應用程式流通,而且這個數字每天都還在成長。 - -## 何謂去中心化金融? {#what-is-defi} - -「去中心化金融」是任何可以使用以太坊的人(也就是任何擁有網際網路連線的人)都可以存取的金融產品與服務的通稱。 有了去中心化金融,市場能隨時保持開放,沒有中心化的機關可以封鎖付款或讓你無法企及任何產品或服務。 傳統金融服務不但速度緩慢,還可能出現人為錯誤,現在改由任何人都能檢查和審省的程式碼來自動處理,作業更為安全。 - -加密經濟正在迅速發展,提供了放貸、借款、做多/放空、賺取利息等業務的管道。 精通加密經濟的阿根廷人已經在運用去中心化金融來擺脫嚴重的通貨膨脹, 企業也開始運用去中心化金融服務來即時發放員工薪資, 有些人甚至在不需要證明個人身分的情況下,就獲得及償還了數百萬美元的貸款。 - - - -## 去中心化金融與傳統金融 {#defi-vs-tradfi} - -了解去中心化金融潛力的一種最佳方法是了解目前存在的問題。 - -- 有些人沒有開立銀行帳戶或使用金融服務的途徑。 -- 無法獲得金融服務可能會讓人找不到工作。 -- 金融服務可以讓你無法收款。 -- 傳統金融服務還有一項隱藏費用,就是你的個人資料。 -- 政府及中心化機構可以任意關閉市場。 -- 交易時間通常受到特定時區的營業時間所限。 -- 資金移轉可能因為內部人工流程而花上好幾天的時間。 -- 金融服務存在溢價,因為中間機構需要分一杯羹。 - -### 比較 {#defi-comparison} - -| 去中心化金融 | 傳統金融 | -| ------------------------------- | ------------------------------------- | -| 你的資金由你自己持有。 | 你的資金由企業持有。 | -| 由你自行管控資金流向及使用方式。 | 你必須相信企業不會不當管理你的資金,例如借貸給高風險借款人。 | -| 移轉資金只需要幾分鐘的時間。 | 支付可能因為人工處理而得花上幾天時間。 | -| 交易活動為匿名方式。 | 金融活動與你的身分綁定。 | -| 去中心化金融對所有人開放。 | 使用金融服務必須申請。 | -| 市場永遠開放。 | 員工需要休息,因此市場會關閉。 | -| 奠基於透明的系統──所有人都能查看產品資料及檢查系統運作狀況。 | 金融機構完全是黑箱作業:你不能要求查看他們的放貸記錄、資產管理記錄等資訊。 | - - - 探索去中心化金融應用程式 - - -## 一切要從比特幣開始說起…… {#bitcoin} - -從許多方面來說,比特幣是第一款去中心化金融應用程式。 比特幣能讓你真正擁有及掌控價值,並傳送到世界上任何一個角落。 它提供了一種方式,讓眾多互不信任的人同意使用一套帳戶帳本,而無需透過可信賴的中間機構。 比特幣對所有人開放,而且沒有人有權改變其規則。 比特幣的規則,例如其稀有度及開放性,是這項技術與生俱來的特色。 在傳統金融中,政府可以印鈔讓你的存款貶值,企業也可以關閉市場,而比特幣與傳統金融截然不同。 - -以太坊便是以此概念為基礎。 和比特幣一樣,以太坊的規則不能任意更改,而且所有人都能使用。 但它進一步使用[智慧型合約](/glossary/#smart-contract)讓這種數位貨幣可程式化,使其功能不侷限於存放及傳送價值。 - - - -## 可程式化的貨幣 {#programmable-money} - -這聽起來很奇怪……「我幹嘛把我的錢程式化?」 不過,這只是以太坊代幣的預設功能之一。 所有人都可以在付款時加入程式邏輯。 因此,你可以結合比特幣的控制權和安全性,以及金融機構提供的各種金融服務, 用加密貨幣來做一些比特幣辦不到的事,例如借貸、安排付款、投資指數型基金等等。 - - -
如果你是剛開始使用以太坊,請嘗試我們推薦的去中心化金融應用程式。
- - 探索去中心化金融應用程式 - -
- -## 你可以用去中心化金融來做什麼? {#defi-use-cases} - -大多數金融服務都有去中心化的替代方案。 但以太坊也為打造嶄新的金融產品創造了許多機會。 這個清單還在不斷成長。 - -- [匯款到世界各地](#send-money) -- [讓資金在全球流通](#stream-money) -- [取得穩定幣](#stablecoins) -- [抵押借款](#lending) -- [無抵押借款](#flash-loans) -- [開始儲蓄加密貨幣](#saving) -- [交易代幣](#swaps) -- [擴大投資組合](#investing) -- [為構想募資](#crowdfunding) -- [購買保險](#insurance) -- [管理投資組合](#aggregators) - - - -### 快速匯款到世界各地 {#send-money} - -作為一種區塊鏈,以太坊的核心功能是安全地在全球傳送交易。 和比特幣一樣,以太坊可以讓跨境匯款像傳送電子郵件一樣簡單。 只需從錢包輸入收款人的[以太坊名稱服務名稱](/glossary/#ens)(例如 bob.eth)或其帳戶地址,你的款項就會在幾分鐘內直接到達對方的帳戶(通常情況下)。 要收發款項,你需要一個[錢包](/wallets/)。 - - - 查看支付去中心化應用程式 - - -#### 讓資金在全球流通…… {#stream-money} - -你可以運用以太坊流通資金。 以太坊可以讓你在幾秒之內支付某人的薪資,供對方隨時取用; 或快速租用物品,如置物櫃或電動滑板車。 - -如果你因為價值波動而不想傳送或串流[以太幣](/glossary/#ether),以太坊上也有替代貨幣:[穩定幣](/glossary/#stablecoin)。 - - - -### 取得穩定幣 {#stablecoins} - -對許多金融產品和一般支出而言,加密貨幣的價格波動是一大問題。 去中心化金融社群以穩定幣解決了這個問題。 穩定幣的價值與其他資產掛鈎,通常是美元這類熱門貨幣。 - -Dai、USDC 等穩定幣的價值和美元的差距通常維持在幾美分之內, 使穩定幣非常適合用於收入或零售。 在南美洲,因為政府發行的貨幣有極大的不確定性,許多人已經在使用穩定幣保護自己的儲蓄。 - - - 深入了解穩定幣 - - - - -### 借款 {#lending} - -向去中心化供應商借款主要有兩種方式。 - -- 點對點,即借款者直接向特定貸款者借款。 -- 資金池,即貸款者將資金(流動性)注入資金池,而借款者從資金池借款。 - - - 查看借款去中心化應用程式 - - -選擇去中心化貸款有許多優勢…… - -#### 在保有隱私的情況下借貸 {#borrowing-privacy} - -今天,資金的借與貸都是圍繞著相關個人進行。 銀行在放款前,需要知道你是不是真的有能力償還貸款。 - -去中心化借貸則不需任何一方表明身分即可運作。 然而,借款者必須提供抵押品,如果無法償還,抵押品就會自動歸貸款者所有。 有些貸款人甚至接受以[非同質化代幣](/glossary/#nft)作為抵押品。 非同質化代幣為獨特資產(如繪畫)的契據。 [更多非同質化代幣相關資訊](/nft/) - -透過這種方式,不必接受徵信調查或提供私人資訊也能借款。 - -#### 獲得全球資金 {#access-global-funds} - -選擇去中心化借貸服務時,你可以借入來自全球各地的存款,而不僅止於你選擇的銀行或機構所持有的資金。 這讓貸款更容易取得,也能改善利率。 - -#### 納稅效益 {#tax-efficiencies} - -借款可以讓你獲得需要的資金,而無需出售以太幣(此行為會被課稅)。 但是,你可以使用以太幣作為抵押品以借貸穩定幣。 如此一來,你便可以在保有以太幣的情況下,獲得所需的現金流。 穩定幣是需要現金時的最佳選擇,因為穩定幣的價值不像以太幣一樣易於波動。 [深入了解穩定幣](#stablecoins) - -#### 閃電貸 {#flash-loans} - -閃電貸是一種較具實驗性的去中心化借貸形式,可以讓你在沒有抵押品或不提供個人資訊的情況下借款。 - -目前非技術人員還無法大規模運用這種模式,但我們已經看出它未來流行的潛力。 - -閃電貸的運作基礎為放款和還款發生在同一次交易內。 如果無法還款,則交易會被還原,就像什麼都沒有發生過一樣。 - -經常使用的資金會注入流動資產池(用於放貸的龐大資金池)。 如果資金在某個時點無人使用,就創造了一個機會,讓人借用此資金來拓展業務,並在借入資金的幾乎同一個時點全額償還。 - -這意味著必須在量身打造的交易中納入大量邏輯。 舉個簡單的例子:某個人透過閃電貸,以某個價格借入一大筆資產,轉而在價格更高的其他交易所出售。 - -所以在這一筆交易中,發生了以下情況: - -- 你以 $1.00 的價格,從 A 交易所借入 X 數量的 $asset -- 你在 B 交易所以 $1.10 的價格售出 X 數量的 $asset -- 接著,你到 A 交易所償還貸款 -- 你賺得了扣除交易手續費後的利潤 - -如果 B 交易所的供給量急速下降,使用者無法購足量額來償還原始貸款,那麼這筆交易就會失敗。 - -要在傳統金融體系內完成以上操作,你需要鉅額資金。 這種財產創造策略只有已經擁有財富的人才能操作。 閃電貸的例子告訴我們,未來「有錢」不見得是「賺錢」的先決條件。 - - - 深入了解閃電貸 - - - - -### 開始儲蓄加密貨幣 {#saving} - -#### 放貸 {#lending} - -你可以透過放貸加密貨幣來賺取利息,並即時看到資金成長。 目前的利息比你當地的銀行高出許多(如果你運氣夠好,可以使用銀行服務的話)。 例如: - -- 你借出 100 Dai(一種[穩定幣](/stablecoins/))給某個類似 Aave 的產品。 -- 你會收到 100 Aave Dai (aDai),此代幣代表著你借出的 Dai。 -- 你的 aDai 會按利率增加,你可以看到錢包裡的餘額在增長。 視[年利率](/glossary/#apr)而定,你的錢包餘額可能會在幾天,甚至幾小時後變成 100.1234! -- 你可以隨時提取和你的 aDai 餘額等額的一般 Dai。 - - - 查看借貸去中心化應用程式 - - -#### 無損樂透 {#no-loss-lotteries} - -無損樂透(如 PoolTogether)是一種有趣而創新的儲蓄方法。 - -- 你用 100 Dai 代幣購買 100 張樂透。 -- 你會收到 100 個 plDai,代表你的 100 張樂透。 -- 如果其中有一張樂透中獎,你的 plDai 餘額會按獎金池的金額增加。 -- 如果沒有中獎,你的 100 個 plDai 會滾動進入下週的抽獎。 -- 你可以隨時提取相當於 plDai 餘額的一般 Dai。 - -和上述放貸案例一樣,獎金池的資金來自於放貸樂透存款產生的所有利息。 - - - 嘗試 PoolTogether - - - - -### 兌換代幣 {#swaps} - -以太坊有成千上萬種代幣。 去中心化交易所 (DEX) 可以讓你隨時交易不同代幣。 你永遠不會放棄對資產的控制權。 這就像造訪其他國家時到外幣收兌處換匯一樣。 但去中心化金融版本的收兌處永不關閉, 去中心化金融市場全天候開放,其技術可保證永遠有人受理交易。 - -例如,如果你想使用無損樂透 PoolTogether(參閱前文),你需要 Dai 或 USDC 這類代幣。 這些去中心化交易所可讓你將以太幣兌換成這些代幣,完成交易後再兌換回來。 - - - 查看代幣交易所 - - - - -### 進階交易 {#trading} - -對希望獲得更大控制權的交易者而言,還有一些進階選項可以運用。 限價單、永續債、信用交易等都可以實現。 透過去中心化交易,你可以獲得全球流動性,市場永不關閉,而且你始終能控制自己的資產。 - -使用中央化交易所時,你必須在交易前先存入資產,並相信交易所會妥善看管你的資產。 資產存入交易所后就要承擔風險,因為中央化交易所往往是駭客鎖定的目標。 - - - 查看交易去中心化應用程式 - - - - -### 擴大投資組合 {#investing} - -以太坊上有一些資金管理產品可以根據你選擇的策略來擴展你的投資組合。 這是自動化作業,對所有人開放,而且不需要管理人員來分一杯羹。 - -[DeFi Pulse 指數基金 (DPI)](https://defipulse.com/blog/defi-pulse-index/) 就是個很好的例子。 此基金會自動再平衡,確保你的投資組合永遠包含市值最高的去中心化金融代幣。 你無需親力親為處理任何細節,而且可以隨時提取資金。 - - - 查看投資去中心化應用程式 - - - - -### 為構想募資 {#crowdfunding} - -以太坊是群眾募資的理想平台: - -- 潛在的資助者可以來自任何地方──以太坊及其代幣對世界上所有人開放。 -- 過程完全透明,因此籌資者可以證明已經募集了多少資金。 你甚至可以在經過一段時間後追蹤資金的運用情況。 -- 募資者可以設定自動退款條件,例如在特定截止期限前未達到最低金額時。 - - - 查看群眾募資去中心化應用程式 - - -#### 平方募資法 {#quadratic-funding} - -以太坊是一款開放原始碼軟體,迄今有許多工作是由社群資助。 這也催生了一種有趣的新型募資模式:平方募資法。 這種募資法有機會改善我們未來為各種公共產品募資的方式。 - -平方募資法可以確保獲得最多資金的是需求最高的計畫案, 換言之,就是能夠改善大多數人生活的計畫案。 其運作方式如下: - -1. 募得的資金會注入一個配比池。 -2. 啟動一輪公開募資。 -3. 參與者可以透過捐款來表達對某個計畫案的需求。 -4. 募資階段結束後,將配比池的資金分配給計畫案。 需求最高的計畫案可以從配比池獲得最多資金。 - -也就是說,假設計畫案 A 獲得了 100 筆 $1 的捐贈,計畫案 B 獲得了一筆 $10,000 的捐贈,則最終計畫案 A 獲得的資金會多於計畫案 B(具體取決於配比池的規模)。 - - - 深入了解平方募資法 - - - - -### 保險 {#insurance} - -去中心化保險的目標是使保險更加便宜、理賠更快速,同時更為透明。 隨著自動化程度的提高,保險價格可以更加低廉,理賠也可以更加快速。 用以決定索賠的資料完全透明。 - -和其他軟體一樣,以太坊產品也可能受到錯誤或入侵的威脅, 因此目前這個領域有許多保險產品將重點放在保護使用者不會損失資金上。 然而,若干專案開始涵蓋生活中可能遇到的各種大小意外保障。 Etherisc 的農作物保險就是個很好的例子,這項產品的目標在於[保護肯亞小農對抗乾旱及洪災](https://blog.etherisc.com/etherisc-teams-up-with-chainlink-to-deliver-crop-insurance-in-kenya-137e433c29dc)。 去中心化保險可以為買不起傳統保險的農民提供更實惠的保障。 - - - 查看保險去中心化應用程式 - - - - -### 彙總工具與投資組合管理工具 {#aggregators} - -有了這麼多服務,你需要找個方法來追蹤所有投資、貸款和交易。 目前有許多產品可以幫助你集中協調所有去中心化金融活動。 這就是去中心化金融開放架構的魅力所在。 團隊可以建立介面供你檢視各產品的餘額並使用其功能。 深入探索去中心化金融之際,你會發現這種工具極為實用。 - - - 查看投資組合去中心化應用程式 - - - - -## 去中心化金融如何運作? {#how-defi-works} - -去中心化金融使用加密貨幣及智慧型合約來提供服務,不需透過中間機構。 在今日的金融體系下,金融機構是交易的保證人。 你的資金是透過金融機構流通,因此賦予了這些機構巨大的權利。 此外,世界上還有數十億人甚至無法使用銀行帳戶。 - -在去中心化金融中,智慧型合約在交易中取代了的金融機構。 智慧型合約是一種以太坊帳戶,可以持有資金並根據特定條件發送/退還資金。 智慧型合約上線後就沒有人可以篡改,它會永遠依照設定的方式運作。 - -一份用來發放津貼或零用錢的合約可以設定為每週五從 A 帳戶匯款至 B 帳戶。 只要 A 帳戶還有所需的資金,合約就會持續執行。 沒有人能篡改合約,將 C 帳戶設為收款人藉以竊取資金。 - -合約也會公開,供所有人檢查及審核。 這意味著不良合約通常很快就會受到社群監控。 - -確實,這也意味著目前需要仰賴以太坊社群中能閲讀程式碼的更為精通技術的成員。 以開放原始碼為基礎的社群會約束開發者,但這種需求會隨著時間而趨緩,因為智慧型合約會變得越來越容易閲讀,同時也有其他可以證明程式碼可信度的方法誕生。 - -## 以太坊及去中心化金融 {#ethereum-and-defi} - -以太坊為去中心化金融提供了良好的基礎,原因包括: - -- 以太坊或部署在以太坊上的智慧型合約不屬於任何人所有──這讓所有人都有機會使用去中心化金融, 也意味著沒有人可以變更規則。 -- 所有去中心化金融產品都使用著相同的語言:以太坊。 這意味著許多產品可以合作無間地共同運作。 你可以在某個平台上出借代幣,然後透過完全不同的應用程式,在不同的市場中兌換帶有利息的代幣。 這就像可以將銀行的忠誠度點數兌現。 -- 代幣和加密貨幣全都建立在以太坊這個共享帳本上──追蹤交易和所有權全都交給以太坊處理。 -- 以太坊可以實現完全的金融自由──大多數產品不會保管你的資金,控制權完全操之在己。 - -你可以把去中心化金融想成好幾層: - -1. 區塊鏈:以太坊包含了交易記錄和帳戶狀態。 -2. 資產:[以太幣](/eth/)及其他代幣(貨幣)。 -3. 協定:提供功能的[智慧型合約](/glossary/#smart-contract),例如實現去中心化資產借貸的服務。 -4. [應用程式](/dapps/):我們用以管理及存取協定的產品。 - -注意:很多去中心化金融使用 [ERC-20 標準](/glossary/#erc-20)。 去中心化金融應用程式會使用一種稱為包裝以太幣(WETH) 的以太幣包裝程式。 [了解更多關於包裝以太幣的資訊](/wrapped-eth)。 - -## 建構去中心化金融 {#build-defi} - -去中心化金融是一場開放原始碼運動。 去中心化金融協議和應用程式都是開放的,你可以自由檢視、分叉並進行各種創新。 因為採用分層堆疊結構(共享相同的基礎區塊鏈及資產),你可以結合和配對不同協定,開啟獨特的機會組合。 - - - 關於建構去中心化應用程式 - - -## 了解更多 {#further-reading} - -### 去中心化金融資料 {#defi-data} - -- [DeFi Prime](https://defiprime.com/) -- [DeFi Llama](https://defillama.com/) - -### 去中心化金融文章 {#defi-articles} - -- [去中心化金融新手指南](https://blog.coinbase.com/a-beginners-guide-to-decentralized-finance-defi-574c68ff43c4) – _Sid Coelho-Prabhu,2020 年 1 月 6 日_ - -### 影片 {#videos} - -- [Finematics - 去中心化金融教育](https://finematics.com/) – _關於去中心化金融的影片_ -- [The Defiant](https://www.youtube.com/playlist?list=PLaDcID4s1KronHMKojfjwiHL0DdQEPDcq) - _去中心化金融基本知識:在這個偶爾讓人感到困惑的領域裡邁出第一步,你所需要知道的一切。_ -- [加密貨幣白板講解](https://youtu.be/17QRFlml4pA) _- 何謂去中心化金融?_ - -### 社群 {#communities} - -- [DeFi Llama Discord 伺服器](https://discord.defillama.com/) -- [DeFi Pulse Discord 伺服器](https://discord.gg/Gx4TCTk) diff --git a/public/content/translations/zh-tw/06) Use Cases/smart-contracts/index.md b/public/content/translations/zh-tw/06) Use Cases/smart-contracts/index.md deleted file mode 100644 index aa311811493..00000000000 --- a/public/content/translations/zh-tw/06) Use Cases/smart-contracts/index.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: 智慧型合約 -description: 智慧型合約的非技術性簡介 -lang: zh-tw ---- - -# 智慧型合約簡介 {#introduction-to-smart-contracts} - -智慧型合約是以太坊應用程式層的基本構成要素。 它們是一種儲存在[區塊鏈](/glossary/#blockchain)上的電腦程式,會遵守「如果某事發生,則執行某程式」的邏輯,且保證會依照程式碼定義好的規則執行,智慧型合約一經建立則無法變更。 - -Nick Szabo 率先提出「智慧型合約」一詞。 他在 1994 年撰寫了[這個概念](https://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/smart.contracts.html),並在 1996 年撰寫了[《探索智慧型合約可以做什麼》](https://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/smart_contracts_2.html)。 - -Szabo 設想了一種數位市場,無需可信的中介,即能透過自動化、[加密安全](/glossary/#cryptography)的流程實現交易和業務功能。 以太坊上的智慧型合約讓此一願景付諸實踐。 - -觀看 Finematics 講解智慧型合約: - - - -## 傳統合約內的信任 {#trust-and-contracts} - -傳統合約最大的問題之一是需要可信的個人來監督合約執行結果。 - -例如: - -Alice 和 Bob 進行一場自行車比賽。 Alice 和 Bob 打賭 10 美金,賭她會鸁。 而 Bob 堅信自己會鸁得比賽,因此同意打賭。 結果,Alice 把 Bob 遠遠抛在身後,她顯然鸁了。 但 Bob 拒絕支付賭注,聲稱 Alice 一定是做弊。 - -這個搞笑的範例說明了非智慧型協議會發生的問題。 即使已符合協議的條件(即,你是比賽的獲勝者),你還得相信對方會履行協議(也就是支付賭注)。 - -## 數位販賣機 {#vending-machine} - -用簡單的比喻來說,智慧型合約就像一台自動販賣機,只要提供特定的輸入,就保證會得到預先設定好的輸出。 - -- 你選擇一個商品 -- 販賣機顯示價格 -- 你付款給販賣機 -- 販賣機確認你是否投入正確的金額 -- 自動販賣機掉出你要的商品 - -自動販賣機只在所有要求都符合時,才會掉出你想要的商品。 如果你沒有選擇商品或是投入足額的錢,自動販賣機便不會掉出你要的商品。 - -## 自動執行 {#automation} - -智慧型合約的主要好處在於當特定條件成立時,它便會確定執行非模糊的程式碼。 你不需要等真人來詮釋或協調結果。 因此無需可信的中介。 - -例如,你可以撰寫為孩子代管資金的智慧型合約,讓他們過了特定日期後才能提領該資金。 如果他們想在到期日前提領資金,智慧型合約便不會執行。 你也可以撰寫一份智慧型合約,當你付錢給汽車經銷商後,合約便會自動發給你一張數位版的車輛所有權證明。 - -## 可預測的結果 {#predictability} - -傳統合約的模糊之處在於它們有賴於真人詮釋和履約。 舉例來說,兩名法官可能會對同一張合約保持不同見解,這就造成判決不一致,繼而產生不同結果。 智慧型合約消除了這種可能性。 相反地,智慧型合約完全依合約程式碼內所寫條件執行。 完全的意思是指,只要提供相同的條件,智慧型合約就會產生相同的結果。 - -## 公開的記錄 {#public-record} - -智慧型合約對於審計和追蹤也非常有用。 由於以太坊的智慧型合約寫在公共區塊鏈上,因此任何人都能立即追蹤資產的轉移和其他相關資訊。 舉例來說,你可以查閱某人是否把錢轉到你的地址了。 - -## 隱私保護 {#privacy-protection} - -智慧型合約也可以保護你的隱私權。 由於以太坊是匿名網路(你進行的交易公開綁定唯一的加密地址,而非綁定個人身分),因而可以保護隱私不受監視。 - -## 公開可見的條款 {#visible-terms} - -最後,如同傳統合約,你可以在簽名同意前檢查智慧型合約裡的內容,或與合約互動。 智慧型合約的透明度擔保每個人都可以審查它。 - -## 智慧型合約使用案例 {#use-cases} - -基本上,智慧型合約可以做到所有電腦程式都能做到的事。 - -它們可以執行計算、建立貨幣、儲存資料、鑄造[非同質化代幣](/glossary/#nft)、傳送通訊內容,甚至產生圖形。 以下是一些真實世界流行的範例: - -- [穩定幣](/stablecoins/) -- [建立和分發唯一的數位資產](/nft/) -- [自動、開放的貨幣交易所](/get-eth/#dex) -- [去中心化遊戲](/dapps/?category=gaming#explore) -- [自動理賠的保單](https://etherisc.com/) -- [讓人們建立自訂、可互相流通的貨幣的標準](/developers/docs/standards/tokens/) - -## 了解更多 {#further-reading} - -- [智慧型合約將如何改變世界](https://www.youtube.com/watch?v=pA6CGuXEKtQ) -- [智慧型合約:將取代律師的區塊鏈技術](https://blockgeeks.com/guides/smart-contracts/) -- [適用於開發者的智慧型合約](/developers/docs/smart-contracts/) -- [學習撰寫智慧型合約](/developers/learning-tools/) -- [精通以太坊 ─ 智慧型合約是什麼?](https://github.com/ethereumbook/ethereumbook/blob/develop/07smart-contracts-solidity.asciidoc#what-is-a-smart-contract) diff --git a/public/content/translations/zh-tw/06) Use Cases/web3/index.md b/public/content/translations/zh-tw/06) Use Cases/web3/index.md deleted file mode 100644 index 9d07ba0aac5..00000000000 --- a/public/content/translations/zh-tw/06) Use Cases/web3/index.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: 什麼是 Web3?它為什麼很重要? -description: Web3 簡介 - 全球資訊網再進化,以及它為何很重要。 -lang: zh-tw ---- - -# Web3 簡介 {#introduction} - -中心化在過去已幫助數十億人進入全球資訊網,並於其上建立穩定而強大的基礎設施。 於此同時,只有少數中心化實體支配著大部分全球資訊網,能夠單方面決定什麼應該允許,什麼不該允許。 - -Web3 就是這個困境的出路。 Web3 不是由大型科技公司壟斷的網路,它接納去中心化,並由其使用者建立、操作和擁有。 Web3 將權力交予個人而非公司手中。 討論 Web3 之前,先來看看我們是如何走到這一步。 - - - -## 早期的網路 {#early-internet} - -大多數人認為網路是現代生活的穩定支柱,發明後便一直存在至今。 然而,大多數人今日所知道的網路,與最初想像的相差甚遠。 將網路的簡單歷史粗略分成 web 1.0 和 web 2.0 時期,有助於更加理解這點。 - -### Web 1.0:唯讀 (1990-2004) {#web1} - -1989 年,日內瓦歐洲核子研究組織 (CERN) 的 Tim Berners-Lee 忙於協定的開發,即後來的全球資訊網 (WWW)。 他的想法是? 建立開放、去中心化的協定,使人能從全球任何一處分享資訊。 - -Berners-Lee 的發明大約在 1990 年到 2004 年之間誕生,現今稱為「Web 1.0」。 Web 1.0 原先主要是公司擁有的靜態網站,使用者之間幾乎零互動,個人很少產生內容,導致第一代網際網路被稱為唯讀網路。 - -![用戶端-伺服器架構,代表 Web 1.0](./web1.png) - -### Web 2.0:讀寫(2004 - 至今) {#web2} - -隨著社交媒體平台的出現,2004 年開始進入 Web 2.0時期。 網路不再是唯讀,演變成讀寫式。 公司不向使用者提供內容,開始提供平台,以分享使用者產生的內容,並參與使用者間的互動。 隨著上網的人數增加,少數頂級公司開始控管不成比例的網路流量和網路上所產生的價值。 Web 2.0 也催生了廣告驅動的收入模式。 使用者雖能建立內容,但並不擁有內容,或在內容貨幣化之後從中受益。 - -![用戶端-伺服器架構,代表 Web 2.0](./web2.png) - - - -## Web 3.0:讀-寫-擁有 {#web3} - -以太坊推出後不久,[以太坊](/what-is-ethereum/)聯合創辦人 Gavin Wood 在 2014 年創造「Web 3.0」一詞。 許多早期的加密貨幣採用者認為,網路要求的信任度太高,Gavin 以言語表達出此問題的解決之道: 人們今日所知和使用的網路層面,大多仰賴於對少數私營公司的信任,信任他們以公眾的最大利益行事。 - -![去中心化節點架構,代表 Web3](./web3.png) - -### 什麼是Web3 ? {#what-is-web3} - -對於展望更美好的新網際網路,Web3 一詞包羅萬象。 Web3 的核心是利用區塊鏈、加密貨幣和非同質化代幣,以所有權的形式將權力交還給使用者。 [推特 2020 年一篇貼文](https://twitter.com/himgajria/status/1266415636789334016)說得最好:Web1 為唯讀,Web2 為讀寫,Web3 為讀-寫-擁有。 - -#### Web3 的核心思想 {#core-ideas} - -要嚴格定義 Web3 是什麼雖然很困難,但 Web3 的建置有一些核心指導原則。 - -- **Web3 為去中心化**:並不是由集中化的實體控制和擁有大片網際網路,所有權分散在其建構者和使用者之間。 -- **Web3 無需許可**:參與 Web3 人人平等,沒有人被排除在外。 -- **Web3 有原生支付方式:**其使用加密貨幣在線上消費和匯款,而不是依賴銀行和付款處理器過時的基礎設施。 -- **Web3 為去信任化**:使用激勵和經濟機制來運行,而不是依賴受信任的第三方。 - -### 為什麼 Web3 很重要? {#why-is-web3-important} - -Web3 的殺手級功能並非相互隔絕,也不適合分門別類,但為簡單起見,我們嘗試做出區隔,以便更容易理解。 - -#### 所有權 {#ownership} - -Web3 以前所未有的方式讓你擁有數位資產的所有權。 例如,假設你正在玩 Web2 的遊戲。 如果購買遊戲內的物品,會直接與帳戶綁定。 如果遊戲創作者刪除你的帳戶,這些物品就都沒了。 或者,如果停止玩那個遊戲,對遊戲內物品所投資的價值將會遺失。 - -Web3 允許透過[非同質化代幣 (NFT) ](/glossary/#nft)實現直接所有權。 沒有人有權剝奪你的所有權,即使是遊戲的創作者亦然。 而且,如果不再玩遊戲,你可以在公開市場上出售或交易遊戲內的物品,並收回其價值。 - - -
深入了解非同質化代幣
- - 更多非同質化代幣相關資訊 - -
- -#### 抗審查性 {#censorship-resistance} - -平台和內容創作者之間的權力動態嚴重失衡。 - -OnlyFans 是一個由使用者產生的成人內容網站,內容創作者超過 100 萬名,其中許多人使用該平台作為他們的主要收入來源。 2021 年 8 月,OnlyFans 宣布了禁止色情內容的計畫。 此公告在平台上的創作者中引發了憤怒,他們認為他們雖幫助建立平台,但收入被剝奪。 經強烈反對後,該決定很快被推翻。 儘管創作者贏得了這場仗,但這突顯了第二代網際網路創作者的一個問題:如果你離開平台,聲譽和後續累積的成果都沒了。 - -在 Web3 上,你的資料位於區塊鏈上。 當你決定離開某個平台,你的聲譽能隨你而行,投入另一個更清楚符合你價值的介面。 - -Web 2.0 要求內容製作者相信平台不會更改規則,但抗審查是 Web3 平台的原生特性。 - -#### 去中心化自治組織(DAOs) {#daos} - -除了在 Web3 中擁有個人資料外,你還能利用類似公司股票的代幣,來擁有該平台,將平台作為一個集合體。 去中心化自治組織讓你能協調平台的去中心化所有權,並對其未來做出相關決策。 - -從技術層面定義,去中心化自治組織是一種事先商定的[智慧型合約](/glossary/#smart-contract),此合約透過資源池(代幣)自動執行去中心化決策。 擁有代幣的使用者,對資源的使用方式進行投票,而程式碼會自動執行投票結果。 - -然而,許多 Web3 社群都被定義為去中心化自治組織。 這些社群都透過程式碼實現了不同程度的去中心化和自動化。 目前,我們仍在探索去中心化自治組織是什麼,以及其未來可能如何發展。 - - -
了解更多關於去中心化自治組織
- - 更多關於DAOs - -
- -### 身份 {#identity} - -過去是為每個使用的平台建立一個帳戶。 例如,你可能有一個 Twitter 帳戶、一個 YouTube 帳戶和一個 Reddit 帳戶。 想更改顯示名稱或設定檔圖片? 你必須在每個帳戶中執行此操作。 在某些情況下,你可以使用社交登入,但這帶來一個熟悉的問題,亦即審查。 只要按一下,這些平台就能完全斷絕你原有的網路生活。 更糟的是,許多平台要求向其交託個人身份資訊,方能建立帳戶。 - -Web3 透過以太坊地址及[以太坊名稱服務 (ENS) ](/glossary/#ens)個人檔案讓你控制你的數位身份,以解決這些問題。 使用以太坊地址能跨平台提供單一登入,而且安全、抗審查且匿名。 - -### 原生支付 {#native-payments} - -Web2 的付款基礎設施仰賴於銀行和付款處理器,不包含那些沒有銀行帳戶的人,或碰巧住在非正確國家境內的人。 Web3 使用[以太幣](/glossary/#ether)等代幣直接在瀏覽器中匯款,不需要受信任的第三方。 - - - 更多詳情關於以太(以太幣) - - -## Web3 限制 {#web3-limitations} - -儘管目前形式的 Web3 有許多好處,但該生態系統仍然必須解決許多限制,才能蓬勃發展。 - -### 可存取性 {#accessibility} - -已有許多重要的 Web3 功能,可供任何人免費使用,例如以太坊登入功能。 但是,交易的相對成本仍然讓許多人望而卻步。 因交易費高昂,Web3 不太可能在較不富裕的發展中國家使用。 在以太坊上,這些挑戰正在透過[開發藍圖](/roadmap/)和[二層網路擴容方案](/glossary/#layer-2)加以解決。 該技術已經準備就緒,但我們需要在二層網路上達到更高的採用率,使每個人都能存取 Web3。 - -### 使用者體驗 {#user-experience} - -目前使用 Web3 的技術門檻太高了。 使用者必須理解安全疑慮、了解複雜的技術文件,並瀏覽不直觀的使用者介面。 尤其,雖然[錢包提供商](/wallets/find-wallet/)正努力解決這個問題,但在 Web3 整體獲得採用之前,還需要取得更多進展。 - -### 教育 {#education} - -Web3 引入了新的典範,這些典範需學習與 Web2 所用不同的心理模型。 隨著 Web1.0 在 1990 年代後期越來越流行,類似的教育運動於焉而生。網路的擁護者使用一系列教育技術來教育大眾,舉凡簡單的比喻(資訊高速公路、瀏覽器、上網),甚至是[電視廣播](https://www.youtube.com/watch?v=SzQLI7BxfYI)。 Web3 並不難,但與眾不同。 利用教育計畫讓 Web2 的使用者,了解這些Web3 典範,對其成功至關重要。 - -Ethereum.org 透過其[翻譯計畫](/contributing/translation-program/)為 Web3 教育做出貢獻,致力將重要的以太坊內容翻譯成盡可能越多語言。 - -### 中心化基礎設施 {#centralized-infrastructure} - -Web3 生態系統很年輕且發展迅速。 因此,其目前主要依賴於中心化基礎設施(GitHub、Twitter、Discord 等)。 許多 Web3 公司目前爭相填補這些空缺,但建立優質可靠的基礎架構需要時間。 - -## 去中心化的未來 {#decentralized-future} - -Web3 是一個年輕且不斷發展的生態系統。 Gavin Wood 在 2014 年創造了這個詞,但許多這些想法直到最近才成真。 光是去年,對於加密貨幣、二層網路擴容解決方案的改進,新管理體系形式的大規模實驗以及數位身份的革命,人們的興趣便大幅增加。 - -使用 Web3 打造更美好的網路才正開始起步,但隨著我們持續改善支援性基礎設施,網路的未來看起來一片光明。 - -## 我如何參與 {#get-involved} - -- [取得錢包](/wallets/) -- [尋找社群](/community/) -- [探索 Web3 應用程式](/dapps/) -- [參與 DAO](/dao/) -- [在 Web3 上構建](/developers/) - -## 衍生閱讀 {#further-reading} - -Web3 並未嚴格定義。 不同社群參與者對它有不同的看法。 請見: - -- [什麼是 Web3? 明日去中心化網際網路的相關解說](https://www.freecodecamp.org/news/what-is-web3/) – _Nader Dabit_ -- [搞懂 Web 3](https://medium.com/l4-media/making-sense-of-web-3-c1a9e74dcae) – _Josh Stark_ -- [為什麼 Web 3 很重要](https://future.a16z.com/why-web3-matters/) — _Chris Dixon_ -- [為什麼去中心化很重要](https://onezero.medium.com/why-decentralization-matters-5e3f79f7638e) - _Chris Dixon_ -- [Web 3 的景況](https://a16z.com/wp-content/uploads/2021/10/The-web3-Readlng-List.pdf) – _a16z_ -- [Web 3 的辯論](https://www.notboring.co/p/the-web3-debate?s=r) – _Packy McCormick_ - - diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/dvt/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/dvt/index.md deleted file mode 100644 index 5d9eeb59a15..00000000000 --- a/public/content/translations/zh-tw/07) Staking Pages/staking/dvt/index.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: 分散式驗證者技術 -description: 分散式驗證者技術使以太坊驗證者可以由多方分散式執行。 -lang: zh-tw ---- - -# 分散式驗證者技術 {#distributed-validator-technology} - -分散式驗證者技術 (DVT) 是一種驗證者安全保障方法,可將金鑰管理和簽名職責分散到多方,從而減少單點故障並提高驗證者的彈性。 - -它將用於保護驗證者的**私密金鑰分散**至組成一個「叢集」的**許多計算機**,以實現安全保障目的。 此方法的好處在於它讓攻擊者非常難以存取金鑰,因為金鑰並沒有完整儲存在任何一台機器上。 它還允許某些節點離線,因為必要的簽名可以由每個叢集中的一部分機器完成。 這減少了網路的單點故障,並使整個驗證者群更加可靠。 - -![示意圖展示單個驗證者金鑰如何拆分成金鑰分片,並分散到多個具有不同組件的節點。](./dvt-cluster.png) - -## 我們為什麼需要分散式驗證者技術? {#why-do-we-need-dvt} - -### 安全性 {#security} - -驗證者生成兩對公私金鑰:驗證者金鑰用於參與共識,提款金鑰則用於存取資金。 雖然驗證者可以保護冷儲存中的提款金鑰,但驗證者金鑰必須 24 小時連網。 如果驗證者私密金鑰外洩,攻擊者可以控制驗證者,從而可能導致質押者的以太幣遭罰沒或遺失。 分散式驗證者技術可以幫助降低此風險。 詳情如下: - -透過分散式驗證者技術,質押者可以參與質押,同時冷儲存驗證者私密金鑰。 這透過加密原始的完整驗證者金鑰,然後將其分割為金鑰分片來實現。 金鑰分片儲存在線上並分發給多個節點,使驗證者可以進行分散式操作。 這是可以實現的,因為以太坊驗證者使用可附加的 BLS 簽名,這意味著可以透過將其組成部分相加以重建完整金鑰。 這使質押者能夠安全地離線保存完整、原始的「主要」驗證者金鑰。 - -### 無單點錯誤 {#no-single-point-of-failure} - -當驗證者分佈在多個營運商和多台機器上時,它可以承受個別硬體和軟體故障而不會離線。 透過在叢集中的節點上使用不同的硬體和軟體設定,可降低故障風險。 這種彈性不適用於單節點驗證者設定 - 它來自分散式驗證者技術層。 - -如果叢集中一台機器的一個元件發生故障(例如,如果驗證器叢集中有四個營運商,其中一個使用有錯誤的特定用戶端),其他營運商將確保驗證器繼續運行。 - -### 去中心化 {#decentralization} - -以太坊的理想場景是擁有盡可能多的獨立運行驗證者。 然而,一些質押提供商已經變得非常受歡迎,並且佔網路上質押以太幣總量的很大部分。 分散式驗證者技術允許這些營運商存在,同時保持質押的去中心化。 這是因為每個驗證者的金鑰分散在許多機器上,驗證者需要更大程度的勾結才能變為惡意。 - -如果沒有分散式驗證者技術,對質押提供商來說,所有驗證者只支援一到二種用戶端設定很容易,但這會增大用戶端錯誤的影響。 分散式驗證者技術可用於在多種用戶端設定和不同硬體之間分散風險,通過多樣性創造彈性。 - -**分散式驗證者技術為以太坊提供了以下好處:** - -1. 以太坊權益證明共識的**去中心化** -2. 確保網路的**活躍性** -3. 建立驗證者**容錯性** -4. **信任最小化**驗證者操作 -5. **最小化罰沒**和停機風險 -6. **提高多樣性**(用戶端、數據中心、位置、監管等) -7. **增強**驗證者金鑰管理的安全性 - -## 分散式驗證者技術如何運作? {#how-does-dvt-work} - -分散式驗證者技術解決方案包含以下組成部分: - -- **[Shamir 私鑰分享算法](https://medium.com/@keylesstech/a-beginners-guide-to-shamir-s-secret-sharing-e864efbf3648)** - 驗證者使用 [BLS 金鑰](https://en.wikipedia.org/wiki/BLS_digital_signature) 各 BLS「金鑰分片」(「金鑰分片」)可以組合成一個聚合金鑰(簽名)。 在分散式驗證者技術中,驗證者的私密金鑰是叢集中每個營運商的組合 BLS 簽名。 -- **[閾值簽名方案](https://medium.com/nethermind-eth/threshold-signature-schemes-36f40bc42aca)** - 確定簽名職責所需的單個金鑰分片數,例如:4 個中需要 3 個。 -- **[分佈式金鑰生成 (DKG) 協議](https://medium.com/toruslabs/what-distributed-key-generation-is-866adc79620)** - 一種加密過程,用於生成金鑰分片,並將現有或新的驗證者金鑰分片分發給叢集中的節點。 -- **[多方計算 (MPC)](https://messari.io/report/applying-multiparty-computation-to-the-world-of-blockchains)** - 完整的驗證者金鑰使用多方計算秘密生成。 任何單獨營運商都不知道完整的金鑰—他們只知道自己的部分(他們的「分片」)。 -- **共識協議** - 共識協議選擇一個節點作為區塊提交者。 它們與叢集中的其他節點共享該區塊,這些節點將其金鑰分片加入聚合簽名中。 聚合了足夠的金鑰分片後,就將該區塊提交至以太坊。 - -分散式驗證者有內建的容錯機制,即使某些單獨節點離線,仍能持續運行。 這表示即使叢集中某些節點為惡意或怠惰,叢集也具有彈性。 - -## 分散式驗證者技術使用案例 {#dvt-use-cases} - -分散式驗證者技術對廣大的質押產業有重大影響: - -### 單獨質押者 {#solo-stakers} - -藉由分散你的驗證者金鑰至各遠端節點,同時使完整金鑰保持完全離線,分散式驗證者技術也能實現非託管式質押。 這表示居家質押者並不需要額外硬體支出,而分散金鑰分片可以強化他們對抗潛在安全攻擊的能力。 - -### 質押即服務 (SaaS) {#saas} - -管理許多驗證者的營運商(如質押池及機構質押者)可使用分散式驗證者技術降低風險。 藉由分散基礎設施,營運商可以對營運增加冗餘,並提高所用硬體類型的多樣性。 - -分散式驗證者技術將金鑰管理責任分散至多個節點,這也表示部分營運成本可被分攤。 分散式驗證者技術還可以降低質押提供者的操作風險及保險成本。 - -### 質押池 {#staking-pools} - -對於標準驗證者設置,質押池與流動性質押提供者被迫對單一營運商採取不同的信任等級,因為整個質押池中的盈虧採用社會化分配。 他們還依賴營運商保護簽名金鑰,因為到目前為止,他們沒有其他選擇。 - -儘管一般會盡力將質押分散到多個營運商以降低風險,每位營運商仍管理很大一部分質押。 依賴單一營運商可能會造成重大風險,如:表現不佳、停機、受到入侵或惡意行為。 - -藉由分散式驗證者技術,顯著降低了需要對營運商應有的信任。 **質押池讓營運商擁有質押,而無需託管驗證者金鑰**(因僅使用金鑰分片)。 分散式驗證者技術還允許將質押分散至更多營運商(例如:讓這些驗證者由多位營運商共同運行,而不是讓單個營運商管理 1000 個驗證者)。 多樣的營運商設置可確保當一個營運商故障時,其他營運商仍可驗證交易。 這提高了冗余和多樣性,從而提升了性能和彈性,同時最大限度地提高了酬勞。 - -最小化單一營運信任的另一個好處是,質押池可以促進更開放的營運商參與,且無需許可。 如此一來,服務商可以使用精選且無需許可的營運商(例如,將家庭質押者或更多小型質押者與大型質押者配對)來降低其風險,並支援以太坊的去中心化。 - -## 使用分散式驗證者技術的潛在弊端 {#potential-drawbacks-of-using-dvt} - -- **額外組成部分** - 引入分散式驗證者技術節點會增加一個部分,該部分可能存在故障或漏洞。 要緩解此問題,一種方法是爭取實現多個分散式驗證者技術節點,也就是多個分散式驗證者技術用戶端(類似於共識層和執行層有多個用戶端的情況)。 -- **營運成本** - 由於分散式驗證者技術將驗證者分佈至多個參與方,因此需要更多的節點進行操作,而不是只有一個節點,這就增加了營運成本。 -- **可能會增加延遲** - 因為分散式驗證者技術利用共識協議在多個運行驗證者的節點之間達成共識,這可能會增加延遲。 - -## 延伸閱讀 {#further-reading} - -- [以太坊分散式驗證者規範(高級)](https://github.com/ethereum/distributed-validator-specs) -- [以太坊分散式驗證者技術規範](https://github.com/ethereum/distributed-validator-specs/tree/dev/src/dvspec) -- [Shamir 私鑰分享演示應用程式](https://iancoleman.io/shamir/) diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/pools/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/pools/index.md deleted file mode 100644 index 6e39735cb6c..00000000000 --- a/public/content/translations/zh-tw/07) Staking Pages/staking/pools/index.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: 聯合質押 -description: 關於如何開始聯合以太幣質押的概覽 -lang: zh-tw -template: staking -emoji: ":money_with_wings:" -image: /images/staking/leslie-pool.png -alt: 萊斯利犀牛在池中游泳 -sidebarDepth: 2 -summaryPoints: - - 與其他人一起質押任意數量的以太幣並獲得酬勞 - - 跳過困難的部分,將驗證者運作委託給第三方 - - 在你自己的錢包中持有質押代幣 ---- - -## 什麼是質押礦池 {#what-are-staking-pools} - -質押礦池是一種協作方式,允許擁有少量以太幣的人能夠滿足 32 個以太幣此一條件,以啟動一組驗證者金鑰。 由於協定本身並不支援聯合質押這項功能,因此需要單獨建立解決方案來滿足此需求。 - -一些礦池使用智慧型合約運作,可以將資金存入合約,由合約以去信任的方式管理和追蹤你的質押品,並向你發放相應價值的代幣。 其他礦池可能不涉及智慧型合約,而是在鏈外調解。 - -## 為什麼要使用礦池進行質押 {#why-stake-with-a-pool} - -除了我們在[質押簡介](/staking/)中描述的好處之外,聯合質押還具有許多獨特的好處。 - - - - - - - - - -## 需要考慮的事項 {#what-to-consider} - -以太坊協定本身並不支援聯合質押或委託質押,但考量到想要質押的以太幣不足 32 個的使用者的需求,越來越多的解決方案已經開始建立。 - -每個質押池和工具,或者它們所用的智慧型合約,均由不同的團隊建立,因此有著各自的好處和風險。 質押池能夠將使用者的以太幣換成一種相應的以太幣質押代幣。 此代幣非常有用,因為它允許使用者將任意數量的以太幣兌換成等值的有收益代幣(反之亦然),流動性質押衍生品由質押在去中心化交易所的以太幣產生收益,即使實際的以太幣質押在共識層上。 這意味著可以在有收益的質押以太幣產品和「原始以太幣」之間快速、簡單地切換,且適用的以太幣數不僅限於 32 的倍數。 - -然而,這些質押以太幣代幣往往會產生類卡特爾的行為,大量質押的以太幣最終會受到少數中心化組織的控制,而不是分散到大量獨立個體中。 這為審查或價值提取創造了條件。 質押的黃金標準應始終是個人盡可能在自己的硬體上運行驗證者。 - -[更多關於質押代幣風險的資訊](https://notes.ethereum.org/@djrtwo/risks-of-lsd)。 - -以下使用屬性指標表示列出的質押礦池可能具有的顯著優勢或劣勢。 在你選擇要加入的礦池時,請將此章節的内容當作參考,瞭解這些屬性的具體定義。 - - - -## 探索質押礦池 {#explore-staking-pools} - -有多種方案可以幫你完成設定。 請運用上述指標來幫助你了解以下工具。 - - - - - -請注意,仔細選擇具有[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity/)的服務相當重要,因為它可以提高網路的安全性並降低你的風險。 如果某服務可以證明它會限制主流使用者端的使用,則稱它具有「執行層使用者端多樣性」「共識層使用者端多樣性」。 - -關於我們遺漏的質押工具,你有要推薦的嗎? 請參閱我們的[產品刊登政策](/contributing/adding-staking-products/),如果合適,請提交以供審核。 - -## 常見問題 {#faq} - - -一般來說,ERC-20 質押代幣會發放給質押者,代表他們質押的以太幣以及質押獎勵的價值。 請記住,不同的礦池將通過略有不同的方法向其使用者分配質押酬勞,但主旨是共通的。 - - - -就是現在! 上海/卡佩拉升級發生於 2023 年 4 月,可實現質押提款。 支持質押池的驗證者帳戶現在可以退出並將以太幣提取到他們指定的提款地址。 這樣你可以將質押的份額兌換為基礎以太幣。 有關此功能的具體操作方式,請與你的提供商確認。 - -或者,使用 ERC-20 質押代幣的質押池允許使用者在公開市場上交易該代幣,讓你可以出售質押位置,這相當於允許你「提款」,但無需實際從質押合約中移除以太幣。 - -更多質押提款相關資訊 - - - -這些聯合質押選項和中心化交易所之間有許多相似之處,例如能夠質押少量以太幣並將它們捆綁在一起以啟動驗證者。 - -與中心化交易所不同的是,許多其他聯合質押方案採用的是智慧型合約和/或質押代幣,通常是 ERC-20 代幣。這些代幣可以保存在你自己的錢包中,並能像任何其他代幣一樣正常買賣。 透過讓你控制自己的代幣,這為你提供了一層主權和安全性,但這並不代表你能夠直接控制在後台代表你執行證明的驗證者用戶端。 - -當涉及到支持它們的節點時。一些聯合質押方案比其他方案更去中心化。 為了加強網路的健康和去中心化程度,我們始終鼓勵質押者選擇這樣的聯合質押服務:無需許可且實現節點營運商去中心化。 - - -## 延伸閱讀 {#further-reading} - -- [以太坊質押目錄](https://www.staking.directory/) - _Eridian 和 Spacesider_ -- [使用 Rocket Pool 進行質押 - 質押概覽](https://docs.rocketpool.net/guides/staking/overview.html) - _RocketPool 文件_ -- [使用 Lido 質押以太坊](https://help.lido.fi/en/collections/2947324-staking-ethereum-with-lido) - _Lido 幫助文件_ diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/saas/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/saas/index.md deleted file mode 100644 index a5c6d088f49..00000000000 --- a/public/content/translations/zh-tw/07) Staking Pages/staking/saas/index.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: 質押即服務 -description: 關於如何開始聯合以太幣質押的概覽 -lang: zh-tw -template: staking -emoji: ":money_with_wings:" -image: /images/staking/leslie-saas.png -alt: 漂浮在雲端的犀牛萊斯利。 -sidebarDepth: 2 -summaryPoints: - - 第三方節點營運商負責處理你的驗證者用戶端的運作 - - 對於擁有 32 個以太幣且不喜歡處理運行節點的複雜技術的人來說,這是一個不錯的選擇 - - 降低信任依賴,並保持你對提款金鑰的控制權 ---- - -## 什麼是質押即服務? {#what-is-staking-as-a-service} - -質押即服務(「SaaS」)代表一種質押服務,你將自己的 32 個以太幣存入驗證者,但將節點運作委託給第三方營運商。 此流程通常需要你按指引完成初始化設定,包括產生金鑰和存入資金,然後將你的簽名金鑰上傳給營運商。 這將允許該服務代表你運作你的驗證者,通常是按月收費。 - -## 為什麼需要質押服務? {#why-stake-with-a-service} - -以太坊協定本身並不支援質押委託,因此為了滿足此項需求,這類服務應運而生。 如果你有 32 個以太幣要質押,但懶得處理硬體設備,質押即服務可以讓你在賺取原生區塊酬勞的同時將困難的部分外包。 - - - - - - - - - -## 需要考慮的事項 {#what-to-consider} - -有越來越多的質押即服務供應商提供以太幣質押服務,但有各自的好處及風險。 相較於居家質押,所有質押即服務方案都需要額外的信任假設。 質押即服務可能有整合以太坊用戶端的額外程式碼,這些程式碼並不開放或無法審核。 質押即服務對於網路的去中心化也有不利影響。 根據設定,你可能無法控制你的驗證者 - 營運商可以使用你的以太幣做出不正當行為。 - -以下屬性指標可以用來衡量質押即服務供應商可能具備的顯著優勢或劣勢。 在選擇服務,展開質押之旅之際,請將本節作為參考,了解我們如何定義這些屬性。 - - - -## 探索質押服務供應商 {#saas-providers} - -以下是幾個市面上的質押即服務供應商。 請運用上述指標來了解這些服務。 - - - -### 質押即服務供應商 - - - -切記,支援[用戶端多元化](/developers/docs/nodes-and-clients/client-diversity/)極為重要,因為這可以提高網路的安全性,降低你的風險。 如果某服務可以證明它會限制主流使用者端的使用,則稱它具有「執行層使用者端多樣性」「共識層使用者端多樣性」。 - -### 金鑰產生器 - - - -關於我們遺漏的質押即服務供應商,你有要推薦的嗎? 請參閱我們的[產品刊登政策](/contributing/adding-staking-products/),如果合適,請提交以供審核。 - -## 常見問題 {#faq} - - -不同供應商的做法有所不同,但一般而言,他們都會引導你設定所需的簽名金鑰(每 32 個以太幣一個金鑰),並將這些金鑰上傳給你的供應商,以便他們代表你進行驗證。 單憑簽名金鑰無法提取、移轉或使用你的資金, 不過簽名金鑰可以用來投票形成共識,如果操作不當,可能會受到離線處罰或罰沒。 - - - -是的, 每個帳戶都包含 BLS 簽名金鑰和 BLS 提款金鑰。 為了讓驗證者證明鏈的狀態、參與同步委員會並提出區塊建議,簽名金鑰必須易於驗證者用戶端存取。 這些金鑰必須以某種形式連線至網際網路,因此本質上可視為「熱」金鑰。 這是驗證者證明區塊鏈的必要條件,因此基於安全因素,簽名金鑰與用以移轉或提取資金的金鑰是分開的。 - -BLS 提款金鑰用於簽署一次性訊息,說明應將質押酬勞和退出資金轉到哪個執行層帳戶。 廣播此訊息後,便不再需要 BLS 提款金鑰。 取而代之的是,資金提款的權力將被永久地委託至你所提供的地址。 這允許你透過自己的冷儲存設定一個安全的提款地址,最小化驗證者資金的風險,即使有他人控制你的驗證者的簽名金鑰。 - -更新提款者憑證是啟用提款的必要步驟\*。 這個過程涉及到使用你的種子助記詞生成提款金鑰。 - -請務必妥善保存這份種子助記詞,否則到時候你將無法生成提款金鑰。 - -\*首次存款時提供了提款地址的質押者不需要設定助記詞。 有關如何準備驗證者,請向你的質押即服務供應商請求支援。 - - - -2023 年 4 月的上海/卡佩拉升級中實施了質押提款。 質押者需要提供提款地址(如果初次存款時未提供),酬勞付款將每隔幾天定期自動分配。 - -驗證者還可以作為驗證者完全退出,這將解鎖剩餘的以太幣餘額以供提款。 已提供執行提款地址並完成退出流程的帳戶,提供的提款地址將在下一次驗證者掃描期間收到全部餘額。 - -更多關於提取質押代幣的資訊 - - - -使用質押即服務供應商,你會將節點的運作委託給其他人。 這伴隨著節點效能不佳的風險,這是你無法控制的。 如果你的驗證者遭到罰沒,驗證者的餘額會受到罰款,驗證者也會強制從驗證者池下架。 - -罰沒/退出流程完成後,這些資金將被轉移到分配給驗證者的提款地址。 需要提供提款地址才能啟用該功能。 提款地址可能在一開始存款時便已提供。 如果沒有,則需要使用驗證者提款金鑰來簽署說明提款地址的訊息。 如果未提供提款地址,資金將保持鎖定狀態,直到提供地址為止。 - -請聯繫各質押即服務提供商,了解關於任何擔保或保險方案的詳細訊息,以及如何提供提款地址的說明。 如果你希望完全掌控你的驗證者設定,請詳細了解如何單獨質押以太幣。 - - -## 延伸閱讀 {#further-reading} - -- [以太坊質押目錄](https://www.staking.directory/) - _Eridian 和 Spacesider_ -- [評估質押服務](https://www.attestant.io/posts/evaluating-staking-services/) - _Jim McDonald 2020_ diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/solo/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/solo/index.md deleted file mode 100644 index 26aa59c6595..00000000000 --- a/public/content/translations/zh-tw/07) Staking Pages/staking/solo/index.md +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: 單獨質押你的以太幣 -description: 如何開始單獨質押你的以太幣概覽 -lang: zh-tw -template: staking -emoji: ":money_with_wings:" -image: /images/staking/leslie-withdrawal.png -alt: 萊斯利犀牛在她自己的電腦晶片上。 -sidebarDepth: 2 -summaryPoints: - - 直接從協定中獲得最大酬勞,以保持你的驗證者正常運作和上線 - - 執行家用硬體,親自貢獻於以太坊網路的安全和去中心化 - - 消除信任依賴,永遠不需放棄對資金金鑰的控制權 ---- - -## 什麼是單獨質押? {#what-is-solo-staking} - -單獨質押指執行一個連線至網際網路的[以太坊節點](/run-a-node/)並存入 32 個以太幣,以啟用一個[驗證者](#faq),使你能夠直接參與網路共識。 - -**單獨質押提高了以太坊網路的去中心化**,使以太坊更加無懼審查並能更可靠地抵禦攻擊。 其他質押方法可能無法以同樣的方式協助網路。 單獨質押是保護以太坊的最佳質押方案。 - -以太坊節點由執行層 (EL) 用戶端和共識層 (CL) 用戶端組成。 這類用戶端是一套共同運作的軟體加上一組有效的簽名金鑰,可驗證交易和區塊、證明正確的區塊鏈頭、匯總證明並提交區塊。 - -單獨質押者負責操作執行這類用戶端所需的硬體。 強烈建議你使用專用機器在家操作,這對網路健康非常有益。 - -單獨質押者保持驗證者的正常上線運作,即可直接從協定獲得酬勞。 - -## 為什麼需要單獨質押? {#why-stake-solo} - -單獨質押需要承擔更多責任,但可以實現對資金和質押設置的最大控制。 - - - - - - - -## 單獨質押前的注意事項 {#considerations-before-staking-solo} - -儘管我們希望每個人都可以在沒有風險的情況下進行單獨質押,但這並不現實。 在選擇單獨質押以太幣之前,你必須留意一些實際而嚴肅的考量因素。 - - - -在操作自己的節點時,你應該花一些時間學習如何使用你選擇的軟體。 包括閱讀相關文件,以及了解這些開發團隊的溝通管道。 - -越是了解你在執行的軟體以及權益證明的運作原理,你作為質押者的風險就越小,也越容易解決節點運作過程中可能出現的問題。 - - - -設定節點仍然需要對電腦有一定程度的掌握,不過隨著時間經過,新工具會越來越容易使用。 了解命令列介面會有幫助,但不是必要的。 - -設定節點也需要設置非常基本的硬體,以及對最低建議規格有一些了解。 - - - -就像以私密金鑰保護以太坊地址一樣,你還需要專門為驗證者生成金鑰。 你必須了解如何確保你的種子助記詞或私密金鑰的安全。{' '} - -以太坊安全及詐騙預防 - - - -硬體偶爾會出現故障,網路連線會中斷,用戶端軟體偶爾也需要升級。 節點維護是不可避免的,你偶爾需要留意。 最好能隨時掌握預期的網路升級或其他重要的用戶端升級。 - - - -你的酬勞與你的驗證者上線並提供正確證明的時間成正比。 停機會導致一定程度的罰金,這和有多少其他驗證者同時離線成正比,但不會導致罰沒。 頻寬也很重要,因為如果沒有及時收到證明,酬勞就會減少。 要求可能有所差異,但建議上傳和下載速率至少都要有 10 Mb/s。 - - - -與離線的怠工罰金不同,罰沒是針對惡意犯罪的更嚴重的懲罰。 如果同一個時間只在一台電腦上載入金鑰來執行非主流用戶端,遭到罰沒的風險微乎其微。 話雖如此,所有質押者都必須意識到罰沒的風險。 - -關於罰沒和驗證者生命週期的更多資訊 - - - - - -## 運作原理 {#how-it-works} - - - -在活躍期間,你將獲得以太幣獎勵,這些獎勵將定期存入你的提款地址。 - -如果需要,你可以退出驗證者,如此一來就不必一直上線,但也不會再有任何酬勞。 然後,你的餘額將被提取到你在設置過程中指定的提款地址。 - -[更多關於提取質押代幣的資訊](/staking/withdrawals/) - -## 開始使用質押啟動面板 {#get-started-on-the-staking-launchpad} - -質押啟動面板是一個開放原始碼應用程式,可以幫助你成為質押者。 它會指引你選擇用戶端、產生金鑰,並將你的以太幣存入質押存款合約。 它會提供一份檢查清單,確認你已完成所有內容,可安全地設定驗證者。 - - - -## 使用節點和用戶端設定工具時需要考量的事項 {#node-tool-considerations} - -有越來越多的工具和服務可以幫助你單獨質押以太幣,其風險和收益各有不同。 - -以下屬性指標可以用來衡量所列質押工具可能具備的顯著優勢或劣勢。 在選擇工具,展開質押之旅之際,請將本節作為參考,了解我們如何定義這些屬性。 - - - -## 探索節點和用戶端設定工具 {#node-and-client-tools} - -有多種方案可以幫你完成設定。 請運用上述指標來幫助你了解以下工具。 - - - -### 節點工具 - - - -切記,選擇[非主流用戶端](/developers/docs/nodes-and-clients/client-diversity/)極為重要,因為這可以提高網路的安全性,降低你的風險。 可讓你設定非主流使用者端的工具稱為「多重使用者端」。 - -### 金鑰產生器 - -這些工具可以代替[質押存款命令列介面](https://github.com/ethereum/staking-deposit-cli/),幫助你生成金鑰。 - - - -關於我們遺漏的質押工具,你有要推薦的嗎? 請參閱我們的[產品刊登政策](/contributing/adding-staking-products/),如果合適,請提交以供審核。 - -## 探索單獨質押指南 {#staking-guides} - - - -## 常見問題 {#faq} - -以下是關於質押的一些最常見問題,建議仔細閱讀。 - - - -驗證者是一個存在於以太坊並參與以太坊協議共識的虛擬實體。 驗證者由餘額、公鑰和其他屬性表示。 驗證者用戶端是通過持有和使用私密金鑰代表驗證者進行操作的軟體。 一個驗證者用戶端可以持有多組金鑰,控制許多驗證者。 - - - - -與驗證者相關聯的每組金鑰都需要 32 個以太幣才能啟用。 將更多以太幣存入一組金鑰不會增加潛在的酬勞,因為一個驗證者的有效餘額以 32 個以太幣為限。 這意味著質押是以 32 個以太幣為遞增單位,每個單位都有自己的一組金鑰和餘額。 - -請勿為一個驗證者存入超過 32 個以太幣。 這並不會增加你的酬勞。 如果為驗證者設置了提現地址,超過 32 個以太幣的多餘資金將在下一次驗證者掃描時自動提款到該地址。 - -如果單獨質押對你來說要求太高,可以考慮使用質押即服務供應商,或者如果你的資金少於 32 個以太幣,可以參考質押池。 - - - -如果你在網路正確進行最終確認時離線,則不會發生罰沒。 如果你的驗證者無法在特定時期內(每個時期 6.4 分鐘)完成證明,則會產生少量的怠工罰金,但這與罰沒完全不同。 這些罰金略低於你在驗證者可以完成證明的情況下獲得的酬勞,因此只要讓驗證者再次上線,經過差不多相同的時間就能賺回來。 - -請注意,怠工罰金與同時離線的驗證者數量成正比。 如果大部分網路同時離線,則每個驗證者承擔的罰金將大於單一驗證者怠工時的罰金。 - -在極端情況下,如果有超過三分之一的驗證者同時離線導致網路停止最終確認,那麼這些使用者會遭受所謂的二次怠工罰金,離線驗證者帳戶中的以太幣將受到指數級別的損失。 這時以太坊網路會消耗怠工驗證者的以太幣來進行自我修復,直到其餘額達到 16 個以太幣為止,此時它們將自動被踢出驗證者池。 最後還在線上的剩餘驗證者將再次超過網路的三分之二,滿足再次最終確認區塊鏈所需的絕對多數要求。 - - - -簡而言之,雖然我們永遠無法完全保證你不會被罰沒,但如果你真誠行事,執行非主流用戶端,而且一次只將簽名金鑰保存在一台電腦上,那麼遭到罰沒的風險微乎其微。 - -只有幾個特定的狀況會導致驗證者遭到罰沒並被踢出網路。 截止撰寫本文為止,發生過的罰沒事件完全是因為事主設置了冗餘硬體,同時間將簽名金鑰儲存在兩台不同的電腦上。 這可能導致你的金鑰在無意中出現雙重投票,這是一種可被罰沒的違規行為。 - -執行絕對主流用戶端(任何超過三分之二的網路所使用的用戶端)也有潛在的罰沒風險,例如該用戶端出現錯誤,導致一個區塊鏈分叉。 這可能會導致最終確認的是有問題的分叉。 要修正回預期的區塊鏈,需要提交環繞投票,嘗試撤銷最終確認的區塊。 這也是一種可被罰沒的行爲,但執行非主流用戶端即可避免。 - -非主流用戶端絕對不會最終確認相同的錯誤,因此也不會導致環繞投票,只可能產生怠工罰金,而不會遭到罰沒。 - - - - - -各用戶端的效能和使用者介面可能略有不同,因為每個用戶端都是由不同的團隊使用不同程式語言開發的。 這表示沒有「最好的」用戶端。 所有生產環境的用戶端都是優秀的軟體,會執行相同的核心功能來與區塊鏈同步和互動。 - -由於所有生產環境用戶端的基本功能都相同,因此選擇非主流用戶端其實非常重要;「非主流」意指網路上大多數驗證者都「沒」使用該用戶端。 這聽起來可能有悖直覺,但執行主流或絕對主流用戶端會使你在該用戶端出現錯誤時面臨更高的罰沒風險。 執行非主流用戶端可以大幅降低這些風險。 - -詳細了解為什麼用戶端多元化如此重要 - - - -雖然虛擬私人伺服器 (VPS) 可以作為家用硬體的替代品,但驗證者用戶端的實體存取和位置有其重要性。 Amazon Web Services 或 Digital Ocean 等集中式雲端解決方案提供了不必擁有和運作硬體的便利,但代價是網路集中化。 - -在一個集中式雲端儲存解決方案上執行的驗證者用戶端越多,對這些使用者而言就越危險。 如果發生任何事件導致這些供應商離線,無論是由於攻擊、監管要求,抑或僅因為電源/網際網路中斷,都將導致依賴此伺服器的所有驗證者用戶端同時離線。 - -離線罰金與同時離線的其他驗證者數量成正比。 使用虛擬私人伺服器會大幅提高承受更嚴重的離線罰金的風險,甚至如果發生大量當機,還會增加二次懲罰或罰沒的風險。 為了將你自己的風險和網路風險降至最低,我們強烈鼓勵使用者取得並操作自己的硬體。 - - - - -在信標鏈中進行任何類型的提款都需要設置提款憑證。 - -新質押者在生成金鑰和存款時就設置了提款憑證。 尚未設置此憑證的現有質押者可以升級其金鑰以支援此功能。 - -設置提款憑證後,酬勞支付(扣除初始 32 個以太幣後的累積以太幣)將定期自動分配到提款地址。 - -要解鎖並拿回全部餘額,你還必須完成退出驗證者的過程。 - -更多關於提取質押代幣的資訊 - - -## 延伸閱讀 {#further-reading} - -- [以太坊質押目錄](https://www.staking.directory/) - _Eridian 和 Spacesider_ -- [以太坊用戶端的多元化問題](https://hackernoon.com/ethereums-client-diversity-problem) - _@emmanuelawosika 2022_ -- [幫助用戶端多元化](https://www.attestant.io/posts/helping-client-diversity/) - _Jim McDonald 2022_ -- [以太坊共識層的用戶端多元化](https://mirror.xyz/jmcook.eth/S7ONEka_0RgtKTZ3-dakPmAHQNPvuj15nh0YGKPFriA) - _jmcook.eth 2022_ -- [如何購買以太坊驗證者硬體](https://www.youtube.com/watch?v=C2wwu1IlhDc) - _EthStaker 2022_ -- [按部就班:如何加入以太坊 2.0 測試網](https://kb.beaconcha.in/guides/tutorial-eth2-multiclient) - _Butta_ -- [以太坊 2 罰沒預防技巧](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) - _Raul Jordan 2020 年_ - - diff --git a/public/content/translations/zh-tw/07) Staking Pages/staking/withdrawals/index.md b/public/content/translations/zh-tw/07) Staking Pages/staking/withdrawals/index.md deleted file mode 100644 index 9ce93763822..00000000000 --- a/public/content/translations/zh-tw/07) Staking Pages/staking/withdrawals/index.md +++ /dev/null @@ -1,218 +0,0 @@ ---- -title: 質押提款 -description: 此頁總結了什麼是質押推送提款,該功能如何運作,以及質押者需要做什麼才能獲得酬勞 -lang: zh-tw -template: staking -image: /images/staking/leslie-withdrawal.png -alt: 犀牛萊斯利和她的質押酬勞 -sidebarDepth: 2 -summaryPoints: - - 上海/卡佩拉升級支援在以太坊提款 - - 驗證者營運商必須提供提款地址才能啟用 - - 每隔幾天自動分發酬勞 - - 完全退出質押的驗證者將收到剩餘餘額 ---- - - -2023 年 4 月 12 日上海/卡佩拉升級後便啟用了質押提款。 關於上海/卡佩拉升級的更多資訊 - - -**質押提款**是指將以太幣從以太坊共識層(信標鏈)上的驗證者帳戶轉移到可以進行交易的執行層。 - -只要使用者提供了提款地址,超過 32 個以太幣的**超額酬勞**將自動定期發送到每個驗證者關聯的提款地址。 使用者也能**完全退出質押**,解鎖他們的全部驗證者餘額。 - -## 質押酬勞 {#staking-rewards} - -對於最高有效餘額為 32 以太幣的活躍驗證者帳戶,系統會自動處理酬勞付款。 - -通過酬勞賺取的任何超過 32 以太幣的餘額實際上不會影響本金,也不會增加該驗證者在網路上的權重,因此每隔幾天就會自動提取酬勞。 除了提供一次提款地址之外,這些酬勞不需要驗證者營運商採取任何行動。 這些均在共識層上發起,因此所有步驟都不需要燃料(礦工費)。 - -### 我們是如何走到這一步的? {#how-did-we-get-here} - -在過去幾年,以太坊經歷了多次網路升級,過渡到由以太幣自身提供保護的網路,而不是像以前那樣進行能源密集型挖礦。 參與以太坊共識現在被稱為「質押」,因為參與者自願鎖定以太幣,將其「質押」,以獲得參與網路的能力。 遵守規則的使用者將獲得酬勞,而試圖欺詐的用戶將受到懲罰。 - -自 2020 年 11 月推出質押存款合約以來,一些勇敢的以太坊先驅者自願鎖定資金以啟動「驗證者」,即有權按照網路規則正式證明和提交區塊的特殊帳戶。 - -在上海/卡佩拉升級前,你無法使用或存取已經質押的以太幣。 但現在,你可以選擇自動將酬勞存入所選帳戶,並且可以隨時提取質押的以太幣。 - -### 我該如何準備? {#how-do-i-prepare} - - - -### 重要通知 {#important-notices} - -對於任何驗證者帳戶來說,提供提款地址是必要的步驟,然後才有資格從其餘額中提取以太幣。 - - - 每個驗證者帳戶一次只能分配一個提款地址。一旦選好地址並提交到共識層,就無法撤消或再次更改。 提交前請再次檢查所提供地址的所有權和正確性。 - - -假設你的助記詞/種子助記詞在離線狀態下保持安全,沒有受到任何損害,那麼即使沒有提供提款地址,也不會對你的資金造成威脅。 如果未能添加提款憑證,以太幣只會被鎖定在驗證者帳戶中,直到提供提款地址為止。 - -## 完全退出質押 {#exiting-staking-entirely} - -在從驗證者帳戶餘額中轉出_任何_資金之前,需要提供提款地址。 - -希望完全退出質押並提取全部餘額的使用者,還必須使用驗證者金鑰簽署並廣播「自願退出」訊息,這將啟動退出質押流程。 此操作通過你的驗證者用戶端完成,並提交到你的共識節點,無需燃料。 - -驗證者退出質押的過程所需時間不同,具體取決於有多少驗證者同時退出。 完成此流程後,該帳戶將不再負責執行​​驗證者網路職責,不再有資格獲得酬勞,且他們的以太幣不再處於「質押狀態」。 此時該帳戶將被標記為完全「可提款」。 - -一旦帳戶被標記為「可提款」,並且已提供提款憑證,使用者無需執行任何操作,靜靜等待即可。 區塊提交者將自動連續掃描帳戶,尋找符合資格的退出資金,你的帳戶餘額將在下一次掃描期間全額轉移(也稱為「全額提款」)。 - -## 何時啟用質押提款? {#when} - -質押提款現已上線! 提款功能在 2023 年 4 月 12 日進行的上海/卡佩拉升級中啟用。 - -上海/卡佩拉升級讓之前質押的以太幣得以回收到常規以太坊帳戶中。 這結束了質押流動性的循環,使以太坊在構建永續、可擴展、安全的去中心化生態系統的道路上又更近一步。 - -- [關於以太坊歷史的更多資訊](/history/) -- [關於以太坊開發藍圖的更多資訊](/roadmap/) - -## 提款付款流程如何運作? {#how-do-withdrawals-work} - -給定驗證者是否有資格提款,由驗證者帳戶本身的狀態決定。 在任何給定時間都不需要使用者輸入來確定帳戶是否應該發起提款—整個過程由共識層在連續循環上自動完成。 - -### 想透過視覺方式學習? {#visual-learner} - -查看 Finematics 對以太坊質押提款的解釋: - - - -### 驗證者「掃描」 {#validator-sweeping} - -當驗證者準備提交下一個區塊時,需要建立一個提款隊列,其中最多包含 16 項符合資格的提款。 最初從驗證者索引 0 開始,根據協議規則,確定此帳戶是否有符合條件的提款,如果有,則將其添加到隊列中。 提交下一個區塊的驗證者們將從上一個區塊停止的地方開始,按順序依次進行。 - - -想像一下指針式時鐘。 時鐘上的指針指向小時,朝一個方向前進,不會跳過任何小時,並最終在到達最後一個數字後再次回到起點。

-現在,假設時鐘不是 1 到 12,而是 0 到 N (共識層上註冊的驗證者帳戶總數,截至 2023 年 1 月超過 500,000 個)。

-時鐘上的指針指向下一個驗證者,需要檢查其是否具備提款資格。 它從 0 開始,一路前進,不跳過任何帳戶。 到達最後一個驗證者後,從頭開始繼續循環。 -
- -#### 檢查帳戶提款情況 {#checking-an-account-for-withdrawals} - -當提交者在驗證者中掃描可能的提款時,每個被檢查的驗證者都會通過一系列簡短的問題接受評估,以確定是否應該觸發提款,如果是,應該提取多少以太幣。 - -1. **是否已提供提款地址?**如果未提供提款地址,則跳過該帳戶,不發起提款。 -2. **驗證者是否已退出並可提款?**如果驗證者已完全退出,且已達到其帳戶被視為「可提款」的時期,則會處理全額提款。 這會將全部餘額轉移至提款地址。 -3. **有效餘額是否已滿 32?**如果帳戶有提款憑證,未完全退出,且有 32 以上的酬勞待提取,將進行部分提款,僅轉出超過 32 的酬勞至使用者提款地址。 - -在驗證者的生命週期中,驗證者營運商只執行兩項直接影響此流程的操作: - -- 提供提款憑證以實現任何形式的提款 -- 退出網路,觸發全額提款 - -### 燃料費 {#gas-free} - -這種質押提款方法避免了質押者手動提交請求提取特定數量以太幣的交易。 這意味著**不需要燃料(礦工費)**,並且提款也無需爭取現有的執行層區塊空間。 - -### 我多久可以獲得一次質押酬勞? {#how-soon} - -一個區塊最多可以處理 16 筆提款。 按照這個速度,每天可以處理 115,200 次驗證者提款(假設沒有遺漏時隙)。 如上所述,不符合提款條件的驗證者將被跳過,從而縮短完成掃描的時間。 - -擴展此計算,我們可以估計處理給定數量的提款所需的時間: - - - -|提款數量 |完成時間 | -| :-------------------: | :--------------: | -| 400,000 | 3.5 日 | -| 500,000 | 4.3 日 | -| 600,000 | 5.2 日 | -| 700,000 | 6.1 日 | -| 800,000 | 7.0 日 | - - - -如你所見,隨著網路上驗證者的增加,速度會變慢。 遺漏時隙增加可能會相應地降低速度,但這通常代表可能結果中較慢的一面。 - -## 常見問題 {#faq} - - -不可以,提供提款憑證的過程是一次性的,一旦提交就無法更改。 - - - -通過設定執行層提款地址,該驗證者的提款憑證已永久更改。 這意味著舊憑證將失效,新憑證將直接指向執行層帳戶。 - -提款地址可以是智慧型合約(由其程式碼控制),也可以是外部所有帳戶(EOA,由私密金鑰控制)。 目前,這些帳戶無法將訊息傳回共識層,以表明驗證者憑證的更改,增加此功能會給協議增加不必要的複雜性。 - -如果無法更改特定驗證者的提款地址,使用者可以選擇將智慧型合約設置為可以處理金鑰輪換的提款地址,例如保險箱。 將資金設置為自己的外部帳戶的使用者可以執行完全退出以提取所有質押資金,然後使用新憑證重新質押。 - - - - -如果你參與質押池或持有質押代幣,則應向你的提供商諮詢,了解有關如何處理質押提款的詳細資訊,因為每種服務的運作方式不同。 - -一般來說,使用者應該可以自由地收回其質押的以太幣,或者更改他們使用的質押提供商。 如果特定質押池變得過大,則可以退出、贖回資金,並透過較小的提供商重新質押。 或者,如果積累了足夠的以太幣,你可以在家進行質押。 - - - - -是的,只要你的驗證者提供了提款地址。 必須提供一次才能啟用任何提款,然後酬勞支付將在每次驗證器掃描時,每隔幾天自動觸發一次。 - - - - -不會,如果你的驗證者在網路上仍然處於活躍狀態,則不會自動發生全額提款。 需要手動啟動自願退出。 - -一旦驗證者完成退出過程,並且假設該帳戶具有提款憑證,餘額將在下一次驗證者掃描期間提出。 - - - - -提款設計為自動推送,轉移任何未主動質押的以太幣。 包括已完成退出流程帳戶的全部餘額。 - -無法手動請求提取特定數量的以太幣。 - - - - -建議驗證操作者訪問質押啟動面板提款頁面以便找到更多關於驗證者需要為提款作出的準備、活動時間,以及提款相關的詳細資訊。 - -若想先在測試網上測試你的設定,請造訪 Holesky 測試網質押啟動面板開始測試。 - - - - -否。 驗證者退出並成功提取其全部餘額後,任何後續存入該驗證者的資金都會在下一次驗證者掃描期間自動轉移到提款地址。 要重新質押以太幣,必須啟用新的驗證者。 - - -## 了解更多 {#further-reading} - -- [質押啟動面板提款](https://launchpad.ethereum.org/withdrawals) -- [EIP-4895:將提款作為操作推送至信標鏈。](https://eips.ethereum.org/EIPS/eip-4895) -- [以太坊牧貓人組織 - 上海](https://www.ethereumcatherders.com/shanghai_upgrade/index.html) -- [PEEPanEIP #94:與 Potuz 和 Hsiao-Wei Wang 討論質押以太幣提款(測試中)](https://www.youtube.com/watch?v=G8UstwmGtyE) -- [PEEPanEIP#68:EIP-4895:信標鏈推動提款操作,由 Alex Stokes 主講](https://www.youtube.com/watch?v=CcL9RJBljUs) -- [了解驗證者有效餘額](https://www.attestant.io/posts/understanding-validator-effective-balance/) diff --git a/public/content/translations/zh-tw/08) Use cases 2/decentralized-identity/index.md b/public/content/translations/zh-tw/08) Use cases 2/decentralized-identity/index.md deleted file mode 100644 index 08668d578f9..00000000000 --- a/public/content/translations/zh-tw/08) Use cases 2/decentralized-identity/index.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: 去中心化身分 -description: 什麼是去中心化身分,它為什麼很重要? -lang: zh-tw -template: use-cases -emoji: ":id:" -sidebarDepth: 2 -image: /images/eth-gif-cat.png -summaryPoint1: 傳統身分系統對你的身分識別進行中心化發行、維護和控制。 -summaryPoint2: 去中心化身分消除了對中心化第三方的依賴。 -summaryPoint3: 多虧了加密技術,使用者現在擁有了再次發行、持有和控制自身身分識別和證明的工具。 ---- - -現如今,身分幾乎支撐著我們生活的方方面面。 使用線上服務、開設銀行帳戶、選舉投票、購買房產、就業,所有這些事情都需要證明你的身分。 - -然而,傳統的身分管理系統長期以來一直依賴於中心化中間機構來發行、持有和控制你的身分識別和[身分證明](/glossary/#attestation)。 這意味著你無法掌控自己身分的相關資訊,也無法決定誰能夠存取你的個人身分資訊 (PII),以及各方擁有多大的訪問權限。 - -為了解決這些問題,我們在以太坊等公共區塊鏈上構建了去中心化身分系統。 去中心化身分允許每個人管理他們的身分相關資訊。 借助去中心化身分解決方案,_你_可以建立身分識別、聲明和持有你的身分證明,而無需依賴於中央機構,例如服務提供方或是政府。 - -## 什麼是身分認同? {#what-is-identity} - -身分意味著個人的自我意識,由獨特的特徵定義。 身分是指作為一個_個體_,即一個獨特的人類實體。 身分也可以是指其他非人類的實體,例如組織或機構。 - - - -## 什麼是身分識別? {#what-are-identifiers} - -身分識別是一些資訊,用來指向一個特定身分或多個身分。 常見的身分識別包含: - -- 姓名 -- 社會安全號碼/稅務識別號碼 -- 手機號碼 -- 出生日期和出生地點 -- 數位身分憑證,例如:電子郵件地址、使用者名稱、頭像 - -這些傳統的身分識別範例,均由中央實體發行、持有和控制。 你需要獲得政府的許可才能更改你的姓名,或者需要獲得社交媒體平台的許可才能更改你的帳號。 - -## 去中心化身分的好處 {#benefits-of-decentralized-identity} - -1. 去中心化身分增加了個人對身分識別資訊的掌握。 可以在無需依賴中心化機構和第三方服務的情況下,驗證去中心化身分識別和身分證明。 - -2. 去中心化身分解決方案為驗證和管理使用者身分,提供了一種去信任、無縫且保護隱私的方法。 - -3. 去中心化身分利用區塊鏈技術,在不同方之間建立信任,並提供加密擔保來驗證身分證明的有效性。 - -4. 去中心化身分使得身分資料具有可便攜性。 使用者將身分證明和身分識別儲存在行動裝置錢包中,並可以分享給他們選擇的任一夥伴。 去中心化身分識別和身分證明不會被鎖在發行組織的資料庫中。 - -5. 去中心化身分與新興的[零知識證明](/glossary/#zk-proof)技術應能完美搭配,這將使個人能夠證明他們擁有某物或做過某些事,而無需透露那是什麼。 這可以成為一種將信任與隱私結合在一起的強而有力方案,適用於投票等應用方面。 - -6. 去中心化身分能夠[防範女巫攻擊](/glossary/#anti-sybil)機制,識別一人分飾多角玩弄某系統,或向該系統發送垃圾訊息的情況。 - -## 去中心化身分使用案例 {#decentralized-identity-use-cases} - -去中心化身分有許多潛在的使用案例: - -### 1. 通用登入 {#universal-dapp-logins} - -去中心化身分可以使用去中心化驗證,有助於替代基於密碼的登入方式。 服務提供商可以向使用者簽發身分證明,這些證明可以儲存在以太坊錢包中。 一個身分證明範例是[非同質化代幣](/glossary/#nft),可以授予持有者訪問線上社群的權利。 - -[使用以太坊登入](https://login.xyz/)功能將允許伺服器能夠確認使用者的以太坊帳戶,並從他們的帳戶地址中獲取所需的身分證明。 這意味著使用者無需記住冗長的密碼,就能夠訪問平台和網站,進而改善使用者的線上體驗。 - -### 2. 「認識客戶」驗證 {#kyc-authentication} - -許多線上服務的使用,需要提供個人的身分證明和憑證,例如駕駛執照或國家護照。 但這種方式是有問題的,因為使用者的私人資訊有可能會被洩露,並且服務提供商無法驗證身分證明的真實性。 - -去中心化身分使公司能夠跳過傳統的[了解你的客戶 (KYC)](https://en.wikipedia.org/wiki/Know_your_customer) 流程,並透過可驗證憑證來核實使用者身分。 這降低了身份管理的成本,並防止使用偽造文件。 - -### 3 投票和線上社群 {#voting-and-online-communities} - -線上投票和社交媒體是去中心化身分的兩個新應用。 線上投票方案容易受到操縱,尤其是在惡意行為者創建虛假身分進行投票的情況下。 要求個人提供鏈上身分證明可以提高線上投票過程的完整性。 - -去中心化身分可以幫助創建沒有虛假帳戶的線上社群。 例如,每個用使用者可能必須使用鏈上身分系統,如以太坊名稱服務,來驗證他們的身分,從而減少機器人的可能性。 - -### 4 反女巫保護 {#sybil-protection} - -使用[平方投票法](/glossary/#quadratic-voting)的捐款應用程式很容易受到[女巫攻擊](/glossary/#sybil-attack),因為當更多人投票支持時,捐款的價值就會增加,這會激勵使用者將他們的貢獻分配給多個身分。 去中心化身分透過增加每位參與者的負擔來證明他們是真正的人,這有助於防止這種情況發生,而且通常也不必透露具體的私人資訊。 - -## 什麼是身分證明 {#what-are-attestations} - -身分證明是由一個實體提出的關於另一個實體的聲明。 如果你居住在美國,你的駕駛執照是由機動車輛管理局(一個實體)發布,它證明你(另一個實體)在法律上允許駕駛汽車。 - -身分證明與身分識別不同。 身分證明_包含_用於指向特定身分的身分識別,並聲明與此身分相關的屬性。 因此,你的駕駛執照具有身分識別(姓名、出生日期、地址),但也是關於你合法駕駛權利的證明。 - -### 什麼是去中心化身分識別? {#what-are-decentralized-identifiers} - -你的法定姓名或電子郵件地址等傳統身分識別依賴於第三方——政府和電子郵件提供商。 去中心化身分識別 (DID) 則不同-它們不由任何中央實體發行、管理或控制。 - -去中心化身分識別由個人發行、持有和控制。 [以太坊帳戶](/glossary/#account)是去中心化身分識別的一個範例。 你可以根據需要建立任意數量的帳戶,無需任何人的許可,也無需將它們儲存在中央註冊系統中。 - -去中心化身分識別儲存在分散式帳本([區塊鏈](/glossary/#blockchain))或[點對點網路](/glossary/#peer-to-peer-network)上。 這使得去中心化身分識別 (DID) 具有[全球唯一性、高可用的可解析性、和加密驗證性](https://w3c-ccg.github.io/did-primer/)。 去中心化身份識別可與不同的實體相關聯,包含個人、組織或政府機構。 - -## 什麼讓去中心化身分識別成為可能? {#what-makes-decentralized-identifiers-possible} - -### 1. 公鑰密碼學 {#public-key-cryptography} - -公鑰密碼學是一種能夠為某實體產生[公鑰](/glossary/#public-key)和[私鑰](/glossary/#private-key)的資安措施。 公鑰[密碼學](/glossary/#cryptography)在區塊鏈網路中用於驗證使用者身分並證明對數位資產的所有權。 - -一些去中心化身分識別,如以太坊帳戶,都有著公鑰與私鑰。 公鑰用於識別帳戶的控制者,而私鑰則可以簽署和解密此帳戶的訊息。 公鑰密碼學使用[加密簽名](https://andersbrownworth.com/blockchain/public-private-keys/)來驗證所有主張,提供了驗證實體並防止冒名頂替及使用假身分所需的證據。 - -### 2. 去中心化資料儲存 {#decentralized-datastores} - -區塊鏈充當可驗證的資料註冊系統:一個開放、去信任和去中心化的資訊儲存庫。 公共區塊鏈的存在使得不再需要將身分識別儲存在中心化的註冊系統上。 - -如果任何人需要確認去中心化身分識別的有效性,他們可以在區塊鏈上查找相關的公鑰。 這與需要由第三方進行驗證的傳統身分識別不同。 - -## 去中心化身分識別和身分證明要如何實現去中心化身分? {#how-decentralized-identifiers-and-attestations-enable-decentralized-identity} - -去中心化身分的概念是,與身分有關的資訊應該由自己控制,且是私密和可移植的,以去中心化身分識別和身分證明為基本構建模塊。 - -在去中心化身分的背景下,身分證明(也稱為[可驗證憑證](https://www.w3.org/TR/vc-data-model/))是由發行人所發布、可加密驗證的防篡改聲明。 實體(如,組織)發行的每個身分證明或可驗證憑證都與它們的去中心化身分識別有關。 - -由於去中心化身分識別儲存在區塊鏈上,任何人都可以在以太坊上交叉驗證發行人的去中心化身分識別,來驗證身分證明的有效性。 實際上,以太坊就像是一個全球目錄,能夠驗證與某些實體相關的去中心化身分識別。 - -去中心化身分識別是讓身分證明能夠自行控制和驗證的原因。 即使發行者不再存在,持有者也始終能夠證明,其身分證明的出處和有效性。 - -透過去中心化身分,來使去中心化身分識別能夠保護個人隱私資訊也至關重要。 例如,如果某人提交一個身分證明(駕駛執照),則驗證方不需要檢查身分證明中資訊的有效性。 反之,驗證者只需要獲得身分證明真實性的加密擔保以及發證機構的身分,就足以確定此證明是否有效。 - -## 去中心化身分中的身分證明類型 {#types-of-attestations-in-decentralized-identity} - -在基於以太坊的身分生態系統中,如何儲存和檢索身分證明資訊與傳統身分管理不同。 以下是在去中心化身分系統中發行、儲存和驗證身分證明的各種方法的概覽: - -### 鏈外身分證明 {#off-chain-attestations} - -將身份證明儲存在鏈上的一個問題是,其中可能包含個人想要保密的資訊。 以太坊區塊鏈具有公開性,因此不適合用於儲存此類身分證明。 - -解決方案是發行身分證明,由使用者在數位錢包中鏈外持有,但使用儲存在鏈上的發行人的去中心化身分識別進行簽名。 這些身分證明被編碼為 [JSON Web 代幣](https://en.wikipedia.org/wiki/JSON_Web_Token),其中包含發行人的數位簽名,從而可以輕鬆驗證鏈外聲明。 - -以下是解釋鏈外身分證明的假設場景: - -1. 某大學(發行人)產生身分證明(數位學歷證書),用其金鑰簽署,然後將證書頒發給 Bob(身分持有者)。 - -2. Bob 申請了一份工作並想向雇主證明他的學歷,因此他分享了行動裝置錢包中的身分證明。 公司(驗證者)可以透過檢查發行人的去中心化身分識別(即,其在以太坊上的公鑰),來確認身分證明的有效性。 - -### 可持續訪問的鏈外身分證明 {#offchain-attestations-with-persistent-access} - -在這種場景下,身分證明被轉換為 JSON 文件並儲存在鏈外(理想情況下儲存在[去中心化雲端儲存](/developers/docs/storage/)平台上,例如 IPFS 或 Swarm)。 然而,JSON 文件的[雜凑值](/glossary/#hash)儲存在鏈上,並透過鏈上註冊系統連結到去中心化身分識別。 所關聯的去中心化身分識別可以是發行人或接收者的身分證明。 - -這種方法使身份證明能夠獲得基於區塊鏈的持久性,同時確保聲明資訊的加密性和可驗證性。 它還允許選擇性揭露,因為私鑰的持有者可以解密資訊。 - -### 鏈上身分證明 {#onchain-attestations} - -鏈上身分證明保存在以太坊區塊鏈上的[智慧型合約](/glossary/#smart-contract)中。 智慧型合約(充當註冊系統)將身分證明對應到相關的鏈上去中心化身分識別(公開金鑰)。 - -以下範例展示了鏈上身分證明在實踐中的使用方式: - -1. 一家公司(XYZ 公司)計畫使用智慧型合約出售所有權股份,但只想賣給那些已經完成背景調查的買家。 - -2. XYZ 公司可以讓執行背景調查的公司,在以太坊上發行鏈上身分證明。 此身分證明可以證實某人已經通過背景調查,但不會暴露任何個人資訊。 - -3. 出售股份的智慧型合約可以檢查註冊合約以獲得經篩選之買家的身分,從而使智慧型合約可以確定哪些人被允許購買股份。 - -### 靈魂綁定代幣和身分 {#soulbound} - -[靈魂綁定代幣](https://vitalik.eth.limo/general/2022/01/26/soulbound.html)([不可轉移的非同質化代幣](/glossary/#nft))可用於收集特定錢包獨有的資訊。 這有效地創建了綁定到特定以太坊地址的唯一鏈上身分,這可能包括代表成就的代幣(例如完成某些特定的線上課程或在遊戲中超過分數門檻)或社區參與代幣。 - -## 使用去中心化身分 {#use-decentralized-identity} - -有許多雄心勃勃的專案使用以太坊作為去中心化身分解決方案基礎: - -- **[以太坊名稱服務 (ENS)](https://ens.domains/)** - _一個去中心化的鏈上命名系統,適合機器可讀的識別符號,例如以太坊錢包地址、內容雜湊值和中繼資料。_ -- **[SpruceID](https://www.spruceid.com/)** - _去中心化身分專案,它允許使用者使用以太坊帳戶和以太坊名稱服務個人資料來控制數位身分,而不是依賴第三方服務。_ -- **[以太坊證明服務 (EAS)](https://attest.sh/)** - _一種去中心化分類帳/協議,用於對任何事物進行鏈上或鏈下證明。_ -- **[人性證明](https://www.proofofhumanity.id)** - _人性證明 (PoH) 是建立在以太坊上的社交身分驗證系統。_ -- **[BrightID](https://www.brightid.org/)** - _一個去中心化的開源社交身分網路,旨在通過創建和分析社交圖譜來改革身分驗證。_ -- **[walt.id](https://walt.id)** — _一種使開發者和組織能夠利用自主權身份、非同質化代幣/魂縛代幣的開源去中心化身份及錢包基礎設施。_ -- **[Veramo](https://veramo.io/)** - _ 一種 JavaScript 框架,讓任何人都可以輕鬆地在他們的應用程式中使用可加密驗證的資料。_ - -## 延伸閱讀 {#further-reading} - -### 文章 {#articles} - -- [區塊鏈使用案例:數位身分中的區塊鏈](https://consensys.net/blockchain-use-cases/digital-identity/) — _ConsenSys_ -- [什麼是以太坊 ERC725? 區塊鏈上的自我主權身分管理](https://cryptoslate.com/what-is-erc725-self-sovereign-identity-management-on-the-blockchain/) — _Sam Town_ -- [區塊鏈如何解決數位身分問題](https://time.com/6142810/proof-of-humanity/) — _Andrew R. Chow_ -- [什麼是去中心化身分以及你為什麼需要關心?](https://web3.hashnode.com/what-is-decentralized-identity) — _Emmanuel Awosika_ -- [去中心化身份簡介](https://walt.id/white-paper/digital-identity) — _Dominik Beron_ - -### 影片 {#videos} - -- [去中心化身分(直播獎勵環節)](https://www.youtube.com/watch?v=ySHNB1za_SE&t=539s) — _一個很好的去中心化身分解說影片,創作者 Andreas Antonopolous_ -- [使用以太坊和去中心化身分登錄 Ceramic、IDX、React 和 3ID Connect](https://www.youtube.com/watch?v=t9gWZYJxk7c) — _YouTube 使用教學,作者 Nader Dabit,介紹如何構建身分管理系統,透過以太坊錢包建立、讀取和更新使用者個人資料。_ -- [BrightID - 以太坊上的去中心化身分](https://www.youtube.com/watch?v=D3DbMFYGRoM) — _Bankless 播客節目討論 BrightID,一個以太坊上的去中心化身分解決方案_ -- [鏈外互聯網:去中心化身分 & 可驗證憑證](https://www.youtube.com/watch?v=EZ_Bb6j87mg) — Evin McMullen 在 EthDenver 2022 的演講 -- [Verifiable Credentials Explained(可驗憑證說明)](https://www.youtube.com/watch?v=ce1IdSr-Kig) - 由 Tamino Baumann 主持演示的 YouTube 講解視頻 - -### 社群 {#communities} - -- [GitHub 上的 ERC-725 聯盟](https://github.com/erc725alliance) — _在以太坊區塊鏈上管理身分的 ERC725 標準的支持者_ -- [SpruceID Discord 伺服器](https://discord.com/invite/Sf9tSFzrnt) — _研究使用以太坊登錄的愛好者和開發者社群_ -- [Veramo Labs](https://discord.gg/sYBUXpACh4) — _一個開發人員社區,致力於為應用程式構建可驗證資料的框架_ -- [walt.id](https://discord.com/invite/AW8AgqJthZ) — _由開發者和構建者組成的社區,致力於開發各個行業的去中心化身份應用案例_ diff --git a/public/content/translations/zh-tw/08) Use cases 2/desci/index.md b/public/content/translations/zh-tw/08) Use cases 2/desci/index.md deleted file mode 100644 index 457fc3b979c..00000000000 --- a/public/content/translations/zh-tw/08) Use cases 2/desci/index.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: 去中心化科研 (DeSci) -description: 以太坊的去中心化科研概觀 -lang: zh-tw -template: use-cases -emoji: ":microscope:" -sidebarDepth: 2 -image: /images/future_transparent.png -alt: "" -summaryPoint1: 當前科學系統的全球開放性替代方案。 -summaryPoint2: 使科學家得以進行募資、試驗研究、資料分享、發表見解等活動的技術。 -summaryPoint3: 以開放科學運動為原則。 ---- - -## 什麼是去中心化科研 (DeSci)? {#what-is-desci} - -去中心化科研 (DeSci) 是一項以建置公共基礎設施,利用 [Web3](/glossary/#web3) 技術堆棧以公平及公正合理的方式融資、建立、審查、認證、儲存和推廣科學知識為目標的運動。 - -去中心化科研的目標是創建一個生態系統,鼓勵科學家公開分享研究計畫,在開放任何人輕易獲得甚至參與研究的同時,肯定該科學家的貢獻。 去中心化科研的理念是:所有人都有獲得科學知識的權利,因此科學研究過程應該透明化。 去中心化科研正在開創一種更去中心化且廣泛的科學研究模型,使其更能抵抗中心化管理機構的審查與控制。 去中心化科研的目標是,藉由融資、科研工具與交流渠道的去中心化,為跳脫框架的新點子開創出一個能夠欣欣向榮的環境。 - -去中心化科研允許更多樣化的資金來源(從[去中心化自治組織](/glossary/#dao)、[平方募資](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531)到衆籌等等),讓資料和方法更易獲取,並透過激勵實現可重複性。 - -### Juan Benet - 去中心化科研運動 - - - -## 去中心化科研如何改善科學研究 {#desci-improves-science} - -這份有待補充的清單列出了科學領域中的關鍵問題,以及去中心化科研所能提供的協助方案 - -| **去中心化科研** | **傳統科研** | -| ------------------------------------------------- | ---------------------------------- | -| 資金分配**由公眾**使用平方募資或去中心化自治組織等機制決定。 | 小型、封閉、**中心化團體**負責控制資金分配。 | -| 能夠與**世界各地**的同儕組成自由的團隊並展開合作。 | 你的合作受資助組織和所屬機構**限制**。 | -| 資金決策在線上進行且**透明度高**。 會探索全新的融資機制。 | 資金決策較為耗時且**透明度有限**。 融資機制有限。 | -| 透過 [Web3](/glossary/#web3) 科技,使用共享實驗室服務變得更輕鬆和更透明。 | 共享實驗室資源的過程往往**較為遲緩且透明度不足**。 | -| 可以開發**新的發表模式**,使用 Web3 基礎單元實現信任、透明度和存取普及化。 | 透過既有途徑發表研究通常被認為**低效、受偏見影響且會受到剝削**。 | -| 可以**藉由同儕審查工作獲得代幣與聲望**。 | **同儕審查工作是無償的**,只有商業出版商能獲益。 | -| 產生的**知識產權 (IP) 歸你所有**,且能根據透明條款加以分配。 | 產生的**知識產權歸屬於你所屬的機構**。 無法透明地獲得知識產權。 | -| 透過在鏈上公佈所有步驟,包括來自失敗工作的資料,**實現全面的研究共享**。 | **發表偏見**導致研究者傾向於只分享獲得成功結果的實驗。 | - -## 以太坊與去中心化科研 {#ethereum-and-desci} - -去中心化科研系統需要健全的保全,將金錢與交易開銷減到最低,還要有能夠開發各種應用程式的豐富生態系統。 以太坊提供了建置去中心化科研技術所需的一切。 - -## 去中心化科研的使用案例 {#use-cases} - -去中心化科研正在建置科學研究工具組件,引領傳統學術界進入數位世界。 以下是 Web3 可爲科學領域提供的使用案例。 - -### 學術發表 {#publishing} - -現行科學研究發表模式備受質疑,因為這種模式由出版方主導,而出版方又仰賴科學家、審查者與編輯的無償勞動,卻又收取高昂的發表費用。 大眾讀者通常藉由稅收間接支付了該研究的費用,卻往往無法閱讀相同作品,除非再次付款給出版方。 發表單篇科學論文的總費用動輒高達五位數 ($USD),不但辜負了科學知識作為[公共財產](/glossary/#public-goods)的使命,還為一小撮出版商帶來龐大利潤。 - -目前的免費公開平台通常是預印伺服器,[例如 ArXiv](https://arxiv.org/)。 然而,這些平台缺乏質量把關,無[防範女巫攻擊的機制](/glossary/#anti-sybil),且通常不會追蹤文章等級指標,換言之,它們通常只供投稿至傳統出版社之前流通作品。 SciHub 也提供免費瀏覽已發表的學術論文,但此途徑並不合法,且須待出版社收取報酬並將論文納入嚴格的版權法之後才得以在網站發布。 這開啟了一道關鍵缺口,也就是內建合法機制與激勵模型的開放式科學論文與資料。 Web3 能提供建立這種系統的工具。 - -### 可重複性與可複製性 {#reproducibility-and-replicability} - -可重複性和可複製性是科學研究的品質依據。 - -- 可重複的研究結果可由相同的團隊使用相同的方式多次達成。 -- 可複製的研究結果可由不同的團隊以相同的實驗方案達成。 - -全新的 Web3-內建工具可以確保科學發現以可重複性與可複製性為基礎。 我們可將優質的科學融入到學術界的技術體系中。 Web3 擁有為每個分析元件建立[證明](/glossary/#attestation)的能力,包括:原始資料、計算引擎以及應用結果。 共識系統的美妙之處在於,當這些要素由可靠的網路機制維護運作時,所有網路參與者都可以負責再次運算並驗證每一項結果。 - -### 資金來源 {#funding} - -目前資助科學的標準模式是個人或科學家團體向資助機構提出書面申請。 小部分值得信賴的人為申請表評分,並面試這一小撮申請人,再給予資金。 這個模式不但容易造成瓶頸,導致申請和獲得資助之間有時**需要等待好幾年**,還被認為極易**受到審查小組的偏見、自身利益和政治因素的影響**。 - -研究顯示,同一個提案被提交到不同的小組時,結果卻大相徑庭,可見資助審查小組難以選出高品質提案。 隨著資金變得越來越稀缺,這些款項都集中在少數資深研究者與較為保守的研究計劃上。 這導致了一個各方為資金搶破頭的環境,還鞏固了不健康的激勵措施,並抑制創新。 - -Web3 廣泛試驗過去中心化自治組織和 Web3 開發的不同激勵模型,因而有可能改善這種糟糕的融資模型。 [追溯性公共財募資](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c)、[平方募資](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531)、[去中心化自治組織治理](https://www.antler.co/blog/daos-and-web3-governance-the-promise-implications-and-challenges-ahead)及[代幣化激勵結構](https://cdixon.org/2017/05/27/crypto-tokens-a-breakthrough-in-open-network-design)都是科學募資的革命性 Web3 工具。 - -### 知識產權所有權和開發 {#ip-ownership} - -知識產權 (IP) 是傳統科學的一個大問題:從被困在大學或閒置在生物技術公司中,乃至難以估值。 然而,Web3 使用[非同質化代幣 (NFT)](/glossary/#nft) 解決數位資產(例如科學資料或文章)的所有權,這是 Web3 非常擅長的。 - -就像非同質化代幣可以將未來交易的收入返還給原創作者一樣,你可以建立透明的價值歸屬鏈來獎勵研究人員、管理機構(如去中心化自治組織),甚至是資料被收集的研究對象。 - -[知識產權非同質化代幣 (IP-NFT)](https://medium.com/molecule-blog/ip-nfts-for-researchers-a-new-biomedical-funding-paradigm-91312d8d92e6) 還是將正在進行的研究實驗之資料儲存庫去中心化的關鍵,並可以插入非同質化代幣與[去中心化金融](/glossary/#defi)金融化(從資產分割到借貸池與價值評估)。 它還允許如 [VitaDAO](https://www.vitadao.com/) 這樣的去中心化自治組織等鏈上原生實體直接在鏈上進行研究。 不可轉讓的[「靈魂綁定」代幣](https://vitalik.eth.limo/general/2022/01/26/soulbound.html)的出現,將可能在去中心化科研中扮演重要的角色,使個人能證明其與以太坊地址連結的個人經驗和證書。 - -### 資料儲存、存取和架構 {#data-storage} - -使用 Web3 模式可使人們更容易獲得科學資料,分佈式儲存使研究能在災難性事件中倖存下來。 - -起點必須是任何持有適當可驗證憑證的去中心化身分都可以訪問的系統。 這使得敏感資料能夠被可信方安全地複製,從而避免冗餘、抵抗審查,還能重現結果,並實現多方協作與添加新資料至資料集的能力。 [compute-to-data](https://7wdata.be/predictive-analytics/compute-to-data-using-blockchain-to-decentralize-data-science-and-ai-with-the-ocean-protocol) 等機密運算方法提供了替代性存取機制,為最敏感的資料建立了可靠的研究環境。 可靠的研究環境[被 NHS 引用](https://medium.com/weavechain/whats-in-store-for-the-future-of-healthcare-data-b6398745fbbb)作為面向未來的資料隱私和協作解決方案,它開創了一個生態系統,在這個生態系統中,研究人員可以使用標準化環境來安全地處理現場資料,以共享程式碼和實踐方式。 - -靈活的 Web3 資料處理方案支持上述情況,並為真正的開放科學奠定基礎,研究人員可以在沒有存取權限且不必支付費用的情況下為公共利益貢獻一己之力。 星際檔案系統、Arweave 和 Filecoin 等 Web3 公共資料處理方案專為去中心化進行了改良。 例如,dClimate 讓所有人都能獲得氣候和天氣數據,包括來自氣象站和預測氣候模型的數據。 - -## 參與 {#get-involved} - -探索各項計畫並加入去中心化科研社群 - -- [DeSci.Global:全球活動和聚會行事曆](https://desci.global) -- [Blockchain for Science Telegram](https://t.me/BlockchainForScience) -- [Molecule:資助你的研究計畫或為其募資](https://www.molecule.xyz/) -- [VitaDAO:藉由受贊助的長壽研究協議獲得資金](https://www.vitadao.com/) -- [ResearchHub:發布科學成果並與同行交流](https://www.researchhub.com/) -- [LabDAO:在電腦中折疊蛋白質](https://alphafodl.vercel.app/) -- [dClimate API:查詢去中心化社群收集的氣候數據](https://api.dclimate.net/) -- [DeSci Foundation:去中心化科研發表工具生成器](https://descifoundation.org/) -- [DeSci.World:供使用者查看、參與去中心化科研的單一窗口](https://desci.world) -- [OceanDAO:管理資料相關科學資金的去中心化自治組織](https://oceanprotocol.com/) -- [Opscientia:開放的去中心化科研工作流程](https://opsci.io/research/) -- [Bio.xyz:為你的生物技術去中心化自治組織或去中心化科研專案募資](https://www.bio.xyz/) -- [Fleming Protocol:推動協作生物醫學發現的開源式資料經濟](http://flemingprotocol.io/) -- [Active Inference Institute](https://www.activeinference.org/) -- [IdeaMarkets:實現去中心化的科學可信度](https://ideamarket.io/) -- [去中心化科研實驗室](https://www.desci.com/) -- [ValleyDAO:開放的全球社群,為合成生物學研究提供資金和轉譯支援](https://www.valleydao.bio) -- [Cerebrum DAO:尋找和培育解決方案以促進大腦健康並預防神經退化性疾病](https://www.cerebrumdao.com/) -- [CryoDAO:資助深低溫保存領域的「登月」研究](https://www.cryodao.org) - -歡迎建議上架新專案 - 請由查看我們的[上架政策](/contributing/adding-desci-projects/)開始! - -## 延伸閱讀 {#further-reading} - -- [由 Jocelynn Pearl 和 Ultrarare 撰寫的去中心化科研維基](https://docs.google.com/document/d/1aQC6zn-eXflSmpts0XGE7CawbUEHwnL6o-OFXO52PTc/edit#) -- [Jocelynn Pearl 為 a16z future 編寫的去中心化生物技術指南](https://future.a16z.com/a-guide-to-decentralized-biotech/) -- [去中心化科研的重要性](https://gitcoin.co/blog/desci-the-case-for-decentralised-science/) -- [去中心化科研指南](https://future.com/what-is-decentralized-science-aka-desci/) -- [去中心化科研資源](https://www.vincentweisser.com/decentralized-science) -- [Molecule 的生物製藥 IP-NFT - 技術性說明](https://www.molecule.xyz/blog/molecules-biopharma-ip-nfts-a-technical-description) -- [建立無需信任機制的科學系統 作者:Jon Starr](https://medium.com/@jringo/building-systems-of-trustless-science-1cd2d072f673) -- [Paul Kohlhaas - DeSci:去中心化科研的未來(播客)](https://anchor.fm/andrew-steinwold/episodes/Paul-Kohlhaas---DeSci-The-Future-of-Decentralized-Science---Zima-Red-ep-117-e1h683a) -- [一種去中心化科研的主動推論本體論:從情境式意義建構到知識共同體](https://zenodo.org/record/6320575) -- [去中心化科研:研究領域的未來 作者:Samuel Akinosho](https://lucidsamuel.medium.com/desci-the-future-of-research-b76cfc88c8ec) -- [科研融資(跋:去中心化科研與全新加密原語) 作者:Nadia](https://nadia.xyz/science-funding) -- [去中心化風潮正在擾亂藥物研發](https://medium.com/id-theory/decentralisation-is-disrupting-drug-development-28b5ba5d447f) - -### 影片 {#videos} - -- [去中心化科研是什麼?](https://www.youtube.com/watch?v=-DeMklVWNdA) -- [Vitalik Buterin 與科學家 Aubrey de Grey 關於長壽研究與加密貨幣之互動的討論](https://www.youtube.com/watch?v=x9TSJK1widA) -- [科學研究發表已毀。 Web3 能夠有所幫助嗎?](https://www.youtube.com/watch?v=WkvzYgCvWj8) -- [Juan Benet - 去中心化科研、獨立實驗室與大規模數據科學](https://www.youtube.com/watch?v=zkXM9H90g_E) -- [Sebastian Brunemeier - 去中心化科研如何能夠轉化生物醫學研究與創業投資](https://www.youtube.com/watch?v=qB4Tc3FcVbM) diff --git a/public/content/translations/zh-tw/08) Use cases 2/refi/index.md b/public/content/translations/zh-tw/08) Use cases 2/refi/index.md deleted file mode 100644 index 417e70f4291..00000000000 --- a/public/content/translations/zh-tw/08) Use cases 2/refi/index.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: 再生金融 (ReFi) -description: 再生金融概觀及當前使用案例。 -lang: zh-tw -template: use-cases -emoji: ":recycle:" -sidebarDepth: 2 -image: /images/future_transparent.png -alt: "" -summaryPoint1: 建立在再生原則上的替代性經濟體系 -summaryPoint2: 嘗試使用以太坊解決全球協調危機,如氣候變遷 -summaryPoint3: 大幅擴展生態效益資產(如已驗證碳權)的工具 ---- - -## 什麼是再生金融 (ReFi)? {#what-is-refi} - -**再生金融 (ReFi)** 是建立在[區塊鏈](/glossary/#blockchain)上的一整套想法及工具,目標是建立再生經濟,而非榨取式或剝削式經濟。 榨取式系統最終會耗盡可用資源並崩潰;若沒有再生機制,這套系統便缺乏韌性。 再生金融在此假設下運作:貨幣價值的創造必須脫離以非永續的手段,從我們星球及社群抽取資源。 - -相對的,再生金融的目標是透過建立再生循環以解決環境、公共或社會問題。 這些系統為參與者創造了價值,同時也有益於生態系統及社群。 - -再生金融的其中一個基礎是由 Capital Institute 的 John Fullerton 所提出的再生經濟概念。 他提出了支撐系統健康的[八項相互關聯的原則](https://capitalinstitute.org/8-principles-regenerative-economy/): - -![八個關聯原則](refi-regenerative-economy-diagram.png) - -再生金融專案透過[智慧型合約](/glossary/#smart-contract)及[去中心化金融 (DeFi)](/glossary/#defi) 應用程式來實現這些原則,從而獎勵再生行為,例如復原衰退的生態系統及促進氣候變遷及生物多樣性減損等國際性議題的大規模合作。 - -再生金融也和[去中心化科研 (DeSci)](/desci/) 運動重疊,此運動將以太坊當成融資、創建、審查、信貸、儲存及傳播科學知識的平臺。 去中心化科研工具有益於開發可驗證的再生活動實作及監控之標準及實踐,例如:植樹、消除海洋中的塑膠垃圾,或復原衰退的生態系統等再生活動。 - - - -## 碳權代幣化 {#tokenization-of-carbon-credits} - -**[自願性碳交易市場 (VCM)](https://climatefocus.com/so-what-voluntary-carbon-market-exactly/)** 是為專案融資的一種機制,此等專案會對碳排放產生經驗證的正向影響,能減少持續進行中的碳排放,或消除已排放到大氣中的溫室氣體。 此等專案在經過驗證後會收到稱為「碳權」的資產,碳權可出售給願意支援氣候行動的個人或組織。 - -除了自願性碳交易市場外,也有若干政府批准的官方碳交易市場(「規範市場」),目標是透過特定司法管轄區(如國家或地區)的法律或法規來制定碳權價格,控制可分配的許可供應量。 規範市場能獎勵其司法管轄區內的汙染排放者減少碳排放,但無法消除已被排放的溫室氣體。 - -雖然自願性碳交易市場已發展了數十年,它仍面臨各種問題: - -1. 流動性高度分散 -2. 不透明的交易機制 -3. 手續費過高 -4. 交易速度太慢 -5. 缺乏可擴容性 - -將自願性碳交易市場過渡到以區塊鏈為基礎的新型**數位碳交易市場 (DCM)** 可能是一個升級現有碳權驗證、交易及消費技術的好機會。 區塊鏈允許公開可驗證的資料、更廣泛的使用者存取權,以及更高的流動性。 - -再生金融專案採用區塊鏈科技來緩解傳統市場遇到的諸多問題: - -- **流動性集中於少數流動池中**,任何人都能在裡面自由交易。 大型組織或個人可以直接在流動池中交易,不用手動尋找買家/賣家,也不需要支付參與費用或預先註冊。 -- **所有交易都記錄在公開的區塊鏈上**。 數位碳交易市場中一出現碳權交易,每筆交易活動的路徑永遠都能被追蹤。 -- **交易幾乎即時完成**。 透過傳統市場獲得大量碳權可能會花上數天或數週的時間,但在數位碳交易市場中只需幾秒即可實現。 -- **交易活動不需要中間人**,中間人還會向你收取高額費用。 與傳統碳權相比,數位碳權顯著降低了成本。 -- **數位碳交易市場既可擴張**,亦可滿足個人及跨國公司的需求。 - -### 數位碳交易市場的核心元件 {#key-components-dcm} - -當前的數位碳交易市場由四個主要部分所組成: - -1. [Verra](https://verra.org/project/vcs-program/registry-system/) 和 [Gold Standard](https://www.goldstandard.org/) 等登記處可確保建立碳權的專案可信、可靠。 他們也運用資料庫來記錄數位碳權的來源,碳權可在其中轉移或用罄(註銷)。 - -一波建立於區塊鏈的創新專案正試圖顛覆該領域的現有企業。 - -2. 碳權跨鏈橋,又稱 代幣轉換器,提供了代表傳統登記處中的碳權並將其轉移到數位碳交易市場的技術。 著名例子包括 [Toucan Protocol](https://toucan.earth/)、[C3](https://c3.app/) 和 [Moss.Earth](https://moss.earth/)。 -3. 整合服務是一種向使用者端提供碳減排和/或移除碳權的服務,讓使用者可以宣稱碳權對環境的效益,並與全世界分享他們對氣候行動的支援。 - -例如,[Klima Infinity](https://www.klimadao.finance/infinity) 和 [Senken](https://senken.io/) 提供了由第三方開發並在既定標準(如 Verra)下發行的各種專案;其他如 [Nori](https://nori.com/) 就只提供了以其自家碳權標準開發的特定專案,這些專案由他們發行,並為之準備了自己的專門市場。 - -4. 基礎設施促使碳交易市場整體供應鏈的影響和效益隨之擴張。 [KlimaDAO](http://klimadao.finance/) 將流動性當成公共物品(允許任何人以透明的價格買賣碳權)供應,透過獎勵來提高碳交易市場和碳註銷(指碳權的配額永久減少)的吞吐量,並提供簡單易用的可交互運作工具來存取相關資料,以及收購和註銷各種代幣化碳權。 - -## 碳交易市場以外的再生金融 {#refi-beyond} - -雖然整體來說,目前各界對碳交易市場極為重視,且此領域中,特別看重從自願性碳交易市場轉換到數位碳交易市場,但「再生金融」一詞並不囿限於碳。 碳權以外的其他環境資產均可被開發和代幣化,這表示其他負面外部影響也可以在未來經濟體系的基礎層中定價。 此外,再生式的經濟模型也可用於其他領域,如使用 [Gitcoin](https://gitcoin.co/) 等平方募資平台為公共產品融資。 以開放參與及公平分配資源為核心精神的組織,讓每個人都能資助開放原始碼軟體專案以及教育、環保和社群導向專案。 - -透過將資本由榨取式的做法轉變成再生循環的資金流,對那些提供了社會、環境或公共利益,但可能難以透過傳統金融取得資金的專案及公司來說,他們因而能順利發展,並更快、更輕鬆地為社會產生正向外部影響。 轉變到此融資模式也開啟了更包容的經濟體系,各種背景的人都可以成為主動參與者,而非僅僅是被動的觀察者。 再生金融是以太坊的願景之一,可作為一種行動協調機制,解決人類及地球上所有生命正面臨的現存挑戰 — 並作為新經濟典範的基礎層,促進更包容且更永續的未來世紀。 - -## 關於再生金融的延伸閱讀 - -- [碳貨幣及其在經濟中的地位概觀](https://www.klimadao.finance/blog/the-vision-of-a-carbon-currency) -- [小說《未來部門》(Ministry for the Future),描繪了碳貨幣在對抗氣候變遷上起到的作用。](https://en.wikipedia.org/wiki/The_Ministry_for_the_Future) -- [Taskforce 針對擴張自願性碳交易市場所撰的詳細報告](https://www.iif.com/Portals/1/Files/TSVCM_Report.pdf) -- [由 Kevin Owocki 和 Evan Miyazono 針對再生金融所建的 CoinMarketCap 術語列表](https://coinmarketcap.com/alexandria/glossary/regenerative-finance-refi) diff --git a/public/content/translations/zh-tw/08) Use cases 2/social-networks/index.md b/public/content/translations/zh-tw/08) Use cases 2/social-networks/index.md deleted file mode 100644 index 62de84c45e9..00000000000 --- a/public/content/translations/zh-tw/08) Use cases 2/social-networks/index.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -title: 去中心化社交網路 -description: 以太坊去中心化社交網路概覽 -lang: zh-tw -template: use-cases -emoji: ":mega:" -sidebarDepth: 2 -image: /images/ethereum-learn.png -summaryPoint1: 基於區塊鏈的平台,用於社交互動、内容建立和分發。 -summaryPoint2: 去中心化社交媒體網路可保護用戶隱私和增強資料安全性。 -summaryPoint3: 代幣和非同質化代幣創造了將內容貨幣化的新方法。 ---- - -社交網路在我們的日常交流和互動中發揮著重要作用。 然而,這些平台的中心化控制產生了許多問題:資料洩露、伺服器中斷、平台禁言、審查制度和侵犯隱私,是社交媒體經常做出的一些取捨。 為了解決這些問題,開發者正在以太坊上建立社交網路。 去中心化社交網路可以解決傳統社交網路平台的許多問題,並提升用戶的整體體驗。 - -## 什麼是去中心化社交網路? {#what-are-decentralized-social-networks} - -去中心化社交網路是[基於區塊鏈](/glossary/#blockchain)的平台,允許使用者交換資訊以及向受眾發布內容。 由於這些應用程式在區塊鏈上運作,它們能夠去中心化且抵抗審查和不當控制。 - -許多去中心化的社交網路已成為現有社交媒體服務的替代品,例如 Facebook、LinkedIn、Twitter 和 Medium。 但基於區塊鏈的社交網路有許多功能,使其領先於傳統社交平台。 - - - -### 去中心化社交網路是如何運作的? {#decentralized-social-networks-overview} - -去中心化社交網路是一類[去中心化應用程式 (dApp)](/dapps/),由部署在區塊鏈上的[智慧型合約](/glossary/#smart-contract)提供支援。 合約程式碼充當這些應用程式的後端並定義它們的業務邏輯。 - -傳統社交媒體平台依靠資料庫來儲存使用者資訊、程式碼和其他形式的資料。 但這會產生單點故障並帶來重大風險。 例如,2021 年 10 月,Facebook 的伺服器[離線數小時](https://www.npr.org/2021/10/05/1043211171/facebook-instagram-whatsapp-outage-business-impact),造成使用者與平台的連線中斷,遭到廣泛的詬病。 - -去中心化社交網路存在於由全球數千個節點組成的[點對點網路](/glossary/#peer-to-peer-network)上。 即使某些節點發生故障,網路仍然會不間斷運作,使應用程式能夠抵禦故障和中斷。 - -基於以太坊建立的社交網路,使用去中心化存儲系統,如[星際文件系統 (IPFS)](https://ipfs.io/),可以保護使用者資訊不被利用和惡意使用。 不會有人將你的個人資訊出售給廣告商,駭客也無法竊取你的機密資訊。 - -許多基於區塊鏈的社交平台都有原生代幣,可以在沒有廣告收入的情況下實現貨幣化。 使用者可以購買這些代幣來存取某些功能、完成應用程式內購買或給他們喜愛的內容創作者小費。 - -## 去中心化社交網路的好處 {#benefits} - -1. 去中心化社交網路可抵抗審查,並對所有人開放。 這意味著**使用者不能被任意封禁**、被平台禁言或限制。 - -2. 去中心化社交網路**建立在開放原始碼理念**的基礎上,並使應用程式的原始碼公開供大眾檢驗。 透過去除傳統社交媒體中常見的不透明演算法實作,基於區塊鏈的社交網路可以讓使用者和平台創立者的利益保持一致。 - -3. 去中心化社交網路取消了「中間人」。 內容**創作者對其創作內容擁有直接所有權**,他們直接與追隨者、粉絲、買家和其他各方互動,雙方之間僅有智慧型合約。 - -4. 由於去中心化應用程式在以太坊網路上運作,而該網路是由一個全球點對點節點網路所維持,因此去中心化社交網路**較不易受到伺服器停機**和中斷的影響。 - -5. 去中心化社交平台透過[非同質化代幣 (NFT)](/glossary/#nft)、應用程式內加密貨幣支付等,為內容創作者提供**更好的貨幣化**框架。 - -6. 去中心化社交網路為使用者提供了**高度的隱私和匿名性**。 例如,個人可以透過[以太坊名稱服務](/glossary/#ens)設定檔或[錢包](/glossary/#wallet)登入基於以太坊的社交網路,而無需共享個人識別資訊 (PII),例如姓名、電子郵件地址等。 - -7. 去中心化社交網路依賴於去中心化的儲存,而不是中心化的資料庫,前者在保護使用者資料方面要好得多。 - -## 以太坊上的去中心化社交網路 {#ethereum-social-networks} - -由於其代幣的流行和龐大的使用者基數,以太坊網路已成為開發者建立去中心化社交媒體的首選工具。 以下是一些基於以太坊的社交網路範例: - -### Mirror {#mirror} - -[Mirror](https://mirror.xyz/) 是一個支援 web3 的寫作平台,旨在實現去中心化和為使用者所擁有。 使用者只需連接錢包即可在 Mirror 上免費閲讀和寫作。 使用者還可以收集寫作作品並訂閱他們喜歡的作者。 - -在 Mirror 上發布的文章會永久儲存在去中心化儲存平台 Arweave 上,並且可以鑄造為可收集的[非同質化代幣 (NFT)](/nft/),也稱為寫作非同質化代幣。 鑄造寫作非同質化代幣對作者來說是完全免費的,並且此非同質化代幣在以太坊[二層網路](/glossary/#layer-2)上收集,使交易變得實惠、快速且環保。 - -### MINDS {#minds} - -[MINDS](https://www.minds.com/) 是最常用的去中心化社交網路之一。 它的運作方式與 Facebook 類似,並且已經吸引了數百萬使用者。 - -使用者使用平台的原生 [ERC-20](/glossary/#erc-20) 代幣 $MIND 來購買物品。 使用者還可以透過發布熱門內容、為生態系統做出貢獻以及將其他人推薦給平台來賺取 $MIND 代幣。 - -## 使用去中心化社交網路 {#use-decentralized-social-networks} - -- **[Status.im](https://status.im/)** - _Status 是安全的訊息傳遞應用程式,使用開放程式碼、點對點協議和端到端加密來保護你的訊息免受第三方的侵害。_ -- **[Mirror.xyz](https://mirror.xyz/)** - _Mirror 是一個基於以太坊構建的使用者擁有的去中心化發布平台,供使用者眾籌創意、將內容貨幣化並建立高價值社群。_ -- **[Lens Protocol](https://lens.xyz/)** - _Lens Protocol 是一個可組合和去中心化的社交圖譜,可幫助創作者在去中心化網際網路的數位花園中的任何地方擁有自己的內容。_ -- **[Farcaster](https://farcaster.xyz/)** - _Farcaster 是一個充分去中心化的社交網路。 它是個支持多種用戶端的開放式協議,如電子郵件。_ - -## 以太坊上的 Web2 社交網路 {#web2-social-networks-and-ethereum} - -[Web3](/glossary/#web3) 原生社交平台並不是唯一試圖將區塊鏈技術融入社交媒體的平台。 許多中心化平台也計劃將以太坊結合到他們的基礎設施中: - -### Reddit {#reddit} - -Reddit 擁有[回饋式社群積分](https://cointelegraph.com/news/reddit-to-reportedly-tokenize-karma-points-and-onboard-500m-new-users),它們是 ERC-20 代幣,使用者可以透過發布優質內容和為線上社群 (subreddit) 貢獻以獲得此積分。 你可以在 subreddit 中兌換這些代幣,以獲得獨家特權和福利。 對於這個專案,Reddit 正在與 Arbitrum 合作,後者為一個[二層](/glossary/#layer-2)網路,旨在拓展以太坊交易。 - -該程式現已上線,使用[運行名為「Moons」的社群積分版本](https://www.reddit.com/r/CryptoCurrency/wiki/moons_wiki)的 r/CryptoCurrency subreddit。 根據官方描述,Moons“會為對 subreddit 做出貢獻的發佈者、評論者、修改者提供獎勵。” 由於這些代幣位於區塊鏈上(使用者通過錢包接收),他們獨立於 Reddit 且不會丟失。 - -除使用社群積分來解鎖特殊功能外,使用者亦可以在交易所用它們來換取法定貨幣。 此外,使用者擁有社群積分的數量決定了他們在社群決策過程中的影響力。 - -## 延伸閱讀 {#further-reading} - -### 文章 {#articles} - -- [去中心化社群媒體:Web3 社交技巧指南](https://www.coinbase.com/blog/decentralizing-social-media-a-guide-to-the-web3-social-stack) - _Coinbase Ventures_ -- [社交網路是下一個大的去中心化機會](https://www.coindesk.com/tech/2021/01/22/social-networks-are-the-next-big-decentralization-opportunity/) — _Ben Goertzel_ -- [Web3 承諾實現由社群推動的去中心化社交網路](https://venturebeat.com/2022/02/26/web3-holds-the-promise-of-decentralized-community-powered-social-networks/) — _Sumit Ghosh_ -- [區塊鏈社交媒體發展形勢概覽](https://www.gemini.com/cryptopedia/blockchain-social-media-decentralized-social-media) — _Gemini Cryptopedia_ -- [區塊鏈如何解決社交媒體隱私問題](https://www.investopedia.com/news/ethereum-blockchain-social-media-privacy-problem-linkedin-indorse/) — _Prableen Bajpai_ -- [社交網路的充分去中心化](https://www.varunsrinivasan.com/2022/01/11/sufficient-decentralization-for-social-networks) — _Varun Srinivasan_ - -### 影片 {#videos} - -- [去中心化社交媒體闡述](https://www.youtube.com/watch?v=UdT2lpcGvcQ) — _Coinmarketcap_ -- [DeSo 區塊鏈希望將社交媒體去中心化](https://www.youtube.com/watch?v=SG2HUiVp0rE) — _Bloomberg Technology_ -- [去中心化社交媒體的未來展望 - Balaji Srinivasan、Vitalik Buterin 和 Juan Benet](https://www.youtube.com/watch?v=DTxE9KV3YrE) — _ETHGlobal_ - -### 社群 {#communities} - -- [r/CryptoCurrency subreddit](https://www.reddit.com/r/CryptoCurrency/) diff --git a/public/content/translations/zh-tw/09) Learn Pages/bridges/index.md b/public/content/translations/zh-tw/09) Learn Pages/bridges/index.md deleted file mode 100644 index 36bd6631ca6..00000000000 --- a/public/content/translations/zh-tw/09) Learn Pages/bridges/index.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: 區塊鏈跨鏈橋簡介 -description: 跨鏈橋讓使用者能在不同的區塊鏈之間轉移資金 -lang: zh-tw ---- - -# 區塊鏈跨鏈橋 {#prerequisites} - -_Web 3 已發展成由一層和二層網路擴容解決方案組成的生態系統,每個解決方案都有獨特的功能和取捨。 隨著區塊鏈協議數量的增加,跨鏈移動資產的需求也隨之增加。 為了滿足此需求,我們需要跨鏈橋。_ - - - -## 什麼是跨鏈橋? {#what-are-bridges} - -區塊鏈跨鏈橋的作用,與現實世界中的橋樑,功用是一樣的。 就像現實橋樑連接兩地一樣,跨鏈橋連接的是兩個區塊鏈生態系統。 **跨鏈橋透過資訊的傳輸和資產的轉移,來促進區塊鏈之間的通訊**。 - -讓我們來看一個例子: - -你來自美國,正計劃去歐洲旅行。 你有美元,但你需要歐元才能消費。 為了將你的美元兌換成歐元,你可以支付少量手續費來換匯。 - -但是,若要進行類似的換匯以使用另一個[區塊鏈](/glossary/#blockchain),你要怎麼做? 假設你想用以太坊主網上的[以太幣](/glossary/#ether)兌換 [Arbitrum](https://arbitrum.io/) 上的以太幣。 就像我們為歐元進行貨幣換匯一樣,我們需要一種機制,將我們的以太幣從以太坊轉移到 Arbitrum。 跨鏈橋能實現這種交易。 在這個例子中,[Arbitrum 有一個原生的跨鏈橋](https://bridge.arbitrum.io/),可以將以太幣從以太坊主網轉移到 Arbitrum。 - -## 為什麼我們需要跨鏈橋? {#why-do-we-need-bridges} - -所有區塊鏈都有局限性。 以太坊需要[卷軸](/glossary/#rollups)才能擴容及跟上需求。 或者,Solana 和 Avalanche 等一層網路,透過不同的設計來實現更高的吞吐量,但是犧牲了去中心化。 - -然而,所有的區塊鏈都是在孤立的環境中發展,並具有不同的規則和[共識](/glossary/#consensus)機制。 這意味著其無法原生通訊,代幣也無法在區塊鏈之間自由移動。 - -跨鏈橋的存在就是為了連接區塊鏈,使彼此之間能傳送資訊和代幣。 - -**跨鏈橋可以做到**: - -- 資產和資訊的跨鏈轉移。 -- 能讓[去中心化應用程式](/glossary/#dapp)利用各區塊鏈的優勢,從而增強區塊鏈的能力(因為協議現在有了更多的創新設計空間)。 -- 能讓使用者存取新的平台,並徹底善用不同區塊鏈的優勢。 -- 能讓來自不同區塊鏈生態系統的開發者相互合作,並為使用者建立新平台。 - -[如何通過跨鏈橋將代幣轉移至第二層網路](/guides/how-to-use-a-bridge/) - - - -## 跨鏈橋使用案例 {#bridge-use-cases} - -以下是一些可以使用跨鏈橋的場景: - -### 降低交易費 {#transaction-fees} - -假設你在以太坊主網上擁有以太幣,但想要以更便宜的交易費來探索不同的去中心化應用程式。 將你的以太幣從主網跨鏈傳送到以太坊二層網路卷軸,可以享有更低的交易費。 - -### 在其他區塊鏈上的去中心化應用程式 {#dapps-other-chains} - -假設你一直在以太坊主網上使用 Aave 借出泰達幣,但在 Polygon 上使用 Aave 借出泰達幣的利率更高。 - -### 探索區塊鏈生態系統 {#explore-ecosystems} - -如果你在以太坊主網上擁有以太幣,並想探索其他一層網路,以試試其原生的去中心化應用程式。 你可以使用跨鏈橋,將以太幣從以太坊主網轉移到其他一層網路。 - -### 擁有原生加密資產 {#own-native} - -假設你想擁有原生比特幣 (BTC),但你的資金只存在於以太坊主網上。 要在以太坊上獲得比特幣,你可以購買包裝比特幣 (WBTC)。 然而,包裝比特幣是以太坊網路原生的 [ERC-20](/glossary/#erc-20) 代幣,這意味著它是以太坊版本的比特幣,而不是比特幣區塊鏈上的原始資產。 要擁有原生比特幣,你必須使用跨鏈橋將資產從以太坊轉移到比特幣。 這將會橋接包裝比特幣並轉換為原生比特幣。 或者,你可能擁有比特幣,並想在以太坊的[去中心化金融](/glossary/#defi)協定中使用它。 這將需要以另一種方式橋接,從比特幣到包裝比特幣,然後可將包裝比特幣作為以太坊上的資產。 - - - 你也可以使用 中央化交易所 完成上述所有操作。 但是,除非你已有資金在交易所內,否則會涉及多個步驟,而你可能會覺得使用跨鏈橋比較好。 - - - - -## 跨鏈橋的類型 {#types-of-bridge} - -跨鏈橋具有許多不同的設計類型和複雜度。 通常,跨鏈橋分為兩類,即受信任和去信任跨鏈橋。 - -| 受任跨鏈橋 | 去信任跨鏈橋 | -| -------------------------------------------- | ---------------------------------------------------------- | -| 受信任跨鏈橋倚賴一個中心實體或系統來運作。 | 去信任跨鏈橋利用智慧型合約及演算法來運行。 | -| 在資金監管及跨鏈橋的安全性方面,具有許多信任假設。 使用者大多有賴於跨鏈橋運營商的聲譽。 | 屬於去信任,即跨鏈橋的安全性與底層區塊鏈的安全性相同。 | -| 使用者需放棄對其加密資產的控制。 | 透過[智慧型合約](/glossary/#smart-contract),去信任跨鏈橋讓使用者能繼續控制他們的資金。 | - -簡而言之,我們可以說受信任跨鏈橋具有信任假設,去信任跨鏈橋則是將信任最小化,不必在底層領域之外做出新的信任假設。 這些術語可做這樣的解釋: - -- **去信任**:安全性等同於底層領域。 如 [Arjun Bhuptani 在本文中所述。](https://medium.com/connext/the-interoperability-trilemma-657c2cf69f17) -- **信任假設:**在系統中加入外部驗證者,擺脫底層領域的安全性,其加密經濟的安全性因此降低。 - -為了更加理解這兩種方法的主要區別,讓我們舉個例子: - -想像你在機場的安檢站。 檢查站有兩種類型: - -1. 人工檢查站-由安檢人員操作,其以人工方式檢查機票和身份的所有細節,完畢後才提供登機證。 -2. 自助報到-由一台機器操作,你可以在其中輸入你的航班詳細資訊,一切檢查完畢後將會收到登機證。 - -人工檢查站類似於受信任模式,因為它需要倚賴第三方(即工作人員)來運作。 使用此服務,你相信工作人員會做出正確的決定並正確使用你的私人資訊。 - -自助報到類似去信任模式,因為卸下了操作員的角色,並使用科技進行操作。 使用者始終可以控制他們的資料,且不必將私人資訊交託給第三方。 - -許多橋接解決方案採用的模式,介於這兩個極端之間,去信任程度不等。 - - - -## 使用跨鏈橋的風險 {#bridge-risk} - -跨鏈橋仍在早期發展階段。 很可能尚未發現最佳的跨鏈橋設計。 與任何類型的跨鏈橋互動都有風險: - -- **智慧型合約風險 —** 程式碼漏洞風險,這可能導致使用者資金流失 -- **技術風險 —** 軟體故障、程式碼漏洞、人為錯誤、垃圾郵件和惡意攻擊可能會干擾使用者作業 - -此外,受信任跨鏈橋由於增加了信任假設,因此帶來額外的風險,例如: - -- **審查風險 —** 跨鏈橋運營商理論上可以阻止使用者利用跨鏈橋來轉移資產 -- **託管風險 —** 跨鏈橋運營商可以串通盜取使用者的資金 - -如果出現以下情況,使用者的資金將面臨風險: - -- 智慧型合約中存在漏洞 -- 使用者出錯 -- 底層區塊鏈被駭客入侵 -- 在某個受信任跨鏈橋中,跨鏈橋運營商心懷不軌 -- 跨鏈橋被駭客入侵 - -最近一次駭客攻擊針對的是 Solana 的 Wormhole 跨鏈橋,[在駭客攻擊期間其被竊取了 12 萬包裝以太幣(3.25 億美元)](https://rekt.news/wormhole-rekt/)。 很多[最嚴重的區塊鏈駭客事件都與跨鏈橋有關](https://rekt.news/leaderboard/)。 - -跨鏈橋對於讓使用者加入以太坊二層網路至關重要,對於想要探索不同生態系統的使用者也是如此。 然而,與跨鏈橋互動涉及上述風險,使用者必須了解跨鏈橋做出了哪些權衡取捨。 這裡提供一些[跨鏈安全性策略](https://blog.debridge.finance/10-strategies-for-cross-chain-security-8ed5f5879946)。 - - - -## 延伸閱讀 {#further-reading} - -- [EIP-5164:跨鏈執行](https://ethereum-magicians.org/t/eip-5164-cross-chain-execution/9658) _2022 年 6 月 18 日 - Brendan Asselstine_ -- [二層網路跨鏈橋風險框架](https://gov.l2beat.com/t/l2bridge-risk-framework/31) _2022 年 7 月 5 日 - Bartek Kiepuszewski_ -- [「為什麼未來會多鏈並存但不是跨鏈」](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) _2022 年 1 月 8 日 - Vitalik Buterin_ diff --git a/public/content/translations/zh-tw/09) Learn Pages/energy-consumption/index.md b/public/content/translations/zh-tw/09) Learn Pages/energy-consumption/index.md deleted file mode 100644 index d487b73f5ac..00000000000 --- a/public/content/translations/zh-tw/09) Learn Pages/energy-consumption/index.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: 以太坊能耗 -description: 了解以太坊能耗時的必要基本資訊。 -lang: zh-tw ---- - -# 以太坊的能耗 {#proof-of-stake-energy} - -以太坊是講求綠色環保的區塊鏈。 以太坊的[權益證明](/developers/docs/consensus-mechanisms/pos)共識機制,使用以太幣而非[能源來維持網路的安全性](/developers/docs/consensus-mechanisms/pow)。 以太坊全球網路的能耗約為[每年 0.0026 太瓦/時](https://carbon-ratings.com/eth-report-2022)。 - -以太坊能源消耗的估算方式,是由 [CCRI (Crypto Carbon Ratings Institute)](https://carbon-ratings.com) 的研究而來。 這項研究由下而上估算了以太坊網路的電力消耗量和碳足跡 ([請參閲報告](https://carbon-ratings.com/eth-report-2022))。 他們測量了不同節點的電力消耗,這些節點具有不同的硬體和用戶端軟體配置。 以太坊網路年度電力消耗之估計值為 **2,601(兆瓦/時)**(0.0026 太瓦/時);套用區域特定碳強度因素後,等同一年碳排放為 **870 公噸二氧化碳當量**。 該值會隨著節點加入或離開網路而變化 - 你可使用[劍橋區塊鏈網路永續性指標](https://ccaf.io/cbnsi/ethereum)(注意:他們使用稍微不同的方法進行估計,詳情請見官網)提供的滾動式七天平均估計值持續追蹤。 - -要深入瞭解以太坊的能耗,我們可以將其與一些其他產品與產業的年度估計值進行比較。 這有助於我們更加了解以太坊的估計值是高還是低。 - - - -上圖比較了以太坊與其他幾種產品和產業的估計能源消耗(單位為太瓦時/年)。 此處提供的估計值來自 2023 年 7 月取用的公開資訊,下表亦提供來源連結。 - -| | 年度能耗(太瓦時) | 相較於權益證明以太坊 | 來源 | -|:----------- |:----------:|:----------:|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| 全球資料中心 | 190 | 73,000 倍 | [來源](https://www.iea.org/commentaries/data-centres-and-energy-from-global-headlines-to-local-headaches) | -| 比特幣 | 149 | 53,000 倍 | [來源](https://ccaf.io/cbnsi/cbeci/comparisons) | -| 開採金礦 | 131 | 50,000 倍 | [來源](https://ccaf.io/cbnsi/cbeci/comparisons) | -| 美國電競產業\* | 34 | 13,000 倍 | [來源](https://www.researchgate.net/publication/336909520_Toward_Greener_Gaming_Estimating_National_Energy_Use_and_Energy_Efficiency_Potential) | -| 工作量證明以太坊 | 21 | 8,100 倍 | [來源](https://ccaf.io/cbnsi/ethereum/1) | -| Google | 19 | 7,300 倍 | [來源](https://www.gstatic.com/gumdrop/sustainability/google-2022-environmental-report.pdf) | -| 網飛 | 0.457 | 176 倍 | [來源](https://assets.ctfassets.net/4cd45et68cgf/7B2bKCqkXDfHLadrjrNWD8/e44583e5b288bdf61e8bf3d7f8562884/2021_US_EN_Netflix_EnvironmentalSocialGovernanceReport-2021_Final.pdf) | -| PayPal | 0.26 | 100 倍 | [來源](https://s202.q4cdn.com/805890769/files/doc_downloads/global-impact/CDP_Climate_Change_PayPal-(1).pdf) | -| AirBnB | 0.02 | 8 倍 | [來源](https://s26.q4cdn.com/656283129/files/doc_downloads/governance_doc_updated/Airbnb-ESG-Factsheet-(Final).pdf) | -| **權益證明以太坊** | **0.0026** | **1 倍** | [來源](https://carbon-ratings.com/eth-report-2022) | - -\*包含終端使用者裝置,如:個人電腦、筆電及遊戲機。 - -要準確估計能耗是很複雜的,尤其是當測量對象具有複雜的供應鏈時,或具有會影響效率的部署細節時。 例如,Netflix 和 Google 的能源消耗估計值隨以下條件而變化:是否只包含用以維護系統及傳遞內容給使用者所消耗的能量(_直接能耗_),還是包含產出內容、企業辦公室運營、廣告等等(_間接能耗_)所消耗的能量。 間接能耗也包括電視、電腦及手機等終端使用者裝置使用內容所消耗的能源。 - -上述能耗估計值的比較並非完美。 間接能耗的總量因來源而異,且往往未包含終端使用者裝置使用的能源。 每個潛在來源都包含了關於測量對象的更多資訊。 - -上面的表格與圖表,也包含了與比特幣及工作量證明以太坊的比較。 需注意的是,工作量證明網路的能耗不是固定的,而是每天都會改變。 不同來源的能耗估計值也各有差異。 此主題引發了深入的[爭論](https://www.coindesk.com/business/2020/05/19/the-last-word-on-bitcoins-energy-consumption/),不僅討論了耗能,還包括能量來源以及相關的道德問題。 能源消耗不一定與環境足跡精準對應,因為不同專案可能使用不同的能源,例如較小或較大比例的再生能源。 舉例來說,[劍橋比特幣電力消耗指標](https://ccaf.io/cbnsi/cbeci/comparisons)指出,運行比特幣網路所需的能量理論上等同於天然氣燃除或電力輸送時損失的部分。 以太坊的永續性路線,是以環保方案取代網路高耗能的部分。 - -你可以在[劍橋區塊鏈網路永續性指標網站](https://ccaf.io/cbnsi/ethereum),瀏覽許多產業的能耗與碳排放估計值。 - -## 每筆交易能耗估計值 {#per-transaction-estimates} - -許多文章估算了區塊鏈「每筆交易」的能耗。 這可能會產生誤導,因為提出和驗證區塊所需的能量與其中的交易數量無關。 若以單筆交易作為計算能耗的單位,意味交易越少能耗將越低,反之亦然,但事實並非如此。 此外,每筆交易的估計值,很大程度上取決於區塊鏈的交易吞吐量是如何定義的,並且可以透過調整這個定義來使估計值看起來更大或更小。 - -例如,在以太坊上交易的吞吐量不僅包含了基礎層的吞吐量,還包含了「[二層網路](/layer-2/)」卷軸的交易吞吐量總和。 二層網路通常不列入計算,但考慮排序者消耗的額外能量(少量)及其處理的交易量(大量),很可能會大幅降低每筆交易的估計值。 這就是為什麼跨平臺比較每筆交易能耗可能產生誤導的原因之一。 - -## 以太坊的碳債 {#carbon-debt} - -目前以太坊的能耗非常低,但並非一直都是如此。 以太坊一開始使用工作量證明,其環境成本比現在的權益證明機制大了許多。 - -最一開始,以太坊就計劃要實現以權益證明為基礎的共識機制,但為了同時確保安全性和去中心化,需要花費多年專注投入研發工作。 因此,一開始網路採用了工作量證明機制。 工作量證明要求礦工使用運算硬體來計算數值,過程中會消耗能源。 - -![比較以太坊合併前後的能源消耗,以左方的艾菲爾鐵塔(高度 330 公尺)象徵合併前的高能耗,以及右方 4 公分高的樂高小玩偶,象徵合併後大幅降低的能源消耗](energy_consumption_pre_post_merge.png) - -根據 CCRI 估算,合併使以太坊年度電力消耗降低了 **99.988%** 以上。 同樣,以太坊碳足跡減少了約 **99.992%** (從 11,016,000 噸減至 870 噸二氧化碳當量)。 如上圖所示,從這一角度來看,減少的碳排放就如同從艾菲爾鐵塔的高度下降到小塑膠玩偶的高度。 因此,確保以太坊網路安全性的環境成本大幅降低。 同時,網路的安全性相信也已得到改善。 - -## 綠色應用程式層 {#green-applications} - -即使以太坊能耗極低,以太坊上仍有穩定成長及高度活躍的[**再生金融 (ReFi)**](/refi/) 廣大社群。 再生金融應用程式使用去中心化金融組件來構建具有積極外部影響、有益於環境的金融應用程式。 再生金融是[「solarpunk」](https://en.wikipedia.org/wiki/Solarpunk)這項廣大運動的一部分,該運動與以太坊緊密結合,目標是將技術進步與環境管理結合。 以太坊具有去中心化、無需許可以及可組合性的特性,這些特性使其成為再生金融和 solarpunk 社群理想的基礎層。 - -[Gitcoin](https://gitcoin.co) 等 Web 3 原生公共財募資平台,舉辦氣候募資輪,以促進以太坊應用程式層開展具環保意識的構建。 透過開發這些倡議 (以及[去中心化科研](/desci/)等等),以太坊正成為一項對環境及社會具有淨正效益的科技。 - - - 如果你認為此頁內容能更加準確,請提出議題或提取請求 (PR)。 呈現在此頁面上的統計數據皆是基於公開數據的估計值 - 它們不代表 ethereum.org 團隊或以太坊基金會的官方聲明或承諾。 - - -## 了解更多 {#further-reading} - -- [劍橋區塊鏈網路永續性指標](https://ccaf.io/cbnsi/ethereum) -- [美國白宮對工作量證明區塊鏈所作的調查報告](https://www.whitehouse.gov/wp-content/uploads/2022/09/09-2022-Crypto-Assets-and-Climate-Report.pdf) -- [以太坊排放量:由下而上估算](https://kylemcdonald.github.io/ethereum-emissions/) - _Kyle McDonald_ -- [以太坊的能耗指標](https://digiconomist.net/ethereum-energy-consumption/) – _Digiconomist_ -- [ETHMerge.com](https://ethmerge.com/) - _[@InsideTheSim](https://twitter.com/InsideTheSim)_ -- [合併 - 對以太坊網路電力消耗及碳足跡之影響](https://carbon-ratings.com/eth-report-2022) - _CCRI_ -- [以太坊的能耗](https://mirror.xyz/jmcook.eth/ODpCLtO4Kq7SCVFbU4He8o8kXs418ZZDTj0lpYlZkR8) - -## 相關主題 {#related-topics} - -- [以太坊的展望](/roadmap/vision/) -- [信標鏈(Beacon Chain)](/roadmap/beacon-chain) -- [合併](/roadmap/merge/) diff --git a/public/content/translations/zh-tw/09) Learn Pages/governance/index.md b/public/content/translations/zh-tw/09) Learn Pages/governance/index.md deleted file mode 100644 index e1f3dfeedff..00000000000 --- a/public/content/translations/zh-tw/09) Learn Pages/governance/index.md +++ /dev/null @@ -1,182 +0,0 @@ ---- -title: 以太坊管理體系 -description: 以太坊決策方式的簡介。 -lang: zh-tw ---- - -# 以太坊管理體系的簡介 {#introduction} - -_如果沒人擁有以太坊,如何針對以太坊過去和未來的變動,作出相關決定? 以太坊管理體系是一種能讓人作出此類決定的流程。_ - - - -## 什麽是管理體系? {#what-is-governance} - -管理體系是一種讓人能作決策的系統。 一般典型的組織結構中,執行團隊或董事會可能擁有最終決策權。 或者,股東也許能為提案投票,實行變革。 在政治體系中,推選的官員能立法,盡力反映選民的期望。 - -## 去中心化管理體系 {#decentralized-governance} - -以太坊協定並無擁有者或控制者,但為了徹底確保網路長久運作且蓬勃發展,仍需做出實行變革的決策。 由於缺乏擁有權,因此不適合以傳統的組織治理方式來解決。 - -## 以太坊管制 {#ethereum-governance} - -以太坊管理體系是一種變更協定的流程。 此流程本身和人或應用程式如何使用協定無關,這點很重要,以太坊是無需許可的。 世界上每個人都能參與以太坊鏈上的活動。 對於誰能建立應用程式或傳送交易,並無規則限制。 但若想提議變更核心協定,確實有既定的流程,去中心化應用程式就是在此協定上執行。 由於現今太多人倚賴以太坊的穩定性,因此包括社會和技術流程在內,核心變更的協作門檻非常高,確保無論對以太坊作出何種變更,都能安全無虞且獲得社群的廣泛支援。 - -### 鏈上與鏈下管理體系的比較 {#on-chain-vs-off-chain} - -區塊鏈技術為管理體系帶來了新的可能性,俗稱鏈上管理體系。 鏈上管理體系是指提出的協定變更由利益相關方投票決定。通常是管理體系代幣的持有者投票,且投票是在區塊鏈上進行。 某些形式的鏈上管理體系,提出的協定變更已經寫入程式碼中,如果利益相關方簽署交易核准許變更內容,還會自動實作這些變更。 - -鏈外管理體系則與上述體系相反,任何協定變更決定都是透過非正式的社會討論過程進行,一旦經核准,將會實作到程式碼中。 - -**以太坊管理體系發生於鏈下**,參與該流程的利益相關方形形色色。 - -_雖然以太坊管理體系在協定層級為鏈下,但許多建立在以太坊上的使用案例,例如去中心化自治組織,都使用鏈上管理體系。_ - - - 更多去中心化自治組織相關資訊 - - - - -## 誰參與其中? {#who-is-involved} - -[以太坊社群](/community/)中的利益相關方形形色色,在管理體系流程中各有其作用。 以協定為核心,利益相關方從遠到近分別有: - -- **以太幣持有者**:其持有任意數量的以太幣。 [更多以太幣相關資訊](/eth/)。 -- **應用程式使用者**:在以太坊區塊鏈上與應用程式互動。 -- **應用程式/模組化開發者**:其編寫在以太坊區塊鏈上執行的應用程式(例如去中心化金融、非同質化代幣等),或建立模組化,以便和以太坊互動(例如錢包、測試套件等)。 [去中心化應用程式的相關細節](/dapps/)。 -- **節點運營商**:其執行能廣播區塊及交易的節點,拒絕發現的任何無效的交易或區塊。 [更多節點相關資訊](/developers/docs/nodes-and-clients/)。 -- **以太坊改進提案作者**:其提出以太坊改進提案,提議變更以太坊協定。 [更多以太坊改進提案相關資訊](/eips/)。 -- **驗證者**:其執行能為以太坊區塊鏈新增區塊的節點。 -- **協定開發者**(俗稱 「核心開發者」):這些人維護著各種以太坊實作(例如,執行層的 go-ethereum、Nethermind、Besu、Erigon、Reth 或共識層的 Prysm、Lighthouse、Nimbus、Teku、Lodestar)。 [更多以太坊用戶端相關資訊](/developers/docs/nodes-and-clients/)。 - -_注意:任何人都能參與多個組別,例如,協定開發者可以支援以太坊改進提案、執行信標鏈驗證者,並使用去中心化金融應用程式。 但為了清楚交代概念,區分這些相關方是最簡易的作法。_ - - - -## 什麼是以太坊改進提案? {#what-is-an-eip} - -以太坊管理體系採用一個重要的流程,就是**以太坊改進提案 (EIP)**。 以太坊改進提案是規定以太坊潛在的新功能或流程的標準。 以太坊社群中的每一個人都能建立以太坊改進提案。 如果你有興趣編寫 以太坊改進提案或參與同儕審查和/或管理體系,請參閱: - - - 更多以太坊改進提案相關資訊 - - - - -## 正式流程 {#formal-process} - -要對以太坊協定進行變更,正式流程如下: - -1. **提出核心以太坊改進提案**:如 [EIP-1](https://eips.ethereum.org/EIPS/eip-1#core-eips) 所述,要正式對以太坊提出變更,第一步是在核心以太坊改進提案中詳述此變更。 當協定開發者實作以太坊改進提案(若被接受),這將成為此以太坊改進提案的官方規範。 - -2. **將以太坊改進提案提供給協定開發者**:為核心以太坊改進提案收集社群意見後,你應該將其提供給協定開發者。 想提供此提案,提出來在 [AllCoreDevs 電話會議](https://github.com/ethereum/execution-specs/tree/master/network-upgrades#getting-the-considered-for-inclusion-cfi-status)上討論即可。 [Ethereum Magicians 論壇](https://ethereum-magicians.org/)或 [Ethereum R&D Discord](https://discord.gg/mncqtgVSVw) 可能已經非同步進行某些討論。 - -> 此階段可能產生以下結果: - -> - 未來升級網路時會考慮此以太坊改進提案 -> - 將請求進行技術變更 -> - 如果非當務之急,或相對於開發工作而言,改善程度不夠顯著,可能會被拒絕 - -3. **朝最終提案進行迭代:**收到所有利益相關方的回饋意見後,你很可能需要對初始提案進行修改,以提高安全性或更加滿足多種使用者的需求。 當以太坊改進提案納入你認為必須納入的所有變更,你需要再次提供給協定開發者。 之後將進入此流程的下個步驟;或是出現新的問題,提案必須再迭代一輪。 - -4. **網路升級中納入以太坊改進提案**:假設以太坊改進提案已核准、測試及實作,以太坊改進提案會被安排為網路升級的一部分。 由於網路升級的協調成本很高(每個人需同步升級),升級通常會將以太坊改進提案綁搭在一起。 - -5. **網路升級啟動**:啟動網路升級後,以太坊改進提案將能在以太坊網路上線。 _注意:網路升級通常會先在測試網上啟動,之後才在以太坊主網上啟動。_ - -這個流程雖然非常簡化,但大致說明了在以太坊實現協定變更的重要階段。 現在來看看有哪些非正式因素在此流程中產生作用。 - -## 非正式流程 {#informal-process} - -### 了解先前的工作 {#prior-work} - -以太坊改進提案擁護者應先熟悉之前的工作和提案,之後再建立能受到認真考慮可部署於以太坊主網的以太坊改進提案。 這樣一來,以太坊改進提案但願能帶來一些未被拒絕過的新內容。 要深入研究這點,有三個主要的位置:[以太坊改進提案儲存庫](https://github.com/ethereum/EIPs)、[Ethereum Magicians](https://ethereum-magicians.org/) 和 [ethresear.ch](https://ethresear.ch/)。 - -### 工作群組 {#working-groups} - -以太坊改進提案初稿未經編輯或改動,不太可能直接在以太坊主網上實作。 一般來說,以太坊改進提案擁護者會和一部分協定開發者合作,以指定、實作、測試、迭代和完成其提案。 過去,這些工作群組通常需要幾個月,有時甚至數年來完成這項工作! 同樣,提出此類變更的以太坊改進提案擁護者,在努力收集終端使用者的回饋意見和減輕任何部署風險時,應讓相關的應用程式/模組化開發者提早加入行列。 - -### 社群共識 {#community-consensus} - -有些以太坊改進提案都是技術上的改進,簡單明瞭,差別非常細微,有些則較複雜,並且需要權衡,將以不同的方式影響不同的利益相關方。 這表示某些以太坊改進提案在社群中比其他提案更具爭議。 - -對於如何處理具爭議的提案,目前沒有明確的方案。 這是以太坊去中心化設計使然,沒有一個利益相關方群體可以暴力迫使他人:協定開發者可以選擇不要實作程式碼變更;節點運營商可以選擇不要執行最新的以太坊用戶端;應用程式團隊及使用者可以選擇不要在鏈上交易。 由於協定開發者無法強迫人進行網路升級,因此若與給更廣泛的社群帶來利益相比,提案更容易引發爭議,他們通常會避免實作以太坊改進提案。 - -以太坊改進提案擁護者必須向所有利益相關方徵取回饋意見。 如果你擁護的以太坊改進提案有爭議,你應嘗試解決異議,使人對該提案產生共識。 由於以太坊社群廣大、多元,沒有任何一個指標能用來衡量社群共識(例如貨幣投票),以太坊改進提案擁護者必須適應提案的實際情況。 - -除了以太坊網路的安全性以外,協定開發者歷來非常重視應用程式/模組化開發者和應用程式使用者看重些什麼,因為他們在以太坊上的使用與開發行為,是生態系統能吸引其他利益相關方的原因所在。 此外,以太坊改進提案必須跨所有用戶端實作來執行,而用戶端實作由不同的團隊管理。 實作過程中常得說服許多協定開發者團隊相信作出某個變更很重要,能幫助到終端使用者或解決安全性問題。 - - - -## 處理爭論 {#disagreements} - -當涉及多位利益相關方,且各有不同的動機和觀點,有爭議是很常見的。 - -處理爭論時,通常是在公開論壇中進行漫長的討論,以了解問題的根源,並讓任何人都能加入。 通常某一方會讓步,或取得一個皆大歡喜的折衷方法。 如果一方給人感覺很強勢,強力推行某個變更可能會導致鏈分叉。 鏈分叉是指某些利益相關方反對執行協定變更,導致運作的協定出現不相容的版本,從中形成兩條不同的區塊鏈。 - -### 去中心化自治組織分叉 {#dao-fork} - -分叉係指網路必須進行重大的技術升級或變更,且這些升級或變更改變協定的「規則」之時。 [以太坊用戶端](/developers/docs/nodes-and-clients/)必須升級自己的軟體,以實作新分叉規則。 - -實行去中心化自治組織分叉是因為 [2016 DAO 攻擊](https://www.coindesk.com/understanding-dao-hack-journalists),[去中心化自治組織](/glossary/#dao)合約不夠安全,被駭客榨取超過 360 萬以太幣。 使用分叉後,資金從這份有缺陷的合約轉移到新的合約,當時因駭客攻擊而損失資金的人,後來都拿回了資金。 - -這個做法是以太坊社群投票的結果。 所有以太幣持有者都能透過[投票平台](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/)上的交易進行投票。 許多人支持分叉的決定,投票率超過 85%。 - -要注意的是,雖然協定當時利用分叉轉危為安,但投票在決定分叉時所佔的重要性,仍存在爭議,原因如下: - -- 投票率低得驚人 -- 多數人都不知道舉行了投票 -- 這次投票只代表以太幣的持有者,不包括系統中任何其他參與者 - -社群中某些人拒絕分叉,主因是他們認為去中心化自治組織的這起事件,不是協定方面的缺陷。 他們之後又成立[以太坊經典](https://ethereumclassic.org/)平台。 - -如今,以太坊社群遇到合約漏洞或資金損失時採取不干涉政策,以維護系統的中立性和可信度。 - -觀賞影片,深入了解 DAO 遭駭事件: - - - - - -### 分叉的功用 {#forking-utility} - -以太坊/以太坊經典平台的分叉,是良好分叉的絕佳典範。 有兩派人對一些核心價值觀存在非常大的分歧,大到認為值得冒相關的風險追求各自的做法。 - -能否在政治、哲學或經濟差異甚大的情況下實行分叉,對以太坊管理體系的成功有重大的影響。 若不能分叉,另一種方案只能持續暗鬥,以太坊經典平台最終的成立者也只能被迫參與,對以太坊的成功也產生越來越不同的看法。 - - - -## 信標鏈管理體系 {#beacon-chain} - -以太坊管理體系流程常犧牲速度和效率,以換取開放性和包容性。 為了加速信標鏈的發展,信標鏈的推出係獨立於工作量證明以太坊網路之外,並遵循自己的管理體系常規。 - -雖然規範和開發實作一直完全開源,但那些用於提出上述更新內容的正式流程,並未被採用。 這使得研究人員和實作者能更快指定和同意變更內容。 - -2022 年 9 月 15 日,信標鏈與以太坊執行層完成合併,這項合併當時是[巴黎網路升級](/history/#paris)的一部分。 提案 [EIP-3675](https://eips.ethereum.org/EIPS/eip-3675) 從「最後召集」變成「最終確定」,轉變成權益證明機制。 - - - 合併案的相關細節 - - - - -## 我能如何參與其中? {#get-involved} - -- [提出以太坊改進提案](/eips/#participate) -- [探討現有提案](https://ethereum-magicians.org/) -- [參與研發討論](https://ethresear.ch/) -- [加入 Ethereum R&D Discord](https://discord.gg/mncqtgVSVw) -- [運行一節點](/developers/docs/nodes-and-clients/run-a-node/) -- [協助用戶端開發](/developers/docs/nodes-and-clients/#execution-clients) -- [核心開發者學徒計畫](https://blog.ethereum.org/2021/09/06/core-dev-apprenticeship-second-cohort/) - -## 衍生閱讀 {#further-reading} - -以太坊管理體系的定義並不嚴謹。 不同社群參與者對其看法不一。 其中包括: - -- [區塊鏈治理筆記](https://vitalik.eth.limo/general/2017/12/17/voting.html) - _Vitalik Buterin_ -- [以太坊管理體系如何運作?](https://cryptotesters.com/blog/ethereum-governance) – _Cryptotesters_ -- [以太坊管理體系如何運作](https://medium.com/coinmonks/how-ethereum-governance-works-71856426b63a) – _Micah Zoltu_ -- [以太坊核心開發者為何?](https://hudsonjameson.com/2020-06-22-what-is-an-ethereum-core-developer/) - _Hudson Jameson_ -- [管理體系,第二部分:統治階級仍舊令人搖頭](https://vitalik.eth.limo/general/2018/03/28/plutocracy.html) - _Vitalik Buterin_ -- [跳脫代幣投票治理體系](https://vitalik.eth.limo/general/2021/08/16/voting3.html) - _Vitalik Buterin_ diff --git a/public/content/translations/zh-tw/09) Learn Pages/security/index.md b/public/content/translations/zh-tw/09) Learn Pages/security/index.md deleted file mode 100644 index 9866665cea5..00000000000 --- a/public/content/translations/zh-tw/09) Learn Pages/security/index.md +++ /dev/null @@ -1,293 +0,0 @@ ---- -title: 以太坊安全及詐騙預防 -description: 維護以太坊安全 -lang: zh-tw ---- - -# 以太坊安全性及詐騙防範 {#introduction} - -人們對加密貨幣的興趣日益濃厚,詐騙者和駭客帶來的風險也隨之增加。 本文列出了一些降低此類風險的最佳案例。 - - - -## 加密貨幣安全性基本入門 {#crypto-security} - -### 提升你的知識 {#level-up-your-knowledge} - -不了解加密貨幣的運作方式,可能導致代價可觀的錯誤。 舉例來說,若是不了解以太坊是去中心化網路且未提供客服功能,當有人偽裝成客服人員,謊稱返還遺失的以太幣以藉機索取你的私密金鑰,便很容易落入圈套。 增加對以太坊運作方式的知識,是一項很值得的投資。 - - - 什麼是 Ethereum? - - - - 甚麼是以太(以太幣)? - - - -## 錢包安全性 {#wallet-security} - -### 不要洩露你的私密金鑰 {#protect-private-keys} - -**無論任何原因,絕對不要分享你的私密金鑰!** - -錢包的私密金鑰,就如同開啟以太坊錢包的密碼。 這是唯一阻止別人從你的錢包地址提領所有帳戶資產的方法! - - - 什麼是以太坊錢包? - - -#### 不要拍攝你的種子助記詞/私密金鑰的螢幕擷取畫面 {#screenshot-private-keys} - -拍攝種子助記詞或私密金鑰的螢幕擷取畫面,有同步到雲端資料提供者的風險,為駭客開方便之門。 從雲端獲取私密金鑰是駭客常用的攻擊手法。 - -### 使用硬體錢包 {#use-hardware-wallet} - -硬體錢包讓人能離線儲存私密金鑰。 硬體錢包被視為儲存私密金鑰最安全的錢包選擇:私密金鑰永不連網且完全儲存在本機裝置上。 - -讓私密金鑰保持在離線狀態,即使駭客掌握你的電腦,也能大幅減少駭客入侵的風險。 - -#### 試試硬體錢包: {#try-hardware-wallet} - -- [Ledger](https://www.ledger.com/) -- [Trezor](https://trezor.io/) - -### 發送交易前仔細檢查 {#double-check-transactions} - -不小心將加密貨幣發送到錯誤的錢包地址是一種常見錯誤。 **以太坊上傳送的交易是不可逆的。**除非你知道該地址的擁有者,並能說服他們將資金退回,否則你將無法找回你的資金。 - -發送交易之前,務必確保發送的地址與接收人的地址完全匹配。 此外,與智慧型合約進行互動時,在簽名前閱讀交易訊息是一種良好的實務。 - -### 設定智慧型合約支出限額 {#spend-limits} - -與智慧型合約進行互動時,不允許無支出限額。 若無支出限額,智慧型合約將能掏空你的錢包。 相反,將支出限額僅設定為交易需要的金額。 - -許多以太坊錢包提供限額保護,以防止帳戶被掏空。 - -[如何撤銷授權智慧型合約與你的加密資產互動](/guides/how-to-revoke-token-access/) - - - -## 常見的詐騙手法 {#common-scams} - -完全阻止詐騙者是不可能的,但若了解其常用的手法,就能降低其成功率。 雖然騙局層出不窮,但通常本質相同。 唯一的應對方法是,請記住: - -- 始終保持懷疑態度 -- 沒有人會給你免費或打折的以太幣 -- 沒有人需要獲取你的私密金鑰或個人資訊 - -### 推特廣告釣魚 {#ad-phishing} - -![推特連結釣魚](./twitterPhishingScam.png) - -有種方法可以騙過推特(現在叫 X)的連結預覽功能,潛在地欺騙使用者,讓他們誤以為存取的是正版官網。 此技術利用推特的機制來產生推文中的預覽超連結,並顯示_來自 ethereum.org_(如上例所示),但該連結事實上會重新導向到惡意網站。 - -請一律檢查網域是否正確,特別是點擊連結之後。 - -[點此查看更多資訊](https://harrydenley.com/faking-twitter-unfurling)。 - -### 贈獎詐騙 {#giveaway} - -加密貨幣中最常見的騙局之一是贈獎詐騙。 贈獎詐騙有多種形式,但一般手法大概都是,如果你將以太幣傳送到提供的錢包地址,你會收到雙倍返還的以太幣。 *因此,它也稱為買一送一詐騙。* - -這類詐騙通常會限制領取贈獎的時間,以製造一種虛假的緊迫感。 - -### 社交媒體駭客攻擊 {#social-media-hacks} - -最出名的一次發生在 2020 年 7 月,當時很多知名人士和組織的 Twitter 帳戶被破解。 駭客同一時間使用被盜的帳戶發布了比特幣贈送活動。 雖然這些欺騙性推文很快被察覺並且刪除,但駭客仍僥倖逃脫,取走 11 個比特幣(或截至 2021 年 9 月的 500,000 美元)。 - -![Twitter 上的一個詐騙案例](./appleTwitterScam.png) - -### 名人贈獎活動 {#celebrity-giveaway} - -名人贈獎活動是贈獎詐騙的另一種常見形式。 詐騙者會錄製名人的採訪影片或會議演講,並在 YouTube 上進行直播 — 看起來好像名人正在接受直播採訪影片,支援加密貨幣贈送活動。 - -這類騙局中最常使用的是 Vitalik Buterin,但是也使用了加密貨幣相關的許多其他知名人士(例如 Elon Musk 或 Charles Hoskinson)。 在直播中加入知名人士,會讓騙局看起來感覺合法(雖然值得懷疑,但有 Vitalik 參與,肯定沒問題!)。 - -**贈獎活動從來都是一場騙局。 如果你把資金轉到這些帳戶,永遠要不回來。** - -![YouTube 上的一個詐騙案例](./youtubeScam.png) - -### 支援服務騙局 {#support-scams} - -加密貨幣是一種相對年輕且被誤解的技術。 有一種常見的騙局就是利用這一點,稱為支援服務騙局,詐騙者針對受歡迎的加密貨幣錢包、交易所或區塊鏈,冒充成支援人員。 - -許多關於以太坊的討論,都在 Discord 上發生。 支援服務詐騙者發掘下手目標的方式,通常是在公開的 Discord 頻道中搜尋支援問題,然後向詢問者發送提供支援服務的私人訊息。 詐騙者會建立信任,試圖誘使你透露私密金鑰或將資金發送到他們的錢包。 - -![Discord 上的支援服務詐騙案例](./discordScam.png) - -一般來說,員工絕不會透過非官方私人管道與你交流。 處理支援事宜時,記住幾個簡單的要點: - -- 永遠不要分享私密金鑰、種子助記詞或密碼 -- 絕不允許任何人遠端存取你的電腦 -- 切勿以非官方指定管道來交流 - - -
- 請注意:支援服務型騙局常發生在 Discord 平台上,但在任何討論加密貨幣的聊天應用程式上也可能很盛行,包括電子郵件。 -
-
- -### 「以太坊 2」代幣騙局 {#eth2-token-scam} - -在[合併](/roadmap/merge/)的準備階段,詐騙者曾試圖利用「以太坊 2」這個詞製造混淆,讓使用者將以太幣兌換成「以太坊 2」代幣。 但根本沒有所謂的「以太坊 2」,合併後也未導入任何其他合法代幣。 合併前擁有的以太幣,和現在是同一個以太幣。 **在從工作量證明過渡到權益證明時,無需採取任何與以太幣有關的行動**。 - -詐騙者可能會佯裝成「支援團隊」,告訴你如果存入以太幣,將會收到「以太坊 2」代幣。 其實並沒有[以太坊官方支援團隊](/community/support/),也沒有新的代幣。 切勿和任何人分享錢包的種子助記詞。 - -_注意:有些衍生的代幣/行情指示器可能代表被質押的以太幣(即 Rocket Pool 的 rETH、Lido 的 stETH、Coinbase 的 ETH2),但這些都不需要「遷移過去」。_ - -### 網路钓鱼詐騙 {#phishing-scams} - -網路钓鱼詐騙是另一種越來越常見的詐騙手段,詐騙者會利用它試圖竊取錢包中的資金。 - -一些網路釣魚電子郵件要求使用者點選連結,將其重新定向至仿冒的網站,要求他們輸入種子助記詞、重設密碼或發送以太幣。 有些可能會要求你在不知情的情況下安裝惡意軟體,使電腦被感染,並使詐騙者能存取你的電腦文件。 - -如果你收到來歷不明的電子郵件,請記住: - -- 對於不認識的電子郵件地址,切勿打開當中的連結或附件 -- 切勿向任何人洩露你的個人資訊或密碼 -- 刪除來路不明的電子郵件 - -[更多避免網路釣魚詐騙的相關資訊](https://support.mycrypto.com/staying-safe/mycrypto-protips-how-not-to-get-scammed-during-ico) - -### 加密貨幣交易經紀人詐騙 {#broker-scams} - -假冒的加密貨幣交易經紀人自稱是專業的加密貨幣經紀人,他們會提議收取金錢並代表你投資。 詐騙者收到錢後可能會誘導你,要你拿出更多資金以免錯過更多投資收益,他們也可能完全銷聲匿跡。 - -這些騙子經常利用 YouTube 上的虛假帳戶尋找目標,然後開始看似自然地展開有關「經紀人」的交談。 這些對話通常會有很多按讚數,以增加真實性,但都是來自機器人帳戶。 - -**別相信網路上的陌生人、讓他們代你投資。 你的加密貨幣將付諸東流。** - -![YouTube 上的交易經紀人詐騙案例](./brokerScam.png) - -### 加密礦池詐騙 {#mining-pool-scams} - -2022 年 9 月起,已再也無法在以太坊上挖礦。 但是,礦池騙局仍然存在。 礦池騙局中,有人會主動聯繫你,聲稱加入以太坊礦池就能獲得豐厚的回報。 詐騙者會提出要求,並一直與你保持聯繫,不善罷甘休。 基本上,詐騙者會試圖讓你相信,當你加入以太坊礦池時,你的加密貨幣將用來建立以太幣,而你將獲得以太幣形式的紅利。 接著你會發現你的加密貨幣獲得了微薄的回報。 這只是為了引誘你投入更多的資金。 最終,所有資金會傳送到不明的地址,詐騙者要嘛人間蒸發,要嘛在某些情況下繼續保持聯繫,就像最近一個案例一樣。 - -總之,務必警惕那些在社交媒體上聯絡你、要求你加入礦池的人。 一旦失去加密貨幣,就永遠回不來了。 - -牢記以下幾件事: - -- 警惕任何與你聯繫、談及如何使用加密貨幣賺錢的人 -- 針對質押、流動性池或其他加密貨幣投資方式做做功課 -- 這種方式即使是合法的,也非常少見。 否則可能早就成為主流、為人所知。 - -[有人在礦池騙局中損失了 20 萬美元](https://www.reddit.com/r/CoinBase/comments/r0qe0e/scam_or_possible_incredible_payout/) - -### 空投騙局 {#airdrop-scams} - -空投騙局是指詐騙者設局將某個資產(非同質化代幣、代幣)空投到你的錢包裡,然後發送一個詐騙性網站,讓你領取這些空投的資產。 當你嘗試領取資產,會提示你使用自己的以太坊錢包登入,並「核准」一筆交易。 但這筆交易會損害你的帳戶,將公開金鑰和私密金鑰都傳送給詐騙者。 另一種形式,可能是請你確認一筆能將資金轉移到詐騙者帳戶的交易。 - -[更多空投騙局相關資訊](https://www.youtube.com/watch?v=LLL_nQp1lGk) - - - -## 網路安全基本入門 {#web-security} - -### 使用強式密碼 {#use-strong-passwords} - -[80%以上被駭客攻擊的帳戶,都由於密碼不夠强或密碼被盜用](https://cloudnine.com/ediscoverydaily/electronic-discovery/80-percent-hacking-related-breaches-related-password-issues-cybersecurity-trends/)。 由字元、數字和符號組合成的足夠長度的密碼,能為你的帳戶提供足夠的安全性。 - -一個常見的錯誤是,使用幾個常見、相關字詞的組合做為密碼。 此類型的密碼是不安全的,因為容易受到一種被稱為字典攻擊的駭客技術所破解。 - -```md -弱密碼範例:CuteFluffyKittens! - -強式密碼範例:ymv\*azu.EAC8eyp8umf -``` - -另一個常見的錯誤是,使用容易透過[社交工程](https://wikipedia.org/wiki/Social_engineering_(security))猜中或發現的密碼。 在密碼中使用母親娘家姓、子女或寵物的名字或出生日期,都會增加密碼遭駭的風險。 - -#### 良好密碼實務: {#good-password-practices} - -- 只要密碼產生器或填寫的表單允許,密碼越長越好 -- 混用大小寫字母、數字及符號 -- 別在密碼中加入個人細節,例如姓氏 -- 避免使用常見的字詞 - -[更多建立強式密碼的相關資訊](https://terranovasecurity.com/how-to-create-a-strong-password-in-7-easy-steps/) - -### 各帳戶使用不同的密碼 {#use-unique-passwords} - -在資料外洩事件中被揭露的強式密碼,已不再是強式密碼。 [Have I Been Pwned](https://haveibeenpwned.com) 這個網站可以讓你查詢你的帳戶是否涉入任何公開的資料外洩事件。 若涉入資料外洩, **請立即更改你的密碼**。 為每個帳戶使用不同的密碼,這樣在其中一個密碼遭洩漏時,可降低駭客存取你所有帳戶的風險。 - -### 使用密碼管理器 {#use-password-manager} - - -
- 使用密碼管理器能幫你建立獨特的強式密碼,並且記住密碼! 我們非常建議使用密碼管理器,而且大多數免費! -
-
- -記住每個帳戶獨一的強式密碼,並不是最理想的方式。 密碼管理員為你所有的密碼提供一個安全的加密儲存位置,只要透過一個強效的主密碼就能取用。 註冊新的服務時,密碼管理器也會自行建議強式密碼,無需自己建立。 許多密碼管理器也會告知你是否涉入資料外洩事件,方便提早更換密碼,以免遭受惡意攻擊。 - -![使用密碼管理器的範例](./passwordManager.png) - -#### 試試密碼管理員: {#try-password-manager} - -- [Bitwarden](https://bitwarden.com/) -- [KeePass](https://keepass.info/) -- [1Password](https://1password.com/) -- 或查看其他[推薦的密碼管理員](https://www.privacytools.io/secure-password-manager) - -### 使用雙因素驗證 {#two-factor-authentication} - -有時候,你可能被要求透過特別的證據來驗證你的身分。 這些證據被稱為**因素**。 主要有三種因素: - -- 你知道的資料(例如密碼或安全性問題) -- 你的身份(例如指紋,或虹膜或臉部掃描器) -- 你擁有之物(安全金鑰,或手機上的驗證應用程式) - -使用**雙因素驗證 (2FA)** 時,可以為你的線上帳戶提供一層額外的*安全因素*。 雙因素驗證保障了即使取得你的密碼,仍不足以存取你的帳戶。 最常見的是,第二組因素是一個隨機的 6 位數代碼,稱為**基於時間的一次性密碼 (TOTP)**,可透過 Google authenticator 或 Authy 等驗證工具應用程式來取得。 這些因素取材自「你擁有之物」,因為產生定時碼的種子,儲存在你的裝置上。 - - -
- 注意:使用基於簡訊的雙因素驗證容易受到 SIM 卡交換攻擊,因此並不安全。 為了獲得最佳安全性,請使用 Google AuthenticatorAuthy 等服務。 -
-
- -#### 安全金鑰 {#security-keys} - -安全金鑰是雙因素驗證的進階版,且更加安全。 安全金鑰是一種實體硬體驗證裝置,運作方式與驗證工具應用程式相似。 使用安全金鑰是雙因素驗證最安全的方式。 許多這些金鑰都使用 FIDO 通用第二因素 (U2F) 標準。 [深入了解 FIDO U2F](https://www.yubico.com/authentication-standards/fido-u2f/)。 - -觀賞影片,深入了解雙因素驗證: - - - -### 解除安裝瀏覽器擴充功能 {#uninstall-browser-extensions} - -瀏覽器擴充功能,如 Chrome 擴充功能或 Firefox 附加功能能增強瀏覽器功能,但也伴隨著風險。 大多數瀏覽器擴充功能,皆預設請求「讀取和變更網站資料」的存取權限,如此一來,其幾乎能對你的資料為所欲為。 Chrome 擴充功能總會自動更新,因此原本安全的擴充元件,之後可能會更新並加入惡意程式碼。 多數瀏覽器擴充功能都不會試圖竊取你的資料,但你應該知道它是辦得到的。 - -#### 使用以下方式維持安全性: {#browser-extension-safety} - -- 安裝瀏覽器擴充功能時,只接受信任的來源 -- 移除不使用的瀏覽器擴充功能 -- 在本機安裝 Chrome 擴充功能,以停止自動更新(進階) - -[更多瀏覽器擴充功能風險的相關資訊](https://www.kaspersky.co.uk/blog/browser-extensions-security/12750/) - - - -## 衍生閱讀 {#further-reading} - -### 網路安全 {#reading-web-security} - -- [高達 3 百萬台裝置被含有惡意軟體的 Chrome 與 Edge 附加元件所感染](https://arstechnica.com/information-technology/2020/12/up-to-3-million-devices-infected-by-malware-laced-chrome-and-edge-add-ons/) - _Dan Goodin_ -- [如何建立一個永遠記得住的強式密碼](https://www.avg.com/en/signal/how-to-create-a-strong-password-that-you-wont-forget) - _AVG_ -- [什麼是安全金鑰?](https://help.coinbase.com/en/coinbase/getting-started/verify-my-account/security-keys-faq) - _Coinbase_ - -### 加密貨幣安全 {#reading-crypto-security} - -- [保護自己,保護資金](https://support.mycrypto.com/staying-safe/protecting-yourself-and-your-funds) - _MyCrypto_ -- [幣圈通訊軟體之共同資安問題](https://docs.salusec.io/untitled/web3-penetration-test/risks-in-social-media) - _Salus_ -- [全民必修安全指南](https://medium.com/mycrypto/mycryptos-security-guide-for-dummies-and-smart-people-too-ab178299c82e) - _MyCrypto_ -- [加密貨幣安全性:密碼與驗證](https://www.youtube.com/watch?v=m8jlnZuV1i4) - _Andreas M. Antonopoulos_ - -### 防詐騙指引 {#reading-scam-education} - -- [指南:如何識別詐騙性代幣](/guides/how-to-id-scam-tokens/) -- [保障安全:常見騙局](https://support.mycrypto.com/staying-safe/common-scams) - _MyCrypto_ -- [防範詐騙](https://bitcoin.org/en/scams) - _Bitcoin.org_ -- [從 Twitter 對話一探常見的加密貨幣網路釣魚電郵與訊息](https://twitter.com/tayvano_/status/1516225457640787969) - _Taylor Monahan_ - - diff --git a/public/content/translations/zh-tw/09) Learn Pages/zero-knowledge-proofs/index.md b/public/content/translations/zh-tw/09) Learn Pages/zero-knowledge-proofs/index.md deleted file mode 100644 index af1ddecf097..00000000000 --- a/public/content/translations/zh-tw/09) Learn Pages/zero-knowledge-proofs/index.md +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: 零知識證明 -description: 零知識證明的非技術性介紹,適合新手閱讀。 -lang: zh-tw ---- - -# 什麼是零知識證明? {#what-are-zk-proofs} - -零知識證明能證明某陳述有效、卻又無需揭示陳述本身。 「證明者」是試圖證明主張的一方,「驗證者」則負責驗證該主張。 - -零知識證明最早出現在 1985 年的論文:「[互動證明系統的知識複雜度](http://people.csail.mit.edu/silvio/Selected%20Scientific%20Papers/Proof%20Systems/The_Knowledge_Complexity_Of_Interactive_Proof_Systems.pdf)」,其定義了今日廣為使用的零知識證明: - -> 藉由零知識協定,一方(證明者)能向另一方(驗證者)**證明****某事為真,且除了揭露這項陳述屬實之外,不需揭露其他資訊**。 - -經過多年,零知識證明已經有所進展,目前用於幾項真實的應用中。 - - - -## 為什麼我們需要零知識證明? {#why-zero-knowledge-proofs-are-important} - -零知識證明代表應用密碼學的一大突破,因為有望提高個人的資訊安全性。 想想你如何向另一方(例如服務提供商)證明某個主張(例如「我是某某國的公民」)。 你需要提供「證據」支持你的陳述,例如國家護照或駕照。 - -但這種方法存在問題,主要是缺乏隱私。 個人身分識別資訊 (PII) 在與第三方服務分享後,會儲存在中央資料庫,而這些資料庫易受駭客攻擊。 身分盜竊成為十分嚴重的問題,人們呼籲以更能保護隱私的方式分享敏感資訊。 - -透過**消除為證明主張的有效性而需要揭露資訊的必要性**,零知識證明解決了這一問題。 零知識協議利用陳述(稱為「證據」)作為輸入內容,產生關於其有效性的簡潔證明。 這種證明既能有效保證陳述為真,又不會公開建立陳述時所使用的資訊。 - -回到之前的例子,只要有零知識證明,就能證明你所主張的公民身分。 驗證者只需查驗證明當中的某些屬性是否為真,就能夠確信基本陳述也為真。 - -## 零知識證明的使用案例 {#use-cases-for-zero-knowledge-proofs} - -### 匿名支付 {#anonymous-payments} - -往往許多方都能看見信用卡付款,包括支付提供者、銀行和其他利益相關方,例如政府機構。 雖然金融監管對於識別非法活動有其好處,但也會損害一般公民的隱私。 - -加密貨幣原本旨在為使用者提供一種私密、點對點的交易方式。 但大部分加密貨幣交易,在公開區塊鏈上皆可見。 使用者身份通常為匿名,且要嘛刻意與現實身份相關聯(例如在 Twitter 或 GitHub 的設定檔上納入以太坊地址),或是能利用基本的鏈上或鏈外資料分析,與現實身份相關聯。 - -現今有專門為完全匿名交易設計的「隱私幣」。 注重隱私的區塊鏈,例如 Zcash 和 Monero,可以保護交易細節,包括傳送者/接收者的地址、資產類型、數量和交易時間軸。 - -透過在協定中內建零知識技術,注重隱私的[區塊鏈](/glossary/#blockchain)網路允許[節點](/glossary/#node)直接驗證交易,而無需存取交易資料。 - -**零知識證明目前也應用在公開區塊鏈的交易匿名化上**。 例如 Tornado Cash,它是一個去中心化的非託管服務,允許使用者在以太坊上進行私人交易。 Tornado Cash(混幣隱私協定)使用零知識證明來混淆交易細節並保證財務隱私。 遺憾的是,這些是「自願選擇加入」的隱私工具,因此本身和非法活動有關。 為了克服這個問題,隱私終究必須成為公開區塊鏈上的預設選項。 - -### 保護你的身份 {#identity-protection} - -目前的身份管理系統,使得個人資訊面臨風險。 零知識證明既能幫助個人進行身份驗證,又能保護敏感的細節。 - -零知識證明在[去中心化身份](/decentralized-identity/)之下特別有用。 去中心化身份又稱為「身份自主權」,使個人能控制自身身份識別碼的存取權。 既能證明國籍,又不需揭露納稅識別號碼或護照詳情,是零知識技術實現去中心化身份的一個好例子。 - -### 驗證 {#authentication} - -要使用線上服務,必須證明身份以及對此類平台的存取權利。 這通常需要提供個人資訊,例如姓名、電子郵件地址、生日等。 你可能還得記住很長的密碼,或面對遺失存取權限的風險。 - -但零知識證明化繁為簡,平台和使用者都能更輕鬆驗證。 一旦利用公開的輸入(例如那些證明使用者是平台成員的資料)和私密輸入(例如使用者詳細資訊),來產生零知識證明,使用者需要存取服務時就能輕鬆提供,以驗證身份。 這能改善使用體驗,組織也無需儲存大量使用者資訊。 - -### 可驗證計算 {#verifiable-computation} - -可驗證計算是零知識證明用於改進區塊鏈設計的又一應用。 可驗證計算使我們既能將計算外包給另一實體,又能維持可驗證的結果。 該實體會同時提交結果和確認程式已正確執行的證明。 - -可驗證計算在不降低安全性的前提下,**對提高區塊鏈的處理速度至關重要**。 想要搞懂這點,你需要知道提議的以太坊擴容解決方案,各有哪些差別。 - -[鏈上擴容解決方案](/developers/docs/scaling/#on-chain-scaling),例如分片,需要對區塊鏈的基礎層進行大量修改。 但是,這種方法非常複雜,實作出錯時可能會損害以太坊的安全模型。 - -[鏈下擴容解決方案](/developers/docs/scaling/#off-chain-scaling)則無須重新設計以太坊的核心協定。 相反,其仰賴外包的計算模型來改善以太坊基礎層的吞吐量。 - -以下是實際運作方式: - -- 以太坊不需要處理每一筆交易,而是將執行卸載至另一條單獨的鏈。 - -- 處理完交易後,該鏈會將結果傳回,以應用至以太坊的狀態上。 - -這樣做的好處是,以太坊不必進行任何執行操作,只要將外包之計算的結果應用於其狀態。 這既減少了網路壅塞,也提高交易速度(鏈下協定進行最佳化,加快執行速度)。 - -鏈上需要以一種方式來驗證鏈下交易、且不需重新執行這些交易,否則鏈下執行就無意義了。 - -這就是可驗證計算的用武之地。 當一個節點在以太坊鏈下執行交易時,需要提交一個零知識證明來證實鏈下執行的正確性。 這個證明稱為[有效性證明](/glossary/#validity-proof),能保證交易有效,使以太坊能將結果應用於其狀態,無須等任何人提出異議。 - -[零知識卷軸](/developers/docs/scaling/zk-rollups)和 [Validium](/developers/docs/scaling/validium/) 是兩個鏈下擴容解決方案,使用有效性證明來提供安全的可擴容性。 這些協定執行上千次鏈下交易,並提交證明以在以太坊上進行驗證。 一旦證明經過驗證,那些結果就能立刻應用,讓以太坊在不增加基礎層計算負擔的情況下處理更多交易。 - -### 減少鏈上投票中的賄賂與串謀 {#secure-blockchain-voting} - -區塊鏈投票體制具有許多有利特點:完全可稽核、抗攻擊、抗審查,以及不受地理限制。 但即使是鏈上投票體制,也無法避免**串謀**問題。 - -根據定義,串謀是指「相互勾連以欺騙、欺詐和誤導他人,以限制公開競爭」,形式可能是惡意行為者透過行賄來影響投票。 例如,即使 Alice 喜歡 `option A`,她也可能會收到 Bob 的賄賂,被要求投 `option B`。 - -當任何流程使用投票作為訊號傳遞機制時,賄賂和串謀行為會限制此流程的有效性,特別是當使用者能證明自己如何投票時。 這可能會產生重大後果,尤其是當投票負責分配稀有的資源時。 - -例如,[平方募資機制](https://www.radicalxchange.org/concepts/plural-funding/)依靠捐贈來衡量不同公共財專案之間對某些選項的偏好。 每筆捐贈都算是對特定專案做出的「投票」,獲得較多票的專案,會從匹配的池中獲得更多資金。 - -鏈上投票會導致平方募資更容易被串謀所影響:區塊鏈交易是公開的,所以行賄者可以檢查受賄者的鏈上活動,了解他們是如何「投票」的。 這使得平方募資法已不再能根據社群集體的偏好,有效進行資金分配。 - -所幸,MACI(最小反串謀基礎設施)等新式解決方案使用零知識證明,使鏈上投票(例如平方募資機制)能抵禦行賄與串謀。 最小反串謀基礎設施是一組智慧型合約與指令碼,它使中央管理員(稱為「協調員」)能匯集得票數與結果,_而且不會_暴露每個人具體的投票方式。 即使如此,仍然能驗證投票是否正確,或確認某參與者是否參與該輪投票。 - -#### 最小反串謀基礎設施如何與零知識證明搭配運作? {#how-maci-works-with-zk-proofs} - -開始時,協調員會在以太坊上部署最小反串謀基礎設施智慧型合約,之後使用者能註冊他們在智慧型合約裡的公鑰,以進行投票註冊。 使用者將使用公開金鑰加密後的訊息,傳送到智慧型合約,便完成投票(必須以使用者身份相關之最新公開金鑰進行簽署,投票才有效,還有其他的標準)。 之後,協調員在投票截止後處理所有訊息、統計得票數,並在區塊鏈上驗證結果。 - -在最小反串謀基礎設施中,零知識證明用於確保計算的正確性,它使協調員不可能在處理投票和計票時出錯。 因為協調員必須產生零知識簡潔非交互式知識論證證明,驗證 a) 所有訊息皆已處理正確 b) 最終結果與所有_有效_投票的總票數相互對應。 - -因此,就算未分享每位使用者的投票明細(通常都是如此),最小反串謀基礎設施也能為計票過程中計算的結果確保完整性。 這個特點有助於降低基本串謀手法的有效性。 我們可利用 Bob 賄賂 Alice 以影響投票選擇的例子,來探索這個可能性: - -- Alice 將公開金鑰傳送到智慧型合約,以進行投票註冊。 -- Alice 同意投給 `option B` 投票,以換取 Bob 行賄之物。 -- Alice 將票投給 `option B`。 -- Alice 偷偷發送一則加密交易,更改與她的身份有關的公開金鑰。 -- Alice 向智慧型合約發送另一條(加密)資訊,利用新的公開金鑰投票給 `option A`。 -- Alice 向 Bob 展示了一筆交易,該交易顯示她將票投給了 `option B`(這張票是無效的,因為公開金鑰和她在系統裡的身份無任何關聯) -- 處理訊息時,協調員會略過愛麗絲投給 `option B` 的票,而只算投給 `option A` 的票。 因此,Bob 雖嘗試賄賂 Alice 來操縱鏈上投票,但計謀失敗。 - -使用最小反串謀基礎設施時,我們_確實_需信任協調員不會與行賄者串通或自行嘗試賄賂投票者。 協調員可以解密使用者的訊息(產生證明時必須如此),以便準確驗證每個人的投票方式。 - -但在協調員保持誠實的情況下,最小反串謀基礎設施是確保鏈上投票之神聖性的強大工具。 這解釋了它在 [clr.fund](https://clr.fund/#/about/maci) 等平方募資應用程式中為何廣受歡迎,這些程式十分依賴每個個體之投票選擇的完整性。 - -[深入了解最小反串謀基礎設施](https://privacy-scaling-explorations.github.io/maci/)。 - -## 零知識證明如何運作? {#how-do-zero-knowledge-proofs-work} - -零知識證明能讓你證明陳述的真實性,而無需分享陳述的內容,或透露你是如何發現真相的。 為了實現這一點,零知識協定仰賴於演算法,該演算法將某些資料作為輸入,並將「真」或「假」作為輸出。 - -零知識協定必須滿足以下條件: - -1. **完整性**:如果輸入是有效的,零知識協定始終會傳回「真」。 因此,如果基本陳述是真實的,且證明者和驗證者的行為皆誠實,則可接受該證明。 - -2. **健全性**:如果輸入無效,理論上無法欺騙零知識協定傳回「真」。 因此,說謊的證明者無法欺騙誠實的驗證者相信某個無效的陳述為有效(除非有非常小的可能性裕度)。 - -3. **零知識**:驗證者只知道陳述是否有效或謬誤,對該陳述其他資訊一無所知(他們對該陳述擁有「零知識」)。 這項要求亦防止驗證者從證明中推斷出原始輸入(即陳述的內容)。 - -基本形式零知識證明,包含三大要素:**見證**、**挑戰**和**回應**。 - -- **見證**:藉由零知識證明,證明者想證明本身知悉某些隱藏資訊。 這些秘密資訊就是該證據的「見證」,證明者會基於對見證的了解,設立一組只有知道該資訊的一方才能回答的問題。 因此,證明者會隨機選擇一個問題、計算出答案,並將其傳送給驗證者,以展開證明程序。 - -- **挑戰**:驗證者從問題集隨機挑選另一個問題,讓證明者回答。 - -- **回應**:證明者接受問題、計算回答,並傳回給驗證者。 證明者的回應,能讓驗證者查驗證明者是否真的知悉見證。 為了確保證明者不是盲目猜測並碰巧得到正確答案,驗證者會選擇更多問題進行提問。 如此多次互動之後,證明者偽裝知悉見證的可能性會顯著降低,直到驗證者滿意為止。 - -以上描述了「互動式零知識證明」的結構。 早期的零知識協定採用互動式證明,證明者和驗證者必須來回溝通許多次,才能驗證陳述的有效性。 - -互動式證明的運作方式,有個很好的說明範例,就是 Jean-Jacques Quisquater 的著名故事,名為[阿里巴巴的山洞故事](https://en.wikipedia.org/wiki/Zero-knowledge_proof#The_Ali_Baba_cave)。 在這個故事中,Peggy(證明者)想要向 Victor(驗證者)證明她知道開啟一扇魔法門的密語,但不透露該密語。 - -### 非互動式零知識證明 {#non-interactive-zero-knowledge-proofs} - -互動式證明雖具有革命性,但實用性有限,因為雙方必須同時存在並反覆互動。 即使驗證者相信證明者的誠實,該證明也不能用於獨立驗證(要計算出新的證明,證明者和驗證者之間必須有新的訊息集)。 - -為了解決這個問題,Manuel Blum、Paul Feldman 和 Silvio Micali 提出第一個[非互動式零知識證明](https://dl.acm.org/doi/10.1145/62212.62222),其中證明者和驗證者彼此共享金鑰。 這樣一來,證明者能證明他們知悉某些資訊(即見證),且不必提供該資訊本身。 - -非互動式證明和互動式證明不同,參與者(證明者和驗證者)之間只需要溝通一輪。 證明者將秘密資訊輸入到特殊的演算法中,以計算出零知識證明。 此證明會傳送給驗證者,驗證者使用另一個演算法來檢驗證明者是否知道秘密資訊。 - -非互動式證明減少了證明者和驗證者之間的通訊,使零知識證明變得更有效率。 而且一旦產生證明,任何其他能存取共享金鑰和驗證演算法的人,都能予以驗證。 - -非互動式證明是零知識技術的一項突破,並使現今使用的證明系統急速發展。 下面將討論這些證明類型: - -### 零知識證明的類型 {#types-of-zero-knowledge-proofs} - -#### ZK-SNARKs {#zk-snarks} - -ZK-SNARK 是 **Zero-Knowledge Succinct Non-Interactive Argument of Knowledge**(零知識簡潔非交互知識論證)的縮寫。 ZK-SNARK 協定有以下特性: - -- **零知識**:驗證者可以驗證陳述的完整性,而不需要知道關於該陳述的任何其他資訊。 對於該陳述,驗證者只知道其是真是假。 - -- **簡潔**:零知識證明本身比見證更小,能快速驗證。 - -- **非互動**:證明為「非互動式」,因為證明者和驗證者只互動一次,不像互動式證明需溝通許多輪。 - -- **論證**:該證明符合「健全性」要求,因此作弊可能性極低。 - -- **知識**:若不知道秘密資訊(見證),就無法建立零知識證明。 若沒有見證,證明者就算有可能計算出有效的零知識證明,難度也是很高。 - -前面提到的「共享金鑰」,是指證明者和驗證者同意在產生和驗證證明時使用的公共參數。 產生公共參數(統稱公共參考串 (CRS))是一個敏感的操作,因為此操作在協定的安全性方面很重要。 用於產生公共參考串的熵(隨機性),如果落入不誠實的證明者手中,他們能計算出虛假證明。 - -[多方運算 (MPC)](https://en.wikipedia.org/wiki/Secure_multi-party_computation) 是一種在產生公共參數時能降低風險的方法。 許多參與方同時參與[受信任設定儀式](https://zkproof.org/2021/06/30/setup-ceremonies/amp/),每個人都會提供一些隨機的值來產生公共參考串。 只要一個誠實的參與方銷毀他們那部分的熵,零知識簡潔非交互式知識論證協定就能保有運算的健全性。 - -受信任設定要求使用者必須在產生參數上信任參與者。 然而,零知識可擴容透明知識論證的發展使得證明協定能和非信任設定搭配運作。 - -#### ZK-STARKs {#zk-starks} - -ZK-STARK 是** Zero-Knowledge Scalable Transparent Argument of Knowledge(零知識可擴容透明知識論證)**的縮寫。 零知識可擴容透明知識論證與零知識簡潔非交互式知識論證相似,但差別是前者: - -- **可擴容**:當見證大小較大時,零知識簡潔非交互式知識論證在產生和驗證證明時比零知識可擴容透明知識論證更快。 隨著見證大小增加,零知識可擴容透明知識論證證明的證明者和驗證時間只會略微增加(零知識簡潔非交互式知識論證的證明者和驗證時間,則隨見證的大小增加線性增長)。 - -- **透明**:零知識可擴容透明知識論證依賴可公開驗證的隨機性,產生用於證明和驗證的公共參數,而非信任設定。 因此,比零知識簡潔非交互式知識論證更加透明。 - -零知識可擴容透明知識論證產生的證明比零知識簡潔非交互式知識論證更大,這意味著通常具有較高的驗證開銷。 但有些情況下(例如證明大型資料集),零知識可擴容透明知識論證可能比零知識簡潔非交互式知識論證更具成本效益。 - -## 使用零知識證明的缺點 {#drawbacks-of-using-zero-knowledge-proofs} - -### 硬體成本 {#hardware-costs} - -要產生零知識證明,涉及非常複雜的計算,這些計算最好是在專業的機器上運行。 這些機器非常昂貴,普通人通常沒有機會擁有。 此外,想要使用零知識證明的應用程式,必須將硬體成本考慮進去,而這可能會增加終端使用者的費用。 - -### 證明驗證費用 {#proof-verification-costs} - -要對證明進行驗證,也需要經過複雜的計算,還會增加將零知識技術實作於應用程式的成本。 這種成本在證明計算時更加明顯。 例如,零知識卷軸在以太坊上需要支付約 500,000 單位燃料,才能驗證一個零知識簡潔非交互式知識論證,驗證零知識可擴容透明知識論證則需要更高的費用。 - -### 信任假設 {#trust-assumptions} - -在零知識簡潔非交互式知識論證裡,公共參考串(公共參數)會產生一次,然後可供想要參加零知識協定的各方重複使用。 在假設參與者皆誠實的前提下,公共參數是經由受信任設定儀式建立而成。 - -但使用者確實沒有任何方法能評估參與者的誠實度,所以不得不相信開發者的話。 零知識可擴容透明知識論證沒有任何信任假設,因為產生字串所採用的隨機性,是能公開驗證的。 同時,研究人員正在研究零知識簡潔非交互式知識論證的非信任設定,以增加證明機制的安全性。 - -### 量子計算的威脅 {#quantum-computing-threats} - -零知識簡潔非交互式知識論證利用橢圓曲線密碼學來進行加密。 雖然橢圓曲線離散對數問題目前被認為是難以破解的,但在未來,量子電腦的發展可能會打破這種安全模型。 - -零知識可擴容透明知識論證僅依賴抗碰撞雜湊函式提供安全性,因此被視為能防禦量子計算的威脅。 比起橢圓曲線密碼學中使用的公私金鑰配對,抗碰撞雜湊更難被量子計算演算法破解。 - -## 了解更多 {#further-reading} - -- [零知識證明使用案例概述](https://pse.dev/projects) - _隱私與擴容探索團隊_ -- [零知識簡潔非交互式知識論證、零知識可擴容透明知識論證與遞迴零知識簡潔非交互式知識論證三者對比](https://www.alchemy.com/overviews/snarks-vs-starks) — _Alchemy 概述_ -- [零知識證明:改善區塊鏈的隱私](https://www.altoros.com/blog/zero-knowledge-proof-improving-privacy-for-a-blockchain/) — _Dmitry Lavrenov_ -- [零知識簡潔非交互式知識論證 — 零知識現實範例與深入探討](https://medium.com/coinmonks/zk-snarks-a-realistic-zero-knowledge-example-and-deep-dive-c5e6eaa7131c) — _Adam Luciano_ -- [零知識可擴容透明知識論證 — 建立可驗證的信任,哪怕面對量子電腦](https://medium.com/coinmonks/zk-starks-create-verifiable-trust-even-against-quantum-computers-dd9c6a2bb13d) — _Adam Luciano_ -- [關於 sk-SNARKS 為何可行的概述](https://vitalik.eth.limo/general/2021/01/26/snarks.html) — _Vitalik Buterin_ -- [為何零知識證明 (ZKP) 大大改變了自我主權身分之形勢](https://frankiefab.hashnode.dev/why-zero-knowledge-proofs-zkps-is-a-game-changer-for-self-sovereign-identity) — _Franklin Ohaegbulam_ - diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-create-an-ethereum-account/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-create-an-ethereum-account/index.md deleted file mode 100644 index 0b30e32ff0c..00000000000 --- a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-create-an-ethereum-account/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: 如何「建立」以太坊帳戶 -description: 使用錢包建立以太坊帳戶的逐步指南。 -lang: zh-tw ---- - -# 如何建立一個以太坊帳戶 - -**任何人都可以免費建立以太坊帳戶。**你只需要安裝一個加密錢包應用程式。 錢包建立並與管理你的以太坊帳戶。 它們可以發送交易、查看你的餘額,並讓你連線到其他構建在以太坊網路的應用程式。 - -藉由使用錢包,你也可以立即登入任何代幣交易所、遊戲和[非同質化代幣](/glossary/#nft)市場。 無需單獨註冊,一個帳戶即可共用於所有構建在以太坊網路上的應用程式。 - -## 第一步:建立一個錢包 - -錢包是一個幫助你管理以太坊帳戶的應用程式。 有數十種不同的錢包可供選擇:包括行動端、桌面版,甚至是瀏覽器擴充功能。 - - - - 錢包列表 - - -如果你第一次使用,可以在「找到一個錢包」頁面選擇「加密貨幣新手」篩選條件,得知哪些錢包應含有適合新手使用的所有必要功能。 - -![「選擇錢包」頁面的篩選選項](./wallet-box.png) - -另有其他設定檔篩選條件可滿足你的需求。 下面是常用錢包的一些例子,在信任任何軟體之前,你應該先做些功課。 - -## 步驟 2:下載並安裝錢包應用程式 - -決定使用某個錢包後,請造訪其官方網站或應用程式商店,下載並安裝它。 這些都應該是免費的。 - -## 步驟 3:打開應用程式並建立你的以太坊帳戶 - -第一次打開新錢包時,系統可能會要求你選擇建立新帳戶或匯入現有帳戶。 按一下新帳戶建立。 **這是錢包軟體產生你的以太坊帳戶的步驟。** - -## 步驟 4:儲存助記詞 - -有些應用程式會要求你記下一組秘密的「恢復助記詞」(有時稱為「種子助記詞」或「助記符」)。 妥善保管好這組助記詞非常重要! 它用於產生你的以太坊帳戶並且可以用來提交交易。 - -**任何知道這組助記詞的人都可以掌管所有資金。**切勿與任何人分享此資訊。 這組助記詞應包含 12 到 24 個隨機產生的單字(這些單字的順序很重要)。 - -
- -
錢包安裝了嗎?
瞭解如何使用它。
- - 如何使用錢包 - -
-
- -對其他指南有興趣嗎? 查看我們的[逐步指南](/guides/) - -## 常見問題 - -### 我的錢包和我的以太坊帳戶是否相同? - -否。 錢包是協助管理帳戶的管理工具。 單個錢包可以存取多個帳戶,單個帳戶可以被多個錢包存取。 恢復助記詞用於建立帳戶並授予錢包應用程式管理資產的權限。 - -### 我可以將比特幣傳送到以太坊地址,或將以太幣傳送到比特幣地址嗎? - -沒有辦法。 比特幣和以太幣存在於兩個獨立的網路上(即不同的區塊鏈),每個網路都有自己獨特的記帳和地址格式。 曾有各種將這兩個不同的網路橋接在一起的嘗試,目前最活躍的是[包裝比特幣或 WBTC](https://www.bitcoin.com/get-started/what-is-wbtc/)。 這不是一種認可背書,因為 WBTC 是一個託管解決方案(即由一組人控制某些關鍵功能),此處提供的資訊僅供參考。 - -### 如果我有一個以太幣地址,我在其他區塊鏈上也擁有同一個地址嗎? - -區塊鏈只要使用與以太坊類似的底層軟體(稱為「與以太坊虛擬機相容」),你都可以在所有這些區塊鏈上使用同一個地址。 此[列表](https://chainlist.org/)將展示出同一地址所適用的區塊鏈。 比特幣等某些區塊鏈,實作了一整套獨立的網路規則,你將需要一個不同格式的不同地址。 如果你有智慧型合約錢包,你應該查看其產品網站以更多瞭解它支援哪些區塊鏈,因為這些錢包通常支援的範圍有限但更安全。 - -### 擁有自己的錢包,比將資金存放在交易所上更安全嗎? - -擁有自己的錢包代表你自行負責資產的安全。 很遺憾,目前有許多失敗的交易所,將客戶的錢搞丟了。 擁有一個錢包(帶有恢復助記詞)可以消除將資產托付給某個實體所涉及的風險。 然而,你必須親自保管錢包並避免釣魚詐騙、意外批准交易或暴露助記詞、與假網站互動以及其他自我保管的風險。 風險與好處並不相同。 - -### 如果手機/硬體錢包遺失,需要再次用同一個錢包應用程式恢復遺失的資金嗎? - -不,你可以使用其他錢包。 只要你有種子助記詞,可輸入到大多數的錢包,就能恢復帳戶。 需要這麼做時請小心,恢復錢包時最好確保避免連網,以免種子助記詞不慎外洩。 如果沒有恢復助記詞,通常不可能恢復失去的資金。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-id-scam-tokens/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-id-scam-tokens/index.md deleted file mode 100644 index 919122f164b..00000000000 --- a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-id-scam-tokens/index.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: 如何辨識詐騙代幣 -description: 了解詐騙代幣、它們如何使自己看似合法,以及如何避開這種詐騙方式。 -lang: zh-tw ---- - -# 如何辨識詐騙代幣 {#identify-scam-tokens} - -以太坊最常見的用處之一就是為一個團隊建立一種可交易的代幣。某種意義上,這是屬於他們自己的貨幣。 這些代幣通常依循一種標準,那就是 [ERC-20](/developers/docs/standards/tokens/erc-20/)。 然而,任何能產生價值的正當使用案例中,就會有犯罪者嘗試竊取該價值納為已用。 - -他們可能透過這兩種方式行騙: - -- **向你兜售詐騙代幣**,代幣可能看似你想要購買的正規代幣,但其實是由詐騙者發行且不具任何價值的代幣。 -- **誘騙你簽署不利的交易**,手段通常是導引你到他們自己的使用者介面。 他們可能會試圖讓你授權,使他們的合約能花費你的 ERC-20 代幣,暴露敏感訊息而使他們能存取你的資產等。 這些使用者介面可能是正規網站幾近完美的複製品,但隱藏著圈套。 - -為了說明詐騙代幣為何,以及如何辨識詐騙代幣,我們來看一個詐騙代幣示例:[`wARB`](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82)。 這個代幣看起來試圖模仿 [`ARB`](https://etherscan.io/address/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1) 代幣。 - - - -Arbitrum 是一個開發並管理樂觀卷軸的機構。 成立之初,Aubitrum 是一間營利公司,而後採取了去中心化的措施。 在此過程中,他們發行了一種可交易的管理代幣。 - - - - - -以太坊有一個慣例,當一種資產不兼容 ERC-20 時,我們會創建一種「打包」版本,名稱以「w」起頭。 因此,舉例來說,比特幣有 wBTC,而以太幣有 wETH。 - -創建以太坊已有的 ERC-20 代幣的打包版本並不合理,但詐騙代幣看似正規,實際並非如此。 - - - -## 詐騙代幣如何運作? {#how-do-scam-tokens-work} - -以太坊的中心即是去中心化。 這代表沒有中央機構能夠沒收你的資產,或是阻止你部署智慧型合約。 但這也代表詐騙犯可以部署他們想要的任何智慧型合約。 - - - -智慧型合約是在以太坊區塊鏈上運行的程式。 例如,每個 ERC-20 代幣都以智慧型合約的形式實施。 - - - -更具體地說,Arbitrum 部署了一種使用符號 `ARB` 的合約。 但這並不能阻止其他人也部署使用完全相同或類似符號的合約。 寫合約的人可以設定合約如何執行。 - -## 看似正規 {#appearing-legitimate} - -詐騙者通常會使用一些技巧使詐騙代幣看似正規。 - -- **正規的名稱和符號**。 如上所述,ERC-20 合約可以與其他 ERC-20 合約擁有相同的符號和名稱。 你不能依靠這些欄位確保安全性。 - -- **正規擁有者**。 詐騙代幣通常會空投大量餘額到預計是真代幣正規擁有者的地址。 - - 我們再次以 `wARB` 為例。 [大概 16% 的代幣](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82?a=0x1c8db745abe3c8162119b9ef2c13864cd1fdd72f)由公開標籤為 [Arbitrum Foundation: Deployer](https://etherscan.io/address/0x1c8db745abe3c8162119b9ef2c13864cd1fdd72f) 的地址所擁有。 這_並不是_一個假的地址;它真的是[在以太坊主網上部署真 ARB 合約](https://etherscan.io/tx/0x242b50ab4fe9896cb0439cfe6e2321d23feede7eeceb31aa2dbb46fc06ed2670)的地址。 - - 因爲一個地址的 ERC-20 餘額為 ERC-20 合約儲存的一部分,合約開發者可以透過合約將其指定為想要的形式。 合約也可能禁止轉帳,使正規使用者無法擺脫詐騙代幣。 - -- **正規轉帳**。 _正規擁有者不會付錢將詐騙代幣轉帳給他人,因此轉帳一定是正規的,對吧?_ **這是錯的**。 `轉帳`透過 ERC-20 合約發生。 詐騙犯可以輕鬆將合約撰寫成得以產生那些操作。 - -## 詐騙網站 {#websites} - -詐騙犯也可以製作非常具說服力的網站,有時候甚至完全複製真實網站,且具有相同的使用者介面,但藏著詭計。 舉例來說,可能會是看似正規的外部連結,但其實會將使用者送往一個外部詐騙網站;或者是不正確的指示,導引使用者暴露他們的金鑰,或將資金發送到攻擊者的地址。 - -避免此類詐騙的最佳方法就是小心檢查你造訪的網站網址,並將已知的真實網站地址添加到書籤。 如此一來,你就可以透過你的書籤連到真實網站,而不會意外拼錯字或需要依賴外部連結。 - -## 如何保護自己? {#protect-yourself} - -1. **檢查合約地址**。 正規的代幣來自於正規的機構,而你可以在機構網站上找到合約地址。 以 [`ARB` 為例,你可以在這裡](https://docs.arbitrum.foundation/deployment-addresses#token)看到正規地址。 - -2. **真正的代幣具有流動性**。 另一個方案是在最常見的代幣交換協議 [Uniswap](https://uniswap.org/) 上查看流動池的大小。 此協議以流動性池操作,讓投資者存放他們的代幣,以期透過交易費用賺取回報。 - -即便有,詐騙代幣通常具有非常小的流動池,因為詐騙犯不想冒失去真資產的風險。 舉例來說,`ARB`/`ETH` 的 Uniswap 池大概有一百萬美元([單擊此處參考最新數值](https://info.uniswap.org/#/pools/0x755e5a186f0469583bd2e80d1216e02ab88ec6ca)),而小量買賣並不會改變價格: - -![購買正規代幣](./uniswap-real.png) - -但當你嘗試購買詐騙代幣 `wARB` 時,即使是小量的購買也會使價格改變超過 90%: - -![購買詐騙代幣](./uniswap-scam.png) - -這裡是另外一個告訴我們 `wARB` 不太可能是正規代幣的證明。 - -3. **在 Etherscan 區塊瀏覽器中查看**。 社群已經辨識出且舉報過許多詐騙代幣。 那些代幣[會在 Etherscan 區塊瀏覽器上被標註](https://info.etherscan.com/etherscan-token-reputation/)。 雖然 Etherscan 區塊瀏覽器不是官方事實來源(這是因為去中心化網路本質上並不會有正規的官方來源),但 Etherscan 區塊瀏覽器辨識為詐騙的代幣通常為詐騙代幣。 - - ![Etherscan 區塊瀏覽器中的詐騙代幣](./etherscan-scam.png) - -## 結論 {#conclusion} - -只要世界上存在價值,就會有嘗試挪為自用的詐騙犯,且在一個去中心化的世界裡,除了你,沒有任何人可以保護你。 希望你記住這幾點,幫助你區別正規代幣和詐騙: - -- 詐騙代幣會模仿正規代幣,且可以使用同樣的名稱、符號等等。 -- 詐騙代幣_無法_使用相同的合約地址。 -- 正規代幣地址的最佳來源是該代幣的發行機構。 -- 若無,你可以使用常見且可信的應用程式,例如 [Uniswap](https://app.uniswap.org/#/swap) 和 [Etherscan 區塊瀏覽器](https://etherscan.io/)。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-revoke-token-access/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-revoke-token-access/index.md deleted file mode 100644 index 22ca709d420..00000000000 --- a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-revoke-token-access/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: 如何撤銷授權智慧型合約與你的加密資產互動 -description: 關於如何撤銷授權智慧型合約代幣存取權的指南 -lang: zh-tw ---- - -# 如何撤銷授權智慧型合約與你的加密資產互動 - -本指南會教你如何檢視所有你已授權存取你的資金的[智慧型合約](/glossary/#smart-contract)清單,以及如何取消授權。 - -有時惡意開發者會在智慧型合約開後門,以存取與該智慧型合約互動的不知情使用者的資金。 這樣的平台通常會要求使用者授予其支出**無限數量代幣**的權限,以嘗試在未來節省少量的[燃料](/glossary/#gas),但這會帶來更高的風險。 - -一旦平台取得你[錢包](/glossary/#wallet)中代幣的無限存取權限後,即使你把代幣從該平台提取到你的錢包裏,他們依然可以支出所有這些代幣。 不法者們仍然可以存取你的資金並提取到他們的錢包中,而你將無法做任何恢復操作。 - -唯一的保護措施是避免使用未經測試的新專案,只授權你所需的權限,或者定期撤銷存取權限。 所以,你會怎麼做呢? - -## 步驟 1:使用撤銷存取工具 - -有幾個網站可以讓你查看和撤銷連接到你地址的智慧型合約。 訪問以下網站並連接你的錢包: - -- [Ethallowance](https://ethallowance.com/)(以太坊) -- [Etherscan](https://etherscan.io/tokenapprovalchecker)(以太坊) -- [Cointool](https://cointool.app/approve/eth)(多種網路) -- [Revoke](https://revoke.cash/)(多種網路) -- [Unrekt](https://app.unrekt.net/)(多種網路) -- [EverRevoke](https://everrise.com/everrevoke/)(多種網路) - -## 步驟 2:連接你的錢包 - -進入網站後,點擊「連接錢包」。 網站也會提示你連接你的錢包。 - -確保你的錢包和網站使用的是同一網路。 你會看到與所選網路相關的智慧型合約。 例如,如果你連接的是以太坊主網,那你將只能看到以太坊合約,而来自其他鏈,如 Polygon 的合约不會在此出現。 - -## 步驟 3:選擇一個你想要撤銷的智慧型合約 - -你會看到所有可存取你的代幣和支出額度的合約。 從中找到你想要撤銷的合約。 - -如果你不知道要選擇哪一個,你可以撤銷全部合約。 這並不會產生任何影響,但是在下一次與這些合約互動時,你必須重新授權。 - -## 步驟 4:撤銷對資產的存取權限 - -點擊「撤銷」後,你的錢包將收到一條新的交易提示。 這是正常的。 你需要為此支付一筆「撤銷費」才能成功撤銷。 根據網路的不同,處理時間需要一分鐘到數分鐘。 - -我們建議你在幾分鐘後刷新撤銷工具,並再次連接你的錢包來確認被撤銷的合約是否已從清單中移除。 - -我們建議你永遠不要讓專案無限制地存取你的代幣,並定期撤銷所有代幣存取權限。 撤銷代幣存取權限永遠不會導致資金損失,尤其是使用上面列出的工具時。 - -
- - -
想瞭解更多嗎?
- - 查看我們的其他指南 - -
- -## 常見問題 - -### 撤銷代幣存取權限是否也會終止質押、聯合質押、借貸等操作? - -否,這不會影響你的任何[去中心化金融](/glossary/#defi)策略。 你的持倉和所獲得的酬勞等都會保持不變。 - -### 從專案中斷開錢包連接和撤銷資金使用權限是否相同? - -不相同,如果你從該專案中斷開你的錢包連接,但你已經授予代幣存取權限,他們仍然可以使用那些代幣。 你需要撤銷相關權限。 - -### 合約訪問權限何時會過期? - -合約訪問權限並沒有到期日。 如果你授予合約訪問權限,即使在多年後,它們仍然可以被使用。 - -### 為什麼專案會設置無限的代幣存取權限? - -專案經常這麼做是為了最小化所需的請求次數,這也意味著使用者只需批准一次並支付一次交易費。 雖然這麼做很方便,但是使用者在未經時間考驗或審核的網站上隨意授予存取權限很危險。 一些錢包允許你手動限制授權的代幣數量來降低你的風險。 請向你的錢包供應商查詢更多相關資訊。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-swap-tokens/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-swap-tokens/index.md deleted file mode 100644 index 23b6e6144ed..00000000000 --- a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-swap-tokens/index.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: 如何兌換代幣 -description: 關於如何在以太坊兌換代幣的指南。 -lang: zh-tw ---- - -# 如何兌換代幣 - -你是否厭倦了尋找一個能列出你喜歡的所有代幣的交易所? 你可以使用[去中心化交易所](/glossary/#dex)兌換大部分代幣。 - -代幣兌換是指在以太坊網路上交換兩種不同的資產,例如將以太幣兌換成 DAI(一種 [ERC-20](/glossary/#erc-20) 代幣)。 這個過程高效且便宜。 你需要一個加密錢包來兌換代幣。 - -**先決條件:** - -- 如果擁有一個[加密錢包](/glossary/#wallet),你可以關注以下使用教學:[如何:「註冊」以太坊帳戶](/guides/how-to-create-an-ethereum-account/) -- 在你的錢包中添加資金 - -## 1. 連接你的錢包到所選擇的去中心化交易所 (DEX) - -一些受歡迎的交易所: - -- [Uniswap](https://app.uniswap.org/#/swap) -- [Sushiswap](https://www.sushi.com/swap) -- [1Inch](https://app.1inch.io/#/1/unified/swap/ETH/DAI) -- [Curve](https://curve.fi/#/ethereum/swap) - -有興趣嗎? 學習更多關於[去中心化金融 (DeFi)](/defi/) 是什麼,以及這些新形態的交易所是如何運作的知識。 - -## 2. 選擇一對你想要兌換的代幣 - -例如以太幣和 DAI。 確保兩種代幣中任意一種有資金。 ![兌換的通用接口](./swap1.png) - -## 3. 輸入要交易的代幣數量,點擊「兌換」 - -交易所將自動計算你將獲得多少代幣。 - -![兌換的通用接口](./swap2.png) - -## 4 確認交易 - -查看交易的詳細資訊。 了解兌換率和其他費用,以避免出現不必要的「驚喜」。 - -![審查交易的通用接口](./swap3.png) - -## 5 等待交易處理 - -你可以在任何區塊鏈瀏覽器上查看交易進度。 此過程不會超過 10 分鐘。 - -交易處理完成後,你的錢包中將自動收到所兌換的代幣。 -
- - -
想要學習更多功能嗎?
- - 查看我們的其他指南 - -
- -## 常見問題 - -### 我可以從我的錢包中將以太幣兌換成比特幣嗎? - -不可以,你只能兌換以太坊網路原生的代幣,例如以太幣、ERC-20 代幣或非同質化代幣。 你只能兌換以太坊上以「打包」形式存在的比特幣。 - -### 什麼是滑點? - -這是指你所預期的兌換率與實際兌換率之間的差異。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-bridge/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-bridge/index.md deleted file mode 100644 index 7110955129e..00000000000 --- a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-bridge/index.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: 如何通過跨鏈橋將代幣轉移至第二層網路 -description: 關於如何使用跨鏈橋將代幣從以太坊轉移到二層網路的指南。 -lang: zh-tw ---- - -# 如何通過跨鏈橋將代幣轉移至第二層網路 - -如果以太坊上的交易量很大,它將可能變得非常昂貴。 其中一種解決方式是在以太坊網路以外增加新的「網路層」(即使用與以太坊本身相似的方法運行的不同網路)。 這些稱為二層網路的解決方案能處理大量低費用交易,且有時只將這些交易結果儲存到以太坊,從而幫助以太坊減少擁堵與成本。 如此一來,這些二層網路可以讓使用者以更快的速度與較低的費用進行交易。 由於上述諸多優點,許多加密貨幣的專案方會逐漸轉移至二層網路。 而其中最簡單的方法,便是以「跨鏈橋」將貨幣從以太坊轉向二層網路。 - -**先決條件:** - -- 如果擁有一個加密錢包,你可以關注以下使用教學:[如何:「註冊」以太坊帳戶](/guides/how-to-create-an-ethereum-account/) -- 在你的錢包中添加資金 - -## 1. 決定你要使用哪一個二層網路 - -在我們的[二層網路頁面](/layer-2/)上,你可以更深入地了解不同的專案與重要連結。 - -## 2. 前往你選擇的跨鏈橋 - -一些熱門的二層網路如下: - -- [Arbitrum 跨鏈橋](https://bridge.arbitrum.io/?l2ChainId=42161) -- [Optimism 跨鏈橋](https://app.optimism.io/bridge/deposit) -- [Boba 網路跨鏈橋](https://gateway.boba.network/) - -## 3. 將跨鏈橋連接到你的錢包 - -確保你的錢包已經連結到以太坊主網網路。 如果並未連結,網頁會自動提示你切換網路。 - -![橋接代幣的通用介面](./bridge1.png) - -## 4 指定金額然後轉移資金 - -查看你在二層網路將獲取的金額與交易費來避免不愉快的事件。 - -![橋接代幣的通用介面](./bridge2.png) - -## 5 在錢包中確認交易 - -你將需要用以太幣支付一定金額的交易處理費用。 - -![橋接代幣的通用介面](./bridge3.png) - -## 6. 等待資金轉移 - -此流程通常會在 10 分鐘內完成。 - -## 7. 把選取的二層網路加到你的錢包(可選) - -可以使用 [chainlist.org](http://chainlist.org) 找到該網路遠端程式呼叫協定的詳細資訊。 添加網路並完成交易後,你會看到代幣出現在你的錢包中。 -
- - -
想要學習更多功能嗎?
- - 查看我們的其他指南 - -
- -## 常見問題 - -### 如果我在交易所持有資產怎麼辦? - -你或許可以從交易所直接提取資產到二層網路。 你可以至我們[二層網路頁面](/layer-2/)的「移至二層網路」獲取更多資訊。 - -### 我能夠在我的代幣橋接到二層網路之後回到以太坊主網嗎? - -可以,你可以隨時利用相同的跨鏈橋將你的資產轉移回主網。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-wallet/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-wallet/index.md deleted file mode 100644 index 049a01d5ccc..00000000000 --- a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/how-to-use-a-wallet/index.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: 如何使用錢包 -description: 關於如何發送、接收代幣和連接到 web3 專案的指南。 -lang: zh-tw ---- - -# 如何使用錢包 - -學習如何使用錢包的所有基本功能。 如果你還沒有錢包,請查看[如何建立以太坊帳戶](/guides/how-to-create-an-ethereum-account/)。 - -## 打開你的錢包 - -你將會看到一個儀表板,其中顯示了你的餘額和用於發送和接收代幣的按鈕。 - -## 接收加密貨幣 - -你想將加密貨幣存入你的錢包中嗎? - -每個以太坊帳戶都會有它專屬的接收地址,這個地址由一串獨一無二的數字和字母組成。 這個地址的功能類似於銀行的帳戶號碼。 以太坊地址始終以「0x」開頭。 你可以將這個地址和任何人分享:這麼做很安全。 - -你的以太坊地址就如同住家地址一樣:你需要告訴別人你的地址,他們才有辦法找到你。 這麼做很安全,因為你仍然可以用只有你能控制的另一把鑰匙鎖上你的前門,這樣即使他們知道你住在哪也沒有辦法進入。 - -無論是誰想轉帳給你,你都得提供你的公共地址給他們。 許多錢包應用程式會讓你複製你的地址或出示二維碼供掃描,以方便使用。 應避免手動輸入任何以太坊地址。 這很容易導致輸入錯誤和資金損失。 - -雖然不同的應用程式有著不同的內容,甚至連它們所使用的設計語言也大不相同,但是如果你想在應用程式內轉帳,其操作和過程都大同小異: - -1. 打開你的錢包應用程式。 -2. 點擊「接收」(或其他具有類似表述的選項)。 -3. 複製你的以太坊地址到剪貼簿。 -4. 向發送者提供你的以太坊接收地址。 - -## 發送加密貨幣 - -你想將以太幣發送到另一個錢包嗎? - -1. 打開你的錢包應用程式。 -2. 取得接收者的地址並確保你與接收者連接到相同的網路。 -3. 輸入接收者的地址或使用你的相機掃描二維碼,這樣就不需手動輸入地址。 -4. 點擊錢包中的「發送」按鈕(或顯示類似描述的按鈕)。 - -![加密貨幣地址的發送欄位](./send.png) -
- -5. 許多資產,如 DAI 或 USDC,存在於多種網路上。 轉移加密代幣時,請確認接收者和你在相同網路上,因為不同網路上的代幣不可互換。 -6. 確保你的錢包中有足夠的以太幣可支付交易費,交易費依網路狀態而異。 大部分錢包會將建議的交易費自動加到交易中,你可以直接確認。 -7. 你的交易處理完之後,對應數量的加密貨幣就會出現在接收者的帳戶中。 這可能需要數秒至數分鐘,取決於目前使用網路的人數。 - -## 連接到專案 - -你在所有以太坊專案中的地址都相同。 並不需要為了每個專案單獨註冊。 有了錢包後,你就可以連接到任何以太坊專案而無需提供任何額外資訊。 不需要電子郵件地址或其他任何個人資訊。 - -1. 訪問任何專案的網站。 -2. 如果專案的登陸頁面只是描述該專案的靜態網頁,你應可點擊選單中的「開啟應用程式」按鈕,這麼做會將你導引至實際的應用程式頁面。 -3. 進入應用程式後,按一下「連接」。 - -![讓使用者透過錢包連接到網站的按鈕](./connect1.png) - -4. 從提供的錢包列表中選擇你使用的錢包。 如果找不到你所用的錢包,它可能隱藏在「WalletConnect」選項下。 - -![從錢包列表中選擇要連接的錢包](./connect2.png) - -5. 在你的錢包中確認並簽名以建立連接。 **簽署此訊息應不會花費任何以太幣**。 -6. 大功告成! 開始使用應用程式。 你可在我們的[去中心化應用程式頁面](/dapps/#explore)找到許多有趣的專案。
- - -
想要學習更多功能嗎?
- - 查看我們的其他指南 - -
- -## 常見問題 - -### 如果我有一個以太幣地址,我在其他區塊鏈上也擁有同一個地址嗎? - -你可以在所有兼容以太坊虛擬機的區塊鏈上使用相同的地址(如果你的錢包帶有助記詞)。 此[列表](https://chainlist.org/)將展示出同一地址所適用的區塊鏈。 比特幣等某些區塊鏈,實作了一整套獨立的網路規則,你將需要一個不同格式的不同地址。 如果你有智慧型合約錢包,應查看其產品網站,以深入了解哪些區塊鏈受支援。 - -### 我可以在多台設備上使用相同的地址嗎? - -可以,你可以在多台設備上使用相同的地址。 技術上而言,錢包僅是顯示你餘額及進行交易的界面,你的帳戶並不儲存在錢包中,而是在區塊鏈上。 - -### 我還沒有收到加密貨幣,我可以在哪裡查看交易狀態? - -你可以使用[區塊鏈瀏覽器](/developers/docs/data-and-analytics/block-explorers/)即時查看交易狀態。 你只需要搜尋你的錢包地址或交易 ID。 - -### 我能否取消交易或退款? - -不能,一旦交易確認,你將無法取消交易。 diff --git a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/index.md b/public/content/translations/zh-tw/10) Guides and Quizzes/guides/index.md deleted file mode 100644 index e01dc109d28..00000000000 --- a/public/content/translations/zh-tw/10) Guides and Quizzes/guides/index.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 以太坊指南 -description: 一組實用指南,向初學者解釋有關使用以太坊的基礎知識。 -lang: zh-tw ---- - -# 以太坊指南 - -想要開啟你的以太坊之旅嗎? 我們的實用指南將帶你一步一步開始認識以太坊,並讓你更輕鬆地使用這項新技術。 - -## 開始使用 - -1. [如何「創建」以太坊帳戶](/guides/how-to-create-an-ethereum-account/) - 任何人都可以免費創建一個錢包。 本指南會引導你從哪裡開始。 - -2. [如何使用錢包](/guides/how-to-use-a-wallet/) - 各種錢包的基本功能及用法介紹。 - -## 安全基礎知識 - -1. [如何撤銷對加密資金的智慧型合約的存取權限](/guides/how-to-revoke-token-access/) - 如果你突然發現錢包裡有一筆不是由你發起的交易,本指南將教你如何防止該情況再次發生。 - -2. [如何識別詐騙代幣](/guides/how-to-id-scam-tokens/) - 什麼是詐騙代幣?詐騙代幣如何使自身看起來像合法代幣?如何識別詐騙代幣並保護自己不掉入詐騙代幣的騙局。 - -## 使用以太坊 - -1. [如何橋接代幣到二層網路?](/guides/how-to-use-a-bridge/) - 以太坊交易是否太過昂貴? 可以考慮轉而使用以太坊擴容方案,即二層網路。 - -2. [如何兌換代幣](/guides/how-to-swap-tokens/) - 你想要兌換為其他代幣嗎? 本簡潔指南將為你演示如何操作。 diff --git a/public/content/translations/zh-tw/11) Roadmap/eips/index.md b/public/content/translations/zh-tw/11) Roadmap/eips/index.md deleted file mode 100644 index 9465f252a3a..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/eips/index.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: 以太坊改進提案 (EIP) -description: 你需要知道的以太坊改進提案基本知識 -lang: zh-tw ---- - -# 以太坊改進提案 (EIP) 簡介 {#introduction-to-ethereum-improvement-proposals} - -## 什麼是以太坊改進提案? {#what-are-eips} - -[以太坊改進提案 (EIP)](https://eips.ethereum.org/) 是一種標準,用於明定以太坊的潛在新功能或流程。 以太坊改進提案中包含擬定變更的技術規範,相當於以太坊社群的「事實來源」。 以太坊的網路升級和應用程式標準乃透過以太坊改進提案流程商討和制定。 - -以太坊社群的任何人皆可建立以太坊改進提案。 [EIP-1](https://eips.ethereum.org/EIPS/eip-1) 中附有以太坊改進提案撰寫準則。 以太坊改進提案主要應簡明介紹技術規範並概述變更誘因。 以太坊改進提案作者負責在社群內尋求共識並記錄不同意見。 由於提出優秀以太坊改進提案的技術門檻很高,根據過往經驗,通常大部分以太坊改進提案的作者都是應用程式或者協定開發者。 - -## 以太坊改進提案為什麼很重要? {#why-do-eips-matter} - -以太坊改進提案對於確定如何實作變更以及確保將變更記錄在以太坊上至關重要。 人們依之擬定變更、針對變更展開辯論並採納變更。 [有多種類型的以太坊改進提案](https://eips.ethereum.org/EIPS/eip-1#eip-types),包括核心以太坊改進提案(針對影響共識且要求進行網路升級的低層級協定變更,如 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559))和以太坊開發者公開徵求意見(針對應用程式標準,如 [EIP-20](https://eips.ethereum.org/EIPS/eip-20) 和 [EIP-721](https://eips.ethereum.org/EIPS/eip-721))。 - -每次網路升級包含一組以太坊改進提案,網路上的每個[以太坊用戶端](/learn/#clients-and-nodes)都必須實作。 也就是說,為了與以太坊主網上的其他用戶端保持共識,用戶端開發者需要確保他們皆已實作所需的以太坊改進提案。 - -以太坊改進提案提供變更的技術規範,不僅如此,以太坊還以其為單位推行治理舉措:任何人皆可擬定以太坊改進提案,然後社群中的各個利害關係人將對其展開辯論,以確定是否應將其作為標准採納或包含在網路升級中。 由於非核心以太坊改進提案不一定被所有應用程式採納(例如,可以建立不實作 EIP-20 的同質化代幣),而核心以太坊改進提案必須被廣泛採納(因全數節點必須升級才能成為同一網路的一部分),與非核心以太坊改進提案相比,核心以太坊改進提案需要社群內達成更廣泛的共識。 - -## 以太坊改進提案演進史 {#history-of-eips} - -[以太坊改進提案 (EIP) GitHub 存放庫](https://github.com/ethereum/EIPs)於 2015 年 10 月建立。 以太坊改進提案流程基於[比特幣改進提案 (BIP)](https://github.com/bitcoin/bips) 流程,而後者又是基於 [Python 增強提案 (PEP)](https://www.python.org/dev/peps/) 流程。 - -以太坊改進提案編輯負責審查以太坊改進提案的技術健全性、格式問題,以及修正拼音、文法及程式碼樣式方面的錯誤。 2015 至 2016 年底,Martin Becze、Vitalik Buterin、Gavin Wood 等人擔綱初代的以太坊改進提案編輯。 - -以太坊改進提案現任編輯: - -- Alex Beregszaszi (@axic) -- Gavin John (@Pandapip1) -- Greg Colvin (@gcolvin) -- Matt Garnett (@lightclient) -- Sam Wilson (@SamWilsn) - -以太坊改進提案榮譽編輯: - -- Casey Detrio (@cdetrio) -- Hudson Jameson (@Souptacular) -- Martin Becze (@wanderer) -- Micah Zoltu (@MicahZoltu) -- Nick Johnson (@arachnid) -- Nick Savers (@nicksavers) -- Vitalik Buterin (@vbuterin) - -倘有興趣成為以太坊改進提案編輯,請詳閱 [EIP-5069](https://eips.ethereum.org/EIPS/eip-5069)。 - -以太坊改進提案編輯決定提案何時可成為以太坊改進提案,並且會幫助以太坊改進提案作者推進提案。 [以太坊牧貓人組織](https://www.ethereumcatherders.com/)會協助安排以太坊改進提案編輯與社群之間的會議(請參見 [EIPIP](https://github.com/ethereum-cat-herders/EIPIP))。 - -完整的標準化流程以及圖表請見 [EIP-1](https://eips.ethereum.org/EIPS/eip-1) - -## 瞭解更多 {#learn-more} - -若有興趣進一步瞭解以太坊改進提案,請參閱[以太坊改進提案網站](https://eips.ethereum.org/)和 [EIP-1](https://eips.ethereum.org/EIPS/eip-1)。 以下為一些實用連結: - -- [每個以太坊改進提案的清單](https://eips.ethereum.org/all) -- [所有以太坊改進提案類型的說明](https://eips.ethereum.org/EIPS/eip-1#eip-types) -- [所有以太坊改進提案狀態的說明](https://eips.ethereum.org/EIPS/eip-1#eip-process) - -### 社群教育專案 {#community-projects} - -- [PEEPanEIP](https://www.youtube.com/playlist?list=PL4cwHXAawZxqu0PKKyMzG_3BJV_xZTi1F) — *PEEPanEIP 是一個教育影片系列,討論以太坊改進提案 (EIP) 以及即將到來的升級的主要功能。* -- [EIPs For Nerds](https://ethereum2077.substack.com/t/eip-research) — *EIPs For Nerds 以ELI5 風格、全面概述各種以太坊改進提案 (EIP),包括核心 EIP 和應用程式/基礎設施層 EIP (ERC),以教育讀者並圍繞以太坊協定的提議變更達成共識。* -- [EIPs.wtf](https://www.eips.wtf/) — *EIPs.wtf 提供以太坊改進提案 (EIP) 的額外資訊,包括它們的狀態、實作細節、相關拉取請求和社群意見回饋。* -- [EIP.Fun](https://eipfun.substack.com/) — *EIP.Fun 提供有關以太坊改進提案 (EIP) 的最新消息,EIP 會議更新等等。* -- [EIPs Insight](https://eipsinsight.com/) — *EIPs Insight 根據從不同資源收集的資訊,展示以太坊改進提案 (EIP) 流程的狀態和統計資料。* - -## 參與方式 {#participate} - -所有人皆可建立以太坊改進提案。 提交提案前必須閱讀 [EIP-1](https://eips.ethereum.org/EIPS/eip-1),其中概述了以太坊改進提案流程以及撰寫以太坊改進提案的方法;並至[以太坊魔術師](https://ethereum-magicians.org/)徵求意見回饋,提交草案之前應先在這裡與社群討論提案。 - -## 參考資料 {#references} - - - -頁面內容部分來自 Hudson Jameson 的 [以太坊協定開發治理和網路升級協調](https://hudsonjameson.com/2020-03-23-ethereum-protocol-development-governance-and-network-upgrade-coordination/) - - diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/beacon-chain/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/beacon-chain/index.md deleted file mode 100644 index 33935f930d1..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/roadmap/beacon-chain/index.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: 信標鏈(Beacon Chain) -description: 瞭解信標鍊 - 將權益證明引入以太坊的升級。 -lang: zh-tw -template: upgrade -image: /images/upgrades/core.png -alt: -summaryPoint1: 信標鏈將權益證明引入以太坊生態系統。 -summaryPoint2: 信標鏈於 2022 年 9 月與原先的以太坊工作量證明鏈合併。 -summaryPoint3: 信標鏈引入共識邏輯和區塊廣播協定,現在可保護以太坊安全。 ---- - - - 信標鏈於 2020 年 12 月 1 日發佈,並於 2022 年 9 月 15 日透過合併正式將權益證明確定為以太坊的共識機制。 - - -## 什麼是信標鏈? {#what-is-the-beacon-chain} - -信標鍊是 2020 年推出的原始權益證明區塊鏈的名稱。 信標鏈的作用是在以太坊主網上啟用權益證明共識邏輯之前,確保它健全且可永續存在。 因此,它與原先的工作量證明以太坊一起運行。 信標鏈是「空」區塊鏈,但在以太坊上,要從工作量證明過渡到權益證明,需要指示信標鏈接受來自執行用戶端的交易資料,將它們打包進區塊,並使用基於權益證明的共識機制,將它們整合成一條區塊鏈。 與此同時,原始的以太坊用戶端關閉挖礦、區塊廣播和共識邏輯,將它們全部交給信標鏈。 這個事件稱為[合併](/roadmap/merge/)。 合併後,即不再有兩條區塊鏈。 相反,只有一個權益證明以太坊,每個節點現在需要兩個不同的用戶端。 信標鏈目前是共識層,是處理區塊廣播和共識邏輯的共識用戶端對等網路,而原始用戶端則形成執行層,負責廣播和執行交易,以及管理以太坊狀態。 這兩個層可以用引擎應用程式介面相互通訊。 - -## 信標鏈可以做什麼? {#what-does-the-beacon-chain-do} - -信標鏈是帳戶帳本的名稱,在以太坊[質押者](/staking/)開始驗證真正的以太坊區塊前,信標鏈會指揮並協調這些質押者。 但它並不處理交易或智慧型合約互動,因為這些事是在執行層完成的。 信標鏈負責區塊和證明處理、執行分叉選擇演算法、管理獎勵和懲罰等事務。 請參閱[節點架構頁面](/developers/docs/nodes-and-clients/node-architecture/#node-comparison)瞭解更多內容。 - -## 信標鏈的影響 {#beacon-chain-features} - -### 質押簡介 {#introducing-staking} - -信標鏈將[權益證明](/developers/docs/consensus-mechanisms/pos/)引入以太坊。 這可以保證以太坊的安全,驗證者可以在此過程中賺取更多以太幣。 實際上,你需要使用質押以太幣來啟用驗證者軟體。 身為質押者,你將執行在鏈中建立及驗證新區塊的軟體。 - -質押的目的與[挖礦](/developers/docs/consensus-mechanisms/pow/mining/)相似,但在很多方面有所差異。 挖礦需要大量的前期支出,包括強大的硬體和高能耗,從而產生規模經濟並促進中心化。 挖礦也不要求將任何資產鎖定以作為抵押品,這限制了協定在攻擊發生後懲罰作惡者的能力。 - -相較於工作量證明,過渡到權益證明後,以太坊的安全性和去中心化程度大幅提升。 參與網路的人越多,去中心化程度和安全性越高,抵禦攻擊的能力也越強。 - -使用權益證明作為共識機制是[我們現在擁有的安全、環保、可擴容的以太坊](/roadmap/vision/)的基石。 - - - 若有興趣成為驗證者或幫助保障以太坊安全,請瞭解有關質押的更多資訊。 - - -### 針對分片進行設定 {#setting-up-for-sharding} - -自信標鏈與原先的以太坊主網合併以來,以太坊社群便開始尋找網路擴容方案。 - -權益證明的優點是,在任何時間都擁有所有經核准區塊產生者的註冊表,每個人都各自質押以太幣。 此註冊表奠定了分而治之的基礎,同時也可靠地劃分了具體的網路責任。 - -這種責任與採用工作量證明時的責任有很大的不同。採用工作量證明時,礦工對網路沒有義務,可以隨時停止挖礦並永久關閉其節點軟體,而不需承擔後果。 此外,也沒有已知區塊提交者的註冊表,並且沒有可靠的方法來安全地劃分網路責任。 - -[更多分片相關更多資訊](/roadmap/danksharding/) - -## 不同升級之間的關聯 {#relationship-between-upgrades} - -所有以太坊升級都存在某種程度的關聯。 所以,我們來回顧一下信標鏈會如何影響其他升級。 - -### 信標鏈和合併 {#merge-and-beacon-chain} - -起初,信標鏈獨立於以太坊主網存在,但兩者已於 2022 年合併。 - - - 合併 - - -### 分片與信標鏈 {#shards-and-beacon-chain} - -僅當採用權益證明共識機制時,分片才能安全地進入以太坊生態系統。 已與主網「合併」的信標鏈引入了質押,為未來進一步擴展以太坊所需的分片機制鋪平道路。 - - - 分片鏈 - - -## 衍生閱讀 - -- [更多以太坊未來升級相關資訊](/roadmap/vision) -- [更多節點架構相關資訊](/developers/docs/nodes-and-clients/node-architecture) -- [關於權益證明的更多資訊](/developers/docs/consensus-mechanisms/pos) diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/future-proofing/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/future-proofing/index.md deleted file mode 100644 index 5440b45592a..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/roadmap/future-proofing/index.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: 面向未來的以太坊 -description: 不論未來如何發展,這些升級可鞏固以太坊作為有韌性的去中心化基礎層的地位。 -lang: zh-tw -image: /images/roadmap/roadmap-future.png -alt: "以太坊開發藍圖" -template: roadmap ---- - -開發藍圖的有些部分在短期內並不是一定要用於擴容或保護以太坊,其目的是為以太坊未來的長期穩定性與可靠性奠定基礎。 - -## 抗量子性 {#quantum-resistance} - -當量子計算成為現實的時候,有一部分用於保護當今以太坊的[密碼學技術](/glossary/#cryptography)將會受到攻擊。 儘管量子電腦可能還需幾十年的時間才能對現代密碼學構成真正的威脅,但建立以太坊的目的是確保未來幾個世紀的安全。 這意味著,我們應該盡速讓[以太坊具抗量子性](https://consensys.net/blog/developers/how-will-quantum-supremacy-affect-blockchain/)。 - -以太坊開發者面臨的挑戰是,目前的[權益證明](/glossary/#pos)協定仰賴一種非常高效的簽名方案(稱為 BLS)來匯集對有效[區塊](/glossary/#block)的投票。 這種簽名方案可以被量子電腦破解,但其他抗量子替代方案效率不高。 - -眾所周知,以太坊中多處用於產生加密密鑰的[「KZG」承諾方案](/roadmap/danksharding/#what-is-kzg)不具抗量子能力。 目前,這個風險是使用「受信任設定」來規避的,即許多使用者會產生無法被量子電腦逆向工程的隨機性。 然而,理想的解決方案還是引入量子安全密碼學。 現在有兩種能夠有效替代 BLS 方案的主流方案:[STARK 簽名](https://hackmd.io/@vbuterin/stark_aggregation)和[網格簽名](https://medium.com/asecuritysite-when-bob-met-alice/so-what-is-lattice-encryption-326ac66e3175)。 **這些方案仍處於研究與試驗開發階段**。 - - 閱讀 KZG 與受信任設定相關資訊 - -## 更便捷、更高效的以太坊 {#simpler-more-efficient-ethereum} - -複雜性使得產生錯誤及漏洞的幾率提高,導致攻擊者有機可乘。 然而,開發藍圖中也包括精簡以太坊、移除歷經好幾次升級後已不再需要或可以改進的程式碼。 對開發者來說,更精簡、單純的程式碼庫更容易維護和理解。 - -業界將對[以太坊虛擬機 (EVM)](/developers/docs/evm) 進行多項更新,以使其更簡單、更高效。 其中包括[移除 SELFDESTRUCT 作業碼](https://hackmd.io/@vbuterin/selfdestruct),這是一個不常用且已不需要的指令,某些情況下可能帶來危險,特別是和以太坊未來升級的儲存模型一起使用時。 此外,[以太坊用戶端](/glossary/#consensus-client)仍支援一些現在可以完全移除的舊交易類型。 [燃料](/glossary/#gas)的計算方式也有改進空間,可以引入更高效的演算法來進行一些加密運算。 - -同樣,目前以太坊用戶端的其他部分也可以進行更新。 其中一個範例是,目前執行和共識用戶端使用的是不同類型的資料壓縮方案。 若能在整個網路上統一壓縮方案,在用戶端之間分享資料會變得更簡單直觀。 - -## 目前進度 {#current-progress} - -面向未來的以太坊所需的大部分升級**仍在研究階段,且距離實作還有數年時間**。 像移除 SELFDESTRUCT 和統一執行層與共識層用戶端使用的壓縮方案這樣的升級,可能會比抗量子密碼學更早實現。 - -**了解更多** - -- [燃料](/developers/docs/gas) -- [以太坊虛擬機](/developers/docs/evm) -- [資料結構](/developers/docs/data-structures-and-encoding) diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/index.md deleted file mode 100644 index 1a5c0a596b6..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/roadmap/index.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: 以太坊開發藍圖 -description: 以太坊實現更高可擴容性、安全性和永續性的路徑。 -lang: zh-tw -template: roadmap -image: /images/heroes/roadmap-hub-hero.jpg -alt: "以太坊開發藍圖" -summaryPoints: -buttons: - - - label: 更多升級 - toId: 即將發生的變化 - - - label: 過往的升級 - href: /history/ - variant: 概述 ---- - -雖然以太坊已經是強大的全球協調平台,但仍在不斷改進當中。 一系列雄心勃勃的改進將把以太坊從本來的型態升級為一個全面擴容、韌性最大的平台。 這些升級已在以太坊開發藍圖中列出。 - -**若要進一步瞭解過往的以太坊升級,請造訪我們的[歷史](/history/)頁面** - -## 以太坊將發生哪些變化? {#what-changes-are-coming} - -以太坊開發藍圖概述了未來將對協定進行的具體改進。 整體而言,開發藍圖會給以太坊使用者帶來以下好處: - - - - - - - - -## 以太坊為何需要開發藍圖? {#why-does-ethereum-need-a-roadmap} - -以太坊會定期升級,以提高其可擴容性、安全性或永續性。 以太坊的核心優勢之一是適應研發中出現的新想法。 以太坊具備出色的適應力,能夠靈活地應對新出現的挑戰並跟上最先進的技術突破。 - - - -以太坊的開發藍圖主要是研發人員多年努力的成果,因為協定的技術性非常強,不過任何有想法與動力的人皆可參與。 創意通常始於論壇上的討論,比如 [ethresear.ch](https://ethresear.ch/)、[Ethereum magicians](https://ethereum-magicians.org/) 或以太坊研發 Discord 伺服器。 它們可能是對新發現的漏洞的回應、在應用程式層工作的組織(比如 [去中心化應用程式](/glossary/#dapp) 和交易所)提出的意見,或是對終端使用者已知問題(比如成本或交易速度)的解決辦法。 當這些理念成熟之後,可以作為 [以太坊改進提案] 提出 (https://eips.ethereum.org/)。 這一切都是公開進行的,因此社群中的每個人都可以隨時發表意見。 - -[有關以太坊管理體系的更多資訊](/管理體系/) - - - - -

什麼是以太坊 2?

- -

在過渡到權益證明之前,「以太坊 2.0」一詞通常用於描述以太坊的未來,但現在已被逐步淘汰,取而代之的是更精確的術語。它最初用來區分過渡到權益證明之前和之後的以太坊網路,有時也指不同的以太坊用戶端(執行用戶端有時稱為以太坊 1.0 用戶端,共識用戶端有時稱為以太坊 2.0 用戶端)。

- -
- -## 以太坊的開發藍圖會隨時間而變更嗎? {#will-ethereums-roadmap-change-over-time} - -**是的,幾乎一定會**。 開發藍圖是最新的以太坊升級計劃,涵蓋近期和未來的計劃。 我們預計隨著新資訊和技術的出現,開發藍圖也會變更。 - -將以太坊的路線圖視為改進以太坊的一系列意圖;這是核心研究者和開發者對以太坊最優前進路徑的最佳假設。 - -## 開發藍圖將於何時完成? {#when-will-the-roadmap-be-finished} - -有些升級是較低優先级的,可能在未來 5 到 10 年內不會實作(例如抗量子性)。 **預測每次升級的確切時間非常複雜**,因為許多開發藍圖項目是並行進行的,並且開發速度各不相同。 升級的緊迫性也會隨著時間的推移而變化,這取決於外部因素(例如,量子電腦的效能和可用性突然提升可能導致抗量子密碼學的實作更加緊急)。 - -可以將以太坊的發展類比為生物進化。 相較於抗拒改變的網路,能夠適應新挑戰及維持健康的網路更有可能成功,不過隨著網路的效能、可擴容性和安全性越來越高,需要對協定進行的變更也會減少。 - -## 升級時我需要做什麼嗎? {#do-i-have-to-do-anything-when-there-is-an-upgrade} - -升級往往不會影響終端使用者,除了提供更好的使用者體驗和更安全的協定,或許還提供更多與以太坊互動的選項。 **普通使用者無需積極參與升級,也不需要做任何事情**來保護他們的資產。 [節點](/glossary/#node)營運商需要更新他們的用戶端以做好升級準備。 有些升級可能帶來適用於應用程式開發者的變更。 舉例來說,完成歷史記錄到期升級之後,應用程式開發者可從新來源取得歷史資料。 - -## 邊際 (The Verge)、誇耀 (The Splurge) 等等將如何? {#what-about-the-verge-splurge-etc} - -[Vitalik Buterin 提出了以太坊開發藍圖的願景](https://twitter.com/VitalikButerin/status/1741190491578810445),開發藍圖中的事項被整理為多個類別,根據各自對以太坊架構的影響相互關聯。 其中包括: - -- **合併 (The Merge)**:涉及從[工作量證明](/glossary/#pow)過渡到[權益證明](/glossary/#pos)的升級 -- **激增 (The Surge)**:透過[卷軸](/glossary/#rollups)和資料分片進行與可擴容性相關的升級 -- **災厄 (The Scourge)**:與[最大可提取價值](/glossary/#mev)的抗審查性、去中心化和協定風險相關的升級 -- **邊際 (The Verge)**:使得驗證[區塊](/glossary/#block)更容易的升級 -- **淨化 (The Purge)**:有助降低運行節點的計算成本和簡化協定的升級 -- **誇耀 (The Splurge)**:不屬於上述類別的其他升級。 - -我們決定不使用這些術語,因為想使用更簡單、更以使用者為中心的模型。 雖然我們使用以使用者為中心的語言,但願景仍然與 Vitalik 提出的願景相同。 - -## 分片會如何? {#what-about-sharding} - -分片是指對以太坊區塊鏈進行分割,使一部分[驗證者](/glossary/#validator)只需負責所有資料中的一小部分。 這原本是以太坊的擴容方式。 然而,[二層網路](/glossary/#layer-2)卷軸的發展速度比預期快得多,不僅已經提供大量擴容,並且在 Proto-Danksharding 實作後還會提供更多功能。 這意味著已不再需要「分片鏈」,並且已將其從開發藍圖中刪除。 - -## 在尋找特定的技術升級嗎? {#looking-for-specific-technical-upgrades} - -- [Danksharding](/roadmap/danksharding) - Danksharding 透過新增資料的二進位大型物件到以太坊區塊中,使二層網路卷軸的成本大大降低。 -- [質押提款](/staking/withdrawals) - 上海/卡佩拉升級在以太坊上啟用了質押提款,允許人們解鎖質押的以太幣。 -- [單一時隙最終確定性](/roadmap/single-slot-finality) - 無需等待十五分鐘,就可以在同一時隙內提出並最終確定區塊。 這對於應用程式來說更方便,也更難被攻擊。 -- [提交者-建置者分離](/roadmap/pbs) - 讓不同的驗證者承擔區塊建置和區塊提交任務,為以太坊達成共識建立了一種更公平、更抗審查且更有效的方式。 -- [秘密領導者選舉](/roadmap/secret-leader-election) - 可以使用巧妙的密碼學來確保目前區塊提交者的身分不被公開,從而保護他們免遭某些類型的攻擊。 -- [帳戶抽象](/roadmap/account-abstraction) - 帳戶抽像是一類升級,支援以太坊上原生的智慧型合約錢包,而不必使用複雜的中間件。 -- [沃克爾樹](/roadmap/verkle-trees) - 沃克爾樹是一種資料結構,可用於在以太坊上啟用無狀態用戶端。 這些「無狀態」用戶端只需少量的儲存空間,但仍然能夠驗證新區塊。 -- [無狀態](/roadmap/statelessness) - 無狀態用戶端不需要大量資料,即可驗證新區塊。 這將提供運行節點的所有好處,而成本僅為目前的一小部分。 diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/index.md deleted file mode 100644 index 34e5f063f91..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/index.md +++ /dev/null @@ -1,229 +0,0 @@ ---- -title: 合併 -description: 瞭解「合併 - 當以太坊主網採用權益證明時」的相關資訊。 -lang: zh-tw -template: upgrade -image: /images/upgrades/merge.png -alt: -summaryPoint1: 以太坊主網使用權益證明,但以前並非總是如此。 -summaryPoint2: 從原本的工作量證明機制到權益證明的升級稱為「合併」。 -summaryPoint3: 合併指原本的以太坊主網與稱為信標鏈的獨立權益證明區塊鏈合併,現在作為一條鏈存在。 -summaryPoint4: 合併將以太坊的能源消耗降低了約 99.95%。 ---- - - - 「合併」已於 2022 年 9 月 15 日執行。 這使得以太坊完全過渡到權益證明共識,正式棄用工作量證明並將能耗降低大約 99.95%。 - - -## 什麼是「合併」? {#what-is-the-merge} - -合併指將以太坊的原始執行層(自[創世](/history/#frontier)以來就存在的主網)與其新的權益證明共識層「信標鏈」結合在一起。 它減少了對能源密集型挖礦的需求,而是藉由質押的以太幣來確保網路安全。 這是實現以太坊「更高的可擴容性、安全性和永續性」願景的真正令人興奮的一步。 - - - -一開始,[信標鏈](/roadmap/beacon-chain/)與[主網](/glossary/#mainnet)是分別上線的。 以太坊主網及其所有帳戶、餘額、智慧型合約以及區塊練狀態繼續受到[工作量證明](/developers/docs/consensus-mechanisms/pow/)的保護,即使信標鏈使用[權益證明](/developers/docs/consensus-mechanisms/pos/)並行運作。 合併完成即表示這兩個系統最終結合在一起,權益證明永久取代工作量證明。 - -將以太坊想像成一艘宇宙飛船,還未完全準備好星際旅行就已經升空。 以太坊社群藉由信標鏈打造全新的引擎與堅固的外殼。 經過大量的測試後,是時候在飛行旅途中以熱插拔的方式將舊引擎更換為新引擎了。 全新且更高效的引擎合併到現有的飛船中,使之能夠進行長達數光年的太空之旅。 - -## 與主網合併 {#merging-with-mainnet} - -從創世到合併之前,工作量證明一直保護著以太坊主網的安全。 這使得我們都習慣的以太坊區塊鏈於 2015 年 7 月誕生,並具備所有熟悉的功能——交易、智慧型合約、帳戶等。 - -在以太坊整個發展歷程中,開發者們一直在為最終從工作量證明過渡到權益證明努力準備著。 2020 年 12 月 1 日,信標鏈作為獨立於主網的區塊鏈建立,與主網並行運行。 - -信標鏈原本並沒有處理主網的交易, 而是透過商定活躍的驗證者及其帳戶的餘額就其自己的狀態達成共識。 廣泛的測試完成後,就是讓信標鏈就真實資料達成共識的時候了。 合併之後,信標鏈會成為所有網路資料的共識引擎,包含執行層的交易以及帳戶餘額。 - -合併代表正式轉用信標鏈作為區塊生產引擎。 挖礦不再是生產有效區塊的方式。 相反,權益證明驗證者已擔任這個角色,現在負責處理所有交易的有效性及提出區塊。 - -合併中,歷史記錄不會丟失。 隨著主網與信標鏈合併,以太坊的所有交易記錄也已一併整合。 - - -這種向權益證明的過渡改變了以太幣的發行方式。 瞭解合併前後的以太幣發行的更多相關資訊。 - - -### 使用者及持有者 {#users-holders} - -**合併並不會對持有者或使用者造成任何影響。** - -_再次提醒:_作為以太幣或其他以太坊數位資產的使用者或持有者,以及非節點運行質押者,**在合併前,你並不需要針對自己的資金或錢包採取任何行動**。以太幣還是原本的以太幣。 並沒有所謂的「舊以太幣」/「新以太幣」或「以太坊 1」/「以太坊 2」,而且合併前後錢包的使用方式也完全一樣。若有人告訴你其他的說法,那他很可能是個騙子。 - -儘管不再使用工作量證明,以太坊自從創世以來的完整歷史記錄將完整保留,不會因為過渡到權益證明而有所改變。 合併前即存在於錢包的所有資金,合併之後一樣可用。 **無須採取任何行動即可升級。** - -[更多以太坊安全性相關更多資訊](/security/#eth2-token-scam) - -### 節點營運商與去中心化應用程式開發者 {#node-operators-dapp-developers} - - - -主要行動事項包括: - -1. 同時運行共識用戶端及執行用戶端;合併之後,無法再使用取得執行資料的第三方端點。 -2. 使用共用的 JWT 金鑰來驗證執行與共識用戶端,以便他們能夠安全地通訊。 -3 設定「費用接收」地址以接收賺取的交易費小費/最大可提取價值 (MEV)。 - -在完成上述兩點以前,你的節點會顯示為「離線」,直到兩個層皆同步且通過驗證為止。 - -若未設定「費用接收」地址,驗證者仍舊可以如常行事,但你將無法賺取未銷毀費用小費,以及原本可以在驗證者提出的區塊中賺取的最大可提取價值。 - - - - -合併以前,執行用戶端(例如 Geth、Erigon、Besu 或 Nevermind)可以接收、正確驗證以及廣播藉由網路傳播的區塊。 _合併之後_,執行有效負載中包含的交易之有效性現在也取決於其所在的「共識區塊」的有效性。 - -因此,以太坊全節點現在同時需要執行用戶端與共識用戶端。 這兩個用戶端使用新的引擎應用程式介面協同運作。 引擎應用程式介面需要使用 JWT 金鑰進行驗證,該金鑰會提供給兩個用戶端來支援安全通訊。 - -主要行動事項包括: - -- 除共識用戶端之外,還要安裝執行用戶端 -- 利用共用的 JWT 金鑰來驗證執行用戶端和共識用戶端,這樣它們就可以安全地同彼此通訊。 - -若未完成上述事項,你的節點將會顯示為「離線」狀態,直到兩個層皆同步且通過驗證為止。 - - - - - -合併過程中共識機制亦發生變更,包括以下方面的相關變更:< - -
    -
  • 區塊結構
  • -
  • 時隙/區塊時間
  • -
  • 操作碼變更
  • -
  • 鏈上隨機性來源
  • -
  • 安全標頭定案區塊的概念
  • -
- -更多資訊請閱讀 Tim Beiko 的部落格文章:合併如何影響以太坊的應用程式層。 - -
- -## 合併與能耗 {#merge-and-energy} - -合併標誌著以太坊工作量證明的結束,並開啟了更具可持續性和環保的以太坊紀元。 以太坊的能耗預計下降了 99.95%,使得以太坊成為綠色區塊鏈。 瞭解關於[以太坊能耗](/energy-consumption/)的更多資訊。 - -## 合併與擴容 {#merge-and-scaling} - -合併也為工作量證明之下無法實現的進一步擴容升級奠定了基礎,使得以太坊更接近實現[以太坊願景](/roadmap/vision/)中所描繪的全面擴容、安全性與永續性。 - -## 關於合併的誤解 {#misconceptions} - - - -以太坊的節點有兩種類型:可以提出區塊;無法提出區塊。 - -提出區塊的節點僅佔以太坊節點總數的一小部分。 這一類別中包含工作量證明 (PoW) 下的挖礦節點及權益證明 (PoS) 下的驗證者節點。 這一類別必須要付出經濟資源(例如工作量證明下 GPU 的雜湊算力,或是權益證明下的質押以太幣)來換取不時提出下一個區塊並贏取協定獎勵的能力。 - -除了具有 1-2 TB 可用儲存空間和網際網路連線的消費級電腦之外,網路上的其他節點(即其他大多數)不需要付出任何經濟資源。 這些節點並不會提出區塊,但仍然會在保護網路安全中扮演很重要的角色,它們透過偵聽新區塊並根據網路共識規則在其到達時驗證其有效性,讓所有區塊提議者負責。 如果區塊有效,節點會繼續將其廣播到網路上。 如果區塊無效,無論什麼樣的原因,節點軟體會將其視為無效並停止其傳播。 - -在任一共識機制(工作量證明或權益證明)下,任何人都可以執行非區塊生產節點;如果可以,強烈推薦所有使用者都這麼做。 運行節點不只對以太坊非常有價值,還可以為運行節點的個人帶來額外的好處,例如提高安全性、隱私性和抗審查能力。 - -任何人都能夠執行自己的節點對於維持以太坊網路的去中心化絕對至關重要。 - -執行自己節點的更多相關資訊 - - - - - -燃料費用是網路需求相對於網路容量的產物。 合併後,我們棄用了工作量證明,轉而採用權益證明共識機制,但並沒有顯著改變任何直接影響網路容量或吞吐量的參數。 - -根據以卷軸為中心的開發藍圖,我們主要專注於擴展二層網路上的使用者活動,同時讓一層網路主網成為針對卷軸資料儲存進行最佳化的安全去中心化結算層,以協助使卷軸交易成本呈指數級下降。 轉用權益證明是實現這點的關鍵前導步驟。 更多燃料和費用相關資訊。 - - - - -交易的「速度」可以透過多種方式衡量,包括添加到區塊中的時間和最終確定的時間。 兩者的改變都非常細微,使用者不太會注意到。 - -過往採用工作量證明時,目標是約每 13.3 秒產生一個新區塊。 採用權益證明時,時隙恰好每 12 秒發生一次,每個時隙都是驗證者發佈區塊的機會。 多數時隙都有區塊,但不一定全部都是這樣(如驗證者離線)。 採用權益證明時,區塊的產生頻率比工作量證明高出約 10%。 這是非常細微的改變,使用者不太可能注意到。 - -權益證明引入了先前不存在的交易最終確定性的概念。 在工作量證明中,交易後經過的每個區塊會讓區塊逆轉的難度指數型加大,但機率並不完全為零。 在權益證明下,區塊會捆綁進驗證者投票的時期(每 6.4 分鐘含有 32 個提出區塊的機會)。 當一個時期結束時,驗證者投票決定該時期是否「已證明」。 如果驗證者們同意該時期已證明,它會在下個時期最終確定。 取消最終確定的交易在經濟上不可行,因為需要取得和銷毀超過三分之一的質押以太幣總量。 - - - - - -合併初期,質押者僅能賺取提出區塊的費用小費和最大可提取價值。 這些獎勵被計入驗證者控制的非質押帳戶(稱為費用接收地址),且立即可用。 這些獎勵與執行驗證者職責的協定獎勵是分開的。 - -自從上海/卡佩拉網路升級後,質押者現在可以指定提款地址,以開始接收自動支付的額外質押餘額(原本質押的 32 以太幣以外的協定獎勵)。 此升級也使驗證者可以在退出網路時解鎖和收回其全部餘額。 - -更多質押提款相關資訊 - - - - -由於上海/卡佩拉升級啟用了提款功能,我們鼓勵驗證者提取其質押的 32 個以太幣以外的餘額,因為這些資金不會增加收益率,不提取會被鎖定。 根據年化報酬率(取決於質押的以太幣總量),他們可能激勵驗證者退出,以回收其全部餘額,或者用其質押獲得的獎勵繼續質押,賺取更多以太幣。 - -這裡有個重要的限制:協定限制了驗證者完全退出的速率,每個時期(每 6.4 分鐘)只有一定數量的驗證者可以退出。 此限制會根據活躍驗證者數量波動,但單日可退出網路的驗證者總數約為全部驗證者的 0.33%。 - -這可以防止質押資金大規模外流。 此外,這也可以阻止可存取很大一部分質押以太幣總量的潛在攻擊者實施可被罰沒的違規行為,並在協定執行罰沒懲處之前,在同一時期退出/提取所有違規的驗證者餘額。 - -年化報酬率也是特意設計成動態的,使得市場上的質押者可以權衡他們願意付出多少成本來協助維護網路安全。 如果速率太低,驗證者將以協定限制的速率退出。 這將逐漸提高留下的所有人的年利率,吸引新的質押者或讓老質押者迴歸。 - - -## 「以太坊 2.0」怎麼了? {#eth2} - -「以太坊 2」這個術語已被棄用。 將「以太坊 1」和「以太坊 2」合併為單一的區塊鏈後,已不需要區分這兩個以太坊網路;現在只有以太坊。 - -為了減少混亂,社區更新了這些條款: - -- 「以太坊 1.0」現在是處理交易和執行的「執行層」。 -- 「以太坊 2.0」現在是處理權益證明共識的「共識層」。 - -這些術語更新只是改變了命名慣例;這並沒有改變以太坊的目標或開發藍圖。 - -[瞭解更多關於「以太坊 2.0」重命名的資訊](https://blog.ethereum.org/2022/01/24/the-great-eth2-renaming/) - -## 不同升級之間的關聯 {#relationship-between-upgrades} - -所有以太坊升級都有某種程度上的關聯。 我們來重新回顧合併與其他升級之間的關係。 - -### 合併與信標鏈 {#merge-and-beacon-chain} - -合併代表著信標鏈作為原始主網執行層的新共識層被正式採用。 合併後,驗證者需負責維護以太坊安全,且[工作量證明](/developers/docs/consensus-mechanisms/pow/)挖礦已不再是有效的區塊生產方式。 - -相反,區塊是由質押了以太幣的驗證節點提出,以換取參與共識的權利。 這為包括分片在內的未來擴容升級奠定了基礎。 - - - 信標鏈 - - -### 合並與上海升級 {#merge-and-shanghai} - -為了簡化流程並最大限度地專注於成功過渡到權益證明,合併升級不包括某些預期的功能,例如提取質押以太幣的能力。 此功能是在上海/卡佩拉升級時單獨啟用的。 - -歡迎感興趣人士詳細瞭解 Vitalik 在 2021 年 4 月的 ETHGlobal 活動上介紹的[合併後會發生什麼](https://youtu.be/7ggwLccuN5s?t=101)的更多資訊。 - -### 合併與分片 {#merge-and-data-sharding} - -原本的計劃是,在合併前進行分片以處理擴容問題。 然而,鑑於[二層網路擴容解決方案](/layer-2/)的蓬勃發展,優先事務就是摒棄工作量證明,轉用權益證明。 - -分片計劃正在迅速發展,但考慮到用於擴展交易執行的二層網路技術的興起和成功,分片計劃已轉向尋找最佳方式來分配儲存來自卷軸合約的壓縮 calldata 的負擔,從而實現網路容量的指數級增長。 如果不過渡到權益證明,這是不可能的。 - - - 分片 - - -## 延伸閱讀 {#further-reading} - - - - diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/issuance/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/issuance/index.md deleted file mode 100644 index 3b6161007b2..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/roadmap/merge/issuance/index.md +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: 合併會對以太幣供給造成什麼影響 -description: 解析合併將如何影響以太幣的供給 -lang: zh-tw ---- - -# 合併會對以太幣供給造成什麼影響 {#how-the-merge-impacts-ETH-supply} - -合併指的是 2022 年 9 月,以太坊網路棄用工作量證明,轉而採用權益證明。 在合併的過程中,以太幣的發行方式亦相應改變。 在此之前,新的以太幣透過兩種方式發行:執行層(即 主網)和共識層(即 信標鏈)。 合併後,執行層不再發行以太幣。 本文將解釋這一改變的來龍去脈。 - -## 以太幣發行機制的組成 {#components-of-eth-issuance} - -我們可以將以太幣的供給拆分為兩個主要面向:發行與銷毀。 - -以太幣的**發行**指鑄造新以太幣的過程。 以太幣的**銷毀**則是指廢棄既有的以太幣,使其不再流通。 發行率和銷毀率將基於數種參數計算得出,而兩者之間的差值便決定了以太幣的通膨/通縮率。 - - - -- 在過渡到權益證明前,所有礦工總計每日可得到約 13,000 個新發行的以太幣 -- 在質押的以太幣總數達到 1,400 萬個的情況下,所有質押者總計每日可得到約 1,700 個新發行的以太幣 -- 實際的質押獎勵會根據質押總量浮動 -- **自合併後,發行僅為每日約 1,700 個以太幣,因此新以太幣總發行量下降了約 88%** -- 銷毀會根據網路的需求量浮動。 _如果某天平均燃料價格高於 16 gwei,這會有效抵消發行給驗證者的約 1,700 個以太幣,使得當天的以太幣淨通膨率降至零或更低。 - - - -## 合併前(歷史狀況) {#pre-merge} - -### 執行層發行 {#el-issuance-pre-merge} - -在工作量證明下,礦工只會和執行層互動,如果它們最快解出下個區塊,則會收到區塊獎勵。 自從 2019 年[君士坦丁堡升級](/history/#constantinople)後,此獎勵就被訂為每個區塊 2 個以太幣。 礦工發佈[叔](/glossary/#ommer)塊同樣會獲得獎勵,這些區塊是未出現在最長鏈/規範鏈中的有效區塊。 每個 Ommer 的最高獎勵為 1.75 個以太幣,這些_不包含_在規範區塊頒發的獎勵之內。 挖礦是一項經濟密集型活動,歷來需要發行大量以太幣才能維持。 - -### 共識層發行 {#cl-issuance-pre-merge} - -[信標鏈](/history/#beacon-chain-genesis)已於 2020 年上線。 使用權益證明的驗證者(而非礦工)會保護其安全。 信標鍊是由以太坊使用者將以太幣單向存入主網(執行層)上的智慧型合約而啟動的,信標鏈會監聽該合約,並在新鏈上為使用者鑄造同等數量的以太幣。 在合併發生之前,信標鏈的驗證者未處理交易,並且基本上就驗證者礦池本身的狀態達成了共識。 - -信標鏈上的驗證者因證明鏈的狀態並提出區塊而獲得以太幣獎勵。 系統會根據驗證者的表現,在每個時期(每 6.4 分鐘)計算和分配獎勵(或懲罰)。 驗證者獎勵**明顯**低於之前根據工作量證明發行的挖礦獎勵(每大約 13.5 秒 2 個以太幣),因為運行驗證節點不是經濟密集型活動,因此不需要或不保證那麼高的獎勵。 - -### 合併前發行細節 {#pre-merge-issuance-breakdown} - -以太幣總供給量:**大約 120,520,000 個以太幣**(2022 年 9 月合併時) - -**執行層發行:** - -- 估計每 13.3 秒 2.08 個以太幣\*:每年發行**大約 4,930,000 個以太幣**。 -- 導致通膨率達到**大約 4.09%**(每年 493 萬 / 總計 1.205 億) -- \*這包含了每個規範區塊 2 個以太幣,加上一段時間內來自叔塊的平均 0.08 個以太幣。 兩者同樣花費 13.3 秒,不受[難度爆彈](/glossary/#difficulty-bomb)任何影響的基本區塊時間目標。 ([請見來源資訊](https://bitinfocharts.com/ethereum/)) - -**共識層發行:** - -- 以質押總量為 14,000,000 個以太幣計,發行量為大約每天 1700 個以太幣([請見來源資訊](https://ultrasound.money/)) -- 導致每年的以太幣發行量達到**大約 620,500 個** -- 導致通膨率達到**大約 0.52%**(每年 62.05 萬 / 總計 1.193 億) - - -總年化發行率(合併前):約 4.61% (4.09% + 0.52%)

-約 88.7% 發行的以太幣給了執行層上的礦工 (4.09 / 4.61 * 100)

-約 11.3% 發行的以太幣給了共識層上的質押者 (0.52 / 4.61 * 100) -
- -## 合併後(現狀) {#post-merge} - -### 執行層發行 {#el-issuance-post-merge} - -合併後執行層的發行量為零。 在升級後的共識規則下,工作量證明不再是有效的區塊產生方式。 所有執行層的活動都被打包進權益證明驗證者發佈和證明的「信標區塊」。 證明和發佈信標區塊的獎勵在共識層上是獨立計算的。 - -### 共識層發行 {#cl-issuance-post-merge} - -共識層發行今天仍在繼續,就像合併前一樣,證明和提出區塊的驗證者會收到少量獎勵。 驗證者獎勵會繼續累積到共識層內管理的_驗證者餘額_中。 與可以在主網上交易的活期帳戶(「執行」帳戶)不同,這些是單獨的以太坊帳戶,不能與其他以太坊帳戶自由交易。 這些帳戶中的資金只能提領到單一的指定執行地址。 - -自上海/卡佩拉升級於 2023 年 4 月完成以來,質押者已可提領這些資金。 我們鼓勵質押者取出_收益/獎勵(超過 32 以太幣的餘額)_,因為這些資金對其質押權重無益(最大為 32 個)。 - -質押者也可以選擇退出並提領其全部驗證者餘額。 為了確保以太坊的穩定性,驗證者同時退出的數量是有上限的。 - -每天可以退出的上限約為驗證者總數的 0.33%。 預設情況下,每個時期(每 6.4 分鐘,每天共 900 名)可以退出四 (4) 名驗證者。 在驗證者超過 262,144 (218) 的情況下,每額外增加 65,536 (216) 名驗證者,即可額外允許一 (1) 名驗證者退出。 舉例來說,若驗證者數量超過 327,680,則每個時期可以退出五 (5) 名(每天 1,125 名)。 活躍驗證者總數超過 393,216 時,將允許六 (6) 名退出,依此類推。 - -隨著越來越多的驗證者退出,退出驗證者的最大數量將逐漸減少到下限值四個,用於特意防止大量質押的以太幣同時被取出,造成不穩定。 - -### 合併後通膨細節 {#post-merge-inflation-breakdown} - -- 以太幣總供給量:**大約 120,520,000 個以太幣**(2022 年 9 月合併時) -- 執行層發行量:**0** -- 共識層發行量:同上,年化發行率**約為 0.52%**(質押總量為 1,400 萬個以太幣) - - -總年化發行率:約 0.52%

-年度以太幣發行量淨減少值:約 88.7% ((4.61% - 0.52%) / 4.61% * 100) -
- -## 銷毀 {#the-burn} - -與以太幣發行相反的力量是以太幣被銷毀的速度。 對於在以太坊上執行的交易,必須支付最低費用(稱為「基本費用」),具體費用根據網路活動不斷波動(逐區塊)。 此費用使用以太幣支付,且_必須_支付這筆費用,交易才被視為有效。 這筆費用會在交易過程中_銷毀_,從流通中移除。 - - -費用銷毀機制在 2021 年 8 月倫敦升級後上線,自合併以來一直維持不變。 - - -除了倫敦升級時實作的費用銷毀機制外,驗證者也可能因離線而受到懲處;更糟糕的是,他們可能因為違反威脅網路安全的特定規定而遭罰沒。 這些處罰會導致驗證者餘額中的以太幣減少,減少的金額不會直接獎勵給任何其他帳戶,而是會有效地從流通中銷毀/移除。 - -### 計算通縮時的平均燃料價格 {#calculating-average-gas-price-for-deflation} - -如上所述,一天發行的以太幣數量取決於質押的以太幣總量。 截至本文撰寫時止,每天的發行量約為 1,700 個以太幣。 - -為了確定在給定 24 小時內完全抵消此次發行所需的平均燃料價格,我們先計算一天中發行的區塊總數(假設一個區塊出塊的時間為 12 秒): - -- `(1 個區塊/12 秒) * (60 秒/分鐘) = 5 個區塊/分鐘` -- `(5 個區塊/分鐘) * (60 分鐘/小時) = 300 個區塊/小時` -- `(300 個區塊/小時) * (24 小時/天) = 7200 個區塊/天` - -每個區塊目標為 `15x10^6 gas/block`([更多燃料相關資訊](/developers/docs/gas/))。 我們可以利用這一資訊解出抵消發行量需要的平均燃料價格(以 gwei/燃料為單位),假設每日以太幣發行量為 1700: - -- `7200 blocks/day * 15x10^6 gas/block *`**`Y gwei/gas`**`* 1 ETH/ 10^9 gwei = 1700 ETH/day` - -解出 `Y`: - -- `Y = (1700(10^9))/(7200 * 15(10^6)) = (17x10^3)/(72 * 15) = 16 gwei`(四捨五入至僅保留兩位有效數字) - -另一種方式是將最後一步的 `1700` 替換成代表每日以太幣發行量的變數 `X`,並將其餘部分化簡為: - -- `Y = (X(10^3)/(7200 * 15)) = X/108` - -我們可以簡化並將其寫為 `X` 的函式: - -- `f(X) = X/108`,其中 `X` 代表每日的以太幣發行量,`f(X)` 代表抵消新發行的所有以太幣所需的 gwei/燃料價格。 - -所以舉例來說,若基於以太幣質押總量,`X`(每日以太幣發行量)升至 1800,`f(X)`(抵消發行的所有以太幣所需的 gwei)會是 `17 gwei`(取兩位有效數字) - -## 延伸閱讀 {#further-reading} - -- [合併](/roadmap/merge/) -- [Ultrasound.money](https://ultrasound.money/) - _即時可視化以太幣發行及銷毀情況的儀表板_ -- [以太坊發行量圖表](https://www.attestant.io/posts/charting-ethereum-issuance/) - _Jim McDonald,2020 年_ diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/scaling/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/scaling/index.md deleted file mode 100644 index 5549d4cc684..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/roadmap/scaling/index.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: 以太坊擴容 -description: 卷軸可在鏈下批次處理交易,從而降低使用者的成本。 但現今卷軸使用資料的方式還是過於昂貴,限制了交易費用的下限。 Proto-Danksharding 可以解決這個問題。 -lang: zh-tw -image: /images/roadmap/roadmap-transactions.png -alt: "以太坊開發藍圖" -template: roadmap ---- - -以太坊利用[二層網路](/layer-2/#rollups)(也稱「卷軸」)實現擴容,可批次處理交易並將輸出傳送至以太坊。 儘管成本已比以太坊主網低八倍,卷軸還有進一步最佳化的空間,進而幫助降低終端使用者的成本。 此外,卷軸還仰賴於一些中心化組件,隨著其不斷發展成熟,開發者可以移除這些組件。 - - -
    -
  • 現今卷軸的成本比以太坊一層網路便宜大約 5 - 20 倍
  • -
  • 零知識卷軸很快會讓費用降低大約 40-100 倍
  • -
  • 以太坊即將變更,會帶來大約 100-1000 倍的擴容
  • -
  • 使用者應該能夠從成本低於 $0.001 的交易中受益
  • -
-
- -## 降低資料使用費用 {#making-data-cheaper} - -卷軸會集合大量交易,執行它們並將結果提交到以太坊。 這會產生大量需要公開的資料,以便所有人都可以自己執行交易並驗證卷軸營運者是否誠實。 若有人發現矛盾之處,可以提起質詢。 - -### Proto-Danksharding {#proto-danksharding} - -以往卷軸資料會永久儲存在以太坊上,成本非常高昂。 使用者為卷軸支付的交易費用中,超過 90% 都是花在資料儲存上。 為了降低交易費用,我們可以將資料移至新的「二進位大型物件」臨時儲存區。 二進位大型物件更便宜,因為它們不是永久性的,一旦不再需要,就會從以太坊中刪除。 需要長期卷軸資料的人,例如卷軸營運商、交易所、索引服務等,得要自己負責儲存這些資料。 將二進位大型物件交易新增至以太坊是「Proto-Danksharding」升級的一部分。 - -透過 Proto-Danksharding,將多個二進位大型物件新增至以太坊區塊成為可能。 這將是以太坊吞吐量的又一次大幅(>100 倍)擴容和交易成本的縮減。 - -### Danksharding {#danksharding} - -擴展二進位大型物件資料的第二階段很複雜,因為需要新的方法來檢查網路上可用的卷軸資料,並仰賴[驗證者](/glossary/#validator)將其[區塊](/glossary/#block)建置和區塊提交職責分開。 它還需要一種方法來以加密方式證明驗證者已驗證一小部分二進位大型物件資料。 - -這個第二步也稱作[「Danksharding」](/roadmap/danksharding/), 全面實作**可能還需要數年時間**。 Danksharding 還需要仰賴其他的技術開發,例如[將區塊建置和區塊提出分開](/roadmap/pbs),以及新的網路設計,使得網路能夠透過一次隨機採樣幾千字節來有效地確認資料可用(也稱作[資料可用性採樣 (DAS)](/developers/docs/data-availability))。 - -更多分片相關資訊 - -## 卷軸去中心化 {#decentralizing-rollups} - -[卷軸](/layer-2)已在推動以太坊擴容。 憑藉[豐富的卷軸專案生態系統](https://l2beat.com/scaling/tvl),使用者可以在有安全保證的狀況下快速實惠地完成交易。 然而,一直以來卷軸都是使用中心化排序者(先完成所有交易處理和匯總,再將結果提交至以太坊的電腦)啟動的。 這樣便容易受到審查,因為排序者營運商可能被制裁、賄賂或者做出其他讓步。 同時,[卷軸也會採取不同方式](https://l2beat.com)驗證傳入的資料。 最好的方法是讓「證明者」提交[詐欺證明](/glossary/#fraud-proof)或有效性證明,但並非所有卷軸都能做到這一點。 即使是確實使用有效性/欺詐證明的卷軸也只使用一小部分已知的證明者。 因此,以太坊擴容的下一個關鍵步驟就是將運行排序者和證明者的責任分配給更多人。 - -更多卷軸相關資訊 - -## 目前進度 {#current-progress} - -Proto-Danksharding 是這些開發藍圖上的第一個項目,將於 2024 年 3 月的 Cancun-Deneb(「坎昆」)網路升級中實作。 **完整的 Danksharding 可能還需要幾年的時間實作**,因為它要仰賴其他幾個需要先行完成的開發藍圖項目。 卷軸基礎設施的去中心化可能是一個漸進的過程,有許多不同的卷軸正在構建略有不同的系統,並將以不同的速率完全去中心化。 - -[更多坎昆網路升級相關資訊](/roadmap/dencun/) - - diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/security/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/security/index.md deleted file mode 100644 index 20ef0d196e3..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/roadmap/security/index.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 一個更安全的以太坊 -description: 以太坊是現有最安全、去中心化程度最高的智慧型合約平台。 然而,我們還可以繼續對其進行改進,以便未來能夠保持韌性來對抗任意級別的攻擊。 -lang: zh-tw -image: /images/roadmap/roadmap-security.png -alt: "以太坊開發藍圖" -template: roadmap ---- - -**以太坊已经是一个非常安全的**去中心化[智慧型合约](/glossary/#smart-contract)平台。 但還可以繼續對其進行改進,以便未來能夠保持韌性來對抗各種攻擊。 這些改進包括對[以太坊用戶端](/glossary/#consensus-client)處理競爭[區塊](/glossary/#block)的方式進行微調,以及提高網路認為區塊[「最終確定」](/developers/docs/consensus-mechanisms/pos/#finality)的速度(這意味著攻擊者必須付出巨大的經濟代價才能改變區塊)。 - -我們還可以做一些改進來提高交易審查難度,方法是讓區塊提交者無法獲知區塊的實際內容,以及無法找尋新的方法來識別用戶端的審查。 這些改進將共同升級[權益證明](/glossary/#pos)協定,讓從個人到企業的使用者立即對其在以太坊上的應用程式、資料和資產建立信心。 - -## 質押提款 {#staking-withdrawals} - -從[工作量證明](/glossary/#pow)到權益證明的升級,始於以太坊先驅將他們的以太幣「質押」到存款合約中。 質押的以太幣用於保護網路安全, 2023 年 4 月 12 日進行了第二次更新,容許提取質押的以太幣。 從此驗證者可以自由地質押或提取以太幣。 - -閱讀提款的相關資訊 - -## 對抗攻擊 {#defending-against-attacks} - -可以對以太坊權益證明協定進行一些改進。 其中一項稱為[視圖合併](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739) - 這是一種更安全的[分叉](/glossary/#fork)選擇演算法,可以令某些複雜類型的攻擊難度大增。 - -縮短以太坊[最終確定](/glossary/#finality)區塊所需的時間將帶來更好的使用者體驗,並可防止複雜的「重組」攻擊,即攻擊者試圖重新打亂最近的區塊以攫取利潤或審查某些交易。 [**單時隙最終確定性 (SSF)**](/roadmap/single-slot-finality/) 是一種**盡可能減少最終確定延遲的方式**。 目前,攻擊者理論上可以說服其他驗證者重新設定 15 分鐘的區塊。 採用單一時隙最終確定性時,這一數值將變為 0。 使用者(從個人至應用程式乃至交易所)都將受益於快速保證其交易不會被還原,消滅整個一類攻擊會讓網路受益。 - -閱讀單一時隙最終確定性的相關資訊 - -## 對抗審查 {#defending-against-censorship} - -去中心化可防止個人或小部分[驗證者](/glossary/#validator)的影響力過大。 新的質押技術有助於確保以太坊的驗證者盡可能保持去中心化,同時保護他們免遭硬體、軟體及網路故障。 這包括跨多個[節點](/glossary/#node)共擔驗證者職責的軟體, 被稱為**分散式驗證者技術 (DVT)**。 分散式驗證者技術允許多台電腦共同參與驗證,增強了冗餘和容錯能力,所以鼓勵[質押池](/glossary/#staking-pool)使用分散式驗證者技術。 它還將驗證者金鑰拆分到多個系統中,而不是讓單個運營商執行多個驗證者。 這使得不誠實的運營商更難協調對以太坊的攻擊。 總結來說,分散式驗證者技術的理念是以_群體_而非個體的方式運行驗證者,從而獲得安全優勢。 - -閱讀分散式驗證者技術的相關資訊 - -實作**提交者-建置者分離 (PBS)** 可大幅提升以太坊內建的抗審查能力。 提交者-建置者分離讓一個驗證者建立區塊,另一個負責將該區塊廣播至以太坊網路。 這樣可確保在整個網路中更公平地分享專業的利潤最大化區塊建置演算法帶來的收益,**避免質押逐漸集中**到表現最佳的機構質押者手上。 區塊提交者可以從眾多區塊建置者提供給他們的區塊中,選取收益最高的區塊。 為了對抗審查,區塊提交者常常退而求其次,選取收益較低的區塊,這在**經濟上不合理,網路上的其他驗證者也很容易看出其意圖**。 - -提交者-建置者分離有潛在的附加功能(如交易加密及包含清單),可以進一步提高以太坊的抗審查能力。 這些功能使得區塊建置者和提交者無法得知其區塊中包含的實際交易。 - -閱讀提交者-建置者分離的相關資訊 - -## 保護驗證者 {#protecting-validators} - -經驗老道的攻擊者可能有辦法識別下一輪的驗證者,透過傳送垃圾訊息阻止他們提出區塊,這稱為**阻斷服務 (DoS)** 攻擊。 實作[**秘密領導者選舉 (SLE)**](/roadmap/secret-leader-election) 可以阻止區塊提交者提前獲知區塊內容,從而防範此類攻擊。 其作用原理為:不斷變換代表候選區塊提交者的一組加密承諾,並使用其順序來確定驗證者,以便只有驗證者預先知道自己的順序。 - -閱讀秘密領導者選舉的相關資訊 - -## 目前進度 {#current-progress} - -**開發藍圖上的安全性升級正處於研究的後期階段**,但預計一段時間內還不會實作。 至於視窗合併、提交者-建置者分離、單一時隙最終確定性和秘密領導者選舉,下一步是最終確定規範並開始建置原型。 diff --git a/public/content/translations/zh-tw/11) Roadmap/roadmap/user-experience/index.md b/public/content/translations/zh-tw/11) Roadmap/roadmap/user-experience/index.md deleted file mode 100644 index fe338e94201..00000000000 --- a/public/content/translations/zh-tw/11) Roadmap/roadmap/user-experience/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 改善使用者體驗 -description: 對大部分人而言,使用以太坊仍然是非常複雜的一件事。 為了推動普及化,以太坊必須大幅降低使用門檻 — 使用者必須獲得去中心化、無需許可、抗審查存取以太坊的優勢,同時體驗必須與使用傳統 web2 應用程式一樣順暢。 -lang: zh-tw -image: /images/roadmap/roadmap-ux.png -alt: "以太坊開發藍圖" -template: roadmap ---- - -從管理[金鑰](/glossary/#key)和[錢包](/glossary/#wallet)到發起交易,**以太坊的使用方式需要簡化**。 為促成大規模的使用,以太坊必須大幅提高易用性,讓使用者無需許可即能抗審查存取以太坊,收穫仿如使用 [Web2](/glossary/#web2) 應用程式一般的順暢體驗。 - -## 超越種子助記詞 {#no-more-seed-phrases} - -以太坊帳戶由一對用於識別帳戶(公開金鑰)和簽名訊息(私密金鑰)的金鑰保護。 私密金鑰就像主密碼,允許使用者完整存取以太坊帳戶。 對於更熟悉銀行和代使用者管理帳戶之 Web2 應用程式的人來說,這是一種不同的操作方式。 若要讓以太坊在不依賴中心化第三方的情況下被大規模採用,必須為使用者提供一種簡單、直接、順暢的方式來管理資產並掌控自己的資料,而無需瞭解公開-私密金鑰加密及金鑰管理方面的知識。 - -這個問題的解決辦法是使用[智慧型合約<](/glossary/#smart-contract)錢包與以太坊交互。 智慧型合約錢包確立了金鑰丟失或被盜時保護帳戶的方法,提供更好地檢測和防禦欺詐的機會,並且允許為錢包新增功能。 儘管智慧型合約錢包目前已經存在,但其建構難度還很大,因為需要以太坊協定提供更好的支援。 此額外的支援稱為帳戶抽象。 - -更多帳戶抽象相關資訊 - -## 所有人都能運行的節點 - -運行[節點](/glossary/#node)的使用者不必信任第三方為其提供資料,他們無需許可即可快速、私密地與以太坊[區塊鏈](/glossary/#blockchain)進行互動。 然而,現在運行節點需要技術知識以及大量的磁碟空間,這意味著許多人必須信任中介。 - -有些升級可以讓運行節點變得更加簡單,且不需消耗如此大量的資源。 儲存資料時將改為使用更節省空間的架構,稱為**沃克爾樹**。 同時,透過[無狀態](/roadmap/statelessness)或[資料過期](/roadmap/statelessness/#data-expiry),以太坊節點無需儲存全部以太坊狀態資料的副本,從而大大減少硬碟空間需求。 [輕節點](/developers/docs/nodes-and-clients/light-clients/)將帶來運行全節點的許多好處,並且可以在行動電話或簡單的瀏覽器應用程式中輕鬆運行。 - -閱讀沃克爾樹的相關資訊 - -透過這些升級,可以有效地將運行節點的障礙降低至零。 使用者無需許可即能安全存取以太坊,而不必犧牲電腦或行動電話上的大量磁碟或 CPU 空間,且使用應用程式時,不必仰賴第三方存取資料或是網路。 - -## 目前進度 {#current-progress} - -智慧型合約錢包早已可用,但需要更多升級才能讓它們盡可能去中心化及無需許可。 EIP-4337 是一項成熟的提案,無需對以太坊協定進行任何變更。 EIP-4337 所需的主要智慧型合約已於 **2023 年 3 月完成部署**。 - -**「完全無狀態」仍處於研究階段**,距離實作可能還需幾年時間。 還需要完成幾個里程碑才能實現「完全無狀態」,包括可能更快實作的資料過期。 [沃克爾樹](/roadmap/verkle-trees/)及[提交者與建置者分離](/roadmap/pbs/)等其他開發藍圖事項需要先行完成。 - -沃克爾樹測試網已經上線運行,下一階段為先在私密、後在公開的測試網上運行已啟用沃克爾樹的用戶端。 將合約部署至測試網或是運行測試網用戶端有助加快進度。 diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/account-abstraction/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/account-abstraction/index.md deleted file mode 100644 index fd6a009a74f..00000000000 --- a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/account-abstraction/index.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: 帳戶摘要 -description: 以太坊讓使用者帳戶更簡潔、更安全的計劃概述 -lang: zh-tw -summaryPoints: - - 帳戶抽象使得建立智慧型合約錢包變得更加容易 - - 智慧型合約錢包使得以太坊帳戶的存取權限管理變得更加容易 - - 可以使用多個備份來恢復遺失和暴露的金鑰 ---- - -# 帳戶摘要 {#account-abstraction} - -使用者使用**[外部帳戶 (EOA)](/glossary/#eoa)** 與以太坊互動。 這是開啟交易或執行智慧型合約的唯一方法, 限制了使用者與以太坊互動的方式。 舉例而言,它使得批次處理交易變得困難,並且要求使用者始終保持一定的以太幣餘額來支付燃料費用。 - -帳戶抽象能夠解決這些問題,藉助它,使用者可以透過編程,靈活地將更高的安全性和更好的使用體驗帶到其帳戶中。 這可以透過兩種方式實現:[升級外部帳戶](https://eips.ethereum.org/EIPS/eip-3074),這樣它們可以由智慧型合約控制;[升級智慧型合約](https://eips.ethereum.org/EIPS/eip-2938),這樣他們可以發起交易。 兩個方案皆須變更以太坊協定。 還有第三條路徑涉及新增[第二個獨立的交易系統](https://eips.ethereum.org/EIPS/eip-4337),以便與現有協定並行運行。 無論選取哪條路徑,結果都是經由智慧型合約錢包存取以太坊,不管是作為現有協定一部分的本地支援或是藉由附加交易網路。 - -智慧型合約錢包為使用者帶來諸多好處,包括: - -- 自行定義靈活的安全性規則 -- 遺失金鑰時恢復帳戶 -- 安全地與受信任的裝置或個人共用帳戶 -- 幫助別人支付燃料費用,或者讓別人幫忙支付自己的燃料費用 -- 同時批量處理交易(例如一次性核准並執行兌換) -- 為去中心化應用程式和錢包開發者提供更多機會來創新使用者體驗 - -目前,這些優勢並未得到本地的支援,因為只有外部帳戶 ([EOA](/glossary/#eoa)) 才能開啟交易。 外部帳戶純粹只是公開-私密金鑰對。 它們的作用原理為: - -- 如果你有私密金鑰,就可以在以太坊虛擬機 (EVM) 內_做任何事情_ -- 如果沒有私密金鑰,就_什麼事也做不了_。 - -遺失的金鑰無法找回,竊賊可以利用被盜的金鑰立即存取帳戶中的所有資金。 - -智慧型合約錢包可以解決這些問題,但如今它們很難編程,因為最終它們實作的任何邏輯都必須轉換為一組外部帳戶交易,然後才能由以太坊處理。 帳戶抽象使得智慧型合約能夠自行發起交易,因此使用者希望實作的任何邏輯皆可編碼到智慧型合約錢包本身並在以太坊上執行。 - -最後,帳戶抽象改進了對智慧型合約錢包的支援,使其更易於建置且使用更安全。 總的說來,透過帳戶抽象,使用者可以享受以太坊的所有好處,而無需瞭解或關心底層技術。 - -## 超越種子助記詞 {#beyond-seed-phrases} - -現今的帳戶使用依據種子助記詞計算出的私密金鑰來保護。 任何有權存取種子助記詞的人皆可輕鬆發現保護帳戶的私密金鑰,並取得其保護之所有資產的存取權限。 遺失的私密金鑰和種子助記詞將永遠無法恢復,所控制的資產亦將永遠凍結。 即使對於專家使用者來說,保管這些種子助記詞也很困難,且種子助記詞網路釣魚是使用者被騙的最常見方式之一。 - -帳戶抽象將使用智慧型合約來持有資產和授權交易,從而解決這個問題。 然後可以用客製化邏輯裝飾這些智慧型合約,以使其盡可能安全並為使用者量身訂製。 最終,你依舊使用私密金鑰來管控對帳戶的存取,但安全網可以讓你的管理工作變得更輕鬆、更安全。 - -例如,可以將備份金鑰新增至錢包中,以便在主金鑰遺失或意外暴露時,能夠在獲得備份金鑰許可的情況下,用新的安全金鑰取代主金鑰。 你可以透過不同方式保護這些金鑰,或者將它們分配給受信任的監護人。 如此,竊賊便更難完全控制你的資金。 同樣,你可以向錢包新增規則,以減少主金鑰洩露時的影響,舉例來說,你可以允許透過單一簽名來驗證小額交易,而大額交易則需要多位經驗證簽署者的批准。 智慧型合約錢包還有其他方法可以幫助你阻止竊賊,例如,可以使用白名單來阻止每筆交易,除非交易是傳送到受信任的地址或是透過你預先批准的多個金鑰進行驗證。 - -### 可以內建到智慧型合約錢包中的安全邏輯範例: - -- **多重簽名授權**:可以在多個受信任的人員或裝置之間共用授權憑證。 然後可以對合約進行設定,要求交易超過某個預設值時,必須得到一定比例(例如 3/5)的可信方的授權。 舉例來說,高額交易可能需要行動裝置和硬體錢包的批准,或者需要分配予可信家庭成員的帳戶的簽名。 -- **帳戶凍結**:若裝置遺失或受到入侵,可以從另一台授權裝置鎖定帳戶,從而保護使用者的資產。 -- **帳戶恢復**:裝置遺失或忘記密碼? 在目前的範例中,這意味著你的資產可能永遠凍結。 有了智慧型合約錢包,你可以設定一份帳戶白名單來授權新裝置並重設存取權限。 -- **設定交易限制**:指定每日閾值,以控制每日/週/月可以從帳戶轉出多少金額。 這意味著,即使攻擊者確實取得存取你帳戶的存取權限,也不能立即提領所有內容,並且你將有機會凍結和重設存取權限。 -- **建立白名單**:只允許發送交易到你確認安全的特定地址。 這代表_即使_你的私密金鑰遭竊,攻擊者也只能將資金傳送到白名單上的目標帳戶。 這些白名單需要多個簽名才能更改,因此攻擊者無法將自己的地址新增至名單,除非他們有權存取你的多個備份金鑰。 - -## 更好的使用者體驗 {#better-user-experience} - -帳戶抽象可以提供**更好的整體使用者體驗**和**改進的安全性**,因為它在協定層級新增了對智慧型合約錢包的支援。 最重要的原因是,它將為智慧型合約、錢包和應用程式的開發者提供更大的自由,以我們可能無法預見的方式創新使用者體驗。 帳戶抽象帶來的一些明顯改進包括捆綁交易以提高速度和效率。 舉例來說,簡單的兌換原本應該是一鍵操作,但現在卻需要簽署多個交易,以批准各個代幣的使用,接著才能執行兌換。 帳戶抽象透過允許交易捆綁消除了這種分歧。 此外,捆綁交易可以精確批准每筆交易所需的代幣的正確價值,然後在交易完成後撤銷批准,從而提供額外的安全性。 - -透過帳戶抽象,燃料管理也得到很大的改進。 應用程式不僅可以支付使用者的燃料費用,還可以用以太幣以外的代幣支付燃料費用,讓使用者不必為了支付交易手續費而保留以太幣餘額。 這可以透過在合約內將使用者的代幣換成以太幣,然後使用以太幣支付燃料費用來實現。 - - - -燃料管理是以太坊使用者遇到的主要難題之一,主要原因是以太幣是唯一可用於支付交易手續費的資產。 想像一下,如果你的錢包中都是 USDC,沒有以太幣。 你無法移動或兌換這些 USDC 代幣,因為不能支付燃料費用。 也不能將 USDC 換成以太幣,因為這本身就需要消耗燃料。 必須從交易所或其他地址將更多以太幣傳送至你的帳戶,才能解決這個問題。 有了智慧型合約錢包後,你可以輕鬆地用 USDC 支付燃料費用,解放帳戶。 你不必再在所有帳戶中保留以太幣餘額。 - -帳戶抽象也允許去中心化應用程式開發者在燃料管理方面發揮創意。 舉例來說,你每個月或許可以為最喜愛的去中心化交易所支付一筆固定費用,以實現無限制的交易。 去中心化應用程式也可能代你支付所有燃料費用,作為對你使用其平台的獎勵,或作為入網優惠。 當協定層面支援智慧型合約錢包時,開發者將更容易在燃料方面實現創新。 - - - -可信會話還可能變革使用者體驗,特別是像遊戲這樣的應用程式,大量小額交易可能需要在短時間內獲得批准。 逐一批准交易將破壞遊戲體驗,但永久批准又不安全。 智慧型合約錢包可以在固定時間內核准某些特定交易,比如特定金額或地址的交易。 - -考慮購買過程如何隨著帳戶抽象而改變也非常有意思。 目前,必須使用已預先存入足夠數量代幣的錢包,每筆交易才能獲得批准和執行。 透過帳戶抽象,體驗比較像大家熟悉的線上購物,使用者只要將物品放入「購物車」並按一下結帳按鈕,即可一次性購買所有商品,所需的所有邏輯皆由合約處理,而非使用者。 - -這些只是帳戶抽象提升使用者體驗的個別例子,還有更多我們沒有想像到的使用場景。 帳戶抽象將開發者從現今的外部帳戶限制中解放,讓他們將 web2 的優點帶進 web3,而不必犧牲自我託管的權利,亦無需絞盡腦汁發明新的使用者體驗。 - -## 帳戶抽象將如何實作? {#how-will-aa-be-implemented} - -目前市面上已經有智慧型合約錢包了,但因為以太坊虛擬機還不支援,要實作它們非常有挑戰性。 相對的,它們依賴於在標準以太坊交易中包裝相對複雜的程式碼。 透過允許智慧型合約開啟交易,不在鏈下而是在以太坊智慧型合約中處理必要的邏輯,以太坊可以改變上述情況。 將邏輯放進智慧型合約也提高了以太坊的去中心化程度,因為有了它之後,便不需要錢包開發者運行的「中繼器」將使用者簽署的訊息轉換為常規以太坊交易。 - - - -EIP-2771 引入了元交易的概念,允許第三方在不更改以太坊協定的情況下支付使用者的燃料費用。 這個想法是讓使用者簽署的交易會送到「轉發者」合約中。 轉發者是可信任的實體,會在將交易傳送到燃料中繼器之前驗證交易是否有效。 這在鏈下完成,因此無需支付燃料費用。 燃料中繼器將交易送到「接收者」合約,支付必要的燃料費用,以使交易可在以太坊上執行。 如果「接收者」知道和信任「轉發者」,交易即會執行。 這種模式使得開發者可以輕鬆為使用者實現無燃料交易。 - - - - - -EIP-4337 是以去中心化方式實現本地智慧型合約錢包支援的第一步,無需變更以太坊協定。 不是修改共識層來支援智慧型合約錢包,而是在正常的交易廣播協定中單獨新增一個系統。 這個更高級別的系統圍繞一個名為 UserOperation 的新物件建構,此等物件將使用者的操作以及相關簽名打包在一起。 接下來,這些 UserOperation 物件會被廣播到專用記憶體池中,驗證者會將其打包成「捆綁交易」。 捆綁交易代表許多單獨的 UserOperations 序列,可以像普通交易一樣包含在以太坊區塊中,並且可以由驗證者使用類似的費用最大化選取模型來選擇。 - -EIP-4337 也會改變錢包的運作方式。 這些功能將外包給稱為「入口點」的全域錢包合約,而不是每個錢包重新實作常見但複雜的安全邏輯。 此合約將處理支付費用、執行以太坊虛擬機程式碼等操作,以便錢包開發者可以專注於提供出色的使用者體驗。 - -注意 EIP-4337 入口點合約已於 2023 年 3 月 1 日部署至以太坊主網。 你可以在 Etherscan 上查看此合約。 - - - - - -EIP-2938 的目標是藉由引入一種新的交易類型 AA_TX_TYPE 來更新以太坊協定,包含三個欄位:noncetargetdata,其中 nonce 是交易計數器,target 是入口點合約地址,data 是以太坊虛擬機位元組碼。 若要執行這些交易,需要新增兩條新的指令(又稱作業碼)到以太坊虛擬機:NONCEPAYGASNONCE 操作碼會追蹤交易序列,PAYGAS 則會計算並從合約餘額中提取執行交易所需的燃料費用。 這些新功能使得以太坊能夠在本地支援智慧型合約錢包,因為以太坊協定已內建必要的基礎設施。 - -請注意,EIP-2938 目前尚未啟用。 社群目前偏好 EIP-4337,因其不要求變更協定。 - - - - - -EIP-3074 的目標是更新以太坊的外部帳戶,方法是允許它們將控制權委託給智慧型合約。 這意味著智慧型合約邏輯可以批准源自外部帳戶的交易。 這可以讓一些功能成為可能,如燃料贊助和批次交易。 要使其可行,必須新增兩個新的作業碼到以太坊虛擬機:AUTHAUTHCALL。 透過 EIP-3074,無需合約即可獲得智慧型合約錢包的優勢;相反,一種稱為「調用者」的特定類型的無狀態、無信任、不可升級的合約會處理交易。 - -請注意,EIP-3074 目前尚未啟用。 社群目前偏好 EIP-4337,因其不要求變更協定。 - - - -## 目前進度 {#current-progress} - -智慧型合約錢包早已可用,但需要更多升級才能讓它們盡可能去中心化及無需許可。 EIP-4337 是成熟的提案,且不需要對以太坊協定做任何變更,所以可以快速實作。 然而,改變以太坊協定的升級目前尚未積極開發,因此這些更改可能需要更長的時間才能發佈。 也有可能帳戶抽象透過 EIP-4337 完美實現,也就不需要變更任何協定了。 - -## 了解更多 {#further-reading} - -- [erc4337.io](https://www.erc4337.io/) -- [來自 Devcon Bogota 的帳戶抽象小組討論](https://www.youtube.com/watch?app=desktop&v=WsZBymiyT-8) -- [來自 Devcon Bogota 的「為何帳戶抽象對去中心化應用程式來說是革命性的改變」](https://www.youtube.com/watch?v=OwppworJGzs) -- [來自 Devcon Bogota 的「帳戶抽象 ELI5」(譯註:ELI5 是「把我當五歲小孩和我解釋」的英文縮寫,指用簡單易懂的方式解釋)](https://www.youtube.com/watch?v=QuYZWJj65AY) -- [Vitalik 的「帳戶抽象之路」筆記](https://notes.ethereum.org/@vbuterin/account_abstraction_roadmap#Transaction-inclusion-lists) -- [Vitalik 關於社交恢復錢包的部落格文章](https://vitalik.eth.limo/general/2021/01/11/recovery.html) -- [EIP-2938 筆記](https://hackmd.io/@SamWilsn/ryhxoGp4D#What-is-EIP-2938) -- [EIP-2938 文檔](https://eips.ethereum.org/EIPS/eip-2938) -- [EIP-4337 筆記](https://medium.com/infinitism/erc-4337-account-abstraction-without-ethereum-protocol-changes-d75c9d94dc4a) -- [EIP-4337 文檔](https://eips.ethereum.org/EIPS/eip-4337) -- [EIP-2771 文檔](https://eips.ethereum.org/EIPS/eip-2771) -- [「帳戶抽象的基本概念」 -- 什麼是帳戶抽象,第一部分](https://www.alchemy.com/blog/account-abstraction) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/danksharding/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/danksharding/index.md deleted file mode 100644 index 7fb7c6b3888..00000000000 --- a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/danksharding/index.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Danksharding -description: 瞭解 Proto-Danksharding 和 Danksharding - 兩種依序完成以太坊擴容的升級方案。 -lang: zh-tw -summaryPoints: - - Danksharding 是一項多階段升級,旨在提升以太坊的可擴容性和容量。 - - 在第一階段 Proto-Danksharding,將資料二進位大型物件新增到區塊中 - - 資料二進位大型物件為卷軸提供了一種更便宜的方式來將資料發佈到以太坊,這些成本可以作為較低的交易費用轉嫁給使用者。 - - 隨後,完整的 Danksharding 將在部分節點之間分攤驗證資料二進制大對象的責任,進一步將以太坊擴容至每秒處理超過 100,000 筆交易。 ---- - -# Danksharding {#danksharding} - -**Danksharding** 可讓以太坊成為真正可擴容的區塊鏈,但需要進行一些協定升級才能實現這一目標。 **Proto-Danksharding** 是該過程中的一個中間步驟。 兩者的目標都是讓二層網路上的交易對使用者來說盡可能便宜,並且應該將以太坊擴容到每秒處理 >100,000 筆交易。 - -## 什麼是 Proto-Danksharding? {#what-is-protodanksharding} - -Proto-Danksharding 又稱 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844),是一種供[卷軸](/layer-2/#rollups)新增較低成本的資料到區塊的方法。 這個名稱來自提出這個想法的兩位研究人員:Protolambda 和 Dankrad Feist。 在歷史上,透過卷軸節省使用者交易的成本受到了限制,因為它們實際上會將其交易發佈到 `CALLDATA` 中。 - -該成本非常高,因為資料由所有以太坊節點處理並永遠存在鏈上,即使卷軸只需要短暫使用這些資料。 Proto-Danksharding 引入了可傳送並附加到區塊的資料二進位大型物件。 這些二進位大型物件中的資料無法被以太坊虛擬機存取,並且會在一段固定時間(撰文時為 4096 個時期,或約 18 天)後自動刪除。 這表示卷軸可以更實惠地傳送資料,並以更實惠的交易形式將節省的費用轉給終端使用者。 - - - -卷軸是指在鏈下批次處理交易,然後將結果發佈到以太坊以實現以太坊擴容。 卷軸有兩個必要元件:資料與執行檢查。 資料指卷軸處理的完整交易序列,用於產生發佈到以太坊的狀態變更。 執行檢查指讓某些誠實的參與者(「證明者」)重新執行這些交易,以確保提出的狀態變更正確無誤。 要完成執行檢查,交易資料可供使用的時間必須夠長,以讓任何人都能下載並檢查。 這意味著證明者可以識別並質疑卷軸排序者的任何不誠實行為。 然而,資料並不需要永久可用。 - - - - - -卷軸在鏈上發佈對其交易資料的承諾,並在資料二進位大型物件中提供實際資料。 這表示證明者可以確認承諾是否有效,或質疑其認為錯誤的資料。 在節點層面,資料的二進位大型物件儲存在共識用戶端中。 共識用戶端證明自己已經看過資料,且資料已在網路上傳播。 如果永久儲存資料,這些用戶端會膨脹並導致對運行節點的硬體要求過高。 反之,資料每 18 天會從節點中自動刪除。 共識用戶端的證明顯示證明者有足夠的機會驗證資料。 實際資料可由卷軸運營商、使用者或其他人儲存在鏈下。 - - - -### 如何驗證二進位大型物件資料? {#how-are-blobs-verified} - -卷軸會將它們執行的交易發佈在資料二進位大型物件中。 它們還會發佈一則對資料的「承諾」。 它們透過將多項式函式與資料擬合來做到這一點。 之後可在任意點計算此函式。 舉例來說,若我們定義一個非常簡單的函式 `f(x) = 2x-1`,則可以計算出 `x = 1`、`x = 2`、`x = 3` 時對應的結果分別為 `1、3、5`。 證明者會將相同的函式套用到資料上,並在相同的點進行計算。 如果原始資料改變,函式將不相同,因此每個點的計算結果值也會不同。 事實上,承諾和證明會更複雜,因為它們被包裝到加密函式中。 - -### 什麼是 KZG? {#what-is-kzg} - -KZG 代表 Kate-Zaverucha-Goldberg,這是一種方案的三位[原作者](https://link.springer.com/chapter/10.1007/978-3-642-17373-8_11)名字縮寫,該方案將二進位大型物件資料縮小至不大的[加密「承諾」](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html)。 卷軸提交的資料二進位大型物件必須經過驗證,以確保卷軸不會出錯。 這涉及證明者重新執行二進位大型物件中的交易,以檢查承諾是否有效。 這與執行客戶端使用梅克爾證明來檢查一層網路上的以太坊交易是否有效,在概念上是相同的。 KZG 是將多項式方程與資料擬合的另一種證明。 承諾會在一些保密資料點計算多項式。 證明者將對資料擬合相同的多項式,並以相同數值進行計算,以確認結果是否相同。 這是一種驗證資料的方法,與某些卷軸所用的以及最終由以太坊協定的其他部分使用的零知識技術相容。 - -### 什麼是 KZG 儀式? {#what-is-a-kzg-ceremony} - -KZG 儀式提供了一種方法,讓以太坊社群中的許多人一起產生可用於驗證某些資料的秘密隨機數字字串。 此數字字串是未知的,且任何人都無法重新建立,這一點很重要。 為了確保這點,每位儀式參與者都會收到前一位參與者傳來的字串。 接著他們會建立一些新的隨機值(例如,透過允許瀏覽器測量滑鼠的移動),並將其與先前收到的值進行混合。 然後他們會把新值傳給下一位參與者,並從本地機器中銷毀這個值。 只要其中一個儀式參與者是誠實的,那麼攻擊者就無法知道最終的值。 - -EIP-4844 KZG 儀式已向公眾開放,有數萬人參與並新增自己的隨機變量不確定性(隨機性)。 總共收到了超過 14 萬份貢獻,使其成為全球同類型儀式中規模最大的一次。 全部參與者都進行不誠實的行為,才可能破壞這個儀式。 站在參與者的視角,如果他們知道自己是誠實的,則不需要信任任何人,因為他們知道自己可確保儀式安全(他們自己已滿足 n 分之一誠實參與者的要求)。 - - - -當卷軸在二進位大型物件中發佈資料時,會提供一則在鏈上發佈的「承諾」。 這項承諾是在某些點對資料進行多項式擬合計算的結果。 這些點由 KZG 儀式中產生的隨機數字定義。 然後,證明者可以在相同點計算多項式以驗證資料;如果得出的值相同,則資料是正確的。 - - - - - -如果有人知道用於承諾的隨機位置,他們就很容易產生能在這些特定點擬合的新多項式(即「碰撞」)。 這表示他們可以從二進位大型物件新增或移除資料,並且仍然提供有效的證明。 為了避免這種情況,實際上不是向證明者提供實際的秘密位置,證明者實際收到的是使用橢圓曲線包裝在加密「黑盒子」中的位置。 這些方法有效地擾亂了這些值,使原始值無法被逆向工程,但透過一些聰明的代數方法,證明者和驗證者仍然可以在其代表的點上計算多項式。 - - - - - Danksharding 和 Proto-Danksharding 都不遵循傳統的「分片」模型,此模型旨在將區塊鏈分成多個部分。 分片鏈不再是以太坊開發藍圖的一部分。 相反,Danksharding 使用跨二進位大型物件的分散式資料採樣來實現以太坊擴容。 這在實作上容易很多。 此模型有時又稱「資料分片」。 - - -## Danksharding 是什麼? {#what-is-danksharding} - -Danksharding 完全實現了從 Proto-Danksharding 開始的卷軸擴容。 Danksharding 將在以太坊上為卷軸提供大量空間,用於轉存壓縮的交易資料。 這表示以太坊可以輕鬆支援數百個獨立的卷軸,並實現每秒處理數百萬筆交易。 - -它的運作方式是將附加到區塊的二進位大型物件從 Proto-Danksharding 中的六 (6) 個擴展到完整 Danksharding 中的 64 個。 所需的其餘變更都是對共識用戶端操作方式的更新,使得它們能夠處理新的大二進位大型物件。 這些變更有部分已在開發藍圖上,用於獨立於 Danksharding 的其他目的。 舉例來說,Danksharding 要求先實作提交者-建置者分離。 這是一個升級,它將不同驗證者建置區塊和提出區塊的工作分開。 同樣,Danksharding 需要資料可用性採樣,但開發不儲存太多歷史資料的輕量級用戶端(「無狀態用戶端」)也需要資料可用性採樣。 - - - -提交者-建置者分離是為了防止單一驗證者必須為 32MB 的二進位大型物件資料產生昂貴的承諾和證明。 這為家庭質押者帶來很大的壓力,因為他們需要花費更多資金購買更強大的硬體,這會降低去中心化程度。 相反,專門的區塊建置者會負責這項昂貴的計算工作。 之後,區塊提交者即可廣播他們的區塊。 區塊提交者會直接選擇收益最大的區塊。 所有人都能經濟快速地驗證二進位大型物件,表示所有普通驗證者皆可檢查區塊建置者的行為是否誠實。 這允許在不犧牲去中心化的情況下處理大型二進位大型物件。 錯誤行事的區塊建置者可能被強制退出網路並罰沒,其他人會補上他的位置,因為區塊建置是高收益的活動。 - - - - - -驗證者需要進行資料可用性採樣才能快速有效地驗證二進位大型物件資料。 透過資料可用性採樣,驗證者可以非常確定二進位大型物件資料可用且正確提交。 每個驗證者都可以隨機採樣幾個資料點並建立證明,這意味著驗證者無需檢查整個二進位大型物件。 任何資料缺漏的情況都可被快速發現且二進位大型物件會遭拒。 - - - -### 目前進度 {#current-progress} - -完整的 Danksharding 還需要幾年的時間才會實作。 在此期間,KZG 儀式已經結束,收到了超過 140,000 份貢獻,Proto-Danksharding 的[以太坊改善提案](https://eips.ethereum.org/EIPS/eip-4844)業已成熟。 此提案已在所有測試網上充分實作,並在 2024 年 3 月的 Cancun-Deneb(「坎昆」)網路升級中在主網上線。 - -### 了解更多 {#further-reading} - -- [Proto-Danksharding 筆記](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) - _Vitalik Buterin_ -- [Dankrad 的 Danksharding 筆記](https://notes.ethereum.org/@dankrad/new_sharding) -- [Dankrad、Proto 和 Vitalik 討論 Danksharding](https://www.youtube.com/watch?v=N5p0TB77flM) -- [KZG 儀式](https://ceremony.ethereum.org/) -- [Carl Beekhuizen 在 Devcon 的可信任設定演講](https://archive.devcon.org/archive/watch/6/the-kzg-ceremony-or-how-i-learnt-to-stop-worrying-and-love-trusted-setups/?tab=YouTube) -- [關於二進位大型物件資料可用性採樣的更多資訊](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling) -- [Dankrad Feist 的 KZG 承諾和證明演講](https://youtu.be/8L2C6RDMV9Q) -- [KZG 多項式承諾](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/dencun/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/dencun/index.md deleted file mode 100644 index c7ce62c50d2..00000000000 --- a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/dencun/index.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: Cancun-Deneb(坎昆)升級常見問題解答 -description: 有關 Cancun-Deneb(坎昆)網路升級的常見問題 -lang: zh-tw ---- - -# Cancun-Deneb(坎昆) {#dencun} - -Cancun-Deneb(坎昆)是以太坊網路的一次升級,這項升級啟用了 **Proto-Danksharding (EIP-4844)**,引入了臨時資料 **二進位大型物件**,以實現更便宜的[二層網路 (L2)](/glossary/#layer-2) 卷軸儲存。 - -新的交易類型使卷軸提供者能夠更經濟高效地在所謂的「二進位大型物件」中儲存資料。 二進位大型物件確保可在網路上使用約18 天(更準確地說,4096個 [時期](/glossary/#epoch))。 在此期間之後,將從網路中刪除二進位大型物件,但應用程式仍使用證明來驗證其資料的有效性。 - -這顯著降低了卷軸成本,限制了鏈的增長,並有助於支援更多使用者,同時保持安全性和一組去中心化的節點營運者。 - -## 我們預計什麼時候卷軸會反映出 Proto-Danksharding 帶來的較低費用? {#when} - -- 本次升級時間為時期 269568,即\*\* 2024 年 03 月 13 日下午 13:55 (UTC)\*\* -- 所有主要的卷軸提供者,例如 Arbitrum 或 Optimism,都已經表示在升級後將立即支援二進位大型物件。 -- 單個卷軸支援的時間表可能有所不同,因爲每個提供者都必須升級其系統才能使用新的二進位大型物件空間。 - -## 硬分叉之後以太幣該如何兌換? {#scam-alert} - -- **你的以太幣無需執行任何操作**:以太坊在坎昆升級之後,無需兌換或升級你的以太幣。 你的帳戶餘額將維持不變,同時你目前持有的以太幣在硬分叉之後,仍將保持以現有的形式存取。 -- **謹防詐騙!**  **任何要求你「升級」你的以太幣的人都是在嘗試欺騙你。** 本次升級你無須進行任何操作。 你的資產將完全不受影響。 請記住,隨時瞭解情況是防範詐騙的最佳方法。 - -[關於辨識和避免詐騙的更多資訊](/security/) - -## 坎昆網路升級解決什麼問題? {#network-impact} - -坎昆升級主要透過**便宜的費用**解決**可擴容性**(能夠處理更多使用者和交易)問題,同時使網路**保持去中心化**。 - -以太坊社群一直使用「以卷軸為中心」的方式成長,以二層網路卷軸作爲安全支援更多使用者的主要手段。 - -卷軸網路處理獨立於主網的交易的 _處理_ (或「執行」),然後將結果的加密證明和/或壓縮後的交易資料發佈回主網以保存紀錄。 儲存這些證明會產生([燃料](/glossary/#gas) 形式的)費用,而在 Proto-Danksharding 實作前,所有的網路節點營運者必須永久儲存這些證明,使其成爲費用高昂的任務。 - -坎昆升級引入 Proto-Danksharding 後,這些證明的資料儲存變得更便宜,因為只要求節點營運者儲存這些資料約 18 天,之後就能安全地刪除這些資料,避免了更高的硬體要求。 由於卷軸的提取期間通常為 7 天,只要二進位大型物件在此期間於一層網路可以使用,卷軸的安全模型不會改變。 18 天的修剪窗口為此期間提供了重要的時間緩衝。 - -[更多關於以太坊擴容的資訊](/roadmap/scaling/) - -## 如何存取舊的二進位大型物件資料? {#historical-access} - -雖然常規的以太坊節點會一直保存網路的_目前狀態_,但二進位大型物件歷史資料可以在其引入約 18 天后刪除。 在刪除這些資料之前,以太坊會確保這些資料對所有網路參與者可用,為以下各項留有時間: - -- 供相關方下載和儲存資料。 -- 所有卷軸挑戰期間結束。 -- 最終確定卷軸交易。 - -可能出於多種原因需要二進位大型物件的_歷史_資料,并且可以使用多個去中心化協定儲存和存取該資料: - -- **第三方索引協定**,如 The Graph,透過由加密經濟機制激勵的節點營運者的去中心化網路來儲存這些資料。 -- **BitTorrent**,這是一種去中心化協定,使志願者能夠保存該資料並將其分發給其他人。 -- \*\*[以太坊入口網路](/developers/docs/networking-layer/portal-network/)\*\*的目的是使用節點營運者去中心化網路,透過在參與者之分發資料(類似於 BitTorrent)來提供對所有以太坊資料的存取。 -- **個人使用者**始終可以自由地儲存其希望作爲歷史參考的任何資料的副本。 -- **卷軸提供者**在激勵的作用下儲存這些資料來提升其卷軸的使用者體驗。 -- **區塊瀏覽器**通常運行歸檔節點來索引和儲存全部這些資料,讓使用者能夠透過網路介面存取簡單的歷史參考。 - -需要注意的是,恢復歷史狀態是在 **1-of-N 信任模型**上運行的。 這意味著你只需要來自_單個可信任來源_的資料,就可以使用當前網路狀態驗證其正確性。 - -## 這項升級對更廣泛的以太坊開發藍圖有哪些貢獻? {#roadmap-impact} - -Proto-Danksharding 爲 [Danksharding](/roadmap/danksharding/) 的完全實作奠定了基礎。 Danksharding 旨在將卷軸資料的儲存分散到節點營運者,這樣,每個節點營運者只需要處理全部資料中的一小部分。 這種分散會增加每個區塊的二進位大型物件資料量,這對於擴充以太坊以處理更多使用者和交易至關重要。 - -要在保持網路去中心化的同時,以便宜的費用和更高階的應用程式 [支援數十億以太坊使用者](/roadmap/scaling/),這種可擴容性是至關重要的。 如果沒有這些改變,節點營運者的硬體需求會不斷提升,導致需要越來越昂貴的設備。 較小型營運者將被迫退出,導致網路由一些大型營運者中心化控制,這與去中心化的原則背道而馳。 - -## 這次的升級是否會影響到所有以太坊共識層和驗證者用戶端? {#client-impact} - -會,執行用戶端和共識用戶端都需要升級 Proto-Danksharding (EIP-4844)。 所有主要的以太坊用戶端都已經發佈了支持該升級的版本。 爲了在升級之後與以太坊網路保持同步,節點營運者需要確保其運行的是受支援的用戶端版本。 請注意,關於用戶端版本的資訊具有時效性,使用者應該參考最新資訊以取得最新詳細資料。 [檢視受支援的用戶端版本詳細資料](https://blog.ethereum.org/2024/02/27/dencun-mainnet-announcement#client-releases)。 - -共識用戶端處理_驗證者_軟體,這類軟體已全部更新以支援這項升級。 - -## Cancun-Deneb(坎昆)升級是否對 Goerli 或其他以太坊測試網有影響? {#testnet-impact} - -- Devnets、Goerli、Sepolia 和 Holesky 測試網都已經完成了坎昆升級,同時 Proto-Danksharding 已經全面運行 -- 卷軸開發者可使用這些網路進行 EIP-4844 測試。 -- 大多數的使用者完全不會受到此測試網變更的影響。 - -## 二層網路上的所有交易目前都使用臨時二進位大型物件空間嗎,還是可以就此進行選擇? {#calldata-vs-blobs} - -以太坊二層網路 (L2) 上的卷軸交易有兩種資料儲存類型可以選擇:臨時二進位大型物件空間或永久智慧型合約 calldata。 二進位大型物件空間是一種經濟的選擇,以更低的成本提供臨時儲存。 能夠保證資料在所有必要挑戰期間内的可用性。 另一方面,智慧型合約 calldata 提供永久性儲存,但更加昂貴。 - -主要由卷軸提供者決定使用二進位大型物件空間或 calldata。 他們會基於當前對二進位大型物件空間的需求做出選擇。 如果對二進位大型物件空間的需求很高,卷軸可能會選擇 calldata 以確保資料及時發佈。 - -儘管從理論上講,使用者可以選擇自己慣用的儲存類型,但該決定通常由卷軸提供者做出。 讓使用者進行選擇會增加複雜性,尤其是在具有成本效益的捆綁交易中。 對於關於該選擇的具體詳細資料,使用者可以參考不同卷軸提供者提供的文件。 - -## Eip-4844 會降低一層網路的燃料費嗎? {#l1-fee-impact} - -不會顯著減少。 會專門為二進位大型物件空間引入一個新的燃料市場,供卷軸提供者使用。 _儘管透過將卷軸資料下放到二進位大型物件可能會減少一層網路的費用,但這次升級主要專注於減少二層網路費用。 一層網路(主網)的費用可能會因爲二階效應小幅減少。_ - -- 一層網路燃料的減少量與卷軸提供者采用/使用的二進位大型物件資料成正比 -- 一層網路燃料很可能在非卷軸相關活動中保持競爭力 -- 使用二進位大型物件空間的卷軸需要的一層網路燃料更少,這將在短期内推動一層網路燃料費用減少 -- 二進位大型物件空間仍然有一些限制,因此,如果一個區塊内的二進位大型物件飽和/已滿,卷軸就可能需要同時將它們的資料作爲永久資料發佈,這將增加一層網路和二層網路的燃料價格 - -## 這項升級會減少其他以太坊虛擬機一層網路區塊鏈上的費用嗎? {#alt-l1-fee-impact} - -否。 Proto-Danksharding 只對將證明儲存在以太坊一層網路(主網)上的以太坊二層網路卷軸有好處。 - -僅僅是與以太坊虛擬機 (EVM) 相容并不代表網路會從這項升級中得到好處。 獨立於以太坊運行的網路(無論是否與以太坊虛擬機相容)不會將它們的資料儲存在以太坊上,也就不會從該升級中得到任何好處。 - -[瞭解更多有關二層網路卷軸的資訊](/layer-2/) - -## 想透過視覺方式學習? {#visual-learner} - - - -_解鎖以太坊的擴容,EIP-4844 — Finematics _ - - - -_Domothy 的二進位大型物件空間基礎教學 — Bankless_ - -## 延伸閱讀 {#further-reading} - -- [EIP4844.com](https://www.eip4844.com/) -- [EIP-4844:分片二進位大型物件交易 (Proto-Danksharding)](https://eips.ethereum.org/EIPS/eip-4844) -- [坎昆升級主網公告](https://blog.ethereum.org/2024/02/27/dencun-mainnet-announcement) - _以太坊基金會部落格_ -- [以太坊漫遊指南:Proto-Danksharding](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum/#proto-danksharding-eip-4844) - _Jon Charbonneau_ -- [Proto-Danksharding 常見問題](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) - _Vitalik Buterin_ -- [EIP-4844 深入解讀:坎昆升級的核心](https://medium.com/@ebunker.io/an-in-depth-explanation-of-eip-4844-the-core-of-the-cancun-upgrade-de7b13761d2c) - _Ebunker_ -- [AllCoreDevs 更新 016](https://tim.mirror.xyz/HzH5MpK1dnw7qhBSmzCfdCIxpwpD6DpwlfxtaAwEFro) - _Tim Beiko_ diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/pbs/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/pbs/index.md deleted file mode 100644 index d7d8111859f..00000000000 --- a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/pbs/index.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: 提交者-建置者分離 -description: 瞭解以太坊驗證者如何以及為何要將區塊建置與區塊廣播職責分離。 -lang: zh-tw ---- - -# 提交者-建置者分離 {#proposer-builder-separation} - -目前以太坊驗證者負責建置_和_廣播區塊。 他們將從廣播網路監聽到的交易捆綁在一起,並打包進一個區塊,然後傳送到以太坊網路上。 **提交者-建置者分離 (PBS)** 會將這些任務分配給多個驗證者。 區塊建置者負責建立區塊,並在每個時隙將其提供給區塊提交者。 區塊提交者無法讀取區塊的內容,他們直接選擇收益最高的區塊,並將費用支付給區塊建置者,然後將區塊傳送至對等節點。 - -這個升級非常重要,有幾個原因。 首先,它在協定層面建立了避免交易審查的機會。 其次,它避免了業餘愛好驗證者在競爭中被機構參與者擊敗,機構參與者能更好地最佳化其區塊建置工作的獲利能力。 再者,它透過 Danksharding 升級幫助以太坊擴容。 - -## 提交者-建置者分離及抗審查性 {#pbs-and-censorship-resistance} - -將區塊建置者與區塊提交者分離可使區塊建置者更難審查交易。 這是因為可以新增相對複雜的區塊添加標準,以確保在區塊提出前沒有被審查。 由於區塊提交者是與區塊建置者分離的實體,承擔著保護者的角色,可阻止對區塊建置者的審查。 - -舉例來說,可以引入包含清單,以便當驗證者知道交易但沒有看到它們包含在區塊中時,可以將這些交易強加為下一個區塊中的必備項。 包含清單由區塊提交者的本地記憶體池(其自己知道的交易清單)產生,並在區塊被提交前送到其他節點。 若包含清單中缺少任何交易,區塊提交者可以選擇拒絕區塊、在提交前加上缺漏的交易,或者直接提交區塊(其他驗證者收到時會拒絕)。 這個理念還有一個潛在的更高效版本,它斷定建置者必須充分利用可用的區塊空間,如果不這樣做,交易將從提交者的包含清單中新增。 這個領域仍在積極研究當中,且包含清單的最佳化設定尚未確定。 - -[加密的記憶體池](https://www.youtube.com/watch?v=fHDjgFcha0M&list=PLpktWkixc1gUqkyc1-iE6TT0RWQTBJELe&index=3)也可以在區塊被廣播後,才讓建置者與提交者知道其打包進區塊的是哪些交易。 - - - -有權勢的組織可以對驗證者施壓,以審查特定地址收發的交易。 為應對這一壓力,驗證者會偵測交易池中已加入黑名單的地址並將其從提出的區塊中刪除。 提交者-建置者分離之後,這種情況不再可能出現,因為區塊提交者不會知道他們在區塊中廣播的是哪些交易。 對於某些個人或應用程式來說,遵守審查規則可能很重要,例如當審查規則在其所在地區成為法律時。 在這些情況下,合規性發生在應用程式級別,同時協定仍然無需許可且不受審查。 - - - -## 提交者-建置者分離和最大可提取價值 {#pbs-and-mev} - -**最大可提取價值 (MEV)** 指驗證者以對自己有利的方式排列交易順序,最大程度提高自己的收益。 常見的例子包括在去中心化交易所套利掉期(例如搶先進行大宗銷售或購買)或尋找清算去中心化金融倉位的機會。 最大程度提高最大可提取價值需要高深的技術知識和附加到一般驗證者的客製化軟體,這使得機構營運者在最大可提取價值提取方面的表現更有可能優於個人和業餘愛好者驗證者。 這表示中心化營運者的質押收益可能更高,形成一股中心化力量,抑制個人質押。 - -提交者-建置者分離透過重新設定最大可提取價值的經濟性解決了這個問題。 區塊提交者不需要自己搜尋最大可提取價值,只需從區塊建置者提供的許多區塊中選擇一個即可。 複雜的最大可提取價值提取作業可能是區塊建置者完成的,但獎勵歸區塊提交者所有。 這表示即使一小部分專門的區塊建置者主導了最大可提取價值提取,獎勵可能歸網路上的任何驗證者所有,包括個人質押者。 - - - -由於複雜的最大可提取價值策略提供更高的獎勵,個人可能會被質押池吸引,而不是自己單獨質押。 將區塊建置與區塊提出分離,表示提取的最大可提取價值會分散到更多驗證者,而非集中在最高效的最大可提取價值搜尋者手上。 同時,允許專業的區塊建置者存在,消除了個人的區塊建置負擔,也避免個人自己偷取最大可提取價值,同時最大程度上增加了可以檢查區塊是否誠實的個人獨立驗證者的數量。 「證明者-驗證者不對稱性」是一個重要的概念,指的是只要有強大且最大程度去中心化的驗證者網路能夠證明區塊是誠實的,中心化區塊生產就可以接受。 去中心化是一種方法,而非最終目標,我們需要的是誠實的區塊。 - - -## 提交者-建置者分離及 Danksharding {#pbs-and-danksharding} - -Danksharding 是以太坊擴容至每秒處理 >100,000 筆交易並最大限度降低卷軸使用者費用的方法。 它依賴提交者-建置者分離,因為它增加了區塊建置者的工作量,它們需要在不到 1 秒的時間內計算高達 64 MB 卷軸資料的證明。 這可能需要專門的建置者,他們可以為該任務投入相當多的硬體。 然而,在目前的情況下,由於最大可提取價值提取,區塊建置可能會越來越集中到更先進、更強大的營運商手中。 提交者-建置者分離是接受這一現實,防止其對區塊驗證(重要部分)或質押獎勵分配施加集中力量的一種方式。 一項巨大的附帶好處是,專門的區塊建置者也願意並且能夠計算 Danksharding 所需的資料證明。 - -## 目前進度 {#current-progress} - -提交者-建置者分離正處於研究的進階階段,但在以太坊用戶端中進行原型設計之前,仍有一些重要的設計問題需要解決。 目前還沒有定案的規範。 這意味著提交者-建置者分離可能還要一年或更長時間才能推出。 歡迎檢視最新的[研究現狀](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance)。 - -## 延伸閱讀 {#further-reading} - -- [研究現狀:提交者-建置者分離之下的抗審查性](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) -- [適合提交者-建置者分離的收費市場設計](https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725) -- [提交者-建置者分離及抗審查性](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Secondary-auctions) -- [包含清單](https://notes.ethereum.org/@fradamt/H1ZqdtrBF) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/secret-leader-election/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/secret-leader-election/index.md deleted file mode 100644 index 349c7a47658..00000000000 --- a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/secret-leader-election/index.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: 秘密領導者選舉 -description: 解釋秘密領導者選舉可如何保護驗證者免遭攻擊 -lang: zh-tw -summaryPoints: - - 區塊提交者的 IP 地址可被預先獲知,這讓他們很容易遭受攻擊 - - 秘密領導者選舉隱藏了驗證者的身分,使得他們無法被預先獲知 - - 這個想法的延伸是在每個時隙中隨機選擇驗證者。 ---- - -# 秘密領導者選舉 {#single-secret-leader-election} - -在現在基於[權益證明](/developers/docs/consensus-mechanisms/pos)的共識機制下,接下來的區塊提交者清單是公開的,且可以對應他們的 IP 地址。 這表示攻擊者可識別哪些驗證者接下來應提出區塊,並瞄準他們發動阻斷服務 (DOS) 攻擊,使他們無法及時提出區塊。 - -這可能為攻擊者帶來獲利機會。 舉例來說,為時隙 `n+1` 選取的區塊提交者可以對時隙 `n` 中的提交者進行阻斷服務攻擊,這樣一來他們就會錯過提出區塊的機會。 這樣,發動攻擊的區塊提交者可提取兩個時隙的最大可提取價值,或者獲取本應拆分到兩個區塊的所有交易,並將它們全部添加在一個區塊中,從而獲得所有相關費用。 這對家庭驗證者的影響可能比複雜的機構驗證者更大,機構驗證者可以使用更先進的方法來保護自己免受阻斷服務攻擊,因此可能成為一股中心化力量。 - -有數種方式可以解決這個問題。 其中之一是[分散式驗證者技術](https://github.com/ethereum/distributed-validator-specs),其目標是將與運行驗證者相關的各種任務分散到多台機器上,並提供冗餘性,這樣攻擊者就更難阻止在特定時隙中提出區塊。 然而,最可靠的解決方式是**秘密單一領導者選舉 (SSLE)**。 - -## 秘密單一領導者選舉 {#secret-leader-election} - -秘密單一領導者選舉採用巧妙的加密技術來確保只有選定的驗證者知道他們已被選中。 這是透過讓每個驗證者提交其對共享金鑰的承諾實現的。 這些承諾被打亂並重新設定,確保沒有人可以將承諾對應到驗證者,但每個驗證者都知道哪個承諾屬於他們。 接著,系統會隨機選擇一個承諾。 如果驗證者偵測到他們的承諾被選中,即知道輪到自己提出區塊。 - -這一想法的主要實作稱為 [Whisk](https://ethresear.ch/t/whisk-a-practical-shuffle-based-ssle-protocol-for-ethereum/11763)。 其運作方式如下: - -1. 驗證者對共用的金鑰做出承諾。 承諾方案被設計成可以與驗證者身分綁定,但也是隨機的,因此沒有第三方可以對綁定進行反向工程,並將特定承諾連結到特定驗證者。 -2. 在一個時期開始時,使用 RANDAO 隨機選擇一組驗證者,以對 16,384 個驗證者的承諾進行抽樣。 -3. 在接下來的 8182 個時隙(一天)中,區塊提交者使用自己的私密熵對打亂部分承諾並隨機化。 -4. 打亂作業結束後,RANDAO 用於建立有序的承諾清單。 這個清單會映射到以太坊時隙。 -5. 驗證者看到他們的承諾被附加到特定的時隙,當該時隙到來時,驗證者就需要提出一個區塊。 -6. 重複這些步驟,以便承諾到時隙的分配始終遠遠領先於目前時隙。 - -這樣可以防止攻擊者提前知道哪個特定驗證者將提出下一個區塊,以防範阻斷服務攻擊。 - -## 秘密非單一領導者選舉 (SnSLE) {#secret-non-single-leader-election} - -還有一個旨在建立一種場景的單獨提案,其中每個驗證者都有隨機的機會在每個時隙中提出一個區塊,類似於工作量證明下區塊提出的決定方式,稱為**秘密非單一領導者選舉 (SnSLE)**。 一種簡單的方法是利用 RANDAO 函式來隨機選擇目前協定中的驗證者。 RANDO 的理念是,將許多獨立驗證者提交的雜湊值混合後,產生足夠隨機的數字。 在秘密非單一領導者選舉中,這些雜湊值可用於選擇下一個區塊提交者,例如選擇數值最低的雜湊值。 可以限制有效雜湊值的範圍,以調整每個時隙中單個驗證者被選中的可能性。 假設雜湊值必須低於 `2^256 * 5 / N`,其中 `N` = 活躍驗證者的數量,任何驗證者個體在時隙中被選中的幾率應該為 `5/N`。 在這個例子中,至少一個提交者在每個時隙產生有效雜湊值的幾率為 99.3%。 - -## 目前進度 {#current-progress} - -秘密單一領導者選舉與秘密非單一領導者選舉均處於研究階段。 這兩種理念都還沒有最終的規範。 秘密單一領導者選舉與秘密非單一領導者選舉是競爭關係,不能同時實作。 在上線之前,我們需要在研發、原型設計及公共測試網實作上投入更多時間。 - -## 了解更多 {#further-reading} - -- [秘密非單一領導者選舉](https://ethresear.ch/t/secret-non-single-leader-election/11789) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/single-slot-finality/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/single-slot-finality/index.md deleted file mode 100644 index e0a77a395a2..00000000000 --- a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/single-slot-finality/index.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: 單一時隙最終確定性 -description: 解釋單一時隙最終確定性 -lang: zh-tw ---- - -# 單一時隙最終確定性 {#single-slot-finality} - -最終確定一個以太坊區塊大約需要 15 分鐘。 然而,我們可以讓以太坊的共識機制更有效率地驗證區塊,明顯縮短最終確定耗費的時間。 使用者可以在同一時隙提交和最終確定區塊,而無需等待 15 分鐘。 這個概念被稱為**單一時隙最終確定性 (SSF)**。 - -## 最終確定性是什麼? {#what-is-finality} - -在以太坊基於權益證明的共識機制下,最終確定性指的是在不銷毀至少 33% 質押以太幣總量的情況下,保證不能更改或從區塊鏈中刪除區塊。 這是「加密經濟」上的安全性,因為改變鏈的順序或內容所帶來的極高成本,會讓任何理性的經濟參與者止步。 - -## 為什麼要提高最終確定的效率? {#why-aim-for-quicker-finality} - -目前完成最終確定所需的時間過長。 大部分使用者不想為此等待 15 分鐘;對於可能需要高交易吞吐量的應用程式和交易所來說,必須等待那麼長時間才能確定其交易是永久性的,也很不方便。 區塊的提出和最終確定之間存在延遲也為短期重組帶來了機會,攻擊者可以利用它來審查某些區塊或提取最大可提取價值。 處理分階段升級區塊的機制也相當複雜,並且已經多次修補以消除安全漏洞,使其成為以太坊程式碼庫中更容易出現小錯誤的部分之一。 透過將最終確定耗費的時間縮短到單一時隙,可以消除這些問題。 - -## 去中心化/時間/開銷的權衡 {#the-decentralization-time-overhead-tradeoff} - -最終確定保證不是新區塊的直接屬性;完成新區塊的最終確定需要時間。 這是因為,至少要經過佔網路以太幣質押總量 2/3 的驗證者投票(「證明」)後,區塊才會被視為已最終確定。 網路上的每個驗證節點都必須處理來自其他節點的證明,才有辦法知道某個區塊是否達到 2/3 的閾值。 - -完成最終確定的時間越短,每個節點所需的算力就必須越強,因為節點必須更快完成證明流程。 此外,網路上存在驗證節點越多,每個區塊要處理的證明也就越多,同時也提高了所需的處理能力。 需要的處理能力越高,可以參與網路的人就越少,因為運行驗證節點所需的硬體會更貴。 增加區塊間的延遲時間會降低節點所需的算力,但也會延長完成最終確定的時間,因為證明流程變得更慢了。 - -因此,需要妥善權衡開銷(算力)、去中心化(可參與區塊鏈驗證的節點數)和完成最終確定所需的時間。 理想的系統應實現最佳平衡:算力最小化、去中心化程度最大化、完成最終確定耗費的時間最小化。 - -以太坊目前的共識機制以下列方式平衡了這三個參數: - -- **將最小質押數量設為 32 以太幣**。 這為各節點必須處理的驗證者證明數量設定了上限,因此每個節點的計算要求也有上限。 -- **將完成最終確定所需的時間設為約 15 分鐘**。 這給了在一般家用電腦上運行的驗證者足夠的時間,可以安全地處理每個區塊的證明。 - -在目前的共識機制下,如果要縮短完成最終確定的時間,必須減少網路上驗證者的數量或者提高硬體要求。 然而,可以對證明的處理方式進行改進,從而在不新增每個節點之開銷的情況下計算更多的證明。 更高效的處理可讓最終確定在一個時隙中完成,而不用跨越兩個時期。 - -## 邁向單一時隙最終確定性的路徑 {#routes-to-ssf} - - - -目前的共識機制結合了來自多個驗證者(又稱委員會)的證明,減少了每個驗證者驗證區塊時所需的訊息量。 每經過一個時期(32 個時隙),每個驗證者都有一次證明機會。但在每個時隙中,只有一小部分的驗證者(又稱「委員會」)可以證明。 他們透過分割成子網,並將幾位驗證者選為「匯總者」,實現這一點。 這些匯總者會將在子網中看到的、來自其他驗證者的所有簽名合併成單一的匯總簽名。 包含最大數量個別貢獻的匯總者將其匯總簽名傳遞給區塊提交者,後者將其與其他委員會的匯總簽名一起包含在區塊中。 - -這個流程為每個驗證者提供足夠的容量,使驗證者可以在每個時期投票,因為「32 個時隙 * 64 個委員會 * 每個委員會 256 個驗證者 = 每個時期 524,288 個驗證者」。 截至本文撰寫時止(2023 年 2 月),一共有大約 513,000 個活躍驗證者。 - -在這個方案下,每個驗證者只能透過在整個時期分發證明來為一個區塊投票。 然而,有一些潛在的方式可以改進此機制,使得每個驗證者在每個時隙都有證明機會。 - - -自以太坊共識機制推出以來,簽名匯總方案 (BLS) 的可擴容性比原先想像的要高得多,同時用戶端處理和驗證簽名的能力也已提高。 事實證明,驗證者在單一時隙中處理大量證明是可行的。 舉例來說,有一百萬個驗證者,每個驗證者在每個時隙投票兩次,且時隙時間調整為 16 秒,為了在一個時隙中處理一百萬個證明,節點需要至少以每秒 125,000 個的速度驗證匯總簽名。 實際上,一般電腦會花費大約 500 奈秒完成一個簽名驗證,表示 125,000 個驗證可以在約 62.5 毫秒內完成,遠低於 1 秒的閾值。 - -若要進一步提高效率,可以建立超級委員會,如每個時隙隨機選擇 125,000 個驗證者。 只有這些驗證者可以對區塊進行投票,因此也只有這些驗證者可以決定區塊是否完成最終確定。 這是否為一個好主意,取決於社群認為成功攻擊以太坊的成本有多高。 這是因為攻擊者不需要使用質押以太幣總數的 2/3,而是用_該超級委員會_所質押以太幣的 2/3 來最終確定不誠實的區塊。 這仍然是非常活躍的研究領域,但對於一個大到首先需要超級委員會的驗證者集合來說,攻擊其中一個小組委員會的成本將非常高,這似乎是合理的(範例:使用以太幣計價的攻擊成本會是 `2/3 * 125,000 * 32 = ~2.6 million ETH`)。 攻擊的成本可以透過增加驗證者集合的大小(如調整驗證者大小,使攻擊成本為 100 萬個以太幣、400 萬個以太幣、1000 萬個以太幣)來調整。 以太坊社群[初步投票](https://youtu.be/ojBgyFl6-v4?t=755)似乎顯示 100~200 萬個以太幣是可能的攻擊成本,表示每個超級委員會約有 65,536 - 97,152 個驗證者。 - -然而,真正的瓶頸並不是驗證,對驗證者節點來說,真正有挑戰性的是簽名匯總。 要擴容簽名匯總可能需要提高每個子網中的驗證者數量、增加子網數量或新增額外的匯總層(如實作委員會的委員會)。 解決辦法可能包括允許專門的匯總者 - 類似於如何在提交者-建置者分離 (PBS) 和 Danksharding 下,將區塊建置和卷軸資料產生承諾外包給專門的區塊建置者。 - -## 分叉選擇規則在單一時隙最終確定性中扮演什麼角色? {#role-of-the-fork-choice-rule} - -目前的共識機制依賴最終確定小工具(確定是否有 2/3 的驗證者已證明某一條鏈的演算法)與分叉選擇規則(當有多個選項時決定哪一條鍊是正確的演算法)之間的緊密耦合。 分叉選擇演算法僅考慮最後一個完成最終確定的區塊_之後_的區塊。 在單一時隙最終確定性下,分叉選擇規則不會考慮任何區塊,因為最終確定發生在與提出的區塊相同的時隙中。 這表示在單一時隙最終確定性下,_不論_分叉選擇演算法_或_最終確定小工具,隨時都將保持活躍。 最終確定小工具會最終確定有 2/3 的驗證者上線且誠實證明的區塊。 若一個區塊無法超過 2/3 的閾值,則分叉選擇規則會啟動,以確定要跟隨哪條鏈。 這也為不活躍洩漏機制帶來了一個機會,可以在 >1/3 的驗證者離線時恢復區塊鏈,儘管仍有些細微差異。 - -## 未解決的問題 {#outstanding-issues} - -透過增加每個子網的驗證者數量以擴容匯總的問題是,它會導致對等網路上的負載增加。 新增匯總層的問題是,它對工程師來說非常複雜,而且會增加延遲(即區塊提交者可能需要更長的時間才能收到所有子網匯總者的訊息)。 即使使用 BLS 簽名匯總,也不清楚如何處理網路上的活躍驗證者數量多於每個時隙的實際處理能力的情況。 一種潛在的解決方法是,由於所有驗證者每個時隙都會證明,並且單一時隙最終確定性下沒有委員會,因此可以完全取消 32 個以太幣的有效餘額上限,這表示管理多個驗證者的營運商可以合併他們的質押以太幣並減少運行數量,減少驗證節點需要處理的訊息數量,以說明整個驗證者集合。 這需要大型質押者同意合併其驗證者。 也可以隨時對驗證者的數量或質押的以太幣總量設定固定上限。 然而,這需要一些機制來決定哪些驗證者可以參與,哪些不行,這很可能產生不必要的副作用。 - -## 目前進度 {#current-progress} - -單一時隙最終確定性目前處於研究階段, 預計幾年內都不會上線,可能在[沃克爾樹](/roadmap/verkle-trees/)、[Danksharding](/roadmap/danksharding/) 等其他重大升級發佈之後發佈。 - -## 了解更多 {#further-reading} - -- [Vitalik 在 2022 年的 EDCON 上談單一時隙最終確定性](https://www.youtube.com/watch?v=nPgUKNPWXNI) -- [Vitalik 的筆記:邁向單一時隙最終確定性的路徑](https://notes.ethereum.org/@vbuterin/single_slot_finality) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/statelessness/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/statelessness/index.md deleted file mode 100644 index 1312b86f2b2..00000000000 --- a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/statelessness/index.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: 無狀態、狀態過期及歷史記錄過期 -description: 對於歷史記錄過期和無狀態以太坊的說明 -lang: zh-tw ---- - -# 無狀態、狀態過期及歷史記錄過期 {#statelessness} - -能在一般硬體上運行以太坊節點對實現真正的去中心化非常重要。 這是因為運行節點讓使用者可以透過獨立執行加密檢查來驗證資訊,而不是信任第三方為他們提供資料。 透過運行節點,使用者可以將交易直接提交到以太坊對等網路,而不必信任中介。 如果只有擁有昂貴硬體的使用者能夠使用這些功能,去中心化不可能實現。 相反,節點對於處理和記憶體的要求應該非常適度,如此才能在行動電話、微型電腦或家用電腦上運行。 - -現在,對於硬碟空間的高要求是妨礙節點存取普及化的主要障礙。 這主要是因為需要儲存大量以太坊狀態資料。 此狀態資料中包含處理新區塊和交易所需的關鍵資訊。 截至本文撰寫時止,推薦使用 2TB 的固態硬碟運行以太坊全節點。 對於不刪除任何舊資料的節點,儲存需求以每週大約 14GB 的速率增長,儲存自創世以來所有資料的存檔節點已達到接近 12 TB(截至 2023 年 2 月本文撰寫時止)。 - -便宜的硬碟可以用來儲存一些較舊的資料,但相較於新區塊的產生速度還是太慢了。 為用戶端保留目前的儲存模型,同時使資料儲存更便宜和容易只是暫時性的解決方案,只能解決一部分問題,因為以太坊的狀態資料增長速度是「無限的」,也就是說儲存需求只增不減,且技術進步必須持續跟上狀態資料增長的速度。 相反,用戶端必須找到新的方法來驗證區塊和交易,而不依賴從本地資料庫查詢資料。 - -## 減少節點儲存空間 {#reducing-storage-for-nodes} - -有幾種方法可以減少每個節點必須儲存的資料量,每種方法都要求對以太坊的核心協定進行不同程度的更新: - -- **歷史記錄過期**:允許節點丟棄早於第 X 個區塊的狀態資料,但不改變以太坊用戶端處理狀態資料的方式。 -- **狀態過期**:允許將不常用的狀態資料設定為不活動狀態。 用戶端可以忽略不活動的資料,直到其恢復為止。 -- **弱無狀態**:只有區塊提交者需要存取完整的狀態資料,其他節點可以在沒有本地資料庫的情況下驗證區塊。 -- **強無狀態**:所有節點都不需要存取完整的狀態資料。 - -## 資料過期 {#data-expiry} - -### 歷史記錄過期 {#history-expiry} - -歷史記錄過期指用戶端刪除不太可能需要的舊資料,只儲存少量歷史資料,並在新資料到達時刪除舊資料。 節點之所以需要歷史資料,原因有二:同步和滿足資料請求。 最初,用戶端必須從初始區塊同步,驗證一直到鏈頭為止每個連續的區塊皆正確無誤。 如今,用戶端使用「弱主觀性檢查點」來啟動到鏈頭。 這些檢查點是受信任的起始點,如同初始區塊接近現在,而非以太坊的最開始。 這表示用戶端可以刪除最近的弱主觀性檢查點之前的所有資訊,不失去同步到鏈頭的能力。 目前,用戶端透過從本機資料庫取得歷史資料來滿足相關請求(透過 JSON-RPC 傳送)。 然而,隨著歷史記錄過期,如果請求的資料已被刪除,這將無法實現。 提供這些歷史資料也需要一些創新的解決方案。 - -選項之一是用戶端透過門戶網路向對等節點請求歷史資料。 門戶網路是處於開發階段的對等網路,用於提供歷史資料,其中每個節點儲存一小部分以太坊歷史記錄,整個歷史記錄分佈在整個網路。 滿足請求的方式是,尋找儲存有相應資料的對等節點,並向它們索取資料。 或者,由於請求存取歷史資料的通常是應用程式,因此儲存歷史資料可能變成它們的責任。 以太坊上有足夠多的利他主義者願意維護歷史資料存檔。 這可能會是一個用於管理歷史資料儲存檔的去中心化自治組織,理想情況下將是所有這些選項的組合。 這些提供者可以透過多種方式提供資料,例如透過 Torrent、FTP、Filecoin 或星際檔案系統。 - -歷史記錄過期是有爭議的,因為截至目前,以太坊一直隱式保證歷史資料的可用性。 創世以來的完全同步始終可以作為標準,即使它依賴從快照重建一些較舊的資料。 歷史記錄過期將提供這種保證的責任轉移到以太坊核心協定之外。 如果中心化組織最終介入提供歷史資料,可能引發新的審查危機。 - -EIP-4444 尚未準備好上線,但正在積極討論當中。 有趣的是,EIP-4444 面臨的挑戰並不在於技術,而主要在於社群管理。 為了實現這一點,我們需要社群的支援,不僅包括協定,還包括可信實體對於歷史資料的儲存及提供方面的承諾。 - -這個升級並沒有從根本上改變以太坊節點處理狀態資料的方式,只是改變了歷史資料的存取方式。 - -### 狀態過期 {#state-expiry} - -狀態過期指將最近未存取過的單一節點的狀態移除。 有幾種方式可以實現這點,包括: - -- **依租金過期**:向帳戶收取「租金」,並在租金達到零時將帳戶設為過期 -- **依時間過期**:如果一段時間內沒有對一個帳戶執行讀取/寫入操作,則將該帳戶設定為不活動狀態 - -依租金過期可以是直接向帳戶收取租金,以將其保留在活動狀態資料庫中。 依時間過期可以是從上次帳戶互動開始的倒數計時,也可以是所有帳戶的定期過期。 也可能存在將基於時間和基於租金的模型結合起來的機制,例如:若個人帳戶在基於時間的過期之前支付一些小額費用,則該等帳戶會持續處於活動狀態。 在狀態過期下,需要注意的是,不活動狀態**不會刪除**,只是與活動狀態分開儲存而已。 不活動狀態可以恢復為活動狀態。 - -其作用原理可能是針對特定時間週期(可能約一年)建立狀態樹。 每個新的週期開始時,都建立全新的狀態樹。 只有目前的狀態樹可以修改,其他的狀態樹都不可變。 以太坊節點應儲存目前的狀態樹和下一個最近的狀態樹。 這需要一種方法來為地址新增其存在的時間週期的時間戳。 有[幾種方式](https://ethereum-magicians.org/t/types-of-resurrection-metadata-in-state-expiry/6607)可以做到這點,但主要方案需要[加長地址](https://ethereum-magicians.org/t/increasing-address-size-from-20-to-32-bytes/5485)以容納額外資訊,同時地址越長也越安全。 開發藍圖上,這個部分被稱為[地址空間擴展](https://ethereum-magicians.org/t/increasing-address-size-from-20-to-32-bytes/5485)。 - -與歷史記錄過期相似,在狀態過期下,儲存舊資料的責任將從個人使用者處卸去,並交棒給其他實體,如中心化提供者、利他的社群成員或更具未來性的去中心化解決方案(例如門戶網路)。 - -狀態過期仍在研究階段,且尚未準備好上線。 狀態過期很可能晚於無狀態用戶端和歷史記錄過期,因為這些升級使得大多數驗證者可以輕鬆管理大型狀態。 - -## 無狀態 {#statelessness} - -無狀態這個詞有點用詞不當,因為它並不意味著「狀態」的概念被消除,但確實涉及以太坊節點對狀態資料處理方式的改變。 無狀態本身有兩種類型:弱無狀態和強無狀態。 弱無狀態會將狀態儲存的職責交給少數節點,因此多數節點可以達到無狀態化。 強無狀態完全消除了所有節點儲存完整狀態資料的需求。 弱/強無狀態兩者都為一般驗證者提供了以下好處: - -- 接近即時的同步速度 -- 不需按順序驗證區塊 -- 運行節點的硬體需求極低(例如在手機上運行) -- 由於不需要進行硬碟讀寫,節點可以在便宜的硬碟上運行 -- 與以太坊未來的加密技術升級相容 - -### 弱無狀態 {#weak-statelessness} - -弱無狀態涉及變更以太坊節點處理狀態資料的方式,但並沒有完全消除網路上所有節點的狀態儲存需求。 但是,弱無狀態將狀態儲存的責任交棒給了區塊提交者,而網路上的所有其他節點都會驗證區塊而不儲存完整的狀態資料。 - -**在弱無狀態中,提出區塊需要存取完整的狀態資料,但驗證區塊不需要狀態資料。** - -為此,必須先在以太坊用戶端中實作[沃克爾樹](/roadmap/verkle-trees/)。 沃克爾樹是儲存以太坊狀態資料的替代資料結構,允許小型、固定大小的「證據」在節點間傳遞,並用於驗證區塊,而不是根據本地資料庫驗證區塊。 [提交者-建置者分離](/roadmap/pbs/)也是必要的,因為這讓區塊建置者成為有更強大硬體的特殊化節點,這些節點需要存取完整的狀態資料。 - - - -無狀態依賴區塊建置者維護完整狀態資料的副本,這樣它們才能產生用於驗證區塊的證據。 其他節點不需要存取狀態資料,驗證區塊所需的所有資訊都可以從證據中取得。 這導致了這樣一種狀況:提出區塊的成本很高,但驗證區塊很便宜,表示較少的運營商會選擇運行區塊提出節點。 然而,只要盡可能多的參與者能夠獨立驗證所提出區塊的有效性,區塊提交者的去中心化程度就不是非常重要。 - -閱讀關於 Dankrad 筆記的更多資訊 - - -區塊提交者使用狀態資料來建立「證據」,即證明區塊中的交易正在更改的狀態值的最小資料集。 其他驗證者不儲存狀態,只儲存狀態根(整個狀態的的雜湊值)。 他們會接收區塊和證據,然後用其更新自己的狀態根。 這使得驗證節點的工作變得極輕量。 - -弱無狀態正處於進階研究階段,但它依賴提交者-建置者分離策略和沃克爾樹的實作,因而小的證據才能在節點間傳遞。 這表示弱無狀態大概還要幾年才會在以太坊主網上發佈。 - -### 強無狀態 {#strong-statelessness} - -強無狀態讓所有節點都不需要儲存狀態資料。 取而代之的是,交易會和證據一起傳送,區塊建置者可以匯集這些證據。 接著,區塊生產者負責僅儲存為相關帳戶產生證據所需的狀態。 儲存狀態的責任幾乎完全交給使用者了,因為他們會傳送證據和「存取清單」以宣告他們在和哪些帳戶及儲存金鑰互動。 這會啟用極輕量節點,不過也需要權衡,因為這會使其與智慧型合約互動更加困難。 - -研究者已經研究過強無狀態,但目前預計其不會成為以太坊開發藍圖的一部分。比較可能的狀況是,弱無狀態對以太坊的擴容需求來說已經足夠。 - -## 目前進度 {#current-progress} - -弱無狀態、歷史記錄過期和狀態過期目前都處於研究階段,預計幾年後才會上線。 我們並不保證所有提案都會實作,舉例來說,如果已經先實作狀態過期,可能就不需要再實作歷史記錄過期了。 還有其他開發藍圖事項(如 [Verkle 樹](/roadmap/verkle-trees)及[提交者-建置者分離](/roadmap/pbs))需要先行完成。 - -## 了解更多 {#further-reading} - -- [Vitalik 無狀態 AMA](https://www.reddit.com/r/ethereum/comments/o9s15i/impromptu_technical_ama_on_statelessness_and/) -- [狀態大小管理理論](https://hackmd.io/@vbuterin/state_size_management) -- [恢復衝突最小化狀態邊界](https://ethresear.ch/t/resurrection-conflict-minimized-state-bounding-take-2/8739) -- [邁向無狀態和狀態過期的路徑](https://hackmd.io/@vbuterin/state_expiry_paths) -- [EIP-4444 規範](https://eips.ethereum.org/EIPS/eip-4444) -- [Alex Stokes 談 EIP-4444](https://youtu.be/SfDC_qUZaos) -- [為什麼轉換到無狀態很重要](https://dankradfeist.de/ethereum/2021/02/14/why-stateless.html) -- [原始無狀態用戶端概念筆記](https://ethresear.ch/t/the-stateless-client-concept/172) -- [更多狀態過期相關資訊](https://hackmd.io/@vbuterin/state_size_management#A-more-moderate-solution-state-expiry) -- [更多狀態過期的詳細資訊](https://hackmd.io/@vbuterin/state_expiry_paths#Option-2-per-epoch-state-expiry) diff --git a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/verkle-trees/index.md b/public/content/translations/zh-tw/12) Roadmap 2/roadmap/verkle-trees/index.md deleted file mode 100644 index bec5b0ea2e4..00000000000 --- a/public/content/translations/zh-tw/12) Roadmap 2/roadmap/verkle-trees/index.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: 沃克爾樹 -description: 關於沃克爾樹及其將如何用於升級以太坊的簡要說明 -lang: zh-tw -summaryPoints: - - 瞭解沃克爾樹是什麼 - - 瞭解為什麼 Verkle 樹是以太坊的有用升級 ---- - -# 沃克爾樹 {#verkle-trees} - -沃克爾樹(「向量承諾」和「梅克爾樹」混合而成的詞)是一種資料結構,可用於升級以太坊節點,以便它們可以停止儲存大量狀態資料,同時保留驗證區塊的能力。 - -## 無狀態 {#statelessness} - -沃克爾樹是實現無狀態以太坊用戶端的關鍵一步。 驗證下一批區塊時,無狀態用戶端無需儲存全部的狀態資料。 無狀態用戶端不使用自己的本地以太坊狀態備份來驗證區塊,而是使用「證據」來證明區塊狀態資料的真實性。 證據是執行一組特定交易所需的各種狀態資料的集合,以及證明證據確實是完整資料一部分的加密證明。 請使用證據_而非_狀態資料庫。 要做到這一點,證據必須非常短,這樣才能安全地廣播到網路上,以便驗證者能在 12 秒的時隙內及時處理。 目前的狀態資料結構還不是很合用,因為證據太大。 沃克爾樹透過啟用小證據,消除無狀態用戶端的主要障礙之一,從而解決這個問題。 - - - -以太坊用戶端目前使用帕特里夏梅克爾樹樹狀資料結構,儲存其自身的狀態資料。 有關個人帳戶的資訊作為葉子儲存在樹上,向一對對葉子重複進行雜湊運算,直到只剩下一個雜湊值。 串接在最末尾的雜湊值被稱為「根」。 為了驗證區塊,以太坊用戶端會執行區塊中的所有交易並更新其本地狀態樹。 若本地樹的「根」與區塊提交者提出的「根」完全相同,區塊即被視為有效。因為如果區塊提交者和驗證節點執行的計算中出現任何差異,都會導致根雜湊值完全不同。 這樣做的問題是,驗證區塊鏈需要每個用戶端儲存頭塊和多個歷史區塊的整個狀態樹(Geth 中預設保留頭塊後面 128 個區塊的狀態資料)。 因此用戶端需要存取大量磁碟空間,這是在廉價、低功耗硬體上運行完整節點的障礙。 解決這個問題的辦法是將狀態樹更新為更有效的結構(沃克爾樹),這種結構可以使用短小的「證據」對資料進行彙總再分享,而無需保存完整的狀態資料。 將狀態資料重新格式化為梅克爾樹,是邁向無狀態用戶端的第一步。 - - - -## 什麼是證據以及我們為什麼需要證據? {#what-is-a-witness} - -驗證區塊表示重新執行區塊中的交易,將變更套用到以太坊狀態樹,並計算新的根雜湊值。 區塊通過驗證是指其計算出的狀態根雜湊值與區塊中提供的值相同(因為這表示區塊提交者確實執行了他們所說的計算)。 在現今的以太坊用戶端中,更新狀態需要存取整個狀態樹,狀態樹是必須儲存在本地的大型資料結構。 證據中僅包含執行區塊中交易所需的狀態資料片段。 然後,驗證者只能使用這些片段來驗證區塊提交者是否已執行區塊交易並正確更新狀態。 然而,這意味著證據需要在以太坊網路上的對等點之間足夠快地傳輸,以便每個節點能夠在 12 秒的時隙內安全地接收和處理。 如果證據太大,有些節點可能會在下載以及與鏈同步上花費大量時間。 這是一種中心化的力量,因為這表示只有擁有高速網路連接的節點可以參與驗證區塊。 使用沃克爾樹時,無需將狀態儲存在硬碟上;驗證區塊所需的_全部_資訊都包含在區塊自身中。 遺憾的是,梅克爾樹產生的證據太大,無法支援無狀態用戶端。 - -## 為什麼沃克爾樹可以支援更小的證據? {#why-do-verkle-trees-enable-smaller-witnesses} - -Merkle 樹的結構導致證據非常大,以至於無法在 12 秒的時隙內在節點之間安全地廣播。 這是因為證據是將儲存在葉子中​​的資料關聯到根雜湊值的路徑。 為了驗證資料,不僅需要擁有將每個葉子連接到根的所有中間雜湊值,還需要擁有所有「兄弟」節點。 證明中的每個節點都有一個兄弟節點,它與該兄弟節點一起做雜湊運算,以建立樹中的下一個雜湊值。 牽涉的資料量十分龐大。 沃克爾樹縮短了樹的葉子與根之間的距離,並無需提供兄弟節點來驗證根雜湊值,因此縮減了證據的大小。 透過使用強大的多項式承諾方案而不是雜湊式向量承諾,可以獲得更高的空間效率。 多項式承諾允許證據保持固定大小,無論其證明的葉子數量如何。 - -在多項式承諾方案下,證據大小可管理,可以輕鬆地在對等網路上傳輸。 這使得用戶端只需極少資料即可驗證每個區塊中的狀態變更。 - - - -證據大小各有差異,取決於其所含的葉子數量。 假設證據有 1000 片葉子,梅克爾樹的證據大約是 3.5MB(假設樹有 7 層)。 相同資料的證據在沃克爾(假設樹有 4 層)中大概是 150 kB - **縮減了大約 23 倍**。 證據大小的縮減將使無狀態用戶端證據小到可以接受。 多項式證據的大小一般在 0.128 - 1 kB 之間,取決於使用哪個特定多項式承諾。 - - - -## 沃克爾樹的結構為何? {#what-is-the-structure-of-a-verkle-tree} - -Verkle 樹是 `(key,value)` 對,其中鍵是 32 字節位元組要素,由 31 字節位元組的_主幹_和單一字節位元組的_後綴_組成。 這些鍵被整理到_擴展_節點和_內部_節點中。 擴展節點是單一的主幹,包含 256 個具有不同後綴的子節點。 內部節點也有 256 個子節點,但可以是其他擴展節點。 沃克爾樹和梅克爾樹結構的主要區別是,沃克爾樹更加扁平,表示將葉子連接到根的中間節點較少,因此產生證明時所需的資料更少。 - -![](./verkle.png) - -[閱讀沃克爾樹結構的更多相關資訊](https://blog.ethereum.org/2021/12/02/verkle-tree-structure) - -## 目前進度 {#current-progress} - -沃克爾樹測試網已經啟動並運行,但用戶端仍需要進行大量更新以支援沃克爾樹。 將合約部署至測試網或是運行測試網用戶端有助加快進度。 - -[探索 Verkle Gen Devnet 2 測試網](https://verkle-gen-devnet-2.ethpandaops.io/) - -[觀看 Guillaume Ballet 解釋 Condrieu Verkle 測試網](https://www.youtube.com/watch?v=cPLHFBeC0Vg)(請注意,Condrieu 為工作量證明測試網,目前已被 Verkle Gen Devnet 2 測試網取代)。 - -## 了解更多 {#further-reading} - -- [無狀態沃克爾樹](https://verkle.info/) -- [Dankrad Feist 在 PEEPanEIP 上對沃克爾樹的說明](https://www.youtube.com/watch?v=RGJOQHzg3UQ) -- [Guillaume Ballet 在 ETHGlobal 上對沃克爾樹的說明](https://www.youtube.com/watch?v=f7bEtX3Z57o) -- [「沃克爾樹如何讓以太坊變得更加精幹而簡約」Guillaume Ballet 在 Devcon 6 發表的演講](https://www.youtube.com/watch?v=Q7rStTKwuYs) -- [Piper Merriam 談 ETHDenver 2020 的無狀態用戶端](https://www.youtube.com/watch?v=0yiZJNciIJ4) -- [Dankrad Feist 在「零知識」播客上談沃克爾樹和無狀態性](https://zeroknowledge.fm/episode-202-stateless-ethereum-verkle-tries-with-dankrad-feist/) -- [Vitalik Buterin 談沃克爾樹](https://vitalik.eth.limo/general/2021/06/18/verkle.html) -- [Dankrad Feist 談沃克爾樹](https://dankradfeist.de/ethereum/2021/06/18/verkle-trie-for-eth1.html) -- [以太坊改進提案文件:沃克爾樹](https://notes.ethereum.org/@vbuterin/verkle_tree_eip#Illustration) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/accounts/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/accounts/index.md deleted file mode 100644 index 5412c9bfca5..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/accounts/index.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: 以太坊帳戶 -description: 以太坊帳戶釋義 — 帳戶的資料結構以及和金鑰組密碼學的關係。 -lang: zh-tw ---- - -以太坊帳戶是一個擁有以太幣 (ETH) 餘額且可以在以太坊上發送交易的實體。 帳戶可以為使用者控制的帳戶,或為智慧型合約形式的帳戶。 - -## 基本資訊 {#prerequisites} - -為了讓你更容易理解本頁,建議你先通讀我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 - -## 帳戶類型 {#types-of-account} - -以太坊有兩種帳戶類型: - -- 外部帳戶 (EOA) – 由任何持有私密金鑰的人控制 -- 合約帳戶 – 部署在網路上的智慧型合約,由程式碼控制。 瞭解[智慧型合約](/developers/docs/smart-contracts/)。 - -這兩種帳戶類型都能: - -- 接收、存放和發送以太幣和代幣 -- 與部署的智慧型合約互動 - -### 主要差異 {#key-differences} - -**外部帳戶** - -- 建立帳戶是免費的 -- 能夠發起交易 -- 外部帳戶之間的交易只能是以太幣/代幣轉帳 -- 由密碼學金鑰組組成:公開以及私密金鑰控制帳戶活動 - -**合約帳戶** - -- 建立帳戶會佔用網路儲存因此會產生費用 -- 只能在接受到交易時發送交易 -- 從外部帳戶向合約帳戶發送的交易能觸發程式碼,並能執行多種不同操作:例如傳送代幣,甚至建立新合約。 -- 合約帳戶沒有私密金鑰。 但它們由智慧型合約程式碼的邏輯控制 - -## 帳戶檢視 {#an-account-examined} - -以太坊帳戶有四個欄位: - -- `nonce` – 一個計數器,指示外部帳戶發送的交易數量或合約帳戶建立的合約數量。 對於每個帳戶,一筆特定 Nonce 的交易只能執行一次,這是未了防範重放攻擊,即不斷地廣播並重覆執行已簽署的交易。 -- `balance` – 該地址擁有的 Wei 的數量。 Wei 是以太幣的面額,1 以太幣等於1e+18 個 Wei。 -- `codeHash` -- 此雜湊值指帳戶於以太坊虛擬機 (EVM) 上的_程式碼_。 包含了程式碼片段的合約帳戶可以執行不同操作。 對帳戶進行訊息調用時,執行此以太坊虛擬機程式碼。 不同於帳戶的其他欄位,此欄位無法更改。 所有此等程式碼片段都包含於狀態資料庫中其對應的雜湊值下,以便日後擷取。 此雜湊值稱為 codeHash。 對於外部帳戶,codeHash 欄位是空字串的雜湊值。 -- `storageRoot` – 有時稱為儲存雜湊值。 梅克爾帕特里夏樹之根節點的 256 位雜湊值,它對帳戶的儲存內容進行編碼(256 位整數值之間的映射),在樹形資料結構中編碼成 256 位整數鍵的雜湊值到 RPL 編碼的 256 位整數值之間的映射。 該樹形資料結構對此帳戶的儲存內容的雜湊值進行編碼,且默認為空白。 - -![顯示帳戶組成結構的圖表](./accounts.png) _此圖表源於[以太坊的以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ - -## 外部帳戶和金鑰組 {#externally-owned-accounts-and-key-pairs} - -帳戶由一對加密金鑰所組成:公鑰和私鑰。 金鑰組有助於證明交易確實由發送者簽署,並可防止偽造。 私密金鑰用於簽署交易,為你授予與帳戶相關的資金的監管權。 你從未真正持有加密貨幣,你持有的是私密金鑰 – 資金始終處於以太坊帳本中。 - -這樣可防止惡意行為者廣播假造交易,因為你始終都能驗證交易的發送者。 - -假設 Alice 想從自己的帳戶給 Bob 的帳戶發送以太幣,她須建立交易請求並發送到網路上進行驗證。 以太坊採用公開金鑰加密,這能確保 Alice 可以證明是她自己最初發起了該交易請求。 如果沒有加密機制,惡意對手 Eve 就能輕鬆廣播一個請求,例如「從 Alice 的帳戶給 Eve 的帳戶發送 5 以太幣」。沒有人能夠驗證這個請求不是 Alice 發送的。 - -## 建立帳戶 {#account-creation} - -當你想建立一個帳戶時,大多數程式庫會為你產生一個隨機私密金鑰。 - -私密金鑰由 64 個十六進位字元組成並且能夠使用密碼加密。 - -範例: - -`fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f` - -公開金鑰是使用[橢圓曲線數位簽名演算法](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm)從私密金鑰產生的。 你的帳戶的公開地址由公開金鑰 Keccak-256 雜湊值的後 20 位在開頭加上 `0x` 組成。 - -這意味著一個外部帳戶 (EOA) 會有一個 42 字元的地址(20 位元組的片段,即 40 個十六進制的字元加上前綴 `0x`)。 - -案例: - -`0x5e97870f263700f46aa00d967821199b9bc5a120` - -下面的範例展示如何使用一種簽名工具 [Clef](https://geth.ethereum.org/docs/tools/clef/introduction) 來產生一個新帳戶。 Clef 是一種與以太坊用戶端 [Geth](https://geth.ethereum.org) 綁定的帳戶管理與簽名工具。 `clef newaccount` 命令建立一個新的金鑰組並將其儲存於加密的密鑰庫。 - -``` -> clef newaccount --keystore - -Please enter a password for the new account to be created: -> - ------------- -INFO [10-28|16:19:09.156] Your new key was generated address=0x5e97870f263700f46aa00d967821199b9bc5a120 -WARN [10-28|16:19:09.306] Please backup your key file path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120 -WARN [10-28|16:19:09.306] Please remember your password! -Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120 -``` - -[Geth 文件](https://geth.ethereum.org/docs) - -可以透過私密金鑰衍生出公開金鑰,但無法使用公開金鑰衍生出私密金鑰。 顧名思義,**私密**意味著確保私密金鑰安全至關重要。 - -你需要使用私密金鑰來簽署訊息和交易,並輸出一個簽章。 之後,其他人能夠使用該簽章衍生出你的公開金鑰,證明你是這條訊息的創作者。 在你的應用程式中,你可以使用 JavaScript 程式庫將交易發送至網路。 - -## 合約帳戶 {#contract-accounts} - -合約帳戶亦有一個含有 42 個字元的 16 進位地址: - -範例: - -`0x06012c8cf97bead5deae237070f9587f8e7a266d` - -當在以太坊區塊鏈上部署一個合約時,通常給出合約地址。 合約地址由創作者地址及該地址發送的交易數量組成(「nonce」)。 - -## 驗證者金鑰 {#validators-keys} - -以太坊還有另一種金鑰,是在以太坊的共識機制從工作量證明過渡到權益證明時引入的。 它們是「BLS」金鑰,且被用於識別驗證者。 這些金鑰能有效地聚合起來,從而降低網路達成共識所需的帶寬。 如果沒有此等金鑰聚合,成為驗證者所需的最低質押量會高出許多。 - -[更多驗證者金鑰相關資訊](/developers/docs/consensus-mechanisms/pos/keys/)。 - -## 關於錢包的備註 {#a-note-on-wallets} - -帳戶並非錢包。 錢包是一個介面或應用程式,可讓你與你的以太坊帳戶(外部帳戶或合約帳戶)互動。 - -## 視覺範例 {#a-visual-demo} - -觀看 Austin 為你全面講解雜湊函式和金鑰組。 - - - - - -## 延伸閱讀 {#further-reading} - -- [了解以太坊帳戶](https://info.etherscan.com/understanding-ethereum-accounts/) - etherscan - -_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ - -## 相關主題 {#related-topics} - -- [智慧型合約](/developers/docs/smart-contracts/) -- [異動](/developers/docs/transactions/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/blocks/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/blocks/index.md deleted file mode 100644 index fa1751a2c29..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/blocks/index.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -title: 區塊 -description: 以太坊區塊鏈之區塊概要 -- 資料結構、必要性及生成方式。 -lang: zh-tw ---- - -區塊為區塊鏈上擁有前一個區塊之雜湊值的交易批次。 透過這種方式,區域連結起來形成區塊鏈,因為雜湊值是透過加密方式從區塊資料中衍生得來的。 這樣就防止了假造,因為對歷史記錄中的任何區塊進行一處變更將會使其後的所有區塊無效,後面的所有雜湊值都會改變,並且所有運行區塊鏈的人都會注意到。 - -## 基本資訊 {#prerequisites} - -區塊是一個非常簡單易懂的主題。 為了讓你更容易理解本頁,建議你先閱讀[帳戶](/developers/docs/accounts/)、[交易](/developers/docs/transactions/)及我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 - -## 為何需要區塊? {#why-blocks} - -為確保所有以太坊網路參與者擁有同步狀態並一致同意明確的交易歷史記錄,我們將交易分批打包成區塊。 此代表數十個(或數百個)交易將同時被提交、同意及同步。 - -![顯示區塊中的交易導致狀態產生變化的圖表](./tx-block.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ - -透過將交易提交間隔分開,所有網路參與者能有足夠時間來達成共識:即便每秒有大量交易請求提出,但在以太坊上,僅以大約 12 秒的時間建立並提交一次區塊。 - -## 區塊如何運作? {#how-blocks-work} - -為了保持交易歷史記錄,區塊嚴格按照順序排列(新建立區塊包含父區塊之參照),而區塊內的交易也是嚴格按照順序排列。 除極個別情形外,在任何給定時間點,所有網路參與者都一致同意區塊的準確數量及歷史記錄,並致力於將當前的即時交易請求批次打包到下一個區塊中。 - -當隨機挑選的驗證者在網路上生成一個區塊後,區塊將被廣播至全網路;所有節點將此新區塊添加於它們的區塊鏈尾端,接著,挑選一個新的驗證者來產生下一個區塊。 目前區塊生成、提交/共識流程是由以太坊之「權益證明」協議規定的。 - -## 權益證明協議 {#proof-of-work-protocol} - -權益證明指的是: - -- 驗證節點必須質押 32 個以太幣至存款合約,做為抵押品以避免惡意行為。 這會幫助保護網路,因為不誠信的活動一經證實會導致部分或全部質押被銷毀。 -- 在每個時隙(12 秒間隔),會隨機挑選一位驗證者做為區塊的提交者。 他們將交易打包、執行並決定新的「狀態」。 他們將此資訊包裝進區塊並傳送給其他驗證者。 -- 其他驗證者接到此新區塊後,重新執行這些交易,以確保他們同意新提交的全域狀態變更。 如果該區塊是有效的,他們將其加入自己的資料庫。 -- 如果驗證者在同一時隙接到兩個衝突的區塊,他們會透過分叉選擇演算法選擇有最多質押以太幣支援的區塊。 - -[更多詳情關於質押證明(PoS)](/developers/docs/consensus-mechanisms/pos) - -## 區塊中有什麼? {#block-anatomy} - -區塊內有很多資訊。 在最高層級,區塊包含以下欄位: - -| 欄位 | 描述 | -|:---------------- |:-------------- | -| `時隙` | 區塊所屬的時隙 | -| `proposer_index` | 提出區塊的驗證者的識別碼 | -| `parent_root` | 前一個區塊的雜湊值 | -| `state_root` | 狀態物件的根雜湊值 | -| `主旨` | 包含多個欄位的物件,定義如下 | - -區塊的 `body` 包含以下幾個欄位: - -| 欄位 | 描述 | -|:-------------------- |:-------------- | -| `randao_reveal` | 用於選擇下一個區塊提出者的值 | -| `eth1_data` | 關於存款合約的資訊 | -| `塗鴉` | 用於標記區塊的任意資料 | -| `proposer_slashings` | 將被罰沒的驗證者清單 | -| `attester_slashings` | 將被罰沒的證明者清單 | -| `證明` | 支持當前區塊的證明清單 | -| `存款` | 存款合約的新增存款清單 | -| `voluntary_exits` | 離開網路的驗證者清單 | -| `sync_aggregate` | 服務輕量用端的驗證者子集 | -| `execution_payload` | 執行用户端傳送來的交易 | - -`attestations` 欄位包含區塊中所有證明的清單。 每個證明都有自己的資料類型並包含一些資料。 每個證明包含: - -| 欄位 | 描述 | -|:------------------ |:------------ | -| `aggregation_bits` | 參與過此證明的驗證者清單 | -| `數據資料` | 包含多個子欄位的容器 | -| `signature` | 所有證明驗證者的聚合簽名 | - -`attestation` 中的 `data` 欄位包含: - -| 欄位 | 描述 | -|:------------------- |:--------------- | -| `時隙` | 與證明相關的時隙 | -| `索引` | 證明驗證者的索引 | -| `beacon_block_root` | 包含此物件的信標區塊的根雜湊值 | -| `來源` | 最後一個合法檢查點 | -| `target` | 最新時期的邊界區塊 | - -執行 `execution_payload` 中的交易會更新全域狀態。 所有用戶端都重新執行 `execution_payload` 中的交易,以確保新的狀態與新區塊中 `state_root` 欄位中的狀態相符。 這就是用戶端辨別新區塊是否有效並可以安全添加至其區塊鏈中的方式。 `execution payload` 自身是一個有許多欄位的物件。 還有一個 `execution_payload_header` 欄位,其中包含了關於執行資料的重要摘要資訊。 這些資料結構組織方式如下: - -`xecution_payload_header` 包含以下欄位: - -| 欄位 | 描述 | -|:------------------- |:-------------------- | -| `家長_雜湊值` | 父區塊的雜湊值 | -| `fee_recipient` | 用於支付交易費的帳戶地址 | -| `state_root` | 在應用此區塊中的變更後全域狀態的根雜湊值 | -| `receipts_root` | 交易收據樹的雜湊值 | -| `logs_bloom` | 包含事件記錄的資料結構 | -| `prev_randao` | 用於隨機選擇驗證者的值 | -| `block_number` | 目前區塊號碼 | -| `gas_limit` | 此區塊允許的最高燃料用量 | -| `gas_used` | 此區塊實際消耗的燃料用量 | -| `時間戳` | 區塊時間 | -| `extra_data` | 原始字節位元組格式的任意額外資料 | -| `base_fee_per_gas` | 基本費用的值 | -| `block_hash` | 執行區塊的雜湊值 | -| `transactions_root` | 有效負載中交易的根雜湊值 | -| `withdrawal_root` | 有效負載中提款的根雜湊值 | - -`execution_payload` 自身包含了以下欄位(請注意,這些欄位與標頭相同,只是它不包含交易的根雜湊值,而是包含實際的交易清單和提款資訊): - -| 欄位 | 描述 | -|:------------------ |:-------------------- | -| `家長_雜湊值` | 父區塊的雜湊值 | -| `fee_recipient` | 用於支付交易費的帳戶地址 | -| `state_root` | 在應用此區塊中的變更後全域狀態的根雜湊值 | -| `receipts_root` | 交易收據樹的雜湊值 | -| `logs_bloom` | 包含事件記錄的資料結構 | -| `prev_randao` | 用於隨機選擇驗證者的值 | -| `block_number` | 目前區塊號碼 | -| `gas_limit` | 此區塊允許的最高燃料用量 | -| `gas_used` | 此區塊實際消耗的燃料用量 | -| `時間戳` | 區塊時間 | -| `extra_data` | 原始字節位元組格式的任意額外資料 | -| `base_fee_per_gas` | 基本費用的值 | -| `block_hash` | 執行區塊的雜湊值 | -| `交易(transactions)` | 要執行交易的清單 | -| `提款` | 提款物件清單 | - -`withdrawals` 清單包含 `withdrawals` 物件,具下列結構: - -| 欄位 | 描述 | -|:---------------- |:-------- | -| `address` | 已提款的帳戶地址 | -| `amount` | 提款金額 | -| `索引` | 提款索引值 | -| `validatorIndex` | 驗證者索引值 | - -## 區塊時間 {#block-time} - -區塊時間指的是分隔區塊的時間。 在以太坊上,時間被分割成 12 秒的單位,稱為「時隙」。 在每個時隙中,都會選擇一個驗證者來提交區塊。 假設所有驗證者都在線且功能完整,那每個時隙中都會有一個區塊,表示區塊時間為 12 秒。 然而,偶爾,當被要求提交區塊時驗證者可能下線,這表示時隙有時候會是空白的。 - -這種實作與基於工作量證明的系統不同,在工作量證明系統中,區塊時間是機率性的,並根據協議的目標挖礦難度調整。 以太坊的[平均區塊時間](https://etherscan.io/chart/blocktime)就是個完美的範例,可以透過一致性的 12 秒區塊時間清楚地推斷出,已經由工作量證明過渡到權益證明了。 - -## 區塊大小 {#block-size} - -最後一個重要事項:區塊本身具大小限制。 每個區塊具 15M 單位燃料用量之目標大小,但區塊大小將跟隨網路需求增減,最大可達到 30M 燃料用量的區塊大小限制(目標區塊大小之兩倍)。 區塊的燃料限制可以比前一個區塊的燃料限制上調或下調 1/1024。 因此,驗證者可以透過共識來改變區塊的燃料限制。 區塊中所有交易消耗的總燃料用量須少於區塊燃料限制。 這一點非常重要,因其確保區塊不能成為任意大小。 若區塊可以任意大,由於空間及速度方面的要求,那些效能一般的全節點可能逐漸跟不上網路。 區塊愈大,在下一個時隙中及時處理它們所需的算力就愈多。 這是一種中心化力量,可以透過限制區塊大小來抵制。 - -## 衍生閱讀 {#further-reading} - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ - -## 相關主題 {#related-topics} - -- [交易](/developers/docs/transactions/) -- [燃料](/developers/docs/gas/) -- [權益證明(PoS)](/developers/docs/consensus-mechanisms/pos) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/dapps/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/dapps/index.md deleted file mode 100644 index fd7e5a7d869..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/dapps/index.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: 去中心化應用程式簡介 -description: -lang: zh-tw ---- - -去中心化應用程式 (dapp) 是建立在去中心化網路之上的應用程式,由[智慧型合約](/developers/docs/smart-contracts/)和前端使用者介面構成。 在以太坊上,如同開放式應用程式介面 (API) 一樣,智慧型合約具可存取性和透明性,因此你的去中心化應用程式甚至能包含他人已經編寫好的智慧型合約。 - -## 基本資訊 {#prerequisites} - -在學習去中心化應用程序之前,應該先瞭解[區塊鏈基本知識](/developers/docs/intro-to-ethereum/),並瞭解以太坊網路及其如何去中心化。 - -## 去中心化應用程式之定義 {#definition-of-a-dapp} - -去中心化應用程序的後端程式碼在去中心化點對點網路上運行。 與之相比,普通應用程序的後端程式碼在中心化伺服器上運行。 - -去中心化應用程式的前端程式碼與使用者介面可以用任何語言編寫(就像普通應用程式一樣),以呼叫其後端。 此外,其前端能夠託管於任何去中心化儲存中,例如[星際檔案系統](https://ipfs.io/)。 - -- **去中心化** -- 去中心化應用程式運行於以太坊上。以太坊是一個開放式公共去中心化平台,不受任何個人或群組控制 -- **確定性** - 去中心化應用程式總是執行相同函式,而與其執行環境無關 -- **圖靈完備** - 只要有所需的資源,去中心化應用程式就能執行任何操作 -- **隔離性** - 去中心化應用程式在稱為以太坊虛擬機的虛擬環境中執行,所以即使智慧型合約出現錯誤,也不會影響區塊鏈執行正常功能 - -### 關於智慧型合約 {#on-smart-contracts} - -在介紹去中心化應用程式之前,我們需要先認識智慧型合約,由於沒有更好的術語,我們用它來表示去中心化應用程式的後端。 欲查看細節概要,請查閱我們的[智慧型合約](/developers/docs/smart-contracts/)一節。 - -智慧型合約是存在於以太坊區塊鏈上的程式,完全按照設定運行。 智慧型合約一旦部署於網路上後,你將無法更改它。 去中心化應用程式可以實現去中心化,因為控制它們的是編寫到合約內的邏輯,而不是任何個人或公司。 這也表示你必須非常謹慎地設計你的合約並進行全面測試。 - -## 去中心化應用程式的開發優勢 {#benefits-of-dapp-development} - -- **零下線時間** -- 一旦智慧型合約部屬到區塊鏈上,整個網路將始終能夠為想要與此合約互動的客戶提供服務。 因此,惡意行為者無法發動針對單獨去中心化應用程式的拒絕服務攻擊。 -- **隱私** -- 你無需提供真實身份,即可部署去中心化應用程式或與之互動。 -- **抗審查** -- 網路上的任何單獨實體都無法阻止使用者提交交易、部署去中心化應用程式並讀取區塊鏈中的資料。 -- **資料完整性** -- 藉由加密基元技術,儲存於區塊鏈上的資料具不可變性及無爭議性。 惡意行為者無法假造已公開的交易或其他資料。 -- **無需信任的計算/可驗證的行為** – 可以對智慧型合約進行分析且可以保障其按照可預見的方式執行,而無需信任中心化管理機構。 在傳統模式下,情況並非如此;例如,在使用線上銀行系統時,我們必須信任此等金融機構不會濫用我們的財物資料,不會竄改紀錄或者不會受到駭客攻擊。 - -## 去中心化應用程式的開發弊端 {#drawbacks-of-dapp-development} - -- **維護** -- 因為發佈到區塊鏈上的程式碼與資料更加難以修改,去中心化應用程式維護起來難度更大。 一旦部署去中心化應用程式後,開發者將難以更新去中心化應用程式(或其儲存的基礎資料),即便在舊版本中發現了錯誤或安全風險。 -- **效能開銷** – 效能開銷非常之高,並且擴容極其困難。 為了達成以太坊追求的高水平安全性、完整性、透明性及可靠性,每個節點都運行並儲存每一筆交易。 除此之外,達成權益證明共識也需要時間。 -- **網路壅塞** -- 當一個去中心化應用程式佔用過多計算資源時,整個網路會變得壅塞。 目前,以太坊網路能每秒處理大約 10-15 筆交易,但如果發送交易的速度快於處理速度,未確認的交易池將快速暴增。 -- **使用者體驗** – 可能很難設計出方便使用的體驗,因為普通終端使用者可能會發現難以設定透過真正安全的方式與區塊鏈互動所需的工具棧。 -- **中心化** -- 方便使用且方便開發的解決方案建立於以太坊基礎層上,最終它們可能在某些方面看起來像是中心化服務。 例如,此等服務可能在伺服器端儲存金鑰或其他敏感資訊,通過中心化伺服器支援前端,或者在將其寫入區塊鏈前在中心化伺服器上運行重要業務邏輯。 中心化會消除許多(如果不是全部)區塊鏈相較於傳統模式的優勢。 - -## 想透過實際視覺學習? {#visual-learner} - - - -## 用於建立去中心化應用程式的工具 {#dapp-tools} - -**Scaffold-ETH _- 透過可適應你的智慧型合約的前端,快速體驗 Solidity。_** - -- [Github](https://github.com/scaffold-eth/scaffold-eth-2) -- [範例去中心化應用程式](https://punkwallet.io/) - -**Create Eth App _- 通過一條指令建立以太坊支援的應用程式。_** - -- [Github](https://github.com/paulrberg/create-eth-app) - -**One Click Dapp _ - FOSS 工具,用來透過[應用程式二進位介面](/glossary/#abi)生成去中心化應用程式前端。_** - -- [oneclickdapp.com](https://oneclickdapp.com) -- [Github](https://github.com/oneclickdapp/oneclickdapp-v1) - -**Etherflow_ -- FOSS 工具,以太坊開發者可用其測試節點,在瀏覽器中撰寫並偵錯遠端程序呼叫。_** - -- [etherflow.quiknode.io](https://etherflow.quiknode.io/) -- [GitHub](https://github.com/abunsen/etherflow) - -**thirdweb _- 用於 Web3 開發的各種語言的軟體開發套件、智慧型合約、工具及基礎設施。_** - -- [首頁](https://thirdweb.com/) -- [文件](https://portal.thirdweb.com/) -- [GitHub](https://github.com/thirdweb-dev/) - -**Crossmint _- 企業級 Web3 開發平台,可用於部署智慧型合約,支援信用卡和跨鏈支付,並使用應用程式介面來建立、分發、銷售、儲存和編輯非同質化代幣。_** - -- [crossmint.com](https://www.crossmint.com) -- [文件](https://docs.crossmint.com) -- [Discord](https://discord.com/invite/crossmint) - -## 衍生閱讀 {#further-reading} - -- [探索去中心化應用程式](/dapps) -- [Web 3.0 應用程式的架構](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ -- [-2021 版去中心化應用程式指南](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) - _LimeChain_ -- [去中心化應用程式為何?](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) - _Gemini_ -- [熱門去中心化應用程式](https://www.alchemy.com/dapps) - _Alchemy_ - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ - -## 相關主題 {#related-topics} - -- [以太坊堆疊簡介](/developers/docs/ethereum-stack/) -- [開發架構](/developers/docs/frameworks/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/index.md deleted file mode 100644 index 449d559a645..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/index.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 以太坊虛擬機 (EVM) -description: 以太坊虛擬機及其與網路狀態、交易、智慧型合約之間關係之介紹。 -lang: zh-tw ---- - -以太坊虛擬機 (EVM) 是去中心化的虛擬環境,可以跨所有以太坊節點一致且安全地執行程式碼。 節點運行以太坊虛擬機來執行智慧型合約,使用「[燃料](/gas/)」來衡量[運算](/developers/docs/evm/opcodes/)所需的算力,確保高效的資源分配和網路安全。 - -## 基本資訊 {#prerequisites} - -首先,對電腦科學之常用術語,例如[字節位元組](https://wikipedia.org/wiki/Byte)、[記憶體](https://wikipedia.org/wiki/Computer_memory)及[堆疊](https://wikipedia.org/wiki/Stack_(abstract_data_type))等有一個基本認知,才能夠理解以太坊虛擬機。 熟悉密碼學/區塊鏈概念,如[雜湊函式](https://wikipedia.org/wiki/Cryptographic_hash_function)和[梅克爾樹](https://wikipedia.org/wiki/Merkle_tree)等也有幫助。 - -## 從帳本至狀態機 {#from-ledger-to-state-machine} - -我們經常使用「分佈式帳本」這一比喻來描述比特幣一類的區塊鏈,區塊鏈透過使用一些基礎加密工具來支持去中心化貨幣。 帳本維護著活動記錄,並且必須遵守一套管控帳本修改相關操作的規則。 例如,比特幣地址無法花費超出其先前接受數量之比特幣。 此類規則構成比特幣及其他區塊鏈上所有交易的基礎。 - -盡管以太坊有著自己的原生加密貨幣(以太幣)且遵循幾乎相同的直觀規則,但它還支持一種更加強大的功能:[智慧型合約](/developers/docs/smart-contracts/)。 對於此更為複雜的功能,需要一種更貼切之比喻來形容以太坊。 以太坊並非分佈式帳本,而是一種分佈式[狀態機](https://wikipedia.org/wiki/Finite-state_machine)。 以太坊狀態為一種龐大資料結構,其中不僅包含所有帳戶與餘額還包括_機器狀態_,機器狀態能夠遵照先前定義的一套規則在區塊之間變化並能執行任何機器程式碼。 在區塊之間變更狀態的具體規則由以太坊虛擬機定義。 - -![展示以太坊虛擬機構成的圖表](./evm.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ - -## 以太坊狀態轉換函式 {#the-ethereum-state-transition-function} - -以太坊虛擬機的運行類似於數學函式:提供一個輸入,就會生成確定的輸出。 因此,更加正式地描述以太坊具有**狀態轉換函式**將很有幫助: - -``` -Y(S, T)= S' -``` - -提供一個舊的有效狀態 `(S)` 及一組新的有效交易 `(T)`,以太坊狀態轉換函式 `Y(S, T)` 將生成一個新的有效輸出狀態 `S'`。 - -### 狀態 {#state} - -在以太坊情境下,狀態為一個龐大的資料結構,稱為[改進的梅克爾帕特里夏樹](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/),該樹保存由雜湊值連接在一起的所有[帳戶](/developers/docs/accounts/)且可回朔至在區塊鏈上儲存的單一根哈希。 - -### 交易 {#transactions} - -交易為完全由帳戶指令加密簽章. 交易主要有兩種類型:一種交易發起訊息調用,一種啟動合約建立。 - -合約建立將建立一個新合約帳戶,其中包含已編譯的[智慧型合約](/developers/docs/smart-contracts/anatomy/)位元組碼。 當其他帳戶對該合約進行訊息調用時,將執行該合約的位元組碼。 - -## 以太坊虛擬機相關說明 {#evm-instructions} - -以太坊虛擬機的執行類似於[堆疊機](https://wikipedia.org/wiki/Stack_machine),執行深度為 1024 個專案。 每個專案均為 256 位元的字,選擇它是為了方便用於 256 位元加密(例如,Keccak-256 雜湊或 secp256k1 簽章)。 - -執行過程中,以太坊虛擬機維持一個臨時_記憶體_(即字尋址字元陣列),該記憶體於交易間隔期間不存在。 - -然而,合約確實包含一棵梅克爾帕特里夏_儲存_樹(即字尋址字陳列),該樹與相關帳戶關聯且是全域狀態的一部分。 - -已編譯的智慧型合約位元組碼作為一些以太坊虛擬機[作業碼](/developers/docs/evm/opcodes)執行,後者執行標準堆疊操作,例如 `XOR`、`AND`、`ADD`、`SUB` 等。 以太坊虛擬機亦可透過一些區塊鏈特定的堆疊操作實作,例如 `ADDRESS`、`BALANCE`、`BLOCKHASH` 等。 - -![展示需要燃料的以太坊虛擬機操作](../gas/gas.png) _圖表源於[以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ - -## 以太坊虛擬機實作 {#evm-implementations} - -所有以太坊虛擬機實作均須遵照以太坊黃皮書中規定的相關規範。 - -在以太坊九年的歷程中,以太坊虛擬機經歷了數次修改,有著各種不同程式語言的以太坊虛擬機實作。 - -[以太坊執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)包含以太坊虛擬機實作。 此外,還有一些獨立的實作,包括: - -- [Py-EVM](https://github.com/ethereum/py-evm) - _Python_ -- [evmone](https://github.com/ethereum/evmone) - _C++_ -- [ethereumjs-vm](https://github.com/ethereumjs/ethereumjs-vm) - _JavaScript_ -- [revm](https://github.com/bluealloy/revm) - _Rust_ - -## 延伸閱讀 {#further-reading} - -- [以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf) -- [Jellopaper 亦稱為 KEVM:K 框架中的以太坊虛擬機語意](https://jellopaper.org/) -- [The Beigepaper](https://github.com/chronaeon/beigepaper) -- [以太坊虛擬機作業碼](https://www.ethervm.io/) -- [以太坊虛擬機作業碼互動式參考資料](https://www.evm.codes/) -- [Solidity 文件簡介](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) -- [掌握以太坊 - 以太坊虛擬機 (EVM)](https://github.com/ethereumbook/ethereumbook/blob/develop/13evm.asciidoc) - -## 相關主題 {#related-topics} - -- [Gas](/developers/docs/gas/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/opcodes/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/opcodes/index.md deleted file mode 100644 index 58812e2ebd4..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/evm/opcodes/index.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: 以太坊虛擬機的作業碼 -description: 以太坊虛擬機可用的所有作業碼清單。 -lang: zh-tw ---- - -## 概觀 {#overview} - -本文是以太坊虛擬機參考頁面的更新版本,網址為:[wolflo/evm-opcodes](https://github.com/wolflo/evm-opcodes)。 同樣取自[黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf)、[Jello Paper](https://jellopaper.org/evm/) 和 [geth](https://github.com/ethereum/go-ethereum) 實作。 本文意圖成为方便參考的頁面,但並非特別嚴謹。 若你想確定正確性並了解每種邊界案例(指僅在極端工作參數下才會發生的問題或情況),建議使用 Jello Paper 或用戶端實作。 - -正在尋找互動式參考資料? 請瀏覽 [evm.codes](https://www.evm.codes/) - -關於燃料費用為動態的操作,請查看 [gas.md](https://github.com/wolflo/evm-opcodes/blob/main/gas.md)。 - -💡 快速提示:要檢視整行,可以用 `[shift] + 滑鼠滾輪`在桌面上水平滾動。 - -| 堆疊 | 名稱 | 燃料 | 初始堆疊 | 最終堆疊 | 記憶體/儲存空間 | 注釋 | -|:-----:|:-------------- |:-----------------------------------------------------------------------------------------------:|:------------------------------------------------ |:-------------------------------------------- |:----------------------------------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 00 | STOP | 0 | | | | halt execution | -| 01 | ADD | 3 | `a, b` | `a + b` | | (u)int256 addition modulo 2\*\*256 | -| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 multiplication modulo 2\*\*256 | -| 03 | SUB | 3 | `a, b` | `a - b` | | (u)int256 addition modulo 2\*\*256 | -| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 division | -| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 division | -| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 modulus | -| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 modulus | -| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 addition modulo N | -| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 multiplication modulo N | -| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 exponentiation modulo 2\*\*256 | -| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [sign extend](https://wikipedia.org/wiki/Sign_extension) `x` from `(b+1)` bytes to 32 bytes | -| 0C-0F | _invalid_ | | | | | | -| 10 | LT | 3 | `a, b` | `a < b` | | uint256 less-than | -| 11 | GT | 3 | `a, b` | `a > b` | | uint256 greater-than | -| 12 | SLT | 3 | `a, b` | `a < b` | | int256 less-than | -| 13 | SGT | 3 | `a, b` | `a > b` | | int256 greater-than | -| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 equality | -| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 iszero | -| 16 | AND | 3 | `a, b` | `a && b` | | bitwise AND | -| 17 | OR | 3 | `a, b` | `a \|\| b` | | bitwise OR | -| 18 | XOR | 3 | `a, b` | `a ^ b` | | bitwise XOR | -| 19 | NOT | 3 | `a` | `~a` | | bitwise NOT | -| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | `i`th byte of (u)int256 `x`, from the left | -| 1B | SHL | 3 | `shift, val` | `val << shift` | | shift left | -| 1C | SHR | 3 | `shift, val` | `val >> shift` | | logical shift right | -| 1D | SAR | 3 | `shift, val` | `val >> shift` | | arithmetic shift right | -| 1E-1F | _invalid_ | | | | | | -| 20 | KECCAK256 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len-1])` | | keccak256 | -| 21-2F | _invalid_ | | | | | | -| 30 | ADDRESS | 2 | `。` | `address(this)` | | address of executing contract | -| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | balance, in wei | -| 32 | ORIGIN | 2 | `。` | `tx.origin` | | address that originated the tx | -| 33 | CALLER | 2 | `。` | `msg.sender` | | address of msg sender | -| 34 | CALLVALUE | 2 | `。` | `msg.value` | | msg value, in wei | -| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | read word from msg data at index `idx` | -| 36 | CALLDATASIZE | 2 | `。` | `len(msg.data)` | | length of msg data, in bytes | -| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `。` | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | copy msg data | -| 38 | CODESIZE | 2 | `。` | `len(this.code)` | | length of executing contract's code, in bytes | -| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `。` | | mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1] | copy executing contract's bytecode | -| 3A | GASPRICE | 2 | `。` | `tx.gasprice` | | gas price of tx, in wei per unit gas [\*\*](https://eips.ethereum.org/EIPS/eip-1559#gasprice) | -| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | size of code at addr, in bytes | -| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `。` | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | copy code from `addr` | -| 3D | RETURNDATASIZE | 2 | `。` | `size` | | size of returned data from last external call, in bytes | -| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `。` | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | copy returned data from last external call | -| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hash` | | hash = addr.exists ? keccak256(addr.code) : 0 | -| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | | -| 41 | COINBASE | 2 | `。` | `block.coinbase` | | 目前區塊提交者的地址 | -| 42 | TIMESTAMP | 2 | `。` | `block.timestamp` | | timestamp of current block | -| 43 | NUMBER | 2 | `。` | `block.number` | | number of current block | -| 44 | PREVRANDAO | 2 | `。` | `randomness beacon` | | randomness beacon | -| 45 | GASLIMIT | 2 | `。` | `block.gaslimit` | | gas limit of current block | -| 46 | CHAINID | 2 | `。` | `chain_id` | | push current [chain id](https://eips.ethereum.org/EIPS/eip-155) onto stack | -| 47 | SELFBALANCE | 5 | `。` | `address(this).balance` | | balance of executing contract, in wei | -| 48 | BASEFEE | 2 | `。` | `block.basefee` | | base fee of current block | -| 49 | BLOBHASH | 3 | `idx` | `tx.blob_versioned_hashes[idx]` | | [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) | -| 4A | BLOBBASEFEE | 2 | `。` | `block.blobbasefee` | | 当前区块的二進位大型物件基本费用 ([EIP-7516](https://eips.ethereum.org/EIPS/eip-7516)) | -| 4B-4F | _invalid_ | | | | | | -| 50 | POP | 2 | `_anon` | `。` | | remove item from top of stack and discard it | -| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | read word from memory at offset `ost` | -| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `。` | mem[ost:ost+32] := val | write a word to memory | -| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `。` | mem[ost] := val && 0xFF | write a single byte to memory | -| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | read word from storage | -| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `。` | storage[key] := val | write word to storage | -| 56 | JUMP | 8 | `dst` | `。` | | `$pc := dst` mark that `pc` is only assigned if `dst` is a valid jumpdest | -| 57 | JUMPI | 10 | `dst, condition` | `。` | | `$pc := condition ? dst : $pc + 1` | -| 58 | PC | 2 | `。` | `$pc` | | program counter | -| 59 | MSIZE | 2 | `。` | `len(mem)` | | size of memory in current execution context, in bytes | -| 5A | GAS | 2 | `。` | `gasRemaining` | | | -| 5B | JUMPDEST | 1 | | | mark valid jump destination | a valid jump destination for example a jump destination not inside the push data | -| 5C | TLOAD | 100 | `key` | `tstorage[key]` | | 從暫存中讀取字詞 ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | -| 5D | TSTORE | 100 | `key, val` | `。` | tstorage[key] := val | 將字詞寫入暫存 ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | -| 5E | MCOPY | 3+3\*字詞數+[A0](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `dstOst, ost, len` | `。` | mem[dstOst] := mem[ost:ost+len] | 從一個區域複製記憶體到另一個區域 ([EIP-5656](https://eips.ethereum.org/EIPS/eip-5656)) | -| 5E | PUSH0 | 2 | `。` | `uint8` | | 將常數值 0 推至堆疊上 | -| 60 | PUSH1 | 3 | `。` | `uint8` | | push 1-byte value onto stack | -| 61 | PUSH2 | 3 | `。` | `uint16` | | push 2-byte value onto stack | -| 62 | PUSH3 | 3 | `。` | `uint24` | | push 3-byte value onto stack | -| 63 | PUSH4 | 3 | `。` | `uint32` | | push 4-byte value onto stack | -| 64 | PUSH5 | 3 | `。` | `uint40` | | push 5-byte value onto stack | -| 65 | PUSH6 | 3 | `。` | `uint48` | | push 6-byte value onto stack | -| 66 | PUSH7 | 3 | `。` | `uint56` | | push 7-byte value onto stack | -| 67 | PUSH8 | 3 | `。` | `uint64` | | push 8-byte value onto stack | -| 68 | PUSH9 | 3 | `。` | `uint72` | | push 9-byte value onto stack | -| 69 | PUSH10 | 3 | `。` | `uint80` | | push 10-byte value onto stack | -| 6A | PUSH11 | 3 | `。` | `uint88` | | push 11-byte value onto stack | -| 6B | PUSH12 | 3 | `。` | `uint96` | | push 12-byte value onto stack | -| 6C | PUSH13 | 3 | `。` | `uint104` | | push 13-byte value onto stack | -| 6D | PUSH14 | 3 | `。` | `uint112` | | push 14-byte value onto stack | -| 6E | PUSH15 | 3 | `。` | `uint120` | | push 15-byte value onto stack | -| 6F | PUSH16 | 3 | `。` | `uint128` | | push 16-byte value onto stack | -| 70 | PUSH17 | 3 | `。` | `uint136` | | push 17-byte value onto stack | -| 71 | PUSH18 | 3 | `。` | `uint144` | | push 18-byte value onto stack | -| 72 | PUSH19 | 3 | `。` | `uint152` | | push 19-byte value onto stack | -| 73 | PUSH20 | 3 | `。` | `uint160` | | push 20-byte value onto stack | -| 74 | PUSH21 | 3 | `。` | `uint168` | | push 21-byte value onto stack | -| 75 | PUSH22 | 3 | `。` | `uint176` | | push 22-byte value onto stack | -| 76 | PUSH23 | 3 | `。` | `uint184` | | push 23-byte value onto stack | -| 77 | PUSH24 | 3 | `。` | `uint192` | | push 24-byte value onto stack | -| 78 | PUSH25 | 3 | `。` | `uint200` | | push 25-byte value onto stack | -| 79 | PUSH26 | 3 | `。` | `uint208` | | push 26-byte value onto stack | -| 7A | PUSH27 | 3 | `。` | `uint216` | | push 27-byte value onto stack | -| 7B | PUSH28 | 3 | `。` | `uint224` | | push 28-byte value onto stack | -| 7C | PUSH29 | 3 | `。` | `uint232` | | push 29-byte value onto stack | -| 7D | PUSH30 | 3 | `。` | `uint240` | | push 30-byte value onto stack | -| 7E | PUSH31 | 3 | `。` | `uint248` | | push 31-byte value onto stack | -| 7F | PUSH32 | 3 | `。` | `uint256` | | push 32-byte value onto stack | -| 80 | DUP1 | 3 | `a` | `a, a` | | clone 1st value on stack | -| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | clone 2nd value on stack | -| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | clone 3rd value on stack | -| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | clone 4th value on stack | -| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | clone 5th value on stack | -| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | clone 6th value on stack | -| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | clone 7th value on stack | -| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | clone 8th value on stack | -| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | clone 9th value on stack | -| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | clone 10th value on stack | -| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | clone 11th value on stack | -| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | clone 12th value on stack | -| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | clone 13th value on stack | -| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | clone 14th value on stack | -| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | clone 15th value on stack | -| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | clone 16th value on stack | -| 90 | SWAP1 | 3 | `a, b` | `b, a` | | | -| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | | -| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | | -| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | | -| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | | -| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | | -| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | | -| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | | -| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | | -| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | | -| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | | -| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `。` | | LOG0(memory[ost:ost+len-1]) | -| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `。` | | LOG1(memory[ost:ost+len-1], topic0) | -| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `。` | | LOG2(memory[ost:ost+len-1], topic0, topic1) | -| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `。` | | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | -| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `。` | | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | -| A5-EF | _invalid_ | | | | | | -| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | -| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen-1] := returndata | | -| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] = returndata | same as DELEGATECALL, but does not propagate original msg.sender and msg.value | -| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `。` | | return mem[ost:ost+len-1] | -| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] := returndata | | -| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | -| F6-F9 | _invalid_ | | | | | | -| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] := returndata | | -| FB-FC | _invalid_ | | | | | | -| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `。` | | revert(mem[ost:ost+len-1]) | -| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | designated invalid opcode - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | | -| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `。` | | 傳送所有以太幣到 `addr`;如果在建立合約的相同交易中執行,則會銷毀合約 | diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/gas/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/gas/index.md deleted file mode 100644 index 230c5cf3df6..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/gas/index.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: 燃料和費用 -description: -lang: zh-tw ---- - -燃料對於以太坊網路至關重要。 燃料讓以太坊得以運轉,就像是汽車需要汽油行駛一樣。 - -## 基本資訊 {#prerequisites} - -為了更好地理解本頁面,建議你先閱讀[交易](/developers/docs/transactions/)和[以太坊虛擬機](/developers/docs/evm/)。 - -## 什麼是燃料? {#what-is-gas} - -燃料是衡量在以太坊網路上執行特定操作所需計算工作量的單位。 - -因為執行每一筆以太坊交易都需要計算資源,要使用這些資源就必須付費,以確保以太坊不會受到垃圾訊息的影響,或者卡在無窮計算迴圈中。 計算費用以燃料費的形式支付。 - -燃料費的計算方式是**執行操作消耗的燃料數量乘以每單位燃料費價格**。 無論交易成功與否,都要支付燃料費。 - -![展示需要燃料的以太坊虛擬機操作的圖表](./gas.png) _此圖表源於[以太坊的以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ - -燃料費須用以太坊原生貨幣以太幣 (ETH) 支付。 燃料價格一般會以 gwei 為單位,gwei 是以太幣的面額之一。 每一 gwei 等於一以太幣的十億分之一(0.000000001 以太幣或 10-9 以太幣)。 - -舉例來說,可以說你的燃料費為 1 gwei,而不是 0.000000001 以太幣。 - -「gwei」這個字是「giga-wei」的縮寫,意思是「10 億 wei」。 1 gwei 等於 10 億 wei。 Wei 本身(命名於 [Wei Dai](https://wikipedia.org/wiki/Wei_Dai),[b-money](https://www.investopedia.com/terms/b/bmoney.asp) 創建者)為以太幣之最小單位面額。 - -## 燃料費是如何計算的? {#how-are-gas-fees-calculated} - -提交交易時,可以設定你願意支付的燃料費數量。 藉由提供一定數量的燃料費,你實際上是在出價,以便將你的交易加入下一個區塊。 如果你的報價過低,驗證者就不太可能選擇將你的交易加入下一個區塊,代表你的交易可能會延遲或根本不會被執行。 如果你報價過高,則可能會浪費一些以太幣。 那麼,該如何判定支付多少費用呢? - -支付的燃料費分成兩個部分:`base fee` 及 `priority fee`(小費)。 - -`base fee` 是由協議設定的 - 你必須支付至少這個數量的以太幣,你的交易才會被視為有效。 `priority fee` 是你在基本費用上增加的額外小費,使你的交易對驗證者來說更有吸引力,以便讓他們選擇將其添加到下一個區塊中。 - -只支付 `base fee` 的交易在技術層面上是有效的,但不太可能加入下一個區塊中,因為此類交易未向驗證者提供任何激勵,因此驗證者不會選擇它而不管任何其他交易。 「適宜」的 `priority` 費依據發送交易時的網路使用情況而定 - 若當時需求非常高,你需要將你的 `priority` 費設高點,而需求低時則可以付少點。 - -舉例來說,假設 Jordan 要付給 Taylor 1 以太幣。 以太幣轉帳需要 21,000 單位的燃料,而基本費用為 10 gwei。 Jordan 支付 2 gwei 小費。 - -現在總燃料費為: - -`使用的單位燃料 * (基本費用 + 優先費)` - -其中,`base fee` 的值由協議設定,而 `priority fee` 的值則是由使用者設置,是給驗證者的小費。 - -範例:`21,000 * (10 + 2) = 252,000 gwei` (0.000252 以太幣)。 - -當 Jordan 發送該金額時,1.000252 以太幣將從 Jordan 的帳戶中扣除。 而 Taylor 將獲得 1.0000 以太幣。 驗證者將收到 0.000042 以太幣的小費。 0.00021 以太幣的 `base fee` 被銷毀。 - -### 基本費用 {#base-fee} - -每個區塊都有基本費用作為底價。 為了達成添加至區塊中的條件,提供的每單位燃料價格必須至少等於基本費用。 基本費用的計算與當前區塊無關,而是由當前區塊前面的區塊決定,讓交易費用對於使用者更具可預測性。 建立區塊時,此**基本費用被「銷毀」**,從流通中移除。 - -此基本費用透過一個公式計算,該公式比較前一個區塊的大小(所有交易使用的燃料用量)與目標區塊大小。 如果超出目標區塊大小,每個區塊的基本費用將最大增加 12.5%。 這種指數級增長讓區塊大小無限增加在經濟上不可行。 - -| 區塊編號 | 包含燃料 | 費用增幅 | 當前基本費用 | -| ---- | ----:| -----:| ----------:| -| 1 | 15M | 0% | 100 gwei | -| 2 | 30M | 0% | 100 gwei | -| 3 | 30M | 12.5% | 112.5 gwei | -| 4 | 30M | 12.5% | 126.6 gwei | -| 5 | 30M | 12.5% | 142.4 gwei | -| 6 | 30M | 12.5% | 160.2 gwei | -| 7 | 30M | 12.5% | 180.2 gwei | -| 8 | 30M | 12.5% | 202.7 gwei | - -依據上表 -- 要在 9 號區塊中建立一筆交易,錢包會讓使用者明確知道將交易添加到下一個區塊中的**最大基本費用**為 `current base fee * 112.5%` 或 `202.7 gwei * 112.5% = 228.1 gwei`。 - -值得注意的是,因為基本費用在區塊變滿之前增加的速度很快,我們不太可能看到大量已滿區塊連續出現。 - -| 區塊編碼 | 包含Gas費 | 增加費用 | 目前基本費用 | -| ---- | ------:| -----:| ---------------:| -| 30 | 30M | 12.5% | 2705.6 gwei | -| ... | ... | 12.5% | ... | -| 50 | 30M | 12.5% | 28531.3 gwei | -| ... | ... | 12.5% | ... | -| 100 | 30M | 12.5% | 10302608.6 gwei | - -### 優先費(小費) {#priority-fee} - -優先費(小費)激勵驗證者將交易添加進區塊中。 如果沒有小費,驗證者會發現開採空區塊在經濟上可行,因為他們收到的區塊獎勵相同。 少量的小費提供的激勵極弱,不足以讓驗證者將交易打包進區塊。 為了使交易比相同區塊中的其他交易優先執行,可以提供較高的小費,以超出其他競爭交易的報價。 - -### 最大費用 {#maxfee} - -要在網路上執行交易,使用者可以指定為了執行其交易他們願意支付的最大費用限制。 此可選參數亦稱為 `maxFeePerGas`。 執行交易所需的最大費用必須超過基本費用與小費的總和。 會向交易發送者退還最大費用與基本費用和小費之總合之間的差額。 - -### 區塊大小 {#block-size} - -每個區塊具 15M 單位燃料用量之目標大小,但區塊大小將跟隨網路需求增減,最大可達到 30M 燃料用量的區塊大小限制(目標區塊大小之兩倍)。 協議往往透過 _tâtonnement_ 流程達成 15M 的均衡區塊大小。 這意味著,如果區塊大小大於目標區塊大小,協議將增加下一個區塊的基本費用。 同樣,如果區塊大小小於目標區塊大小,協議將減少基本費用。 基本費用的調節額度與實際區塊大小與目標區塊大小之間的差異成比例。 [更多區塊相關資訊](/developers/docs/blocks/)。 - -### 實際計算燃料費 {#calculating-fees-in-practice} - -可明確聲明願意支付多少費用,以讓驗證者執行你的交易。 然而,大多數錢包提供商會自動設定推薦的交易費(基本費用 + 推薦的優先費),以降低使用者面臨的複雜度。 - -## 為何需要燃料費? {#why-do-gas-fees-exist} - -簡言之,燃料費可幫助保障以太坊網路安全。 透過要求為網路上執行的每次計算支付費用,可以阻止惡意行為者利用垃圾郵件攻擊網路。 為避免程式碼中出現意外或是惡意的無限迴圈或其他計算浪費,對於每筆交易,都必須設定一個關於可以使用程式碼執行中多少個計算步驟的限制。 計算的基本單位為「燃料」。 - -雖然交易包括限制,但任何在交易中未使用的燃料將會退還給使用者(即退還 `max fee - (base fee + tip)`)。 - -![顯示如何退還未使用燃料的圖表](../transactions/gas-tx.png) _此圖表源於[以太坊的以太坊虛擬機圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ - -## 什麼是燃料限制? {#what-is-gas-limit} - -燃料限制指的是你在一筆交易中最多願意使用多少燃料。 包含[智慧型合約](/developers/docs/smart-contracts/)的更複雜的交易需要進行更多計算工作,所以比起簡單的支付,它們需要更高的燃料限制。 標準以太幣轉帳需要的燃料限制為 21,000 單位燃料。 - -例如,如果為一次簡單的以太幣轉帳設定了 50,000 的燃料限制,以太坊虛擬機將消耗 21,000 單位燃料並退還剩餘的 29,000。 然而,如果你設定的燃料過低,例如為簡單的以太幣轉帳設定 20,000 的燃料限制,以太坊虛擬機將用盡 20,000 燃料單位嘗試完成交易,但最終交易會失敗。 隨後,以太坊虛擬機會還原全部變更,但因為驗證者已完成了相當於 20k 燃料單位的工作,所以會消耗這些燃料。 - -## 為何燃料費這麼高? {#why-can-gas-fees-get-so-high} - -燃料費高是因為以太坊人氣高。 如果需求過高,使用者必須支付更高的小費,以便超出其他使用者的交易報價。 小費越高,你的交易添加到下一個區塊中的可能性越大。 另外,越複雜的智慧型合約應用程式可能會執行大量操作,以支援其函式,這會消耗許多燃料。 - -## 燃料費用削減倡議 {#initiatives-to-reduce-gas-costs} - -以太坊的[可擴容性](/roadmap/)應最終解決一部分燃料費用問題,繼而讓該平台能夠每秒處理數千筆交易並實現全域擴容。 - -二層網路擴容為一項主要倡議,可大幅減低燃料費用並加強用戶體驗及可擴容性。 [更多二層網路擴容相關資訊](/developers/docs/scaling/#layer-2-scaling)。 - -## 監控燃料費 {#monitoring-gas-fees} - -若你想要監控燃料價格,以便能以更低的費用發送以太幣,你可以使用許多不同的工具,例如: - -- [Etherscan](https://etherscan.io/gastracker) _交易燃料費價格估算器_ -- [Blocknative ETH Gas Estimator](https://chrome.google.com/webstore/detail/blocknative-eth-gas-estim/ablbagjepecncofimgjmdpnhnfjiecfm) _燃料估算 Chrome 延伸模組,支援 0 類原始交易及 2 類 EIP-1559 交易。_ -- [Cryptoneur燃料Fees Calculator](https://www.cryptoneur.xyz/gas-fees-calculator) _在主網、Arbitrum、Polygon 上使用當地貨幣計算不同交易類型的燃料費。_ - -## 相關工具 {#related-tools} - -- [Blocknative's Gas Platform](https://www.blocknative.com/gas)_ 由 Blocknative 的全域記憶體池資料平臺支援的燃料估算應用程式介面平台_ - -## 了解更多 {#further-reading} - -- [以太坊燃料詳解](https://defiprime.com/gas) -- [減低智慧型合約之燃料消耗](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) -- [權益證明與工作量證明](https://blockgeeks.com/guides/proof-of-work-vs-proof-of-stake/) -- [開發者的燃料優化策略](https://www.alchemy.com/overviews/solidity-gas-optimization) -- [EIP-1559 文檔](https://eips.ethereum.org/EIPS/eip-1559)。 -- [Tim Beiko 的 EIP-1559 資源](https://hackmd.io/@timbeiko/1559-resources)。 diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/index.md deleted file mode 100644 index eca812e3bc0..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 以太坊開發文檔 -description: Ethereum.org 開發者文檔簡介。 -lang: zh-tw ---- - -本文檔旨在幫助你透過以太坊建置。 它介紹以太坊概念,解釋以太坊技術堆疊,並記錄關於更加複雜的應用程式及用例的高階主題。 - -此為開源社群的一項工作,歡迎在你認為有所幫助時提出新主題、增添新內容並提供範例。 所有文檔均可透過 GitHub 進行編輯 – 如果你不確定如何操作,[請遵循相關說明](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md)。 - -## 發展模組 {#development-modules} - -若這是你初次嘗試進行以太坊開發,我們建議你從頭開始並進行全面學習。 - -### 基礎主題 {#foundational-topics} - - - -### 以太坊權益質押 {#ethereum-stack} - - - -### 進階 {#advanced} - - diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ether/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ether/index.md deleted file mode 100644 index 9022bdd665b..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ether/index.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 以太幣簡介 -description: 開發者為你介紹以太幣加密貨幣 -lang: zh-tw ---- - -## 前置要求 {#prerequisites} - -為了讓你更容易理解本頁,建議你先通讀我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 - -## 什麼是加密貨幣? {#what-is-a-cryptocurrency} - -加密貨幣為交易媒介,其安全由以區塊鏈為基礎的帳本保障。 - -交易媒介被廣泛視作商品與服務的付款方式,帳本為用來追蹤交易的資料儲存。 區塊鏈技術讓使用者能夠在帳本上進行交易,且無需依賴任何信任之第三方來維持此帳本。 - -第一種加密貨幣為比特幣,由中本聰創建。 自從比特幣 2009 問世以來,人們已經在多個不同區塊鏈上開發了數千種加密貨幣。 - -## 甚麼是以太(ETH)? {#what-is-ether} - -**以太幣 (ETH)** 為一種加密貨幣,在以太坊網路上有諸多用途。 基本上,它是唯一可被接受的交易費支付形式,且在[合併](/roadmap/merge)之後,在主網上驗證和提出區塊會需要以太幣。 以太幣還可以作為[去中心化金融](/defi)借貸市場中的主要抵押物,非同質化代幣市場上的計帳單位,或作為提供服務或銷售真正的商品而獲得的付款,還有更多用途。 - -透過以太坊,開發者可以建立[**去中心化應用程式 (dapp)**](/developers/docs/dapps),而所有去中心化應用程式都共用同一算力池。 此共享算力池是有限的,因此以太坊需要一種機制來決定由誰使用它。 不然,某個去中心化應用程式可能會意外或惡意佔用全部網路資源,令其他人無法使用。 - -以太幣加密貨幣支援以太坊算力的定價機制。 當使用者想進行交易時,他們必須支付以太幣,使其交易在區塊鏈上獲得認可。 此等使用成本亦稱為[燃料費](/developers/docs/gas/),而燃料費取決於執行交易所需的算力及當時整個網路對於算力的需求。 - -因此,即使惡意去中心化應用程式提交一個無窮迴圈,交易將最終會用盡以太幣並終止,讓網路能回復正常。 - -人們[經常將以太坊與以太幣](https://www.reuters.com/article/us-crypto-currencies-lending-insight-idUSKBN25M0GP#:~:text=price%20of%20ethereum)[](https://abcnews.go.com/Business/bitcoin-slumps-week-low-amid-renewed-worries-chinese/story?id=78399845#:~:text=cryptocurrencies%20including%20ethereum)[混為一談](https://www.cnn.com/2021/03/14/tech/nft-art-buying/index.html#:~:text=price%20of%20ethereum) — 當提到「以太坊價格」時,他們指的是以太幣的市價。 - -## 鑄造以太幣 {#minting-ether} - -鑄造是指在以太坊帳本創建新以太幣的流程。 底層以太坊協議創建新以太幣,並且使用者無法創建以太幣。 - -鑄造以太幣,是用於獎勵提出的每個區塊,並在每個時期的檢查點上獎勵與達成共識相關的其他驗證者活動。 發行的以太幣總量取決於驗證者的數量以及他們質押的以太幣數量。 理想情況下,即所有驗證者都是誠實的且一直上線,總發行量會在驗證者之間平均分佈。但事實上它會因驗證者表現而有差異。 大約總發行量的 1/8 分配給區塊提交者,剩下的則分給其他驗證者。 區塊提交者也會收到交易費中的小費和最大可提取價值相關的收入,但這些來自循環中的以太幣,並不是新發行的。 - -## 銷毀以太幣 {#burning-ether} - -如同區塊獎勵過程中會創建新的以太幣一樣,以太幣也可以透過稱為「燃燒」的流程銷毀。 以太幣銷毀後,將從流通中永久移除。 - -以太坊上的每筆交易中都有以太幣銷毀。 當使用者為交易支付費用時,透過網路設定的基本燃料費用會根據交易需求銷毀。 它與不同的區塊大小以及最大燃料費用結合起來,簡化了以太坊上的交易費的估算。 當網路需求較高時,[區塊](https://etherscan.io/block/12965263)可以銷毀的以太幣數量比鑄造數量更大,有效抵銷以太幣的發行。 - -銷毀基本費用會束縛區塊產生者操縱交易的能力。 舉例來說,若區塊產生者收到基本費用,他們可以免費添加自己的交易,並提高其他人的基本費用。 或者,他們可以在鏈外將基本費用退還給某些使用者,造成交易費市場更加不透明且複雜。 - -## 以太幣面額 {#denominations} - -由於以太坊上許多交易的價值很小,以太幣也就有了各種不同的面額,可做為較小的記帳單位。 其中,Wei 和 gwei 尤為重要。 - -Wei 為以太幣的最小面額,因而,許多技術實作,例如[以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf)等將在所有計算中以 Wei 為單位。 - -Gwei 是 giga-wei 的簡稱,常用來描述以太坊上的燃料費用。 - -| 面額 | 用以太幣表示的價值 | 常見用途 | -| ---- | ---------------- | ------- | -| Wei | 10-18 | 技術實作 | -| Gwei | 10-9 | 人類可讀燃料費 | - -## 傳送以太幣 {#transferring-ether} - -以太坊上的每筆交易都有一個 `value` 欄位,指定要從發送者地址傳送到接收者地址的以太幣數量,面額為 wei。 - -當接收者地址為[智慧型合約](/developers/docs/smart-contracts/)時,在智慧型合約執行其程式碼後,傳送之以太幣可用於支付燃料費用。 - -[更多交易相關資訊](/developers/docs/transactions/) - -## 查詢以太幣 {#querying-ether} - -使用者能透過檢視帳戶的 `balance` 欄位來查詢任何[帳戶](/developers/docs/accounts/)的以太幣餘額,該欄位顯示面額為 wei 的以太幣持有量。 - -[Etherscan](https://etherscan.io) 為一種人氣工具,可透過網路應用程式檢視地址餘額。 例如,[此 Etherscan 頁面](https://etherscan.io/address/0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae)顯示以太坊基金會的餘額。 也可使用錢包或者透過直接向節點發送請求查詢帳戶餘額。 - -## 衍生閱讀 {#further-reading} - -- [定義以太幣與以太坊](https://www.cmegroup.com/education/courses/introduction-to-ether/defining-ether-and-ethereum.html) – _CME Group_ -- [以太坊白皮書](/whitepaper/):以太坊初始提案。 該文件包含對以太幣的描述及創建以太幣的動機。 -- [Gwei 計算機](https://www.alchemy.com/gwei-calculator):使用此 Gwei 計算機輕鬆轉換 wei、gwei 和以太幣。 只需輸入任意數量的 wei、gwei 或以太幣即可自動計算轉換後的數值。 - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ethereum/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ethereum/index.md deleted file mode 100644 index ba3941f4ab6..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/intro-to-ethereum/index.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: 以太坊簡介 -description: 去中心化應用程式開發者介紹以太坊核心概念。 -lang: zh-tw ---- - -## 甚麼是區塊鏈? {#what-is-a-blockchain} - -區塊鏈是一個公共資料庫,在網路中的許多電腦之間更新和共享。 - -「區塊」是指儲存在連續群組(即「區塊」)中的資料及狀態。 若你給其他人發送以太幣,交易資料須添加至區塊後才算交易成功。 - -「鏈」指的是每個區塊透過加密方式引用上一個區塊。 換言之,區塊連結在一起。 無法變更區塊內的資料,除非對其後所有區塊進行變更,這需要整個網路達成共識。 - -網路上的所有電腦必須對所有新區塊及整條區塊鏈達成一致。 此等電腦稱為「節點」。 節點確保與區塊鏈互動的每個人具相同資料。 為了達成這種分佈式共識,區塊鏈需要一共識機制。 - -以太坊採用[權益證明共識機制](/developers/docs/consensus-mechanisms/pos/)。 任何想將新區塊添加至區塊鏈的人都必須質押以太幣(以太坊的原生貨幣)作為抵押品並運行驗證者軟體。 接著,這些「驗證者」會被隨機選取以提出區塊,區塊由其他驗證者檢查並添加到區塊鏈上。 以太坊有獎勵及懲罰制度,以激勵參與者保持誠實並儘可能持續上線。 - -如果想瞭解區塊鏈資料是如何被雜湊後並附加到區塊參考的歷史記錄中,歡迎查看這個由 Anders Brownworth 製作的[示範](https://andersbrownworth.com/blockchain/blockchain),並觀看附上的影片。 - -觀看 Anders 解釋區塊鏈中雜湊的影片: - - - -## 甚麼是以太坊(Ethereum)? {#what-is-ethereum} - -以太坊是一條嵌入了電腦的區塊鏈。 它是以去中心化、無需許可、抗審查的方式建立應用程式和組織的基礎。 - -以太坊宇宙中有一臺單獨的規範電腦(稱為以太坊虛擬機,EVM),網路上的所有參與者都對其狀態達成共識。 所有以太坊網路參與者(每個以太坊節點)都保存有此電腦之狀態的副本。 此外,任何參與者能向此電腦廣播執行任意計算的請求。 每當此類請求被廣播時,網路上的其他參與者將確認、驗證並完成(「執行」)此計算。 此等執行將引起以太坊虛擬機狀態變化,而狀態變化將被提交並傳播至整個網路。 - -計算請求亦稱為交易請求;所有交易的紀錄及以太坊虛擬機的當前狀態儲存於區塊鏈上,而區塊鏈由所有節點儲存並達成共識。 - -加密機制確保一旦交易被驗證為有效並添加至區塊鏈上,以後就無法被篡改。 此相同機制也確保所有交易是透過相同的「權限」簽署並執行(除了 Alice 本人外,任何人都不應該能從她的帳戶發送數位資產)。 - -## 什麼是以太幣? {#what-is-ether} - -**以太幣 (ETH)** 是以太坊的原生加密貨幣。 以太坊的作用是提供一個計算市場。 此類市場為參與者提供經濟獎勵,激勵其驗證並執行交易請求,並且向網路提供計算資源。 - -任何廣播交易請求的參與者還必須給網路提供一定數量的以太幣,作為賞金。 網路將銷毀部分賞金並將餘下的獎勵給最終驗證交易、執行交易、將交易提交至區塊鏈及廣播交易至網路的任何人。 - -支付的以太幣數量對應於執行此計算所需的資源。 這些賞金也能阻止惡意參與者蓄意透過請求執行無限計算或其他資源密集類型的指令碼來堵塞網路,因為惡意參與者必須支付使用計算資源的費用。 - -以太幣也用來為網路提供加密經濟學安全性,主要有以下三種方式:1) 作為一種獎勵方式,獎勵提交區塊或檢舉其他驗證者不誠實行為的驗證者;2) 由驗證者質押,作為對抗不誠實行為的抵押品 - 如果驗證者嘗試從事不良行為,則它們的以太幣可能會被銷毀;3) 用來衡量新提交區塊的「投票」,並輸入共識機制的分叉選擇部分。 - -## 什麼是智慧型合約? {#what-are-smart-contracts} - -實際上,參與者想請求在以太坊虛擬機上進行計算時,不用每次編寫新程式碼。 反之,應用程式開發者將程式(可重複使用的程式片段)上傳到以太坊虛擬機狀態中,使用者請求使用不同的參數來執行此類程式碼片段。 我們將此類上傳並執行的程式稱為網路智慧型合約。 - -簡單來說,你可以想像智慧型合約為一臺自動販賣機:一個指令碼,在使用某些參數呼叫時,若滿足特定條件,該指令碼會執行一些操作或計算。 舉例來說,如果呼叫者將以太幣發送給特定接收者,一個簡易的販賣智慧型合約可能會建立和指定某件數位資產的所有權。 - -使用區塊鏈作為其資料層,並為網路支付費用後,任何開發者能可以建立智慧型合約並發佈到網路。 任何使用者也能調用此智慧型合約以執行其程式碼,同樣也要向網路支付費用。 - -因此,透過智慧型合約,開發者能建立並部屬各種複雜程度且使用者對應的應用程式與服務,例如市場、金融工具、遊戲等。 - -## 術語 {#terminology} - -### 區塊鏈 {#blockchain} - -以太坊網路之歷史記錄中提交至網路上的所有區塊的順序。 有此名稱的原因是,每個區塊都包含對前一個塊的引用,這有助於維護所有區塊(以及精確歷史記錄)的排序。 - -### 以太幣 {#eth} - -**以太 (ETH)**以太坊原生加密貨幣. 使用者向其他使用者支付以太幣,以完成他們的程式碼執行請求。 - -[有關以太幣的更多資訊](/developers/docs/intro-to-ether/) - -### 以太坊虛擬機 {#evm} - -以太坊虛擬機為一臺全域虛擬電腦,所有以太坊網路參與者都儲存其狀態並達成共識。 任何參與者都能請求在以太坊虛擬機上執行任何程式碼;程式碼執行會改變以太坊虛擬機的狀態。 - -[更多以太坊虛擬機相關資訊](/developers/docs/evm/) - -### 節點 {#nodes} - -儲存以太坊虛擬機狀態的真實電腦。 節點互相通訊,以傳播關於以太坊虛擬機狀態及新出現狀態變化的資訊。 任何使用者還可以透過從節點廣播程式碼執行請求,請求執行程式碼。 以太坊網路本身為所有以太坊節點及其通信之彙總。 - -[更多詳情關於節點](/developers/docs/nodes-and-clients/) - -### 帳戶 {#accounts} - -以太幣儲存之處。 使用者可以初始化帳戶,將以太幣存入帳戶,並將其帳戶中的以太幣轉帳給其他使用者。 帳戶及帳戶餘額儲存於以太坊虛擬機中的一張龐大表格中;它們是以太坊虛擬機全部狀態的一部分。 - -[更多帳戶相關資訊](/developers/docs/accounts/) - -### 交易紀錄 {#transactions} - -「交易請求」為表示以太坊虛擬機上程式碼執行請求的正式術語,而「交易」為已完成的交易請求及相關的以太坊虛擬機狀態變化。 任何使用者都能從節點向網路廣播交易請求。 為了讓交易請求影響達成共識的以太坊虛擬機狀態,必須由其他節點驗證、執行此交易請求並「將其提交至網路上」。 執行任何程式碼都會改變以太坊虛擬機的狀態;提交時,此狀態變化將廣播至網路上的所有節點。 以下為一些交易範例: - -- 從我的帳戶發送 X 以太幣至 Alice 的帳戶。 -- 將一些智慧型合約程式碼發佈至以太坊虛擬機狀態中。 -- 使用 Y 參數來執行以太坊虛擬機中地址 X 處的智慧型合約的程式碼。 - -[更多詳情關於交易記錄](/developers/docs/transactions/) - -### 區塊 {#blocks} - -交易量非常龐大,因此交易按批次或區塊「提交」。 區塊通常包含數十乃至數百筆交易。 - -[更多區塊相關資訊](/developers/docs/blocks/) - -### 智慧型合約 {#smart-contracts} - -一段可重複使用的程式碼片段(程式),由開發者發佈至以太坊虛擬機狀態中。 任何人都可以透過發出交易請求來請求執行智慧型合約的程式碼。 因為開發者能藉由發佈智慧型合約向以太坊虛擬機中編寫任意可執行應用程式(遊戲、市場、金融工具等),此類合約也經常稱為 [Dapp 或去中央化應用程式](/developers/docs/dapps/)。 - -[了解更多關於智慧型合約的資訊](/developers/docs/smart-contracts/) - -## 了解更多 {#further-reading} - -- [以太坊白皮書](/whitepaper/) -- [以太坊到底是如何運作的?](https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369) - _Preethi Kasireddy_(**注意**:此資源仍有參考價值,但留意它是早於[以太網合併](/roadmap/merge)的文獻,因此引述的仍然是以太坊的工作量證明機制 - 以太坊實際上目前是由[權益證明](/developers/docs/consensus-mechanisms/pos)來保障安全) - -_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ - -## 相關教學影片 {#related-tutorials} - -- [以太坊開發者指南,第一部分](/developers/tutorials/a-developers-guide-to-ethereum-part-one/) _– 適合初學者的以太坊探索(使用 Python 和 web3.py)_ diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/networks/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/networks/index.md deleted file mode 100644 index cb17a8b9388..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/networks/index.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: 網路 -description: 以太坊網路及何處獲取測試網以太幣 (ETH) 測試應用程式之概觀。 -lang: zh-tw ---- - -以太坊網路是使用以太坊協議進行通訊的互聯計算機群組。 只存在一個以太坊主網,但可以建立符合相同協議規則的獨立網路以作為測試及開發用途。 有許多獨立的「網路」符合協議但不互相影響。 你甚至可以在自己的電腦本地建立一個網路,測試你的智慧型合約和 Web3 應用程式。 - -你的以太坊帳戶可以跨不同網路使用,但你的帳戶餘額及交易歷史記錄並不會跟著從以太坊主網轉移過去。 進行測試時,知道哪些網路可用及如何取得要試用的測試網以太幣是非常有用的。 一般來說,出於安全考量,並不推薦在測試網上再次使用主網帳戶,反之亦然。 - -## 基本資訊 {#prerequisites} - -在深入閱讀不同網路相關內容前,你應先了解[以太坊的基礎知識](/developers/docs/intro-to-ethereum/),因為測試網路會給你提供實惠、安全的以太坊版本以供測試。 - -## 公共網路 {#public-networks} - -公共網路可供世界上任何有網際網路連線的人訪問。 任何人都能在公共區塊鏈上讀取或創建交易並驗證被執行的交易。 對等節點間的共識決定了交易的打包和網路的狀態。 - -### 以太坊主網 {#ethereum-mainnet} - -主網為以太坊的主要公共生產區塊鏈,也為實際交易發生於分佈式帳本之所在。 - -當人們和交易所討論以太幣價格時,討論的是主網以太幣。 - -### 以太坊測試網 {#ethereum-testnets} - -除主網外,還有一些公共測試網。 應用程式開發者或智慧型合約開發者使用測試網來測試協議升級,也用於在部署到主網之前在一個類生產環境中測試潛在的智慧型合約。 可將主網與測試網類比於生產伺服器與暫置伺服器。 - -部署至主網前,應在測試網上測試你編寫的所有合約程式碼。 在整合了智慧型合約的去中心化應用程式中,大部分專案都有部署到測試網的版本。 - -大部分測試網一開使都使用權威證明共識機制。 這表示將挑選出一小部分節點驗證交易並創建新區塊 – 並在此過程中質押其身分。 或者,有些測試網採用開放的權益證明共識機制,任何人都可以測試驗證者的運行狀況,就像在以太坊主網上一樣。 - -測試網上的以太幣原本應該是沒有實際價值的;然而,已經有為取得一些稀少或難以獲得的測試網以太幣而建立的市場。 因為要和以太坊(即使在測試網上)實際互動需要以太幣,多數人透過水龍頭免費獲得測試網以太幣。 多數水龍頭為 Web 應用程式,你可以在其中輸入你請求發送以太幣的地址。 - -#### 我該使用哪個測試網? - -目前用戶端開發者維護的兩個公共測試網分別為 Sepolia 及 Goerli。 Sepolia 是合約和應用程式開發者用來測試其應用程式的網路。 在 Goerli 網路上,協議開發者測試網路升級,質押者測試驗證者的運行狀況。 - -#### Sepolia {#sepolia} - -**Sepolia 是推薦的針對應用程式開發的預設測試網**。 Sepolia 網路使用經許可的驗證者集合。 此網路還很新,表示它的狀態和歷史記錄都非常小。 這表示網路可以快速完成同步,且在它上面運行節點需要的空間較少。 這對想要快速啟動節點並直接與網路互動的使用者來說非常有用。 - -- 封閉的驗證者集合,由用戶端和測試團隊控制 -- 新測試網,已部署的應用程式比其他測試網上少 -- 快速同步和運行節點所需硬碟空間極小 - -##### 資源 - -- [官網](https://sepolia.dev/) -- [GitHub](https://github.com/eth-clients/sepolia) -- [Otterscan](https://sepolia.otterscan.io/) -- [以太掃瞄器(Etherscan)](https://sepolia.etherscan.io) -- [Blockscout](https://eth-sepolia.blockscout.com/) - -##### 水龍頭 - -- [QuickNode 的 Sepolia 水龍頭](https://faucet.quicknode.com/drip) -- [Grabteeth](https://grabteeth.xyz/) -- [工作量證明水龍頭](https://sepolia-faucet.pk910.de/) -- [Coinbase 錢包水龍頭 | Sepolia](https://coinbase.com/faucets/ethereum-sepolia-faucet) -- [Alchemy Sepolia 水龍頭](https://sepoliafaucet.com/) -- [Infura Sepolia 水龍頭](https://www.infura.io/faucet) -- [Chainstack Sepolia 水龍頭](https://faucet.chainstack.com/sepolia-faucet) -- [以太坊生態系統水龍頭](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) - -#### Goerli_(長期支援)_ {#goerli} - -_注意:[Goerli 測試網已被棄用](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17)且將在 2023 年被 [Holesovice](https://github.com/eth-clients/holesovice) 取代。 請考慮將你的應用程式遷移到 Sepolia。_ - -Goerli 是測試驗證和質押的測試網。 Goerli 測試網對想要運行測試網驗證者的使用者開放。 因此,想測試協議升級的質押者,應在部署至主網前先使用 Goerli 測試。 - -- 開放的驗證者集合,質押者可以測試網路升級 -- 龐大的狀態,對於測試複雜智慧型合約的互動很有用 -- 同步時間更長,且需要更多儲存空間運行節點 - -##### 相關資源 - -- [官網](https://goerli.net/) -- [GitHub](https://github.com/eth-clients/goerli) -- [Etherscan](https://goerli.etherscan.io) -- [Blockscout](https://eth-goerli.blockscout.com/) - -##### 水龍頭 - -- [QuickNode 的 Goerli 水龍頭](https://faucet.quicknode.com/drip) -- [Grabteeth](https://grabteeth.xyz/) -- [工作量證明水龍頭](https://goerli-faucet.pk910.de/) -- [Paradigm 水龍頭](https://faucet.paradigm.xyz/) -- [Alchemy Goerli 水龍頭](https://goerlifaucet.com/) -- [All That Node Goerli 水龍頭](https://www.allthatnode.com/faucet/ethereum.dsrv) -- [Coinbase 錢包水龍頭 | Goerli](https://coinbase.com/faucets/ethereum-goerli-faucet) -- [Chainstack Goerli 水龍頭](https://faucet.chainstack.com/goerli-faucet) - -要在 Goerli 測試網上啟動驗證者,請使用 ethstaker 的[「cheap goerli validator(實惠的 goerli 驗證者)」啟動面板](https://goerli.launchpad.ethstaker.cc/en/)。 - -### 二層網路測試網 {#layer-2-testnets} - -[二層網路 (L2)](/layer-2/) 是個統稱,描述一組特定的以太坊擴容方案。 二層網路是獨立的區塊鏈,拓展了以太坊並繼承了以太坊的安全保證。 二層網路測試網通常與以太坊公共測試網緊密相關。 - -#### Arbitrum Goerli {#arbitrum-goerli} - -[Arbitrum](https://arbitrum.io/) 的測試網。 - -##### 水龍頭 - -- [Chainlink 水龍頭](https://faucets.chain.link/) - -#### Optimistic Goerli {#optimistic-goerli} - -[Optimism](https://www.optimism.io/) 的測試網。 - -##### 水龍頭 - -- [Paradigm 水龍頭](https://faucet.paradigm.xyz/) -- [Coinbase 錢包水龍頭 | Optimism Goerli](https://coinbase.com/faucets/optimism-goerli-faucet) - -#### Starknet Goerli {#starknet-goerli} - -[Starknet](https://www.starknet.io) 的測試網。 - -##### 水龍頭 - -- [Starknet 水龍頭](https://faucet.goerli.starknet.io) - -## 私人網路 {#private-networks} - -若節點未連接到公共網路 (即主網或測試網),則以太坊網路就是一個 私人網路。 在此情況下,私人僅表示保留或隔離,而非受保護或安全。 - -### 發展網路 {#development-networks} - -開發以太坊應用程式時,最好在部署前先在私人網路上執行,瞭解其運作情況。 類似於進行網頁開發時,在自己的電腦上建立本機伺服器,你可以建立本機區塊鏈實例來測試你的去中心化應用程式。 與公共測試網相比,這可以大幅提升迭代速度。 - -有些專門輔助專案和工具可以使用。 深入瞭解[開發網路](/developers/docs/development-networks/)的資訊。 - -### 聯盟網路 {#consortium-networks} - -共識過程由預先定義的一組受信任節點控制。 舉例來說,在知名學術機構組成的私人網路中,每個機構管理單節點,區塊由網路中達到閾值數量的簽署人驗證。 - -如果說公共以太坊網路是公共網際網路,那麼聯盟網路就是私有內部網路。 - -## 相關工具 {#related-tools} - -- [Chainlist](https://chainlist.org/) _是將錢包與提供者連結到適當鏈 ID 與網路 ID 的以太坊虛擬機網路的清單_ -- [採用以太坊虛擬機 (EVM) 的鏈](https://github.com/ethereum-lists/chains) _Github 鏈中繼資料存放庫,支援 Chainlist_ - -## 衍生閱讀 {#further-reading} - -- [提案:可預測的以太坊測試網生命週期](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17) -- [以太坊測試網的演進](https://etherworld.co/2022/08/19/the-evolution-of-ethereum-testnet/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/transactions/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/transactions/index.md deleted file mode 100644 index fe0c577f705..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/transactions/index.md +++ /dev/null @@ -1,221 +0,0 @@ ---- -title: 交易 -description: 以太坊交易概觀 – 運作原理、資料結構以及如何透過應用程式發送。 -lang: zh-tw ---- - -交易是帳戶發出的帶密碼學簽章的指令。 帳戶將發起交易以更新以太坊網路的狀態。 最簡單的交易是將以太幣從一個帳戶轉帳到另一個帳戶。 - -## 前置要求 {#prerequisites} - -為了讓你更容易理解本頁,建議你先閱讀[帳戶](/developers/docs/accounts/)及我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 - -## 什麼是交易? {#whats-a-transaction} - -以太坊交易是指由外部帳戶發起的操作,換句話說,此帳戶是由人而不是智慧型合約管理的帳戶。 例如,如果 Bob 發送給 Alice 1 以太幣,Bob 的帳戶必須扣除,Alice 的帳戶必須存入。 此更改狀態的操作發生在交易中。 - -![顯示交易導致狀態變化的圖表](./tx.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ - -交易會改變以太坊虛擬機的狀態,須廣播至整個網路。 任何節點都可以廣播要在以太坊虛擬機上執行的交易請求;之後驗證者將執行交易並將引起的狀態變化傳播到網路上的其他節點。 - -交易需要支付費用並需要添加至經過驗證的區塊中。 為了讓本文更好理解,我們會在其他地方講解燃料和驗證。 - -提交的交易包括下列資訊: - -- `from` – 發送者(簽署交易者)的地址。 這會是外部帳戶,因為合約帳戶無法發送交易。 -- `to` – 接收地址(若為外部帳戶,交易將會轉移金額。 如果為合約帳戶,交易將執行合約程式碼) -- `signature` – 發送者的識別碼。 當發送者以私密金鑰簽署交易並確認發送者已授權此交易时,就會產生此簽章。 -- `nonce` - 用來表示帳戶中交易編號的按順序遞增計數器 -- `value` – 發送者轉帳至接收者的以太幣數量(面額為 WEI,1 以太幣等於 10 的 18 次方 wei) -- `input data` –可選欄位,可填入任意資料 -- `gasLimit` – 交易可以使用的最大燃料單位數量。 [以太坊虛擬機](/developers/docs/evm/opcodes)指定了每個計算步驟的所需燃料單位 -- `maxPriorityFeePerGas` - 已使用燃料的最高價格,可作為給驗證者的小費 -- `maxFeePerGas` - 願意為交易支付的每單位燃料的最高費用(包含 `baseFeePerGas` 和 `maxPriorityFeePerGas`) - -燃料指請驗證者處理交易所需的計算。 使用者必須為計算支付費用。 `gasLimit` 和 `maxPriorityFeePerGas` 決定支付給驗證者的最高交易費。 [更多燃料相關資訊](/developers/docs/gas/)。 - -交易物件看起來有些像以下內容: - -```js -{ - from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", - to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a", - gasLimit: "21000", - maxFeePerGas: "300" - maxPriorityFeePerGas: "10" - nonce: "0", - value: "10000000000", -} -``` - -但交易物件需要使用發送者的私密金鑰簽署。 這證明交易只可能來自發送者,而不是以欺詐方式發送。 - -Geth 之類的以太坊用戶端將處理此簽署過程。 - -[JSON-RPC](/developers/docs/apis/json-rpc) 呼叫範例: - -```json -{ - "id": 2, - "jsonrpc": "2.0", - "method": "account_signTransaction", - "params": [ - { - "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db", - "gas": "0x55555", - "maxFeePerGas": "0x1234", - "maxPriorityFeePerGas": "0x1234", - "input": "0xabcd", - "nonce": "0x0", - "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", - "value": "0x1234" - } - ] -} -``` - -回應範例: - -```json -{ - "jsonrpc": "2.0", - "id": 2, - "result": { - "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", - "tx": { - "nonce": "0x0", - "maxFeePerGas": "0x1234", - "maxPriorityFeePerGas": "0x1234", - "gas": "0x55555", - "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", - "value": "0x1234", - "input": "0xabcd", - "v": "0x26", - "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e", - "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", - "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e" - } - } -} -``` - -- `raw` 是[遞迴長度前綴 (RLP)](/developers/docs/data-structures-and-encoding/rlp) 編碼形式的已簽署交易 -- `tx` 是 JSON 形式的已簽署交易 - -交易具備簽章雜湊值,因此可通過加密技術證明交易來自發送者並提交至網路。 - -### 資料欄位 {#the-data-field} - -大多數交易從外部帳戶存取合約。 大部分合約都用 Solidity 寫成,並根據[應用程式介面 (ABI)](/glossary/#abi) 解譯其資料欄位。 - -前四個字節位元組使用函式名稱及參數的雜湊值指定要呼叫的函式。 有時候可以從使用[此資料庫](https://www.4byte.directory/signatures/)識別選擇器中的函式。 - -calldata 的剩餘部分是參數,[依據 ABI 規範中的說明編碼](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding)。 - -例如,我們來看下[這筆交易](https://etherscan.io/tx/0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1)。 使用 **Click to see More** 檢視 calldata。 - -函式選擇器為 `0xa9059cbb`。 一些[已知的函式具有此簽章](https://www.4byte.directory/signatures/?bytes4_signature=0xa9059cbb)。 在這個例子中,[合約的原始程式碼](https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48#code)已經上傳到 Etherscan,所以我們知道函式是 `transfer(address,uint256)`。 - -其餘資料如下所示: - -``` -0000000000000000000000004f6742badb049791cd9a37ea913f2bac38d01279 -000000000000000000000000000000000000000000000000000000003b0559f4 -``` - -根據 ABI 規範,應用程式介面中的整數值(例如地址,20 字節位元組的整數)顯示為 32 字節位元組的字,並且前面用 0 來填補。 所以我們知道 `to` 地址為 [`4f6742badb049791cd9a37ea913f2bac38d01279`](https://etherscan.io/address/0x4f6742badb049791cd9a37ea913f2bac38d01279)。 `value` 為 0x3b0559f4 = 990206452。 - -## 交易類型 {#types-of-transactions} - -以太坊上有幾種不同類型的交易: - -- 一般交易:從一個帳戶至另一個帳戶的交易。 -- 合約部署交易:沒有「to」地址的交易,其資料欄供合約程式碼所用。 -- 合約執行:與部署的智慧型合約互動的交易。 在本例中,「to」地址為智慧型合約的地址。 - -### 關於燃料 {#on-gas} - -如上所述,執行交易需要花費[燃料](/developers/docs/gas/)。 簡單的轉帳交易需要 21000 單位燃料。 - -所以,若 Bob 要以 190 gwei 的 `baseFeePerGas` 還有 10 gwei 的 `maxPriorityFeePerGas` 給 Alice 發送 1 以太幣,Bob 將需要支付以下費用: - -``` -(190 + 10) * 21000 = 4,200,000 gwei ---或者-- -0.0042 以太幣 -``` - -Bob 的帳戶會被扣除 **-1.0042 以太幣**(1 以太幣給 Alice + 0.0042 以太幣用來支付燃料費) - -Alice 的帳戶將存入 **+1.0 以太幣** - -基本費用將銷毀 **-0.00399 以太幣** - -驗證者將保留 **+0.000210 以太幣**的小費 - - -![顯示如何退還未使用燃料的圖表](./gas-tx.png) _此圖源於[以太坊EVM圖解](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ - -任何交易中未使用的燃料都會退還給使用者帳戶。 - -### 智慧型合約互動 {#smart-contract-interactions} - -任何涉及智慧型合約的交易都需要燃料。 - -智慧型合約也可以包含稱為 [`view`](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) 或 [`pure`](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions) 的函數,而不會改變合約的狀態。 因此,從外部帳戶調用這些函數不需要任何燃料。 此場景的底層遠端程序調用 [`eth_call`](/developers/docs/apis/json-rpc#eth_call) - -與使用 `eth_call` 存取不同,這些 `view` 或 `pure` 函數也通常被內部調用(即從合約本身調用或從另一個合約調用),這會消耗燃料。 - -## 交易的生命週期 {#transaction-lifecycle} - -一旦交易被提交,就會發生以下情況: - -1. 透過加密方式生成交易雜湊值: `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` -2. 然後該交易會廣播到網路並添加到交易池中,交易池中包含了其他所有等待中的網路交易。 -3. 為了要驗證交易並使交易「成功」,驗證者必須選擇你的交易並將它打包進區塊中。 -4. 隨著時間推移,含有你交易的區塊會被升級為「已證明」,然後是「最終化」。 這些升級進一步確定 你的交易已經成功且永遠不會被更改。 當區塊「最終化」後,就僅可能被網路層級的攻擊變更, 此類攻擊需要花費數十億美元。 - -## 視訊示範 {#a-visual-demo} - -觀看 Austin 為你講解交易、燃料和挖礦。 - - - -## Typed Transaction Envelope 交易 {#typed-transaction-envelope} - -以太坊最初有一種形式的交易。 每筆交易都包含 nonce、gas price、gas limit、to address、value、data、v、r 與 s。 這些欄位均為 [RLP 編碼](/developers/docs/data-structures-and-encoding/rlp/),看上去像是以下內容: - -`RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` - -以太坊不斷演進以支援多種交易類型,以便在實作存取清單和 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 等新功能時不會影響原有交易形式。 - -[EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) 是支援此類行為的協議。 交易的解釋如下: - -`TransactionType || TransactionPayload` - -其欄位定義如下: - -- `TransactionType` - 介於 0 和 0x7f 之間的數字,代表總計 128 種可能的交易類型。 -- `TransactionPayload` - 由交易類型定義的任意字節位元組陣列。 - -根據 `TransactionType` 值,交易可以分類為 - -1. **類型 0(傳統)交易:**自以太坊推出以來使用的原始交易格式。 它們不包括 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 的功能,例如動態燃料費計算或智慧型合約的存取清單。 傳統交易缺少在序列化形式中指示交易類型的特定前綴,在使用[遞迴長度前綴 (RLP) ](/developers/docs/data-structures-and-encoding/rlp)編碼時,該前綴以位元組 `0xf8` 開始。 這些交易的 TransactionType 值為 `0x0`。 - -2. **類型 1 交易:**在 [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) 中引入作為以太坊[柏林升級](/history/#berlin)的一部分,這些交易包含一個 `accessList` 參數。 此清單指定了交易期望存取的地址和儲存金鑰,有助於潛在降低涉及智慧型合約的複雜交易的[燃料](/developers/docs/gas/)成本。 EIP-1559 的費用市場變化不會包含在類型 1 交易中。 類型 1 交易也包含一個 `yParity` 參數,該參數可以是 `0x0` 或 `0x1`,表示 secp256k1 簽章的 y 值的奇偶性。 此類交易透過開頭的位元組 `0x01` 開頭辨識,其 TransactionType 值為 `0x1`。 - -3. **類型 2 交易**,通常稱為 EIP-1559 交易,是以太坊[倫敦升級](/history/#london)裡 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 中引入的交易。 這類交易已成為以太坊網路上的標準交易類型。 這些交易引入了一種新的費用市場機制,透過將交易費用分為基本費用和優先費來提高可預測性。 這些交易的開頭為位元組 `0x02`,並包含 `maxPriorityFeePerGas` 和 `maxFeePerGas` 等欄位。 類型 2 交易因其靈活性和效率而成為預設交易,在網路高度擁塞期間尤其受到青睞,因為它們能夠幫助使用者更好地預測及管理交易費用。 這些交易的 TransactionType 值為 `0x2`。 - - - -## 衍生閱讀 {#further-reading} - -- [EIP-2718:Typed Transaction Envelope 交易](https://eips.ethereum.org/EIPS/eip-2718) - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ - -## 相關主題 {#related-topics} - -- [帳戶](/developers/docs/accounts/) -- [以太坊虛擬機](/developers/docs/evm/) -- [Gas](/developers/docs/gas/) diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/web2-vs-web3/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/web2-vs-web3/index.md deleted file mode 100644 index d98309a961b..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/web2-vs-web3/index.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Web2 vs Web3 -description: -lang: zh-tw ---- - -Web2 指的是目前我們大多人熟知的網際網路。 網際網路由各類公司主導,透過提供服務來換取你的個人資料。 在以太坊背景下,Web3 指的是在區塊鏈上運行的去中心化應用程式。 這類應用程式,讓任何人無需出售自己的個人資料即可參與進來。 - -正在找尋找更適合初學者的資源? 請參閱我們的 [web3 簡介](/web3/)。 - -## Web3 優點 {#web3-benefits} - -很多 Web3 開發者選擇建立去中心化應用程式,是因為以太坊固有的去中心化優點: - -- 任何網路中的使用者,都擁有使用服務的權限,換句話說,使用服務不需要任何權限。 -- 沒有任何人能夠阻止或限制你使用服務。 -- 支付是透過原生代幣以太幣建立的。 -- 以太坊是圖靈完備的,這表示你可以在上面寫許多程式。 - -## 實務對比 {#practical-comparisons} - -| Web2 | Web3 | -| ------------------------- | --------------------------------------- | -| Twitter 可以審查任何帳戶或推文 | Web3 推文不可被審查,因為採用了去中心化控制 | -| 支付服務商可以決定不允許對某些類型的工作支付 | Web3 支付應用程式不需要任何個人資料,且無法阻止支付 | -| 零工經濟應用程式之服務伺服器會當機並影響勞動者收入 | Web3 伺服器不會當機 – 由上千台電腦組成的去中心化網路以太坊是它們的後端 | - -這不代表所有服務都需要變成去中心化應用程式。 以下範例將說明 web2 和 web3 服務的主要差異。 - -## Web3 的限制 {#web3-limitations} - -Web3 目前的一些限制: - -- 可擴容性 -- 由於去中心化,Web3 上的交易通常較慢。 狀態變化(例如支付),需要經過節點處理並傳播到整個網路上。 -- 使用者體驗 -- 與 Web3 應用程式互動可能需要額外的步驟、軟體和培訓。 這可能成為廣泛採納的一大障礙。 -- 可存取性 – 由於未整合到現代網路瀏覽器中,大多數使用者難以使用 Web3。 -- 成本 -- 因高成本,多數成功的去中心化應用程式僅將極少數程式碼放於區塊鏈。 - -## 中心化與去中心化 {#centralization-vs-decentralization} - -下表大致列出了中心化與去中心化數位網路的優點與缺點。 - -| 中心化系統 | 去中心化系統 | -| ------------------------------------------------------------ | -------------------------------------------------------------------- | -| 網路直徑小(所有參與者連結到一個中央機構);資訊傳播速度快,因為資訊由一個具大量計算資源的中央機構處理。 | 網路上距離最遙遠的參與者也許是近在咫尺。 資訊在整個網路廣播所需的時間可能較長。 | -| 通常效能更高(吞吐量更大,使用的計算資源總量更少)且更方便實作。 | 通常效能較低(吞吐量較小,使用的計算資源總量更多)且實作起來更為複雜。 | -| 出現資料衝突時,解決方案簡單明瞭:最終事實來源就是中央機構。 | 如果對等節點針對參與者要同步的資料狀態做出相互衝突的聲明,解決爭議時就需要一個通常較為複雜的協議。 | -| 單點失敗:惡意行為者也許能夠透過攻擊中心機構讓網路當機。 | 無單點失敗:即使相當一部分參與者遭受攻擊/下線,網路依舊能持續正常運作。 | -| 網路參與者之間的協調更加簡單,且由中央機構處理。 中央機構能強迫網路參與者採納升級、協議更新等等,幾乎不會產生矛盾摩擦。 | 協調通常較困難,因為沒有任何一家代理在網路層面決策、協議升級等方面有最終決定權。 最壞情況下,如果對協議變更無法達成共識,網路可能分裂。 | -| 中央機構能審查資料,可能會阻斷部分網路與網路其他部分互動。 | 審查難度極大,因為資訊有多種途徑可以傳播到整個網路。 | -| 網路參與者受中央機構控制。 | 任何人都能參與網路,不存在任何「守門人」。 理想情況下,參與成本極低。 | - -注意,這些概況可能並不適用於每個網路。 此外實際當中,網路的中心化與去中心化程度是一個範圍;沒有任何一個網路是完全中心化或完全去中心化的。 - -## 衍生閱讀 {#further-reading} - -- [什麼是 Web3?](/web3/) - _ethereum.org_ -- [Web 3.0 應用程式的架構](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ -- [去中心化的意義](https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274) _2017 年 2 月 6日 - Vitalik Buterin_ -- [去中心化的重要性](https://medium.com/s/story/why-decentralization-matters-5e3f79f7638e) _2018 年 2 月 18 日 - Chris Dixon_ -- [什麼是 Web 3.0?它為什麼重要?](https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b) _2019 年 12 月 31 日 - Max Mersch 和 Richard Muirhead_ -- [為何我們需要 Web 3.0](https://medium.com/@gavofyork/why-we-need-web-3-0-5da4f2bf95ab) _2018 年 9 月 12 日 - Gavin Wood_ diff --git a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/wrapped-eth/index.md b/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/wrapped-eth/index.md deleted file mode 100644 index defbdf83881..00000000000 --- a/public/content/translations/zh-tw/13) Foundational Docs/developers/docs/wrapped-eth/index.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: 甚麼是包裝以太幣 (WETH) -description: 包裝以太幣 (WETH) 簡介 — 以太幣 (ETH) 的一種 ERC20 相容包裝函式。 -lang: zh-tw ---- - -# 包裝以太幣 (WETH) {#intro-to-weth} - -以太幣 (ETH) 是以太坊的主要貨幣。 以太幣有多種用途,例如質押、作為貨幣使用、以及支付計算所需要的燃料費。 **包裝以太幣實際上是以太幣的升級形式,具備許多應用程式和 [ERC-20 代幣](/glossary/#erc-20)(即以太坊上其他類型的數位資產)所需的額外功能。** 要與這些代幣互動,以太幣需要遵循與它們相同的規則,這些規則被稱為 ERC-20 標準。 - -為了彌合這一差距,包裝以太幣 (WETH) 應運而生。 **包裝以太幣是一種智慧型合約,讓你能夠存入任何數量的以太幣,並獲得同樣數量的符合 ERC-20 代幣標準的鑄造包裝以太幣**。 包裝以太幣是以太幣的一種表現形式,讓你能夠以 ERC-20 代幣的方式與其互動,而不是以原生資產以太幣的方式。 你會依然需要一些原生以太幣來支付燃料費,所以當你存入時請確保保留一些以太幣。 - -你也可以通過包裝以太幣智慧型合約將包裝以太幣換回以太幣。 你可以使用包裝以太幣智慧型合約贖回任意數量的包裝以太幣,而你會收到相同數量的以太幣。 存入的包裝以太幣會被銷毀,並從包裝以太幣的流通量中移除。 - -**流通中的以太幣有大概 3% 被鎖定在包裝以太幣代幣合約中**,令其成為其中一個最常用的 [智慧型合約](/glossary/#smart-contract)。 包裝以太幣對於與去中心化金融 (DeFi) 中的應用程式互動的使用者尤為重要。 - -## 為甚麼我們要把以太幣包裝成 ERC-20? {#why-do-we-need-to-wrap-eth} - -[ERC-20](/developers/docs/standards/tokens/erc-20/) 為可轉讓代幣定義了一個標準介面,讓所有人都可以建立能和以太坊生態系統中使用該標準的代幣和應用程式無縫互動的代幣。 因為**以太幣的出現早於 ERC-20 標準**,因此以太幣並不符合此規範。 這意味著**你無法簡單地**把以太幣和其他 ERC-20 代幣進行交換,或**無法在使用 ERC-20 標準的應用程式中使用以太幣。** 把以太幣包裝起來後,你可以進行以下操作: - -- **把以太幣換成其他 ERC-20 代幣**:你無法直接把以太幣換成其他 ERC-20 代幣。 包裝以太幣是一種符合 ERC-20 同質化代幣標準的以太幣表現形式,可以與其他 ERC-20 代幣進行交換。 - -- **在去中心化應用程式中使用以太幣**:因為以太幣與 ERC-20 標準不相容,開發者需要在去中心化應用程式中建立獨立的介面(一個用於以太幣,另一個用於 ERC-20 代幣)。 包裝以太幣消除了這一障礙,使開發者能夠在同一個去中心化應用程式中處理以太幣和其他代幣。 許多去中心化金融應用程式使用此標準,並建立了用於交換這些代幣的市場。 - -## 包裝以太幣 (WETH) 與以太幣 (ETH):有何不同? {#weth-vs-eth-differences} - -| | **以太幣 (ETH)** | **包裝以太幣 (WETH)** | -| --- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| 供應 | 以太幣的供應由以太坊協定管理。 以太幣的 [發行](/roadmap/merge/issuance) 由以太坊的驗證者在處理交易和建立區塊時進行。 | 包裝以太幣是一種 ERC-20 代幣,其供應由智慧型合約管理。 當合約接收到使用者存入的以太幣後,便會發行新的包裝以太幣;或者當使用者希望將包裝以太幣換回以太幣時,會將對應的包裝以太幣銷毀。 | -| 所有權 | 所有權是透過你的帳戶餘額由以太坊協定管理的。 | 包裝以太幣的所有權由包裝以太幣代幣智慧型合約管理,並由以太坊協定保障安全。 | -| 燃料 | 以太幣 (ETH) 是以太坊網路上針對計算的公認的支付單位。 燃料費以 gwei(以太幣的一種單位)來計價。 | 以包裝以太幣支付燃料費原生不受支援。 | - -## 常見問題 {#faq} - - - -你需要支付燃料費來使用包裝以太幣智慧型合約來兌換或贖回以太幣。 - - - - - -包裝以太幣通常被認為是安全的,因為它基於一個簡單且經過實證的智慧型合約。 包裝以太幣合約也已經經過正式驗證,這是以太坊上智慧型合約的最高安全標準。 - - - - - -除了本頁描述的 [包裝以太幣的規範化實作](https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2)外,還有其他變體存在於市場中。 這些可能是由應用程式開發者建立的自訂代幣,或在其他區塊鏈上發行的版本,可能會有不同的行為或具有不同的安全屬性。 **始終仔細檢查代幣資訊,以確認你正在與哪一種包裝以太幣實作進行互動。** - - - - - -- [以太坊主網](https://etherscan.io/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) -- [Arbitrum](https://arbiscan.io/token/0x82af49447d8a07e3bd95bd0d56f35241523fbab1) -- [Optimism](https://optimistic.etherscan.io/token/0x4200000000000000000000000000000000000006) - - - -## 延伸閱讀 {#further-reading} - -- [包裝以太幣究竟是什麼?](https://weth.tkn.eth.limo/) -- [Etherscan 上的包裝以太幣代幣資訊](https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2) -- [包裝以太幣的形式化驗證](https://zellic.io/blog/formal-verification-weth) diff --git a/public/content/translations/zh-tw/14) Community Pages/community/code-of-conduct/index.md b/public/content/translations/zh-tw/14) Community Pages/community/code-of-conduct/index.md deleted file mode 100644 index 177f12f87b4..00000000000 --- a/public/content/translations/zh-tw/14) Community Pages/community/code-of-conduct/index.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: 行為守則 -description: 我們在 ethereum.org 努力追求的基本標準。 -lang: zh-tw ---- - -# 行為守則 {#code-of-conduct} - -## 使命 {#mission} - -開發及維護最詳盡、最易存取的以太坊知識中心。 - -## 核心價值 {#values} - -Ethereum.org 致力於: - -- 教育,目標是幫助大家了解以太坊 -- 實現包容性 -- 實現可存取性 -- 專注於社群導向 -- 專注於以太坊底層技術及使用案例 -- 專注於以太坊概念與設計原則 - -## 我們不是 {#what-we-are-not} - -- 以太坊基金會的網站 -- 推廣投資或以任何形式牟取暴利的平臺 -- 認可個人專案,或為任何組織背書的平臺 -- 中心化及去中心化交易所,或其他任何形式的金融平臺 -- 提供投資建議或法律諮詢等的平臺 - -## 行為守則 {#code-of-conduct} - -### 承諾 {#pledge} - -開放參與是 ethereum.org 的核心精神。 我們的網站和社群由數千位貢獻者維護,只有當我們維持友好的參與環境時,這才可能實現。 為此,本網站的貢獻者承諾將為所有 ethereum.org 平臺及社群參與者維持一個零騷擾的環境。 Ethereum.org 社群歡迎和重視任何友善或想參與建設的人,無論年齡、是否殘疾、種族、性別特徵、性別認同、經驗水平、專業領域、教育、社會經濟地位、國籍、外觀、種族、宗教或任何其他方面的多樣性。 - -### 適用範圍 {#scope} - -此行為守則適用於所有 ethereum.org 空間(如 GitHub、Discord、Figma、Crowdin、Twitter 和其他線上平臺),且當社群在現實世界的公共場所(如:聚會、座談會及活動等等)時也同樣適用。 - -### 我們的標準 {#our-standards} - -為打造一個正向環境做出貢獻的行為範例: - -- 使用友好且包容的詞彙 -- 尊重各種不同的觀點和經驗 -- 優雅地接受和/或站在他人角度提供建設性批評 -- 心平氣和地處理衝突或分歧 -- 對其他社群成員展現同理心和包容心 -- 鼓勵和提倡社群中的新意見 - -不被允許的行為示例包括: - -- 人身暴力、威脅人身暴力或鼓勵任何形式的人身暴力 -- 使用帶有性暗示的言語或圖像,或令人反感的性關注 -- 冒充他人或以其他方式謊稱與某些人或組織有聯繫 -- 蓄意激怒、汙辱/貶低他人,以及人身或政治上的攻擊 -- 在公開或私人頻道中騷擾其他社群成員 -- 未經許可公開他人的私人資料,如實體住址或網路位址 -- 使用社交工程、詐騙或操控其他社群成員 -- 宣傳投資、代幣、專案或其他任何東西以獲得個人金錢上或非金錢上的利益 -- 用與主題無關的內容在伺服器洗版 -- 無視社群版主的要求或警告 -- 從事其他專業場合下不該出現的行為 - -### 檢舉 {#reporting} - -違反行為守則一般來說都會被社群看到,因為我們努力讓一切透明,以便社群成員能夠自我監督。 - -然而,如果發生了一些你覺得需要額外關注的事件,你可以向擁有版主身份者(如 discord guide)提出,使他們能協助調查和執行適當的回覆。 - -檢舉時,請儘可能附上詳細資訊,包括具體的例子與發生時間。 這有助於確保結果公平。 - -### 強製執行 {#enforcement} - -依據嚴重程度,違反行為守則者可能會收到警告、暫時停權或被永久踢出 ethereum.org 社群。 diff --git a/public/content/translations/zh-tw/14) Community Pages/community/events/index.md b/public/content/translations/zh-tw/14) Community Pages/community/events/index.md deleted file mode 100644 index 064c060c99c..00000000000 --- a/public/content/translations/zh-tw/14) Community Pages/community/events/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: 以太坊活動 -description: 如何加入以太坊社群。 -lang: zh-tw -hideEditButton: true ---- - -# 即將開始的活動 {#events} - -**每個月,世界各地都會舉辦重大的以太坊活動。**考慮參加你附近的活動,結識更多社群成員,了解就業機會,並培養新技能。 - - - -這是一個由我們社群所維護的部分活動清單。 若你知曉其他未於此清單列出的以太坊活動, [請幫忙新增](https://github.com/ethereum/ethereum-org-website/blob/dev/src/data/community-events.json)! - -## 以太坊聚會 {#meetups} - -沒看到適合你的活動嗎? 試試看加入以太坊聚會。 聚會是由以太坊愛好者團體所舉辦的小型活動 - 是對以太坊感興趣的同好們聚在一起的機會,一起談論並了解以太坊的各項進展。 - - - -有興趣舉辦自己的聚會嗎? 請查看 [BUIDL Network](https://consensys.net/developers/buidlnetwork/),這是個由 ConsenSys 為了幫助以太坊社群聚會而提出的提案。 - -這是一個由我們社群所維護的部分活動清單, 你可以從[這裡找到更多以太坊聚會。](https://www.meetup.com/topics/ethereum/) 若你知曉其他未於此清單列出的聚會, [請幫忙加入!](https://github.com/ethereum/ethereum-org-website/blob/dev/src/data/community-meetups.json) diff --git a/public/content/translations/zh-tw/14) Community Pages/community/get-involved/index.md b/public/content/translations/zh-tw/14) Community Pages/community/get-involved/index.md deleted file mode 100644 index e502f7648f7..00000000000 --- a/public/content/translations/zh-tw/14) Community Pages/community/get-involved/index.md +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: 我該如何參與? -description: 如何加入以太坊社群 -lang: zh-tw ---- - -# 我該如何參與? {#get-involved} - -以太坊社群裡包含了具有各種不同背景跟技術的人。 無論你是開發者、藝術家或是會計師,你總會找到方法參與我們的社群。 以下建議可幫助你踏出第一步。 - -由閱讀[行為守則](/community/code-of-conduct)中 ethereum.org 的使命與核心價值開始。 - -## 程式開發人員 {#developers} - -- 造訪 [ethereum.org/developers/](/developers/),瞭解和嘗試使用以太坊 -- 參加你附近的 [ETHGlobal](http://ethglobal.co/) 駭客松活動。 -- 留意[與你的專業領域或偏好的編程語言有關的專案](/developers/docs/programming-languages/) -- 觀看或參與[共識層與執行層的會議](https://www.youtube.com/@EthereumProtocol/streams) -- [以太坊生態系統支持計劃願望清單](https://esp.ethereum.foundation/wishlist/) - 以太坊生態系統支持計劃正積極尋找工具、文件和基礎設施領域的資助申請 -- [Web3Bridge](https://www.web3bridge.com/) - 加入有抱負的 Web3 社群,一起積極尋找、培訓和支持整個非洲數百名開發人員和社群成員 -- 加入[以太坊研發 Discord](https://discord.com/invite/VmG7Uxc) -- 加入[以太坊牧貓人組織的 Discord](https://discord.com/invite/Nz6rtfJ8Cu) - -## 研究人員和學術工作者 {#researchers-and-academics} - -你有數學、虛擬貨幣或者經濟學相關的學術背景嗎? 你可能會對以太坊生態中的一些前線工作有興趣。 - -- 加入[以太坊研發 Discord](https://discord.com/invite/VmG7Uxc) -- 撰寫或審查以太坊改進提案 - - 撰寫以太坊改進提案 - 1. 將你的想法提交至[以太坊魔法師協會](https://ethereum-magicians.org) - 2. 閱讀 [EIP-1](https://eips.ethereum.org/EIPS/eip-1) - **沒錯,就是指_整篇_文件。** - 3. 遵照 EIP-1 中的指示, 並在寫草稿時參考指示。 - - 了解如何成為[以太坊改進提案編輯](https://eips.ethereum.org/EIPS/eip-5069) - - 現在,你可以進行同行評審,審核其他人的以太坊改進提案! 請見[使用 `e-review` 標籤建立新提取請求](https://github.com/ethereum/EIPs/pulls?q=is%3Apr+is%3Aopen+label%3Ae-review)。 在 `discussion-to` 連結提供技術性回饋。 - - 參與[以太坊改進提案管理體系](https://github.com/ethereum-cat-herders/EIPIP) - - 加入[以太坊牧貓人組織的 Discord](https://discord.com/invite/Nz6rtfJ8Cu) - - [更多以太坊改進提案相關資訊](/eips/) -- [Challenges.ethereum.org](https://challenges.ethereum.org/) - 該網站中有一系列高回報研究賞金,你可在此賺取 $100,000 美金以上。 -- [Ethresear.ch](https://ethresear.ch) - 以太坊為研究而設的主要論壇,同時也是加密貨幣經濟學在世界上最有影響力的論壇。 -- [以太坊基金會研究線上問答](https://old.reddit.com/r/ethereum/comments/vrx9xe/ama_we_are_ef_research_pt_8_07_july_2022) - 由研究人員提供的問答系列。 當下階段開放時,任何人都可以提出問題。 -- [生態系統支援計劃的願望清單](https://esp.ethereum.foundation/wishlist/) - 以太坊生態系統支援計劃正在積極籌備資助申請的領域 -- [AllWalletDevs](https://allwallet.dev) - 讓以太坊開發者、設計師和有興趣的使用者,定期聚在一起並討論錢包的論壇 - -[探索更多活躍的研究領域](/community/research/)。 - -## 非技術性參與選項 {#non-technical} - -如果你不是程式開發人員,在以太坊中,你可能會不知道該從哪裡開始。 這裡提供了一些建議,還有一些為特定專業背景人士提供的資源。 - -### 在你所在城市籌備一場聚會 {#meetups} - -- 不知道從哪開始? [BUIDL 網路](https://consensys.net/developers/buidlnetwork/)幫得上忙。 - -### 撰寫以太坊相關的內容 {#write-content} - -- 以太坊需要好的作者用簡單易懂的文字讓人了解以太坊 -- 還沒準備好發表自己的文章? 可以考慮就社群資源中既有的內容進行協助,或者[提出有關 ethereum.org 的新內容建議](/contributing/)! - -### 值得留意的社群招募 {#take-notes} - -- 有很多開源的社群招募,眾多討論筆記更是一大助力。 如你對此有興趣,請加入[以太坊牧貓人組織 discord](https://discord.com/invite/Nz6rtfJ8Cu),並介紹你自己吧! - -### 把以太坊的內容翻譯成自己的母語 {#translate-ethereum} - -- ethereum.org 一直有個翻譯計畫,將網站和其他資源翻譯成不同語言 -- 從[這裡](/contributing/translation-program)了解參加的方法 - -### 運行一節點 {#run-a-node} - -跟數千名節點營運者一起讓以太坊進一步去中心化。 - -- [有關如何運行節點的詳細資訊](/developers/docs/nodes-and-clients/run-a-node/) - -### 質押你的以太幣 {#staking} - -透過質押你的以太幣來保護太坊網路並獲取酬勞。 - -- [更多權益質押相關訊息。](/staking/) - -### 支援專案 {#support-projects} - -以太坊生態系統正在進行一項任務,即尋找有益於公眾且有影響力的專案。 僅需非常小額的捐款,就能表達你對此的支援,從而實現重要工作。 - -- [Gitcoin](https://gitcoin.co/fund) -- [clr.fund](https://clr.fund/#/about) - -## 金融從業人員和會計師 {#financial-professionals} - -- 以太坊是「去中心化金融」生態系統的發源地 - 這是一個擁有各種協議與應用程式的網路,可以視為一種金融系統。 如果你是金融從業人員,可以到 [DeFi Llama](https://defillama.com/) 或 [DeFiPrime](https://defiprime.com) 查看我們的去中心化金融應用程式 -- 你是會計師? 以太坊的資產 - 以太幣、代幣、去中心化金融等 - 新興會計議題有很多。 你可以先查看一些旨在幫助加密貨幣使用者解決記帳問題和會計挑戰的專案計畫,例如 [Rotki](https://rotki.com/) - -## 產品經理 {#product-managers} - -- 以太坊生態系統需要你的才華! 很多公司都在招聘產品經理。 如你想開始為開放原始碼專案作貢獻,請聯絡[以太坊牧貓人](https://discord.com/invite/Nz6rtfJ8Cu)或 [RaidGuild](https://www.raidguild.org/) - -## 市場策劃人員 {#marketing} - -- 以太坊生態系統內設有非常多市場策劃和溝通人員的職位! - -## 以太坊工作 {#ethereum-jobs} - -**想在以太坊尋找工作?** - -- [ethereum.org 工作](/about/#open-jobs) -- [以太坊基金會職缺布告欄 (Lever)](https://jobs.lever.co/ethereumfoundation) -- [以太坊基金會職缺布告欄 (BambooHR)](https://ethereum.bamboohr.com/jobs/) -- [JobStash](https://jobstash.xyz) -- [加密貨幣相關工作](https://cryptocurrencyjobs.co/ethereum/) -- [在 ConsenSys 的職涯](https://consensys.net/careers/) -- [加密貨幣相關工作清單](https://cryptojobslist.com/ethereum-jobs) -- [與銀行無關的職缺布告欄](https://pallet.xyz/list/bankless/jobs) -- [Web3 工作](https://web3.career) -- [Web3 Army](https://web3army.xyz/) -- [加密谷工作](https://cryptovalley.jobs/) -- [以太坊工作](https://startup.jobs/ethereum-jobs) -- [CryptoJobster](https://cryptojobster.com/tag/ethereum/) - -## 加入去中心化自治組織 (DAO) {#decentralized-autonomous-organizations-daos} - -「DAO」是指去中心化自治組織。 這些群體會利用以太坊技術加速整合及合作。 例如,為了控制會員,他們會針對提案進行投票,或者管理質押池內的資產。 當去中心化自治組織仍維持在試驗狀態時,他們讓你有機會去尋找你認同的群體、合作者,然後在以太坊的社群內培養你的影響力。 [更多去中心化自治組織相關資訊](/dao/) - -- [DAOSquare](https://daosquare.io/) [@DAOSquare](https://twitter.com/DAOSquare) - _在科技界以外推廣去中心化自治組織的概念,並幫助大家透過此等組織創造價值_ -- [開發者去中心化自治組織](https://www.developerdao.com/) [@developer_dao](https://twitter.com/developer_dao) - _一個認為網際網路為集體所有的開發者社群_ -- [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _由一些協助開發 Web3 的自由工作者所組成的去中心化自治組織_ -- [HausDAO](https://daohaus.club) [@nowdaoit](https://twitter.com/nowdaoit) - _DAOhaus 的社群管理體系_ -- [LexDAO](https://lexdao.org) [@lex_DAO](https://twitter.com/lex_DAO) - _法律建設_ -- [Machi X](https://machix.com) [@MachiXOfficial](https://twitter.com/MachiXOfficial) - _藝術群體_ -- [MetaCartel Ventures](https://metacartel.xyz) [@VENTURE_DAO](https://twitter.com/VENTURE_DAO) - _投資 pre-seed 輪加密貨幣專案的風投基金_ -- [MetaGame](https://metagame.wtf) [@MetaFam](https://twitter.com/MetaFam) - _現實生活的 MMORPG 遊戲機制_ -- [MetaFactory](https://metafactory.ai) [@TheMetaFactory](https://twitter.com/TheMetaFactory) - _數字物理衣物品牌_ -- [MolochDAO](https://molochdao.com) [@MolochDAO](https://twitter.com/MolochDAO) - _一個致力於為以太坊發展提供資金的社群_ -- [Raid Guild](https://raidguild.org) [@RaidGuild](https://twitter.com/RaidGuild) - _Web3 建造者集中地_ - -無論何時、無論以何種方式,當你為 ethereum.org 出力時,請記得遵守 ethereum.org 的[行為守則](/community/code-of-conduct)! diff --git a/public/content/translations/zh-tw/14) Community Pages/community/grants/index.md b/public/content/translations/zh-tw/14) Community Pages/community/grants/index.md deleted file mode 100644 index 1133d58cfba..00000000000 --- a/public/content/translations/zh-tw/14) Community Pages/community/grants/index.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: 以太坊基金會和社群資助計劃 -description: 一個以太坊生態系統資助計劃清單。 -lang: zh-tw ---- - -# 以太坊資助 {#ethereum-grants} - -以下所列計劃為致力於促進以太坊生態系統成功和發展的專案提供各種資助贈款。 以此作為尋找和申請資金的指南,以幫助你的下一個以太坊專案取得成功。 - -此列表由我們的社群策劃。 如果有任何遺漏或不正確之處,請編輯此頁面! - -## 開放的以太坊生態系統 {#broad-ethereum-ecosystem} - -這些計劃通過向各種專案提供資助來支援開放的以太坊生態系統。 其中包括可擴展性、社群建設、安全性、隱私等方面的解決方案。 這些贈款並不專門針對任何一個以太坊平台,如果你不確定,可以從這裡開始。 - -- [EF 生態系統支援計劃](https://esp.ethereum.foundation) - _資助有益於以太坊的開源專案,特別關注通用工具、基礎設施、研究和公共產品_ -- [Moloch DAO](https://www.molochdao.com/) - _隱私性、二層網路擴容、用戶端安全性等_ -- [去中心化自治組織資助計畫](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _有關資助機構的 Google 試算表_ -- [學術資助](https://esp.ethereum.foundation/academic-grants) - _支援以太坊相關學術工作的資助計劃_ -- [Blockworks Grantfarm](https://blockworks.co/grants/programs) - _Blockworks 彙編了關於所有資助計畫、提案徵集和漏洞懸賞計畫的詳盡清單。_ - -## 特定專案 {#project-specific} - -這些專案旨在為開發和實驗自身技術的專案獲取資助。 - -- [Aave 資助計劃](https://aavegrants.org/) – _[Aave](https://aave.com/) 為去中心化自治組織提供資助_ -- [Balancer](https://grants.balancer.community/) – _[Balancer](https://balancer.fi/) 生態系統基金_ -- [Chainlink 資助計劃](https://chain.link/community/grants) - _[Chainlink](https://chain.link/) 社群資助_ -- [Decentraland 資助計劃](https://governance.decentraland.org/grants/) – _[Decentraland](https://decentraland.org/) 去中心化自治組織元宇宙_ -- [Lido 生態系統資助機構 (LEGO)](https://lido.fi/lego) – _[Lido](https://lido.fi/) 金融生態系統_ -- [MetaMask 計劃](https://metamaskgrants.org/) - _[MetaMask](https://metamask.io/) 員工引導自助去中心化自治組織_ -- [SKALE 網路資助計劃](https://skale.space/developers#grants) - _[SKALE 網路](https://skale.space/)生態系統_ -- [Swarm 基金會資助計劃](https://my.ethswarm.org/grants) - _[Swarm 基金會](https://www.ethswarm.org/)生態系統_ -- [The Graph](https://thegraph.com/ecosystem/grants/) – _[The Graph](https://thegraph.com/) 生態系統_ -- [Uniswap 資助計劃](https://www.uniswapfoundation.org/approach) – _[Uniswap](https://uniswap.org/) 社群_ - -## 二次融資 {#quadratic-funding} - -以太坊的開源根促進了一種有趣的新籌款模式:二次融資的成長。 這種模式可能有助於改善我們在未來為各種公共產品募資的方式。 二次融資確保獲得最多資金的是具有最獨特需求的專案。 換句話說,就是那些能夠改善大多數人生活的專案。 [關於二次融資的詳細資訊。](/defi/#quadratic-funding) - -- [Gitcoin](https://gitcoin.co/grants) -- [clr.fund](https://clr.fund/) - -## 在以太坊工作 {#work-in-ethereum} - -還沒準備好開始你自己的專案? 有數百間公司正在積極尋找對以太坊懷有熱情的人加入到以太坊生態系統的工作行列。 想了解更多資訊? [查看以太坊相關工作](/community/get-involved/#ethereum-jobs) diff --git a/public/content/translations/zh-tw/14) Community Pages/community/language-resources/index.md b/public/content/translations/zh-tw/14) Community Pages/community/language-resources/index.md deleted file mode 100644 index 7923de44574..00000000000 --- a/public/content/translations/zh-tw/14) Community Pages/community/language-resources/index.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: 語言資源 -description: 用以了解以太坊的非英文資源 -lang: zh-tw ---- - -# 語言資源 {#language-resources} - -以太坊社群為全球性社群,包含數以百萬計的非英語人士。 - -我們的目標是以所有語言提供教育內容,幫助世界各地的人們克服語言障礙,成功加入以太坊社群。 - -如果你更喜歡用你的母語閱讀,或你知道某人不會說英語,你可以在下面找到有用的非英語資源列表。 数十万的以太坊爱好者聚集在这些在线论坛上,分享消息、谈论最近的发展、讨论技术问题并畅想未来。 - -知道以你的語言撰寫的教育資源? [請創建議題](https://github.com/ethereum/ethereum-org-website/issues/new/choose),以將其添加到列表! - -## Ethereum.org 資源 {#ethereum-org} - -Ethereum.org 已翻譯為 40 多種語言,你可以透過我們的語言選擇器選單(位於每個頁面的頂部)找到這些語言。 - -![語言選擇器選單](./language-selector-menu.png) - -如果你會使用兩種語言,而且想幫助我們宣傳,讓更多人知道,你也可以參與 [ethereum.org 翻譯計劃](/contributing/translation-program/#translation-program),幫助我們翻譯該網站。 - -## 社群資源 {#community} - -### 巴西葡萄牙語 {#br-pt} - -**新聞** - -- [BeinCrypto](http://www.beincrypto.com.br) - 提供有關加密貨幣的新聞和文章,包括巴西交易所列表 -- [Cointegraph](http://cointelegraph.com.br/category/analysis) - 巴西版 Cointelegraph,一個重要的加密貨幣新聞媒體機構 -- [Livecoins](http://www.livecoins.com.br/ethereum) - 提供有關加密貨幣的新聞和工具 -- [Seudinheiro](http://www.seudinheiro.com/criptomoedas/) - 提供有關加密貨幣的新聞和報告 -- [Modular Crypto](https://modularcrypto.xyz/) - 提供有關加密貨幣的新聞和教育文章 - -**教育** - -- [web3dev](https://www.web3dev.com.br/) - 向 Web3 開發者提供的內容中心和 Discord 社群。 -- [Web3Brasil](https://github.com/web3brasil/web3brasil) - 提供有關 Web3 和去中心化金融的學習資源 -- [CriptoFacil](http://www.criptofacil.com/ultimas-noticias/) - 提供有關加密貨幣的新聞和教育資源,包括「以太坊入門」和「去中心化金融入門」 -- [CriptoAtivos](http://www.criptoativos.wiki.br/) - 提供來自加密貨幣空間、教育和部落格的見解 -- [Cointimes](http://www.cointimes.com.br/) - 提供有關加密貨幣的新聞和教育資源 -- [Web3 starter pack](https://docs.google.com/document/d/1X8PSTFH7FTw9J-gbKWM6Y430SWCBT8d4t4pJgFQHJ8E/) - 提供有關加密貨幣最常見和最基礎問題解答的指南 - -### 中文 {#zh} - -**通用資源** - -- [Ethereum.cn](https://www.ethereum.cn/) - 由社群維護的網站內容,包括共識層升級、所有核心開發者會議紀錄、二層網路等 -- [EthFans](https://github.com/editor-Ajian/EthFans.org-annual-collected-works/) - 學習從基礎到高級以太坊主題的所有知識 -- [Untimes](https://mp.weixin.qq.com/s/tvloZSDBSOQN9zDQj_91kA) - 由社群維護的內容,涵蓋以太坊、去中心化金融、非同質化代幣和 Web3 相關知識 -- [123ETH](https://123eth.org/) - 以太坊生態系統的入口網站 -- [Zhen Xiao(肖臻)](http://zhenxiao.com/blockchain/) - 關於加密貨幣及其應用的免費線上課程 -- [以太坊白皮書](https://github.com/ethereum/wiki/wiki/[%E4%B8%AD%E6%96%87]-%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%99%BD%E7%9A%AE%E4%B9%A6) - 中文版以太坊白皮書 - -**以太坊生態系統** - -- [ETHPlanet](https://www.ethplanet.org/) - 可上線或現場參加駭客松,為大學生提供培訓 -- [PrimitivesLane](https://www.primitiveslane.org/) - 一個以區塊鏈技術為重點的非營利研究小組 -- [以太坊中國翻譯社群](https://www.notion.so/Ethereum-Translation-Community-CN-05375fe0a94c4214acaf90f42ba40171) - 一個致力於翻譯以太坊教育類內容的社群 - -**適用於開發人員** - -- [DappLearning](https://github.com/Dapp-Learning-DAO/Dapp-Learning) - 每週學習主流去中心化應用程式專案,並分享想法及意見的學習群組 -- [LearnBlockchain](https://learnblockchain.cn/) - 一個分享區塊鏈技術相關資訊的開發者社群 - -**適用於密碼學研究人員** - -- [安比實驗室](https://mp.weixin.qq.com/s/69_tqBJpr_sbaKtR1sBRMw) - 一個解釋說明密碼學和安全等內容的微信公眾號 -- [星想法](https://mp.weixin.qq.com/s/9KgKTc_jtJ7bWKdbNPoqvQ) - 一個解釋說明零知識技術的微信公眾號 - -### 捷克語 {#cs} - -- [Gwei.cz](https://gwei.cz) - 有關 Web3 的當地社群,產出教育內容、舉辦線上和線下活動 -- [Gwei.cz Příručka](https://prirucka.gwei.cz/) - 以太坊新手指南 -- [DAO Příručka](https://dao.gwei.cz/) - 去中心化自治組織新手指南 -- [精通以太坊](https://ipfs.io/ipfs/bafybeidvuxhnsgfx3tncpfxheqglkjwmdxclknlgd7s7qggd2a6bzgb27m) - 捷克語版《精通以太坊》 - -### 法語 {#fr} - -- [Ethereum France](https://www.ethereum-france.com/) - Ethereum France 組織各種活動、產出內容並鼓勵圍繞以太坊展開討論 -- [Ethereum.fr](https://ethereum.fr/) - 提供有關以太坊的新聞和教育資源 -- [BanklessFR](https://banklessfr.substack.com/) - Bankless 法語版新聞通訊 -- [CryptoFR](https://cryptofr.com/category/44/ethereum-general) - 以太坊子頁面上的加密貨幣論壇 - -### 德語 {#de} - -- [Microsoft Learn (Solidity)](https://docs.microsoft.com/de-de/learn/modules/blockchain-learning-solidity/) - 使用 Solidity -- [Microsoft Learn(智慧型合約)](https://docs.microsoft.com/de-de/learn/modules/blockchain-solidity-ethereum-smart-contracts/)- 用 Solidity 撰寫以太坊智慧型合約 -- [Microsoft Learn(以太坊網路)](https://docs.microsoft.com/de-de/learn/modules/blockchain-ethereum-networks/)- 連接並部署以太坊網路 -- [Microsoft Learn(區塊鏈)](https://docs.microsoft.com/de-de/learn/paths/ethereum-blockchain-development/)- 進入區塊鏈開發 - -### 希伯來文 {#he} - -- [Udi Wertheimer - 比特幣愛好者可以從以太坊學到什麼](https://www.cryptojungle.co.il/udi-wertheimer-what-bitcoiners-can-learn-from-ethereum/) -- [Omer Greismen (OpenZeppelin) - 我們如何防止 150 億美元的智慧型合約遭到駭客攻擊](https://www.cryptojungle.co.il/omer-greisman-openzeppelin/) -- [Shy Datika (INX) - 代幣化和證券的未來,內容包括「以太坊是一種證券嗎」](https://www.cryptojungle.co.il/shy-datika-tokenization/) -- [Roy Confino (Lemonade) - 以太坊保險](https://www.cryptojungle.co.il/roy-confino-insurance/) -- [Idan Ofrat (Fireblocks) - 機構採用](https://www.cryptojungle.co.il/idan-ofrat-fireblocks/) -- [Gal Weizman (MetaMask) - 什麼是 MetaMask](https://www.cryptojungle.co.il/gal-weizman-metamask/) -- [Dror Aviely (Consensys) - 以太坊的中心](https://www.cryptojungle.co.il/dror-aviely-ethereum-center/) -- [Nir Rozin - 成為加密龐克](https://www.cryptojungle.co.il/nir-rozin-cryptopunk/) -- [Adan Kedem - 遊戲與元宇宙](https://www.cryptojungle.co.il/adan-kedem-web3-gaming/) -- [Uri Kolodny (Starkware) - 以太坊與區塊鏈分層](https://www.cryptojungle.co.il/uri-kolodny-starkware/) -- [Udi Wertheimer - 以太坊 2.0 與競爭對手](https://www.cryptojungle.co.il/udi-on-eth2/) -- [Ben Samocha(本從) - 以太坊 2.0 是機會嗎?](https://www.cryptojungle.co.il/etherurm2-week-summary/) -- [Alon Muroch (Bloxstake) - 什麼是以太坊 2.0?](https://www.cryptojungle.co.il/alon-moroch-eth2/) -- [Eilon Aviv (Collider Ventures) - 以太坊 2.0 可能會出現哪些問題](https://www.cryptojungle.co.il/eilon-aviv-eth2-0/) -- [Eilon Aviv (Collider Ventures) - 為什麼我們需要以太坊 2.0](https://www.cryptojungle.co.il/eilon-aviv-ethereum-2-0/) - -### 義大利語 {#it} - -- [Ethereum Italia](https://www.ethereum-italia.it/) - 提供以太坊教育資源、活動和新聞,專注於智慧型合約和區塊鏈技術 -- [Ethereum Italia Podcast](https://www.ethereum-italia.it/podcast/) - 以太坊義大利語播客 -- [Microsoft Learn (Solidity)](https://docs.microsoft.com/it-it/learn/modules/blockchain-learning-solidity/) - 學習使用 Solidity -- [Microsoft Learning(智慧型合約)](https://docs.microsoft.com/it-it/learn/modules/blockchain-solidity-ethereum-smart-contracts/)- 學習用 Solidity 撰寫智慧型合約 -- [Microsoft Learn(去中心化應用程式)](https://docs.microsoft.com/it-it/learn/modules/blockchain-create-ui-decentralized-apps/)- 使用去中心化應用程式建立使用者介面 - -### 日語 {#ja} - -- [日本網路和虛擬貨幣資產交易組織](https://jvcea.or.jp/) -- [日本虛擬資產商業組織](https://cryptocurrency-association.org/) -- [區塊鏈開發入門 - 學習 | 微軟文件](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - 該學習路徑將向你介紹以太坊平台上的區塊鏈和發展 -- [精通以太坊](https://www.oreilly.co.jp/books/9784873118963/) - 日語版《精通以太坊》 -- [手把手教你使用 Solidity 和以太坊制訂智慧型合約](https://www.oreilly.co.jp/books/9784873119342/) - 日語版《手把手教你使用 Solidity 和以太坊制訂智慧型合約》 - -### 俄語 {#ru} - -- [Cyber Academy](https://cyberacademy.dev) -Web3 建造者的教育空間 -- [Forklog](https://forklog.com) - 有關一般加密貨幣、不同區塊鏈的現有技術和未來升級的新聞和教育文章 -- [BeInCrypto](https://ru.beincrypto.com) - 新聞、加密貨幣價格分析以及非技術文章,通俗易懂地講解有關加密貨幣的所有內容 - -### 西班牙語 {#es} - -- [Ethereum Madrid](https://ethereummadrid.com/) - 區塊鏈、去中心化金融、管理體系課程、活動和部落格 -- [Cointegraph](https://es.cointelegraph.com/ethereum-for-beginners) - 西班牙語版《以太坊新手指南》 -- [Tutoriales online](https://tutoriales.online/curso/solidity) - 學習以太坊 Solidity 和編程 -- [Curso Introducción a Ethereum Development](https://youtube.com/playlist?list=PLTqiwJDd_R8y9pfUBjhkVa1IDMwyQz-fU) - Solidity 基礎知識,以及測試和部署你的首個智慧型合約 -- [Curso Introducción a Seguridad y Hacking en Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8yHOvteko_DmUxUTMHnlfci) - 了解真實智慧型合約中常見的漏洞和安全問題 -- [去中心化金融開發課程介紹](https://youtube.com/playlist?list=PLTqiwJDd_R8zZiP9_jNdaPqA3HqoW2lrS) - 了解去中心化金融智慧型合約如何在 Solidity 中運作,並創建自己的自動化做市商應用 -- [Cryptoversidad](https://www.youtube.com/c/Cryptoversidad) - 由淺入深的非技術性區塊鏈教學 學習所有有關加密貨幣和以太坊的知識。 - -### 土耳其語 {#tr} - -- [BTK Akademi](https://www.btkakademi.gov.tr/portal/course/blokzincir-ve-kripto-paralar-10569#!/about) - 專注於區塊鍊和加密貨幣的課程 -- [偉大的重命名:以太坊 2 發生了什麼?](https://miningturkiye.org/konu/ethereum-madenciligi-bitiyor-mu-onemli-gelisme.655/)-《偉大的重命名》博文的土耳其語譯作,解釋了「以太坊 2」術語的變化 - -### 越南語 {#vi} - -- [Tino Group](https://wiki.tino.org/ethereum-la-gi/) - 以太坊、去中心化應用程式、錢包和常見問題的概述 -- [Tap Chi Bitcoin](https://tapchibitcoin.io/tap-chi/tin-tuc-ethereum-eth) - 以太坊新聞和教育子頁面的網頁平台 -- [Coin68](https://coin68.com/ethereum-tieu-diem/) - 提供以太坊新聞和教育內容的加密貨幣入口網站 diff --git a/public/content/translations/zh-tw/14) Community Pages/community/online/index.md b/public/content/translations/zh-tw/14) Community Pages/community/online/index.md deleted file mode 100644 index b09116ac6f0..00000000000 --- a/public/content/translations/zh-tw/14) Community Pages/community/online/index.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: 線上社群 -description: 一個關於以太坊生態系統的贈款計劃清單 -lang: zh-tw ---- - -# 線上社群 {#online-communities} - -數十萬的以太坊愛好者聚集在這些線上論壇上,分享消息、談論最近的發展、討論技術問題,並暢想未來。 - -## 論壇 {#forums} - -r/ethereum - 所有有關以太坊的話題 -r/ethfinance - 以太坊中有關金融的主題,其中包含去中心化金融 -r/ethdev - 專注於以太坊的開發 -r/ethtrader - 趨勢及市場分析 -r/ethstaker - 歡迎所有對在以太坊上質押感興趣的人 -以太坊魔法師獎學金 - 以以太坊技術標準為中心的社群 -以太坊 Stackexchange - 以太坊開發者討論及協助 -以太坊研究 - 最具影響力的加密經濟研究留言板 - -## 聊天室 {#chat-rooms} - -以太牧貓人組織 - 提供專案管理以支援以太坊的社群 -以太坊駭客 - 由全球以太坊駭客線上社群 ETHGlobal 所管理的 Discord 聊天室 -CryptoDevs - 專注於以太坊開發的 Discord 社群 -EthStaker Discord - 給現有及潛在質押者的社群營運指導、教育、支援及資源。 -Ethereum.org 網站團隊 - 訪問並和團隊及社群大眾聊聊 Ethereum.org 網站開發及設計 -Matos Discord - 建造者、產業領袖,及以太坊愛好者出沒的 web3 創作者社群。 我們熱愛 web3 開發、設計及文化。 與我們一起建立。 -Solidity Gitter - 討論 solidity 的開發 (Gitter) -Solidity Matrix - 討論 solidity 的開發 (Matrix) -以太坊技術堆棧交易所 *- 問答論壇* -Peeranha *- 去中心化問答論壇* - -## YouTube 和 Twitter {#youtube-and-twitter} - -以太坊基金會 - 掌握以太坊基金會最新的資訊 -@ethereum - 以太坊基金會的官方帳戶 -@ethdotorg - 以太坊的入口網站,為我們成長中的全球社群而建 -具影響力的以太坊推特帳戶清單 - - - - -
- - 了解更多關於去中心化自治組織的資訊 - -
-
diff --git a/public/content/translations/zh-tw/14) Community Pages/community/research/index.md b/public/content/translations/zh-tw/14) Community Pages/community/research/index.md deleted file mode 100644 index 8f95e0f1745..00000000000 --- a/public/content/translations/zh-tw/14) Community Pages/community/research/index.md +++ /dev/null @@ -1,399 +0,0 @@ ---- -title: 以太坊研究的活躍領域 -description: 探索不同領域的開放研究,並瞭解如何參與。 -lang: zh-tw ---- - -# 以太坊研究的活躍領域 {#active-areas-of-ethereum-research} - -以太坊的其中一個主要優勢是有活躍的研究和工程社群在持續改進以太坊。 來自世界各地的許多熱情、有才能的人們都致力於解決以太坊中的未解問題,但找出這些問題有時並不容易。 此頁面概述了關鍵的活躍研究領域,粗略介紹以太坊的前沿資訊。 - -## 以太坊研究如何進行 {#how-ethereum-research-works} - -以太坊研究是公開透明的,體現了 [去中心化科研 (DeSci)](https://hackernoon.com/desci-decentralized-science-as-our-chance-to-recover-the-real-science) 的原則。 這種文化使研究工具和產出盡可能開放且可以互動,例如透過可執行筆記本達成此目的。 以太坊研究進步非常迅速,新的發現都會在開放論壇如 [ethresear.ch](https://ethresear.ch/) 上發文和討論,而非經過多輪同行評審後,再透過傳統出版物傳達給社群。 - -## 一般研究資源 {#general-research-resources} - -不論是哪個特定主題,在 [ethresear.ch](https://ethresear.ch) 和 [以太坊研發 Discord 頻道](https://discord.gg/qGpsxSA) 都能獲得大量關於以太坊研究的資訊。 這些是以太坊研究者討論最新想法和開發機會的主要場所。 - -這份由 [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) 在 2022 年 5 月發佈的報告詳細地介紹了以太坊開發藍圖。 - -## 資金來源 {#sources-of-funding} - -你可以參與以太坊研究並獲得報酬! 舉例來說,[以太坊基金會](/foundation/) 最近舉行了 [一輪學術募資](https://esp.ethereum.foundation/academic-grants)。 你可以在 [以太坊資助頁面](/community/grants/) 找到有關目前和即將到來的募資機會的資訊。 - -## 協定研究 {#protocol-research} - -協定研究涉及以太坊的基礎層 - 定義了節點如何連線、通訊、交換和儲存以太坊資料,並就區塊鏈狀態達成共識的一組規則。 協定研究分為兩大類別:共識和執行。 - -### 共識 {#consensus} - -共識研究涉及 [以太坊權益證明機制](/developers/docs/consensus-mechanisms/pos/)。 一些共識研究主題如下: - -- 識別和修復漏洞; -- 量化加密經濟安全; -- 提高用戶端實作的安全性或效能; -- 以及開發輕量用戶端。 - -除了前瞻性研究外,以太坊也在研究如何重新設計一些基本協定,例如單一時隙最確定性,以實作以太坊的重大改進。 此外,效率、安全和監控共識用戶端之間的點對點網路也是重要的研究課題。 - -#### 背景介紹讀物 {#background-reading} - -- [權益證明簡介](/developers/docs/consensus-mechanisms/pos/) -- [Casper-FFG paper](https://arxiv.org/abs/1710.09437) -- [Casper-FFG 說明](https://arxiv.org/abs/1710.09437) -- [Gasper 論文](https://arxiv.org/abs/2003.03052) - -#### 近期研究 {#recent-research} - -- [Ethresear.ch 共識](https://ethresear.ch/c/consensus/29) -- [可用性/最終確定性兩難問題](https://arxiv.org/abs/2009.04987) -- [單一時隙最終確定性](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) -- [提交者-建置者分離](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) - -### 執行 {#execution} - -執行層負責執行交易,運行 [以太坊虛擬機 (EVM)](/developers/docs/evm/),以及產生執行有效負載以傳遞給共識層。 活躍的研究領域有很多,包括: - -- 發展輕量用戶端支援; -- 研究燃料限制; -- 以及與新資料結構的相容性(如沃克爾樹)。 - -#### 背景介紹讀物 {#background-reading-1} - -- [以太坊虛擬機介紹](/developers/docs/evm) -- [Ethresear.ch 執行層](https://ethresear.ch/c/execution-layer-research/37) - -#### 近期研究 {#recent-research-1} - -- [資料庫最佳化](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) -- [狀態過期](https://notes.ethereum.org/@vbuterin/state_expiry_eip) -- [狀態過期的路徑](https://hackmd.io/@vbuterin/state_expiry_paths) -- [沃克爾樹和狀態過期提案](https://notes.ethereum.org/@vbuterin/verkle_and_state_expiry_proposal) -- [歷史紀錄管理](https://eips.ethereum.org/EIPS/eip-4444) -- [沃克爾樹](https://vitalik.eth.limo/general/2021/06/18/verkle.html) -- [資料可用性取樣](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) - -## 用戶端開發 {#client-development} - -以太坊用戶端是以太坊協定的協定。 用戶端開發將協定研究的成果建置於用戶端中,以實作這些成果。 用戶端開發包括了更新用戶端規範和建置特定實作。 - -以太坊節點需要執行兩個軟體: - -1. 能夠追蹤區塊鏈頭部、廣播區塊以及處理共識邏輯的共識用戶端 -2. 支援以太坊虛擬機和執行交易及智慧型合約的執行用戶端 - -查看 [節點及用戶端頁面](/developers/docs/nodes-and-clients/) 以獲得關於節點和用戶端的詳細資訊,以及所有目前用戶端實作的清單。 你也可以在 [歷史紀錄頁面](/history/) 找到以太坊的所有升級的歷史紀錄。 - -### 執行用戶端 {#execution-clients} - -- [執行用戶端規範](https://github.com/ethereum/execution-specs) -- [執行應用程式介面規範](https://github.com/ethereum/execution-apis) - -### 共識用戶端 {#consensus-clients} - -- [共識用戶端規範](https://github.com/ethereum/consensus-specs) -- [信標應用程式介面規範](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) - -## 擴容與效能 {#scaling-and-performance} - -擴容以太坊是以太坊研究者關注的重大領域。 目前的方法包括將交易轉移到卷軸上,以及透過資料二進位大型物件讓交易儘可能便宜。 擴容以太坊的相關介紹可以在 [擴容頁面](/developers/docs/scaling) 查看。 - -### 二層網路 {#layer-2} - -目前有多種二層網路協定透過使用不同技術在一層網路上實現批量交易並確保交易,來擴容以太坊。 這是個快速發展的主題,且有很大的研究及開發潛力。 - -#### 背景介紹讀物 {#background-reading-2} - -- [二層網路簡介](/layer-2/) -- [Polynya:卷軸、資料可用性和模組化鏈](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) - -#### 近期研究 {#recent-research-2} - -- [排序者的 Arbitrum 公平排序](https://eprint.iacr.org/2021/1465) -- [ethresear.ch 二層網路](https://ethresear.ch/c/layer-2/32) -- [以卷軸為中心的開發藍圖](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) -- [L2Beat](https://l2beat.com/) - -### 跨鏈橋 {#bridges} - -二層網路需要更多研究和開發的一個特別領域是安全有效的跨鏈橋。 這包含了各種二層網路之間的跨鏈橋,以及一層網路和二層網路之間的跨鏈橋。 這是一個特別重要的研究領域,因為跨鏈橋通常是駭客的攻擊目標。 - -#### 背景介紹讀物 {#background-reading-3} - -- [區塊鏈跨鏈橋簡介](/bridges/) -- [Vitalik 討論跨鏈橋](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) -- [區塊鏈跨鏈橋文章](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) -- [跨鏈橋中鎖定之資金](https://dune.com/eliasimos/Bridge-Away-\(from-Ethereum\)) - -#### 近期研究 {#recent-research-3} - -- [驗證跨鏈橋](https://stonecoldpat.github.io/images/validatingbridges.pdf) - -### 分片 {#sharding} - -以太坊區塊鏈分片一直都是開發藍圖的一部分。 然而,新的擴容解決方案如「Danksharding」正是目前的焦點。 - -全面 Danksharding 的前身稱為 Proto-Danksharding,已隨著 Cancun-Deneb(「坎昆」)網路升級上線。 - -[更多有關坎昆升級的資訊](/roadmap/dencun/) - -#### 背景介紹讀物 {#background-reading-4} - -- [Proto-Danksharding 筆記](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) -- [去銀行化 Danksharding 影片](https://www.youtube.com/watch?v=N5p0TB77flM) -- [以太坊分片研究概要](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) -- [Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) - -#### 近期研究 {#recent-research-4} - -- [EIP-4844: Proto-Danksharding](https://eips.ethereum.org/EIPS/eip-4844) -- [Vitalik 討論分片與資料可用性取樣](https://hackmd.io/@vbuterin/sharding_proposal) - -### 硬體 {#hardware} - -在普通的硬體上 [運行節點](/developers/docs/nodes-and-clients/run-a-node/) 是使以太坊保持去中心化的基礎。 所以,最大程度上降低運行節點的硬體需求的活躍研究是重要的研究領域。 - -#### 背景介紹讀物 {#background-reading-5} - -- [ARM 架構上的以太坊](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) - -#### 近期研究 {#recent-research-5} - -- [FPGA 上的橢圓曲線數位簽章演算法](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) - -## 安全性 {#security} - -安全性是個廣泛的議題,可能包含了垃圾郵件/詐騙預防、錢包安全、硬體安全、加密經濟安全、漏洞懸賞、應用程式和用戶端軟體的偵錯和測試及金鑰管理。 貢獻這些領域的知識將有助於加速主流採用。 - -### 密碼學與零知識證明 {#cryptography--zkp} - -零知識證明 (ZKP) 和密碼學都對在以太坊和其應用程式上實現隱私性及安全性非常重要。 零知識是一個相對新穎但快速發展的領域,有許多開放研究與開發機會。 一些可能的機會包括開發更高效的 [Keccak 雜湊演算法](https://hackmd.io/sK7v0lr8Txi1bgION1rRpw?view#Overview) 實作、找到比現存更好的多項式承諾,或降低產生橢圓曲線簽章演算法公鑰和簽章驗證電路的成本。 - -#### 背景介紹讀物 {#background-reading-6} - -- [0xparc 部落格](https://0xparc.org/blog) -- [zkp.science](https://zkp.science/) -- [零知識播客](https://zeroknowledge.fm/) - -#### 近期研究 {#recent-research-6} - -- [橢圓曲線密碼學的近期進展](https://ethresear.ch/t/the-ec-fft-algorithm-without-elliptic-curve-and-isogenies/11346) -- [Ethresear.ch 零知識](https://ethresear.ch/c/zk-s-nt-arks/13) - -### 錢包 {#wallets} - -以太坊錢包可以是瀏覽器擴充功能、桌上型電腦和行動應用程式,又或者是以太坊上的智慧型合約。 目前正在積極研究社交恢復錢包,該錢包可以降低與個人使用者金鑰管理相關的風險。 與錢包開發相關的是研究帳戶抽象的替代形式,這是新興研究的一個重要領域。 - -#### 背景介紹讀物 {#background-reading-7} - -- [錢包簡介](/wallets/) -- [錢包安全簡介](/security/) -- [ethresear.ch 安全性](https://ethresear.ch/tag/security) -- [EIP-2938 帳戶抽象](https://eips.ethereum.org/EIPS/eip-2938) -- [EIP-4337 帳戶抽象](https://eips.ethereum.org/EIPS/eip-4337) - -#### 近期研究 {#recent-research-7} - -- [專注於智慧型合約錢包的驗證](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) -- [帳戶的未來](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) -- [EIP-3074 AUTH 和 AUTHCALL 操作碼](https://eips.ethereum.org/EIPS/eip-3074) -- [在外部帳戶地址發佈程式碼](https://eips.ethereum.org/EIPS/eip-5003) - -## 社群、教育及外展 {#community-education-and-outreach} - -讓新的使用者加入以太坊需要新的教育資源及外展方法。 這可能包括部落格文章、書籍、播客、迷因、教學資源、活動以及任何建構社群、迎接新手及教授人們以太坊相關知識所需的資源。 - -### 使用者體驗/介面 {#uxui} - -為了讓更多人加入以太坊生態系統,必須改進使用者體驗/介面。 這需要設計師和產品專家重新檢視錢包和應用程式的設計。 - -#### 背景介紹讀物 {#background-reading-8} - -- [Ethresear.ch 使用者體驗/介面](https://ethresear.ch/c/ui-ux/24) - -#### 近期研究 {#recent-research-8} - -- [Web3 設計 Discord](https://discord.gg/FsCFPMTSm9) -- [Web3 設計原則](https://www.web3designprinciples.com/) -- [Ethereum Magicians 使用者體驗討論](https://ethereum-magicians.org/t/og-council-ux-follow-up/9032/3) - -### 經濟學 {#economics} - -以太坊的經濟學研究主要遵循兩種方法:驗證依賴經濟激勵之機制的安全性(「微觀經濟學」),以及分析協定、應用程式和使用者間的價值流動(「宏觀經濟學」)。 以太坊的原生資產(以太幣)和基於以太幣建構的代幣(例如非同質化代幣和 ERC20 代幣)存在著複雜的加密經濟因素。 - -#### 背景介紹讀物 {#background-reading-9} - -- [穩健激勵群組](https://ethereum.github.io/rig/) -- [Devconnect 上的 ETHconomics 研討會](https://www.youtube.com/playlist?list=PLTLjFJ0OQOj5PHRvA2snoOKt2udVsyXEm) - -#### 近期研究 {#recent-research-9} - -- [EIP1559 的實證分析](https://arxiv.org/abs/2201.05574) -- [流通供應量平衡](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954) -- [量化最大可提取價值:森林究竟有多黑暗?](https://arxiv.org/abs/2101.05511) - -### 區塊空間與費用市場 {#blockspace-fee-markets} - -區塊空間市場管理最終使用者交易的納入,無論是直接在以太坊(一層網路)上還是在橋接網路上,例如卷軸(二層網路)。 在以太坊上,交易會被提交到作為 EIP-1559 部署的費用市場,以保護鏈免於垃圾郵件及定價堵塞。 在這兩層上,交易都可能產生外部效應,如最大可提取價值 (MEV),這會導致產生新的市場結構來獲取或管理這些外部效應。 - -#### 背景介紹讀物 {#background-reading-10} - -- [為以太坊區塊鏈設計的交易費機制:EIP-1559 的經濟學分析(Tim Roughgarden,2020 年)](https://timroughgarden.org/papers/eip1559.pdf) -- [EIP-1559 模擬(穩健激勵群組)](https://ethereum.github.io/abm1559) -- [由第一原理瞭解卷軸經濟](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) -- [Flash Boys 2.0:去中心化交易所的交易搶跑、交易重新排序和共識不穩定性](https://arxiv.org/abs/1904.05234) - -#### 近期研究 {#recent-research-10} - -- [多維度 EIP-1559 影片展示](https://youtu.be/QbR4MTgnCko) -- [跨域最大可提取價值](http://arxiv.org/abs/2112.01472) -- [最大可提取價值競價](https://ethresear.ch/t/mev-auction-auctioning-transaction-ordering-rights-as-a-solution-to-miner-extractable-value/6788) - -### 權益證明激勵 {#proof-of-stake-incentives} - -驗證者使用以太坊的原生資產(以太幣)作為對抗不誠實行為的抵押品。 其加密經濟學決定了網路的安全性。 經驗老道的驗證者可利用激勵層的細微差別發動明確的攻擊。 - -#### 背景介紹讀物 {#background-reading-11} - -- [精通以太坊經濟學課程與經濟模型](https://github.com/CADLabs/ethereum-economic-model) -- [權益證明激勵模擬(穩健激勵群組)](https://ethereum.github.io/beaconrunner/) - -#### 近期研究 {#recent-research-11} - -- [在提交者/建置者分離 (PBS) 機制下提升交易的抗審查性](https://notes.ethereum.org/s3JToeApTx6CKLJt8AbhFQ) -- [權益證明以太坊上的三種攻擊方式](https://arxiv.org/abs/2110.10086) - -### 流動性質押和衍生品 {#liquid-staking-and-derivatives} - -流動性質押藉由將以太幣兌換成一種代表質押以太幣,且可以用於去中心化金融的代幣,讓持有低於 32 個以太幣的使用者也能獲得質押收益。 然而,流動性質押相關的激勵和市場動態仍在發掘階段,它對以太坊安全性的影響(例如中心化風險)亦然。 - -#### 背景介紹讀物 {#background-reading-12} - -- [Ethresear.ch 流動性質押](https://ethresear.ch/search?q=liquid%20staking) -- [Lido:邁向去信任的以太坊質押之路](https://blog.lido.fi/the-road-to-trustless-ethereum-staking/) -- [Rocket Pool:質押協定介紹](https://medium.com/rocket-pool/rocket-pool-staking-protocol-part-1-8be4859e5fbd) - -#### 近期研究 {#recent-research-12} - -- [處理從 Lido 提款](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-stake-protocol/8873) -- [提款憑證](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) -- [流動性質押衍生品的風險](https://notes.ethereum.org/@djrtwo/risks-of-lsd) - -## 測試 {#testing} - -### 形式化驗證 {#formal-verification} - -形式化驗證透過編寫程式碼來驗證以太坊共識規範正確無誤且沒有錯誤。 此規範有個以 Python 撰寫的可執行版本,需要維護和開發。 進一步的研究可以幫助改進規範的 Python 實作,並新增一些能夠更穩健地驗證正確性和偵測問題的工具。 - -#### 背景介紹讀物 {#background-reading-13} - -- [形式化驗證簡介](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) -- [形式化驗證 (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) - -#### 近期研究 {#recent-research-13} - -- [存款合約的形式化驗證](https://github.com/runtimeverification/deposit-contract-verification) -- [信標鏈規範的形式化驗證](https://github.com/runtimeverification/deposit-contract-verification) - -## 資料科學與分析 {#data-science-and-analytics} - -需要更多能夠提供以太坊活動及網路健康度詳細資訊的資料分析工具和儀表板。 - -### 背景介紹讀物 {#background-reading-14} - -- [Dune Analytics](https://dune.com/browse/dashboards) -- [用戶端多樣性儀表板](https://clientdiversity.org/) - -#### 近期研究 {#recent-research-14} - -- [穩健激勵群組資料分析](https://ethereum.github.io/rig/) - -## 應用程式和工具 {#apps-and-tooling} - -應用層支援多種程式生態系統,可在以太坊基礎層上結算交易。 開發團隊一直在尋找新方法,以利用以太坊建立可組合、無許可和抗審查的重要 Web2 應用程式,或建立全新的 Web3 原生概念。 於此同時,新的專用工具被開發出來,使在以太坊上建構應用程式不太複雜。 - -### 去中心化金融 {#defi} - -去中心化金融 (DeFi) 是建立在以太坊之上的主要應用程式類別之一。 去中心化金融旨在建立可組合的「貨幣樂高」,讓使用者可以透過智慧型合約儲存、轉移、出借、借用和投資加密資產。 去中心化金融是發展快速且常常更新的領域。 需要持續對安全、效率及可存取協定進行研究。 - -#### 背景介紹讀物 {#background-reading-15} - -- [去中心化金融](/defi/) -- [Coinbase:去中心化金融是什麼?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) - -#### 近期研究 {#recent-research-15} - -- [去中心化金融,中心化所有權?](https://arxiv.org/pdf/2012.09306.pdf) -- [Optimism:邁向低於一美元交易費用之路](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) - -### 去中心化自治組織 {#daos} - -以太坊一個頗具影響力的使用案例是透過使用去中心化自治組織,以去中心化的方式進行整合。 目前,有許多活躍的研究,關乎如何開發和利用以太坊上的去中心化自治組織,將其作為一種所需信任最小化的協調工具,大幅擴展了人們的選擇,不在限於傳統公司和組織。 - -#### 背景介紹讀物 {#background-reading-16} - -- [去中心化自治組織簡介](/dao/) -- [去中心化自治組織集合](https://daocollective.xyz/) - -#### 近期研究 {#recent-research-16} - -- [規劃去中心化自治組織生態系統](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) - -### 開發者工具 {#developer-tools} - -為以太坊開發者打造的工具日新月異。 在這個領域中,有許多活躍的研究和開發工作要做。 - -#### 背景介紹讀物 {#background-reading-17} - -- [依程式語言分類的開發工具](/developers/docs/programming-languages/) -- [開發者框架](/developers/docs/frameworks/) -- [共識開發者工具列表](https://github.com/ConsenSys/ethereum-developer-tools-list) -- [代幣標準](/developers/docs/standards/tokens/) -- [CryptoDevHub:以太坊虛擬機工具](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) - -#### 近期研究 {#recent-research-17} - -- [以太坊研發 Discord 的共識工具頻道](https://discordapp.com/channels/595666850260713488/746343380900118528) - -### 預言機 {#oracles} - -預言機透過無需許可和去中心化的方式將鏈下資料匯入區塊鏈上。 將此資料上鏈使去中心化應用程式可對現實世界的現象做出反應,如現實世界的資產價格波動、鏈下應用程式的事件,甚至是天氣變化。 - -#### 背景介紹讀物 {#background-reading-18} - -- [預言機簡介](/developers/docs/oracles/) - -#### 近期研究 {#recent-research-18} - -- [區塊鏈預言機調查](https://arxiv.org/pdf/2004.07140.pdf) -- [Chainlink 白皮書](https://chain.link/whitepaper) - -### 應用程式安全性 {#app-security} - -一般發生在以太坊上的攻擊都是利用單一應用程式的漏洞,而非協定本身的漏洞。 駭客和應用程式開發者正在進行一場競賽,分別開發新的攻擊和防禦手段。 這表示研究和發展對保持應用程式的安全、遠離被駭一直都很重要。 - -#### 背景介紹讀物 {#background-reading-19} - -- [Wormhole 漏洞報告](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) -- [遭駭以太坊合約事後分析列表](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) -- [Rekt 新聞](https://twitter.com/RektHQ?s=20\&t=3otjYQdM9Bqk8k3n1a1Adg) - -#### 近期研究 {#recent-research-19} - -- [ethresear.ch 應用程式](https://ethresear.ch/c/applications/18) - -### 技術堆疊 {#technology-stack} - -整個以太坊技術堆疊的去中心化是個重要的研究領域。 目前,以太坊上的去中心化應用程式有不同程度的中心化,因為它們依賴中心化工具或基礎設施。 - -#### 背景介紹讀物 {#background-reading-20} - -- [以太坊堆疊](/developers/docs/ethereum-stack/) -- [Coinbase:Web3 堆疊簡介](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) -- [智慧型合約簡介](/developers/docs/smart-contracts/) -- [去中心化儲存簡介](/developers/docs/storage/) - -#### 近期研究 {#recent-research-20} - -- [智慧型合約的可組合性](/developers/docs/smart-contracts/composability/) diff --git a/public/content/translations/zh-tw/14) Community Pages/community/support/index.md b/public/content/translations/zh-tw/14) Community Pages/community/support/index.md deleted file mode 100644 index df0cd880b9c..00000000000 --- a/public/content/translations/zh-tw/14) Community Pages/community/support/index.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: 以太坊支援 -description: 在以太坊生態系統內獲取支援。 -lang: zh-tw ---- - -# 以太坊支援 {#support} - -## 官方提供的以太坊支援 {#official-support} - -你正在尋找官方的以太坊支援嗎? 第一件你應該知道的事情是以太坊為去中心化。 這代表沒有中心組織、實體或個體會持有以太坊,也因此沒有官方支援頻道。 - -明白以太坊的去中心化本質十分重要,因為任何聲稱是以太坊官方支援的人都可能正試圖欺詐你! 預防騙徒的最佳保護措施是自我教育,並認真看待網路安全。 - - - 以太坊安全及詐騙預防 - - - - 學習以太坊基礎知識 - - -儘管欠缺官方支援,很多以太坊生態系統上的團體、社群和專案都很樂意提供協助。你也能夠在此頁面找到很多有用的資訊及資源。 仍有疑問? 加入 [ethereum.org discord](/discord/),我們會嘗試提供幫助。 - -## 常見問題 {#faq} - -### 我一直往錯的錢包傳送以太幣 {#wrong-wallet} - -在以太坊進行的傳送不可還原。 不幸的是,如你已經將以太幣傳送至錯的錢包,便無法追回這些資金。 沒有中心組織、實體或個體持有以太坊,這代表沒有人能夠逆轉交易。 因此,在傳送交易前請務必進行雙重核查。 - -### 如何領取以太坊贈品? {#giveaway-scam} - -以太坊贈品是為了偷取你持有的以太幣而設計的騙局。 不要被一些高得不真實的回報率給欺騙 - 如果你將以太幣傳送至一個贈品地址,你將不會收到申領的贈品,而且你也不能索要賠償。 - -[有關防止詐騙的詳細資訊](/security/#common-scams) - -### 我的交易卡住了 {#stuck-transaction} - -如果你提交了一個低於所需的交易費,由於網路需求,你在以太坊上的交易有時可能會卡住。 很多錢包都會提供一個選項,重新用較高的手續費去提交同一筆交易,讓交易能夠順利進行。 另外,你還可以取消正在等待處理的交易。該動作能將一筆交易傳送到你持有的地址,然後使用與待處理交易相同的隨機數繼續。 - -[怎樣在 MetaMask 加速或者取消待完成交易](https://metamask.zendesk.com/hc/en-us/articles/360015489251-How-to-speed-up-or-cancel-a-pending-transaction) - -[怎樣取消待完成的以太坊交易](https://info.etherscan.com/how-to-cancel-ethereum-pending-transactions/) - -### 如何在以太坊挖礦? {#mining-ethereum} - -以太坊挖礦已不再可能。 當以太坊由[工作量證明](/glossary/#pow)過渡為[權益證明](/glossary/#pos)時,挖礦就已終止。 現在以太坊沒有礦工了,取而代之的是驗證者。 任何人都可以[質押](/glossary/#staking)以太幣,並透過執行驗證者軟體來保護網路,以獲得質押獎勵。 - -### 如何成為質押者/執行驗證者? {#how-to-stake} - -要成為驗證者,你必須在以太坊存款合約質押至少 32 個以太幣並設定驗證者節點。 更多資訊可以參考我們的[質押頁面](/staking)和[質押啟動面板](https://launchpad.ethereum.org/)。 - -## 開發去中心化應用程式 {#building-support} - -開發可能很難, 但一些專注於開發的空間上有樂意提供幫助,且經驗豐富的以太坊開發者。 - -- [Alchemy University](https://university.alchemy.com/#starter_code) -- [CryptoDevs discord](https://discord.com/invite/5W5tVb3) -- [Ethereum StackExchange](https://ethereum.stackexchange.com/) -- [StackOverflow](https://stackoverflow.com/questions/tagged/web3) -- [Web3 University](https://www.web3.university/) -- [LearnWeb3](https://discord.com/invite/learnweb3) - -你也可以在我們的[以太坊開發者資源](/developers/)部分找到文件和開發指南。 - -### 模組化 {#dapp-tooling} - -你的問題跟某個特定的質押池、專案或庫相關嗎? 多數專案都有專門為你提供支援的聊天伺服器或論壇。 - -常見示例有: - -- [Solidity](https://gitter.im/ethereum/solidity) -- [ethers.js](https://discord.gg/6jyGVDK6Jx) -- [web3.js](https://discord.gg/GsABYQu4sC) -- [安全帽](https://discord.gg/xtrMGhmbfZ) -- [Alchemy](http://alchemy.com/discord) -- [Tenderly](https://discord.gg/fBvDJYR) - -## 運行節點 {#node-support} - -如果你要運行一個節點或者驗證程式,有一些專門的社群可幫助你開始。 - -- [EthStaker discord](https://discord.gg/ethstaker) -- [EthStaker reddit](https://www.reddit.com/r/ethstaker) - -大部份開發以太坊用戶端的團隊也都有面向大眾的專有空間,你可在其中獲得支援及提出疑問。 - -### 執行用戶端 {#execution-clients} - -- [Geth](https://discord.gg/FqDzupGyYf) -- [Nethermind](https://discord.gg/YJx3pm8z5C) -- [Besu](https://discord.gg/p8djYngzKN) -- [Erigon](https://github.com/ledgerwatch/erigon/issues) -- [Reth](https://github.com/paradigmxyz/reth/discussions) - -### 共識用戶端 {#consensus-clients} - -- [Prysm](https://discord.gg/prysmaticlabs) -- [Nimbus](https://discord.gg/nSmEH3qgFv) -- [Lighthouse](https://discord.gg/cyAszAh) -- [Teku](https://discord.gg/7hPv2T6) -- [Lodestar](https://discord.gg/aMxzVcr) - -你也可以[在此學習如何運行節點](/developers/docs/nodes-and-clients/run-a-node/)。 diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/archive-nodes/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/archive-nodes/index.md" deleted file mode 100644 index 32e2fbefaa5..00000000000 --- "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/archive-nodes/index.md" +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: 以太坊歸檔節點 -description: 歸檔節點概覽 -lang: zh-tw -sidebarDepth: 2 ---- - -歸檔節點是一個以太坊用戶端的實例,經設定用來建立所有歷史狀態的存檔。 它是某些用例的有用工具,但可能比運行一個全節點更加複雜。 - -## 先決條件 {#prerequisites} - -你應該瞭解[以太坊節點](/developers/docs/nodes-and-clients/)的概念,[其架構](/developers/docs/nodes-and-clients/node-architecture/)、[同步策略](/developers/docs/nodes-and-clients/#sync-modes)、[運行](/developers/docs/nodes-and-clients/run-a-node/)和[使用它們](/developers/docs/apis/json-rpc/)的實踐方法。 - -## 什麼是歸檔節點 - -要理解歸檔節點的重要性,讓我們先釐清「狀態」的概念。 以太坊可以被稱為_基於交易的狀態機_。 它包括了帳戶以及執行交易並改變帳戶狀態的應用程式。 有關每個帳戶和合約的全球數據儲存在一個稱為狀態的 字典樹資料庫中。 這由執行層 (EL) 用戶端處理,並包括: - -- 帳戶餘額和隨機數 -- 合約代碼與儲存 -- 共識相關資料,例如質押存款合約 - -為了與網路互動、驗證和產生新區塊,以太坊用戶端必須跟上最近的變化(鏈尖),因此需要知道當前狀態。 設定為全節點的執行層用戶端會驗證並跟隨網路的最新狀態,但只緩存過去的少數幾個狀態,例如與最後 128 個區塊相關的狀態,因此它可以處理鏈重組並快速存取最近的資料。 最近的狀態是所有用戶端需要用來驗證傳入交易和使用網路的資料。 - -你可以將狀態想像為給定區塊的瞬間網路快照,而將存檔視為歷史重播。 - -歷史狀態可以安全地修剪,因為它們對網路的運作並不必要,而且用戶端保留所有過時資料是無用的。 存在於某個最近區塊(例如區塊頭之前的 128 個區塊)之前的狀態實際上已被丟棄。 全節點只保留歷史區塊鏈資料(區塊和交易)以及可供全節點用來根據請求重新產生較早狀態的偶然歷史快照。 它們透過在以太坊虛擬機中重新執行過去的交易來實現這一點,當所需的狀態距離最近的快照很遠時,這可能在計算上要求很高。 - -然而,這意味著在全節點上存取歷史狀態會消耗大量的算力。 用戶端可能需要執行所有過去的交易並從創世塊計算一個歷史狀態。 歸檔節點透過不僅儲存最近的狀態,而且儲存每個區塊後建立的每個歷史狀態來解決這個問題。 它基本上是以更大的磁碟空間需求作為代價。 - -值得注意的是,網路並不依賴歸檔節點來保存和提供所有歷史資料。 如上所述,所有歷史中間狀態都可以在全節點上推導出來。 任何全節點都儲存交易(目前少於 400G),並且可以重播以建立整個存檔。 - -### 使用案例 - -發送交易、部署合約、驗證共識等常規的以太坊使用不需要存取歷史狀態。 使用者無需歸檔節點,就可以與網路進行標準互動。 - -狀態存檔的主要好處是可以快速存取歷史狀態查詢。 舉例來說,歸檔節點將即時返回以下結果: - -- _0x1337 帳戶在區塊 15537393 中的以太幣餘額是多少?_ -- _0x 合約在區塊 1920000 中的 0x 代幣餘額是多少?_ - -如上所述,全節點會需要透過以太坊虛擬機執行以產生此資料,這會使用 CPU 並花費時間。 歸檔節點在磁碟上存取它們,且立即回應。 對一些特定基礎設施來說,這非常有用,例如: - -- 服務提供者,如區塊瀏覽器 -- 研究者 -- 安全分析師 -- 去中心化應用程式開發者 -- 審計和合規 - -也有各種免費的[服務](/developers/docs/nodes-and-clients/nodes-as-a-service/)可以存取歷史資料。 由於運行歸檔節點要求更高,因此這種存取往往受到限制,且只適用於偶爾存取。 如果你的專案需要持續存取歷史資料,你應該考慮運行一個自己的歸檔節點。 - -## 實作和使用 - -歸檔節點在此處表示由面向使用者的執行層用戶端提供的資料,因為它們處理狀態資料庫並提供 JSON-RPC 端點。 設定選項、同步時間和資料庫大小可能因用戶端而異。 詳細資訊請參考你的用戶端提供的文檔。 - -在開始建立你的歸檔節點前,請先了解用戶端之間的差異,尤其是[硬體要求](/developers/docs/nodes-and-clients/run-a-node/#requirements)的部分。 多數用戶端沒有最佳化這個部分,且它們的存檔需要超過 12TB 的儲存空間。 與如 Erigon 的實作對比,Erigon 可以在低於 3TB 的空間儲存相同的資料,使其成為運行歸檔節點最有效率的方式。 - -## 推薦的做法 - -除了一般的[運行節點建議](/developers/docs/nodes-and-clients/run-a-node/)外,歸檔節點可能更注重硬體和維護。 考慮到 Erigon 的[關鍵功能](https://github.com/ledgerwatch/erigon#key-features),最實用的方法是使用 [Erigon](/developers/docs/nodes-and-clients/#erigon)用戶端實作。 - -### 硬體 - -永遠在用戶端文檔中確認滿足了特定模式的硬體要求。 對歸檔節點來說,最大的需求是磁碟空間。 取決於用戶端的不同,可能從 3TB 到 12TB 都有。 雖然硬碟被認為可能是儲存大量資料的更好辦法,但同步資料和不斷地更新鏈頭需要固態硬碟。 [SATA](https://www.cleverfiles.com/help/sata-hard-drive.html) 硬碟足夠好,但它要有可靠的品質,至少要 [TLC](https://blog.synology.com/tlc-vs-qlc-ssds-what-are-the-differences)。 磁碟可以安裝在有足夠插槽的桌機或伺服器中。 這些專用設備適合需要長時間正常運行的節點。 在筆電上運行也是完全可行的,但便攜性將帶來額外的成本。 - -所有的資料都需要放入一個磁碟區中,所以磁碟必須合併,如 [RAID0](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0) 或 [LVM](https://web.mit.edu/rhel-doc/5/RHEL-5-manual/Deployment_Guide-en-US/ch-lvm.html)。 或許 [ZFS](https://en.wikipedia.org/wiki/ZFS) 也是值得考慮的選擇,因為它支援「寫入時複製」,確保了資料正確寫入磁碟而沒有任何低階錯誤。 - -關於更多避免資料庫損毀的穩定安全方法,特別是專業設定中,如果你的系統支援,可以考慮 [ECC 記憶體](https://en.wikipedia.org/wiki/ECC_memory)。 RAM 的大小一般建議和全節點一樣,但更多的 RAM 可以加速同步速度。 - -在初始同步時,在歸檔模式的用戶端會執行自創世塊以來的每個交易。 執行速度大多時候受到 CPU 限制,所以更快的 CPU 對減少初始同步時間有幫助。 在平均水準的消費級電腦上,初始同步可能會長達一個月。 - -## 了解更多 {#further-reading} - -- [以太坊全節點與歸檔節點](https://www.quicknode.com/guides/infrastructure/ethereum-full-node-vs-archive-node) - _QuickNode,2020 年 9 月_ -- [建立你自己的以太坊歸檔節點](https://tjayrush.medium.com/building-your-own-ethereum-archive-node-72c014affc09) - _Thomas Jay Rush,2021 年 8 月_ -- [如何設定 Erigon、Erigon 的 RPC 和 TrueBlocks(抓取和應用程式介面)作為服務](https://magnushansson.xyz/blog_posts/crypto_defi/2022-01-10-Erigon-Trueblocks) _ - Magnus Hansson,2022 年 9 月更新_ - -## 相關主題 {#related-topics} - -- [節點和用戶端](/developers/docs/nodes-and-clients/) -- [運行節點](/developers/docs/nodes-and-clients/run-a-node/) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/bootnodes/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/bootnodes/index.md" deleted file mode 100644 index 794f763ab75..00000000000 --- "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/bootnodes/index.md" +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: 以太坊引導節點介紹 -description: 你需要知道的引導節點基礎資訊 -lang: zh-tw ---- - -當一個新節點加入以太坊網路時,它需要連接至網路上已經存在的其他節點,以找到新的對等節點。 這些以太坊網路的進入點被稱為引導節點。 用戶端中通常有個硬編碼進去的引導節點清單。 這些引導節點通常由以太坊基金會的 DevOps 團隊或客戶團隊自身負責運行。 注意,引導節點與靜態節點不同。 靜態節點會被多次呼叫,而引導節點只有在沒有足夠的節點可以連接,或節點需要引導一些新連接時才會被呼叫。 - -## 連接至引導節點 {#connect-to-a-bootnode} - -大部分的用戶端中都有個內建的引導節點清單,但你也可能會想運行自己的引導節點,或者使用沒在用戶端硬編碼清單上的引導節點。 這種情況下,你可以在啟動用戶端時指定引導節點,如下所示(這個是 Geth 的例子,請查看你的用戶端文檔): - -``` -geth --bootnodes "enode://@:" -``` - -## 運行引導節點 {#run-a-bootnode} - -引導節點是不在 NAT([網路位址轉譯](https://www.geeksforgeeks.org/network-address-translation-nat/))後的全節點。 只要可以公開可用,每個全節點都可以作為引導節點。 - -當你啟動節點時,它會記錄你的 [enode](/developers/docs/networking-layer/network-addresses/#enode),這是可供其他人連接你的節點的公開識別碼。 - -通常每次啟動都會重新產生 enode,所以請務必查看你的用戶端文檔,以了解如何為你的引導節點產生永久的 enode。 - -要成為一個好的引導節點,增加該節點能連接的對等節點最大數量是個好辦法。 運行一個有許多對等節點的引導節點會顯著增加帶寬需求。 - -## 可用的引導節點 {#available-bootnodes} - -Go-ethereum 內建的引導節點清單可以在[此處](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go#L23)查看。 這些引導節點由以太坊基金會和 go-ethereum 團隊維護。 - -還有由志願者維護的引導節點的其他清單。 請確認至少包含一個官方的引導節點,否則你可能會受到日蝕攻擊。 diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/client-diversity/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/client-diversity/index.md" deleted file mode 100644 index fd54ff97e9b..00000000000 --- "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/client-diversity/index.md" +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: 用戶的多樣化 -description: 對以太坊用戶端多樣性的重要性的高階解釋。 -lang: zh-tw -sidebarDepth: 2 ---- - -以太坊節點的行為是由它所運行的用戶端軟體控制。 有許多生產等級的以太坊用戶端,每個用戶端都由不同團隊以不同程式語言開發和維護。 用戶端是以相同規範建立的,以確保用戶端彼此可以無縫互相通訊,且具有相同的功能及提供相等的使用者體驗。 然而,目前節點間的用戶端分佈仍然不夠均勻,無法充分發揮這種網路強化的潛力。 理想上,使用者大致平均分配到各個用戶端,以為網路帶來儘可能多的用戶端多樣性。 - -## 前置要求 {#prerequisites} - -如果你還不了解節點和用戶端是什麼,請先閱讀[節點和用戶端](/developers/docs/nodes-and-clients/)。 [執行](/glossary/#execution-layer)和[共識](/glossary/#consensus-layer)層在術語表中有定義。 - -## 為什麼會有多樣化的用戶端呢? {#why-multiple-clients} - -存在多種獨立開發和維護的用戶端是有利的,因為用戶端多樣性使網路應對攻擊和錯誤時更有彈性。 多種用戶端是以太坊獨有的優勢 - 其他區塊鏈依賴單一用戶端的正確性。 然而,只擁有多種用戶端還不夠,它們必須被社群採用,且活躍的節點在它們間需要相對平均分佈。 - -## 為什麼用戶端多樣化重要? {#client-diversity-importance} - -有許多獨立開發和維護的用戶端對去中心化網路的健康十分重要。 讓我們探索一下其中原因。 - -### 錯誤 {#bugs} - -當單一用戶端中存在錯誤,如果該用戶端只代表少數以太坊節點時,對網路的風險較小。 節點在許多用戶端上分佈大致均勻,大多數用戶端遭受共同問題的可能性很小,網路因此更加穩健。 - -### 對攻擊的抗性 {#resilience} - -用戶端多樣性提供了攻擊抗性。 舉例來說,一個[欺騙特定用戶端](https://twitter.com/vdWijden/status/1437712249926393858)切換到特定分支鏈的攻擊不太可能成功,因為其他的用戶端不太可能以相同方式被利用,且規範鏈維持正常不變。 低用戶端多樣性會增加主導用戶端被駭的風險。 用戶端多樣性已被證明是抵禦網路上惡意攻擊的重要防禦,舉例來說 2016 年的上海阻斷服務攻擊是可能成功的,因為攻擊者能夠欺騙主導用戶端 (Geth) 在每個區塊中執行數千萬次的慢速磁碟讀寫操作。 因為替代用戶端同時在線且沒有同樣的漏洞,以太坊才得以在修復 Geth 的漏洞期間抵禦攻擊並持續運行。 - -### 權益證明最終確定性 {#finality} - -超過 33% 的以太坊節點共識用戶端中都存在的錯誤可能會阻止共識層的最終確定,這表示使用者沒辦法相信交易在某個時刻不會被撤銷或更改。 這對建立在以太坊上的許多應用程式是非常大的問題,尤其是去中心化金融。 - - 更糟糕的是,在兩三個主流用戶端中的重大錯誤可能會導致鏈錯誤地分叉和最終確定,使大量的驗證者被卡在無效的鏈上。 如果這些驗證者想重新加入正確的鏈,它們可能會面臨罰沒或緩慢且昂貴的自願提款和重新啟用流程。 罰沒的規模與有罪節點的數量成正比,其中三分之二的主流節點會被罰沒最高金額(32 以太幣)。 - -雖然這些情況不太可能發生,以太坊生態系可以透過平均分佈用戶端至各個活躍節點以降低風險。 理想上,不會有共識用戶端超過總節點數的 33%。 - -### 共同的責任 {#responsibility} - -擁有主流用戶端也有人力成本問題。 它為小型開發團隊帶來了過多壓力和責任。 越低的用戶端多樣性,會使得開發者維護主流用戶端的負擔更重。 將此責任分散至多個團隊,對以太坊網路上的節點和網路上的開發者的健康都有益。 - -## 目前的用戶端多樣性 {#current-client-diversity} - -![圓餅圖顯示了用戶端多樣性](./client-diversity.png) _圖表資料來自 [ethernodes.org](https://ethernodes.org) 和 [ clientdiversity.org](https://clientdiversity.org/)_ - -上方的兩個圓餅圖顯示了目前執行層和共識層用戶端上的節點多樣性的快照(2022 年 1 月撰文時)。 執行層由 [Geth](https://geth.ethereum.org/) 壓倒性地主導,[Open Ethereum](https://openethereum.github.io/) 排名第二,[Erigon](https://github.com/ledgerwatch/erigon) 第三,[Nethermind](https://nethermind.io/) 第四,其他用戶端相加還不到整個網路的 1%。 最常在共識層上被使用的用戶端 - [Prysm](https://prysmaticlabs.com/#projects) - 的主導地位不及 Geth,但還是佔了超過整個網路的 60%。 [Lighthouse](https://lighthouse.sigmaprime.io/) 和 [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) 分別佔約 20% 和 14%,其他用戶端則很少被使用。 - -執行層資料是在 2022 年 1 月 23 日從 [Ethernodes](https://ethernodes.org) 取得的。 共識層的資料是從 [Michael Sproul](https://github.com/sigp/blockprint) 取得的。 共識層資料較難取得,因為共識層用戶端並不總是有可用於識別它們的明確足跡。 該資料是使用分類演算法產生的,有時候會把一些小眾用戶端搞混(點按[此處](https://twitter.com/sproulM_/status/1440512518242197516)以獲得更多資訊)。 上圖中,這些不明確的分類使用了「/」或標籤(例如 Nimbus/Teku)標示。 儘管如此,很顯然主要網路都在運行 Prysm。 此資料是一組固定區塊的快照(在這個例子中是時隙 2048001 至 2164916 中的信標區塊),Prysm 的主導地位有時更高,超過了 68%。 儘管只是快照,但圖中的數值提供了我們目前整體用戶端多樣性狀態的良好認識。 - -現在已可在 [clientdiversity.org](https://clientdiversity.org/) 上查看共識層的最新用戶端多樣性資料。 - -## 執行層 {#execution-layer} - -直到現在,關於用戶端多樣性的討論主要集中在共識層。 然而,執行用戶端 [Geth](https://geth.ethereum.org) 目前約佔所有節點的 85%。 這個比例問題很大,與共識用戶端的原因一樣。 舉例來說,Geth 中影響交易處理或建立執行有效負載的錯誤可能會導致共識用戶端最終確定有問題或錯誤的交易。 因此,如果執行用戶端分佈狀況更均勻,以太坊將更加健康,理想情況下不該有用戶端網路佔比超過 33%。 - -## 使用小眾用戶端 {#use-minority-client} - -解決用戶端多樣性需要的不只是個人使用者選擇小眾用戶端 - 它還需要挖礦/驗證者池及主要去中心化應用程式和交易所等機構更換用戶端。 然而,所有使用者都可以儘自己的一份力量,以糾正目前的不平衡,並讓所有可用的以太坊軟體使用分佈正常化。 合併後,所有節點營運者都需要運行執行用戶端和共識用戶端。 選擇以下推薦的用戶端組合,可幫助提升用戶端多樣性。 - -### 執行客戶 {#execution-clients} - -[Besu](https://www.hyperledger.org/use/besu) - -[Nethermind](https://downloads.nethermind.io/) - -[Erigon](https://github.com/ledgerwatch/erigon) - -[Go-Ethereum](https://geth.ethereum.org/) - -### 共識用戶端 {#consensus-clients} - -[Nimbus](https://nimbus.team/) - -[Lighthouse](https://github.com/sigp/lighthouse) - -[Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) - -[Lodestar](https://github.com/ChainSafe/lodestar) - -[Prysm](https://docs.prylabs.network/docs/getting-started) - -技術性使用者可以透過為小眾用戶端撰寫更多教學和文檔,並鼓勵其節點營運的對等節點從主導用戶端遷出,以幫助加速此流程。 [clientdiversity.org](https://clientdiversity.org/) 上有切換到小眾共識用戶端的指南。 - -## 用戶端多樣性儀表板 {#client-diversity-dashboards} - -一些儀表板提供了執行層和共識層上即時的用戶端多樣性統計資料。 - -**共識層:** - -- [Rated.network](https://www.rated.network/) -- [clientdiversity.org](https://clientdiversity.org/) **執行層:** - -- [supermajority.info](https://supermajority.info//) -- [Ethernodes](https://ethernodes.org/) - -## 衍生閱讀 {#further-reading} - -- [以太坊共識層上的用戶端多樣性](https://mirror.xyz/jmcook.eth/S7ONEka_0RgtKTZ3-dakPmAHQNPvuj15nh0YGKPFriA) -- [以太坊合併:運行主流用戶端需自行承擔風險!](https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html) – _Dankrad Fiest,2022 年 3 月 24 日_ -- [用戶端多樣性的重要性](https://our.status.im/the-importance-of-client-diversity/) -- [以太坊節點服務清單](https://ethereumnodes.com/) -- [用戶端多樣性的「五個為什麼」](https://notes.ethereum.org/@afhGjrKfTKmksTOtqhB9RQ/BJGj7uh08) -- [以太坊多樣性及如何解決 (YouTube)](https://www.youtube.com/watch?v=1hZgCaiqwfU) -- [clientdiversity.org](https://clientdiversity.org/) - -## 相關主題 {#related-topics} - -- [運行以太坊節點](/run-a-node/) -- [節點與用戶端](/developers/docs/nodes-and-clients/) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/index.md" deleted file mode 100644 index 5e6184393d0..00000000000 --- "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/index.md" +++ /dev/null @@ -1,307 +0,0 @@ ---- -title: 節點和客戶 -description: 以太坊節點及用戶端軟體概述,以及如何設定節點和你為何應該這麼做。 -lang: zh-tw -sidebarDepth: 2 ---- - -以太坊是一個由許多電腦(稱為節點)組成的分散式網路,這些節點運行能夠驗證區塊和交易資料的軟體。 這些軟體必須於你的電腦上運行,將電腦轉換成以太坊節點。 一個節點由兩個獨立的軟體(稱為「用戶端」)組成。 - -## 基本資訊 {#prerequisites} - -在深入研究並執行屬於你的以太坊用戶端實例之前,你應該瞭解點對點網路的概念和[以太坊虛擬機基礎知識](/developers/docs/evm/)。 請參閱[以太坊簡介](/developers/docs/intro-to-ethereum/)。 - -如果你對節點這個主題還很陌生,推薦你首先查看我們適合使用者的[運行以太坊節點](/run-a-node)簡介。 - -## 什麼是節點與用戶端? {#what-are-nodes-and-clients} - -「節點」是指以太坊用戶端軟體的任何實例,該用戶端軟體連線到其他也在運行以太坊軟體的電腦,進而形成網路。 用戶端是以太坊的實作,根據協定規則驗證資料,並保持網路安全。 一個節點必須運行兩個用戶端:共識用戶端和執行用戶端。 - -- 執行用戶端(又稱為執行引擎,EL 用戶端或舊稱為 以太坊 1 用戶端)監聽網路上廣播的新交易,在以太坊虛擬機器 (EVM) 中執行交易,並保存所有目前以太坊資料的最新狀態和資料庫。 -- 共識用戶端(又稱為信標鏈節點、CL 用戶端或舊稱為以太坊 2 用戶端)執行權益證明共識演算法,使網路能夠依據來自執行用戶端的驗證過的資料達成一致。 此外,還有第三個軟體,稱為「驗證者」;驗證者可以被新增到共識用戶端中,讓節點能參與保護網路安全。 - -這些用戶端共同運作以追蹤以太坊區塊鏈的頭部並使用戶可以和以太坊網路互動。 這種多個軟體協同工作的模組化設計稱為[封裝複雜性](https://vitalik.eth.limo/general/2022/02/28/complexity.html)。 此方法可以更簡單地無縫執行[合併](/roadmap/merge),讓用戶端軟體更容易維運和開發,並能重複利用個別的用戶端,例如在[二層網路生態系統](/layer-2/)中使用。 - -![關聯的執行和共識用戶端](./eth1eth2client.png) 關聯的執行用戶端和共識用戶端的簡化示意圖。 - -### 用戶的多樣化 {#client-diversity} - -[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)和[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)存在於由不同團隊開發的多種程式語言中。 - -多種用戶端實作可以降低對單一程式碼庫的依賴,從而使網路更強大。 理想目標是達到多樣性,沒有任一用戶端在網路中佔有主導地位,從而消除潛在的單點故障。 語言多樣化也可以吸引更廣泛的開發者社群,並讓他們可以用自己偏好的語言來建立整合。 - -瞭解更多關於[用戶端多樣化](/developers/docs/nodes-and-clients/client-diversity/)的資訊。 - -這些實作的共通點就是都遵循一套統一規範。 這些規範決定以太坊網路和區塊鏈的運作方式。 所有的技術細節都已經定義,規範如下: - -- 最初的[以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf) -- [執行規範](https://github.com/ethereum/execution-specs/) -- [共識規範](https://github.com/ethereum/consensus-specs) -- 各種[網路升級](/history/)中實作的[以太坊改善提議](https://eips.ethereum.org/) - -### 追蹤網路中的節點 {#network-overview} - -多種追蹤器提供以太坊網路中節點的即時概覽。 必須注意,由於去中心化網路的特性,這些爬蟲僅能提供有限的網路資訊,並且可能會報告不同的結果。 - -- Etherscan 提供的[節點地圖](https://etherscan.io/nodetracker) -- Bitfly 提供的[Ethernodes](https://ethernodes.org/) -- Chainsafe 提供的 [Nodewatch](https://www.nodewatch.io/),爬取共識節點 - -## 節點類型 {#node-types} - -如果你想[運行你自己的節點](/developers/docs/nodes-and-clients/run-a-node/),你需要瞭解:不同類型的節點以不同的方式消耗資料。 事實上,用戶端可以運行三種類型的節點:輕節點、全節點和歸檔節點。 還可以選擇不同的同步策略,從而達成更快的同步時間。 同步是指取得以太坊最新狀態資訊的速度。 - -### 全節點 {#full-node} - -全節點對區塊鏈上的區塊逐一驗證,包括下載和驗證每個區塊的區塊體和狀態資料。 全節點有不同的類型 - 一些全節點會從初始區塊開始,驗證整個區塊鏈歷史上的每一個區塊。 另外一些全節點,僅從較近期的、它們認為有效的區塊開始驗證(例如:Geth 的 「快照同步」)。 不論從哪裡開始,全節點僅保留相對近期的資料(通常是最新的 128 個區塊)的本機副本,允許刪除較舊的資料以節省磁碟空間。 舊的資料可以在需要時重新生成。 - -- 儲存完整區塊鏈資料(儘管會定期修剪,全節點並不會將所有狀態資料儲存回創世塊) -- 參與區塊驗證,驗證所有區塊和狀態。 -- 所有的狀態都可以從本機儲存中取得,或由全節點從「快照」中重新產生。 -- 為網路提供服務並根據請求提供資料。 - -### 歸檔節點 {#archive-node} - -從初始區塊開始驗證每一個區塊並且從不刪除任何已下載資料的全節點,稱為歸檔節點。 - -- 儲存全節點中保存的所有內容並建立歷史狀態檔案。 歸檔節點可供查詢鏈上資料,像是某個帳戶在第 #4,000,000 區塊的餘額,或是簡單可靠的測試一組自己的交易而無須使用追蹤功能來挖掘這些資料。 -- 這些資料量以兆位元為單位,因此歸檔節點對於一般使用者來說較沒有吸引力,但是對於區塊瀏覽器、錢包服務商、鏈分析則十分方便。 - -以檔案以外的任何模式同步用戶端都會導致區塊鏈資料被修剪。 這意味著,沒有所有歷史狀態的存檔,但全節點能夠按需建立該存檔。 - -瞭解更多關於[歸檔節點](/developers/docs/nodes-and-clients/archive-nodes)的資訊。 - -### 輕節點 {#light-node} - -相較於下載所有的區塊,輕節點僅下載區塊頭。 這些區塊頭包含了區塊內容的摘要資訊。 輕節點所需要的任何其他資訊,都須向全節點發送請求來取得。 然後,輕節點可以根據區塊頭中的狀態根獨立驗證接收的資料。 輕節點讓使用者能參與以太坊網路,而無需運行全節點所需的強大的硬體或高帶寬。 最終,輕節點可能可以在行動電話或是嵌入式裝置中運行。 輕節點並不參與共識(意即不能成為礦工/驗證者),但是可以存取以太坊區塊鏈,並具有與全節點相同的功能和安全保證。 - -輕量用戶端是以太坊積極發展的領域,我們預期很快可以看到共識層和執行層的輕量用戶端。 也有一些潛在的路徑可以透過[廣播網路](https://www.ethportal.net/)提供輕量用戶端資料。 這是有利的,因為廣播網路可以支援輕節點網路,而不需要全節點來處理請求。 - -以太坊目前還不支援大量的輕節點,但輕節點支援是預計在不久的將來會快速發展的領域。 特別像是 [Nimbus](https://nimbus.team/)、[Helios](https://github.com/a16z/helios) 及 [LodeStar](https://lodestar.chainsafe.io/) 等用戶端,目前都著重聚焦在輕節點。 - -## 運行以太坊節點之理由? {#why-should-i-run-an-ethereum-node} - -運行節點可以讓你直接、去信任並私密地使用以太坊,同時透過保持網路強健和去中心化來支持以太坊網路。 - -### 對你之好處 {#benefits-to-you} - -運行自己的節點讓你可以透過私密、自給自足和去信任的方式來使用以太坊。 你無須信任網路,因為你可以透過你的用戶端驗證資料。 「不要信任,要驗證」是流行的區塊鏈口號。 - -- 你的節點依據共識規則自行驗證所有交易和區塊。 這意味著你不必依賴或完全信任網路中的任何其他節點。 -- 你可以將自己的以太坊錢包與自己的節點一起使用。 你可以更安全和私密地使用去中心化應用程式,而不需要洩漏你的地址和餘額給中介機構。 一切都可以透過你的用戶端核實。 [MetaMask](https://metamask.io)、[Frame](https://frame.sh/) 和[許多其他錢包](/wallets/find-wallet/)都有提供遠端程序呼叫匯入,讓他們可以使用你的節點。 -- 你可以運行並自託管其他依賴以太坊資料的服務。 例如:信標鏈驗證者、諸如二層網路的軟體、基礎設施、區塊瀏覽器、支付處理商等等。 -- 你可以提供自己的自訂[遠端程序呼叫端點](/developers/docs/apis/json-rpc/)。 你甚至可以公開提供這些端點給社群,以協助他們避開大型中心化提供者。 -- 你可以透過**行程間通訊 (IPC)** 來連線到自己的節點,或者你可以重新編寫節點,使其能夠載入你的外掛程式。 這樣可以降低延遲,會帶來諸多好處,例如利用 web3 函式庫處理大量資料時,或是當你需要盡可能快速替換交易時(例如:預先交易)。 -- 你可以直接質押 ETH 來維護網路安全並賺取獎勵。 請參考[單獨質押](/staking/solo/)瞭解更多。 - -![你如何透過應用程式和節點存取以太坊](./nodes.png) - -### 網路優點 {#network-benefits} - -多樣化的節點對於以太坊的健康、安全和營運彈性非常重要。 - -- 全節點強制執行共識規則,因此不會被欺騙而接受不遵循這些規則的區塊。 這對網路提供了額外的安全性,因為如果所有的節點都是不執行完整驗證的輕節點,驗證者可以攻擊網路。 -- 如果攻擊攻破了[權益證明](/developers/docs/consensus-mechanisms/pos/#what-is-pos)的加密貨幣經濟防禦,全節點可以選擇追隨最誠實的區塊鏈,執行社交恢復。 -- 網路中的節點越多,就越能打造更多樣化和強韌的網路,這是去中心化的最終目的,提供一個抗審查且可靠的系統。 -- 全節點為依賴區塊鏈資料的輕量用戶端提供這些區塊鏈資料的存取權限。 輕節點不會儲存整個區塊鏈,而是透過[區塊頭中的狀態根](/developers/docs/blocks/#block-anatomy)來驗證資料。 若有需要,輕節點可以向全節點索取更多的資訊。 - -如果你運行一個全節點,整個以太坊網路均會受益,即便你沒有運行驗證者。 - -## 運行你自己的節點 {#running-your-own-node} - -有興趣運行自己的以太坊用戶端嗎? - -如需適合初學者的介紹,請造訪我們的[運行節點](/run-a-node)頁面以瞭解更多資訊。 - -如果你是技術性使用者,請瞭解有關如何[啟動自己的節點](/developers/docs/nodes-and-clients/run-a-node/)的更多資訊和選項。 - -## 替代方案 {#alternatives} - -設定自己的節點需要時間和資源,但你不一定需要自己運行。 在這種情況下,你可以使用第三方應用程式介面提供者。 有關使用這些服務的概述,請參閱[節點即服務](/developers/docs/nodes-and-clients/nodes-as-a-service/)。 - -如果在你的社群中,有人運行以太坊節點並提供公開應用程式介面,你可以透過自訂遠端程序呼叫將你的錢包指向社群節點,比起隨機選擇一個可信的第三方,可以獲得更多的隱私。 - -另一方面,如果你運行用戶端,可以與需要此用戶端的朋友分享。 - -## 執行用戶端 {#execution-clients} - -以太坊社群維護多個開源執行用戶端(以前稱為「以太坊 1 用戶端」,或直接稱為「以太坊用戶端」),這些用戶端由不同團隊使用不同程式語言開發。 這使網路更強大也更[多樣化](/developers/docs/nodes-and-clients/client-diversity/)。 理想目標是達成多樣性,沒有任一用戶端佔有主導地位,以減少單點故障。 - -此表總結了不同的用戶端。 所有這些用戶端都通過了[用戶端測試](https://github.com/ethereum/tests),並積極維護以保持最新的網路升級狀態。 - -| 用戶端 | 語言 | 作業系統 | 網路 | 同步策略 | 狀態修剪 | -| ---------------------------------------------------------------------- | ---------- | --------------------- | ------------------------- | -------------------------------------------------- | ------ | -| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync)、[完整](#full-sync) | 歸檔、已修剪 | -| [Nethermind](https://www.nethermind.io/) | C#、.NET | Linux、Windows、macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync) (不提供服務)、快速、[完整](#full-sync) | 歸檔, 緩衝 | -| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [快照](#snap-sync)、[快速](#fast-sync)、[完整](#full-sync) | 歸檔, 緩衝 | -| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [完整](#full-sync) | 歸檔, 緩衝 | -| [Reth](https://reth.rs/) | Rust | Linux、Windows、macOS | Mainnet, Sepolia, Holesky | [完整](#full-sync) | 歸檔、已修剪 | -| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo)_(測試版)_ | TypeScript | Linux, Windows, macOS | Sepolia、Holesky | [完整](#full-sync) | 已修剪 | - -有關受支援網路的更多信息,請閱讀[以太坊網路](/developers/docs/networks/)。 - -每個用戶端都有獨特的用例和優勢,因此你應該根據自己的偏好進行選擇。 多樣化使實作能夠專注於不同的功能和使用者受眾。 你可能希望根據功能、支援、程式語言或許可證來選擇用戶端。 - -### Besu {#besu} - -Hyperledger Besu 是適用於公共和授權網路的企業級以太坊用戶端。 它運行所有以太坊主網功能,從追蹤到 GraphQL,具有廣泛的監控功能,並由 ConsenSys 在開放社群管道和企業商業 SLA 中提供支援。 它是用 Java 編寫的,並獲得 Apache 2.0 許可。 - -Besu 詳盡的 [文件](https://besu.hyperledger.org/en/stable/)會引導你學習其所有功能及設定的細節。 - -### Erigon {#erigon} - -Erigon,舊稱 Turbo‐Geth,最初為 Go Ethereum 的分叉,專注於速度與磁碟空間效率。 Eirgon 是完全重構過的以太坊實作,目前以 Go 語言編寫,而其他語言的實作仍在開發中。 Erigon 的目標是提供更快、更模組化、更優化的以太坊實作。 它可在 3 天內使用 2TB 磁碟空間完成完整歸檔節點同步。 - -### Go Ethereum {#geth} - -Go Ethereum(簡稱 Geth)是以太坊協定的原始實作之一。 目前,它是使用最廣泛的用戶端,擁有最大的使用者群體,並為使用者和開發者提供的各種工具。 它是用 Go 編寫的,完全開源,並獲得 GNU LGPL v3 許可。 - -從相關[文件](https://geth.ethereum.org/docs/)中了解有關 Geth 的更多資訊。 - -### Nethermind {#nethermind} - -Nethermind 是使用 C# .NET 技術堆疊開發的以太坊實作,以 LGPL-3.0 授權,在包含 ARM 的所有主要平臺上運行。 在以下方面提供出色效能: - -- 最佳化的虛擬機 -- 狀態存取 -- 網路和豐富的功能,如 Prometheus/Grafana 儀表板、seq 企業日誌記錄支援、JSON-RPC 追蹤和分析插件。 - -Nethermind 也為高級使用者提供[詳細文件](https://docs.nethermind.io)、強大的開發支援、線上社群和全年無休支援。 - -### Reth {#reth} - -Reth(Rust Etherum 的簡稱)是以太坊全節點的實作,致力於達成使用者友善、高度模組化、快速高效等目標。 Reth 最初由 Paradigm 開發並推動,且使用了 Apache 和 MIT 授權。 - -Reth 是生產就緒的執行用戶端,且適用於質押或高正常運作時間的服務等重要任務上。 在一些高效能、高利潤下的使用案例中表現優秀,如遠端程序呼叫、最大可提取價值、索引、模擬和點對點活動等。 - -查看 [Reth Book](https://reth.rs/) 或 [ Reth 的 GitHub 儲存庫](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth)以獲得更多資訊。 - -### 開發中 {#execution-in-development} - -這些用戶端仍處於開發早期階段,尚未推薦正式使用。 - -#### EthereumJS {#ethereumjs} - -EthereumJS 執行用戶端 (EthereumJS) 是以 TypeScript 編寫,並由多個套件組成,包括以區塊表示的核心以太坊基礎單元、交易和梅克爾帕特里夏樹據結構類別,以及核心用戶端元件,包括以太坊虛擬機 (EVM) 的實作、區塊鏈類別和 DevP2P 網路堆疊。 - -閱讀相關[文件](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master),了解更多資訊。 - -## 共識用戶端 {#consensus-clients} - -有多種共識用戶端(以前稱為「以太坊 2」用戶端)支援[共識升級](/roadmap/beacon-chain/)。 它們負責所有共識相關的邏輯,包含了分叉選擇演算法、處理證明並管理[權益證明](/developers/docs/consensus-mechanisms/pos)的獎勵和懲處。 - -| 用戶端 | 程式語言 | 作業系統 | 網路 | -| ------------------------------------------------------------- | ---------- | --------------------- | ------------------------------------------- | -| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | 信標鏈、Goerli、Pyrmont、Sepolia、Ropsten 等 | -| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | 信標鏈、Goerli、Sepolia、Ropsten 等 | -| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | 信標鏈、Goerli、Sepolia、Ropsten 等 | -| [Prysm](https://docs.prylabs.network/docs/getting-started/) | 開始 | Linux, Windows, macOS | 信標鏈、Gnosis、Goerli、Pyrmont、Sepolia、Ropsten 等 | -| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux、Windows、macOS | 信標鏈、Gnosis、Goerli、Sepolia、Ropsten 等 | - -### Lighthouse {#lighthouse} - -Lighthouse 是以 Rust 開發的共識用戶端實作,以 Apache-2.0 授權。 它由 Sigma Prime 維護,自信標鏈問世以來一直穩定且可直接用於生產。 各企業、質押池及個人都依賴它。 它的目標是從桌上型個人電腦到複雜的自動化部署,在各環境中都保持安全、高效及可互通性。 - -文件可在 [Lighthouse 手冊](https://lighthouse-book.sigmaprime.io/)中找到 - -### Lodestar {#lodestar} - -Lodestar 是以 Typescript 編寫,生產就緒的共識用戶端實作,以 LGPL-3.0 授權。 它由 ChainSafe Systems 維護,此外也是為單獨質押者、開發者、研究者而生的最新共識用戶端。 Lodestar 包含了信標節點及驗證者用戶端,該用戶端由以太坊協定的 JavaScript 實作提供支援。 Lodestar 致力於提升以太坊輕量用戶端的可用性,並為更多開發者擴大可存取性,以及提高以太坊生態系統多樣性。 - -更多資訊可在 [Lodestar 官網](https://lodestar.chainsafe.io/)找到 - -### Nimbus {#nimbus} - -Nimbus 是以 Nim 開發的共識用戶端實作,以 Apache-2.0 授權。 它是生產就緒的用戶端,常被單獨質押者及質押池使用。 Nimbus 專為資源效率而生,可在資源有限的裝置及企業基礎設施上輕鬆運行,而不影響其穩定性及獎勵效能。 更少的資源佔用意味著網路面臨壓力時,用戶端有更大的安全邊際。 - -在 [Nimbus 文檔](https://nimbus.guide/)中瞭解更多 - -### Prysm {#prysm} - -Prysm 是功能完整且開源的共識用戶端,以 Go 語言開發並以 GPL-3.0 授權。 它有可選的網頁應用用戶介面,並將自行質押者及機構使用者的使用者體驗、文檔及設定檔放在第一位。 - -閱讀 [Prysm 文檔](https://docs.prylabs.network/docs/getting-started/)以獲得更多資訊。 - -### Teku {#teku} - -Teku 是最初的信標鏈創世用戶端之一。 除了一般的目標(安全性、穩定性、可用性、效能)外,Teku 特別致力於遵循各式各樣的用戶端標準。 - -Teku 提供了非常彈性的部署選項。 信標節點與驗證者用戶端可以在同個進程一起運行,對單獨質押者來說非常方便,節點也可分開運行,以完成複雜的質押操作。 此外,Teku 與 [Web3Signer](https://github.com/ConsenSys/web3signer/) 完全相容,以實現簽署金鑰安全及罰沒保護。 - -Teku 以 Java 編寫,並以 Apache 2.0 授權發佈。 它由 ConsenSys 的 Protocols 團隊開發,該團隊也負責 Besu 和 Web3Signer 開發。 在 [Teku 文檔中](https://docs.teku.consensys.net/en/latest/)瞭解更多。 - -## 同步模式 {#sync-modes} - -為了追蹤和驗證網路中的當前資料,以太坊用戶端需要與最新的網路狀態同步。 這是透過從對等用戶端下載資料、以加密方式驗證其完整性並建立本地區塊鏈資料庫來完成的。 - -同步模式代表了達成此過程的不同方法以及各種權衡。 用戶端同步演算法的實作也各不相同。 請務必參閱你選擇的用戶端的官方文件,以了解實作的具體資訊。 - -### 執行層同步模式 {#execution-layer-sync-modes} - -執行層可以於不同的模式下運行,從重新執行區塊鏈的全域狀態到僅與來自可信任檢查點的鏈尖同步,以適應不同的用例。 - -#### 完整同步 {#full-sync} - -完整同步會下載所有區塊(包括區塊頭和區塊體),並透過執行創世區塊以來的每個區塊來增量地重新生成區塊鏈的狀態。 - -- 透過驗證每筆交易,最大限度地減少信任依賴並提供最高的安全性。 -- 隨著交易數量不斷增加,處理所有交易可能需要幾天到幾週的時間。 - -[歸檔節點](#archive-node)執行完整同步,以建立(並保留)每個區塊中每個交易所做的狀態變更的完整歷史記錄。 - -#### 快速同步 {#fast-sync} - -與完整同步一樣,快速同步會下載所有區塊(包括區塊頭、交易和收據)。 然而,快速同步不會重新處理歷史交易,而是依賴收據直到它到達最近的區塊頭,此時它切換到匯入和處理區塊以提供完整節點。 - -- 快速同步策略。 -- 減少處理需求,有利頻寬使用。 - -#### 快照同步 {#snap-sync} - -快照同步也會逐塊去驗證鏈。 然而,快照同步不是從創世區塊開始,而是從更新的及已知是真正區塊鏈一部分的「可信任」檢查點開始。 節點會儲存週期性檢查點,同時刪除比某時間點早的資料。 這些快照用於根據需要重新產生狀態資料,而不是永久儲存該資料。 - -- 最快的同步策略,目前為以太坊主網的預設策略。 -- 在不犧牲安全性的情況下,節省了大量的磁碟空間和網路頻寬。 - -[更多有關快照同步的資訊](https://github.com/ethereum/devp2p/blob/master/caps/snap.md)。 - -#### 輕量同步 {#light-sync} - -輕量用戶端模式下載所有區塊頭、區塊資料,並進行隨機驗證。 僅從受信任的檢查點同步鏈尖。 - -- 依靠對開發者的信任和共識機制,只取得最新狀態。 -- 用戶端可在幾分鐘內在目前網路狀態下使用。 - -**NB** 輕量同步目前無法在權益證明以太坊上使用,新版本的輕量同步應很快會發佈! - -[關於輕量用戶端的更多資訊](/developers/docs/nodes-and-clients/light-clients/) - -### 共識層同步模式 {#consensus-layer-sync-modes} - -#### 樂觀同步 {#optimistic-sync} - -樂觀同步是一種合併後同步策略,被設計為可選擇向後兼容,可使執行節點透過預先建立的方法同步。 執行引擎可以_樂觀地_匯入信標區塊而不需要完整驗證,找到最新的區塊頭,並使用上述方法開始同步鏈。 接著,在執行用戶端同步至最新狀態後,它會通知共識用戶端信標鏈中交易的有效性。 - -[關於樂觀同步的更多資訊](https://github.com/ethereum/consensus-specs/blob/dev/sync/optimistic.md) - -#### 檢查點同步 {#checkpoint-sync} - -檢查點同步又稱弱主觀性同步,在同步信標節點時提供優異的使用者體驗。 它是基於[弱主觀性](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/)假設,使信標鏈能夠從近期的弱主觀性檢查點開始同步,而不是從創世塊開始。 檢查點同步顯著縮短了初始同步時間,其信任假設與從[創世塊](/glossary/#genesis-block)開始同步相同。 - -在實際運作上,這表示你的節點會連接至遠端服務,以下載近期最終確定的狀態,並從該點開始繼續驗證資料。 提供資料的第三方會受到信任,因此應謹慎選擇。 - -關於[檢查點同步](https://notes.ethereum.org/@djrtwo/ws-sync-in-practice)的更多資訊 - -## 衍生閱讀 {#further-reading} - -- [以太坊 101 - 第 2 部分 - 瞭解節點](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes,2019 年 2 月 13 日_ -- [運行以太坊全節點:針對幾乎沒有動力的人提供的指南](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31)_ – Justin Leroux,2019 年 11 月 7 日_ - -## 相關主題 {#related-topics} - -- [分塊](/developers/docs/blocks/) -- [網路](/developers/docs/networks/) - -## 相關教學 {#related-tutorials} - -- [只需刷寫 MicroSD 卡即可將你的樹莓派 4 變成驗證者節點 -- 安裝指南](/developers/tutorials/run-node-raspberry-pi/) _ -- 刷寫你的樹莓派 4,插入乙太網路纜線,連接 SSD 磁碟,然後啟動設備,將樹莓派 4 轉變為運行執行層(主網)和/或共識層(信標鏈/驗證者)的完整以太坊節點。_ diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/light-clients/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/light-clients/index.md" deleted file mode 100644 index fb82bac4211..00000000000 --- "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/light-clients/index.md" +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: 輕量用戶端 -description: 以太坊輕量用戶端介紹 -lang: zh-tw ---- - -運行全節點是與以太坊互動最去信任、隱私、去中心化和抗審查的方式。 透過全節點,你可以保留自己的區塊鏈副本,可用於即時查詢並直接存取以太坊的點對點網路。 然而,運行全節點需要大量的記憶體、儲存空間及 CPU 資源。 這意味著讓所有人運行自己的節點不可行。 以太坊路線圖上有幾種解決方式,包括無狀態,但距離實現還要幾年的時間。 近期的解決方法是權衡一些運行全節點的優點,以實現大幅效能改進,使節點在極低硬體需求下運行。 做出這種妥協的節點稱為輕節點。 - -## 輕量用戶端是什麼? {#what-is-a-light-client} - -輕節點是運行輕量用戶端軟體的節點。 輕節點不保留區塊鏈資料的本地副本,也不獨立驗證所有變更,而是向一些提供者索取必要資料。 提供者可能是直接或透過一些中心化遠端程序呼叫伺服器連結到全節點。 接著,輕節點驗證資料,使資料能和鏈頭保持同步。 輕節點只處理區塊頭,只有偶爾才會下載實際區塊內容。 節點的輕量程度可能會有所不同,具體取決於它們執行的輕量和全用戶端軟體的組合。 舉例來說,最輕量的設定是運行一個輕量執行用戶端和一個輕量共識用戶端。 許多節點也有可能會選擇運行輕量共識用戶端和全執行用戶端,反之亦然。 - -## 輕量用戶端是如何運作的? {#how-do-light-clients-work} - -當以太坊開始使用基於權益證明的共識機制時,專門引入了新的基礎設施來支援輕量用戶端。 它的運作方式是,每 1.1 天隨機選擇包含了 512 個驗證者的子集作為**同步委員會**。 同步委員會簽署最近區塊的頭部。 每個區塊頭包括了同步委員會中驗證者的聚合簽名,以及一個顯示驗證者簽名與否的「位元欄位」。 每個區塊頭還包含了預期參與下一個區塊簽名的驗證者清單。 這表示輕量用戶端可以快速查看同步委員會是否已簽署它們收到的資料,它們也可以透過比較它們收到的資料和依據上一個區塊而預期收到的資料,以確認同步委員會的真實性。 這樣一來,輕量用戶端就能持續更新對最新以太坊區塊的了解,而不需要實際下載區塊,只要下載包含摘要資訊的區塊頭即可。 - -在執行層上,沒有對輕量執行用戶端的單一規範。 輕量執行用戶端的範圍差異可以與全執行用戶端的「輕量模式」不同,後者有全節點的所有以太坊虛擬機和網路功能,但只驗證區塊頭,而不下載相關資料,或者它也可以是更精簡的用戶端,主要依賴將請求轉發至遠端程序呼叫提供者以和以太坊交互。 - -## 為什麼輕量用戶端很重要? {#why-are-light-clients-important} - -輕量用戶端重要的原因是,它們讓使用者驗證傳入的資料,而非盲目相信它們的資料提供者是正確和誠實的,同時只使用全節點運算資源的很小一部分。 輕量用戶端收到的資料可以根據區塊頭進行檢查,因為它們知道這些區塊頭已獲得 512 個隨機的以太坊驗證者中至少 2/3 的簽名。 這是能證明資料正確的強大證據。 - -輕量用戶端只使用很小一部分的算力、記憶體和儲存空間,因此它們可以在手機上、嵌入應用程式中或作為瀏覽器的一部分運行。 輕量用戶端以信任最小化的方式存取以太坊,就像信任第三方提供者一樣順暢。 - -我們來看個簡單的例子。 想像你打算查看你的錢包餘額。 要完成這件事,你需要向以太坊節點發送一個請求。 該節點會檢查它的以太坊的本地副本中你的餘額,並將其回傳給你。 如果你沒有辦法直接存取節點,有一些中心化的營運商會提供此資料作為服務。 你可以向它們發送一個請求,它們會查看其節點,並將結果回傳給你。 這個方法的問題在於,你需要信任該提供者提供了你正確的資訊。 如果你無法自行驗證資訊,你永遠無法知道該資訊是否正確。 - -輕量用戶端可以解決此問題。 你仍然向外部提供者請求資料,但當你接收到返回的資料時,資料會附加一個證明,你的輕量用戶端可以依據區塊頭中收到的資訊來檢查這個證明。 這表示以太坊會驗證你資料的正確性,而不是某些受信任的營運者來驗證。 - -## 輕量用戶端帶來了哪些創新? {#what-innovations-do-light-clients-enable} - -輕量用戶端的主要好處是使更多的人能夠獨立存取以太坊,對硬體的需求幾乎可忽略,依賴第三方程度也被降到最低。 這對使用者來說有益,因為他們可以驗證自己的資料,且它提升了驗證區塊鏈的節點數量及多樣性。 - -輕量用戶端解鎖的創新領域其中之一是可以在儲存空間、記憶體和處理能力都很小的裝置上運行以太坊節點。 如今的以太坊節點需要大量運算資源,輕量用戶端可被嵌入瀏覽器中、在手機上運行,或者甚至可能在更小的智慧型裝置上運行,如智慧手錶。 這表示含有嵌入式用戶端的以太坊錢包可能可以在手機上運行。 這表示手機錢包可更去中心化,因為它們不需要信任中心化資料提供者以獲取資料。 - -這個的延伸是使用**物聯網 (IoT)** 裝置。 輕量用戶端可用於快速證明某些代幣或非同質化代幣的餘額或擁有權,透過所有同步委員會提供的安全保證,以觸發物聯網的某些操作。 想像一個[腳踏車租借服務](https://youtu.be/ZHNrAXf3RDE?t=929),透過應用程式和嵌入式輕量用戶端以快速驗證你擁有租借服務的非同質化代幣,如果是,則解鎖一輛腳踏車讓你騎走。 - -以太坊卷軸也受益於輕量用戶端。 卷軸一直以來的其中一個大問題是,駭客會瞄準允許資金在卷軸和以太坊之間轉移的跨鏈橋發動攻擊。 其中一個漏洞是卷軸用來偵測使用者是否存款至跨鏈橋的預言機。 如果預言機提供了錯誤資料,它們可能會欺騙卷軸有新存款至跨鏈橋的資金,並錯誤的釋放資金。 嵌入在卷軸中的輕量用戶端可以用來避免預言機損壞帶來的傷害,因為存款進跨鏈橋可以得到一個附加的證明,可在釋放資金前被卷軸用來驗證。 相同的概念也適用於其他跨鏈橋。 - -輕量用戶端也可以用於升級以太坊錢包。 你的錢包可以使用嵌入式輕量用戶端直接驗證向你提供的資料,而不用信任遠端程序呼叫提供者提供的資料。 這會為你的錢包提升安全性。 如果你的遠端程序呼叫提供者不誠實,且向你提供錯誤的資料,嵌入式輕量用戶端會告訴你! - -## 輕量用戶端開發的現狀如何? {#current-state-of-development} - -有許多的輕量用戶端都在開發中,包括執行、共識、和執行/共識組合的輕量用戶端。 這些是在撰文時我們已知的輕量用戶端實現: - -- [Lodestar](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client):由 TypeScript 編寫的輕量用戶端 -- [Helios](https://github.com/a16z/helios):由 Rust 編寫的執行和共識組合輕量用戶端 -- [Geth](https://github.com/ethereum/go-ethereum/tree/master/light):由 Go 編寫,執行用戶端的輕量模式(開發中) -- [Nimbus](https://nimbus.guide/el-light-client.html):由 Nim 編寫的共識輕量用戶端 - -據我們所知,上述這些服務都尚未準備好在生產環境中使用。 - -為了改進輕量用戶端存取以太坊資料的方式,還有很多工作要做。 目前,輕量用戶端依賴使用用戶端/伺服器架構向全節點發出的遠端程序呼叫請求,但在未來可以透過專用網路用更去中心化的方式請求資料,如[門戶網路](https://www.ethportal.net/)可以透過點對點廣播協議將資料發送至輕量用戶端。 - -其他[路線圖](/roadmap/)上的專案如 [Verkle 樹](/roadmap/verkle-trees/)和[無狀態性](/roadmap/statelessness/),最終會為輕量用戶端帶來與全用戶端同等的安全保證。 - -## 了解更多 {#further-reading} - -- [Zsolt Felfodhi 談 Geth 輕量用戶端](https://www.youtube.com/watch?v=EPZeFXau-RE) -- [Etan Kissling 談輕量用戶端網路](https://www.youtube.com/watch?v=85MeiMA4dD8) -- [Etan Kissling 談合併後的輕量用戶端](https://www.youtube.com/watch?v=ZHNrAXf3RDE) -- [Piper Merriam:通往功能性輕量用戶端的曲折之路](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/node-architecture/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/node-architecture/index.md" deleted file mode 100644 index e876df86beb..00000000000 --- "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/node-architecture/index.md" +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 節點架構 -description: 關於如何安排以太坊節點的介紹。 -lang: zh-tw ---- - -一個以太坊節點由兩個用戶端組成:一個[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)以及一個[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)。 - -當以太坊使用[工作量證明](/developers/docs/consensus-mechanisms/pow/)時,一個執行用戶端已足夠運行以太坊全節點。 然而,自從實行[權益證明](/developers/docs/consensus-mechanisms/pow/),執行用戶端需要與另外一個軟體同時使用,該軟體稱為[「共識用戶端」](/developers/docs/nodes-and-clients/#consensus-clients)。 - -下圖顯示兩種以太坊用戶端的關係。 兩種用戶端與他們各自的點對點 (P2P) 網路相連。 執行用戶端透過其點對點網路廣播交易,來確保能夠管理自己的本機交易池,而共識用戶端透過其點對點網路廣播區塊,來確保共識和鏈增長,因此需要獨立的點對點網路。 - -![](node-architecture-text-background.png) - -要讓這兩種用戶端架構運作,驗證用戶端必須能夠將大量交易傳送至執行用戶端。 透過在本機執行交易,用戶端驗證交易沒有違反任何以太坊的規則且提議的以太坊狀態更新是否正確。 同樣地,當節點被選為區塊生產者,共識用戶端必須能夠從 Geth 請求各種交易,以添加到新的區塊裡並執行它們來更新全域狀態。 用戶端間的通訊由本機遠端程序呼叫連線使用[引遠端程序呼叫](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)處理。 - -## 執行用戶端的作用為何? {#execution-client} - -執行用戶端負責處理交易、廣播交易、狀態管理,以及支援以太坊虛擬機 ([EVM](/developers/docs/evm/))。 然而,它並**不**負責產生區塊、廣播區塊,或是處理共識邏輯。 這些為共識用戶端的工作範圍。 - -執行用戶端建立執行有效負載:交易列表、更新的狀態樹,以及其他執行相關的資料。 共識用戶端將執行有效負載加入每一個區塊。 執行用戶端也負責重新執行每個新區塊的交易,確保交易為有效的。 執行交易在執行用戶端的嵌入式電腦上執行,該嵌入式電腦稱為[以太坊虛擬機 (EVM)](/developers/docs/evm)。 - -執行用戶端還透過[遠端程序呼叫方法](/developers/docs/apis/json-rpc)提供一個連接以太坊的使用者介面,讓使用者可以查詢以太坊區塊鏈、提交交易和部署智慧型合約。 遠端程序呼叫呼叫通常由 [Web3js](https://docs.web3js.org/)、[Web3py](https://web3py.readthedocs.io/en/v5/) 這樣的函式庫處理,或是像是瀏覽器錢包的使用者介面。 - -總而言之,執行用戶端為: - -- 通往以太坊的使用者閘道 -- 託管以太坊虛擬機、以太坊狀態,以及交易池的地方。 - -## 共識用戶端的作用為何? {#consensus-client} - -共識用戶端處理所有能夠讓節點與以太坊網路保持同步的邏輯。 這包括從對等節點接收區塊並運行分叉選擇演算法,從而確保節點始終遵循累積證明最多的鏈(由驗證者有效餘額加權計算而得)。 與執行用戶端相似,共識用戶端擁有自己的點對點網路並透過該網路共享區塊和證明。 - -共識用戶端不參與區塊的證明或提議;此由共識用戶端的驗證者(可選附加組件)完成。 沒有驗證者的共識用戶端只會同步鏈頭,使節點能夠保持同步。 這讓使用者可以使用他們的執行用戶端與以太坊交易,並確信位於正確的鏈上。 - -## 驗證者 {#validators} - -節點營運者可以在存款合約中存入 32 以太幣,以添加一個驗證者到他們的共識用戶端。 驗者者用戶端與共識用戶端捆綁在一起,可以隨時添加進節點。 驗證者處理證明及區塊提議。 它們讓節點可以累積獎勵,或因懲罰或罰沒而失去以太幣。 運行驗證者軟體也讓一個節點有資格被選中來提議新區塊。 - -[更多關於質押的資訊](/staking/)。 - -## 節點組成比較 {#node-comparison} - -| 執行用戶端 | 共識用戶端 | 驗證者 | -| -------------------------- | ------------------ | ----------- | -| 透過其點對點網路廣播交易 | 透過其點對點網路廣播區塊及證明 | 提議區塊 | -| 執行/重新執行交易 | 運行分叉選擇演算法 | 積累獎勵/懲罰 | -| 驗證傳入狀態的變更 | 追蹤鏈頭 | 做出證明 | -| 管理狀態及收據樹 | 管理信標狀態(包括共識和執行資訊) | 需要質押 32 以太幣 | -| 建立執行有效負載 | 追蹤在 RANDAO 中累積的隨機性 | 可被罰沒 | -| 公開 JSON-RPC 應用程式介面以便與以太坊互動 | 追蹤證明及最終確定 | | - -## 了解更多 {#further-reading} - -- [權益證明](/developers/docs/consensus-mechanisms/pos) -- [區塊提出](/developers/docs/consensus-mechanisms/pos/block-proposal) -- [驗證者獎勵及懲罰](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/nodes-as-a-service/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/nodes-as-a-service/index.md" deleted file mode 100644 index 5439ec30368..00000000000 --- "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/nodes-as-a-service/index.md" +++ /dev/null @@ -1,419 +0,0 @@ ---- -title: 節點做為一服務 -description: 節點服務、優缺點及熱門提供者入門級概覽 -lang: zh-tw -sidebarDepth: 2 ---- - -## 簡介 {#Introduction} - -運作自己的[以太坊節點](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients)可能比較困難,特別是初始階段或快速擴容時。 有[許多服務](#popular-node-services)可以為你運行最佳化的節點基礎設施,因此你可以專注於開發應用程式或產品。 我們將解釋節點服務的工作原理、使用節點服務的優缺點,並列出提供者(如果你有興趣開始使用)。 - -## 基本資訊 {#prerequisites} - -如你還不太瞭解節點及用戶端,請查看[節點及用戶端](/developers/docs/nodes-and-clients/)。 - -## 質押者 {#stakoooooooooooooors} - -單獨質押者必須運行自己的基礎設施,而非依賴第三方提供者。 這表示運行一個執行用戶端和一個關聯的共識用戶端。 在[合併](/roadmap/merge)前,只運行共識用戶端且使用中心化提供者以執行資料是可行的;但現在已不再可行 - 單獨質押者必須同時運行兩種用戶端。 然而,有些服務可以簡化這個流程。 - -[閱讀更多關於運行節點的相關資訊](/developers/docs/nodes-and-clients/run-a-node/)。 - -本頁說明的服務適用於非質押節點。 - -## 節點服務如何運作? {#how-do-node-services-work} - -節點服務提供者在幕後為你運行分散式節點用戶端,因此你無需再這麼做。 - -這些服務通常提供一個應用程式介面金鑰,你可以使用該金鑰在區塊鏈中寫入和讀取。 除了包含存取以太坊主網的權限外,它們通常還包含存取[測試網](/developers/docs/networks/#ethereum-testnets)的權限。 - -一些服務為你提供屬於你的專用節點並為你管理這些節點,而其他服務使用負載平衡器於各節點間分配活動。 - -幾乎所有節點服務極易整合,只需變更一行程式碼就能更換自託管節點,甚至可以在服務本身之間進行切換。 - -通常,節點服務運行多種[節點用戶端](/developers/docs/nodes-and-clients/#execution-clients)與[類型](/developers/docs/nodes-and-clients/#node-types),讓你能在一個應用程式介面中除了存取特定於用戶端的方法外,還能存取全節點和歸檔節點。 - -值得關注的是,節點服務不會也不應儲存你的私密金鑰或個人資訊。 - -## 使用節點服務有何好處? {#benefits-of-using-a-node-service} - -使用節點服務的主要好處是不必花工程時間,來自行維護和管理節點。 這使你能專注於構建產品,而不必擔心基礎設施維護。 - -從存儲到頻寬再到昂貴的工程時間,運行你自己的節點可能非常昂貴。 諸如在擴容時啟動更多節點、將節點升級到最新版本,以及確保狀態一致性,都會讓你無法專心使用資源建立所需的 web3 產品。 - -## 使用節點服務有何缺點? {#cons-of-using-a-node-service} - -使用節點服務,意味著你在中心化產品的基礎設施。 因此,最重視去中心化的專案可能會傾向於自託管節點,而不是外包給第三方。 - -閱讀更多關於[運行你自己的節點之優點](/developers/docs/nodes-and-clients/#benefits-to-you)。 - -## 熱門節點服務 {#popular-node-services} - -下方列出了最熱門的以太坊節點服務提供者,歡迎新增此處遺漏的提供者。 除了免費或付費方案,每個節點服務還提供不同的優點和功能,你應該在做出決定之前先調查哪些服務最符合你的需求。 - -- [**Alchemy**](https://alchemy.com/) - - [文件](https://docs.alchemyapi.io/) - - 功能 - - 最大的免費方案每個月提供了 3 億運算單元 (約 3000 萬次 getLatestBlock 請求) - - 支援多鏈,如 Polygon、Starknet、Optimism、Arbitrum - - 為約 70% 最大的以太坊去中心化應用程式和去中心化金融交易量提供支援 - - 透過 Alchemy Notify 的即時 webhook 通知 - - 一流的支援和可靠性/穩定性 - - Alchemy 的 NFT API - - 包含 Request Explorer、Mempool Watcher 和 Composer 的儀表板 - - 整合測試網水龍頭存取 - - 超過 1.8 萬使用者的活躍 Discord 建構者社群 - -- [**All That Node**](https://allthatnode.com/) - - [文件](https://docs.allthatnode.com/) - - 特徵 - - 免費方案每天 50,000 個請求 - - 支援 40 多種協定 - - 支援 JSON-RPC(以太坊虛擬機、Tendermint)、具象狀態傳輸和 Websocket 應用程式介面 - - 無限制存取歸檔日期 - - 全年無休的技術支援和 99.9% 以上的正常運作時間 - - 支援多鏈的水龍頭 - - 使用不限數量的應用程式介面金鑰進行無限的端點存取 - - 支援追蹤/除錯應用程式介面 - - 自動更新 - -- [**Amazon Managed Blockchain**](https://aws.amazon.com/managed-blockchain/) - - [文件](https://aws.amazon.com/managed-blockchain/resources/) - - 功能 - - 完全託管的以太坊節點 - - 在 6 個地區可用 - - 基於超文字傳輸協定的 JSON-RPC 和安全 WebSocket - - 支援 3 條鏈 - - 服務等級協定,全年無休的 AWS 支援 - - Go-ethereum 及 Lighthouse - -- [**Ankr**](https://www.ankr.com/) - - [文件](https://docs.ankr.com/) - - 特徵 - - Ankr 協定 - 開放對超過 8 個鏈的公共遠端程序呼叫應用程式介面端點的存取 - - 負載平衡與節點健康監控,以取得連結到最近可用節點的更快更可靠的閘道 - - 支援 WSS 端點與無上限速率限制的高級方案 - - 針對超過 40 個鏈的一鍵式全節點和驗證者節點部屬 - - 隨時擴容 - - 分析工具 - - 儀表板 - - 遠端程序呼叫、超文字安全傳輸通訊協定及 WSS 端點 - - 直接支援 - -- [**Blast**](https://blastapi.io/) - - [文件](https://docs.blastapi.io/) - - 功能 - - 支援遠端程序呼叫及 WSS - - 多區域節點託管 - - 去中心化的基礎設施 - - 公共遠端程序呼叫 - - 專用的免費方案 - - 支援多鏈(超過 17 種區塊鏈) - - 歸檔節點 - - 全年無休 Discord 支援 - - 全年無休監控及通知 - - 總 SLA 達到 99.9% - - 可使用加密貨幣付款 - -- [**BlockDaemon**](https://blockdaemon.com/) - - [文件](https://ubiquity.docs.blockdaemon.com/) - - 優點 - - 控制面板 - - 基於節點 - - 分析 - -- [**BlockPI**](https://blockpi.io/) - - [文件](https://docs.blockpi.io/) - - 功能 - - 分散式的穩健節點結構 - - 多達 40 多種超文字安全傳輸通訊協定與 WSS 端點 - - 免費註冊方案及每月方案 - - 追蹤 method + 歸檔資料支援 - - 免費方案 90 天內有效 - - 自訂方案及隨用隨付方案 - - 可使用加密貨幣付款 - - 直接支援與技術支援 - -- [**Chainbase**](https://www.chainbase.com/) - - [文件](https://docs.chainbase.com) - - 功能 - - 高可用性、快速及可擴容的遠端程序呼叫服務 - - 多鏈支援 - - 免關稅 - - 使用者友善的儀表板 - - 提供遠端程序呼叫以外的區塊鏈資料服務 - -- [**Chainstack**](https://chainstack.com/) - - [文件](https://docs.chainstack.com/) - - 特徵 - - 免費共享節點 - - 共享歸檔節點 - - GraphQL 支援 - - 遠端程序呼叫和 WSS 端點 - - 專用全節點及歸檔節點 - - 針對專門部署的快速同步時間 - - 自攜雲端 - - 按小時付費定價 - - 全年無休直接支援 - -- [**DataHub**](https://datahub.figment.io) - - [文件](https://docs.figment.io/) - - 功能 - - 免費方案 3,000,000 次請求/月 - - RPC 及 WSS 末端 - - 專用之全及歸檔節點 - - 自動擴容(批量折扣) - - 免費歸檔資料 - - 服務分析 - - 控制面板 - - 全年無休直接支援 - - 可用加密貨幣付款(企業) - -- [**DRPC**](https://drpc.org/) - - [文件](https://docs.drpc.org/) - - 功能 - - 去中心化遠端程序呼叫節點 - - 超過 15 個節點提供者 - - 節點平衡 - - 免費方案每個月擁有無上限的運算單元 - - 資料驗證 - - 自訂端點 - - 超文字安全傳輸通訊協定與 WSS 端點 - - 不限數量的金鑰(免費和付費方案) - - 彈性的備援選項 - - [公共端點](https://eth.drpc.org) - - 免費共享歸檔節點 - -- [**GetBlock**](https://getblock.io/) - - [文件](https://getblock.io/docs/get-started/authentication-with-api-key/) - - 功能 - - 存取超過 40 個區塊鏈節點 - - 每天 40000 個免費請求 - - 不限數量的應用程式介面金鑰 - - 1GB/秒的高連線速度 - - 追蹤+歸檔 - - 進階分析 - - 自動更新 - - 技術支援 - -- [**InfStones**](https://infstones.com/) - - 特色功能 - - 免費方案選項 - - 隨時擴容 - - 分析 - - 儀表板 - - 獨特應用程式介面端點 - - 專用全節點 - - 針對專門部署的快速同步時間 - - 全年無休直接支援 - - 存取超過 50 個區塊鏈節點 - -- [**Infura**](https://infura.io/) - - [文件](https://infura.io/docs) - - 特色功能 - - 免費方案選項 - - 隨時擴容 - - 付費歸檔資料 - - 直接支援 - - 儀表板 - -- [**Kaleido**](https://kaleido.io/) - - [文件](https://docs.kaleido.io/) - - 特徵 - - 免費新手方案 - - 一鍵部署以太坊節點 - - 可自訂的用戶端與演算法(Geth、 Quorum 和 Besu || PoA、IBFT 和 Raft) - - 超過 500 個管理與服務應用程式介面 - - 用於以太坊交易提交的 RESTful 介面(Apache Kafka 支援) - - 用於事件傳遞的出站串流(Apache Kafka 支援) - - 「鏈下」與輔助服務(例如雙層加密訊息傳輸)的深度集合 - - 透過管理體系和基於角色的存取控制實現簡單的網路接入 - - 面向管理員與終端使用者的精細使用者管理 - - 高度可擴充、有彈性的企業級基礎設施 - - 雲端 HSM 私密金鑰管理 - - 以太坊主網繫連 - - ISO 27k 與 SOC 2、Type 2 驗證 - - 動態執行階段配置(例如新增雲端整合、變更節點入口等等) - - 支援多雲端、多區域和混合部署編排 - - 單純按小時的基於 SaaS 的定價 - - SLA 與全年無休支援 - -- [**Lava Network**](https://www.lavanet.xyz/) - - [文件](https://docs.lavanet.xyz/) - - 特徵 - - 免費使用測試網 - - 支援高正常運行時間的去中心化冗餘 - - 開源 - - 完全去中心化的軟體開發套件 - - 與 Ether.js 整合 - - 直覺化的專案管理介面 - - 以共識為基礎的資料整合 - - 支援多鏈 - -- [**Moralis**](https://moralis.io/) - - [文件](https://docs.moralis.io/) - - 功能 - - 免費共享節點 - - 免費共享歸檔節點 - - 注重隱私(無日誌政策) - - 跨鏈支援 - - 隨時擴容 - - 儀表板 - - 獨特的以太坊軟體開發套件 - - 獨特應用程式介面端點 - - 直接技術支援 - -- [**NodeReal MegaNode**](https://nodereal.io/) - - [文件](https://docs.nodereal.io/nodereal/meganode/introduction) - - 功能 - - 可靠、快速和可擴充的遠端程序呼叫應用程式介面服務 - - 專為 Web3 開發者打造的增強版應用程式介面 - - 多鏈支援 - - 免費開始試用 - -- [**NOWNodes**](https://nownodes.io/) - - [文件](https://documenter.getpostman.com/view/13630829/TVmFkLwy) - - 功能 - - 存取超過 50 個區塊鏈節點 - - 免費應用程式介面金鑰 - - 區塊瀏覽器 - - 應用程式介面回應時間 ⩽ 1 秒 - - 全年無休支援團隊 - - 個人帳戶管理器 - - 共享、歸檔、備份和專用節點 - -- [**Pocket Network**](https://www.pokt.network/) - - [文件](https://docs.pokt.network/home/) - - 功能 - - 去中央化遠端程序中呼叫協定與市場 - - 免費方案每天 100 萬個請求(每個端點,最大為 2) - - [公共端點](https://docs.pokt.network/developers/public-endpoints) - - Pre-Stake+ 計畫(如果你每天需要超過 100 萬個請求) - - 支援超過 15 條區塊鏈 - - 6400+ 節點透過服務應用程式賺取 POKT 幣 - - 歸檔節點、具追蹤功能的歸檔節點和測試網節點支援 - - 以太坊主網節點用戶端多樣性 - - 無單點故障 - - 零停機時間 - - 成本效益幾乎近零之代幣經濟(質押 POKT 幣一次即可獲得網路帶寬) - - 沒有每月的沉沒成本,將你的基礎設施變成資產 - - 協定內建負載平衡 - - 隨時無限擴充每天的請求數和每小時的節點數 - - 最私密、抗審查之選項 - - 實際開發者支援 - - [Pocket Portal](https://bit.ly/ETHorg_POKTportal) 儀表板和分析 - -- [**QuickNode**](https://www.quicknode.com) - - [文件](https://www.quicknode.com/docs/) - - 功能 - - 全年無休技術支援和 Discord 開發者社群 - - 平衡地理分佈、多雲端/伺服器的環境、低延遲的網路 - - 支援多鏈(Optimism、Arbitrum、Polygon 及另外 11 條鏈) - - 快速穩定的中間層(呼叫路由、快取、索引) - - 透過 Webhook 監控智慧型合約 - - 直覺化的儀表板、分析套件、遠端程序呼叫編寫器 - - 進階安全功能(JWT、遮罩、白名單) - - 非同質化代幣資料及分析應用程式介面 - - [已獲得 SOC2 認證](https://www.quicknode.com/security) - - 適合開發者和企業 - -- [**Rivet**](https://rivet.cloud/) - - [文件](https://rivet.readthedocs.io/en/latest/) - - 功能 - - 免費方案選項 - - 隨時擴容 - -- [**SenseiNode**](https://senseinode.com) - - [文件](https://docs.senseinode.com/) - - 功能 - - 專用及共享節點 - - 儀表板 - - 在拉丁美洲不同地點的多個託管商上託管 AWS - - Prysm 和 Lighthouse 用戶端 - -- [**SettleMint**](https://console.settlemint.com/) - - [文件](https://docs.settlemint.com/) - - 功能 - - 免費試用 - - 隨時擴容 - - GraphQL 支援 - - 遠端程序呼叫和 WSS 端點 - - 專用全節點 - - 自攜雲端 - - 分析工具 - - 儀表板 - - 按小時付費定價 - - 直接支援 - -- [**Tenderly**](https://tenderly.co/web3-gateway) - - [文件](https://docs.tenderly.co/web3-gateway/web3-gateway) - - 功能 - - 免費方案包含了每個月 2500 萬 Tenderly Units 的額度 - - 免費存取歷史資料 - - 讀取密集型工作負載速度高達 8 倍 - - 100% 一致的讀取存取 - - JSON-RPC 端點 - - 基於使用者介面的遠端程序呼叫請求建構器和請求預覽 - - 與 Tenderly 的開發、除錯及測試工具緊密整合 - - 模擬交易 - - 使用情況分析和過濾 - - 可輕鬆存取的金鑰管理 - - 透過聊天、電子郵件和 Discord 的專門工程支援 - -- [**Tokenview**](https://services.tokenview.io/) - - [文件](https://services.tokenview.io/docs?type=nodeService) - - 功能 - - 全年無休技術支援和 Telegram 開發者社群 - - 支援多鏈(比特幣、以太坊、波場、BNB 智能鏈、以太坊經典) - - 遠端程序呼叫和 WSS 端點均開放使用 - - 無限制存取歸檔資料應用程式介面 - - 有 Request Explorer 和 Mempool Watcher 的儀表板 - - 非同質化代幣資料應用程式介面和 Webhook 通知 - - 使用加密貨幣付款 - - 對額外行為要求的外部支援 - -- [**Watchdata**](https://watchdata.io/) - - [文件](https://docs.watchdata.io/) - - 功能 - - 資料可靠性 - - 不間斷連線,無停機時間 - - 過程自動化 - - 免關稅 - - 適合任何使用者的高限制 - - 支援多種節點 - - 資源擴充 - - 高處理速度 - -- [**ZMOK**](https://zmok.io/) - - [文件](https://docs.zmok.io/) - - 功能 - - 預先交易即服務 - - 包含搜尋/過濾方法的全域交易内存池 - - 發送交易時,手續費和燃料費皆無限制 - - 可最快取得新區塊及讀取區塊鏈 - - 單個應用程序介面呼叫的最佳價格保證 - -- [**Zeeve**](https://www.zeeve.io/) - - [文件](https://www.zeeve.io/docs/) - - 功能 - - 企業級的無程式碼自動化平臺,提供了部署、監測和管理區塊鏈節點和網路的功能 - - 支援及整合超過 30 個以上協定,持續增加中 - - 增值 Web3 基礎設施服務,如去中心化儲存、去中心化身份和用於現實世界的區塊鏈帳本資料應用程度介面 - - 全年無休支援和主動監控以確保節點健康。 - - 遠端程序呼叫端點提供了經驗證的應用程式介面存取,透過直覺式的儀表板和分析輕鬆愉快地進行管理。 - - 提供託管雲端服務和使用自己的雲端服務兩種選項,支援所有主流的雲端提供商,如 AWS、Azure、Google Cloud、Digital Ocean 和本地部署雲端。 - - 我們總是使用智慧路由以連接最靠近你的使用者的節點 - - -## 延伸閱讀 {#further-reading} - -- [以太坊節點服務清單](https://ethereumnodes.com/) - -## 相關主題 {#related-topics} - -- [節點和用戶端](/developers/docs/nodes-and-clients/) - -## 相關教程 {#related-tutorials} - -- [使用 Alchemy 開始以太坊開發](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) -- [使用 web3 和 Alchemy 發送交易的指南](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) diff --git "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/run-a-node/index.md" "b/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/run-a-node/index.md" deleted file mode 100644 index e8f907d7bb1..00000000000 --- "a/public/content/translations/zh-tw/15) Foundational Docs \342\200\223 Nodes and Clients/developers/docs/nodes-and-clients/run-a-node/index.md" +++ /dev/null @@ -1,480 +0,0 @@ ---- -title: 運行你自己的以太坊節點 -description: 運行你自己的以太坊用戶端實例的一般介紹。 -lang: zh-tw -sidebarDepth: 2 ---- - -運行你自己的節點可以為你帶來各種好處,開闢新的可能性,並有助於支援生態系統。 本頁將引導你啟動自己的節點並參與驗證以太坊交易。 - -注意,在[合併](/roadmap/merge)之後,需要兩個用戶端來運行一個以太坊節點:一個**執行層 (EL)** 用戶端,以及一個**共識層 (CL)** 用戶端。 本頁將展示如何安装、配置和連接這兩種用戶端以運行以太坊節點。 - -## 前置要求 {#prerequisites} - -你應該了解以太坊節點是什麼以及為什麼你可能想要運行用戶端。 [節點與用戶端](/developers/docs/nodes-and-clients/)中對此進行了介紹。 - -如果你對運行節點這個主題還很陌生,或是尋找技術門檻較低的途徑,推薦你首先查看我們適合使用者的[運行以太坊節點](/run-a-node)簡介。 - -## 挑選方法 {#choosing-approach} - -啟動節點的第一步是選擇方法。 根據要求及不同的可能性,你必須選擇(執行及共識用戶端)的用戶端實作、環境(硬體、系統),以及用戶端設定參數。 - -本頁將引導你做出這些決定,幫助你找到運行以太坊實例最適合的方式。 - -若要從用戶端實作中進行選擇,請查看所有可用的主網就緒[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)、[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients),並瞭解[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity)。 - -根據用戶端的[要求](#requirements),決定是否要在自己的[硬體或是雲端上](#local-vs-cloud)運行軟體。 - -準備好環境後,使用[初學者友好介面](#automatized-setup)或[手動](#manual-setup)使用具有進階選項的終端機安裝所選的用戶端。 - -當節點在運行且同步時,你已經準備好[使用它](#using-the-node),但務必留意節點的[維護](#operating-the-node)。 - -![用戶端設定](./diagram.png) - -### 環境與硬體 {#environment-and-hardware} - -#### 本機或雲端 {#local-vs-cloud} - -以太坊用戶端可以在消費級電腦上運行,並且不需要任何如挖礦機的特殊硬體。 因此,根據你的需求,你有多種選項來部署節點。 為了簡單起見,我們考慮一下在本地實體機和雲端伺服器上都運行一個節點: - -- 雲端 - - 提供者提供伺服器高正常運行時間和靜態公開 IP 位址 - - 取得專用或虛擬伺服器會比打造你自己的伺服器更容易 - - 其中的取捨在於信任第三方 - 伺服器提供商 - - 由於全節點所需的儲存大小,租用伺服器的價格可能會很高 -- 自有硬體 - - 更加去信任,自主權更高的方法 - - 一次性投資 - - 購買預先配置機器的選項 - - 你必須親自準備、維護,並可能需排除機器和網路的問題。 - -兩種選項具有上面總結的不同的優點。 如果你正在尋找雲端解決方案,除了許多傳統的雲端運算提供者之外,還有專注於部署節點的服務可供選擇。 查看[節點即服務](/developers/docs/nodes-and-clients/nodes-as-a-service/),了解更多關於託管節點的選項。 - -#### 硬體 {#hardware} - -然而,抗審查的去中心化網路不應依賴雲端提供者。 因而,在自己的本機硬體上運行自己的節點對生態系統來說更健全。 [預估](https://www.ethernodes.org/networkType/Hosting)顯示大部分節點在雲端上運行,這可能造成單點故障。 - -以太坊用戶端可以在自己的電腦、筆記型電腦、伺服器,或甚至是單板電腦上運行。 當在你的個人電腦上運行用戶端成為可能時,弄台專門運行節點的機器可以大幅提高效能和安全性,同時將最大程度上減小對你主要電腦的影響。 - -使用你自己的硬體非常容易。 有許多簡易的選項,適合較技術性人士的進階設定。 那麼,我們來看看在你的裝置上運行以太坊節點的要求和方法吧。 - -#### 要求 {#requirements} - -硬體要求因用戶端而異,但通常不會那麼高,因為節點只需要保持同步。 請別和挖礦搞混了,挖礦需要的算力遠高於此。 然而,使用更強大的硬體,同步時間和效能確實會提高。 - -在安裝任何用戶端之前,請確保你的電腦有足夠的資源來運行用戶端。 你可以在下方找到最低和推薦的硬體要求。 - -硬體瓶頸主要是磁碟空間。 同步以太坊區塊鏈是輸入/輸出非常密集的操作,且需要大量空間。 最佳選擇是使用在同步完畢後仍有數百 GB 空間的**固態硬碟 (SSD)**。 - -資料庫的大小及初始同步速度視使用的用戶端、設定及[同步策略](/developers/docs/nodes-and-clients/#sync-modes)而定。 - -也請確保你的網路連線不受[帶寬上限](https://wikipedia.org/wiki/Data_cap)的限制。 建議使用不按流量計費的連線,因為初始同步和廣播到網路的資料可能會超出你的限制。 - -##### 作業系統 - -所有用戶端都支援主要作業系統 - Linux、MacOS、Windows。 這表示你可以使用最適合你的作業系統 (OS) 在常規桌上型電腦或伺服器電腦上運行節點。 確保你的作業系統是最新的,以避免潛在的問題和安全漏洞。 - -##### 最低要求 - -- 具有 2 個以上核心的 CPU -- 8 GB RAM -- 2 TB 固態硬碟 -- 10+ MBit/s 帶寬 - -##### 推薦規格 - -- 具有 4 個以上核心的快速 CPU -- 16 GB+ RAM -- 2TB 以上的快速固態硬碟 -- 25+ MBit/s 帶寬 - -你選擇的同步模式及用戶端將影響所需磁碟空間,我們在下表估計了每個用戶端所需的磁碟空間。 - -| 客戶 | 磁碟空間(快速同步) | 磁碟空間(完整歸檔) | -| ---------- | ---------- | ---------- | -| Besu | 800GB 以上 | 12TB 以上 | -| Erigon | 不適用 | 2.5TB 以上 | -| Geth | 500GB 以上 | 12TB 以上 | -| Nethermind | 500GB 以上 | 12TB 以上 | -| Reth | 不適用 | 2.2TB 以上 | - -- 注意:Erigon 和 Reth 不提供快照同步,但支援完全修剪(Erigon 約 2TB,Reth 約 1.2TB) - -至於共識用戶端,所需硬碟容量也視用戶端實作及啟用的功能而定 (如罰沒驗證者的功能),但通常還需要額外的 200G 以儲存信標資料。 由於龐大的驗證者數量,帶寬負載也隨之增長。 你可以[在此分析中找到有關共識用戶端要求的詳細資料](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc)。 - -#### 隨插即用解決方案 {#plug-and-play} - -在你自己的硬體上運行節點最簡單的方法是使用隨插即用盒。 供應商的預設置機器提供了最直覺的體驗:排序、連接、運行。 所有部分都預先設置完畢且自動運行,搭配用以監控和控制軟體的直覺指南和儀表板。 - -- [DappNode](https://dappnode.io/) -- [Avado](https://ava.do/) - -#### 單板電腦上的以太坊 {#ethereum-on-a-single-board-computer} - -使用單板電腦是其中一種能便利、便宜運行以太坊節點的方式,甚至可以使用 ARM 架構的開發板,如樹莓派。 [ARM 架構上的以太坊](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/)為樹莓派及其他 ARM 開發板提供了多個執行用戶端和共識用戶端的簡單易用映像檔。 - -這類小型、平價且高效的裝置對在家運行節點是非常理想的,不過要注意的是它們效能有限。 - -## 啟動節點 {#spinning-up-node} - -實際的用戶端設定可以透過自動啟動器或手動完成,即直接設定用戶端軟體。 - -對於不是那麼進階的使用者,推薦使用啟動器,它是一種指引你安裝及自動化用戶端設定流程的軟體。 然而,如果你有使用終端機的經驗,手動設定的步驟對你來說應該很容易。 - -### 引導式設定 {#automatized-setup} - -多個使用者友善的專案都致力於改善設定用戶端的體驗。 這些啟動器提供了自動用戶端安裝及設定,有的甚至會提供圖形介面,用於引導式設定和監控用戶端。 - -以下是一些只要點按幾下就能幫助你安裝並控制用戶端的專案: - -- [DappNode](https://docs.dappnode.io/docs/user/getting-started/choose-your-path) - DappNode 並非只能使用供應商提供的機器。 軟體、實際節點啟動器和擁有許多功能的控制中心可在任意硬體上使用。 -- [eth-docker](https://eth-docker.net/) - 使用 Docker 進行自動化設定,專注於打造輕鬆安全的質押體驗,需要對終端機和 Docker 有基本認識,適合較進階的使用者。 -- [Stereum](https://stereum.net/ethereum-node-setup/) - 該啟動器具有圖形化使用者介面設定指南、控制中心以及許多其他功能,可透過 SSH 連接在遠端伺服器上安裝用戶端。 -- [NiceNode](https://www.nicenode.xyz/) - 該啟動器提供直覺化使用者體驗,可在你的電腦上運行節點。 只要選擇用戶端並簡單點按幾下即可啟動。 仍在開發中。 -- [Sedge](https://docs.sedge.nethermind.io/docs/intro) - 該節點設定工具使用 CLI 精靈自動產生 Docker 設定文件。 由 Nethermind 使用 Go 語言開發。 - -### 手動用戶端設定 {#manual-setup} - -另一個選擇是手動下載、驗證並設定用戶端軟體。 即使一些用戶端提供圖形介面,手動設定仍需要對終端機有基本認識,不過也提供了更多功能。 - -如前所述,設定你自己的以太坊節點需要運行一對共識和執行用戶端。 有些用戶端可能包含其他類型的輕量用戶端,且不需要其他軟體即可同步。 然而,完整去信任驗證需要上述兩種實作。 - -#### 取得用戶端軟體 {#getting-the-client} - -首先,你需要取得你偏好的[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)及[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)軟體。 - -你只須下載符合你作業系統和架構的可執行應用程式或安裝包。 總是驗證下載的安裝包的簽名和校驗和。 有些用戶端也提供程式碼儲存庫或 Docker 映像檔,使安裝及更新更容易。 所有的用戶端都是開源的,所以你可以從原始碼開始建構。 這是較進階的方法,但在某些情況下可能是必要的。 - -上方用戶端清單連結的文件中提供了安裝各個用戶端的說明。 - -以下是一些用戶端的版本發佈頁面,你可以在此找到預先建置的二進位檔案或安裝說明: - -##### 執行客戶 - -- [Besu](https://github.com/hyperledger/besu/releases) -- [Erigon](https://github.com/ledgerwatch/erigon/releases) -- [Geth](https://geth.ethereum.org/downloads/) -- [Nethermind](https://downloads.nethermind.io/) -- [Reth](https://reth.rs/installation/installation.html) - -值得注意的是,用戶端多樣性是[執行層上的一個問題](/developers/docs/nodes-and-clients/client-diversity/#execution-layer)。 建議讀者們考慮運行小眾執行用戶端。 - -##### 共識客戶 - -- [Lighthouse](https://github.com/sigp/lighthouse/releases/latest) -- [Lodestar](https://chainsafe.github.io/lodestar/install/source/)(並未提供預先建置的二進位檔案,只有一個 Docker 映像檔,或者自行編譯原始碼) -- [Nimbus](https://github.com/status-im/nimbus-eth2/releases/latest) -- [Prysm](https://github.com/prysmaticlabs/prysm/releases/latest) -- [Teku](https://github.com/ConsenSys/teku/releases) - -[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity/)對運行驗證者的共識節點來說非常重要。 如果大多驗證者都運行單一用戶端,網路安全將面臨風險。 因此,建議可以考慮選擇小眾用戶端。 - -[查看最新的網路用戶端使用情況](https://clientdiversity.org/)並瞭解關於[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity)的更多資訊。 - -##### 驗證軟體 - -從網際網路上下載軟體時,建議驗證其完整性。 這個步驟是可選的,但對於諸如以太坊用戶端等重要基礎設施,了解並避免潛在的攻擊非常重要。 如果你下載了預先建置的二進位檔案,你需要信任它並承擔攻擊者將其替換成惡意檔案的風險。 - -開發者使用他們的 PGP 金鑰簽署發佈的二進位檔案,如此一來你就可以使用密碼學方式驗證你運行的是他們建立的軟體。 你只需要獲得開發者使用的公鑰,這些公鑰可以在用戶端發佈頁面或文件中找到。 在下載用戶端版本及其簽名後,你可以使用 PGP 實作,如 [GnuPG](https://gnupg.org/download/index.html) 來輕鬆驗證用戶端。 查看在 [linux](https://www.tecmint.com/verify-pgp-signature-downloaded-software/) 或 [Windows/MacOS](https://freedom.press/training/verifying-open-source-software/) 上使用 `gpg` 驗證開源軟體的教學。 - -另一種驗證方式是確定你下載軟體的雜湊(獨一無二的密碼學指紋)和開發者提供的雜湊相符。 這比使用 PGP 進行驗證更加容易,有些用戶端也只提供此選項。 只需對下載的軟體運行雜湊函數,並將其與軟體發佈頁面的雜湊比較即可。 例如: - -```sh -sha256sum teku-22.6.1.tar.gz - -9b2f8c1f8d4dab0404ce70ea314ff4b3c77e9d27aff9d1e4c1933a5439767dde -``` - -#### 用戶端設定 {#client-setup} - -在安裝、下載或編譯用戶端軟體後,你就可以執行用戶端了。 這只表示需要用正確的設定執行用戶端。 用戶端提供了豐富的設定選項,可用於啟用各種功能。 - -我們從會大幅影響用戶端效能和資料使用的選項開始。 [同步模式](/developers/docs/nodes-and-clients/#sync-modes)代表下載和驗證區塊鏈資料的不同方法。 在啟動節點之前,你應該決定要使用什麼網路和同步模式。 應考慮的最重要部分是用戶端所需的磁碟空間和同步時間。 留意用戶端的文件以確認預設的同步模式是哪種。 如果預設同步模式不適合你,可以視安全層級、可用資料及支出,以挑選其他同步模式。 除了同步演算法外,你還可以設定不同類型舊資料的修剪。 修剪可以刪除過時的資料,例如刪除最近區塊中無法存取的狀態樹節點。 - -其他基礎設定選項範例包括:選擇網路 - 主網或測試網、為遠端程序呼叫或 WebSocket 啟用超文字傳輸協定端點等等。 你可以在用戶端文件上找到所有功能和選項。 可以直接在命令列介面或設定檔中使用對應的標記,來設定各種用戶端設定。 每個用戶端略有差異,請務必參考官方文件或幫助頁面以獲得設定選項的細節。 - -為了測試,你可能偏好在測試網上運行用戶端。 [參閱受支援網路的概覽](/developers/docs/nodes-and-clients/#execution-clients)。 - -在基礎設定下運行執行用戶端的範例請見下個章節。 - -#### 啟動執行用戶端 {#starting-the-execution-client} - -在啟動以太坊用戶端軟體前,請檢查最後一次,以確認你的環境是否就緒。 例如,請確保: - -- 選定的網路和同步模式下,所需磁碟空間足夠。 -- 記憶體與中央處理器未被其他程式停止。 -- 作業系統已更新至最新版。 -- 系統的時間日期正確。 -- 你的路由器和防火牆接受偵聽連接埠上的連線。 預設情況下,以太坊用戶端使用偵聽器 (TCP) 連接埠和發現 (UDP) 連接埠,預設均位於 30303。 - -首先在測試網上運行你的用戶端,以幫助確保一切正常運作。 - -你需要在開始時宣告所有非預設的用戶端設定。 你可以使用標記或設定檔來宣告你的偏好設定。 功能組和設定語法因用戶端而異。 請查看你的用戶端的文件,以了解細節。 - -執行和共識用戶端透過[引擎應用程式介面](https://github.com/ethereum/execution-apis/tree/main/src/engine)中指定的經驗證端點通訊。 要連接至共識用戶端,執行用戶端必須在已知路徑上產生一個 [`jwtsecret`](https://jwt.io/)。 鑑於安全性及穩定性,用戶端應在同一個機器上運行,且兩個用戶端必須都知道此路徑,因為此路徑用於驗證它們之間的本地遠端程序呼叫連接。 執行用戶端也必須為經過驗證的應用程式介面定義一個偵聽連接埠。 - -此驗證權杖由用戶端軟體自動產生,但某些情況下,你可能需要自行手動產生。 你可以透過 [OpenSSL](https://www.openssl.org/) 產生它: - -```sh -openssl rand -hex 32 > jwtsecret -``` - -#### 運行執行用戶端 {#running-an-execution-client} - -此章節將引導你啟動執行用戶端。 它僅做為基本設定的範例,此範例會以下列設定啟動用戶端: - -- 指定欲連線的網路,在此例子中為主網 - - 你可以選擇[任意一個測試網](/developers/docs/networks/),以初步測試你的設定 -- 定義資料目錄,用於儲存所有包含區塊鏈的資料 - - 請確保將預設路徑替換成真實路徑:如指向你外部硬碟的路徑 -- 啟用與用戶端通訊的介面 - - 包括用於與共識用戶端通訊的 JSON-RPC 和引擎應用程式介面 -- 定義經過驗證的應用程式介面的 `jwtsecret` 路徑 - - 請確保將範例路徑替換成用戶端能夠存取的真實路徑,如:`/tmp/jwtsecret` - -請注意,這只是基本的範例,其餘的設定都會被設為預設值。 仔細閱讀各個用戶端的文件,以了解預設值、設定及功能。 關於更多其他功能,如運行驗證者、監控等等,請參考特定用戶端的文件。 - -> 請注意,範例中的反斜線 `\` 僅用於設定格式;設定標記可以在單行內定義。 - -##### 運行 Besu - -此範例在主網上運行 Besu,將區塊鏈資料以預設格式儲存在 `/data/ethereum`,啟用 JSON-RPC 及引擎遠端程序呼叫以連線至共識用戶端。 引擎應用程式介面使用 `jwtsecret` 權杖驗證,且只允許來自 `localhost` 的呼叫。 - -```sh -besu --network=mainnet \ - --data-path=/data/ethereum \ - --rpc-http-enabled=true \ - --engine-rpc-enabled=true \ - --engine-host-allowlist="*" \ - --engine-jwt-enabled=true \ - --engine-jwt-secret=/path/to/jwtsecret -``` - -Besu 還有個啟動器選項,會詢問一系列問題並產生設定檔案。 透過以下指令運行互動式啟動器: - -```sh -besu --Xlauncher -``` - -[Besu 的文件](https://besu.hyperledger.org/en/latest/HowTo/Get-Started/Starting-node/)包含了額外的選項及設定細節。 - -##### 運行 Erigon - -此範例在主網上運行 Erigon,將區塊鏈資料儲存在 `/data/ethereum`,啟用 JSON-RPC,定義了哪些命名空間是允許的,並啟用連線由 `jwtsecret` 路徑定義的共識用戶端時的身份驗證。 - -```sh -erigon --chain mainnet \ - --datadir /data/ethereum \ - --http --http.api=engine,eth,web3,net \ - --authrpc.jwtsecret=/path/to/jwtsecret -``` - -Erigon 預設與 8GB 的硬碟執行完整同步,這會產生超過 2TB 的歸檔資料。 請確保 `datadir` 指向的磁碟有充足的剩餘空間,或者考慮使用可以修剪不同類型資料的 `--prune` 標記。 參考 Erigon 的 `--help` 指令以獲得更多資訊。 - -##### 運行 Geth - -此範例在主網上運行 Geth,將區塊鏈資料儲存在 `/data/ethereum`,啟用 JSON-RPC 並定義了哪些命名空間是允許的。 它也啟用了連接至共識用戶端的身份驗證,這需要 `jwtsecrest` 路徑並可以選擇定義哪些連接是允許的,在這個例子中,只允許 `localhost`。 - -```sh -geth --mainnet \ - --datadir "/data/ethereum" \ - --http --authrpc.addr localhost \ - --authrpc.vhosts="localhost" \ - --authrpc.port 8551 - --authrpc.jwtsecret=/path/to/jwtsecret -``` - -查看[文檔以了解所有設定選項](https://geth.ethereum.org/docs/fundamentals/command-line-options)並了解更多與[與共識用戶端一起運行 Geth](https://geth.ethereum.org/docs/getting-started/consensus-clients) 相關的資訊。 - -##### 運行 Nethermind - -Nethermind 提供多種 [安裝選項](https://docs.nethermind.io/nethermind/first-steps-with-nethermind/getting-started)。 此套件包含許多二進位檔案,包括有引導式設定的啟動器,可以互動式幫助你建立設定。 或者,你可以找到可執行執行器,並使用設定標記執行它。 JSON-RPC 是預設啟用的。 - -```sh -Nethermind.Runner --config mainnet \ - --datadir /data/ethereum \ - --JsonRpc.JwtSecretFile=/path/to/jwtsecret -``` - -Nethermind 文檔提供了與共識用戶端一起運行 Nethermind 的 [完整指南](https://docs.nethermind.io/nethermind/first-steps-with-nethermind/running-nethermind-post-merge)。 - -執行用戶端會啟用它的核心功能、選擇端點並開始尋找對等用戶端。 成功發現對等用戶端後,用戶端開始同步。 執行用戶端會等待來自共識用戶端的連接。 在用戶端成功與目前狀態同步以後,目前的區塊鏈資料就可以使用。 - -##### 運行 Reth - -此範例在主網上運行 Reth,使用預設的資料儲存路徑。 啟用 JSON-RPC 和引擎遠端程序呼叫驗證,以連線由 `jwtsecret` 路徑定義的共識用戶端,並且僅允許來自 `localhost` 的調用。 - -```sh -reth node \ - --authrpc.jwtsecret /path/to/jwtsecret \ - --authrpc.addr 127.0.0.1 \ - --authrpc.port 8551 -``` - -請參閱[設定 Reth](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) 以瞭解有關預設資料目錄的更多資訊。 [Besu 文件](https://reth.rs/run/mainnet.html)包含了額外的選項及設定細節。 - -#### 啟動共識用戶端 {#starting-the-consensus-client} - -共識用戶端必須在正確的連接埠設定下啟動,以建立與執行用戶端的本地遠端程序呼叫連接。 共識用戶端在執行時需要使用公開的執行用戶端通訊埠作為設定參數。 - -共識用戶端還需要執行用戶端 `jwt-secret` 的路徑,以驗證它們之間的遠端程序呼叫連接。 與上述執行用戶端例子相似,每個共識用戶端都有一個設定標記,將 jwt 權杖檔案路徑做為參數。 此路徑需與提供執行用戶端的 `jwtsecret` 路徑保持一致。 - -如果你打算運行驗證者,請確保新增一個用作以太坊費用接收地址的設定標記。 這是你的驗證者累積以太幣獎勵的地方。 每個共識用戶端都有一個接受一個以太坊地址作為參數的選項,如:`--suggested-fee-recipient=0xabcd1`。 - -當在測試網上開始運行信標節點時,藉由[檢查點同步](https://notes.ethereum.org/@launchpad/checkpoint-sync)的公共端點,可以大幅縮短同步時間。 - -#### 運行共識用戶端 {#running-a-consensus-client} - -##### 運行 Lighthouse - -在運行 Lighthouse 前,請在 [Lighthouse 手冊](https://lighthouse-book.sigmaprime.io/installation.html)中了解如何安裝並設定。 - -```sh -lighthouse beacon_node \ - --network mainnet \ - --datadir /data/ethereum \ - --http \ - --execution-endpoint http://127.0.0.1:8551 \ - --execution-jwt /path/to/jwtsecret -``` - -##### 運行 Lodestar - -透過編譯 Lodestar 軟體或下載 Docker 映像檔來安裝 Lodestar 軟體。 在[文檔](https://chainsafe.github.io/lodestar/)中了解更多,在[設定指南](https://hackmd.io/@philknows/rk5cDvKmK)中獲得更完整的資訊。 - -```sh -lodestar beacon \ - --rootDir="/data/ethereum" \ - --network=mainnet \ - --eth1.enabled=true \ - --execution.urls="http://127.0.0.1:8551" \ - --jwt-secret="/path/to/jwtsecret" -``` - -##### 運行 Nimbus - -Nimbus 包括共識用戶端與執行用戶端。 它可在各種裝置上運行,即使是性能不高的裝置。 在[安裝依賴項和 Nimbus 本體](https://nimbus.guide/quick-start.html)後,你可以透過以下指令運行共識用戶端: - -```sh -nimbus_beacon_node \ - --network=mainnet \ - --web3-url=http://127.0.0.1:8551 \ - --rest \ - --jwt-secret="/path/to/jwtsecret" -``` - -##### 運行 Prysm - -Prysm 有可以輕鬆自動安裝的腳本。 詳情請見 [Prysm 文檔](https://docs.prylabs.network/docs/install/install-with-script)。 - -```sh -./prysm.sh beacon-chain \ - --mainnet \ - --datadir /data/ethereum \ - --execution-endpoint=http://localhost:8551 \ - --jwt-secret=/path/to/jwtsecret -``` - -##### 運行 Teku - -```sh -teku --network mainnet \ - --data-path "/data/ethereum" \ - --ee-endpoint http://localhost:8551 \ - --ee-jwt-secret-file "/path/to/jwtsecret" -``` - -當共識用戶端連接至執行用戶端,並讀取存款合約以及識別驗證者時,它同時也會連接至其他對等信標節點,並從創世塊開始同步共識時隙。 當信標節點到達目前時期時,信標應用程式介面就可以供你的驗證者使用。 了解關於[信標節點應用程式介面](https://eth2docs.vercel.app/)的更多資訊。 - -### 新增驗證者 {#adding-validators} - -共識用戶端作為供驗證者連接的信標節點。 每個共識用戶端都有自己的驗證者軟體,可以在各自的文檔中找到詳細描述。 - -運行自己的驗證者允許[單獨質押](/staking/solo/),單獨質押是支援以太坊的最具影響且最去信任的方法。 然而,單獨質押要求存入 32 以太幣。 若要以較少的以太幣在你自己的節點上運行驗證者,你可能會對擁有無需許可的節點營運者的去中心化質押池 (如 [Rocket Pool](https://rocketpool.net/node-operators))感興趣。 - -開始質押和產生驗證者金鑰最簡單的方法就是使用 [Holesky 測試網質押啟動面板](https://holesky.launchpad.ethereum.org/),這可讓你透過[在 Holesky 上運行節點](https://notes.ethereum.org/@launchpad/holesky)來測試你的設定。 當你準備好部署到主網時,即可使用[主網質押啟動面板](https://launchpad.ethereum.org/)重複這些步驟。 - -請見[質押頁面](/staking)以查看質押選項概覽。 - -### 使用節點 {#using-the-node} - -執行用戶端提供了[遠端程序呼叫應用程式介面端點](/developers/docs/apis/json-rpc/),可透過多種方式提交交易、在以太坊上部署智慧型合約或與以太坊上的智慧型合約互動: - -- 使用合適的協定手動呼叫它們(例如使用 `curl`) -- 附加提供的控制台(例如 `geth attach`) -- 透過 wbe3 函式庫在應用程式中實作它們,如 [web3.py](https://web3py.readthedocs.io/en/stable/overview.html#overview) 及 [ethers](https://github.com/ethers-io/ethers.js/) - -不同的用戶端有不同的遠端程序呼叫端點實作。 但是有一個標準的 JSON-RPC,可以用於每個用戶端。 有關概述,[請閱讀 JSON-RPC 文件](/developers/docs/apis/json-rpc/)。 需要從以太坊網路取得資訊的應用程式可以使用這個遠端程序呼叫。 舉例來說,熱門錢包 MetaMask 可讓你[連接至你自己的遠端程序呼叫端點](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node),提供了強大的隱私及安全優勢。 - -共識用戶端皆會公開[信標應用程式介面](https://ethereum.github.io/beacon-APIs),可用於確認共識用戶端的狀態,或者透過工具(如 [Curl](https://curl.se))發送請求以下載區塊和共識資料。 更多資訊可在每個共識用戶端的文檔上找到。 - -#### 存取遠端程序呼叫 {#reaching-rpc} - -執行用戶端 JSON-RPC 的預設通訊埠是 `8545`,但你可以在設定中修改本地端點的通訊埠。 遠端程序呼叫介面預設只能透過你電腦的 localhost 存取。 為了要在遠端也能存取遠端程序呼叫介面,你可將位址變更為 `0.0.0.0` 將其公開。 這樣一來,就可透過本地網路以及公網 IP 位址存取遠端程序呼叫介面了。 在多數情況下,你也需要在路由器上設定通訊埠轉發。 - -公開通訊埠至網際網路時應謹慎,因為這會使網際網路上的任何人都能控制你的節點。 如果你將用戶端作為錢包使用,惡意人士可能存取你的節點以癱瘓你的系統,或者竊取其中的資產。 - -解決上述問題的辦法是,避免讓潛在的高危遠端程序呼叫方法可被修改。 舉例來說,使用 Geth 時,你可以透過標記 `--http.api web3,eth,txpool` 宣告可修改的方法。 - -開發邊緣層應用程式介面或網頁伺服器應用程式(如 Nginx),並將它們連接至你用戶端的本機位址及通訊埠,這可以擴展對遠端程序呼叫介面的存取方式。 透過中間層也使開發者能夠為連接至遠端程序呼叫介面的 `https` 安全連線設置憑證。 - -設置網頁伺服器、代理伺服器或外部的 Rest API 並非對你節點的遠端程序呼叫端點提供存取的唯一方式。 設定可公開存取的端點的另一種保護隱私的方法是,將節點託管在自己的 [Tor](https://www.torproject.org/) 洋蔥服務上。 這可讓你在沒有靜態公共 IP 位址或開放通訊埠的情況下,仍可存取本地網路外的遠端程序呼叫。 然而,使用此設定只會允許透過 Tor 網路存取遠端程序呼叫端點,但並非所有應用程式都支援此網路,且可能造成連線問題。 - -要完成設定,你需要建立自己的[洋蔥服務](https://community.torproject.org/onion-services/)。 閱讀洋蔥服務設定的[文檔](https://community.torproject.org/onion-services/setup/)以託管你自己的洋蔥服務。 你可將其指向有代理伺服器的遠端程序呼叫通訊埠網頁伺服器,或者直接指向遠端程序呼叫。 - -最後一種提供內部網路存取的方式是透過虛擬私人網路連線,這同時也是最受歡迎的一種方式。 依據你的用例,以及需要存取你的節點的使用者數量,安全的虛擬私人網路連線或許是個可選方案。 [OpenVPN](https://openvpn.net/) 是功能完備的 SSL VPN,使用業界標準的 SSL/TSL 協議實現了 OSI 第二、三層的安全網路插件,且支援基於證書、智慧卡和/或使用者名稱/密碼等彈性用戶端驗證方法,並可以使用基於使用者或群組的存取控制政策,該政策使用套用於虛擬私人網路虛擬介面的防火牆規則。 - -### 運行節點 {#operating-the-node} - -你應該定期監控你的節點以確保其正常運行。 你可能需要偶爾進行維護。 - -#### 維持節點上線 {#keeping-node-online} - -你的節點不需要一直保持上線,但應儘可能維持它的上線狀態,以持續與網路同步。 你可以關閉它並重啟,但請記得: - -- 若磁碟仍正在寫入最近的狀態,關閉節點可能會花上數分鐘。 -- 強制關閉可能會損害資料庫,這樣可能必須重新同步整個節點。 -- 你的用戶端將與網路不同步,並且在重新啟動時需要重新同步。 雖然節點可以從上次關閉時的地方開始同步,但此流程會依離線的時長而定。 - -_這不適用於共識層驗證者節點。_節點離線將影響所有依賴節點的服務。 如果你是為了_質押_而運行節點,應該儘可能降低停機時間。 - -#### 建立用戶端服務 {#creating-client-services} - -考慮建立一個在啟動時自動運行你的用戶端的服務。 例如,在 Linux 伺服器上,最佳案例為建立一個服務(如透過 `systemmd`),它會在適當設定的情況下執行用戶端,可限制使用者權限並自動重啟。 - -#### 更新用戶端 {#updating-clients} - -你需要確保透過安全補丁、功能與[以太坊改善提議](/eips/)讓你的用戶端軟體保持最新。 特別是[硬分叉](/history/)前,請確保你運行的是正確的用戶端版本。 - -> 在重大的網路更新前,以太坊基金會在它們的[部落格](https://blog.ethereum.org)上發布貼文。 你可以[訂閱這些公告](https://blog.ethereum.org/category/protocol#subscribe),在你的節點需要更新時,透過電子郵件接收通知。 - -更新用戶端非常簡單。 在每個用戶端的文檔中都有具體的說明,但實際上只要下載最新版的用戶端並透過最新的可執行檔重新啟動用戶端即可。 用戶端應從上次同步中斷的地方繼續同步,且完成用戶端更新。 - -每個用戶端實作都有用於點對點協定的人類可讀版本的字串,但也可透過指令存取該字串。 這個版本的字串可讓使用者檢查是否正執行正確的版本,並支援區塊瀏覽器和有興趣量化網路上特定用戶端的分佈的其他分析工具。 請參閱個別的用戶端文件以取得版本字串的更多資訊。 - -#### 運行額外服務 {#running-additional-services} - -運行你自己的節點,可讓你使用需要直接存取以太坊用戶端遠端程序呼叫的服務。 這些是建立在以太坊之上的服務,如[二層網路解決方案 ](/developers/docs/scaling/#layer-2-scaling)、錢包的後端、區塊鏈瀏覽器、開發者工具以及其他以太坊基礎設施。 - -#### 監控節點 {#monitoring-the-node} - -要正確監控你的節點,請考慮收集指標。 用戶端提供指標端點,因此你可以取得關於你節點的綜合資料。 使用諸如 [InfluxDB](https://www.influxdata.com/get-influxdb/) 或 [Prometheus](https://prometheus.io/) 等工具來建立資料庫,可讓你在像是 [Grafana](https://grafana.com/) 的軟體中將資料視覺化和圖表化。 使用此軟體有許多設定可以使用,還有不同的 Grafana 儀表板來將你的節點和整個網路視覺化。 詳細範例請見[監控 Geth 教學](/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/)。 - -在監控時,請務必注意機器的效能。 在節點的初次同步期間,用戶端軟體可能會耗用大量的 CPU 和 RAM 資源。 除了 Grafana,你也可以使用其他作業系統提供的工具,像是 `htop` 或 `uptime` 來執行。 - -## 衍生閱讀 {#further-reading} - -- [以太坊質押指南](https://github.com/SomerEsat/ethereum-staking-guides) - _Somer Esat,時常更新_ -- [ 指南|如何設定用於以太坊主網上質押的驗證者](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet) _– CoinCashew,經常更新_ -- [在測試網上運行驗證者的 ETHStaker 指南](https://github.com/remyroy/ethstaker#guides) – _ETHStaker,經常更新_ -- [面向節點營運者的合併常見問題](https://notes.ethereum.org/@launchpad/node-faq-merge) - _2022 年 7 月_ -- [分析以太坊完整驗證節點的硬體要求](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902)_ – Albert Palau,2018 年9 月24 日_ -- [運行以太坊全節點:針對幾乎沒有動力的人提供的指南](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31)_ – Justin Leroux,2019 年 11 月 7 日_ -- [在以太坊主網上運行 Hyperledger Besu 節點:優勢、要求和設定](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/)_ – Felipe Faraggi,2020 年 5 月 7 日_ -- [使用監控堆疊部署 Nethermind 以太坊用戶端](https://medium.com/nethermind-eth/deploying-nethermind-ethereum-client-with-monitoring-stack-55ce1622edbd) _ – Nethermind.eth,2020 年 7 月 8 日_ - -## 相關主題 {#related-topics} - -- [節點和用戶端](/developers/docs/nodes-and-clients/) -- [分塊](/developers/docs/blocks/) -- [網路](/developers/docs/networks/) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/index.md" deleted file mode 100644 index 832a6b165cf..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/index.md" +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: 共識機制 -description: 解釋分佈式系統中的共識協定及其於以太坊中扮演的角色。 -lang: zh-tw ---- - -「共識機制」一詞常泛指「權益證明」、「工作量證明」或「權威證明」協定。 然而,這些證明方式僅為共識機制當中用來抵禦[女巫攻擊](/glossary/#sybil-attack)的組成部分。 共識機制是由一整套想法、協定和激勵構成的體系,使得一系列分佈式節點能夠就區塊鏈狀態達成一致。 - -## 基本資訊 {#prerequisites} - -為了加深對本頁內容的理解,我們推薦你先仔細閱讀我們的[以太坊介紹](/developers/docs/intro-to-ethereum/)。 - -## 何為共識? {#what-is-consensus} - -提到共識,我們意指公共合意已被達成。 考慮一群想去看電影的人。 如果他們對於提議「看某部電影」沒有任何異議,那就可以說共識達成了。 如果存在異議,那他們就必須透過某種方法決定要看哪一部電影。 在極端情況下,這群人就會分開。 - -對於以太坊區塊鏈來說,該過程是標準化的,達成共識意味著全網路中至少 66% 的節點就網路的全域狀態達成一致。 - -## 何為共識機制? {#what-is-a-consensus-mechanism} - -共識機制一詞是指一整套由協定、激勵和想法構成的體系,使得整個網路的節點能夠就區塊鏈狀態達成一致。 - -以太坊採用基於權益證明的共識機制,其加密經濟安全性源於對質押者的鎖定資本實施的一系列獎勵和懲罰措施。 這種激勵體系鼓勵各個質押者誠信運作驗證者節點,並懲罰那些有不良行為的質押才,讓攻擊網路的行為付出極為高昂的代價。 - -還有一個協定,用於規範如何選擇誠實的驗證者,讓它們提議或驗證區塊、處理交易並投票支持其鏈頭部的視圖。 在極少數情況下,如果鏈頭部附近的同一位置存在多個區塊,就會利用一個分叉選擇機制來選擇組成「最重」的鏈的區塊。區塊權重根據為相應區塊投票的驗證者數量進行計算,並按驗證者質押的以太幣餘額進行加權。 - -有些關於共識的重要概念並未在規範中明確定義,例如由潛在「帶外社交協調」提供的額外安全保障,可作為防禦網路攻擊的最後一道防線。 - -這些部分共同組成了共識機制。 - -## 共識機制種類 {#types-of-consensus-mechanisms} - -### 基於工作量證明 {#proof-of-work} - -和比特幣類似,以太坊也曾經使用基於**工作量證明 (PoW)** 的共識協定。 - -#### 區塊建立 {#pow-block-creation} - -礦工相互競爭以建立包含已處理交易的新區塊。 贏家將與網路其餘部分分享新區塊,並獲得一些新鑄造的以太幣。 解決數學問題速度最快的電腦會在比賽中獲勝。 這會產生當前區塊和之前的區塊之間的加密連結。 解決此數學問題便是「工作量證明」所做的工作。 隨後由一條分叉選擇規則確定規範鏈,該規則會選擇一組在挖礦工作方面做得最多的區塊。 - -#### 安全性 {#pow-security} - -你需要控制 51% 的網路算力才能欺騙網路,這一事實確保了網路安全。 發起攻擊需要鉅額的設備和能源投入;你花費的可能會比你賺的還要多。 - -更多關於[工作量證明](/developers/docs/consensus-mechanisms/pow/)的資訊 - -### 基於權益證明 {#proof-of-stake} - -以太坊目前使用基於**權益證明 (PoS)** 的共識協定。 - -#### 區塊生成 {#pos-block-creation} - -驗證者建立區塊。 每個時隙都會隨機選擇一個驗證者成為區塊提議者。 區塊提議者的共識用戶端請求配對的執行用戶端對交易打包,作為「執行有效負載」。 然後它們將其包裝成共識資料以形成區塊,再把這個區塊傳送給以太坊網路上的其他節點。 這樣的區塊產生會得到以太幣獎勵。 在極少數情況下,當一個時隙中存在多個可能的區塊,或節點在不同時間收到區塊,分叉選擇演算法就會選擇使形成的鏈具有最大證明權重的區塊(證明權重是指提供證明的驗證者數量,並按驗證者質押的以太幣餘額進行調整)。 - -#### 安全性 {#pos-security} - -權益證明系統以加密經濟的方式保障安全,因為攻擊者若試圖控制整個鏈,就必須銷毀大量以太幣。 獎勵機制會獎勵誠實行事的質押者,而懲罰機制則會抑制質押者做出惡意行為。 - -更多關於[權益證明](/developers/docs/consensus-mechanisms/pos/)的資訊 - -### 視覺導覽 {#types-of-consensus-video} - -觀看以太坊上所用不同類型之共識機制的更多資訊: - - - -### 抵禦女巫攻擊與區塊鏈選擇 {#sybil-chain} - -僅僅工作量證明和權益證明還不能構成共識協定,但為了簡便起見,通常將它們稱為共識協定。 它們實際是抵禦女巫攻擊機制及區塊鏈創作者選擇程式;提供了一種方法來決定誰能成為最新區塊創作者。 另一個重要組成部分是鏈選擇(又稱分叉選擇)演算法,在同一位置有多個區塊的情況下,它讓節點可以在鏈頭部選擇一個正確的區塊。 - -**抵禦女巫攻擊**衡量協定有效對抗女巫攻擊的能力。 抵禦此類攻擊對於去中心化區塊鏈至關緊要,可使所有礦工與驗證者能夠基於其投入的資源平等地獲得獎勵。 工作量證明及權益證明透過讓使用者耗費大量能源或投入大量抵押,來防範此類攻擊。 此類保護會對女巫攻擊形成經濟上的威懾。 - -**區塊鏈選擇規則**被用來決定哪條鏈為「正確」的鏈。 比特幣使用「最長鏈」規則。這意味著,任何最長的區塊鏈,都會被其他節點接受並與之合作。 對於工作量證明區塊鏈,最長鏈取決於該鏈所累積之工作量證明總難度。 以太坊也曾經用過最長鏈規則;但現在以太坊在權益證明機制下運作,採用了經過更新的分叉選擇演算法來衡量鏈的「權重」。 權重是累積的驗證者投票數累積總和,並以驗證者質押的以太幣餘額進行加權。 - -以太坊使用一種被稱為 [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) 的共識機制,它結合了 [Casper 友善最終確定性組件權益證明](https://arxiv.org/abs/1710.09437)和[最貪婪最重觀測子樹 (GHOST) 分叉選擇規則](https://arxiv.org/abs/2003.03052)。 - -## 衍生閱讀 {#further-reading} - -- [何為區塊鏈共識演算法?](https://academy.binance.com/en/articles/what-is-a-blockchain-consensus-algorithm) -- [何為 Nakamoto 共識? 完整初學者指南](https://blockonomi.com/nakamoto-consensus/) -- [Casper 機制如何運作?](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) -- [關於權益證明區塊鏈的安全性及效能](https://eprint.iacr.org/2016/555.pdf) -- [拜占庭問題](https://en.wikipedia.org/wiki/Byzantine_fault) - -_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ - -## 相關主題 {#related-topics} - -- [工作量證明](/developers/docs/consensus-mechanisms/pow/) -- [挖礦](/developers/docs/consensus-mechanisms/pow/mining/) -- [持有量證明(又稱:權益證明)](/developers/docs/consensus-mechanisms/pos/) -- [權威證明](/developers/docs/consensus-mechanisms/poa/) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md" deleted file mode 100644 index a2431847b90..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md" +++ /dev/null @@ -1,163 +0,0 @@ ---- -title: 以太坊權益證明之攻擊與防禦 -description: 瞭解以太坊權益證明的已知攻擊媒介,以及如何進行防禦。 -lang: zh-tw ---- - -小偷和破壞者不斷尋找機會攻擊以太坊的用戶端軟體。 本頁概述了以太坊共識層的已知攻擊媒介,以及如何防禦這些攻擊。 本頁上的資訊改編自一個[更長格式的版本](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs)。 - -## 先備知識 {#prerequisites} - -需要瞭解一些關於[權益證明](/developers/docs/consensus-mechanisms/pos/)的基本知識。 此外,對以太坊的[激勵層](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties)和分叉選擇演算法 [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper) 有基本瞭解,也會有所助益。 - -## 攻擊者的企圖 {#what-do-attackers-want} - -一個常見的誤解是,成功的攻擊者可以產生新的以太幣,或者從任意帳戶中取走以太幣。 由於所有交易都由網路上的所有執行用戶端執行,所以這兩種情況都是不可能的。 交易必須滿足基本的有效性條件(例如,交易由發送者的私密金鑰簽署,發送者有足夠的餘額等),否則它們將被直接還原。 攻擊者的真實目標可能有三類結果:區塊重組、雙重最終確定性或最終確定性延遲。 - -**「區塊重組」**是將區塊重新排列成新的順序,或許在規範鏈中進行一些區塊的增減。 惡意的區塊重組可能確保納入或排除特定的區塊,允許透過預先交易和尾随交易(最大可提取价值)進行雙重支付或價值提取。 區塊重組也可以用來阻止某些交易被納入規範鏈中 - 這是一種審查形式。 區塊重組的最極端形式是「最終確定性反轉」,它會移除或替換先前已最終確定的區塊。 只有當攻擊者摧毀了總質押以太幣的 ⅓ 以上時,這才有可能 - 這一保證被稱為「經濟最終確定性」- 稍後會有詳細說明。 - -**雙重最終確定性**是一種不太可能但很嚴重的狀況,其中兩個分叉能夠同時最終確定,造成鏈中的永久分裂。 對於願意以 34% 的縂質押以太幣來冒險的攻擊者來說,這在理論上是可能的。 社群將被迫在鏈下協調並就跟隨哪條鏈達成協定,這將需要社交層面的力量。 - -**最終確定性延遲**攻擊會阻止網路達到最終確定鏈段的必要條件。 沒有最終確定性,就很難信任建立在以太坊之上的金融應用程式。 最終確定性延遲攻擊的目的可能僅僅是破壞以太坊,而不是直接獲利,除非攻擊者有一些策略性的短融資。 - -對社交層的攻擊可能旨在破壞公眾對以太坊的信任,讓以太幣貶值、減少採用,或削弱以太坊社群以增加帶外協調的難度。 - -在確定對手可能為何攻擊以太坊後,以下部分將探討他們可能採用的_攻擊方法_。 - -## 攻擊方法 {#methods-of-attack} - -### 0 層網路攻擊 {#layer-0} - -首先,那些不積極參與以太坊(透過運行用戶端軟件)的個人可以透過針對社交層(0 層網路)進行攻擊。 0 層網路是建立以太坊的基礎,因此它代表了一個潛在的攻擊面,其後果會在整個堆疊中產生波及效應。 一些例子可能包括: - -- 一個虛假資訊宣傳活動可能會侵蝕社群對以太坊的開發藍圖、開發者團隊、應用程式等的信任。 然後,這可能會減少願意參與保護網路的個人數量,降低去中心化和加密經濟安全性。 -- 針對開發者社群的有針對性的攻擊或恐嚇。 這可能導致開發者自願退出,並減慢以太坊的進展。 - -- 過度熱衷的監管也可以被認為是對 0 層網路的攻擊,因為它可能迅速挫傷參與和採用的積極性。 -- 將知識淵博的惡意行為者滲透到開發者社群中,目的是透過無意義的討論、延遲關鍵決策、建立垃圾郵件等手段減緩進展。 -- 向以太坊生態系統的關鍵參與者行賄以影響決策。 - -這些攻擊特別危險的原因是,在許多情況下幾乎不需要太多資本或技術知識。 0 層網路攻擊可能是加密經濟攻擊的倍增器。 例如,如果惡意的多數質押持有者實現了審查或最終確定性反轉,則破壞社交層可能導致帶外協調社群響應變得更困難。 - -防禦 0 層網路攻擊可能並不簡單,但可以確立一些基本原則。 其中一個原則是由誠實社群成員透過部落格、Discord 伺服器、註釋規範、書籍、播客和 YouTube 等媒體建立和傳播有關以太坊的公共資訊並保持整體高信噪比。 在 ethereum.org,我們努力維護準確的資訊並嘗試將其翻譯成盡可能多的語言。 在一個領域充斥著高品質的資訊和模因可以有效防止錯誤資訊的傳播。 - -另一個對抗社交層攻擊的重要防禦措施是明確的使命宣言和管理體系協定。 以太坊已將自身定位為智慧型合約 1 層網路中的去中心化和安全性擁護者,同時高度重視可擴展性和永續性。 無論以太坊社群中出現何種分歧,這些核心原則都極少受到損害。 根據這些核心原則評估一個敘述,並透過 EIP(以太坊改進提案)程序中的連續審查來檢視它們,可能有助於社群區分良好行為者與惡意行為者,並限制惡意行為者影響以太坊之未來方向的範圍。 - -最後,以太坊社群保持對所有參與者開放和友好至關重要。 一個帶有門戶守衛和排外性的社群特別容易受到社交攻擊,因為容易形成「我們和他們」的敘事。 部落主義和有害的極端主義會傷害社群,削弱 0 層網路的安全性。 對以太坊網路安全具有既得利益的以太坊社群成員,應該將他們在線上和實體世界中的行為視為對以太坊 0 層網路安全的直接促進因素。 - -### 攻擊協定 {#attacking-the-protocol} - -任何人都可以執行以太坊的用戶端軟體。 要將驗證者新增至用戶端,使用者需要將 32 個以太幣質押到存款合約中。 驗證者允許使用者透過提交和證明新區塊來積極參與以太坊網路的安全性。 現在,驗證者可以發聲,影響區塊鏈的未來內容 - 他們可以誠實行事,透過獎勵來增加他們的以太幣儲備,或者他們可以冒著失去其質押的風險,試圖操縱程序以謀取自己的利益。 一種發動攻擊的方法是累積更大比例的總質押,然後用它來在投票中超過誠實的驗證者。 攻擊者控制的質押比例越大,他們的投票權就越大,尤其是在我們稍後將探討的某些經濟里程碑上。 然而,大多數攻擊者將無法累積足夠的以太幣以此方式進行攻擊,因此他們必須使用微妙的技巧來操縱誠實的大多數人採取特定的行動。 - -從根本上說,所有小規模質押攻擊都是兩種驗證者不當行為的微妙變體:活動不足(未能證明/提議或者延後這樣做)或者活動過多(在一個時隙內提議/證明的次數過多)。 在最普遍的形式下,這些行動可以很容易地由分叉選擇演算法和激勵層進行處理,但也有聰明的方式可以讓攻擊者操縱系統以獲得優勢。 - -### 使用少量以太幣的攻擊 {#attacks-by-small-stakeholders} - -#### 區塊重組 {#reorgs} - -有幾篇論文解釋了在以太坊上使用僅佔總質押以太幣一小部分便實現了區塊重組或最終確定性延遲的攻擊。 這些攻擊通常依賴於攻擊者向其他驗證者隱瞞某些資訊,然後以某種微妙的方式和/或在某個適當的時刻發佈該資訊。 它們通常旨在取代規範鏈中的一些誠實區塊。 [Neuder 等人在 2020 年的研究](https://arxiv.org/pdf/2102.02247.pdf)中展示了一個攻擊驗證者如何在特定時隙 `n+1` 建立和證明一個區塊 (`B`),但未將其傳播到網路上的其他節點。 相反,他們保留該已證明的區塊,直到下一個時隙 `n+2`。 一個誠實的驗證者在時隙 `n+2` 提交了一個區塊 (`C`)。 幾乎同時,攻擊者可以發佈他們所保留的區塊 (`B`) 及為其保留的證明,並且在時隙 `n+2` 透過他們的投票證明區塊 `B` 為鏈頭,有效地否認了誠實區塊 `C` 的存在。 當誠實區塊 `D` 發佈時,分叉選擇演算法會看到建置在 `B` 之上的 `D` 比建置在 `C` 之上的 `D` 有更多權重。 因此,攻擊者成功地使用 1 個區塊的事前重組,在時隙 `n+2` 從規範鏈中移除了誠實區塊 `C`。 [擁有 34% 的質押份額的攻擊者](https://www.youtube.com/watch?v=6vzXwwk12ZE)在這次攻擊中有很大的機會成功,正如[這條注釋](https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair)中所解釋的。 然而,從理論上講,這種攻擊也可以使用較小的質押份額來嘗試。 [Neuder 等人在 2020 年的研究](https://arxiv.org/pdf/2102.02247.pdf)描述了這種攻擊在 30% 的質押份額下的運作,但後來證明它在[總質押份額的 2%](https://arxiv.org/pdf/2009.04987.pdf) 下可行,然後[單個驗證者](https://arxiv.org/abs/2110.10086#)使用我們將在下一節中探討的平衡技巧亦有效。 - -![事前重組](reorg-schematic.png) - -上述一個區塊重組攻擊的概念示意圖(改編自 https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair) - -一種更複雜的攻擊可以將誠實的驗證者集合分成擁有不同鏈頭檢視的不同群組。 這被稱為**平衡攻擊**。 攻擊者等待著提出區塊的機會,當機會到來時,他們模稜兩可地提出兩個區塊。 他們將一個區塊發送給一半的誠實驗證者集合,將另一個區塊發送給另一半。 這種模稜兩可的行為會被分叉選擇演算法偵測到,區塊提議者將被懲處並從網路中驅逐,但這兩個區塊仍然存在,並在每個分叉擁有約一半驗證者集合的證明。 同時,其餘的惡意驗證者保留他們的證明。 然後,透過在分叉選擇演算法執行時選擇性地向足夠的驗證者釋放有利於某一分叉或另一分叉的證明,他們將證明的累積權重傾向於其中一個或另一個分叉。 這種做法可以無限期地繼續下去,攻擊驗證者則在兩個分叉之間保持驗證者的平均分配。 由於兩個分叉都無法吸引到 2/3 的絕對多數,網路將無法最終確定。 - -**反彈攻擊**與之類似。 攻擊驗證者同樣保留了投票。 他們不是透過釋放投票來保持兩個分叉之間的平均分配,而是在適當的時刻使用他們的投票來證明在分叉 A 和分叉 B 之間交替的檢查點。這種在兩個分叉之間翻轉的證明方式,阻止了可以在任何鏈上最終確定的被證明來源和目標檢查點對的出現,從而終止了最終確定性。 - - - -反彈和平衡攻擊都依賴於攻擊者對網路上的訊息時間具有非常精細的控制,這是不太可能的。 然而,協定中內建了防禦機制,與較慢訊息相比,給予了及時訊息額外的加權。 這被稱為[提議者權重增強](https://github.com/ethereum/consensus-specs/pull/2730)。 為了防範反彈攻擊,分叉選擇演算法已經更新,使得在[每個時期的前 1/3 時隙內](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114),最新的被證明檢查點只能切換到另一個鏈的檢查點。 這個條件防止攻擊者儲存投票以便稍後部署 - 分叉選擇演算法只是在時期的前 1/3 對它選擇的檢查點保持忠誠,而在這段時間內大多數誠實的驗證者已經完成投票。 - -綜合考慮,這些措施創造了這樣的情況:一個誠實的區塊提議者在時隙開始後很快就發出他們的區塊,然後有大約 1/3 個時隙(約 4 秒)的時間,新的區塊可能會導致分叉選擇演算法切換到另一個鏈。 在同樣的截止期限之後,來自緩慢驗證者的證明相較於之前到達的證明會被降低權重。 這非常有利於及時的提議者和驗證者來確定鏈頭,並大幅降低了平衡或反彈攻擊成功的可能性。 - -值得注意的是,僅僅進行提議者加強只能防禦“廉價的重組攻擊”,即由持有較小質押份額的攻擊者嘗試的重組攻擊。 事實上,提議者加強本身可能會被更大的質押持有者利用。 [這篇文章的作者](https://ethresear.ch/t/change-fork-choice-rule-to-mitigate-balancing-and-reorging-attacks/11127)描述了一個持有 7% 質押份額的攻擊者如何可以戰略性地部署他們的投票,欺騙誠實的驗證者在他們的分叉上建置,將誠實的區塊重組掉。 這種攻擊是在假設極端理想的延遲條件下設計的,而這種情況非常不太可能。 對於攻擊者來說,勝算仍然非常渺茫,而更大的質押份額也意味著更多的資本風險和更強大的經濟阻力。 - -還提出了一種專門針對最新訊息導向 (LMD) 規則的[平衡攻擊](https://ethresear.ch/t/balancing-attack-lmd-edition/11853),儘管有提議者加強,但這種攻擊據認為仍然是可行的。 攻擊者透過模稜兩可的區塊提議設立了兩條競爭的鏈,並將每個區塊各傳播給大約一半的網路,從而在分叉之間建立起近似的平衡。 然後,串通的驗證者模稜兩可地投票,並安排時間,使得一半的網路首先收到他們對分叉 `A` 的投票,另一半首先收到他們對分叉 `B` 的投票。 由於最新訊息導向規則會丟棄每個驗證者的第二個證明,而只保留第一個證明,所以一半的網路看到對 `A` 的投票,沒有對 `B` 的投票,另一半則看到對 `B` 的投票,沒有對 `A` 的投票。 作者描述了最新訊息導向規則賦予了對手「卓越的力量」來發動平衡攻擊。 - -這種最新訊息導向攻擊媒介已透過[更新分叉選擇演算法](https://github.com/ethereum/consensus-specs/pull/2845)予以關閉,從而在分叉選擇考量中完全排除了模稜兩可的驗證者。 模稜兩可的驗證者的未來影響也受到分叉選擇演算法的削減。 這可以防止上面概述的平衡攻擊,同時保持了對雪崩攻擊的強韌性。 - -另一類攻擊稱為[**雪崩攻擊**](https://ethresear.ch/t/avalanche-attack-on-proof-of-stake-ghost/11854/3),在一份 [2022 年 3 月的論文](https://arxiv.org/pdf/2203.01315.pdf)中進行了描述。 為了發動雪崩攻擊,攻擊者需要控制幾個連續的區塊提議者。 在每個區塊提議的時隙中,攻擊者扣留他們的區塊,將它們收集起來,直到誠實的鏈與保留的區塊達到相等的子樹權重。 然後,保留的區塊被釋放出來,使它們最大程度地模稜兩可。 作者指出,提議者加強 - 對抗平衡和反彈攻擊的主要防禦手段 - 並不能防範某些變種的雪崩攻擊。 然而,作者們只在高度理想化的以太坊分叉選擇演算法版本上展示了這種攻擊(他們使用了不帶最新訊息導向 (LMD) 的最貪婪、最重的可觀察子樹 (GHOST))。 - -透過最新訊息導向的最貪婪、最重的可觀察子樹分叉選擇演算法的最新訊息導向部分可以緩解雪崩攻擊。 LMD 為「latest-message-driven(最新訊息導向)」,指的是每個驗證者保存的一份表格,其中包含了從其他驗證者處收到的最新訊息。 該欄位只有在以下情況才會更新:新的訊息來自比驗證者表格中某個現存的時隙更晚的時隙。 實際上,這表示在每個時隙中,接收的第一則訊息會被接受,其他的則會當作模糊訊息被忽略。 換句話說,共識用戶端不會計算模糊的訊息 - 它們只會使用從每個驗證者處收到的第一則訊息,其他模糊訊息將被丟棄以避免雪崩攻擊。 - -未來有其他多個對分叉選擇規則的潛在升級,可藉由提議者增強以提升安全性。 其一為[檢視合併](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739),指的是證明者會在時隙開始前的 `n` 秒凍結他們的分叉選擇檢視,然後由提議者協助同步整個網路上的鏈檢視。 另一個潛在的升級是[單時隙最終確定性](https://notes.ethereum.org/@vbuterin/single_slot_finality),其透過在一個時隙後立即最終確定區塊鏈,以保護鏈免於基於訊息時間類型的攻擊。 - -#### 最終確定性延遲 {#finality-delay} - -在首次描述低成本單區塊重組攻擊的[同一篇論文](https://econcs.pku.edu.cn/wine2020/wine2020/Workshop/GTiB20_paper_8.pdf)中,還描述了最終確定性延遲(又稱「活躍性失效」)攻擊,此攻擊仰賴攻擊者同時為時期邊界區塊的區塊提議者。 這非常重要,因為時期邊界區塊會成為 Casper FFG 用來最終確定一部分鏈的檢查點。 攻擊者只需扣留他們的區塊,直到足夠多的誠實驗證者使用他們的友善最終確定性組件投票支持前一個時期邊界區塊作為目前的最終確定目標。 接著,他們會釋放被其扣留的區塊。 攻擊者證明其區塊,其餘誠實的驗證者也會使用不同的目標檢查點建立分叉。 如果時機抓的準,他們將阻止最終確定性,因為達不到 2/3 的絕對多數來證明任何一個分叉。 質押的以太幣越少,由攻擊者直接控制的證明越少,攻擊者控制驗證者提交特定時期邊界區塊的機率就越低,因此攻擊者就需要越精準地控制時機。 - -#### 遠程攻擊 {#long-range-attacks} - -還有種針對權益證明區塊鏈的攻擊,涉及了參與創世區塊的驗證者,他們與誠實的驗證者一起維護區塊鏈的單獨分叉,並在很久以後的某個適當時機,最終說服誠實的驗證者集合切換到該分叉。 此類型的攻擊在以太坊上不可能發生,因為最終確定性組件會在固定時間間隔(「檢查點」)確認所有驗證者都同意誠實鏈的狀態。 這個簡單的機制抵禦了遠程攻擊者,因為以太坊用戶端不會重組已最終確定的區塊。 為此,加入網路的新節點會尋找最近且受信任狀態的雜湊(即「[弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/)」檢查點),並將該檢查點作為偽創世區塊,以在其上建置。 這會在剛加入網路的新節點開始驗證自身資訊前,為它們建立「信任閘道」。 - -#### 阻斷服務攻擊 {#denial-of-service} - -以太坊的權益證明機制會在每個時隙,從驗證者集合中選出一個單一的驗證者作為區塊提議者。 這可以透過公開函式算出,且攻擊者可能在區塊提交前一小段時間,預先識別出下個區塊提議者。 接著,攻擊者可以對區塊提議者發送垃圾訊息,阻止他們與其對等節點交換訊息。 對網路的其餘部分來說,此時的區塊提議者視同離線,而時隙則為空。 這可能會是針對特定驗證者的一種審查方式,阻止他們在區塊鏈上新增資訊。 實現單一秘密領導者選舉 (SSLE) 或非單一秘密領導者選舉可以緩解阻斷服務攻擊風險,這是因為只有區塊提議者知道自己被選上,且無法預先知道選舉結果。 這部分尚未實現,但目前已是活躍的[研究與開發](https://ethresear.ch/t/secret-non-single-leader-election/11789)領域。 - -這些都表明了一個事實:要透過少量質押來成功攻擊以太坊非常困難。 此處描述的可行攻擊需要理想化的分叉選擇演算法、極端網路條件,或者已透過相對較小的用戶端軟體修補關閉了攻擊媒介。 當然,這還是無法排除現有零日攻擊逍遙在外的可能性,但它證明了在攻擊者質押量不高時,需要有非常高超的技術、對共識層的瞭解,以及運氣才有可能完成有效攻擊。 站在攻擊者的角度,最佳選擇可能是儘可能累積大量的以太幣,並提高自己在總質押中的佔比。 - -### 使用超過或等於 33% 質押總量的攻擊者 {#attackers-with-33-stake} - -攻擊者用於投票的質押以太幣用於投票,且有越多的驗證者可能在每個時隙被選中並提交區塊,那麼上述文章中提到的所有攻擊就越有可能成功。 惡意驗證者的目標可能是控制盡可能多的質押以太幣。 - -33% 的質押以太幣是攻擊者的基準指標,因為只要大於此數量,攻擊者不需要精細控制其他驗證者的行為就能夠阻止鏈的最終確定。 他們可以一起消失。 如果超過 1/3 的質押以太幣為惡意證明或無法證明,則 2/3 的絕對多數就不存在,鏈也就無法最終確定。 能防禦此攻擊的方法為怠惰逐減懲罰。 怠惰逐減懲罰會識別無法證明或與多數證明相反的驗證者。 這些不進行證明的驗證者所質押的以太幣會逐漸流失,直到它們的集體佔比最終小於總量的 1/3,至此,鏈就能繼續最終確定。 - -怠惰逐減懲罰的目的是讓鏈能繼續最終確定。 然而,攻擊者也會損失它們質押的部分以太幣。 持有 33% 質押以太幣總量的驗證者持續不活躍的代價十分高昂,即使在驗證者沒有被罰沒的狀況下仍然如此。 - -假設以太坊網路是異步的(即發送和接收訊息間有延遲),攻擊者控制了 34% 質押總量可能會造成雙重最終確定性。 這是因為攻擊者在被選為區塊生產者時,他們可以模稜兩可,並與他們的所有驗證者完成雙重投票。 這會產生一種情況:區塊鏈分叉,且每個分叉都有 34% 的質押以太幣為它投票。 每個分叉只需要剩下驗證者的 50% 投票,就能獲得絕對多數支持,在這種情況下,兩條鏈都能最終確定(因為攻擊者驗證者的 34% + 剩下驗證者的 66% 的一半 = 每個分叉上的 67%)。 每個競爭區塊都必須被約 50% 的誠實驗證者接收,因此這種攻擊只在特定情況下可行:攻擊者對網路上傳播訊息的時間有一定的控制,這樣他們就可以將一半的誠實驗證者推到每條鏈上。 攻擊者必須銷毀他們的質押的全部以太幣(目前驗證者集合約計 1000 萬以太幣的 34%)才能實現雙重最終確定性,因為他們驗證者的 34% 會同時進行雙重投票 — 這是一種會受到罰沒的行為,具有最大的相關性懲罰。 防禦此攻擊的方式代價巨大,即銷毀 34% 總質押以太幣。 要從這種攻擊中復原,以太坊社群需要進行「帶外」協調,同意選擇其中一個分叉,並忽略另一個。 - -### 使用約 50% 質押總量的攻擊者 {#attackers-with-50-stake} - -在攻擊者持有 50% 以太幣的情況下,理論上一群作惡的驗證者可以將鏈拆分成兩個大小相同的分叉,然後使用他們全部 50% 的質押以太幣投票反對誠實的驗證者集合,從而維持這兩個分叉並阻止最終確定性。 兩條鏈上的怠惰逐減懲罰最終都會導致鏈的最終確定。 至此,從攻擊中復原的唯一選擇就是社交恢復。 - -在誠實驗證者數量、網路延遲等因素變動的情況下,敵對驗證者群體能夠持續精確控制質押總量的 50% 的可能性非常小。對理性的攻擊者來說,發動攻擊的高成本及低成功率,是抑制其發動攻擊的強烈因素,尤其是當一小點額外的投資就能獲得_超過_ 50% 的佔比以解鎖更多攻擊能力時。 - -在攻擊者有大於 50% 總質押以太幣的情況下,攻擊者可以支配分叉選擇演算法。 在這種情況下,攻擊者自身即有能力以多數投票來完成證明,不需要再透過欺騙誠實的用戶端才能完成短期重組。 誠實的驗證者會效仿攻擊者,因為他們的分叉選擇演算法將攻擊者的鏈視為權重最高的鏈,如此一來該鏈就能最終確定。 這使得攻擊者可以審查某些交易,以有利於他們的方式進行短距重組以及透過重新排序區塊來提取最大的礦工可提取價值。 對此攻擊的防禦手段是讓攻擊者付出大多數質押的巨大成本(目前略低於 190 億美元),這會讓攻擊者面臨風險,因為社交層可能會介入並採納誠實的少數分叉,讓攻擊者的質押大幅貶值。 - -### 使用超過或等於 66% 質押總量的攻擊者 {#attackers-with-66-stake} - -擁有 66% 或更多總質押以太幣的攻擊者,無需脅迫任何誠實驗證者即可最終確定他們所支持的鏈。 攻擊者只需要給他們支持的分叉進行投票並最終確定它,因為他們有絕對多數的不誠實投票。 作為絕對多數的質押擁有者,攻擊者始終可以控制最終確定的區塊的內容,擁有支出、回退和再次支出、審查某些交易以及隨意重組鏈的能力。 透過購買額外的以太幣來控制 66% 而不是 51%,攻擊者實際上購買了進行事後重組和最終確定性反轉的能力(即改變過去並控制未來)。 唯一實際可操作的防禦方法是付出 66% 總質押以太幣的高昂成本,並選擇回退到社交層來協調採納另一個分叉。 我們將在下一部分詳細探討這一點。 - -## 人:最後的防線 {#people-the-last-line-of-defense} - -如果不誠實的驗證者設法最終確定他們所支援的鍊版本,以太坊社群將陷入困境。 規範鏈將在其歷史記錄中包含不誠實部分,同時誠實的驗證者可能會因證明另一條(誠實)鏈而被懲罰。 注意,最終確定的但不正確的鏈也可能是主流用戶端的漏洞引起的。 最後,最終的回退需要依賴社交層 - 0 層網路 - 來解決。 - -以太坊權益證明共識的其中一個優點是存在[一系列的防禦策略 ](https://youtu.be/1m12zgJ42dI?t=1712),社群在面對攻擊的時候可以實施這些策略。 最起碼的回應是在不實施任何懲罰的情況下強制攻擊者的驗證者離開網路。 為了重新進入網路,攻擊者必須加入到一個激活隊列,確保驗證者集合逐步增加。 例如,增加足夠的驗證者讓質押的以太幣翻倍需要約 200 天,攻擊者要再一次嘗試 51% 攻擊,需要提前 200 天收買誠實的驗證者。 但是,社群也可以決定更嚴厲地懲罰攻擊者,方法是撤銷以往的獎勵或銷毀其一定比例的(高達 100%)質押資本。 - -不管攻擊者受到什麼懲罰,社群還必須一起確認不誠實鏈實際上是否無效,儘管它被以太坊用戶端的分叉選擇演算法所支援。社群應該在誠實的鏈上建構。 誠實的驗證者可以集體同意在被社群認可的以太坊區塊鏈分叉上進行建構,例如,該分叉可能在攻擊開始之前就已經從規範鏈上分叉出來,或者攻擊者的驗證者被強行移除。 誠實的驗證者會受到激勵來建構這條鏈,因為他們可以避免因無法(正確地)證明攻擊者的鏈而受到懲罰。 建構在以太坊上的交易所、入口和應用程式可能更願意位於誠實鏈上,並且跟隨誠實驗證者的誠實區塊鏈。 - -但是,這是一個重大的管理體系挑戰。 有些使用者和驗證者會在切換回誠實鏈時無可避免地產生損失,因為攻擊後被驗證的區塊中的交易可能會回滾,從而擾亂應用程式層。這很容易破壞一些相信“程式碼就是法律”的使用者的道德原則。 交易所和應用程式很可能已經把脫鏈行為和現在可能要回滾的鏈上交易關聯起來,並開始一連串的撤回和修訂,很難公平地進行取捨,特別是如果不義之財混雜在其中,存入了去中心化金融或其他衍生品,都會對誠實使用者產生二次影響。 毫無疑問,那些因為精明或機緣巧合已經從不誠實鏈獲利的一些使用者甚至機構,可能會反對分叉以保護他們的利益。 目前已經有呼籲要求社群對大於 51% 攻擊的回應進行演練,以便可以快速執行合理的協調緩解措施。 Vitalik 在 ethresear.ch 上的[這裡](https://ethresear.ch/t/timeliness-detectors-and-51-attack-recovery-in-blockchains/6925)和[這裡](https://ethresear.ch/t/responding-to-51-attacks-in-casper-ffg/6363)以及 Twitter 上的[這裡](https://twitter.com/skylar_eth/status/1551798684727508992?s=20&t=oHZ1xv8QZdOgAXhxZKtHEw)發起了一些有用的討論。 協調社交回應的目的應該是非常有針對性和具體地懲罰攻擊者並儘量減少對其他使用者的影響。 - -管理體系已經是一個複雜的議題。 管理 0 層網路緊急回應透過不誠實行為最終確定的鏈,對於以太坊社群來說毋庸置疑是一個挑戰,但在以太坊歷史上[已經發生過](/history/#dao-fork-summary)[兩次](/history/#tangerine-whistle)。 - -儘管如此,在現實世界的最後回滾中,還是有一些令人相當滿意的東西。 最後,即使在我們之上有著如此驚人的技術堆棧,但如果最壞的情況發生了,現實中的人們也必將協調出一條屬於他們的出路。 - -## 總結 {#summary} - -本頁探討了攻擊者試圖利用以太坊權益證明共識協定的一些方法。 隨著總質押以太幣比例不斷增加,探討了攻擊者可能造成的重組和最終確定性延遲。 總的來說,較富裕的攻擊者成功的幾率更大,因為他們的質押將變成有力的投票,從而影響未來區塊的內容。 在一定門檻的質押以太幣數量下,攻擊者的力量會逐級上升: - -33%:最終確定性延遲 - -34%:最終確定性延遲、雙重最終確定性 - -51%%:最終確定性延遲、雙重最終確定性、審查、控制區塊鏈的未來 - -66%:最終確定性延遲、雙重最終確定性、審查、控制區塊鏈的未來以及過去 - -還有一系列更複雜攻擊是運用少量質押以太幣發起的,但是需要非常有經驗的攻擊者精細控制訊息發佈時機,說服誠實驗證者支持他們。 - -總的來說,儘管存在這些潛在的攻擊媒介,但攻擊成功的機率仍非常低,低於在工作量證明機制下實施的同類攻擊。 這是因為攻擊者需要冒著巨大的質押以太幣成本風險,以便利用他們的投票權壓倒誠實的驗證者。 內建的「恩威並濟」激勵層可以防止大多數的惡意行為,尤其是對於擁有少量質押的攻擊者。 更微妙的彈跳和平衡攻擊也不太可能成功,因為在現實的網路條件下,很難精細地控制訊息向特定驗證者子集的傳遞,如果發現了已知的彈跳、平衡和雪崩攻擊媒介,用戶端團隊也能透過簡單的補丁快速修復。 - -34%、51% 或 66% 攻擊可能需要帶外的社交協調來解決。 雖然對社群來說是痛苦的,但是社群的帶外響應能力對於攻擊者來說是一種強大的抑制力量。 以太坊的社交層是最終的後盾 - 從技術上取得成功的攻擊仍然會被社群同意採用誠實鏈所瓦解。 攻擊者和以太坊社群之間存在一場競賽 - 花費在 66% 攻擊上的數十億美元可能會被成功的社交協調所抹去,從而給攻擊者留下沉重的包袱,因為它們質押的以太幣將在被以太坊社群忽略的不誠實鏈上無法流動。 最終為攻擊者帶來利益的可能性非常低,這足以成為一種有效的威懾。 這就是為什麼投資於維持擁有共同價值觀和凝聚力的社交層如此重要。 - -## 衍生閱讀 {#further-reading} - -- [本頁面的更詳細版本](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) -- [Vitalik 關於結算最終確定性的看法](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) -- [關於最新訊息導向的最貪婪、最重的可觀察子樹的論文](https://arxiv.org/abs/2003.03052) -- [關於 Casper-FFG 的論文](https://arxiv.org/abs/1710.09437) -- [關於 Gasper 的論文](https://arxiv.org/pdf/2003.03052.pdf) -- [提議者權重增強共識層規範](https://github.com/ethereum/consensus-specs/pull/2730) -- [Ethresear.ch 上的反彈攻擊](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) -- [單一秘密領導者選舉研究](https://ethresear.ch/t/secret-non-single-leader-election/11789) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attestations/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attestations/index.md" deleted file mode 100644 index 69d7856804a..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/attestations/index.md" +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: 證明 -description: 關於在權益證明以太坊上進行證明的描述。 -lang: zh-tw ---- - -驗證者需要在每個時期建立、簽署和廣播證明。 本頁概述這些證明是什麼樣的,以及它們是如何處理和如何在共識用戶端之間交流的。 - -## 什麼是證明? {#what-is-an-attestation} - -每個[時期](/glossary/#epoch)(6.4 分鐘)驗證者都會向網路提交一個證明。 這個證明針對時期內的一個特定時隙。 證明的目的是投票贊成驗證者對於鏈的看法,特別是最近的合理區塊和當前時期內的第一個區塊(稱為`來源`和`目標`檢查點)。 所有參與的驗證者的資訊都會合併,使得網路可以達成關於區塊鏈狀態的共識。 - -證明包含以下組成部分: - -- `aggregation_bits`:驗證者的位元列表,其位置對應到委員會中的驗證者索引;(0/1) 數值表示驗證者是否簽署了 `data`(即,他們是否活躍和同意區塊提議者) -- `data`:與證明相關的細節,如下方的定義 -- `signature`:彙總了個人驗證者簽署的 Boneh-Lynn-Shacham 簽章 - -證明驗證者的第一個任務是建置 `data`。 `data` 包含以下資訊: - -- `slot`:證明參考的時隙號碼 -- `index`:一個數字,用來辨識驗證者在給定的時隙中所屬的委員會 -- `beacon_block_root`:驗證者在鏈頭看到的區塊的根雜湊(套用分叉選擇演算法的結果) -- `source`:最終確定性投票的一部分,表示驗證者認為的最新的合理區塊 -- `target`:最終確定性投票的一部分,表示驗證者認為的當前時段的第一個區塊 - -一旦 `data` 建置完成,驗證者就可以將 `aggregation_bits` 中對應於他們自己的驗證者索引的位元從 0 翻轉到 1,表示他們已經參與。 - -最終,驗證者簽署證明並且在網路上進行廣播。 - -### 彙總的證明 {#aggregated-attestation} - -每個驗證者在網路上傳遞此資料時,都會產生大量的相關開銷。 因此,個人驗證者在更廣泛的廣播前,先會在子網內彙總。 這包括將簽章彙總在一起,以讓廣播出去的證明包含共識 `data` 及一個單一簽章,此為所有同意該 `data` 的驗證者之簽章合併而成的簽章。 這可以透過 `aggregation_bits` 來檢查,因為它提供了每個驗證者在其委員會(委員會 ID 在 `data` 中提供)中的索引,可用於查詢個人簽章。 - -在每個時期,每個子網中都會選出 16 個驗證者來擔任`聚合者`。 聚合者會收集它在廣播網路中監聽到的與其自身 `data` 相同的所有證明。 每個符合證明的發送者會被記錄在 `aggregation_bits` 中。 然後,聚合者將彙總證明廣播到更廣泛的網路。 - -當驗證者被選為區塊提議者時,它們會將最新時隙來自子網的彙總證明打包到新區塊中。 - -### 證明包含生命週期 {#attestation-inclusion-lifecycle} - -1. 產生 -2. 傳播 -3. 彙總 -4. 傳播 -5. 納入 - -證明的生命週期如下圖所示: - -![證明的生命週期](./attestation_schematic.png) - -## 酬勞 {#rewards} - -驗證者提交證明可以獲得獎勵。 證明的獎勵依參與標記(來源、目標和頭部)、基礎獎勵和參與率而定。 - -每個參與標記都可以為 true 或 false,視提交的證明及納入延遲而定。 - -最佳情況是所有 3 個標記皆為 true,在這種情況下,驗證者的每個正確標記可以賺取: - -`獎勵 += 基礎獎勵 * 標記加權 * 標記證明率 / 64` - -標記證明率是透過特定標記的「所有證明驗證者的有效餘額總和」與「總活躍有效餘額」的比較來計算的。 - -### 基礎獎勵 {#base-reward} - -基礎獎勵是根據參與證明的驗證者數量及其質押的有效以太幣餘額計算的: - -`base reward = validator effective balance x 2^6 / SQRT(Effective balance of all active validators)` - -#### 納入延遲 {#inclusion-delay} - -當驗證者在鏈頭 (`block n`) 上投票時,`block n+1` 尚未提議。 所以,證明自然會在**經過一個區塊之後**被納入區塊,因此所有在作為鏈頭的 `block n` 上投票的證明都會在 `block n+1` 被納入,**納入延遲**爲 1。 若納入延遲加倍至 2 個時隙,則證明的獎勵會減半,這是因爲證明獎勵的計算方式爲基礎獎勵乘以納入延遲的倒數。 - -### 證明場景 {#attestation-scenarios} - -#### 缺少參加投票的驗證者 {#missing-voting-validator} - -驗證者最多有一個時期能夠提交他們的證明。 若錯過了在時期 0 時提交證明的機會,則它們可在時期 1 時提交(經過一個納入延遲)。 - -#### 缺少聚合者 {#missing-aggregator} - -每個時期總共有 16 個聚合者。 此外,驗證者會隨機訂閱**兩個子網路並持續 256 個時期**,並在缺少聚合者時作為備用。 - -#### 缺少區塊提議者 {#missing-block-proposer} - -值得注意的是,在一些情況下幸運的聚合者可能同時被選為區塊提議者。 若因為區塊提議者消失而導致證明未被納入,則下個區塊提議者會取得已彙總的證明並納入下一個區塊。 但是,**納入延遲**會因此增加 1。 - -## 衍生閱讀 {#further-reading} - -- [Vitalik 註解的共識規範中的證明](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#attestationdata) -- [eth2book.info 中的證明](https://eth2book.info/capella/part3/containers/dependencies/#attestationdata) - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/block-proposal/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/block-proposal/index.md" deleted file mode 100644 index c2329bdf429..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/block-proposal/index.md" +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: 區塊提出 -description: 解釋在權益證明以太坊中如何提議區塊。 -lang: zh-tw ---- - -區塊是區塊鏈中的基本單位。 區塊是節點之間傳送,達成共識並新增到每個節點資料庫的獨立資訊單元。 本頁會解釋它們是如何產生的。 - -## 先決條件 {#prerequisites} - -區塊提議是權益證明協定的一部分。 為了幫助瞭解本頁的資訊,我們推薦你閱讀關於[權益證明](/developers/docs/consensus-mechanisms/pos/)與[區塊架構](/developers/docs/blocks/)的相關內容。 - -## 區塊由誰生產? {#who-produces-blocks} - -驗證者帳戶負責提議區塊。 驗證者帳戶由節點營運商負責管理,節點營運商執行驗證者軟體(當作執行的一部分)和共識用戶端,並且已經向存款合約中存入至少 32 個以太幣。 然而,每個驗證者只會偶爾負責提議一個區塊。 以太坊以時隙與時期來衡量時間。 每個時隙為十二秒,而 32 個時隙(6.4分鐘)為一個時期。 每個時隙都是在以太坊上新增區塊的機會。 - -### 隨機選擇 {#random-selection} - -每個時隙會有一個以偽隨機方式選擇的驗證者來提議區塊。 在區塊鏈中沒有實質的隨機性,因為如果每個節點都產生真實的隨機數,那麼它們是無法達成共識的。 相反的,目的是讓驗證者的選擇過程無法預測。 以太坊使用一種名為 RanDAO 的演算法來達到隨機性,這種演算法會將區塊提議者的雜湊值與一個隨著每個區塊而更新的種子混在一起。 這個值會被用來從整個驗證者集合中選出一個特定的驗證者。 驗證者的選擇會提前兩個時期鎖定,這種方式可以防範特定類型的種子操控。 - -儘管驗證者會在每個時隙添增 RANDAO,全域 RANDAO 值每個時期僅更新一次。 為了計算下一個區塊提議者的索引,RANDAO 值會跟時隙號碼混合,為每個時隙提供一個獨特數值。 一個驗證者被選中的機率並不是簡單的 `1/N`(其中 `N`= 活躍驗證者總數)。 相反的,它會依照每個驗證者的有效以太幣餘額進行加權。 最大有效餘額為 32 個以太幣(這代表著 `balance < 32 ETH` 會產生低於 `balance == 32 ETH` 的加權,但是 `balance > 32 ETH` 並不會產生高於 `balance == 32 ETH` 的加權)。 - -每個時隙只有一個區塊提議者會被選中。 在正常的情況下,一個區塊生產者會在其專門的時隙中建立並且釋出一個區塊。 在一個時隙中建立兩個區塊是一種很嚴重的罪行,通常被稱為「模棱兩可」。 - -## 區塊如何建立? {#how-is-a-block-created} - -區塊提議者預計會廣播一個已簽署的信標區塊,該區塊建置在根據他們自己在本地運行的分叉選擇演算法所看到的最近鏈頭之上。 分叉選擇演算法會套用上一個時隙留下的任何排隊證明,然後在其歷史記錄中尋找具有最大累積證明權重的區塊。 該區塊便是由提議者建立的新區塊的父塊。 - -區塊提議者透過從自己的本機資料庫和鏈檢視中收集資料來建立區塊。 區塊的內容如以下程式碼片段所示: - -```rust -class BeaconBlockBody(Container): - randao_reveal: BLSSignature - eth1_data: Eth1Data - graffiti: Bytes32 - proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] - attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS] - attestations: List[Attestation, MAX_ATTESTATIONS] - deposits: List[Deposit, MAX_DEPOSITS] - voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] - sync_aggregate: SyncAggregate - execution_payload: ExecutionPayload -``` - -`randao_reveal` 欄位取一個可驗證的隨機值,該值是區塊提議者透過簽署當前的時期編號建立的。 `eth1_data` 是就區塊提議者對存款合約的看法進行的投票,包括存款默克爾樹的根和使新存款能夠被驗證的總存款數。 `graffiti` 是一個可選欄位,可用來在區塊中新增一條訊息。 `proposer_slashings` 和 `attester_slashings` 欄位包含了某些驗證者根據區塊提議者對鏈的看法已經犯下可罰沒行為的證據。 `deposits` 是區塊提議者所知道的新驗證者存款的清單,`voluntary_exits` 是區塊提議者從共識層廣播網路上監聽到的希望退出的驗證者的清單。 `sync_aggregate` 是一個向量,顯示哪些驗證者之前被分配到一個同步委員會(服務於輕量用戶端資料的驗證者子集)並參與了資料簽章。 - -`execution_payload` 使得關於交易的資訊可以在執行用戶端和共識用戶端之間傳遞。 `execution_payload` 是一個被嵌套在信標鏈區塊內部的執行資料區塊。 `execution_payload` 中的欄位反映了以太坊黃皮書中概述的區塊結構,只不過其中沒有親戚區塊,並且 `prev_randao` 取代了 `difficulty`。 執行用戶端可以存取它在自己的 Gossip 網路上監聽到的本機交易池。 這些交易在本機執行,以產生一個被稱為「後狀態」的更新狀態樹。 這些交易被包含在 `execution_payload` 中名為 `transactions` 的清單中,後狀態則在 `state-root` 欄位中提供。 - -所有這些資料都被收集在一個信標區塊中,經過簽署並廣播給區塊提議者的對等節點,再由他們傳播給他們的對等節點,以此類推。 - -閱讀更多關於 -區塊剖析的內容。

- - - -## 區塊會發生什麼? {#what-happens-to-blocks} - -區塊被新增至區塊提議者的本機資料庫,並透過共識層廣播網路廣播給對等節點。 當驗證者接收到區塊時,它會驗證其中的資料,包括檢查區塊是否有正確的父塊、是否對應正確的時隙、提議者索引是否符合預期、RANDAO 揭示是否有效,以及提議者是否被罰沒。 `execution_payload` 被解綁,驗證者的執行用戶端重新執行清單中的交易,以檢查所提議的狀態變化。 假設區塊通過了所有這些檢查,每個驗證者將區塊新增到自己的規範鏈中。 然後,在下一個時隙中重新開始這個過程。 - - - -## 區塊獎勵 {#block-rewards} - -區塊提議者會收到他們工作的報酬。 有一個 `base_reward`,是根據活躍驗證者的數量和他們的有效餘額來計算的。 然後,區塊提議者會因為區塊中包含的每個有效證明而收到 `base_reward` 的一部分;證明區塊的驗證者越多,區塊提議者獲得的獎勵就越高。 還有一個獎勵是報告應該被罰沒的驗證者,數額等於每個被罰沒的驗證者的 `1/512 * effective balance`。 - -[更多關於獎勵和懲罰的資訊](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) - - - -## 了解更多 {#further-reading} - -- [區塊簡介](/developers/docs/blocks/) -- [權益證明簡介](/developers/docs/consensus-mechanisms/pos/) -- [以太坊共識規範](https://github.com/ethereum/consensus-specs) -- [Gasper 簡介](/developers/docs/consensus-mechanisms/pos/) -- [升級以太坊](https://eth2book.info/) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/faqs/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/faqs/index.md" deleted file mode 100644 index 9b03a6e67e9..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/faqs/index.md" +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: 常見問題 -description: 有關以太坊權益證明的常見問題 -lang: zh-tw ---- - -## 何謂權益證明 (PoS)? {#what-is-proof-of-stake} - -權益證明是一種演算法,透過確保行為不檢的攻擊者失去有價值的資產,來保障區塊鏈的安全。 權益證明系統需要一組驗證者抵押部分資產,當其中有人被證實有不誠實行為,他的資產將被銷毀。 以太坊使用權益證明機制來保護區塊鏈。 - -## 權益證明與工作量證明哪個較好? {#comparison-to-proof-of-work} - -工作量證明和權益證明都是以經濟手段抑制惡意行為者向網路傳送垃圾訊息或進行詐欺的機制。 兩者都需要積極參與共識的節點「向網路中」投入一些資產,如果他們行為不當,便會喪失這些資產。 - -在工作量證明中,這個資產是能源。 節點或又稱為礦工,運行一個演算法,目標是比其他的節點更快計算出一個特定的值。 速度最快的節點獲得提議區塊的權利。 如果礦工希望更改鏈上的歷史紀錄,或主導區塊提議,他們必須要有足夠的算力讓他們能一直贏得比賽。 這個機制執行起來極度的昂貴和困難,也因此保護了區塊鏈免受攻擊。 在工作量證明中「挖礦」所需的能源,是礦工支付的現實世界資產。 - -權益證明則需要節點(又稱為驗證者)明確地向智慧型合約提交加密貨幣資產。 如果驗證者行為不檢,這種加密資產可以被銷毀,因為驗證者是直接「質押」他們的資產到區塊鏈中,而非間接地透過能源消耗來質押。 - -工作量證明的能耗要高得多,因為在挖礦的過程中需要消耗大量電力。 相反,權益證明僅需要極少量的能源 - 以太坊驗證者甚至可以在樹莓派這類低功率的裝置上運行。 以太坊的權益證明機制被認為比工作量證明更加安全,因為攻擊的成本更高,且對攻擊者造成的影響更加嚴重。 - -工作量證明和權益證明的比較是一個有爭議性的話題。 [Vitalik Buterin 的部落格](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-are-the-benefits-of-proof-of-stake-as-opposed-to-proof-of-work)、Justin Drake 和 Lyn Alden 之間的辯論,都提供了很好的總結。 - - - -## 權益證明的能源效益高嗎? {#is-pos-energy-efficient} - -是的, 權益證明網路中的節點僅使用極少量的能源。 一項第三方研究指出,基於整個權益證明的以太坊網路每年消耗大約 0.0026 太瓦時,僅約美國遊戲市場的 1/13,000。 - -[更多關於以太坊能耗的資訊](/energy-consumption/)。 - -## 權益證明安全嗎? {#is-pos-secure} - -以太坊權益證明非常安全。 這個機制在上線前經過了 8 年的研究、開發和嚴格的測試。 它的安全保證不同於工作量證明區塊鏈。 在權益證明中,惡意驗證者會遭到主動懲罰(「罰沒」)並從驗證者集合中踢出,致使其損失大量的以太幣。 而在工作量證明中,攻擊者擁有足夠的雜湊算力就可以持續反覆攻擊。 相較工作量證明,對權益證明以太坊發動相同攻擊的成本也更高。 若要影響區塊鏈的活躍性,至少需要網路中總質押以太幣的 33%(除非進行高度複雜且成功率極低的攻擊)。 如果要控制未來區塊的內容,至少需要網路中總質押以太幣的 51%,如果要重寫歷史紀錄,則需要超過總質押量的 66%。 以太坊協定會在遭到 33% 或 51% 攻擊時銷毀這些資產,並以社交共識來應對 66% 攻擊的情境。 - -- [更多保護以太坊權益證明免受攻擊者攻擊的相關資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense) -- [更多關於權益證明設計的資訊](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) - -## 權益證明令使用以太坊的成本更低嗎? {#does-pos-make-ethereum-cheaper} - -否。 傳送交易的成本(燃料費)取決於費用市場動態,該成本會隨著網路需求而增加。 共識機制不會直接影響交易成本。 - -[更多關於燃料的資訊](/developers/docs/gas)。 - -## 何謂節點、用戶端和驗證者? {#what-are-nodes-clients-and-validators} - -節點是連線到以太坊網路的電腦。 用戶端是將電腦轉化成節點所需運行的軟體。 有兩種類型的用戶端:執行用戶端和共識用戶端。 建立一個節點,兩種用戶端都需要。 驗證者是共識用戶端的一個選擇附加元件,讓節點可以參與權益證明共識。 參與共識機制是指被選中建立和提議區塊,以及證明從網路上接收到的區塊。 若要運行一個驗證者,節點營運商必須向存款合約中存入 32 個以太幣。 - -- [更多關於節點和用戶端的資訊](/developers/docs/nodes-and-clients) -- [更多權益質押相關資訊](/staking) - -## 權益證明是一個新概念嗎? {#is-pos-new} - -否。 在 2011 年的 BitcoinTalk 論壇上,就有使用者[提出權益證明的基本概念](https://bitcointalk.org/index.php?topic=27787.0)作為比特幣的升級版。 11 年後,它才準備好在以太坊主網上實作。 一些其他的區塊鏈較以太坊更早實行權益證明,但並非以太坊的特定機制(稱為 Gasper)。 - -## 以太坊的權益證明有甚麼特別之處? {#why-is-ethereum-pos-special} - -以太坊的權益證明機制設計非常獨特。 它不是第一個被設計並且實行的權益證明機制,但它是最穩健的。 這個權益證明機制被稱為「Casper」。 Casper 定義了如何挑選驗證者來提議區塊、如何以及何時進行證明、這些證明如何計算、給予驗證者的獎勵和懲處、罰沒條件、故障安全機制(如怠惰逐減懲罰),以及「最終確定性」的條件。 最終確定性是指一個區塊被認為是規範鏈上永久存在部分的條件,它必須獲得網路上至少 66% 的總質押以太幣的投票。 研究人員專門為以太坊開發了 Casper,而以太坊是第一個也是唯一個實行它的區塊鏈。 - -除了 Casper,以太坊的權益證明還採用一種叫做 LMD-GHOST 的分叉選擇演算法。 在同一時隙存在兩個區塊的情況下需要它。 這會建立區塊鏈的兩個分叉。 LMD-GHOST 會選擇具有最大證明「權重」的一個分叉。 權重是證明數量以驗證者有效餘額加權過後的數值。 LMD-GHOST 是以太坊獨有的機制。 - -Casper 和 LMD_GHOST 的組合被稱為 Gasper。 - -[更多關於 Gasper 的資訊](/developers/docs/consensus-mechanisms/pos/gasper/) - -## 什麼是罰沒? {#what-is-slashing} - -罰沒是指銷毀驗證者的部分質押並將驗證者從網路中驅逐。 被罰沒的以太幣數量取決於有多少驗證者遭到罰沒 - 這意味串通起來的驗證者會比個別的驗證者受到更多懲罰。 - -[更多關於罰沒的資訊](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties#slashing) - -## 為甚麼驗證者需要 32 個以太幣? {#why-32-eth} - -驗證者需要質押以太幣,如果他們行為不當,就會失去一些東西。 之所以需要質押 32 個以太幣,是為了讓節點能在適當的硬體上運作。 如果每個驗證者所需要的最少以太幣較少,則驗證者的數量以及每個時隙必須處理的訊息數就會增加,這意味需要更強大的硬體來運作節點。 - -## 如何挑選驗證者? {#how-are-validators-selected} - -每個時隙都會透過一個名為 RANDAO 的演算法,以偽隨機的方式選出一個驗證者來提議區塊,該演算法會將區塊提議者的雜湊值和一個每區塊都會更新的種子混雜在一起。 所產生的這個數值會用來從整個驗證者集合中選出一個特定的驗證者。 驗證者的選擇會提前兩個時期固定。 - -[更多關於驗證者挑選的資訊](/developers/docs/consensus-mechanisms/pos/block-proposal) - -## 什麼是權益粉碎攻擊? {#what-is-stake-grinding} - -權益粉碎攻擊是針對權益證明網路的攻擊類別,攻擊者會試圖使驗證者選擇演算法偏向自己的驗證者。 對 RANDAO 發動權益粉碎攻擊,大約需要已質押以太幣總數的一半。 - -[更多關於權益粉碎攻擊的資訊](https://eth2book.info/altair/part2/building_blocks/randomness/#randao-biasability) - -## 什麼是社交罰沒? {#what-is-social-slashing} - -社交罰沒是指社群透過協調區塊鏈分叉來應對攻擊的能力。 它使社群能夠從攻擊者最終確定不誠實鏈中恢復。 社交罰沒也可以用來抵禦審查攻擊。 - -- [更多關於社交罰沒的資訊](https://ercwl.medium.com/the-case-for-social-slashing-59277ff4d9c7) -- [Vitalik Buterin 談社交罰沒](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) - -## 我會受到罰沒嗎? {#will-i-get-slashed} - -作為驗證者,除非你故意涉入惡意行為,否則是很難遭到罰沒的。 罰沒只有在非常特定的情境下會被實行,比如驗證者在同一個時隙下提議多個區塊,或是在其證明中互相矛盾時 - 這些情況不太可能意外出現。 - -[更多關於罰沒條件的資訊](https://eth2book.info/altair/part2/incentives/slashing) - -## 什麼是無利害關係問題? {#what-is-nothing-at-stake-problem} - -無利害關係問題是一些權益證明機制中的一個概念性議題,在此種機制下只有獎勵而沒有懲罰。 如果沒有任何利害關係,那麼務實的驗證者會樂於證明任何甚至多個區塊鏈分叉,因為這會讓他們的獎勵增加。 以太坊透過最終性條件和罰沒來解決這個問題,確保只有一條規範鏈。 - -[更多關於無利害關係問題的資訊](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed) - -## 什麼是分叉選擇演算法? {#what-is-a-fork-choice-algorithm} - -分叉選擇演算法貫徹規則,以決定哪一條鏈是規範鏈。 在最佳的情況下,不需要使用分叉選擇規則,因為在每一個時隙下只有一個區塊提議者和一個可供選擇的區塊。 然而,偶爾會出現多個區塊在同一個時隙的情況,或是晚到的資訊導致鏈頭附近的區塊有多種組織方式。 在這種情況下,所有的用戶端必須遵循相同的規則來確保它們權選擇正確的區塊序列。 分叉選擇演算法透過編碼實行了這些規則。 - -以太坊的分叉選擇演算法被稱為 LMD-GHOST。 它會選擇擁有最大證明權重的分叉,也就是得到最多質押以太幣投票支持的分叉。 - -[更多關於 LMD-GHOST 的資訊](/developers/docs/consensus-mechanisms/pos/gasper/#fork-choice) - -## 什麼是權益證明中的最終確定性? {#what-is-finality} - -在權益證明中,最終確定性是指保證特定的區塊是規範鏈的永久一部分,除非存在共識失敗,即攻擊者銷毀了總質押以太幣的 33%,否則該區塊就不會被撤銷。 這是「加密經濟」上的最終確定性,與工作量證明區塊鏈相關的「機率最終確定性」不同。 在機率最終確定性中,區塊沒有明確的最終確定或非最終確定狀態 - 隨著區塊在鏈上存在的時間越長,該區塊從鏈上被移除的機率會逐漸降低,並且由使用者自行確定在他們對區塊有足夠信心時自行認定它是安全的。 在加密經濟上的最終確定性中,成對的檢查點區塊必須獲得總質押以太幣的 66% 的投票支持。 如果滿足這個條件,則這些檢查點之間的區塊將明確地「最終確定」。 - -[更多關於最終確定性的資訊](/developers/docs/consensus-mechanisms/pos/#finality) - -## 什麼是「弱主觀性」? {#what-is-weak-subjectivity} - -弱主觀性是權益證明網絡的一個特性,即社交資訊被用來確認區塊鏈當下的狀態。 新節點或長時間離線後重新加入網路的節點可以獲得最新的狀態,因此節點能夠立刻知道它們是否在正確的鏈上。 這些狀態被稱為「弱主觀性檢查點」,可以從其他節點營運商的帶外通道,或從區塊瀏覽器和多個公共端點取得。 - -[更多關於弱主觀性的資訊](/developers/docs/consensus-mechanisms/pos/weak-subjectivity) - -## 權益證明是否具有抗審查的特性? {#is-pos-censorship-resistant} - -目前很難證明權益證明的抗審查性。 然而,與工作量證明不同,權益證明提供了協調罰沒機制,以懲罰審查驗證者。 該協定即將修改為將區塊建構者與區塊提議者分開,並實行建構者必須在每個區塊中包含的交易清單。 此提案被稱為「提議者 - 建構者分離」,有助於防止驗證者審查交易。 - -[更多關於提議者 - 建構者分離的資訊](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Original-basic-scheme) - -## 以太坊的權益證明系統會受到 51% 攻擊嗎? {#pos-51-attack} - -是的, 權益證明和工作量證明一樣,也易受 51% 攻擊。 攻擊者不需要掌控 51% 的網路算力,而是需要掌控已質押以太幣總數的 51%。 累積了總質押量 51% 的攻擊者,便可以控制分叉選擇演算法。 這使得攻擊者能夠審查某些交易、進行短程重組,並透過以有利於他們的方式重新排序區塊來提取最大可提取價值。 - -[更多關於權益證明攻擊的資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense) - -## 什麼是社交協調,為什麼需要它? {#what-is-social-coordination} - -社交協調是以太坊上的最後一道防線,讓誠實鏈可以從已最終確定不誠實區塊的攻擊中恢復。 在這種情況下,以太坊社群必須進行「帶外」協調,並采納一個誠實的少數分叉,在此過程中懲處攻擊者的驗證者。 這也需要應用程式和交易所能夠識別誠實的分叉。 - -[更多關於社交協調的資訊](/developers/docs/consensus-mechanisms/pos/attack-and-defense#people-the-last-line-of-defense) - -## 權益證明會讓富者越富嗎? {#do-rich-get-richer} - -人們質押的以太幣越多,他們能夠運作的驗證者就越多,能夠獲得的獎勵也越多。 獎勵隨著質押以太幣的數量綫性增加,所有人都獲得相同的回報百分比。 相比權益證明,工作量證明更容易讓富者越富,因爲大規模購買硬體的富有礦工會從規模經濟中受益,這意味著財富與獎勵之間的關係是非綫性的。 - -## 權益證明比工作量證明更中心化嗎? {#is-pos-decentralized} - -不,工作量證明趨於中心化,因爲挖礦成本增加,導致個人礦工被淘汰,接著是小公司被淘汰,依此類推。 權益證明目前的問題是流動性質押衍生品 (LSD) 的影響。 這些代幣代表由某個供應商質押的以太幣,任何人都可以在二級市場交換它們,而無需實際取消以太幣的質押。 流動性質押衍生品讓使用者可以用少於 32 個以太幣進行質押,這也帶來了中心化風險,一些大型組織最終可以控制大部分質押。 這就是爲什麽說[單獨質押](/staking/solo)是以太坊的最佳選項。 - -[更多流動性質押衍生品中心化的相關資訊](https://notes.ethereum.org/@djrtwo/risks-of-lsd) - -## 為什麼我只能質押以太幣? {#why-can-i-only-stake-eth} - -以太幣是以太坊的原生貨幣。 讓所有質押都以單一貨幣計價至關重要,這既是爲了計算加權投票的有效餘額,也是爲了增加安全性。 以太幣本身是以太坊的基本組成部分,但不是智慧型合約的基本組成部分。 引入其他貨幣將顯著增加複雜性,並降低質押的安全性。 - -## 以太坊是唯一使用權益證明的區塊鏈嗎? {#is-ethereum-the-only-pos-blockchain} - -不是,有多條使用權益證明的區塊鏈。 其中沒有一條鏈與以太坊相同;以太坊的權益證明機制是獨一無二的。 - -## 合併是什麼? {#what-is-the-merge} - -合併是指以太坊關閉基於工作量證明的共識機制,並啓用基於權益證明的共識機制的時刻。 合併發生與 2022 年 9 月 15 日。 - -[合併案的相關細節](/roadmap/merge) - -## 什麽是活躍性與安全性? {#what-are-liveness-and-safety} - -活躍性和安全性是區塊鏈的兩大基礎安全問題。 活躍性是指最終確定鏈的可用性。 如果鏈停止最終確定或者用戶無法很容易地存取它,這就是活躍性失效。 使用成本極高也可以視爲活躍性失效。 安全性是指攻擊鏈(即最終確定衝突檢查點)的難度。 - -[閱讀更多關於 Casper 的論文](https://arxiv.org/pdf/1710.09437.pdf) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/gasper/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/gasper/index.md" deleted file mode 100644 index dd861e76a1c..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/gasper/index.md" +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Gasper -description: Gasper 權益證明機制的解釋。 -lang: zh-tw ---- - -Gasper 是由 Casper 友善最終確定性組件 (Casper-FFG) 及 LMD-GHOST 分叉選擇演算法組成的。 這些部分共同構成了保護權益證明以太坊的共識機制。 Casper 是將特定區塊升級至「最終確定」的機制,這樣新加入網路的節點就可以確定它們正在同步的是規範鏈。 分叉選擇演算法使用累積的投票,以確保節點能在區塊鏈發生分叉時很容易地選擇正確的鏈。 - -**注意**:由於 Casper-FFG 包含在 Gasper 中,因此其原始定義有小幅更新。 此頁面中的定義為更新後的版本。 - -## 前置要求 - -要瞭解本頁的內容,推薦先閱讀[權益證明](/developers/docs/consensus-mechanisms/pos/)的介紹頁面。 - -## Gasper 扮演的角色 {#role-of-gasper} - -Gasper 建立於權益證明區塊鏈之上,節點會提供以太幣作為保證金,若其在提議或驗證區塊時懶惰或不誠實,該保證金可能會被銷毀。 Gasper 是定義如何獎勵及處罰驗證者,決定應接受和拒絕哪個區塊,以及在區塊鏈的哪個分叉上建構的機制。 - -## 最終確定性是什麼? {#what-is-finality} - -最終確定性是某些區塊的屬性,指的是除非在共識嚴重失效或攻擊者已銷毀了至少 1/3 的總質押以太幣,否則該區塊無法被還原。 最終確定的區塊可以視為已經被區塊鏈確定的資訊。 區塊需要經過一個 2 步驟升級程序才能被最終確定: - -1. 三分之二的總質押以太幣必須投票支持將該區塊納入規範連。 此條件將區塊升級至「合理化」狀態。 合理區塊不太可能被還原,但在某些情況下也有可能。 -2. 當另一個區塊在一個合理區塊上被合理化時,該區塊將被升級至「最終確定」狀態。 最終確定一個區塊是將其納入規範鏈的承諾。 除非攻擊者銷毀了數百萬枚以太幣(數十億 $USD),否則該區塊無法被還原。 - -並非每個時隙都會發生這種區塊升級。 相反,只有時期邊界的區塊可以被合理化並最終確定。 這些區塊被稱爲「檢查點」。 升級需要考慮成對的檢查點。 兩個連續的檢查點中間必須存在一個「絕對多數連結」(即三分之二的縂質押以太幣投票支持檢查點 B 是檢查點 A 的正確子代),才能將較早的檢查點升級至最終確定狀態,並將較新的區塊升級至合理化狀態。 - -由於最終性需要三分之二的縂質押以太幣同意某個區塊是規範區塊,因此攻擊者無法在缺少下列條件的情況下建立另一條最終確定鏈: - -1. 擁有或操縱三分之二的縂質押以太幣。 -2. 銷毀至少三分之一的縂質押以太幣。 - -第一個條件出現的原因是需要三分之二的質押以太幣來最終確定一條鏈。 之所以有第二個條件,是因爲如果三分之二的質押總量投票支持了兩個分叉,則必然有三分之一的質押總量同時投票支持了兩個分叉。 雙重投票符合罰沒條件,會受到最大程度的懲罰,銷毀三分之一的質押縂量。 截至 2022 年 5 月,這需要攻擊者銷毀價值約 100 億美元的以太幣。 Gasper 中用於合理化並最終確定區塊的演算法是[友善最終確定性組件 (Casper-FFG)](https://arxiv.org/pdf/1710.09437.pdf) 的輕微改動版本。 - -### 激勵與罰沒 {#incentives-and-slashing} - -誠實地提議和驗證區塊的驗證者會獲得獎勵。 以太幣將作爲獎勵新增到他們的質押中。 另一方面,缺席或在被呼叫時未能響應的驗證者將錯過這些獎勵,有時還會損失他們現有質押的一小部分。 然而,離綫的處罰是較小的,在多數情況下,僅為錯失獎勵的機會成本。 但是,有些驗證者的行爲很難是無意爲之,並且表現出某種惡意企圖,例如在同一個時隙提議多個區塊、在同一個時隙證明多個區塊,或與先前的檢查點投票自相矛盾。 這些「可罰沒」行爲將受到更嚴厲的懲罰 - 罰沒將導致驗證者的部分質押被銷毀,並將驗證者移出驗證者網路。 這個過程需要 36 天。 在第 1 天,會有最高 1 個以太幣的初始懲罰。 之後,被罰沒驗證者的以太幣將在退出期間緩慢耗盡,但在第 18 天,他們會受到「相關性懲罰」,當更多的驗證者在大致同一時間被罰沒時,該懲罰的力度也會更大。 懲罰的上限是全部質押。 這些獎勵和懲罰旨在激勵誠實的驗證者,並抑制對網路的攻擊。 - -### 怠惰逐減懲罰 {#inactivity-leak} - -除了安全性外,Gasper 也提供「合理的活躍性」。 條件是只要三分之二的縂質押以太幣誠實地投票並遵循協定,無論是否有任何其他活動產生(例如攻擊、延遲問題或罰沒),鏈都能被最終確定。 換言之,想要阻止區塊鏈被最終確定,必須以某種方式損毀三分之一的縂質押以太幣。 在 Gasper 中,還有另一道防綫來防範活躍性失效,它就是「怠惰逐減懲罰」。 如果鏈未能在 4 個時期内最終確定,該機制就會啓動。 未能積極證明主鏈的驗證者的質押將會逐漸被消耗,直到主鏈重新獲得三分之二的縂質押投票,確保活躍性失效只是暫時的。 - -### 分叉選擇 {#fork-choice} - -Casper-FFG 的原始定義包含一種分叉選擇演算法,該演算法規定:`遵循包含具有最大高度的合理化檢查點的鏈`,其中高度被定義爲距離創世區塊的最遠距離。 在 Gasper 中,原始的分叉選擇規則已被棄用,轉而采用一種名為 LMD-GHOST 的更精密演算法。 請注意,在正常情況下,分叉選擇規則是不必要的 - 每個時隙只有一個區塊提議者,并有誠實的驗證者進行證明。 只有當網路非同步性過大或不誠實的區塊提議者模棱兩可的情況下,才需要分叉選擇演算法。 然而,當這些情況真的發生時,分叉選擇演算法是確保正確鏈的重要防禦措施。 - -LMD-GHOST 代表「最新訊息驅動的最貪婪、最重的可觀察子樹 (latest message-driven greedy heaviest observed sub-tree)」。 這是一個行話味很重的術語,用來定義這樣一種演算法:選擇具有最大累積證明權重的分叉作爲規範分叉(貪婪最重子樹),並且如果收到來自驗證者的多條訊息,則只考慮最新的訊息(最新訊息驅動)。 在將最重區塊新增到其規範鏈之前,每名驗證者都會使用此規則來評估每個區塊。 - -## 衍生閱讀 {#further-reading} - -- [Gasper:最貪婪、最重的可觀察子樹 (GHOST) 與 Casper 的結合](https://arxiv.org/pdf/2003.03052.pdf) -- [Casper 友善最終確定性組件](https://arxiv.org/pdf/1710.09437.pdf) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/index.md" deleted file mode 100644 index 96e6219c9bf..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/index.md" +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: 權益證明 (PoS) -description: 對權益證明共識協定及其在以太坊中之作用的解釋。 -lang: zh-tw ---- - -權益證明 (PoS) 是支撐以太坊[共識機制](/developers/docs/consensus-mechanisms/)的基礎。 以太坊於 2022 年啟用了權益證明機制,這一轉變主要因為相較於之前的[工作量證明](/developers/docs/consensus-mechanisms/pow)架構,權益證明機制在安全性上更為可靠,且能源消耗更低,為實現新的擴容解決方案提供了更優越的基礎。 - -## 先決條件 {#prerequisites} - -為了更好地理解此頁面,我們建議你先閱讀[共識機制](/developers/docs/consensus-mechanisms/)的相關資料。 - -## 什麼是權益證明 (PoS)? {#what-is-pos} - -權益證明是一種證明驗證者已經將有價值物品質押到網路上的方法。如果驗證者有失信行為,這些物品可能會被銷毀。 在以太坊的權益證明機制下,驗證者明確地透過以太幣將資產質押到以太坊上的智慧型合約中。 之後,驗證者負責檢查在網路上傳播的新區塊是否有效,偶爾自己也建立和傳播新區塊。 當他們試圖欺騙網路時(例如,在應該傳送一個區塊時提議多個區塊,或傳送衝突的證明),他們質押的部分或全部以太幣可能會被銷毀。 - -## 驗證者 {#validators} - -要作為驗證者參與,使用者必須向存款合約存入 32 個以太幣並執行三種獨立的軟體:執行用戶端、共識用戶端和驗證者用戶端。 存入以太幣時,使用者會加入一個激活隊列,限制新驗證者加入網路的速度。 激活後,驗證者會從以太坊網路上的對等節點接收新區塊。 區塊中的交易會被重新執行,以檢查提議的以太坊狀態變更是否有效,並檢查區塊的簽章。 然後驗證者在整個網路上傳送支持該區塊的投票(稱為證明)。 - -在工作量證明中,產生區塊的時間是由挖礦難度決定的,而在權益證明中,節奏是固定的。 權益證明以太坊中的時間分為時隙(12 秒)和時期(32 個時隙)。 在每個時隙會隨機選擇一位驗證者作為區塊提議者。 該驗證者負責建立新區塊並傳送給網路上的其他節點。 另外在每個時隙中,都會隨機選擇一個驗證者委員會,透過他們的投票來確定所提議區塊的有效性。 將驗證者集合劃分為若干個委員會對於保持網路負載易於管理非常重要。 委員會將驗證者集合分成不同部分,以便每個活躍的驗證者在每個時期都會出示證明,但並非每個時隙都這樣做。 - -## 如何在以太坊權益證明中執行交易 {#transaction-execution-ethereum-pos} - -以下提供了關於如何在以太坊權益證明中執行交易的全面解釋。 - -1. 使用者使用他們的私鑰建立並簽署[交易](/developers/docs/transactions/)。 這通常由錢包或程式庫處理,例如 [ether.js](https://docs.ethers.io/v5/)、[web3js](https://docs.web3js.org/)、[web3py](https://web3py.readthedocs.io/en/v5/) 等,但本質上是使用者在使用以太坊 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)向節點發出請求。 使用者定義他們準備支付的一定數量的燃料,作為給驗證者的小費,以鼓勵他們將交易納入到區塊中。 [小費](/developers/docs/gas/#priority-fee)支付給驗證者,而[基本費用](/developers/docs/gas/#base-fee)則會被銷毀。 -2. 交易提交給以太坊[執行層用戶端](/developers/docs/nodes-and-clients/#execution-client)以驗證其有效性。 這意味著確保發送者有足夠的以太幣來完成交易,並且他們已經使用正確的金鑰來簽署交易。 -3. 如果交易有效,執行層用戶端將其新增至其本機記憶體池(待處理交易清單),並透過執行層廣播網路將其廣播到其他節點。 當其他節點聽到關於交易的消息時,它們也會將其添加到本地記憶體池中。 進階使用者可能會避免廣播他們的交易,而是將其轉發給專門的區塊建置者,例如 [Flashbots Auction](https://docs.flashbots.net/flashbots-auction/overview)。 這使他們能夠在即將到來的區塊中組織交易以獲得最大利潤([最大可提取價值](/developers/docs/mev/#mev-extraction))。 -4. 網路上的驗證者節點之一是當前時隙的區塊提議者,該提議者是之前使用 RANDAO 以偽隨機方式選取的。 該節點負責建立和廣播下一個要新增至以太坊區塊鏈的區塊並更新全域狀態。 此節點由三個部分組成:執行用戶端、共識用戶端和驗證者用戶端。 執行層用戶端將來自本機記憶體池的交易捆綁到「執行有效負載」中,並在本機執行它們以產生狀態變更。 此資訊被傳遞到共識用戶端,在該用戶端,執行有效載荷被包裝為「信標區塊」的一部分。該信標區塊還包含有關獎勵、懲罰、罰沒、證明等的資訊,從而使網路能夠就鏈頭的區塊順序達成一致。 [連線共識用戶端和執行用戶端](/developers/docs/networking-layer/#connecting-clients)中更詳細地描述了執行用戶端和共識用戶端之間的通訊。 -5. 其他節點在共識層廣播網路上接收新的信標區塊, 並將其傳遞給它們的執行用戶端。在執行用戶端上,交易在本機重新執行以確保提議的狀態變更有效。 然後,驗證者用戶端證明該區塊是有效的,並且根據他們的看法,這在邏輯上是鏈上的下一個區塊(這意味著它建置在如[分叉選擇規則](/developers/docs/consensus-mechanisms/pos/#fork-choice)所定義的具有最大證明權重的鏈上)。 該區塊被新增到證明它的每個節點的本機資料庫中。 -6. 如果交易已經成為兩個檢查點之間具有「絕對多數連結」的鏈的一部分,那麼可以認為該交易已經「最終確定」。 檢查點發生在每個時期的開始,它們的存在是為了兼顧以下事實:每個時隙只有活躍驗證者的子集會提供證明,但所有活躍驗證者在每個完整時期內都會提供證明。 因此,只有在時期之間才能證明「絕對多數連結」(即網路上總質押以太幣的 66% 同意兩個檢查點的情況)。 - -關於最終確定性的更多詳細資訊,請參見下文。 - -## 最終性 {#finality} - -交易在分佈式網路中具有「最終確定性」是指,該交易是區塊的一部分,而且除非銷毀大量以太幣,否則便無法變更。 在權益證明以太坊上,最終確定性是透過「檢查點」區塊來管理的。 每個時期中的第一個區塊便是檢查點。 驗證者為其認為有效的「檢查點對」投票。 如果一對檢查點獲得了質押以太幣總數中三分之二以上的投票,那麼這對檢查點將被升級。 這兩個(目標)中較新的一個會變成「合理化」狀態。 較舊的一個檢查點已經是合理化狀態,因為它是上一個時期中的「目標」。 現在,這個檢查點已升級為「最終確定」狀態。 - -要撤銷最終確定的區塊,攻擊者將承擔至少相當於質押以太幣總數三分之一的損失。 這篇[以太坊基金會部落格文章](https://blog.ethereum.org/2016/05/09/on-settlement-finality/)解釋了其確切原因。 由於最終確定性需要獲得三分之二的多數投票,攻擊者可以用質押以太幣總數的三分之一投票來阻止網路實現最終確定性。 有一種可以防禦此種攻擊行為的機制:[怠惰逐減懲罰](https://eth2book.info/bellatrix/part2/incentives/inactivity)。 如果鏈未能在四個時期內最終確定,此機制就會啟動。 怠惰逐減懲罰會逐漸消耗驗證者投票反對大多數驗證者的質押以太幣,使大多數驗證者重新獲得三分之二多數投票,以最終確定鏈。 - -## 加密經濟安全性 {#crypto-economic-security} - -運行驗證者是一個承諾。 驗證者應要維持足夠的硬體和連線,以參與區塊驗證和提議。 作為回報,驗證者會獲得以太幣(他們的質押餘額增加)。 另一方面,作為驗證者參與也會開啟新渠道,讓使用者為了個人利益或為破壞而攻擊網路。 為了預防此種情況,如果驗證者在被調用時並未能參與,將會錯過以太幣獎勵,且他們如果有不誠實行為,目前的質押可能會被銷毀。 兩種主要的行為會被視為不誠實:在一個時隙中提議多個區塊(模稜兩可),以及提交相互矛盾的證明。 - -罰沒的以太幣數量視大致同一時間受到罰沒的驗證者數量而定。 這稱為[「相關性懲罰」](https://eth2book.info/bellatrix/part2/incentives/slashing#the-correlation-penalty)。相關性懲罰可以很輕微(單個驗證者被罰沒約 1% 的質押),或是造成驗證者 100% 的質押被銷毀(大額罰沒事件)。 這種懲處在強制退出期執行,首先是第一天的立即懲罰(最高 1 枚以太幣),接下來是第 18 天的相關性懲罰,最後是第 36 天的逐出網路。 如果驗證者在網路上但未提交投票,驗證者每天會受到輕微的證明懲罰。 以上均表明,協同攻擊對攻擊者來說代價將極其高昂。 - -## 分叉選擇 {#fork-choice} - -當網路以最佳狀態誠信運行時,鏈頭始終只會有一個新區塊並且所有驗證者都會證明它。 然而,由於網路延遲或因為區塊提議者提出多個區塊(模棱兩可),驗證者可能會看到不同的鏈頭視圖。 因此,共識用戶端需要一種演算法來確定支援哪一個區塊。 在權益證明以太坊中所用的演算法稱為 [LMD-GHOST](https://arxiv.org/pdf/2003.03052.pdf),其工作原理是識別在其歷史記錄中具有最大證明權重的分叉。 - -## 權益證明及安全性 {#pos-and-security} - -[51% 攻擊](https://www.investopedia.com/terms/1/51-attack.asp)的威脅如在工作量證明中一樣仍存在於權益證明,但對攻擊者來說風險更大。 攻擊者將需要 51% 的質押以太幣。 然後他們可以使用自己的證明,確保其首選的分叉為最多累積證明的分叉。 共識用戶端使用累積證明的「權重」來決定正確的鏈,使攻擊者能夠因此讓他們的分叉成為規範分叉。 然而,相較於工作量證明,權益證明的優勢在於社群可以靈活地發動反擊。 例如,誠實的驗證者可以決定繼續在非多數鏈上建置,忽略攻擊者的分叉,同時鼓勵應用程式、交易所和池也這樣做。 他們也可以決定強行將攻擊者從網路中移除,並銷毀其質押以太幣。 這些都是針對 51% 攻擊強而有力的經濟防禦。 - -除了 51% 攻擊,不良行為者也可能嘗試其他惡意活動,例如: - -- 遠程攻擊(但是最終確定性小工具能抵銷此種攻擊媒介) -- 短距「區塊重組」(但是提議者增強和證明截止可以緩解此情況) -- 反彈和平衡攻擊(也能透過提議者增強來緩解,且這些攻擊也只有在理想化的網路情況下展示過) -- 雪崩攻擊(透過分叉選擇演算法只考慮最新訊息的規則加以抵銷) - -整體來說,以太坊上實行的權益證明在經濟方面展現為比工作量證明更安全。 - -## 優勢及劣勢 {#pros-and-cons} - -| 優勢 | 劣勢 | -| ----------------------------------------------------------------------- | -------------------------- | -| 質押使個人更容易參與保障網路安全,促進去中心化。 驗證者節點可以在普通筆電上運行。 質押池讓使用者在沒有 32 個以太幣的情況下也能進行質押。 | 權益證明比起工作量證明更為初期且經歷過的實戰測試較少 | -| 質押更加去中心化。 規模經濟不像在工作量證明挖礦中那樣適用於權益證明。 | 實行權益證明比起工作量證明更為複雜 | -| 權益證明比起工作量證明提供了更多加密經濟安全性 | 使用者需要執行三個軟體才能參與以太坊質押 | -| 僅需發行更少的以太幣就能激勵網路參與者 | | - -### 與工作量證明的比較 {#comparison-to-proof-of-work} - -以太坊最初使用工作量證明,但在 2022 年 9 月轉為權益證明。 權益證明比工作量證明具有多項優勢,例如: - -- 能源效率更高 – 無需在工作量證明計算上使用大量能源 -- 參與門檻更低,更低的硬體要求 – 不需要頂尖硬體以獲得建立新區塊的機會 -- 更低的中心化風險 – 權益證明應可以增加保護網路安全的節點 -- 因為能源要求低,發行較少的以太幣就可以激勵參與 -- 與工作量證明相比,不當行為的經濟懲罰使發動 51% 攻擊的攻擊者須付出更高的代價 -- 如果 51% 攻擊攻破加密經濟防禦,社群可以採取誠實鏈的社交恢復。 - -## 了解更多 {#further-reading} - -- [權益證明常見問題](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html) - _Vitalik Buterin_ -- [什麼是權益證明?](https://consensys.net/blog/blockchain-explained/what-is-proof-of-stake/)- _ConsenSys_ -- [權益證明是什麼,又有何重要性?](https://bitcoinmagazine.com/culture/what-proof-of-stake-is-and-why-it-matters-1377531463)- _Vitalik Buterin_ -- [為什麼採用權益證明(2020 年 11 月)](https://vitalik.eth.limo/general/2020/11/06/pos2020.html)- _Vitalik Buterin_ -- [權益證明:我如何學著愛上弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) - _Vitalik Buterin_ -- [權益證明以太坊攻擊與防禦](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) -- [權益證明的設計哲學](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) - _Vitalik Buterin_ -- [影片:Vitalik Buterin 向 Lex Fridman 解釋權益證明](https://www.youtube.com/watch?v=3yrqBG-7EVE) - -## 相關主題 {#related-topics} - -- [工作量證明(PoW)](/developers/docs/consensus-mechanisms/pow/) -- [權威證明](/developers/docs/consensus-mechanisms/poa/) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/keys/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/keys/index.md" deleted file mode 100644 index b0cc78f1648..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/keys/index.md" +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: 權益證明以太坊中的金鑰 -description: 說明太坊權益證明共識機制中使用的金鑰 -lang: zh-tw ---- - -以太坊使用公私金鑰密碼學來保護使用者資產。 公鑰是以太坊地址的基礎,可被大眾看見並用作一個獨特的身分識別。 私鑰(或「密鑰」)則永遠只能由帳戶擁有者存取。 私鑰被用來「簽署」交易和資料,以便密碼學可以驗證私鑰持有者核准特定私鑰的某些動作。 - -以太坊的金鑰透過[橢圓曲線密碼學](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography)產生。 - -然而,當以太坊從[工作量證明](/developers/docs/consensus-mechanisms/pow)轉換為[權益證明](/developers/docs/consensus-mechanisms/pos)後,一種新型態的金鑰加入到以太坊中。 原始的金鑰仍維持相同的運作 — 使用基於橢圓曲線密碼學的金鑰來保障帳戶安全沒有變化。 然而,使用者需要一種新型態的金鑰,透過質押以太幣和運作驗證者來參與權益證明。 這個需求源於擴容帶來的挑戰,許多訊息需要在眾多的驗證者間傳遞,過程中需要一種可以輕鬆彙總的密碼學方法,以減少網路達成共識所需的通訊量。 - -這種新型態的金鑰使用 [**Boneh-Lynn-Shacham (BLS)** 簽章方案](https://wikipedia.org/wiki/BLS_digital_signature)。 BLS 能高效率地彙總簽名,同時允許對彙總的單獨驗證者金鑰進行逆向工程,非常適合管理驗證者之間的動作。 - -## 兩種類型的驗證者金鑰 {#two-types-of-keys} - -在以太坊過渡到權益證明之前,使用者只有一個基於橢圓曲線密碼學的私密金鑰來存取他們的資金。 隨著權益證明的引入,希望成為單獨質押者的使用者還需要**驗證者金鑰**和**提款金鑰**。 - -### 驗證者金鑰 {#validator-key} - -驗證者的簽章金鑰包含兩個元素: - -- 驗證者**私**鑰 -- 驗證者**公**鑰 - -驗證者私鑰的作用是簽署鏈上作業,像是區塊提議和證明區塊。 因此,這些私鑰必須存放在熱錢包中。 - -這種彈性的優勢是可以快速地在不同裝置間移轉驗證者簽章金鑰,然而,如果這些金鑰遺失或被偷,那竊盜者便可透過以下方式進行**惡意行為**: - -- 使驗證者遭受罰沒: - - 做為提議者,在同一個時隙簽署兩個不同的信標區塊 - - 做為證明者,簽署一個「包圍」另一個證明的證明 - - 做為證明者,簽署兩個具有相同目標的不同證明 -- 強制執行自願退出,使驗證者停止質押並授權提款金鑰擁有者存取其以太幣餘額。 - -當使用者將以太幣存入質押存款合約時,**驗證者公鑰**會被包含在交易資料中。 這被稱為_存款資料_,讓以太坊能夠辨識驗證者。 - -### 提款憑證 {#withdrawal-credentials} - -每個驗證者都會有一個稱為_提款憑證_的屬性。 這是一個 32 位元組的欄位,以 `0x00` 開頭,代表 Boneh-Lynn-Shacham 提款憑證,或是以 `0x01` 開頭,代表指向一個執行地址的憑證。 - -持有 `0x00` Boneh-Lynn-Shacham 金鑰的驗證者,必須更新這些憑證,將其指向執行地址以啟用超額獎勵發放或全額質押提款。 驗證者可以在初始金鑰產生的階段,就將執行地址包含在存款資料中,_或_後續透過使用提款金鑰來簽署和廣播一則 `BLSToExecutionChange` 訊息。 - -### 提款金鑰 {#withdrawal-key} - -如果在初始存款階段沒有設定,則需要提款金鑰來更新提款憑證,將其指向執行地址。 此設定使超額獎勵發放能夠開始處理,也讓使用者能將他們質押的以太幣全額提款。 - -如同驗證者金鑰,提款金鑰也由兩個元件組成: - -- 提款**私**鑰 -- 提款**公**鑰 - -如果在更新提款憑證為 `0x01` 類型前遺失金鑰,則意味著喪失對驗證者餘額的存取權限。 驗證者依舊可以簽署證明和區塊,因為這些動作只需要驗證者私鑰,然而遺失了提款私鑰就幾乎沒有激勵。 - -將驗證者金鑰與以太坊帳戶金鑰分離,可以讓一個使用者運行多個驗證者。 - -![驗證者金鑰示意圖](validator-key-schematic.png) - -## 從種子助記詞派生金鑰 {#deriving-keys-from-seed} - -如果每質押 32 個以太幣都需要一組新的 2 個完全獨立的金鑰,那金鑰管理很快就會變得無效率,尤其對那些運行多個驗證者的使用者而言。 相反,多個驗證者金鑰可以從一個共同的秘鑰派生,並且儲存這個秘鑰就允許存取多個驗證者金鑰。 - -[助記詞](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase)和路徑通常是[使用者存取](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0)自己的錢包時最重要的工具。 助記詞是一連串的文字,做為私密金鑰的初始種子。 當助記詞和額外的資料結合,即可產生一個稱為「主密鑰」的雜湊值。 這可以視為一個樹的根部。 然後從這個根部開始,使用階層路徑來派生分支,使子節點可以作為其父節點的雜湊值及其在樹中的索引之組合而存在。 閱讀 [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) 及 [BIP-19](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki),瞭解基於助記詞生成金鑰的標準。 - -這些路徑具有以下結構,與硬體錢包有過互動的使用者會相對熟悉: - -``` -m/44'/60'/0'/0` -``` - -這些路徑中的斜線將私鑰的組成部分區分如下: - -``` -master_key / purpose / coin_type / account / change / address_index -``` - -因為樹根是相同的,變化發生在分支,所以這個邏輯讓使用者能將盡可能多的驗證者附加到一個**助記詞**上。 使用者可以從助記詞中**派生任意數量的金鑰**。 - -``` - [m / 0] - / - / -[m] - [m / 1] - \ - \ - [m / 2] -``` - -每一個分支由 `/` 來區分,因此 `m/2` 代表從主金鑰開始並遵循分支 2。 下圖顯示,一個助記詞用來儲存三個提款金鑰,每一個金鑰有兩個關聯的驗證者。 - -![驗證者金鑰邏輯](multiple-keys.png) - -## 衍生閱讀 {#further-reading} - -- [Carl Beekhuizen 發布的以太坊基金會部落格文章](https://blog.ethereum.org/2020/05/21/keys/) -- [EIP-2333 BLS12-381 金鑰產生](https://eips.ethereum.org/EIPS/eip-2333) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md" deleted file mode 100644 index 5f1cf2ff576..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md" +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: 權益證明與工作量證明的比較 -description: 基於權益證明與工作量證明的以太坊共識機制比較 -lang: zh-tw ---- - -在以太坊推出時,權益證明還需要許多的研究及開發以確保其可以保護以太坊, 而工作量證明則是一個較簡單且已被比特幣驗證過的機制,這表示核心開發者可以直接實行它並讓以太坊上線。 從那時候到可以實行權益證明,一共又花費了八年的開發時間。 - -本頁解釋以太坊從工作量證明移過渡到權益證明的源由,及其所牽涉的取捨。 - -## 安全性 {#security} - -以太坊研究者認為權益證明相較工作量證明是一個更安全的機制。 然而,它最近才在以太坊的主網上實行,運行時間也少於工作量證明。 在接下來的部分,我們將討論相較於工作量證明,權益證明安全模型的利與弊。 - -### 攻擊成本 {#cost-to-attack} - -在權益證明中,驗證者需要在智慧型合約中代管(「質押」)至少 32 個以太幣。 以太坊能夠在驗證者行為不端時,將質押的以太幣銷毀作為懲罰。 為了達成共識,至少 66% 的總質押以太幣需要投票贊成某個特定的區塊集合。 獲得 >= 66% 的質押以太幣投票贊成的區塊會「最終確定」,代表這些區塊無法再被移除或是重組。 - -攻擊網路可能是阻止鏈的最終確定,或是確保規範鏈內的某種區塊組織以某種方式讓攻擊者受益。 這需要攻擊者透過累積大量以太幣並直接投票,或是欺騙誠實的驗證者,讓他們投出特定的票,將誠實的共識改道。 複雜且概率較低的攻擊會欺騙誠實的驗證者,除此之外,攻擊以太坊的成本就是攻擊者必須累積的以有利於他們的方式影響共識的質押以太幣。 - -最低攻擊成本是 >33% 的總質押以太幣。 持有 >33% 質押總量的攻擊者可以簡單地透過離線造成最終確定性延遲。 這對網路造成的影響相對較小,因為有一種叫做「怠惰逐減懲罰」的機制,它會將離線驗證者的質押逐漸消減,直到線上的多數驗證者的質押佔比達到 66%,這時就可以重新對鏈進行最終確定。 攻擊者理論上也可以透過持有稍高於 33% 的質押總量來製造雙重最終確定性,即攻擊者會在他們被要求產生區塊時,用他們的所有驗證者去重複投票並建立不止一個區塊。 每個分叉只需 50% 的剩餘誠實驗證者就能先看到每個區塊,所以如果他們控制訊息傳送時間得宜,他們有可能讓兩個分叉都能最終確定。 這種攻擊的成功率很低,但如果攻擊者有辦法做到雙重最終確定性,以太坊社群將不得不決定採用其中一個分叉,這種情況下,另一個分叉上攻擊者的驗證者必然會遭到罰沒。 - -擁有 >33% 的質押總量,攻擊者就有機會對以太坊網路造成輕微(最終確定性延遲)或是嚴重(雙重最終確定性)的影響。 當在網路上質押大於 14,000,000 個以太幣時,以代表性的價格 1000 美元/以太幣計算,這些攻擊的最低成本為 `1000 x 14,000,000 x 0.33 = $4,620,000,000`。 攻擊者遭到罰沒時會失去這些錢並被逐出以太坊。 如果他們想要再次攻擊,則需要再次累積 >33% 的質押以太幣,然後再把這些錢銷毀一次。 每次嘗試攻擊以太坊網路都需要 >46 億美元的成本(以 1000 美元/以太幣及 1400 萬質押以太幣計算)。 攻擊者在被罰沒時也會被驅逐出以太坊,如果他們想再次加入,則需要重新排隊。 這表示重複攻擊的速率不只受制於攻擊者需要累積 >33% 的質押總量,還需要花時間等待其所有的驗證者加入以太坊網路。 每一次的攻擊都會讓攻擊者變得更窮,而剩餘的社群則得益於供給衝擊的結果而變得更富。 - -其他攻擊,如 51% 攻擊或是透過 66% 質押總量的最終確定性反轉,都需要更多的以太幣,相對來說也會耗費攻擊者更高的成本。 - -下面把權益證明與工作量證明做下比較。 在工作量證明以太坊上,發起攻擊的成本即是持續擁有 >50% 以太幣總算力的成本。 這相當於擁有充足算力的硬件和運行成本,可勝過其他礦工持續計算工作量證明的解的硬體及其運行花費。 在以太坊挖礦主要透過圖形處理單元而不是專用積體電路,這讓成本有所降低(但如果讓以太坊繼續使用工作量證明,專用積體電路挖礦可能已變得更加受歡迎)。 對手會需要購買大量的硬體並支付高昂的電費以攻擊工作量證明,但總成本還是比累積足夠的以太幣以發動攻擊低。 在工作量證明上發動 51% 攻擊要比在權益證明上便宜約[ 20 倍](https://youtu.be/1m12zgJ42dI?t=1562)。 如果攻擊被偵測到,且以太坊透過硬分叉移除了所造成的改變,攻擊者還是可以使用相同的硬體,對新分叉重複發動攻擊。 - -### 複雜性 {#complexity} - -權益證明比工作量證明複雜得多。 這可能會是工作量證明的好處之一,因為它比較難導入錯誤,或是對較簡易的協定造成意外影響。 不過,歷經多年的研究、開發、模擬及測試網實行,這樣的複雜性已經被馴化。 權益證明協定已經由五個獨立團隊(在各個執行層及共識層上)用五種不同的程式設計語言獨立地實行,以增強對用戶端錯誤的韌性。 - -為了能夠安全地開發及測試權益證明的共識邏輯,在以太坊實行權益證明的兩年前就已啟動信標鏈。 信標鏈作為權益證明測試的沙盒,是一條實行權益證明共識邏輯的即時區塊鏈,但不會影響實際以太坊交易,能有效地自行達成共識。 在它持續表現穩定且沒有發生任何錯誤足夠長的時間後,信標鏈被「合併」進以太坊主網中。 這些都能協助降低權益證明的複雜性,讓發生非計畫性後果或用戶端錯誤的風險變得極低。 - -### 攻擊媒介 {#attack-surface} - -權益證明比工作量證明更複雜,這意味著需要處理更多的攻擊媒介。 與一個連線用戶端的點對點網路不同,權益證明有兩個點對點網路,分別實行不同的協定。 在每個時隙預先選擇一名特定驗證者可能會造成阻斷服務攻擊,其中大量的網路流量會導致該特定驗證者離綫。 - -攻擊者還有一些方法可以精心安排其區塊或證明的釋放時間,使它們被特定比例的誠實網路所接收,從而影響他們以特定方式進行投票。 最後,攻擊者可以簡單地累積足夠多的以太幣進行質押,並主導共識機制。 所有這些[攻擊媒介都有相應的防禦措施](/developers/docs/consensus-mechanisms/pos/attack-and-defense),但工作量證明機制下,並未提供這些防禦措施。 - -## 去中心化 {#decentralization} - -權益證明比工作量證明更加去中心化,因爲挖礦硬體的軍備競賽趨於淘汰個人礦工和小型組織。 雖然從技術上講,任何人都可以使用一般的硬體進行挖礦,但與機構化的挖礦作業相比,他們獲得獎勵的可能性微乎其微。 而在權益證明機制中,每個人的質押成本和回報百分比都是相同的。 目前,運行一個驗證者需要質押 32 個以太幣。 - -另一方面,流動性質押衍生品的出現引起了對中心化的憂慮,因爲一些大型供應商管理了大量的質押以太幣。 這個問題確實存在,并且需要儘快更正,但實際情況也比看起來更微妙。 中心化的質押供應商不一定會對驗證者進行中心化控制 - 這通常只是建立中心化以太幣池的一種方式,讓許多獨立節點營運商能夠進行質押,而不要求每名參與者都擁有 32 個以太幣。 - -對於以太坊,最佳的選項是讓驗證者在家用電腦上本機運作,以實現最大程度的去中心化。 這就是爲什麽以太坊拒絕提高運作節點/驗證者的硬體要求。 - -## 永續性 {#sustainability} - -權益證明是一種保護區塊鏈的低碳方式。 在工作量證明機制下,礦工會爭奪區塊的開采權。 能夠更快執行運算的礦工更容易成功,這刺激了對硬體的投資和能源消耗。 以太坊在過渡到權益證明之前就觀察到了這一點。 在過渡到權益證明的前夕,以太坊的年耗電量約爲 78 太瓦時 - 相當於一個小型國家的用電量。 但在過渡到權益證明后,該能源消耗減少了約 99.98%。 權益證明使以太坊成爲一個節能、低碳的平台。 - -[更多關於以太坊能源消耗的資訊](/energy-consumption) - -## 發行 {#issuance} - -權益證明以太坊在支付其安全成本時,發行的代幣比工作量證明以太坊少得多,因爲驗證者無需支付高昂的電力成本。 因此,以太幣可以降低通貨膨脹,在大量以太幣被銷毀時,甚至會出現通貨緊縮。 更低的通貨膨脹水平意味著以太坊的安全成本相比工作量證明機制更低。 - -## 想透過視覺方式學習? {#visual-learner} - -觀看 Justin Drake 解釋權益證明相較於工作量證明的優點: - - - -## 了解更多 {#further-reading} - -- [Vitalik 的權益證明設計理念](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) -- [Vitalik 的權益證明常見問答](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) -- [關於權益證明與工作量證明的「簡介」影片](https://www.youtube.com/watch?v=M3EFi_POhps) diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md" deleted file mode 100644 index 4327e6c0d60..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md" +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: 權益證明獎勵和懲罰 -description: 瞭解權益證明以太坊的協定內激勵措施。 -lang: zh-tw ---- - -以太坊是運用其原生加密貨幣以太幣 (ETH) 來保障安全的。 希望參與驗證區塊和識別鏈頭的節點營運商,需要將以太幣存入以太坊上的[存款合約](/staking/deposit-contract/)。 然後他們將獲得以太幣支付來運作驗證者軟體,檢查在點對點網絡上收到的新區塊的有效性,並套用分叉選擇演算法來辨識鏈頭。 - -驗證者有兩個主要角色:1) 檢查新區塊並證明它們的有效性,2) 從全體驗證者池中被隨機選取時提議新的區塊。 如果驗證者在被要求時無法執行上述工作中的任意一個,他們便無法取得以太幣支付。 驗證者有時也會被賦予彙總簽章和參與同步委員會的工作。 - -有些行爲很難無意爲之並表現出某種惡意企圖,例如在同一個時隙提議多個區塊或在同一個時隙證明多個區塊。 這些「可罰沒」的行為會導致驗證者一定數量的以太幣(多達 1 枚以太幣)被銷毀,之後將其從網絡中移除,此過程需時 36 天。 被罰沒驗證者的以太幣將在退出期間緩慢耗盡,但在第 18 天,他們會受到「相關性懲罰」,當更多的驗證者同時被罰沒時,該懲罰的力度也會更大。 共識機制的激勵結構以此方式獎賞誠實,同時也懲罰不良行為者。 - -所有獎勵和懲罰每個時期套用一次。 - -繼續閱讀,以瞭解更多詳情... - -## 獎勵和懲罰 {#rewards} - -### 酬勞 {#rewards} - -驗證者獲得獎勵的情景有:當他們與大多數其他驗證者的投票結果一致時,當他們提議區塊時,以及當他們參與同步委員會時。 每個時期的獎勵價值按 `base_reward` 計算。 這是用來計算其他獎勵的基本單位。 `base_reward` 代表一個最佳狀況下的驗證者在每個時期收到的平均獎勵。 這是按以下公式,根據驗證者的有效餘額和活躍驗證者總數來計算的: - -``` -base_reward = effective_balance * (base_reward_factor / (base_rewards_per_epoch * sqrt(sum(active_balance)))) -``` - -其中 `base_reward_factor` 為 64,`base_rewards_per_epoch` 為 4,`sum(active balance)` 為所有活躍驗證者質押的以太幣總數。 - -這意味著基本獎勵與驗證者的有效餘額成正比,與網路中的驗證者數量成反比。 驗證者越多,總體發行量越大(`sqrt(N)` 形式),但每個驗證者的 `base_reward` 越小(`1/sqrt(N)` 形式)。 這些因素會影響質押節點的年利率。 閲讀 [Vitalik 的筆記](https://notes.ethereum.org/@vbuterin/rkhCgQteN?type=view#Base-rewards)中與之有關的原理。 - -縂獎勵的計算方式為 5 個組成部分的總和,每個部分各有一個權重,決定該組成部分在縂獎勵中的加成。 組成部分包括: - -``` -1. source vote: the validator has made a timely vote for the correct source checkpoint -2. target vote: the validator has made a timely vote for the correct target checkpoint -3. head vote: the validator has made a timely vote for the correct head block -4. sync committee reward: the validator has participated in a sync committee -5. proposer reward: the validator has proposed a block in the correct slot -``` - -每個組成部分的權重如下: - -``` -TIMELY_SOURCE_WEIGHT uint64(14) -TIMELY_TARGET_WEIGHT uint64(26) -TIMELY_HEAD_WEIGHT uint64(14) -SYNC_REWARD_WEIGHT uint64(2) -PROPOSER_WEIGHT uint64(8) -``` - -這些權重的總和為 64。 獎勵的計算方式為適用權重除以 64 的總和。 及時為來源、目標和鏈頭投票、提議區塊和參與同步委員會的驗證者,可以獲得 `64/64 * base_reward == base_reward`。 不過,驗證者通常不是區塊提議者,因此他們的最大獎勵為 `64-8 /64 * base_reward == 7/8 * base_reward`。 既不是區塊提議者,也沒有參與同步委員會的驗證者,可以獲得 `64-8-2 / 64 * base_reward == 6.75/8 * base_reward`。 - -以太坊還新增了一個額外獎勵來激勵快速證明。 它就是 `inclusion_delay_reward`。 該獎勵的值等於 `base_reward` 乘以 `1/delay`,其中 `delay` 是分隔區塊提議和證明的時隙數。 例如,如果在區塊提議的一個時隙内提交證明,證明者就會獲得 `base_reward * 1/1 == base_reward`。 如果證明在下個時隙到達,證明者就會獲得 `base_reward * 1/2`,依此類推。 - -包含在區塊内的**每個有效證明**都會讓區塊提議者獲得 `8 / 64 * base_reward`,因此實際獎勵的價值與證明驗證者的數量成正比。 區塊提議者也可以透過在提議的區塊中包含其他驗證者不良行爲的證據來增加其獎勵。 這些獎勵是鼓勵驗證者保持誠實的「紅蘿蔔」。 包含罰沒的區塊提議者將獲得 `slashed_validators_effective_balance / 512`。 - -### 懲罰 {#penalties} - -到目前爲止,我們已經考慮了行爲良好的驗證者,但對於那些沒有及時為鏈頭、來源和目標投票或投票速度非常慢的驗證者,應該怎樣做呢? - -錯過目標和來源投票的懲罰等同於證明者提交它們時獲得的獎勵。 這意味不會有獎勵新增到他們的餘額中,反而會從餘額中移除相應的價值。 錯過鏈頭投票不會受到懲罰(即鏈頭投票只會獲得獎勵,不會受到懲罰)。 也沒有與 `inclusion_delay` 相關的懲罰 - 只是不會新增獎勵到驗證者的餘額中。 未能提議區塊也不會受到懲罰。 - -閱讀[共識規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md)中有關獎勵和懲罰的更多資訊。 獎勵和懲罰在 Bellatrix 升級中進行了調整 - 在[以太坊改善提議解讀視頻](https://www.youtube.com/watch?v=iaAEGs1DMgQ)中觀看 Danny Ryan 和 Vitalik 關於此話題的討論。 - -## 罰沒 {#slashing} - -罰沒是一種更嚴厲的行為,會導致驗證者被強制逐出網路,同時損失其質押的以太幣。 導致驗證者被罰沒的情況有三種,以下所有行為都相當於不誠實地提議或證明區塊: - -- 在同一個時隙提議並簽署兩個不同的區塊 -- 證明一個「包圍」了另一個區塊的區塊(有效地改變歷史記錄) -- 透過證明同一區塊的兩個候選區塊進行「雙重投票」 - -如果偵測到這些行爲,驗證者將被罰沒。 這意味著他們質押的以太幣的 1/32(最多不超過 1 枚以太幣)將被立即銷毀,然後開始為期 36 天的驅逐期。 在驅逐期内,驗證者的質押會逐漸流失。 在中間點(第 18 天),會有一項額外的懲罰,其力度與罰沒事件前 36 天内所有被罰沒驗證者的縂質押以太幣成正比。 這意味著當有更多驗證者被罰沒時,罰沒的力度就會增加。 最大罰沒力度是所有被罰沒驗證者的全部有效餘額(即如果有很多驗證者被罰沒,他們將失去全部質押)。 另一方面,一次孤立的罰沒事件只會銷毀驗證者質押的一小部分。 這個與被罰沒驗證者的數量成正比的中間點懲罰稱爲「相關性懲罰」。 - -## 怠惰逐減懲罰 {#inactivity-leak} - -如果共識層未能在四個時期内最終確定,一種稱爲「怠惰逐減懲罰」的應急協定將會啓用。 怠惰逐減懲罰的最終目標是為鏈恢復最終確定性創造條件。 如上所述,最終確定需要 2/3 的多數縂質押以太幣同意來源和目標檢查點。 如果超過 1/3 的總計驗證者離綫或未能提交正確的證明,就不可能有 2/3 的絕對多數來最終確定檢查點。 怠惰逐減懲罰使不活躍驗證者的質押逐漸流失,直至他們控制的質押少於質押縂量的 1/3,使剩餘的活躍驗證者可以最終確定鏈。 無論不活躍驗證者的池有多大,剩餘的活躍驗證者最終都會控制超過 2/3 的質押。 質押的損失是促使不活躍驗證者儘快重新活躍的强大激勵措施。 Medalla 測試網上曾出現過一個怠惰逐減懲罰案例,當時不到 66% 的活躍驗證者成功在最新區塊鏈鏈頭達成共識。 怠惰逐減懲罰被啟動,最後重新獲得了最終確定性! - -共識機制中的獎勵、懲罰與罰沒設計,都是鼓勵個人驗證者正確行事。 然而,從這些設計選擇中形成了一個系統,强烈激勵在多個用戶端平等分配驗證者,並且强烈抑制單一用戶端取得主導地位。 - -## 衍生閱讀 {#further-reading} - -- [升級以太坊:激勵層](https://eth2book.info/altair/part2/incentives) -- [以太坊混合 Casper 協定中的激勵措施](https://arxiv.org/pdf/1903.04205.pdf) -- [Vitalik 的規範註解](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#rewards-and-penalties-1) -- [以太坊 2 罰沒預防技巧](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) - -_資源_ - -- _[https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/](https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/)_ diff --git "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md" "b/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md" deleted file mode 100644 index d2aab3c1fc4..00000000000 --- "a/public/content/translations/zh-tw/16) Foundational Docs \342\200\223 Proof-of-Stake/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md" +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 弱主觀性 -description: 關於弱主觀性及其在權益證明以太坊中所扮演角色的解釋。 -lang: zh-tw ---- - -區塊鏈中的主觀性是指依賴社交資訊來達成對當前狀態的共識。 可能有多個有效分叉,可根據從網路上其他對等節點收集而來的資訊進行選擇。 主觀性的反面是客觀性,是指只存在唯一一條可能有效的鏈,所有節點都需要透過套用其程式碼規則達成共識。 還有第三種狀態,稱為弱主觀性。 這是指在擷取一些初始社交資訊種子後,可以客觀地繼續運作的區塊鏈。 - -## 前置要求 {#prerequisites} - -要理解本頁內容,需先理解[權益證明](/developers/docs/consensus-mechanisms/pos/)的基礎知識。 - -## 弱主觀性解決了什麼問題? {#problems-ws-solves} - -主觀性是權益證明區塊鏈固有的,因為從多個分叉中選擇正確的鏈是透過計算歷史投票結果得來的。 這使區塊鏈暴露在多種攻擊媒介之下,包含遠程攻擊,即很早就加入區塊鏈的節點維護了另一個分叉,並在很久後為了自身利益將其釋放。 或者,如果 33% 的驗證者提取其質押、但繼續證明和產生區塊,他們可能會產生另一個與規範鏈衝突的分叉。 新的節點或是下線許久的節點可能會沒有意識到這些發動攻擊的驗證者已經提取他們的資金,所以攻擊者可能哄騙這些節點跟隨不正確的區塊鏈。 以太坊可以透過施加約束,將機制的主觀方面及由此而來的信任假設減少到最低限度,來解決這些攻擊媒介。 - -## 弱主觀性檢查點 {#ws-checkpoints} - -弱主觀性透過使用「弱主觀性檢查點」在權益證明以太坊上實行。 它們是網路上所有節點都同意屬於規範鏈的狀態根。 除了不直接位於區塊鏈上的創世位置之外,它們有著與創世區塊相同的「普適真理」用途。 分叉選擇演算法信任在該檢查點中所定義的區塊鏈狀態是正確的,且從該點開始獨立並客觀地驗證區塊鏈。 因為位於弱主觀性檢查點之前的區塊不能被改變,這些檢查點作為「還原限制」。 只需透過定義遠端分叉為無效且當作機制設計的一部分,即可瓦解遠程攻擊。 確保弱主觀性檢查點的間隔距離小於驗證者提款期間的間隔距離,能夠確保將區塊鏈分叉的驗證者在能夠提取其質押前至少被罰沒一定的門檻數量,且新進者不會被已經提取質押的驗證者誘騙至跟隨不正確的分叉。 - -## 弱主觀性檢查點與最終確定區塊的區別 {#difference-between-ws-and-finalized-blocks} - -以太坊節點以不同方式處理最終確定的區塊和弱主觀性檢查點。 如果一個節點意識到有兩個競爭的最終確定區塊,則會左右為難;它沒有辦法自動辨識出哪個為規範分叉。 這是共識失敗的症狀。 相反,一個節點直接拒絕與其弱主觀性檢查點衝突的任何區塊。 從節點的角度來說,弱主觀性檢查點代表無法被其對等節點的新認知損害的絕對事實。 - -## 多弱是為弱? {#how-weak-is-weak} - -以太坊權益證明的主觀方面是要求從可信來源同步最近狀態(弱主觀性檢查點)。 因為可以根據幾個獨立的公開來源(例如區塊瀏覽器或多個節點)對弱主觀性檢查點進行檢查,所以獲得不佳的弱主觀性檢查點的風險非常低。 然而,執行任何軟體應用程式總是需要一定程度的信任,例如,相信軟體開發者產出誠實的軟體。 - -弱主觀性檢查點甚至可能作為用戶端軟體的一部分出現。 可以說,攻擊者能夠破壞軟體內的檢查點,就能非常容易地破壞軟體本身。 雖然沒有能夠完全避免此問題的加密貨幣經濟方法,但以太坊透過多個獨立的用戶端團隊最小化了不可信開發者帶來的影響。每個團隊以不同語言建構等效的軟體,而所有團隊在維護誠實區塊鏈上有既得利益。 區塊瀏覽器也可以提供弱主觀性檢查點,或者提供一種方法,將從其他地方獲得的檢查點與其他來源進行交叉比對。 - -最後,可以從其他節點要求檢查點;或許另一個運作全節點的以太坊使用者可以提供一個檢查點,然後由驗證者比對來自區塊瀏覽器的資料進行驗證。 整體來說,信任弱主觀性檢查點的提供者被認為跟信任用戶端開發者一樣存在問題。 需要的整體信任很低。 值得注意的是,只有當大多數驗證者串謀產生區塊鏈的另一個分叉這種微乎其微的情況下,上述考量才會變得非常重要。 其他情況下,只有一個以太坊鏈可供選擇。 - -## 衍生閱讀 {#further-reading} - -- [以太坊 2.0 中的弱主觀性](https://notes.ethereum.org/@adiasg/weak-subjectvity-eth2) -- [Vitalik:我如何愛上弱主觀性](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) -- [弱主觀性(Teku 文件)](https://docs.teku.consensys.net/en/latest/Concepts/Weak-Subjectivity/) -- [階段 0 弱主觀性指南](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md) -- [以太坊 2.0 中的弱主觀性分析](https://github.com/runtimeverification/beacon-chain-verification/blob/master/weak-subjectivity/weak-subjectivity-analysis.pdf) diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/poa/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/poa/index.md" deleted file mode 100644 index 26c55d4681f..00000000000 --- "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/poa/index.md" +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: 權威證明 (PoA) -description: 解釋權威證明共識協定及其在區塊鏈生態系統中的作用。 -lang: zh-tw ---- - -**權威證明 (PoA)** 是一種基於聲譽的共識演算法,是[權益證明](/developers/docs/consensus-mechanisms/pos/)的修改版本。 它主要由私人鏈、測試網和本地開發網路使用。 權威證明是一種基於聲譽的共識演算法,需要信任一組授權簽署者來產生區塊,而不是權益證明中基於權益的機制。 - -## 先決條件 {#prerequisites} - -為了更好地理解本頁內容,我們建議你先熟悉 [交易](/developers/docs/transactions/)、[區塊](/developers/docs/blocks/) 和 [共識機制](/developers/docs/consensus-mechanisms/) 等概念。 - -## 什麼是權威證明 (PoA)? {#what-is-poa} - -權威證明是 **[權益證明](/developers/docs/consensus-mechanisms/pos/) (PoS)** 的修改版本,它是一種基於聲譽的共識演算法,而不是權益證明中基於權益的機制。 這個術語由 Gavin Wood 於 2017 年首次提出,這種共識演算法主要被私人鏈、測試網和本地開發網路使用,因為它透過讓一小部分節點儲存區塊鏈並產生區塊,克服了工作量證明對高品質資源的需求,以及權益證明存在的可擴展性問題。 - -權威證明需要信任 [創世區塊](/glossary/#genesis-block) 中設定的一組授權簽署者。 在目前的大多數實作中,所有授權簽署者在確定鏈的共識時都保留平等的權力和特權。 聲譽抵押背後的想法是,透過諸如認識你的客戶 (KYC) 之類的方式,或者透過讓知名組織成為唯一的驗證者,使每個授權驗證者為每個人所熟知 - 這樣,如果驗證者做錯任何事情,他們的身分就會被識別。 - -權威證明有多種實作,但標準的以太坊實作是實作了 [EIP-225](https://eips.ethereum.org/EIPS/eip-225) 的 **Clique**。 Clique 是開發者友好且易於實作的標準,支援所有用戶端同步類型。 其他實作包括 [IBFT 2.0](https://besu.hyperledger.org/stable/private-networks/concepts/poa) 和 [Aura](https://openethereum.github.io/Chain-specification)。 - -## 運作原理 {#how-it-works} - -在權威證明中,選擇一組授權簽署者來建立新區塊。 簽署者是根據他們的聲譽來選擇的,並且是唯一被允許建立新區塊的人。 簽署者以輪轉方式選擇,每個簽署者被允許在特定的時間範圍內建立一個區塊。 區塊建立時間是固定的,簽署者需要在該時間範圍內建立區塊。 - -在這種情況下,聲譽不是一個量化的東西,而是微軟和谷歌等知名公司的聲譽,因此選擇受信任簽署者的方式不是演算法,而是信任實體的正常人類行為。例如,微軟在成百上千家初創公司之間建立了一個權威證明專用網路,以自己作為唯一受信任的簽署者,並且將來有可能添加其他知名簽署者(如谷歌),那麼初創公司毫無疑問會信任微軟始終以誠實的方式行事並使用網路。 這解決了在不同的小型/私有網路中進行質押的需求,這些用途各異的網路為了保持去中心化和運行而建立,並且還消除了對消耗大量能源和資源之礦工的需求。 一些專用網路使用權威證明標準(例如 VeChain),還有一些對其進行了修改,例如採用 [PoSA](https://academy.binance.com/en/glossary/proof-of-staked-authority-posa) 標準的幣安。PoSA 是權威證明和權益證明的自訂修改版本。 - -投票過程由簽署者自行完成。 每個簽署者在建立新區塊時都會投票決定在其區塊中新增或刪除簽署者。 投票由節點進行統計,並根據達到特定閾值「SIGNER_LIMIT」的投票結果來新增或刪除簽署者。 - -可能會出現小分叉的情況,一個區塊的難度取決於該區塊是「依序」簽署還是「不依序」簽署。 「依序」區塊的難度為 2,「不依序」區塊的難度為 1。 在小分叉的情況下,大多數簽署者「依序」密封區塊的鏈將累積最大難度並獲勝。 - -## 攻擊媒介 {#attack-vectors} - -### 惡意簽署者 {#malicious-signers} - -惡意使用者可能會被新增至簽署者清單中,或者簽署金鑰/機器可能遭到洩漏/攻擊。 在這種情況下,協定需要能夠防禦重組和垃圾郵件攻擊。 建議的解決方案是,給定 N 個授權簽署者的清單,任何簽署者只能從每 K 個區塊鑄造 1 個區塊。這將確保損失有限,並且剩餘驗證者可以投票逐出惡意使用者。 - -### 審查制度 {#censorship-attack} - -另一個有趣的攻擊媒介是,一個簽署者(或一組簽署者)試圖對投票決定將其從授權清單中刪除的區塊進行審查。 為了解決這個問題,簽署者允許的鑄造頻率被限制為每 N/2 個 1 次。 這確保惡意簽署者需要控制至少 51% 的簽署帳戶,才能真正成為鏈上新的真實性來源。 - -### 垃圾郵件 {#spam-attack} - -另一個小型攻擊媒介是,惡意簽署者在其鑄造的每個區塊中註入新的投票提案。 由於節點需要統計所有投票以建立授權簽署者的實際清單,因此它們必須記錄一段時間內的所有投票。 如果不限制投票窗口,投票窗口可能會緩慢但無限制地增長。 解決方案是設置一個 W 個區塊的移動窗口,在此之後的投票將被視為過時。 合理的窗口可能是 1-2 個時期。 - -### 並發區塊 {#concurrent-blocks} - -在權威證明網路中,當有 N 個授權簽署者時,每個簽署者都可以從 K 個區塊鑄造 1 個區塊,這意味著允許 N-K+1 個驗證者在任意給定時間點鑄造區塊。 為了防止這些驗證者爭奪區塊,每個簽署者應該在發布新區塊的時間上增加一個小的隨機「偏移量」。 儘管這個過程確保小分叉很少見,但偶爾的分叉仍可能發生,就像主網一樣。 如果發現某個簽署者濫用權力並造成混亂,其他簽署者可以投票將其逐出。 - -例如,如果有 10 個授權簽署者,並且每個簽署者可以從 20 個區塊建立 1 個區塊,那麼在任意給定時間,有 11 個驗證者可以建立區塊。 為了防止他們競相建立區塊,每個簽署者都會在發布新區塊的時間上增加一個小的隨機「偏移量」。 這就減少了小分叉的發生,但仍然允許偶爾分叉,如以太坊主網上所見。 如果簽署者濫用權力並造成破壞,他們可能會被投票逐出網路。 - -## 優點和缺點 {#pros-and-cons} - -| 優勢 | 劣勢 | -| ------------------------------------------- | ----------------------------------------------- | -| 比權益證明和工作量證明等其他流行機制更具可擴展性,因為它以有限數量的區塊簽署者為基礎。 | 權威證明網路通常具有相對較少數量的驗證節點, 這使得權威證明網路更加中心化。 | -| 權威證明區塊鏈的運作和維護成本極為低廉。 | 成為授權簽署者對於普通人來說通常遙不可及,因為區塊鏈需要具有既定聲譽的實體。 | -| 交易確認速度非常快,可以達到不到 1 秒,因為驗證新區塊只需要有限數量的簽署者 | 惡意簽署者可能進行重組攻擊、雙重消費、審查網路中的交易,這些攻擊雖已得到緩解,但仍然有可能發生 | - -## 延伸閱讀 {#further-reading} - -- [EIP-225](https://eips.ethereum.org/EIPS/eip-225) _Clique 標準_ -- [權威證明研究](https://github.com/cryptoeconomics-study/website/blob/master/docs/sync/2.4-lecture.md)_密碼經濟學_ -- [什麼是權威證明](https://forum.openzeppelin.com/t/proof-of-authority/3577) _OpenZeppelin_ -- [權威證明解釋](https://academy.binance.com/en/articles/proof-of-authority-explained)_幣安_ -- [區塊鏈中的權威證明](https://medium.com/techskill-brew/proof-of-authority-or-poa-in-blockchain-part-11-blockchain-series-be15b3321cba) -- [Clique 解釋](https://medium.com/@Destiner/clique-cross-client-proof-of-authority-algorithm-for-ethereum-8b2a135201d) -- [已棄用的權威證明,Aura 規範](https://openethereum.github.io/Chain-specification) -- [IBFT 2.0,另一個權威證明實作](https://besu.hyperledger.org/stable/private-networks/concepts/poa) - -### 想透過視覺方式學習? {#visual-learner} - -觀看權威證明的直觀解釋: - - - -## 相關主題 {#related-topics} - -- [工作量證明](/developers/docs/consensus-mechanisms/pow/) -- [權益證明](/developers/docs/consensus-mechanisms/pos/) diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/index.md" deleted file mode 100644 index 45905ed8629..00000000000 --- "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/index.md" +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: 工作量證明 (PoW) -description: 解釋工作量證明共識協定及其在以太坊中的作用。 -lang: zh-tw ---- - -在以太坊網路的初期,我們使用一種涉及**[工作量證明 (PoW)](/developers/docs/consensus-mechanisms/pow)** 的共識機制。 這個機制讓以太坊網路的節點對所有在以太坊區塊鏈上紀錄的資訊的狀態達成共識,並可防範某些種類的經濟攻擊。 但是,以太坊於 2022 年停止使用工作量證明,並轉為使用[權益證明](/developers/docs/consensus-mechanisms/pos)。 - - - 現在,業界普遍都已棄用工作量證明。 以太坊亦不在其共識機制內使用工作量證明。 取而代之的,是權益證明。 閱讀更多關於權益證明質押的資訊。 - - -## 基本資訊 {#prerequisites} - -為了更好地理解本頁內容,我們推薦你先閱讀[交易](/developers/docs/transactions/)、[區塊](/developers/docs/blocks/)及[共識機制](/developers/docs/consensus-mechanisms/)。 - -## 什麼是工作量證明 (PoW)? {#what-is-pow} - -中本聰共識採用工作量證明,這是一種機制,一度允許去中心化的以太坊網路對帳戶餘額和交易順序等達成共識(即所有節點都同意)。 這種機制防止使用者「重複支付」他們的代幣,同時確保以太坊區塊鏈極難攻擊或操控。 這些安全特性現在來自權益證明,而不是使用被稱為 [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) 的共識機制。 - -## 工作量證明 (PoW) 與挖礦 {#pow-and-mining} - -工作量證明是一種基礎演算法,它為礦工在工作量證明區塊鏈上進行的工作設定難度和規則。 挖礦即為「工作」本身。 此行為指新增合法區塊於區塊鏈。 這很重要,因為鏈的長度有助於網路跟隨區塊鏈的正確分叉。 達成的「工作」越多,區塊鏈越長,而隨著區塊數量增加,當前網路狀態之確定性也隨之提高。 - -[更多挖礦相關訊息](/developers/docs/consensus-mechanisms/pow/mining/) - -## 以太坊的工作量證明 (PoW) 如何運作? {#how-it-works} - -以太坊交易被處理至區塊中。 在現已棄用的工作量證明以太坊中,每個區塊包含: - -- 區塊難度 -– 例如: 3,324,092,183,262,715 -- mixHash(混合雜湊)– 例如: `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29` -- 隨機數 – 例如:`0xd3ee432b4fb3d26b` - -該區塊資料與工作量證明直接相關。 - -### 工作量證明機制 {#the-work} - -工作量證明協定 Ethash 要求礦工經過激烈的試錯競賽,找出一個區塊的隨機數。 只有具備有效隨機數的區塊才能新增到鏈中。 - -當礦工爭相建立區塊時,會透過數學函式重複放置一個資料集,該資料集只能如曠工那般透過下載並執行整個區塊鏈來獲得。 此資料集用於產生一個低於目標(由區塊難度決定)的 mixHash。 而這樣做的最佳方式是透過試錯。 - -難度決定了雜湊值的目標。 目標越小,有效雜湊值集合就越小。 一旦生成雜湊值,其他礦工和用戶端就能非常輕鬆地驗證。 即使一筆交易發生變化,雜湊值也會變得完全不同,顯示存在詐欺行為。 - -雜湊使​​詐欺行為更容易被發現。 此外,工作量證明過程也大大遏制了對區塊鏈的攻擊。 - -### 工作量證明和安全性 {#security} - -曠工會因為在以太坊主鏈上進行這項工作而得到獎勵。 對部分礦工而言,令他們去建立自己的新鏈的動機微乎其微,因為這會損害主鏈系統。 區塊鏈信賴基於單一狀態,並以此作為真實性來源。 - -工作量證明的目標是延伸區塊鏈。 最長的鏈是最可信的有效鏈,因為產生它所需的計算工作最多。 在以太坊的工作量證明系統中,幾乎不可能建立可擦除交易的新區塊、建立虛假交易或維護第二條鏈。 那是因為,惡意礦工必須總能比其他所有人更快解出區塊隨機數。 - -為持續建立惡意但有效的區塊,惡意礦工必須擁有超過 51% 的網路挖礦算力才能擊敗其他所有人。 如此巨大的「工作量」需要大量昂貴的算力,而消耗的能源甚至可能超過攻擊所得的收益。 - -### 工作量證明的經濟模型 {#economics} - -工作量證明還負責發行新貨幣至系統中,獎勵礦工參與挖礦工作。 - -自[君士坦丁堡升級](/history/#constantinople)以來,成功建立區塊的礦工將獲得兩枚新鑄造的以太幣及部分交易費作為獎勵。 Ommer 區塊也會補償 1.75 枚以太幣。 Ommer 區塊是由一個礦工與另一個建立了規範區塊的曠工幾乎同時建立的有效區塊,規範區塊最終取決於首先在其上建置的鏈。 Ommer 區塊通常是因網路延遲而發生。 - -## 最終確定性 {#finality} - -當一筆交易成為無法改變的區塊的一部分時,它便在以太坊上擁有了「最終確定性」。 - -由於礦工是以去中心化的方式工作,所以有可能同時生成兩個有效的區塊。 這會建立一個暫時性的分叉。 最終,後繼區塊挖掘出來並新增至其中一條鏈,這使得它變得更長,並成為被採用的鏈。 - -但更複雜的是,臨時分叉上被拒絕的交易可能尚未包含在被採用的鏈上。 此代表其交易結果可能被逆轉。 因此,最終確定性是指在認定交易完全不可逆前需要等待的時間。 在先前的工作量證明以太坊下,於特定區塊 `N` 上開采的區塊越多,`N` 中交易成功且不會被逆轉的置信度就越高。 現在,透過權益證明機制,最終確定性成為區塊的顯式屬性,而非機率屬性。 - -## 工作量證明的能源用量 {#energy} - -工作量證明面臨的一個重大非議在於,為保障網路安全所需要的巨大能源消耗量。 為了維持安全性和去中心化,採用工作量證明的以太坊每年都要消耗大量能源。 在過渡到權益證明的前夕,以太坊礦工每年總共消耗約 70 太瓦時的能源(大約與捷克共和國的能源消耗相當 - 資料來自 2022 年 7 月 18 日的 [digiconomist](https://digiconomist.net/))。 - -## 優勢及劣勢 {#pros-and-cons} - -| 優勢 | 劣勢 | -| ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -| 工作量證明為中性。 無須任何以太幣就能參與,而區塊獎勵可讓你從 0 以太幣積累正餘額。 相反,於[權益證明](/developers/docs/consensus-mechanisms/pos/)系統,你需要以太幣才能參與。 | 工作量證明消耗巨量能源,對環境造成傷害。 | -| 工作量證明採用試錯型共識機制,已長年確保比特幣及以太坊之安全和去中心化。 | 若要參與挖礦,需要大筆先期投資,購買專業挖礦設備。 | -| 相較於權益證明,工作量證明更易於實作。 | 因算力需求增加,挖礦工作可能被少數有權勢的挖礦池所霸佔,引發去中心化及安全性風險。 | - -## 相較於權益證明 {#compared-to-pos} - -於高層面來看,權益證明與工作量證明具同一目標:協助去中心化網路達成共識並確保其安全。 但其過程和人員有所不同: - -- 權益證明以質押的以太幣取代算力之重要性。 -- 權益證明以驗證者取代礦工。 驗證者透過質押以太幣來啟動建立新區塊的能力。 -- 驗證者無須相互競爭以建立區塊,相反,他們將由演算法隨機選擇。 -- 最終確定性更加明瞭:於特定檢查點,若三分之二的驗證者同意此區塊狀態,則視其為最終確定。 驗證者須賭上全部質押,所以當他們試圖串通一氣時,將會損失全部質押。 - -[更多詳情關於質押證明(PoS)](/developers/docs/consensus-mechanisms/pos/) - -## 想透過實際視覺學習? {#visual-learner} - - - -## 衍生閱讀 {#further-reading} - -- [多數攻擊](https://en.bitcoin.it/wiki/Majority_attack) -- [決議最終確定性](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) - -### 影片 {#videos} - -- [關於工作量證明協定的技術說明](https://youtu.be/9V1bipPkCTU) - -## 相關主題 {#related-topics} - -- [挖礦](/developers/docs/consensus-mechanisms/pow/mining/) -- [持有量證明(又稱:權益證明)](/developers/docs/consensus-mechanisms/pos/) -- [權威證明](/developers/docs/consensus-mechanisms/poa/) diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/index.md" deleted file mode 100644 index c4618c7ef59..00000000000 --- "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/index.md" +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: 挖礦 -description: 解釋以太坊挖礦的運作方式。 -lang: zh-tw ---- - - -工作量證明不再是以太坊共識機制的基礎,這意味著挖礦已完結。 取而代之的是,以太坊由抵押以太幣的驗證者來保障安全。 你能從現在開始質押以太幣。 閱讀更多關於合併權益證明質押的資訊。 此頁面僅為滿足對歷史的興趣。 - - -## 基本資訊 {#prerequisites} - -為了更好地理解本頁面,建議你先閱讀[交易](/developers/docs/transactions/)、[區塊](/developers/docs/blocks/)及[工作量證明](/developers/docs/consensus-mechanisms/pow/)。 - -## 什麼是以太坊挖礦? {#what-is-ethereum-mining} - -挖礦是在以太坊現已棄用的工作量證明架構中,建立要新增至以太坊區塊鏈的交易區塊的過程。 - -挖礦一詞起源於將加密貨幣與黃金作類比。 黃金或貴金屬很稀有,數位代幣也一樣,而在工作量證明系統中,增加代幣總量的唯一方法是透過挖礦。 在工作量證明以太坊中,挖礦是僅有的代幣發行方式。 然而,與黃金或貴金屬不同,以太坊挖礦透過於區塊鏈中建立、驗證、發布和傳播區塊,也是保護網路安全的方式。 - -以太幣挖礦 = 保護網路安全 - -挖礦是任何工作量證明區塊鏈的命脈。 在過渡到權益證明之前,以太坊礦工 - 即運行軟體的電腦,利用它們的時間和算力來處理交易並產出區塊。 - -## 為何需要礦工? {#why-do-miners-exist} - -在以太坊這樣的去中心化機制中,我們須確保所有參與者同意統一的交易順序。 礦工透過解決計算難題來產出區塊,保護網路免受攻擊,幫助實現這個目標。 - -[有關工作量證明的更多資訊](/developers/docs/consensus-mechanisms/pow/) - -以前任何人都能使用自己的電腦在以太坊網路上挖礦。 然而,並非每個人都能透過挖以太幣 (ETH) 而獲利。 在大多數情況下,礦工必須購買專用電腦硬體,並要使用廉價能源。 普通電腦不太可能獲得足夠的區塊獎勵來支付相關挖礦成本。 - -### 挖礦成本 {#cost-of-mining} - -- 建置及維護挖礦設備所需硬體的潛在成本 -- 為挖礦設備供電的電力成本 -- 如果你在礦池中挖礦,這些礦池通常會對礦池產生的每個區塊收取固定百分比的費用 -- 支援挖礦設備的潛在設備成本(通風、能源監控和電力拉線等等) - -為深入了解挖礦收益,推薦使用挖礦計算機,例如 [Etherscan](https://etherscan.io/ether-mining-calculator) 提供的挖礦計算機。 - -## 以太坊交易是如何挖掘的 {#how-ethereum-transactions-were-mined} - -以下概述如何在以太坊工作量證明中挖掘交易。 可以在[此處](/developers/docs/consensus-mechanisms/pos/#transaction-execution-ethereum-pos)找到以太坊權益證明下該過程的類比描述。 - -1. 使用者編寫[交易](/developers/docs/transactions/)請求,並用某個[帳戶](/developers/docs/accounts/)之私密金錀簽署此交易請求。 -2. 使用者從某個[節點](/developers/docs/nodes-and-clients/)廣播交易請求至全體以太坊網路。 -3. 當接收到新交易請求時,以太坊網路中的每個節點新增該請求至其本機記憶體池,這是他們已在區塊中收到但尚未提交至區塊鏈的所有交易請求的清單。 -4. 一定時間後,挖礦節點匯總數十或數百筆交易請求到一個潛在的[區塊](/developers/docs/blocks/),其通常藉由某一方法,在區塊燃料限制範圍內賺取最大化[交易費](/developers/docs/gas/)。 挖礦節點接著: - 1. 驗證每個交易請求的有效性(即,沒人試圖從還沒有為其產生簽名的帳戶轉出以太幣,請求沒有格式錯誤,等等),然後執行請求程式碼,更改其本機以太坊虛擬機副本的狀態。 對於每個傳送到其帳戶的此類交易請求,礦工將取得交易費作為獎勵。 - 2. 一旦區塊中的所有交易請求都已在本機以太坊虛擬機副本上驗證並執行,為潛在區塊產生工作量證明「合法性證書」的過程便會開始。 -5. 最終,礦工將完成區塊證書的產生,該區塊中包括我們的特定交易請求。 接著礦工廣播此完成的區塊,其中包括上述證書和宣稱的新以太坊虛擬機狀態的校驗和。 -6. 其他節點接收到此新區塊。 它們會驗證證書,自行執行區塊中的所有交易(包括最初由你的使用者廣播的交易),並驗證在執行所有交易後,其新的以太坊虛擬機狀態之校驗和是否與曠工區塊所宣稱的狀態之校驗和相符。 僅當此時,這些節點才會附加此區塊於其區塊鏈的尾部,並接受新的以太坊虛擬機狀態作為規範化狀態。 -7. 各節點從其本機未履行之交易請求記憶體池中移除新區塊中的所有交易。 -8. 加入網路的新節點依序下載所有區塊,包括包含我們感興趣的交易的區塊。 他們會初始化一個本機以太坊虛擬機副本(始於空白狀態的以太坊虛擬機),接著開始執行其本機以太坊虛擬機副本之上每個區塊中的每筆交易,驗證期間每個區塊的狀態校驗和。 - -每筆交易只被挖掘一次(包含在新區塊中並首次傳播),但在推進規範化以太坊虛擬機狀態的過程中會被每個參與者執行並驗證。 這強調了區塊鏈的中心信念之一:**不信任,而是驗證**。 - -## Ommer(叔)區塊 {#ommer-blocks} - -基於工作量證明的區塊挖掘具有概率性,這意味著有時由於網路延遲,會同時發布兩個有效區塊。 在這種情況下,協定必須確定最長(因此也是最「有效」)的鏈,同時透過針對已提交但未被包含的有效區塊給予部分獎勵,來確保對曠工的公平性。 這促使網路進一步去中心化,因為小規模礦工可能面臨更大的延遲,但仍然可以透過 [Ommer](/glossary/#ommer) 區塊獎勵獲得回報。 - -對於父區塊的兄弟姐妹區塊來說,「ommer/兄弟姐妹」一詞是首選的不分性別的詞,但有時也被稱為「uncle/叔」塊。 **自以太坊過渡至權益證明以來,就沒有繼續挖掘 Ommer 區塊了**,因為現在每個時隙只會選出一名提交者。 你能透過查看已挖掘 Ommer 區塊的[歷史圖表](https://ycharts.com/indicators/ethereum_uncle_rate)來了解這項變更。 - -## 視覺範例 {#a-visual-demo} - -觀看影片,Austin 會帶你了解挖礦與工作量證明區塊鏈。 - - - -## 挖礦演算法 {#mining-algorithm} - -以太坊主網只使用過一種挖礦演算法 -[「Ethash」](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/)。 Ethash 是原始研發演算法(稱為[「Dagger-Hashimoto」](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/))的後繼者。 - -[更多關於挖礦演算法的資訊](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/)。 - -## 相關主題 {#related-topics} - -- [燃料](/developers/docs/gas/) -- [以太坊虛擬機器 (EVM)](/developers/docs/evm/) -- [工作量證明](/developers/docs/consensus-mechanisms/pow/) diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md" deleted file mode 100644 index 44aa64f7ad6..00000000000 --- "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md" +++ /dev/null @@ -1,334 +0,0 @@ ---- -title: Dagger-Hashimoto -description: Dagger-Hashimoto 演算法詳細介紹。 -lang: zh-tw ---- - -Dagger-Hashimoto 是以太坊挖礦演算法的原始研究實作和規範。 Dagger-Hashimoto 已被 [Ethash](#ethash) 取代。 在 2022 年 9 月 15 日部署的[合併](/roadmap/merge/)後,挖礦已徹底關閉。 此後,以太坊改用[權益證明](/developers/docs/consensus-mechanisms/pos)機制來保障安全。 本頁面展示歷史相關內容,其中的資訊與合併後的以太坊不再相關。 - -## 前置要求 {#prerequisites} - -為了更好地理解本頁面內容,建議提前閱讀[工作量證明共識](/developers/docs/consensus-mechanisms/pow)、[挖礦](/developers/docs/consensus-mechanisms/pow/mining)和[挖礦演算法](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms)。 - -## Dagger-Hashimoto {#dagger-hashimoto} - -Dagger-Hashimoto 旨在實現兩個目標: - -1. **專用積體電路抗性 **:為演算法打造專用硬體的益處應盡可能地小 -2. **輕量用戶端可驗證性**:區塊應能被輕量用戶端高效驗證。 - -在進一步修改後,我們還要具體說明如何在必要時實現第三個目標,但要以增加複雜性為代價: - -**完整鏈儲存**:挖礦需要儲存完整的區塊鏈狀態(由於以太坊狀態樹的結構不規則,我們預計將有可能進行一些修剪,特別是一些經常用到的合約,但我們希望盡量減少這種情況)。 - -## 有向無環圖的產生 {#dag-generation} - -以下演算法程式碼將以 Python 定義。 首先,我們定義了 `encode_int`,用於將指定精確度的無符號整數封送為字串。 同時也定義了它的逆函式: - -```python -NUM_BITS = 512 - -def encode_int(x): - "Encode an integer x as a string of 64 characters using a big-endian scheme" - o = '' - for _ in range(NUM_BITS / 8): - o = chr(x % 256) + o - x //= 256 - return o - -def decode_int(s): - "Unencode an integer x from a string using a big-endian scheme" - x = 0 - for c in s: - x *= 256 - x += ord(c) - return x -``` - -接下來,我們假設 `sha3` 是一個需要輸入整數,然後輸出整數的函式,而 `dbl_sha3` 是一個 double-sha3 函式;如果將此引用程式碼轉換為實作,使用以下程式碼: - -```python -from pyethereum import utils -def sha3(x): - if isinstance(x, (int, long)): - x = encode_int(x) - return decode_int(utils.sha3(x)) - -def dbl_sha3(x): - if isinstance(x, (int, long)): - x = encode_int(x) - return decode_int(utils.sha3(utils.sha3(x))) -``` - -### 參數 {#parameters} - -演算法使用的參數如下: - -```python -SAFE_PRIME_512 = 2**512 - 38117 # Largest Safe Prime less than 2**512 - -params = { - "n": 4000055296 * 8 // NUM_BITS, # Size of the dataset (4 Gigabytes); MUST BE MULTIPLE OF 65536 - "n_inc": 65536, # Increment in value of n per period; MUST BE MULTIPLE OF 65536 - # with epochtime=20000 gives 882 MB growth per year - "cache_size": 2500, # Size of the light client's cache (can be chosen by light - # client; not part of the algo spec) - "diff": 2**14, # Difficulty (adjusted during block evaluation) - "epochtime": 100000, # Length of an epoch in blocks (how often the dataset is updated) - "k": 1, # Number of parents of a node - "w": w, # Used for modular exponentiation hashing - "accesses": 200, # Number of dataset accesses during hashimoto - "P": SAFE_PRIME_512 # Safe Prime for hashing and random number generation -} -``` - -`P` 在這種情況下為選定的素數,使得 `log₂(P)` 僅略小於 512,對應於我們用來表示數字的 512 位元。 請注意,實際上只需要儲存有向無環圖的後半部分,因此,實際隨機存取記憶體需求最初為 1 GB,且每年增長 441 MB。 - -### Dagger 建圖 {#dagger-graph-building} - -Dagger 建圖基礎單元的定義如下: - -```python -def produce_dag(params, seed, length): - P = params["P"] - picker = init = pow(sha3(seed), params["w"], P) - o = [init] - for i in range(1, length): - x = picker = (picker * init) % P - for _ in range(params["k"]): - x ^= o[x % i] - o.append(pow(x, params["w"], P)) - return o -``` - -基本上,建圖從單一節點 `sha3(seed)` 開始,然後根據隨機的先前節點按順序添加到其他節點上。 建立一個新節點後,計算種子的模幂,以隨機選擇一些小於 `i` 的索引(使用上述 `x % i`),並使用這些索引上的節點值進行計算,以產生新的 `x` 值,隨後該值被提供給一個較小的工作量證明函式(基於 XOR),最終產生索引 `i` 上的圖形值。 這種特殊設計背後的基本原理是,強制依序存取有向無環圖;如果目前值未知,則無法確定要存取的下一個有向無環圖的值。 最後,模冪運算會進一步對結果進行雜湊。 - -這種演算法依賴於數字理論的若干結果。 討論情況見下文附錄。 - -## 輕量用戶端評估 {#light-client-evaluation} - -上述構圖旨在實現只計算少量節點的子樹,並且僅需少量的輔助記憶體,便完成圖中每個節點的重構。 請注意,當 k=1 時,子樹只是一個上升到有向無環圖第一個元素的值鏈。 - -輕量用戶端中,有向無環圖的計算函式如下: - -```python -def quick_calc(params, seed, p): - w, P = params["w"], params["P"] - cache = {} - - def quick_calc_cached(p): - if p in cache: - pass - elif p == 0: - cache[p] = pow(sha3(seed), w, P) - else: - x = pow(sha3(seed), (p + 1) * w, P) - for _ in range(params["k"]): - x ^= quick_calc_cached(x % p) - cache[p] = pow(x, w, P) - return cache[p] - - return quick_calc_cached(p) -``` - -本質上,它只是對上述演算法的重寫,刪除了計算整個有向無環圖值的循環,並用遞歸呼叫或快取查找取代了早期的節點查找。 請注意,對於 `k=1` 的情況,快取是不必要的,但進一步的最佳化實際上預先計算了有向無環圖的前幾千個值,並將其作為靜態快取進行計算;有關程式碼實作,請參閱附錄。 - -## 有向無環圖的雙倍緩衝 {#double-buffer} - -在全用戶端中,使用了上述公式產生的 2 個有向無環圖的[_雙倍緩衝_](https://wikipedia.org/wiki/Multiple_buffering)。 具體概念是,根據上述參數,每 `epochtime` 個區塊產生一個有向無環圖。 但用戶端使用的並非是最新產生的有向無環圖,而是前一個。 這樣做的好處是,有向無環圖可以隨著時間的推移而被替換掉,無需包含一個步驟,讓礦工必須突然重新計算所有資料。 否則,定期的鏈處理可能會突然暫時放緩,並大幅提高中心化程度。 因此,在重新計算所有資料之前的幾分鐘時間內,存在 51% 攻擊風險。 - -要產生用於計算區塊工作的有向無環圖集,演算法如下: - -```python -def get_prevhash(n): - from pyethereum.blocks import GENESIS_PREVHASH - from pyethereum import chain_manager - if n <= 0: - return hash_to_int(GENESIS_PREVHASH) - else: - prevhash = chain_manager.index.get_block_by_number(n - 1) - return decode_int(prevhash) - -def get_seedset(params, block): - seedset = {} - seedset["back_number"] = block.number - (block.number % params["epochtime"]) - seedset["back_hash"] = get_prevhash(seedset["back_number"]) - seedset["front_number"] = max(seedset["back_number"] - params["epochtime"], 0) - seedset["front_hash"] = get_prevhash(seedset["front_number"]) - return seedset - -def get_dagsize(params, block): - return params["n"] + (block.number // params["epochtime"]) * params["n_inc"] - -def get_daggerset(params, block): - dagsz = get_dagsize(params, block) - seedset = get_seedset(params, block) - if seedset["front_hash"] <= 0: - # No back buffer is possible, just make front buffer - return {"front": {"dag": produce_dag(params, seedset["front_hash"], dagsz), - "block_number": 0}} - else: - return {"front": {"dag": produce_dag(params, seedset["front_hash"], dagsz), - "block_number": seedset["front_number"]}, - "back": {"dag": produce_dag(params, seedset["back_hash"], dagsz), - "block_number": seedset["back_number"]}} -``` - -## Hashimoto {#hashimoto} - -初始 Hashimoto 旨在將區塊鏈用作資料集,執行從區塊鏈中選擇 N 個索引的計算,收集這些索引處的交易,對這些資料執行 XOR,並傳回結果雜湊值。 Thaddeus Dryja 的初始演算法(為了保持一致性,已轉換成 Python)具體如下: - -```python -def orig_hashimoto(prev_hash, merkle_root, list_of_transactions, nonce): - hash_output_A = sha256(prev_hash + merkle_root + nonce) - txid_mix = 0 - for i in range(64): - shifted_A = hash_output_A >> i - transaction = shifted_A % len(list_of_transactions) - txid_mix ^= list_of_transactions[transaction] << i - return txid_mix ^ (nonce << 192) -``` - -遺憾的是,雖然 Hashimoto 被視為隨機存取記憶體密集型演算法,但它依靠的是 256 位元運算,計算開銷非常之大。 不過,Dagger-Hashimoto 在索引其資料集時,僅使用最低有效 64 位元來解決此問題。 - -```python -def hashimoto(dag, dagsize, params, header, nonce): - m = dagsize / 2 - mix = sha3(encode_int(nonce) + header) - for _ in range(params["accesses"]): - mix ^= dag[m + (mix % 2**64) % m] - return dbl_sha3(mix) -``` - -使用雙重 SHA3 可以實現零資料、近乎即時的預驗證,僅驗證是否提供了正確的中間值。 此工作量證明的外層對專用積體電路高度友善且相當薄弱,但它的存在使分散式阻斷服務變得更加困難,因為必須完成少量工作才能產生不會立即被拒絕的區塊。 以下為輕量用戶端版本: - -```python -def quick_hashimoto(seed, dagsize, params, header, nonce): - m = dagsize // 2 - mix = sha3(nonce + header) - for _ in range(params["accesses"]): - mix ^= quick_calc(params, seed, m + (mix % 2**64) % m) - return dbl_sha3(mix) -``` - -## 挖礦與驗證 {#mining-and-verifying} - -現在,將它們全部整合到挖礦演算法中: - -```python -def mine(daggerset, params, block): - from random import randint - nonce = randint(0, 2**64) - while 1: - result = hashimoto(daggerset, get_dagsize(params, block), - params, decode_int(block.prevhash), nonce) - if result * params["diff"] < 2**256: - break - nonce += 1 - if nonce >= 2**64: - nonce = 0 - return nonce -``` - -以下為驗證演算法: - -```python -def verify(daggerset, params, block, nonce): - result = hashimoto(daggerset, get_dagsize(params, block), - params, decode_int(block.prevhash), nonce) - return result * params["diff"] < 2**256 -``` - -輕量用戶端的友善驗證: - -```python -def light_verify(params, header, nonce): - seedset = get_seedset(params, block) - result = quick_hashimoto(seedset["front_hash"], get_dagsize(params, block), - params, decode_int(block.prevhash), nonce) - return result * params["diff"] < 2**256 -``` - -另外,請注意 Dagger-Hashimoto 對區塊頭有額外的要求: - -- 為了使雙層驗證起效,區塊頭必須同時具有隨機數和中間值 Pre-sha3 -- 區塊頭必須在某處儲存目前種子集的 sha3 - -## 衍生閱讀 {#further-reading} - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ - -## 附錄 {#appendix} - -如前所述,用於產生有向無環圖的隨機數產生依賴於數論的一些結果。 Lehmer 隨機數產生程式是 `picker` 變數的基礎,因此我們首先確保它具有很寬的週期。 其次,只要一開始 `x ∈ [2,P-2]`,我們就能證明 `pow(x,3,P)` 不會將 `x` 對應到 `1` 或 `P-1`。 最後,我們證明 `pow(x,3,P)` 在被視為雜湊函式時具有較低的衝突率。 - -### Lehmer 隨機數產生程式 {#lehmer-random-number} - -雖然 `produce_dag` 函式不需要產生無偏隨機數,但潛在的威脅是 `seed**i % P` 只取少數幾個值。 這可以為礦工識別模式提供優勢。 - -為了避免這種情況,可採用數論結果。 [_安全素數_](https://en.wikipedia.org/wiki/Safe_prime)定義為素數 `P`,使得 `(P-1)/2` 也是素數。 成員 `x` 的_階次_([倍乘群](https://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n)的 `ℤ/nℤ`)定義為最小 `m`,使得
xᵐ mod P ≡ 1
-根據這些定義,我們得出: - -> 觀察 1. 令 `x` 成為倍乘群 `ℤ/Pℤ` 的成員,以獲得安全素數 `P`。 如果 `x mod P ≠ 1 mod P` 且 `x mod P ≠ P-1 mod P`,那麼 `x` 的階次為 ` P-1` 或 `(P-1)/2`。 - -_ 證明 _. 由於 `P` 是安全素數,那麼根據 \[拉格朗日定理\]\[lagrange\],我們得到 `x` 的階次為 `1`、`2`、`(P-1)/2` 或 `P-1`。 - -`x` 的階次不能是 `1`,因為根據費馬小定理,我們得到: - -
xP-1 mod P ≡ 1
- -因此,`x` 必須是 `ℤ/nℤ` 的唯一乘法單位。 由於我們假設 `x ≠ 1`,所以這是不可能的。 - -除非 `x = P-1`,否則 `x` 的階次不能是 `2`,因為這將違反 `P` 是素數的事實。 - -從上述命題中,我們可以知道,迭代 `(picker * init) % P` 的循環長度至少為 `(P-1)/2`。 這是因為我們選擇了 `P` 為約等於 2 的更高次冪的安全素數,且 `init` 處於 `[2,2**256+1]` 區間內。 考慮到 `P` 的大小,我們不應該期望模冪運算會出現循環。 - -在分配有向無環圖中的第一個單元時(變數標籤為 `init`),我們會計算 `pow(sha3(seed) + 2, 3, P)`。 初看起來,這並不能保證結果既不是 `1` 也不是 `P-1`。 然而,既然 `P-1` 是一個安全素數,我們也提供以下額外保證,這是觀察 1 的必然結果: - -> 觀察 2. 令 `x` 成為乘法組 `ℤ/Pℤ` 的一員,以獲得安全素數 `P`,並令 `w` 成為自然數。 如果 `x mod P ≠ 1 mod P`、`x mod P ≠ P-1 mod P`,且 `w mod P ≠ P-1 mod P`、`w mod P ≠ 0 mod P`,則 `xʷ mod P ≠ 1 mod P` 且 `xʷ mod P ≠ P-1 mod P` - -### 模冪運算用作雜湊函式 {#modular-exponentiation} - -對於特定的 `P` 值和 `w` 值,函式 `pow (x, w, P)` 可能存在許多衝突。 例如,`pow (x,9,19)` 的值只能接受 `{1,18}`。 - -鑑於 `P` 為素數,可以使用以下結果,選擇一個用於模冪運算雜湊函式的適當 `w` 值: - -> 觀察 3. 令 `P` 為素數;當且僅當 `ℤ/Pℤ` 中的所有 `a` 和 `b` 都滿足以下條件時,`w` 和 `P-1` 才能為互素。 -> ->
-> 當且僅當 `a mod P ≡ b mod P` 時,`aʷ mod P ≡ bʷ mod P` ->
- -因此,鑑於 `P` 為素數,且 `w` 與 `P-1` 互素,我們得到 `|{pow (x, w, P) : x ∈ ℤ}| = P`,表示雜湊函式具有盡可能小的衝突率。 - -在特殊情況下,`P` 是我們選擇的安全素數,那麼 `P-1` 僅有係數 1、2、`(P-1)/2` 和 `P-1`。 由於 `P` > 7,我們知道 3 與 `P-1` 互素,因此 `w=3` 滿足上述命題。 - -## 更有效的快取評估演算法 {#cache-based-evaluation} - -```python -def quick_calc(params, seed, p): - cache = produce_dag(params, seed, params["cache_size"]) - return quick_calc_cached(cache, params, p) - -def quick_calc_cached(cache, params, p): - P = params["P"] - if p < len(cache): - return cache[p] - else: - x = pow(cache[0], p + 1, P) - for _ in range(params["k"]): - x ^= quick_calc_cached(cache, params, x % p) - return pow(x, params["w"], P) - -def quick_hashimoto(seed, dagsize, params, header, nonce): - cache = produce_dag(params, seed, params["cache_size"]) - return quick_hashimoto_cached(cache, dagsize, params, header, nonce) - -def quick_hashimoto_cached(cache, dagsize, params, header, nonce): - m = dagsize // 2 - mask = 2**64 - 1 - mix = sha3(encode_int(nonce) + header) - for _ in range(params["accesses"]): - mix ^= quick_calc_cached(cache, params, m + (mix & mask) % m) - return dbl_sha3(mix) -``` diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md" deleted file mode 100644 index c9f90a011ff..00000000000 --- "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md" +++ /dev/null @@ -1,1014 +0,0 @@ ---- -title: Ethash -description: Ethash 演算法詳細介紹。 -lang: zh-tw ---- - - - Ethash 是以太坊的工作量證明挖礦演算法。 工作量證明現在已經被**完全關閉**,取而代之的是,以太坊現在使用權益證明來確保安全。 閱讀更多關於合併 權益證明質押的資訊。 此頁面僅為滿足對歷史的興趣! - - -[Ethash](https://github.com/ethereum/wiki/wiki/Ethash) 是 [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) 演算法的修改版。 Ethash 工作量證明是[記憶體密集型](https://wikipedia.org/wiki/Memory-hard_function)演算法,這被認為使演算法具有專用積體電路抗性。 Ethash 專用積體電路最終被開發出來,但圖形處理單元挖礦仍然是一個可行的選擇,直至工作量證明被關閉。 Ethash 仍在其他非以太坊工作量證明網路上用於挖掘其他代幣。 - -## Ethash 是如何運作的? {#how-does-ethash-work} - -記憶體密集性是透過工作量證明演算法實現的,需要根據隨機數和區塊頭選擇固定資源子集。 此資源(大小為數 GB)稱為有向無環圖。 有向無環圖每 30000 個區塊更改一次(大約 125 小時的窗口,稱為一個時期(約 5.2 天)),並需要一段時間才能產生。 由於有向無環圖僅依賴區塊高度,因此可以預先生成,但如果沒有,則用戶端需要等到此過程結束後才能生成區塊。 如果用戶端沒有提前預先產生和快取有向無環圖,網路可能會在每個時期過渡時遭遇嚴重的區塊延遲。 請注意,不用產生有向無環圖即可驗證工作量證明,这在本質上允許使用低階中央處理器和小記憶體進行驗證。 - -此演算法所採取的一般路線如下: - -1. 存在一個**種子**,可以透過掃描區塊頭直到該點來為每個區塊計算種子。 -2. 從種子可以計算出 **16 MB 的偽隨機快取**。 由輕量用户端儲存該快取。 -3. 我們可以從快取中產生一個 **1 GB 資料集 **,資料集中每個項目僅依賴快取中的一小部分項目。 由全用户端和礦工儲存該資料集。 該资料集隨著時間的流逝而呈線性增長。 -4. 挖礦需要取得該資料集的隨機片段並將它們雜湊在一起。 可以透過使用快取來重新產生你所需要的資料集中的特定片段,以較少的記憶體進行驗證,這樣你就只需要儲存快取。 - -每隔 30,000 個區塊更新一次大資料集,因此,礦工的絕大部分工作都是讀取資料集,而不是對其進行修改。 - -## 定義 {#definitions} - -我們採用以下定義: - -``` -WORD_BYTES = 4 # bytes in word -DATASET_BYTES_INIT = 2**30 # bytes in dataset at genesis -DATASET_BYTES_GROWTH = 2**23 # dataset growth per epoch -CACHE_BYTES_INIT = 2**24 # bytes in cache at genesis -CACHE_BYTES_GROWTH = 2**17 # cache growth per epoch -CACHE_MULTIPLIER=1024 # Size of the DAG relative to the cache -EPOCH_LENGTH = 30000 # blocks per epoch -MIX_BYTES = 128 # width of mix -HASH_BYTES = 64 # hash length in bytes -DATASET_PARENTS = 256 # number of parents of each dataset element -CACHE_ROUNDS = 3 # number of rounds in cache production -ACCESSES = 64 # number of accesses in hashimoto loop -``` - -### 使用「SHA3」 {#sha3} - -以太坊的開發恰逢 SHA3 標準的製定,標準流程對最終確定的雜湊值演算法的填充做了後期改動,使得以太坊的「sha3_256」和「sha3_512」雜湊值不是標準的 sha3 雜湊值,而是在其他情況下常被稱為「Keccak-256」和「Keccak-512」的變體。 討論請見[此處](https://eips.ethereum.org/EIPS/eip-1803)、[此處](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use),或[此處](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057)。 - -請記住這一點,因為下面的演算法描述中提到了「sha3」雜湊值。 - -## 參數 {#parameters} - -Ethash 快取和資料集的參數取決於區塊號。 快取大小和資料集大小都呈線性增長;然而,我們總是取低於線性增長閾值的最大素數,以降低意外的規律導致循環行為的風險。 - -```python -def get_cache_size(block_number): - sz = CACHE_BYTES_INIT + CACHE_BYTES_GROWTH * (block_number // EPOCH_LENGTH) - sz -= HASH_BYTES - while not isprime(sz / HASH_BYTES): - sz -= 2 * HASH_BYTES - return sz - -def get_full_size(block_number): - sz = DATASET_BYTES_INIT + DATASET_BYTES_GROWTH * (block_number // EPOCH_LENGTH) - sz -= MIX_BYTES - while not isprime(sz / MIX_BYTES): - sz -= 2 * MIX_BYTES - return sz -``` - -附錄中提供了資料集和快取大小值表。 - -## 快取產生 {#cache-generation} - -現在,我們來指定產生快取的函式: - -```python -def mkcache(cache_size, seed): - n = cache_size // HASH_BYTES - - # Sequentially produce the initial dataset - o = [sha3_512(seed)] - for i in range(1, n): - o.append(sha3_512(o[-1])) - - # Use a low-round version of randmemohash - for _ in range(CACHE_ROUNDS): - for i in range(n): - v = o[i][0] % n - o[i] = sha3_512(map(xor, o[(i-1+n) % n], o[v])) - - return o -``` - -在快取生成過程中,先依序填入32 MB 存儲體,然後從[_嚴格存儲體密集型雜湊函式_ (2014)](http://www.hashcash.org/papers/memohash.pdf) 執行兩次 Sergio Demian Lerner 的 _RandMemoHash_ 演算法。 輸出一組 524288 個 64 字節位元組值。 - -## 資料匯總函式 {#date-aggregation-function} - -我們所用演算法的靈感來自 [FNV 雜湊](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function),在部分情況下,這種演算法可用作邏輯 XOR 的非相干替代。 請注意,我們使用全 32 位元輸入乘以素數,與之相對地,FNV-1 規範以單字節位元組(8 位元組)依序乘以素數。 - -```python -FNV_PRIME = 0x01000193 - -def fnv(v1, v2): - return ((v1 * FNV_PRIME) ^ v2) % 2**32 -``` - -請注意,即使黃皮書指出 fnv 為 v1\*(FNV_PRIME ^ v2),所有目前實作始終採用上述定義。 - -## 完整資料集計算 {#full-dataset-calculation} - -整個 1 GB 資料集中的每個 64 字節位元組項目的計算方法如下: - -```python -def calc_dataset_item(cache, i): - n = len(cache) - r = HASH_BYTES // WORD_BYTES - # initialize the mix - mix = copy.copy(cache[i % n]) - mix[0] ^= i - mix = sha3_512(mix) - # fnv it with a lot of random cache nodes based on i - for j in range(DATASET_PARENTS): - cache_index = fnv(i ^ j, mix[j % r]) - mix = map(fnv, mix, cache[cache_index % n]) - return sha3_512(mix) -``` - -基本上,我們會將 256 個偽隨機選取的快取節點的資料合併起來求雜湊值,以計算資料集節點。 然後產生整個資料集: - -```python -def calc_dataset(full_size, cache): - return [calc_dataset_item(cache, i) for i in range(full_size // HASH_BYTES)] -``` - -## 主循環 {#main-loop} - -現在,我們指定了類似「hashimoto」的主要循環。在此循環中,我們匯總了整個資料集的資料,以產生特定區塊頭和隨機數的最終值。 在下面的程式碼中,`header` 代表一個_被截斷_區塊頭的遞歸長度前綴表示的 SHA3-256 _雜湊值_。被截斷是指區塊頭排除了 **mixHash** 和 **nonce** 欄位。 `nonce` 是八字節位元組的 64 位元無符號整數,採用高位元組在前順序。 因此,`nonce [::-1]` 是上述值的八位元組高位元組在前順序表示: - -```python -def hashimoto(header, nonce, full_size, dataset_lookup): - n = full_size / HASH_BYTES - w = MIX_BYTES // WORD_BYTES - mixhashes = MIX_BYTES / HASH_BYTES - # combine header+nonce into a 64 byte seed - s = sha3_512(header + nonce[::-1]) - # start the mix with replicated s - mix = [] - for _ in range(MIX_BYTES / HASH_BYTES): - mix.extend(s) - # mix in random dataset nodes - for i in range(ACCESSES): - p = fnv(i ^ s[0], mix[i % w]) % (n // mixhashes) * mixhashes - newdata = [] - for j in range(MIX_BYTES / HASH_BYTES): - newdata.extend(dataset_lookup(p + j)) - mix = map(fnv, mix, newdata) - # compress mix - cmix = [] - for i in range(0, len(mix), 4): - cmix.append(fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3])) - return { - "mix digest": serialize_hash(cmix), - "result": serialize_hash(sha3_256(s+cmix)) - } - -def hashimoto_light(full_size, cache, header, nonce): - return hashimoto(header, nonce, full_size, lambda x: calc_dataset_item(cache, x)) - -def hashimoto_full(full_size, dataset, header, nonce): - return hashimoto(header, nonce, full_size, lambda x: dataset[x]) -``` - -基本上,我們保持著一個寬 128 字節位元組的「mix」,多次按順序從整個資料集重複取得 128 字節位元組,並使用 `fnv` 函式將其與 mix 合併。 使用 128 字節位元組的順序存取,以便每輪演算法總是能從隨機存取記憶體獲取完整的頁面,從而盡量減少轉譯後備緩衝區的失誤,而專用積體電路在理論上能夠避免這些失誤。 - -如果此演算法的輸出低於所需目標,即證明隨機數是有效的。 請注意,在最後額外套用 `sha3_256` 將確保中間隨機數的存在,提供此證據可以證明至少做了少量工作;而且此快速外部工作量證明驗證可以用於反分散式阻斷服務。 它還能提供統計保證,確保結果是一個無偏的 256 位元數。 - -## 挖礦 {#mining} - -挖礦演算法定義如下: - -```python -def mine(full_size, dataset, header, difficulty): - # zero-pad target to compare with hash on the same digit - target = zpad(encode_int(2**256 // difficulty), 64)[::-1] - from random import randint - nonce = randint(0, 2**64) - while hashimoto_full(full_size, dataset, header, nonce) > target: - nonce = (nonce + 1) % 2**64 - return nonce -``` - -## 定義種子雜湊值 {#seed-hash} - -為了計算用於在給定區塊上挖礦的種子雜湊值,我們使用以下演算法: - -```python - def get_seedhash(block): - s = '\x00' * 32 - for i in range(block.number // EPOCH_LENGTH): - s = serialize_hash(sha3_256(s)) - return s -``` - -請注意,為了順利挖礦和驗證,我們建議在單獨執行緒中預先計算未來的種子雜湊值和資料集。 - -## 衍生閱讀 {#further-reading} - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ - -## 附錄 {#appendix} - -如果你有興趣將上述 python 規範作為程式碼運行,應在前面添加以下程式碼。 - -```python -import sha3, copy - -# Assumes little endian bit ordering (same as Intel architectures) -def decode_int(s): - return int(s[::-1].encode('hex'), 16) if s else 0 - -def encode_int(s): - a = "%x" % s - return '' if s == 0 else ('0' * (len(a) % 2) + a).decode('hex')[::-1] - -def zpad(s, length): - return s + '\x00' * max(0, length - len(s)) - -def serialize_hash(h): - return ''.join([zpad(encode_int(x), 4) for x in h]) - -def deserialize_hash(h): - return [decode_int(h[i:i+WORD_BYTES]) for i in range(0, len(h), WORD_BYTES)] - -def hash_words(h, sz, x): - if isinstance(x, list): - x = serialize_hash(x) - y = h(x) - return deserialize_hash(y) - -def serialize_cache(ds): - return ''.join([serialize_hash(h) for h in ds]) - -serialize_dataset = serialize_cache - -# sha3 hash function, outputs 64 bytes -def sha3_512(x): - return hash_words(lambda v: sha3.sha3_512(v).digest(), 64, x) - -def sha3_256(x): - return hash_words(lambda v: sha3.sha3_256(v).digest(), 32, x) - -def xor(a, b): - return a ^ b - -def isprime(x): - for i in range(2, int(x**0.5)): - if x % i == 0: - return False - return True -``` - -### 資料大小 {#data-sizes} - -以下查找表提供了約 2048 個製錶格式的資料大小和快取大小時期。 - -```python -def get_datasize(block_number): - return data_sizes[block_number // EPOCH_LENGTH] - -def get_cachesize(block_number): - return cache_sizes[block_number // EPOCH_LENGTH] - -data_sizes = [ -1073739904, 1082130304, 1090514816, 1098906752, 1107293056, -1115684224, 1124070016, 1132461952, 1140849536, 1149232768, -1157627776, 1166013824, 1174404736, 1182786944, 1191180416, -1199568512, 1207958912, 1216345216, 1224732032, 1233124736, -1241513344, 1249902464, 1258290304, 1266673792, 1275067264, -1283453312, 1291844992, 1300234112, 1308619904, 1317010048, -1325397376, 1333787776, 1342176128, 1350561664, 1358954368, -1367339392, 1375731584, 1384118144, 1392507008, 1400897408, -1409284736, 1417673344, 1426062464, 1434451072, 1442839168, -1451229056, 1459615616, 1468006016, 1476394112, 1484782976, -1493171584, 1501559168, 1509948032, 1518337664, 1526726528, -1535114624, 1543503488, 1551892096, 1560278656, 1568669056, -1577056384, 1585446272, 1593831296, 1602219392, 1610610304, -1619000192, 1627386752, 1635773824, 1644164224, 1652555648, -1660943488, 1669332608, 1677721216, 1686109312, 1694497664, -1702886272, 1711274624, 1719661184, 1728047744, 1736434816, -1744829056, 1753218944, 1761606272, 1769995904, 1778382464, -1786772864, 1795157888, 1803550592, 1811937664, 1820327552, -1828711552, 1837102976, 1845488768, 1853879936, 1862269312, -1870656896, 1879048064, 1887431552, 1895825024, 1904212096, -1912601216, 1920988544, 1929379456, 1937765504, 1946156672, -1954543232, 1962932096, 1971321728, 1979707264, 1988093056, -1996487552, 2004874624, 2013262208, 2021653888, 2030039936, -2038430848, 2046819968, 2055208576, 2063596672, 2071981952, -2080373632, 2088762752, 2097149056, 2105539712, 2113928576, -2122315136, 2130700672, 2139092608, 2147483264, 2155872128, -2164257664, 2172642176, 2181035392, 2189426048, 2197814912, -2206203008, 2214587264, 2222979712, 2231367808, 2239758208, -2248145024, 2256527744, 2264922752, 2273312128, 2281701248, -2290086272, 2298476672, 2306867072, 2315251072, 2323639168, -2332032128, 2340420224, 2348808064, 2357196416, 2365580416, -2373966976, 2382363008, 2390748544, 2399139968, 2407530368, -2415918976, 2424307328, 2432695424, 2441084288, 2449472384, -2457861248, 2466247808, 2474637184, 2483026816, 2491414144, -2499803776, 2508191872, 2516582272, 2524970368, 2533359232, -2541743488, 2550134144, 2558525056, 2566913408, 2575301504, -2583686528, 2592073856, 2600467328, 2608856192, 2617240448, -2625631616, 2634022016, 2642407552, 2650796416, 2659188352, -2667574912, 2675965312, 2684352896, 2692738688, 2701130624, -2709518464, 2717907328, 2726293376, 2734685056, 2743073152, -2751462016, 2759851648, 2768232832, 2776625536, 2785017728, -2793401984, 2801794432, 2810182016, 2818571648, 2826959488, -2835349376, 2843734144, 2852121472, 2860514432, 2868900992, -2877286784, 2885676928, 2894069632, 2902451584, 2910843008, -2919234688, 2927622784, 2936011648, 2944400768, 2952789376, -2961177728, 2969565568, 2977951616, 2986338944, 2994731392, -3003120256, 3011508352, 3019895936, 3028287104, 3036675968, -3045063808, 3053452928, 3061837696, 3070228352, 3078615424, -3087003776, 3095394944, 3103782272, 3112173184, 3120562048, -3128944768, 3137339264, 3145725056, 3154109312, 3162505088, -3170893184, 3179280256, 3187669376, 3196056704, 3204445568, -3212836736, 3221224064, 3229612928, 3238002304, 3246391168, -3254778496, 3263165824, 3271556224, 3279944576, 3288332416, -3296719232, 3305110912, 3313500032, 3321887104, 3330273152, -3338658944, 3347053184, 3355440512, 3363827072, 3372220288, -3380608384, 3388997504, 3397384576, 3405774208, 3414163072, -3422551936, 3430937984, 3439328384, 3447714176, 3456104576, -3464493952, 3472883584, 3481268864, 3489655168, 3498048896, -3506434432, 3514826368, 3523213952, 3531603584, 3539987072, -3548380288, 3556763264, 3565157248, 3573545344, 3581934464, -3590324096, 3598712704, 3607098752, 3615488384, 3623877248, -3632265856, 3640646528, 3649043584, 3657430144, 3665821568, -3674207872, 3682597504, 3690984832, 3699367808, 3707764352, -3716152448, 3724541056, 3732925568, 3741318016, 3749706368, -3758091136, 3766481536, 3774872704, 3783260032, 3791650432, -3800036224, 3808427648, 3816815488, 3825204608, 3833592704, -3841981568, 3850370432, 3858755968, 3867147904, 3875536256, -3883920512, 3892313728, 3900702592, 3909087872, 3917478784, -3925868416, 3934256512, 3942645376, 3951032192, 3959422336, -3967809152, 3976200064, 3984588416, 3992974976, 4001363584, -4009751168, 4018141312, 4026530432, 4034911616, 4043308928, -4051695488, 4060084352, 4068472448, 4076862848, 4085249408, -4093640576, 4102028416, 4110413696, 4118805632, 4127194496, -4135583104, 4143971968, 4152360832, 4160746112, 4169135744, -4177525888, 4185912704, 4194303616, 4202691968, 4211076736, -4219463552, 4227855488, 4236246656, 4244633728, 4253022848, -4261412224, 4269799808, 4278184832, 4286578048, 4294962304, -4303349632, 4311743104, 4320130432, 4328521088, 4336909184, -4345295488, 4353687424, 4362073472, 4370458496, 4378852736, -4387238528, 4395630208, 4404019072, 4412407424, 4420790656, -4429182848, 4437571456, 4445962112, 4454344064, 4462738048, -4471119232, 4479516544, 4487904128, 4496289664, 4504682368, -4513068416, 4521459584, 4529846144, 4538232704, 4546619776, -4555010176, 4563402112, 4571790208, 4580174464, 4588567936, -4596957056, 4605344896, 4613734016, 4622119808, 4630511488, -4638898816, 4647287936, 4655675264, 4664065664, 4672451968, -4680842624, 4689231488, 4697620352, 4706007424, 4714397056, -4722786176, 4731173248, 4739562368, 4747951744, 4756340608, -4764727936, 4773114496, 4781504384, 4789894784, 4798283648, -4806667648, 4815059584, 4823449472, 4831835776, 4840226176, -4848612224, 4857003392, 4865391488, 4873780096, 4882169728, -4890557312, 4898946944, 4907333248, 4915722368, 4924110976, -4932499328, 4940889728, 4949276032, 4957666432, 4966054784, -4974438016, 4982831488, 4991221376, 4999607168, 5007998848, -5016386432, 5024763776, 5033164672, 5041544576, 5049941888, -5058329728, 5066717056, 5075107456, 5083494272, 5091883904, -5100273536, 5108662144, 5117048192, 5125436032, 5133827456, -5142215296, 5150605184, 5158993024, 5167382144, 5175769472, -5184157568, 5192543872, 5200936064, 5209324928, 5217711232, -5226102656, 5234490496, 5242877312, 5251263872, 5259654016, -5268040832, 5276434304, 5284819328, 5293209728, 5301598592, -5309986688, 5318374784, 5326764416, 5335151488, 5343542144, -5351929472, 5360319872, 5368706944, 5377096576, 5385484928, -5393871232, 5402263424, 5410650496, 5419040384, 5427426944, -5435816576, 5444205952, 5452594816, 5460981376, 5469367936, -5477760896, 5486148736, 5494536832, 5502925952, 5511315328, -5519703424, 5528089984, 5536481152, 5544869504, 5553256064, -5561645696, 5570032768, 5578423936, 5586811264, 5595193216, -5603585408, 5611972736, 5620366208, 5628750464, 5637143936, -5645528192, 5653921408, 5662310272, 5670694784, 5679082624, -5687474048, 5695864448, 5704251008, 5712641408, 5721030272, -5729416832, 5737806208, 5746194304, 5754583936, 5762969984, -5771358592, 5779748224, 5788137856, 5796527488, 5804911232, -5813300608, 5821692544, 5830082176, 5838468992, 5846855552, -5855247488, 5863636096, 5872024448, 5880411008, 5888799872, -5897186432, 5905576832, 5913966976, 5922352768, 5930744704, -5939132288, 5947522432, 5955911296, 5964299392, 5972688256, -5981074304, 5989465472, 5997851008, 6006241408, 6014627968, -6023015552, 6031408256, 6039796096, 6048185216, 6056574848, -6064963456, 6073351808, 6081736064, 6090128768, 6098517632, -6106906496, 6115289216, 6123680896, 6132070016, 6140459648, -6148849024, 6157237376, 6165624704, 6174009728, 6182403712, -6190792064, 6199176064, 6207569792, 6215952256, 6224345216, -6232732544, 6241124224, 6249510272, 6257899136, 6266287744, -6274676864, 6283065728, 6291454336, 6299843456, 6308232064, -6316620928, 6325006208, 6333395584, 6341784704, 6350174848, -6358562176, 6366951296, 6375337856, 6383729536, 6392119168, -6400504192, 6408895616, 6417283456, 6425673344, 6434059136, -6442444672, 6450837376, 6459223424, 6467613056, 6476004224, -6484393088, 6492781952, 6501170048, 6509555072, 6517947008, -6526336384, 6534725504, 6543112832, 6551500672, 6559888768, -6568278656, 6576662912, 6585055616, 6593443456, 6601834112, -6610219648, 6618610304, 6626999168, 6635385472, 6643777408, -6652164224, 6660552832, 6668941952, 6677330048, 6685719424, -6694107776, 6702493568, 6710882176, 6719274112, 6727662976, -6736052096, 6744437632, 6752825984, 6761213824, 6769604224, -6777993856, 6786383488, 6794770816, 6803158144, 6811549312, -6819937664, 6828326528, 6836706176, 6845101696, 6853491328, -6861880448, 6870269312, 6878655104, 6887046272, 6895433344, -6903822208, 6912212864, 6920596864, 6928988288, 6937377152, -6945764992, 6954149248, 6962544256, 6970928768, 6979317376, -6987709312, 6996093824, 7004487296, 7012875392, 7021258624, -7029652352, 7038038912, 7046427776, 7054818944, 7063207808, -7071595136, 7079980928, 7088372608, 7096759424, 7105149824, -7113536896, 7121928064, 7130315392, 7138699648, 7147092352, -7155479168, 7163865728, 7172249984, 7180648064, 7189036672, -7197424768, 7205810816, 7214196608, 7222589824, 7230975104, -7239367552, 7247755904, 7256145536, 7264533376, 7272921472, -7281308032, 7289694848, 7298088832, 7306471808, 7314864512, -7323253888, 7331643008, 7340029568, 7348419712, 7356808832, -7365196672, 7373585792, 7381973888, 7390362752, 7398750592, -7407138944, 7415528576, 7423915648, 7432302208, 7440690304, -7449080192, 7457472128, 7465860992, 7474249088, 7482635648, -7491023744, 7499412608, 7507803008, 7516192384, 7524579968, -7532967296, 7541358464, 7549745792, 7558134656, 7566524032, -7574912896, 7583300992, 7591690112, 7600075136, 7608466816, -7616854912, 7625244544, 7633629824, 7642020992, 7650410368, -7658794112, 7667187328, 7675574912, 7683961984, 7692349568, -7700739712, 7709130368, 7717519232, 7725905536, 7734295424, -7742683264, 7751069056, 7759457408, 7767849088, 7776238208, -7784626816, 7793014912, 7801405312, 7809792128, 7818179968, -7826571136, 7834957184, 7843347328, 7851732352, 7860124544, -7868512384, 7876902016, 7885287808, 7893679744, 7902067072, -7910455936, 7918844288, 7927230848, 7935622784, 7944009344, -7952400256, 7960786048, 7969176704, 7977565312, 7985953408, -7994339968, 8002730368, 8011119488, 8019508096, 8027896192, -8036285056, 8044674688, 8053062272, 8061448832, 8069838464, -8078227328, 8086616704, 8095006592, 8103393664, 8111783552, -8120171392, 8128560256, 8136949376, 8145336704, 8153726848, -8162114944, 8170503296, 8178891904, 8187280768, 8195669632, -8204058496, 8212444544, 8220834176, 8229222272, 8237612672, -8246000768, 8254389376, 8262775168, 8271167104, 8279553664, -8287944064, 8296333184, 8304715136, 8313108352, 8321497984, -8329885568, 8338274432, 8346663296, 8355052928, 8363441536, -8371828352, 8380217984, 8388606592, 8396996224, 8405384576, -8413772672, 8422161536, 8430549376, 8438939008, 8447326592, -8455715456, 8464104832, 8472492928, 8480882048, 8489270656, -8497659776, 8506045312, 8514434944, 8522823808, 8531208832, -8539602304, 8547990656, 8556378752, 8564768384, 8573154176, -8581542784, 8589933952, 8598322816, 8606705024, 8615099264, -8623487872, 8631876992, 8640264064, 8648653952, 8657040256, -8665430656, 8673820544, 8682209152, 8690592128, 8698977152, -8707374464, 8715763328, 8724151424, 8732540032, 8740928384, -8749315712, 8757704576, 8766089344, 8774480768, 8782871936, -8791260032, 8799645824, 8808034432, 8816426368, 8824812928, -8833199488, 8841591424, 8849976448, 8858366336, 8866757248, -8875147136, 8883532928, 8891923328, 8900306816, 8908700288, -8917088384, 8925478784, 8933867392, 8942250368, 8950644608, -8959032704, 8967420544, 8975809664, 8984197504, 8992584064, -9000976256, 9009362048, 9017752448, 9026141312, 9034530688, -9042917504, 9051307904, 9059694208, 9068084864, 9076471424, -9084861824, 9093250688, 9101638528, 9110027648, 9118416512, -9126803584, 9135188096, 9143581312, 9151969664, 9160356224, -9168747136, 9177134464, 9185525632, 9193910144, 9202302848, -9210690688, 9219079552, 9227465344, 9235854464, 9244244864, -9252633472, 9261021824, 9269411456, 9277799296, 9286188928, -9294574208, 9302965888, 9311351936, 9319740032, 9328131968, -9336516736, 9344907392, 9353296768, 9361685888, 9370074752, -9378463616, 9386849408, 9395239808, 9403629184, 9412016512, -9420405376, 9428795008, 9437181568, 9445570688, 9453960832, -9462346624, 9470738048, 9479121536, 9487515008, 9495903616, -9504289664, 9512678528, 9521067904, 9529456256, 9537843584, -9546233728, 9554621312, 9563011456, 9571398784, 9579788672, -9588178304, 9596567168, 9604954496, 9613343104, 9621732992, -9630121856, 9638508416, 9646898816, 9655283584, 9663675776, -9672061312, 9680449664, 9688840064, 9697230464, 9705617536, -9714003584, 9722393984, 9730772608, 9739172224, 9747561088, -9755945344, 9764338816, 9772726144, 9781116544, 9789503872, -9797892992, 9806282624, 9814670464, 9823056512, 9831439232, -9839833984, 9848224384, 9856613504, 9865000576, 9873391232, -9881772416, 9890162816, 9898556288, 9906940544, 9915333248, -9923721088, 9932108672, 9940496512, 9948888448, 9957276544, -9965666176, 9974048384, 9982441088, 9990830464, 9999219584, -10007602816, 10015996544, 10024385152, 10032774016, 10041163648, -10049548928, 10057940096, 10066329472, 10074717824, 10083105152, -10091495296, 10099878784, 10108272256, 10116660608, 10125049216, -10133437312, 10141825664, 10150213504, 10158601088, 10166991232, -10175378816, 10183766144, 10192157312, 10200545408, 10208935552, -10217322112, 10225712768, 10234099328, 10242489472, 10250876032, -10259264896, 10267656064, 10276042624, 10284429184, 10292820352, -10301209472, 10309598848, 10317987712, 10326375296, 10334763392, -10343153536, 10351541632, 10359930752, 10368318592, 10376707456, -10385096576, 10393484672, 10401867136, 10410262144, 10418647424, -10427039104, 10435425664, 10443810176, 10452203648, 10460589952, -10468982144, 10477369472, 10485759104, 10494147712, 10502533504, -10510923392, 10519313536, 10527702656, 10536091264, 10544478592, -10552867712, 10561255808, 10569642368, 10578032768, 10586423168, -10594805632, 10603200128, 10611588992, 10619976064, 10628361344, -10636754048, 10645143424, 10653531776, 10661920384, 10670307968, -10678696832, 10687086464, 10695475072, 10703863168, 10712246144, -10720639616, 10729026688, 10737414784, 10745806208, 10754190976, -10762581376, 10770971264, 10779356288, 10787747456, 10796135552, -10804525184, 10812915584, 10821301888, 10829692288, 10838078336, -10846469248, 10854858368, 10863247232, 10871631488, 10880023424, -10888412032, 10896799616, 10905188992, 10913574016, 10921964672, -10930352768, 10938742912, 10947132544, 10955518592, 10963909504, -10972298368, 10980687488, 10989074816, 10997462912, 11005851776, -11014241152, 11022627712, 11031017344, 11039403904, 11047793024, -11056184704, 11064570752, 11072960896, 11081343872, 11089737856, -11098128256, 11106514816, 11114904448, 11123293568, 11131680128, -11140065152, 11148458368, 11156845696, 11165236864, 11173624192, -11182013824, 11190402688, 11198790784, 11207179136, 11215568768, -11223957376, 11232345728, 11240734592, 11249122688, 11257511296, -11265899648, 11274285952, 11282675584, 11291065472, 11299452544, -11307842432, 11316231296, 11324616832, 11333009024, 11341395584, -11349782656, 11358172288, 11366560384, 11374950016, 11383339648, -11391721856, 11400117376, 11408504192, 11416893568, 11425283456, -11433671552, 11442061184, 11450444672, 11458837888, 11467226752, -11475611776, 11484003968, 11492392064, 11500780672, 11509169024, -11517550976, 11525944448, 11534335616, 11542724224, 11551111808, -11559500672, 11567890304, 11576277376, 11584667008, 11593056128, -11601443456, 11609830016, 11618221952, 11626607488, 11634995072, -11643387776, 11651775104, 11660161664, 11668552576, 11676940928, -11685330304, 11693718656, 11702106496, 11710496128, 11718882688, -11727273088, 11735660416, 11744050048, 11752437376, 11760824704, -11769216128, 11777604736, 11785991296, 11794381952, 11802770048, -11811157888, 11819548544, 11827932544, 11836324736, 11844713344, -11853100928, 11861486464, 11869879936, 11878268032, 11886656896, -11895044992, 11903433088, 11911822976, 11920210816, 11928600448, -11936987264, 11945375872, 11953761152, 11962151296, 11970543488, -11978928512, 11987320448, 11995708288, 12004095104, 12012486272, -12020875136, 12029255552, 12037652096, 12046039168, 12054429568, -12062813824, 12071206528, 12079594624, 12087983744, 12096371072, -12104759936, 12113147264, 12121534592, 12129924992, 12138314624, -12146703232, 12155091584, 12163481216, 12171864704, 12180255872, -12188643968, 12197034112, 12205424512, 12213811328, 12222199424, -12230590336, 12238977664, 12247365248, 12255755392, 12264143488, -12272531584, 12280920448, 12289309568, 12297694592, 12306086528, -12314475392, 12322865024, 12331253632, 12339640448, 12348029312, -12356418944, 12364805248, 12373196672, 12381580928, 12389969024, -12398357632, 12406750592, 12415138432, 12423527552, 12431916416, -12440304512, 12448692352, 12457081216, 12465467776, 12473859968, -12482245504, 12490636672, 12499025536, 12507411584, 12515801728, -12524190592, 12532577152, 12540966272, 12549354368, 12557743232, -12566129536, 12574523264, 12582911872, 12591299456, 12599688064, -12608074624, 12616463488, 12624845696, 12633239936, 12641631616, -12650019968, 12658407296, 12666795136, 12675183232, 12683574656, -12691960192, 12700350592, 12708740224, 12717128576, 12725515904, -12733906816, 12742295168, 12750680192, 12759071872, 12767460736, -12775848832, 12784236928, 12792626816, 12801014656, 12809404288, -12817789312, 12826181504, 12834568832, 12842954624, 12851345792, -12859732352, 12868122496, 12876512128, 12884901248, 12893289088, -12901672832, 12910067584, 12918455168, 12926842496, 12935232896, -12943620736, 12952009856, 12960396928, 12968786816, 12977176192, -12985563776, 12993951104, 13002341504, 13010730368, 13019115392, -13027506304, 13035895168, 13044272512, 13052673152, 13061062528, -13069446272, 13077838976, 13086227072, 13094613632, 13103000192, -13111393664, 13119782528, 13128157568, 13136559232, 13144945024, -13153329536, 13161724288, 13170111872, 13178502784, 13186884736, -13195279744, 13203667072, 13212057472, 13220445824, 13228832128, -13237221248, 13245610624, 13254000512, 13262388352, 13270777472, -13279166336, 13287553408, 13295943296, 13304331904, 13312719488, -13321108096, 13329494656, 13337885824, 13346274944, 13354663808, -13363051136, 13371439232, 13379825024, 13388210816, 13396605056, -13404995456, 13413380224, 13421771392, 13430159744, 13438546048, -13446937216, 13455326848, 13463708288, 13472103808, 13480492672, -13488875648, 13497269888, 13505657728, 13514045312, 13522435712, -13530824576, 13539210112, 13547599232, 13555989376, 13564379008, -13572766336, 13581154432, 13589544832, 13597932928, 13606320512, -13614710656, 13623097472, 13631477632, 13639874944, 13648264064, -13656652928, 13665041792, 13673430656, 13681818496, 13690207616, -13698595712, 13706982272, 13715373184, 13723762048, 13732150144, -13740536704, 13748926592, 13757316224, 13765700992, 13774090112, -13782477952, 13790869376, 13799259008, 13807647872, 13816036736, -13824425344, 13832814208, 13841202304, 13849591424, 13857978752, -13866368896, 13874754688, 13883145344, 13891533184, 13899919232, -13908311168, 13916692096, 13925085056, 13933473152, 13941866368, -13950253696, 13958643584, 13967032192, 13975417216, 13983807616, -13992197504, 14000582272, 14008973696, 14017363072, 14025752192, -14034137984, 14042528384, 14050918016, 14059301504, 14067691648, -14076083584, 14084470144, 14092852352, 14101249664, 14109635968, -14118024832, 14126407552, 14134804352, 14143188608, 14151577984, -14159968384, 14168357248, 14176741504, 14185127296, 14193521024, -14201911424, 14210301824, 14218685056, 14227067264, 14235467392, -14243855488, 14252243072, 14260630144, 14269021568, 14277409408, -14285799296, 14294187904, 14302571392, 14310961792, 14319353728, -14327738752, 14336130944, 14344518784, 14352906368, 14361296512, -14369685376, 14378071424, 14386462592, 14394848128, 14403230848, -14411627392, 14420013952, 14428402304, 14436793472, 14445181568, -14453569664, 14461959808, 14470347904, 14478737024, 14487122816, -14495511424, 14503901824, 14512291712, 14520677504, 14529064832, -14537456768, 14545845632, 14554234496, 14562618496, 14571011456, -14579398784, 14587789184, 14596172672, 14604564608, 14612953984, -14621341312, 14629724288, 14638120832, 14646503296, 14654897536, -14663284864, 14671675264, 14680061056, 14688447616, 14696835968, -14705228416, 14713616768, 14722003328, 14730392192, 14738784128, -14747172736, 14755561088, 14763947648, 14772336512, 14780725376, -14789110144, 14797499776, 14805892736, 14814276992, 14822670208, -14831056256, 14839444352, 14847836032, 14856222848, 14864612992, -14872997504, 14881388672, 14889775744, 14898165376, 14906553472, -14914944896, 14923329664, 14931721856, 14940109696, 14948497024, -14956887424, 14965276544, 14973663616, 14982053248, 14990439808, -14998830976, 15007216768, 15015605888, 15023995264, 15032385152, -15040768384, 15049154944, 15057549184, 15065939072, 15074328448, -15082715008, 15091104128, 15099493504, 15107879296, 15116269184, -15124659584, 15133042304, 15141431936, 15149824384, 15158214272, -15166602368, 15174991232, 15183378304, 15191760512, 15200154496, -15208542592, 15216931712, 15225323392, 15233708416, 15242098048, -15250489216, 15258875264, 15267265408, 15275654528, 15284043136, -15292431488, 15300819584, 15309208192, 15317596544, 15325986176, -15334374784, 15342763648, 15351151744, 15359540608, 15367929728, -15376318336, 15384706432, 15393092992, 15401481856, 15409869952, -15418258816, 15426649984, 15435037568, 15443425664, 15451815296, -15460203392, 15468589184, 15476979328, 15485369216, 15493755776, -15502146944, 15510534272, 15518924416, 15527311232, 15535699072, -15544089472, 15552478336, 15560866688, 15569254528, 15577642624, -15586031488, 15594419072, 15602809472, 15611199104, 15619586432, -15627975296, 15636364928, 15644753792, 15653141888, 15661529216, -15669918848, 15678305152, 15686696576, 15695083136, 15703474048, -15711861632, 15720251264, 15728636288, 15737027456, 15745417088, -15753804928, 15762194048, 15770582656, 15778971008, 15787358336, -15795747712, 15804132224, 15812523392, 15820909696, 15829300096, -15837691264, 15846071936, 15854466944, 15862855808, 15871244672, -15879634816, 15888020608, 15896409728, 15904799104, 15913185152, -15921577088, 15929966464, 15938354816, 15946743424, 15955129472, -15963519872, 15971907968, 15980296064, 15988684928, 15997073024, -16005460864, 16013851264, 16022241152, 16030629248, 16039012736, -16047406976, 16055794816, 16064181376, 16072571264, 16080957824, -16089346688, 16097737856, 16106125184, 16114514816, 16122904192, -16131292544, 16139678848, 16148066944, 16156453504, 16164839552, -16173236096, 16181623424, 16190012032, 16198401152, 16206790528, -16215177344, 16223567744, 16231956352, 16240344704, 16248731008, -16257117824, 16265504384, 16273898624, 16282281856, 16290668672, -16299064192, 16307449216, 16315842176, 16324230016, 16332613504, -16341006464, 16349394304, 16357783168, 16366172288, 16374561664, -16382951296, 16391337856, 16399726208, 16408116352, 16416505472, -16424892032, 16433282176, 16441668224, 16450058624, 16458448768, -16466836864, 16475224448, 16483613056, 16492001408, 16500391808, -16508779648, 16517166976, 16525555328, 16533944192, 16542330752, -16550719616, 16559110528, 16567497088, 16575888512, 16584274816, -16592665472, 16601051008, 16609442944, 16617832064, 16626218624, -16634607488, 16642996096, 16651385728, 16659773824, 16668163712, -16676552576, 16684938112, 16693328768, 16701718144, 16710095488, -16718492288, 16726883968, 16735272832, 16743661184, 16752049792, -16760436608, 16768827008, 16777214336, 16785599104, 16793992832, -16802381696, 16810768768, 16819151744, 16827542656, 16835934848, -16844323712, 16852711552, 16861101952, 16869489536, 16877876864, -16886265728, 16894653056, 16903044736, 16911431296, 16919821696, -16928207488, 16936592768, 16944987776, 16953375616, 16961763968, -16970152832, 16978540928, 16986929536, 16995319168, 17003704448, -17012096896, 17020481152, 17028870784, 17037262208, 17045649536, -17054039936, 17062426496, 17070814336, 17079205504, 17087592064, -17095978112, 17104369024, 17112759424, 17121147776, 17129536384, -17137926016, 17146314368, 17154700928, 17163089792, 17171480192, -17179864192, 17188256896, 17196644992, 17205033856, 17213423488, -17221811072, 17230198912, 17238588032, 17246976896, 17255360384, -17263754624, 17272143232, 17280530048, 17288918912, 17297309312, -17305696384, 17314085504, 17322475136, 17330863744, 17339252096, -17347640192, 17356026496, 17364413824, 17372796544, 17381190016, -17389583488, 17397972608, 17406360704, 17414748544, 17423135872, -17431527296, 17439915904, 17448303232, 17456691584, 17465081728, -17473468288, 17481857408, 17490247552, 17498635904, 17507022464, -17515409024, 17523801728, 17532189824, 17540577664, 17548966016, -17557353344, 17565741184, 17574131584, 17582519168, 17590907008, -17599296128, 17607687808, 17616076672, 17624455808, 17632852352, -17641238656, 17649630848, 17658018944, 17666403968, 17674794112, -17683178368, 17691573376, 17699962496, 17708350592, 17716739968, -17725126528, 17733517184, 17741898112, 17750293888, 17758673024, -17767070336, 17775458432, 17783848832, 17792236928, 17800625536, -17809012352, 17817402752, 17825785984, 17834178944, 17842563968, -17850955648, 17859344512, 17867732864, 17876119424, 17884511872, -17892900224, 17901287296, 17909677696, 17918058112, 17926451072, -17934843776, 17943230848, 17951609216, 17960008576, 17968397696, -17976784256, 17985175424, 17993564032, 18001952128, 18010339712, -18018728576, 18027116672, 18035503232, 18043894144, 18052283264, -18060672128, 18069056384, 18077449856, 18085837184, 18094225792, -18102613376, 18111004544, 18119388544, 18127781248, 18136170368, -18144558976, 18152947328, 18161336192, 18169724288, 18178108544, -18186498944, 18194886784, 18203275648, 18211666048, 18220048768, -18228444544, 18236833408, 18245220736] - -cache_sizes = [ -16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072, -17693888, 17824192, 17955904, 18087488, 18218176, 18349504, 18481088, -18611392, 18742336, 18874304, 19004224, 19135936, 19267264, 19398208, -19529408, 19660096, 19791424, 19922752, 20053952, 20184896, 20315968, -20446912, 20576576, 20709184, 20840384, 20971072, 21102272, 21233216, -21364544, 21494848, 21626816, 21757376, 21887552, 22019392, 22151104, -22281536, 22412224, 22543936, 22675264, 22806464, 22935872, 23068096, -23198272, 23330752, 23459008, 23592512, 23723968, 23854912, 23986112, -24116672, 24247616, 24378688, 24509504, 24640832, 24772544, 24903488, -25034432, 25165376, 25296704, 25427392, 25558592, 25690048, 25820096, -25951936, 26081728, 26214208, 26345024, 26476096, 26606656, 26737472, -26869184, 26998208, 27131584, 27262528, 27393728, 27523904, 27655744, -27786688, 27917888, 28049344, 28179904, 28311488, 28441792, 28573504, -28700864, 28835648, 28966208, 29096768, 29228608, 29359808, 29490752, -29621824, 29752256, 29882816, 30014912, 30144448, 30273728, 30406976, -30538432, 30670784, 30799936, 30932672, 31063744, 31195072, 31325248, -31456192, 31588288, 31719232, 31850432, 31981504, 32110784, 32243392, -32372672, 32505664, 32636608, 32767808, 32897344, 33029824, 33160768, -33289664, 33423296, 33554368, 33683648, 33816512, 33947456, 34076992, -34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984, -35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976, -36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656, -36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904, -37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672, -38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632, -39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032, -40631744, 40762816, 40894144, 41023552, 41155904, 41286208, 41418304, -41547712, 41680448, 41811904, 41942848, 42073792, 42204992, 42334912, -42467008, 42597824, 42729152, 42860096, 42991552, 43122368, 43253696, -43382848, 43515712, 43646912, 43777088, 43907648, 44039104, 44170432, -44302144, 44433344, 44564288, 44694976, 44825152, 44956864, 45088448, -45219008, 45350464, 45481024, 45612608, 45744064, 45874496, 46006208, -46136768, 46267712, 46399424, 46529344, 46660672, 46791488, 46923328, -47053504, 47185856, 47316928, 47447872, 47579072, 47710144, 47839936, -47971648, 48103232, 48234176, 48365248, 48496192, 48627136, 48757312, -48889664, 49020736, 49149248, 49283008, 49413824, 49545152, 49675712, -49807168, 49938368, 50069056, 50200256, 50331584, 50462656, 50593472, -50724032, 50853952, 50986048, 51117632, 51248576, 51379904, 51510848, -51641792, 51773248, 51903296, 52035136, 52164032, 52297664, 52427968, -52557376, 52690112, 52821952, 52952896, 53081536, 53213504, 53344576, -53475776, 53608384, 53738816, 53870528, 54000832, 54131776, 54263744, -54394688, 54525248, 54655936, 54787904, 54918592, 55049152, 55181248, -55312064, 55442752, 55574336, 55705024, 55836224, 55967168, 56097856, -56228672, 56358592, 56490176, 56621888, 56753728, 56884928, 57015488, -57146816, 57278272, 57409216, 57540416, 57671104, 57802432, 57933632, -58064576, 58195264, 58326976, 58457408, 58588864, 58720192, 58849984, -58981696, 59113024, 59243456, 59375552, 59506624, 59637568, 59768512, -59897792, 60030016, 60161984, 60293056, 60423872, 60554432, 60683968, -60817216, 60948032, 61079488, 61209664, 61341376, 61471936, 61602752, -61733696, 61865792, 61996736, 62127808, 62259136, 62389568, 62520512, -62651584, 62781632, 62910784, 63045056, 63176128, 63307072, 63438656, -63569216, 63700928, 63831616, 63960896, 64093888, 64225088, 64355392, -64486976, 64617664, 64748608, 64879424, 65009216, 65142464, 65273792, -65402816, 65535424, 65666752, 65797696, 65927744, 66060224, 66191296, -66321344, 66453056, 66584384, 66715328, 66846656, 66977728, 67108672, -67239104, 67370432, 67501888, 67631296, 67763776, 67895104, 68026304, -68157248, 68287936, 68419264, 68548288, 68681408, 68811968, 68942912, -69074624, 69205568, 69337024, 69467584, 69599168, 69729472, 69861184, -69989824, 70122944, 70253888, 70385344, 70515904, 70647232, 70778816, -70907968, 71040832, 71171648, 71303104, 71432512, 71564992, 71695168, -71826368, 71958464, 72089536, 72219712, 72350144, 72482624, 72613568, -72744512, 72875584, 73006144, 73138112, 73268672, 73400128, 73530944, -73662272, 73793344, 73924544, 74055104, 74185792, 74316992, 74448832, -74579392, 74710976, 74841664, 74972864, 75102784, 75233344, 75364544, -75497024, 75627584, 75759296, 75890624, 76021696, 76152256, 76283072, -76414144, 76545856, 76676672, 76806976, 76937792, 77070016, 77200832, -77331392, 77462464, 77593664, 77725376, 77856448, 77987776, 78118336, -78249664, 78380992, 78511424, 78642496, 78773056, 78905152, 79033664, -79166656, 79297472, 79429568, 79560512, 79690816, 79822784, 79953472, -80084672, 80214208, 80346944, 80477632, 80608576, 80740288, 80870848, -81002048, 81133504, 81264448, 81395648, 81525952, 81657536, 81786304, -81919808, 82050112, 82181312, 82311616, 82443968, 82573376, 82705984, -82835776, 82967744, 83096768, 83230528, 83359552, 83491264, 83622464, -83753536, 83886016, 84015296, 84147776, 84277184, 84409792, 84540608, -84672064, 84803008, 84934336, 85065152, 85193792, 85326784, 85458496, -85589312, 85721024, 85851968, 85982656, 86112448, 86244416, 86370112, -86506688, 86637632, 86769344, 86900672, 87031744, 87162304, 87293632, -87424576, 87555392, 87687104, 87816896, 87947968, 88079168, 88211264, -88341824, 88473152, 88603712, 88735424, 88862912, 88996672, 89128384, -89259712, 89390272, 89521984, 89652544, 89783872, 89914816, 90045376, -90177088, 90307904, 90438848, 90569152, 90700096, 90832832, 90963776, -91093696, 91223744, 91356992, 91486784, 91618496, 91749824, 91880384, -92012224, 92143552, 92273344, 92405696, 92536768, 92666432, 92798912, -92926016, 93060544, 93192128, 93322816, 93453632, 93583936, 93715136, -93845056, 93977792, 94109504, 94240448, 94371776, 94501184, 94632896, -94764224, 94895552, 95023424, 95158208, 95287744, 95420224, 95550016, -95681216, 95811904, 95943872, 96075328, 96203584, 96337856, 96468544, -96599744, 96731072, 96860992, 96992576, 97124288, 97254848, 97385536, -97517248, 97647808, 97779392, 97910464, 98041408, 98172608, 98303168, -98434496, 98565568, 98696768, 98827328, 98958784, 99089728, 99220928, -99352384, 99482816, 99614272, 99745472, 99876416, 100007104, -100138048, 100267072, 100401088, 100529984, 100662592, 100791872, -100925248, 101056064, 101187392, 101317952, 101449408, 101580608, -101711296, 101841728, 101973824, 102104896, 102235712, 102366016, -102498112, 102628672, 102760384, 102890432, 103021888, 103153472, -103284032, 103415744, 103545152, 103677248, 103808576, 103939648, -104070976, 104201792, 104332736, 104462528, 104594752, 104725952, -104854592, 104988608, 105118912, 105247808, 105381184, 105511232, -105643072, 105774784, 105903296, 106037056, 106167872, 106298944, -106429504, 106561472, 106691392, 106822592, 106954304, 107085376, -107216576, 107346368, 107478464, 107609792, 107739712, 107872192, -108003136, 108131392, 108265408, 108396224, 108527168, 108657344, -108789568, 108920384, 109049792, 109182272, 109312576, 109444928, -109572928, 109706944, 109837888, 109969088, 110099648, 110230976, -110362432, 110492992, 110624704, 110755264, 110886208, 111017408, -111148864, 111279296, 111410752, 111541952, 111673024, 111803456, -111933632, 112066496, 112196416, 112328512, 112457792, 112590784, -112715968, 112852672, 112983616, 113114944, 113244224, 113376448, -113505472, 113639104, 113770304, 113901376, 114031552, 114163264, -114294592, 114425536, 114556864, 114687424, 114818624, 114948544, -115080512, 115212224, 115343296, 115473472, 115605184, 115736128, -115867072, 115997248, 116128576, 116260288, 116391488, 116522944, -116652992, 116784704, 116915648, 117046208, 117178304, 117308608, -117440192, 117569728, 117701824, 117833024, 117964096, 118094656, -118225984, 118357312, 118489024, 118617536, 118749632, 118882112, -119012416, 119144384, 119275328, 119406016, 119537344, 119668672, -119798464, 119928896, 120061376, 120192832, 120321728, 120454336, -120584512, 120716608, 120848192, 120979136, 121109056, 121241408, -121372352, 121502912, 121634752, 121764416, 121895744, 122027072, -122157632, 122289088, 122421184, 122550592, 122682944, 122813888, -122945344, 123075776, 123207488, 123338048, 123468736, 123600704, -123731264, 123861952, 123993664, 124124608, 124256192, 124386368, -124518208, 124649024, 124778048, 124911296, 125041088, 125173696, -125303744, 125432896, 125566912, 125696576, 125829056, 125958592, -126090304, 126221248, 126352832, 126483776, 126615232, 126746432, -126876608, 127008704, 127139392, 127270336, 127401152, 127532224, -127663552, 127794752, 127925696, 128055232, 128188096, 128319424, -128449856, 128581312, 128712256, 128843584, 128973632, 129103808, -129236288, 129365696, 129498944, 129629888, 129760832, 129892288, -130023104, 130154048, 130283968, 130416448, 130547008, 130678336, -130807616, 130939456, 131071552, 131202112, 131331776, 131464384, -131594048, 131727296, 131858368, 131987392, 132120256, 132250816, -132382528, 132513728, 132644672, 132774976, 132905792, 133038016, -133168832, 133299392, 133429312, 133562048, 133692992, 133823296, -133954624, 134086336, 134217152, 134348608, 134479808, 134607296, -134741056, 134872384, 135002944, 135134144, 135265472, 135396544, -135527872, 135659072, 135787712, 135921472, 136052416, 136182848, -136313792, 136444864, 136576448, 136707904, 136837952, 136970048, -137099584, 137232064, 137363392, 137494208, 137625536, 137755712, -137887424, 138018368, 138149824, 138280256, 138411584, 138539584, -138672832, 138804928, 138936128, 139066688, 139196864, 139328704, -139460032, 139590208, 139721024, 139852864, 139984576, 140115776, -140245696, 140376512, 140508352, 140640064, 140769856, 140902336, -141032768, 141162688, 141294016, 141426496, 141556544, 141687488, -141819584, 141949888, 142080448, 142212544, 142342336, 142474432, -142606144, 142736192, 142868288, 142997824, 143129408, 143258944, -143392448, 143523136, 143653696, 143785024, 143916992, 144045632, -144177856, 144309184, 144440768, 144570688, 144701888, 144832448, -144965056, 145096384, 145227584, 145358656, 145489856, 145620928, -145751488, 145883072, 146011456, 146144704, 146275264, 146407232, -146538176, 146668736, 146800448, 146931392, 147062336, 147193664, -147324224, 147455936, 147586624, 147717056, 147848768, 147979456, -148110784, 148242368, 148373312, 148503232, 148635584, 148766144, -148897088, 149028416, 149159488, 149290688, 149420224, 149551552, -149683136, 149814976, 149943616, 150076352, 150208064, 150338624, -150470464, 150600256, 150732224, 150862784, 150993088, 151125952, -151254976, 151388096, 151519168, 151649728, 151778752, 151911104, -152042944, 152174144, 152304704, 152435648, 152567488, 152698816, -152828992, 152960576, 153091648, 153222976, 153353792, 153484096, -153616192, 153747008, 153878336, 154008256, 154139968, 154270912, -154402624, 154533824, 154663616, 154795712, 154926272, 155057984, -155188928, 155319872, 155450816, 155580608, 155712064, 155843392, -155971136, 156106688, 156237376, 156367424, 156499264, 156630976, -156761536, 156892352, 157024064, 157155008, 157284416, 157415872, -157545536, 157677248, 157810496, 157938112, 158071744, 158203328, -158334656, 158464832, 158596288, 158727616, 158858048, 158988992, -159121216, 159252416, 159381568, 159513152, 159645632, 159776192, -159906496, 160038464, 160169536, 160300352, 160430656, 160563008, -160693952, 160822208, 160956352, 161086784, 161217344, 161349184, -161480512, 161611456, 161742272, 161873216, 162002752, 162135872, -162266432, 162397888, 162529216, 162660032, 162790976, 162922048, -163052096, 163184576, 163314752, 163446592, 163577408, 163707968, -163839296, 163969984, 164100928, 164233024, 164364224, 164494912, -164625856, 164756672, 164887616, 165019072, 165150016, 165280064, -165412672, 165543104, 165674944, 165805888, 165936832, 166067648, -166198336, 166330048, 166461248, 166591552, 166722496, 166854208, -166985408, 167116736, 167246656, 167378368, 167508416, 167641024, -167771584, 167903168, 168034112, 168164032, 168295744, 168427456, -168557632, 168688448, 168819136, 168951616, 169082176, 169213504, -169344832, 169475648, 169605952, 169738048, 169866304, 169999552, -170131264, 170262464, 170393536, 170524352, 170655424, 170782016, -170917696, 171048896, 171179072, 171310784, 171439936, 171573184, -171702976, 171835072, 171966272, 172097216, 172228288, 172359232, -172489664, 172621376, 172747712, 172883264, 173014208, 173144512, -173275072, 173407424, 173539136, 173669696, 173800768, 173931712, -174063424, 174193472, 174325696, 174455744, 174586816, 174718912, -174849728, 174977728, 175109696, 175242688, 175374272, 175504832, -175636288, 175765696, 175898432, 176028992, 176159936, 176291264, -176422592, 176552512, 176684864, 176815424, 176946496, 177076544, -177209152, 177340096, 177470528, 177600704, 177731648, 177864256, -177994816, 178126528, 178257472, 178387648, 178518464, 178650176, -178781888, 178912064, 179044288, 179174848, 179305024, 179436736, -179568448, 179698496, 179830208, 179960512, 180092608, 180223808, -180354752, 180485696, 180617152, 180748096, 180877504, 181009984, -181139264, 181272512, 181402688, 181532608, 181663168, 181795136, -181926592, 182057536, 182190016, 182320192, 182451904, 182582336, -182713792, 182843072, 182976064, 183107264, 183237056, 183368384, -183494848, 183631424, 183762752, 183893824, 184024768, 184154816, -184286656, 184417984, 184548928, 184680128, 184810816, 184941248, -185072704, 185203904, 185335616, 185465408, 185596352, 185727296, -185859904, 185989696, 186121664, 186252992, 186383552, 186514112, -186645952, 186777152, 186907328, 187037504, 187170112, 187301824, -187429184, 187562048, 187693504, 187825472, 187957184, 188087104, -188218304, 188349376, 188481344, 188609728, 188743616, 188874304, -189005248, 189136448, 189265088, 189396544, 189528128, 189660992, -189791936, 189923264, 190054208, 190182848, 190315072, 190447424, -190577984, 190709312, 190840768, 190971328, 191102656, 191233472, -191364032, 191495872, 191626816, 191758016, 191888192, 192020288, -192148928, 192282176, 192413504, 192542528, 192674752, 192805952, -192937792, 193068608, 193198912, 193330496, 193462208, 193592384, -193723456, 193854272, 193985984, 194116672, 194247232, 194379712, -194508352, 194641856, 194772544, 194900672, 195035072, 195166016, -195296704, 195428032, 195558592, 195690304, 195818176, 195952576, -196083392, 196214336, 196345792, 196476736, 196607552, 196739008, -196869952, 197000768, 197130688, 197262784, 197394368, 197523904, -197656384, 197787584, 197916608, 198049472, 198180544, 198310208, -198442432, 198573632, 198705088, 198834368, 198967232, 199097792, -199228352, 199360192, 199491392, 199621696, 199751744, 199883968, -200014016, 200146624, 200276672, 200408128, 200540096, 200671168, -200801984, 200933312, 201062464, 201194944, 201326144, 201457472, -201588544, 201719744, 201850816, 201981632, 202111552, 202244032, -202374464, 202505152, 202636352, 202767808, 202898368, 203030336, -203159872, 203292608, 203423296, 203553472, 203685824, 203816896, -203947712, 204078272, 204208192, 204341056, 204472256, 204603328, -204733888, 204864448, 204996544, 205125568, 205258304, 205388864, -205517632, 205650112, 205782208, 205913536, 206044736, 206176192, -206307008, 206434496, 206569024, 206700224, 206831168, 206961856, -207093056, 207223616, 207355328, 207486784, 207616832, 207749056, -207879104, 208010048, 208141888, 208273216, 208404032, 208534336, -208666048, 208796864, 208927424, 209059264, 209189824, 209321792, -209451584, 209582656, 209715136, 209845568, 209976896, 210106432, -210239296, 210370112, 210501568, 210630976, 210763712, 210894272, -211024832, 211156672, 211287616, 211418176, 211549376, 211679296, -211812032, 211942592, 212074432, 212204864, 212334016, 212467648, -212597824, 212727616, 212860352, 212991424, 213120832, 213253952, -213385024, 213515584, 213645632, 213777728, 213909184, 214040128, -214170688, 214302656, 214433728, 214564544, 214695232, 214826048, -214956992, 215089088, 215219776, 215350592, 215482304, 215613248, -215743552, 215874752, 216005312, 216137024, 216267328, 216399296, -216530752, 216661696, 216790592, 216923968, 217054528, 217183168, -217316672, 217448128, 217579072, 217709504, 217838912, 217972672, -218102848, 218233024, 218364736, 218496832, 218627776, 218759104, -218888896, 219021248, 219151936, 219281728, 219413056, 219545024, -219675968, 219807296, 219938624, 220069312, 220200128, 220331456, -220461632, 220592704, 220725184, 220855744, 220987072, 221117888, -221249216, 221378368, 221510336, 221642048, 221772736, 221904832, -222031808, 222166976, 222297536, 222428992, 222559936, 222690368, -222820672, 222953152, 223083968, 223213376, 223345984, 223476928, -223608512, 223738688, 223869376, 224001472, 224132672, 224262848, -224394944, 224524864, 224657344, 224788288, 224919488, 225050432, -225181504, 225312704, 225443776, 225574592, 225704768, 225834176, -225966784, 226097216, 226229824, 226360384, 226491712, 226623424, -226754368, 226885312, 227015104, 227147456, 227278528, 227409472, -227539904, 227669696, 227802944, 227932352, 228065216, 228196288, -228326464, 228457792, 228588736, 228720064, 228850112, 228981056, -229113152, 229243328, 229375936, 229505344, 229636928, 229769152, -229894976, 230030272, 230162368, 230292416, 230424512, 230553152, -230684864, 230816704, 230948416, 231079616, 231210944, 231342016, -231472448, 231603776, 231733952, 231866176, 231996736, 232127296, -232259392, 232388672, 232521664, 232652608, 232782272, 232914496, -233043904, 233175616, 233306816, 233438528, 233569984, 233699776, -233830592, 233962688, 234092224, 234221888, 234353984, 234485312, -234618304, 234749888, 234880832, 235011776, 235142464, 235274048, -235403456, 235535936, 235667392, 235797568, 235928768, 236057152, -236190272, 236322752, 236453312, 236583616, 236715712, 236846528, -236976448, 237108544, 237239104, 237371072, 237501632, 237630784, -237764416, 237895232, 238026688, 238157632, 238286912, 238419392, -238548032, 238681024, 238812608, 238941632, 239075008, 239206336, -239335232, 239466944, 239599168, 239730496, 239861312, 239992384, -240122816, 240254656, 240385856, 240516928, 240647872, 240779072, -240909632, 241040704, 241171904, 241302848, 241433408, 241565248, -241696192, 241825984, 241958848, 242088256, 242220224, 242352064, -242481856, 242611648, 242744896, 242876224, 243005632, 243138496, -243268672, 243400384, 243531712, 243662656, 243793856, 243924544, -244054592, 244187072, 244316608, 244448704, 244580032, 244710976, -244841536, 244972864, 245104448, 245233984, 245365312, 245497792, -245628736, 245759936, 245889856, 246021056, 246152512, 246284224, -246415168, 246545344, 246675904, 246808384, 246939584, 247070144, -247199552, 247331648, 247463872, 247593536, 247726016, 247857088, -247987648, 248116928, 248249536, 248380736, 248512064, 248643008, -248773312, 248901056, 249036608, 249167552, 249298624, 249429184, -249560512, 249692096, 249822784, 249954112, 250085312, 250215488, -250345792, 250478528, 250608704, 250739264, 250870976, 251002816, -251133632, 251263552, 251395136, 251523904, 251657792, 251789248, -251919424, 252051392, 252182464, 252313408, 252444224, 252575552, -252706624, 252836032, 252968512, 253099712, 253227584, 253361728, -253493056, 253623488, 253754432, 253885504, 254017216, 254148032, -254279488, 254410432, 254541376, 254672576, 254803264, 254933824, -255065792, 255196736, 255326528, 255458752, 255589952, 255721408, -255851072, 255983296, 256114624, 256244416, 256374208, 256507712, -256636096, 256768832, 256900544, 257031616, 257162176, 257294272, -257424448, 257555776, 257686976, 257818432, 257949632, 258079552, -258211136, 258342464, 258473408, 258603712, 258734656, 258867008, -258996544, 259127744, 259260224, 259391296, 259522112, 259651904, -259784384, 259915328, 260045888, 260175424, 260308544, 260438336, -260570944, 260700992, 260832448, 260963776, 261092672, 261226304, -261356864, 261487936, 261619648, 261750592, 261879872, 262011968, -262143424, 262274752, 262404416, 262537024, 262667968, 262799296, -262928704, 263061184, 263191744, 263322944, 263454656, 263585216, -263716672, 263847872, 263978944, 264108608, 264241088, 264371648, -264501184, 264632768, 264764096, 264895936, 265024576, 265158464, -265287488, 265418432, 265550528, 265681216, 265813312, 265943488, -266075968, 266206144, 266337728, 266468032, 266600384, 266731072, -266862272, 266993344, 267124288, 267255616, 267386432, 267516992, -267648704, 267777728, 267910592, 268040512, 268172096, 268302784, -268435264, 268566208, 268696256, 268828096, 268959296, 269090368, -269221312, 269352256, 269482688, 269614784, 269745856, 269876416, -270007616, 270139328, 270270272, 270401216, 270531904, 270663616, -270791744, 270924736, 271056832, 271186112, 271317184, 271449536, -271580992, 271711936, 271843136, 271973056, 272105408, 272236352, -272367296, 272498368, 272629568, 272759488, 272891456, 273022784, -273153856, 273284672, 273415616, 273547072, 273677632, 273808448, -273937088, 274071488, 274200896, 274332992, 274463296, 274595392, -274726208, 274857536, 274988992, 275118656, 275250496, 275382208, -275513024, 275643968, 275775296, 275906368, 276037184, 276167872, -276297664, 276429376, 276560576, 276692672, 276822976, 276955072, -277085632, 277216832, 277347008, 277478848, 277609664, 277740992, -277868608, 278002624, 278134336, 278265536, 278395328, 278526784, -278657728, 278789824, 278921152, 279052096, 279182912, 279313088, -279443776, 279576256, 279706048, 279838528, 279969728, 280099648, -280230976, 280361408, 280493632, 280622528, 280755392, 280887104, -281018176, 281147968, 281278912, 281411392, 281542592, 281673152, -281803712, 281935552, 282066496, 282197312, 282329024, 282458816, -282590272, 282720832, 282853184, 282983744, 283115072, 283246144, -283377344, 283508416, 283639744, 283770304, 283901504, 284032576, -284163136, 284294848, 284426176, 284556992, 284687296, 284819264, -284950208, 285081536] -``` diff --git "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md" "b/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md" deleted file mode 100644 index 144f55538ff..00000000000 --- "a/public/content/translations/zh-tw/17) Foundational Docs \342\200\223 Proof-of-Work/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md" +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 挖礦算法 -description: 以太坊挖礦演算法的詳細介紹。 -lang: zh-tw ---- - - -工作量證明不再是以太坊共識機制的基礎,這意味著挖礦已完結。 取而代之的是,以太坊由抵押以太幣的驗證者來保障安全。 你能從現在開始質押ETH. 閱讀更多關於合併權益證明質押的資訊。 此頁面僅為滿足對歷史的興趣。 - - -以太坊挖礦使用過一種稱為 Ethash 的演算法。 這個演算法的基本思路是,礦工嘗試使用蠻力計算找到一個隨機數輸入,使得產生的雜湊值小於一個取決於計算難度的閾值。 此難度等級可以動態調整,從而允許定期產生區塊。 - -## 前置要求 {#prerequisites} - -為了更好地理解本頁內容,我們推薦你先閱讀[工作量證明共識](/developers/docs/consensus-mechanisms/pow)和[挖礦](/developers/docs/consensus-mechanisms/pow/mining)。 - -## Dagger Hashimoto {#dagger-hashimoto} - -Dagger Hashimoto 是以太坊挖礦的先導研究演算法,現已被 Ethash 取代。 它是兩種不同演算法:Dagger 和 Hashimoto 的融合。 它只是一個曾經的研究實作,並在以太坊主網啟動時被 Ethash 取代。 - -[Dagger](http://www.hashcash.org/papers/dagger.html) 需要產生一個[有向無環圖](https://en.wikipedia.org/wiki/Directed_acyclic_graph),並將其隨機片段雜湊在一起。 其核心原理是,每個隨機數只需要一個較大總資料樹中的一小部分。 挖礦禁止為每個隨機數重新計算子樹,因此需要儲存樹;但若僅為驗證單個隨機數,則可以重新計算。 Dagger 的設計目的是替代諸如 Scrypt 這類已有的演算法,這類演算法是記憶體密集型的,但很難驗證其記憶體密集程度何時增至可信的安全水平。 然而,Dagger 容易受到共享記憶體硬體加速的影响,因此被放棄,转而采用了其他研究途径。 - -[Hashimoto](http://diyhpl.us/%7Ebryan/papers2/bitcoin/meh/hashimoto.pdf) 演算法透過實現輸入/輸出捆綁的特性(即,記憶體讀取是挖礦過程中的限制因素)來增加對專用積體電路的抗性。 理論上來說,隨機存取記憶體比計算能力更容易獲取;已有價值數十億美元的經費投入用於研究針對不同使用案例的隨機存取記憶體最佳化,這些案例通常涉及近隨機存取模式(即「隨機存取記憶體」)。 因此,現有的隨機存取記憶體在評價演算法的能力上更接近最優。 Hashimoto 使用區塊鏈作為資料來源,同時滿足上述第 (1) 和第 (3) 條。 - -Dagger-Hashimoto 是在 Dagger 和 Hashimoto 的基礎上改進而來的演算法版本。 Dagger Hashimoto 和 Hashimoto 的差別在於,Dagger Hashimoto 的資料來源並非是區塊鏈,而是自訂產生的資料集,並且該資料集每 N 個區塊基於區塊資料更新一次。 該資料集採用 Dagger 演算法產生,可為輕量用戶端的驗證演算法高效計算特定於每個隨機數的子集。 Dagger Hashimoto 演算法和 Dagger 演算法的差別在於,與原來的 Dagger 不同,用於查詢區塊的資料集只是暫時的,只會偶爾更新(例如每週更新一次)。 這意味著產生資料集的工作量接近於零,所以 Sergio Lerner 關於共享記憶體加速的論據變得微不足道。 - -有關 [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) 的更多資訊。 - -## Ethash算法 {#ethash} - -Ethash 是在現已棄用的工作量證明架構下,實際用於真正的以太坊主網的挖礦演算法。 Ethash 實際上是為 Dagger Hashimoto 演算法進行重要更新後的一個特定版本命名的新名稱,但它仍然繼承了其前身的基本原理。 以太坊主網僅使用過 Ethash,而 Dagger Hashimoto 只是挖礦演算法的研發版本,且在以太坊主網開始挖礦前就已被取代。 - -[有關 Ethash 的更多資訊](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash)。 - -## 衍生閱讀 {#further-reading} - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/backend/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/backend/index.md" deleted file mode 100644 index 9492893476d..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/backend/index.md" +++ /dev/null @@ -1,207 +0,0 @@ ---- -title: 後端應用程式介面程式庫 -description: 讓你能夠從應用程式與區塊鏈互動的以太坊用戶端應用程式介面簡介。 -lang: zh-tw ---- - -為了讓軟體應用程式能夠和以太坊區塊鏈互動(例如:讀取區塊鏈資料及/或傳送交易到網路),必須先連結以太坊節點。 - -為了這個目的,每個以太坊用戶端需實作 [JSON-RPC](/developers/docs/apis/json-rpc/) 規範,如此一來,應用程式就可以使用這些一組統一的[方法](/developers/docs/apis/json-rpc/#json-rpc-methods)。 - -如果你想用特定程式設計語言連結以太坊節點,生態系統中有很多便利的程式庫幫助你更輕易完成。 借助這些程式庫,開發者可以編寫直覺的單行方法來初始化與以太坊互動的 JSON-RPC 請求(在後台)。 - -## 先備知識 {#prerequisites} - -瞭解[以太坊堆疊](/developers/docs/ethereum-stack/)和[以太坊用戶端](/developers/docs/nodes-and-clients/)可能會有幫助。 - -## 為何使用程式庫? {#why-use-a-library} - -這些程式庫顯著降低了直接和以太坊節點互動的複雜度。 這些應用程式介面還提供公用程式功能(例如將 ETH 轉換為 Gwei),使得開發者可以花更少的時間處理複雜的以太坊用戶端,將更多的時間專注於應用程式的特定功能。 - -## 可用程式庫 {#available-libraries} - -### 基礎設施和節點服務 {#infrastructure-and-node-services} - -**Alchemy -** **_以太坊開發平台。_** - -- [alchemy.com](https://www.alchemy.com/) -- [文件](https://docs.alchemy.com/) -- [Github](https://github.com/alchemyplatform) -- [Discord](https://discord.com/invite/alchemyplatform) - -**All That Node -** **_節點即服務。_** - -- [All That Node.com](https://www.allthatnode.com/) -- [文件](https://docs.allthatnode.com) -- [Discord](https://discord.gg/GmcdVEUbJM) - -**Bware Labs 的 Blast -** **_以太坊主網和測試網的去中心化應用程式介面。_** - -- [blastapi.io](https://blastapi.io/) -- [文件](https://docs.blastapi.io) -- [Discord](https://discord.gg/bwarelabs) - -**BlockPi -** **_提供更高效及快速的遠端程序呼叫服務_** - -- [blockpi.io](https://blockpi.io/) -- [文檔](https://docs.blockpi.io/) -- [Github](https://github.com/BlockPILabs) -- [Discord](https://discord.com/invite/xTvGVrGVZv) - -**Cloudflare 以太坊閘道。** - -- [cloudflare-eth.com](https://www.cloudflare.com/application-services/products/web3/) - -**Etherscan - 區塊瀏覽器和交易應用程式介面** -- [文件](https://docs.etherscan.io/) - -**GetBlock-** **_用於 Web3 開發的區塊鏈即服務_** - -- [GetBlock.io](https://getblock.io/) -- [文檔](https://getblock.io/docs/) - -**Infura -** **_以太坊應用程式介面即服務。_** - -- [infura.io](https://infura.io) -- [文件](https://docs.infura.io/api) -- [Github](https://github.com/INFURA) - -**Node RPC - _有成本效益的以太坊虛擬機 JSON-RPC 提供者_** - -- [noderpc.xyz](https://www.noderpc.xyz/) -- [文檔](https://docs.noderpc.xyz/node-rpc) - -**NOWNodes - _全節點和區塊瀏覽器。_** - -- [NOWNodes.io](https://nownodes.io/) -- [文件](https://documenter.getpostman.com/view/13630829/TVmFkLwy#intro) - -**QuickNode -** **_區塊鏈基礎設施即服務。_** - -- [quicknode.com](https://quicknode.com) -- [文檔](https://www.quicknode.com/docs/welcome) -- [Discord](https://discord.gg/quicknode) - -**Rivet -** **_由開源軟體支援的以太坊和以太坊經典應用程式介面即服務_** - -- [rivet.cloud](https://rivet.cloud) -- [文件](https://rivet.cloud/docs/) -- [Github](https://github.com/openrelayxyz/ethercattle-deployment) - -**Zmok -** **_速度導向的以太坊節點即 JSON-RPC/WebSockets 應用程式介面。_** - -- [zmok.io](https://zmok.io/) -- [Github](https://github.com/zmok-io) -- [文檔](https://docs.zmok.io/) -- [Discord](https://discord.gg/fAHeh3ka6s) - -### 開發工具 {#development-tools} - -**ethers-kt -** **_適用基於以太坊虛擬機區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。_** - -- [Github](https://github.com/Kr1ptal/ethers-kt) -- [範例](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) -- [Discord](https://discord.gg/rx35NzQGSb) - -**Nethereum -** **_區塊鏈的開源 .NET 整合程式庫。_** - -- [Github](https://github.com/Nethereum/Nethereum) -- [文檔](http://docs.nethereum.com/en/latest/) -- [Discord](https://discord.com/invite/jQPrR58FxX) - -**Python Tooling -** **_透過 Python 進行以太坊互動的各種程式庫。_** - -- [py.ethereum.org](https://python.ethereum.org/) -- [web3.py GitHub](https://github.com/ethereum/web3.py) -- [web3.py 聊天室](https://gitter.im/ethereum/web3.py) - -**Tatum -** **_最好的區塊鏈開發平台。_** - -- [Tatum](https://tatum.io/) -- [GitHub](https://github.com/tatumio/) -- [文檔](https://docs.tatum.io/) -- [Discord](https://discord.gg/EDmW3kjTC9) - -**web3j -** **_以太坊的 Java/Android/Kotlin/Scala 整合程式庫。 _** - -- [Github](https://github.com/web3j/web3j) -- [文件](https://docs.web3j.io/) -- [Gitter](https://gitter.im/web3j/web3j) - -### 區塊鏈服務 {#blockchain-services} - -**BlockCypher -** **_以太坊 Web 應用程式介面。_** - -- [blockcypher.com](https://www.blockcypher.com/) -- [文件](https://www.blockcypher.com/dev/ethereum/) - -**Chainbase -** **_以太坊的一體化 web3 資料基礎設施。_** - -- [chainbase.com](https://chainbase.com/) -- [文件](https://docs.chainbase.com/) -- [Discord](https://discord.gg/Wx6qpqz4AF) - -**Chainstack -** **_彈性且專用的以太坊節點即服務。_** - -- [chainstack.com](https://chainstack.com) -- [文件](https://docs.chainbase.com/docs) -- [以太坊應用程式介面參考資料](https://docs.chainstack.com/reference/ethereum-getting-started) - -**Coinbase 雲端節點 -** **_區塊鏈基礎設施應用程式介面。_** - -- [Coinbase 雲端節點](https://www.coinbase.com/cloud) -- [文件](https://docs.cloud.coinbase.com/) - -**DataHub by Figment -** **_以太坊主網和測試網的 Web3 應用程式介面服務。_** - -- [DataHub](https://www.figment.io/) -- [文件](https://docs.figment.io/) - -**Moralis -** **_企業級以太坊虛擬機應用程式介面提供者。_** - -- [moralis.io](https://moralis.io) -- [文件](https://docs.moralis.io/) -- [GitHub](https://github.com/MoralisWeb3) -- [Discord](https://moralis.io/joindiscord/) -- [論壇](https://forum.moralis.io/) - -**NFTPort -** **_以太坊資料及鑄造應用程式介面。_** - -- [nftport.xyz](https://www.nftport.xyz/) -- [文件](https://docs.nftport.xyz/) -- [GitHub](https://github.com/nftport/) -- [Discord](https://discord.com/invite/K8nNrEgqhE) - -**Tokenview -** **_通用多重加密區塊鏈應用程式介面平台。_** - -- [services.tokenview.io](https://services.tokenview.io/) -- [文件](https://services.tokenview.io/docs?type=api) -- [GitHub](https://github.com/Tokenview) - -**Watchdata -** **_提供簡單可靠的應用程式介面來存取以太坊區塊鏈。_** - -- [Watchdata](https://watchdata.io/) -- [文件](https://docs.watchdata.io/) -- [Discord](https://discord.com/invite/TZRJbZ6bdn) - -**Covalent -** **_200 多條鏈的已擴充區塊鏈應用程式介面。_** - -- [covalenthq.com](https://www.covalenthq.com/) -- [文件](https://www.covalenthq.com/docs/api/) -- [GitHub](https://github.com/covalenthq) -- [Discord](https://www.covalenthq.com/discord/) - - -## 了解更多 {#further-reading} - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ - -## 相關主題 {#related-topics} - -- [節點和用戶端](/developers/docs/nodes-and-clients/) -- [開發架構](/developers/docs/frameworks/) - -## 相關教學影片 {#related-tutorials} - -- [設定 Web3js 以在 Javascript 中使用以太坊區塊鏈](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– 在專案中設定 web3.js 的說明。_ -- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _ – 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。 diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/javascript/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/javascript/index.md" deleted file mode 100644 index f78e9eea38d..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/javascript/index.md" +++ /dev/null @@ -1,295 +0,0 @@ ---- -title: JavasScript API 圖書館 -description: JavaScript 用戶端程式庫簡介,可讓你從應用程式與區塊鏈進行互動。 -lang: zh-tw ---- - -為了使網路應用程式能夠與以太坊區塊鏈互動(即讀取區塊鏈資料和/或將交易傳送到網路),它必須連結到以太坊節點。 - -為了這個目的,每個以太坊用戶端需實作 [JSON-RPC](/developers/docs/apis/json-rpc/) 規範,如此一來,應用程式就可以使用一組統一的[方法](/developers/docs/apis/json-rpc/#json-rpc-methods)。 - -如果你想使用 JavaScript 與以太坊節點連結,可以使用普通 JavaScript,但生態系統中存在幾個便利的程式庫,讓連結變得更加容易。 借助這些程式庫,開發者可以編寫直覺的單行方法來初始化與以太坊互動的 JSON-RPC 請求(在後台)。 - -請注意,在[合併](/roadmap/merge/)後,如要運行節點,需要兩個互相連結的以太坊軟體:執行用戶端和共識用戶端。 請確定你的節點包含執行用戶端和共識用戶端。 如果你的節點不在本地機器上(比如你的節點在 AWS 執行個體上),請相應地修改教學中的 IP 位址。 更多資訊請見我們的[運行節點](/developers/docs/nodes-and-clients/run-a-node/)頁面。 - -## 基本資訊 {#prerequisites} - -除了瞭解 JavaScript 之外,瞭解<0>以太坊堆疊和<1>以太坊用戶端可能也會有所幫助。 - -## 為何使用資料圖書庫 {#why-use-a-library} - -函式庫簡化與以太坊節點的複雜步驟. 並提供其他效功能(例如: 轉化以太(ETH)到Gwei)使開發者花少時間處理以太坊客戶, 且花更多時間在提升應用程式獨特功能. - -## 程式庫功能 {#library-features} - -### 連結以太坊節點 {#connect-to-ethereum-nodes} - -使用提供者,這些程式庫讓你能夠連結到以太坊並讀取其資料,無論是透過 JSON-RPC、INFURA、Etherscan、Alchemy 還是 MetaMask。 - -**Ethers 範例** - -```js -// BrowserProvider 包裝了一個標準的 Web3 提供者 -// 這就是 MetaMask 注入到每個頁面中的 window.ethereum -const provider = new ethers.BrowserProvider(window.ethereum) - -// MetaMask 外掛程式也允許簽署交易 -// 以傳送以太幣並支付以改變區塊鏈中的狀態。 -//為此, 我們須帳戶簽署者 -const signer = provider.getSigner() -``` - -**Web3js 範例** - -```js -var web3 = new Web3("http://localhost:8545") -// 或 -var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) - -// 更改Provider -web3.setProvider("ws://localhost:8546") -// 或 -web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546")) - -// 使用 IPC provider 於 node.js -var net = require("net") -var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os path -// 或 -var web3 = new Web3( - new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net) -) // mac os 路徑 -// windows 路徑為: "\\\\.\\pipe\\geth.ipc" -// linux 路徑為: "/users/myuser/.ethereum/geth.ipc" -``` - -設定完成後,將能夠在區塊鏈查詢: - -- 區塊編碼 -- 燃料預估值 -- 智慧型合約活動 -- 網路 id -- 和更多相關內容... - -### 錢包功能 {#wallet-functionality} - -這些程式庫為你提供建立錢包、管理金鑰和簽署交易的功能。 - -下面是以太幣範例 - -```js -//由助記符(mnemonic) 創建錢包 -mnemonic = - "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol" -walletMnemonic = Wallet.fromPhrase(mnemonic) - -// ...或者從私鑰建立 -walletPrivateKey = new Wallet(walletMnemonic.privateKey) - -walletMnemonic.address === walletPrivateKey.address -// true - -// 根據簽署者應用程式介面取得地址(以 Promise 形式) -walletMnemonic.getAddress() -// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' } - -// 錢包地址也可以同步獲取 -walletMnemonic.address -// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' - -// 內部加密組件 -walletMnemonic.privateKey -// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db' -walletMnemonic.publicKey -// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64' - -// 錢包助記詞 -walletMnemonic.mnemonic -// { -// locale: 'en', -// path: 'm/44\'/60\'/0\'/0/0', -// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol' -// } - -// 注意:用私鑰建立的錢包 -// 沒有助記詞(因為衍生過程不支援) -walletPrivateKey.mnemonic -// null - -// 簽署訊息 -walletMnemonic.signMessage("Hello World") -// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' } - -tx = { - to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72", - value: utils.parseEther("1.0"), -} - -// 簽署交易 -walletMnemonic.signTransaction(tx) -// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' } - -// 連接方法返回一個新的連接到提供者的 -// 錢包執行個體, -wallet = walletMnemonic.connect(provider) - -// 查詢網路 -wallet.getBalance() -// { Promise: { BigNumber: "42" } } -wallet.getTransactionCount() -// { Promise: 0 } - -// 發送以太幣 -wallet.sendTransaction(tx) -``` - -[閱讀完整文檔](https://docs.ethers.io/v5/api/signer/#Wallet) - -設定完成後,你將能夠: - -- 建立帳戶 -- 傳送交易 -- 簽署交易 -- 和更多... - -### 與智慧型合約功能互動 {#interact-with-smart-contract-functions} - -JavaScript 用戶端程式庫讓你的應用程式能透過讀取編譯合約的應用程式二進位介面 (ABI) 呼叫智慧型合約函式。 - -應用程式二進位介面本質上以 JSON 格式解釋了合約的功能,並讓你能夠像使用普通 JavaScript 物件一樣使用合約。 - -以下為 Solidity 合約範例: - -```solidity -contract Test { - uint a; - address d = 0x12345678901234567890123456789012; - - function Test(uint testInt) { a = testInt;} - - event Event(uint indexed b, bytes32 c); - - event Event2(uint indexed b, bytes32 c); - - function foo(uint b, bytes32 c) returns(address) { - Event(b, c); - return d; - } -} -``` - -將產生以下 JSON: - -```json -[{ - "type":"constructor", - "payable":false, - "stateMutability":"nonpayable" - "inputs":[{"name":"testInt","type":"uint256"}], - },{ - "type":"function", - "name":"foo", - "constant":false, - "payable":false, - "stateMutability":"nonpayable", - "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}], - "outputs":[{"name":"","type":"address"}] - },{ - "type":"event", - "name":"Event", - "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}], - "anonymous":false - },{ - "type":"event", - "name":"Event2", - "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}], - "anonymous":false -}] -``` - -這意味著你可以: - -- 傳送交易至智慧型合約並執行其方法 -- 呼叫以預估在以太坊虛擬機中執行時方法將花費的燃料 -- 部署合約 -- 和更多... - -### 公用程式功能 {#utility-functions} - -公用程式功能提供了方便的捷徑,讓以太坊中的構建變得更加容易。 - -以太幣值預設以 Wei 為單位。 1 以太幣 = 1,000,000,000,000,000,000 WEI – 這意味著你正在處理大量數字! `web3.utils.toWei` 自動將以太幣轉換至 Wei。 - -在以太幣中,如下所示: - -```js -// 取得帳戶殘額(藉由地址或ENS名) -balance = await provider.getBalance("ethers.eth") -// { BigNumber: "2337132817842795605" } - -// 因用戶通常想看到以太(ETH)殘額, 通常開發者需 -// 顯示以太(ETH)殘額, 而不是Wei. -ethers.utils.formatEther(balance) -// '2.337132817842795605' -``` - -- [Web3js 公用程式功能](https://docs.web3js.org/api/web3-utils) -- [Ethers 公用程式功能](https://docs.ethers.io/v5/api/utils/) - -## 可用資料圖書庫 {#available-libraries} - -**Web3.js -** **_以太坊 JavaScript 應用程式介面。 _** - -- [文件](https://docs.web3js.org/) -- [Github](https://github.com/ethereum/web3.js/) - -**Ethers.js -** **_使用 JavaScript 和 TypeScript 的完整以太坊錢包實作和公用程式。 _** - -- [文件](https://docs.ethers.io/) -- [Github](https://github.com/ethers-io/ethers.js/) - -**The Graph -** **_用於為以太坊和星際檔案係統資料編製索引並使用 GraphQL 進行查詢的協議。_** - -- [The Graph](https://thegraph.com/) -- [Graph Explorer](https://thegraph.com/explorer/) -- [文件](https://thegraph.com/docs/) -- [Github](https://github.com/graphprotocol/) -- [Discord](https://thegraph.com/discord) - -**light.js ****_針對輕量用戶端最佳化的高階回應式 JS 程式庫。_** - -- [Github](https://github.com/openethereum/js-libs/tree/master/packages/light.js) - -**Web3-wrapper -** **_可替代 Web3.js 的 Typescript。_** - -- [文件](https://0x.org/docs/web3-wrapper#introduction) -- [Github](https://github.com/0xProject/0x-monorepo/tree/development/packages/web3-wrapper) - -**Alchemyweb3 -** **_具有自動重試和增強型應用程式介面的 Web3.js 包裝函式。_** - -- [文件](https://docs.alchemy.com/reference/api-overview) -- [Github](https://github.com/alchemyplatform/alchemy-web3) - -**Alchemy 非同質化代幣應用程式介面 -** **_用於擷取非同質化代幣資料的應用程式介面,包括所有權、中繼資料屬性以及更多。_** - -- [文件](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) -- [GitHub](https://github.com/alchemyplatform/alchemy-web3) - -**viem -** **_以太坊的 TypeScript 介面。_** - -- [文件](https://viem.sh) -- [GitHub](https://github.com/wagmi-dev/viem) - -## 衍生閱讀 {#further-reading} - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ - -## 相關主題 {#related-topics} - -- [節點和用戶端](/developers/docs/nodes-and-clients/) -- [開發架構](/developers/docs/frameworks/) - -## 相關教學影片 {#related-tutorials} - -- [設定 Web3js 以在 Javascript 中使用以太坊區塊鏈](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– 在專案中設定 web3.js 的說明。_ -- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _ – 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。 -- [使用 web3 和 Alchemy 傳送交易](/developers/tutorials/sending-transactions-using-web3-and-alchemy/)_ -- 從後端傳送交易的逐步演練。_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/json-rpc/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/json-rpc/index.md" deleted file mode 100644 index c22d564ca1c..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/apis/json-rpc/index.md" +++ /dev/null @@ -1,1771 +0,0 @@ ---- -title: JSON-RPC 應用程式介面 -description: 一種無狀態、輕量的以太坊用戶端遠端程序呼叫 (RPC) 協定。 -lang: zh-tw ---- - -為了讓軟體應用程式能夠和以太坊區塊鏈互動(例如:讀取區塊鏈資料,發送交易到網路),必須先連結以太坊節點。 - -為此,每個[以太坊用戶端](/developers/docs/nodes-and-clients/#execution-clients)都實作 [JSON-RPC 規範](https://github.com/ethereum/execution-apis),因此無論特定節點或用戶端實作如何,應用程式都可以依賴一組統一的方法。 - -[JSON-RPC](https://www.jsonrpc.org/specification) 是一種無狀態、輕量級的遠端程序呼叫 (RPC) 協定。 該協定定義了幾種資料結構及其處理規則。 它與傳輸無關,因為這些概念可以在同一進程中、透過通訊端、透過超文字傳輸協定或在許多不同的訊息傳遞環境中使用。 它使用 JSON (RFC 4627) 作為資料格式。 - -## 用戶端實作 {#client-implementations} - -每個以太坊用戶端在實作 JSON-RPC 規範時可能會使用不同的程式設計語言。 有關特定程式設計語言的更多詳細資料,請參閱各個[用戶端文件](/developers/docs/nodes-and-clients/#execution-clients)。 我們建議檢查每個用戶端的文件以取得最新的應用程式介面支援資訊。 - -## 便利程式庫 {#convenience-libraries} - -雖然可以選擇透過 JSON-RPC 應用程式介面直接與以太坊用戶端互動,但對於去中心化應用程式開發者來說通常有更簡單的選擇。 許多 [JavaScript](/developers/docs/apis/javascript/#available-libraries) 和[後端應用程式介面](/developers/docs/apis/backend/#available-libraries) 程式庫都是為了在 JSON-RPC 應用程式介面之上提供包裝函式。 借助這些程式庫,開發者可以用自己選擇的程式語言編寫直覺的單行方法,以初始化與以太坊互動的 JSON-RPC 請求(在後台)。 - -## 共識用戶端應用程式介面 {#consensus-clients} - -本頁面主要討論以太坊執行用戶端使用的 JSON-RPC 應用程式介面。 然而,共識用戶端也有一個遠端程序呼叫應用程式介面,讓使用者能夠直接從節點查詢有關節點的資訊、請求信標區塊、信標狀態和其他共識相關資訊。 [信標應用程式介面網頁](https://ethereum.github.io/beacon-APIs/#/)上記錄了此應用程式介面。 - -內部應用程式介面也用於節點內的用戶端間通訊 - 也就是說,它讓共識用戶端和執行用戶端能夠交換資料。 這被稱為「引擎應用程式介面」,其規範可在 [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) 上取得。 - -## 執行用戶端規範 {#spec} - -[在 GitHub 上閱讀完整的 JSON-RPC 應用程式介面規範](https://github.com/ethereum/execution-apis)。 此應用程式介面記錄在[執行應用程式介面網頁](https://ethereum.github.io/execution-apis/api-documentation/)上,並包含一個檢查器來嘗試所有可用的方法。 - -## 慣例 {#conventions} - -### 十六進位值編碼 {#hex-encoding} - -透過 JSON 傳遞兩種關鍵資料類型:未格式化的位元組陣列和數量。 兩者都以十六進位編碼傳遞,但對格式有不同的要求。 - -#### 數量 {#quantities-encoding} - -編碼數量(整數、數字)時:編碼為十六進位,前綴為「0x」,最緊湊的表示形式(輕微例外:零應表示為「0x0」)。 - -下面有些範例: - -- 0x41(在十進位中是 65) -- 0x400(在十進位中是 1024) -- 錯誤:0x(應始終至少有一位數字,零是「0x0」) -- 錯誤:0x0400(不允許有前導零) -- 錯誤:ff(必須有前綴 0x) - -### 無格式資料 {#unformatted-data-encoding} - -編碼無格式資料(位元組陣列、帳戶位址、雜湊值、位元組碼陣列)時:編碼為十六進位,前綴為「0x」,每個位元組兩個十六進位數字。 - -這裡有些範例: - -- 0x41(大小為 1,「A」) -- 0x004200(大小為 3,「0B0」) -- 0x(大小為 0,"") -- 錯誤:0xf0f0f(位數必須為偶數) -- 錯誤:004200(必須以 0x 為前綴) - -### 預設區塊參數 {#default-block} - -下列方法有一個額外的預設區塊參數: - -- [eth_getBalance](#eth_getbalance) -- [eth_getCode](#eth_getcode) -- [eth_getTransactionCount](#eth_gettransactioncount) -- [eth_getStorageAt](#eth_getstorageat) -- [eth_call](#eth_call) - -當發出對以太坊狀態進行動作的請求時,最後一個預設區塊參數決定了區塊的高度。 - -defaultBlock 參數可以使用以下選項: - -- `HEX String` - 表示整數區塊編號 -- `String "earliest"` 表示最早的/創世區塊 -- `String "latest"` - 表示最新提議的區塊 -- `String "safe"` - 表示最新安全的頭部區塊 -- `String "finalized"` - 表示最新最終確定的區塊 -- `String "pending"` - 表示未決的狀態/交易 - -## 範例 - -在此頁面上,我們提供了有關如何透過命令列工具 [curl](https://curl.se) 使用各 JSON_RPC 應用程式介面端點的範例。 這些單獨的端點範例位於下面的 [Curl 範例](#curl-examples)部分。 在頁面下方,我們還提供了一個使用 Geth 節點、JSON_RPC 應用程式介面和 curl 來編譯和部署智慧型合約的[端到端範例](#usage-example)。 - -## Curl 範例 {#curl-examples} - -下面提供了使用 JSON_RPC 應用程式介面向以太坊節點發出 [curl](https://curl.se) 請求的範例。 每個範例包含對特定端點的描述、其參數、傳回類型,以及應該如何使用的可行範例。 - -curl 請求可能會傳回與內容類型相關的錯誤訊息。 這是因為 `--data` 選項將內容類型設定為 `application/x-www-form-urlencoded`。 如果你的節點確實抱怨這一點,請手動在呼叫程式開始處放置 `-H "Content-Type: application/json"` 來設定標頭。 這些範例也不包括 URL/IP 和通訊埠組合,該組合必須是給 curl 的最後一個引數(例如 `127.0.0.1:8545`)。 完整的 curl 請求包含採用以下形式的附加資料: - -```shell -curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 -``` - -## Gossip、State、History {#gossip-state-history} - -少數重要的 JSON-RPC 方法需要來自以太坊網路的資料,這些資料分屬於三個種類:<0>Gossip、State 和 History。 利用這些章節中的連結移動至每個方法,或利用目錄探索完整的方法清單。 - -### Gossip 方法 {#gossip-methods} - -> 這些方法用於追蹤鏈頭。 這就是交易如何在網路中傳播、進入區塊以及用戶端如何發現新區塊的方式。 - -- [eth_blockNumber](#eth_blocknumber) -- [eth_sendRawTransaction](#eth_sendrawtransaction) - -### State 方法 {#state_methods} - -> 報告所有已存儲資料的目前狀態的方法。 「狀態」像是一大塊可分享的隨機存取記憶體,包含帳戶餘額、合約資料和燃料預估。 - -- [eth_getBalance](#eth_getbalance) -- [eth_getStorageAt](#eth_getstorageat) -- [eth_getTransactionCount](#eth_gettransactioncount) -- [eth_getCode](#eth_getcode) -- [eth_call](#eth_call) -- [eth_estimateGas](#eth_estimategas) - -### History 方法 {#history_methods} - -> 取得包括創世區塊在內的每一區塊的歷史記錄。 這像一個大型只能附加資料的檔案,包括所有區塊頭、區塊體、叔塊和交易收據。 - -- [eth_getBlockTransactionCountByHash](#eth_getblocktransactioncountbyhash) -- [eth_getBlockTransactionCountByNumber](#eth_getblocktransactioncountbynumber) -- [eth_getUncleCountByBlockHash](#eth_getunclecountbyblockhash) -- [eth_getUncleCountByBlockNumber](#eth_getunclecountbyblocknumber) -- [eth_getBlockByHash](#eth_getblockbyhash) -- [eth_getBlockByNumber](#eth_getblockbynumber) -- [eth_getTransactionByHash](#eth_gettransactionbyhash) -- [eth_getTransactionByBlockHashAndIndex](#eth_gettransactionbyblockhashandindex) -- [eth_getTransactionByBlockNumberAndIndex](#eth_gettransactionbyblocknumberandindex) -- [eth_getTransactionReceipt](#eth_gettransactionreceipt) -- [eth_getUncleByBlockHashAndIndex](#eth_getunclebyblockhashandindex) -- [eth_getUncleByBlockNumberAndIndex](#eth_getunclebyblocknumberandindex) - -## JSON-RPC 應用程式介面訓練場 - -你可以使用[訓練場工具](https://ethereum-json-rpc.com)去發掘和試用應用程式介面方法。 訓練場也顯示不同的節點提供者支援的方法和網路。 - -## JSON-RPC 應用程式介面方法 {#json-rpc-methods} - -### web3_clientVersion {#web3_clientversion} - -傳回目前用戶端版本。 - -**參數** - -無 - -**傳回** - -`String` - 目前用戶端版本 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' -// Result -{ - "id":67, - "jsonrpc":"2.0", - "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1" -} -``` - -### web3_sha3 {#web3_sha3} - -傳回給定資料的 Keccak-256(_不是_ 標準化的 SHA3-256)。 - -**參數** - -1. `DATA` - 要轉換為 SHA3 雜湊值的資料 - -```js -params: ["0x68656c6c6f20776f726c64"] -``` - -**返回** - -`DATA` - 給定字串的 SHA3 結果。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' -// Result -{ - "id":64, - "jsonrpc": "2.0", - "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" -} -``` - -### net_version {#net_version} - -傳回目前網路 ID。 - -**參數** - -無 - -**返回** - -`String` - 目前網路 ID。 - -目前網路 ID 的完整清單可在 [chainlist.org](https://chainlist.org) 上找到。 一些常用的如下: - -- `1`:以太坊主網 -- `5`:Goerli 測試網 -- `11155111`:Sepolia 測試網 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' -// Result -{ - "id":67, - "jsonrpc": "2.0", - "result": "3" -} -``` - -### net_listening {#net_listening} - -如果用戶端正在主動偵聽網路連結,則傳回 `true`。 - -**參數** - -無 - -**返回** - -`Boolean` - 偵聽時為 `true`,否則為 `false`。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' -// Result -{ - "id":67, - "jsonrpc":"2.0", - "result":true -} -``` - -### net_peerCount {#net_peercount} - -傳回目前連線到用戶端的對等點數量。 - -**參數** - -無 - -**返回** - -`QUANTITY` - 表示連結的對等點數量的整數。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' -// Result -{ - "id":74, - "jsonrpc": "2.0", - "result": "0x2" // 2 -} -``` - -### eth_protocolVersion {#eth_protocolversion} - -傳回目前的以太坊協定版本。 請注意此方法[在 Geth 中不可用](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924)。 - -**參數** - -無 - -**返回** - -`String` - 目前的以太坊協定版本 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' -// Result -{ - "id":67, - "jsonrpc": "2.0", - "result": "54" -} -``` - -### eth_syncing {#eth_syncing} - -傳回一個物件,其中包含有關同步狀態的資料或傳回 `false`。 - -**參數** - -無 - -**返回** - -準確的傳回資料因用戶端實作而異。 當節點未同步時,所有用戶端傳回 `False`,並且所有用戶端傳回下列欄位。 - -`Object|Boolean`,具有同步狀態資料的物件,或不同步時為 `FALSE`: - -- `startingBlock`: `QUANTITY` - 匯入之開始區塊(僅在同步到達其頭部後才會重設) -- `currentBlock`: `QUANTITY` - 目前區塊,與 eth_blockNumber 相同 -- `highestBlock`: `QUANTITY` - 估計的最高區塊 - -然而,個別用戶端也可以提供額外的資料。 例如 Geth 傳回如下資料: - -```json -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "currentBlock": "0x3cf522", - "healedBytecodeBytes": "0x0", - "healedBytecodes": "0x0", - "healedTrienodes": "0x0", - "healingBytecode": "0x0", - "healingTrienodes": "0x0", - "highestBlock": "0x3e0e41", - "startingBlock": "0x3cbed5", - "syncedAccountBytes": "0x0", - "syncedAccounts": "0x0", - "syncedBytecodeBytes": "0x0", - "syncedBytecodes": "0x0", - "syncedStorage": "0x0", - "syncedStorageBytes": "0x0" - } -} -``` - -而 Besu 傳回: - -```json -{ - "jsonrpc": "2.0", - "id": 51, - "result": { - "startingBlock": "0x0", - "currentBlock": "0x1518", - "highestBlock": "0x9567a3", - "pulledStates": "0x203ca", - "knownStates": "0x200636" - } -} -``` - -請參閱特定用戶端的文檔以獲得更多詳細資料。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": { - startingBlock: '0x384', - currentBlock: '0x386', - highestBlock: '0x454' - } -} -// Or when not syncing -{ - "id":1, - "jsonrpc": "2.0", - "result": false -} -``` - -### eth_coinbase {#eth_coinbase} - -傳回用戶端的 coinbase 地址。 - -**參數** - -無 - -**傳回** - -`DATA`,20 位元組 - 目前 coinbase 地址。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' -// Result -{ - "id":64, - "jsonrpc": "2.0", - "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1" -} -``` - -### eth_chainId {#eth_chainId} - -傳回用來簽署重新執行攻擊保護交易的區塊鏈 ID。 - -**參數** - -無 - -**傳回** - -`chainId`,十六進位數值字串,表示目前區塊鏈 ID 的整數值。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' -// Result -{ - "id":67, - "jsonrpc": "2.0", - "result": "0x1" -} -``` - -### eth_mining {#eth_mining} - -如果用戶端正活躍地開採新區塊,則傳回 `true`。 這方法只對工作量證明網路傳回 `true` 且自[合併](/roadmap/merge/)後這方法不可用在某些用戶端。 - -**參數** - -無 - -**傳回** - -`Boolean` - 如果用戶端正在挖礦,則傳回 `true`,否則傳回 `false`。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' -// -{ - "id":71, - "jsonrpc": "2.0", - "result": true -} -``` - -### eth_hashrate {#eth_hashrate} - -傳回正在挖礦的節點每秒的雜湊值數量。 這方法只對工作量證明網路傳回 `true` 且自[合併](/roadmap/merge/)後這方法不可用在某些用戶端。 - -**參數** - -無 - -**傳回** - -`QUANTITY` - 每秒的雜湊數。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' -// Result -{ - "id":71, - "jsonrpc": "2.0", - "result": "0x38a" -} -``` - -### eth_gasPrice {#eth_gasprice} - -傳回預估的目前燃料價格,以 wei 為單位。 例如:Besu 用戶端檢查最後面 100 個區塊並預設傳回燃料單價中位數。 - -**參數** - -無 - -**傳回** - -`QUANTITY` - 表示目前燃料價格的整數,以 wei 為單位。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' -// Result -{ - "id":73, - "jsonrpc": "2.0", - "result": "0x1dfd14000" // 8049999872 Wei -} -``` - -### eth_accounts {#eth_accounts} - -傳回用戶端擁有的地址清單。 - -**參數** - -無 - -**傳回** - -`Array of DATA`,20 位元組 - 用戶端擁有的地址。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] -} -``` - -### eth_blockNumber {#eth_blocknumber} - -傳回最近的區塊編號。 - -**參數** - -無 - -**傳回** - -`QUANTITY` - 表示用戶端目前所在區塊編號的整數。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' -// Result -{ - "id":83, - "jsonrpc": "2.0", - "result": "0x4b7" // 1207 -} -``` - -### eth_getBalance {#eth_getbalance} - -傳回給定地址的帳戶餘額。 - -**參數** - -1. `DATA`,20 位元組 - 要檢查餘額的地址。 -2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) - -```js -params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] -``` - -**傳回** - -`QUANTITY` - 表示目前餘額的整數,以 wei 為單位。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x0234c8a3397aab58" // 158972490234375000 -} -``` - -### eth_getStorageAt {#eth_getstorageat} - -從給定地址的存儲位置傳回值。 - -**參數** - -1. `DATA`,20 位元組 - 存儲地址。 -2. `QUANTITY` - 表示存儲中的位置的整數。 -3. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"`、`"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) - -**傳回** - -`DATA` - 此存儲位置的值。 - -**範例** 正確的位置計算取決於要擷取的存儲。 考慮透過地址 `0x391694e7e0b0cce554cb130d723a9d27458f9298` 部署在 `0x295a70b2de5e3953354a6a8344e616ed314d7251` 的以下合約。 - -``` -contract Storage { - uint pos0; - mapping(address => uint) pos1; - function Storage() { - pos0 = 1234; - pos1[msg.sender] = 5678; - } -} -``` - -擷取 pos0 的值很簡單。 - -```js -curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 -{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} -``` - -擷取對應的元素較困難。 對應中元素位置是依照下列方式計算的: - -```js -keccak(LeftPad32(key, 0), LeftPad32(map position, 0)) -``` - -這意味著要擷取 pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] 處的存儲,我們需要以下列方式計算位置: - -```js -keccak( - decodeHex( - "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + - "0000000000000000000000000000000000000000000000000000000000000001" - ) -) -``` - -可以使用 web3 程式庫的 Geth 控制台進行計算: - -```js -> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" -undefined -> web3.sha3(key, {"encoding": "hex"}) -"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" -``` - -現在擷取存儲: - -```js -curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 -{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} -``` - -### eth_getTransactionCount {#eth_gettransactioncount} - -傳回從一個地址_發送_的交易數量。 - -**參數** - -1. `DATA`,20 位元組 - 地址。 -2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) - -```js -params: [ - "0x407d73d8a49eeb85d32cf465507dd71d507100c1", - "latest", // state at the latest block -] -``` - -**傳回** - -`QUANTITY` - 表示從該地址發送的交易數量的整數。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x1" // 1 -} -``` - -### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} - -傳回區塊中從符合給定區塊雜湊值的交易數量。 - -**參數** - -1. `DATA`,32 位元組 - 區塊的雜湊值 - -```js -params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] -``` - -**傳回** - -`QUANTITY` - 表示該區塊中交易數量的整數。 - -**範例** - -```js -// 請求 -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}' -// 結果 -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x8b" // 139 -} -``` - -### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} - -傳回與給定區塊編號相符的區塊中的交易數量。 - -**參數** - -1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 - -```js -params: [ - "0x13738ca", // 20396234 -] -``` - -**傳回** - -`QUANTITY` - 表示該區塊中交易數量的整數。 - -**範例** - -```js -// 請求 -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}' -// 結果 -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x8b" // 139 -} -``` - -### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} - -傳回區塊中符合給定區塊雜湊值的叔塊數量。 - -**參數** - -1. `DATA`,32 位元組 - 區塊的雜湊值 - -```js -params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] -``` - -**傳回** - -`QUANTITY` - 表示該區塊中叔塊數量的整數。 - -**範例** - -```js -// 請求 -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}' -// 結果 -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x1" // 1 -} -``` - -### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} - -傳回區塊中符合給定區塊編號的叔塊數量。 - -**參數** - -1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) - -```js -params: [ - "0xe8", // 232 -] -``` - -**傳回** - -`QUANTITY` - 表示該區塊中叔塊數量的整數。 - -**範例** - -```js -// 請求 -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' -// 結果 -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x0" // 0 -} -``` - -### eth_getCode {#eth_getcode} - -傳回給定地址的程式碼。 - -**參數** - -1. `DATA`,20 位元組 - 地址 -2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) - -```js -params: [ - "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - "0x5daf3b", // 6139707 -] -``` - -**傳回** - -`DATA` - 來自給定地址的程式碼。 - -**範例** - -```js -// 請求 -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}' -// 結果 -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029" -} -``` - -### eth_sign {#eth_sign} - -Sign 方法按以下方式計算以太坊特定簽章:`sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`。 - -透過在訊息中加入前綴,可以將計算出的簽章識別為以太坊特定簽章。 這可以防止濫用,即惡意去中心化應用程式簽署任意資料(例如交易)並使用簽章來冒充受害者。 - -注意:要簽章的地址必須解鎖。 - -**參數** - -1. `DATA`,20 位元組 - 地址 -2. `DATA`,N 位元組 - 要簽署的訊息。 - -**傳回** - -`DATA`:簽章 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" -} -``` - -### eth_signTransaction {#eth_signtransaction} - -簽署交易,稍後可使用 [eth_sendRawTransaction](#eth_sendrawtransaction) 將交易提交到網路。 - -**參數** - -1. `Object` - 交易物件 - -- `type`: -- `from`: `DATA`,20 位元組 - 發送交易的地址。 -- `to`: `DATA` 20 位元組 -(建立新合約時可選)交易指向的地址。 -- `gas`: `QUANTITY` -(可選,預設:90000)表示為交易執行提供的燃料的整數。 將傳回未使用的燃料。 -- `gasPrice`: `QUANTITY` -(可選,預設:尚未決定)表示每次支付燃料時的燃料價格的整數(單位為 Wei)。 -- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數(單位為 Wei)。 -- `data`: `DATA` - 合約的編譯程式碼,或叫用的方法簽章和編碼參數的雜湊。 -- `nonce`: `QUANTITY` -(可選)表示隨機數的整數。 這允許覆寫你自己的使用相同隨機數的待處理交易。 - -**傳回** - -`DATA`,特定帳戶簽署的遞迴長度前綴編碼的交易物件。 - -**範例** - -```js -// Request -curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' -// Result -{ - "id": 1, - "jsonrpc": "2.0", - "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" -} -``` - -### eth_sendTransaction {#eth_sendtransaction} - -如果資料欄位包含程式碼,則建立新的訊息呼叫交易或建立合約,並使用 `from` 中指定的帳戶對其進行簽署。 - -**參數** - -1. `Object` - 交易物件 - -- `from`: `DATA`,20 位元組 - 發送交易的地址。 -- `to`: `DATA` 20 位元組 -(建立新合約時可選)交易指向的地址。 -- `gas`: `QUANTITY` -(可選,預設:90000)表示為交易執行提供的燃料的整數。 將傳回未使用的燃料。 -- `gasPrice`: `QUANTITY` -(可選,預設:尚未決定)表示每次支付燃料時的燃料價格的整數。 -- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數。 -- `input`: `DATA` - 合約的編譯程式碼,或叫用的方法簽章和編碼參數的雜湊值。 -- `nonce`: `QUANTITY` -(可選)表示隨機數的整數。 這允許覆寫你自己的使用相同隨機數的待處理交易。 - -```js -params: [ - { - from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", - to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", - gas: "0x76c0", // 30400 - gasPrice: "0x9184e72a000", // 10000000000000 - value: "0x9184e72a", // 2441406250 - input: - "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", - }, -] -``` - -**傳回** - -`DATA`,32 位元組 - 交易雜湊值,如果交易尚未可用則為零雜湊值。 - -建立合約時,在區塊中提議交易後,使用 [eth_getTransactionReceipt](#eth_gettransactionreceipt) 取得合約地址。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" -} -``` - -### eth_sendRawTransaction {#eth_sendrawtransaction} - -建立新的訊息呼叫交易或為簽署的交易建立合約。 - -**參數** - -1. `DATA`,簽署的交易資料。 - -```js -params: [ - "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", -] -``` - -**傳回** - -`DATA`,32 位元組 - 交易雜湊值,如果交易尚未可用則為零雜湊值。 - -建立合約時,在區塊中提議交易後,使用 [eth_getTransactionReceipt](#eth_gettransactionreceipt) 取得合約地址。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" -} -``` - -### eth_call {#eth_call} - -立即執行一個新的訊息呼叫,但不在區塊鏈上建立交易。 通常用於執行唯讀智慧型合約函式,例如 ERC-20 合約的 ` balanceOf`。 - -**參數** - -1. `Object` - 交易呼叫物件 - -- `from`: `DATA`,20 位元組 -(可選)發送交易的地址。 -- `to`: `DATA`,20 位元組 - 交易指向的地址。 -- `gas`: `QUANTITY` -(可選)表示為交易執行提供的燃料的整數。 eth_call 消耗零燃料,但某些執行可能需要此參數。 -- `gasPrice`: `QUANTITY` -(可選)表示每次支付燃料時的燃料價格的整數 -- `value`: `QUANTITY` -(可選)表示與此交易一起傳送的值的整數 -- `input`: `DATA` -(可選)方法簽章和編碼參數的雜湊值。 詳細資料請參考 [Solidity 文檔中的以太坊合約應用程式二進位介面](https://docs.soliditylang.org/en/latest/abi-spec.html)。 - -2. `QUANTITY|TAG` - 整數區塊編號,或字串 `"latest"`、`"earliest"`、`"pending"`、`"safe"` 或 `"finalized"`,請參閱[預設區塊參數](/developers/docs/apis/json-rpc/#default-block) - -**傳回** - -`DATA` - 已執行合約的傳回值。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x" -} -``` - -### eth_estimateGas {#eth_estimategas} - -產生和傳回完成交易所必需的燃料量預估值。 交易將不會新增至區塊鏈。 請注意,由於以太坊虛擬機機制和節點效能等種種原因,預估值可能明顯地大於交易實際使用的燃料量。 - -**參數** - -請參閱 <0>eth_call 參數,但所有屬性都是可選的。 假如沒有明確說明燃料限制,Geth 將使用來自待處理區塊的區塊燃料限制作為上限。 因此,當燃料量高於待處理區塊燃料限制時,傳回的預估值可能不足以執行呼叫或交易。 - -**傳回** - -`QUANTITY` - 使用的燃料數量。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x5208" // 21000 -} -``` - -### eth_getBlockByHash {#eth_getblockbyhash} - -根據雜湊值傳回區塊資訊。 - -**參數** - -1. `DATA`,32 位元組 - 區塊的雜湊值。 -2. `Boolean` - 如果為 `true`,傳回完整交易物件,如果為 `false`,只傳回交易的雜湊值。 - -```js -params: [ - "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", - false, -] -``` - -**傳回** - -`Object` - 區塊物件,或如果未找到區塊,則為 `null`: - -- `number`: `QUANTITY` - 區塊編號。 當為待處理區塊時,為 `null`。 -- `hash`: `DATA`,32 位元組 - 區塊的雜湊值。 當為待處理區塊時,為 `null`。 -- `parentHash`: `DATA`,32 位元組 - 父區塊的雜湊值。 -- `nonce`: `DATA`,8 位元組 - 產生的工作量證明的雜湊值。 當為待處理區塊時,為 `null`。 -- `sha3Uncles`: `DATA`,32 位元組 - 區塊中叔塊資料的第三代安全雜湊演算法。 -- `logsBloom`: `DATA`,256 位元組 - 區塊日誌的布隆篩選器。 當為待處理區塊時,為 `null`。 -- `transactionsRoot`: `DATA`,32 位元組 - 區塊交易樹的根。 -- `stateRoot`: `DATA`,32 位元組 - 區塊最終狀態樹的根。 -- `receiptsRoot`: `DATA`,32 位元組 - 區塊收據樹的根。 -- `miner`: `DATA`,20 位元組 - 挖礦獎勵受款人的地址。 -- `difficulty`: `QUANTITY` - 表示區塊難度的整數。 -- `totalDifficulty`: `QUANTITY` - 表示此區塊前的區塊鏈的總難度的整數。 -- `extraData`: `DATA` - 該區塊的「額外資料」欄位。 -- `size`: `QUANTITY` - 表示此區塊大小的整數,以位元組為單位。 -- `gasLimit`: `QUANTITY` - 此區塊允許的最大燃料量。 -- `gasUsed`: `QUANTITY` - 此區塊所有交易所使用的總燃料量。 -- `timestamp`: `QUANTITY` - 整理區塊時的 unix 時間戳。 -- `transactions`: `Array` - 交易物件陣列,或是 32 位元組交易雜湊值,取決於最後一個給定的參數。 -- `uncles`: `Array` - 叔塊雜湊值陣列。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' -// Result -{ -{ -"jsonrpc": "2.0", -"id": 1, -"result": { - "difficulty": "0x4ea3f27bc", - "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32", - "gasLimit": "0x1388", - "gasUsed": "0x0", - "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171", - "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843", - "nonce": "0x689056015818adbe", - "number": "0x1b4", - "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - "size": "0x220", - "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d", - "timestamp": "0x55ba467c", - "totalDifficulty": "0x78ed983323d", - "transactions": [ - ], - "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "uncles": [ - ] -} -} -``` - -### eth_getBlockByNumber {#eth_getblockbynumber} - -根據區塊編號傳回關於區塊的資訊。 - -**參數** - -1. `QUANTITY|TAG` - 整數區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 -2. `Boolean` - 如果為 `true`,傳回完整交易物件,如果為 `false`,只傳回交易的雜湊值。 - -```js -params: [ - "0x1b4", // 436 - true, -] -``` - -**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' -``` - -結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) - -### eth_getTransactionByHash {#eth_gettransactionbyhash} - -傳回有關按交易雜湊值請求的交易的資訊。 - -**參數** - -1. `DATA`,32 位元組 - 交易的雜湊值 - -```js -params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] -``` - -**傳回** - -`Object` - 交易物件,或當找不到交易時為 `null`: - -- `blockHash`: `DATA`,32 位元組 - 此交易所在區塊的雜湊值。 當為待處理時,為 `null`。 -- `blockNumber`: `QUANTITY` - 此交易所在的區塊編號。 當為待處理時,為 `null`。 -- `from`: `DATA`,20 位元組 - 發送者的地址。 -- `gas`: `QUANTITY` - 發送者提供的燃料。 -- `gasPrice`: `QUANTITY` - 發送者提供的燃料價格,以 Wei 為單位。 -- `hash`: `DATA`,32 位元組 - 交易的雜湊值。 -- `input`: `DATA` - 隨交易一起傳送的資料。 -- `nonce`: `QUANTITY` - 發送者在這之前所進行的交易數量。 -- `to`: `DATA`,20 位元組 - 接收者的地址。 如果是合約建立交易,則為 `null`。 -- `transactionIndex`: `QUANTITY` - 表示區塊中交易索引位置的整數。 當為待處理時,為 `null`。 -- `value`: `QUANTITY` - 傳輸的值,以 Wei 為單位。 -- `v`: `QUANTITY` - 橢圓曲線數位簽章演算法復原 ID -- `r`: `QUANTITY` - 橢圓曲線數位簽章演算法簽章 r -- `s`: `QUANTITY` - 橢圓曲線數位簽章演算法簽章 s - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' -// Result -{ - "jsonrpc":"2.0", - "id":1, - "result":{ - "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", - "blockNumber":"0x5daf3b", // 6139707 - "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d", - "gas":"0xc350", // 50000 - "gasPrice":"0x4a817c800", // 20000000000 - "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", - "input":"0x68656c6c6f21", - "nonce":"0x15", // 21 - "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb", - "transactionIndex":"0x41", // 65 - "value":"0xf3dbb76162000", // 4290000000000000 - "v":"0x25", // 37 - "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", - "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" - } -} -``` - -### eth_getTransactionByBlockHashAndIndex {#eth_gettransactionbyblockhashandindex} - -按區塊雜湊值和交易索引位置傳回有關交易的資訊。 - -**參數** - -1. `DATA`,32 位元組 - 區塊的雜湊值。 -2. `QUANTITY` - 表示交易索引位置的整數。 - -```js -params: [ - "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", - "0x0", // 0 -] -``` - -**傳回** 請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) - -**範例** - -```js -// 請求 -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' -``` - -結果請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) - -### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} - -按區塊編號和交易索引位置傳回有關交易的資訊。 - -**參數** - -1. `QUANTITY|TAG` - 區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 -2. `QUANTITY` - 交易索引位置。 - -```js -params: [ - "0x9c47cf", // 10241999 - "0x24", // 36 -] -``` - -**傳回** 請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' -``` - -結果請參閱 [eth_getTransactionByHash](#eth_gettransactionbyhash) - -### eth_getTransactionReceipt {#eth_gettransactionreceipt} - -按交易雜湊值返回交易的收據。 - -**注意**待處理交易沒有收據。 - -**參數** - -1. `DATA`,32 位元組 - 交易的雜湊值 - -```js -params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] -``` - -**傳回** `Object` - 交易收據物件,或當找不到收據時為 `null`: - -- `transactionHash`: `DATA`,32 位元組 - 交易的雜湊值。 -- `transactionIndex`: `QUANTITY` - 表示區塊中交易索引位置的整數。 -- `blockHash`: `DATA`,32 位元組 - 此交易所在區塊的雜湊值。 -- `blockNumber`: `QUANTITY` - 此交易所在的區塊編號。 -- `from`: `DATA`,20 位元組 - 發送者的地址。 -- `to`: `DATA`,20 位元組 - 接收者的地址。 如果是合約建立交易,則為 null。 -- `cumulativeGasUsed`: `QUANTITY` - 當區塊執行此交易時所使用的總燃料量。 -- `effectiveGasPrice`: `QUANTITY` - 每單位燃料支付的基本費用和小費的總和。 -- `gasUsed`: `QUANTITY` - 僅此特定交易所使用的燃料量。 -- `contractAddress`: `DATA`,20 位元組 - 如果交易為建立合約,則為建立的合約地址,否則為 `null`。 -- `logs`: `Array` - 此交易產生的日誌物件陣列。 -- `logsBloom`: `DATA`,256 位元組 - 給輕量用戶端快速擷取相關日誌的布隆篩選器。 -- `type`: `QUANTITY` - 表示交易類型的整數,`0x0` 表示傳統交易,`0x1` 表示存取清單類型, `0x2` 表示動態費用。 - -它也傳回 _以下兩者之一_: - -- `root` : `DATA` 32 位元組的交易後狀態根(拜占庭升級之前) -- `status`: `QUANTITY` 要麼 `1`(成功)要麼 `0`(失敗) - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' -// Result -{ - "jsonrpc": "2.0", - "id": 1, - "result": { - "blockHash": - "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", - "blockNumber": "0xeff35f", - "contractAddress": null, // string of the address if it was created - "cumulativeGasUsed": "0xa12515", - "effectiveGasPrice": "0x5a9c688d4", - "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", - "gasUsed": "0xb4c8", - "logs": [{ - // logs as returned by getFilterLogs, etc. - }], - "logsBloom": "0x00...0", // 256 byte bloom filter - "status": "0x1", - "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "transactionHash": - "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5", - "transactionIndex": "0x66", - "type": "0x2" - } -} -``` - -### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} - -按雜湊值和叔塊索引位置傳回關於區塊的叔塊資訊。 - -**參數** - -1. `DATA`,32 位元組 - 區塊的雜湊值。 -2. `QUANTITY` - 叔塊的索引位置。 - -```js -params: [ - "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", - "0x0", // 0 -] -``` - -**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) - -**範例** - -```js -// 請求 -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' -``` - -結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) - -**注意**:叔塊不包含單獨交易。 - -### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} - -按編號和叔塊索引位置傳回關於區塊的叔塊資訊。 - -**參數** - -1. `QUANTITY|TAG` - 區塊編號,或字串 `"earliest"`、`"latest"`、`"pending"`、`"safe"` 或 `"finalized"`,如[預設區塊參數](/developers/docs/apis/json-rpc/#default-block)所示。 -2. `QUANTITY` - 叔塊的索引位置。 - -```js -params: [ - "0x29c", // 668 - "0x0", // 0 -] -``` - -**傳回** 請參與 [eth_getBlockByHash](#eth_getblockbyhash) - -**注意**:叔塊不包含單獨交易。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' -``` - -結果請參閱 [eth_getBlockByHash](#eth_getblockbyhash) - -### eth_newFilter {#eth_newfilter} - -根據篩選條件選項建立一個篩選條件物件,以在狀態改變時發出通知(日誌)。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 - -**關於指定主題篩選條件的說明:** 主題跟順序相關。 以下主題篩選條件將匹配日誌中包含主題 [A, B] 的交易: - -- `[]`「任意值」 -- `[A]`「第一個位置為 A(其後為任意值)」 -- `[null, B]`「第一位置為任意值,且第二位置為 B(其後為任意值)」 -- `[A, B]`「第一位置為 A,且第二位置為 B(其後為任意值)」 -- `[[A, B], [A, B]]`「第一位置為(A 或 B)且第二位置為(A 或 B)(其後為任意值)」 -- **參數** - -1. `Object` - 篩選條件選項: - -- `fromBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 -- `toBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 -- `address`: `DATA|Array`,20 位元組 - (可選)合約地址或日誌起源的地址清單。 -- `topics`: `Array of DATA`,(可選)32 位元組陣列 `DATA` 主題。 主題與順序相關。 每個主題也可以為帶有「或」選項的 DATA 陣列。 - -```js -params: [ - { - fromBlock: "0x1", - toBlock: "0x2", - address: "0x8888f1f195afa192cfee860698584c030f4c9db1", - topics: [ - "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", - null, - [ - "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", - "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc", - ], - ], - }, -] -``` - -**傳回** `QUANTITY` - 篩選條件 ID。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x1" // 1 -} -``` - -### eth_newBlockFilter {#eth_newblockfilter} - -在節點中建立一個篩選條件,以在新區塊到達時發出通知。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 - -**參數** 無 - -**傳回** `QUANTITY` - 篩選條件 ID。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x1" // 1 -} -``` - -### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} - -在節點中建立一個篩選條件,以在新的待處理交易到達時發出通知。 檢查狀態是否改變,呼叫 [eth_getFilterChanges](#eth_getfilterchanges)。 - -**參數** 無 - -**傳回** `QUANTITY` - 篩選條件 ID。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": "0x1" // 1 -} -``` - -### eth_uninstallFilter {#eth_uninstallfilter} - -根據給定 ID 解除安裝篩選條件。 當不再需要監視時,應始終對其進行呼叫。 另外,當在一段時間內未使用 [eth_getFilterChanges](#eth_getfilterchanges) 請求篩選條件時,篩選條件會逾時。 - -**參數** - -1. `QUANTITY` - 篩選條件 ID。 - -```js -params: [ - "0xb", // 11 -] -``` - -**傳回** `Boolean` - 如果成功解除安裝篩選條件,則為 `true`,否則為 `false`。 - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' -// Result -{ - "id":1, - "jsonrpc": "2.0", - "result": true -} -``` - -### eth_getFilterChanges {#eth_getfilterchanges} - -篩選條件輪詢方法,傳回自從上次輪詢後產生的日誌陣列。 - -**參數** - -1. `QUANTITY` - 篩選條件 ID。 - -```js -params: [ - "0x16", // 22 -] -``` - -**傳回** `Array` - 日誌物件陣列,或如果自上次輪詢沒有任何變更,則為空陣列。 - -- 對於使用 `eth_newBlockFilter` 建立的篩選條件,傳回值是區塊雜湊值(`DATA`,32 位元組),例如 `["0x3454645634534..."]`。 -- 對於使用 `eth_newPendingTransactionFilter` 建立的篩選條件,傳回值是交易雜湊值(`DATA`,32 位元組),例如 `["0x6345343454645..."]`。 -- 對於使用 `eth_newFilter` 建立的篩選條件,日誌是包含下列參數的物件: - - `removed`: `TAG` - 當日誌由於鏈重組被移除時,為 `true`。 如果是有效日誌,則為 `false`。 - - `logIndex`: `QUANTITY` - 表示區塊內日誌索引位置的整數。 當為待處理日誌時,為 `null`。 - - `transactionIndex`: `QUANTITY` - 表示從中建立日誌的交易索引位置的整數。 當為待處理日誌時,為 `null`。 - - `transactionHash`: `DATA`,32 位元組 - 從中建立此日誌的交易的雜湊值。 當為待處理日誌時,為 `null`。 - - `blockHash`: `DATA`,32 位元組 - 此日誌所在區塊的雜湊值。 當為待處理時,為 `null`。 當為待處理日誌時,為 `null`。 - - `blockNumber`: `QUANTITY` - 此日誌所在的區塊編號。 當為待處理時,為 `null`。 當為待處理日誌時,為 `null`。 - - `address`: `DATA`,20 位元組 -此日誌的來源地址。 - - `data`: `DATA` - 包含零個或多個 32 位元組非索引日誌引數。 - - `topics`: `Array of DATA` - 索引日誌引數的 0 到 4 個 32 位元組 `DATA` 陣列。 (在 _solidity_:第一個主題是事件簽章的_雜湊值_(例如 `Deposit(address,bytes32,uint256)`),除非你使用說明符 `anonymous` 宣告了該事件)。 -- **範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' -// Result -{ - "id":1, - "jsonrpc":"2.0", - "result": [{ - "logIndex": "0x1", // 1 - "blockNumber":"0x1b4", // 436 - "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d", - "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf", - "transactionIndex": "0x0", // 0 - "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d", - "data":"0x0000000000000000000000000000000000000000000000000000000000000000", - "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"] - },{ - ... - }] -} -``` - -### eth_getFilterLogs {#eth_getfilterlogs} - -傳回與給定 ID 之篩選條件相符的所有日誌的陣列。 - -**參數** - -1. `QUANTITY` - 篩選條件 ID。 - -```js -params: [ - "0x16", // 22 -] -``` - -**傳回** 請參閱 [eth_getFilterChanges](#eth_getfilterchanges) - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' -``` - -結果請參閱 [eth_getFilterChanges](#eth_getfilterchanges) - -### eth_getLogs {#eth_getlogs} - -傳回與給定篩選條件物件相符的所有日誌的陣列。 - -**參數** - -1. `Object` - 篩選條件選項: - -- `fromBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 -- `toBlock`: `QUANTITY|TAG` -(可選,預設:`"latest"`)整數區塊編號,或 `"latest"` 表示最近提議的區塊,`"safe"` 表示最新的安全區塊,`"finalized"` 表示最新的最終確定區塊,或 `"pending"`,`"earliest"` 表示尚未在區塊中的交易。 -- `address`: `DATA|Array`,20 位元組 - (可選)合約地址或日誌起源的地址清單。 -- `topics`: `Array of DATA`,(可選)32 位元組陣列 `DATA` 主題。 主題與順序相關。 每個主題也可以為帶有「或」選項的 DATA 陣列。 -- `blockhash`: `DATA`,32 位元組 - (可選,**future**),新增 EIP-234 後,`blockHash` 將是一個新的篩選條件選項,會將傳回的日誌限制為具有 32 位元組雜湊值 `blockHash` 的單一區塊。 使用 `blockHash` 等於 `fromBlock` = `toBlock` = 具有雜湊值 `blockHash` 的區塊編號。 如果 `blockHash` 出現在篩選條件中,則 `fromBlock` 和 `toBlock` 都不允許使用。 - -```js -params: [ - { - topics: [ - "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", - ], - }, -] -``` - -**傳回** 請參閱 [eth_getFilterChanges](#eth_getfilterchanges) - -**範例** - -```js -// Request -curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' -``` - -結果請參閱 [eth_getFilterChanges](#eth_getfilterchanges) - -## 使用範例 {#usage-example} - -### 使用 JSON_RPC 部署合約 {#deploying-contract} - -這部分示範如何只使用遠端程序呼叫介面部署合約。 有其他的部署合約方法可以消除這種複雜性,例如,使用建置在遠端程序呼叫介面之上的程式庫,例如 [web3.js](https://web3js.readthedocs.io/) 和 [web3.py](https://github.com/ethereum/web3.py)。 雖然在抽象化之後,一般來說比較容易理解和較不易出錯,但理解在後台發生了什麼是有益的。 - -下面是一個名為 `Multiply7` 的簡單智慧型合約,將使用 JSON-RPC 介面把其部署到以太坊節點。 本教學假設讀者已經執行一個 Geth 節點。 更多節點和用戶端的資訊可以在[這裡](/developers/docs/nodes-and-clients/run-a-node)獲得。 請參考個別的[用戶端](/developers/docs/nodes-and-clients/)文件瞭解如何為非 Geth 用戶端開啟 HTTP JSON-RPC。 大多數用戶端預設在 `localhost:8545` 上提供服務。 - -```javascript -contract Multiply7 { - event Print(uint); - function multiply(uint input) returns (uint) { - Print(input * 7); - return input * 7; - } -} -``` - -首先,確定啟用了 HTTP 遠端程序呼叫介面。 也就是說,在啟動時我們為 Geth 提供 `--http` 旗標。 在這個例子中,我們使用私有開發鏈的 Geth 節點。 使用這個方法,將不需要真實網路上的以太幣。 - -```bash -geth --http --dev console 2>>geth.log -``` - -這將在 `http://localhost:8545` 上啟動 HTTP 遠端程序呼叫介面。 - -我們可以使用 [curl](https://curl.se) 擷取 Coinbase 地址和餘額來驗證介面正在執行。 請注意,這些範例中的資料與你的本地節點有所不同。 如果你想嘗試這些命令,請將第二個 curl 請求中的請求參數替換為第一個請求返回的結果。 - -```bash -curl --data '{"jsonrpc":"2.0","method":"eth_coinbase", "id":1}' -H "Content-Type: application/json" localhost:8545 -{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]} - -curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 -{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"} -``` - -由於數字是十六進位編碼的,因此餘額以十六進位字串形式形式傳回(單位為 wei)。 如果想要以數位形式獲得以太幣餘額,可以使用 Geth 控制台中的 web3。 - -```javascript -web3.fromWei("0x1639e49bba16280000", "ether") -// "410" -``` - -現在我們的私有開發鏈上有一些以太幣,我們可以部署合約了。 第一步是把 Multiply7 合約編譯成可以傳送到以太坊虛擬機的字元組程式碼。 要安裝 Solidity 編譯器 solc,請參考 [Solidity 文件](https://docs.soliditylang.org/en/latest/installing-solidity.html)。 (為符合[我們的範例中使用的編譯器版本](https://github.com/ethereum/solidity/releases/tag/v0.4.20),你可能想要使用較舊的 `solc` 版本。) - -下一步是把 Multiply7 合約編譯成可以傳送到以太坊虛擬機的字元組程式碼。 - -```bash -echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin - -======= :Multiply7 ======= -Binary: -6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029 -``` - -現在我們有了編譯後的程式碼,我們需要確定部署程式碼需要花費多少燃料。 遠端程序呼叫介面有 `eth_estimateGas` 方法可以給我們預估值。 - -```bash -curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545 -{"jsonrpc":"2.0","id":5,"result":"0x1c31e"} -``` - -最後部署合約。 - -```bash -curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545 -{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"} -``` - -交易被節點接受且傳回交易雜湊值。 雜湊值可以用來追蹤交易。 下一步是確定將合約部署至的地址。 每一個被執行的交易將會產生一份收據。 此收據包含各種關於交易的資訊,例如:交易包含在哪一個區塊中,以及以太坊虛擬機使用多少燃料。 假如交易建立一個合約,交易也將包含合約地址。 我們可以用 `eth_getTransactionReceipt` 遠端程序呼叫方法擷取收據。 - -```bash -curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545 -{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}} -``` - -我們的合約是建立在 `0x4d03d617d700cf81935d7f797f4e2ae719648262`。 結果為 null 而不是收據時,表示交易尚未列入區塊中。 稍等一下,並檢查你的共識用戶端是否正常執行,然後重試一次。 - -#### 與智能合約互動 {#interacting-with-smart-contract} - -在此範例中,我們將使用 `eth_sendTransaction` 向合約的 `multiply` 方法傳送交易。 - -`eth_sendTransaction` 需要若干引數,特別是 `from`、`to` 和 `data`。 `From` 是我們帳戶的公共地址,`to` 是合約地址。 `data` 引數包含有效負載,定義了必須呼叫哪個方法以及使用哪些引數。 這是 [ABI(應用程式二進位介面)](https://docs.soliditylang.org/en/latest/abi-spec.html)發揮作用的地方。 應用程式二進位介面是定義如何為以太坊虛擬機定義和編碼資料的 JSON 檔案。 - -有效負載中的位元組定義要呼叫合約中的哪個方法。 這是函式名稱及其引數類型的 Keccak 雜湊值的前 4 個位元組(十六進位編碼)。 Multiply 函式接受 uint,它是 uint256 的別名。 我們得到以下結果: - -```javascript -web3.sha3("multiply(uint256)").substring(0, 10) -// "0xc6888fa1" -``` - -下一步是對引數進行編碼。 只有一個 uint256,例如值 6。 應用程式二進制介面有一個部分指定如何對 uint256 類型進行編碼。 - -`int: enc(X)` 是 X 的高位元組在前二進位補碼編碼,對於負 X 在高位(左側)填充 0xff,對於正 X 填充零 > 位元組,使得長度為 32 位元組的倍數。 - -這編碼為 `000000000000000000000000000000000000000000000000000000000000006`。 - -結合函式選擇器和已編碼的引數,我們的資料如下:`0xc6888fa10000000000000000000000000000000000000000000000000000000000000006`。 - -現在可將其傳送到節點: - -```bash -curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545 -{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"} -``` - -由於傳送了交易,因此傳回了交易雜湊值。 擷取收據得到以下內容: - -```javascript -{ - blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", - blockNumber: 268, - contractAddress: null, - cumulativeGasUsed: 22631, - gasUsed: 22631, - logs: [{ - address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", - blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", - blockNumber: 268, - data: "0x000000000000000000000000000000000000000000000000000000000000002a", - logIndex: 0, - topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"], - transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", - transactionIndex: 0 - }], - transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", - transactionIndex: 0 -} -``` - -收據包含了日誌。 此日誌由以太坊虛擬機在交易執行時產生並包含在收據中。 `multiply` 函式顯示 `Print` 事件在輸入乘以 7 時觸發。 由於 `Print` 事件的引數是 uint256,我們可以根據應用程式二進位介面規則對其進行解碼,得到預期的十進位數 42。 除了資料之外,值得注意的是,主題可用於確定哪個事件建立了日誌: - -```javascript -web3.sha3("Print(uint256)") -// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" -``` - -這只是對一些最常見任務的簡要介紹,演示了 JSON-RPC 的直接使用。 - -## 相關主題 {#related-topics} - -- [JSON-RPC 規範](http://www.jsonrpc.org/specification) -- [節點和用戶端](/developers/docs/nodes-and-clients/) -- [Javascript 應用程式介面](/developers/docs/apis/javascript/) -- [後端應用程式介面](/developers/docs/apis/backend/) -- [執行用戶端](/developers/docs/nodes-and-clients/#execution-clients) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/block-explorers/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/block-explorers/index.md" deleted file mode 100644 index f31b67ad51f..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/block-explorers/index.md" +++ /dev/null @@ -1,257 +0,0 @@ ---- -title: 區塊瀏覽器 -description: 區塊瀏覽器簡介,這是你進入區塊鏈資料世界的入口,在這裡你可以查詢有關交易、帳戶、合約等資訊。 -lang: zh-tw -sidebarDepth: 3 ---- - -區塊瀏覽器是你存取以太坊資料的入口。 你可以使用區塊瀏覽器來查看區塊、交易、驗證者、帳戶及其他鏈上活動的即時資料。 - -## 基本資訊 {#prerequisites} - -你應該瞭解以太坊的基本概念,以便能夠理解區塊瀏覽器提供的資料。 推薦你從[以太坊簡介](/developers/docs/intro-to-ethereum/)開始。 - -## 服務 {#services} - -- [Etherscan](https://etherscan.io/) -_ 也提供中文、韓文、俄文及日文版_ -- [3xpl](https://3xpl.com/ethereum) -- [Beaconcha.in](https://beaconcha.in/) -- [Blockchair](https://blockchair.com/ethereum) -_也提供西班牙文、法文、義大利文、荷蘭文、葡萄牙文、俄文、中文及波斯文版_ -- [Blockscout](https://eth.blockscout.com/) -- [Chainlens](https://www.chainlens.com/) -- [DexGuru Block Explorer](https://ethereum.dex.guru/) -- [Etherchain](https://www.etherchain.org/) -- [Ethernow](https://www.ethernow.xyz/) -- [Ethplorer](https://ethplorer.io/) -_ 也提供中文、西班牙文、法文、土耳其文、俄文、韓文及越南文版_ -- [EthVM](https://www.ethvm.com/) -- [OKLink](https://www.oklink.com/eth) -- [Rantom](https://rantom.app/) - -## 開源工具 {#open-source-tools} - -- [Otterscan](https://otterscan.io/) -- [lazy-etherscan](https://github.com/woxjro/lazy-etherscan) - -## 數據資料 {#data} - -以太坊的設計是透明的,因此一切都是可驗證的。 區塊瀏覽器提供了獲取此資訊的介面。 如果你需要這些資料,這適用於以太坊主網和測試網。 資料被分為執行資料和共識資料。 執行資料指的是特定區塊中已被執行的交易。 共識資料指的是區塊本身及提出區塊的驗證者。 - -以下是可以從區塊瀏覽器取得的資料類型的摘要。 - -### 執行資料 {#execution-data} - -新區塊每 12 秒會添加到以太坊上(除非區塊提議者漏掉了其提議輪次),因此接近恆定的資料流被加到區塊瀏覽器上。 區塊包含許多你可能覺得有用的重要資料: - -**標準資料** - -- 區塊高度 - 目前區塊建立時,區塊的編號及區塊鏈的長度(以區塊為單位) -- 時間戳 - 區塊被提議的時間 -- 交易 - 被打包進區塊的交易數量 -- 費用接收者 - 從交易中收到燃料費與小費的地址 -- 區塊獎勵 - 提出區塊的驗證者獲得的以太幣數量 -- 大小 - 區塊中的資料大小(以位元組計算) -- 消耗的燃料 - 區塊中交易消耗的燃料單位總數 -- 燃料限制 - 區塊中交易設定的總燃料限制 -- 每單位燃料的基本費用 - 讓交易能夠打包進區塊所需的最低乘數 -- 銷毀費用 - 區塊中銷毀的以太幣數量 -- 額外資料 - 任何建置者加進區塊的額外資料 - -**進階資料** - -- 雜湊 - 代表區塊頭(區塊的唯一識別碼)的密碼學雜湊。 -- 父雜湊 - 目前區塊之前區塊的雜湊 -- StateRoot - 默克爾樹的根雜湊,存儲了整個系統的狀態 - -### Gas費 {#gas} - -區塊瀏覽器不僅會為你提供有關交易和區塊中燃料使用情況的資料,而且有些還會提供有關網路當前燃料價格的資訊。 這將幫助瞭解網路使用情況、提交安全交易並且不會超支燃料。 尋找可以幫助你將此資訊輸入產品介面的應用程式介面。 燃料的特定資料包括: - -- 安全但緩慢的交易所需的預估燃料單位(+ 預估價格和持續時間) -- 中等速度交易所需的預估燃料單位(+ 預估價格和持續時間) -- 快速交易所需的預估燃料單位(+ 預估價格和持續時間) -- 基於燃料價格的平均確認時間 -- 正在消耗燃料的合約 - 換句話說,正在網路上大量使用的熱門產品 -- 正在花費燃料的帳戶 - 換句話說,頻繁使用網路的使用者 - -### 交易 {#transactions} - -區塊瀏覽器已成為追蹤交易進度的常見方式。 這是因為你可以取得的詳細程度提供了額外的確定性。 交易資料包括: - -**標準數據** - -- 交易雜湊 - 當交易被提交時產生的雜湊 -- 狀態 - 指示交易為待處理、失敗還是成功 -- 區塊 - 交易被打包進的區塊 -- 時間戳 - 交易被納入由驗證者提議的區塊的時間 -- 發送者 - 提交此交易的帳戶地址 -- 接收者 - 接收者或與交易互動的智慧型合約的地址 -- 轉移的代幣 - 做為交易的一部分被轉移的代幣清單 -- 價值 - 轉移的以太幣總價值 -- 交易費用 - 支付給驗證者處理交易的金額(計算方法為燃料價格\*使用的燃料) - -**進階數據** - -- 燃料限制 - 此交易最高可消耗多少單位的燃料 -- 使用的燃料 - 交易實際消耗的燃料單位量 -- 燃料價格 - 每單位燃料的價格 -- 隨機數 - `from` 地址的交易編號(注意,隨機數從 0 開始算,所以隨機數 `100` 實際上是此帳戶提交的第 101 筆交易) -- 輸入資料 - 交易所需的任何額外資訊 - -### 帳戶 {#accounts} - -你可以存取有關帳戶的大量資料。 這就是為什麼通常建議使用多個帳戶,以便你的資產和價值不易被追蹤。 還有一些解決方案正在開發中,以使交易和帳戶活動更加私密。 但以下是帳戶可用的資料: - -**使用者帳戶:** - -- 帳戶地址 - 你可以向其中發送資金的公開地址 -- 以太幣餘額 - 該帳戶的以太幣餘額 -- 以太幣總價值 - 以太幣的價值 -- 代幣 - 與該帳戶有關的代幣及其價值 -- 交易記錄 - 此帳戶作為發送者或接受者的所有交易的清單 - -**智慧型合約** - -雖然智慧型合約帳戶擁有使用者帳戶將擁有的所有資料,但某些區塊瀏覽器甚至還會顯示一些程式碼資訊。 範例包含: - -- 合約建立者 - 將合約部署至主網的地址 -- 建立交易 - 包括將合約部署到主網的交易 -- 原始程式碼 - 智慧型合約的 Solidity 或 Vyper 程式碼 -- 合約 ABI - 合約的應用程式二進位介面 - 合約進行的呼叫和接收的資料 -- 合約建立程式碼 - 智慧型合約經編譯的位元組碼 - 在你編譯以 Solidity 或 Vyper 等語言編寫的智慧型合約時產生 -- 合約事件 - 智慧型合約中呼叫的方法的歷史紀錄 - 基本上是查看合約如何使用以及使用頻率的一種方式 - -### 代幣 {#tokens} - -代幣是一種合約,因此它們具有與智慧型合約類似的資料。 但因為它們有價值並且可以交易,因此有額外的資料點: - -- 類型 - 是 ERC-20、ERC-721 或其他代幣標準 -- 價格 - 如果是 ERC-20,就會有目前市場價值 -- 市值 - 如果是 ERC-20,就會有市值(計算方法為價格\*總供應量) -- 總供應量 - 流通的代幣數量 -- 持有者 - 持有該代幣的地址數量 -- 轉移 - 代幣在帳戶間被轉移的次數 -- 交易記錄 - 代幣的所有交易歷史記錄 -- 合約地址 - 部署到主網的代幣的地址 -- 小數 - ERC-20 代幣是可分割的,且具有小數位 - -### 網路 {#network} - -一些區塊資料更全面地關注以太坊的健康狀況。 - -- 總交易數量 - 自以太坊建立以來的交易數量 -- 每秒交易數量 - 每秒可處理的交易數量 -- 以太幣價格 - 目前 1 個以太幣的價值 -- 以太幣總供應量 - 流通的以太幣數量 - 請記得,當新區塊建立時,新以太幣會被做為區塊獎勵而產生 -- 市值 - 價格\*供應量的計算結果 - -## 共識層資料 {#consensus-layer-data} - -### 時期 {#epoch} - -由於安全考量,會在每個時期(每 6.4 分鐘)結束時建立隨機化驗證者委員會。 時期資料包含: - -- 時期編號 -- 最終狀態 - 時期是否已完成(是/否) -- 時間 - 時期結束的時間 -- 證明 - 時期中的證明數量(對時隙內區塊的投票) -- 存款 - 時期內包含的以太幣存款數量(驗證者必須質押以太幣才能成為驗證者) -- 罰沒 - 對區塊提議者或證明者的處罰次數 -- 投票參與 - 用於證明區塊的質押以太幣數量 -- 驗證者 - 在該時期中活躍的驗證者數量 -- 驗證者平均餘額 - 活躍驗證者的平均餘額 -- 時隙 - 時期中包含的時隙數量(時隙包含一個有效區塊) - -### 時隙 {#slot} - -時隙是建立區塊的機會,每個時隙可用的資料包括: - -- 時期 - 時隙在其中有效的時期 -- 時隙編號 -- 狀態 - 時隙狀態(已提議/缺失) -- 時間 - 時隙的時間戳 -- 提議者 - 在該時隙提議區塊的驗證者 -- 區塊根 - 信標區塊的雜湊樹根 -- 父根 - 前一個區塊的雜湊 -- 狀態根 - 信標狀態的雜湊樹根 -- 簽名 -- Randao 揭示 -- Graffiti - 區塊提議者可以在其區塊提議中包含 32 位元組的訊息 -- 執行資料 - - 區塊雜湊 - - 存款計數 - - 存款根 -- 證明 - 此時隙中的區塊的證明數量 -- 存款 - 此時隙內的存款數量 -- 自願退出 - 此時隙內退出的驗證者數量 -- 罰沒 - 對區塊提議者或證明者的處罰次數 -- 投票 - 此時隙中為區塊投票的驗證者 - -### 區塊 {#blocks-1} - -權益證明將時間分割為時期與時隙。 這意味著新資料! - -- 提議者 - 經演算法選出的提議新區塊的驗證者 -- 時期 - 提議區塊的時期 -- 時隙 - 提議區塊的時隙 -- 證明 - 時隙中包含的證明數量 - 證明就像投票一樣,表示區塊已準備好進入信標鏈 - -### 驗證者 {#validators} - -驗證者負責在時隙內提議區塊並證明區塊。 - -- 驗證者編號 - 代表驗證者的唯一編號 -- 目前餘額 - 驗證者的餘額(包含獎勵) -- 有效餘額 - 驗證者用於質押的餘額 -- 收入 - 驗證者收到的獎勵或處罰 -- 狀態 - 驗證者目前是否在線和是否活躍 -- 證明有效性 - 驗證者的證明被加入鏈上的平均時間 -- 啟用資格 - 驗證者可以開始驗證的日期(和時期) -- 啟用開始時間 - 驗證者的啟用日期(和時期) -- 提議的區塊 - 驗證者提議的區塊 -- 證明 - 驗證者提供的證明 -- 存款 - 發送者地址、交易雜湊、區塊編號、時間戳、驗證者的質押存款金額及狀態 - -### 證明 {#attestations} - -證明是投票「同意」將區塊包含在鏈中。 它們的資料與證明紀錄和進行證明的驗證者相關。 - -- 時隙 - 證明發生的時隙 -- 委員會索引 - 在給定時隙的委員會的索引 -- 聚合位元 - 表示證明中所有參與驗證者的聚合證明 -- 驗證者 - 提供證明的驗證者 -- 信標區塊根 - 指向驗證者正在證明的區塊 -- 來源 - 指向最新的已證明時期 -- 目標 - 指向最新的時期邊界 -- 簽名 - -### 網路 {#network-1} - -共識層頂層資料包括以下內容: - -- 目前時期 -- 目前時隙 -- 活躍驗證者 - 活躍驗證者的數量 -- 等待中驗證者 - 等待啟用的驗證者數量 -- 質押的以太幣 - 網路中質押的以太幣數量 -- 平均餘額 - 驗證者的平均以太幣餘額 - -## 區塊瀏覽器 {#block-explorers} - -- [Etherscan](https://etherscan.io/) - 可用於擷取以太坊主網及 Goerli 測試網資料的區塊瀏覽器 -- [3xpl](https://3xpl.com/ethereum) - 一個允許下載其資料集的無廣告開源以太坊瀏覽器 -- [Beaconcha.in](https://beaconcha.in/) -用於以太坊主網及 Goerli 測試網的開源區塊瀏覽器 -- <0>Blockchair -- 最私密的以太坊瀏覽器。 也用於排序和篩選(記憶體池)資料 -- [Etherchain](https://www.etherchain.org/) - 以太坊主網的區塊瀏覽器 -- [Ethplorer](https://ethplorer.io/) - 專為以太坊主網及 Kovan 測試網代幣打造的區塊瀏覽器 -- [Rantom](https://rantom.app/) - 方便使用的開源去中心化金融及非同質化代幣交易檢視器,可提供詳細的訊息 -- [Ethernow](https://www.ethernow.xyz/) - 即時交易瀏覽器,讓你能夠查看以太坊主網鏈前層 - -## 延伸閱讀 {#further-reading} - -_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ - -## 相關主題 {#related-topics} - -- [交易](/developers/docs/transactions/) -- [帳戶](/developers/docs/accounts/) -- [網路](/developers/docs/networks/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/index.md" deleted file mode 100644 index 4c68011fcc3..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/data-and-analytics/index.md" +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: 數據分析 -description: 如何獲取鏈上分析和資料以供你的去中心化應用程式使用 -lang: zh-tw ---- - -## 簡介 {#Introduction} - -隨著網路使用量的增長,鏈上資料中將存在越來越多有價值的信息。 隨著資料量的迅速增加,計算和匯總這些資訊以報告或驅動去中心化應用程式可能變得非常耗時且繁重。 - -利用現有的資料提供者可以加快開發過程,產生更準確的結果,並減少持續的維護工作。 這將使團隊能夠專注於其專案要提供的核心功能。 - -## 基本資訊 {#prerequisites} - -你應該瞭解[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)的基本概念,以便更好地理解在資料分析背景中如何使用它們。 此外,熟悉[索引](/glossary/#index)的概念以瞭解它們對系統設計所帶來的好處。 - -在架構基礎方面,瞭解[應用程式介面](https://www.wikipedia.org/wiki/API)和 [ REST ](https://www.wikipedia.org/wiki/Representational_state_transfer) 的基本概念,即使只是理論上的也很重要。 - -## 區塊瀏覽器 {#block-explorers} - -許多[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)提供 [RESTful ](https://www.wikipedia.org/wiki/Representational_state_transfer) [應用程式介面](https://www.wikipedia.org/wiki/API)閘道,這些閘道能夠讓開發者查看區塊、交易、驗證者、帳戶及其他鏈上活動的即時資料。 - -開發者可以進一步處理和轉換這些資料,以提供使用者獨特的見解和與[區塊鏈](/glossary/#blockchain)的互動。 例如,[Etherscan](https://etherscan.io) 在每個 12 秒時隙都提供執行和共識資料。 - -## 圖表 {#the-graph} - -[Graph Network](https://thegraph.com/) 是一個去中心化的索引協議,用於組織區塊鏈資料。 與其建立和管理鏈下的集中式資料儲存來匯總鏈上資料,使用 The Graph 可以讓開發者構建完全在公共基礎設施上運行的無伺服器應用程式。 - -透過使用 [GraphQL](https://graphql.org/),開發者可以查詢稱為子圖的精選開放應用程式介面,以獲取驅動其去中心化應用程式所需的必要資訊。 透過查詢這些已索引的子圖,報告及去中心化應用程式不僅能獲得效能和可擴充性的好處,還能享受由網路共識提供的內建準確性。 隨著新改進和/或子圖新增至網路中,你的專案可以迅速迭代,以利用這些增強功能。 - -## 用戶的多樣化 - -[用戶端多樣性](/developers/docs/nodes-and-clients/client-diversity/)對以太坊網路的整體健康至關重要,因為它提供了針對錯誤和漏洞的韌性。 目前有幾個用戶端多樣性儀表板,包括 [clientdiversity.org](https://clientdiversity.org/)、[rated.network](https://www.rated.network)、[supermajority.info](https://supermajority.info//) 和 [Ethernodes](https://ethernodes.org/)。 - -## Dune Analytics {#dune-analytics} - -[Dune Analytics](https://dune.com/) 將區塊鏈資料預處理成關聯資料庫(PostgreSQL 和 DatabricksSQL)表格,允許使用者使用 SQL 查詢區塊鏈資料並根據查詢結果建立儀表板。 鏈上資料組織成 4 個原始表格:`blocks`、`transactions`、(事件)`logs` 和(呼叫)`traces`。 常見的合約和協定已被解碼,而每個合約和協定都有自己的事件和呼叫表格集。 這些事件和呼叫表格被進一步處理並按協定類型組織成抽象表格,例如去中心化交易所、借貸、穩定幣等。 - -## SubQuery 網路 {#subquery-network} - -[SubQuery](https://subquery.network/) 是一個領先的資料索引器服務,為開發者提供快速、可靠、去中心化且自訂的應用程式介面以支援其 Web3 專案。 SubQuery 賦能來自超過 165 個生態系統(包括以太坊)的開發者,提供豐富的索引資料,以構建直觀且沉浸式的使用者體驗。 SubQuery 網路為你提供銳不可當、堅韌且有去中心化基礎設施網路的應用程式。 使用 SubQuery 的區塊鏈開發者工具組,構建未來的 Web3 應用程式,無需花時間為資料處理活動建立自訂後端。 - -首先,請瀏覽[以太坊快速入門指南](https://academy.subquery.network/quickstart/quickstart_chains/ethereum-gravatar.html),在本地 Docker 環境中快速開始索引以太坊區塊鏈資料以進行測試,然後再上線到 [SubQuery 的受管理服務](https://managedservice.subquery.network/) 或 [SubQuery 的去中心化網路](https://app.subquery.network/dashboard)。 - -## Ethernow - 記憶體池資料程式 {#ethernow} -[Blocknative](https://www.blocknative.com/) 提供了對其以太坊歷史[記憶體池資料存檔](https://www.ethernow.xyz/mempool-data-archive)的開放存取。 這使研究人員和社群公益專案能夠探索以太坊主網的鏈前層。 該資料集得到積極維護,代表了以太坊生態系統中記憶體池交易事件的最全面歷史紀錄。 請參見 [Ethernow](https://www.ethernow.xyz/) 瞭解更多資訊。 - -## 衍生閱讀 {#further-reading} - -- [Graph Network 概覽](https://thegraph.com/docs/en/about/network/) -- [Graph Query 訓練場](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) -- [EtherScan 上的應用程式介面程式碼範例](https://etherscan.io/apis#contracts) -- [Beaconcha.in 信標鏈瀏覽器](https://beaconcha.in) -- [Dune 基礎知識](https://docs.dune.com/#dune-basics) -- [SubQuery 以太坊快速入門指南](https://academy.subquery.network/indexer/quickstart/quickstart_chains/ethereum-gravatar.html) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/development-networks/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/development-networks/index.md" deleted file mode 100644 index 5f118003e4f..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/development-networks/index.md" +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: 開發網路 -description: 可用於協助構建以太坊應用程式的開發網路和工具的概觀。 -lang: zh-tw ---- - -當使用智慧型合約建立以太坊應用程式時,你需要在本地網路上運行該應用程式,以在部署之前瞭解其的工作原理。 - -與在電腦上執行本地伺服器進行 Web 開發的方式類似,你可以使用開發網路建立本機區塊鏈執行個體來測試你的去中心化應用程式。 這些以太坊開發網路提供的功能比公共測試網的迭代速度快得多(例如,你不需要從測試網水龍頭取得以太幣)。 - -## 基本資訊 {#prerequisites} - -在深入瞭解開發網路之前,應該先瞭解[以太坊堆疊的基礎知識](/developers/docs/ethereum-stack/)和[以太坊網路](/developers/docs/networks/)。 - -## 什麼是開發網路? {#what-is-a-development-network} - -開發網路本質上是專為本地開發而設計的以太坊用戶端(以太坊的實作)。 - -**為什麼不在本地運行一個標準的以太坊節點呢?** - -你_可以_[運行節點](/developers/docs/nodes-and-clients/#running-your-own-node),但由於開發網路是專門為開發而建立,它們往往會具有一些快速方便的功能,例如: - -- 確定性地用資料植入你的本地區塊鏈(例如具有以太幣餘額的帳戶) -- 用接收的每筆交易,依照順序及零延遲即時產生區塊 -- 增強的偵錯和日誌記錄功能 - -## 可用工具 {#available-projects} - -**注意**:大多數[開發架構](/developers/docs/frameworks/)包含一個內建開發網路。 推薦你從一個架構開始[設定你的本地開發環境](/developers/local-environment/)。 - -### Ganache {#ganache} - -快速啟動個人以太坊區塊鏈,你可以使用該區塊鏈運行測試、執行命令和檢查狀態,同時控制鏈的運作方式。 - -Ganache 提供桌面應用程式 (Ganache UI) 和命令列工具 (`ganache-cli`)。 它是 Truffle 工具套件的一部分。 - -- [網站](https://www.trufflesuite.com/ganache) -- [Github](https://github.com/trufflesuite/ganache) -- [文件](https://www.trufflesuite.com/docs/ganache/overview) - -### Hardhat 網路 {#hardhat-network} - -專為開發而設計的本地以太坊網路。 它讓你能夠部署合約、運行測試和偵錯程式碼。 - -Hardhat 網路內建了 Hardhat,這是一個專業以太坊開發環境。 - -- [官網](https://hardhat.org/) -- [GitHub](https://github.com/nomiclabs/hardhat) - -### 本地信標鏈 {#local-beacon-chains} - -一些共識用戶端具有內建工具,用於啟動本地信標鏈以進行測試。 Lighthouse、Nimbus 和 Lodestar 的說明如下: - -- [使用 Lodestar 的本地測試網](https://chainsafe.github.io/lodestar/usage/local/) -- [使用 Lighthouse 的本地測試網](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) -- [使用 Nimbus 的本地測試網](https://github.com/status-im/nimbus-eth1/blob/master/fluffy/docs/local_testnet.md) - -### 公共以太坊測試鏈 {#public-beacon-testchains} - -以太坊還有兩個維護中的公共測試實作​​:Goerli 和 Sepolia。 推薦使用受長期受支援的測試網 Goerli,任何人都可以自由在其上驗證。 Sepolia 是一個較新、規模較小的測試鏈,預計在可見未來也會得到維護。Sepolia 上有獲得許可的驗證者集,這意味著不可以對此測試網上的新驗證者進行常規存取。 Ropsten 鏈預計將於 2022 年第四季棄用,Rinkeby 鏈預計將於 2023 年第二/第三季棄用。 - -- [Goerli 質押啟動面板](https://goerli.launchpad.ethereum.org/) -- [Ropsten、Rinkeby 和 Kiln 棄用公告](https://blog.ethereum.org/2022/06/21/testnet-deprecation) - -### Kurtosis 以太坊套件 {#kurtosis} - -Kurtosis 是一個用於多容器測試環境的構建系統,讓開發者能夠在本地建立區塊鏈網路的可複現執行個體。 - -以太坊 Kurtosis 套件可用於透過 Docker 或 Kubernetes 快速具現化一個可參數化、高擴展性的私人以太坊測試網。 此套件支援所有主要的執行層 (EL) 和共識層 (CL) 用戶端。 Kurtosis 從容處理代表網路的所有本地端口映射和服務連線,以用於與以太坊核心基礎設施相關的驗證和測試工作流程。 - -- [以太坊網路套件](https://github.com/kurtosis-tech/ethereum-package) -- [網站](https://www.kurtosis.com/) -- [GitHub](https://github.com/kurtosis-tech/kurtosis) -- [文件](https://docs.kurtosis.com/) - -## 衍生閱讀 {#further-reading} - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ - -## 相關主題 {#related-topics} - -- [開發架構](/developers/docs/frameworks/) -- [設定本地開發環境](/developers/local-environment/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ethereum-stack/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ethereum-stack/index.md" deleted file mode 100644 index 6cd6a777150..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ethereum-stack/index.md" +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: 以太坊堆疊簡介 -description: 演練以太坊堆疊的不同層以及它們如何組合在一起。 -lang: zh-tw ---- - -與任何軟體堆疊一樣,完整的「以太坊堆疊」將根據你的目標而因專案而異。 - -然而,以太坊的核心元件有助於為軟體應用程式如何與以太坊區塊鏈互動提供思維模型。 理解堆疊的各層將幫助瞭解將以太坊整合到軟體專案中的不同方式。 - -## 等級 1:以太坊虛擬機器 {#ethereum-virtual-machine} - -[以太坊虛擬機器](/developers/docs/evm/)是以太坊上智慧型合約的執行階段環境。 以太坊區塊鏈上的所有智慧型合約和狀態變更均由<0>交易執行。 以太坊虛擬機器負責處理以太坊網路上的所有交易。 - -與任何虛擬機器一樣,以太坊虛擬機器在執行程式碼和執行機器(以太坊節點)之間建立了一個抽象層。 目前,以太坊虛擬機器運行在分佈於全球的數千個節點上。 - -在後台,以太坊虛擬機器使用一組操作碼指令來執行特定任務。 這些(140 個獨特的)操作碼讓以太坊虛擬機器是**圖靈完備**的,這表示只要提供足夠資源,以太坊虛擬機器就可以進行任何運算。 - -作為去中心化應用程式開發者,不需要瞭解太多關於以太坊虛擬機器的知識,只需要瞭解其存在以及能夠可靠地為以太坊上的所有應用程式提供無停機的支援。 - -## 等級 2:智慧型合約 {#smart-contracts} - -[智慧型合約](/developers/docs/smart-contracts/)為在以太坊區塊鏈上運行的可執行程式。 - -智慧型合約使用特定[程式語言](/developers/docs/smart-contracts/languages/)來編譯至以太坊虛擬機器位元組碼(稱為操作碼的低階機器指令)。 - -智慧型合約不僅充當開源程式庫,而且本質上是始終運行且無法關閉的開放應用程式介面服務。 智慧型合約提供使用者和應用程式([去中心化應用程式](/developers/docs/dapps/))無需許可即可與之互動的公共功能。 任何應用程式都可以與已部署的智慧型合約整合以構成功能,例如新增[資料饋送](/developers/docs/oracles/)或支援代幣兌換。 此外,任何人都可以將新的智慧型合約部署到以太坊,以新增自訂功能來滿足其應用程式的需求。 - -作為去中心化應用程式開發者,只有當你想在以太坊區塊鏈上新增自訂功能時,才需要編寫智慧型合約。 你可能會發現,只需與現有智慧型合約整合即可實現專案的大部分或全部需求,例如,如果想支援穩定幣支付或實現代幣的去中心化交易。 - -## 等級 3:以太坊節點 {#ethereum-nodes} - -為了使應用程式能夠與以太坊區塊鏈互動,必須連結至[以太坊節點](/developers/docs/nodes-and-clients/)。 連結至節點可讓你讀取區塊鏈資料和/或將交易傳送到網路。 - -以太坊節點是運行軟體的電腦 - 以太坊用戶端。 用戶端是以太坊的實作,會驗證每個區塊中的所有交易,保持網路安全和資料準確。 **以太坊節點就是以太坊區塊鏈**。 以太坊節點共同存儲以太坊區塊鏈的狀態,並就交易達成共識以改變區塊鏈狀態。 - -透過將你的應用程式連結到以太坊節點(透過 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)),應用程式能夠從區塊鏈讀取資料(例如使用者帳戶餘額)並向網路廣播新交易(例如在使用者帳戶之間轉移以太幣或執行智慧型合約的功能)。 - -## 等級 4:以太坊用戶端應用程式介面 {#ethereum-client-apis} - -許多便利的程式庫(由以太坊的開源社群建立和維護)允許你的應用程式連結到以太坊區塊鏈並與之通訊。 - -如果你的面向使用者的應用程式是網路應用程式,可以選擇直接在前端透過 `npm install` 安裝 [JavaScript API](/developers/docs/apis/javascript/)。 或者,你可能會選擇使用 [Python](/developers/docs/programming-languages/python/) 或 [Java](/developers/docs/programming-languages/java/) 應用程式介面在伺服器端實作此功能。 - -雖然這些應用程式介面不是堆疊的必要組成部分,但顯著降低了與以太坊節點直接互動的複雜度。 這些應用程式介面還提供公用程式功能(例如將 ETH 轉換為 Gwei),使得開發者可以花更少的時間處理複雜的以太坊用戶端,將更多的時間專注於應用程式的特定功能。 - -## 等級 5:終端使用者應用程式 {#end-user-applications} - -堆疊的頂層是面向使用者的應用程式。 它們是目前經常使用和建立的標準​​應用程式:主要是 Web 和行動應用程式。 - -開發這些使用者介面的方式基本上保持不變。 通常,使用者不需要知道他們正在使用的應用程式是使用區塊鏈建立的。 - -## 準備好選擇你的堆疊了嗎? {#ready-to-choose-your-stack} - -請查看我們的指南,瞭解如何為你的以太坊應用程式[設定本地開發環境](/developers/local-environment/)。 - -## 衍生閱讀 {#further-reading} - -- [Web 3.0 應用程式的架構](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/frameworks/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/frameworks/index.md" deleted file mode 100644 index 122cd9f9839..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/frameworks/index.md" +++ /dev/null @@ -1,147 +0,0 @@ ---- -title: 去中心化應用程式開發架構 -description: 探索架構優勢及比較現有選項。 -lang: zh-tw ---- - -## 架構簡介 {#introduction-to-frameworks} - -建構成熟的去中心化應用程式需要 不同的技術。 軟體架構包含許多必要功能, 或提供簡單的外掛程式系統來選擇 你需要的工具。 - -架構帶有許多非常規功能, 例如: - -- 編列系統內區塊鏈功能. -- 編輯和測試你的智慧型合約. -- 用戶端開發外掛程式可在同一專案/儲存庫中建立 面向使用者的應用程式。 -- 用於連結到以太坊網路並部署 合約的設定,無論是連接到本地運行的執行個體 還是連結到以太坊的公共網路之一。 -- 去中心化應用程式分發 - 與星際檔案系統 等存儲選項整合。 - -## 基本資訊 {#prerequisites} - -在深入介紹這些架構之前,推薦你先閱讀下面的[去中心化應用程式](/developers/docs/dapps/)和[以太坊堆疊](/developers/docs/ethereum-stack/)簡介。 - -## 可用架構 {#available-frameworks} - -**Foundry** - **_Foundry 是一款快速、便攜和模組化的工具包,用於以太坊應用程式開發_** - -- [安裝 Foundry](https://book.getfoundry.sh/) -- [Foundry 手册](https://book.getfoundry.sh/) -- [Telegram 上的 Foundry 社群聊天](https://t.me/foundry_support) -- [Awesome Foundry](https://github.com/crisgarner/awesome-foundry) - -**Hardhat -** **_專業以太坊開發環境。_** - -- [hardhat.org](https://hardhat.org) -- [GitHub](https://github.com/nomiclabs/hardhat) - -**Ape -** **_Python 程式人員、資料科學家和安全性專業人員適用的智慧型合約開發工具。_** - -- [文件](https://docs.apeworx.io/ape/stable/) -- [GitHub](https://github.com/ApeWorX/ape) - -**Web3j -** **_用於在 JAVA 虛擬機上開發區塊鏈應用程式的平台。_** - -- [首頁](https://www.web3labs.com/web3j-sdk) -- [文件](https://docs.web3j.io) -- [GitHub](https://github.com/web3j/web3j) - -**ethers-kt -** **_適用基於以太坊虛擬機區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。_** - -- [GitHub](https://github.com/Kr1ptal/ethers-kt) -- [範例](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) -- [Discord](https://discord.gg/rx35NzQGSb) - -**Create Eth App -** **_使用一個命令建立以太坊支援的應用程式。 包含多種使用者介面架構與去中心化金融模板供你選擇。_** - -- [GitHub](https://github.com/paulrberg/create-eth-app) -- [模板](https://github.com/PaulRBerg/create-eth-app/tree/develop/templates) - -**Scaffold-Eth -** **_Ethers.js + Hardhat + React 元件和 web3 掛勾:開始構建由智慧型合約支援的去中心化應用程式所需的一切。_** - -- [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) - -**Tenderly -** **_Web3 開發平台,使區塊鏈開發者能夠建立、測試、除錯、監控和操作智慧型合約並改進去中心化應用程式使用者體驗。_** - -- [網站](https://tenderly.co/) -- [文件](https://docs.tenderly.co/ethereum-development-practices) - -**The Graph****_高效率查詢區塊鏈資料的圖表。_** - -- [網站](https://thegraph.com/) -- [使用教學](/developers/tutorials/the-graph-fixing-web3-data-querying/) - -**Alchemy -** **_以太坊開發平台。_** - -- [alchemy.com](https://www.alchemy.com/) -- [GitHub](https://github.com/alchemyplatform) -- [Discord](https://discord.com/invite/alchemyplatform) - -**NodeReal -** **_以太坊開發平台。_** - -- [Nodereal.io](https://nodereal.io/) -- [GitHub](https://github.com/node-real) -- [Discord](https://discord.gg/V5k5gsuE) - -**thirdweb SDK -** **_透過我們的強大軟體開發套件和命令列介面,可以建構與你的智慧型合約互動的 Web3 應用程式。_** - -- [文件](https://portal.thirdweb.com/sdk/) -- [Github](https://github.com/thirdweb-dev/) - -**Chainstack -** **_Web3(以太坊及其他區塊鏈)開發平台。_** - -- [chainstack.com](https://www.chainstack.com/) -- [Github](https://github.com/chainstack) -- [Discord](https://discord.gg/BSb5zfp9AT) - -**Crossmint -** **_企業級 web3 開發平台,讓你在所有主要鏈以太坊虛擬機器鏈上建立非同質化代幣應用程式。_** - -- [網站](https://www.crossmint.com) -- [文件](https://docs.crossmint.com) -- [Discord](https://discord.com/invite/crossmint) - -**Brownie -** **_基於 Python 的開發環境和測試架構。_** - -- [文件](https://eth-brownie.readthedocs.io/en/latest/) -- [GitHub](https://github.com/eth-brownie/brownie) -- **Brownie 目前未有維護** - -**Truffle -** **_開發環境、測試架構、部署通道及其他工具。 _** - -- [trufflesuite.com](https://www.trufflesuite.com/) -- [GitHub](https://github.com/trufflesuite/truffle) -- **Truffle 開發已結束** - [瞭解更多](https://twitter.com/trufflesuite/status/1704946902393860589?t=NlIWeLTbBSAaJmS5uUAhSA&s=19) - -**OpenZeppelin 軟體開發套件 -** **_終極智慧型合約工具組:一套幫助你開發、編譯、升級、部署智慧型合約以及與智慧型合約互動的工具。_** - -- [OpenZeppelin 軟體開發套件](https://openzeppelin.com/sdk/) -- [GitHub](https://github.com/OpenZeppelin/openzeppelin-sdk) -- [社群論壇](https://forum.openzeppelin.com/c/support/17) -- **OpenZeppelin 軟體開發套件開發已結束** - -**Catapulta -** **_多鏈智慧型合約部署工具,在區塊瀏覽器中自動驗證,追蹤部署的智慧型合約並分享部署報告,Foundry 和 Hardhat 專案隨插即用。_** - -- [網站](https://catapulta.sh/) -- [文件](https://catapulta.sh/docs) -- [Github](https://github.com/catapulta-sh) - -**Covalent -** **_200 多條鏈的已擴充區塊鏈應用程式介面。_** - -- [covalenthq.com](https://www.covalenthq.com/) -- [文件](https://www.covalenthq.com/docs/api/) -- [GitHub](https://github.com/covalenthq) -- [Discord](https://www.covalenthq.com/discord/) - -**Wake -** **_用於合約測試、模糊測試、部署、漏洞掃描和程式碼導航的一體化 Python 框架。_** - -- [首頁](https://getwake.io/) -- [文件](https://ackeeblockchain.com/wake/docs/latest/) -- [GitHub](https://github.com/Ackee-Blockchain/wake) -- [VS Code 擴充功能](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) - -## 了解更多 {#further-reading} - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ - -## 相關主題 {#related-topics} - -- [設定本地開發環境](/developers/local-environment/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ides/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ides/index.md" deleted file mode 100644 index e67e15e5e48..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/ides/index.md" +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: 整合開發環境 -description: -lang: zh-tw ---- - -在設定[整合開發環境 (IDE)](https://wikipedia.org/wiki/Integrated_development_environment) 時,以太坊上的應用程式程式設計與任何其他軟體專案的程式設計類似。 有很多選項可供選擇,因此最終請選擇最適合你喜好設定的整合開發環境或程式碼編輯器。 最適合你以太坊開發的整合開發環境選項很可能是你已經用於傳統軟體開發的整合開發環境。 - -## 網頁型整合開發環境 {#web-based-ides} - -如果你想在[設定本地開發環境](/developers/local-environment/)之前試一下程式碼,以下網頁應用程式是為以太坊智慧型合約開發客製化構建的。 - -**[Remix](https://remix.ethereum.org/)** - **_網頁型整合開發環境,內建靜態分析與區塊鏈測試虛擬機_** - -- [文件](https://remix-ide.readthedocs.io/en/latest/#) -- [Gitter](https://gitter.im/ethereum/remix) - -**[ChainIDE](https://chainide.com/)** - **_一個支援多鏈的雲端整合開發環境_** - -- [文件](https://chainide.gitbook.io/chainide-english-1/) -- [幫助論壇](https://forum.chainide.com/) - -**[Replit(Solidity 新手教學 - Beta)](https://replit.com/@replit/Solidity-starter-beta)** - **_一個可自訂的以太坊開發環境,提供熱重載、錯誤檢查和一流的測試網支援_** - -- [文件](https://docs.replit.com/) - -**[Tenderly Sandbox](https://sandbox.tenderly.co/)** - **_一個快速的原型建置環境,讓你可以使用 Solidity 和 JavaScript 在瀏覽器中編寫、執行智慧型合約並對其偵錯_** - -**[EthFiddle](https://ethfiddle.com/)** - **_網頁型整合開發環境 (IDE),可讓你編寫、編譯智慧型合約並對其偵錯_** - -- [Gitter](https://gitter.im/loomnetwork/ethfiddle) - -## 桌上型整合開發環境 {#desktop-ides} - -大多數成熟的整合開發環境都內建了外掛程式來增強以太坊開發體驗。 這些整合開發環境至少為[智慧型合約語言](/developers/docs/smart-contracts/languages/)提供語法醒目提示。 - -**Visual Studio Code -** **_專業跨平台整合開發環境,獲以太坊官方支援_** - -- [Visual Studio Code](https://code.visualstudio.com/) -- [Azure Blockchain Workbench](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/microsoft-azure-blockchain.azure-blockchain-workbench?tab=Overview) -- [程式碼範例](https://github.com/Azure-Samples/blockchain/blob/master/blockchain-workbench/application-and-smart-contract-samples/readme.md) -- [GitHub](https://github.com/microsoft/vscode) - -**Atom -** **_21 世紀適用的可破解文字編輯器_** - -- [Atom](https://atom.io/) -- [GitHub](https://github.com/atom) -- [Ethereum 方案](https://atom.io/packages/search?utf8=%E2%9C%93&q=keyword%3Aethereum&commit=Search) - -**JetBrains 整合開發環境(IntelliJ IDEA 等) -****_軟體開發者和團隊的必備工具_** - -- [JetBrains](https://www.jetbrains.com/) -- [GitHub](https://github.com/JetBrains) -- [IntelliJ Solidity](https://github.com/intellij-solidity/intellij-solidity/) - -**Remix Desktop -****_在本地機器上體驗 Remix 整合開發環境_** - -- [下載](https://github.com/ethereum/remix-desktop/releases) -- [GitHub](https://github.com/ethereum/remix-desktop) - -## 外掛程式和擴充功能 {#plugins-extensions} - -- [solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) - 支援 Visual Studio Code 的以太坊 Solidity 語言 -- [支援 VS Code 的 Solidity + Hardhat ](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Hardhat 團隊提供 Solidity 和 Hardhat 支援 -- [Prettier Soliditty](https://github.com/prettier-solidity/prettier-plugin-solidity) - 使用 prettier 的程式碼格式器 - -## 衍生閱讀 {#further-reading} - -- [以太坊整合開發環境](https://www.alchemy.com/list-of/web3-ides-on-ethereum) _ - Alchemy 提供的以太坊整合開發環境清單_ - -_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dart/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dart/index.md" deleted file mode 100644 index 911e1cf9d61..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dart/index.md" +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Dart 開發者適用的以太坊資源 -description: 學習如何使用 Dart 語言進行以太坊開發 -lang: zh-tw -incomplete: true ---- - -## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} - -## 指導手冊 {#tutorials} - -- [Flutter 與區塊鏈 – Hello World 去中心化應用程式](https://www.geeksforgeeks.org/flutter-and-blockchain-hello-world-dapp/)帶您完成入門的所有步驟: - 1. 安裝 [Truffle 開發套件](https://www.trufflesuite.com/) - 2. 使用 [Solidity](https://soliditylang.org/) 編寫智慧型合約 - 3. 使用 Dart 編寫使用者介面 -- 如果你已有基礎知識,[使用 Flutter 建立行動去中心化應用程式](https://medium.com/dash-community/building-a-mobile-dapp-with-flutter-be945c80315a)的篇幅要短很多, 可能是更好選擇 -- 如果你偏好透過觀看影片來學習,可以觀看[建立你的第一個區塊鏈 Flutter 應用程式](https://www.youtube.com/watch?v=3Eeh3pJ6PeA),片長約一小時 -- 如果你時間不足,可能更喜歡[在以太坊上使用 Flutter 和 Dart 建立區塊鏈去中心化應用程式](https://www.youtube.com/watch?v=jaMFEOCq_1s),只需大約二十分鐘 -- [透過 WalletConnect 的 Web3Modal 將 MetaMask 整合到 Flutter 應用程式](https://www.youtube.com/watch?v=v_M2buHCpc4) - 這段簡短影片會一步一步帶你使用 WalletConnect 的 [Web3Modal](https://pub.dev/packages/web3modal_flutter) 程式庫,將 MetaMask 整合到 Flutter 應用程式中 -- [Flutter 去中心化應用程式簡易錢包](https://youtu.be/JMfIBpuAhKA) 和[首個 Flutter 去中心化應用程式 - Solidity、Truffle、Ganache](https://youtu.be/bHw2gQZxJ_s) - 這些影片展示如何使用 Truffle 和 Ganache 在 Flutter 建立簡易的去中心化應用程式 -- [Solidity 和 Flutter 行動區塊鏈開發者訓練營課程](https://youtube.com/playlist?list=PL4V4Unlk5luhQ26ERO6hWEbcUwHDSSmVH) - 全端行動區塊鏈開發者課程播放列表 - -## 與以太坊客戶合作工作 {#working-with-ethereum-clients} - -你可以使用以太坊,來建立能夠利用加密貨幣與區塊鏈技術長處的去中心化應用程式(或稱「dapp」)。 目前至少有兩個維護的程式庫 可供 Dart 使用以太坊的 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)。 - -1. [simonbutler.eu 的 Web3dart](https://pub.dev/packages/web3dart) -1. [來自 darticulate.com 的以太坊 5.0.0](https://pub.dev/packages/ethereum) - -還有其他程式庫讓你能夠操作特定的以太坊地址, 或擷取各種加密貨幣的價格。 [你在這裡可以看到完整清單](https://pub.dev/dart/packages?q=ethereum)。 diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/delphi/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/delphi/index.md" deleted file mode 100644 index cb6f61cbfcb..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/delphi/index.md" +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Delphi 開發者適用的以太坊資源 -description: 學習如何使用 Delphi 程式設計語言進行以太坊開發 -lang: zh-tw -incomplete: true ---- - - - -學習如何使用 Delphi 程式設計語言進行以太坊開發 - - - -使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 - -在以太坊上構建去中心化應用程式,並使用 Delphi 程式設計語言與智慧型合約互動! - -## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-the-solidity-language} - -**邁出第一步,整合 Delphi 與以太坊** - -需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 - -- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) -- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) -- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) - -## 初學者參考和連結 {#beginner-references-and-links} - -**Delphereum 程式庫簡介** - -- [甚麼是 Delphereum?](https://github.com/svanas/delphereum/blob/master/README.md) -- [將 Delphi 連結到本地(記憶體內部)區塊鏈](https://medium.com/@svanas/connecting-delphi-to-a-local-in-memory-blockchain-9a1512d6c5b0) -- [將 Delphi 連結到以太坊主網](https://medium.com/@svanas/connecting-delphi-to-the-ethereum-main-net-5faf1feffd83) -- [將 Delphi 連結到智慧型合約](https://medium.com/@svanas/connecting-delphi-to-smart-contracts-3146b12803a1) - -**想要跳過設定,並直接跳至範例?** - -- [三分鐘的智慧型合約和 Delphi - 第 1 部分](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-61d998571d) -- [三分鐘的智慧型合約和 Delphi - 第 2 部分](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-part-2-446925faa47b) - -## 中階文章 {#intermediate-articles} - -- [使用 Delphi 產生以太坊簽名的訊息簽章](https://medium.com/@svanas/generating-an-ethereum-signed-message-signature-in-delphi-75661ce5031b) -- [使用 Delphi 傳送以太幣](https://medium.com/@svanas/transferring-ether-with-delphi-b5f24b1a98a4) -- [使用 Delphi 傳送 ERC-20 代幣](https://medium.com/@svanas/transferring-erc-20-tokens-with-delphi-bb44c05b295d) - -## 進階使用模式 {#advanced-use-patterns} - -- [Delphi 和以太坊名稱服務 (ENS)](https://medium.com/@svanas/delphi-and-ethereum-name-service-ens-4443cd278af7) -- [QuikNode、以太坊 和 Delphi](https://medium.com/@svanas/quiknode-ethereum-and-delphi-f7bfc9671c23) -- [Delphi 和以太坊黑暗森林](https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93) -- [在 Delphi 中將一種代幣兌換成另一種代幣](https://svanas.medium.com/swap-one-token-for-another-in-delphi-bcb999c47f7) - -想取得更多資源? 請瀏覽[ethereum.org/developers](/developers/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dot-net/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dot-net/index.md" deleted file mode 100644 index 14f8a735568..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/dot-net/index.md" +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: .NET 開發者適用的以太坊資源 -description: 學習如何使用 .NET 型專案和工具進行以太坊開發 -lang: zh-tw -incomplete: true ---- - -學習如何使用 .NET 型專案和工具進行以太坊開發 - -使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 - -使用 Microsoft 技術堆疊中的工具和語言在以太坊上構建去中心化應用程式並與智慧型合約進行 互動 - 跨 .NET Framework/.NET Core/.NET Standard 在 VSCode 和 Visual Studio 等工具上支援 C#、# Visual Basic .NET 和 F#。 在幾分鐘內使用 Microsoft Azure 區塊鏈在 Azure上部署以太坊區塊鏈。 將對 .NET 的喜愛轉移至以太坊! - -## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-the-solidity-language} - -**邁出第一步,整合 .NET 與以太坊** - -需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 - -- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) -- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) -- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) - -## 初學者參考和連結 {#beginner-references-and-links} - -**Nethereum 程式庫和 VS Code Solidity 簡介** - -- [Nethereum 入門](https://docs.nethereum.com/en/latest/getting-started/) -- [安裝 VS Code Solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) -- [.NET 開發者建立和調用以太坊智慧型合約的工作流程](https://medium.com/coinmonks/a-net-developers-workflow-for-creating-and-calling-ethereum-smart-contracts-44714f191db2) -- [智慧型合約與 Nethereum 的整合](https://kauri.io/#collections/Getting%20Started/smart-contracts-integration-with-nethereum/#smart-contracts-integration-with-nethereumm) -- [使用 Nethereum 連接 .NET 和以太坊區塊鏈智慧型合約](https://medium.com/my-blockchain-development-daily-journey/interfacing-net-and-ethereum-blockchain-smart-contracts-with-nethereum-2fa3729ac933),也可參考此[中文版](https://medium.com/my-blockchain-development-daily-journey/%E4%BD%BF%E7%94%A8nethereum%E9%80%A3%E6%8E%A5-net%E5%92%8C%E4%BB%A5%E5%A4%AA%E7%B6%B2%E5%8D%80%E5%A1%8A%E9%8F%88%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84-4a96d35ad1e1) -- [Nethereum - 區塊鏈的開放源始碼 .NET 整合程式庫](https://kauri.io/#collections/a%20hackathon%20survival%20guide/nethereum-an-open-source-.net-integration-library/) -- [使用 Nethereum 將以太坊交易寫入 SQL 資料庫](https://medium.com/coinmonks/writing-ethereum-transactions-to-sql-database-using-nethereum-fd94e0e4fa36) -- [瞭解如何使用 C# 和 VisualStudio 輕鬆部署以太坊智慧型合約](https://koukia.ca/deploy-ethereum-smart-contracts-using-c-and-visualstudio-5be188ae928c) - -**想要跳過設定,直接了解範例?** - -- [訓練場](http://playground.nethereum.com/) - 與以太坊互動,並學習如何透過瀏覽器使用 Nethereum。 - - 查詢帳戶餘額 [C#](http://playground.nethereum.com/csharp/id/1001) [VB.NET](http://playground.nethereum.com/vb/id/2001) - - 查詢 ERC20 智慧型合約餘額 [C#](http://playground.nethereum.com/csharp/id/1005) [VB.NET](http://playground.nethereum.com/vb/id/2004) - - 將以太幣傳送至帳戶 [C#](http://playground.nethereum.com/csharp/id/1003) [VB.NET](http://playground.nethereum.com/vb/id/2003) - - ... 和更多相關內容! - -## 中級文章 {#intermediate-articles} - -- [Nethereum 活頁簿/範例清單](http://docs.nethereum.com/en/latest/Nethereum.Workbooks/docs/) -- [部署你自己的開發測試鏈](https://github.com/Nethereum/Testchains) -- [Solidity 的 VSCode 程式碼產生外掛程式](https://docs.nethereum.com/en/latest/nethereum-codegen-vscodesolidity/) -- [Unity 和以太坊:為何以及如何](https://www.raywenderlich.com/5509-unity-and-ethereum-why-and-how) -- [為以太坊去中心化應用程式建立 ASP.NET 核心 Web 應用程式介面](https://tech-mint.com/blockchain/create-asp-net-core-web-api-for-ethereum-dapps/) -- [使用 Nethereum Web3 實作供應鏈追踪系統](http://blog.pomiager.com/post/using-nethereum-web3-to-implement-a-supply-chain-traking-system4) -- [Nethereum 區塊處理](https://nethereum.readthedocs.io/en/latest/nethereum-block-processing-detail/),包含 [C# 訓練場範例](http://playground.nethereum.com/csharp/id/1025) -- [Nethereum Websocket 串流](https://nethereum.readthedocs.io/en/latest/nethereum-subscriptions-streaming/) -- [Kaleido 和 Nethereum](https://kaleido.io/kaleido-and-nethereum/) -- [Quorum 和 Nethereum](https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Quorum/README.md) - -## 進階使用模式 {#advanced-use-patterns} - -- [Azure 金鑰保存庫和 Nethereum](https://github.com/Azure-Samples/bc-community-samples/tree/master/akv-nethereum) -- [Nethereum.DappHybrid](https://github.com/Nethereum/Nethereum.DappHybrid) -- [Ujo Nethereum 後端參考架構](https://docs.nethereum.com/en/latest/nethereum-ujo-backend-sample/) - -## .NET 專案、工具及其他有趣內容 {#dot-net-projects-tools-and-other-fun-stuff} - -- [Nethereum 訓練場](http://playground.nethereum.com/) - _在瀏覽器中編譯、建立和執行 Nethereum 程式碼片段_ -- [Nethereum Codegen Blazor](https://github.com/Nethereum/Nethereum.CodeGen.Blazor) - _Blazor 中的 Nethereum 程式碼產生使用者介面_ -- [Nethereum Blazor](https://github.com/Nethereum/NethereumBlazor) - _.NET Wasm 單頁應用程式輕量區塊鏈瀏覽器和簡易錢包_ -- [Wonka Business Rules Engine](https://docs.nethereum.com/en/latest/wonka/) - _本質上由中繼資料驅動的業務規則引擎(同時適用於. NET 平台和以太坊平台)_ -- [Nethermind](https://github.com/NethermindEth/nethermind) - _.NET Core 以太坊用戶端,適用於 Linux、Windows 和 MacOS_ -- [eth-utils](https://github.com/ethereum/eth-utils/) - _使用以太坊相關程式碼庫的公用程式函式_ -- [TestChains](https://github.com/Nethereum/TestChains) - _可實現快速回應的預先設定的 .NET 開發鏈 (PoA)_ - -想取得更多資源? 請瀏覽[ethereum.org/developers](/developers/) - -## .NET 社群貢獻者 {#dot-net-community-contributors} - -在 Nethereum,我們主要活躍於 [Gitter](https://gitter.im/Nethereum/Nethereum) 上,任何人都可以前來提問/回答問題,獲得協助或者放鬆一下。 隨意在 [Nethereum GitHub 儲存庫](https://github.com/Nethereum)上提交拉取請求或開立一個議題,或僅瀏覽我們提供的許多小專案/範例專案。 你也可以在 [Discord](https://discord.gg/jQPrR58FxX) 上找到我們! - -如果你是 Nethermind 新手並需要入門幫助,請加入我們的 [Discord](http://discord.gg/PaCMRFdvWT)。 我們的開發者隨時準備回答你的問題。 隨時在 [Nethermind GitHub 存儲庫](https://github.com/NethermindEth/nethermind)上建立拉取請求或提出任何議題。 - -## 其他彙總列表 {#other-aggregated-lists} - -[官方 Nethereum 網站](https://nethereum.com/) -[官方 Nethermind 網站](https://nethermind.io/) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/golang/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/golang/index.md" deleted file mode 100644 index b0533e8065b..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/golang/index.md" +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Go 開發者適用的 Ethereum 資源 -description: 學習如何使用 Go 型專案和工具進行以太坊開發 -lang: zh-tw -incomplete: true ---- - -學習如何使用 Go 型專案和工具進行以太坊開發 - -使用以太坊建立去中心化應用程式(或稱「dapp」)。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程式是去中心化的,意味著它們在點對點網路上運行,並且不存在單點故障。 這些應用程式不會被單一實體或個人控制,並且幾乎不可能對其進行審查。 它們可以控制數位資產以建立新型應用程式。 - -## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} - -**邁出第一步,整合 Go 與以太坊** - -需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 - -- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) -- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) -- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) -- [合約教學](https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial) - -## 初學者文章和書籍 {#beginner-articles-and-books} - -- [選擇 Ethereum 用戶端](https://www.trufflesuite.com/docs/truffle/reference/choosing-an-ethereum-client) -- [Geth 入門](https://medium.com/@tzhenghao/getting-started-with-geth-c1a30b8d6458) -- [使用 Golang 連結至以太坊](https://www.youtube.com/watch?v=-7uChuO_VzM) -- [使用 Golang 部署以太坊智慧型合約](https://www.youtube.com/watch?v=pytGqQmDslE) -- [使用 Go 測試和部署以太坊智慧型合約的逐步指南](https://hackernoon.com/a-step-by-step-guide-to-testing-and-deploying-ethereum-smart-contracts-in-go-9fc34b178d78) -- [電子書:使用 Go 開發以太坊](https://goethereumbook.org/) - _使用 Go 開發以太坊應用程式_ - -## 中階文章和文件 {#intermediate-articles-and-docs} - -- [Go 以太坊相關文件](https://geth.ethereum.org/docs/) - _官方以太坊 Golang 相關文件_ -- [Erigon 程式設計者指南](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _圖文指南包括狀態樹、多重證明和交易處理_ -- [Erigon 和無狀態以太坊](https://youtu.be/3-Mn7OckSus?t=394) - _2020 年以太坊社群會議 (EthCC 3)_ -- [Erigon:最佳化以太坊用戶端](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 年開發者大會 4 _ -- [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) -- [在 Go 上使用 Geth 建立去中心化應用程式](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) -- [透過 Golang 和 Geth 使用以太坊專用網路](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) -- [使用 Go 對以太坊上的 Solidity 合約進行單元測試](https://medium.com/coinmonks/unit-testing-solidity-contracts-on-ethereum-with-go-3cc924091281) -- [使用 Geth 作為程式庫的快速參考](https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e) - -## 進階使用模式 {#advanced-use-patterns} - -- [GETH 模擬後端](https://kauri.io/#collections/An%20ethereum%20test%20toolkit%20in%20Go/the-geth-simulated-backend/#_top) -- [使用以太坊和 Quorum 的區塊鏈即服務應用程式](https://blockchain.dcwebmakers.com/blockchain-as-a-service-apps-using-ethereum-and-quorum.html) -- [以太坊區塊鏈應用程式中的分佈式存儲星際檔案系統和 Swarm](https://blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html) -- [行動用戶端:程式庫和 Inproc 以太坊節點](https://github.com/ethereum/go-ethereum/wiki/Mobile-Clients:-Libraries-and-Inproc-Ethereum-Nodes) -- [原生去中心化應用程式:以太坊合約的 Go 繫結](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) - -## Go 專案和工具 {#go-projects-and-tools} - -- [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _以太坊協定的官方 Go 實作_ -- [Go Ethereum 程式碼分析](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _審查和分析 Go Ethereum 原始程式碼_ -- [Erigon](https://github.com/ledgerwatch/erigon) - _Go 以太坊的更快衍生品,專注於歸檔節點_ -- [Golem](https://github.com/golemfactory/golem) - _Golem 正在建立一個算力全球市場_ -- [Quorum](https://github.com/jpmorganchase/quorum) - _支援資料隱私的許可制以太坊實作_ -- [Prysm](https://github.com/prysmaticlabs/prysm) - _以太坊「Serenity」2.0 Go 實作_ -- [Eth Tweet](https://github.com/kyokan/plasma) - _去中心化 Twitter:在以太坊區塊鏈上執行的微型部落格服務_ -- [Plasma MVP Golang](https://github.com/kyokan/plasma) — _Golang 實作以及最小可行性 Plasma 規範的擴展_ -- [Open Ethereum Mining Pool](https://github.com/sammy007/open-ethereum-pool) - _以太坊開源礦池_ -- [Ethereum HD Wallet](https://github.com/miguelmota/go-ethereum-hdwallet) - _使用 Go 的 Ethereum 硬體錢包衍生品_ -- [Multi Geth](https://github.com/multi-geth/multi-geth) - _支援多種以太坊網路_ -- [Geth Light Client](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _輕量級以太坊子協定的 Geth 實作_ -- [以太坊 Golang 軟體開發套件](https://github.com/everFinance/goether) - _使用 Golang 的簡單以太坊錢包實作和公用程式_ -- [Covalent Golang 軟體開發套件](https://github.com/covalenthq/covalent-api-sdk-go) - _透過 Go 軟體開發套件高效率存取 200 多個區塊鏈的資料_ - -想取得更多資源? 請查看 [ethereum.org/developers](/developers/) - -## Go 社群貢獻者 {#go-community-contributors} - -- [Geth Discord](https://discordapp.com/invite/nthXNEv) -- [Geth Gist](https://gitter.im/ethereum/go-ethereum) -- [Gophers Slack](https://invite.slack.golangbridge.org/) - [#以太坊頻道](https://gophers.slack.com/messages/C9HP1S9V2) -- [StackExchange - 以太坊](https://ethereum.stackexchange.com/) -- [Multi Geth Gitter](https://gitter.im/ethoxy/multi-geth) -- [Ethereum Gitter](https://gitter.im/ethereum/home) -- [Geth light Client Gitter](https://gitter.im/ethereum/light-client) - -## 其他彙總列表 {#other-aggregated-lists} - -- [Awesome Ethereum](https://github.com/btomashvili/awesome-ethereum) -- [Consensys:以太坊開發者工具的最終清單](https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974) | [GitHub 來源](https://github.com/ConsenSys/ethereum-developer-tools-list) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/index.md" deleted file mode 100644 index a18a3d8dacd..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/index.md" +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 程式語言 -description: -lang: zh-tw ---- - -常見的誤解是,開發者必須編寫[智慧型合約](/developers/docs/smart-contracts/)才能在以太坊上構建。 這是錯誤的。 以太坊網路和社群的優點之一是幾乎可以使用任何程式設計語言[參與](/community/)其中。 - -以太坊及其社群推崇開放原始碼。 你能找到各種語言的社群專案:用戶端實作、應用程式介面、開發架構、測試工具。 - -## 選擇你的語言 {#data} - -選擇你的程式設計語言以尋找專案、資源和虛擬社群: - -- [Dart開發者適用的 Ethereum 資源](/developers/docs/programming-languages/dart/) -- [Delphi 開發者適用的Ethereum 資源](/developers/docs/programming-languages/delphi/) -- [.NET 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/dot-net/) -- [Go 開發者適用的以太坊資源](/developers/docs/programming-languages/golang/) -- [Java 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/java/) -- [JavaScript 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/javascript/) -- [Python 開發者適用的以太坊資源](/developers/docs/programming-languages/python/) -- [Ruby 開發者適用的以太坊資源](/developers/docs/programming-languages/ruby/) -- [Rust 開發者適用的 Ethereum 資源](/developers/docs/programming-languages/rust/) - -### 如果我的語言不受支援,該怎麼辦 {#other-lang} - -如果想連結到資源或指向其他程式設計語言的虛擬社區,可以透過[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new/choose)來請求新頁面。 - -如果只是想使用目前不支援的語言編寫程式碼來連結區塊鏈, 可以使用 [JSON-RPC 介面](/developers/docs/apis/json-rpc/)連結到以太坊網路。 任何可以 使用 TCP/IP 的程式設計語言都可以使用該介面。 diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/java/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/java/index.md" deleted file mode 100644 index 7ed8da743d6..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/java/index.md" +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Java 開發者適用的以太坊資源 -description: 學習如何使用 Java 型專案和工具進行以太坊開發 -lang: zh-tw -incomplete: true ---- - -學習如何使用 Java 型專案和工具進行以太坊開發 - -使用以太坊建立去中心化應用程式(或稱「dapp」),發揮加密貨幣和區塊鏈技術的優勢。 這些去中心化應用程式是可信的,這意味著一旦部署到以太坊後,它們就會始終按照設定執行。 這些應用程式可以控制數位資產,以便建立新型金融應用程式。 這些應用程式是去中心化的,這意味著任何單一實體或個人都無法控制它們,並且應用程式幾乎不可能被審查。 - -## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} - -**邁出第一步,整合 Java 與以太坊** - -需要先看看更基礎的入門指南? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 - -- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) -- [瞭解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) -- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [學習如何編譯和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) - -## 使用以太坊用戶端 {#working-with-ethereum-clients} - -學習如何使用兩種先進的 Java 以太坊用戶端 [Web3J](https://github.com/web3j/web3j) 和 Hyperledger Besu - -- [使用 Java 、Eclipse 和 Web3J 連線以太坊用戶端](https://kauri.io/article/b9eb647c47a546bc95693acc0be72546/connecting-to-an-ethereum-client-with-java-eclipse-and-web3j) -- [使用 Java 和 Web3j 管理以太坊帳戶](https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3j) -- [從智慧型合約產生 Java 包裝函式](https://kauri.io/article/84475132317d4d6a84a2c42eb9348e4b/generate-a-java-wrapper-from-your-smart-contract) -- [與以太坊智慧型合約互動](https://kauri.io/article/14dc434d11ef4ee18bf7d57f079e246e/interacting-with-an-ethereum-smart-contract-in-java) -- [偵聽以太坊智慧型合約事件](https://kauri.io/article/760f495423db42f988d17b8c145b0874/listening-for-ethereum-smart-contract-events-in-java) -- [使用 Linux 下的 Java 以太坊用戶端 Besu (Pantheon)](https://kauri.io/article/276dd27f1458443295eea58403fd6965/using-pantheon-the-java-ethereum-client-with-linux) -- [在 Java 整合測試中執行 Hyperledger Besu (Pantheon) 節點](https://kauri.io/article/7dc3ecc391e54f7b8cbf4e5fa0caf780/running-a-pantheon-node-in-java-integration-tests) -- [Web3j 速查表](https://kauri.io/web3j-cheat-sheet-(java-ethereum)/5dfa1ea941ac3d0001ce1d90/c) - -學習如何使用非同步高效能 Kotlin 程式庫 [ethers-kt](https://github.com/Kr1ptal/ethers-kt),用來與基於以太坊虛擬機的區塊鏈互動。 針對 JVM 和 Android 平台。 -- [傳送 ERC20 代幣](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/abi/TransferERC20.kt) -- [通過偵聽事件實現 UniswapV2 兌換](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/tokenswapwitheventlistening/TokenSwapWithEventListening.kt) -- [以太幣 / ERC20 餘額追蹤器](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/balancetracker/BalanceTracker.kt) - -## 中階文章 {#intermediate-articles} - -- [使用星際檔案系統在 Java 應用程式中管理存儲](https://kauri.io/article/3e8494f4f56f48c4bb77f1f925c6d926/managing-storage-in-a-java-application-with-ipfs) -- [使用 Web3j 在 Java 中管理 ERC20 代幣](https://kauri.io/article/d13e911bbf624108b1d5718175a5e0a0/manage-erc20-tokens-in-java-with-web3j) -- [Web3j 交易管理程式](https://kauri.io/article/4cb780bb4d0846438d11885a25b6d7e7/web3j-transaction-managers) - -## 進階使用模式 {#advanced-use-patterns} - -- [使用 Eventeum 建置 Java 智慧型合約資料快取](使用 Eventeum 構建Java 智慧型合約數據緩存) - -## Java 專案和工具 {#java-projects-and-tools} - -- [Hyperledger Besu (Pantheon)(以太坊用戶端)](https://docs.pantheon.pegasys.tech/en/stable/) -- [Web3J(用來與以太坊用戶端互動的程式庫)](https://github.com/web3j/web3j) -- [ethers-kt(適用於基於以太坊虛擬機的區塊鏈的非同步、高效能 Kotlin/Java/Android 程式庫。)](https://github.com/Kr1ptal/ethers-kt) -- [Eventeum(事件偵聽程式)](https://github.com/ConsenSys/eventeum) -- [Mahuta(星際檔案系統開發者工具)](https://github.com/ConsenSys/mahuta) - -想取得更多資源? 請參考 [ethereum.org/developers。](/developers/) - -## Java 社群貢獻者 {#java-community-contributors} - -- [IO Builders](https://io.builders) -- [Kauri](https://kauri.io) -- [Besu HL 聊天室](https://chat.hyperledger.org/channel/besu) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/javascript/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/javascript/index.md" deleted file mode 100644 index efaac18d40a..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/javascript/index.md" +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: JavaScript 開發者適用的以太坊資源 -description: 學習如何使用 JavaScript 型專案和工具進行以太坊開發。 -lang: zh-tw ---- - -JavaScript 是以太坊生態系統中最常用的語言之一。 事實上,有[團隊](https://github.com/ethereumjs)致力於將盡可能多的以太坊內容引入 JavaScript。 - -有機會在[堆疊的所有層級](/developers/docs/ethereum-stack/)編寫 JavaScript(或類似內容)。 - -## 與以太坊互動 {#interact-with-ethereum} - -### Javascript 應用程式介面程式庫 {#javascript-api-libraries} - -如果想編寫 JavaScript 來查詢區塊鏈、傳送交易等,最方便的方法是使用 [JavaScript 應用程式介面程式庫](/developers/docs/apis/javascript/)。 這些應用程式介面讓開發者能夠輕鬆與[以太坊網路中的節點](/developers/docs/nodes-and-clients/)進行互動。 - -你可以使用這些程式庫與以太坊上的智慧型合約進行互動,因此可以構建一個去中心化應用程式,在此去中心化應用程式中,你只需使用 JavaScript 就能夠與預先存在的合約進行互動。 - -**查看** - -- [Web3.js](https://web3js.readthedocs.io/) -- [Ethers.js](https://docs.ethers.io/) _– 包含 JavaScript 和 TypeScript 的以太坊錢包實作和公用程式。_ -- [viem](https://viem.sh) – 以太坊的 TypeScript 介面,提供用於與以太坊互動的低階無狀態基元。 - -### 智慧型合約 {#smart-contracts} - -如果你是 JavaScript 開發者,並打算編寫自己的智慧型合約,那你會想瞭解 [Solidity](https://solidity.readthedocs.io)。 這是最常用的智慧型合約語言,它在語法上與 JavaScript 類似,因而可能更容易學習。 - -更多[智慧型合約](/developers/docs/smart-contracts/)相關資訊。 - -## 理解協定 {#understand-the-protocol} - -### 以太坊虛擬機 {#the-ethereum-virtual-machine} - -[以太坊虛擬機](/developers/docs/evm/)有 JavaScript 實作。 該虛擬機支援最新的分叉規則。 分叉規則是指由於計劃的升級而對以太坊虛擬機所做的變更。 - -分叉規則分為各種 JavaScript 包,可以查看這些包取得更深入的理解: - -- 帳戶 -- 區塊 -- 區塊鏈本身 -- 交易紀錄 -- 和更多相關內容... - -這將幫助你理解「帳戶的資料結構是什麼?」等問題。 - -如果你喜歡閱讀程式碼,此 JavaScript 可能是閱讀我們文件的絕佳替代方案。 - -**請查看 monorepo** -[`ethereumjs`](https://github.com/ethereumjs/ethereumjs-vm) - -### 節點和客戶 {#nodes-and-clients} - -目前正在開發的 Ethereum.js 讓你能夠深入瞭解以太坊用戶端如何用你理解的語言 JavaScript 運作! - -它曾經托管於獨立的[`儲存庫`](https://github.com/ethereumjs/ethereumjs-client)中,但後來作為一個包被併入 EthereumVM monorepo 中。 - -**請查看用戶端** -[`ethereumjs-client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client) - -## 其他專案 {#other-projects} - -以太坊 JavaScript 領域也發生了許多其他事情,包括: - -- 錢包公用程式程式庫。 -- 用於產生匯入和匯出以太坊金鑰的工具。 -- `merkle-patricia-tree` 的實作 – 以太坊黃皮書中概述的資料結構。 - -在 [EthereumJS repo](https://github.com/ethereumjs) 深入瞭解你感興趣的任何內容 - -## 了解更多 {#further-reading} - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/python/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/python/index.md" deleted file mode 100644 index 1cc55207439..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/python/index.md" +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Python 開發者適用的以太坊資源 -description: 學習如何使用 Python 型專案和工具進行以太坊開發 -lang: zh-tw -incomplete: true ---- - -學習如何使用 Python 型專案和工具進行以太坊開發 - -使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 - -## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} - -**邁出第一步,整合 Python 與以太坊** - -需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 - -- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) -- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) -- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) - -## 初學者文章 {#beginner-articles} - -- [以太坊 (Python) 開發者指南](https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/) -- [2023 年報告 Python 在區塊鏈中的狀態](https://tradingstrategy.ai/blog/the-state-of-python-in-blockchain-in-2023) -- [使用 Vyper 的智慧型合約簡介](https://kauri.io/#collections/Getting%20Started/an-introduction-to-smart-contracts-with-vyper/) -- [使用 Pyhthon 及 Brownie 來部署你自己的 ERC20 代幣](https://betterprogramming.pub/python-blockchain-token-deployment-tutorial-create-an-erc20-77a5fd2e1a58) -- [如何使用 Python Flask 開發 Ethereum 合約?](https://medium.com/coinmonks/how-to-develop-ethereum-contract-using-python-flask-9758fe65976e) -- [Web3.py 簡介 · Python 開發者適用的 Ethereum 資源](https://www.dappuniversity.com/articles/web3-py-intro) -- [如何使用 Python 和 web3.py 叫用智慧型合約函數?](https://stackoverflow.com/questions/57580702/how-to-call-a-smart-contract-function-using-python-and-web3-py) - -## 中階文章 {#intermediate-articles} - -- [適用 Python 程式設計者的去中心化應用程式開發](https://levelup.gitconnected.com/dapps-development-for-python-developers-f52b32b54f28) -- [建立 Python 以太坊介面:第 1 部分](https://hackernoon.com/creating-a-python-ethereum-interface-part-1-4d2e47ea0f4d) -- [使用 Python 編寫的以太坊智慧型合約:完整(不確定)指南](https://hackernoon.com/ethereum-smart-contracts-in-python-a-comprehensive-ish-guide-771b03990988) -- [使用 Brownie 和 Python 部屬智慧型合約](https://dev.to/patrickalphac/using-brownie-for-to-deploy-smart-contracts-1kkp) -- [使用 Brownie 於 OpenSea 建立非同質化代幣](https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/) - -## 進階使用模式 {#advanced-use-patterns} - -- [使用 Python 編譯、部署和呼叫以太坊智慧型合約](https://yohanes.gultom.id/2018/11/28/compiling-deploying-and-calling-ethereum-smartcontract-using-python/) -- [使用 Slither 分析 Solidity 智慧型合約](https://kauri.io/#collections/DevOps/analyze-solidity-smart-contracts-with-slither/#analyze-solidity-smart-contracts-with-slither) -- [區塊鏈金融科技教學:使用 Python 實作借貸](https://blog.chain.link/blockchain-fintech-defi-tutorial-lending-borrowing-python/) - -## Python 專案和工具 {#python-projects-and-tools} - -### 使用中: {#active} - -- [Web3.py](https://github.com/ethereum/web3.py) - _用於與以太坊互動的 Python 程式庫_ -- [Vyper](https://github.com/ethereum/vyper/) - _用於以太坊虛擬機的 Python 智慧型合約語言_ -- [Ape](https://github.com/ApeWorX/ape) - _ Python 程式人員、資料科學家和安全性專業人員適用的智慧合約開發工具_ -- [py-evm](https://github.com/ethereum/py-evm) - _以太坊虛擬機實作_ -- [eth-tester](https://github.com/ethereum/eth-tester) - _基於以太坊的應用程式的測試工具_ -- [eth-utils](https://github.com/ethereum/eth-utils/) - _使用 Ethereum 相關程式碼庫的公用程式函數_ -- [py-solc-x](https://pypi.org/project/py-solc-x/) - _適用於 solc solidity 編譯器(支援 0.5.x)的 Python 包裝函式_ -- [pymaker](https://github.com/makerdao/pymaker) - _用於 Maker 合約的 Python 應用程式介面_ -- [siwe](https://github.com/spruceid/siwe-py) - _用於 Python 的以太坊 (siwe) 登入_ -- [用於以太坊整合的 Web3 去中心化金融](https://github.com/tradingstrategy-ai/web3-ethereum-defi) - _一個預先整合 ERC-20、Uniswap 和其他受歡迎專案的 Python 包_ -- [Wake](https://getwake.io) - _用於合約測試、初略模糊、部署、漏洞掃描和程式碼導航的一體化 Python 框架(語言伺服器 - [Solidity 工具](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity))_ - -### 已歸檔/不再維護: {#archived--no-longer-maintained} - -- [Trinity](https://github.com/ethereum/trinity) - _以太坊 Python 用戶端_ -- [Mamba](https://github.com/arjunaskykok/mamba) - _用於編寫、編譯和部署使用 Vyper 語言編寫的智慧型合約的架構_ -- [Brownie](https://github.com/eth-brownie/brownie) - _用於部署、測試和與以太坊智慧型合約互動的 Python 框架_ -- [pydevp2p](https://github.com/ethereum/pydevp2p) - _以太坊點對點堆疊的實作_ -- [py-wasm](https://github.com/ethereum/py-wasm) - _網路組件解釋器 Python 實作_ - -想取得更多資源? 請查看 [ethereum.org/developers](/developers/)。 - -## 使用 Python 工具的專案 {#projects-using-python-tooling} - -以下基於以太坊的專案使用本頁提到的工具。 相關的開放原始碼儲存庫可以作為範例程式碼的良好參考和最佳做法。 - -- [Yearn Finance](https://yearn.finance/) 及 [Yearn Vault 合約儲存庫](https://github.com/yearn/yearn-vaults) -- [Curve](https://curve.fi/) 及 [Curve 智慧型合約儲存庫](https://github.com/curvefi/curve-contract) -- [BadgerDAO](https://badger.com/) 及 [使用 Brownie 工具鏈的智慧型合約](https://github.com/Badger-Finance/badger-system) -- [Sushi](https://sushi.com/) 使用 [Python 管理和部署其歸屬合約](https://github.com/sushiswap/sushi-vesting-protocols) -- [ Alpha Finance](https://alphafinance.io/) 以 Alpha Homora 聞名,使用 [Brownie 測試和部署智慧型合約](https://github.com/AlphaFinanceLab/alpha-staking-contract) - -## Python 社群討論 {#python-community-contributors} - -- [以太坊 Python 社群 Discord](https://discord.gg/9zk7snTfWe),可討論 Web3.py 與其他 Python 架構 -- [Vyper Discord](https://discord.gg/SdvKC79cJk) ,可討論 Vyper 智慧型合約程式設計語言 - -## 其他彙總清單 {#other-aggregated-lists} - -Vyper 維基百科提供[完善的 Vyper 資源清單](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) \ No newline at end of file diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/ruby/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/ruby/index.md" deleted file mode 100644 index d9865a9bfde..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/ruby/index.md" +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Ruby 開發者適用的以太坊資源 -description: 學習使用 Ruby 型專案和工具進行以太坊開發。 -lang: zh-tw -incomplete: false ---- - -學習使用 Ruby 型專案和工具進行以太坊開發。 - -使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式是無需信任的,這意味著一旦部署到以太坊後,就會始終按程式執行。 它們可以控制數位資產來建立新型的金融應用程式。 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 - -## 來開始學習智慧型合約及Solidity語言 {#getting-started-with-smart-contracts-and-solidity} - -**邁出第一步,整合 Ruby 與以太坊** - -需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 - -- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) -- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) -- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) - -## 初學者文章 {#beginner-articles} - -- [終於理解以太坊帳戶](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) -- [使用 MetaMask 最終驗證 Rails 使用者](https://dev.to/q9/finally-authenticating-rails-users-with-metamask-3fj) -- [Sign-In with Ethereum - Ruby 程式庫和 Rails 範例發佈](https://blog.spruceid.com/sign-in-with-ethereum-ruby-library-release-and-rails-examples/) -- [如何使用 Ruby 連接到以太坊網路](https://www.quicknode.com/guides/web3-sdks/how-to-connect-to-the-ethereum-network-using-ruby) -- [如何使用 Ruby 產生新的以太坊地址](https://www.quicknode.com/guides/web3-sdks/how-to-generate-a-new-ethereum-address-in-ruby) - -## 中階文章 {#intermediate-articles} - -- [使用 Ruby 編寫的區塊鏈應用程式](https://www.nopio.com/blog/blockchain-app-ruby/) -- [使用 Ruby 連接到以太坊來執行智慧型合約](https://titanwolf.org/Network/Articles/Article?AID=87285822-9b25-49d5-ba2a-7ad95fff7ef9) - -## Rust 專案和工具 {#ruby-projects-and-tools} - -### 使用中 {#active} - -- [eth.rb](https://github.com/q9f/eth.rb) - _Ruby 程式庫與遠端程序呼叫用戶端,用於處理以太坊帳戶、訊息以及交易_ -- [keccak.rb](https://github.com/q9f/keccak.rb) - _以太坊使用的 Keccak (SHA3) 雜湊值_ -- [siwe-ruby](https://github.com/spruceid/siwe-ruby) - _Sign-In with Ethereum的 Ruby 實作_ -- [siwe_rails](https://github.com/spruceid/siwe_rails) - _添加 SIWE 本地登入路由的 Rails gem_ -- [siwe-rails-examples](https://github.com/spruceid/siwe-rails-examples) - _使用 Ruby on Rails 的 SIWE 範例(含自訂控製器)_ -- [omniauth-siwe](https://github.com/spruceid/omniauth-siwe) - _面向 Sign In With Ethereum (SIWE) 的 OmniAuth 策略_ -- [omniauth-nft](https://github.com/valthon/omniauth-nft) - _面向通過非同質化代幣所有權進行身份驗證的 OmniAuth 策略_ -- [ethereum-on-rails](https://github.com/q9f/ethereum-on-rails) - _Ethereum on Rails 範本,允許將 MetaMask 連結到 Ruby on Rails_ - -### 已歸檔/不再維護 {#archived--no-longer-maintained} - -- [web3-eth](https://github.com/spikewilliams/vtada-ethereum) - _使用 Ruby 呼叫以太坊節點的遠端程序遠呼叫方法_ -- [ethereum_tree](https://github.com/longhoangwkm/ethereum_tree) - _用於根據 BIP32 標準從分層確定性錢包產生以太幣地址的 Ruby 程式庫_ -- [etherlite](https://github.com/budacom/etherlite) - _Ruby on Rails 的以太坊整合_ -- [ethereum.rb](https://github.com/EthWorks/ethereum.rb) - _使用 JSON-RPC 介面傳送交易、建立合約並與之互動的 Ruby 以太坊用戶端以及可使用以太坊節點的有用工具組_ -- [omniauth-ethereum.rb](https://github.com/q9f/omniauth-ethereum.rb) - _實作面向 OmniAuth 的以太坊提供者策略_ - -想取得更多資源? 請查看[開發者首頁](/developers/)。 - -## Ruby 社群貢獻者 {#ruby-community-contributors} - -[以太坊 Ruby Telegram 群組](https://t.me/ruby_eth)是一個快速發展的社群,是討論上述任何專案和相關主題的專用資源。 diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/rust/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/rust/index.md" deleted file mode 100644 index 25e1afbcdce..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/programming-languages/rust/index.md" +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Rust 開發者適用的以太坊資源 -description: 學習如何使用 Rust 型專案和工具進行以太坊開發 -lang: zh-tw -incomplete: true ---- - -學習如何使用 Rust 型專案和工具進行以太坊開發 - -使用 Ethereum 建立去中心化應用程式 (或稱「dapp」),發揮加密貨幣學和區塊鏈技術的優勢。 這些去中心化應用程式一旦部署到 Ethereum 後,就會持續地按照其設計的方式執行,進而成為非常可信的工具, 這些應用程序可以控制數字資產,以便創造新的金融應用; 這些應用程式是去中心化的,表示任何單一的實體或個人都不能加以控制,也幾乎不可能被審查。 - -## 智慧型合約及 Solidity 語言入門 {#getting-started-with-smart-contracts-and-solidity} - -**邁出第一步,整合 Rust 與以太坊** - -需要基礎的入門指南嗎? 請查看 [ethereum.org/learn](/learn/) 或 [ethereum.org/developers](/developers/)。 - -- [區塊鏈詳解](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) -- [了解智慧型合約](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) -- [編寫你的第一個智慧型合約](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) -- [學習如何編寫和部署 Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) - -## 初學者文章 {#beginner-articles} - -- [選擇以太坊用戶端](https://www.trufflesuite.com/docs/truffle/reference/choosing-an-ethereum-client) -- [Rust 以太坊用戶端](https://openethereum.github.io/) \* **請注意 OpenEthereum [已棄用](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd)且不再維護。**如欲使用此用戶端,請小心謹慎,最好改用其他用戶端實作。 -- [使用 Rust 向以太坊傳送交易](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/) -- [使用 Rust 為 Kovan 編寫 Wasm 合約的逐步教學](https://github.com/paritytech/pwasm-tutorial) - -## 中階文章 {#intermediate-articles} - -## 進階使用模式 {#advanced-use-patterns} - -- [與類 Ethereum 網路互動的 pwasm_ethereum 外部程式庫](https://github.com/openethereum/pwasm-ethereum) -- [使用 JavaScript 和 Rust 建置去中心化聊天室](https://medium.com/perlin-network/build-a-decentralized-chat-using-javascript-rust-webassembly-c775f8484b52) -- [使用 Vue.js 和 Rust 建置去中心化待辦事項應用程式](https://medium.com/@jjmace01/build-a-decentralized-todo-app-using-vue-js-rust-webassembly-5381a1895beb) - -- [使用 Rust 構建區塊鏈](https://blog.logrocket.com/how-to-build-a-blockchain-in-rust/) - -## Rust 專案和工具 {#rust-projects-and-tools} - -- [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _與類以太坊網路互動的外部程式庫集合_ -- [Lighthouse](https://github.com/sigp/lighthouse) - _快速以太坊共識層用戶端_ -- [ Ethereum WebAssembly](https://ewasm.readthedocs.io/en/mkdocs/) - _對以太坊智慧型合約執行層提議的重新設計,使用了 WebAssembly 的確定性子集_ -- [oasis_std](https://docs.rs/oasis-std/latest/oasis_std/index.html) - _OASIS 應用程式介面參考_ -- [Solaris](https://github.com/paritytech/sol-rs) - _使用原生 Parity 用戶端以太坊虛擬機的 Solidity 智慧型合約單元測試框架。_ -- [SputnikVM](https://github.com/rust-blockchain/evm) - _Rust 以太坊虛擬機實作_ -- [rust-web3](https://github.com/tomusdrw/rust-web3) - _ 使用 Rust 語言的 Wavelet 智慧型合約_ -- [Foundry](https://github.com/foundry-rs/foundry) - _以太坊應用程式開發工具組_ -- [Alloy](https://alloy.rs) - _高效能、經過充分測試和有記載的程式庫,用於與以太坊及其他基於以太坊虛擬機的鏈進行互動。_ -- [Ethers_rs](https://github.com/gakonst/ethers-rs) - _以太坊程式庫和錢包實作_ -- [SewUp](https://github.com/second-state/SewUp) - _程式庫,正如普通後端開發一樣,能夠協助使用 Rust 語言構建以太坊 Webassembly 合約_ -- [Substreams](https://github.com/streamingfast/substreams) - _平行化區塊鏈資料索引技術_ -- [Reth](https://github.com/paradigmxyz/reth) - Reth(Rust 以太坊的簡稱)是新的以太坊全節點實作 -- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _在以太坊生態系統中用 Rust 編寫的專案精選集合_ - -想取得更多資源? 請查看 [ethereum.org/developers](/developers/)。 - -## Rust 社群貢獻者 {#rust-community-contributors} - -- [Ethereum WebAssembly](https://gitter.im/ewasm/Lobby) -- [Oasis Gitter](https://gitter.im/Oasis-official/Lobby) -- [Parity Gitter](https://gitter.im/paritytech/parity) -- [Enigma](https://discord.gg/SJK32GY) diff --git "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/storage/index.md" "b/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/storage/index.md" deleted file mode 100644 index 7743865a665..00000000000 --- "a/public/content/translations/zh-tw/18) Docs \342\200\223 Tech Stack Pages/developers/docs/storage/index.md" +++ /dev/null @@ -1,217 +0,0 @@ ---- -title: 去中心化存儲 -description: 去中心化存儲及可以將該存儲整合到去中心化應用程式的可用工具概觀 -lang: zh-tw ---- - -與單一公司或組織運作的中心化伺服器不同,去中心化存儲系統由持有全部資料中部分資料的使用者和營運者的點對點網路組成,建立了一個彈性文件存儲共用系統。 這些存儲系統可以位於基於區塊鏈的應用程式或任何點對點網路中。 - -以太坊本身可以用作去中心化存儲系統,所有智慧型合約中的程式碼存儲都是如此。 然而,當涉及大量資料時,就不符合以太坊的設計目的。 該鏈正在穩步增長,但在撰寫本文時,以太坊鏈約為 500GB - 1TB([取決於用戶端](https://etherscan.io/chartsync/chaindefault)),網路上的每個節點都需要能夠存儲所有資料。 如果鏈上資料量擴大(例如 5TB),所有節點都無法繼續運作。 此外,由於[燃料](/developers/docs/gas)費用,將這麼多資料部署到主網的成本將非常昂貴。 - -由於這些限制,我們需要不同的鏈或方法來以去中心化方式存儲大量資料。 - -在考慮去中心化儲存 (dStorage) 選項時,使用者必須牢記一些事項。 - -- 持久性機制 / 激勵結構 -- 資料保留強制 -- 去中心化 -- 共識 - -## 持續機制 / 誘因架構 {#persistence-mechanism} - -### 基於區塊鏈 {#blockchain-based} - -為了讓一段資料永久保存,我們需要使用持久性機制。 例如,在以太坊上,持久性機制意味著運行一個節點時需要考慮整條鏈。 新的資料被新增至鏈的末端,並且鏈會繼續增長,並要求每個節點複製所有內嵌的資料。 - -這稱為**基於區塊鏈**的持久性。 - -基於區塊鏈的持久性會出現區塊鏈過大,無法維護和存儲所有資料的問題(例如[許多機構](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/)預測整條區塊鏈網路需要 40ZB 的存儲容量)。 - -區塊鏈也必須具有某種類型的激勵結構。 為實現基於區塊鏈的持久性,需要向驗證者支付費用。 資料被新增到鏈上後,向驗證者支付以讓其繼續添加資料。 - -具有基於區塊鏈的持久性的平台: - -- Ethereum -- [Arweave](https://www.arweave.org/) - -### 基於合約 {#contract-based} - -我們能直觀地感受到,**基於合約**的持久性使得資料不能被每個節點複製並永久存儲,而必須根據合約協定進行維護。 這些是與多個節點簽訂的協定,承諾在一段時間內保存一段資料。 一旦時間結束,就必須向節點續費,以保持資料的持久性。 - -在大多數情況下,不會將所有資料存儲在鏈上,而是存儲資料在鏈上位置的雜湊值。 這樣,就不需要擴充整個鏈來保留所有資料。 - -具有基於合約的持久性的平台: - -- [Filecoin](https://docs.filecoin.io/about-filecoin/what-is-filecoin/) -- [Skynet](https://siasky.net/) -- [Storj](https://storj.io/) -- [0Chain](https://0chain.net/) -- [Crust Network](https://crust.network) -- [Swarm](https://www.ethswarm.org/) -- [4EVERLAND](https://www.4everland.org/) - -### 其他考量 {#additional-consideration} - -星際檔案系統是一個儲存和存取檔案、網站、應用程式和資料的分散式系統。 雖然它沒有內建激勵計劃,但可以與上述任何基於合約的激勵解決方案一起使用,以獲得更長期的持久性。 另一個將資料持久儲存在星際檔案系統上的方法是與某項固定服務(表示將你的資料固定在某處)一起使用。 你甚至可以運行自己的星際檔案系統節點來為該網路做出貢獻,從而將你和/或他人的資料免費且持久地儲存在星際檔案系統上。 - -- [星際檔案系統](https://docs.ipfs.io/concepts/what-is-ipfs/) -- [Pinata](https://www.pinata.cloud/)_(星際檔案系統固定服務)_ -- [web3.storage](https://web3.storage/)_(星際檔案系統/菲樂幣固定服務)_ -- [Infura](https://infura.io/product/ipfs)_(星際檔案系統固定服務)_ -- [IPFS Scan](https://ipfs-scan.io) _(星際檔案系統固定瀏覽器)_ -- -- [Filebase](https://filebase.com)_(星際檔案系統固定服務)_ -- [Spheron Network](https://spheron.network/) _(星際檔案系統/菲樂幣固定服務)_ - -SWARM 是一種去中心化的資料儲存和分發技術,具有儲存激勵系統和儲存空間租金價格預測機。 - -## 資料保留 {#data-retention} - -為了保留資料,系統必須有某種機制來確保已保留資料。 - -### 質詢機制 {#challenge-mechanism} - -確保已保留資料的最常用方法之一是使用向節點發出的某種類型的加密質詢以確保節點仍然擁有資料。 一個簡單的例子就是查看Arweave的存取證明。 它們向節點發出質詢,看看節點是否擁有最新區塊和過去隨機區塊的資料。 如果節點無法給出答案,就會受到處罰。 - -具有查問機制的去中心化存儲類型: - -- 0Chain -- Skynet -- Arweave -- Filecoin -- Crust Network -- 4EVERLAND - -### 去中央化性 {#decentrality} - -沒有很好的工具來衡量平台的去中心化程度,但一般來說,你會希望使用不具有某種形式的「認識客戶」的工具來提供平台並非中心化的證據。 - -無「認識客戶」之去中心化工具: - -- 0Chain(實作非 KYC 版本) -- Skynet -- Arweave -- Filecoin -- IPFS -- Ethereum -- Crust Network -- 4EVERLAND - -### 共識 {#consensus} - -這些工具中的大多數都有自己的[共識機制](/developers/docs/consensus-mechanisms/)版本,但通常它們基於[**工作量證明 (PoW)**](/developers/docs/consensus-mechanisms/pow/) 或[**權益證明 (PoS)**](/developers/docs/consensus-mechanisms/pos/)。 - -基於工作量證明: - -- Skynet -- Arweave - -基於權益證明: - -- 以太坊 -- Filecoin -- 0Chain -- Crust Network - -## 相關工具 {#related-tools} - -**IPFS - _星際檔案系統是以太坊的去中心化存儲和檔案引用系統。_** - -- [Ipfs.io](https://ipfs.io/) -- [文件](https://docs.ipfs.io/) -- [Github](https://github.com/ipfs/ipfs) - -**Storj DCS - _為開發者提供安全、私有且相容 S3 的去中心化雲端物件存儲。_** - -- [Storj.io](https://storj.io/) -- [文件](https://docs.storj.io/) -- [GitHub](https://github.com/storj/storj) - -**Skynet - _Skynet 是一個致力於去中心化網路的去中心化工作量證明鏈。

- -- [Skynet.net](https://siasky.net/) -- [文件](https://siasky.net/docs/) -- [Github](https://github.com/SkynetLabs/) - -**Filecoin - _Filecoin 是由星際檔案系統背後的同一團隊建立的。 它是星際檔案系統概念之上的激勵層。_** - -- [Filecoin.io](https://filecoin.io/) -- [文件](https://docs.filecoin.io/) -- [Github](https://github.com/filecoin-project/) - -**Arweave - _Arweave 是一個用於存儲資料的去中心化存儲平台。_** - -- [Arweave.org](https://www.arweave.org/) -- [文件](https://docs.arweave.org/info/) -- [Arweave](https://github.com/ArweaveTeam/arweave/) - -**0chain - _0Chain 是具有分片和 blobber 的權益證明去中心化存儲平台。_** - -- [0Chain.net](https://0chain.net/) -- [文件](https://docs.0chain.net/0chain/) -- [Github](https://github.com/0chain/) - -**Crust Network - _Crust 是基於星際檔案系統的去中心化存儲平台。_** - -- [Crust.network](https://crust.network) -- [文件](https://wiki.crust.network) -- [GitHub](https://github.com/crustio) - -**Swarm - _用於以太坊 web3 堆疊的分佈式存儲平台和內容分發服務。_** - -- [EthSwarm.org](https://www.ethswarm.org/) -- [文件](https://docs.ethswarm.org/docs/) -- [Github](https://github.com/ethersphere/) - -**OrbitDB - _基於星際檔案系統的去中心化點對點資料庫。_** - -- [OrbitDB.org](https://orbitdb.org/) -- [文件](https://github.com/orbitdb/field-manual/) -- [Github](https://github.com/orbitdb/orbit-db/) - -**Aleph.im - _去中心化雲端專案(資料庫、檔案存儲、運算和去中心化身分)。 鏈下和鏈上點對點技術的獨特融合。 星際檔案系統和多鏈相容性。_** - -- [Aleph.im](https://aleph.im/) -- [文件](https://aleph.im/#/developers/) -- [Github](https://github.com/aleph-im/) - -**Ceramic - _使用者控制的星際檔案系統資料庫存儲,用於資料豐富且引人入勝的應用程式。_** - -- [Ceramic.network](https://ceramic.network/) -- [文件](https://developers.ceramic.network/learn/welcome/) -- [Github](https://github.com/ceramicnetwork/js-ceramic/) - -**Filebase - _ S3 相容的去中心化存儲和異地備援星際檔案系統固定服務。 所有透過 Filebase 上傳到星際檔案系統的檔案,都會自動被固定到 Filebase 基礎設施,並在全球複製 3 份。_** - -- [Filebase.com](https://filebase.com/) -- [文檔](https://docs.filebase.com/) -- [Github](https://github.com/filebase) - -**4EVERLAND - _Web 3.0 雲端運算平台,集存儲、運算和網路核心能力於一身,相容於 S3 並在星際檔案系統和 Arweave 等去中心化存儲網路上提供同步資料存儲。_** - -- [4everland.org](https://www.4everland.org/) -- [文件](https://docs.4everland.org/) -- [GitHub](https://github.com/4everland) - -**Kaleido - _區塊鏈即服務平台,具有點擊按鈕的星際檔案系統節點_** - -- [Kaleido](https://kaleido.io/) -- [文件](https://docs.kaleido.io/kaleido-services/ipfs/) -- [GitHub](https://github.com/kaleido-io) - -**Spheron Network - _Spheron 是一個平台即服務 (PaaS),專為希望在去中心化基礎設施上以最佳效能啟動其應用程式的去中心化應用程式而設計。 它提供開箱即用的運算、去中心化存儲、內容傳遞網路和網頁寄存。_** - -- [spheron.network](https://spheron.network/) -- [文件](https://docs.spheron.network/) -- [GitHub](https://github.com/spheronFdn) - -## 衍生閱讀 {#further-reading} - -- [什麼是去中心化存儲?](https://coinmarketcap.com/alexandria/article/what-is-decentralized-storage-a-deep-dive-by-filecoin) - _CoinMarketCap_ -- [打破關於去中心化存儲的五個常見誤解](https://www.storj.io/blog/busting-five-common-myths-about-decentralized-storage) - _Storj_ - -_知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!!_ - -## 相關主題 {#related-topics} - -- [開發架構](/developers/docs/frameworks/) diff --git a/public/content/translations/zh-tw/19) Learn Pages 2/glossary/index.md b/public/content/translations/zh-tw/19) Learn Pages 2/glossary/index.md deleted file mode 100644 index 5f2b6f00f58..00000000000 --- a/public/content/translations/zh-tw/19) Learn Pages 2/glossary/index.md +++ /dev/null @@ -1,499 +0,0 @@ ---- -title: 以太坊詞彙表 -description: 與以太坊相關的技術和非技術術語的不完整詞彙表 -lang: zh-tw ---- - -# 詞彙表 {#ethereum-glossary} - -## \# {#section-numbers} - - - - - -## A {#section-a} - - - - - - - - - - - - - - - - - - - - - -## B {#section-b} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## C {#section-c} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## D {#section-d} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## E {#section-e} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## F {#section-f} - - - - - - - - - - - - - - - - - - - -## G {#section-g} - - - - - - - - - - - - - - - -## H {#section-h} - - - - - - - - - - - - - -## I {#section-i} - - - - - - - - - - - - - -## K {#section-k} - - - - - - - - - - - -## L {#section-l} - - - - - - - - - - - - - - - - - -## M {#section-m} - - - - - - - - - - - - - - - - - - - - - - - - - -## N {#section-n} - - - - - - - - - - - - - -## O {#section-o} - - - - - - - - - - - - - -## P {#section-p} - - - - - - - - - - - - - - - - - - - - - - - - - - - -## R {#section-r} - - - - - - - - - - - - - - - -## S {#section-s} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## T {#section-t} - - - - - - - - - - - - - - - - - - - -## V {#section-v} - - - - - - - - - - - - - -## W {#section-w} - - - - - - - - - -## Z {#section-z} - - - - - - - - - -## 來源 {#sources} - -_摘自 [Andreas M. Antonopoulos 與 Gavin Wood](https://ethereumbook.info) 所著 [《精通以太坊》](https://github.com/ethereumbook/ethereumbook)(依據 CC-BY-SA 協議)_ - - - -## 完善本頁面 {#contribute-to-this-page} - -我們是否有所遺漏? 是否存在謬誤? 請在 GitHub 上為此詞彙表貢獻力量,幫助我們改進! - -[瞭解更多關於如何貢獻的資訊](/contributing/adding-glossary-terms) diff --git a/public/content/translations/zh-tw/19) Learn Pages 2/history/index.md b/public/content/translations/zh-tw/19) Learn Pages 2/history/index.md deleted file mode 100644 index 6777c2d197e..00000000000 --- a/public/content/translations/zh-tw/19) Learn Pages 2/history/index.md +++ /dev/null @@ -1,624 +0,0 @@ ---- -title: 以太坊歷史及分叉 -description: 以太坊區塊鏈的歷史,包含主要里程碑、更新及分叉。 -lang: zh-tw -sidebarDepth: 1 ---- - -# 以太坊歷史 {#the-history-of-ethereum} - -關於以太坊區塊鏈的所有重要里程碑、分叉與升級的時間軸。 - - - -分叉是需要對網路進行重大技術升級或變更的時刻 – 分叉通常源自以太坊改進提案 (EIP) 並變更了以太坊協定的「規則」。 - -需要升級集中控制的傳統軟體時,公司只會為終端使用者發佈一個新版本。 而區塊鏈的運作則有所不同,因其並無所謂的集中所有權。 以太坊用戶端必須升級自己的軟體,以實作新分叉規則。 加上區塊生成者(在工作量證明世界中為礦工,在權益證明世界中為驗證者)和節點必須依據新規則生成區塊並作驗證。 關於共識機制的更多資訊 - -這些規則變更可能會在網路中建立臨時分叉。 新區塊可以依據新規則或舊規則產生。 分叉通常會提前商定,以便用戶端能夠一致採用變更,並使升級後的分叉成為主鏈。 然而,在極少數情況下,對分叉的不同意見可能導致網路永久硬分叉 – 最爲著名的是去中心化自治組織分叉產生了以太坊經典。 - - - - - -以太坊底層的軟體由兩部分組成,稱為 [執行層](/glossary/#execution-layer) 和 [共識層](/glossary/#consensus-layer)。 - -**執行層升級命名** - -自 2021 年以來,**執行層**的升級是依據 [前幾屆開發者大會舉辦地點](https://devcon.org/en/past-events/) 的城市名稱按時間順序命名的: - -| 升級名稱 | 開發者大會年份 | 開發者大會編號 | 升級日期 | -| ------------ | ----------- | ------------- | ------------ | -| Berlin | 2015 | 0 | 2021 年 4 月 15 日 | -| London | 2016 | I | 2021 年 8 月 5 日 | -| Shanghai | 2017 | II | 2023 年 4 月 12 日 | -| **Cancun** | 2018 | III | 2024 年 3 月 13 日 | -| _Prague_ | 2019 | IV | 尚未決定 | -| _Osaka_ | 2020 | V | 尚未決定 | -| _Bogota_ | 2022 | VI | 尚未決定 | -| _Bangkok_ | 2024 | VII | 尚未決定 | - -**共識升級命名** - -自 [信標鏈](/glossary/#beacon-chain) 推出以來,**共識層**的升級以天體恒星依照字母順序命名: - -| 升級名稱 | 升級日期 | -| ----------------------------------------------------------- | ------------ | -| 信標鏈創世塊 | 2020 年 12 月 1 日 | -| [Altair](https://en.wikipedia.org/wiki/Altair) | 2021 年 10 月 27 日 | -| [Bellatrix](https://en.wikipedia.org/wiki/Bellatrix) | 2022 年 9 月 6 日 | -| [Capella](https://en.wikipedia.org/wiki/Capella) | 2023 年 4 月 12 日 | -| [**Deneb**](https://en.wikipedia.org/wiki/Deneb) | 2024 年 3 月 13 日 | -| [_Electra_]() | 尚未決定 | - -**組合命名** - -執行層和共識層升級最初是在不同時間推出的,但在 2022 年的 [合併](/roadmap/merge/) 之後,這些升級已同時部署。 因此,出現了使用單一組合詞的通俗術語來簡化對這些升級的引用。 這種做法始於 _Shanghai-Capella_ 升級,通常稱為「**Shapella**」,並在 _Cancun-Deneb_ 升級時沿用了這種做法,該升級稱為「**Dencun**」。 - -| 執行層升級 | 共識層升級 | 簡短名稱 | -| ----------------- | ----------------- | ---------- | -| Shanghai | Capella | 「Shapella」 | -| Cancun | Deneb | 「Dencun」 | - - - -直接查閱一些特別重要的過往升級的資訊:[信標鏈](/roadmap/beacon-chain/);[合併](/roadmap/merge/);和 [EIP-1559](#london) - -想瞭解未來的協定升級嗎? [瞭解以太坊開發藍圖上即將進行的升級](/roadmap/)。 - - - -## 2024 年 {#2024} - -### Cancun-Deneb(「Dencun」) {#dencun} - - - -#### Cancun 升級總結 {#cancun-summary} - -Cancun 升級包含對以太坊_執行層_的一系列改進,旨在與 Deneb 共識層升級一起提高可擴展性。 - -值得注意的是,該升級包括稱為 **Proto-Danksharding** 的 EIP-4844,該提案顯著降低了二層網路卷軸的資料存儲成本。 這是透過引入資料「二進位大型物件」來實現的,二進位大型物件使卷軸能夠在短時間內將資料發佈到主網。 這顯著降低了二層網路卷軸使用者的交易費。 - - - -
    -
  • EIP-1153 - 暫態存儲操作碼
  • -
  • EIP-4788 - 以太坊虛擬機中的信標區塊根
  • -
  • EIP-4844 - 分片二進位大型物件交易 (Proto-Danksharding)
  • -
  • EIP-5656 - MCOPY - 記憶體複製指令
  • -
  • EIP-6780 - SELFDESTRUCT 只能存在於相同交易中
  • -
  • EIP-7516 - BLOBBASEFEE 操作碼
  • -
- -
- -- [二層網路卷軸](/layer-2/) -- [Proto-Danksharding](/roadmap/scaling/#proto-danksharding) -- [Danksharding](/roadmap/danksharding/) -- [閱讀 Cancun 升級規範](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md) - -#### Deneb 升級總結 {#deneb-summary} - -Deneb 升級包含一系列對以太坊_共識層_的改進,旨在提升可擴展性。 此升級與 Cancun 執行升級同步進行,以啟用 Proto-Danksharding (EIP-4844),並對信標鏈進行其他改進。 - -預先產生的已簽署「自願退出訊息」不再過期,因此可讓使用者在將資金質押到第三方節點營運商時擁有更多控制權。 透過這個已簽署的退出訊息,質押者可以委託節點運作,同時保持隨時安全退出和提取資金的能力,而不需要徵求任何人的許可。 - -EIP-7514 將驗證者加入網路的「流失」率限制在每個時期八 (8) 個,從而收緊了以太幣的發行。 由於以太幣發行量與質押的以太幣總量成正比,因此限制加入的驗證者數量會限制新發行以太幣的_成長率_,同時也降低了對節點營運商的硬體要求,有助於去中心化。 - - - -
    -
  • EIP-4788 - 以太坊虛擬機中的信標區塊根
  • -
  • EIP-4844 - 分片二進位大型物件交易
  • -
  • EIP-7044 - 永久有效的已簽署自願退出
  • -
  • EIP-7045 - 增加最大證明納入時隙
  • -
  • EIP-7514 - 加入最大時期流失限制
  • -
- -
- -- [閱讀 Deneb 升級規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/) -- [坎昆-Deneb(「Dencun」)升級常見問題](/roadmap/dencun/) - - - -## 2023 年 {#2023} - -### 上海-Capella(「Shapella」) {#shapella} - - - -#### 上海升級總結 {#shanghai-summary} - -上海升級為執行層引入了質押提款的功能。 隨著與 Capella 升級同步進行,區塊能夠支援提款操作,使質押者可以將他們的以太幣從信標鏈提取到執行層。 - - - - - - - -- [閱讀上海升級規範](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) - -#### Capella 升級總結 {#capella-summary} - -Capella 升級是共識層(信標鏈)的第三次重大升級,實現了質押提款。 Capella 升級與執行層升級「上海升級」同步進行,並實現了質押提款的功能。 - -這次共識層升級讓未提供初始存款提款憑證的質押者能夠提供提款憑證,從而實現提款。 - -此升級還提供了自動帳戶掃描功能,可持續處理驗證者帳戶的任何可用獎勵支付或全額提款。 - -- [更多關於質押提款的資訊](/staking/withdrawals/)。 -- [閱讀上海升級規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/) - - - -## 2022 年 {#2022} - -### 巴黎升級(合併) {#paris} - - - -#### 總結 {#paris-summary} - -由於工作量證明區塊鏈超過了[終端總難度](/glossary/#terminal-total-difficulty) 58750000000000000000000,因而觸發了巴黎升級。 這發生在2022年9月15日的第15537393區塊上,觸發了下一個區塊的巴黎升級。 這發生在 2022 年 9 月 15 日區塊 15537393 上,並在下一個區塊處觸發了巴黎升級。 巴黎升級就是[合併](/roadmap/merge/)過渡,以太坊的主要功能結束了[工作量證明](/developers/docs/consensus-mechanisms/pow)挖礦演算法及相關共識邏輯並啟動了[權益證明](/developers/docs/consensus-mechanisms/pos)。 巴黎升級本身是對[執行用戶端](/developers/docs/nodes-and-clients/#execution-clients)的升級(相當於共識層上的 Bellatrix 升級),讓執行用戶端能夠從與其連線的[共識用戶端](/developers/docs/nodes-and-clients/#consensus-clients)接受指令。 這需要啟動一組新的內部應用程式介面方法,統稱為[引擎應用程式介面](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)。 這次升級可以說是自[家園](#homestead)以來以太坊歷史上最重要的升級! - -- [閱讀 Paris 升級規範](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md) - - - -
    -
  • EIP-3675將共識層升級為權益證明
  • -
  • EIP-4399以 PREVRANDAO 取代 DIFFICULTY 操作碼
  • -
- -
- ---- - -### Bellatrix 升級 {#bellatrix} - - - -#### 總結 {#bellatrix-summary} - -Bellatrix 升級是[信標鏈](/roadmap/beacon-chain)的第二次預定升級,讓信標鏈為[合併](/roadmap/merge/)做準備。 它將驗證者因怠惰及進行了可被罰沒的行為而受到的懲罰提高到其全部價值。 Bellatrix 升級還包括對分叉選擇規則的更新,讓信標鏈為合併以及從最後一個工作量證明區塊過渡到第一個權益證明區塊做好準備。 這包括讓共識用戶端意識到[終端總難度](/glossary/#terminal-total-difficulty) 58750000000000000000000。 - -- [閱讀 Bellatrix 升級規範](https://github.com/ethereum/consensus-specs/tree/dev/specs/bellatrix) - ---- - -### 灰色冰川升級 {#gray-glacier} - - - -#### 總結 {#gray-glacier-summary} - -灰色冰川網路升級將[難度炸彈](/glossary/#difficulty-bomb)推遲了三個月。 這是此次升級引入的唯一變更,本質上類似於[箭形冰川](#arrow-glacier)和[繆爾冰川](#muir-glacier)升級。 [拜占庭](#byzantium)、[君士坦丁堡](#constantinople)和 [London](#london) 網路升級也做了類似的變更。 - -- [以太坊基金會部落格 - 灰色冰川升級公告](https://blog.ethereum.org/2022/06/16/gray-glacier-announcement/) - - - -
    -
  • EIP-5133將難度炸彈推遲至 2022 年 9 月
  • -
- -
- - - -## 2021 年 {#2021} - -### 箭形冰川升級 {#arrow-glacier} - - - -#### 總結 {#arrow-glacier-summary} - -箭形冰川網路升級將[難度炸彈](/glossary/#difficulty-bomb)推遲數月。 這是此次升級引入的唯一變更,本質上類似於[謬爾冰川](#muir-glacier)升級。 [拜占庭](#byzantium)、[君士坦丁堡](#constantinople)和[倫敦](#london)網絡升級也做了類似的更改。 - -- [以太坊基金會部落格 - 箭形冰川升級公告](https://blog.ethereum.org/2021/11/10/arrow-glacier-announcement/) -- [以太坊牧貓人組織 - 以太坊箭形冰川升級](https://medium.com/ethereum-cat-herders/ethereum-arrow-glacier-upgrade-e8d20fa4c002) - - - -
    -
  • EIP-4345將難度炸彈推遲至 2022 年 6 月
  • -
- -
- ---- - -### Altair 升級 {#altair} - - - -#### 總結 {#altair-summary} - -Altair 升級是對[信標鏈](/roadmap/beacon-chain)進行的第一次預定升級。 此次升級增加了對「同步委員會」的支援—支援輕量用戶端,在向合併進展的過程中,增加了對驗證者怠惰及可被罰沒行為的懲罰。 - -- [閱讀 Altair 升級規範](https://github.com/ethereum/consensus-specs/tree/dev/specs/altair) - -#### 趣聞! {#altair-fun-fact} - -Altair 升級是第一個有確切發佈時間的重大網路升級。 先前的每一次升級均基於一個已經在工作量證明鏈上申報過的區塊編號,而該鏈上的區塊時間各不相同。 信標鏈不需要解析工作量證明,而是在一個基於時間、由 32 個 12 秒「時隙」組成的時期系統上運作。在這個系統上,驗證者可以提出區塊。 這就是為什麼我們能準確知曉達到時期 74,240 以及 Altair 升級啟動的時間! - -- [區塊時間](/developers/docs/blocks/#block-time) - ---- - -### London 升級 {#london} - - - -#### 總結 {#london-summary} - -London 升級引入了 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559),對交易費市場進行了改革,同時也對燃料費的退款處理方式和[冰河期](/glossary/#ice-age)日程進行了修改。 - -#### 什麼是 London 升級/EIP-1559? {#eip-1559} - -London 升級前,以太坊的區塊為固定大小。 當網路需求高時,這些區塊會滿載運作。 因此,使用者常需要等網路需求降低時,交易才會被添加進區塊,這導致了糟糕的使用者體驗。 London 升級將可變大小的區塊引入以太坊。 - -隨著 2021 年 8 月的 [London 升級](/history/#london),以太坊網路上交易費的計算方式發生了變化。 在 London 升級之前,燃料費的計算不區分`基本費用`和`優先費`,如下: - -假設 Alice 必須向 Bob 支付 1 以太幣。 在交易中,燃料限制是 21,000 單位,燃料價格為 200 gwei。 - -總費用將為:`Gas units (limit) * Gas price per unit` i.e `21,000 * 200 = 4,200,000 gwei` 或 0.0042 以太幣 - -London 升級中的 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 實作使交易費機制更加複雜,但也讓燃料費更加可預測,最終形成了更高效的交易費市場。 使用者可以透過 `maxFeePerGas` 提交交易,指明他們願意為要執行交易支付多少費用,並且使用者知道支付的費用不會超過燃料市價 (`baseFeePerGas`),並且會得到任何剩餘費用(扣除小費)的退款。 - -解釋 EIP-1559 及其帶來的好處之影片:[EIP-1559 解釋](https://www.youtube.com/watch?v=MGemhK9t44Q) - -- [你是去中心化應用程式開發者嗎? 記得要升級你的函式庫與工具。](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/london-ecosystem-readiness.md) -- [閱讀以太坊基金會公告](https://blog.ethereum.org/2021/07/15/london-mainnet-announcement/) -- [閱讀以太坊貓牧人組織的解釋](https://medium.com/ethereum-cat-herders/london-upgrade-overview-8eccb0041b41) - - - -
    -
  • EIP-1559改善交易費市場
  • -
  • EIP-3198從區塊傳回 BASEFEE
  • -
  • EIP-3529 - 減少用於以太坊虛擬機器運作的燃料退款
  • -
  • EIP-3541 - 防止部署以 0xEF 開頭的合約
  • -
  • EIP-3554將冰河期延遲至 2021 年 12 月
  • -
- -
- ---- - -### 柏林升級 {#berlin} - - - -#### 總結 {#berlin-summary} - -柏林升級優化了某些以太坊虛擬機器動作的燃料成本,並增加了對多種交易類型的支援。 - -- [了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2021/03/08/ethereum-berlin-upgrade-announcement/) -- [了解更多關於Ethereum Cat Herder之解釋.](https://medium.com/ethereum-cat-herders/the-berlin-upgrade-overview-2f7ad710eb80) - - - -
    -
  • EIP-2565降低 ModExp 燃料成本
  • -
  • EIP-2718更容易支援多種交易類型
  • -
  • EIP-2929增加狀態存取操作碼的燃料成本
  • -
  • EIP-2930新增可選存取清單
  • -
- -
- - - -## 2020 年 {#2020} - -### 信標鏈創世塊 {#beacon-chain-genesis} - - - -#### 總結 {#beacon-chain-genesis-summary} - -[信標鏈](/roadmap/beacon-chain/)需要 16384 個存了 32 個質押以太幣的帳戶,以確保安全上線。 這發生於 2020 年 11 月 27 日,意味著信標鏈在 2020 年 12 月 1 日開始產生區塊。 這是實現[以太坊願景](/roadmap/vision/)的第一步,十分重要。 - -[閱讀以太坊基金會公告](https://blog.ethereum.org/2020/11/27/eth2-quick-update-no-21/) - - - 信標鏈(Beacon Chain) - - ---- - -### 部署質押存款合約 {#staking-deposit-contract} - - - -#### 總結 {#deposit-contract-summary} - -質押存款合約將[質押](/glossary/#staking)引入以太坊生態系統。 雖然是一個[主網](/glossary/#mainnet)合約,但它直接影響到[信標鏈](/roadmap/beacon-chain/)的發佈時間軸,而信標鏈是[以太坊升級](/roadmap/)的重要部分。 - -[閱讀以太坊基金會公告](https://blog.ethereum.org/2020/11/04/eth2-quick-update-no-19/) - - - 質押 - - ---- - -### 繆爾冰川升級 {#muir-glacier} - - - -#### 總結 {#muir-glacier-summary} - -繆爾冰川分叉使[難度炸彈](/glossary/#difficulty-bomb)推遲。 增加[工作量證明](/developers/docs/consensus-mechanisms/pow/)共識機制的區塊難度可能會增加發送交易和使用去中心化應用程式的等待時間,從而降低以太坊的可用性。 - -- [了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2019/12/23/ethereum-muir-glacier-upgrade-announcement/) -- [了解更多關於Ethereum Cat Herder之解釋.](https://medium.com/ethereum-cat-herders/ethereum-muir-glacier-upgrade-89b8cea5a210) - - - -
    -
  • EIP-2384將難度炸彈再推遲 4,000,000 個區塊,或約 611 天。
  • -
- -
- - - -## 2019 年 {#2019} - -### 伊斯坦堡升級 {#istanbul} - - - -#### 總結 {#istanbul-summary} - -伊斯坦堡分叉: - -- 最佳化[以太坊虛擬機](/developers/docs/ethereum-stack/#ethereum-virtual-machine)中特定動作的[燃料](/glossary/#gas)成本。 -- 提高受到阻斷服務攻擊後的韌性。 -- 使基於「簡潔非互動式知識論證」與「可擴充透明知識論證」的二層網路擴容解決方案具有更佳的效能。 -- 使以太坊和 Zcash 能夠互通。 -- 讓合約能夠引入更多創意功能。 - -[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2019/11/20/ethereum-istanbul-upgrade-announcement/) - - - -
    -
  • EIP-152允許以太幣與 Zcash 等受隱私保護的數位貨幣一起使用。
  • -
  • EIP-1108以更低廉的加密技術改善燃料成本。
  • -
  • EIP-1344透過新增 CHAINID 操作碼,保護以太坊免受重播攻擊。
  • -
  • EIP-1884最佳化基於消耗量的操作碼燃料價格。
  • -
  • EIP-2028降低了 CallData 的成本,從而允許更多資料放入區塊中 – 這對二層網路擴容很有幫助。
  • -
  • EIP-2200其他操作碼的燃料價格變更。
  • -
- -
- ---- - -### 君士坦丁堡升級 {#constantinople} - - - -#### 總結 {#constantinople-summary} - -君士坦丁堡分叉: - -- 將區塊[挖礦](/developers/docs/consensus-mechanisms/pow/mining/)獎勵從 3 以太幣減少至 2 以太幣。 -- 確保在[實作權益證明](#beacon-chain-genesis)之前,區塊鏈不會凍結。 -- 最佳化[以太坊虛擬機](/developers/docs/ethereum-stack/#ethereum-virtual-machine)中特定動作的[燃料](/glossary/#gas)成本。 -- 新增了與尚未建立的地址進行互動的能力。 - -[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2019/02/22/ethereum-constantinople-st-petersburg-upgrade-announcement/) - - - -
    -
  • EIP-145最佳化特定鏈上操作的成本。
  • -
  • EIP-1014讓你能夠與尚未建立的地址互動。
  • -
  • EIP-1052最佳化特定鏈上操作的成本。
  • -
  • EIP-1234確保在權益證明之前,區塊鏈不會凍結,並將區塊獎勵從 3 以太幣減少至 2 以太幣。
  • -
- -
- - - -## 2017 年 {#2017} - -### 拜占庭升級 {#byzantium} - - - -#### 總結 {#byzantium-summary} - -拜占庭分叉: - -- 將區塊[挖礦](/developers/docs/consensus-mechanisms/pow/mining/)獎勵從 5 以太幣減少至 3 以太幣。 -- 將[難度炸彈](/glossary/#difficulty-bomb)推遲一年。 -- 新增了呼叫其他合約而不變更狀態的能力。 -- 新增了某些加密方法,以實現[二層網路擴容](/developers/docs/scaling/#layer-2-scaling)。 - -[閱讀以太坊基金會公告](https://blog.ethereum.org/2017/10/12/byzantium-hf-announcement/) - - - -
    -
  • EIP-140新增 REVERT 操作碼。
  • -
  • EIP-658在交易收據中新增了狀態欄位,以表示成功或失敗。
  • -
  • EIP-196為支援零知識簡潔非互動式知識論證新增橢圓曲線和純量乘法。
  • -
  • 使基於「簡潔非互動式知識論證」與「可擴容透明知識論證」的二層網路擴容解決方案具有更佳的效能。
  • -
  • EIP-198啟用 RSA 簽名驗證。
  • -
  • EIP-211新增對可變長度傳回值的支援。
  • -
  • EIP-214新增 STATICCALL 作業碼,能夠呼叫其他合約而不變更狀態。
  • -
  • EIP-100變更難度調整公式。
  • -
  • EIP-649難度炸彈延遲 1 年,並將區塊獎勵從 5 以太幣減至 3 以太幣。
  • -
- -
- - - -## 2016 年 {#2016} - -### Spurious Dragon(偽龍)升級 {#spurious-dragon} - - - -#### 總結 {#spurious-dragon-summary} - -Spurious Dragon 分叉為對阻斷服務 (DoS) 攻擊(2016 年 9 月/10 月)的第二個回應,包括: - -- 調整操作碼價格,以防網路未來再受攻擊。 -- 啟用區塊鏈狀態的「區塊鏈減重」。 -- 新增重播攻擊保護。 - -[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon/) - - - -
    -
  • EIP-155防止在一條以太坊鏈上的交易被重複廣播到另一條鏈,例如測試網交易在以太坊主鏈上重播。
  • -
  • EIP-160調整 EXP 操作碼的價格 – 讓透過計算成本高昂的合約作業來降低網路速度變得更加困難。
  • -
  • EIP-161允許刪除透過阻斷服務攻擊產生的空帳戶。
  • -
  • EIP-170將區塊鏈上合約可達到的最大程式碼大小改為 24576 位元組。
  • -
- -
- ---- - -### 橘子口哨升級 {#tangerine-whistle} - - - -#### 總結 {#tangerine-whistle-summary} - -橘子口哨分叉是對網路上阻斷服務 (DoS) 攻擊(2016 年 9 月/10 月)的第一個回應,包括: - -- 解決與定價過低的操作程式碼有關的緊急網路健康問題。 - -[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2016/10/18/faq-upcoming-ethereum-hard-fork/) - - - -
    -
  • EIP-150增加可用於垃圾郵件攻擊的操作碼的燃料成本
  • -
  • EIP-158透過刪除大量空帳戶來減少狀態大小,這些空帳戶由於早期版本的以太坊協定中的缺陷而以非常低的成本置於狀態中。 -
  • -
- -
- ---- - -### 去中心化自治組織分叉 {#dao-fork} - - - -#### 總結 {#dao-fork-summary} - -去中心化自治組織分叉是為了回應 [2016 去中心化自治組織攻擊](https://www.coindesk.com/learn/understanding-the-dao-attack/),當時一個不安全的[去中心化自治組織](/glossary/#dao)合約被駭客盜走了超過 360 萬個以太幣。 這個分叉將資金從有問題的合約轉移到一個新合約,新合約只有一個功能:提款。 任何損失了資金的人都可以在他們的錢包中提取以太幣,每 100 個去中心化自治組織代幣可以提取 1 個以太幣。 - -此行動由以太坊社群投票贊成. 所有以太幣持有者都能透過[投票平台](https://web.archive.org/web/20170620030820/http://v1.carbonvote.com/)上的交易進行投票。 此分叉決議獲得85%贊成. - -一些礦工拒絕分叉,因為那次去中心化自治組織事件並不是協定中的缺陷。 其延續原始以太坊, 而其目前稱為[以太坊經典/Ethereum Classic](https://ethereumclassic.org/). - -[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2016/07/20/hard-fork-completed/) - ---- - -### 家園升級 {#homestead} - - - -#### 總結 {#homestead-summary} - -家園分叉著眼於未來。 包括若干協定修改和網路變更,使以太坊能夠進一步進行網路升級。 - -[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2016/02/29/homestead-release/) - - - -
    -
  • EIP-2對合約建立過程進行編輯。
  • -
  • EIP-7新增操作碼:DELEGATECALL
  • -
  • EIP-8引入 devp2p 正向相容性要求
  • -
- -
- - - -## 2015 年 {#2015} - -### 前沿解凍升級 {#frontier-thawing} - - - -#### 總結 {#frontier-thawing-summary} - -前沿解凍升級提高了每個[區塊](/glossary/#block) 5,000 單位[燃料](/glossary/#gas)的限制,並將預設燃料價格設為 51 [gwei](/glossary/#gwei)。 這樣便能進行交易 - 交易需要 21,000 單位燃料。 引入[難度炸彈](/glossary/#difficulty-bomb)是爲了保證未來硬分叉到[權益證明](/glossary/#pos)。 - -- [了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2015/08/04/the-thawing-frontier/) -- [閱讀以太坊協定更新 1](https://blog.ethereum.org/2015/08/04/ethereum-protocol-update-1/) - ---- - -### 前沿升級 {#frontier} - - - -#### 總結 {#frontier-summary} - -前沿升級是以太坊專案的已上線準系統實作。 該版本在奧利匹克測試階段成功完成之後推出。 它面向的是技術使用者,特別是開發者。 [區塊](/glossary/#block)有 5,000 單位的[燃料](/glossary/#gas)限制。 此「解凍」階段使礦工能夠開始作業,並使早期採用者能夠有足夠的時間來安裝用戶端。 - -[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2015/07/22/frontier-is-coming-what-to-expect-and-how-to-prepare/) - - - -## 2014 年 {#2014} - -### 以太幣銷售 {#ether-sale} - - - -以太幣正式發售 42 天。 你可以使用比特幣購買以太幣。 - -[了解更多關於以太坊基金會的公告。](https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/) - ---- - -### 發佈黃皮書 {#yellowpaper} - - - -黃皮書由 Gavin Wood 博士撰寫,介紹了以太坊協議之技術定義。 - -[檢視黃皮書](https://github.com/ethereum/yellowpaper) - - - -## 2013 年 {#2013} - -### 發佈白皮書 {#whitepaper} - - - -2015 年專案啟動之前,以太坊創辦人 Vitalik Buterin 於 2013 年發表了這篇介紹白皮書。 - - - 白皮書 - diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/anatomy/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/anatomy/index.md" deleted file mode 100644 index d460361047e..00000000000 --- "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/anatomy/index.md" +++ /dev/null @@ -1,655 +0,0 @@ ---- -title: 智慧型合約結構 -description: 智慧型合約深入解析:功能、資料、變數。 -lang: zh-tw ---- - -智慧型合約是在以太坊地址運作的程式。 由可以在接收交易後執行的資料與函數組成。 此為智慧型合約組成的概覽。 - -## 先決條件 {#prerequisites} - -務必先瞭解[智慧型合約](/developers/docs/smart-contracts/)。 此文件假設你已熟悉 JavaScript 或 Python 等程式語言。 - -## 資料 {#data} - -任何合約資料都須指定至 `storage` 或 `memory` 這兩個位置。 修改智慧型合約的存儲很麻煩,所以必須謹慎思考要將資料儲存至何處。 - -### 儲存 {#storage} - -永久資料也稱為存儲,並由狀態變數表示。 這些值會永久儲存於區塊鏈上。 你需要聲明一個類型,以便於合約在編譯時可以追蹤在區塊鏈上需要多少存儲空間。 - -```solidity -// Solidity 範例 -contract SimpleStorage { - uint storedData; //狀態變量 - // ... -} -``` - -```python -# Vyper 範例 -storedData: int128 -``` - -如果已編寫過物件導向程式語言,應該會熟悉大多數類型。 但如果剛接觸以太坊開發,則會不熟悉 `address` 類型。 - -一個 `address` 類型可以容納一個以太坊地址,相當於 20 個位元組或 160 個位元。 它會以十六進制的形式傳回,前綴是 0x。 - -其他類型包含: - -- 布林值 -- 整數 -- 定點數 -- 固定規模的位元組陣列 -- 動態規模的位元組陣列 -- 有理數和整數常值 -- 字串常值 -- 十六進位常值 -- 列舉 - -如需更多說明,請參閱文件: - -- [查看 Vyper 類型](https://vyper.readthedocs.io/en/v0.1.0-beta.6/types.html#value-types) -- [查看 Solidity 類型](https://solidity.readthedocs.io/en/latest/types.html#value-types) - -### 記憶體 {#memory} - -僅在合約函數的執行生命週期儲存的值稱為記憶體變數。 由於這些變數不是永久儲存在區塊鏈上,所以使用成本要低得多。 - -在 [Solidity 文件](https://solidity.readthedocs.io/en/latest/introduction-to-smart-contracts.html?highlight=memory#storage-memory-and-the-stack)中深入瞭解以太坊虛擬機如何儲存資料(存儲、記憶體和堆疊)。 - -### 環境變數 {#environment-variables} - -除了在自已的合約上定義的變數外,還有一些特殊的全域變數。 它們主要用於提供有關區塊鏈或目前交易的資訊。 - -範例: - -| **屬性** | **狀態變數** | **描述** | -| ----------------- | -------- | ----------- | -| `block.timestamp` | uint256 | 目前區塊時期的時間戳 | -| `msg.sender` | address | 訊息發送者(目前調用) | - -## 函式 {#functions} - -用最簡單的術語來說,函數可以取得資訊或者設定資訊來回應傳入的交易。 - -有兩種函數調用方式: - -- `Internal` – 不會建立以太坊虛擬機調用 - - 內部函數和狀態變數只能在內部存取(如在目前合約內部或從其衍生的合約存取) -- `External` – 會建立以太坊虛擬機調用 - - 外部函數是合約介面的一部分,這表示可以從其他合約與透過交易調用。 一個外部函數 `f` 不可以被內部調用(即 `f()` 無法工作,但 `this.f()` 可以)。 - -它們還可以是 `Public` 或 `Private` - -- `public` 函數可以在合約內部調用或者透過訊息在合約外部調用 -- `Private` 函數僅定義它們的合約內部可見,而不會出現在衍生合約中 - -函數和狀態變數都可以被定義為 Public 或 Private - -以下是更新合約狀態變數的函數: - -```solidity -// Solidity 範例 -function update_name(string value) public { - dapp_name = value; -} -``` - -- `String` 類型的參數 `Value` 傳入函數 `update_name` -- 該函數聲明為 `public`,表示任何人都能存取 -- 該函數未聲明為 `view`,因此可以修改合約狀態 - -### 檢視函式 {#view-functions} - -這些函數保證不會修改合約資料的狀態。 常見範例為「getter」函數,例如,你可能用此接收使用者的餘額。 - -```solidity -// Solidity 範例 -function balanceOf(address _owner) public view returns (uint256 _balance) { - return ownerPizzaCount[_owner]; -} -``` - -```python -dappName: public(string) - -@view -@public -def readName() -> string: - return dappName -``` - -以下情況被視為修改狀態: - -1. 寫入狀態變數。 -2. [釋出事件](https://solidity.readthedocs.io/en/v0.7.0/contracts.html#events)。 -3. [建立其他合約](https://solidity.readthedocs.io/en/v0.7.0/control-structures.html#creating-contracts)。 -4. 使用 `selfdestruct` 。 -5. 透過調用傳送以太幣。 -6. 調用任何未標記為 `view` 或 `pure` 的函數。 -7. 使用低階調用。 -8. 使用包含特定作業碼的行內組譯。 - -### Constructor 函式 {#constructor-functions} - -`constructor` 函數只在首次部署時執行一次。 與許多基於類型之程式語言的 `constructor` 函數類似,這些函數常將狀態變數初始化為指定值。 - -```solidity -// Solidity 示例 -// 初始化合約數據, 設置 `owner`為合約的創建者。 -constructor() public { - // 所有智慧型合約依賴外部交易來觸發其函數。 - // `msg` 是一個全局變量,包含了給定交易的相關數據, - // 例如發送者的地址和交易中包含的ETH數量。 - // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties - owner = msg.sender; -} -``` - -```python -# Vyper 範例 - -@external -def __init__(_beneficiary: address, _bidding_time: uint256): - self.beneficiary = _beneficiary - self.auctionStart = block.timestamp - self.auctionEnd = self.auctionStart + _bidding_time -``` - -### 內建函式 {#built-in-functions} - -除了自己合約上定義的變數與函數外,還有一些特殊的內建函數。 最明顯的例子: - -- `address.send()` – Solidity -- `send(address)` – Vyper - -這讓合約可以給其他帳戶傳送以太幣。 - -## 編寫函式 {#writing-functions} - -你的函數需要: - -- 參數變數及其類型(若接受參數) -- 聲明為 internal/external -- 聲明為 pure/view/payable -- 傳回類型(若傳回值) - -```solidity -pragma solidity >=0.4.0 <=0.6.0; - -contract ExampleDapp { - string dapp_name; //state variable - - /*在合約部署時調用以初始化數據*/ - constructor() public{ - dapp_name = "My Example dapp"; - } - - // Get 函數 - function read_name() public view returns(string){ - return dapp_name; - } - - // Set 函數 - function update_name(string value) public { - dapp_name = value; - } -} -``` - -完整的合約看起來可能如上所示。 這裡的 `constructor` 函數為 `dapp_name` 變數提供初始值。 - -## 事件與記錄 {#events-and-logs} - -事件讓你的智慧型合約能夠與你的前端或其他訂閱應用程式進行通訊。 一旦交易被驗證並新增到區塊中,智慧型合約就可以發出事件和記錄訊息,然後前端就能夠處理和利用這些資訊。 - -## 附註範例 {#annotated-examples} - -以下是一些用 Solidity 編寫的範例。 若你想試著編寫程式碼,可以在 [Remix](http://remix.ethereum.org) 中與這些範例互動。 - -### Hello world {#hello-world} - -```solidity -// 確定Solidity版本,使用語義化版本。 -// 了解更多:https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma -pragma solidity ^0.5.10; - -// 定義合約名稱 `HelloWorld`. -// 一個合約是函數和數據 (其狀態) 的集合。 -// 一旦部署,合約就會留在以太坊區塊鏈的一個特定地址上。 -// 了解更多: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html -contract HelloWorld { - - // 定義`string`類型變量 `message` - // 狀態變量是其值永久存儲在合約存儲中的變量。 - // 關鍵字 `public` 使得可以從合約外部訪問。 - // 並創建了一個其它合約或客戶可以調用訪問該值的函數。 - string public message; - - // 類似於很多基於類的面向對象語言, - // 構造函數是僅在合約創建時執行的特殊函數。 - // 構造器用於初始化合約的數據。 - // 了解更多:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors - constructor(string memory initMessage) public { - // 接受一個字符變量 `initMessage` - // 並為合約的存儲變量`message` 賦值 - message = initMessage; - } - - // 一個public函數接受字符參數並更新存儲變量 `message` - function update(string memory newMessage) public { - message = newMessage; - } -} -``` - -### 代幣 {#token} - -```solidity -pragma solidity ^0.5.10; - -contract Token { - // 一個 `address` 類比於郵件地址 - 它用來識別以太坊的一個帳戶. - // 地址可以代表一個智慧型合約或一個外部(用戶)帳戶。 - // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/types.html#address - address public owner; - - // `mapping` 是一個哈希表(hash table)數據結構 - // 此 `mapping` 將一個無符號整數 (代幣餘額) 分配給地址 (代幣持有者)。 - // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/types.html#mapping-types - mapping (address => uint) public balances; - -// 事件(Events)允許在區塊鏈上記錄活動。 - // 以太坊客戶端可以監聽事件,以便對合約狀態更改作出反應。 - // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#events - event Transfer(address from, address to, uint amount); - - // 初始化合約數據,設置 `owner`為合約創建者的地址。 - constructor() public { - // 所有智慧型合約依賴外部交易來觸發其函數。 - // `msg` 是一個全局變量,包含了給定交易的相關數據, - // 例如發送者的地址和交易中包含的ETH數量。 - // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties - owner = msg.sender; - } - - // 創建一些新代幣並發送給一個地址 - function mint(address receiver, uint amount) public { - // `require` 是一個用於強制執行某些條件的控制結構。 - // 如果 `require` 的條件為 `false`, 則異常被觸發, - // 所有在當前調用中對狀態的更改將被還原。 - // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions - - // 只有合約的擁有者可以調用這個函數 - require(msg.sender == owner, "You are not the owner."); - - // 保證代幣的最大數量 - require(amount < 1e60, "Maximum issuance succeeded"); - - // 將 `receiver` 持有的代幣數量數量增加 `amount` - balances[receiver] += amount; - } - - // 發送一定數量調用者的代幣給一個地址 - function transfer(address receiver, uint amount) public { - // 發送者必須有足夠數量的代幣用於發送 - require(amount <= balances[msg.sender], "Insufficient balance."); - - // 調整兩個帳戶的餘額 - balances[msg.sender] -= amount; - balances[receiver] += amount; - - // 觸發之前定義的事件。 - emit Transfer(msg.sender, receiver, amount); - } -} -``` - -### 獨特的數位資產 {#unique-digital-asset} - -```solidity -pragma solidity ^0.5.10; - -// 從其它文件向當前合約中導入符號 -// 本例使用一系列來自OpenZeppelin的輔助合約. -// 了解更多: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#importing-other-source-files - -import "../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol"; -import "../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; -import "../node_modules/@openzeppelin/contracts/introspection/ERC165.sol"; -import "../node_modules/@openzeppelin/contracts/math/SafeMath.sol"; - -// `is` 關鍵字用於從其它外部合約繼承函數和關鍵字。 -// 本例中, `CryptoPizza` 繼承 `IERC721` 和 `ERC165` 合約. -// 了解更多: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#inheritance -contract CryptoPizza is IERC721, ERC165 { - // 使用 OpenZeppelin's SafeMath 庫來安全執行算數操作。 - // 了解更多: https://docs.openzeppelin.com/contracts/2.x/api/math#SafeMath - using SafeMath for uint256; - - //Solidity語言中的常量(Constant)狀態變量與其他語言類似。 - // 但是必須用一個表達式為常量賦值,而這個表達式本身必須在編譯時是一個常量。 - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constant-state-variables - uint256 constant dnaDigits = 10; - uint256 constant dnaModulus = 10 ** dnaDigits; - bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; - - // Struct types let you define your own type - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#structs - struct Pizza { - string name; - uint256 dna; - } - - // Creates an empty array of Pizza structs - Pizza[] public pizzas; - - // Mapping from pizza ID to its owner's address - mapping(uint256 => address) public pizzaToOwner; - - // Mapping from owner's address to number of owned token - mapping(address => uint256) public ownerPizzaCount; - - // Mapping from token ID to approved address - mapping(uint256 => address) pizzaApprovals; - - // You can nest mappings, this example maps owner to operator approvals - mapping(address => mapping(address => bool)) private operatorApprovals; - - // Internal function to create a random Pizza from string (name) and DNA - function _createPizza(string memory _name, uint256 _dna) - // The `internal` keyword means this function is only visible - // within this contract and contracts that derive this contract - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#visibility-and-getters - internal - // `isUnique` is a function modifier that checks if the pizza already exists - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html#function-modifiers - isUnique(_name, _dna) - { - // Adds Pizza to array of Pizzas and get id - uint256 id = SafeMath.sub(pizzas.push(Pizza(_name, _dna)), 1); - - // Checks that Pizza owner is the same as current user - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions - - // note that address(0) is the zero address, - // indicating that pizza[id] is not yet allocated to a particular user. - - assert(pizzaToOwner[id] == address(0)); - - // Maps the Pizza to the owner - pizzaToOwner[id] = msg.sender; - ownerPizzaCount[msg.sender] = SafeMath.add( - ownerPizzaCount[msg.sender], - 1 - ); - } - - // Creates a random Pizza from string (name) - function createRandomPizza(string memory _name) public { - uint256 randDna = generateRandomDna(_name, msg.sender); - _createPizza(_name, randDna); - } - - // Generates random DNA from string (name) and address of the owner (creator) - function generateRandomDna(string memory _str, address _owner) - public - // Functions marked as `pure` promise not to read from or modify the state - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#pure-functions - pure - returns (uint256) - { - // Generates random uint from string (name) + address (owner) - uint256 rand = uint256(keccak256(abi.encodePacked(_str))) + - uint256(_owner); - rand = rand % dnaModulus; - return rand; - } - - // Returns array of Pizzas found by owner - function getPizzasByOwner(address _owner) - public - // Functions marked as `view` promise not to modify state - // Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#view-functions - view - returns (uint256[] memory) - { - // Uses the `memory` storage location to store values only for the - // lifecycle of this function call. - // 了解更多: https://solidity.readthedocs.io/en/v0.5.10/introduction-to-smart-contracts.html#storage-memory-and-the-stack - uint256[] memory result = new uint256[](ownerPizzaCount[_owner]); - uint256 counter = 0; - for (uint256 i = 0; i < pizzas.length; i++) { - if (pizzaToOwner[i] == _owner) { - result[counter] = i; - counter++; - } - } - return result; - } - - // 轉移 Pizza 和歸屬關係到其它地址 - function transferFrom(address _from, address _to, uint256 _pizzaId) public { - require(_from != address(0) && _to != address(0), "Invalid address."); - require(_exists(_pizzaId), "Pizza does not exist."); - require(_from != _to, "Cannot transfer to the same address."); - require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); - - ownerPizzaCount[_to] = SafeMath.add(ownerPizzaCount[_to], 1); - ownerPizzaCount[_from] = SafeMath.sub(ownerPizzaCount[_from], 1); - pizzaToOwner[_pizzaId] = _to; - - // 觸發繼承自 IERC721 合約中定義的事件。 - emit Transfer(_from, _to, _pizzaId); - _clearApproval(_to, _pizzaId); - } - - /** - * 安全轉帳給定代幣 ID 的所有權到其它地址 - * 如果目標地址是一個合約,則該合約必須實現 `onERC721Received`函數, - * 該函數調用了安全轉帳並且返回一個magic value。 - * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; - * 否則, 轉帳被回退. - */ - function safeTransferFrom(address from, address to, uint256 pizzaId) - public - { - // solium-disable-next-line arg-overflow - this.safeTransferFrom(from, to, pizzaId, ""); - } - - /** - * 安全轉帳給定代幣ID所有權到其它地址 - * 如果目標地址是一個合約,則該合約必須實現`onERC721Received`函數, - * 該函數調用安全轉帳並返回一個magic value - * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; - * 否則,轉帳被回退. - */ - function safeTransferFrom( - address from, - address to, - uint256 pizzaId, - bytes memory _data - ) public { - this.transferFrom(from, to, pizzaId); - require(_checkOnERC721Received(from, to, pizzaId, _data), "Must implement onERC721Received."); - } - - /** - * Internal function to invoke `onERC721Received` on a target address - * The call is not executed if the target address is not a contract - */ - function _checkOnERC721Received( - address from, - address to, - uint256 pizzaId, - bytes memory _data - ) internal returns (bool) { - if (!isContract(to)) { - return true; - } - - bytes4 retval = IERC721Receiver(to).onERC721Received( - msg.sender, - from, - pizzaId, - _data - ); - return (retval == _ERC721_RECEIVED); - } - - // Burns a Pizza - destroys Token completely - // The `external` function modifier means this function is - // part of the contract interface and other contracts can call it - function burn(uint256 _pizzaId) external { - require(msg.sender != address(0), "Invalid address."); - require(_exists(_pizzaId), "Pizza does not exist."); - require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); - - ownerPizzaCount[msg.sender] = SafeMath.sub( - ownerPizzaCount[msg.sender], - 1 - ); - pizzaToOwner[_pizzaId] = address(0); - } - - // Returns count of Pizzas by address - function balanceOf(address _owner) public view returns (uint256 _balance) { - return ownerPizzaCount[_owner]; - } - - // Returns owner of the Pizza found by id - function ownerOf(uint256 _pizzaId) public view returns (address _owner) { - address owner = pizzaToOwner[_pizzaId]; - require(owner != address(0), "Invalid Pizza ID."); - return owner; - } - - // Approves other address to transfer ownership of Pizza - function approve(address _to, uint256 _pizzaId) public { - require(msg.sender == pizzaToOwner[_pizzaId], "Must be the Pizza owner."); - pizzaApprovals[_pizzaId] = _to; - emit Approval(msg.sender, _to, _pizzaId); - } - - // Returns approved address for specific Pizza - function getApproved(uint256 _pizzaId) - public - view - returns (address operator) - { - require(_exists(_pizzaId), "Pizza does not exist."); - return pizzaApprovals[_pizzaId]; - } - - /** - * Private function to clear current approval of a given token ID - * Reverts if the given address is not indeed the owner of the token - */ - function _clearApproval(address owner, uint256 _pizzaId) private { - require(pizzaToOwner[_pizzaId] == owner, "Must be pizza owner."); - require(_exists(_pizzaId), "Pizza does not exist."); - if (pizzaApprovals[_pizzaId] != address(0)) { - pizzaApprovals[_pizzaId] = address(0); - } - } - - /* - * Sets or unsets the approval of a given operator - * An operator is allowed to transfer all tokens of the sender on their behalf - */ - function setApprovalForAll(address to, bool approved) public { - require(to != msg.sender, "Cannot approve own address"); - operatorApprovals[msg.sender][to] = approved; - emit ApprovalForAll(msg.sender, to, approved); - } - - // Tells whether an operator is approved by a given owner - function isApprovedForAll(address owner, address operator) - public - view - returns (bool) - { - return operatorApprovals[owner][operator]; - } - - // Takes ownership of Pizza - only for approved users - function takeOwnership(uint256 _pizzaId) public { - require(_isApprovedOrOwner(msg.sender, _pizzaId), "Address is not approved."); - address owner = this.ownerOf(_pizzaId); - this.transferFrom(owner, msg.sender, _pizzaId); - } - - // Checks if Pizza exists - function _exists(uint256 pizzaId) internal view returns (bool) { - address owner = pizzaToOwner[pizzaId]; - return owner != address(0); - } - - // Checks if address is owner or is approved to transfer Pizza - function _isApprovedOrOwner(address spender, uint256 pizzaId) - internal - view - returns (bool) - { - address owner = pizzaToOwner[pizzaId]; - // Disable solium check because of - // https://github.com/duaraghav8/Solium/issues/175 - // solium-disable-next-line operator-whitespace - return (spender == owner || - this.getApproved(pizzaId) == spender || - this.isApprovedForAll(owner, spender)); - } - - // Check if Pizza is unique and doesn't exist yet - modifier isUnique(string memory _name, uint256 _dna) { - bool result = true; - for (uint256 i = 0; i < pizzas.length; i++) { - if ( - keccak256(abi.encodePacked(pizzas[i].name)) == - keccak256(abi.encodePacked(_name)) && - pizzas[i].dna == _dna - ) { - result = false; - } - } - require(result, "Pizza with such name already exists."); - _; - } - - // Returns whether the target address is a contract - function isContract(address account) internal view returns (bool) { - uint256 size; - // Currently there is no better way to check if there is a contract in an address - // than to check the size of the code at that address. - // 參閱 https://ethereum.stackexchange.com/a/14016/36603 - // 了解更多信息. - // TODO: 在Serenity發布前再次檢查這裡, - // 否則到時所有地址都將判斷為合約. - // solium-disable-next-line security/no-inline-assembly - assembly { - size := extcodesize(account) - } - return size > 0; - } -} -``` - -## 了解更多 {#further-reading} - -請參閱 Solidity 和 Vyper 文件,獲得智慧型合約更完整的概觀: - -- [Solidity](https://solidity.readthedocs.io/) -- [Vyper](https://vyper.readthedocs.io/) - -## 相關主題 {#related-topics} - -- [智慧型合約](/developers/docs/smart-contracts/) -- [以太坊虛擬機](/developers/docs/evm/) - -## 相關教學 {#related-tutorials} - -- [縮減合約大小應對合約大小限制](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _– 減少智慧型合約大小的實用秘訣。_ -- [用事件記錄智慧型合約資料](/developers/tutorials/logging-events-smart-contracts/) _ – 對智慧型合約事件進行介紹,以及如何使用事件來記錄資料。_ -- [與其他 Solidity 合約互動](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– 如何從現有合約部署智慧型合約並與之互動。_ diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/compiling/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/compiling/index.md" deleted file mode 100644 index 80e78208605..00000000000 --- "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/compiling/index.md" +++ /dev/null @@ -1,282 +0,0 @@ ---- -title: 編譯智慧型合約 -description: 說明為什麼需要編譯智慧型合約以及編譯的實際作用。 -lang: zh-tw -incomplete: true ---- - -你需要以網頁應用程式和以太坊虛擬機 (EVM) 能夠理解的方式編譯合約。 - -## 基本資訊 {#prerequisites} - -在閱讀關於編譯的文章前,先閱讀[智慧型合約](/developers/docs/smart-contracts/)及[以太坊虛擬機](/developers/docs/evm/)簡介可能對你有幫助。 - -## 以太坊虛擬機 {#the-evm} - -若要讓[以太坊虛擬機](/developers/docs/evm/)能執行你的合約,合約需要以**位元組碼**格式編譯。 編譯會將以下程式碼: - -```solidity -pragma solidity 0.4.24; - -contract Greeter { - - function greet() public constant returns (string) { - return "Hello"; - } - -} -``` - -**轉換成:** - -``` -PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x80 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SLT 0xec 0xe 0xf5 0xf8 SLT 0xc7 0x2d STATICCALL ADDRESS SHR 0xdb COINBASE 0xb1 BALANCE 0xe8 0xf8 DUP14 0xda 0xad DUP13 LOG1 0x4c 0xb4 0x26 0xc2 DELEGATECALL PUSH7 0x8994D3E002900 -``` - -這些稱為**操作碼**。 EVM 操作碼是以太坊虛擬機器 (EVM) 可以執行的低階指令。 每個操作碼代表一種特定的操作,例如算術運算、邏輯運算、資料操作、控制流程等。 - -[有關操作碼的更多資訊](/developers/docs/evm/opcodes/) - -## Web 應用程式 {#web-applications} - -編譯器還會生成**應用程式二進制介面 (ABI)**,你需要藉此讓應用程式理解你的合約,並調用合約函數。 - -ABI 是一個 JSON 格式檔案,描述了被部署的合約及其智慧型合約函數。 這有助於彌合 Web2 和 Web3 之間的差距 - -[JavaScript 用戶端庫](/developers/docs/apis/javascript/)會讀取**應用程式二進制介面**,以便你在你的 Web 應用程式介面中調用智慧型合約。 - -以下是 ERC-20 代幣合約的應用程式二進制介面。 ERC-20 是你可以在以太坊上交易的一種代幣。 - -```json -[ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "balance", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "from", - "type": "address" - }, - { - "indexed": true, - "name": "to", - "type": "address" - }, - { - "indexed": false, - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - } -] -``` - -## 衍生閱讀 {#further-reading} - -- [應用程式二進制介面規範](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _– Solidity_ - -## 相關主題 {#related-topics} - -- [JavaScript 用戶端庫](/developers/docs/apis/javascript/) -- [以太坊虛擬機](/developers/docs/evm/) diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/deploying/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/deploying/index.md" deleted file mode 100644 index 326d36d3ec0..00000000000 --- "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/deploying/index.md" +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: 部署智慧型合約 -description: -lang: zh-tw ---- - -你需要部署智慧型合約,以供以太坊網路使用者使用。 - -要部署智慧型合約,只需要傳送一個包含編譯後智慧型合約程式碼的以太坊交易,而無須指定任何接收者。 - -## 基本資訊 {#prerequisites} - -在部署智慧型合約前,你需要理解[以太坊網路](/developers/docs/networks/)、[交易](/developers/docs/transactions/)與[智慧型合約結構](/developers/docs/smart-contracts/anatomy/)。 - -部署合約同樣需要花費以太幣 (ETH),因為合約會儲存在區塊鏈上,所以你應該熟悉以太坊的[燃料與手續費](/developers/docs/gas/)。 - -最後,你需要在部署前編譯合約,所以請確保你已閱讀[編譯智慧型合約](/developers/docs/smart-contracts/compiling/)。 - -## 如何部署智慧型合約 {#how-to-deploy-a-smart-contract} - -### 需要準備: {#what-youll-need} - -- 合約的位元組碼 – 這是透過[編譯](/developers/docs/smart-contracts/compiling/)產生的 -- 可作為燃料的以太幣 – 像其他交易一樣,你需要設定燃料限制,所以請注意合約部署需要比簡單的以太幣傳送花費更多燃料 -- 一個部署腳本或外掛程式 -- 存取[以太坊節點](/developers/docs/nodes-and-clients/),你可以透過執行自己的節點、連結公共節點,或透過應用程式介面金鑰使用[節點服務](/developers/docs/nodes-and-clients/nodes-as-a-service/)來存取。 - -### 部署智慧型合約的步驟 {#steps-to-deploy} - -所涉具體步驟仰賴所用的開發框架。 例如,你可以查看 [Hardhat 有關部署合約的文件](https://hardhat.org/guides/deploying.html)或 [Foundry 有關部署和驗證智慧型合約的文件](https://book.getfoundry.sh/forge/deploying)。 部署後,你的合約會跟其他[帳戶](/developers/docs/accounts/)一樣擁有以太坊地址,並且可以使用[原始程式碼驗證工具](/developers/docs/smart-contracts/verifying/#source-code-verification-tools)進行驗證。 - -## 相關工具 {#related-tools} - -**Remix - _Remix 整合開發環境允許開發、部署和管理類似區塊鏈的以太坊智慧型合約_** - -- [Remix](https://remix.ethereum.org) - -**Tenderly - _Web3 開發平台,提供了開發、測試、監控和營運智慧型合約所需的偵錯、可觀察性和基礎架構組件_** - -- [tenderly.co](https://tenderly.co/) -- [文件](https://docs.tenderly.co/) -- [Github](https://github.com/Tenderly) -- [Discord](https://discord.gg/eCWjuvt) - -**Hardhat - _用於編譯、部署、測試和偵錯以太坊軟體的開發環境_** - -- [hardhat.org](https://hardhat.org/getting-started/) -- [合約部署文件](https://hardhat.org/guides/deploying.html) -- [Github](https://github.com/nomiclabs/hardhat) -- [Discord](https://discord.com/invite/TETZs2KK4k) - -**Web3 - _使用一條指令輕鬆部署任何合約至任何與以太坊虛擬機相容的區塊鏈_** - -- [文件](https://portal.thirdweb.com/deploy/) - -**Crossmint - _企業級 web3 開發平台,用於部署智慧型合約,支援信用卡和跨鏈支付,並使用應用程式介面來建立、分發、銷售、儲存和編輯非同質化代幣。_** - -- [crossmint.com](https://www.crossmint.com) -- [文件](https://docs.crossmint.com) -- [Discord](https://discord.com/invite/crossmint) -- [部落格](https://blog.crossmint.com) - -## 相關教程 {#related-tutorials} - -- [部署你的第一個智慧型合約](/developers/tutorials/deploying-your-first-smart-contract/)_ – 如何在以太坊測試網部署你的第一個智慧型合約。_ -- [Hello World | 智慧型合約使用教學](/developers/tutorials/hello-world-smart-contract/) _ – 在以太坊建立與部署基本智慧型合約的簡單使用教學。_ -- [與其他 Solidity 合約互動](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– 如何從現有合約部署智慧型合約並與之互動。_ -- [如何壓縮智慧型合約大小](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/)_ - 如何壓縮智慧型合約大小至限制以下來降低燃料費_ - -## 衍生閱讀 {#further-reading} - -- [https://docs.openzeppelin.com/learn/deploying-and-interacting](https://docs.openzeppelin.com/learn/deploying-and-interacting) - _OpenZeppelin_ -- [利用 Hardhat 來部署合約](https://hardhat.org/guides/deploying.html) - _Nomic Labs_ - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ - -## 相關主題 {#related-topics} - -- [開發架構](/developers/docs/frameworks/) -- [運行以太坊節點](/developers/docs/nodes-and-clients/run-a-node/) -- [節點即服務](/developers/docs/nodes-and-clients/nodes-as-a-service) diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/index.md" deleted file mode 100644 index 75594177756..00000000000 --- "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/index.md" +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: 智慧型合約簡介 -description: 智慧型合約概觀,重點介紹其特點及限制。 -lang: zh-tw ---- - -## 智慧型合約是什麼? {#what-is-a-smart-contract} - -「智慧型合約」就是在以太坊區塊鏈上執行的程式。 這是一系列存在於以太坊區塊鏈特定地址的程式碼(函數)及資料(狀態)。 - -智慧型合約是一種[以太坊帳戶](/developers/docs/accounts/)。 這表示智慧型合約有餘額且能作為交易目標。 然而,智慧型合約不受使用者控制,而是部署至網路,並按程式編寫方式執行。 使用者帳戶能藉由傳送交易,執行智慧型合約定義的函數,來與智慧型合約互動。 智慧型合約能定義規則,就像一般合約一樣,且完全透過程式碼自動執行。 預設情況下,智慧型合約無法刪除,且與其互動的結果無法逆轉。 - -## 基本資訊 {#prerequisites} - -如果你是初學者,或是想找不技術性不太強的說明,推薦你參閱[智慧型合約簡介](/smart-contracts/)。 - -務必先詳閱[帳戶](/developers/docs/accounts/)、[交易](/developers/docs/transactions/)及[以太坊虛擬機](/developers/docs/evm/)後再踏入智慧型合約的世界。 - -## 數位販賣機 {#a-digital-vending-machine} - -或許最適合智慧型合約的比喻是 [Nick Szabo](https://unenumerated.blogspot.com/) 所說的「販賣機」。 只要輸入正確,就保證能得到特定的輸出結果。 - -要從販賣機取得一包點心: - -``` -錢 + 點心選擇 = 點心分發 -``` - -這種邏輯會編寫進販賣機中。 - -而智慧型合約就像販賣機,其中編寫了邏輯。 以下是若使用 Solidity 編寫智慧型合約,這種販賣機運作方式的簡要範例: - -```solidity -pragma solidity 0.8.7; - -contract VendingMachine { - - // Declare state variables of the contract - address public owner; - mapping (address => uint) public cupcakeBalances; - - // When 'VendingMachine' contract is deployed: - // 1. set the deploying address as the owner of the contract - // 2. set the deployed smart contract's cupcake balance to 100 - constructor() { - owner = msg.sender; - cupcakeBalances[address(this)] = 100; - } - - // Allow the owner to increase the smart contract's cupcake balance - function refill(uint amount) public { - require(msg.sender == owner, "Only the owner can refill."); - cupcakeBalances[address(this)] += amount; - } - - // Allow anyone to purchase cupcakes - function purchase(uint amount) public payable { - require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake"); - require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase"); - cupcakeBalances[address(this)] -= amount; - cupcakeBalances[msg.sender] += amount; - } -} -``` - -如同自動販賣機消除了我們對販賣員工的需求,智慧型合約也可取代許多產業的中間媒介。 - -## 無需許可 {#permissionless} - -任何人都能編寫智慧型合約並部署於區塊鏈網路。 你只需要學習如何使用[智慧型合約語言](/developers/docs/smart-contracts/languages/)編碼,並取得足夠的以太幣,即可部署合約。 部署合約基本上是一種交易,因此你需要支付[燃料](/developers/docs/gas/)費用,如同進行簡單的以太幣轉帳一樣。 然而,部署合約的燃料成本卻遠高於此。 - -以太坊具備方便開發者編寫智慧型合約的程式語言: - -- Solidity -- Vyper - -[深入瞭解程式語言](/developers/docs/smart-contracts/languages/) - -然而,在部署合約前需要先編譯,讓以太坊的虛擬機可以解譯並儲存合約。 [深入瞭解編譯](/developers/docs/smart-contracts/compiling/) - -## 可組合性 {#composability} - -智慧型合約公開於以太坊, 類似一API於網路. 這表示你可以在自己的智慧型合約中,調用其他智慧型合約,以大幅拓展可能性。 合約甚至能部署其他合約。 - -深入瞭解[智慧型合約的可組合性](/developers/docs/smart-contracts/composability/)。 - -## 限制 {#limitations} - -智慧型合約本身無法取得「真實世界」事件的資訊,因為這些合約無法擷取鏈外來源中的資料。 這表示智慧型合約不會針對真實世界的事件做出反應。 這是刻意設計。 過度依賴外部資訊可能會破壞共識機制,而共識對安全性與去中心化至關重要。 - -然而,區塊鏈應用程式最好能使用鏈外資料。 解決方法是使用[預言機](/developers/docs/oracles/),這種工具可以取得鏈外資料並提供給智慧型合約使用。 - -智慧型合約的另一個限制為合約大小的上限。 智慧型合約必須小於 24KB,不然燃料不足。 可以透過[鑽石模式](https://eips.ethereum.org/EIPS/eip-2535)迴避此問題。 - -## 多簽合約 {#multisig} - -多簽(多重簽章)合約是需要多個有效簽章,才能執行交易的智慧型合約帳戶。 這能有效預防持有大量以太幣或代幣的合約發生單點失效。 多簽合約也能將執行合約與金鑰管理的責任分散給多方,避免遺失單一私密金鑰造成資金無法回復的損失。 基於上述理由,多簽合約可用於簡單的去中心化組織管理體系。 多簽需要在 M 個可接受的簽章中取得 N 個簽章才能執行(其中,N ≤ M 且 M > 1)。 通常是`N = 3, M = 5` 以及 `N = 4, M = 7`。 4/7 的多簽需要在七個可能的有效簽章中取得四個簽章。 這表示即便遺失三個簽章,仍可取回資金。 在這種情況下,這也表示大多數金鑰持有者必須同意並簽署,才能執行合約。 - -## 智慧型合約資源 {#smart-contract-resources} - -**OpenZeppelin Contracts -** **_開發安全智慧型合約的資料庫。_** - -- [openzeppelin.com/contracts/](https://openzeppelin.com/contracts/) -- [Github](https://github.com/OpenZeppelin/openzeppelin-contracts) -- [社群論壇](https://forum.openzeppelin.com/c/general/16) - -## 衍生閱讀 {#further-reading} - -- [Coinbase:什麼是智慧型合約?](https://www.coinbase.com/learn/crypto-basics/what-is-a-smart-contract) -- [Chainlink:什麼是智慧型合約?](https://chain.link/education/smart-contracts) -- [影片:智慧型合約簡介](https://youtu.be/ZE2HxTmxfrI) -- [Cyfrin Updraft:Web3 學習與審計平台](https://updraft.cyfrin.io) diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/languages/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/languages/index.md" deleted file mode 100644 index 62b5200e430..00000000000 --- "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/languages/index.md" +++ /dev/null @@ -1,323 +0,0 @@ ---- -title: 智慧型合約語言 -description: Solidity 及 Vyper:兩種智慧型合約常用語言的概觀與比較。 -lang: zh-tw ---- - -以太坊一大好處是,對開發者而言,編寫智慧型合約的語言相對簡單。 如你熟悉 Python 或任何[大括號語言](https://wikipedia.org/wiki/List_of_programming_languages_by_type#Curly-bracket_languages),會發現其實他們的語法非常相似。 - -兩種最熱門、最受管理的語言為: - -- Solidity -- Vyper - -Remix 整合開發環境提供一個全面的開發環境,用於透過 Solidity 和 Vyper 語言建立和測試合約。 [嘗試使用瀏覽器內的 Remix IDE](https://remix.ethereum.org) 開始編碼。 - -經驗更豐富的開發者可能也會想使用 Yul,這是[以太坊虛擬機](/developers/docs/evm/)的中階語言,或是使用 Yul 的延伸語言 Yul+。 - -若你有興趣,且想協助測試還處於大力開發階段的新語言,可以實驗仍在發展初期的新興智慧型合約語言 Fe。 - -## 基本資訊 {#prerequisites} - -如果已經有編程語言的知識,特別是 JavaScript 或 Python,可以幫助你瞭解智慧型合約語言的差異。 同時,我們建議你在深入理解語言差異之前,先理解智慧型合約的概念。 [智慧型合約簡介](/developers/docs/smart-contracts/)。 - -## Solidity {#solidity} - -- 實作智慧型合約的物件導向高階語言。 -- 深受 C++ 語言影響的大括號語言。 -- 靜態類型(編譯時已知變數類型)。 -- 支援: - - 繼承(你可以延展其他合約)。 - - 資料庫(你可以建立能從不同的合約調用的可重複使用代碼,如同其他物件導向程式語言中的靜態類別靜態函數)。 - - 複雜的使用者定義類型。 - -### 重要連結 {#important-links} - -- [文件](https://docs.soliditylang.org/en/latest/) -- [Solidity 語言入口網站](https://soliditylang.org/) -- [Solidity by Example](https://docs.soliditylang.org/en/latest/solidity-by-example.html) -- [Github](https://github.com/ethereum/solidity/) -- [Solidity Gitter Chatroom](https://gitter.im/ethereum/solidity) 橋接至 [Solidity Matrix Chatroom](https://matrix.to/#/#ethereum_solidity:gitter.im) -- [懶人包](https://reference.auditless.com/cheatsheet) -- [Solidity 部落格](https://blog.soliditylang.org/) -- [Solidity Twitter](https://twitter.com/solidity_lang) - -### 合約範例 {#example-contract} - -```solidity -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >= 0.7.0; - -contract Coin { - // 關鍵字 "public" 使變量可以被其它合約訪問 - address public minter; - mapping (address => uint) public balances; - - // 事件Events允許客戶讀取你聲明的特定合約變更。 - event Sent(address from, address to, uint amount); - - // Constructor構造代碼僅在合約創建時執行一次。 - constructor() { - minter = msg.sender; - } - - // 發送一定數量新創建的代幣到某個地址。 - // 只有合約創建者可以調用。 - function mint(address receiver, uint amount) public { - require(msg.sender == minter); - require(amount < 1e60); - balances[receiver] += amount; - } - - // 發送一定量已經存在的代幣 - // 從調用者到任意地址 - function send(address receiver, uint amount) public { - require(amount <= balances[msg.sender], "Insufficient balance."); - balances[msg.sender] -= amount; - balances[receiver] += amount; - emit Sent(msg.sender, receiver, amount); - } -} -``` - -這個範例應該能讓你瞭解 Solidity 的合約語法。 關於函數和變數的詳細描述,[請參閱文件](https://docs.soliditylang.org/en/latest/contracts.html)。 - -## Vyper {#vyper} - -- Python 程式語言 -- 強輸入類型 -- 精巧易懂的編譯器代碼 -- 有效率的產生位元組碼 -- 為了提升合約安全性並更容易審核,特意提供比 Solidity 更少功能。 Vyper 不支援: - - 修飾符 - - 繼承 - - 行內組譯 - - 函數重載 - - 運算子重載 - - 遞迴調用 - - 無限長度迴圈 - - 二進制定點 - -如需更多資訊,[請參閱 Vyper 原理](https://vyper.readthedocs.io/en/latest/index.html)。 - -### 重要鏈結 {#important-links-1} - -- [文件](https://vyper.readthedocs.io) -- [Vyper by Example](https://vyper.readthedocs.io/en/latest/vyper-by-example.html) -- [更多 Vyper by Example](https://vyper-by-example.org/) -- [Github](https://github.com/vyperlang/vyper) -- [Vyper 社群 Discord 聊天](https://discord.gg/SdvKC79cJk) -- [懶人包](https://reference.auditless.com/cheatsheet) -- [Vyper 的智慧型合約開發框架與工具](/developers/docs/programming-languages/python/) -- [VyperPunk:瞭解如何保障與駭客攻擊 Vyper 智慧型合約](https://github.com/SupremacyTeam/VyperPunk) -- [VyperExamples:Vyper 漏洞範例](https://www.vyperexamples.com/reentrancy) -- [支援開發的 Vyper Hub](https://github.com/zcor/vyper-dev) -- [Vyper 最熱門的智慧型合約範例](https://github.com/pynchmeister/vyper-greatest-hits/tree/main/contracts) -- [出色的 Vyper 精選資源](https://github.com/spadebuilders/awesome-vyper) - -### 範例 {#example} - -```python -# Open Auction - -# Auction params -# Beneficiary receives money from the highest bidder -beneficiary: public(address) -auctionStart: public(uint256) -auctionEnd: public(uint256) - -# Current state of auction -highestBidder: public(address) -highestBid: public(uint256) - -# Set to true at the end, disallows any change -ended: public(bool) - -# Keep track of refunded bids so we can follow the withdraw pattern -pendingReturns: public(HashMap[address, uint256]) - -# Create a simple auction with `_bidding_time` -# seconds bidding time on behalf of the -# beneficiary address `_beneficiary`. -@external -def __init__(_beneficiary: address, _bidding_time: uint256): - self.beneficiary = _beneficiary - self.auctionStart = block.timestamp - self.auctionEnd = self.auctionStart + _bidding_time - -# Bid on the auction with the value sent -# together with this transaction. -# The value will only be refunded if the -# auction is not won. -@external -@payable -def bid(): - # Check if bidding period is over. - assert block.timestamp < self.auctionEnd - # Check if bid is high enough - assert msg.value > self.highestBid - # Track the refund for the previous high bidder - self.pendingReturns[self.highestBidder] += self.highestBid - # Track new high bid - self.highestBidder = msg.sender - self.highestBid = msg.value - -# Withdraw a previously refunded bid. The withdraw pattern is -# used here to avoid a security issue. If refunds were directly -# sent as part of bid(), a malicious bidding contract could block -# those refunds and thus block new higher bids from coming in. -@external -def withdraw(): - pending_amount: uint256 = self.pendingReturns[msg.sender] - self.pendingReturns[msg.sender] = 0 - send(msg.sender, pending_amount) - -# End the auction and send the highest bid -# to the beneficiary. -@external -def endAuction(): - # It is a good guideline to structure functions that interact - # with other contracts (i.e. they call functions or send ether) - # into three phases: - # 1. checking conditions - # 2. performing actions (potentially changing conditions) - # 3. interacting with other contracts - # If these phases are mixed up, the other contract could call - # back into the current contract and modify the state or cause - # effects (ether payout) to be performed multiple times. - # If functions called internally include interaction with external - # contracts, they also have to be considered interaction with - # external contracts. - - # 1. Conditions - # Check if auction endtime has been reached - assert block.timestamp >= self.auctionEnd - # Check if this function has already been called - assert not self.ended - - # 2. Effects - self.ended = True - - # 3. Interaction - send(self.beneficiary, self.highestBid) -``` - -此範例應該能讓你瞭解 Solidity 的合約語法。 關於函數和變數的詳細描述,[請參閱文件](https://vyper.readthedocs.io/en/latest/vyper-by-example.html#simple-open-auction)。 - -## Yul 和 Yul+ {#yul} - -如果你是以太坊新手並且尚未使用過智慧型合約語言編碼,建議你從 Solidity 或 Vyper 開始。 只有在你熟悉智慧型合約安全性最佳案例和使用以太坊虛擬機的具體細節後,才可投入 Yul 或 Yul+。 - -**Yul** - -- 以太坊的中階語言。 -- 支援[以太坊虛擬機](/developers/docs/evm)和 [eWASM](https://github.com/ewasm),一種以太坊風格的 WebAssembly,目的在於成為兩個平台均可使用的通用工具。 -- 高級最佳化階段的優良目標,能使以太坊虛擬機和 eWASM 平台均等受益。 - -**Yul+** - -- Yul 的低階高效延伸語言。 -- 最初設計用於[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)合約。 -- Yul+ 可以被視為 Yul 的實驗性升級建議,為其添加新功能。 - -### 重要鏈結 {#important-links-2} - -- [Yul 文件](https://docs.soliditylang.org/en/latest/yul.html) -- [Yul+ 文件](https://github.com/fuellabs/yulp) -- [Yul+ 訓練場](https://yulp.fuel.sh/) -- [Yul+ 介紹文章](https://medium.com/@fuellabs/introducing-yul-a-new-low-level-language-for-ethereum-aa64ce89512f) - -### 合約範例 {#example-contract-2} - -以下簡單範例採用冪函數。 它可以使用 `solc --strict-assembly --bin input.yul` 編譯。 這個範例應該 儲存在 input.yul 檔案中。 - -``` -{ - function power(base, exponent) -> result - { - switch exponent - case 0 { result := 1 } - case 1 { result := base } - default - { - result := power(mul(base, base), div(exponent, 2)) - if mod(exponent, 2) { result := mul(base, result) } - } - } - let res := power(calldataload(0), calldataload(32)) - mstore(0, res) - return(0, 32) -} -``` - -如果你已經熟悉智慧型合約,可以在[此處](https://solidity.readthedocs.io/en/latest/yul.html#complete-erc20-example)找到 Yul 言語的完整 ERC20 實作。 - -## Fe {#fe} - -- 用於以太坊虛擬機 (EVM) 的靜態類型語言。 -- 受 Python 和 Rust 所啟發。 -- 目標是讓以太坊生態系統的新手開發者,都能輕鬆學習這門語言。 -- Fe 還處於早期開發階段,其 Alpha 版本於 2021 年 1 月推出。 - -### 重要鏈結 {#important-links-3} - -- [Github](https://github.com/ethereum/fe) -- [Fe 發布聲明](https://snakecharmers.ethereum.org/fe-a-new-language-for-the-ethereum-ecosystem/) -- [Fe 2021 開發藍圖](https://notes.ethereum.org/LVhaTF30SJOpkbG1iVw1jg) -- [Fe Discord 聊天室](https://discord.com/invite/ywpkAXFjZH) -- [Fe Twitter](https://twitter.com/official_fe) - -### 合約範例 {#example-contract-3} - -以下為採用 Fe 的簡單合約。 - -``` -type BookMsg = bytes[100] - -contract GuestBook: - pub guest_book: map - - event Signed: - book_msg: BookMsg - - pub def sign(book_msg: BookMsg): - self.guest_book[msg.sender] = book_msg - - emit Signed(book_msg=book_msg) - - pub def get_msg(addr: address) -> BookMsg: - return self.guest_book[addr].to_mem() - -``` - -## 如何選擇 {#how-to-choose} - -與任何其他編程語言一樣,重點在於根據合適的工作與個人偏好選擇正確工具。 - -如果你還沒有嘗試過任何一種語言,請考慮以下幾點: - -### Solidity 的優點是什麼? {#solidity-advantages} - -- 如果你是初學者,有不少使用教學和學習工具。 在[透過編碼學習](/developers/learning-tools/)部分瞭解更多相關資訊。 -- 提供優良的開發者工具。 -- Solidity 擁有龐大的開發者社群,這表示你很可能會很快找到問題的答案。 - -### Vyper 的優點是什麼? {#vyper-advatages} - -- 適合想要編寫智慧型合約的 Python 開發者入門。 -- Vyper 的功能較少,因此非常適合快速製作創意原型。 -- Vyper 的目的是容易審查並盡可能提高人類可讀性。 - -### Yul 和 Yul+ 的優點是什麼? {#yul-advantages} - -- 簡單而實用的低階語言。 -- 允許更接近原始以太坊虛擬機,有助於最佳化合約的燃料使用量。 - -## 語言比較 {#language-comparisons} - -如需瞭解基本語法比較、合約生命週期、介面、運算子、數據結構、功能、控制流程等資訊,請參閱[由 Auditless 編寫的懶人包](https://reference.auditless.com/cheatsheet/) - -## 衍生閱讀 {#further-reading} - -- [OpenZeppelin 的 Solidity 合約資料庫](https://docs.openzeppelin.com/contracts) -- [Solidity 範例](https://solidity-by-example.org) diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/libraries/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/libraries/index.md" deleted file mode 100644 index ed66fb6aae3..00000000000 --- "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/libraries/index.md" +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: 智慧型合約庫 -description: -lang: zh-tw ---- - -你無需從頭開始編寫專案中的每一個智慧型合約。 因為我們有許多開放原始碼智慧型合約庫可為你的專案提供可重複利用的組件,因此你不必從零開始。 - -## 基本資訊 {#prerequisites} - -在使用智慧型合約庫之前,最好先清楚瞭解智慧型合約的結構。 如果尚未完成,請前往[智慧型合約結構](/developers/docs/smart-contracts/anatomy/)。 - -## 庫的內容 {#whats-in-a-library} - -你通常可以在智慧型合約庫中找到兩種組件:可以添加到合約的可重複使用行為,與採納的各種標準。 - -### 行為 {#behaviors} - -編寫智慧型合約時,你很可能會發現自己在重複編寫類似代碼。比如說在合約中指派一個_管理員_地址執行受保護的操作;或添加一個緊急_暫停_按鈕以應對預料之外的問題。 - -智慧型合約庫通常透過[庫](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries)或在Solidity 中[繼承](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#inheritance),讓這些行為可以重複使用。 - -例如,以下是[OpenZepelin Contracts 資料庫](https://github.com/OpenZeppelin/openzeppelin-contracts)的 [`Ownable` 合約](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/access/Ownable.sol)簡化版,此合約指定了合約擁有者的地址,並提供將存取方法限制為只有擁有者可存取的修飾符。 - -```solidity -contract Ownable { - address public owner; - - constructor() internal { - owner = msg.sender; - } - - modifier onlyOwner() { - require(owner == msg.sender, "Ownable: caller is not the owner"); - _; - } -} -``` - -若要在你的合約中使用這種組件,首先要匯入,再於自己的合約中擴充。 這會允許你使用基礎 `Ownable` 合約提供的修飾符來保護函數 - -```solidity -import ".../Ownable.sol"; // Path to the imported library - -contract MyContract is Ownable { - // The following function can only be called by the owner - function secured() onlyOwner public { - msg.sender.transfer(1 ether); - } -} -``` - -另一個比較受歡迎的例子是 [SafeMath](https://docs.openzeppelin.com/contracts/3.x/utilities#math) 或 [DsMath](https://dappsys.readthedocs.io/en/latest/ds_math.html)。 這些庫(與基礎合約不同)提供了語言本身不具備的溢出檢查算術函數。 使用這些庫而非原生算術運算可以防止合約出現溢出,這類錯誤可能導致災難性後果! - -### 標準 {#standards} - -為了促進[可組合性和互通性](/developers/docs/smart-contracts/composability/),以太坊社群已使用**以太坊意見徵求**的形式定義了幾個標準。 你可以在[標準](/developers/docs/standards/)部分閱讀更多相關資訊。 - -將以太坊意見徵求納入合約時,更好的做法是尋找標準實作,而非嘗試推出自己的方式。 許多智慧型合約庫包含採用最熱門 ERC 標準的做法。 例如,[ERC20 可互換代幣標準](/developers/tutorials/understand-the-erc-20-token-smart-contract/)可在 [HQ20](https://github.com/HQ20/contracts/blob/master/contracts/token/README.md)、[DappSys](https://github.com/dapphub/ds-token/) 和 [OpenZepelin](https://docs.openzeppelin.com/contracts/3.x/erc20) 中找到。 此外,一些以太坊意見徵求也提供作為以太坊意見徵求本身一部分的規範實作。 - -值得一提的是,一些以太坊意見徵求並非獨立的,而是對其他以太坊意見徵求的補充。 例如,[ERC2612](https://eips.ethereum.org/EIPS/eip-2612) 拓展了 ERC20,提高其可用性。 - -## 如何新增庫 {#how-to} - -務必參考你要納入的庫文件,以掌握如何將其納入專案的具體說明。 有些 Solidity 合約庫使用 `npm` 來封裝,所以你可以直接透過 `npm install`。 大多數[編譯](/developers/docs/smart-contracts/compiling/)合約的工具會在你的 `node_modules` 中尋找智慧型合約庫,所以你可以執行: - -```solidity -// This will load the @openzeppelin/contracts library from your node_modules -import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; - -contract MyNFT is ERC721 { - constructor() ERC721("MyNFT", "MNFT") public { } -} -``` - -無論使用哪種方法,納入庫時,務必留意[程式語言](/developers/docs/smart-contracts/languages/)的版本。 例如,如果你使用 Solidity 0.5 編寫合約,就不能使用 Solidity 0.6 庫。 - -## 使用時機 {#when-to-use} - -在你的專案使用智慧型合約庫有幾個好處。 首先,這提供了現成的組件,可以納入你的系統,而不必自己編寫程式碼,從而節省時間。 - -安全性也是一個重要的優點。 開放原始碼智慧型合約庫也經常接受嚴格審查。 鑑於許多專案都依賴它們,社群有強烈動機加以持續審查。 在應用程式代碼中比起可重複使用的合約庫更容易發現錯誤。 有些庫甚至接受[外部審核](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/audits),以提高安全性。 - -然而,使用智慧型合約庫可能將你不熟悉的程式碼納入專案。 我們會想匯入合約,並將其直接納入專案,但若未充分理解該合約的作用,可能會由於意外行為,而無意中在系統中引入問題。 務必參閱要匯入的程式碼文件,然後在納入專案前審查程式碼! - -最後,在決定是否納入庫時,要考慮其總體使用情況。 獲得廣泛採用的資料庫,好處在於有取得更廣大的社群和關注來審視問題。 在建立智慧型合約時,安全性應為首要考量! - -## 相關工具 {#related-tools} - -**OpenZeppelin Contracts:** **_最熱門的智慧型合約開發資料庫。 _** - -- [文件](https://docs.openzeppelin.com/contracts/) -- [Github](https://github.com/OpenZeppelin/openzeppelin-contracts) -- [社群論壇](https://forum.openzeppelin.com/c/general/16) - -**DappSys:****_安全、簡單、靈活的智慧型合約建置組件。_** - -- [文件檔案](https://dappsys.readthedocs.io/) -- [Github](https://github.com/dapphub/dappsys) - -**HQ20:** **_提供合約、資料庫與範例的 Solidity 專案,幫助你建立現實世界可用、功能齊全的分散式應用程式。 _** - -- [Github](https://github.com/HQ20/contracts) - -**Web3 Solidity SDK:** **_提供有效率建立自訂智慧型合約所需的工具_** - -- [文件](https://portal.thirdweb.com/solidity/) -- [GitHub](https://github.com/thirdweb-dev/contracts) - -## 相關教程 {#related-tutorials} - -- [以太坊開發者的安全考量](/developers/docs/smart-contracts/security/) _– 構建智慧型合約時的安全考量使用教學,包括庫的使用。_ -- [瞭解 ERC-20 代幣智慧型合約](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _:關於 ERC20 標準的教學,由多個資料庫提供。_ - -## 衍生閱讀 {#further-reading} - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/security/index.md" "b/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/security/index.md" deleted file mode 100644 index 1e1e28ebd27..00000000000 --- "a/public/content/translations/zh-tw/19) Smart Contracts \342\200\223 Basics/developers/docs/smart-contracts/security/index.md" +++ /dev/null @@ -1,580 +0,0 @@ ---- -title: 智慧型合約安全 -description: 建立安全的以太坊智慧型合約指南之概觀 -lang: zh-tw ---- - -智慧型合約極度靈活,且能夠控制大量值和資料,同時基於部署在區塊鏈上的程式碼執行不可變的邏輯。 這建立了活躍的去信任和去中心化的應用程式生態系統,它與傳統系統相比有許多優點。 這也為謀求透過智慧型合約漏洞獲利的攻擊者提供機會。 - -公共區塊鏈,例如以太坊,使智慧型合約的安全議題更加複雜。 已部署的合約程式碼_通常_無法變更,以修補安全缺陷;而要追蹤從智慧型合約竊取的資產也十分困難,且因為物件的不可變性,大多無法挽回。 - -雖然數字有差異,但因智慧型合約安全缺陷而遭竊取或損失的總額,估計超過 10 億美元。 備受關注的事件如 [DAO 駭客攻擊](https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/)(駭客竊取 360 萬以太幣,現價超過 10 億美元);[Parity 多重簽章錢包駭客攻擊](https://www.coindesk.com/30-million-ether-reported-stolen-parity-wallet-breach)(駭客竊取 3 千萬美元);以及 [Parity 凍結錢包問題](https://www.theguardian.com/technology/2017/nov/08/cryptocurrency-300m-dollars-stolen-bug-ether)(超過 3 億美元的以太幣遭到永久凍結)。 - -前面提到的問題,促使開發者將努力打造安全、健全且有韌性的智慧型合約視為當務之急。 我們必須嚴肅看待智慧型合約的安全性,每個開發者都需要好好加以瞭解。 此指南將涵蓋以太坊開發者應有的資安考量,並探索提升智慧型合約安全性的資源。 - -## 基本資訊 {#prerequisites} - -請務必熟悉[開發智慧型合約的基本知識](/developers/docs/smart-contracts/),再來瞭解安全性。 - -## 建立安全的以太坊智慧型合約指南 {#smart-contract-security-guidelines} - -### 1. 設計正確的存取控制 {#design-proper-access-controls} - -在智慧型合約中,任何外部帳戶 (EOA) 或合約帳戶都可以調用標記為 `public` 或 `external` 的函數。 如果你想要其他人與你的智慧型合約互動,務必指定函數的公共可見性。 標記為 `private` 的函數只能被智慧型合約內部的函數調用,外部帳戶無法調用這種函數。 讓每個網路參與者存取智慧型合約函數可能造成一些問題,尤其是這表示人人都能執行須謹慎以對的操作(例如鑄造新代幣)。 - -為了防止未授權者使用智慧型合約函數,務必落實安全存取控制。 存取控制機制將使用智慧型合約中特定函數的功能限縮給某些核准實體,例如負責管理合約的帳戶。 在智慧型合約中,**可擁有模式**和**以角色為基礎的控制**是兩個有效落實存取控制的方法。 - -#### 可擁有模式 {#ownable-pattern} - -在可擁有模式下,會在建立合約的過程中,將一個地址設為合約的「擁有者」。 受保護的函數會配置一個 `OnlyOwner` 修飾符,確保執行函數前,先驗證調用地址的身分。 為防止不受歡迎的存取,合約擁有者以外的地址對受保護函數的調用都會遭到撤銷。 - -#### 以角色為基礎的控制 {#role-based-access-control} - -在一個智慧型合約中,將一個地址註冊為 `Owner` 會導致集中風險及單點失效。 假如合約擁有者的帳戶金鑰遭竊,攻擊者就可以攻擊合約擁有者的智慧型合約。 這就是為什麼使用以角色為基礎的控制模式和多重管理帳戶可能是更好的方法。 - -在以角色為基礎的控制下,存取敏感函數的權限會分散給一組受信任的參與者。 例如一個帳戶可能負責鑄造代幣;另一個帳戶則執行升級或暫停合約。 這種分散存取控制的做法排除了單點失效,也減少使用者的信任假設。 - -##### 使用多重簽章錢包 - -另一個落實安全存取控制的方法是使用[多重簽章帳戶](/developers/docs/smart-contracts/#multisig)管理合約。 不同於一般外部帳戶 (EOA),多重簽章帳戶由多個實體持有,而且需要最小數量的帳戶簽章,例如 5 個持有人中 3 個人的簽章,才能執行交易。 - -使用多簽存取控制,可多添一層安全性,因為對合約採取執行任何操作都需要多位合約持有人的同意。 這在使用可擁有模式的情況下尤其必要,因為它讓攻擊者或不肖內部人士更難操縱敏感的合約函數以達成其惡意目的。 - -### 2. 使用 require()、assert() 和 revert() 陳述式保護合約運作 {#use-require-assert-revert} - -如前面所說的,一旦將智慧型合約部署到區塊鏈上,任何人都可以調用智慧型合約內的公共函數。 因為無法事先預期外部帳戶將如何與你的合約互動,理想做法是在部署前落實內部保障措施,防止會造成問題的操作。 你可以強制使用者對智慧型合約執行正確行為,如果執行操作未能通過某些條件,可以使用 `require()`、`assert()` 和 `revert()` 陳述式,來啟動例外狀況並撤銷狀態變更。 - -**`require()`**:`require` 會定義於函數的開頭,確保在執行調用函數前,達到預先定義的條件。 `require` 陳述式可以用於驗證使用者輸入的資料、確認狀態變數或在繼續執行函數前驗證調用帳戶的身分。 - -**`assert()`**:`assert()` 用於偵測內部錯誤和確認程式碼是否違反「不變性」。 不變性是在執行所有函數時,都應為真的合約狀態的邏輯斷言。 不變性的一個範例就是代幣合約的最大總供應量或餘額。 使用 `assert()` 確保你的合約絕不會進入脆弱狀態,若發生這種狀況,所有狀態變數將會回復到先前狀態。 - -**`revert()`**:`revert()` 可以運用在未滿足指定條件時,觸發例外狀況的 if-else 陳述式。 以下範例合約使用 `revert()` 來保護函數的執行: - -``` -pragma solidity ^0.8.4; - -contract VendingMachine { - address owner; - error Unauthorized(); - function buy(uint amount) public payable { - if (amount > msg.value / 2 ether) - revert("Not enough Ether provided."); - // Perform the purchase. - } - function withdraw() public { - if (msg.sender != owner) - revert Unauthorized(); - - payable(msg.sender).transfer(address(this).balance); - } -} -``` - -### 3. 測試智慧型合約和驗證程式碼的正確性 {#test-smart-contracts-and-verify-code-correctness} - -在[以太坊虛擬機](/developers/docs/evm/)上執行的程式碼具備不可變性,代表智慧型合約在開發階段需要接受更高階的品質評估。 全面測試你的合約並注意任何超出預期的結果,將大大提升合約的安全性,且長期來看可保護使用者。 - -常用方法是使用預期合約會接受的使用者模擬資料,來編寫小型單元測試。 [單元測試](/developers/docs/smart-contracts/testing/#unit-testing)適合測試特定函數的功能,並確保智慧型合約如預期運作。 - -很可惜,單元測試單獨使用時,提升智慧型合約安全性的成效並不顯著。 單元測試可能證明函數可以正確執行模擬資料,但單元測試的效果取決於編寫測試的品質。 這使得偵測未注意到、但會破壞智慧型合約安全性的邊緣案例與漏洞非常困難。 - -更好的做法是結合單元測試與屬性測試,並運用[靜態和動態分析](/developers/docs/smart-contracts/testing/#static-dynamic-analysis)執行。 靜態分析依賴低階表示法,像是[控制流程圖](https://en.wikipedia.org/wiki/Control-flow_graph)和[抽象語法樹](https://deepsource.io/glossary/ast/),來分析可觸及的程式狀態和執行路徑。 同時,動態分析技術(如[智慧型合約模糊測試](https://www.cyfrin.io/blog/smart-contract-fuzzing-and-invariants-testing-foundry))則使用隨機輸入值執行合約程式碼,以偵測違反安全屬性的操作。 - -[形式驗證](/developers/docs/smart-contracts/)是另一項驗證智慧型合約安全屬性的技術。 不同於一般測試,形式驗證可以确凿地證明智慧型合約不存在任何錯誤。 這種做法會建立描述預期安全屬性的形式規范,並證明合約的形式模型遵守此規范。 - -### 4 邀請獨立審查程式碼 {#get-independent-code-reviews} - -測試完合約後,最好請其他人來確認原始程式碼是否有任何安全性問題。 測試沒辦法涵蓋智慧型合約內的每一處瑕疵,但進行獨立審查可增加發現漏洞的可能性。 - -#### 審核 {#audits} - -委託智慧型合約審核服務是進行獨立程式碼審查的方法之一。 審核者在確保智慧型合約安全性,且沒有品質瑕疵和設計錯誤上扮演重要角色。 - -但是,你應該避免把審核當成一勞永逸地的解決方案。 智慧型合約審核不可能發現每一個錯誤,其主要目的是再次進行審查,幫助開發者偵測在開發初期和測試階段沒有發現的問題。 你也應該遵循與審核者合作的最佳案例,例如製作完整的程式碼記錄以及新增內嵌注釋,才能從智慧型合約審核中獲得最大效益。 - -- [智慧型合約審核提示和技巧](https://twitter.com/tinchoabbate/status/1400170232904400897) - _@tinchoabbate_ -- [充分利用你的審核](https://inference.ag/blog/2023-08-14-tips/) - _推理_ - -#### 漏洞懸賞 {#bug-bounties} - -設立漏洞懸賞賞計畫是另一個實現外部程式碼審查的方法。 漏洞懸賞會發放經濟性獎勵給發現應用程式漏洞的個人(通常是白帽駭客)。 - -若正確運用,漏洞懸賞可以給予駭客社群檢查你程式碼重大缺陷的動機。 一個實際案例是「無限貨幣錯誤」,讓攻擊者可以在以太坊的[二層](/layer-2/)協定 [Optimism](https://www.optimism.io/) 上建立無限數量的以太幣。 幸好有位白帽駭客[發現了這個缺陷](https://www.saurik.com/optimism.html),並通知了相關團隊[,因此獲得了一大筆獎金](https://cryptoslate.com/critical-bug-in-ethereum-l2-optimism-2m-bounty-paid/)。 - -有效的漏洞懸賞獎金機制,應與面臨風險的資金成比例。 就像「[Scaling Bug Bounty(擴大漏洞懸賞)](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)」一文所說,這種方法讓人在財務上有動機盡責揭露,而非利用漏洞。 - -### 5 開發智慧型合約時遵循最佳案例 {#follow-smart-contract-development-best-practices} - -不能因為有審核和漏洞懸賞就不盡責編寫高品質程式碼。 優良的智慧型合約安全性始於遵循正確的設計和開發流程: - -- 將所有的程式碼儲存在版本控制系統中,例如 git - -- 修改所有程式碼都需透過提取請求完成 - -- 確保所有的提取請求都至少有一個獨立審核人:如果是自己獨自開發專案,可斟酌找其他開發者交換審查程式碼 - -- 使用[開發環境](/developers/docs/frameworks/)來測試、編譯、部署智慧型合約 - -- 透過基本的程式碼分析工具,例如 [Cyfrin Aaderyn](https://github.com/Cyfrin/aderyn)、Mythril 和 Slither,來執行程式碼。 理想情况下,這應該在合併提取請求及檢查輸出結果異同前完成 - -- 確認程式碼編譯沒有錯誤,且 Solidity 編譯器不會傳出警告 - -- 正確記錄程式碼(使用 [NatSpec](https://solidity.readthedocs.io/en/develop/natspec-format.html)),並運用簡單易懂的語言詳細描述合約架構。 這樣才容易讓其他人審核和審查你的程式碼。 - -### 6. 採行健全的災害復原計畫 {#implement-disaster-recovery-plans} - -設計安全的存取控制、採用函數修飾符和其他上述提議,可改善智慧型合約安全,但不能排除惡意入侵的可能性。 建立安全的智慧型合約需要做好「防範錯誤的準備」,以及對攻擊作出有效反應的備援計畫。 正確的災害復原計畫包含下列部分或全部要素: - -#### 合約升級 {#contract-upgrades} - -雖然以太坊智慧型合約是預設不得變更,但可以透過升級模式來達成某程度的變更。 當重大缺陷迫使舊合約無法使用,而部署新邏輯是最可行的選擇時,就必須升級合約。 - -合約升級機制的運作方式不同,「代理人模式」是升級智慧型合約最常見的方法。 [代理人模式](https://www.cyfrin.io/blog/upgradeable-proxy-smart-contract-pattern)會將應用程式的狀態和邏輯拆分成_兩個_合約。 第一個合約(稱為「代理人合約」)儲存狀態變數(例如使用者餘額);第二個合約(稱為「邏輯合約」)保存執行合約函數的程式碼。 - -帳戶只和代理人合約互動,代理人合約再用低階調用 [`delegatecall()`](https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html?highlight=delegatecall#delegatecall-callcode-and-libraries) 發送所有函數調用至邏輯合約。 和一般的訊息調用不同,`delegatecall()` 會確保在邏輯合約地址上執行的程式碼是在調用合約的情境下執行。 這表示邏輯合約將永遠把資料寫入代理人的存儲空間(而不是自己的存儲空間),且會保留 `msg.sender` 與 `msg.value` 的原始值。 - -委託邏輯合約的調用必須將其地址儲存在代理人合約的存儲空間。 因此,升級合約的邏輯只是部署另一個邏輯合約,並將新地址儲存至代理人合約。 之後,代理人合約的調用都會自動傳送至新的邏輯合約,讓你在未實際修改程式碼的情況下「升級」合約。 - -[更多升級合約相關資訊](/developers/docs/smart-contracts/upgrading/)。 - -#### 緊急停止 {#emergency-stops} - -如前所述,即便進行大量審核和測試,仍不可能發現智慧型合約的所有漏洞。 如果已經部署的程式出現漏洞,就不可能修補,因為你無法改變在合約地址執行的程式碼。 而且,升級機制(例如,代理人模式)可能需要時間完成(通常需要不同相關方的同意),因此會給攻擊者更多時間造成更大傷害。 - -極端選擇是執行「緊急停止」函數,阻止調用合約中的易受攻擊函數。 緊急停止通常包含下列要素: - -1. 指示智慧型合約是否在停止狀態的全域布林變數。 建立合約時,此變數被設定為 `false`,一旦合約終止,就會回復為 `true`。 - -2. 執行時參照這個布林變數的函數。 在智慧型合約不在終止狀態時,可存取這類函數;但啟動緊急停止功能後,此類函數就無法存取。 - -3. 可以存取緊急停止函數的實體,可將布林變數設定為 `true`。 為防止惡意行動,可以限制只有受信任地址(例如,合約持有人)才可調用此函數。 - -一旦合約啟動緊急停止,將無法調用特定函數。 藉由將指定函數包裹在參照全域變數的修飾符中來達成此目的。 以下是說明如何在合約中採用此模式的[範例](https://github.com/fravoll/solidity-patterns/blob/master/EmergencyStop/EmergencyStop.sol): - -```solidity -// This code has not been professionally audited and makes no promises about safety or correctness. Use at your own risk. - -contract EmergencyStop { - - bool isStopped = false; - - modifier stoppedInEmergency { - require(!isStopped); - _; - } - - modifier onlyWhenStopped { - require(isStopped); - _; - } - - modifier onlyAuthorized { - // Check for authorization of msg.sender here - _; - } - - function stopContract() public onlyAuthorized { - isStopped = true; - } - - function resumeContract() public onlyAuthorized { - isStopped = false; - } - - function deposit() public payable stoppedInEmergency { - // Deposit logic happening here - } - - function emergencyWithdraw() public onlyWhenStopped { - // Emergency withdraw happening here - } -} -``` - -此範例展現緊急停止的基本特徵: - -- `isStopped` 是布林變數,在開始時計算為為 `false`,當合約進入緊急模式時即變更為 `true`。 - -- 函數修飾符 `onlyWhenStopped` 和 `stoppedInEmergency` 會檢查 `isStopped` 變數。 `stoppedInEmergency` 用於控制合約出現漏洞時,無法存取的函數(例如,`deposit()`)。 這些函數的調用將直接遭到撤銷。 - -`onlyWhenStopped` 用於在緊急情況下應調用的函數(例如,`emergencyWithdraw()`)。 這類函數有助解決困境,因此被排除在「受限函數」清單之外。 - -緊急停止功能提供處理智慧型合約嚴重漏洞的有效權宜之計。 然而,這種方法需要使用者相信開發者不會基於自身利益啟動緊急停止功能。 面對這種疑慮,可能的解決方法是透過鏈上投票機制、時間鎖定、或多簽錢包核准等分散式方法管理緊急停止功能。 - -#### 事件監控 {#event-monitoring} - -[事件](https://docs.soliditylang.org/en/v0.8.15/contracts.html#events)可以追蹤智慧型合約函數調用狀況和監控狀態變數的變化。 理想做法是當某一方執行攸關安全的行動(例如,提領資金)時,讓智慧型合約釋出事件。 - -記錄事件和鏈外監控事件,可以掌握合約運作狀況並有助及早發現惡意行動。 這表示你的團隊可以快速對駭客攻擊做出反應,並採取行動減輕對使用者的衝擊,例如:暫停函數或執行升級。 - -你也可以選擇現成的監控工具,在有人和你的合約互動時,這些工具會自動傳送警告通知。 這些工具可讓你基於不同的觸發器,例如:交易量、函數調用頻率或涉及特定函數時,建立自訂警告通知。 例如:你可以編寫在單筆交易提款金額超過特定閾值時傳送警告。 - -### 7. 設計安全治理體系 {#design-secure-governance-systems} - -你可能想要藉由移交重要智慧型合約的控制權給社群成員,來分散管理(去中心化)應用程式。 這種情況下,智慧型合約系統將包含一個治理模組,也就是允許社群成員透過鏈上治理體系核准管理行動的機制。 例如,採納升級代理人合約的提案,可由代幣持有人投票決定。 - -去中心化治理的好處在於讓開發者和終端使用者的利益一致。 儘管如此,若未正確落實智慧型合約治理機制,仍可能產生新的風險。 可能出現的情況是,一位攻擊者透過[閃電貸](/defi/#flash-loans)取得大量投票權(以持有代幣數量決定),推動通過惡意提案。 - -預防鏈上治理相關問題的方法之一是[使用時間鎖定](https://blog.openzeppelin.com/protect-your-users-with-smart-contract-timelocks/)。 時間鎖定是直到特定時間過後,才讓智慧型合約執行某些動作。 其他策略包括:根據每一個代幣被鎖定的時間賦予「投票加權」,或以歷史期間(例如:過去的 2-3 個區塊)而不是目前區塊,來衡量一個地址的投票權。 這兩種方法都能降低快速累積投票權,進而影響鏈上投票結果的情況。 - -藉由共享連結,了解關於[設計安全管理體系](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/)、[去中心化自治組織的不同投票機制](https://hackernoon.com/governance-is-the-holy-grail-for-daos),以及[利用去中心化金融的常見去中心化自治組織攻擊媒介](https://dacian.me/dao-governance-defi-attacks)的更多資訊。 - -### 8. 將程式碼的複雜性降到最低 {#reduce-code-complexity} - -傳統的軟體開發者都熟悉 KISS (「保持簡約」),也就是不要在軟體中引進不必要複雜設計的原則。 這是因為長期以來,人們都認為「複雜系統會發生複雜的故障」,且更容易造成代價高昂的錯誤。 - -編寫智慧型合約尤其注重簡約,因為智慧型合約可能控制龐大資金。 保持簡約的秘訣:編寫智慧型合約時盡可能重複使用既有庫,例如 [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/4.x/)。 因為這些庫已經通過開發者廣泛審核和測試,使用時可以降低從零開始開發新功能出現漏洞的幾率。 - -另一個建議是編寫小型函數,並將商業邏輯拆分成多個合約,確立模組化合約。 編寫較簡單的程式碼不只能縮小智慧型合約中的受攻擊面,也使判斷整個系統的正確性更簡單,亦能提早偵測可能的設計錯誤。 - -### 9. 防範一般的智慧型合約漏洞 {#mitigate-common-smart-contract-vulnerabilities} - -#### 重入攻擊 {#reentrancy} - -以太坊虛擬機不允許並行執行,也就是無法同時執行牽涉同一訊息調用的兩個合約。 一個外部調用會終止調用合約的執行和記憶體,直到這個調用返回結果,這時才會繼續正常執行。 這個過程可被正式稱為將[控制流程](https://www.computerhope.com/jargon/c/contflow.htm)轉移到另一個合約。 - -雖然大多數情況下無害,但轉移控制流程至不受信任的合約可能引起重入攻擊等問題。 在初始函數調用完成前,若惡意合約回呼易受攻擊的合約,就是重入攻擊。 我們可以舉一個例子來說明這種攻擊類型。 - -試想有個簡單的智慧型合約(稱為「Victim」),可以讓任何人存入與提領以太幣: - -```solidity -// This contract is vulnerable. Do not use in production - -contract Victim { - mapping (address => uint256) public balances; - - function deposit() external payable { - balances[msg.sender] += msg.value; - } - - function withdraw() external { - uint256 amount = balances[msg.sender]; - (bool success, ) = msg.sender.call.value(amount)(""); - require(success); - balances[msg.sender] = 0; - } -} -``` - -此合約公布了一個 `withdraw()` 函數,允許使用者提領先前存入合約內的以太幣。 處理提款時,合約執行以下操作: - -1. 檢查使用者的以太幣餘額 -2. 匯出資金至調用地址 -3. 將餘額重置為 0,避免使用者進一步提領 - -`Victim` 合約中的 `withdraw()` 函數遵循「檢查-互動-效果」模式。 若滿足必要的執行條件,就會進行_檢查_(即使用者的以太幣餘額是正數),接著再傳送以太幣至調用者的地址,進行_互動_,最後套用交易_效果_(即減少使用者的餘額)。 - -假如是外部帳戶 (EOA) 調用 `withdraw()`,函數將如預期執行:`msg.sender.call.value()` 傳送以太幣給調用者。 然而,如果調用 `withdraw()` 的 `msg.sender` 是智慧型合約帳戶,使用`msg.sender.call.value()` 傳送資金,也會觸發儲存在該帳戶地址的程式碼執行。 - -試想這是部署在合約地址的程式碼: - -```solidity - contract Attacker { - function beginAttack() external payable { - Victim(victim_address).deposit.value(1 ether)(); - Victim(victim_address).withdraw(); - } - - function() external payable { - if (gasleft() > 40000) { - Victim(victim_address).withdraw(); - } - } -} -``` - -這個合約在設計上要達成三個目的: - -1. 接受其他帳戶(可能是攻擊者的外部帳戶)的存款 -2. 存入 1 以太幣至 Victim 合約 -3. 提領存儲在智慧型合約中的 1 以太幣 - -這裡沒有任何問題,除了傳入 `msg.sender.call.value` 剩餘的燃料超過 40,000 時,`Attacker` 中的另一個函數會再次調用 `Victim` 內的 `withdraw()`。 這讓 `Attacker` 在第一次調用 `withdraw` 結束_之前_,可以一再進入 `Victim` 提領更多資金。 這個循環看起來像這樣: - -```solidity -- Attacker's EOA calls `Attacker.beginAttack()` with 1 ETH -- `Attacker.beginAttack()` deposits 1 ETH into `Victim` -- `Attacker` calls `withdraw() in `Victim` -- `Victim` checks `Attacker`’s balance (1 ETH) -- `Victim` sends 1 ETH to `Attacker` (which triggers the default function) -- `Attacker` calls `Victim.withdraw()` again (note that `Victim` hasn’t reduced `Attacker`’s balance from the first withdrawal) -- `Victim` checks `Attacker`’s balance (which is still 1 ETH because it hasn’t applied the effects of the first call) -- `Victim` sends 1 ETH to `Attacker` (which triggers the default function and allows `Attacker` to reenter the `withdraw` function) -- The process repeats until `Attacker` runs out of gas, at which point `msg.sender.call.value` returns without triggering additional withdrawals -- `Victim` finally applies the results of the first transaction (and subsequent ones) to its state, so `Attacker`’s balance is set to 0 -``` - -總起來說,因為調用者的餘額並非 0,直到函數執行結束前,後續的調用都能成功執行,並允許調用者多次提領餘額。 這類攻擊可以被用於將智慧型合約內的所有資金提領一空,如同 [2016 年的 DAO 駭客攻擊](https://www.coindesk.com/learn/2016/06/25/understanding-the-dao-attack/)。 就像[重入入侵公開清單](https://github.com/pcaversaccio/reentrancy-attacks)所示,如今重入攻擊仍是智慧型合約面臨的嚴重問題。 - -##### 如何預防重入攻擊 - -處理重入攻擊的方法是遵循[檢查 - 效果 - 互動模式](https://docs.soliditylang.org/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern)。 這個模式指示函數如以下次序執行,在繼續執行下一個動作前,必須先執行進行必要檢查的程式碼,然後是執行操縱合約狀態的程式碼,最後才執行與其他合約或外部帳戶互動的程式碼。 - -依照檢查 - 效果 - 互動模式改寫 `Victim` 合約如下: - -```solidity -contract NoLongerAVictim { - function withdraw() external { - uint256 amount = balances[msg.sender]; - balances[msg.sender] = 0; - (bool success, ) = msg.sender.call.value(amount)(""); - require(success); - } -} -``` - -這個合約如下執行:_檢查_使用者餘額、套用 `withdraw()` 函數的_效果_(將使用者的餘額重置為 0),再繼續執行_互動_(傳送以太幣至使用者地址)。 這能確保合約在外部調用前更新存儲空間,排除會引發第一次攻擊的重入條件。 `Attacker` 合約仍然可能回呼 `NoLongerAVictim`,但因為 `balances[msg.sender]` 已設定為 0,所以再次提領時會出現錯誤。 - -另一個方法是使用相斥鎖定(一般稱為「Mutex」),鎖定合約的部分狀態,直到完成函數調用。 這個方法是在函數執行前,將一個布林變數設定為 `true`,調用完成後再把布林變數回復為 `false`。 如以下範例所示,使用 Mutex 可保護函數在初始調用尚未完成前,不被重複調用,並有效阻止重入。 - -```solidity -pragma solidity ^0.7.0; - -contract MutexPattern { - bool locked = false; - mapping(address => uint256) public balances; - - modifier noReentrancy() { - require(!locked, "Blocked from reentrancy."); - locked = true; - _; - locked = false; - } - // This function is protected by a mutex, so reentrant calls from within `msg.sender.call` cannot call `withdraw` again. - // The `return` statement evaluates to `true` but still evaluates the `locked = false` statement in the modifier - function withdraw(uint _amount) public payable noReentrancy returns(bool) { - require(balances[msg.sender] >= _amount, "No balance to withdraw."); - - balances[msg.sender] -= _amount; - bool (success, ) = msg.sender.call{value: _amount}(""); - require(success); - - return true; - } -} -``` - -你還可以使用[提取款項](https://docs.openzeppelin.com/contracts/4.x/api/security#PullPayment)系統,要求使用者從智慧型合約提款,而不是使用「推送付款」系統傳送資金至帳戶。 如此一來,就可免除在未知地址上意外啟動程式碼的可能性(也能防止特定阻斷服務攻擊)。 - -#### 整數下溢與上溢 {#integer-underflows-and-overflows} - -算術運算結果超出可接受數值範圍,必須「退位」至最低代表值時,就是整數上溢。 例如:`uint8` 最多只能儲存相當於 2^8-1=255 的值。 若算術運算結果導致大於 `255` 的值,就屬於上溢,並會將 `uint` 重置為 `0`,類似汽車里程表達到里程數上限 (999999) 時,將重置為 0。 - -整數下溢的發生原因也是如此:算術運算結果小於可接受範圍。 例如你嘗試要對 `uint8` 的 `0` 進行遞減,結果就會是進位至最高代表值 (`255`)。 - -整數上溢和下溢都可能對合約狀態變數產生非預期的變更,導致預料外的執行。 以下範例顯示攻擊者可以利用智慧型合約內的算術上溢執行無效操作: - -``` -pragma solidity ^0.7.6; - -// This contract is designed to act as a time vault. -// User can deposit into this contract but cannot withdraw for at least a week. -// User can also extend the wait time beyond the 1 week waiting period. - -/* -1. Deploy TimeLock -2. Deploy Attack with address of TimeLock -3. Call Attack.attack sending 1 ether. You will immediately be able to - withdraw your ether. - -What happened? -Attack caused the TimeLock.lockTime to overflow and was able to withdraw -before the 1 week waiting period. -*/ - -contract TimeLock { - mapping(address => uint) public balances; - mapping(address => uint) public lockTime; - - function deposit() external payable { - balances[msg.sender] += msg.value; - lockTime[msg.sender] = block.timestamp + 1 weeks; - } - - function increaseLockTime(uint _secondsToIncrease) public { - lockTime[msg.sender] += _secondsToIncrease; - } - - function withdraw() public { - require(balances[msg.sender] > 0, "Insufficient funds"); - require(block.timestamp > lockTime[msg.sender], "Lock time not expired"); - - uint amount = balances[msg.sender]; - balances[msg.sender] = 0; - - (bool sent, ) = msg.sender.call{value: amount}(""); - require(sent, "Failed to send Ether"); - } -} - -contract Attack { - TimeLock timeLock; - - constructor(TimeLock _timeLock) { - timeLock = TimeLock(_timeLock); - } - - fallback() external payable {} - - function attack() public payable { - timeLock.deposit{value: msg.value}(); - /* - if t = current lock time then we need to find x such that - x + t = 2**256 = 0 - so x = -t - 2**256 = type(uint).max + 1 - so x = type(uint).max + 1 - t - */ - timeLock.increaseLockTime( - type(uint).max + 1 - timeLock.lockTime(address(this)) - ); - timeLock.withdraw(); - } -} -``` - -##### 如何預防整數下溢和上溢 - -自 0.8.0 版本起,Solidity 編譯器拒絕使用會導致整數下溢和上溢的程式碼。 然而,使用較低版本編譯器編譯的合約應該檢查涉及算術運算的函數,或使用庫(例如 [SafeMath](https://docs.openzeppelin.com/contracts/2.x/api/math))來檢查下溢/上溢。 - -#### 操縱預言機 {#oracle-manipulation} - -[預言機](/developers/docs/oracles/)會取得鏈外資訊,並把這些資訊傳到鏈上供智慧型合約使用。 使用預言機,可以設計與鏈外系統(例如資本市場)互通的智慧型合約,大幅拓展應用範圍。 - -然而,若預言機遭到破壞,將不正確的資訊傳到鏈上,智慧型合約將會根據不正確輸入資料執行,可能引起問題。 這是「預言機問題」的基礎,也就是要確保來自區塊鏈預言機的是正確、及時的最新資訊。 - -可能產生的相關安全性疑慮,就是使用如去中心化交易所等鏈上預言機,取得資產的現貨價格。 [去中心化金融 (DeFi)](/defi/) 產業的借貸平台通常都藉此判斷使用者抵押品的價值,再決定借貸額度。 - -去中心化交易所的價格之所以準確,大體上倚靠套利者在市場上維持市場均衡。 然而,這也提供操縱空間,若鏈上預言機可根據歷史交易模式(通常使用的方法)計算資產價格時,更是如此。 - -例如,在和你的借貸合約互動之前,攻擊者可藉由取得閃電貸的權利,人為膨脹某資產的現貨價格。 在去中心化交易所查詢該資產的價格時,會傳回高於正常價值(因為攻擊者大量「買單」扭曲對該資產的需求量)的價格,因而允許他們超額借貸。 像這樣的「閃電貸攻擊」已被用來入侵依靠價格預言機的去中心化金融應用程式,造成協定損失數百萬美元。 - -##### 如何預防操縱預言機 - -[避免預言機操縱](https://www.cyfrin.io/blog/price-oracle-manipultion-attacks-with-examples)的最低要求是,使用去中心化預言機網路,來查詢來自多個來源的資訊以避免單點故障。 在大多數情況下,去中心化預言機內建加密經濟獎勵機制,促進預言機節點報告正確資訊,因此比集中化預言機安全。 - -若你打算在鏈上預言機查詢資產價格,可考慮使用採用時間加權平均價格 (TWAP) 機制的預言機。 [時間加權平均價格預言機](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles)會查詢兩個不同時間點(你可以更改時間點)的資產價格,再根據得到數據的平均值計算現貨價值。 選擇時間較長的價格可保護協定免於價格操縱,因為近期大量的交易下單不會對資產價格造成影響。 - -## 開發者的智慧型合約安全性資源 {#smart-contract-security-resources-for-developers} - -### 分析智慧型合約和驗證程式碼正確性的工具 {#code-analysis-tools} - -- **[測試工具和庫](/developers/docs/smart-contracts/testing/#testing-tools-and-libraries)** - _一系列執行智慧型合約單元測試、靜態分析和動態分析的產業標準工具和庫。_ - -- **[形式驗證工具](/developers/docs/smart-contracts/formal-verification/#formal-verification-tools) - **_驗證智慧型合約功能正確性和檢查不變性的工具。_ - -- **[智慧型合約審核服務](/developers/docs/smart-contracts/testing/#smart-contract-auditing-services)**:_提供以太坊開發專案智慧型合約審核服務的組織清單。_ - -- **[漏洞懸賞平台](/developers/docs/smart-contracts/testing/#bug-bounty-platforms)** - _協調漏洞懸賞計畫和發放獎金給揭發智慧型合約重大漏洞者的平台。_ - -- **[分叉檢查工具](https://forkchecker.hashex.org/)** - _檢查分叉合約所有可用資訊的線上免費工具。_ - -- **[應用程式二進制介面編碼器](https://abi.hashex.org/)** - _對 Solidity 合約的函數和建構函數引數進行編碼的線上免費服務。_ - -- **[Aderyn](https://github.com/Cyfrin/aderyn)** - _Solidity 靜態分析器,透過周遊抽象語法樹 (AST) 找出可疑漏洞,並以易於使用的 Markdown 格式列印問題。_ - -### 監視智慧型合約的工具 {#smart-contract-monitoring-tools} - -- **[OpenZeppelin Defender Sentinels](https://docs.openzeppelin.com/defender/v1/sentinel)** - _一個自動監控和回應智慧型合約事件、函式和交易參數的工具。_ - -- **[Tenderly Real-Time Alerting](https://tenderly.co/alerting/)**:_當智慧型合約或錢包出現不尋常的和意外事件時,可以獲得即時通知的工具。_ - -### 智慧型合約的安全管理工具 {#smart-contract-administration-tools} - -- **[OpenZeppelin Defender Admin](https://docs.openzeppelin.com/defender/v1/admin)** - _管理智慧型合約運作,包括存取控制、升級和暫停的介面。_ - -- **[Safe](https://safe.global/)** - _在以太坊上執行、需要達到最低核准人數(N 人中的M 人),才能執行交易的智慧型合約數位錢包。_ - -- **[OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/4.x/)** - _執行合約所有權、升級、存取控制、治理、暫停等管理功能的合約庫。_ - -### 智慧型合約審核服務 {#smart-contract-auditing-services} - -- **[ConsenSys Diligence](https://consensys.net/diligence/)** - _協助區塊鏈生態系系統中的專案,確保其協定處於可發布狀態,且用於保護使用者的智慧型合約審核服務。_ - -- **[CertiK](https://www.certik.com/)** - _率先致力於智慧型合約和區塊鏈網路上使用最新形式驗證技術的區塊鏈安全公司。_ - -- **[Trail of Bits](https://www.trailofbits.com/)** - _結合安全性研究和攻擊者心理來降低風險和強化程式碼的網絡安全公司。_ - -- **[PeckShield](https://peckshield.com/)** - _為整個區塊鏈生態系統的安全性、隱私權、易用性提供產品和服務的區塊鏈安全公司。_ - -- **[QuantStamp](https://quantstamp.com/)** - _經由安全性和風險評估服務促進廣泛採用區塊鏈技術的審核服務。_ - -- **[OpenZeppelin](https://www.openzeppelin.com/security-audits)** - _提供去中心化系統安全性審核的智慧型合約安全公司。_ - -- **[Runtime Verification](https://runtimeverification.com/)** - _專精於智慧型合約形式模型和驗證的安全公司。_ - -- **[Hacken](https://hacken.io)** - _為區塊鏈安全採用 360 度全方位方法的 Web3 網路安全審核者。_ - -- **[Nethermind](https://nethermind.io/smart-contracts-audits)** - _Solidity 和 Cairo 稽核服務,確保智慧型合約完整性、以及以太坊及 Starknet 使用者的安全。_ - -- **[HashEx](https://hashex.org/)** - _HashEx 專注於區塊鏈和智慧型合約審核,以確保加密貨幣的安全性,提供智慧型合約開發、滲透測試、區塊鏈諮詢等服務。_ - -- **[Code4rena](https://code4rena.com/)** - _鼓勵智慧型合約安全性專家找出漏洞,並協助提升 Web3 安全性,富競爭力的審核平台。_ - -- **[CodeHawks](https://codehawks.com/)** - _舉辦面向安全研究人員的智慧型合約審核比賽的競爭性審核平台。_ - -- **[Cyfrin](https://cyfrin.io)** - _Web3 安全巨頭,透過產品和智慧型合約審核服務來發展加密安全。_ - -- **[ImmuneBytes](https://www.immunebytes.com//smart-contract-audit/)** - _Web3 安全公司,透過經驗豐富的審核者團隊和一流工具,為區塊鏈系統提供安全審核。_ - -- **[Oxorio](https://oxor.io/)** - _智慧型合約審核和區塊鏈安全服務,在以太坊虛擬機、Solidity、零知識、加密公司和去中心化金融專案的跨鏈技術方面擁有深厚的專業知識。_ - -- **[Inference](https://inference.ag/)** - _安全審核公司,專注基於以太坊虛擬機區塊鏈的智慧型合約審核。 透過專家審核者的幫助,他們能發現潛在問題並提出可行的解決方案,以便在部署前解決這些問題。_ - -### 漏洞懸賞平台 {#bug-bounty-platforms} - -- **[Immunefi](https://immunefi.com/)** - _這是智慧型合約和去中心化金融專案漏洞懸賞平台。安全研究員在此審核程式碼、找出漏洞、獲得報酬、使加密貨幣更安全。_ - -- **[HackerOne](https://www.hackerone.com/)** - _連結商業和滲透測試者及安全研究者的漏洞協調和漏洞懸賞平台。_ - -- **[HackenProof](https://hackenproof.com/)** - _專業的加密貨幣專案(去中心化金融、智慧型合約、錢包、中心化交易所等)漏洞懸賞平台。安全專業人士在此提供分類服務,而研究者可以在提出重要、經過驗證的錯誤報告時獲得報酬。_ - -- **[Sherlock](https://www.sherlock.xyz/)** - _Web3 中的智慧型合約安全承銷商,透過智慧型合約管理對審核者的支出,以確保相關漏洞得到公平償付。_ - -- **[CodeHawks](https://www.codehawks.com/)** - _競爭性漏洞懸賞平台,審核者可以在其中參與安全競賽和挑戰,以及自己的私人審核(即將推出)。_ - -### 已知的智慧型合約漏洞和弱點出版品 {#common-smart-contract-vulnerabilities-and-exploits} - -- **[ConsenSys:已知的智慧型合約攻擊](https://consensys.github.io/smart-contract-best-practices/attacks/)** - _以適合初學者的方式解說最重大的合約漏洞,大部分案例會附上範例程式碼。_ - -- **[SWC Registry](https://swcregistry.io/)** - _適用於以太坊智慧型合約的通用弱點列表 (CWE) 精選清單。_ - -- **[Rekt](https://rekt.news/)** - _知名加密貨幣駭客和侵入事件的定期更新的出版品,並附上詳細的事後剖析報告。_ - -### 學習智慧型合約安全性的挑戰 {#challenges-for-learning-smart-contract-security} - -- **[優質的 BlockSec CTF](https://github.com/blockthreat/blocksec-ctfs)** - _區塊鏈安全性的實戰演習、挑戰、和[奪旗](https://www.webopedia.com/definitions/ctf-event/amp/)競賽和解決方案評論精選清單。_ - -- **[脆弱不堪的去中心化金融](https://www.damnvulnerabledefi.xyz/)** - _學習去中心化金融智慧型合約攻撃性安全防衛的實戰演習,以及培養找出錯誤和審核安全性的技能。_ - -- **[Ethernaut](https://ethernaut.openzeppelin.com/)** - _以 Web3/Solidity 為中心的實戰演習,每一個等級都是一個必須被「駭客破解」的智慧型合約。_ - -- **[HackenProof x HackTheBox](https://app.hackthebox.com/tracks/HackenProof-Track)** - _智慧型合約駭客挑戰,以奇幻冒險為背景。 成功完成挑戰還可以入圍非公開的漏洞懸賞計劃。_ - -### 保護智慧型合約的最佳案例 {#smart-contract-security-best-practices} - -- **[ConsesSys:以太坊智慧型合約安全性最佳案例](https://consensys.github.io/smart-contract-best-practices/)** - _保護以太坊智慧型合約安全性之準則的完整清單。_ - -- **[Nascent:簡單的安全性工具組](https://github.com/nascentxyz/simple-security-toolkit)** - _安全導向的實用智慧型合約開發指南與檢核清單。_ - -- **[Solidity 模式](https://fravoll.github.io/solidity-patterns/)** - _關於智慧型合約程式語言 Solidity 的安全性模型和最佳案例的實用彙總。_ - -- **[Solidity 文件:安全性考量](https://docs.soliditylang.org/en/v0.8.16/security-considerations.html)** - _使用 Solidity 編寫安全智慧型合約的指南。_ - -- **[智慧型合約安全性驗證標準](https://github.com/securing/SCSVS)** - _適用於開發者、架構師、安全性審查者和廠商的標準化智慧型合約安全性 14 點檢查清單。_ - -- **[學習智慧型合約安全與審核](https://updraft.cyfrin.io/courses/security) - _出色的智慧型合約安全與審核課程,為希望提升安全最佳做法並成為安全研究人員的智慧型合約開發人員而設。_ - -### 關於智慧型合約安全性的使用教學 {#tutorials-on-smart-contract-security} - -- [如何編寫安全的智慧型合約](/developers/tutorials/secure-development-workflow/) - -- [如何使用 Slither 來搜尋智慧型合約漏洞](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) - -- [如何使用 Manticore 搜索智慧型合約bug.](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) - -- [智慧型合約安全指南](/developers/tutorials/smart-contract-security-guidelines/) - -- [如何安全整合包含任意代幣的代幣合約](/developers/tutorials/token-integration-checklist/) - -- [Cyfrin Updraft - 智慧型合約安全與審核完整課程](https://updraft.cyfrin.io/courses/security) diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/composability/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/composability/index.md" deleted file mode 100644 index 01b6474d4d9..00000000000 --- "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/composability/index.md" +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: 智慧型合約的可組合性 -description: -lang: zh-tw -incomplete: true ---- - -## 簡介 {#a-brief-introduction} - -智慧型合約在以太坊上公開,類似於傳統網路世界中的 open API。 你不一定需要編寫自己的智慧型合約才能成為一名去中心化應用的開發者,你只需要知道要怎樣與他們互動即可。 例如,你可以使用已存在的 [Uniswap](https://uniswap.exchange/swap)(一個去中心化的交易所)智慧型合約,來處理你應用程式中的代幣交換邏輯 – 你不需要從新開發一個。 歡迎查看其[v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts)及[v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts)合約。 - -## 甚麼是可組合性? {#what-is-composability} - -可組合性是指組合不同的部件來創造出全新的系統或輸出。 在軟體開發中,可組合性指開發者可以重覆使用現有的軟體組件來構建全新的應用程式。 一個很好理解可組合性的方法是把可組合的元素想像成樂高方塊。 每個樂高方塊可以與另一個樂高方塊組合,允許你通過組合不同的樂高方塊來構建複雜結構。 - -在以太坊,每一個智慧型合約都是樂高方塊 — 你可以使用其他專案的智慧型合約作為你專案的方塊。 這意味著你不需要花費時間來重新發明輪子或是從零開始構建。 - -## 可組合性如何運作? {#how-does-composability-work} - -以太坊上的智慧型合約就如同公開的 APIs,所有人都可以與合約互動或把它整合到 dApps 作為新增的功能。 智慧型合約的可組合性通常遵循三個原則:模塊化、自主性和可發現性。 - -**1. 模塊化**:這是指獨立組件執行特定任務的能力。 在以太坊,每個智慧型合約都有特定的使用案例(如 Uniswap 範例所顯示)。 - -**2. 自主性**:可組合的元件必需要有獨立運作的能力。 每一個在以太坊上的智慧型合約都是自我執行的,且可以在不依賴系統其他部分的情況下運作。 - -**3. 可發現性**:如果外部合約不是公開可用的,開發者就無法調用它或將軟件庫集成到應用程序中。 智慧型合約是被設計成開源的,任何人都可以調用智慧型合約或分叉一個程式庫。 - -## 可組合性的好處 {#benefits-of-composability} - -### 更短的開發週期 {#shorter-development-cycle} - -可組合性減少了開發者在創建[dApps](/dapps/#what-are-dapps)時需要做的工作。 [正如同 Naval Ravikant 所說:](https://twitter.com/naval/status/1444366754650656770)「開源意指所有問題都只需要解決一遍。」 - -如果有一個智慧型合約解決了某個問題,其他開發者便可以重複使用它,所以他們便不必再解決同一個問題。 這樣,開發者可以使用現有的軟件庫並增加額外的功能,以創建新的 dApps。 - -### 更大的創新 {#greater-innovation} - -可組合性鼓勵創新和實驗,因為開發者可以自由地重用、修改、複製或整合開源程式碼以達到所需的效果。 因此,開發團隊可以花費更少時間在基本功能上,且可以分配更多的時間進行新功能的實驗。 - -### 更好的使用者體驗 {#better-user-experience} - -以太坊生態組件之間的互操作性提高了使用者體驗。 當去中心化應用整合外部智慧型合約時,用戶可以獲得更多功能,而在一個分散的生態系統中,應用程式無法通信,功能就會受限。 - -我們將使用套利交易的一個例子來說明互操作性的好處: - -如果一個代幣在`交易所 A `的交易價格高於`交易所 B`,你可以利用價格差異來獲利。 但是,你只可以在有足夠的資金才能完成這筆交易(如:`在交易所 B `買入代幣並在`交易所 A `賣出)。 - -在一個你沒有足夠資金來完成這筆交易的情境下,閃電貸可能是一個理想的選擇。 [閃電貸](/defi/#flash-loans)技術性很高,但它的基本概念是你可以借用資產(不需抵押)並在_一_筆交易內把它歸還。 - -回到我們一開始的例子,一個套利交易者可以借一筆大額的閃電貸,於同一筆交易中從`交易所 B `買入代幣,然後在`交易所 A `賣出,把資金和利息歸返,並把利潤留下。 這個複雜的邏輯需要組合多個智慧型合約的調用,而如果智慧型合約缺乏互操作性,這將是不可能的。 - -## 以太坊裡可組合性的範例 {#composability-in-ethereum} - -### 代幣交換 {#token-swaps} - -如果你正建立一個需要用 ETH 來支付交易的 dApps,通過整合代幣交換邏輯,你可以讓使用者用其他 ERC-20 代幣進行支付。 程式碼會在執行被調用的函數前自動把使用者的代幣轉換成 ETH。 - -### 治理 {#governance} - -為[ DAO ](/dao/)打造定制的治理系統可能既昂貴又耗時。 相反,你可以使用開源的治理工具包,例如[Aragon Client](https://client.aragon.org/),來快速為你的 DAO 啟動一個治理框架。 - -### 身份管理 {#identity-management} - -你可以整合去中心化身份 ( DID ) 工具來管理使用者的身份認證,而不是建立一個定制的身份驗證系統或依賴中心化的服務提供商。 一個例子是[ SpruceID ](https://www.spruceid.com/),這是一個提供「使用以太坊登錄」功能的開源工具包,讓使用者能使用以太坊錢包進行身份驗證。 - -## 相關教程 {#related-tutorials} - -- [開始您的前端研發利用creat-eth-app](/developers/tutorials/kickstart-your-dapp-frontend-development-wth-create-eth-app/)_ -- 一簡介指導您如何使用creat-eth-app來創建帶有熱門智能合約之應用程式._ - -## 衍生閱讀 {#further-reading} - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ - -- [可組合性是創新](https://future.a16z.com/how-composability-unlocks-crypto-and-everything-else/) -- [為甚麼可組合性對 Web3 很重要](https://hackernoon.com/why-composability-matters-for-web3) -- [甚麼是可組合性?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.) diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/formal-verification/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/formal-verification/index.md" deleted file mode 100644 index 36bd3326a5d..00000000000 --- "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/formal-verification/index.md" +++ /dev/null @@ -1,283 +0,0 @@ ---- -title: 智慧合約的形式化驗證 -description: 以太坊智慧合約形式化驗證概述 -lang: zh-tw ---- - -[智能合約](/developers/docs/smart-contracts/) 讓去中心化、去信任、引進新的應用案例與解放用戶的價值變得更可行。 因為智慧合約掌握了大量的價值,對開發者來說安全是最需要被考量的。 - -形式化驗證是增進[合約安全](/developers/docs/smart-contracts/security/)最推薦的方法, 形式化驗證,是一個使用多年的方法,目的是要確保特定的硬體與軟體系統正確性,用[形式化方法](https://www.brookings.edu/techstream/formal-methods-as-a-path-toward-better-cybersecurity/)來規範、設計、驗證程式。 - -當在智慧合約中實現形式化驗證,可以證明合約的商業邏輯符合預設的規範, 相較於其他評估合約程式碼的正確性的方法,形式化驗證更保證了合約功能性上的正確。 - -## 什麼是形式化驗證? {#what-is-formal-verification} - -形式化驗證指的是一個用形式規範評估系統正確性的流程, 簡而言之,形式化驗證讓我們可以檢查一個系統的行為是否滿足一些要求(即,它按我們的想法運作)。 - -對系統(此案例中為智能合約) 所要求的行為採用形式化模型描述,而規範語言支持形式化屬性的建立。 然後,形式化驗證技術可以驗證一個合約的實施符合其規範,並產生合約正確性的數學證明。 當一個合約滿足其規範,被稱為「功能正確」、「設計正確」,或「建構正確」。 - -### 形式化模型是什麼? {#what-is-a-formal-model} - -在電腦科學中, [形式化模型](https://en.wikipedia.org/wiki/Model_of_computation)是指對計算過程的數學描述。 程式抽象成數學函數(方程),模型描述給定輸入時如何計算函數的輸出。 - -形式化模型提供一個抽象層次,可以在該抽象層次上對程式行為的分析進行評估。 有了形式化模型,_形式化規範_得以制定,用來描述所談論模型所需要的屬性。 - -採用不同的技術來建立智能合約模型,以便進行形式化驗證。 例如,有些模型用來推理智能合約的高階行為。 這些模型建立技術在智能合約應用黑盒視圖,把智能合約視為可以接受輸入並按照那些輸入執行計算的系統。 - -高階模型專注在智能合約和外部代理之間的關係,例如外部帳戶(EOAs)、合約帳戶,和區塊鏈環境。 這些模型有助於定義屬性,規定了合約該如何回應某些使用者互動的行為。 - -相反地,其他形式化模型專注在智能合約的低階行為。 雖然高階模型有助於推理一個合約的功能,它們可能無法獲得實施內部運作的細節。 低階模型對程序分析應用了白盒視圖,並仰賴智能合約應用程式較低階表示,例如程序追蹤和[控制流圖](https://en.wikipedia.org/wiki/Control-flow_graph),來推理與該合約執行相關的屬性。 - -低階模型被認爲是理想的,因爲它們代表了以太坊的執行環境 (即[以太坊虛擬機](/developers/docs/evm/)) 中智能合約的實際執行。 低階模型技術對於在智能合約中建立關鍵的安全屬性和檢測潛在漏洞尤其有用。 - -### 什麽是形式化規範? {#what-is-a-formal-specification} - -規範只是特定系統必須滿足的技術要求。 在編程中,規範代表程式執行的總體思路 (即程式應該做什麽)。 - -在智能合約的背景下,形式化規範指的是_屬性_—合約必須滿足的要求的正式描述。 這樣的屬性被描述爲 "不變量",並代表了智能合約執行的邏輯斷言,該斷言在任何情況下都必須為 true,沒有例外。 - -因此,我們可以將形式化規範想做是用正式語言編寫的聲明集合,描述了智能合約的預期執行。 規範涵蓋了合約的屬性,並定義了合約在各種情況下應該如何運作。 形式化驗證的目的是確定智能合約是否遵循這些屬性 (不變量) 以及在執行過程中是否違反這些屬性。 - -形式化規範對於開發智能合約的安全實現至關重要。 無法實現不變量或在執行期間違反其屬性的合約容易出現漏洞,可能會損害功能或導致惡意使用。 - -## 智能合約形式化規範的類型 {#formal-specifications-for-smart-contracts} - -形式規範使程式執行的正確性可以用數學方法推導, 與形式化模型一樣,形式規範可以捕捉合約實現的高階屬性或低階行爲。 - -形式規範是由[程式邏輯](https://en.wikipedia.org/wiki/Logic_programming)的元素推導出,這些元素可以讓程式的屬性做推理, 程式邏輯是有規範的,表達(在數學語言中) 一個預期的行為。 形式化規範可以使用各種程式邏輯來創建,包括[可達性邏輯](https://en.wikipedia.org/wiki/Reachability_problem)、[時間邏輯](https://en.wikipedia.org/wiki/Temporal_logic)以及[霍爾邏輯](https://en.wikipedia.org/wiki/Hoare_logic)。 - -智慧合約的形式規範可大致上被分成**高階**或**低階**規範, 無論規範屬於什麽類別,都必須充分且明確地描述所分析系統的屬性。 - -### 高階規範 {#high-level-specifications} - -顧名思義,告誡規範 (也被稱爲 “模型導向規範”) 描述了程式的高階行爲。 高階規範將智能合約建模為[有限狀態機器](https://en.wikipedia.org/wiki/Finite-state_machine) (FSM),它能夠透過執行操作來轉換屬性,並使用時間邏輯來為 FSM 模型定義形式化屬性。 - -[時間屬性](https://en.wikipedia.org/wiki/Temporal_logic)是「時間限定命題的推理規則(例如,『我 _總是_ 很餓』,或『我_最終_會餓』)」。 當應用於形式化驗證時,時間邏輯用來聲明將系統正確行為建立模型為狀態機的斷言。 具體來說,時間邏輯形容智能合約可以進入的未來狀態,以及它如何在狀態之間轉換。 - -高階規範通常描述智能合約的兩個重要時間屬性:**安全性**以及**活性**。 安全性屬性代表「任何壞事都不會發生」的想法,且通常代表不變性。 安全屬性可以定義常規軟件要求,例如如不發生[死鎖](https://www.techtarget.com/whatis/definition/deadlock)或表達合約的領域特有屬性 (如函數訪問控制的不變量、狀態變量的容許值或代幣轉賬的條件)。 - -以下方安全要求為例,描述了在ERC-20代幣合約中使用`transfer()`或`transferFrom()`:_「一個發送者餘額不能少於要求發送的代幣金額」。_. 這種合約不變量的自然語言描述可以轉化為形式化(數學)規範,以進行嚴格的有效性檢查。 - -活性屬性斷言「好事終將發生」,並涉及合約逐步通過不同狀態的能力。 活性屬性的一個例子是「流動性」,代表一個合約在收到要求時將其餘額轉帳給使用者的能力。 如果該屬性被違反,用戶就無法提取存儲在合約中的資產,就像[ Parity 錢包事件](https://www.cnbc.com/2017/11/08/accidental-bug-may-have-frozen-280-worth-of-ether-on-parity-wallet.html)中發生的那樣。 - -### 低階規範 {#low-level-specifications} - -高階規範以合約的有限狀態模型作為起點,並定義該模型的所需屬性。 相較之下,低階規範(也稱為「面向屬性的規範」)通常將程序(智能合約)建立模型成由數學函數集合組成的系統,並描述這類系統的正確行為。 - -簡單來説,低階規範分析_程式軌跡_並試圖透過這些軌跡定義智能合約的屬性。 軌跡是指改變智能合約狀態的函數執行序列;因此低階規範幫助指定合約内部執行的要求。 - -低階形式化規範可以出具為霍爾式屬性或執行路徑中的不變量。 - -### 霍爾式屬性 {#hoare-style-properties} - -[霍爾邏輯](https://en.wikipedia.org/wiki/Hoare_logic)提供了一套形式化規定,用於推理包括智能合約等程序的正確性。 霍爾式屬性使用霍爾三元組 {_P_}_c_{_Q_}表示,其中_c_ 是一個程序,且 _P_和_Q_為_c_(即程序)的狀態預測,正式描述分別為_前置條件_和_後置條件_。 - -前置條件是描述函數正確執行所需條件的預測;用戶在合約中的調用必須滿足該要求。 後置條件為形容函數正確執行時所建立條件的謂語;使用者可以期待在調用函數後該條件為真。 在霍爾邏輯中,_不變量_是執行函數所保留的謂詞(即,它不改變)。 - -霍爾式規範可以保證_部分正確性_ 或_完全正確性_。 如果前置條件在函數執行之前為 true,則合約函數的實現為 “部分正確”,如果執行終止,則後置條件也爲 true。 如果前置條件在函數執行之前為 true,就會獲得完全正確性證明,執行被保證終止且實際終止時,後置條件為 true。 - -獲得完全正確性的證明很難,因為一些執行在終止前可能會延遲,或根本不會終止。 也就是説,由於以太坊的燃料機制防止無限程式循環 (執行只在會成功或者出現 'out-of-gas' 錯誤時終止),執行是否終止可以説是一個有爭議的問題。 - -使用霍爾邏輯創建的智能合約規範將具有前置條件、後置條件以及定義合約中函數和循環執行的不變量。 前置條件通常包括函數錯誤輸入的可能性,而後置條件描述對此類輸入的預期響應 (例如,抛出一個特定異常)。 用這種方式,霍爾式屬性可以很有效地確保合約實施的正確性。 - -許多形式化驗證架構使用霍爾式規範來證明函數的語義正確性。 也可以透過使用 Solidity 中的 `require` 和 `assert` 聲明,直接向合約程式碼添加霍爾式屬性 (作爲斷言)。 - -`require` 聲明表達一個前置條件或者不變量,並通常用於驗證用戶輸入,而 `assert` 捕捉一個安全必要的後置條件。 例如,可以使用 `require` 作爲前置條件檢查調用賬戶的身份,來實現函數的正確存取控制 (安全屬性的一個示例)。 相似地,透過使用 `assert` 在函數執行后確認合約的狀態,可以防止違反合約中狀態變量允許值的不變量 (例如,流通中的代幣總數)。 - -### 追蹤層級屬性 {#trace-level-properties} - -基於軌跡的規範描述了在不同狀態之間轉換合約的操作以及這些操作之間的關係。 如前所述,軌跡是以特定方式改變合約狀態的操作的序列。 - -該方法依賴於智能合約模型作爲狀態轉換系統,具有一些預定義屬性 (由狀態變量描述) 以及一系列預定義轉換 (由合約函數描述)。 此外,[控制流程圖](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/) (CFG),即程式執行流程的圖形化表示,常常被用於描述合約的操作語義。 在這裡,每個軌跡代表控制流圖上的一條路徑。 - -追蹤層級規範主要用來推理智能合約中內部執行的模式。 透過建立追蹤層級規範,我們斷言一個智能合約的容許執行路徑(即,狀態轉換)。 使用類似於符號執行的技術,我們可以正式驗證執行永遠不會追隨未在形式化模型中定義的路徑。 - -我們使用一個已具有一些公開可訪問函數的[去中心化自治組織](/dao/) 的合約作為範例,以介紹追蹤層級屬性。 在這裡,我們推測去中心化自治合約允許使用者執行以下操作: - -- 存入資金 - -- 存入資金後對提案進行投票 - -- 如果沒有對提案進行投票,能夠要求退款 - -軌跡級屬性的示例可以是_“沒有存入資金的用戶無法對提案進行投票”_或_“沒有對提案進行投票的用戶應該始終能夠要求退款“_。 這兩個屬性斷言優先執行順序(存入資金_之前_不能進行投票,以及對提案進行投票_之後_不能進行退款)。 - -## 智能合約形式化驗證的技術 {#formal-verification-techniques} - -### 模型檢查 {#model-checking} - -模型檢查是演算法對照規格書檢查智能合約的形式模型的形式驗證技術。 在模型檢查中,智能合約通常表示爲狀態轉換系統,而允許合約狀態的屬性使用時間邏輯來定義。 - -模型檢查需要創建系統的抽象數學表示 (即合約) 並使用根植於[命題邏輯](https://www.baeldung.com/cs/propositional-logic)的公式來表示該系統的屬性。 這樣簡化了模型檢查演算法的工作,也就是說證明數學模型符合特定邏輯公式。 - -在形式驗證裡模型檢查主要用來評價記述隨時間經過合約的行為的暫時特性。 智能合約的暫時特性包括我們之前說明的 _安全性_ 和 _活躍性_。 - -例如,與存取控制相關的安全屬性 (例如,_只有合約的擁有者能夠調用 `selfdestruct` _) 可以使用形式化邏輯來編寫。 之後,模型檢查演算法可以驗證是否合約符合這個形式規格。 - -模型檢查使用狀態空間探索,其中涉及構造智能合約所有可能的狀態,並試圖找出導致違反屬性的可達狀態。 然而,這可能會導致無限的狀態數量 (被稱爲 ”狀態爆炸問題“),因此,模型檢查器依賴抽象技術來使高效分析智能合約變得可能。 - -### 定理證明 {#theorem-proving} - -定理證明是以數學方式推論程式,包括智能合約,的正確性的方法。 這需要將合約系統的模型和規格書轉換成數學公式 (邏輯陳述)。 - -定理證明的目的是驗證這些陳述之間在邏輯上是等價的 ”邏輯等價性“ (也被稱爲 ”邏輯雙向蘊含“) 是兩個聲明之間的一種關係,例如,第一個聲明_只有在_第二個聲明為 true 時才為 true。 - -這個關於合約模型和特性的陳述之間的必要關係 (邏輯等價性) 可公式化成可證明的陳述 (又稱理論)。 使用形式的推論系統,自動定理證明器可以驗證定理的有效性。 換言之 自動定理證明器可以決定性的證明合約模型確切地符合規格書。 - -模型檢查將合約建模為具有有限狀態的轉換系統,而定理證明可以處理無限狀態系統的分析。 然而,這意味著自動定理證明器無法永遠知道邏輯問題是否為 “可判定的”。 - -因此,在推導正確性證明時,定理證明器常常需要人類協助。 定理證明中對人力的使用使其比完全自動化的模型檢查更加昂貴。 - -### 符號執行 {#symbolic-execution} - -符號執行是一種透過使用_符號值_ (如 `x > 5`) 而不是_具體值_ (如 `x == 5`) 執行函數來分析智能合約的方法。 作爲一種形式化驗證技術,符號執行用於形式化推理智能合約程式碼中的軌跡級屬性。 - -符號執行將執行軌跡表示爲針對符號輸入值的數學公式,也稱爲_路徑預測_。 [SMT 求解器](https://en.wikipedia.org/wiki/Satisfiability_modulo_theories)用於檢查路徑是否爲 “可滿足的” (即存在能夠滿足該公式的值)。 假如路徑是可滿足的,SMT 解答器將針對這路徑產生一個觸發執行的具體數值。 - -假設一個智能合約函數接受輸入值是`uint` 的數值 (`x`),當 `x` 大於 `5` 而且小於 `10` 則回覆解答。 使用正常測試程序尋找觸發錯誤的 `x` 值需要運行數十個測試用例 (甚至更多),並且不保證實際找到觸發錯誤的輸入。 - -相反,符號執行工具會使用符號值來執行函數: `X > 5 ∧ X < 10` (例如,`x` 比 5 大且 `x` 比 10 小)。 相關的路徑預測 `x = X > 5 ∧ X < 10` 將提供給 SMT 解答器來解答。 如果一個特定值滿足公式 `x = X > 5 ∧ X < 10`,SMT 求解器將計算它 - 例如,求解器可能會產生 `7` 作爲 `x` 的值。 - -因爲符號執行依賴於程式的輸入,而探索所有可達狀態的一系列輸入可能是無限的,所以這仍然是一種測試形式。 然而,如示例所示,符號執行在尋找觸發違反屬性的輸入方面比常規測試更高效。 - -此外,符號執行與其他隨機生成函數輸入的基於屬性的技術 (如初略) 相比,產生的誤報更少。 如果錯誤狀態在符號執行期間被觸發,則可以產生觸發該錯誤的具體值並重現該問題。 - -符號執行也可以提供某程度的數學證明的正確性。 仔細思考下面有溢出防護的合約函數範例: - -``` -function safe_add(uint x, uint y) returns(uint z){ - - z = x + y; - require(z>=x); - require(z>=y); - - return z; -``` - -導致整數溢位的執行軌跡需要滿足以下公式: `z = x + y AND (z >= x) 和 (z=>y) AND (z < x OR z < y)`。這種公式不太可能有解,因此它提供了函數 `safe_add` 永不溢出的數學證明。 - -### 為什麼要對智能合約使用形式驗證? {#benefits-of-formal-verification} - -#### 可靠性的需求 {#need-for-reliability} - -形式化驗證被用於評估安全關鍵系統的正確性,這些系統的失敗將產生災難性後果,例如死亡、受傷或金融崩潰。 智能合約是控制巨額價值的高價值應用程序,設計中的簡單錯誤可能會導致[用戶遭受無法挽回的損失](https://www.freecodecamp.org/news/a-hacker-stole-31m-of-ether-how-it-happened-and-what-it-means-for-ethereum-9e5dc29e33ce/amp/)。 然而,在合約部署之前進行形式化驗證,則可以增加其在區塊鏈上如期運行的保證。 - -可靠性是任何智能合約都渴求的一種品質,尤其是因爲在以太坊虛擬機 (EVM) 上部署的程式碼通常是不可更改的。 合約推出後的升級並不是容易達成的,形式驗證成為為確保合約的可靠性的需求下不可缺少的必需品。 形式化驗證能夠檢測棘手的問題,比如整數下溢和上溢、可重入性和糟糕的燃料優化,審核者和測試者可能會漏掉這些問題。 - -#### 功能正確性的証明 {#prove-functional-correctness} - -程式測試是證明智能合約符合某些要求最常見的方法。 這包括用預期合約會碰到的樣本資料來執行合約,並且分析合約的行為。 假如對樣本資料合約傳回預期的結果,則開發者對合約的正確性做了客觀性的證明。 - -然而,這種方法無法證明測試資料之外的輸入值正確執行。 因此,測試合約可以幫助檢測漏洞 (例如,如果程式碼路徑在執行期間無法返回期望的結果),但**這無法完全證明沒有漏洞**。 - -相反,形式化驗證可以正式證明合約能在無限執行範圍内滿足要求,而_無需_運行該合約。 這需要創建一個形式化規範來準確描述正確的合約行爲和開發合約系統的形式化(數學) 模型。 但我們卻可以透過形式化證明來檢查合約模型與其預期行為的一致性。 - -透過形式化驗證,驗證合約商業邏輯是否滿足要求的問題就成爲一個能夠被證明或解決的數學命題。 通過形式化證明一個命題,我們可以在有限步驟內驗證無限數量的測試案例, 以這種方式,形式化證明在證明合約相對於規範的功能正確性方面具有更好的前景。 - -#### 理想的驗證對象 {#ideal-verification-targets} - -驗證對象是指要進行形式化驗證的系統, 這種驗證方式最適合用於 "嵌入式系統" (作為更大系統一部分的小型、簡單應用程式), 而目前常用的測試則使用具體值(例如“如果用戶嘗試提取 5 以太幣會怎樣?”)。 - -智能合約在某種程度上滿足了這兩個要求, 例如,以太坊合約的規模較小,這使它們適合進行形式化驗證, 此外,EVM 遵循簡單的規則,這使得為 EVM 上執行驗證程序指定變得更加容易。 - -### 更短的開發周期 {#faster-development-cycle} - -形式化驗證技術,例如模型檢查和符號執行,通常比常規的智能合約程式碼分析更高效 (在測試和審核期間的表現)。 這是因為形式化驗證依賴符號值來測試斷言 (如果使用者嘗試提取 _n_ 以太幣會怎樣?), 而目前常用的測試則使用具體值 ("如果使用者嘗試提取 5 以太幣會怎樣?")。 - -符號輸入變量可以涵蓋多個類別的具體值,因此形式化驗證能夠確保在更短時間内涵蓋更多程式碼。 再有效率的使用下,形式化驗證可以加速開發流程 - -並且透過減少代價高昂的設計錯誤來改進去中心化應用程式(dapps) 的構建過程。 升級合約 (如果可能) 來修復漏洞需要大量重寫程式碼庫並花費更多努力在開發上。 形式化驗證可以檢測許多合約實現中可能會被測試者和審核者漏掉的錯誤,並提供充足的機會在合約部署之前修復這些問題。 - -## 形式化驗證的缺點 {#drawbacks-of-formal-verification} - -### 人力成本 {#cost-of-manual-labor} - -形式化驗證,尤其是需要人爲引導證明器來推導出正確性證明的半自動驗證,需要花費大量人力。 創建形式規範是一項複雜的過程,要求很高的技能水平, - -這些因素 (人力與技能) 使形式化驗證相比評估合約正確性的常規方法 (例如測試和審核) 要求更高且更加昂貴。 然而,鑑於智能合約的錯誤成本,這樣的成本仍然是可以接受的。 - -### 形式化驗證錯誤的負面效應 {#false-negatives} - -形式化驗證只能檢查智能合約的執行是否與形式規範相匹配, 因此,確保規範符合智能合約的預期行為非常重要。 - -如果規範編寫得很糟糕,違反屬性 (將導致執行漏洞) 就無法透過形式化驗證審核來檢測。 在這種情況下,開發者可能會錯誤的假設合約是沒有漏洞的。 - -### 效能問題 {#performance-issues} - -形式化驗證會遇到一些效能問題。 例如,在模型檢查和符號檢查期間分別遇到狀態和路徑爆炸問題,就可能會影響驗證程序。 另外,形式化驗證經常在其底層使用 SMT 求解器和其他約束求解器,而這些求解器依賴於計算密集型流程。 - -此外,程式驗證器并不總是能夠確認屬性 (由邏輯公式描述) 是否可以被滿足 ("[可判定性問題](https://en.wikipedia.org/wiki/Decision_problem)"),因爲程序可能永遠不會終止。 因此,即使規範良好,有些屬性也可能無法被證明。 - -## 以太坊智能合約的形式化驗證工具 {#formal-verification-tools} - -### 用於制定形式化規範的規範語言 {#specification-languages} - -**Act**: _*Act allows specification of storage updates, pre/post conditions and contract invariants. Its tool suite also has proof backends able to prove many properties via Coq, SMT solvers, or hevm.** - -- [GitHub](https://github.com/ethereum/act) -- [文檔](https://ethereum.github.io/act/) - -**Scribble** - _*Scribble 將 Scribble 規範語言中的程式碼注解轉換爲檢查規範的具體斷言。** - -- [文件](https://docs.scribble.codes/) - -**Dafny** - _*Dafny is a verification-ready programming language that relies on high-level annotations to reason about and prove correctness of code.** - -- [GitHub](https://github.com/dafny-lang/dafny) - -### Program verifiers for checking correctness {#program-verifiers} - -**Certora Prover** - _Certora Prover is an automatic formal verification tool for checking code correctness in smart contracts. 規範由 CVL (Certora 驗證語言) 編寫,使用靜態分析和約束求解的結合來檢測屬性違反。_ - -- [網站](https://www.certora.com/) -- [文檔](https://docs.certora.com/en/latest/index.html) - -**Solidity SMTChecker** - _* Solidity 的 SMTChecker 是一個基於 SMT (可滿足模型理論) 和 Horn 求解的内置模型檢查器。 它在編譯期間確認合約的源程式碼是否符合規範,並靜態檢查安全屬性的違反。** - -- [GitHub](https://github.com/ethereum/solidity) - -**solc-verify** - _*solc-verify 是 Solidity 編譯器的一個擴展版本,可以使用注解和模組化程式驗證在 Solidity 程式碼上執行自動形式化驗證** - -- [GitHub](https://github.com/SRI-CSL/solidity) - -**KEVM** - _*KEVM is a formal semantics of the Ethereum Virtual Machine (EVM) written in the K framework. KEVM is executable and can prove certain property-related assertions using reachability logic.** - -- [GitHub](https://github.com/runtimeverification/evm-semantics) -- [文檔](https://jellopaper.org/) - -### 定理證明的邏輯框架 {#theorem-provers} - -**Isabelle** - _Isabelle/HOL 是一個證明助手,允許使用形式化語言來表示數學公式,並提供驗證明這些公式的工具。 主要應用於數學證明的形式化,特別是形式化驗證,它涉及證明電腦硬體或軟體的正確性以及證明電腦語言和協議的屬性。_ - -- [GitHub](https://github.com/isabelle-prover) -- [文檔](https://isabelle.in.tum.de/documentation.html) - -**Coq** - _Coq 是一個互動式定理證明器,允許你使用定理來定義程式並以互動方式生成經機器檢查的正確性證明。_ - -- [GitHub](https://github.com/coq/coq) -- [文檔](https://coq.github.io/doc/v8.13/refman/index.html) - -### 用於偵測智能合約中易受攻擊模式的基於符號執行的工具 {#symbolic-execution-tools} - -**Manticore** - _*A tool for analyzing EVM bytecode analysis tool based on symbolic execution*.* - -- [GitHub](https://github.com/trailofbits/manticore) -- [文檔](https://github.com/trailofbits/manticore/wiki) - -**hevm** - _*hevm is a symbolic execution engine and equivalence checker for EVM bytecode.** - -- [GitHub](https://github.com/dapphub/dapptools/tree/master/src/hevm) - -**Mythril** - _A symbolic execution tool for detecting vulnerabilities in Ethereum smart contracts_ - -- [GitHub](https://github.com/ConsenSys/mythril-classic) -- [文檔](https://mythril-classic.readthedocs.io/en/develop/) - -## 延伸閱讀 {#further-reading} - -- [How Formal Verification of Smart Contracts Works](https://runtimeverification.com/blog/how-formal-verification-of-smart-contracts-works/) -- [How Formal Verification Can Ensure Flawless Smart Contracts](https://media.consensys.net/how-formal-verification-can-ensure-flawless-smart-contracts-cbda8ad99bd1) -- [An Overview of Formal Verification Projects in the Ethereum Ecosystem](https://github.com/leonardoalt/ethereum_formal_verification_overview) -- [End-to-End Formal Verification of Ethereum 2.0 Deposit Smart Contract](https://runtimeverification.com/blog/end-to-end-formal-verification-of-ethereum-2-0-deposit-smart-contract/) -- [Formally Verifying The World's Most Popular Smart Contract](https://www.zellic.io/blog/formal-verification-weth) -- [SMTChecker and Formal Verification](https://docs.soliditylang.org/en/v0.8.15/smtchecker.html) diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/testing/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/testing/index.md" deleted file mode 100644 index 463e64f7a55..00000000000 --- "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/testing/index.md" +++ /dev/null @@ -1,308 +0,0 @@ ---- -title: 測試智慧型合約 -description: 測試以太坊智能合約之技術與考量概觀 -lang: zh-tw ---- - -開放的區塊鏈如以太坊具不可篡改性,讓已經部署的智能合約難以更改。 確實存在一些可以“間接地升級”[智能合約的升級模式](/developers/docs/smart-contracts/upgrading/),但這些的開發難度較高,也會涉及社群的共識。 並且,升級只能在一個錯誤被發現_後_進行修正。如果一個攻擊者先發現了一個漏洞,智能合約就有被遭到濫用或攻擊的可能。 - -基於這些原因,在智能合約被[部署](/developers/docs/smart-contracts/deploying/)到以太坊主網前進行測試,是保障[安全性](/developers/docs/smart-contracts/security/)的最基本要求。 有許多不同測試和評估程式碼安全性的技術與方法,你所選用的取決於你的需求。 而一個由不同工具和方法組成的測試框架,會是找出在合約程式碼中,從輕微到重大安全性漏洞的理想選擇。 - -## 先決條件 {#prerequisites} - -本頁會解釋如何在部署到以太坊前進行智能合約的測試, 假定你已經大致了解[智能合約](/developers/docs/smart-contracts/)。 - -## 何謂智能合約測試? {#what-is-smart-contract-testing} - -智能合約測試是指確認智能合約程式碼會如預期般執行的測試過程。 撰寫測試能有助於檢查特定的智能合約是否可靠、可用及安全。 - -雖然測試方法各異,但通常都是採樣一智能合約可能處理到的所有資料的一小部分,來執行該智能合約的功能。 如果合約對採樣資料產出如預期的結果,那我們就認定它的運作正常。 多數的測試工具都提供資源來幫助撰寫與執行[測試範例](https://en.m.wikipedia.org/wiki/Test_case),以檢查合約的執行是不是預期的結果。 - -### 測試智能合約的重要性 {#importance-of-testing-smart-contracts} - -由於智能合約通常掌控高財物價值的金融資產,即使是微小的錯誤仍可以造成[使用者的巨大損失](https://rekt.news/leaderboard/)。 嚴密的測試則可以幫助我們即早發現合約程式碼裡的漏洞與問題,並在他們被部署到主網前進行修復。 - -雖然在發現漏洞後進行合約的升級是可行的,但合約的升級實作複雜,如果實作不正確也可能[造成更多問題](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/)。 而合約的升級看似打破了區塊鏈資料的不可篡改性,也讓使用者需要接受額外的信任假設。 因此,我們反而應制定完整的測試計畫,來降低智能合約的安全性風險、避免需要在智能合約部署後進行複雜的合約升級。 - -## 智能合約測試方法論 {#methods-for-testing-smart-contracts} - -測試以太坊智能合約的方法分為兩大類:**自動化測試**及**手動測試**。 自動化測試與手動測試各有優缺,而兩者可以併用成一個完整測試合約的方案。 - -### 自動化測試 {#automated-testing} - -自動化測試使用工具來自動偵測智能合約程式碼在執行時的錯誤, 而其好處在於使用[腳本](https://www.techtarget.com/whatis/definition/script?amp=1)來評估合約的功能。 寫成腳本的測試可以被安排重複地執行來減少人為參與,讓自動化測試比手動測試更為有效率。 - -自動化測試在以下情境特別有用:測試範例重複性高且費時、難以以手動測試、容易有人為的錯誤,或牽涉到關鍵的合約功能。 而其限制則是可能會遺漏一些漏洞,並可能產生[偽陽性、虛報答案的結果](https://www.contrastsecurity.com/glossary/false-positive)。 因此,將自動化測試與手動測試並用較為理想。 - -### 手動測試 {#manual-testing} - -手動測試需要真人的輔助,一一執行每一個測試範例來分析智能合約的正確性。 這和自動化測試不同,沒辦法同時在一份合約上去執行多個獨立的測試,並得到一個顯示所有成功與失敗測試的報告。 - -手動測試可以由一個人,依照預寫好的測試計畫,來執行不同的測試情境。 也可以由許多人、或是幾組人,在一段時間內,來與一份合約互動、進行測試。 測試者會把測試出來的實際結果,和預期行為相比較,並把兩者的不同回報為漏洞。 - -有效的手動測試需要大量的資源(技術、時間、金錢與人力),而且有可能因為人為的疏失,而漏掉了測試時的一些錯誤。 但手動測試仍然是有幫助的,舉例來說,一個真人測試員(如審計員)或許可以用直覺來找出一些極端情境,但自動化測試工具則不一定有辦法。 - -## 智能合約的自動化測試 {#automated-testing-for-smart-contracts} - -### 單元測試 {#unit-testing-for-smart-contracts} - -單元測試分別測試每個函式並確認每一個子件正常的運作 好的單元測試應該要簡單並且快速的運作,並在有錯誤的時候讓人清楚的知道問題發生在哪。 - -單元測試在韓式執行完後確認回傳值正確且合約的存儲正確更新時很有用 此外,在更改合約的程式碼之後運行單元測試可以很好的確認新的邏輯並沒有造成新的錯誤 以下是一些如何運行有效單元測試的指南 - -#### 智能合約單元測試指南 {#unit-testing-guidelines} - -##### 1. 了解你的智能合約的商務邏輯以及工作流程 - -在撰寫單元測試之前,知道智能合約提供什麼樣的功能以及使用者要如何存取並使用這些函式很有幫助。 這對於進行 [happy path tests](https://en.m.wikipedia.org/wiki/Happy_path) 時特別有用,這個測試是為了確定合約中的函式是否對有效的用戶輸入回傳正確的值。 我們會用這個 (簡略的) [拍賣合約](https://docs.soliditylang.org/en/v0.8.17/solidity-by-example.html?highlight=Auction%20contract#simple-open-auction)作為例子來解釋這個概念。 - -``` -constructor( - uint biddingTime, - address payable beneficiaryAddress - ) { - beneficiary = beneficiaryAddress; - auctionEndTime = block.timestamp + biddingTime; - } - -function bid() external payable { - - if (block.timestamp > auctionEndTime) - revert AuctionAlreadyEnded(); - - if (msg.value <= highestBid) - revert BidNotHighEnough(highestBid); - - if (highestBid != 0) { - pendingReturns[highestBidder] += highestBid; - } - highestBidder = msg.sender; - highestBid = msg.value; - emit HighestBidIncreased(msg.sender, msg.value); - } - - function withdraw() external returns (bool) { - uint amount = pendingReturns[msg.sender]; - if (amount > 0) { - pendingReturns[msg.sender] = 0; - - if (!payable(msg.sender).send(amount)) { - pendingReturns[msg.sender] = amount; - return false; - } - } - return true; - } - -function auctionEnd() external { - if (block.timestamp < auctionEndTime) - revert AuctionNotYetEnded(); - if (ended) - revert AuctionEndAlreadyCalled(); - - ended = true; - emit AuctionEnded(highestBidder, highestBid); - - beneficiary.transfer(highestBid); - } -} -``` - -這是一個設計來在可出價期間接收出價的簡單拍賣合約 當`highestBid` 增加時,上一個最高出價者收回他們的錢;一旦拍賣期間結束,`beneficiary` 呼叫合約以取得他的錢。 - -對於這樣的合約,單元測試會涵蓋各種使用者在與合約互動時會呼叫的函式。 舉個例子,單元測試可能測試使勇者是否能在出價期間進行出價 (也就是成功呼叫 `bid()`),或者是測試使用者是否可以出一個比現在的 `highestBid` 更高的價格。 - -了解合約的工作流程也能對撰寫測試執行結果符合要求的單元測試有所幫助。 舉例來說,這個拍賣合約指明使用者不能在拍賣結束後出價(也就是當 `auctionEndTime` 小於`block.timestamp`的時候) 因此,開發者可能會執行一個確認在拍賣結束後 (`auctionEndTime` > `block.timestamp`時) 呼叫`bid()`是否能成功的單元測試 - -##### 2. 評估所有關於合約執行的假設 - -記錄任何關於合約執行的假設並編寫單元測試來測試其安全性是有可能的。 除了提供針對執行的保護,測試斷言還迫使你考慮可能破壞智能合約安全糢型的操作。 一個有用的技巧是不僅要進行“正向測試”,還要編寫負面測試,檢查函數對錯誤的輸入是否會失敗。 - -許多單元測試框架允許你創建斷言 - 陳述能做和不能做的事情的聲明 - 並運行測試來查看這些斷言在執行中是否成立。 開發前面描述的拍賣合約的開發者可以在運行異常測試之前對其行爲做出以下斷言: - -- 用戶無法在拍賣未開始或結束時出價。 - -- 如果出價低於可接受的門檻,拍賣合約就會還原。 - -- 未能贏得競標的用戶將獲得其資金的退款 - -**注**: 測試假設的另一種方式是編寫在合約中觸發[函數修飾符](https://docs.soliditylang.org/en/v0.8.16/contracts.html#function-modifiers)的測試,特別是 `require`、`assert` 和 `if…else` 聲明。 - -##### 3 計算程式覆蓋率 - -[程式碼覆蓋率](https://en.m.wikipedia.org/wiki/Code_coverage)是一種測試指標,用於追蹤在測試過程中執行的程式碼分支、行數和語句數量。 測試應該涵蓋足夠多的程式碼,否則你可能會遭遇 “漏報”,即合約通過了所有測試,但漏洞依然存在于代碼中。 但是,透過涵蓋足夠多的代碼,就可以確保智能合約中的所有聲明/函數都經過充分的正確性測試。 - -##### 4 使用精心開發的測試框架 - -在合約運行單元測試時使用的工具品質至關重要。 理想的測試框架應該是定期維護的;提供實用功能的 (如記錄和報告功能);並且必須經過其他開發者的廣泛使用與審查。 - -Solidity 智能合約的單元測試框架有不同的語言 (大多數為 JavaScript、Python 和 Rust)。 請在下方指南查看如何使用不同的測試框架運行單元測試: - -- **[使用 Brownie 運行單元測試](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** -- **[使用 Foundry 運行單元測試](https://book.getfoundry.sh/forge/writing-tests)** -- **[使用 Waffle 運行單元測試](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)** -- **[使用 Remix 運行單元測試](https://remix-ide.readthedocs.io/en/latest/unittesting.html#write-tests)** -- **[使用 Ape 運行單元測試](https://docs.apeworx.io/ape/stable/userguides/testing.html)** -- **[使用 Hardhat 運行單元測試](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** -- **[使用 Wake 運行單元測試](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** - -### 整合測試 {#integration-testing-for-smart-contracts} - -單元測試對合約函數進行單獨除錯,而整合測試將智能合約的部件作爲一個整體進行評估。 整合測試可以檢測源自跨合約調用或同一個智能合約中不同函數閒互動的問題。 例如,整合測試能夠幫助檢查如[繼承](https://docs.soliditylang.org/en/v0.8.12/contracts.html#inheritance)和依賴性注入之類的功能是否正常運作。 - -如果你的合約採用模組化結構或在執行期間與其他鏈上合約互動,整合測試就很實用。 運行整合測試的一個方法是在一個特定高度[分叉區塊鏈](/glossary/#fork) (使用類似 [Forge](https://book.getfoundry.sh/forge/fork-testing) 或 [Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks) 的工具),並模擬在你的合約與部署的合約之間的互動。 - -分叉的區塊鏈將與主網的行為類似,其帳戶具有關聯的狀態和餘額。 但它只作爲一個沙盒本地開發環境運行,這意味著你不需要用真實的以太幣來交易,你的更改也不會影響真實的以太坊協議。 - -### 基於特性的測試 {#property-based-testing-for-smart-contracts} - -基於屬性的測試是一種檢查智能合約是否滿足一些定義的屬性的過程。 屬性是關於合約行為的斷言,預期其行為在不同的場景中始終保持為真。智能合約屬性的一個例子可以是「合約中的算術運算永不溢出或下溢」。 - -**靜態分析**和**動態分析**是執行基於屬性的測試的常見技術,並且兩者都可以驗證程式 (在這裏為智能合約) 的程式碼是否滿足某些預定義屬性。 一些基於屬性的測試工具自帶一些關於預期合約屬性的預定義規則,並根據這些規則檢查程式碼,而其他工具則允許你為智能合約創建自訂屬性。 - -#### 靜態分析 {#static-analysis} - -靜態分析器將智能合約的源程式碼作爲輸入,並輸出聲明合約是否滿足屬性的結果。 與動態分析不同,靜態分析不涉及執行合約來分析其正確性。 相反,靜態分析器會推理智能合約在執行期間可能選擇的所有路徑 (例如,透過檢視源程式碼的結構來確定合約操作在運行時的意義)。 - -[Linting](https://www.perforce.com/blog/qac/what-lint-code-and-why-linting-important) 和[靜態測試](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis)是合約執行靜態分析的常見方法。 兩者都需要對合約執行的低階表示進行分析,例如由編譯器輸出的[抽象語法樹](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree)和[控制流程圖](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/)。 - -在多數情況下,靜態分析器對安全問題很有用,例如不安全構造,語法錯誤或違反合約程式碼中的編程標準。 然而,靜態分析器被認爲在檢測深層漏洞方面通常不健全,並可能會產生過多的誤報。 - -#### 動態分析 {#dynamic-analysis} - -動態分析為智能合約函數生成符號輸入 (例如,在[符號執行](https://en.m.wikipedia.org/wiki/Symbolic_execution)中) 或具體輸入 (例如,在[初略](https://owasp.org/www-community/Fuzzing)中) 來查看是否有任何執行軌跡違反特定屬性。 此類基於屬性的測試與單元測試不同,其測試用例涵蓋了多種場景,並且有一個程式處理測試用例的生成。 - -[模糊測試](https://halborn.com/what-is-fuzz-testing-fuzzing/)是一種用於驗證智能合約中任意屬性的動態分析技術的範例。 模糊測試工具使用隨機或畸形的變化來呼叫目標合約中的函數,以對預先定義的輸入值進行測試。 如果智能合約輸入錯誤狀態 (即當斷言失敗時),問題就會被標記,並在報告中產生將執行推動到脆弱路徑的輸入。 - -初略對於評估智能合約輸入驗證機制很有用,因爲對意外輸入的不正確處理可能會導致意外執行並產生危險的影響。 這種基於屬性的測試形式可能非常理想,原因有多種: - -1. **編寫涵蓋許多場景的測試用例是很難的。**屬性測試只需要你定義一個行爲以及用於測試該行爲的一系列數據 - 程式會根據定義的屬性自動生成測試用例。 - -2. **你的測試套件或許無法充分涵蓋程式中所有可能的路徑。**即便有 100% 的涵蓋率,也可能會錯過邊緣案例。 - -3. **單元測試證明合約正確執行採樣數據,但採樣以外的輸入是否正確執行仍然未知。**屬性測試使用給定輸入值的多個變體來執行目標合約,以此找出導致斷言失敗的執行軌跡。 因此,屬性測試為合約在廣泛的輸入資料類別下正確執行提供了更多的保證。 - -### 對智能合約運行基於屬性的測試的準則 {#running-property-based-tests} - -運行基於屬性的測試通常從定義一個屬性 (例如,[整數溢位](https://github.com/ConsenSys/mythril/wiki/Integer-Overflow)的缺乏) 或者你希望在智能合約中驗證的屬性集合開始。 你可能還需要定義一個數值範圍,使程式能夠在編寫屬性測試時在該範圍内為交易輸入生成數據。 - -配置正確後,屬性測試工具將使用隨機產生的輸入來執行你的智能合約函數。 如果有任何斷言違規情況,你應該獲得一份報告,其中包含違反正在評估的屬性的具體輸入資料。 請參閱下面的指南,了解如何使用不同的工具開始執行基於屬性的測試: - -- **[使用 Slither 的智能合約靜態分析](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither#slither)** -- **[使用 Wake 的智能合約靜態分析](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** -- **[使用 Brownie 進行基於屬性的測試](https://eth-brownie.readthedocs.io/en/stable/tests-hypothesis-property.html)** -- **[使用 Foundry 的初略合約](https://book.getfoundry.sh/forge/fuzz-testing)** -- **[使用 Echidna 的初略合約](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna#echidna-tutorial)** -- **[使用 Wake 的初略合約](https://ackeeblockchain.com/wake/docs/latest/testing-framework/fuzzing/)** -- **[使用 Manticore 的智能合約符號執行](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore#manticore-tutorial)** -- **[使用 Mythril 的智能合約符號執行](https://mythril-classic.readthedocs.io/en/master/tutorial.html)** - -## 手動測試智慧合約 {#manual-testing-for-smart-contracts} - -在開發後期經常會進行智慧型合約手動測試,而這類測試通常在執行自動化測試之後進行。 此類測試將智能合約作爲完全整合的產品進行評估,以此檢查其是否符合技術要求中的規範。 - -### 在本地區塊鏈測試合約 {#testing-on-local-blockchain} - -儘管在本地開發環境中執行的自動化測試能夠提供有用的除錯信息,你仍然會想知道你的合約在生產環境中的運行情況。 然而,部署到以太坊主鏈需要燃料費 - 更不用説如果你的智能合約仍有漏洞,你或你的用戶可能會損失真正的金錢。 - -在本地區塊鏈 (也被稱爲[開發者網路](/developers/docs/development-networks/)) 上測試你的合約,是在主網上進行測試的建議替代方案。 本地區塊鏈是在你的電腦上本地運行的以太坊區塊鏈的副本,它模擬了以太坊執行層的行爲。 因此,你可以編程交易與合約進行交互,而不會產生大量開銷。 - -在本地的區塊鏈上跑合約可以有助於完成手動的整合測試, [智能合約具有高度可組合性](/developers/docs/smart-contracts/composability/),允許你整合現有的協議 - 但你仍然需要確保這種複雜的鏈上整合產生正確的結果。 - -[有關開發網路的更多資訊。](/developers/docs/development-networks/) - -### 在測試網上測試合約 {#testing-contracts-on-testnets} - -測試網路或測試網的運作方式與以太坊主網完全相同,唯一的區別在於它使用沒有現實價值的以太幣 (ETH)。 在[測試網](/developers/docs/networks/#ethereum-testnets)上部署你的合約意味著任何人都可以與之互動(例如,透過去中心化應用程式的前端),而無需承擔資金風險。 - -這種手動測試形式對於從使用者角度評估應用程式的端到端流程非常有用。 在這裡,測試人員還可以進行試運行,並報告與合約的業務邏輯和整體功能有關的任何問題。 - -在本地區塊鏈上進行測試後,部署到測試網是理想的選擇,因為測試網更接近以太坊虛擬機的行為。 因此,許多智能合約通常會將去中心化應用程式部署到測試網上來在現實條件下評估智能合約的運作。 - -[更多以太坊測試網相關資訊。](/developers/docs/development-networks/#public-beacon-testchains) - -## 測試與形式化驗證 {#testing-vs-formal-verification} - -儘管測試幫助確認合約對特定數據輸入返回預期結果,但對於測試期間未使用的輸入,它無法完全證明相同的結果。 因此,測試智能合約無法保證 “函數正確性” (即無法確保程式對於_所有_輸入值都按照要求運作)。 - -形式化驗證是一種透過檢查程式的形式化模型是否符合形式化規範來評估軟體正確性的方法。 形式化模型是程式的抽象數學表示,而形式化規範定義程式的屬性 (即程式執行的邏輯斷言)。 - -因爲屬性由數學術語編寫,它能夠使用邏輯推理規則來驗證系統的形式化 (數學) 模型是否滿足規範。 因此,形式化驗證工具被稱為能夠提供系統正確性的「數學證明」。 - -與測試不同,形式化驗證可用於驗證智能合約執行是否滿足_所有_執行的形式化規範 (即沒有漏洞) 而無需使用採樣數據。 這不僅減少了運行數十個單元測試所花費的時間,而且在發現隱藏漏洞方面也更有效。 話雖如此,形式化驗證技術在實施難度和實用性上存在一定的變化程度。 - -[更多關於智能合約的形式化驗證的資訊。](/developers/docs/smart-contracts/formal-verification) - -## 測試與審核以及漏洞懸賞計劃 {#testing-vs-audits-bug-bounties} - -如上所述,嚴格的測試很難保證合約中沒有錯誤;形式化驗證方法可以提供更有力的正確性保證,但目前仍難以使用並且需要大量成本。 - -儘管如此,你仍可透過獨立的程式碼審查來進一步增加捕捉合約漏洞的可能性。 [智慧型合約審核](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/)和[漏洞懸賞](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)是讓他人分析你的合約的兩種方式。 - -審查由具有在智能合約中發現安全漏洞和開發不良實踐案例經驗的審查人員進行。 審核通常包括對整個程式碼庫進行測試(可能包括形式化驗證)以及手動審查。 - -相反,漏洞懸賞計劃通常包括向在智能合約中發現漏洞並向開發者報告的個人 (通常被描述爲[白帽駭客](https://en.wikipedia.org/wiki/White_hat_(computer_security))) 提供經濟獎勵。 漏洞獎勵類似於審查,因為它涉及要求其他人幫助發現智能合約中的缺陷。 - -主要的區別是漏洞懸賞計劃對更廣泛的開發者/駭客開放,並吸引了廣泛的擁有獨特技能與經驗的道德駭客和獨立安全專家。 與主要依賴可能擁有有限或狹窄專業知識的團隊的智能合約審查相比,這可能是一個優勢。 - -## 測試道具與資料圖書庫 {#testing-tools-and-libraries} - -### 單元測試工具 {#unit-testing-tools} - -- **[solidity-coverage](https://github.com/sc-forks/solidity-coverage)** - _Solidity 合約程式覆蓋工具_ - -- **[Waffle](https://ethereum-waffle.readthedocs.io/en/latest/)** - _用於高級智能合約開發和測試的框架(基於ethers.js)_。 - -- **[Remix 測試](https://github.com/ethereum/remix-project/tree/master/libs/remix-tests)** - _用來測試Solidity 智能合約的工具。 在 Remix IDE 的“Solidity Unit Testing”插件下工作,該插件用於編寫和運行合約的測試案例。 _ - -- **[OpenZeppelin Test Helpers](https://github.com/OpenZeppelin/openzeppelin-test-helpers)** - _用於以太坊智能合約測試的斷言庫。 讓你的合約運作自如正常!_ - -- **[Brownie 單元測試框架](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** - _Brownie 利用 Pytest,即一個功能豐富的測試框架,使你能夠用最少的程式碼編寫小型測試,並且對於大型項目擴展良好,具有高度可擴展性。_ - -- **[Foundry 測試](https://github.com/foundry-rs/foundry/tree/master/forge)** - _Foundry 提供了 Forge,即一個快速且靈活的以太坊測試框架,能夠執行簡單的單元測試、燃料優化檢查,以及合約初略。_ - -- **[Hardhat 測試](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** - _基於ethers.js、Mocha 和Chai 的智慧合約測試框架。 _ - -- **[ApeWorx](https://docs.apeworx.io/ape/stable/userguides/testing.html)** - _基於Python 的智慧合約開發與測試框架,針對太坊虛擬機。 _ - -- **[Wake](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** - _基於 Python 的框架,為單元測試和初略提供了强大的除錯功能和跨鏈測試支持,利用 pytest 和 Anvil 實現最佳的用戶體驗和性能。_ - -### 基於屬性測試的工具 {#property-based-testing-tools} - -#### 靜態分析工具 {#static-analysis-tools} - -- **[Slither](https://github.com/crytic/slither)** - _基於 Python 的 Solidity 靜態分析框架,能夠為智能合約尋找漏洞、增强程式碼理解,以及編寫自訂分析。_ - -- **[Ethlint](https://ethlint.readthedocs.io/en/latest/)** - _用於執行Solidity 智能合約程式語言的風格和安全最佳實踐的Linter。 _ - -- **[Cyfrin Aderyn](https://cyfrin.io/tools/aderyn)** - _基於Rust 的靜態分析器,專為Web3 智慧合約安全和開發而設計。 _ - -- **[Wake](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** - _基於 Python 的靜態分析框架,具有漏洞和代碼品質偵察器、提取有用信息的印刷機,以及對編寫自訂子模組的支持。_ - -#### 動態分析工具 {#dynamic-analysis-tools} - -- **[Echidna](https://github.com/crytic/echidna/)** - _透過基於屬性的測試來檢測智能合約漏洞的快速合約模糊測試工具。 _ - -- **[Diligence Fuzzing](https://consensys.net/diligence/fuzzing/)** - _自動化模糊測試工具,用於偵測智慧合約程式碼中的屬性違規行為。 _ - -- **[Manticore](https://manticore.readthedocs.io/en/latest/index.html)** - _用於分析以太坊虛擬機器(EVM) 字節碼的動態符號執行框架。 _ - -- **[Mythril](https://github.com/ConsenSys/mythril-classic)** - _以太坊虛擬機位元組碼分析工具,能夠使用污染分析、一致性分析和控制流檢查來檢測合約漏洞。_ - -- **[Diligence Scribble](https://consensys.net/diligence/scribble/)** - _Scribble 是一種規範語言和運行時檢查工具,允許你使用屬性注解智能合約,從而使你能夠使用如 Diligence 初略和 MythX 的工具來自動測試合約。_ - -## 相關教學 {#related-tutorials} - -- [不同測試產品的概述和比較](/developers/tutorials/guide-to-smart-contract-security-tools/) \_ -- [如何使用 Echidna測試智慧型合約.](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/) -- [如何使用 Manticore 搜索智慧型合約bug.](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) -- [如何使用 Slither 來搜尋智慧型合約漏洞](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) -- [如何測試及模仿複製 Solidity 合約.](/developers/tutorials/how-to-mock-solidity-contracts-for-testing/) -- [如何使用 Foundry 在 Solidity 中執行單元測試](https://www.rareskills.io/post/foundry-testing-solidity) - -## 了解更多 {#further-reading} - -- [測試以太坊智慧型合約的深入指南](https://iamdefinitelyahuman.medium.com/an-in-depth-guide-to-testing-ethereum-smart-contracts-2e41b2770297) -- [如何測試以太坊智慧型合約](https://betterprogramming.pub/how-to-test-ethereum-smart-contracts-35abc8fa199d) -- [MolochDAO 的開發者單元測試指南](https://github.com/MolochVentures/moloch/tree/4e786db8a4aa3158287e0935dcbc7b1e43416e38/test#moloch-testing-guide) -- [如何像專家一樣測試智能合約](https://forum.openzeppelin.com/t/test-smart-contracts-like-a-rockstar/1001) diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/upgrading/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/upgrading/index.md" deleted file mode 100644 index 8023c2aaa17..00000000000 --- "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/upgrading/index.md" +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: 升級智慧型合約 -description: 以太坊智慧合約升級模式概述 -lang: zh-tw ---- - -以太坊上的智慧型合約是在以太坊虛擬機器 (EVM) 中運行的自動執行程式。 這些程式在設計上是不可變的,一旦部署合約,就可以防止對業務邏輯進行任何更新。 - -當永恆不變在去信任化、去中心化和合約安全中是不可或缺的,卻可能在一些案例中變成缺點, 舉例來說,永恆不變的程式碼讓開發者無法修復有缺陷的合約。 - -越來越多改進合約的研究,引入了幾種升級合約的模式, 這些升級的模式讓開發者把商業邏輯拆出來放在不同的和合約使得合約可升級(在保持不可變的前提之下)。 - -## 先決條件 {#prerequisites} - -需要對[智慧合約](/developers/docs/smart-contracts/)、[智慧合約剖析](/developers/docs/smart-contracts/anatomy/)和[以泰坊虛擬機(EVM)](/developers/docs/evm/)有一定程度的了解, 此文還假設讀者了解智慧合約的程式設計。 - -## 什麼是智慧合約升級? {#what-is-a-smart-contract-upgrade} - -合約升級代表在更換商業邏輯合約的同時保留合約狀態, 在智慧合約相關的文章中,要分清楚可升級與易變性是兩回事, - -你依然無法改變已經部署在以太坊網路上的合約位置, 但是可以改變與使用者互動的合約所執行程式。 - -可以由以下幾個方法做到: - -1. 建立多個版本的合約以及從舊合約遷移狀態(例如:資料)到新的實作合約 - -2. 將商業邏輯與狀態分別存放在不同合約 - -3. 用代理的模式呼叫方法,從不可變的合約委派到可以修改的邏輯合約 - -4. 建立一個不變的主合約作為介面,並依靠其他多個有彈性的衛星合約執行特定功能 - -5. 使用鑽石模式從代理合約委派函式呼叫到邏輯合約 - -### 升級機制 #1: 合約遷移 {#contract-migration} - -合約遷移是建立在版本控制上—想法來自在相同的軟體上建立和管理唯一的狀態 合約轉移需要部署現有合約的新實例,並將存儲和餘額轉移到該新合約。 - -新部署的合約存儲為空,允許你從原有合約恢復資料並為其寫入新的實作。 此後,你將需要將所有與舊合約有互動的合約更新新的地址 - -合約遷移的最後一步是說服用戶轉去使用新合約。 新的合約版本將保留用戶餘額和地址,從而保持不變性。 如果是基於代幣的合約,你還需要聯繫交易所放棄舊合約並使用新合約。 - -合約遷徙是一個相對簡單且安全的合約升級方式,不會影響到使用者的互動, 手動遷徙使用者的儲存空間和餘額到新的合約是非常花時間且需要高gas成本, - -[更多關於合約遷徙。](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) - -### 升級機制#2: 資料分離 {#data-separation} - -其他升級合約的方式為:將“商業邏輯”與“資料儲存”分開到不同的合約 這代表使用者與邏輯合約互動的同時資料是儲存在“資料儲存合約”。 - -邏輯合約包含當使用者與應用程式互動時執行的程式碼, 以及資料儲存合約地址與資料合約互動來取得與新增資料。 - -同時,儲存合約保存與智慧合約相關的狀態,例如使用者餘額和地址。 請注意,儲存合約歸邏輯合約所有,並在部署時使用邏輯合約的地址作配置。 這可以防止未經授權的合約呼叫儲存合約或更新其資料。 - -首先,儲存合約是永久的—但是你可以換掉邏輯合約,將邏輯合約指向新的實作, 這樣可以換掉在EVM上執行的程式,同時原封不動的保有儲存空間以及餘額。 - -使用升級方法需要更新邏輯合約地址到儲存合約上, 同時需要在新的邏輯合約上設定儲存合約的地址,理由稍後說明。 - -資料分離模式可以說是相較於資料遷移更簡單的實作方法 然而,你將必須管理多個合約並實作複雜的授權方案,以此保護智慧合約不受惡意升級。 - -### 升級機制#3: 代理模式 {#proxy-patterns} - -代理模式同時使用資料分離來確保商業邏輯與資料在不同合約, 然而,在代理模式下,儲存合約(或稱代理)在執行程式時呼叫邏輯合約, 這是一個相反的資料分離模式,在這裡的邏輯合約稱為儲存合約。 - -代理模式的流程: - -1. 使用者與儲存資料的代理合約互動,但這個合約上沒有但這個合約上沒有商業邏輯 - -2. 代理合約存儲邏輯合約的地址,並使用 `delegatecall` 函數將所有函數呼叫委派給邏輯合約 (擁有商業邏輯的合約) - -3. 在所有的呼叫轉給邏輯合約後,從邏輯合約回傳的資料會被擷取與回傳給使用者 - -用代理模式需要了解** delegatecall**方法, 簡單來講,`delegatecall` 是允許合約調用另一個合約的操作碼,而實際的程式碼執行發生在呼叫合約的情境下。 在代理模式中使用 `delegatecall` 的含義是,代理合約讀取和寫入其存儲空間並執行存儲在邏輯合約中的邏輯,就像呼叫一個内部函數一樣。 - -根據 [Solidity 文件](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries): - -> _存在一個訊息呼叫的特殊變數,稱爲 **delegatecall**,該變數與訊息呼叫相同,除了目標地址中的程式碼是在呼叫合約的情境下執行,以及 `msg.sende` 和 `msg.value` 不會改變它們的值。__這意味著合約可以在運行時從一個不同地址動態載入程式碼。 儲存空間、目前的地址和餘額仍然是指呼叫的合約,只有程式碼是來自被呼叫的地址。

-> -> 代理合約知道使用者呼叫方法時是呼叫`delegatecall`,因為有內建`fallback`函數。 在撰寫Solidity時,在呼叫不到相符的方法時[預設函式](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function)會被觸發。 -> -> 要使代理模式正常運作,需要編寫指定代理合約應該如何處理其不支持函數的預設函式。 在這種情況下,代理的預設函式作為進入delegatecall和讓使用者的請求導到目前的邏輯合約。 -> -> 代理合約預設是不變的,但是邏輯合約可以更新成新的商業邏輯, 執行升級就是在更改代理合約中所使用的邏輯合約地址, -> -> 將代理合約指向新的邏輯合約,當使用者呼叫代理合約時程式就會執行就會改變, 讓我們在升級合約邏輯時,不用詢問使用者要不要與新的合約互動。 -> -> 代理模式是一種升級智慧合約的熱門方法,因爲其消除了與合約遷移相關的困難。 然而,代理合約使用起來更加複雜,使用不當時可能帶來重大缺陷,例如[函數選擇器崩潰](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357)。 -> -> [更多關於代理模式](https://blog.openzeppelin.com/proxy-patterns/) -> -> ### 升級機制#4: 策略模式 {#strategy-pattern} -> -> 該技術受到[策略模式](https://en.wikipedia.org/wiki/Strategy_pattern)的影響,這種模式鼓勵建立與其他程式連結來實現特定功能的軟體。 在以太坊上使用策略模式開發意指建立一個呼叫其他合約方法的合約。 -> -> 在這個模式下,主要的合約包含邏輯合約,但與其他合約(衛星合約)介接來執行特定方法, 主合約儲存了各衛星合約的地址,可以在不同的衛星合約實作之間切換, -> -> 可以建立一個新的衛星合約並在主合約上設定新的地址, 讓你可以更換_策略<0>合約(例如:實作新的合約)

-> -> 儘管與先前討論的代理模式類似,策略模式在主要合約上有所不同,該合約具有商業邏輯,與用戶互動。 使用這個模式提供合約一個有限度、不會影響到主要功能的改動機會。 -> -> 缺點是這種模式只適合小幅度的升級, 同時,當主合約受到波及(例如:被駭)時,你無法使用這種升級方法。 -> -> ### 升級機制 #5: 鑽石模式 {#diamond-pattern} -> -> 最時模式被視為改良版的代理模式, 鑽石模式與代理模式不同的是鑽石代理合約可以委派不只一個邏輯合約。 -> -> 在鑽石模式中的邏輯合約被稱為_切面_, 為了使鑽石模式發揮作用,需要在代理合約中建立對應,將[函數選擇器](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector)對應到不同切面的地址。 -> -> 當使用者呼叫方法時,代理合約會找的負責的執行函數的切面, 因此` delegatecall`(使用預設函數)和重導到適合的邏輯合約, -> -> 鑽石升級模式,有幾個優於傳同代理模式的好處: -> -> 1. 不用更換掉所有的程式碼,只需要做部分升級, 使用代理模式升級,即便是只要做少部分升級,仍需要建立整份新的邏輯合約 -> -> 2. 所有智慧合約 (包括代理模式中使用的邏輯合約) 都有 24KB 的大小限制,這對於需要更多函數的複雜合約可能是一個限制。 鑽石模式藉由分散到函數到多個邏輯合約,簡單的解決了這個問題 -> -> 3. 代理模式採用了包羅萬象的權限管理方法, 一個有升級權限的實體可以置換_整個_合約 但鑽石模式支持模組化權限方法,你能夠限制實體升級智慧合約中的特定函數。 -> -> [更多關於鑽石模式](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w) -> -> ## 升級智慧合約的利弊 {#pros-and-cons-of-upgrading-smart-contracts} -> -> - -| 優勢 | 劣勢 | -| ------------------------------------ | -------------------------------------- | -| 智慧合約升級使得已經部署過的合約可以簡單的修復漏洞 | 升級智慧合約讓程式碼的永恆性消失,會連帶影響到去中心化與安全 | -| 開發者可以使用邏輯合約新增功能到去中心化應用程式上 | 使用者必須相信開發者不會任意的修改程式碼 | -| 智慧合約升級可以增進終端使用者的安全性,因為漏洞可以被快速修復 | 在智慧合約中編寫升級功能增加了另一層複雜性和出現重大缺陷的可能性。 | -| 合約升級給了開發者更多的空間去嘗試不同的功能並不斷地推進dApps的發展 | 升級智慧合約的機會可能會促使開發者在開發時未經充分檢查研究就快速發佈項目 | -| | 智慧合約的不安全存取控制和中心化可能會使惡意行爲者更容易執行未經授權的升級。 | - - -## 升級合約的注意事項 {#considerations-for-upgrading-smart-contracts} - -1. 使用安全的存取控制/授權機制來避免未經授權的智慧合約升級,尤其是在使用代理模式、策略模式或資料分離時。 例如,限制升級方法的權限,只有合約的所有者可以呼叫升級方法 - -2. 升級合約是一個複雜的行動,需要高度的謹慎避免引入漏洞 - -3. 透過去中心化的方法升級實作,減少信任假設 可能的策略包括使用[多重簽名錢包合約](/developers/docs/smart-contracts/#multisig)來控制升級,或要求[去中心化自治組織的成員](/dao/)投票批准升級。 - -4. 注意升級合約的相關花費, 例如,在合約遷移期間從原有合約複製狀態 (如用戶餘額) 到新合約可能會需要不止一筆交易,這意味著更多燃料費。 - -5. 考慮實作**時間鎖**來保護使用者, 時間鎖代表,可以延遲升級對於系統的改變, 時間鎖定可以與多重簽名治理系統相結合來控制升級: 如果一個提議的行爲達到了所需的批准門檻,它還需要等到預定義的延遲期過去之後才會執行。 - -如果使用者不同意未來更新的計劃(例如:邏輯合約升級或新的費用模型),時間鎖給予使用者一些可以退出系統的時間, 沒有時間鎖,使用者必須相信開發者不會在未提前通知的情況下,在合約上進行任意的變更, 缺點是,時間鎖限制了快速修漏洞的能力。 - -## 資源 {#resources} - -**OpenZeppelin 升級外掛 - _一系列部署與保障安全升級合約的工具_** - -- [GitHub](https://github.com/OpenZeppelin/openzeppelin-upgrades) -- [文件](https://docs.openzeppelin.com/upgrades) - -## 教學 {#tutorials} - -- [升級你的智慧合約 | YouTube 使用教學](https://www.youtube.com/watch?v=bdXJmWajZRY) - Patrick Collins -- [以太坊智慧合約遷移教學](https://medium.com/coinmonks/ethereum-smart-contract-migration-13f6f12539bd)by Austin Griffith -- [使用UUPS代理模式升級合約](https://blog.logrocket.com/author/praneshas/)by Pranesh A.S -- [Web3使用教學:使用OpenZeppelin寫一個可升級的智慧合約(代理)](https://dev.to/yakult/tutorial-write-upgradeable-smart-contract-proxy-contract-with-openzeppelin-1916)by fangjun.eth - -## 了解更多 {#further-reading} - -- [The State of Smart Contract Upgrades](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/) by Santiago Palladino -- [多種升級Solidity合約的方法](https://cryptomarketpool.com/multiple-ways-to-upgrade-a-solidity-smart-contract/) - Crypto Market Pool blog -- [學習:升級智慧合約](https://docs.openzeppelin.com/learn/upgrading-smart-contracts)- OpenZeppelin Docs -- [代理模式對於Solidity合約升級能力: Transparent vs UUPS Proxies ](https://mirror.xyz/0xB38709B8198d147cc9Ff9C133838a044d78B064B/M7oTptQkBGXxox-tk9VJjL66E1V8BUF0GF79MMK4YG0)by Naveen Sahu -- [鑽石升級如何運作](https://dev.to/mudgen/how-diamond-upgrades-work-417j)by Nick Mudge diff --git "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/verifying/index.md" "b/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/verifying/index.md" deleted file mode 100644 index b3aa7dc839f..00000000000 --- "a/public/content/translations/zh-tw/20) Smart Contracts \342\200\223 Advanced/developers/docs/smart-contracts/verifying/index.md" +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: 驗證智慧型合約 -description: 以太坊智能合約源程式碼驗證簡介 -lang: zh-tw ---- - -[智能合約](/developers/docs/smart-contracts/)被設計為「不需信任」,意味著使用者在與合約互動前不需要相信第三方(如開發者和公司)。 作為實現不需信任的必要條件,用戶和其他開發者必須能夠驗證智能合約的源程式碼。 源程式碼驗證可確保用戶和開發者所發佈的合約代碼,和在以太坊區塊鏈上運行的合約地址的代碼相同。 - -區分「源程式碼驗證」和「[形式驗證](/developers/docs/smart-contracts/formal-verification/)」是很重要的。 源程式碼驗證(將在下面詳細解釋)指的是驗證給定由高級語言(例如 Solidity)編寫的智能合約源程式碼,是否被編譯為在合約地址執行的相同位元組碼。 而形式驗證則描述了驗證智能合約的正確性,這意味著合約按預期運行。 雖然需要依情境而定,但合約驗證通常指的是源程式碼驗證。 - -## 甚麼是源程式碼驗證? {#what-is-source-code-verification} - -在[Ethereum 虛擬機 (EVM)](/developers/docs/evm/)部署智能合約前,開發者會將合約的源程式碼([用 Solidity ](/developers/docs/smart-contracts/languages/)或其他高階語言編寫的指令)[編譯](/developers/docs/smart-contracts/compiling/)為位元組碼。 由於 EVM 無法解讀高階指令,把源程式碼編譯為位元組碼(即低階機器指令)是在 EVM 執行合約邏輯的必需步驟。 - -源程式碼驗證是將智能合約的源程式碼與合約創建時使用的編譯位元組碼進行比較,以檢測任何差異。 驗證智能合約很重要,因為宣傳的合約代碼可能與在區塊鏈上運行的程式碼有所不同。 - -經過驗證的智能合約讓所有人可以通過其所編寫的高階語言來研究合約的功能,而不必閱讀機器碼。 函式,值,通常還有變數名稱和註解都會與編譯和部署時的原始源程式碼相同。 這使閱讀程式碼更為容易。 源程式碼驗證還提供了程式碼文檔,讓終端用戶了解智能合約的設計目的。 - -### 什麼是完全驗證? {#full-verification} - -源程式碼中有部分內容不會影響到編譯完成的位元組碼,例如註解和變數名稱。 這意味著,即使兩份源程式碼使用不同的變數名稱和註解,也能驗證相同的合約。 這樣一來,惡意行為者可以在源程式碼中添加欺騙性的註解或給予誤導性的變數名稱,並使用與原始源程式碼不同的程式碼來驗證合約。 - -可以通過在位元組碼中附加額外數據來避免這種情況,這些數據作為源程式碼準確性的_加密保證_以及編譯信息的_指紋_。 所需的信息可以在[ Solidity 的合約元數據](https://docs.soliditylang.org/en/v0.8.15/metadata.html)中找到,並將該文件的雜湊值附加到合約的位元組碼中。 你可以在[元數據遊樂場](https://playground.sourcify.dev)中看到它的實際應用。 - -The metadata file contains information about the compilation of the contract including the source files and their hashes. Meaning, if any of the compilation settings or even a byte in one of the source files change, the metadata file changes. Consequently the hash of the metadata file, which is appended to the bytecode, also changes. That means if a contract's bytecode + the appended metadata hash match with the given source code and compilation settings, we can be sure this is exactly the same source code used in the original compilation, not even a single byte is different. - -This type of verification that leverages the metadata hash is referred to as **"[full verification](https://docs.sourcify.dev/docs/full-vs-partial-match/)"** (also "perfect verification"). If the metadata hashes do not match or are not considered in verification it would be a "partial match", which currently is the more common way to verify contracts. It is possible to [insert malicious code](https://samczsun.com/hiding-in-plain-sight/) that wouldn't be reflected in the verified source code without full verification. Most developers are not aware of the full verification and don't keep the metadata file of their compilation, hence partial verification has been the de facto method to verify contracts so far. - -## Why is source code verification important? {#importance-of-source-code-verification} - -### Trustlessness {#trustlessness} - -Trustlessness is arguably the biggest premise for smart contracts and [decentralized applications (dapps)](/developers/docs/dapps/). Smart contracts are “immutable” and cannot be altered; a contract will only execute the business logic defined in the code at the time of deployment. This means developers and enterprises cannot tamper with a contract's code after deploying on Ethereum. - -For a smart contract to be trustless, the contract code should be available for independent verification. While the compiled bytecode for every smart contract is publicly available on the blockchain, low-level language is difficult to understand—for both developers and users. - -Projects reduce trust assumptions by publishing the source code of their contracts. But this leads to another problem: it is difficult to verify that the published source code matches the contract bytecode. In this scenario, the value of trustlessness is lost because users have to trust developers not to change a contract's business logic (i.e., by changing the bytecode) before deploying it on the blockchain. - -Source code verification tools provide guarantees that a smart contract’s source code files matches the assembly code. The result is a trustless ecosystem, where users don’t blindly trust third parties and instead verify code before depositing funds into a contract. - -### 使用者安全 {#user-safety} - -With smart contracts, there’s usually a lot of money at stake. This calls for higher security guarantees and verification of a smart contract’s logic before using it. The problem is that unscrupulous developers can deceive users by inserting malicious code in a smart contract. Without verification, malicious smart contracts can have [backdoors](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), controversial access control mechanisms, exploitable vulnerabilities, and other things that jeopardize user safety that would go undetected. - -Publishing a smart contract's source code files makes it easier for those interested, such as auditors, to assess the contract for potential attack vectors. With multiple parties independently verifying a smart contract, users have stronger guarantees of its security. - -## How to verify source code for Ethereum smart contracts {#source-code-verification-for-ethereum-smart-contracts} - -[Deploying a smart contract on Ethereum](/developers/docs/smart-contracts/deploying/) requires sending a transaction with a data payload (compiled bytecode) to a special address. The data payload is generated by compiling the source code, plus the [constructor arguments](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) of the contract instance appended to the data payload in the transaction. Compilation is deterministic, meaning it always produces the same output (i.e., contract bytecode) if the same source files, and compilation settings (e.g. compiler version, optimizer) are used. - -![A diagram showing showing smart contract source code verification](./source-code-verification.png) - -Verifying a smart contract basically involves the following steps: - -1. Input the source files and compilation settings to a compiler. - -2. Compiler outputs the bytecode of the contract - -3. Get the bytecode of the deployed contract at a given address - -4. Compare the deployed bytecode with the recompiled bytecode. If the codes match, the contract gets verified with the given source code and compilation settings. - -5. Additionally, if the metadata hashes at the end of the bytecode match, it will be a full match. - -Note that this is a simplistic description of verification and there are many exceptions that would not work with this such as having [immutable variables](https://docs.sourcify.dev/docs/immutables/). - -## Source code verification tools {#source-code-verification-tools} - -The traditional process of verifying contracts can be complex. This is why we have tools for verifying source code for smart contracts deployed on Ethereum. These tools automate large parts of the source code verification and also curate verified contracts for the benefits of users. - -### Etherscan {#etherscan} - -Although mostly known as an [Ethereum blockchain explorer](/developers/docs/data-and-analytics/block-explorers/), Etherscan also offers a [source code verification service](https://etherscan.io/verifyContract) for smart contract developers and users. - -Etherscan allows you to recompile contract bytecode from the original data payload (source code, library address, compiler settings, contract address, etc.) If the recompiled bytecode is associated with the bytecode (and constructor parameters) of the on-chain contract, then [the contract is verified](https://info.etherscan.com/types-of-contract-verification/). - -Once verified, your contract’s source code receives a "Verified" label and is published on Etherscan for others to audit. It also gets added to the [Verified Contracts](https://etherscan.io/contractsVerified/) section—a repository of smart contracts with verified source codes. - -Etherscan is the most used tool for verifying contracts. However, Etherscan's contract verification has a drawback: it fails to compare the **metadata hash** of the on-chain bytecode and recompiled bytecode. Therefore the matches in Etherscan are partial matches. - -[有關在 Etherscan 上驗證合約的更多資訊](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327)。 - -### Sourcify {#sourcify} - -[Sourcify](https://sourcify.dev/#/verifier) 是另一個用於驗證開源和去中心化合約的工具。 它不是區塊瀏覽器,並只會驗證[不同的基於以太坊虛擬機的網路](https://docs.sourcify.dev/docs/chains)上的合約。 它充當其他工具在其之上構建的公共基礎設施,旨在使用元資料檔案中的[應用程式二階位介面](/developers/docs/smart-contracts/compiling/#web-applications)和 [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) 註釋來實現更人性化的合約互動。 - -跟 Etherscan 不同,Sourcify 支援與元資料雜​​湊的完全匹配。 The verified contracts are served in its [public repository](https://docs.sourcify.dev/docs/repository/) on HTTP and [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), which is a decentralized, [content-addressed](https://web3.storage/docs/concepts/content-addressing/) storage. This allows fetching the metadata file of a contract over IPFS since the appended metadata hash is an IPFS hash. - -Additionally, one can also retrieve the source code files over IPFS, as IPFS hashes of these files are also found in the metadata. A contract can be verified by providing the metadata file and source files over its API or the [UI](https://sourcify.dev/#/verifier), or using the plugins. Sourcify monitoring tool also listens to contract creations on new blocks and tries to verify the contracts if their metadata and source files are published on IPFS. - -[更多有關 Sourcify 上驗證合約的資訊](https://blog.soliditylang.org/2020/06/25/sourcify-faq/)。 - -### Tenderly {#tenderly} - -The [Tenderly platform](https://tenderly.co/) enables Web3 developers to build, test, monitor, and operate smart contracts. Combining debugging tools with observability and infrastructure building blocks, Tenderly helps developers accelerate smart contract development. To fully enable Tenderly features, developers need to [perform source code verification](https://docs.tenderly.co/monitoring/contract-verification) using several methods. - -私下或公開地驗證合約皆可行。 如果私下驗證,則智慧型合約僅對你(以及專案中的其他成員)可見。 公開驗證合約讓使用 Tenderly 平台的每個人都可見。 - -You can verify your contracts using the [Dashboard](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-a-smart-contract), [Tenderly Hardhat plugin](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-the-tenderly-hardhat-plugin), or [CLI](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-cli). - -When verifying contracts through the Dashboard, you need to import the source file or the metadata file generated by the Solidity compiler, the address/network, and compiler settings. - -Using the Tenderly Hardhat plugin allows for more control over the verification process with less effort, enabling you to choose between automatic (no-code) and manual (code-based) verification. - -## 了解更多 {#further-reading} - -- [驗證合約原始碼](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) diff --git a/public/content/translations/zh-tw/21) Whitepaper/whitepaper/index.md b/public/content/translations/zh-tw/21) Whitepaper/whitepaper/index.md deleted file mode 100644 index 17c5a263eb8..00000000000 --- a/public/content/translations/zh-tw/21) Whitepaper/whitepaper/index.md +++ /dev/null @@ -1,517 +0,0 @@ ---- -title: 以太坊白皮書 -description: 介紹以太坊的白皮書,於 2013 年以太坊正式啟動之前發表。 -lang: zh-tw -sidebarDepth: 2 -hideEditButton: true ---- - -# 以太坊白皮書 {#ethereum-whitepaper} - -_2015 年專案啟動之前,[以太坊](/what-is-ethereum/)創辦人 Vitalik Buterin 於 2014 年首次發表了這篇介紹性白皮書。 值得一提的是,與許多社群驅動的開源軟體專案一樣,以太坊自最初誕生以來一直在不斷發展。_ - -_雖然已經過去多年,我們仍在維護此白皮書,因為此白皮書仍然可以作為有用的參考資料,並準確地表達以太坊及其願景。 要了解以太坊的最新發展以及協定如何更改,我們推薦你參閱[本指南](/learn/)。_ - -[研究人員和學者如需本白皮書歷史或標準版本 [自2014年12月起],應使用此 PDF。](./whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf) - -## 新一代智慧型合約及去中心化應用程式平台 {#a-next-generation-smart-contract-and-decentralized-application-platform} - -中本聰於 2009 年發明的比特幣常被譽為金錢與貨幣領域的革命性發展,作為第一種數位資產的範例,它沒有擔保或「[內在價值](http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/)」,也沒有中心化發行人及掌控者。 然而,比特幣實驗的另一個可以說更重要的部分是作為分佈式共識工具的底層區塊鏈技術,人們的注意力正迅速開始轉移到比特幣的這個面向。 通常提及的區塊鏈技術的其他應用包括使用區塊鏈上的數位資產來代表自訂貨幣和金融工具(「[彩色幣](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)」)、底層實體裝置的所有權(「[智慧財產](https://en.bitcoin.it/wiki/Smart_Property)」)、網域名稱(「[域名幣](http://namecoin.org)」)等非同質化資產,以及一些更複雜的應用,其中涉及由一段實作任意規則的程式碼(「[智慧型合約](http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/idea.html)」)甚至基於區塊鏈的「[去中心化自治組織](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/)」(DAO) 直接控制的數位資產。 以太坊打算提供一條內建完全成熟、圖靈完備的程式設計語言的區塊鏈,該語言可用於建立可用來編碼任意狀態轉換函式的「合約」,從而讓使用者能夠建立上述任何系統,以及許多其他我們尚未想像到的事務,只需用幾行程式碼編寫邏輯即可。 - -## 比特幣及現有概念簡介 {#introduction-to-bitcoin-and-existing-concepts} - -### 歷史 {#history} - -去中心化數位貨幣的概念以及財產登記等其他應用已經存在了幾十年。 1980 年代和 1990 年代的匿名電子現金協定主要依賴於稱為喬姆盲簽 (Chaumian blinding) 的密碼原語,提供了一種具有高度隱私性的貨幣,但這些協定基本上未能獲得關注,因為它們依賴於中心化仲介。 1998 年,戴偉 (Wei Dai) 的 [B-money](http://www.weidai.com/bmoney.txt) 成為第一個提出透過解决計算難題及去中心化共識來創造貨幣之概念的提案,但該提案未提供關於如何實際實作去中心化共識的細節。 2005 年,哈爾·芬尼 (Hal Finney) 提出了「[可重複使用的工作量證明](https://nakamotoinstitute.org/finney/rpow/)」的概念,這個體系使用 B-money 的概念以及亞當·貝克 (Adam Back) 計算難度大的 Hashcash 難題來創造加密貨幣的概念,但由於依賴可信計算作為後端,再次未能達到理想的效果。 2009 年,中本聰將透過公鑰密碼學管理所有權的成熟原語與用於跟踪貨幣所有者的共識演算法相結合,首次真正意義上實作了去中心化貨幣,被稱為「工作量證明」。 - -工作量證明機制是該領域的一項突破,因為它同時解决了兩個問題。 首先,這項機制提供了一種簡單且比較有效的共識演算法,讓網路中的節點能够全體對比特幣帳本狀態的一組規範更新達成一致。 接著,其提供了一種允許自由進入共識過程的機制,解决了决定誰來影響共識的政治問題,同時防止了女巫攻擊。 該機制透過用經濟參與障礙取代正式參與障礙(例如要求作為唯一實體在特定清單上登記)來實現這一點 - 共識投票過程中單一節點的權重與該節點的算力成正比。 從那時起,又提出了一種稱為_權益證明_的替代方法,節點的權重與其持有的貨幣量成正比,不再與計算資源成正比;這兩種方法相對優點的討論不在本文的討論範圍內,但應該指出的是,這兩種方法都可以用作加密貨幣的支柱。 - -### 比特幣作為狀態轉換系統 {#bitcoin-as-a-state-transition-system} - -![以太坊狀態轉換](./ethereum-state-transition.png) - -從技術角度來看,比特幣等加密貨幣的帳本可以被認為是狀態轉換系統,其中存在一個由所有現有比特幣的所有權狀態組成的「狀態」和一個接受狀態和交易並輸出新狀態(即結果)的「狀態轉換函式」。 例如,在標準銀行系統中,狀態是資產負債表,交易是將 $X 從 A 轉移到 B 的請求,狀態轉換函式將 A 帳戶中的價值減少 $X 美元,並將 B 帳戶中的價值增加 $X 美元。 如果 A 的帳戶最初價值少於 $X 美元,則狀態轉換函式將傳回錯誤。 因此,可以正式定義: - -``` -APPLY(S,TX) -> S' or ERROR -``` - -在上面定義的銀行系統中: - -```js -APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 } -``` - -但是: - -```js -APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR -``` - -比特幣中的「狀態」是所有已鑄造但尚未花費的貨幣(從技術上講,「未花費的交易輸出 (UTXO)」)的集合,每個未花費的交易輸出都有一個面額和一個所有者(由 20 位元組地址定義,該地址本質上是一個加密公鑰[fn1](#notes))。 一筆交易包含一個或多個輸入以及一個或多個輸出,每個輸入包含對現有未花費的交易輸出的引用以及由與所有者地址關聯的私鑰生成的加密簽章,而每個輸出包含要新增到狀態的新未花費的交易輸出。 - -狀態轉換函式 `APPLY(S,TX) -> S'` 可以大致定義如下: - -
    -
  1. - 對於 TX 中的每個輸入: -
      -
    • - 如果引用的未花費的交易輸出不在 S 中,則傳回錯誤。 -
    • -
    • - 如果提供的簽章與未花費的交易輸出的所有者不匹配,則傳回錯誤 -
    • -
    -
  2. -
  3. - 如果所有輸入未花費的交易輸出的面值總和小於所有輸出未花費的交易輸出的面值總和,則傳回錯誤。 -
  4. -
  5. - 傳回 S,並刪除所有輸入未花費的交易輸出以及新增所有輸出未花費的交易輸出。 -
  6. -
- -第一步的前半部分防止交易傳送者花費不存在的貨幣,第一步的後半部分防止交易傳送者花費其他人的貨幣,而第二步確保價值守恆。 為了將此用於支付,協定如下。 假設 Alice 想傳送 11.7 BTC 給 Bob。 首先,Alice 將尋找她擁有的一組可用的未花費的交易輸出,總計至少為 11.7 BTC。 實際上,Alice 無法剛剛好獲得 11.7 BTC;假設她能得到的最小數是 6+4+2=12。 然後,她使用這三個輸入和兩個輸出來建立一個交易。 第一個輸出將為 11.7 BTC 且以 Bod 的地址作為其所有者,而第二個輸出為餘下的 0.3 BTC「零頭」且所有者為 Alice。 - -### 挖礦 {#mining} - -![以太坊區塊](./ethereum-blocks.png) - -如果我們能夠存取值得信賴的中心化服務,那麼該系統的實作將很簡單;它可以簡單地按照描述進行編碼,使用中心化伺服器的硬碟來追蹤狀態。 然而,透過比特幣,我們試圖構建一個去中心化貨幣系統,因此我們需要將狀態交易系統與共識系統結合起來,以確保每個人都同意交易順序。 比特幣的去中心化共識過程要求網路中的節點不斷嘗試產生稱為「區塊」的交易包。 該網路嘗試大約每十分鐘生成一個區塊,每個區塊包含一個時間戳記、一個隨機數、對前一個區塊的引用(即雜湊值)以及自前一個區塊以來發生的所有交易的清單。 隨著時間的推移,這會建立一個持久的、不斷增長的「區塊鏈」,區塊鏈會不斷更新以代表比特幣帳本的最新狀態。 - -在這個範例中,檢查區塊是否有效的演算法如下: - -1. 確認區塊引用之前一區塊是否存在並有效。 -2. 確認區塊的時間戳記是否大於前一個區塊的時間戳記 [fn2](#notes) 並且在未來的 2 小時內。 -3. 確認區塊上的工作量證明是否有效。 -4. 使 `S[0]` 為前一個區塊末端的狀態。 -5. 假設 `TX` 是區塊的交易清單,其中有 `n` 個交易。 對於 `0...n-1` 中的所有 `i`,設定 `S[i+1] = APPLY(S[i],TX[i])`。如果任何應用程式傳回錯誤,則結束並傳回 false。 -6. 傳回 true,並將 <0>S[n] 註冊為該區塊末端的狀態。 - -本質上,區塊中的每個交易都必須提供一個有效的狀態轉換,即從交易執行之前的規範狀態轉換到某個新狀態。 請注意,狀態不會以任何方式編碼在區塊中;它純粹是驗證節點要記住的抽象,並且只能透過從創世狀態開始並順序應用每個區塊中的每個交易來(安全地)計算任何區塊。 此外,請注意,礦工將交易放入區塊的順序很重要;如果一個區塊中有兩個交易 A 和 B,並且 B 花費了 A 創造的未花費的交易輸出,那麼如果 A 出現在 B 之前,則該區塊將有效,否則無效。 - -上述清單中存在的而在其他系統中沒有的一個有效性條件是對「工作量證明」的要求。 具體的條件是,每個區塊的雙 SHA256 雜湊值(為 256 位元數字)必須小於動態調整的目標,截至撰寫本文時約為 2187。 這樣做的目的是使區塊建立在計算上變得「困難」,從而防止女巫攻擊者為取得利益而重建整個區塊鏈。 由於 SHA256 被設計為完全不可預測的偽隨機函式,因此建立有效區塊的唯一方法只不過是 試錯法,即重複增加隨機數並查看新的雜湊值是否匹配。 - -在目前目標大約為 2187 下,網路必須平均嘗試大致 269 次才能找到有效區塊;一般來說,網路每 2016 個區塊就會重新校準一次目標,因此網路中的某個節點平均每十分鐘就會產生一個新區塊。 為了就此項計算工作補償礦工,每個區塊的礦工都有權包含一筆交易,獎勵曠工 25 BTC。 此外,如果任何交易的輸入總面額高於其輸出,則差額也會作為「交易費」轉給礦工。 順便說一句,這也是比特幣的唯一發行機制;創世狀態根本不包含比特幣。 - -為了更加瞭解挖礦的意義,讓我們先分析當比特幣網路遭惡意攻擊時會發生甚麼情況。 由於比特幣的底層加密技術是安全的,因此攻擊者將攻擊比特幣系統中不受加密技術直接保護的部分:交易順序。 攻擊者之策略十分簡單: - -1. 向商家傳送 100 BTC 以換取某些產品(最好是快速交付的數位商品) -2. 等待產品交付 -3. 產生另一筆交易,將同一 100 BTC 傳送給他自己 -4. 試著讓網路相信他對自己的交易是先發生的。 - -一旦步驟 (1) 發生,幾分鐘後,一些礦工會將交易包含在一個區塊中,例如區塊編號 270000。 大約一小時後,在該區塊之後,鏈上將新增另外五個區塊,其中每個區塊都間接指向該交易,從而「確認」該交易。 此時,商家將接受最終確定的付款並交付產品;由於我們假設這是一種數位商品,因此交付即時完成。 現在,攻擊者建立另一筆交易,將這 100 BTC 傳送給自己。 如果攻擊者只是向全網廣播這一資訊,則交易將不會被處理;礦工將嘗試執行 `APPLY(S,TX)` 並將注意到 `TX` 消耗了不再處於該狀態的未花費的交易輸出。 因此,攻擊者會建立區塊鏈的「分叉」,首先挖掘另一版本的區塊 270000,讓其指向同一父塊 269999,並用新交易取代舊交易。 因為區塊資料不同,這就需要重新進行工作量證明。 此外,攻擊者的新版本區塊 270000 具有不同的雜湊值,因此原始區塊 270001 至 270005 不會「指向」該區塊;因此,原始鏈和攻擊者的新鏈是完全分開的。 規則是,在分叉時,最長的區塊鏈被視為正確的鏈,因此合法礦工將處理 270005 鏈,而攻擊者獨自處理 270000 鏈。 攻擊者為了使其區塊鏈最長,需要擁有比網路其他部分加起來還要多的算力才能偽裝成正確的鏈(因此,被稱為「51% 攻擊」)。 - -### 默克爾樹 {#merkle-trees} - -![比特幣簡單支付驗證](./spv-bitcoin.png) - -_左:只需在默克爾樹中呈現少量節點即可證明分支的有效性。_ - -_右:改變默克爾樹的任何部分的任何嘗試最終都會導致鏈上某個地方的不一致。_ - -比特幣的一個重要的可擴展性特徵是區塊儲存在多層資料結構中。 區塊的「雜湊值」實際上只是區塊頭的雜湊值,區塊頭是一段大約 200 位元組的資料,其中包含時間戳記、隨機數、前一個區塊的雜湊值以及儲存區塊中所有交易的資料結構(稱為默克爾樹)的根雜湊值。 默克爾樹是一種二元樹,包括一組擁有大量葉節點的節點(這些葉節點位於樹底部儲存著底層資料),一組中間節點(其中每個節點都是其兩個子節點的雜湊值),以及一個代表樹的「頂部」的根節點(根節點亦由其兩個子節點的雜湊值組成)。 默克爾樹的用途是允許區塊中的資料分段傳送:節點可以只從一個來源下載區塊頭,從另一個來源下載與它們相關的樹的一小部分,並且仍然可以確認所有資料都正確。 這樣做的原因是雜湊值向上傳播:如果惡意使用者嘗試將虛假交易交換到默克爾樹的底部,則此變更將導致上面的節點發生變化,然後導致該節點上面的節點發生變化,最終改變樹的根,從而改變區塊的雜湊值,導致協定將其註冊為完全不同的區塊(幾乎確定包含無效的工作量證明)。 - -默克爾樹協定可以說對於長期永續性至關重要。 截至 2014 年 4 月,比特幣網路中的「全節點」(儲存和處理每個區塊的全部資料)佔用比特幣網路中約 15 GB 的磁碟空間,並且每月增長超過 1 GB。 目前,這對於某些桌上型電腦是可行的但不適用行動電話,將來只有企業和業餘愛好者才能參與。 一種稱為「簡單支付驗證」(SPV) 的協定允許存在另一類稱為「輕節點」的節點,這種節點下載區塊頭,驗證區塊頭上的工作量證明,並僅下載與其相關的交易的相關「分支」。 這使得輕節點能夠在強力的安全保證下確定任何比特幣交易的狀態及其目前餘額,同時僅下載整個區塊鏈的極一小部分。 - -### 其他區塊鏈應用 {#alternative-blockchain-applications} - -將區塊鏈底層理念應用於其他概念的想法也有著很長的歷史。 2005 年,尼克·薩博 (Nick Szabo) 提出了「利用所有者權限確保財產權」的概念,該文件描述了「複製資料庫技術的新進展」將如何允許基於區塊鏈的系統來儲存誰擁有哪些土地的登記表,建立一個包括宅基地、逆權管有和喬治亞土地稅等概念的複雜架構。 然而,不幸的是,當時沒有有效的複製資料庫系統可用,因此該協定從未在實踐中實作。 然而,2009 年之後,在比特幣的去中心化共識開發出來後,許多其他應用迅速開始出現。 - -- **域名幣** - 建立於 2010 年,[域名幣](https://namecoin.org/)描述為去中心化名稱註冊資料庫最為恰當。 在 Tor、比特幣和 BitMessage 等去中心化協議中,需要某種方式來識別帳戶,以便其他人可以與這些帳戶互動,但在所有現有解決方案中,唯一可用的標識符是偽隨機雜湊值,如 `1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy`。 理想情況下,人們希望能夠擁有具有名稱的帳戶,例如「george」。 但問題是,如果一個人可以建立名為「george」的帳戶,那麼其他人也可以使用相同的流程為自己註冊「george」並冒充他人。 唯一的解決方案是「首先申請」範式,其中第一個註冊者成功,第二個註冊者失敗 - 這個範式非常適合比特幣共識協定。 域名幣是使用這種概念的最早、最成功的名稱註冊系統的實作。 -- **彩色幣** - [彩色幣](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit)用作一種協議,讓人們能夠在區塊鏈上建立自己的數位貨幣 - 或者,在重要但瑣碎的情況下,建立數位代幣。 在彩色幣協議中,透過公開為特定的比特幣未花費的交易輸出指定顏色來「發行」一種新貨幣,並且該協議遞迴地將其他未花費的交易輸出的顏色定義為與創建這些未花費的交易輸出之交易所花費的輸入相同的顏色(一些特殊規則適用於混合顏色輸入的情況)。 這讓使用者能夠維護僅包含特定顏色的未花費的交易輸出的錢包,並像普通比特幣一樣傳送未花費的交易輸出,透過區塊鏈回溯以確定他們收到的任何未花費的交易輸出的顏色。 -- **元幣** - 元幣背後的想法是擁有一個基於比特幣的協議,使用比特幣交易來儲存元幣交易,但具有不同的狀態轉換函數 `APPLY'`。 由於元幣協議無法阻止比特幣區塊鏈中出現無效的元幣交易,因此增加了一條規則,即如果 `APPLY'(S,TX)` 傳回錯誤,則協議預設為 `APPLY'(S,TX) = S` 這為建立任意加密貨幣協議提供了一種簡單的機制,可能具有無法在比特幣本身內部實現的先進功能,且開發成本非常低,因為比特幣協議已經處理了挖礦和網路的複雜性。 元幣已被用於實作某些類別的金融合約、名稱註冊和去中心化交易。 - -因此,一般來說,建立共識協議有兩種方法:建立獨立網路以及在比特幣之上建立協議。 前一種方法雖然在域名幣等應用中相當成功,但很難實作;每個單獨的實作都需要啟動一個獨立的區塊鏈,以及建立和測試所有必要的狀態轉換和網路程式碼。 此外,我們預測去中心化共識技術的應用程式集將遵循冪律分布,其中絕大多數應用程式太小而無法保證自己的區塊鏈,並且我們注意到存在大量需要相互互動的去中心化應用程式,特別是去中心化自治組織。 - -另一方面,基於比特幣的方法有缺陷,即它沒有繼承比特幣的簡單支付驗證功能。 簡單支付驗證適用於比特幣,因為它可以使用區塊鏈深度作為有效性的代理;在某種程度上,只要交易的祖先可以追溯到足夠久遠的時間,就可以安全地認為它們是合法狀態的一部分。 另一方面,基於區塊鏈的元幣協議不能迫使區塊鏈排除在其自己的協議中無效的交易。 因此,完全安全的簡單支付驗證元幣協議實作需要向後一致掃描到比特幣區塊鏈的開頭,以確定某些交易是否有效。 目前,基於比特幣的元幣協議的所有「輕型」實作都依賴受信任的伺服器來提供資料,這可以說是一個非常次優的結果,特別是當加密貨幣的主要目的之一是消除信任需求。 - -### 腳本 {#scripting} - -即使沒有任何擴充功能,比特幣協議實際上也構成了弱化版本的「智慧型合約」。 比特幣中的未花費的交易輸出不僅可以由公鑰擁有,還可以由用簡單的基於堆疊的程式語言編寫的更複雜的腳本擁有。 在這個範式中,一筆花費該未花費的交易輸出的交易必須提供滿足腳本的資料。 事實上,即使是基本的公鑰所有權機制也是透過指令碼實作的:腳本將橢圓曲線簽章作為輸入,根據交易和擁有未花費的交易輸出的位址對其進行驗證,並且如果驗證成功則傳回 1,否則傳回 0。 對於各種附加使用案例,還有其他更複雜的腳本。 例如,可以建構一個腳本,要求要驗證的給定三個私鑰中的兩個私鑰的簽章(「多簽」),這是一種對公司帳戶、安全儲蓄帳戶和某些商家託管情況有用的設定。 腳本還可以用於支付計算問題解決方案的賞金,人們甚至可以建構一個腳本,上面寫著「如果你能提供簡單支付驗證證明,證明你向我傳送了該面額的狗狗幣交易,那麼這個比特幣未花費的交易輸出就是你的」,本質上允許去中心化的加密貨幣間的兌換。 - -然而,比特幣中實作的腳本語言有幾個重要限制: - -- **缺乏圖零完整性** - 也就是說,雖然比特幣腳本語言支援很大一部分計算,但它幾乎不支援其他東西。 最主要的問題是缺乏迴圈。 這樣做是為了避免在交易驗證過程中出現無限迴圈;從理論上講,這對腳本程式設計師來說是一個可以克服的障礙,因為任何迴圈都可以透過簡單地使用 if 語句多次重複底層程式碼來模擬,但它確實會導致腳本空間效率非常低。 例如,實作替代的橢圓曲線簽章演算法可能需要 256 次重複乘法輪次,所有輪次都單獨包含在程式碼中。 -- **價值盲** - 未花費的交易輸出腳本無法對可提取金額作精細控制。 例如,預言機合約的一個強大用例是對沖合約,其中 A 和 B 存入了價值 $1000 的比特幣,30 天後,腳本將價值 $1000 的比特幣傳送給 A,其餘的傳送給 B。這需要預言機來確定 1 個比特幣的美元價值,但即便如此,與現有的完全中心化解決方案相比,它在信任和基礎設施要求方面還是一個巨大改進。 然而,由於未花費的交易輸出是全有或全無的,實現這一點的唯一方法是透過非常低效的破解手段,即擁有許多不同面額的未花費的交易輸出(例如,對於每個最多可達 30 的 k,有一個 2k 的未花費的交易輸出)並讓預言機選擇將哪個未花費的交易輸出傳送給 A,將哪個未花費的交易輸出傳送給 B。 -- **缺少狀態** - 未花費的交易輸出要麼是已使用,要麼是未使用;用於保存任何其他內部狀態的多階段合約或腳本是沒有機會出現的。 這會使得難以創建多階段期權合約、去中心化交易報價或兩階段加密承諾協定(為安全計算賞金必需)。 這也意味著未花費的交易輸出只能用於建構簡單的一次性合約,而不是去中心化組織等更複雜的「有狀態」合約,並且讓元協定難以實作。 二元狀態加上價值盲也意味著另一個重要應用(提款限制)是不可能實現的。 -- **區塊鏈盲** - 未花費的交易輸出看不到區塊鏈的資料,例如隨機數、時間戳記和上一個區塊的雜湊值。 由於該腳本語言無法透過隨機性來創造可能的價值,因此它在博彩和其他幾個類別的應用受到嚴重限制。 - -這樣,我們瞭解了在加密貨幣之上建立進階應用程式的三種方法:構建新的區塊鏈、在比特幣之上使用腳本以及在比特幣之上構建元協定。 構建新的區塊鏈可以在建立功能集方面提供無限的自由,但需要犧牲開發時間、啟動工作和安全性。 使用腳本這一方法很容易實作和標準化,但其功能非常有限,而且元協定雖然簡單,但在可擴展性方面存在缺陷。 透過以太坊,我們打算建立一個替代架構,使得開發更簡單、輕量用戶端性能更強大,同時允許應用程式共享經濟的環境和區塊鏈安全性。 - -## Ethereum {#ethereum} - -以太坊的目的是創造一個用於構建去中心化應用程式的替代協定,提供一套我們認為對於一大類去中心化應用程式非常有用的不同折衷方案,特別是快速開發時間、小型和不常用應用程式的安全性以及應用程式間高效互動能力很重要的情形。 以太坊透過建立本質上的終極抽象基礎層來實現這一點:具有內建圖靈完整程式語言的區塊鏈,允許任何人編寫智慧型合約和去中心化應用程式,他們可以在其中建立自己的所有權、交易格式和狀態轉換函式的任意規則。 域名幣的基本版本可以用兩行程式碼編寫,而貨幣和信譽系統等其他協定的構建需要不超過二十行程式碼。 智慧型合約是包含價值的加密「盒子」,只有在滿足某些條件時才解鎖,也可以構建在平台之上,由於圖零完整性、價值意識、區塊鏈意識和狀態的附加功能,其功能比比特幣腳本提供的功能要強大得多。 - -### 以太坊帳戶 {#ethereum-accounts} - -在以太坊中,狀態由稱為「帳戶」的物件組成,每個帳戶都有一個 20 位元組地址,並且狀態轉換是帳戶之間價值和資訊的直接轉移。 以太坊帳戶包含四個欄位: - -- **隨機數**,用來確定每個交易只能被處理一次的計數器 -- 帳戶目前的**以太幣餘額** -- 帳戶的**合約程式碼**(如存在) -- 帳戶的**存儲**(預設值為空白) - -「以太幣」是以太坊的主要內部加密燃料,用於支付交易費。 一般來說,有兩種類型的帳戶:由私鑰控制的**外部帳戶**,以及由合約程式碼控制的**合約帳戶**。 外部帳戶沒有程式碼,可以藉由建立和簽署交易,從外部帳戶送出訊息;在合約帳戶中,合約帳戶每次收到訊息後,其程式碼啟動,允許其讀取和寫入內部存儲,以及送出其他訊息或依次建立合約。 - -請注意,以太坊中的「合約」不應被視為應該「履行」或「遵守」的東西;相反,「合約」更像是生活在以太坊執行環境中的「自治代理」,當被訊息或交易「觸發」時總是執行特定的程式碼片段,並直接控制自己的以太幣餘額和自己的鍵/值存儲來追蹤持久變數。 - -### 訊息及交易 {#messages-and-transactions} - -以太坊中使用的術語「交易」是指已簽署資料包,其中儲存將從外部帳戶發送的訊息。 交易包含: - -- 訊息接收者 -- 識別發送者的簽章 -- 從發送者轉移到接收者的以太幣數量 -- 一可選數據段量 -- `STARTGAS` 值,表示交易執行允許使用的計算步驟之最大數量 -- `GASPRICE` 值,表示發送者為每個計算步驟支付的費用 - -前三個欄位是任何加密貨幣應有的標準欄位。 預設情況下資料欄位沒有函式,但虛擬機有操作碼,合約可以用操作碼來存取資料。例如,如果一個合約作為區塊鏈上的網域註冊服務,該合約可能希望將傳遞給它的資料解釋為含有兩個「欄位」,第一個欄位是要註冊的網域,第二個欄位是要註冊到的網際網路通訊協定地址。 合約將從訊息資料中讀取這些數值並且適當存儲。 - -`STARTGAS` 和 `GASPRICE` 欄位對以太坊的反拒絕服務模型很重要。 為了防止程式碼中出現意外或惡意的無限迴圈或其他計算浪費,每個交易都需要設定其可以使用的程式碼執行計算步驟數的限制。 計算的基本單位是「燃料」;通常,一個計算步驟花費 1 份燃料,但某些操作會花費更多的燃料,因為它們的計算成本更高,或者增加了必須作為狀態一部分儲存的資料量。 交易資料中每個位元組還需支付 5 份燃料。 收費系統的目的是要求攻擊者按比例為其消耗的每種資源付費,包括計算、頻寬和存儲;因此,任何導致網路消耗更多資源的交易都必須有與增量大致成正比的燃料費。 - -### 訊息 {#messages} - -合約能夠傳送「訊息」至其他合約。 訊息是虛擬物件,永遠不會被序列化且只存在以太坊的執行環境中。 訊息包含: - -- 訊息的發送者(隱含) -- 訊息接收者 -- 與訊息一起傳輸的以太幣數量 -- 一個可選擇的資料欄位 -- <0>STARTGAS 值 - -訊息與交易基本相似,但是訊息是由合約產生的,而不是由外部執行者產生。 當目前執行程式碼的合約執行 `CALL` 操作碼時,就會產生一則訊息,該操作碼會產生並執行一則訊息。 與交易一樣,訊息會使得接收者帳戶執行其程式碼。 因此,如同外部參與者與其他合約建立的關係一樣,合約可以與其他合約建立完全相同的關係。 - -請注意,交易或合約指定的燃料限額適用於該交易和所有子執行消耗的燃料總量。 例如:假如外部參與者 A 以 1000 份燃料發送交易給 B,在發送訊息給 C 之前 B 消費 600 份燃料,在返回前 C 的內部執行消耗 300 份燃料,然後,在用完燃料之前 B 還可以再花掉另外 100 份燃料。 - -### 以太坊狀態轉換函式 {#ethereum-state-transition-function} - -![以太幣狀態轉換](./ether-state-transition.png) - -以太坊狀態轉換函式 `APPLY(S,TX) -> S'` 可以定義如下: - -1. 檢查交易格式是否正確(即擁有正確數量的值)、簽章是否有效、以及隨機數是否匹配發送者帳戶中的隨機數。 如果為否,則傳回錯誤。 -2. 透過 `STARTGAS * GASPRICE` 計算出交易費,並從簽章中確定發送地址。 從發送者的帳戶餘額中減去費用並增加發送者的隨機數。 如果沒有足夠餘額可供使用,則傳回錯誤。 -3. 初始化 `GAS = STARTGAS`,並根據交易中的位元組數量為每個位元組扣除相應數量的燃料。 -4. 將交易數值從發送者帳戶轉移至接收帳戶。 如果接收帳戶尚不存在,則建立此帳戶。 如果接收帳戶是合約,執行該合約的程式碼直到運行結束或耗盡燃料。 -5. 如果因發送者資金不足或程式碼運行耗盡了燃料而導致轉帳失敗,則還原除支付費用之外的所有狀態變化,並將費用支付給礦工帳戶。 -6. 否則,將所有剩餘燃料的費用退還給發送者,並把為所消耗燃料而支付的費用發送給礦工。 - -例如,假設合約程式碼如下: - -```py -if !self.storage[calldataload(0)]: - self.storage[calldataload(0)] = calldataload(32) -``` - -請注意,合約程式碼實際上是用低階以太坊虛擬機程式碼編寫的;為清晰起見,此範例是用我們其中一種高階語言 Serpent 編寫的,它可以編譯為以太坊虛擬機程式碼。 假設合約的儲存一開始是空的,並發送了一個價值為 10 個以太幣的交易,消耗 2000 份燃料,燃料價格為 0.001 個以太幣,並且包含 64 位元組的資料,其中位元組 0-31 代表數字 `2`,位元組 32-63 代表字串 `CHARLIE`。 這種情況下,狀態轉移函式之流程如下: - -1. 檢查交易是否有效且格式正確。 -2. 檢查交易發送者是否至少有 2000 \* 0.001 = 2 以太幣。 如是,則從發送者的帳戶中減去 2 以太幣。 -3. 初始化燃料 = 2000,假設交易長度為 170 個位元組,每個位元組費用為 5 份燃料,減去 850 份燃料,因此剩下 1150 份燃料。 -4. 從發送者的帳戶中再減去 10 個以太幣,並將其新增至合約帳戶。 -5. 執行程式碼。 在本例中,執行過程比較簡單:函式檢查是否使用合約位於索引 `2` 的儲存,若未使用,則通知未使用;若使用,函式將位於索引 `2` 的存儲設定為值 `CHARLIE`。 假設執行過程花費 187 份燃料,那麼剩餘的燃料數量為 1150 - 187 = 963 -6. 將 963 \* 0.001 = 0.963 以太幣新增回發送者的帳戶,並傳回產生的狀態。 - -如果交易的接收一端沒有合約,那麼總交易費就等於提供的 `GASPRICE` 乘以交易的位元組長度,且和隨交易發送的資料無關。 - -請注意,訊息在還原方面與交易相同:如果訊息執行耗盡燃料,那麼該訊息的執行以及該執行觸發的所有其他執行都會還原,但父執行不需還原。 這意味著合約呼叫另一份合約是「安全的」,就好像 A 使用 G 份燃料呼叫 B,那麼可以保證 A 的執行最多損耗 G 份燃料。 最後,請注意有一個建立合約的操作碼 `CREATE`;它的執行機制通常類似於 `CALL`,不同之處在於執行的輸出決定了新建立合約的程式碼。 - -### 程式碼執行 {#code-execution} - -以太坊合約中的程式碼是用一種基於堆疊的低階位元組碼語言編寫,被稱為「以太坊虛擬機器程式碼」或「EVM 程式碼」。 該程式碼由一系列位元組組成,每個位元組代表一種操作。 通常,程式碼執行是一個無限迴圈,即重複執行當前程式計數器(由零開始)的操作,然後將程式計數器增加一,直到程式碼執行完畢或出現錯誤,或偵測到 `STOP` 或 `RETURN` 指令。 這些操作可以存取三種資料儲存空間: - -- ** 堆疊**,一種後進先出的資料容器,允許對資料做推入與彈出 -- **記憶體**,一個可無限擴充的位元組陣列 -- 合約的長期**存儲**,一個鍵/值儲存。 跟堆疊和記憶體會在計算結束後重置不同,存儲將長期持續存在。 - -程式碼也能存取傳入訊息的值、發送者與資料,以及區塊頭資料,並且程式碼也可以傳回資料位元組陣列作為輸出。 - -以太坊虛擬機程式碼的正式執行模型非常簡單。 當以太坊虛擬機運作時,其完整計算狀態可以由元組 `(block_state, transaction, message, code, memory, stack, pc, gas)` 來定義,其中 `block_state` 是包含所有帳戶的全域狀態並包含餘額和存儲。 在每一輪執行開始時,可以透過使用 `code` 的第 `pc` 個位元組(或 0,如果 `pc >= len(code)`)來找到當前指令,並且每條指令在元組影響方式方面都有自己的定義。 例如,`ADD` 將兩個項目彈出並將它們的和推入堆疊,將 `gas` 減少 1 並將 `pc` 增加1,`SSTORE` 將頂部的兩個項目彈出並將第二個項目插入合約存儲中第一個項目指定的索引處。 雖然有很多透過即時編譯來最佳化以太坊虛擬機執行的方法,但只需幾百行程式碼就可以完成以太坊的基本實作。 - -### 區塊鏈及挖礦 {#blockchain-and-mining} - -![以太坊應用框圖](./ethereum-apply-block-diagram.png) - -以太坊區塊鏈在許多方面與比特幣區塊鏈相似,雖然確實存在一些差異。 以太坊和比特幣在區塊鏈架構方面的主要區別在於,與比特幣不同,以太坊區塊包含交易清單和最新狀態的副本。 除此之外,另外兩個數值,即區塊編號和難度,也儲存在區塊中。 以太坊中基本的區塊驗證演算法如下: - -1. 檢查引用的前一個區塊是否存在並且有效。 -2. 檢查區塊的時間戳記是否大於引用的前一個區塊的時間戳記,並且在未來的 15 分鐘內。 -3. 檢查區塊編號、難度、交易根、叔根和燃料限制(各種以太坊特定的低階概念)是否有效。 -4. 確認區塊上的工作量證明是否有效。 -5. 使`S[0]`為前任區塊之最終狀態. -6. 令 `TX` 為區塊的交易清單,並且包含 `n` 筆交易。 對於 `0...n-1` 中的所有 `i`,設定 `S[i+1] = APPLY(S[i],TX[i])`。 如果任何應用程式傳回錯誤,或直到此時區塊中消耗的總燃料量超過 `GASLIMIT`,則傳回錯誤。 -7. 令 `S_FINAL` 為 `S[n]`,但加上支付給礦工的區塊獎勵。 -8. 檢查狀態 `S_FINAL` 的默克爾樹根是否等於區塊頭中提供的最終狀態根。 如果為是,則該區塊有效;否則該區塊無效。 - -這種方法乍看似乎效率很低,因為它需要儲存每個區塊的完整狀態,但實際上效率應該與比特幣相當。 原因是狀態儲存在樹狀結構中,而且在新增每個區塊後只需要更改樹的一小部分。 因此,一般來說在兩個相鄰區塊之間,樹的絕大部分應該是相同的,因此資料可以儲存一次並使用指標引用兩次(即子樹的雜湊值)。 一種稱為「帕特里夏樹」的特殊類型的樹用於實現此目的,它包括對默克爾樹概念的修改,允許高效地插入和刪除節點,而非僅僅更改。 此外,由於所有狀態資訊都存在於最後一個區塊內,因此無需儲存整個區塊鏈歷史 - 如果此策略可以應用於比特幣,可以節省 5-20 倍空間。 - -一個常見的問題是合約程式碼在實體硬體的「哪裡」執行。 這有一個簡單答案:合約程式碼的執行過程是狀態轉換函式定義的一部分,而該函式是區塊驗證演算法的一部分,因此若將交易新增到區塊 `B` 中,由該交易產生的程式碼執行將在現在和未來由所有節點執行,由此下載並驗證區塊 `B`。 - -## 應用 {#applications} - -基本上,以太坊上擁有三類應用。 第一類是金融應用,為使用者提供更強大的方式使用他們的資金來管理和簽訂合約。 這包括子貨幣、金融衍生品、對沖合約、儲蓄錢包、遺囑,甚至某些類別的完整僱傭合約。 第二類是涉及金錢的半金融應用,但很大部分功能也與資金無關;一個恰當的例子是針對解決計算難題的自動執行的懸賞。 最後,還有一些非金融性質的應用,例如線上投票和去中心化治理。 - -### 代幣系統 {#token-systems} - -區塊鏈上的代幣系統有許多應用,從代表美元或黃金等資產的子貨幣到公司股票等等,單一代幣可以代表智慧資產、安全且不可偽造的優惠券,甚至可代表作為激勵積分系統並與傳統價值完全沒有關聯的代幣系統。 代幣系統在以太坊的實作非常容易。 要理解的重點是所有貨幣或代幣系統,從根本上都是具有以下操作的資料庫:從 A 中減去 X 個單位並將 X 個單位新增給 B,附帶條件是 (1) A 在交易前至少有 X 個單位且 (2) 交易由 A 批准。實作代幣系統所需要做的就是將此邏輯實作到合約中。 - -使用 Serpent 實作代幣系統的基本程式碼如下: - -```py -def send(to, value): - if self.storage[msg.sender] >= value: - self.storage[msg.sender] = self.storage[msg.sender] - value - self.storage[to] = self.storage[to] + value -``` - -此程式碼本質上是本文檔前面部分詳細描述的「銀行系統」狀態轉換函式的字面實作。 需要額外添加幾行程式碼來規定,在最初以及其他一些邊緣案例下分配貨幣單位的初始步驟。理想情況下,應該新增一個函式讓其他合約查詢某個地址的餘額。 但這就是全部了。 理論上,基於以太坊的代幣系統在作為子貨幣時可能具有另一個重要特徵,該特徵是基於比特幣的鏈上元貨幣所缺乏的:就是直接以該貨幣支付交易費的能力。 實作這點的方式是合約會保持一定數量的以太幣餘額,用來向發送者退還用於支付費用的以太幣,合約也會透過收取費用的形式收集內部貨幣單位,並在持續不斷的拍賣中轉售貨幣,以此補充以太幣餘額。 因此,使用者需要用以太幣「啟動」他們的帳戶,但一旦帳戶中有以太幣,就可以重複使用,因為合約每次都會向帳戶退還資金。 - -### 金融衍生物及穩定價值貨幣 {#financial-derivatives-and-stable-value-currencies} - -金融衍生物是「智慧型合約」最常見的應用,也是最容易以程式碼實作的應用之一。 實作金融合約的主要挑戰在於,其中大多數合約都需要引用外部價格行情指示器;例如,一個非常理想的應用程式是對沖以太幣(或其他加密貨幣)相對於美元波動的智慧型合約,而這需要合約知道以太幣/美元的價值。 實現這一點的最簡單方法是藉助由特定方(例如納斯達克)維護的「資料饋送」合約,這種合約的設計讓特定方能夠根據需要更新合約並提供一個介面,允許其他合約向該合約發送訊息並傳回包含價格的回覆。 - -考慮到這一關鍵因素,對沖合約將如下所示: - -1. 等待 A 方輸入 1000 個以太幣。 -2. 等待 B 方輸入 1000 個以太幣。 -3. 將透過查詢資料饋送合約計算出的 1000 個以太幣的美元價值記錄在存儲中,假設為 $x。 -4. 30 天後,允許 A 或 B 「重新啟動」合約,以便將價值 $x 美元的以太幣(通過再次查詢資料饋送合約以獲得新價格來計算得出)發送給 A,並將其餘的發送給 B。 - -這種合約在加密貨幣商業上具有巨大潛力。 加密貨幣的主要問題之一是它的波動性。雖然許多使用者和商家可能希望獲得處理加密資產的安全性和便利性,但他們中許多人不希望面臨在一天內資金價值損失 23% 的景象。 目前為止,最常見的解決方案是發行者支持的資產;其想法是發行者創建一種子貨幣,他們有權發行和撤銷這種子貨幣單位,並且對於向發行者(離線)提供一個單位指定基礎資產(例如黃金、美元)的任何人,發行者可以向其(離線)提供一個單位的貨幣。 發行者然後承諾向返還一個單位加密資產的任何人提供一個單位基礎資產。 這種機制讓任何非加密資產「升級」為加密資產,前提為發行者是可信的。 - -然而實際上,發行者並不總是值得信賴,在某些情況下銀行基礎設施過於薄弱或過於不友好,以至無法提供此類服務。 金融衍生物提供了另一種選擇。 這種方案中,不是由單一發行者提供資金來支持資產,而是由一個去中心化的投機者市場承擔了這個角色,他們押注加密參考資產(例如以太幣)的價格會上漲。 與發行者不同,投機者無法在交易中違約,因為對沖合約託管他們的資金。 注意這種方法不是完全去中心化的,因為仍然需要一個可信來源提供價格行情指示器,但可以說在降低基礎設施要求(與發行者不同,發布價格饋送不需要許可證並且可能被歸類為言論自由)以及減少詐欺的可能性方面,這仍是一個巨大改進。 - -### 身分及信譽系統 {#identity-and-reputation-systems} - -最早的替代加密貨幣[域名幣](http://namecoin.org/),嘗試使用類似比特幣的區塊鏈提供一種名稱註冊系統,讓使用者可以在公共資料庫中註冊他們的姓名和其他資料。 主要用例是[網域名稱系統](https://wikipedia.org/wiki/Domain_Name_System),它將諸如「bitcoin.org」等域名(在域名幣的情況下,「bitcoin.bit」)映射到一個網際網路通訊協定地址。 其他用例包括電子郵件身份驗證系統和可能更高階的信譽系統。 以下是在以太坊上提供類似域名幣的名稱註冊系統的基本合約: - -```py -def register(name, value): - if !self.storage[name]: - self.storage[name] = value -``` - -合約非常簡單;它就是以太坊網路中的一個資料庫,可以向其中新增但不能修改或移除。 任何人都可以把名稱註冊為一個值,並且該註冊將永遠保留。 更複雜的名稱註冊合約還將具有允許其他合約查詢的「函式子句」,以及允許名稱「所有者」(即首個註冊者)更改資料或轉讓所有權的機制。 甚至可以在該合約上添加信譽和信任網路功能。 - -### 去中心化檔案存儲 {#decentralized-file-storage} - -過去幾年,大批受歡迎的線上檔案存儲新創公司不斷湧現,其中最著名的是 Dropbox。這家公司想讓使用者能夠上傳硬碟備份、提供備份儲存服務並允許使用者存取備份來收取月費。 然而,目前檔案存儲市場其實效率相對較低。在粗略了解各種現有解決方案後會發現,主流檔案存儲的月費比整個硬碟的成本還要高,特別是在被稱為「恐怖谷」的 20-200 GB 級別,既沒有免費額度也沒有企業級折扣。 以太坊合約讓去中心化檔案存儲生態系統得以發展,個人使用者可以將自己的硬碟租出去以獲得少量收益,而未使用的空間可用於進一步降低檔案存儲成本。 - -這個系統的關鍵組成部分就是我們所謂的「去中心化 Dropbox 合約」。 該合約的運作方式如下。 首先,使用者將需要將存儲的資料拆分成幾個區塊並對每個區塊加密以保護隱私,然後以此構建一個梅克爾樹。 然後建立一個包含以下規則的合約,對於每 N 個區塊,合約將從默克爾樹中選擇一個隨機索引(使用能夠被合約程式碼存取的上一個區塊的雜湊值作為隨機性來源),然後給予第一個實體 X 個以太幣,以提供包含簡單支付驗證(例如位於樹中特定索引處區塊的所有權證明)的交易。 當使用者想重新下載他們的檔案時,他們可以使用微支付通道協定(例如每 32 KB 支付 1 個szabo)恢復檔案;最節省費用的方法是支付者不到最後不發布交易,而是每 32 KB 後用一個更划算的、具有相同隨機數的交易取代原來的交易。 - -該協定的一個重要特點是,雖然似乎使用者相信許多隨機節點不會丟失檔案,但可以透過以下方法將這種風險降低到接近零:透過私鑰共享將檔案拆分成許多部分,並透過監控合約確定每一部分仍在某個節點中。 如果合約依然在支付款項,那就提供了一個加密證明,某人仍在利用此合約來保存檔案。 - -### 去中心化自治組織 (DAO) {#decentralized-autonomous-organizations} - -「去中心化自治組織」的一般概念是指擁有一定數量成員或股東的虛擬實體,它們大概擁有 67% 的大多數股權,有權使用實體的資金並修改其程式碼。 成員會集體決定該組織如何分配其資金。 去中心化自治組織的資金分配方式可以是賞金、薪資或更奇特的機制,例如用內部貨幣來獎勵工作。 這本質上複製了傳統公司或非營利組織的法律特徵,但僅使用加密區塊鏈技術來執行。 目前為止,許多關於去中心化自治組織的討論都圍繞著「去中心化自治公司」(DAC) 的「資本家」模式,其中有可獲得紅利的股東和可交易的股份;作為替代方案,有一種可能被稱為「去中心化自治社群」的實體會使所有成員在決策時擁有同等權利,並在增減成員時要求 67% 的現有成員多數同意。 由於每人只能擁有一個成員資格,所以需要群體來集體執行。 - -以下概括如何用程式碼實現去中心化自治組織。 最簡單的設計就是一段能夠在三分之二的成員同意變更時進行變更的自動修改程式碼。 雖然程式碼理論上是不可更改的,然而透過把程式碼片段放入不同的合約,並將要呼叫的合約的位址儲存在可修改的儲存中,使用者可以輕易解決這一問題及使程式碼事實上變得可修改。 在這種去中心化自治組織合約的簡單實作中,有三種交易類型可透過交易提供的資料區分: - -- `[0,i,K,V]` 在索引 `i` 處註冊提案,以便將儲存索引 `K` 的位址變更為值 ` V` -- `[1,i]` 註冊一張贊成提案 `i` 的投票 -- `[2,i]` 如果已獲得足夠的投票,則最終確定提案 `i` - -合約為每一種交易提供了子句。 它將維護所有開放儲存變更的記錄,以及投票支持者的清單。 它還會有全部成員的清單。 當三分之二之成員投票贊成儲存變更,一個最終化交易將執行此變更。 更複雜的框架可能還有針對發送交易、增減成員等功能的內建投票功能,甚至可以提供[流動式民主](https://wikipedia.org/wiki/Liquid_democracy)投票委託(即任何人都可以委託另外一個人代表自己投票,而這種委託關係是可以傳遞的,如果 A 委託了 B,然後 B 委託了 C,那麼 C 將決定 A 的投票)。 這種設計將使去中心化自治組織作為一個去中心化社群有機地成長,允許人們最終將篩選成員的任務委派給專家,但與「現有系統」不同,隨著時間推移,當個別社群成員改變他們的陣營時,專家可以輕鬆地加入或退出。 - -另一替代模型是去中心化公司,其中任何帳戶可以擁有零份或多份股份,需要有三分之二的股份才能做出決策。 完整框架將包括資產管理功能,即能夠出價購買或出售股份並且能夠接受報價(最好是合約裡有訂單匹配機制)。 委託也提供流動式民主形式,普及了「董事會」的概念。 - -### 更多應用 {#further-applications} - -**1. 儲蓄錢包**。 假設 Alice 想安全地保管她的資金,但她擔心自己的私鑰遺失或被破解。 她把以太幣放到和銀行 Bob 簽訂的一個合約裡,如下: - -- Alice 每天最多可以單獨提取 1% 的資金。 -- Bob 每天最多可以單獨提取 1% 的資金,但 Alice 可以用她的金鑰建立一個交易取消 Bob 的提款權限。 -- Alice 和 Bob 一起可以任意提取資金。 - -通常,每天 1% 的額度對於 Alice 來說已足夠,若 Alice 想提取更多資金,她可以聯繫 Bob 尋求幫助。 如果 Alice 的金鑰被破解,她可以立即聯絡 Bob 幫她將資金轉移到新合約。 如果她遺失了金鑰,Bob 最終會取出資金。 如果發現 Bob 是惡意的,她可以取消 Bob 的提款權限。 - -**2. 農作物保險**。 使用者可以輕鬆地建立金融衍生合約,但使用的是天氣而非任何價格指數的資料饋送。 如果愛荷華州的農民購買了一項金融衍生物,該產品基於愛荷華的降雨情況進行反向賠付,那麼如果遇到乾旱,該農民將自動收到賠付資金,而且如果降雨充足他會很開心,因為他的作物會有好收成。 這可以擴展到一般的自然災害保險。 - -**3. 去中心化資料餽送**。 對於金融差價合約,實際上有可能透過一種名為「[SchellingCoin](http://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/)」的協定將資料餽送服務去中心化。 SchellingCoin 的基本工作原理如下:N 個相關方都向系統輸入給定資料的值(例如以太幣/美元價格),對這些值進行排序,在第 25 和第 75 個百分位之間的每個人都會得到一個代幣作為獎勵。 每個人都有動力提供其他人都會提供的答案,而唯一能讓眾多參與者實際達成一致的值是顯而易見的:真相。 這樣就建立了一種去中心化協定,它理論上可以提供任何數量的數值,包括以太幣/美元價格、柏林的溫度甚至某個困難計算的結果。 - -**4. 智慧型合約多重簽章託管**。 比特幣允許多重簽章交易合約,例如,提供給定五個金鑰中的三個便可以使用資金。 以太坊允許更精細的控制;例如,提供五個金鑰中的四個可以使用任意數量的資金,提供五個金鑰中的三個可以每天最多使用 10% 的資金,提供五個金鑰中的兩個可以每天最多使用 0.5% 的資金。 此外,以太坊的多重簽章是非同步的 — 雙方可以在不同時間在區塊鏈上註冊他們的簽章,最後一個簽章將自動傳送交易。 - -**5. 雲端運算**。 以太坊虛擬機技術也可以用來建立一個可驗證的運算環境,讓使用者可以要求他人執行計算,並要求提供證據,證明某些隨機選擇檢查點處的計算被正確執行。 這允許創建一個雲端運算市場,任何使用者都可以使用他們的桌上型電腦、筆記型電腦或專用伺服器參與其中,並且可以使用抽查和保證金來確保系統是值得信賴的(即節點不能透過欺騙來獲利)。 雖然這種系統可能不適合所有任務;例如,需要高階的進程間通訊的任務無法在大型節點雲端上輕鬆完成。 然而,其他任務則更容易實現並行;例如 SETI@home、folding@home 和遺傳演算法等專案可以輕鬆地在這類平台上實作。 - -**6. 點對點賭博**。 任意數量的點對點賭博協議都可以在以太坊區塊鏈上實作,例如 Frank Stajano 和 Richard Clayton 的 [Cyber​​dice](http://www.cl.cam.ac.uk/~fms27/papers/2008-StajanoCla-cyberdice.pdf)。 最簡單的賭博協定實際上只是關於下一個區塊雜湊值的差價合約,並且可以在其基礎上構建更進階的協定,建立接近零費用且無法作弊的賭博服務。 - -**7. 預測市場**。 如果有預言機或 SchellingCoin,預測市場也很容易實作,預測市場與 SchellingCoin 一起有可能被證明是 [futarchy](http://hanson.gmu.edu/futarchy.html) 的第一個主流應用,作為去中心化組織的治理協定。 - -**8. 鏈上去中心化市場**,以身分和信譽系統為基礎。 - -## 雜項與憂慮 {#miscellanea-and-concerns} - -### 經修改之 GHOST 實作 {#modified-ghost-implementation} - -「貪婪最重可觀察子樹」(GHOST) 協定是由 Yonatan Sompolinsky 和 Aviv Zohar 在 [2013 年12 月](https://eprint.iacr.org/2013/881.pdf)首次提出的創新。 提出 GHOST 的動機是,具有快速確認時間的區塊鏈目前由於過時率高而安全性降低— 因為區塊需要一定的時間才能透過網路傳播,如果礦工 A 開採了一個區塊,然後礦工 B 碰巧在礦工 A 的區塊傳播到 B 之前開採了另一個區塊,那麼礦工 B 的區塊最終會被作廢,無法用於增加網路安全性。 此外,還有一個中心化問題:如果礦工 A 是一個擁有 30% 哈希算力的礦池,而 B 擁有 10% 哈希算力,那麼 A 將面臨 70% 的時間生產陳腐區塊的風險(因為在其他 30 % 的時間 A 產生了最後一個區塊,所以會立即獲得挖礦數據),而 B 將面臨 90% 的時間生產陳腐區塊的風險。 因此,如果區塊間隔短到足以使過時率較高,則 A 將僅憑藉其算力大小而顯著提高效率。 結合這兩種影響,快速產生區塊的區塊鏈很可能造就一個擁有足夠高比例網路哈希算力的礦池,從而對挖礦過程擁有事實上的控制。 - -正如 Sompolinsky 和 Zohar 所描述,GHOST 透過在計算哪條鏈「最長」時包含陳腐區塊來解決網路安全性降低的第一個問題;也就是說,在計算哪個區塊受到最大的總工作量證明支援時,不僅區塊的父塊和更遠的祖先,而且該區塊祖塊(在以太坊行話中稱為「叔塊」)的陳腐子代也都被添加到計算中。 為了解決第二個問題,即中心化偏差,我們跳出了 Sompolinsky 和 Zohar 描述的協定範疇,並且還為陳腐區塊提供區塊獎勵:陳腐區塊獲得其基礎獎勵的 87.5%,而包含陳腐區塊的侄塊獲得剩餘的 12.5%。 然而,交易費並不獎勵給叔塊。 - -以太坊實作了一個簡化版的 GHOST 協定,它僅僅深入七個層級。 具體來說,定義如下: - -- 一個區塊必須指定一個父塊,並且必須指定零個或多個叔塊 -- 包含在區塊 B 中的叔塊必須具有以下屬性: - - 它必須是區塊 B 的第 k 代祖先的直系子代,其中 `2 <= k <= 7`。 - - 它不能是 B 的祖先 - - 叔塊必須是有效的區塊頭,但不需要是先前驗證過的甚至是有效的區塊 - - 叔塊必須不同於前面區塊中包含的所有叔塊,並且不同於同一區塊中包含的所有其他叔塊(非雙重包含) -- 對於區塊 B 中的每個叔塊 U,區塊 B 的礦工獲得額外 3.125% 的鑄幣獎勵,而叔塊 U 的礦工獲得 93.75% 的標準鑄幣獎勵。 - -這種限製版的 GHOST 協議,最多只能包含 7 代叔塊,採用它有兩個原因。 首先,在計算給定區塊中哪些叔塊有效時,無限制 GHOST 會使得計算過於複雜。 第二,無限制 GHOST 協議採用了以太坊中使用的補償,取消了促使礦工在主鏈而不是公共攻擊者的鏈上挖礦的激勵措施。 - -### 手續費 {#fees} - -由於發佈到區塊鏈中的每筆交易都會為網路帶來下載和驗證的成本,因此需要一些通常涉及交易費用的監管機制來防止濫用。 比特幣使用的預設方法是純粹自願的手續費,依靠礦工充當看門人並設定動態最低限額。 這種方法特別在比特幣社群中受歡迎,是因為它「基於市場」,允許礦工和交易發送者之間的供需決定價格。 然而,這種想法的問題在於交易處理並不符合市場法則。雖然將交易處理解釋為礦工向發送者提供的服務直觀上很有吸引力,但實際上礦工收錄的每筆交易都需要由網絡中的每個節點處理,因此絕大部分交易處理成本由第三方而非由決定是否收錄交易的礦工承擔。 因此,公地悲劇的問題很可能發生。 - -然而,結果卻是,基於市場機制中的這個缺陷,在給出一個不準確的特定簡化假設時,會神奇地自我抵銷。 論證如下。 假設: - -1. 交易導致 `k` 個操作,將提供獎勵 `kR` 給添加它的任何礦工,其中 `R` 由發送者設定,`k` 和 `R` 事先(大體上)對礦工可見。 -2. 在任何節點,操作的處理成本為 `C`(即所有節點效率相同) -3. 有 `N` 個挖礦節點,每個節點的處理能力完全相同(即總處理能力的 `1/N`) -4. 沒有不挖礦的全節點。 - -如果預期獎勵大於成本,礦工將願意處理交易。 因此,預期獎勵為 `kR/N`,因為礦工有 `1/N` 機會處理下一個區塊,而礦工的處理成本僅為 `kC`。 因此,當 `kR/N > kC` 或 `R > NC` 時,礦工將會添加交易。 請注意 `R` 是發送者提供的每個操作的費用,因此是發送者從交易中獲得的收益的下限,`NC` 是整個網路共同處理一個操作的成本。 因此,礦工有動機只添加那些總實際收益超過成本的交易。 - -然而,這些假設在現實中會出現有些許重要偏離: - -1. 與其他驗證節點相比,礦工處理交易的成本確實更高,因為額外的驗證時間會延遲區塊傳播,從而增加區塊陳腐的機率。 -2. 確實存在不挖礦的全節點。 -3. 實際上挖礦能力的分配最終可能極度不平等。 -4. 想破壞網路的投機者、政敵和瘋子確實存在,他們可以巧妙地設定合約,讓他們的成本遠低於其他驗證節點支付的成本。 - -(1) 讓礦工傾向於添加較少的交易,並且 (2) 增加 `NC`;因此這兩種作用會互相 抵銷一部分。 [如何抵銷?](https://github.com/ethereum/wiki/issues/447#issuecomment-316972260) (3) 和 (4) 是主要問題,為了解決它們,我們簡單地制訂了一個浮動上限: 沒有區塊能夠包含比 `BLK_LIMIT_FACTOR` 乘以長期指數移動平均值更多的操作數。 具體來說: - -```js -blk.oplimit = floor((blk.parent.oplimit \* (EMAFACTOR - 1) + -floor(parent.opcount \* BLK\_LIMIT\_FACTOR)) / EMA\_FACTOR) -``` - -`BLK_LIMIT_FACTOR` 和 `EMA_FACTOR` 是常數,暫時設定為 65536 和 1.5,但可能在進一步分析後會變更。 - -還有一個因素會抑制比特幣中的大區塊:大區塊將需要更長時間來傳播,因此有更大機率變成陳腐區塊。 在以太坊中,燃料消耗量高的區塊也可能需要更長時間來傳播,因為它們的物理大小更大,而且因為它們需要更長時間來處理交易狀態轉換以進行驗證。 這種延遲抑制因素在比特幣中是一個重要的考慮因素,但在以太坊中由於 GHOST 協定而較少考慮;因此,依靠受監管的區塊限制可提供更穩定的基準。 - -### 計算及圖零完整性 {#computation-and-turing-completeness} - -重點是以太坊虛擬機是圖靈完整的;這意味著以太坊虛擬機程式碼可以對任何設想可執行的計算進行編碼,包括無限迴圈。 以太坊虛擬機程式碼以兩種方式實作迴圈。 首先,使用一個 `JUMP` 指令,允許程式跳回至程式碼中的前一個位置,也使用一個 `JUMPI` 指令進行條件跳轉,允許諸如 `while x < 27: x = x * 2` 之類的語句。 第二,合約可以呼叫其他合約,有可能透過遞迴進行迴圈。 這很自然地導致一個問題:本質上,惡意使用者能夠透過迫使礦工和全節點進入無限迴圈而關閉它們嗎? 這個問題​源於電腦科學中的一個難題,稱為停機問題:在一般情況下,沒有辦法知道一個特定的程式是否會停止運作。 - -如狀態轉換部分所述,我們的解決方案要求交易設定一個允許執行的最大計算步驟數,如果超過執行時間,計算就會被還原但仍要支付費用。 訊息以同樣的方式運作。 為顯示我們解決方案背後的動機,請看下面的範例: - -- 攻擊者建立一個運行無限迴圈的合約,然後向礦工發送啟動該迴圈的交易。 礦工將處理該交易,運行無限迴圈直到燃料耗盡。 即使執行耗盡了燃料並中途停止,交易仍然有效而礦工仍然向攻擊者索取每個計算步驟的費用。 -- 攻擊者建立一個非常長的無限迴圈,目的是迫使礦工持續長時間計算,以至於計算結束時將有更多區塊產生出來,這樣礦工就不可能透過添加該交易來索取費用。 然而,攻擊者需要為 `STARTGAS` 提交一個值,限制執行可以進行的計算步驟數,因此礦工將提前知道該計算將進行相當多的步驟數。 -- 攻擊者看到一個合約,其中的程式碼形式為 `send(A,contract.storage[A]); contract.storage[A] = 0`,然後發送一個交易,但燃料只夠運行第一步而不足以運行第二步(即進行提款但不讓餘額減少)。 合約創建者無需擔心防備此類攻擊,因為若執行中途停止,變更會被還原。 -- 金融合約取九個專有資料餽送的中位數,以最大限度地降低風險。 攻擊者接管其中一個資料饋送,該資料饋送設計為可透過去中心化自治組織部分描述的變數-地址-呼叫機制修改,並將其轉換為運行無限迴圈,從而強制任何從金融合約索取資金的嘗試都因燃料耗盡中止。 然而,金融合約可以對訊息設定燃料限制來預防這個問題。 - -圖靈完整的替代方案是圖靈不完整,其中 `JUMP` 和 `JUMPI` 不存在,並且在任何給定時間每個合約只允許有一個副本存在於呼叫堆疊內。 在這個系統中,上述收費系統和關於我們解決方案效果的不確定性可能都是不必要的,因為執行一個合約的成本將由合約大小決定。 此外,圖靈不完整甚至不是一大限制;在我們內部構想的所有合約範例中,到目前為止只有一個需要迴圈,甚至那個迴圈也可以透過將一行程式碼重複 26 次來消除。 考慮到圖靈完整性帶來的嚴重影響和有限益處,為什麼不簡單地使用圖靈不完整的語言呢? 然而在現實中,圖靈不完整仍遠遠不能有效解決問題。 要了解原因,考慮以下合約: - -```sh -C0: call(C1); call(C1); -C1: call(C2); call(C2); -C2: call(C3); call(C3); -... -C49: call(C50); call(C50); -C50: (run one step of a program and record the change in storage) -``` - -現在,向 A 發送一筆交易。這樣,在 51 筆交易中,我們有一個合約需要 250 個計算步驟。 礦工可以嘗試提前偵測這種邏輯炸彈,方法是為每個合約維護一個值,指定合約可以進行的最大計算步驟數,然後對遞迴呼叫其他合約的合約進行計算,但是這需要礦工禁止建立其他合約的合約(因為上面 26 個合約的建立和執行可以很容易地匯集到一個單獨合約內)。 另一個問題是訊息地址欄位是一個變數,所以在一般情況下,甚至不可能提前知道某個合約將呼叫哪些合約。 因此,最終我們有了一個驚人結論:圖靈完整性十分容易管理,而在缺乏同樣的控制時,圖靈不完整的管理異常地困難,那為什麼不直接讓協定圖靈完整呢? - -### 貨幣與發行 {#currency-and-issuance} - -以太坊網路包括自己的內建貨幣以太幣,其扮演雙重角色:提供一個主要流動資金層,實現各種數位資產之間的高效交易,更重要的是,提供一種支付交易費的機制。 為方便起見並避免未來爭議(參考當前比特幣中的 mBTC/uBTC/satoshi 爭論),面額預先設定如下: - -- 1:wei -- 1012:szabo -- 1015:finney -- 1018:ehter - -這應該被視為「美元」和「美分」或「BTC」和「satoshi」概念的擴展版本。 在不久將來,我們期望「ehter」用於普通交易,「finney」用於微型交易,「szabo」和「wei」可以在圍繞費用和協定實作的技術討論中使用;其餘的面額可能會在以後變得有用,但目前不應包含在用戶端中。 - -發行模式如下: - -- 以太幣將以貨幣銷售的形式發行,價格為一個比特幣可購買 1000-2000 個以太幣,這種機制旨在為以太坊組織籌資和支付開發費用,且已被其他平台(如 Mastercoin 和 NXT)成功應用。 早期買家將從較大的折扣中獲益。 發售所得的比特幣將全部用來支付開發者的薪資和獎金,並用來投資以太坊和加密貨幣生態系統中的各種營利和非營利專案。 -- 0.099 倍的發售總量(60102216 個以太幣)將分配給以太坊組織,以補償早期貢獻者,並用以太幣計價的方式支付創世區塊誕生前的開銷。 -- 0.099 倍的發售總量將保留為長期準備金。 -- 發售後,將永久地每年為礦工分配 0.26 倍的發售總量。 - -| 群組 | 啟動時 | 一年後 | 五年後 | -| --------- | ------ | ------ | ------ | -| 貨幣數量 | 1.198X | 1.458X | 2.498X | -| 購買者 | 83.5% | 68.6% | 40.0% | -| 發售前花費的準備金 | 8.26% | 6.79% | 3.96% | -| 發售後使用的準備金 | 8.26% | 6.79% | 3.96% | -| 礦工 | 0% | 17.8% | 52.0% | - -#### 長期供應成長率(百分比) - -![以太坊通貨膨脹](./ethereum-inflation.png) - -_除了線性的貨幣發行方式外,與比特幣相似,以太幣的長期供應成長率也趨於零。_ - -上述模型提供了兩個主要選項:(1) 捐贈池的存在和規模,以及 (2) 永久增長的線性供應的存在,而比特幣採用了限制供應的方法。 捐贈池存在的理由如下。 如果捐贈池不存在,且線性發行量減少到​​總發售量的 0.217 倍以實現相同的通貨膨脹率,那麼以太幣總量將減少 16.5%,而每個單位將增值 19.8%。 因此,為了達成均衡,將會多發售 19.8% 的以太幣並購買,所以每個單位的價值將再次與以前完全一樣。 組織還將擁有 1.198 倍的比特幣,可以考慮將其分為兩部分:原有比特幣和額外的 0.198 倍比特幣。 因此,這種情況_完全等同於_捐贈,但有一個重要區別:該組織僅持有比特幣,因而沒有動機支持以太幣單位的價值。 - -永久性線性供應成長模型降低了有些人認為比特幣財富過度集中的風險,並為生活在當前和未來的人提供了獲取貨幣單位的公平機會,同時又保留了讓人獲取並持有以太幣的強效激勵措施,因為長期來看,用百分比表示的「供應成長率」仍將趨於零。 我們還推測由於加密貨幣總是會因為不小心、死亡等原因而丟失,而加密貨幣的損失可以被模擬為每年總供應量的百分比,因此流通中的貨幣總供應量實際上最終會穩定在一個等於每年發行量除以損失率的數值上(例如,在損失率為 1% 時,一旦供應量達到 26 倍,那麼每年將挖掘出 0.26 倍,0.26 倍丟失,形成一個平衡點)。 - -請注意,未來以太坊很可能會過渡到權益證明模型以確保安全,將每年的發行量減少到 0 至 0.05 倍之間。 如果以太坊組織失去資金或因任何其他原因消失,我們將開啟一個「社區合約」:任何人都有權創建以太坊的未來候選版本,唯一的條件是以太幣的數量必須最多等於 `60102216 * (1.198 + 0.26 * n)`,其中 `n` 是創世區塊之後的年數。 創作者可以自由地眾售,或以其他方式分配權益證明驅動的供應擴張和最大允許供應擴張之間的部分或全部差額,來支付開發費用。 不符合社區合約的候選升級可能會合理地被分叉為相容版本。 - -### 挖礦中心化 {#mining-centralization} - -比特幣挖礦演算法的原理是,讓礦工一次又一次地對區塊頭稍作修改的版本進行數百萬次 SHA256 計算,直到最終某個節點所產生版本的雜湊值小於目標值(目前大約為 2 192)。 然而,這種挖礦演算法容易出現兩種形式的中心化。 第一種,挖礦生態系統已經被 ASIC(特殊應用積體電路)所支配,這些電腦晶片專門為特定的比特幣挖礦任務而設計,因此效率提高了數千倍。 這意味著比特幣挖礦不再是一種高度去中心化和平等的追求,而是需要巨額資本才能有效參與。 第二,大部分比特幣礦工事實上不在本地完成區塊驗證;而是依賴中心化礦池提供區塊頭。 這個問題可以說很嚴重:截至撰寫本文時,最大的三個礦池間接地控制了大約比特幣網路 50% 的算力,雖然當一個礦池嘗試聯合發動 51% 攻擊時,礦工還是可以轉換到其他礦池來減輕此問題的嚴重性。 - -以太坊現在目的是使用一種挖礦演算法,要求礦工從狀態中獲取隨機資料,從區塊鏈的最後 N 個區塊中計算一些隨機選擇的交易,並傳回結果的雜湊值。 這有兩個重要好處。 首先,以太坊合約可以包含任何類型的計算,因此以太坊特殊應用積體電路本質上是用於一般計算的特殊應用積體電路,即更好的中央處理器。 其次,挖礦需要存取整條區塊鏈,這迫使礦工儲存整條區塊鏈並至少能夠驗證每筆交易。 這樣就消除了對中心化礦池的需求;雖然礦池仍然可以起到平衡獎勵分配隨機性的合法作用,但沒有中心化控制的點對點礦池同樣也可以很好地發揮此功能。 - -該模型未經測試,而在使用合約執行挖礦演算法時,避免某些巧妙最佳化過程中可能會遇到困難。 然而,這種演算法有一個值得注意的特點,任何人都可以透過將專用於抑制某些特殊應用積體電路的大量合約引入區塊鏈中,在「井裡投毒」。 由於存在經濟激勵,特殊應用積體電路製造商會使用這種方法互相攻擊。 因此,我們正在開發的解決方案最終是一種適應性人為經濟解決方案,而不是純粹的技術解決方案。 - -### 可擴展性 {#scalability} - -以太坊的一個常見問題是可擴展性問題。 與比特幣一樣,以太坊也存在缺陷,即每筆交易都需要由網路中的每個節點處理。 以比特幣來說,目前區塊鏈的大小約為 15 GB,每小時增長約 1 MB。 如果比特幣網路要像 Visa 那樣每秒處理 2000 筆交易,則每三秒鐘就會增加 1 MB(每小時 1 GB,每年 8 TB)。 以太坊可能也會經歷相似甚至更糟的增長模式,因為以太坊區塊鏈上還有很多應用程式,不像比特幣區塊鏈上只有貨幣,但以太坊全節點只需儲存狀態而不是完整的區塊鏈歷史,這一事實讓情況得到改善。 - -如此龐大的區塊鏈出現的問題是中心化風險。 如果區塊鏈大小增加到 100 TB,可能的情況是只有極少數大型企業能運行全節點,而所有普通使用者將使用簡單支付驗證輕量節點。 在這種情況下,可能會出現全節點合夥詐欺牟利(例如變更區塊獎勵,給他們自己比特幣等)這樣的問題。 輕節點無法立即偵測到這一點。 當然,可能至少存在一個誠實的全節點,而幾小時後有關詐騙的資訊會透過 Reddit 這種頻道洩露,但那時會為時已晚:由普通使用者互相組織協作將指定區塊列入黑名單,這種大型、很可能不切實際的協作在規模上無異於發動一次成功的 51% 攻擊。 就比特幣而言,目前這是一個問題,但 [Peter Todd 建議](https://web.archive.org/web/20140623061815/http://sourceforge.net/p/bitcoin/mailman/message/31709140/)對區塊鏈進行修改,以緩解這個問題。 - -在短期內,以太坊將使用兩種附加策略來應對這個問題。 首先,因為基於區塊鏈的挖礦演算法,至少每個礦工都會被強制成為一個全節點,為全節點的數量創建了下限。 接著更重要的是,處理完每筆交易後,我們會把一個中間狀態樹根收錄到區塊鏈中。 即使區塊驗證是中心化的,只要存在一個誠實的驗證節點,就可以透過驗證協議來規避中心化問題。 如果礦工發布了無效區塊,該區塊必定是格式錯誤,或是狀態 `S[n]` 不正確。 由於已知 `S[0]` 是正確的,因此必然存在第一個不正確的狀態 `S[i]`,但狀態 `S[i-1]` 是正確的。 驗證節點將提供索引 `i` 以及「無效證明」,該證明包括處理 `APPLY(S[i-1],TX[i]) -> S[i]` 所需的帕特里夏樹節點的子集。 節點將能夠使用那些節點來運行該部分計算,並查看生成的 `S[i]` 與提供的 `S[i]` 是否不匹配。 - -另一種更複雜的攻擊涉及惡意礦工發布不完整的區塊,因此甚至不存在完整訊息,致使無法確定區塊是否有效。 解決方案是查問-應答協議:驗證節點對目標交易索引發起「查問」,接受到質疑信息的輕型節點會對相應的區塊取消信任,直到另外無論是礦工還是另一個驗證者的節點,提供一個帕特里夏節點子集作為有效性證明。 - -## 結論 {#conclusion} - -以太坊協議最初被設想為加密貨幣的升級版本,透過高度通用的程式語言提供進階功能,如區塊鏈託管、提款限制、金融合約、博彩市場等。 以太坊協議不會直接「支援」任何應用程式,但圖靈完備程式語言的存在意味著,理論上可以為任何交易類型或應用程式建立任意合約。 然而關於以太坊更有趣的地方是,以太坊協議遠遠超出了貨幣的範疇。 圍繞去中心化檔案儲存、去中心化計算和去中心化預測市場的協議以及許多其他這類概念,有可能大大提高計算行業的效率,並首次透過添加經濟層來大力促進其他點對點協議的發展。 最後,還有大量與金錢完全無關的應用程式。 - -以太坊協議實作的任意狀態轉換函式的概念,提供了一個具有獨特潛力的平台,而不是一種專門針對資料儲存、賭博或金融領域內一系列特定應用程式的封閉式單用途協議。以太坊在設計上是開放式的,我們相信在今後幾年裡它非常適合作為大量金融和非金融協議的基礎層。 - -## 註釋與延伸閱讀 {#notes-and-further-reading} - -### 注釋 {#notes} - -1. 有經驗的讀者可能會注意到,事實上比特幣地址是橢圓曲線公鑰的雜湊值,而不是公鑰本身。 然而,事實上從密碼學術語角度把公鑰雜湊值稱為公鑰是完全合理的。 這是因為比特幣密碼學可以視為一種客製化的數位簽章演算法。在數位簽章演算法中,公鑰由橢圓曲線密碼學公鑰的雜湊值組成,簽章由連接了橢圓曲線密碼學簽章的橢圓曲線密碼學公鑰組成。而驗證演算法涉及用橢圓曲線密碼學公鑰雜湊值(作為公鑰提供)來檢查簽章中的橢圓曲線密碼學公鑰,然後用橢圓曲線密碼學公鑰來驗證橢圓曲線密碼學簽章。 -2. 技術上來說,前 11 個區塊的中位數。 -3. 在內部,2 和「CHARLIE」都是數字 [fn3](#notes),後者以高位元組在前基數 256 表示。 數字至少可以為 0,最多可以為 2256-1。 - -### 衍生閱讀 {#further-reading} - -1. [內在價值](http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/) -2. [智慧型資產](https://en.bitcoin.it/wiki/Smart_Property) -3. [智慧型合約](https://en.bitcoin.it/wiki/Contracts) -4. [B-money](http://www.weidai.com/bmoney.txt) -5. [可重複使用之工作量證明](https://nakamotoinstitute.org/finney/rpow/) -6. [利用所有者權限確保財產權](https://nakamotoinstitute.org/secure-property-titles/) -7. [比特幣白皮書](http://bitcoin.org/bitcoin.pdf) -8. [域名幣](https://namecoin.org/) -9. [Zooko 三角](https://wikipedia.org/wiki/Zooko's_triangle) -10. [彩色幣白皮書](https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit) -11. [萬事達幣白皮書](https://github.com/mastercoin-MSC/spec) -12. [去中心化自治組織,Bitcoin Magazine](http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/) -13. [簡單支付驗證](https://en.bitcoin.it/wiki/Scalability#Simplified_payment_verification) -14. [默克爾樹](https://wikipedia.org/wiki/Merkle_tree) -15. [帕特里夏樹](https://wikipedia.org/wiki/Patricia_tree) -16. [GHOST](https://eprint.iacr.org/2013/881.pdf) -17. [StorJ 及自治代理,Jeff Garzik](http://garzikrants.blogspot.ca/2013/01/storj-and-bitcoin-autonomous-agents.html) -18. [Mike Hearn 在圖靈節談論智慧型資產](https://www.youtube.com/watch?v=MVyv4t0OKe4) -19. [以太坊遞迴長度前綴](https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP) -20. [以太坊默克爾帕特里夏樹](https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-Patricia-Tree) -21. [Peter Todd 談論默克爾求和樹](https://web.archive.org/web/20140623061815/http://sourceforge.net/p/bitcoin/mailman/message/31709140/) - -_有關白皮書的歷史記錄,請參閱[此維基](https://github.com/ethereum/wiki/blob/old-before-deleting-all-files-go-to-wiki-wiki-instead/old-whitepaper-for-historical-reference.md)。_ - -_與許多社群驅動的開源軟體專案一樣,以太坊自最初誕生以來一直在不斷發展。 來學習更多最新以太坊發展及多年來之網路協議變動, 我們推薦你詳閱此[指南簡介](/learn/)._ diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/bridges/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/bridges/index.md deleted file mode 100644 index 5c4cb94ccef..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/bridges/index.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -title: 跨鏈橋 -description: 給開發者的跨鏈橋概述 -lang: zh-tw ---- - -隨著 Layer 1 區塊鏈 和 Layer 2 網路[擴容](/developers/docs/scaling/) 解決方案的激增,以及越來越多的去中心化應用程式需要跨鏈,跨鏈通訊和資產轉移需求已成為網路基礎設施的重要組成部分。 存在不同類型的跨鏈橋就是為了幫助解決這種需求。 - -## 為什麼需要跨鏈橋? {#need-for-bridges} - -跨鏈橋是一條負責在不同區塊鏈之間傳遞「訊息」的橋。 它連結不同的區塊鏈,幫助不同區塊鏈上的數位資產與資料進行互動。 - -每一個區塊鏈的運行都是各自獨立的,有其自身的規則、共識機制、原生代幣以及部署其上的智慧型合約。這意味著在自身的設計上每一個區塊鏈無法將內部的數位資產或儲存資料跨鏈轉移到另一個區塊鏈上。 儘管一個區塊鏈可以不斷發展並豐富自身內部的生態系,它始終缺乏連結不同區塊鏈、跨鏈共同運作的能力。 - -跨鏈橋有助於打破這些藩籬,整合各自孤立的區塊鏈生態系為一體。 它們在區塊鏈之間建立了一條傳輸路線,讓代幣、資訊、任意數據甚至 [智能合約](/developers/docs/smart-contracts/) 調用都可以從一條區塊鏈轉移到另一條。 - -## 跨鏈橋的好處 {#benefits-of-bridges} - -區塊鏈橋最重要的好處是允許不同的區塊鏈進行資料交換與跨鏈資產的轉移。 - -想像每一個區塊鏈都是一塊被海洋分隔開的大陸,不同的大陸有各自不同的資源,如果能將這些大陸的優勢結合起來,就可以創造一個繁榮的生態圈。同樣地,每一個區塊鏈都有各自的優勢與限制、在體系與應用程式的建構上都有其獨特的取捨(如重視速度、吞吐量、或安全成本等)。 跨鏈橋也同樣能將不同區塊鏈的優勢整合起來,幫助彼此有效運用各自的優勢,打造一個繁榮的生態圈。 - -對於開發者,鏈橋可以實現以下功能: - -- 跨鏈傳輸任何資料、資訊和資產。 -- 解鎖協議的新功能和應用場景,因為鏈橋擴展了協議可以提供的設計空間。 例如,最初部署在以太坊主網路上用於提供流動性礦池的協議,可以為所有相容於以太坊虛擬機的鏈提供流動資金池。 -- 可以利用不同區塊鏈的優勢的機會。 例如,開發者可以透過將去中心化應用程式部署在多個磁碟區上來享受不同二層網路解決方案帶來的較低費用,而側鍊和使用者可以在它們之間建立鏈橋。 -- 不同區塊鏈生態系統的開發者之間相互協作,建構新產品。 -- 吸引來自不同生態系統的使用者和社群使用他們的去中心化應用程式。 - -## 跨鏈橋如何運作? {#how-do-bridges-work} - -雖然 [types of bridge designs](https://li.fi/knowledge-hub/blockchain-bridges-and-classification/) 多種多樣,但以下三種方便資產跨鏈轉移的方法脫穎而出: - -- **Lock and mint – 鎖定源鏈上的資產並在目標鏈上鑄幣。 -- **Burn and mint –** 銷毀源鏈上的資產並在目標鏈上鑄幣。 -- **Atomic swaps –** 透過第三方將源鏈上的資產與目標鏈上的資產交換。 - -## 跨鏈橋的種類 {#bridge-types} - -鏈橋通常可以分為以下幾類之一: - -- **Native bridges –** 這些鏈橋通常用於加強特定區塊鏈上的流動性,使用戶更容易將資金轉移到生態系統。 例如,[Arbitrum Bridge](https://bridge.arbitrum.io/) 的目的就是為了方便用戶從以太坊主網橋接到 Arbitrum。 其他此鏈類橋包括 Polygon PoS 鏈橋、 -Optimism Gateway 等。 - - - ** 基於驗證者或預言機的鏈橋 –** 這些鏈橋依賴外部驗證者群組或預言機來驗證跨鏈轉移。 例如:Multichain 與 Across。 -- ** 通用資訊傳遞鏈橋 – 這些鏈橋可以跨鏈傳輸資產、資訊和任意資料。 舉例:Axelar, LayerZero 和 Nomad. - - - ** 流動性網路 –** 這些鏈橋主要是透過原子交換將資產從一條鏈轉移到另一條鏈。 一般來講,它們不支援跨鏈訊息傳遞。 例如:Connext 與 Hop。 - - - -## 權衡利弊 {#trade-offs} - -沒有完美的鏈橋解決方案。 有的只是為了實現目的而進行的權衡利弊。 開發者和使用者可以根據以下因素評估鏈橋: - -- ** 安全性 –** 誰來驗證系統? 通常,由外部驗證者保護的鏈橋不如由區塊鏈驗證者在本地保護的鏈橋安全。 -- ** 便利性 –** 完成一筆交易需要多長時間,使用者需要簽署多少筆交易? 對於開發者來說,整合一個鏈橋需要多長時間,這個過程有多複雜? -- ** 連結性 –** 一個鏈橋可以連接哪些不同的目標鏈(捲疊、側鏈、其他一層網路區塊鏈等),整合一條新區塊鏈有多難? -- ** 傳遞更複雜數據的能力 –** 鏈橋能夠跨鏈傳輸訊息和更複雜的任意數據,還是只支援跨鏈資產轉移? -- ** 成本效益 –** 透過鏈橋跨鏈轉移資產的成本是多少? 通常情況下,鏈橋收取固定或變動的費用,具體取決於燃料成本和特定路線的流動性。 根據確保鏈橋安全所需的資本來評估鏈橋的成本效益也是至關重要的。 - -在較高層面上,鏈橋可分為需要信任鏈橋和去信任鏈橋。 - -- ** 需信任鏈橋 –** 需信任鏈橋由外部驗證。 它們使用一組外部驗證者(具有多重簽章的聯盟、多方運算系統、預言機網路)跨鏈發送資料。 因此,它們可以提供出色的連通性,並完全支援跨鏈通用資訊傳遞。 在速度和成本效益方面它們通常也表現良好。 但這些是以安全性為代價的,因為使用者必須依賴鏈橋的安全性。 -- ** 去信任 –** 這類鏈橋依靠它們連接的區塊鏈及其驗證者來傳輸資訊和代幣。 它們是 “去信任” 的,因為它們沒有增加新的信任假設(區塊鏈除外)。 因此,我們認為去信任鏈橋比可信任鏈橋更安全。 - -為了根據其他因素評估去信任鏈橋,我們須將其分為通用資訊傳遞鏈橋和流動性網路。 - -- ** 通用資訊傳遞鏈橋 –** 這些鏈橋在安全性和跨鏈傳輸更複雜資料的能力方面表現卓越。 通常,它們還具有良好的成本效益。 然而,這些優點通常以輕客戶端鏈橋(例如 IBC)的連通性以及使用欺詐證明的樂觀鏈橋(例如 Nomad)的速度劣勢作為代價。 -- ** 流動性網路 –** 這些鏈橋使用原子交換轉移資產,並且是本地驗證系統 (即,它們使用底層區塊鏈的驗證者驗證交易)。 因此,它們在安全性和速度方面表現出色。 此外,流動性網路具有良好的成本效益和良好的連結性。 然而,最大的折衷之處是它們無法傳遞更複雜的資料 — 因為它們不支援跨鏈訊息傳遞。 - - - -## 跨鏈橋的風險 {#risk-with-bridges} - -去中心化金融領域中 最大的三次駭客攻擊 < 0 > 都是由鏈橋造成的,而且鏈橋目前仍處於開發階段早期。 使用任何鏈橋都有以下風險: - -- ** 智能合約風險–** 雖然許多鏈橋已經成功通過了審計,但只需智能合約中的一個缺陷就會使資產暴露在黑客攻擊中(例如:[Solana 的Wormhole 鏈橋 ](https://rekt.news/wormhole-rekt/))。 -- ** 系統性金融風險 ** – 許多鏈橋使用包裝資產在新的鏈上鑄造規範化的原始資產。 這使生態系統面臨系統性風險,正如我們所看到的那樣,包裝代幣遭到利用。 -- **交易對手風險 –** 有些鏈橋採用可信任設計,這要求使用者依靠一種假設,即驗證者不會串通起來竊取使用者的資金。 使用者需要信任這些第三方參與者,這使他們面臨一些風險,例如跑路、審查和其他惡意活動。 -- ** 未解決的問題–** 考慮到鏈橋處於發展階段初期,還有許多關於鏈橋在不同市場條件下如何表現的問題都尚未解決,如網絡擁塞期和在發生網絡級攻擊 或狀態回滾等不可預見的事件時。 這種不確定性帶來了一定的風險,且風險程度目前仍未知。 - - - -## 去中心化應用程式如何使用鏈橋? {#how-can-dapps-use-bridges} - -以下介紹一些實際應用,在這些應用中,開發者可以考慮鏈橋並讓他們的去中心化應用程式跨鏈: - - - -### 整合橋接 {#integrating-bridges} - -對於開發者來說,有很多方法可以添加對鏈橋的支援: - -1. **建立自己的鏈橋 –** 建立安全可靠的鏈橋並不容易,特別是在選擇進一步將信任最小化的方式時。 此外,還需要與可擴展性和互通性研究相關的多年經驗和技術專長。 另外,還需要一支親力親為的團隊來維護鏈橋,並吸引足夠的流動性使其可行。 - -2. ** 向用戶展示多種鏈橋選項 –** 很多 [ 去中心化應用程式 ](/developers/docs/dapps/) 要求用戶擁有原生代幣才能與它們互動。 為了使用戶能夠訪問他們的代幣,去中心化應用程式在其網站上提供了不同的鏈橋選項。 然而,這種方法是權宜之計,因為它使用戶離開去中心化應用程式介面但仍需要用戶與其他去中心化應用程式和鏈橋互動。 這是一種繁瑣的上手體驗,會增加出錯的範圍。 - -3. ** 整合一個鏈橋 – 此解決方案不需要去中心化應用程式將使用者傳送到外部鏈橋和去中心化交易所介面。 這讓去中心化應用程式能夠改善用戶的上手體驗。 然而,這種方法有其局限性:

- - - 鏈橋的評估和維護既困難又耗時。 - - 選用一個鏈橋將造成單點故障和依賴性。 - - 去中心化應用程式受限於鏈橋的能力。 - - 光有鏈橋可能還不夠。 去中心化應用程式可能需要去中心化交易所提供更多功能,例如跨鏈交換。 - -4. ** 整合多個鏈橋 –** 此解決方案解決了許多與整合單一鏈橋相關的問題。 然而,它也有局限性,因為整合多個鏈橋會消耗資源,並為開發者帶來技術和通訊開銷 — 這是加密貨幣領域最稀缺的資源。 - -5. ** 整合鏈橋聚合器 –** 去中心化應用程式另一個選擇是整合鏈橋聚合解決方案,使它們能夠存取多個鏈橋。 鏈橋聚合器繼承了所有鏈橋的優點,因此不受任何單一鏈橋能力的限制。 值得注意的是,鏈橋聚合器通常維護鏈橋集成,這使去中心化應用程式避免了管控鏈橋集成技術和操作方面的麻煩。 - -儘管如此,鏈橋聚合器也有其限制。 比如說,雖然它們可以提供較多的鏈橋選擇,但除了聚合器平台上提供的鏈橋外,市場上通常還有更多的鏈橋。 此外,像鏈橋一樣,鏈橋聚合器也面臨智慧合約和技術風險(更多的智慧合約 = 更多的風險)。 - -如果去中心化應用程式規劃整合鏈橋或聚合器,那麼根據整合的深度會有不同的選擇。 例如,如果只是進行前端整合以改善用戶上手體驗,去中心化應用程式將整合小組件。 然而,如果整合是為了探索更深層的跨鏈策略,如質押、流動性礦池等,去中心化應用程式就整合軟體開發工具包或應用程式介面。 - - - -### 在多條鏈上部署去中心化應用程式 {#deploying-a-dapp-on-multiple-chains} - -要在多條鏈上部署去中心化應用程序,開發者可以使用 [Alchemy](https://www.alchemy.com/)、[ 安全帽](https://hardhat.org/)、[Truffle](https://trufflesuite.com/)、[Moralis](https://moralis.io/) 等開發平台。 這些平台通常提供可組合的插件,能夠支援去中心化應用程式跨鏈。 例如,開發者可以使用 [ 安全帽部署外掛程式 ](https://github.com/wighawag/hardhat-deploy) 提供的確定性部署代理程式。 - - - -#### 範例: - -- [如何建立跨鏈去中心化應用程式](https://moralis.io/how-to-build-cross-chain-dapps/) -- [建構跨鏈非同質化代幣市場](https://youtu.be/WZWCzsB1xUE) -- [Moralis:建立跨鏈非同質化代幣去中心化應用程式](https://www.youtube.com/watch?v=ehv70kE1QYo) - - - -### 監控跨鏈合約活動 {#monitoring-contract-activity-across-chains} - -要監控跨鏈合約活動,開發者可以使用子圖和 Tenderly 等開發者平台即時觀察智能合約。 這類平台上還有一些工具,提供更強大的跨鏈活動資料監控功能,例如,檢查有沒有 [合約觸發的事件](https://docs.soliditylang.org/en/v0.8.14/contracts.html? highlight=events#events) 等。 - - - -#### 工具 - -- [圖表](https://thegraph.com/en/) -- [Tenderly](https://tenderly.co/) - - - -## 延伸閱讀 {#further-reading} - -- [ 區塊鏈鏈橋接 ](/bridges/) — ethereum.org -- [ 區塊鏈鏈橋:建構加密網路的網路 ](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) 2021 年 9 月 8 日 - Dmitriy Berenzon -- [ 互通性的三難困境 ](https://blog.connext.network/the-interoperability-trilemma-657c2cf69f17) 2021 年 10 月 1 日 – Arjun Bhuptani -- [ 群集:可信任鏈橋與信任最小化鏈橋如何打造多鏈格局 ](https://blog.celestia.org/clusters/) 2021 年 10 月 4 日 – Mustafa Al-Bassam -- [LI.FI:有了鏈橋,信任就是一種範圍 ](https://blog.li.fi/li-fi-with-bridges-trust-is-a-spectrum-354cd5a1a6d8) 2022 年 4 月 28 日 – Arjun Chand - -此外,以下是 [James Prestwich](https://twitter.com/_prestwich) 的一些有頗有見解的講解,可以幫助我們更深入地理解鏈橋: - -- [建造鏈橋,而非建造有圍牆的花園](https://youtu.be/ZQJWMiX4hT0) -- [破壞鏈橋](https://youtu.be/b0mC-ZqN8Oo) -- [為何鏈橋在銷毀?](https://youtu.be/c7cm2kd20j8) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/blockchain-data-storage-strategies/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/blockchain-data-storage-strategies/index.md deleted file mode 100644 index 734e672f1eb..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/blockchain-data-storage-strategies/index.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: 區塊鏈資料儲存策略 -description: 有幾種方法透過區塊鏈儲存資料 此文章將會比較幾種儲存策略,成本、權衡以及安全適用的條件。 -lang: zh-tw ---- - -儲存資料的方法有幾種,直接上鏈儲存或是以某種被鏈保護的方式儲存: - -- EIP-4844 blobs -- Calldata -- 鏈下與L1的機制 -- 合約“程式碼” -- 事件 -- EVM 儲存 - -依據幾項指標來選擇使用什麼方法 - -- 資訊的來源 Calldata裡的資訊是無法直接從區塊鏈上傳來 -- 資訊的目的地 Calldata 只存在交易初建立之始 Events 在鏈上無法取得 -- 大家願意忍受多少麻煩呢? 全方位的節點可以比網頁程式跑的light client做更多的處理。 -- 讓所有的節點可以很簡單的獲得資訊是必要的嗎? -- 安全必要條件 - -## 安全必要條件{#security-requirements} - -總的來說,資訊安全由三個屬性構成: - -- _保密性_,沒有被授權的單位是無法讀取資訊的。 這在很多案例中是很重要的,但不是在這。 _在區塊鏈上沒有秘密_。 區塊鏈行得通是因為任何人都可以驗證交易狀態,所以無法直接用來儲存秘密, 有幾個方法可以在鏈上儲存機敏資料,但是都必須依賴一些鏈下的元件,例如:至少一把密鑰, - -- _完整性_,資訊正確,無法被未授權的單位或未授權的方法改變,例如,轉帳 [ERC-20 tokens](https://eips.ethereum.org/EIPS/eip-20#events) 不發`Transfer` event。 在區塊鏈上,為了確保完整性,每個節點都會驗證每個狀態的改變。 - -- _可用性_,任何被授權的單位皆可取得資訊, 在鏈上,通常為了達到在所有 [full node](https://ethereum.org/developers/docs/nodes-and-clients#full-node)上可以獲得資訊可以獲得資訊, - -不同的解決方案都有優秀的完整性,因為hashes 都會上到L1上。 而且,他們有各自的可用性保證。 - -## 先決條件 {#prerequisites} - -你應該對 [區塊鏈基礎](/developers/docs/intro-to-ethereum/) 有良好的理解, 同時也建議讀者熟悉[blocks](/developers/docs/blocks/), [transactions](/developers/docs/transactions/) ,和相關的主題。 - -## EIP-4844 blobs {#eip-4844-blobs} - -從 [坎昆升級](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/beacon-chain.md) 開始,以太坊納入了 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844),讓以太坊上的資料 blobs可以存在一小段時間(大約 [18 天](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/p2p-interface.md#configuration))。 儘管是相同的機制,Blobs根據[execution gas](/developers/docs/gas) 有不同的計價, 這是一個發布暫時性資料的便宜方法。 - -主要的EIP-4844 blobs應用場景是 rollups 發布發交易。 [Optimistic rollups](/developers/docs/scaling/optimistic-rollups) 需要發布交易到鏈上, 這些交易在[挑戰期間](https://docs.optimism.io/connect/resources/glossary#challenge-period) 都必須是讓所有人可得,讓[validators](https://docs.optimism.io/connect/resources/glossary#validator) 把 [sequencer](https://docs.optimism.io/connect/resources/glossary#sequencer) 在rollup時發布的state root錯誤有機會做修正。 - -一旦挑戰期過了而且state root 也已經進入最終狀態,最後獲得這些交易的方法是複製鏈的現有狀態。 只需要少數的處理,從鏈的節點上也可以取得這個狀態, 交易資訊仍應該存在其他地方,像是 [區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers),但不需要對以太坊的抗審查付費。 - -[Zero-knowledge rollups](/developers/docs/scaling/zk-rollups/#data-availability) 也會發布交易資訊讓其他的節點去複製現有的狀態以及有效性證明,但這也只是在短時間內可以取得。 - -EIP-4844 寫入的費用大約每byte 1wei (10-18 ETH),相較於 [每筆交易21000 execution gas基本交易費用,包含blobs 資料寫入、花費](https://eth.blockscout.com/tx/0xf6cfaf0431c73dd1d96369a5e6707d64f463ccf477a4131265397f1d81466929?tab=index) 微乎其微可忽略不計。 可以從此查看目前EIP-4844 的價格[blobscan.com](https://blobscan.com/blocks)。 - -Rollups常見的blobs 發布地址 - -| Rollup | Mailbox address | -| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | -| [Optimism](https://www.optimism.io/) | [`0xFF00000000000000000000000000000000000010`](https://blobscan.com/address/0xFF00000000000000000000000000000000000010) | -| [Arbitrum](https://arbitrum.io/) | [`0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6`](https://blobscan.com/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6) | -| [Base](https://base.org/) | [`0xFF00000000000000000000000000000000008453`](https://blobscan.com/address/0xFF00000000000000000000000000000000008453) | - -## Calldata {#calldata} - -Calldata 是交易中一起發送的bytes中的一部分, 將區塊鏈上的永久紀錄儲存於包含這筆交易的區塊之中。 - -這是在區塊鏈上儲存永久資料最經濟的方法, 每byte的不是4 execution gas(假設是0 byte) 就是 16 gas(其他數字). 一般來說資料是被壓縮過的,每個byte的價格會差不多,每byte平均花費15.95gas。 - -當寫入價格在12 gwei/gas與2300 $/ETH時,每kilobyte 約45美分, 因為這是在EIP-4844出現前最便宜的rollups 儲存交易資訊的方式,這些資訊用來提供[錯誤挑戰](https://docs.optimism.io/stack/protocol/overview#fault-proofs),但是不能直接從鏈上取得。 - -以下是常見的rollups 發布交易時使用的地址: - -| Rollup | Mailbox address | -| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | -| [Optimism](https://www.optimism.io/) | [`0xFF00000000000000000000000000000000000010`](https://eth.blockscout.com/address/0xFF00000000000000000000000000000000000010) | -| [Arbitrum](https://arbitrum.io/) | [`0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6`](https://eth.blockscout.com/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6) | -| [Base](https://base.org/) | [`0xFF00000000000000000000000000000000008453`](https://eth.blockscout.com/address/0xFF00000000000000000000000000000000008453) | - -## 鏈下與L1 的機制 {#offchain-with-l1-mechs} - -根據你對安全的取捨,可以將資料放在別處並運用機制確保資料可取得, 需要具備以下兩個條件才可以達成: - -1. 發布[hash](https://en.wikipedia.org/wiki/Cryptographic_hash_function) 到鏈上,叫做_input commitment_, 這是單個 32-byte 的字,不是很貴, 只要輸入的承諾是確實存在的,完整性就會被確保,因為不可能找到其他資料會有相同的hash, 因此,若提供錯誤的資料,會馬上被發現。 - -2. 有個確保資料可取得性的機制, 舉例來說,在 [Redstone](https://redstone.xyz/docs/what-is-redstone)任何節點都可以提交資料可取得的挑戰, 若sequencer沒有在鏈上即時回應,輸入的commitment就會被丟棄,因此會認爲這些資訊是從來沒有發布過的。 - -在Optimistic rollup上這樣的機制是可以被接受的,因為我們已經仰賴最少有一個對state root誠實的驗證者, 這個誠實的驗證者必須確認有資料去處理區塊,並且當在鏈下無法得資料時發起資料可取得的挑戰, 這種Optimistic rollup稱為[plasma](/developers/docs/scaling/plasma/)。 - -## 合約程式碼 {#contract-code} - -資訊只需要寫入一次,不會被覆寫,並可從鏈上取得且要作為合約程式碼儲存, 意味著我們用資料創造了“智慧合約”,並用 [`EXTCODECOPY`](https://www.evm.codes/#3c?fork=shanghai) 讀取資訊, 優點是複製程式碼相對便宜。 - -除了memory擴展的花費, `EXTCODECOPY`第一次讀取合約需要花2600 gas(當他還是”cold"的狀態),之後複製相同的合約需要100gas再加上每32 byte 3 gas, 相較於calldata,每byte花費 15.95,從一開始就節省了約200 bytes。 基於[擴展記憶體花費的公式](https://www.evm.codes/about#memoryexpansion),如果你不需要超過4MB 的記憶體,記憶體擴展的花費會少於用增加calldata的方式。 - -當然,這只是 _read_資料的花費, 建立合約需花費約32,000 gas + 200 gas/byte, 這是當不同的交易要多次讀取相同資料唯一經濟的方法。 - -合約程式碼可以是無意義的,只要不是`0xEF`開頭, 嚴格限制 `0xEF`開頭的合約代表 [ethereum object format](https://notes.ethereum.org/@ipsilon/evm-object-format-overview)。 - -## Events {#events} - -[Events](https://docs.alchemy.com/docs/solidity-events)是被合約觸發的,可以被鏈下軟體讀取, -好處是鏈下的程式碼可以監聽事件, 花費是用 [gas](https://www.evm.codes/#a0?fork=cancun) 計,375 加上每byte 8 gas。 當 12 gwei/gas、 ETH價格為2300美元時,每kilobyte 約1美分+22美分 - -## Storage {#storage} - -智慧合約有進入 [persistent storage](https://docs.alchemy.com/docs/smart-contract-storage-layout#what-is-storage-memory)的權利, 但是很貴, 寫入一個32byte原本空著的storage slot 會 [花費 22,100 gas](https://www.evm.codes/#55?fork=cancun), 當 12 gwei/gas、 ETH價格為2300美金時,每個操作大約是61美分或每kilobyte$19.5美元。 - -這是以太坊最貴的儲存方式。 - -## 總結 {#summary} - -下表列出了各種方式的優點和缺點: - -| 儲存方式 | 資料來源 | 可取得性保證 | 鏈上可取得性 | 其他限制 | -| -------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------- | ---------------------- | -| EIP-4844 blobs | 鏈下 | 以太坊保證[~約18 天](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/p2p-interface.md#configuration) | 只可取得Hash | | -| Calldata | 鏈下 | 以太坊永久保證(部分區塊鏈) | 只有在當寫入合約當下的交易中可取得 | | -| 鏈下與L1的機制 | 鏈下 | 在挑戰期內"One honest verifier" 保證 | 只有Hash | 只有在挑戰期間,由挑戰機制保護 | -| 合約程式碼 | 鏈上或鏈下 | 以太坊永久保證(部分區塊鏈) | 是 | 寫入“隨機”的地址,但不能是`0xEF`開頭 | -| 事件 | 鏈上 | 以太坊永久保證(部分區塊鏈) | 否 | | -| 儲存 | 鏈上 | 以太坊永久保證 (部分區塊鏈和目前的狀態直到被覆寫) | 是 | | diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/index.md deleted file mode 100644 index 622c993994c..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/data-availability/index.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: 資料可用性 -description: 以太坊中的資料可得性問題與解決方案概覽 -lang: zh-tw ---- - -「不輕易相信,而是去驗證。」是以太坊盛行的座右銘, 意為你的節點可以通過執行從同行那裡接收的區塊中的所有交易,獨立驗證接收到的信息是否正確,以確保所提出的變更與節點獨立計算的變更完全相符, 這意味著節點不需要信任區塊的發送者是否為可信的, 如有任何資料缺失則這無法實現。 - -**資料可得性**指的是用戶可以對所需資料的可得性有多大的信心,以驗證該區塊的數據是否真的對所有網絡參與者皆可用。 相對於以太坊第一層的完整節點來說這很簡單;完整節點下載每個區塊中的所有資料副本 - 資料_必須_可用於下載。 有缺失資料的區塊將被捨棄,不會被添加到區塊鏈上。 這就是「鏈上資料可得性」,是大一統區塊鏈(相較於充滿了擴容方案如 rollups 的不太一統的區塊鏈)的功能之一。 完整節點不會被騙接受無效的交易,因為它們會下載並執行每個交易。 然而,對於模組化的區塊鏈、L2 rollups 和light clients,資料可用性的情境更為複雜,需要一些更為精密的驗證程序。 - -## 先備知識 {#prerequisites} - -讀者應該對於區塊鏈具備足夠的基本知識,特別是共識機制。 本頁面還假設讀者熟悉區塊、交易、節點、擴展解決方案以及其他相關主題。 - -## 資料可得性問題 {#the-data-availability-problem} - -資料可得性問題是,需要向整個網路證明正在添加到區塊鏈的某些交易資料的總結形式確實代表一組有效的交易,但不要求所有的節點都下載所有的資料。 為了獨立地驗證區塊,所有交易的資料是必要的,但要求所有節點都要下載全部的交易資料是個擴容的瓶頸。 因此,資料可得性問題的解決方案是希望向不下載、不儲存資料的網路參與者,提供足夠的保證來代表所有交易的資料是可得、可供取用於驗證的。 - -[輕節點](/developers/docs/nodes-and-clients/light-clients)和[L2 卷(rollups)](/developers/docs/scaling)就是需要強力的資料可得性保證、但不會自行下載與處理交易資料的經典案例。 畢竟,不下載交易資料才能稱作「輕」節點,而卷(rollups)才能有效的擴容。 - -資料可得性問題也對未來的[無狀態](/roadmap/statelessness)以太坊客戶端來說至關重要,這樣他們才不需要下載及儲存狀態的資料來驗證區塊。 無狀態的客戶端仍需要確信資料在_某處_是可取得的,而且有被正確地處理。 - -## 資料可得性解決方案 {#data-availability-solutions} - -### 資料可得性採樣(DAS) {#data-availability-sampling} - -資料可得性採樣(DAS)是指讓網路能檢查資料是可取得的,但同時不在任何的獨立節點上加諸太多要求。 每個節點(包含沒有質押的節點)下載所有交易資料的隨機一小部分, 若能成功地下載到採樣,我們就能高度相信所有資料都是可得的。 這要仰賴於糾刪碼,把一組原本的資料塞入冗余的資訊(其原理是把資料套上稱為_多項式_的函式(function),然後在該多項式上找出其他點來作為冗余的資訊)。 這讓原本的資料在必要時,可以透過冗余的資料來還原。 這種資料處理方式的結果是,如果有_任何_原本的資料不可得,那擴增資料的_一半_就也會遺失。 而每個節點下載的資料採樣樹可以被調整,來確保如果真的只有不到一半的資料是可得的,那每個客戶端至少會有一個資料片段是缺失的。 - -資料可得性採樣可以用以確保在[Full Danksharding](/roadmap/danksharding/#what-is-danksharding)上線後,卷的交易處理者需要讓交易的資料是可得的。 以太坊節點會隨機地向 blob 中的資料採樣,用前述提到的糾刪碼來確保所有資料真的都存在。 同樣的技術也可以用來確保區塊製造者會讓所有的資料都是可得的,來保障輕節點的安全性。 同樣的,在[區塊提議、製造者分離(PBS)](/roadmap/pbs)中,只有區塊製造者需要處理整個區塊,驗證者(提議者)只要驗證資料可得性的採樣。 - -### 資料可得性委員會 {#data-availability-committees} - -Data Availability Committees (DACs) are trusted parties that provide, or attest to, data availability. DACs can be used instead of, [or in combination with](https://hackmd.io/@vbuterin/sharding_proposal#Why-not-use-just-committees-and-not-DAS) DAS. The security guarantees that come with committees depends on the specific set up. Ethereum uses randomly sampled subsets of validators to attest to data availability for light nodes, for example. - -DACs are also used by some validiums. The DAC is a trusted set of nodes that stores copies of data offline. The DAC is required to make the data available in the event of a dispute. Members of the DAC also publish on-chain attestations to prove that the said data is indeed available. Some validiums replace DACs with a proof-of-stake (PoS) validator system. Here, anyone can become a validator and store data off-chain. However, they must provide a “bond”, which is deposited in a smart contract. In the event of malicious behavior, such as the validator withholding data, the bond can be slashed. 權益證明資料可用性委員會在安全性方面明顯優於一般資料可用性委員,因為它們直接激勵誠實的行為。 - -## 資料可用性與輕節點 {#data-availability-and-light-nodes} - -[Light nodes](/developers/docs/nodes-and-clients/light-clients) need to validate the correctness of the block headers they receive without downloading the block data. 輕節點輕量化的代價就是無法像全節點一樣在本地獨立地重新執行交易以驗證區塊頭。 - -Ethereum light nodes trust random sets of 512 validators that have been assigned to a _sync committee_. 同步委員會充當數據可用性委員會,使用加密簽名向輕節點表明區塊頭中的數據是正確的。 同步委員會每天都會刷新。 Each block header alerts light nodes as to which validators to expect to sign off the _next_ block, so they can't be tricked into trusting a malicious group pretending to be the real sync-committee. - -However, what happens if an attacker somehow _does_ manage to pass a malicious block header to light clients and convince them that it was signed off by an honest sync-committee? 在這種情況下,攻擊者可能會添加無效的交易,而輕節點將盲目地接受它們,因為輕節點無法獨立驗證匯總在區塊頭中的所有狀態變化。 為了防止這種情況,輕節點可以使用詐欺證明。 - -詐欺證明的工作原理如下:全節點發現一個無效狀態轉換在網路上廣播時,可以快速產生證明已提議狀態轉換不可能源自給定一組交易的一小段數據,並把這段數據廣播到對等節點。 輕節點可以選取這些詐欺證明並用來丟棄有害的區塊頭,確保它們和全節點留在相同的誠實區塊鏈上。 - -這仰仗於全節點能夠存取完整的交易資料。 廣播有害區塊頭並且不提供交易資料的攻擊者可能能夠阻止全節點產生詐欺證明。 全節點也許可以發出關於有害區塊的警告,但沒有證據來證明它們的警告,因為沒有可用於產生證明據的數據! - -數據可用性採樣可以解決這個數據可用性問題。 輕節點下載完整狀態資料的小隨機片段,並使用這些樣本驗證完整資料集可用。 The actual likelihood of incorrectly assuming full data availability after downloading N random chunks can be calculated ([for 100 chunks the chance is 10^-30](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html), i.e. incredibly unlikely). - -Even in this scenario, attacks that withhold just a few bytes could feasibly go unnoticed by clients making random data requests. Erasure coding fixes this by reconstructing small missing pieces of data that can be used to check proposed state changes. A fraud proof could then be constructed using the reconstructed data, preventing light nodes from accepting bad headers. - -**Note:** DAS and fraud proofs have not yet been implemented for proof-of-stake Ethereum light clients, but they are on the roadmap, most likely taking the form of ZK-SNARK based proofs. Today's light clients rely on a form of DAC: they verify the identities of the sync-committee and then trust the signed block headers they receive. - -## Data availability and layer 2 rollups {#data-availability-and-layer-2-rollups} - -[Layer 2 scaling solutions](/layer-2/), such as [rollups](/glossary/#rollups), reduce transaction costs and increase Ethereum's throughput by processing transactions off-chain. Rollup transactions are compressed and posted on Ethereum in batches. Batches represent thousands of individual off-chain transactions in a single transaction on Ethereum. This reduces congestion on the base layer and reduces fees for users. - -However, it is only possible to trust the 'summary' transactions posted to Ethereum if the state change proposed can be independently verified and confirmed to be the result of applying all the individual off-chain transactions. If rollup operators do not make the transaction data available for this verification, then they could send incorrect data to Ethereum. - -[Optimistic rollups](/developers/docs/scaling/optimistic-rollups/) post compressed transaction data to Ethereum and wait for some amount of time (typically 7 days) to allow independent verifiers to check the data. If anyone identifies a problem, they can generate a fraud-proof and use it to challenge the rollup. This would cause the chain to roll back and omit the invalid block. 只有在數據可用時,才能實現這一點。 目前,樂觀卷疊有兩種方式將交易資料發佈到一層網路。 Some rollups make data permanently available as `CALLDATA` which lives permanently on-chain. With the implementation of EIP-4844, some rollups post their transaction data to cheaper blob storage instead. This is not permanent storage. Independent verifiers have to query the blobs and raise their challenges within ~18 days before the data is deleted from Ethereum layer-1. Data availability is only guaranteed by the Ethereum protocol for that short fixed window. After that, it becomes the responsibility of other entities in the Ethereum ecosystem. Any node can verify data availability using DAS, i.e. by downloading small, random samples of the blob data. - -[Zero-knowledge (ZK) rollups](/developers/docs/scaling/zk-rollups) don't need to post transaction data since [zero-knowledge validity proofs](/glossary/#zk-proof) guarantee the correctness of state transitions. However, data availability is still an issue because we can't guarantee the functionality of the ZK-rollup (or interact with it) without access to its state data. For example, users cannot know their balances if an operator withholds details about the rollup’s state. Also, they cannot perform state updates using information contained in a newly added block. - -## Data availability vs. data retrievability {#data-availability-vs-data-retrievability} - -Data availability is different from data retrievability. Data availability is the assurance that full nodes have been able to access and verify the full set of transactions associated with a specific block. It does not necessarily follow that the data is accessible forever. - -Data retrievability is the ability of nodes to retrieve _historical information_ from the blockchain. This historical data is not needed for verifying new blocks, it is only required for syncing full nodes from the genesis block or serving specific historical requests. - -核心以太坊協議主要關注數據可用性,而不是數據可檢索性。 資料可檢索性可以由第三方運行的少量存檔節點提供,也可以使用去中心化檔案儲存(例如 [入口網站)在網路上分散網路](https://www.ethportal.net/)。 - -## 延伸閱讀 {#further-reading} - -- [WTF is Data Availability?](https://medium.com/blockchain-capital-blog/wtf-is-data-availability-80c2c95ded0f) -- [What Is Data Availability?](https://coinmarketcap.com/alexandria/article/what-is-data-availability) -- [The Ethereum Off-Chain Data Availability Landscape](https://blog.celestia.org/ethereum-off-chain-data-availability-landscape/) -- [A primer on data availability checks](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html) -- [An explanation of the sharding + DAS proposal](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling) -- [A note on data availability and erasure coding](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding#can-an-attacker-not-circumvent-this-scheme-by-releasing-a-full-unavailable-block-but-then-only-releasing-individual-bits-of-data-as-clients-query-for-them) -- [Data availability committees.](https://medium.com/starkware/data-availability-e5564c416424) -- [Proof-of-stake data availability committees.](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) -- [Solutions to the data retrievability problem](https://notes.ethereum.org/@vbuterin/data_sharding_roadmap#Who-would-store-historical-data-under-sharding) -- [Data Availability Or: How Rollups Learned To Stop Worrying And Love Ethereum](https://ethereum2077.substack.com/p/data-availability-in-ethereum-rollups) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/dex-design-best-practice/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/dex-design-best-practice/index.md deleted file mode 100644 index faa2c37a809..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/dex-design-best-practice/index.md +++ /dev/null @@ -1,220 +0,0 @@ ---- -title: 去中心化交易所(DEX) 設計的最佳實踐 -description: 交換代幣的 UX/UI 設計決策指南 -lang: zh-tw ---- - -自 2018 年 Uniswap 推出以來,已經有數百個去中心化交易所(DEX) 在不同的區塊鏈上推出。 -其中許多去中心化交易所引入新的元素或增加自己的特色,但他們依然保有整體介面的一致性。 - -能做到這樣的原因之一,就是遵循 Jackob 法則(Jakob’s Law): - -> 使用者大多數時間在使用其他網站, 他們會更喜歡您的網站與其他已經很熟悉的網站以相同方式運作。 - -多虧有像 Uniswap、Pancakeswap 和 Sushiswap 這類型的早期創新者,DeFi 使用者對去中心化交易所(DEX)的樣貌有了共同的認知。 -因此,現在有了「最佳實踐」。 我們看到越來越多不同平台的設計逐漸標準化。 你可以將去中心化交易所的演變,看成一個大型的即時測試案例。 有用的設計被保留下來,不好的設計會被淘汰, 雖然應該要保有設計彈性,但去中心化交易所的設計應遵循某些規範。 - -這篇文章會提到 - -- 要引入什麼 -- 如何提升易用性 -- 如何進行有彈性的設計 - -所有範例線框圖都是基於真實案例,專為本文製作而成。 - -Figma 工具包就放在文末,歡迎用來加速您的線框圖設計! - -## 拆解去中心化交易所的基本設計要素 {#basic-anatomy-of-a-dex} - -UI 通常包含下列三種元素: - -1. 主介面 -2. 按鍵 -3. 資訊選單 - -![Generic DEX UI, showing the three main elements](./1.png) - -## 變化 {#variations} - -這將是本文的通用主題,但這三個元素有許多不同的組織方式。 資訊頁面的變化包含: - -- 位在按鍵上方 -- 位在按鍵下方 -- 隱藏在折疊區內 -- 或者是在預覽模式內 - -請注意: 雖然預覽模式不是必要的,但若主介面顯示的資訊非常少,那就必須使用預覽模式。 - -## 主介面的架構 {#structure-of-the-main-form} - -您可以在這個區塊選擇要交換的代幣。 這個元件是由一個輸入欄位與一個小型按鍵排列組成。 - -去中心化交易所會根據使用情境,通常會在這個上方或下方,顯示額外的說明文字。 - -![Input row, with a details row above and below](./2.png) - -## 變化 {#variations2} - -Two UI variations are shown here; one without any borders, creating a very open design, and one where the input row has a border, creating a focus on that element. - -![Two UI variations of the main form](./3.png) - -This basic structure allows **four key pieces of info** to be shown in the design: one in each corner. If there is only one top/bottom row, then there are only two spots. - -During the evolution of DeFi, lots of different things have been included here. - -## 需要包含的關鍵資訊 {#key-info-to-include} - -- 錢包餘額 -- Max button -- 等價法定貨幣 -- Price impact on the “received” amount - -在去中心化金融的早期,等價法定貨幣常常被忽略。 無論你正在構建任何類型的 Web3 項目,顯示等價法定貨幣都是至關重要的。 用戶仍然以本地貨幣進行思考。因此,爲了與真實世界的心理模型相匹配,等價法定貨幣應該包含在内。 - -在第二個欄位 (你選擇交換的目標代幣),你還可以透過計算輸入金額與預計輸出金額之間的差異,在法定貨幣金額旁包含價格影響。 這是一個相當實用的細節。 - -Percentage buttons (e.g. 25%, 50%, 75%) can be a useful feature, but they take up more space, add more call to actions, and add more mental load. Same with percentage sliders. Some of these UI decisions will depend on your brand and your user type. - -Extra details can be shown below the main form. As this type of info is mostly for pro users, it makes sense to either: - -- keep it as minimal as possible, or; -- hide it in an accordion panel - -![Details shown in the corners of that main form](./4.png) - -## Extra info to include {#extra-info-to-include} - -- 幣價 -- 滑點 -- Minimum received -- Expected output -- Price impact -- 燃料成本估算 -- 其他費用 -- Order routing - -Arguably, some of these details could be optional. - -Order routing is interesting, but doesn’t make much difference to most users. - -Some other details are simply restating the same thing in different ways. For example “minimum received” and “slippage” are two sides of the same coin. If you have slippage set at 1%, then the minimum you can expect to receive = expected output-1%. Some UIs will show expected amount, minimum amount, and slippage… Which is useful but possibly overkill. - -Most users will leave default slippage anyway. - -“Price impact” is often shown in brackets next to the fiat equivalent in the “to” field. This is a great ux detail to add, but if it is shown here, does it really need to be shown again below? And then again on a preview screen? - -Many users (especially those swapping small amounts) will not care about these details; they will simply enter a number and hit swap. - -![Some details show the same thing](./5.png) - -Exactly what details are shown will depend on your audience and what feel you want the app to have. - -If you do include slippage tolerance in the details panel, you should also make it editable directly from here. This is a good example of an “accelerator”; a neat UX trick that can speed up experienced users’ flows, without impacting the general usability of the app. - -![Slippage can be controlled from the details panel](./6.png) - -It’s a good idea to think carefully about not just one specific piece of information on one screen, but about the entire flow through: -Entering numbers in Main Form → Scanning Details → Clicking to Preview Screen (if you have a preview screen). -Should the details panel be visible at all times, or does the user need to click it to expand? -Should you create friction by adding a preview screen? This forces the user to slow down and consider their trade, which can be useful. But do they want to see all the same info again? What is most useful to them at this point? - -## 設計選項 {#design-options} - -As mentioned, a lot of this comes down to your personal style -Who is your user? -What is your brand? -Do you want a “pro” interface showing every detail, or do you want to be minimalist? -Even if you’re aiming for the pro users who want all info possible, you should still remember Alan Cooper’s wise words: - -> No matter how beautiful, no matter how cool your interface, it would be better if there were less of it. - -### 結構 {#structure} - -- 代幣在左邊或是右邊 -- 2 行或 3 行 -- details above or below the button -- details expanded, minimized, or not shown - -### Component style {#component-style} - -- empty -- outlined -- filled - -From a pure UX point of view, UI style matters less than you think. Visual trends come and go in cycles, and a lot of preference is subjective. - -The easiest way to get a feel for this - and think about the various different configurations - is to take a look at some examples and then do some experimenting yourself. - -The included Figma kit contains empty, outlined and filled components. - -Take a look at the below examples to see different ways you can put it all together: - -![3 rows in a filled style](./7.png) - -![3 rows in a outlined style](./8.png) - -![2 rows in an empty style](./9.png) - -![3 rows in an outlined style, with a details panel](./10.png) - -![3 rows with the input row in an outlined style](./11.png) - -![2 rows in a filled style](./12.png) - -## But which side should the token go on? {#but-which-side-should-the-token-go-on} - -The bottom line is that it probably doesn’t make a huge difference to usability. There are a few things to bear in mind, however, which might sway you one way or the other. - -It’s been mildly interesting to see the fashion change with time. Uniswap initially had the token on the left, but has since moved it to the right. Sushiswap also made this change during a design upgrade. Most, but not all, protocols have followed suit. - -Financial convention traditionally puts the currency symbol before the number, e.g. $50, €50, £50, but we _say_ 50 dollars, 50 Euros, 50 pounds. - -對於一般用戶,特別是從左到右、從上到下閱讀的人,在右邊的代幣可能感覺更自然。 - -![A UI with tokens on the left](./13.png) - -Putting the token on the left and all the numbers on the right looks pleasingly symmetrical, which is a plus, but there is another downside to this layout. - -The law of proximity states that items that are close together are perceived as related. Accordingly, we want to place related items next to each other. The token balance is directly related to the token itself, and will change whenever a new token is selected. It therefore makes slightly more sense for the token balance to be next to the token select button. It could be moved underneath the token, but that breaks the symmetry of the layout. - -Ultimately, there are pluses and minuses for both options, but it is interesting how the trend appears to be towards token on the right. - -# 按鍵行為 {#button-behavior} - -Don’t have a separate button for Approve. Also don’t have a separate click for Approve. The user wants to Swap, so just say “swap” on the button and initiate the approval as the first step. A modal can show progress with a stepper, or a simple “tx 1 of 2 - approving” notification. - -![A UI with separate buttons for approve and swap](./14.png) - -![A UI with one button that says approve](./15.png) - -## Button as contextual help {#button-as-contextual-help} - -The button can do double duty as an alert! - -This is actually a fairly unusual design pattern outside of Web3, but has become standard within it. This is a good innovation as it saves space, and keeps attention focused. - -If the main action - SWAP - is unavailable due to an error, the reason why can be explained with the button, e.g.: - -- switch network -- 連結錢包 -- various errors - -The button can also be **mapped to the action** that needs to be performed. For example, if the user cannot swap because they are on the wrong network, the button should say “switch to Ethereum”, and when the user clicks on the button, it should switch the network to Ethereum. This speeds up the user flow significantly. - -![Key actions being initiated from the main CTA](./16.png) - -![Error message shown within the main CTA](./17.png) - -## Build your own with this figma file {#build-your-own-with-this-figma-file} - -Thanks to the hard work of multiple protocols, DEX design has improved a lot. We know what info the user needs, how we should show it, and how to make the flow as smooth as possible. -Hopefully this article provides a solid overview of the UX principles. - -If you want to experiment, please feel free to use the Figma wireframe kit. It is kept as simple as possible, but has enough flexibility to build the basic structure in various ways. - -[Figma wireframe kit](https://www.figma.com/community/file/1393606680816807382/dex-wireframes-kit) - -DeFi will continue to evolve, and there is always room for improvement. - -祝你好運! diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/heuristics-for-web3/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/heuristics-for-web3/index.md deleted file mode 100644 index dee361e060f..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/heuristics-for-web3/index.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: 7 heuristics for Web3 interface design -description: Principles to improve the usability of Web3 -lang: zh-tw ---- - -可用性啓發法是廣泛的 “經驗法則”,你可以用其來衡量網站的可用性。 -這些啓發法是爲 Web3 量身定制的,并且應該與 Jakob Nielsen 的[介面設計的 10 條通用原則](https://www.nngroup.com/articles/ten-usability-heuristics/)一起使用。 - -## Seven usability heuristics for web3 {#seven-usability-heuristics-for-web3} - -1. Feedback follows action -2. Security and trust -3. The most important info is obvious -4. Understandable terminology -5. Actions are as short as possible -6. Network connections are visible and flexible -7. Control from the app, not the wallet - -## Definitions and examples {#definitions-and-examples} - -### 1. Feedback follows action {#feedback-follows-action} - -**It should be obvious when something has happened, or is happening.** - -Users decide on their next steps based on the outcome of their previous steps. Therefore it is essential that they remain informed about the system status. This is especially important in Web3 as transactions can sometimes take a short time to commit to the blockchain. If there is no feedback informing them to wait, users are unsure if anything has happened. - -**Tips:** - -- Inform the user via messaging, notifications, and other alerts. -- Communicate waiting times clearly. -- If an action is going to take longer than a few seconds, reassure the user with a timer or an animation to make them feel like something is happening. -- If there are multiple steps to a process, show each step. - -**Example:** -Showing each step involved in a transaction helps users know where they are in the process. Appropriate icons let the user know the status of their actions. - -![Informing the user about each step when swapping tokens](./Image1.png) - -### 2. Security and trust are baked in {#security-and-trust-are-backed-in} - -Security should be prioritized, and this should be emphasized for the user. -People care deeply about their data. Safety is often a primary concern for users, so it should be considered at all levels of the design. You should always be seeking to earn the trust of your users, but the way you do this can mean different things on different apps. It should not be an afterthought, but should be designed consciously throughout. Build trust throughout the user experience, including social channels and documentation, as well as the final UI. Things like the level of decentralization, the treasury multi-sig status, and whether the team is doxxed, all affect users' trust - -**Tips:** - -- List your audits proudly -- Get multiple audits -- Advertise any safety features that you designed -- Highlight possible risks, including underlying integrations -- Communicate complexity of strategies -- Consider non-UI issues that might affect your users' perception of safety - -**Example:** -Include your audits in the footer, at a prominent size. - -![Audits refernced in the website footer](./Image2.png) - -### 3 The most important info is obvious {#the-most-important-info-is-obvious} - -For complex systems, show only the most relevant data. Determine what is most important, and prioritize its display. -Too much information is overwhelming and users typically anchor on one piece of information when making decisions. In DeFi, this will probably be APR on yield apps and LTV on lending apps. - -**Tips:** - -- User research will uncover the most important metric -- Make the key info big, and the other details small and unobtrusive -- People don’t read, they scan; ensure your design is scannable - -**Example:** Large tokens in full color are easy to find when scanning. The APR is big and highlighted in an accent color. - -![The token and APR are easy to find](./Image3.png) - -### 4 Clear terminology {#clear-terminology} - -Terminology should be understandable and appropriate. -Technical jargon can be a huge blocker, because it requires the construction of a completely new mental model. Users are unable to relate the design to words, phrases and concepts they already know. Everything seems confusing and unfamiliar, and there is a steep learning curve before they can even attempt to use it. 用戶可能是出於省錢目的而接觸到去中心化金融的,而他們找到的卻是: 挖礦、礦池、質押、排放、賄賂、金庫、置物櫃、投票托管代幣、歸屬、時期、去中心化演算法、協議自有流動性… -Try to use simple terms that will be understood by the broadest group of people. Do not invent brand new terms just for your project. - -**Tips:** - -- Use simple and consistent terminology -- Use existing language as much as possible -- Don’t come up with your own terms -- Follow conventions as they appear -- Educate users as much as possible - -**Example:** -“Your rewards” is a broadly understood, neutral, term; not a new word made up for this project. The rewards are denominated in USD to match real world mental models, even if the rewards themselves are in another token. - -![Token rewards, displayed in U.S. dollars](./Image4.png) - -### 5 Actions are as short as possible {#actions-are-as-short-as-possible} - -Speed up the user’s interactions by grouping sub actions. -This may be done on the smart contract level, as well as the UI. 用戶不應該從系統的一部分移動到另一部分 - 或者完全離開系統 - 來完成一個常見的操作。 - -**Tips:** - -- Combine "Approve" with other actions where possible -- Bundle signing steps as close together as possible - -**Example:** Combining “add liquidity” and “stake” is a simple example of an accelerator that saves a user both time and gas. - -![Modal showing a switch to combine the deposit and stake actions](./Image5.png) - -### 6. Network connections are visible and flexible {#network-connections-are-visible-and-flexible} - -向用戶告知他們所連結的網路,並提供清晰的切換網路的快鍵。 -This is especially important on multichain apps. 當斷開連結或連結到不支持的網路時,應用程式的主要功能仍然應該可見。 - -**Tips:** - -- Show as much of the app as possible while disconnected -- Show which network the user is currently connected to -- Don’t make the user go to the wallet to change network -- If the app requires the user to switch network, prompt the action from the main call to action -- If the app contains markets or vaults for multiple networks, clearly state which set the user is currently looking at - -**例如:** 向用戶展示他們所連結的網路,並允許他們在應用程式欄中進行更改。 - -![Dropdown button showing the connected network](./Image6.png) - -### 7. Control from the app, not the wallet {#control-from-the-app-not-the-wallet} - -用戶介面應該告訴用戶他們需要知道的所有内容,並使他們能夠控制需要控制的一切。 -In Web3, there are actions you take in the UI, and actions you take in the wallet. Generally, you initiate an action in the UI, and then confirm it in the wallet. Users can feel uncomfortable if these two strands are not integrated carefully. - -**Tips:** - -- Communicate system status via feedback in the UI -- Keep a record of their history -- Provide links to block explorers for old transactions -- Provide shortcuts to change networks. - -**Example:** A subtle container shows the user what relevant tokens they have in their wallet, and the main CTA provides a shortcut to change the network. - -![Main CTA is prompting the user to switch network](./Image7.png) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/index.md deleted file mode 100644 index c5f9b5570aa..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/design-and-ux/index.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Web3 中的設計和用戶體驗 -description: 介紹 Web3 領域和以太坊中的用戶體驗設計和研究 -lang: zh-tw ---- - -你不熟悉用以太坊進行設計嗎? 如果是的話,那麼這個地方你來對了。 以太坊社區中有很多介紹 Web3 的設計和研究資源。 你將學習一些核心概念,它們可能與你熟悉的其他應用程式設計不同。 - -需要先對 Web3 有更基本的瞭解嗎? 請瀏覽[**學習中心**](/learn/)。 - -## 從用戶研究開始 {#start-with-user-research} - -實用的介面設計勝過只是視覺上吸引人的設計, 還涉及到深入瞭解用戶需求、目標以及驅動因素。 因此,我們強烈建議所有設計師採用[**雙鑽石設計流程**](https://en.wikipedia.org/wiki/Double_Diamond_(design_process_model)),以確保其設計經過深思熟慮且有意為之。 - -- [Web3 需要更多用戶體驗研究人員和設計師](https://blog.akasha.org/akasha-conversations-9-web3-needs-more-ux-researchers-and-designers) - 當前設計成熟度概述 -- [在 Web3 中進行用戶體驗研究的簡明指南](https://uxplanet.org/a-complete-guide-to-ux-research-for-web-3-0-products-d6bead20ebb1) - 研究方法簡易指南 -- [Web3 中的設計決策](https://archive.devcon.org/archive/watch/6/data-empathy-how-to-approach-ux-decisions-in-web3/)定量分析與定性分析的差異概覽(影片, 6 min) -- [Web3 中擔任用戶體驗研究人員](https://medium.com/@georgia.rakusen/what-its-like-being-a-user-researcher-in-web3-6a4bcc096849) - Web3 中擔任用戶體驗研究人員的個人看法 - -## Web3 中的研究 {#research-in-web3} - -以下是一份可以幫助激發設計靈感和產品決策的精選清單: - -| 聚焦領域 | 姓名 | -|:----------------------------------------------------- |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 加密貨幣入門 | [CRADL:加密貨幣中的用戶體驗](https://docs.google.com/presentation/d/1s2OPSH5sMJzxRYaJSSRTe8W2iIoZx0PseIV-WeZWD1s/edit?usp=sharing) | -| 加密貨幣入門 | [CRADL:加密貨幣入門](https://docs.google.com/presentation/d/1R9nFuzA-R6SxaGCKhoMbE4Vxe0JxQSTiHXind3LVq_w/edit?usp=sharing) | -| 加密貨幣入門 | [比特幣用戶體驗報告](https://github.com/patestevao/BitcoinUX-report/blob/master/report.md) | -| 加密貨幣入門 | [ConSensys:2023 年全球 Web3 認知度狀況](https://consensys.io/insight-report/web3-and-crypto-global-survey-2023) | -| 加密貨幣入門 | [NEAR:加速採用之路](https://drive.google.com/file/d/1VuaQP4QSaQxR5ddQKTMGI0b0rWdP7uGn/view) | -| 質押 | [質押:主要趨勢、要點與預測 - Eth Staker](https://lookerstudio.google.com/u/0/reporting/cafcee00-e1af-4148-bae8-442a88ac75fa/page/p_ja2srdhh2c?s=hmbTWDh9hJo) | -| 質押 | [各種質押App](https://github.com/threshold-network/UX-User-Research/blob/main/Multi-App%20Staking%20(MAS)/iterative-user-study/MAS%20Iterative%20User%20Study.pdf) | -| 去中心化自治組織 | [2022 年去中心化自治組織研究更新:去中心化自治組織構建者需要什麼?](https://blog.aragon.org/2022-dao-research-update/) | -| 去中央化金融 | [The state of Defi 2024](https://stateofdefi.org/) (ongoing survey) | -| 去中央化金融 | [Coverage pools](https://github.com/threshold-network/UX-User-Research/tree/main/Keep%20Coverage%20Pool) | -| 去中央化金融 | [ConSensys:2022 年去中心化金融用戶研究報告](https://cdn2.hubspot.net/hubfs/4795067/ConsenSys%20Codefi-Defi%20User%20ResearchReport.pdf) | -| 元宇宙 | [元宇宙:用戶研究報告](https://www.politico.com/f/?id=00000187-7685-d820-a7e7-7e85d1420000) | -| 元宇宙 | [Going on Safari: Researching Users in the Metaverse](https://archive.devcon.org/archive/watch/6/going-on-safari-researching-users-in-the-metaverse/?tab=YouTube) (video, 27 min) | -| Ethereum.org 用戶體驗數據 | [可用性與用戶滿意度調查儀表板 - Ethereum.org](https://lookerstudio.google.com/reporting/0a189a7c-a890-40db-a5c6-009db52c81c9) | - -## Web3 相關設計 {#design-for-web3} - -- [Web3 UX Design Handbook](https://web3ux.design/) - 設計Web3 apps 實際應用指南 -- [Web3 設計原則](https://medium.com/@lyricalpolymath/web3-design-principles-f21db2f240c1) - Dapp上的區塊鏈UX架構 -- [區塊鏈設計原則](https://medium.com/design-ibm/blockchain-design-principles-599c5c067b6e) - IBM 區塊鏈設計團隊的經驗教訓 -- [Web3 設計模式](https://www.web3designpatterns.io/) - 真實 Web3 產品的精選設計模式庫 -- [W3design.io](https://w3design.io/) - 生態系統中不同項目的精選用戶界面流程庫 -- [Neueux](https://neueux.com/apps) - 具有多種過濾選項的用戶界面流程庫 -- [Web3's Usability Crisis: What You NEED to Know!](https://www.youtube.com/watch?v=oBSXT_6YDzg) - A panel discussion on pitfalls of developer focused project building (video, 34 min) - -## Web3 設計案例研究 {#design-case-studies} - -- [加密貨幣用戶體驗手冊](https://deepwork.studio/case-studies/) -- [Crypto UX Handbook](https://www.cryptouxhandbook.com/) -- [在 OpenSea 售賣非同質化代幣](https://builtformars.com/case-studies/opensea) -- [Wallet UX teardown how wallets need to change](https://www.youtube.com/watch?v=oTpuxYj8JWI&ab_channel=ETHDenver) (video, 20 min) - -## 設計獎勵 {#bounties} - -- [Dework](https://app.dework.xyz/bounties) -- [Mirror Design System](https://app.buidlbox.io/) -- [ETHGlobal hackathons](https://ethglobal.com/) - -## 設計去中心化自治組織和社區 {#design-daos-and-communities} - -一起投入專業的自治組織或加入設計團體,與成員們聊聊設計、研究相關主題與趨勢。 - -- [Vectordao.com](https://vectordao.com/) -- [Deepwork.studio](https://www.deepwork.studio/) -- [Designer-dao.xyz](https://www.designer-dao.xyz/) -- [We3.co](https://we3.co/) -- [Openux.xyz](https://openux.xyz/) -- [Open Source Web3Design](https://www.web3designers.org/) - -## 設計系統 {#design-systems} - -- [Optimism Design](https://www.figma.com/@optimism) (Figma) -- [Ethereum.org Design system](https://www.figma.com/@ethdotorg) (Figma) -- [Finity, a design system by Polygon](https://www.figma.com/community/file/1073921725197233598/finity-design-system) (Figma) -- [Kleros Design System](https://www.figma.com/community/file/999852250110186964/kleros-design-system) (Figma) -- [Safe Design System](https://www.figma.com/community/file/1337417127407098506/safe-design-system) (Figma) -- [ENS Design system](https://thorin.ens.domains/) -- [Mirror Design System](https://degen-xyz.vercel.app/) - -**列在本頁的文章和專案不是由官方背書的**,僅作為資訊提供, 根據[列表政策](/contributing/design/adding-design-resources)在此頁中加入連結, 如果你想要新增計畫/文章,請在 [GitHub](https://github.com/ethereum/ethereum-org-website/blob/dev/public/content/developers/docs/design-and-ux/index.md)上編輯此頁。 diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/mev/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/mev/index.md deleted file mode 100644 index cf440090726..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/mev/index.md +++ /dev/null @@ -1,221 +0,0 @@ ---- -title: 最大可提取價值 (MEV) -description: 最大可提取價值 (MEV) 簡介 -lang: zh-tw ---- - -最大可提取價值 (MEV) 是指透過在區塊中新增和排除交易並更改區塊中的交易順序,可以從區塊生產中提取的超過標準區塊獎勵和燃料費用的最大值。 - -## 最大可提取價值 {#maximal-extractable-value} - -最大可提取價值首先應用於[工作量證明](/developers/docs/consensus-mechanisms/pow/)背景下,最初稱為「礦工可提取價值」。 此是因為於工作量證明, 礦工能選擇來交易之納入, 不納入, 及順序. 然而,自從透過[合併](/roadmap/merge)過渡到權益證明以來,驗證者一直承擔著這些角色的職責,並且挖礦不再是以太坊協議的一部分。 但價值提取方法仍然存在,因此現在使用的術語是「最大可提取價值」。 - -## 先決條件 {#prerequisites} - -確保你已熟悉[交易](/developers/docs/transactions/)、[區塊](/developers/docs/blocks/)、[權益證明](/developers/docs/consensus-mechanisms/pos)和[燃料](/developers/docs/gas/)。 熟悉[去中心化應用程式](/dapps/)和[去中央化金融](/defi/)也很有幫助。 - -## 提取最大可提取價值 {#mev-extraction} - -理論上,最大可提取價值完全屬於驗證者,因為他們是唯一可以保證執行有利可圖的最大可提取價值機會的一方。 實際上,大部分最大可提取價值是由稱為「搜尋者」的獨立網路參與者提取的。 搜尋者在區塊鏈數據上運行複雜的演算法來檢測盈利的最大可提取價值的機會,並且有機器人自動將這些盈利交易提交到網路。 - -無論如何,驗證者確實會獲得全部最大可提取價值金額的一部分,因為搜尋者願意支付高昂的燃料費用(這些費用將歸驗證者所有),以換取更高可能性將其有利可圖的交易納入一個區塊。 假設尋找者為完全經濟合理, Gas費此研究者願意來支付最大為100%之MEV利益(因為如果Gas費高於利益, 尋找者將會賠錢). - -因此,對於一些競爭激烈的最大可提取價值機會,例如[去中心化交易所套利](#mev-examples-dex-arbitrage),搜尋者可能不得不將其最大可提取價值總收入的 90% 甚至更多作為燃料費用支付給驗證者,因為很多人都想進行同樣有利可圖的套利交易。 這是因為確保套利交易運作的唯一方法,是提交最高燃料費用的交易。 - -### 燃料高爾夫 {#mev-extraction-gas-golfing} - -這種動態讓「燃料高爾夫」— 即能夠使用最少數量燃料的程式交易,成為一種競爭優勢。因為它允許搜尋者設定較高的燃料價格,同時保持總燃料費不變(因為燃料費 = 燃料價格 \* 燃料用量)。 - -一些著名的燃料高爾夫技術包括:使用用長串零開頭的地址(如 [0x0000000000C521824EaFf97Eac7B73B084ef9306](https://etherscan.io/address/0x0000000000c521824eaff97eac7b73b084ef9306))因為他們需要的儲存空間較少(因而燃料也減少);並留下很小[ERC-20](/developers/docs/standards/tokens/erc-20/) 代幣餘額在合約中,因為相較於更新儲存插槽,初始化儲存插槽(餘額為 0 時)需要更多的燃料。 尋找更多減少燃料使用的技巧,是搜尋者在積極研究的一個領域。 - -### 一般偷跑者 {#mev-extraction-generalized-frontrunners} - -一些尋找者不自行尋找MEV榨取機會, 反之, 其成為一般偷跑者. 一般偷跑者為機器帳戶來監控交易內存池來發現榨益可能交易. 偷跑者將拷貝潛力榨取目標之交易程式, 取代地址部分利用偷跑者帳戶, 並於當地環境測試來確保此交易確實能榨取利益. 如測試結果為確實有利益, 偷跑者將提交此更改後交易使用一更高Gas費, 並"偷跑"先前於原始交易並榨取原先尋找者的MEV利益. - -### 快閃機器 {#mev-extraction-flashbots} - -快閃機器是一個獨立專案,透過一項服務擴展執行用戶端,該服務允許搜尋者將最大可提取價值交易提交給驗證者,而無需將它們透露給公共記憶體池。 此避免交易被其他尋找者發現並偷跑. - -## 最大可提取價值範例 {#mev-examples} - -最大可提取價值以多種方式出現在區塊鏈上。 - -### 去中心化交易所套購 {#mev-examples-dex-arbitrage} - -[去中央化交易所](/glossary/#dex) (DEX) 套購為一最簡單且有名之最大可提取價值範例。 因此,它也是競爭最激烈的。 - -其運作如此: 如果兩個DEXes列表一同一代幣但於不同價格, 某人能購入此代幣於低價DEX並販售此於高價DEX於一單一交易. 因為區塊鏈某些機制, 此為近於無風險之套購機會. - -[此為一套購範例](https://etherscan.io/tx/0x5e1657ef0e9be9bc72efefe59a2528d0d730d478cfc9e6cdd09af9f997bb3ef4), 於此立, 尋找者利用一成功套購交易來轉換1,000 ETH至1,045 ETH藉由發現ETH/DAI價差於Uniswap和SushiSwap. - -### 清算 {#mev-examples-liquidations} - -借貸協議之清算機制也是一有名MEV榨取機會. - -Maker 和 Aave 等借貸協議要求使用者存入一些抵押品(例如以太幣)。 然後,存入的抵押品將用於借出給其他使用者。 - -使用者然後可根據他們的需求向其他人借入資產和代幣(例如,若你想在 MakerDAO 治理提案中投票,你可以借入 MKR),最高可達他們所存抵押品的一定比例。 例如,如果借款金額不超過 30%,則將 100 DAI 存入協議的使用者最多可以借入價值 30 DAI 的另一種資產。 該協議確定了確切的借貸能力百分比。 - -隨著借款人抵押品的價值波動,他們的借款能力也會波動。 如果因市場波動,借入資產的價值超過其抵押品價值的 30%(同樣地,準確的百分比由協議確定),協議通常允許任何人清算抵押品,立即償還貸款人(這類似於傳統金融中的[追加保證金通知](https://www.investopedia.com/terms/m/margincall.asp))。 如果被清算,借款人通常必須支付高額清算費,其中一些費用會支付給清算人 — 這就是最大可提取價值機會的來源。 - -搜尋者競相以最快的速度解析區塊鏈資料,以判斷哪些借款人可以清算,並率先提交清算交易並自己收取清算費用。 - -### 三明治攻擊 {#mev-examples-sandwich-trading} - -三明治攻擊為另一常見攻略於MEV榨取. - -來做一三明治攻擊, 一尋找者必須監控大筆DEX交易於交易內存池. 例如, 假設某人欲想換10,000 UNI至DAI於Uniswap. 這類大額交易會對 UNI/DAI 對產生重大影響,可能會顯著提高 UNI 相對於 DAI 的價格。 - -搜尋者可以計算該大額交易對 UNI/DAI 對的大致價格影響,並在大額交易_之前_立即執行最優買單,低價買入 UNI,然後在大額交易_之後_立即執行賣單,以大額訂單造成的更高價格賣出。 - -三明治攻擊, 然而較具風險, 因為其依據交易後價格波動所影響(不像DEX套購攻擊), 且可能成為另一[沙門氏菌攻擊](https://github.com/Defi-Cartel/salmonella)之受害對象. - -### NFT MEV {#mev-examples-nfts} - -MEV於NFT環境為一崛起市場, 但其也具有多重風險. - -然而, 因為NFT交易發生於同樣共享之以太坊區塊鏈上, 尋找者能利用類似技術來於NFT市場. - -例如, 如一人氣NFT舉辦一空投活動, 而尋找者想要一或一組特定NFT, 他們能程式編輯一交易來使他們能成為第一個來購入此一或一整組之NFT於單一交易內. 或如一NFT被錯誤[列於一低於市場之價格](https://www.theblockcrypto.com/post/113546/mistake-sees-69000-cryptopunk-sold-for-less-than-a-cent), 尋找者能偷跑其他購入者來搶便宜. - -一著名NFT MEV發生於一尋找者花費700百萬美金[購入](https://etherscan.io/address/0x650dCdEB6ecF05aE3CAF30A70966E2F395d5E9E5)全數Cryptopunk於樓價. 一區塊鏈研究者[解釋於Twitter](https://twitter.com/IvanBogatyy/status/1422232184493121538)關於此買家與一MEV提供者合作來使其購入行動能保持秘密. - -### 長尾攻擊 {#mev-examples-long-tail} - -DEX套購, 清算, 及三明治為知名MEV榨取機會, 且極為競爭所以新尋找者幾乎無法賺錢. 然而, 其有另一較不出名的"長尾攻擊"MEV機會(NFT MEV為一用例). - -新尋找者或許能利用長尾攻擊來賺取較多利益. 快閃機器的[MEV 工作版](https://github.com/flashbots/mev-job-board)列出一系列新興機會. - -## 最大可提取價值的影響 {#effects-of-mev} - -最大可提取價值並不都是壞事 — 以太坊的最大可提取價值既有正面也有負面的影響。 - -### 正面影響 {#effects-of-mev-the-good} - -許多Defi計畫依靠套購利益尋求者來維持幣池價格與實際市場價格. 例如, DEX套購確保用戶們能取得最佳, 最正確之價格為其代幣, 且借出協議依賴快速清算來確保借出者確實有被支付. - -無理性尋找者來時時刻刻尋求經濟性機會且利用此優勢, Defi協議或許無法成長至其今日地位. - -### 負面影響 {#effects-of-mev-the-bad} - -於應用程式層面, 一些MEV如三明治攻擊, 時常導致極差用戶體驗. 用戶被夾三明治將面臨市價滑點及較差執行價格於其交易. - -於網路層面, 偷跑者及Gas費價格賭價時常導致網路堵塞及昂貴Gas費(當一或多方的偷跑者嘗試跑贏另一對手藉由提交更高額之Gas費賭價), 且無法使正常用戶來運行一般交易. - -且於區塊_內_問題外, MEV能具有多重負面影響於區塊_間_. 如果區塊中可用的最大可提取價值大幅超過標準區塊獎勵,驗證者可能會被激勵重組區塊並為自己捕獲最大可提取價值,從而導致區塊鏈重組和共識不穩。 - -區塊鏈順序重組被[先前討論於比特幣區塊鏈](https://dl.acm.org/doi/10.1145/2976749.2978408). 當比特幣的區塊獎勵多次砍半, 交易費將成為主要區塊獎勵, 而其將成為經濟性合理來使礦工來放棄下一區塊獎勵並重挖此區塊來賺取更多利益. 隨MEV增長, 相同憂慮將面臨於以太坊, 而直接威脅區塊鏈信賴度. - -## 最大可提取價值現狀 {#state-of-mev} - -MEV榨取暴增於2021年初期, 而其導長時間之高額Gas費. 快閃機器的最大可提取價中繼的出現,降低了普通偷跑者的效力,並將礦工費價格拍賣帶到鏈下,降低了普通使用者的礦工費。 - -雖然許多搜尋者仍然從最大可提取價值賺到很多錢,但隨著機會變得越來越廣為人知,越來越多的搜尋者爭奪相同的機會,驗證者將獲得越來越多的最大可提取價值總收入(因為如最初描述的相同類型的燃料拍賣也在快閃機器中發生,儘管是私下進行的,而驗證者將獲得由此產生的燃料收入)。 MEV並非專屬以太坊, 而當MEV環境越來越競爭, 許多尋找者已轉移戰場至BSC幣安智鏈, 而其具相同潛力之MEV機會與一較低競爭環境. - -另一方面,從工作量證明過渡到權益證明以及持續不斷使用卷軸來拓展以太坊,這些都以某種還不太清楚的方式改變著最大可提取價值的格局。 與工作量證明中的概率模型相比,具有保證的區塊提交者稍微提前知道會如何改變最大可提取價值提取的最新格局,以及當[單一秘密領導者選舉](https://ethresear.ch/t/secret-non-single-leader-election/11789)和[分佈式驗證者技術](/staking/dvt/)實現后會如何顛覆當前格局,目前還無從得知。 同樣,當大多數使用者活動遷離以太坊並轉移至其二層網路卷軸和分片時,存在哪些最大可提取價值機會還有待觀察。 - -## 以太坊權益證明 (PoS) 中的最大可提取價值 {#mev-in-ethereum-proof-of-stake} - -如前述,最大可提取價值對使用者綜合體驗和共識層安全性產生負面影響。 但以太坊向權益證明共識的過渡(稱為「合併」)也可能帶來與最大可提取價值有關的新風險: - -### 驗證者中心化 {#validator-centralization} - -在合併後的以太坊,驗證者(已存入 32 個以太幣作為保證金)就新增到信標鏈的區塊的有效性達成共識。 由於 32 個以太幣可能超出了許多人的能力範圍,[加入質押池](/staking/pools/)也許是一種更可行的選擇。 然而,[單獨質押者](/staking/solo/)健康分佈才是一種理想狀態,因為它減輕了驗證者的中心化並提高了以太坊的安全性。 - -不過,最大可提取價值提取被認為能夠加速驗證者中心化。 部分原因是,由於驗證者[提出區塊的收益要低於](/roadmap/merge/issuance/#how-the-merge-impacts-ETH-supply)礦工曾經提出區塊的收益,合併後最大可提取價值提取已經顯著[影響驗證者的收益](https://github.com/flashbots/eth2-research/blob/main/notebooks/mev-in-eth2/eth2-mev-calc.ipynb)。 - -更大的質押池可能會有更多的資源投資進行必要的最佳化,以抓住最大可提取價值機會。 這些質押池提取的最大可提取價值越多,它們用來提升最大可提取價值提取能力(並增加總收入)的資源就越多,這在本質上形成了[規模經濟](https://www.investopedia.com/terms/e/economiesofscale.asp#)。 - -由於可支配的資源較少,單獨質押者可能無法從最大可提取價值機會中獲利。 這可能會增加獨立驗證者加入強大的質押池以提高收益的壓力,從而削弱以太坊的去中心化。 - -### 許可記憶體池 {#permissioned-mempools} - -爲了應對三明治攻擊和搶先交易攻擊,交易者可能會開始與驗證者進行鏈下交易以確保交易隱私。 交易者將潛在的最大可提取價值交易直接發送到驗證者而非公共内存池,驗證者將交易添加到該區塊中並於交易者分配利潤。 - -“暗池” 是這種模式的升級版,是一種只供訪問的許可内存池,對願意支付特定費用的用戶開放。 該趨勢將弱化以太坊的無許可和去信任,並有可能將區塊鏈轉換爲一種有利於最高出價者的 “付費游玩” 機制。 - -許可内存池還會增加先前部分描述的中心化風險。 運行多個驗證者的大型池可能會受益於為交易者和使用者提供交易隱私,增加其最大可提取價值收入。 - -在合併後的以太坊中解決這些與最大可提取價值相關的問題,是一個核心研究領域。 迄今爲止,爲了減少最大可提取價值對合併后以太坊去中心化和安全性的消極影響,有兩種解決方法被提出: **提交者-構建者分離 (PBS)** 和 **構建者應用程式介面**。 - -### 提議者-建構者分離 {#proposer-builder-separation} - -在工作量證明和權益證明中,建構區塊的節點面向參與共識的其他節點提出區塊以將其新增到鏈中。 新區塊在另一位礦工在其上建立區塊(在工作量證明中)後,或從大多數驗證者那裡獲得認證(在權益證明中)後,成為規範鏈的一部分。 - -區塊生產者和區塊提交者角色的結合造成了大多數先前描述的與最大可提取價值相關的問題。 例如,在時間强盜攻擊中,共識節點被激勵觸發鏈重組,以最大限度增加最大可提取價值收入。 - -[提交者-構建者分離](https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725) (PBS) 旨在緩解最大可提取價值的影響,尤其是對共識層的影響。 PBS 的主要特點是區塊生產者與區塊提交者的分離。 驗證者仍然負責提交區塊並投票,但有一類新的專有實體 (被稱爲**區塊構建者**),其任務是對交易排序和構建區塊。 - -在 PBS 模式下,區塊構建者創建一個交易捆綁並出價將其納入信標鏈區塊中 (作爲 “執行有效負載”)。 被選中提出下一個區塊的驗證者隨後查看不同的出價,並選擇費用最高的交易包。 PBS 本質上創建了一個拍賣市場,使構建者和出售區塊空間的驗證者進行協調。 - -當前,PBS 設計使用一種[提交-揭露方案](https://gitcoin.co/blog/commit-reveal-scheme-on-ethereum/),即構建者只發佈對區塊内容 (區塊頭) 的加密承諾以及其出價。 在接受獲勝的出價后,提交者創建一個包括區塊頭的簽名區塊提案。 區塊建置者在看到簽名區塊提案後可能會發布整個區塊體,並且它必須還要從驗證者那裡獲得足夠多的[認證](/glossary/#attestation)後才能最終確定區塊。 - -#### 提議者-建構者分離如何減弱最大可提取價值的影響? {#how-does-pbs-curb-mev-impact} - -協議内的提交者-構建者分離將最大可提取價值從驗證者的權限中移除,降低了最大可提取價值對共識的影響。 相反,運行專用硬體的區塊建置者將抓住出現的最大可提取價值機會。 - -不過,這並不完全將驗證者排除在最大可提取價值相關收入之外,因為建置者必須出高價才能讓驗證者接受他們的區塊。 盡管如此,由於驗證者不再直接專注於如何盡可能提高最大可提取價值收入,時間强盜攻擊的威脅得以降低。 - -提出者-構建者分離也降低了最大可提取價值的中心化風險。 例如,使用提交-揭露方案,構建者就會信任驗證者不會竊取最大可提取價值機會或將其暴露給其他構建者。 這就低了單獨質押者從最大可提取價值獲益的門檻,否則建置者將傾向於支持有著鏈下聲譽的大型池並與它們進行鏈下交易。 - -同樣地,驗證者不必信任建置者不會隱藏區塊體或發布無效區塊,因為付款是無條件的。 即使提出的區塊不可用或被其他驗證者宣稱無效,驗證者的費用仍然會支付。 在後一種情況下,區塊被直接丟棄,迫使區塊建置者失去所有交易費和最大可提取價值收入。 - -### 建置者應用程式介面 {#builder-api} - -儘管提交者-構建者分離有望減少最大可提取價值的影響,但實現它需要對共識協議進行更改。 具體來說,信標鏈上的[分叉選擇](/developers/docs/consensus-mechanisms/pos/#fork-choice)規則需要更新。 [構建著應用程式介面](https://github.com/ethereum/builder-specs)是一種臨時解決方案,旨在有效實現提交者-構建者分離,然而需要更高的信任假設。 - -建置者應用程式介面是改良版的[引擎應用程式介面](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md),共識層用戶端使用它向執行層用戶端請求執行有效負載。 如[誠實驗證者規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/validator.md)所述,選中承擔區塊提出職責的驗證者向連接的執行用戶端請求交易包,並將交易包新增到提出的信標鏈區塊中。 - -建置者應用程式介面還充當驗證者和執行層用戶端之間的中介軟體;不同之處是它允許信標鏈上的驗證者從外部實體獲取區塊(而不是使用執行用戶端在本地構建區塊)。 - -以下簡述建置者應用程式介面如何運作: - -1. 建置者應用程式介面將驗證者連接到由運行執行層用戶端的區塊建置者組成的網路。 與 PBS 相同,構建者專注於投資消耗大量資源的區塊構建,並使用不同的策略最大限度地提提高從最大可提取價值 + 優先消費中賺取的收入。 - -2. 驗證者(運行共識層用戶端)向建置者網路請求執行有效負載及出價。 建置者的出價將包含執行有效負載標頭,即對有效負載內容的加密承諾,和向驗證者支付的費用。 - -3. 驗證者查看收到的出價並選擇費用最高的執行有效負載。 利用建置者應用程式介面,驗證者創建一個僅包括其簽名和執行有效負載標頭的「盲」信標區塊提案並發送給建置者。 - -4. 在看到盲區塊提案時,運行建置者應用程式介面的建置者可能會用完整的執行有效負載回應。 這讓驗證者可以創建一個在整個網路中傳播的「已簽署」信標區塊。 - -5. 如果區塊構建者未能及時響應,使用構建者應用程式介面的驗證者仍有可能在本地構建區塊,因此他們不會錯過區塊提交獎勵。 然而,驗證者不能使用當前揭露的交易或另一個集合創建另一個區塊,因爲這相當於_模棱兩可_ (簽署同一個時隙内的兩個區塊) ,是可罰沒的。 - -構建者應用程式接口的一個示例實現是 [MEV Boost](https://github.com/flashbots/mev-boost),它是對 [Flashbots 拍賣機制](https://docs.flashbots.net/Flashbots-auction/overview/)的改進,旨在抑制最大可提取價值在以太坊上的消極外部性。 Flashbots 拍賣允許權益證明中的驗證者將構建可獲利區塊的工作外包給專門的參與方,即**尋找者**。 - -尋找者尋找有利可圖的最大可提取價值機會,並向區塊提交者發送交易捆綁和[密封價格出價](https://en.wikipedia.org/wiki/First-price_sealed-bid_auction),以將交易捆綁納入區塊。 運行 mev-geth,即 go-ethereum (Geth) 用戶端的分叉版本的驗證者只需要選擇利潤最高的交易包,並將其新增到新區塊的一部分。 爲了避免區塊提交者 (驗證者) 收到垃圾郵件和無效交易,交易捆綁透過**中繼者**驗證,然後再到達提交者。 - -MEV Boost 的運作方式與原來的 Flashbots 拍賣相同,但增加了一些為以太坊向權益證明過渡而設計的新功能。 尋找著仍然尋找有利可圖的交易來將其納入區塊,但一類新的名爲**構建者**的專門參與方負責將交易聚合並捆綁到區塊中。 建置者接受搜尋者提供的價格密封出價,並執行最佳化以找到利潤最大的排序。 - -中繼者仍然負責驗證交易捆綁並將其傳送給提交者。 然而,MEV Boost 透過存儲構建者發送的區塊體和驗證者發送的區塊頭,引入了負責提供[數據可用性](/developers/docs/data-availability/)的**代管**。 對於代管,連結到中繼的驗證者請求可用的執行有效負載,並使用MEV Boost 的順序演算法選擇出價 + 最大可提取價值小費最高的有效負載頭。 - -#### 建置者應用程式介面如何減低最大可提取價值的影響? {#how-does-builder-api-curb-mev-impact} - -建置者應用程式介面的核心優勢在於,它有可能讓參與者平等獲得最大可提取價值機會。 使用提交-揭露方案消除了信任假設,降低了尋求從最大可提取價值中獲利的驗證者的進入門檻。 這應該可以減輕單獨質押者加入大型質押池,以提高最大可提取價值利潤的壓力。 - -建置者應用程式介面的廣泛實作將鼓勵區塊建置者之間進行更激烈的競爭,這將增強抗審查能力。 驗證者審查多個構建者的出價時,意圖審查一筆或多筆用戶交易的構建者必須出價高於所有其他不審查的構建者才能成功。 這大大增加了審查使用者的成本並對審查有所限制。 - -一些項目,例如 MEV Boost,將構建者應用程式介面作爲整體結構的一部分,旨在為某些參與方 (例如試圖避免搶先交易/三明治攻擊的交易者) 提供交易隱私。 這是透過在使用者和區塊建置者之間提供一條私密通訊通道來實現的。 與先前描述的許可内存池不同,這種方法是有益的,原因如下: - -1. 市場上有多種建置者存在讓審查變得不切實際,這是有利於使用者的。 相反,基於信任的中心化暗池的存在將權力集中在少數區塊構建者的手中,並增加了審查的可能性。 - -2. 建置者應用程式介面軟體是開源的,允許任何人提供區塊建置者服務。 這意味著使用者不會被迫使用任何特定的區塊建置者,並提高了以太坊的中立和無許可特性。 此外,尋求最大可提取價值的交易者不會因為使用私密交易管道而無意中促進中心化。 - -## 關連資訊 {#related-resources} - -- [Flashbots 文件](https://docs.flashbots.net/) -- [快閃機器於GitHub](https://github.com/flashbots/pm) -- [MEV-Explore](https://explore.flashbots.net/) - _用於最大可提取價值交易的儀表板和即時交易瀏覽器_ -- [mevnot.org](https://www.mevboost.org/) - _可提供MEV-Boost 中繼和區塊構建者即時統計數據的追蹤器_ - -## 了解更多 {#further-reading} - -- [最大(礦工) 榨取利益(MEV) 為何?](https://blog.chain.link/what-is-miner-extractable-value-mev/) -- [MEV和我](https://www.paradigm.xyz/2021/02/mev-and-me) -- [以太坊為一深邃森林](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest/) -- [逃離以太坊深邃森林](https://samczsun.com/escaping-the-dark-forest/) -- [快閃機器: 偷跑MEV危機](https://medium.com/flashbots/frontrunning-the-mev-crisis-40629a613752) -- [@bertcmiller的 MEV 線程](https://twitter.com/bertcmiller/status/1402665992422047747) -- [MEV-Boost:直接適用於合併的 Flashbots 架構](https://ethresear.ch/t/mev-boost-merge-ready-flashbots-architecture/11177) -- [什麼是 MEV Boost](https://www.alchemy.com/overviews/mev-boost) -- [為什麼要運行 mev-boost?](https://writings.flashbots.net/writings/why-run-mevboost/) -- [The Hitchhikers Guide To Ethereum](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/oracles/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/oracles/index.md deleted file mode 100644 index eb38002981d..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/oracles/index.md +++ /dev/null @@ -1,433 +0,0 @@ ---- -title: 預言機 (Oracles) -description: 預言機使以太坊智慧型合約得以取得現實世界的資料,替使用者增加更多使用情境以及價值。 -lang: zh-tw ---- - -預言機是產生數據來源的應用程式,使鏈下數據來源可供區塊鏈用於智慧型合約。 因為預設情況下,基於以太坊的智慧型合約無法存取儲存在區塊鏈網路外部的資訊,所以這是必要的。 - -賦予智慧型合約使用鏈下數據執行的能力,擴展了去中心化應用程式的效用和價值。 例如,鏈上預測市場依靠預言機提供有關結果的信息,用於驗證用戶的預測。 假設 Alice 押注 20 以太幣打賭誰會成為下任美國 總統。 在這種情況下,預測市場去中心化應用程式需要一個預言機來確認選舉結果並確定 Alice 是否有資格獲得付款。 - -## 先備知識 {#prerequisites} - -這頁面假定讀者已經熟悉以太坊基礎,例如[節點](/developers/docs/nodes-and-clients/),[共識機制](/developers/docs/consensus-mechanisms/),以及[以太坊虛擬機](/developers/docs/evm/)。 你應該也對[智慧型合約](/developers/docs/smart-contracts/)和其[解析](/developers/docs/smart-contracts/anatomy/),尤其是[事件](/glossary/#events)有所掌握。 - -## 什麼是區塊鏈預言機? {#what-is-a-blockchain-oracle} - -預言機用來提供、驗證以及傳送外部資料 (如:鏈外資料) 至區塊鏈上的智慧型合約使用。 除了「拉取」鏈下數據並在以太坊上廣播之外,預言機還可以將訊息從區塊鏈「推送」到外部系統,例如,一旦用戶透過以太坊交易發送費用就會解鎖智慧鎖。 - -如果沒有預言機,智慧型合約將完全局限於鏈上資料。 - -預言機依數據來源(一個或多個)、信任模型(中心化或去中心化)和系統架構(立即讀取、發布-訂閱模式和請求-回應模式)而有所不同。 我們還可以根據預言機是否檢索外部數據以供鏈上合約使用(輸入預言機)、將資訊從區塊鏈發送到鏈下應用程式(輸出預言機)或執行鏈下計算任務(計算預言機)來區分預言機。 - -## 為什麼智慧型合約需要預言機? {#why-do-smart-contracts-need-oracles} - -許多開發者將智慧型合約視為在區塊鏈上特定地址運行的程式碼。 然而,對[智慧型合約](/smart-contracts/)的更普遍的看法是,它們是自動執行的軟體程序,一旦滿足特定條件,就能夠在各方之間執行協議 - 因此稱為「智慧型合約」。 - -但考慮到以太坊的確定性,使用智慧型合約來執行人與人之間的協議並不簡單。 [確定性系統](https://en.wikipedia.org/wiki/Deterministic_algorithm)是一種在給定初始狀態和特定輸入的情況下始終產生相同結果的系統,這意味著從輸入計算輸出的過程中不存在隨機性或變化。 - -為了實現確定性執行,區塊鏈限制節點_僅_使用儲存在區塊鏈本身上的數據就簡單的二元 (true/false) 問題達成共識。 此類問題的範例包括: - -- 「帳戶所有者(由公鑰識別)是否使用配對的私鑰簽署了這筆交易?」 -- 「這個帳戶有足夠的資金來支付交易嗎?」 -- 「這筆交易在該智慧型合約的背景下有效嗎?」等等。 - -如果區塊鏈從外部來源(即來自現實世界)接收訊息,則無法實現確定性,從而阻止節點就區塊鏈狀態變更的有效性達成一致。 以一個智慧型合約為例,它根據從傳統價格應用程式介面取得的當前以太幣-美元匯率執行交易。 這個數字可能會經常變化(更不用說應用程式介面可能會被棄用或被駭客攻擊),這意味著執行相同合約程式碼的節點會得到不同結果。 - -對於像以太坊這樣在全球有數千個節點處理交易的公共區塊鏈來說,確定性至關重要。 由於沒有中央機構作為事實來源,節點需要在應用相同交易後達到相同狀態的機制。 如果節點 A 執行智慧型合約程式碼並得到 「3」,而節點 B 在運行同一交易後得到 「7」,則會導致共識崩潰,從而抹掉以太坊作為去中心化計算平台的價值。 - -這種情況也凸顯了設計區塊鏈從外部來源取得資訊的問題。 然而,預言機透過從鏈下來源獲取資訊,並將其儲存在區塊鏈上給智慧型合約使用來解決這個問題。 由於儲存在鏈上的信息是不可更改且公開的,以太坊節點可以安全地使用預言機導入的鏈下數據來計算狀態變化,而不會破壞共識。 - -為此,預言機通常由鏈上運行的智慧型合約和一些鏈下組件組成。 鏈上合約接收來自其他智慧型合約的數據請求,並將其傳遞給鏈下元件(稱為預言機節點)。 此預言機節點可以查詢數據來源,例如使用應用程式介面 (API),並發送交易以將請求的數據儲存在智慧型合約的儲存中。 - -本質上,區塊鏈預言機彌合了區塊鏈與外部環境之間的資訊鴻溝,創建了「混合智慧型合約」。 混合智慧型合約是一種基於鏈上合約程式碼和鏈下基礎設施組合的功能。 去中心化預測市場是混合智慧型合約的一個很好的例子。 其他例子可能包括農作物保險智慧型合約,當一組預言機確定某些天氣現象已發生,該合約就會作出賠付。 - -## 什麼是預言機問題? {#the-oracle-problem} - -預言機解決了一個重要問題,但也帶來了一些複雜性,例如: - -- 我們如何驗證注入的資訊是從正確的來源提取的或沒有被篡改? - -- 我們如何確保這些數據始終可用並定期更新? - -所謂的「預言機問題」展示了使用區塊鏈預言機向智慧型合約發送輸入所帶來的問題。 來自預言機的數據必須正確,智慧型合約才能正確執行。 此外,必須「信任」預言機運營商提供準確的資訊,會破壞智慧型合約的「去信任」方面。 - -不同的預言機為預言機問題提供了不同的解決方案,我們會稍後探討。 預言機通常會根據它們應對以下挑戰的能力被評估: - -1. **正確性**:預言機不應導致智慧型合約基於無效的鏈下資料觸發狀態變更。 預言機必須保證數據的_真實性_和_完整性_。 真實性意味著數據是從正確的來源獲得的,而完整性意味著數據在發送到鏈上之前保持完整(即沒有被更改)。 - -2. **可用性**:預言機不應延遲或阻止智慧型合約執行操作並觸發狀態變更。 這意味著來自預言機的數據必須_請求時可用_,且沒有間斷。 - -3. **激勵相容性**:預言機應該激勵鏈下數據提供者向智慧型合約提交正確的資訊, 激勵相容性包括了_可歸因性_和_問責性_。 可歸因性讓一段外部資訊與其提供者連結,而問責性則將數據提供者與他們提供的資訊綁定起來,讓他們能根據提供的資訊品質得到獎勵或懲罰。 - -## 區塊鏈預言機服務如何運作? {#how-does-a-blockchain-oracle-service-work} - -### 使用者 {#users} - -使用者是指需要區塊鏈外部資訊來完成特定操作的實體(即智慧型合約)。 預言機服務的基本工作流程從用戶向預言機合約發起數據請求開始。 數據請求通常會回應以下問題的一部分或全部: - -1. 鏈下節點可以在哪些來源查詢需要的資訊? - -2. 報告者如何處理來自數據來源的資訊,並提取有用的數據點? - -3. 有多少預言機節點可以參與數據擷取? - -4. 如何處理預言機報告中的差異? - -5. 應使用甚麼方法來過濾提交的資訊並將報告聚合為單一數值? - -### 預言機合約 {#oracle-contract} - -預言機合約是預言機服務的鏈上組件。 它負責監聽來自其他合約的數據請求,將數據查詢傳遞給預言機節點,並將返回的數據廣播給用戶端合約。 這份合約也可以對返回的數據點進行計算,以產生一個聚合值並將其發送給請求合約。 - -預言機合約公開了一些函數,讓用戶端合約在發出資料請求時使用。 當收到新的查詢時,智慧型合約會釋出一個包含資料請求細節的[日誌事件](/developers/docs/smart-contracts/anatomy/#events-and-logs)。 這會通知已經訂閱了日誌的鏈下節點(通常是使用類似 JSON-RPC 的 `eth_subscribe` 指令),繼續檢索在日誌事件中定義的數據。 - -以下是一個由 Pedro Costa 提供的[預言機合約的範例](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e)。 這是一個簡單的預言機服務,能依照其他智慧型合約的請求,查詢鏈下應用程式介面(API)並將請求的資訊儲存在區塊鏈上。 - -```solidity -pragma solidity >=0.4.21 <0.6.0; - -contract Oracle { - Request[] requests; //list of requests made to the contract - uint currentId = 0; //increasing request id - uint minQuorum = 2; //minimum number of responses to receive before declaring final result - uint totalOracleCount = 3; // Hardcoded oracle count - - // defines a general api request - struct Request { - uint id; //request id - string urlToQuery; //API url - string attributeToFetch; //json attribute (key) to retrieve in the response - string agreedValue; //value from key - mapping(uint => string) answers; //answers provided by the oracles - mapping(address => uint) quorum; //oracles which will query the answer (1=oracle hasn't voted, 2=oracle has voted) - } - - //event that triggers oracle outside of the blockchain - event NewRequest ( - uint id, - string urlToQuery, - string attributeToFetch - ); - - //triggered when there's a consensus on the final result - event UpdatedRequest ( - uint id, - string urlToQuery, - string attributeToFetch, - string agreedValue - ); - - function createRequest ( - string memory _urlToQuery, - string memory _attributeToFetch - ) - public - { - uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, "")); - Request storage r = requests[length-1]; - - // Hardcoded oracles address - r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1; - r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1; - r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1; - - // launch an event to be detected by oracle outside of blockchain - emit NewRequest ( - currentId, - _urlToQuery, - _attributeToFetch - ); - - // increase request id - currentId++; - } - - //called by the oracle to record its answer - function updateRequest ( - uint _id, - string memory _valueRetrieved - ) public { - - Request storage currRequest = requests[_id]; - - //check if oracle is in the list of trusted oracles - //and if the oracle hasn't voted yet - if(currRequest.quorum[address(msg.sender)] == 1){ - - //marking that this address has voted - currRequest.quorum[msg.sender] = 2; - - //iterate through "array" of answers until a position if free and save the retrieved value - uint tmpI = 0; - bool found = false; - while(!found) { - //find first empty slot - if(bytes(currRequest.answers[tmpI]).length == 0){ - found = true; - currRequest.answers[tmpI] = _valueRetrieved; - } - tmpI++; - } - - uint currentQuorum = 0; - - //iterate through oracle list and check if enough oracles(minimum quorum) - //have voted the same answer as the current one - for(uint i = 0; i < totalOracleCount; i++){ - bytes memory a = bytes(currRequest.answers[i]); - bytes memory b = bytes(_valueRetrieved); - - if(keccak256(a) == keccak256(b)){ - currentQuorum++; - if(currentQuorum >= minQuorum){ - currRequest.agreedValue = _valueRetrieved; - emit UpdatedRequest ( - currRequest.id, - currRequest.urlToQuery, - currRequest.attributeToFetch, - currRequest.agreedValue - ); - } - } - } - } - } -} -``` - -### 預言機節點 {#oracle-nodes} - -預言機節點是預言機服務的鏈下組件。 它從外部資料來源提取信息,例如由第三方伺服器託管的應用程式介面(API),並把資料放在鏈上供智慧型合約使用。 預言機節點監聽鏈上預言機合約的事件,並完成在日誌中描述的任務。 - -對預言機節點來說,一個常見的任務是發送一個 [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp) 請求到一個應用程式介面(API),分析回應以提取相關資料,把資料格式化成區塊鏈可讀的輸出,然後通過向預言機合約發送一個包含資料的交易,將其發送到鏈上。 預言機節點有時也會被要求用「真實性證明」去證明提交資料的有效性和完整性,我們稍後會再深入探討。 - -計算型預言機也依賴於鏈下節點,來執行那些在鏈上由於 gas 費用和區塊大小限制而無法執行的計算任務。 例如,預言機節點可能會被要求生成可驗證隨機數字(例如:用在基於區塊鏈的遊戲)。 - -## 預言機設計樣式 {#oracle-design-patterns} - -預言機有不同的種類,包括_即時讀取型_,_發佈-訂閱型_以及_請求-回應型_,後兩者在以太坊智慧型合約中最受歡迎。 這裏我們簡單介紹發佈-訂閱型和請求-回應型。 - -### 發佈-訂閱型預言機 {#publish-subscribe-oracles} - -這類預言機提供「數據餵送」,其他合約可以定期讀取以取得資訊。 在這種情況下,資料預計會頻繁變動,所以用戶端合約需要監聽在預言機中儲存的數據更新。 例如提供最新 ETH-USD 價格信息給使用者的預言機。 - -### 請求-回應型預言機 {#request-response-oracles} - -請求-回應的設置允許用戶端合約請求發佈-訂閱型預言機未提供的任意數據。 當數據集太大,無法儲存在智慧型合約時,或者使用者在任何時刻只需要數據的一小部分時,請求-回應型預言機是理想的選擇。 - -雖然比發佈-訂閱型預言機複雜,但請求-回應型預言機基本上和我們在上一節所描述的一樣。 預言機會有一個鏈上組件來接收資料請求,並傳遞給鏈下節點進行處理。 - -發起資料查詢的使用者需要負擔從鏈下來源檢索資訊的費用。 此外,使用者合約還必須提供資金,用來支付預言機合約通過請求中指定的回呼函數返回回應時所產生的 Gas 費用。 - -## 中心化與去中心化預言機 {#types-of-oracles} - -### 中心化預言機 {#centralized-oracles} - -中心化預言機由單一實體控制,此實體負責把鏈下資訊聚合並根據請求更新預言機合約中的數據。 由於中心化預言機依賴單一真實性來源,所以效率比較高。 當專有數據集由擁有者直接發佈,且帶有被廣泛接受的簽名時,中心化預言機的表現可能會更好。 但是,它們也帶來了一些缺點: - -#### 較低的準確性保證 {#low-correctness-guarantees} - -使用中心化預言機時,不能確認提供的資訊準確與否。 即使是「聲譽良好」的提供者也可能會變得不可靠或被駭客攻擊。 如果預言機被破壞,智慧型合約將會基於錯誤資料來運行。 - -#### 可用性差 {#poor-availability} - -中心化預言機無法保證能持續向其他智慧型合約提供鏈下資料。 如果提供者決定把服務關閉,或者一個駭客劫持了預言機的鏈下組件,你的智慧型合約會面臨拒絕服務(DoS)攻擊的風險。 - -#### 激勵相容性差 {#poor-incentive-compatibility} - -中心化預言機通常缺乏良好設計,或根本不存在激勵機制來促使數據提供者提供準確或未經更改的資訊。 向預言機付錢以保證正確性並不等同於保證誠實。 隨著智慧型合約控制的價值數量增加,這一問題變得更加嚴重。 - -### 去中心化預言機 {#decentralized-oracles} - -去中心化預言機旨在克服中心化預言機的限制,通過消除單點故障來提高可靠性。 去中心化預言機服務由點對點網路中的多個參與者組成,這些參與者在將鏈下數據發送到智慧型合約之前,會先對數據達成共識。 - -理想狀態下,去中心化預言機應該是無許可,去信任而且不受中心化組織管理;而在現實中,預言機有著不同程度的去中心化。 有一些半去中心化的預言機網路允許任何人參與,但由一個「所有者」根據節點的過往表現來批准和移除節點。 完全去中心化的預言機網路也存在,他們通常以獨立區塊鏈運行,並設有明確的共識機制來協調節點並懲罰不當行為。 - -使用去中化預言機有著以下的優點: - -### 較高的準確性保證 {#high-correctness-guarantees} - -去中心化預言機嘗試用不同的方法來達到數據的準確性。 這包括了使用證明來證實返回資訊的真實性和完整性,以及要求多個實體共同同意鏈下數據的有效性。 - -#### 真實性證明 {#authenticity-proofs} - -真實性證明是一個密碼學機制,能夠讓人們獨立驗證從外部來源檢索到的資訊。 這些證明可以驗證資訊的來源,並在檢索後檢測可能的變動。 - -真實性證明的範例包括: - -**傳輸層安全性(TLS) 證明**:言機節點通常使用基於傳輸層安全性(TLS)協議的安全 HTTP 連接從外部來源提取數據。 部分去中心化預言機使用真實性證明來驗證 TLS 會話(即確認節點和特定伺服器之間的資訊交換)並確證會話內容未被修改。 - -**可信任執行環境(TEE)證明**:[可信任執行環境](https://en.wikipedia.org/wiki/Trusted_execution_environment)(TEE)是一個和主機系統的操作進程隔離的沙盒計算環境。 TEEs 保證了在計算環境中儲存和使用的任何應用程式程式碼或數據都會保持完整性、機密性和不可竄改性。 使用者還可以生成一個證明來證明一個應用程式實例是在可信任執行環境中運行。 - -某些種類的去中心化預言機要求預言機節點的營運者提供 TEE 證明。 這能向使用者確保節點營運者是在可信任的執行環境中運行預言機用戶端的實例。 TEEs 防止外部進程修改或讀取應用程式的程式碼和數據,因此這些證明可以證實預言機節點有保持資訊的完整性和機密性。 - -#### 基於共識的資訊驗證 {#consensus-based-validation-of-information} - -向智慧型合約提供資料時,中心化預言機依賴於單一真實性來源,因此有可能發佈不準確的資訊。 去中心化預言機借由依靠多個預言機節點來查詢鏈下資訊,來解決這個問題。 通過比對不同來源的資料,去中心化預言機降低了向鏈上合約提供無效資訊的風險。 - -但是去中化預言機必需處理不同鏈下來源的資訊差異。 為了盡可能減少資訊差異並確保提供給預言機合約的數據反映了預言機節點的集體意見,去中心化預言機使用了以下的機制: - -##### 對資料的準確性投票或質押 - -有部分的去中心化預言機網路要求參與者使用網路的原生代幣對資料查詢答案的準確性進行投票或質押 (例如「誰贏了 2020 年的美國大選?」)。 一個匯總協議會匯總這些投票和質押,並把受到大多數支持的答案作為有效答案。 - -若節點提供的答案與大多數答案不一致將會受到懲罰,即把他們的代幣分發給其他提供了更正確數值的節點。 要求節點在提供數據前提供擔保可以激勵節點做出誠實的回應,因為這些節點都被認為是想得到最大回報的理性經濟參與者。 - -質押/投票還保護去中心化預言機免受[女巫攻擊](/glossary/#sybil-attack),在這種攻擊中,惡意參與者創建多個身份來利用共識系統。 但是,質押無法防範「佔便宜」的行為(預言機節點直接複製其他節點的資訊)和「懶惰驗證」(預言機節點遵循大多數而不親自驗證資訊)。 - -##### 謝林點機制 - -[謝林點](https://en.wikipedia.org/wiki/Focal_point_(game_theory))是一個賽局理論的概念,它假設了在缺乏任何溝通的前提下,大多數實體會總是默認為某個問題找到一個共同的解決方案。 謝林點機制常常被用在去中心化預言機網路,讓節點能就數據請求的答案達成共識。 - -早期的一個想法是 [SchellingCoin](https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/),這是一種提議的數據餵送機制,參與者提交對「標量」問題的回答(即答案可以用數量描述的問題,例如「ETH 的價格是多少?」)以及一筆押金。 提供值在第 25 和 第 75 [百分位](https://en.wikipedia.org/wiki/Percentile)之間的使用者會得到獎勵,而提供的值大幅偏離中間值的使用者會得到懲罰。 - -雖然 SchellingCoin 今天已經不存在,但許多去中心化預言機 - 特別是[ Maker 協議預言機](https://docs.makerdao.com/smart-contract-modules/oracle-module) - 仍使用謝林點機制來提高預言機資料的準確性。 每個 Maker 預言機都由一個鏈下的 P2P 網路的節點(「中繼者」和「餵送者」)組成,這些節點提交抵押資產的市場價格,然後由鏈上的「Medianizer」合約計算所有提供值的中位數。 當指定的延遲期結束,這個中位數值就成為相關資產的新參考價格。 - -其他使用謝林點機制的預言機範例包括[ Chainlink 鏈下部告](https://docs.chain.link/docs/off-chain-reporting/)和[ Witnet ](https://witnet.io/)。 在這兩個系統中,P2P 網路中的預言機節點回應會聚合成一個單一的聚合值,例如平均值或中間值。 節點將根據其回應與聚合值的一致程度或偏差程度來獲得獎勵或受到懲罰。 - -謝林點機制會具有吸引力,是因為他們降低了鏈上足跡(只有一筆交易需要被發送)的同時又保證了去中心化。 後者之所以可行,是因為節點需要在提交的回應清單上簽署,才可以將其輸入到生成平均值或中位數的演算法中。 - -### 可用性 {#availability} - -去中心化預言機服務為智慧型合約確保了鏈下數據的高可用性。 這是通過把鏈下資訊來源以及負責將信息傳輸至鏈上的節點同時去中心化來實現。 - -這確保了容錯能力,因為預言機合約可以依賴多個節點(這些節點也依賴於多個數據來源)來執行其他合約的查詢。 在源頭_和_節點營運者層級的去中心化至關重要—如果一個預言機節點網路提供的資訊來自同一個來源,將會遇到與中心化預言機相同的問題。 - -基於質押的預言機也可以對未能快速回應資料請求的節點運營者進行懲罰。 這大大激勵了預言機節點投資於容錯基礎設施,並及時提供數據。 - -### 激勵相容性好 {#good-incentive-compatibility} - -去中心化預言機採用了不同的激勵設計來避免預言機節點出現[拜占庭](https://en.wikipedia.org/wiki/Byzantine_fault)行為。 具體來說,它們實現了_可歸因性_和_問責性_: - -1. 去中心化預言機節點通常需要為他們對數據請求的回應簽署。 這個資訊有助於評估預言機節點的過往表現,讓使用者可以在提出數據請求時過濾掉不可靠的預言機節點。 例如 Witnet 的[演算法聲譽系統](https://docs.witnet.io/intro/about/architecture#algorithmic-reputation-system)。 - -2. 正如同前面所說,去中心化預言機可能要求節點對他們提交數據的真實性進行質押。 如果該聲明經過驗證無誤,這筆質押可以連同誠實服務的獎勵一併返還。 但如果資訊不準確,節點也可以被懲罰,這為問責提供了一定的保障。 - -## 預言機在智慧型合約中的應用 {#applications-of-oracles-in-smart-contracts} - -以下是以太坊中預言機的常見用例: - -### 檢索金融數據 {#retrieving-financial-data} - -[去中心化金融](/defi/)(DeFi)應用程式允許點到點借貸、借款和資產交易。 通常這會需要不同的金融資訊,包括匯率數據(用來計算加密貨幣的法幣價值或比較代幣價格)和資本市場數據(用來計算代幣化資產的價值,例如黃金或美元)。 - -例如,一個去中心化借貸協議需要查詢作為抵押品存入的資產(例如 ETH)的當前市場價格。 這令合約能確定扺押品的價值,以及確定它能從系統中借出多少。 - -在 DeFi 中,常見的「價格預言機」包括 Chainlink Price Feeds、Compound 協議的[ Open Price Feed ](https://compound.finance/docs/prices)、Uniswap 的[時間加權平均價格(TWAPs)](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles)以及[ Maker 預言機](https://docs.makerdao.com/smart-contract-modules/oracle-module)。 - -開發者在將這些價格預言機整合到他們的項目中之前,應該了解相關的注意事項。 這篇[文章](https://blog.openzeppelin.com/secure-smart-contract-guidelines-the-dangers-of-price-oracles/)將詳細分析在計劃使用上述任何價格預言機時需要考慮的因素。 - -以下是一個在你的智慧型合約中使用 Chainlink price feed 查詢最新 ETH 價格的範例: - -```solidity -pragma solidity ^0.6.7; - -import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; - -contract PriceConsumerV3 { - - AggregatorV3Interface internal priceFeed; - - /** - * Network: Kovan - * Aggregator: ETH/USD - * Address: 0x9326BFA02ADD2366b30bacB125260Af641031331 - */ - constructor() public { - priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331); - } - - /** - * Returns the latest price - */ - function getLatestPrice() public view returns (int) { - ( - uint80 roundID, - int price, - uint startedAt, - uint timeStamp, - uint80 answeredInRound - ) = priceFeed.latestRoundData(); - return price; - } -} -``` - -### 生成可以驗證的隨機性 {#generating-verifiable-randomness} - -某些區塊鏈應用程式,例如基於區塊鏈的遊戲或彩劵方案,需要高度不可預測性和隨機性才能有效運作。 但是,區塊鏈的確定性執行方式消除了任何隨機性。 - -最初的方法是使用偽隨機加密函數,如 `blockhash`,但這些函數可能會被工作量證明算法的[礦工操縱](https://ethereum.stackexchange.com/questions/3140/risk-of-using-blockhash-other-miners-preventing-attack#:~:text=So%20while%20the%20miners%20can,to%20one%20of%20the%20players.)。 同時,以太坊[切換到權益證明](/roadmap/merge/)意味著開發者無法再依賴` blockhash `來獲得鏈上隨機性。 信標鏈的[ RANDAO 機制](https://eth2book.info/altair/part2/building_blocks/randomness)提供了一種替代的隨機性來源。 - -從鏈下生成隨機值並發往鏈上是可行的,但這會需要對使用者有很高的信任要求。 他們必須相信這個值確實是通過無法預測的機制來生成,而且沒有在傳輸的過程中被修改。 - -專為鏈下計算而設計的預言機解決了這個問題,它們通過在鏈下安全地生成隨機結果,並將結果與證明過程的不可預測性密碼學證明一起廣播到鏈上。 [Chainlink VRF ](https://docs.chain.link/docs/chainlink-vrf/)(Verifiable Random Function)便是其中一個範例,它是一個可證明公平性且防竄改的隨機數生成器 (RNG),用於為依靠不可預測結果的應用程式構建可靠的智慧型合約。 另一個範例是 API3 QRNG,它提供基於量子現象的量子隨機數生成(QRNG),這是由澳大利亞國立大學(ANU)提供的一種公共 Web3 隨機數生成方法。 - -### 取得事件結果 {#getting-outcomes-for-events} - -有了預言機後,創建能對現實世界事件做出反應的智慧型合約變得簡單。 預言機服務通過允許合約通過鏈下組件連結到外部 APIs 並從這些數據來源中獲取資訊,來讓這變得可能。 例如,前面提到的預測 dApp 可能會請求預言機從可信的鏈下來源(例如美聯社)返回選舉結果。 - -使用預言機來檢索基於現實世界結果的數據,使其他創新的應用場景變為可能;例如一個去中心化的保險產品需要準確的天氣、災害等資訊才能有效運作。 - -### 自動化智慧型合約 {#automating-smart-contracts} - -智慧型合約不會自動運行;而是必須由一個外部帳戶 (EOA)或其他合約帳戶觸發相應的函數來執行合約程式碼。 在大多數情況下,合約的大部分函數都是公開且能被 EOA 和其他合約調用。 - -但合約中也有一些_私有函數_,這些函數對其他人不可訪問,但對 dApp 的整體功能至關重要。 例如一個定期鑄造新 NFT 給使用者的` mintERC721Token() `函數、預期市場中支付獎金的函數或在 DEX 中解鎖質押代幣的函數。 - -開發者會需要定期觸發這些函數來讓應用程式順暢運行。 但是,這可能會讓開發者浪費更多時間在這些日常任務,這便是為甚麼自動化執行智慧型合約如此具吸引力。 - -部分去中心化預言機網路提供自動化服務,允許鏈下預言機節點按照使用者定義的參數來觸發智慧型合約的函數。 通常來說,這會需要把目標合約「登記」在預言機服務上,提供資金以支付預言機營運者的費用,以及定義好合約的觸發條件或時間。 - -Chainlink 的[ Keeper Network ](https://chain.link/keepers) 向智慧型合約提供了以最小信任和去中心化的方式外包定期維護任務的選項。 請參閱這份官方的[ Keeper 文檔](https://docs.chain.link/docs/chainlink-keepers/introduction/),了解如何使您的合約兼容 Keeper 以及如何使用 Upkeep 服務。 - -## 如何使用區塊鏈預言機 {#use-blockchain-oracles} - -你可以將多個預言機應用程式整合到你的以太坊去中心化應用程式中: - -**[Chainlink](https://chain.link/)** - _Chainlink 去中心化預言機網路提供防篡改的輸入、輸出和運算,以支援任何區塊鏈上的高級智慧型合約。_ - -**[Chronicle](https://chroniclelabs.org/)** - _ Chronicle 通過開發真正可擴展、成本高效、去中心化且可驗證的預言機,克服了當前將數據傳輸到鏈上的限制。_ - -**[Witnet](https://witnet.io/)** - _Witnet 是一個無許可、去中心化且抗審查的預言機,協助智慧型合約以強大的加密經濟保證來對現實世界事件做出反應。_ - -**[UMA 預言機](https://uma.xyz)** - _UMA 的樂觀預言機允許智慧型合約快速接收各種應用程式所需要的任何類型數據,包括保險、金融衍生品和預期市場。_ - -**[Tellor](https://tellor.io/)** - _Tellor 是一個透明且無許可的預言機協議,使你的智慧型合約能夠隨時輕鬆獲取任何數據。_ - -**[Band Protocol](https://bandprotocol.com/)** - _Band Protocol 是一個跨鏈數據預言機平台,將現實世界的數據和 API 聚合並連結到智慧型合約中。

- -**[Paralink](https://paralink.network/)** - _Paralink 向在以太坊和其他流行區塊鏈上運行的智慧型合約提供了一個開源且去中心化的預言機平台。

- -**[Pyth Network](https://pyth.network/)** - _Pyth network 是一個第一方金融預言機網路,旨在於一個防竄改、去中心化、且能自給自足的環境中,持續發佈真實世界的資料到鏈上。_ - -**[API3 DAO](https://www.api3.org/)** - _API3 DAO 提供第一方預言機解決方案,為智慧型合約提供更高的來源透明度、安全性和可擴展性的去中心化解決方案。_ - -**[Supra](https://supra.com/)** - 一個垂直整合的跨鏈解決方案工具包,將所有區塊鏈(無論是公共的 L1 和 L2 還是私有的企業區塊鏈)相互連結,提供可用於鏈上和鏈下應用場景的去中心化預言機價格餵送。 - -## 延伸閱讀 {#further-reading} - -**文章** - -- [什麼是區塊鏈預言機?](https://chain.link/education/blockchain-oracles) — _Chainlink_ -- [什麼是區塊鏈預言機?](https://betterprogramming.pub/what-is-a-blockchain-oracle-f5ccab8dbd72) - _Patrick Collins_ -- [去中心化預言機:綜合概述 ](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) – _Julien Thevenard_ -- [在以太坊實踐區塊鏈預言機](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) – _Pedro Costa_ -- [為何智慧型合約無法調用APIs?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) - _StackExchange_ -- [為何我們需要去中心化預言機](https://newsletter.banklesshq.com/p/why-we-need-decentralized-oracles) - _Bankless_ -- [所以你想使用價格預言機](https://samczsun.com/so-you-want-to-use-a-price-oracle/) -_samczsun_ - -**影片** - -- [預言機擴張區塊鏈用途](https://youtu.be/BVUZpWa8vpw) - _Real Vision Finance_ -- [第一方與第三方預言機的差別](https://blockchainoraclesummit.io/first-party-vs-third-party-oracles/) - _Blockchain Oracle Summit_ - -**教學** - -- [如何用Solidity於以太坊調用目前報價](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) - _Chainlink_ -- [如何使用預言機數據](https://docs.chroniclelabs.org/Developers/tutorials/Remix) - _Chronicle_ - -**專案範例** - -- [使用 solidity 的以太坊完整 Chainlink 入門項目](https://github.com/hackbg/chainlink-fullstack) - _HackBG_ diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/index.md deleted file mode 100644 index 44aa90fc817..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/index.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: 以太坊開發標準 -description: -lang: zh-tw -incomplete: true ---- - -## 標準概覽 {#standards-overview} - -以太坊社群導入許多標準幫助其多項計畫(例如[以太坊客戶](/developers/docs/nodes-and-clients/)及錢包), 並確保智慧型合約與Dapp互通性. - -常見標準稱為[Ethereum 改進提案](/eips/) (EIP), 由社群成員透過[標準的討論過程](https://eips.ethereum.org/EIPS/eip-1)確定。 - -- [EIP 簡介](/eips/) -- [EIP 列表](https://eips.ethereum.org/) -- [EIP GItHub 程式碼庫](https://github.com/ethereum/EIPs) -- [EIP 討論板](https://ethereum-magicians.org/c/eips) -- [以太坊管制導論](/governance/) -- [Ethereum Governance Overview](https://web.archive.org/web/20201107234050/https://blog.bmannconsulting.com/ethereum-governance/) _March 31, 2019 - Boris Mann_ -- [以太坊共識管理發展及網路合作更新](https://hudsonjameson.com/2020-03-23-ethereum-protocol-development-governance-and-network-upgrade-coordination/) _March 23, 2020 - Hudson Jameson_ -- [以太坊核心開發會議者播放列](https://www.youtube.com/@EthereumProtocol) _(YouTube Playlist)_ - -## 標準種類 {#types-of-standards} - -EIP 有三種類別: - -- 標準類別:任何影響多數或全部以太坊實作的改變 -- [元類別](https://eips.ethereum.org/meta):描述與以太坊相關的進程(process),或是提議改變一個進程 -- [資訊類別](https://eips.ethereum.org/informational):以太坊的設計問題、關於以太坊社群的資訊或一般指導原則 - -此外,標準類別還能被細分為四個子類別: - -- [核心](https://eips.ethereum.org/core):需要共識層級的分叉的改進 -- [網路](https://eips.ethereum.org/networking):關於 devp2p、Light Ethereum Subprotocol、whisper 和 swarm 網路協議規範的改進 -- [介面](https://eips.ethereum.org/interface):關於用戶端應用程式介面(API)/RPC 及標準的改進,以及語言級別的標準,如程式方法名稱及合約的 ABI -- [ERC(以太坊評論請求)](https://eips.ethereum.org/erc):應用層的標準與慣例 - -更多這些不同類別的詳細資訊,詳見[EIP-1](https://eips.ethereum.org/EIPS/eip-1#eip-types) - -### 權杖標準 {#token-standards} - -- [ERC-20](/developers/docs/standards/tokens/erc-20/) -- 一標準互動介面為同質性(可替代) 代幣, 例如投票代幣, 質押代幣, 或虛擬代幣. - - [ERC-223](/developers/docs/standards/tokens/erc-223/):一同質化代幣標準,讓代幣能與以太幣一樣,支援收受代幣端(合約)在接收到代幣轉帳時進行邏輯的處理。 - - [ERC-1363](https://eips.ethereum.org/EIPS/eip-1363):與 ERC-20 代幣相容的介面,支援代幣接收者在 transfer 與 transferFrom 兩方法被調用後、及被授權代幣操作者在 approve 方法被調用後的邏輯執行。 -- [ERC-721](/developers/docs/standards/tokens/erc-721/) - 非同質化代幣的標準接口,例如藝術品或歌曲的契約。 - - [ERC-2309](https://eips.ethereum.org/EIPS/eip-2309):在單一或是許多 ERC-721 代幣創造與轉移時,合約事件(event)的標準化發布方法。 - - [ERC-4400](https://eips.ethereum.org/EIPS/eip-4400):為 ERC-721 加入一“消費者/使用者”的擴充介面。 - - [ERC-4907](https://eips.ethereum.org/EIPS/eip-4907):為 ERC-721 加入具時效性、有限權力的角色。 -- [ERC-777](/developers/docs/standards/tokens/erc-777/):**(不建議使用)** 一改進 ERC-20 的代幣標準。 -- [ERC-1155](/developers/docs/standards/tokens/erc-1155/):一兼容同質化、非同質化代幣的代幣標準。 -- [ERC-4626](/developers/docs/standards/tokens/erc-4626/):一 ERC-20 代幣化的金庫(vault,通常指收受使用者存款進行保管或投資的智能合約)標準,以標準化、最佳化會產生利息的金庫的技術規範。 - -了解更多代幣標準的詳情 [ 代幣標準](/developers/docs/standards/tokens/)。 - -## 衍生閱讀 {#further-reading} - -- [以太坊改進提案(EIP)](/eips/) - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-1155/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-1155/index.md deleted file mode 100644 index d22d53fb24c..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-1155/index.md +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: ERC-1155 多代幣標準 -description: -lang: zh-tw ---- - -## 簡介 {#introduction} - -用於多種代幣管理的合約標準介面 單一部署的合約可以包括同質化代幣、非同質化代幣或其他配置(例如半同質化代幣)的任意組合。 - -**多代幣標準是什麼意思?** - -這個想法很簡單,旨在創建一個智慧型合約介面,可以表示和控制任意數量的同質化和非同質化代幣類型。 這樣,ERC-1155 代幣就可以實現與 [ERC-20](/developers/docs/standards/tokens/erc-20/)和 [ERC-721](/developers/docs/standards/tokens/erc-721/)代幣相同的功能,甚至可以同時實現這兩種功能。 它改進了 ERC-20 和 ERC-721 標準的功能,使其更有效率並修正了明顯的實作錯誤。 - -ERC-1155 代幣在 [EIP-1155](https://eips.ethereum.org/EIPS/eip-1155) 中有完整描述。 - -## 基本資訊 {#prerequisites} - -為了更好地理解本頁,我們建議你先閱讀[代幣標準](/developers/docs/standards/tokens/),[ERC-20](/developers/docs/standards/tokens/erc-20/)和[ERC-721](/developers/docs/standards/tokens/erc-721/)。 - -## ERC-1155 的函式和功能: {#body} - -- [批量傳送](#batch_transfers):在一次調用內傳送多種資產。 -- [批量餘額](#batch_balance):在一次調用內取得多種資產的餘額。 -- [批量允許](#batch_approval):允許某個地址的所有代幣。 -- [Hook](#receive_hook):接收代幣的鉤子函數。 -- [非同質化代幣支援](#nft_support):如果供應量只有 1,則視為非同質化代幣。 -- [安全轉帳規則](#safe_transfer_rule):安全轉帳規則集。 - -### 批量傳送 {#batch-transfers} - -批量傳送的工作原理與常規 ERC-20 傳送非常相似。 讓我們來看看常規的 ERC-20 `transferFrom` 函數: - -```solidity -// ERC-20 -function transferFrom(address from, address to, uint256 value) external returns (bool); - -// ERC-1155 -function safeBatchTransferFrom( - address _from, - address _to, - uint256[] calldata _ids, - uint256[] calldata _values, - bytes calldata _data -) external; -``` - -ERC-1155 中唯一的區別是我們將值作爲陣列傳輸,同時也傳輸了 ids 陣列。 例如,給定 `ids=[3, 6, 13]` 和 `values=[100, 200, 5]`,傳送結果將會是 - -1. 將 100 個 ID 為 3 的代幣從 `_from` 傳送到 `_to`。 -2. 將 200 個 ID 為 6 的代幣從 `_from` 傳送到 `_to`。 -3. 將 5 個 ID 為 13 的代幣從 `_from` 傳送到 `_to`。 - -在 ERC-1155 中,我們只有 `transferFrom`,沒有 `transsfer`。 爲了像常規的 `transfer` 一樣使用它,只需要將 from 地址設置爲調用該函數的地址。 - -### 批量餘額 {#batch-balance} - -對應的 ERC-20 `balanceOf` 呼叫同樣具有支援批次的對應函數。 作爲對比,這是 ERC-20 的版本: - -```solidity -// ERC-20 -function balanceOf(address owner) external view returns (uint256); - -// ERC-1155 -function balanceOfBatch( - address[] calldata _owners, - uint256[] calldata _ids -) external view returns (uint256[] memory); -``` - -對於餘額調用來說更簡單,我們可以在一次調用中取得多個餘額。 我們傳輸所有者的陣列,然後是代幣 ids 的陣列。 - -例如,給定 `_ids=[3, 6, 13]` 和 `_owners=[0xbeef..., 0x1337..., 0x1111...]`,傳回值將為 - -```solidity -[ - balanceOf(0xbeef...), - balanceOf(0x1337...), - balanceOf(0x1111...) -] -``` - -### 批量審批 {#batch-approval} - -```solidity -// ERC-1155 -function setApprovalForAll( - address _operator, - bool _approved -) external; - -function isApprovedForAll( - address _owner, - address _operator -) external view returns (bool); -``` - -批准與 ERC-20 略有不同。 與批准特定金額不同,你透過 `setApprovalForAll` 函數將操作者設置爲已批准或未批准。 - -查看目前的審批狀態可以透過 `isApprovedForAll` 完成。 如你所見,要么全部批准,要么不批准。 不能定義要批准代幣的數量,甚至代幣類型。 - -這是考慮到簡潔性而故意設計的。 你只能批准一個地址的所有代幣。 - -### 接收鉤子 {#receive-hook} - -```solidity -function onERC1155BatchReceived( - address _operator, - address _from, - uint256[] calldata _ids, - uint256[] calldata _values, - bytes calldata _data -) external returns(bytes4); -``` - -基於 [EIP-165](https://eips.ethereum.org/EIPS/eip-165) 的協定支持,ERC-1155 只支援智慧合約的接收鉤子函數。 鉤子函數必須傳回一個事先預先定義的 4 位元組值,這個值被指定為: - -```solidity -bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) -``` - -當接收合約傳回此值時,表示合約知道如何處理 ERC-1155 代幣並接受轉帳。 太好了,代幣不會再卡在合約中了! - -### 支援非同質化代幣 {#nft-support} - -當供應量只有 1 時,該代幣本質上是非同質化代幣 (NFT)。 依照 ERC-721 標準,你可以定義一個元數據網址。 用戶端可以讀取和修改該網址,請參閱[此處](https://eips.ethereum.org/EIPS/eip-1155#metadata)。 - -### 安全轉帳規則 {#safe-transfer-rule} - -在前面的解釋中,我們已經提到過一些安全轉帳規則。 現在我們來看看最重要的規則: - -1. 呼叫者必須獲得批准才能從 `_from` 的帳戶地址消費代幣,或者呼叫者帳戶地址必須與 `_from` 的帳戶地址相同。 -2. 在以下情況下,轉帳呼叫將回退 - 1. `_to` 地址為 0。 - 2. `_ids` 的長度與 `_values` 的長度不同。 - 3. `_ids` 中代幣持有者的任何餘額都低於發送給接收者的對應 `_value` 金額。 - 4. 出現任何其他錯誤。 - -_注意_:包括鉤子在內的所有批次函數也均以非批次的版本存在。 這樣做是為了提高燃料效率,考慮到只轉移一種資產可能仍然是最常用的方式。 簡潔起見,我們在這裡沒有介紹這些非批次的版本,包括安全轉帳規則。 名稱是相同的,只需移除 'Batch'。 - -## 衍生閱讀 {#further-reading} - -- [EIP-1155:多代幣標準](https://eips.ethereum.org/EIPS/eip-1155) -- [ERC-1155:Openzeppelin 文檔](https://docs.openzeppelin.com/contracts/3.x/erc1155) -- [ERC-1155: GitHub Repo](https://github.com/enjin/erc-1155) -- [Alchemy NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-20/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-20/index.md deleted file mode 100644 index 13656e589ee..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-20/index.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: ERC-20 代幣標準 -description: -lang: zh-tw ---- - -## 簡介 {#introduction} - -**什麼是代幣?** - -代幣幾乎可以代表以太坊中的任何東西: - -- 線上平台信譽積分 -- 遊戲中角色的技能 -- 金融資產,如公司股份 -- 法定貨幣,如美元 -- 一盎司黃金 -- 以及更多... - -以太坊這麼強大的功能當然要由一個穩健的標準來處理,對吧? 這正是 ERC-20 發揮作用的地方! 這個標準允許開發者構建與其他產品和服務相互操作的代幣應用程式。 ERC-20 標準也用於為[以太](/glossary/#ether)提供附加功能。 - -**什麼是 ERC-20?** - -ERC-20 引入了同質化代幣的標準,換句話說,這些代幣具有一種屬性,使得每個代幣在類型和值上都與其他代幣完全相同。 例如,ERC-20 代幣就像以太幣一樣,意味著一個代幣會及永遠與其他代幣一樣。 - -## 基本資訊 {#prerequisites} - -- [帳戶](/developers/docs/accounts) -- [智慧型合約](/developers/docs/smart-contracts/) -- [權杖標準](/developers/docs/standards/tokens/) - -## 內文 {#body} - -ERC-20(以太坊意見請求 20)由 Fabian Vogelsteller 於 2015 年 11 月提出,是一種在智慧型合約中實作代幣應用程式介面的代幣標準。 - -ERC-20 的功能範例: - -- 將代幣從一個帳戶轉移到另一個帳戶 -- 取得帳戶當前代幣餘額 -- 取得網路上可用代幣的總供應量 -- 批准第三方帳戶是否可以使用帳戶中的一定數量代幣 - -如果智慧型合約實作以下方法和事件,則可以將其稱為 ERC-20 代幣合約。一旦部署,它將負責追蹤以太坊上創建的代幣。 - -來自 [EIP-20](https://eips.ethereum.org/EIPS/eip-20): - -### 方法 {#methods} - -```solidity -function name() public view returns (string) -function symbol() public view returns (string) -function decimals() public view returns (uint8) -function totalSupply() public view returns (uint256) -function balanceOf(address _owner) public view returns (uint256 balance) -function transfer(address _to, uint256 _value) public returns (bool success) -function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) -function approve(address _spender, uint256 _value) public returns (bool success) -function allowance(address _owner, address _spender) public view returns (uint256 remaining) -``` - -### 事件 {#events} - -```solidity -event Transfer(address indexed _from, address indexed _to, uint256 _value) -event Approval(address indexed _owner, address indexed _spender, uint256 _value) -``` - -### 範例 {#web3py-example} - -讓我們看看為何標準如此重要,去讓我們檢查以太坊上的任何 ERC-20 代幣合約變得簡單。 我們只需要合約應用程式二進位介面 (ABI) 來創建任何 ERC-20 代幣的介面。 如下所示,我們將使用簡化的 ABI,使其成為一個低門檻的範例。 - -#### Web3.py 範例 {#web3py-example} - -首先,請確保你已經安裝了 [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python 程式庫: - -``` -pip install web3 -``` - -```python -from web3 import Web3 - - -w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com")) - -dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI -weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Wrapped ether (WETH) - -acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 2 - -# This is a simplified Contract Application Binary Interface (ABI) of an ERC-20 Token Contract. -# It will expose only the methods: balanceOf(address), decimals(), symbol() and totalSupply() -simplified_abi = [ - { - 'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}], - 'name': 'balanceOf', - 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], - 'stateMutability': 'view', 'type': 'function', 'constant': True - }, - { - 'inputs': [], - 'name': 'decimals', - 'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}], - 'stateMutability': 'view', 'type': 'function', 'constant': True - }, - { - 'inputs': [], - 'name': 'symbol', - 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], - 'stateMutability': 'view', 'type': 'function', 'constant': True - }, - { - 'inputs': [], - 'name': 'totalSupply', - 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], - 'stateMutability': 'view', 'type': 'function', 'constant': True - } -] - -dai_contract = w3.eth.contract(address=w3.to_checksum_address(dai_token_addr), abi=simplified_abi) -symbol = dai_contract.functions.symbol().call() -decimals = dai_contract.functions.decimals().call() -totalSupply = dai_contract.functions.totalSupply().call() / 10**decimals -addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decimals - -# DAI -print("===== %s =====" % symbol) -print("Total Supply:", totalSupply) -print("Addr Balance:", addr_balance) - -weth_contract = w3.eth.contract(address=w3.to_checksum_address(weth_token_addr), abi=simplified_abi) -symbol = weth_contract.functions.symbol().call() -decimals = weth_contract.functions.decimals().call() -totalSupply = weth_contract.functions.totalSupply().call() / 10**decimals -addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decimals - -# WETH -print("===== %s =====" % symbol) -print("Total Supply:", totalSupply) -print("Addr Balance:", addr_balance) -``` - -## 已知問題 {#erc20-issues} - -### ERC-20 代幣接收問題 {#reception-issue} - -當 ERC-20 代幣被發送到並非用於處理 ERC-20 代幣而設計的智慧型合約時,這些代幣可能會永久丟失。 發生這種情況是因為接收合約不具有識別或回應傳入代幣的功能,且 ERC-20 標準中沒有機制來通知接收合約有關傳入代幣的資訊。 這個問題形成的主要方式是: - -1. 代幣傳送機制 - - ERC-20 代幣使用了 transfer 或 transferFrom 函數傳送 - - 當用戶使用這些函數將代幣發送到合約地址時,無論接收合約是否為處理代幣而設,代幣都會被傳送 -2. 缺乏通知 - - 接收的合約沒有收到代幣已發送給它的通知或回調 - - 如果接收合約缺乏處理代幣的機制(例如,遞補函數或管理代幣接收的專用函數),則代幣實際上會卡在合約的地址中 -3. 沒有內建處理 - - ERC-20 標準沒有包括強制要求接收合約實作接收代幣的函數,這導致許多合約無法正確管理收到的代幣 - -一些替代標準,例如 [ERC-223](/developers/docs/standards/tokens/erc-223) 已經解決了這個問題 - -## 了解更多 {#further-reading} - -- [EIP20:ERC-20 代幣標準](https://eips.ethereum.org/EIPS/eip-20) -- [OpenZeppelin - 代幣](https://docs.openzeppelin.com/contracts/3.x/tokens#ERC20) -- [OpenZeppelin - ERC-20 實作](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) -- [Alchemy - Solidity ERC20 代幣指南](https://www.alchemy.com/overviews/erc20-solidity) - - -## 其他同質化代幣標準 {#fungible-token-standards} - -- [ERC-223](/developers/docs/standards/tokens/erc-223) -- [ERC-777](/developers/docs/standards/tokens/erc-777) -- [ERC-4626 - 代幣化金庫](/developers/docs/standards/tokens/erc-4626) \ No newline at end of file diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-223/index.md deleted file mode 100644 index 1ec82963499..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-223/index.md +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: ERC-223代幣標準 -description: 關於 ERC-223 同質性代筆標準的概述,包含它的運作方式以及與 ERC-20 的對代幣 -lang: zh-tw ---- - -## 介紹 {#introduction} - -### 什麼是ERC-223? {#what-is-erc223} - -ERC-223 是一種同質性代筆標準,與 ERC-20 標準類似。 主要的區別在於 ERC-223 不但定義了代幣應用程式介面,還定義了從發送者向接收者傳送代幣的邏輯。 它引入了一個交流模型,使代幣傳送能夠在接收者處進行處理。 - -### 與 ERC-20 的區別 {#erc20-differences} - -ERC-223 解決了 ERC-20 的一些限制,並在代幣合約與可能接受代幣的合約之間引入了一種新的互動方法。 有幾件事情是 ERC-223 可以做到但 ERC-20 不能做到的: - -- 在接收者處處理代幣傳送: 接收者可以檢測 ERC-223 代幣的存入。 -- 拒絕不正確發送的代幣: 如果使用者向不應該接收代幣的合約傳送 ERC-223 代幣,合約可以拒絕該交易,以避免損失代幣。 -- 傳送中的元數據: ERC-223 代幣可以包含元數據,允許在代幣交易上附加任意資訊。 - -## 先決條件 {#prerequisites} - -- [賬戶](/developers/docs/accounts) -- [智能合約](/developers/docs/smart-contracts/) -- [代幣標準](/developers/docs/standards/tokens/) -- [ERC-20](/developers/docs/standards/tokens/erc-20/) - -## 主旨 {#body} - -ERC-223 是一種在智能合約中實現代幣應用程式介面的代幣標準。 它也爲應該接收 ERC-223 代幣的合約聲明了一個應用程式介面。 不支持 ERC-223 接收者應用程式介面的合約無法接收 ERC-223 代幣,這防止了使用者出錯。 - -實現了以下方法和事件的智能合約可以被稱爲 ERC-223 兼容代幣合約。 一旦被部署,它將負責追蹤在以太坊上創建的代幣。 - -合約能夠擁有的函數不只有這些,並且可以將各種代幣標準的任意其他功能添加到該合約。 例如,`approve` 和 `transferFrom` 函數不是 ERC-223 標準的一部分,但如果有必要,這些函數可以被實現。 - -來自 [EIP-223](https://eips.ethereum.org/EIPS/eip-223): - -### 方法 {#methods} - -ERC-223 代幣必須實現一下方法: - -```solidity -function name() public view returns (string) -function symbol() public view returns (string) -function decimals() public view returns (uint8) -function totalSupply() public view returns (uint256) -function balanceOf(address _owner) public view returns (uint256 balance) -function transfer(address _to, uint256 _value) public returns (bool success) -function transfer(address _to, uint256 _value, bytes calldata _data) public returns (bool success) -``` - -應該接收 ERC-223 代幣的合約必須實現以下方法: - -```solidity -function tokenReceived(address _from, uint _value, bytes calldata _data) -``` - -如果 ERC-223 代筆被發送到沒有實現 `tokenReceived(..)` 函數的合約,該傳送則必定會失效,並且代幣不會從發送者的餘額中移動。 - -### Events {#events} - -```solidity -event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes calldata _data) -``` - -### 範例 {#examples} - -ERC-223 代幣的應用程式介面與 ERC-20 的相似,因此從使用者介面開發的角度上看沒有區別。 唯一的區別是 ERC-223 代幣可能沒有 `approve` + `transferFrom` 函數,因爲這些函數對於該標準是可以選擇的。 - -#### Solidity 範例 {#solidity-example} - -以下範例説明了基礎的 ERC-223 代幣是如何運作的: - -```solidity -pragma solidity ^0.8.19; -abstract contract IERC223Recipient { - function tokenReceived(address _from, uint _value, bytes memory _data) public virtual; -} -contract VeryBasicERC223Token { - event Transfer(address indexed from, address indexed to, uint value, bytes data); - string private _name; - string private _symbol; - uint8 private _decimals; - uint256 private _totalSupply; - mapping(address => uint256) private balances; - function name() public view returns (string memory) { return _name; } - function symbol() public view returns (string memory) { return _symbol; } - function decimals() public view returns (uint8) { return _decimals; } - function totalSupply() public view returns (uint256) { return _totalSupply; } - function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } - function isContract(address account) internal view returns (bool) { - uint256 size; - assembly { size := extcodesize(account) } - return size > 0; - } - function transfer(address _to, uint _value, bytes calldata _data) public returns (bool success){ - balances[msg.sender] = balances[msg.sender] - _value; - balances[_to] = balances[_to] + _value; - if(isContract(_to)) { - IERC223Recipient(_to).tokenReceived(msg.sender, _value, _data); - } - emit Transfer(msg.sender, _to, _value, _data); - return true; - } - function transfer(address _to, uint _value) public returns (bool success){ - bytes memory _empty = hex"00000000"; - balances[msg.sender] = balances[msg.sender] - _value; - balances[_to] = balances[_to] + _value; - if(isContract(_to)) { - IERC223Recipient(_to).tokenReceived(msg.sender, _value, _empty); - } - emit Transfer(msg.sender, _to, _value, _empty); - return true; - } -} -``` - -現在我們希望另一個合約接受 `tokenA` 存款 (假設該 tokenA 是 ERC-223 代幣)。 該合約必須只接受 tokenA 並拒絕其他代幣。 當合約接收 tokenA 時,它必須釋出一個 `Deposit()` 事件並增加 `deposits` 變數的值。 - -程式碼如下: - -```solidity -contract RecipientContract is IERC223Recipient { - event Deposit(address whoSentTheTokens); - uint256 deposits = 0; - address tokenA; // The only token that we want to accept. - function tokenReceived(address _from, uint _value, bytes memory _data) public override - { - // It is important to understand that within this function - // msg.sender is the address of a token that is being received, - // msg.value is always 0 as the token contract does not own or send Ether in most cases, - // _from is the sender of the token transfer, - // _value is the amount of tokens that was deposited. - require(msg.sender == tokenA); - deposits += _value; - emit Deposit(_from); - } -} -``` - -## 常見問題 {#faq} - -### 如果我們將一些 tokenB 發送到合約會發生什麽? {#sending-tokens} - -交易會失敗,並且不會發生代幣傳送。 代幣將返回至發送者的地址。 - -### 我們要如何向該合約存款? {#contract-deposits} - -調用 ERC-223 代幣的 `transfer(address,uint256)` 或 `transfer(address,uint256,bytes)` 函數,指定 `RecipientContract` 的地址。 - -### 如果我們將 ERC-20 代币傳送到該合約會發生什麽? {#erc-20-transfers} - -如果 ERC-20 代幣被發送到 `RecipientContract`,這些代幣將被傳送,但該傳送不會被識別 (不會釋出 `Deposit()` 事件,存款值不會發生改變)。 無法過濾或防止不必要的 ERC-20 存款。 - -### 如果我們希望在代幣存款完成後執行一些函數呢? {#function-execution} - -有多種方法可以做到這一點。 在該範例中我們將繼續使用讓 ERC-223 傳送與以太幣傳送相同的方法: - -```solidity -contract RecipientContract is IERC223Recipient { - event Foo(); - event Bar(uint256 someNumber); - address tokenA; // The only token that we want to accept. - function tokenReceived(address _from, uint _value, bytes memory _data) public override - { - require(msg.sender == tokenA); - address(this).call(_data); // Handle incoming transaction and perform a subsequent function call. - } - function foo() public - { - emit Foo(); - } - function bar(uint256 _someNumber) public - { - emit Bar(_someNumber); - } -} -``` - -當 `RecipientContract` 接收 ERC-223 代幣時,合約會執行一個編碼為 `_data` 代幣交易參數的函數,與以太坊交易編碼函數調用交易 `data` 相同。 閲讀 [數據欄位](https://ethereum.org/en/developers/docs/transactions/#the-data-field) 以獲取更多資訊。 - -在上述範例中,ERC-223 必須被傳送到具有 `transfer(address,uin256,bytes calldata _data)` 函數的 `RecipientContract` 地址。 如果數據參數為 `0xc2985578` (`foo()` 函數的簽名),則在代幣存款被接收之後,foo() 函數將被調用,並且 Foo() 事件將會釋出。 - -參數也可以編碼在代幣傳送的「data」中,例如我們可以使用「_someNumber」的 12345 值來呼叫 bar() 函數。 在這種情況下,`data` 必須為`0x0423a13200000000000000000000000000000000000000000000000000000000000004d2`,其中 `0x0423a132` 是 `bar(uint256)` 函數的簽名,`00000000000000000000000000000000000000000000000000000000000004d2` 是 12345 作爲 uint256。 - -## 限制 {#limitations} - -雖然 ERC-223 解決了 ERC-20 標準中的一些問題,但它也有自己的限制: - -- 采用與兼容性: ERC-223 目前還未被廣泛采用,這可能會限制其與現存工具和平台的兼容性。 -- 向後兼容性: ERC-223 不向後兼容 ERC-20,這意味著現存的 ERC-20 合約和工具無法再未經修改的情況下與 ERC-223 代幣一起使用。 -- 燃料成本: 與 ERC-20 的交易相比,ERC-223 中的額外檢查與功能可能會導致更高的燃料成本。 - -## 延伸閱讀 {#further-reading} - -- [EIP-223: ERC-223 代幣標準](https://eips.ethereum.org/EIPS/eip-223) -- [初始 ERC-223 提案](https://github.com/ethereum/eips/issues/223) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-4626/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-4626/index.md deleted file mode 100644 index 5f5eb77c228..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-4626/index.md +++ /dev/null @@ -1,211 +0,0 @@ ---- -title: ERC-4626 代幣化金庫標準 -description: 收益金庫的標準。 -lang: zh-tw ---- - -## 簡介 {#introduction} - -ERC-4626 是優化和統一收益金庫技術參數的標準。 它為表示單一底層 ERC-20 代幣的份額的代幣化收益金庫,提供標準應用程式介面。 ERC-4626 還概述了使用 ERC-20 的代幣化金庫的可選擴展,提供存款、提取代幣和讀取餘額的基本功能。 - -**ERC-4626 在收益金庫的作用** - -借貸市場、聚合器和本息代幣可協助使用者透過執行不同的策略,找到加密代幣的最佳收益率。 這些策略在執行時會略有不同,可能會容易出錯或浪費開發資源。 - -收益金庫的 ERC-4626 標準透過創建更一致和健壯的實作模式,無需開發者提供專門的工作,就能減少整合工作量並解鎖在各種應用程式中獲取收益的途徑。 - -ERC-4626 代幣在 [EIP-4626](https://eips.ethereum.org/EIPS/eip-4626) 中有完整描述。 - -## 基本資訊 {#prerequisites} - -為了更好地理解本頁,我們建議你先閱讀[代幣標準](/developers/docs/standards/tokens/)和[ERC-20](/developers/docs/standards/tokens/erc-20/)。 - -## ERC-4626 的函式和功能: {#body} - -### 方法 {#methods} - -#### asset {#asset} - -```solidity -function asset() public view returns (address assetTokenAddress) -``` - -此函數傳回用於金庫記帳、存款、提款的基礎代幣的地址。 - -#### totalAssets {#totalassets} - -```solidity -function totalAssets() public view returns (uint256) -``` - -此函數傳回金庫持有的相關資產總金額。 - -#### convertToShares {#convertoshares} - -```solidity -function convertToShares(uint256 assets) public view returns (uint256 shares) -``` - -此函數傳回 `shares` 的數量,該數量將由金庫兌換為提供的 `assets` 數量。 - -#### convertToAssets {#convertoassets} - -```solidity -function convertToAssets(uint256 shares) public view returns (uint256 assets) -``` - -此函數傳回 `assets` 的數量,該數量將由金庫兌換為提供的 `shares` 數量。 - -#### maxDeposit {#maxdeposit} - -```solidity -function maxDeposit(address receiver) public view returns (uint256 maxAssets) -``` - -該函數返回 `receiver` 的單個 [`deposit`](#deposit) 調用中可以存入的最大標的資產數量。 - -#### previewDeposit {#previewdeposit} - -```solidity -function previewDeposit(uint256 assets) public view returns (uint256 shares) -``` - -該函數允許用戶模擬其在當前區塊的存款效果。 - -#### 存款 {#deposit} - -```solidity -function deposit(uint256 assets, address receiver) public returns (uint256 shares) -``` - -該函數將標的代幣的 `assets`存入金庫,並將 `shares` 的所有權授予 `receiver`。 - -#### maxMint {#maxmint} - -```solidity -function maxMint(address receiver) public view returns (uint256 maxShares) -``` - -該函數返回 `receiver` 在單個 [`mint`](#mint) 調用中可以鑄造的最大數量。 - -#### previewMint {#previewmint} - -```solidity -function previewMint(uint256 shares) public view returns (uint256 assets) -``` - -該函數允許用戶在當前區塊模擬其鑄造的效果。 - -#### 鑄造 {#mint} - -```solidity -function mint(uint256 shares, address receiver) public returns (uint256 assets) -``` - -該函數透過存入標的代筆的 `assets`,將 `shares` 金庫份額準確鑄造到 `receiver`。 - -#### maxWithdraw {#maxwithdraw} - -```solidity -function maxWithdraw(address owner) public view returns (uint256 maxAssets) -``` - -該函數返回可以透過單個 [`withdraw`](#withdraw) 調用從 `owner` 餘額中提取的最大標的資產數量。 - -#### previewWithdraw {#previewwithdraw} - -```solidity -function previewWithdraw(uint256 assets) public view returns (uint256 shares) -``` - -該函數允許用戶模擬其在當前區塊的提款效果。 - -#### 提款 {#withdraw} - -```solidity -function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares) -``` - -該函數從 `owner` 銷毀 `shares`,並將 `assets` 代幣從金庫準確發送到 `receiver`。 - -#### maxRedeem {#maxredeem} - -```solidity -function maxRedeem(address owner) public view returns (uint256 maxShares) -``` - -該函數返回可以透過 [`redeem`](#redeem)調用從 `owner` 餘額中贖回的最大份額。 - -#### previewRedeem {#previewredeem} - -```solidity -function previewRedeem(uint256 shares) public view returns (uint256 assets) -``` - -該函數允許允許用戶在當前區塊中模擬其贖回效果。 - -#### redeem {#redeem} - -```solidity -function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets) -``` - -該函數從 `owner` 贖回特定數量的 `shares`,並將標的代幣的 `assets` 從金庫發送到 `receiver`。 - -#### totalSupply {#totalsupply} - -```solidity -function totalSupply() public view returns (uint256) -``` - -返回流通中未贖回的資金庫份額總數。 - -#### balanceOf {#balanceof} - -```solidity -function balanceOf(address owner) public view returns (uint256) -``` - -返回 `owner` 目前擁有的資金庫份額總量。 - -### 介面圖 {#mapOfTheInterface} - -![ERC-4626 介面圖](./map-of-erc-4626.png) - -### 事件 {#events} - -#### 存款事件 - -**必須**在通過[`mint`](#mint) 和[`deposit`](#deposit) 方法將代幣存入資金庫前發出 - -```solidity -event Deposit( - address indexed sender, - address indexed owner, - uint256 assets, - uint256 shares -) -``` - -其中`sender` 是用`assets` 兌換`shares`,並將這些`shares` 轉移給`owner`的用戶。 - -#### 提款事件 - -**必須**在存款人用[`redeem`](#redeem) 或[ `withdraw`](#withdraw) 方法從資金庫中取出份額時發出。 - -```solidity -event Withdraw( - address indexed sender, - address indexed receiver, - address indexed owner, - uint256 assets, - uint256 shares -) -``` - -其中 `sender` 是觸發提款並將 `owner` 擁有的 `shares` 兌換為 `assets` 的使用者。 `receiver` 是收到被提取的 `assets` 的使用者。 - -## 衍生閱讀 {#further-reading} - -- [ERC-4626:代幣化金庫標準](https://eips.ethereum.org/EIPS/eip-4626) -- [ERC-4626: GitHub Repo](https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC4626.sol) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-721/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-721/index.md deleted file mode 100644 index 22a07820770..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-721/index.md +++ /dev/null @@ -1,244 +0,0 @@ ---- -title: ERC-721 非同質化代幣標準 -description: -lang: zh-tw ---- - -## 簡介 {#introduction} - -**什麼是非同質化代幣?** - -非同質化代幣 (NFT) 用於以獨一無二的方式來識別某物或某人。 這類型的代幣非常適合在提供收藏品、密鑰、彩票、音樂會和體育比賽的編號座位等平台上使用。 這種特殊類型的代幣具有驚人潛力,因此它應得一個適當標準,而 ERC-721 正是來解決這個問題! - -**什麼是 ERC-721?** - -ERC-721 引入了非同質化代幣標準,換句話說,這類型的代幣是獨一無二,並且可以與來自同一智慧型合約的另一種代幣有不同的價值,這可能是由於其存在時間、稀有性甚至是視覺觀感等其他原因。 等一下,視覺觀感? - -是的! 所有非同質化代幣都有一個名為 `tokenId` 的 `uint256` 變數,因此對於任何 ERC-721 合約,該對 `contract address, uint256 tokenId` 必須是全局唯一的。 也就是說,去中心化應用程式可以有一個「轉換器」,使用 `tokenId` 作為輸入並輸出一些很酷的事物圖像,例如殭屍、武器、技能或神奇的小貓咪! - -## 基本資訊 {#prerequisites} - -- [帳戶](/developers/docs/accounts/) -- [智慧型合約](/developers/docs/smart-contracts/) -- [權杖標準](/developers/docs/standards/tokens/) - -## 主旨 {#body} - -ERC-721(以太坊意見請求 721)由 William Entriken、Dieter Shirley、Jacob Evans、Nastassia Sachs 於 2018 年 1 月提出,是一種非同質化代幣標準,在智慧型合約中實作代幣應用程式介面。 - -它提供的功能包括將代幣從一個帳戶轉移到另一個帳戶、獲取帳戶當前的代幣餘額、獲取特定代幣的所有者以及網路上可用代幣的總供應量。 此外它還有一些其他功能,例如批准帳戶中一定數量的代幣可以被第三方帳戶轉移。 - -如果智慧型合約實作以下方法和事件,則可以將其稱為 ERC-721 非同質化代幣合約。一旦部署,它將負責追蹤以太坊上創建的代幣。 - -取自 [EIP-721](https://eips.ethereum.org/EIPS/eip-721): - -### 方法 {#methods} - -```solidity - function balanceOf(address _owner) external view returns (uint256); - function ownerOf(uint256 _tokenId) external view returns (address); - function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; - function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; - function transferFrom(address _from, address _to, uint256 _tokenId) external payable; - function approve(address _approved, uint256 _tokenId) external payable; - function setApprovalForAll(address _operator, bool _approved) external; - function getApproved(uint256 _tokenId) external view returns (address); - function isApprovedForAll(address _owner, address _operator) external view returns (bool); -``` - -### 事件 {#events} - -```solidity - event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); - event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); - event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); -``` - -### 範例 {#web3py-example} - -讓我們看看為何標準如此重要,去讓我們檢查以太坊上的任何 ERC-721 代幣合約變得簡單。 我們只需要合約應用程式二進位介面 (ABI) 來創建任何 ERC-721 代幣的介面。 以下內容將使用簡易ABI來簡單示範. - -#### Web3.py 範例 {#web3py-example} - -首先先確定你已安專[Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python 資料庫: - -``` -pip install web3 -``` - -```python -from web3 import Web3 -from web3._utils.events import get_event_data - - -w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com")) - -ck_token_addr = "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d" # CryptoKitties Contract - -acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # CryptoKitties Sales Auction - -# This is a simplified Contract Application Binary Interface (ABI) of an ERC-721 NFT Contract. -# It will expose only the methods: balanceOf(address), name(), ownerOf(tokenId), symbol(), totalSupply() -simplified_abi = [ - { - 'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}], - 'name': 'balanceOf', - 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], - 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True - }, - { - 'inputs': [], - 'name': 'name', - 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], - 'stateMutability': 'view', 'type': 'function', 'constant': True - }, - { - 'inputs': [{'internalType': 'uint256', 'name': 'tokenId', 'type': 'uint256'}], - 'name': 'ownerOf', - 'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}], - 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True - }, - { - 'inputs': [], - 'name': 'symbol', - 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], - 'stateMutability': 'view', 'type': 'function', 'constant': True - }, - { - 'inputs': [], - 'name': 'totalSupply', - 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], - 'stateMutability': 'view', 'type': 'function', 'constant': True - }, -] - -ck_extra_abi = [ - { - 'inputs': [], - 'name': 'pregnantKitties', - 'outputs': [{'name': '', 'type': 'uint256'}], - 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True - }, - { - 'inputs': [{'name': '_kittyId', 'type': 'uint256'}], - 'name': 'isPregnant', - 'outputs': [{'name': '', 'type': 'bool'}], - 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True - } -] - -ck_contract = w3.eth.contract(address=w3.to_checksum_address(ck_token_addr), abi=simplified_abi+ck_extra_abi) -name = ck_contract.functions.name().call() -symbol = ck_contract.functions.symbol().call() -kitties_auctions = ck_contract.functions.balanceOf(acc_address).call() -print(f"{name} [{symbol}] NFTs in Auctions: {kitties_auctions}") - -pregnant_kitties = ck_contract.functions.pregnantKitties().call() -print(f"{name} [{symbol}] NFTs Pregnants: {pregnant_kitties}") - -# Using the Transfer Event ABI to get info about transferred Kitties. -tx_event_abi = { - 'anonymous': False, - 'inputs': [ - {'indexed': False, 'name': 'from', 'type': 'address'}, - {'indexed': False, 'name': 'to', 'type': 'address'}, - {'indexed': False, 'name': 'tokenId', 'type': 'uint256'}], - 'name': 'Transfer', - 'type': 'event' -} - -# We need the event's signature to filter the logs -event_signature = w3.keccak(text="Transfer(address,address,uint256)").hex() - -logs = w3.eth.get_logs({ - "fromBlock": w3.eth.block_number - 120, - "address": w3.to_checksum_address(ck_token_addr), - "topics": [event_signature] -}) - -# Notes: -# - Increase the number of blocks up from 120 if no Transfer event is returned. -# - If you didn't find any Transfer event you can also try to get a tokenId at: -# https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#events -# Click to expand the event's logs and copy its "tokenId" argument -recent_tx = [get_event_data(w3.codec, tx_event_abi, log)["args"] for log in logs] - -if recent_tx: - kitty_id = recent_tx[0]['tokenId'] # Paste the "tokenId" here from the link above - is_pregnant = ck_contract.functions.isPregnant(kitty_id).call() - print(f"{name} [{symbol}] NFTs {kitty_id} is pregnant: {is_pregnant}") -``` - -除了標準事件外,謎戀貓合約還有一些有趣的事件。 - -讓我們檢查其中兩個:`Pregnant` 和 `Birth`。 - -```python -#通過懷孕及誕生事件ABI來取得新喵咪資訊. -ck_extra_events_abi = [ - { - 'anonymous': False, - 'inputs': [ - {'indexed': False, 'name': 'owner', 'type': 'address'}, - {'indexed': False, 'name': 'matronId', 'type': 'uint256'}, - {'indexed': False, 'name': 'sireId', 'type': 'uint256'}, - {'indexed': False, 'name': 'cooldownEndBlock', 'type': 'uint256'}], - 'name': 'Pregnant', - 'type': 'event' - }, - { - 'anonymous': False, - 'inputs': [ - {'indexed': False, 'name': 'owner', 'type': 'address'}, - {'indexed': False, 'name': 'kittyId', 'type': 'uint256'}, - {'indexed': False, 'name': 'matronId', 'type': 'uint256'}, - {'indexed': False, 'name': 'sireId', 'type': 'uint256'}, - {'indexed': False, 'name': 'genes', 'type': 'uint256'}], - 'name': 'Birth', - 'type': 'event' - }] - -# We need the event's signature to filter the logs -ck_event_signatures = [ - w3.keccak(text="Pregnant(address,uint256,uint256,uint256)").hex(), - w3.keccak(text="Birth(address,uint256,uint256,uint256,uint256)").hex(), -] - -# Here is a Pregnant Event: -# - https://etherscan.io/tx/0xc97eb514a41004acc447ac9d0d6a27ea6da305ac8b877dff37e49db42e1f8cef#eventlog -pregnant_logs = w3.eth.get_logs({ - "fromBlock": w3.eth.block_number - 120, - "address": w3.to_checksum_address(ck_token_addr), - "topics": [ck_event_signatures[0]] -}) - -recent_pregnants = [get_event_data(w3.codec, ck_extra_events_abi[0], log)["args"] for log in pregnant_logs] - -# Here is a Birth Event: -# - https://etherscan.io/tx/0x3978028e08a25bb4c44f7877eb3573b9644309c044bf087e335397f16356340a -birth_logs = w3.eth.get_logs({ - "fromBlock": w3.eth.block_number - 120, - "address": w3.to_checksum_address(ck_token_addr), - "topics": [ck_event_signatures[1]] -}) - -recent_births = [get_event_data(w3.codec, ck_extra_events_abi[1], log)["args"] for log in birth_logs] -``` - -## 熱門的非同質化代幣 {#popular-nfts} - -- [Etherscan NFT Tracker](https://etherscan.io/tokens-nft) 按傳送量列出了以太坊上熱門的非同質化代幣。 -- [CryptoKitties](https://www.cryptokitties.co/) 是一款圍繞可繁殖、可收藏且非常可愛,我們稱之為謎戀貓的生物為中心的遊戲。 -- [Sorare](https://sorare.com/) 是一款全球的夢幻足球遊戲,你可以在其中收集限量版收藏品、管理你的球隊並透過競爭贏得獎品。 -- [以太坊名稱服務 (ENS)](https://ens.domains/) 提供了一種安全、去中心化的方式,使用簡單及人類可讀的名稱來辨識鏈上鏈下的資源。 -- [POAP](https://poap.xyz) 向參加活動或完成特定行動的人免費提供 NFT。 建立和分發 POAP 是免費的。 -- [Unstoppable Domains](https://unstoppabledomains.com/) 是一家位於舊金山的公司,專注於建立區塊鏈域名服務。 區塊鏈域名以人類可辨識名稱取代加密貨幣地址,並可用於啟用抗審查網站。 -- [Gods Unchained Cards](https://godsunchained.com/) 是以太坊區塊鏈上的集換式卡牌遊戲,它使用非同質化代幣為遊戲內資產帶來真正的所有權。 -- [無聊猿遊艇俱樂部](https://boredapeyachtclub.com)是一件由10000 個獨一無二的非同質化代幣(NFT)構成的收藏品,也是非常罕見的藝術品,它作為俱樂部會員資格代幣,可為成員提供多種特權和福利,而且在社區的努力下特權和福利還會隨著時間不斷增加。 - -## 衍生閱讀 {#further-reading} - -- [EIP-721:ERC-721 非同質化代幣標準](https://eips.ethereum.org/EIPS/eip-721) -- [OpenZeppelin - ERC-721 文檔](https://docs.openzeppelin.com/contracts/3.x/erc721) -- [OpenZeppelin - ERC-721 實作](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol) -- [Alchemy NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-777/index.md deleted file mode 100644 index e3580261ba5..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/erc-777/index.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: ERC-777 代幣標準 -description: -lang: zh-tw ---- - -## {#introduction} - -**** - -**** - -Hooks為一功能函數於智慧型合約程式中. 其能被調用當代幣被接發經由一智慧型合約. 其使智慧型合約能與進發之代幣互動. - -## {#prerequisites} - -- []() -- []() -- []() - -## {#body} - -此類掛鉤通常被登記及發現利用一[ERC-1820](https://eips.ethereum.org/EIPS/eip-1820)標準. - -此標準還解決了 ERC-20 中引起的 `decimals` 混亂。 這種明確度改善了開發者的體驗。 - -ERC-777 合約可以像 ERC-20 合約一樣進行互動。 - -### {#methods} - -```solidity - -``` - -### {#events} - -```solidity - -``` - -### {#web3py-example} - -#### {#web3py-example} - -``` - -``` - -```python - - - - -``` - -```python - - -``` - -## {#popular-nfts} - -- -- -- -- -- -- -- -- - -## 衍生閱讀 {#further-reading} - -- []() -- []() -- []() -- []() diff --git a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/index.md b/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/index.md deleted file mode 100644 index b88ef6b8ddd..00000000000 --- a/public/content/translations/zh-tw/23) Advanced Docs/developers/docs/standards/tokens/index.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 代幣標準 -description: -lang: zh-tw -incomplete: true ---- - -## 簡介 {#introduction} - -許多以太坊開發標準都專注於代幣介面。 這些標準有助於確保智慧型合約保持可組合性,例如當新專案發行代幣時,它仍然與現有的去中心化交易所相容。 - -## 基本資訊 {#prerequisites} - -- [以太坊開發標準](/developers/docs/standards/) -- [智慧型合約](/developers/docs/smart-contracts/) - -## 權杖標準 {#token-standards} - -以下是以太坊上一些最受歡迎的代幣標準: - -- [ERC-20](/developers/docs/standards/tokens/erc-20/) - 同質化(可互換)代幣的標準接口,例如投票代幣、質押代幣或虛擬貨幣。 - -### 非同質化代幣標準 {#nft-standards} - -- [ERC-721](/developers/docs/standards/tokens/erc-721/) - 非同質化代幣的標準接口,例如藝術品或歌曲的契約。 -- [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - ERC-1155 允許更有效率的交易和交易捆綁 – 從而節省成本。 該代幣標準允許創建實用代幣(例如 $BNB 或 $BAT)和非同質化代幣如 CryptoPunks。 - -[ERC](https://eips.ethereum.org/erc) 提案的完整清單。 - -## 衍生閱讀 {#further-reading} - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ - -## 相關教學影片 {#related-tutorials} - -- [代幣互動列表](/developers/tutorials/token-integration-checklist/)_-- 提供與代幣互動需考慮事件列表._ -- [了解 ERC20 代幣智慧型合約](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _– 在以太坊測試網路上部署你的首個智慧型合約的簡介。_ -- [從 Solidity 智慧型合約傳送並批准 ERC20 代幣](/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/) _ – 如何使用智慧型合約與使用 Solidity 語言的代幣互動。_ -- [實作 ERC721 市場 [操作指南]](/developers/tutorials/how-to-implement-an-erc721-market/) _–如何將代幣化的商品放在去中心化分類板上出售。_ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/index.md" deleted file mode 100644 index 6f70492c4d6..00000000000 --- "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/index.md" +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: 擴張 -description: 介紹以太坊社群目前正在開發的多種擴張方案。 -lang: zh-tw -sidebarDepth: 3 ---- - -## 擴張方案概覽 {#scaling-overview} - -隨著以太坊使用者數量暴增,該區塊鏈已抵達一定程度的處理能力極限。 這大幅提高了使用該網路所需的費用,引發了對「擴展解決方案」的需求。 目前正在研究、試驗和實作多種解決方案,採取不同的方法實現相似的目標。 - -可擴展性的主要目標是在不犧牲去中心化或安全性的情況下,提高交易速度(更快的最終性)和交易吞吐量(更高的每秒交易數)(更多資訊,請參閱[以太坊願景](/roadmap/vision/))。 在一層網路以太坊區塊鏈上,高需求導致交易速度下降和難以維繫的[燃料價格](/developers/docs/gas/)。 從速度和吞吐量方面提高網路處理能力,將成為促進以太坊廣泛運用的重要基礎。 - -雖然速度及吞吐量極為重要,但擴張解決方案在實現這些目標的同時保持去中心化和安全也很重要。 降低節點營運者的進入門檻,對於防止算力的中心化和非安全化演進至關重要。 - -概念上,我們首先將擴張歸為兩種類型:鏈上擴張和鏈外擴張. - -## 基本資訊 {#prerequisites} - -你需要全面了解以太坊的所有基礎概念。 擴張解決方案的實作尚未被廣泛接受,因為該技術較少歷經實戰檢驗,並且仍在研究和開發中。 - -## 鏈上擴張 {#on-chain-scaling} - -鏈上擴張需要更改以太坊協定(一層網路[主網](/glossary/#mainnet))。 長期以來,區塊鏈分片被寄望於擴張以太坊。 分片涉及將區塊鏈分割成單獨的片段(分片),並由部分驗證者進行驗證。 然而,透過二層網路卷軸進行擴張已經取而代之,成爲首要的擴張技術。 為了支援這一點,我們增加了一種新的較便宜的資料形式附加到以太坊區塊,該資料專門為了降低使用者使用卷軸的成本而設計。 - -### 分片 {#sharding} - -分片是分割資料庫的過程。 部分驗證者將負責單獨的分片,而無需追蹤整個以太坊。 分片曾長期居於以太坊[開發藍圖](/roadmap/)之上,並且在合併至權益證明之前一度計劃上線。 然而,[二層網路卷軸](#layer-2-scaling)的快速發展和 [Danksharding](/roadmap/danksharding) 的發明(將卷軸資料的二進位大型物件新增至可由驗證者非常高效地進行驗證的以太坊區塊),致使以太坊社群更傾向於采用以卷軸為中心的擴張,而不是透過分片擴張。 這也會有助於使以太坊的共識邏輯更為簡單。 - -## 鏈外擴張 {#off-chain-scaling} - -鏈外擴張與一層網路主網分開實作 - 它們不需要變更現有的以太坊協定。 一些被稱爲「二層網路」的解決方案,直接從一層網路以太坊共識獲得安全性,例如[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)、[零知識證明卷軸](/developers/docs/scaling/zk-rollups/)或[狀態通道](/developers/docs/scaling/state-channels/)。 其他解決方案涉及建立獨立於主網獲取安全性的各種形式的新鏈,例如[側鏈](#sidechains)、[Validium](#validium) 或 [Plasma 鏈](#plasma)。 這些解決方案與主網通訊,但以不同方式獲取其安全性以實現不同的目標。 - -### 二層網路擴張 {#layer-2-scaling} - -此類鏈外解決方案從以太坊主網獲取安全性。 - -二層網路是一種統稱,用於描述那些旨在透過在以太坊主網(一層網路)之外處理交易,同時利用主網强大的去中心化安全模型來幫助擴張應用程式的解決方案。 當網路堵塞時,交易速度會受到影響,這會使某些類型的去中心化應用程式的用戶體驗變差。 而且隨著網路更加堵塞,交易送發者需要用高價燃料費來標取處理優先權,導致燃料費漲價。 這會讓使用以太坊非常昂貴。 - -多數二層網路解決方案以一個伺服器或伺服器叢集為中心,分別可以稱為節點、驗證者、營運者、排序者、區塊生成者或類似術語。 視具體實作而定,這些二層網路節點可能由使用它們的個人、企業或實體,或由第三方營運者或大型個人群體(類似於主網)運行。 一般而言,交易被提交至這些二層網路節點而非直接提交至一層網路(主網)。 對於某些解決方案,二層網路執行個體接著將交易分批成組並錨定至一層網路,然後再由一層網路提供保護且無法被更改。 詳細實際狀況將依不同二層網路技術和實現而有所差異。 - -特定二層網路執行個體可能是開放的並由多個應用程式共用,也可能由一個專案部署並專用於支援其應用程式。 - -#### 為何需要二層網路? {#why-is-layer-2-needed} - -- 增加每秒交易量會極大提升用戶體驗,並減少以太坊主網上的網路擁塞。 -- 多筆交易被彙總到單筆交易中傳送至以太坊主網,這為用戶減少了燃料費用,並使以太坊對所有人更加包容且易於存取。 -- 任何可擴性更新不應以損害去中心化或安全性為代價 - 二層網路建置于以太坊之上。 -- 一些二層網路有特定的應用領域,在大規模處理資產時有很高的效率。 - -[瞭解更多關於二層網路的資訊](/layer-2/)。 - -#### 卷軸 {#rollups} - -卷軸在一層網路之外執行交易,接著將資料發佈到一層網路並在其上達成共識。 當交易資料被包含到一層網路區塊時,這讓卷軸能夠受到原生以太坊安全性的保障。 - -依不同安全模式,有兩種類型的卷軸: - -- **樂觀卷軸**:假設交易在預設條件下有效,並且僅在遇到挑戰時透過[**詐欺證明**](/glossary/#fraud-proof)執行計算。 [有關樂觀卷軸的更多資訊](/developers/docs/scaling/optimistic-rollups/)。 -- **零知識卷軸**:在鏈外執行計算並提交[**有效性證明**](/glossary/#validity-proof)至鏈上。 [有關零知識卷軸的更多資訊](/developers/docs/scaling/zk-rollups/)。 - -#### 狀態通道 {#channels} - -狀態通道使用多簽合約,讓參與者能夠快速、自由地在鏈外交易,然後與主網達成最終性。 這會減少網路擁塞,降低費用並縮短處理延遲。 目前主要有兩種類型的通道:狀態通道和支付通道。 - -瞭解更多關於[狀態通道](/developers/docs/scaling/state-channels/)的資訊。 - -### 側鏈 {#sidechains} - -側鏈是一個與以太坊相容,並與以太坊主網平行運行的獨立區塊鏈。 側鏈透過雙向跨鏈橋與以太坊相容,並運行自己選定的共識規則及區塊參數。 - -瞭解更多關於[側鏈](/developers/docs/scaling/sidechains/)的資訊。 - -### Plasma {#plasma} - -Plasma 是一條獨立的區塊鏈,與以太坊主鏈錨定,並使用詐欺證明(像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)一樣)來仲裁爭議。 - -瞭解更多關於 [Plasma](/developers/docs/scaling/plasma/) 的資訊。 - -### Validium {#validium} - -Validium 鏈使用零知識證明卷軸一類的有效性證明,但不是將資料儲存在以太坊一層網路主鏈上。 每個 Validium 鏈能有每秒 10,000 筆交易的處理速度,多個 Validium 鏈能平行運作。 - -瞭解更多關於 [Validium](/developers/docs/scaling/validium/) 的資訊。 - -## 為何我們需要那麼多擴張解決方案? {#why-do-we-need-these} - -- 多個解決方案有助於減少網路任一部分的整體擁塞,並防止出現單一故障點。 -- 整體大於各部分的總和。 不同解決方案能共存並協調發揮效益,對未來的交易速度和吞吐量產生指數級影響。 -- 並非所有解決方案都需要直接使用以太坊共識演算法,替代機制或許能提供其他共識機制無法達成之好處。 -- 沒有一種擴張解決方案能夠完全滿足[以太坊願景](/roadmap/vision/)。 - -## 想透過視覺方式學習? {#visual-learner} - - - -_請注意,此影片中的解釋使用「二層網路」指代所有鏈外擴張解決方案,而我們將其區分為透過一層網路主網共識機制獲取安全性的鏈外解決方案。_ - - - -## 衍生閱讀 {#further-reading} - -- [以卷軸為中心的以太坊開發藍圖](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) _Vitalik Buterin_ -- [以太坊二層網路擴展解決方案最新分析](https://www.l2beat.com/) -- [評估以太坊二層網路擴張解決方案:比較框架](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) -- [卷軸之不完整指南](https://vitalik.eth.limo/general/2021/01/05/rollup.html) -- [以太坊驅動的零知識證明卷軸:業界佼佼者](https://hackmd.io/@canti/rkUT0BD8K) -- [樂觀卷軸與零知識證明卷軸](https://limechain.tech/blog/optimistic-rollups-vs-zk-rollups/) -- [零知識區塊鏈可擴展性](https://ethworks.io/assets/download/zero-knowledge-blockchain-scaling-ethworks.pdf) -- [爲什麽說卷軸 + 資料分片是提高可擴展性的唯一可持續解決方案](https://polynya.medium.com/why-rollups-data-shards-are-the-only-sustainable-solution-for-high-scalability-c9aabd6fbb48) -- [什麽類型的三層網路才有意義?](https://vitalik.eth.limo/general/2022/09/17/layer_3.html) -- [Data Availability Or: How Rollups Learned To Stop Worrying And Love Ethereum](https://ethereum2077.substack.com/p/data-availability-in-ethereum-rollups) - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/optimistic-rollups/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/optimistic-rollups/index.md" deleted file mode 100644 index c547ae35aa8..00000000000 --- "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/optimistic-rollups/index.md" +++ /dev/null @@ -1,269 +0,0 @@ ---- -title: 樂觀卷軸 -description: 介紹零知識卷軸 — 一種以太坊社群使用的擴張解決方案。 -lang: zh-tw ---- - -樂觀卷軸是二層網路 (L2) 協定,旨在擴展以太坊基礎層的吞吐量。 它們透過在鏈外處理交易來減少以太坊主鏈上的計算,從而顯著提高處理速度。 與其他擴張解決方案(如[側鏈](/developers/docs/scaling/sidechains/))不同,樂觀卷軸從主網(透過在鏈上發佈交易結果)或 [Plasma 鏈](/developers/docs/scaling/plasma/)(該鏈還使用詐欺證明驗證以太坊主網上的交易,但將資料儲存在其他地方)獲取安全性。 - -由於計算是使用以太坊時緩慢且昂貴的部分,樂觀卷軸可以提供高達 10-100 倍的可擴展性提升。 樂觀卷軸還會將交易以 `calldata` 或[二進位大型物件](/roadmap/danksharding/)的形式寫入以太坊,從而降低使用者的燃料成本。 - -## 先備知識 {#prerequisites} - -你應該已經閲讀並理解我們關於[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2/)的頁面。 - -## 什麽是樂觀卷軸? {#what-is-an-optimistic-rollup} - -樂觀卷軸是一種擴張以太坊的方法,涉及將計算和狀態存儲遷移到鏈外。 樂觀卷軸在以太坊之外執行交易,但將交易資料作爲 `calldata` 或[二進位大型物件](/roadmap/danksharding/)發佈到主網。 - -樂觀卷軸營運者將多個鏈外交易捆綁到一個大批次中,然後將其提交到以太坊。 此方法可將固定成本分散到每一批次的多筆交易中,從而降低最終使用者的費用。 樂觀卷軸還使用壓縮技術來減少發佈在以太坊上的資料量。 - -樂觀卷軸之所以被認爲是「樂觀的」,是因爲其假設鏈外交易有效,並且不會針對發佈到鏈上的交易批次發佈有效性證明。 這區分了樂觀卷軸與[零知識卷軸](/developers/docs/scaling/zk-rollups),後者會發佈鏈外交易的加密[有效性證明](/glossary/#validity-proof)。 - -相反,樂觀卷軸依賴詐欺證明方案來偵測交易計算不正確的情況。 在以太坊上提交卷軸批次后,會有一個時間窗口(稱爲挑戰期),在此期間任何人都可以透過計算[詐欺證明](/glossary/#fraud-proof)來挑戰卷軸交易的結果。 - -如果詐欺證明成功,卷軸協定就會重新執行交易並相應地更新卷軸的狀態。 詐欺證明成功的另一個影響是,負責將錯誤執行的交易納入區塊的排序者會收到懲罰。 - -如果在挑戰期過後卷軸批次仍未被挑戰(即所有交易都正確執行),則它被視爲有效並在以太坊上被接受。 其他人可以繼續構建未經確認的卷軸區塊,但需要注意:交易結果如果以先前發佈的錯誤執行的交易為基礎,則會被撤銷。 - -## 樂觀卷軸如何與以太坊互動? {#optimistic-rollups-and-Ethereum} - -樂觀卷軸是爲了在以太坊上運作而構建的[鏈外擴張解決方案](/developers/docs/scaling/#off-chain-scaling)。 每個樂觀卷軸都由部署在以太坊網路上的一組智慧型合約來管理。 樂觀卷軸在以太坊主鏈之外處理交易,但將鏈外交易(按批次)發佈到鏈上的卷軸合約。 像以太坊區塊鏈一樣,此交易記錄是不可變的,並形成「樂觀卷軸鏈」。 - -樂觀卷軸的架構由以下部分組成: - -**鏈上合約**:樂觀卷軸的運作由在以太坊上執行的智慧型合約控制。 這包括用於存儲卷軸區塊、監控卷軸狀態更新以及追蹤使用者存款的合約。 從這種意義上講,以太坊充當樂觀卷軸的基礎層或「一層網路」。 - -**鏈外虛擬機 (VM)**:雖然管理樂觀卷軸協定的合約在以太坊上執行,但卷軸協定在[以太坊虛擬機](/developers/docs/evm/)之外的另一個虛擬機上執行計算和狀態存儲。 鏈外虛擬機是應用程式活躍和執行狀態變更的地方;它是樂觀卷軸的上層或「二層網路」。 - -由於樂觀卷軸旨在執行為以太坊虛擬機編寫或編譯的程式,因此鏈外虛擬機包含許多以太坊虛擬機設計規範。 此外,鏈上計算的詐欺證明讓以太坊網路可以强制執行在鏈外虛擬機中計算的狀態變更的有效性。 - -樂觀卷軸被描述為「混合擴張解決方案」,因爲儘管它們作爲單獨的協定存在,但其安全屬性來自以太坊。 除此之外,以太坊還能保證卷軸鏈外計算的正確性和計算後台資料的可用性。 這使得樂觀卷軸比不依賴以太坊獲取安全性的純鏈外擴張協定(如[側鏈](/developers/docs/scaling/sidechains/))更安全。 - -樂觀卷軸在以下方面依賴以太坊的主要協定: - -### 資料可用性 {#data-availability} - -如前所述,樂觀卷軸將交易資料以 `calldata` 或[二進位大型物件](/roadmap/danksharding/)的形式發佈到以太坊。 由於卷軸鏈的執行以提交的交易為基礎,任何人都可以使用在以太坊基礎層上錨定的此資訊,來執行卷軸的狀態並驗證狀態轉換的正確性。 - -[資料可用性](/developers/docs/data-availability/)至關重要,因爲如果不能存取狀態資料,挑戰者就無法構建詐欺證明來對無效的卷軸作業提出爭論。 透過以太坊提供資料可用性,卷軸營運者逃脫惡意行爲(如提交無效區塊)懲罰的風險就降低了。 - -### 審查阻力 {#censorship-resistance} - -樂觀卷軸也依賴以太坊來提供抗審查性。 在樂觀卷軸中,中心化實體(營運者)負責處理交易並將卷軸區塊提交到以太坊。 這會產生一些影響: - -- 卷軸營運者可以透過完全離綫或拒絕產生包含某些交易的區塊來審查使用者。 - -- 卷軸營運者可以透過扣留默克爾所有權證明所需的狀態資料,來阻止使用者提取存放在卷軸合約中的資金。 扣留狀態資料還可以向使用者隱匿卷軸的狀態,並阻止他們與卷軸進行互動。 - -樂觀卷軸透過迫使營運者在以太坊上發佈與狀態更新相關的資料來解決該問題。 在鏈上發佈卷軸資料有以下好處: - -- 如果樂觀卷軸營運者離線或停止產生交易批次,另一個節點可以使用可用資料來重現卷軸的最後狀態並繼續區塊生產。 - -- 使用者可以使用交易資料來建立默克爾證明,以證明資金的所有權,並從卷軸中提取他們的資產。 - -- 使用者也可以在一層網路提交交易,而不是提交給排序者,在這種情況下,排序者必須在一定時間限制内納入交易,以繼續生產有效的區塊。 - -### 結算 {#settlement} - -以太坊在樂觀卷軸背景下扮演的另一個角色是結算層。 結算層錨定整個區塊鏈生態系統,建立安全性,並在另一條鏈(在該實例中為樂觀卷軸)上發生需要仲裁的爭議時提供客觀的最終性. - -以太坊主網為樂觀卷軸提供了一個中樞,以驗證詐欺證明並解決爭議。 此外,在卷軸上進行的交易只有當區塊在以太坊上被接受_之後_才是最終的。 一旦卷軸交易被提交到以太坊的基礎層,它就無法回滾(除非在極不可能的情況下發生鏈重組)。 - -## 樂觀卷軸如何運作? {#how-optimistic-rollups-work} - -### 交易執行和彙總 {#transaction-execution-and-aggregation} - -使用者向「營運者」提交交易,「營運者」則是樂觀卷軸上負責處理交易的節點。 營運者也稱爲「驗證者」或「彙總者」,負責彙總交易、壓縮底層資料,並在以太坊上發佈區塊。 - -儘管任何人都可以成爲驗證者,但樂觀卷軸驗證者與[權益證明系統](/developers/docs/consensus-mechanisms/pos/)很像,必須在生成區塊之前提供保證金。 如果驗證者發佈了無效的區塊或構建了原有但無效的區塊(即使他們的區塊是有效的),該保證金可能會被罰沒。 透過這種方式,樂觀卷軸利用加密經濟激勵來確保驗證者誠實行事。 - -樂觀卷軸鏈上的其他驗證者預期使用他們的卷軸狀態複本來執行提交的交易。 如果驗證者的最終狀態與營運者建議的狀態不同,他們可以發起挑戰並計算詐欺證明。 - -一些樂觀卷軸可能會放棄無需許可的驗證者系統並使用單個「排序者」來執行鏈。 與驗證者一樣,排序者會處理交易、生成卷軸區塊,並將卷軸交易提交到一層網路鏈(以太坊)。 - -排序者與常規卷軸營運者不同,因爲他們對交易的順序有更大的控制權。 此外,排序者具有卷軸鏈的優先存取權,並且是唯一被授權向鏈上合約提交交易的實體。 來自非排序者節點或常規使用者的交易只會在一個單獨的收件匣中排隊,直到排序者將其納入一個新批次。 - -#### 提交卷軸區塊到以太坊 {#submitting-blocks-to-ethereum} - -如前所述,樂觀卷軸的營運者將鏈外交易捆綁為一個批次,並將其發送到以太坊進行公證。 該程序涉及壓縮與交易相關的資料,並將其作爲 `calldata` 或二進位大型物件發佈到以太坊上。 - -`calldata` 是智慧型合約中不可修改、非持久的區域,其行爲與[記憶體](/developers/docs/smart-contracts/anatomy/#memory)極為相似。 儘管 `calldata` 作爲區塊鏈[歷史日志](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs)的一部分持續不變,但它不會儲存爲以太坊狀態的一部分。 由於 `calldata` 不觸及以太坊狀態的任何部分,因此它比在鏈上儲存資料的狀態更便宜。 - -`calldata` 關鍵字也在 Solidity 中用於在執行時傳送參數到智慧型合約函式。 `calldata` 辨識在交易期間被調用的函式,並以任意位元組序列的形式保存函式的輸入。 - -在樂觀卷軸的背景下,`calldata` 被用於將壓縮的交易資料發送到鏈上合約。 卷軸營運者透過呼叫卷軸合約中所需的函式,並將壓縮資料作爲函式引數傳送,來添加新批次。 使用 `calldata` 可以降低使用者費用,因爲卷軸產生的大部分成本來自鏈上储存資料。 - -以下是卷軸批次提交的[一個示例](https://etherscan.io/tx/0x9102bfce17c58b5fc1c974c24b6bb7a924fb5fbd7c4cd2f675911c27422a5591),展示了此概念如何運作。 排序者叫用 `appendSequencerBatch()` 方法並使用 `calldata` 將壓縮的交易資料作爲輸入傳送。 - -一些卷軸現在使用二進位大型物件將交易批次發佈到以太坊。 - -二進位大型物件是不可修改且非持久的(就像 `calldata`),并會在約 18 天后從歷史记录中刪除。 有關二進位大型物件的更多資訊,請参阅 [Danksharding](/roadmap/danksharding)。 - -### 狀態承諾 {#state-commitments} - -在任何時間,樂觀卷軸狀態(帳戶、餘額、合約程式碼等)都被組織為[默克爾樹](/whitepaper/#merkle-trees),也稱爲「狀態樹」。 該默克爾樹的根(狀態根)引用卷軸的最新狀態,經過雜湊並儲存在卷軸合約中。 鏈上的每個狀態轉換都會產生一個新的卷軸狀態,營運者透過計算新的狀態根來提交該狀態。 - -營運者在發佈批次時需要同時提交舊狀態根和新狀態根。 如果舊狀態根與鏈上合約中現有的狀態根相符,則現有狀態根會被丟棄並替換爲新狀態根。 - -卷軸營運者還需要為交易批次本身提交默克爾根。 這讓任何人都能透過提供[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/),證明交易已納入批次中(在一層網路上)。 - -狀態承諾,尤其是狀態根,對於證明樂觀卷軸中的狀態變更正確性非常必要。 卷軸合約在發佈後會立即接受來自營運者的新狀態根,但之後可以刪除無效的狀態根,將卷軸復原到其正確狀態。 - -### 詐欺證明 {#fraud-proving} - -如前所述,樂觀卷軸讓任何人都可以在不提供有效性證明的情況下發佈區塊。 然而,爲了確保鏈保持安全,樂觀卷軸指定了一個時間窗口,在此期間任何人都可以對狀態轉換提出異議。 因此,卷軸區塊被稱爲「斷言」,因爲任何人都可以質疑其有效性。 - -如果有人對斷言提出異議,卷軸協定會啓動詐欺證明計算。 每種類型的詐欺證明都是互動式的 — 必須有人發佈斷言,然後另一個人才能對其提出挑戰。 區別在於計算詐欺證明需要多少輪互動。 - -單輪互動式證明方案在一層網路回放有爭議的交易,以偵測無效斷言。 卷軸協定使用驗證者合約模擬在一層網路(以太坊)上重新執行有爭議的交易,利用計算出的狀態根確定誰贏得挑戰。 如果挑戰者關於卷軸正確狀態的聲明是正確的,營運者就會受到懲罰,他們的保證金將被罰沒。 - -然而,在一層網路重新執行交易以偵測欺詐,需要發佈單獨交易的狀態承諾,並增加必須在鏈上發佈的資料卷軸。 回放交易還會產生巨大的燃料成本。 出於這些原因,樂觀卷軸正在轉換到多輪互動式證明,以更高的效率實現相同的目標(即偵測無效卷軸作業)。 - -#### 多輪互動式證明 {#multi-round-interactive-proving} - -多輪互動式證明涉及斷言者與挑戰者之間的往返協定,該協定由一層網路驗證者合約監督,最終確定説謊方。 二層網路節點對斷言提出挑戰后,斷言者需要將有爭議的斷言分成相等的兩半。 在這種情況下,每個單獨的斷言都會包含與另一個斷言一樣多的計算步驟。 - -然後挑戰者會選擇其想要挑戰的斷言。 劃分過程(稱爲「二等分協定」)一直持續到雙方就_單個_執行步驟的斷言發生爭議。 此時,一層網路合約會透過評估指示(及其結果)來解決爭議,以抓住欺詐方。 - -斷言者需要提供「一步證明」來驗證有爭議的單步計算的有效性。 如果斷言者未能提供一步證明,或者一層網路驗證者認爲證明無效,他們便會輸掉挑戰。 - -關於此類詐欺證明的一些注意事項: - -1. 多輪互動式詐欺證明被認爲是有效率的,因爲它能最大限度減少一層網路鏈在爭議仲裁中必須完成的工作。 一層網路鏈無需回放整個交易,而只需要重新執行卷軸執行過程中的一個步驟。 - -2. 二等分協定減少了發佈在鏈上的資料量(無需為每筆交易發佈狀態承諾)。 此外,樂觀卷軸交易不受以太坊燃料限制的約束。 相反,樂觀卷軸重新執行交易時必須確保二層網路交易具有較低的燃料限制,以模擬其在單筆以太坊交易中的執行。 - -3. 惡意斷言者的保證金一部分被獎勵給挑戰者,而另一部分則會被銷毀。 銷毀可以防止驗證者之間串通;如果兩個驗證者串通起來發起虛假挑戰,他們仍然會損失其全部質押的很大一部分。 - -4. 多輪互動式證明需要雙方(斷言者和挑戰者)在指定的時間窗口内行動。 未能在最後期限前采取行動會導致違約方喪失挑戰機會。 - -#### 爲什麽詐欺證明對於樂觀卷軸很重要 {#fraud-proof-benefits} - -詐欺證明很重要,因爲它們促進了樂觀卷軸中的_去信任最終性_。 去信任最終性是樂觀卷軸的一項品質,它保證交易只要有效,最終將會被確認。 - -惡意節點可以嘗試透過啓動虛假挑戰來延遲對有效卷軸區塊的確認。 然而,詐欺證明最終會證明卷軸區塊的有效性並使其得到確認。 - -這也與樂觀卷軸的另一個安全屬性有關:鏈的有效性依賴於_一個_誠實節點的存在。 誠實節點可以透過發佈有效斷言或對無效斷言提出異議來正確地推進鏈。 無論如何,與誠實節點發生爭議的惡意節點會在詐欺證明過程中失去其質押。 - -### 一層網路/二層網路的互操作性 {#l1-l2-interoperability} - -樂觀卷軸旨在與以太坊主網的互操作性,並允許使用者在一層網路和二層網路之間傳輸訊息和任意資料。 它們還與以太坊虛擬機兼容,因此你可以將現有的[去中心化應用程式](/developers/docs/dapps/)移植到樂觀卷軸,或使用以太坊開發工具建立新的去中心化應用程式。 - -#### 1. 資產轉移 {#asset-movement} - -##### 進入卷軸 - -爲了使用樂觀卷軸,使用者需要將以太幣、ERC-20 代幣和其他被接受的資產存入一層網路上卷軸的[跨鏈橋](/developers/docs/bridges/)合約中。 跨鏈橋合約會將交易轉送到二層網路,在那裏鑄造等量的資產並發送到使用者在樂觀卷軸上選擇的地址。 - -使用者生成的交易(如一層網路 > 二層網路存款)通常需要排隊,直到排序者將其重新提交到卷軸合約。 然而,爲了保持抗審查性,如果交易延遲超過允許的最大時間,樂觀卷軸將允許使用者直接向鏈上卷軸合約提交交易。 - -一些樂觀卷軸采用更簡單的方法來防止排序者審查使用者。 這時,區塊由自前一個區塊以來提交給一層網路合約的所有交易(如存款)以及卷軸鏈上已處理的交易共同定義。 如果排序者忽略一層網路交易,它將發佈(可證明)錯誤的狀態根;因此,一旦使用者產生的訊息被發佈在一層網路上,排序者就不能將其延遲。 - -##### 退出卷軸 - -由於詐欺證明方案,從樂觀卷軸提款到以太坊更加困難。 如果使用者發起一個二層網路 > 一層網路的交易以提取在一層網路上托管的資金,他們就必須等到挑戰期(持續約 7 天)結束。 盡管如此,提款過程本身相當簡單。 - -在二層網路上發起提款請求後,該交易會被納入下一個批次,同時使用者在卷軸上的資產被銷毀。 一旦批次在以太坊上發佈,使用者就可以計算一個默克爾證明,來驗證其退出交易是否納入到區塊中。 然後只需要等待延遲期過後最終確定一層網路上的交易,並將資金提取到主網。 - -爲了避免向以太坊提款之前等待一周的時間,樂觀卷軸使用者可以雇用一個**流動性提供者** (LP)。 流動性提供者承擔待處理的二層網路提款的所有權,並在一層網路上向使用者付款(以換取費用)。 - -流動性提供者可以在釋放資金之前檢查使用者提款請求的有效性(透過自行執行鏈)。 這樣他們就可以保證交易最終會得到確認(即去信任最終性)。 - -#### 2. 以太坊虛擬機 (EVM) 相容性 {#evm-compatibility} - -對於開發者來講,樂觀卷軸的優勢在於,它們與[以太坊虛擬機 (EVM)](/developers/docs/evm/) 的相容性(或者更確切地說,等效性)。 與以太坊虛擬機相容的卷軸符合[以太坊黃皮書](https://ethereum.github.io/yellowpaper/paper.pdf)中的規範,並在位元組碼級別支援以太坊虛擬機。 - -樂觀卷軸中的以太坊虛擬機相容性具有以下好處: - -i. 開發者可以將以太坊上的現有智慧型合約遷移到樂觀卷軸鏈,而無需大量修改程式碼庫。 這可以節省開發團隊在二層網路上部署以太坊智慧型合約的時間。 - -ii. 使用樂觀卷軸的開發者和專案團隊可以利用以太坊的基礎設施。 這包括程式設計語言、程式碼庫、測試工具、用戶端軟體、部署基礎設施等。 - -使用現有工具很重要,因爲這些工具多年來已經過廣泛的審核、除錯和改進。 它還讓以太坊開發者不需要學習如何使用全新的開發堆棧建置應用程式。 - -#### 3. 跨鏈合約呼叫 {#cross-chain-contract-calls} - -使用者(外部擁有的帳戶)透過向卷軸合約提交交易或者讓排序者或驗證者為其提交交易,來與二層網路合約進行互動。 樂觀卷軸還讓以太坊上的合約帳戶可以與二層網路互動,使用跨鏈橋合約來轉送訊息,並在一層網路和二層網路之間傳遞資料。 這意味著你可以在以太坊主網上編寫一層網路合約,來叫用屬於二層網路樂觀卷軸合約的函式。 - -跨鏈合約呼叫是非同步發生的 — 這意味著呼叫首先啓動,然後再執行。 這與以太坊上兩個合約之間的呼叫不同,那種呼叫會立即產生結果。 - -跨鏈合約的一個範例是先前描述的代幣存款。 一層網路上的合約托管使用者的代幣,並向配對的二層網路合約發送訊息,以在卷軸中鑄造等量的代幣。 - -由於跨鏈訊息呼叫會導致合約執行,因此發送者通常需要支付用於計算的[燃料成本](/developers/docs/gas/)。 建議設定較高的燃料限制,以防止交易在目標鏈上失敗。 代幣跨鏈橋場景就是一個很好的範例:如果交易的一層網路端(存入代幣)有效,但二層網路端(鑄造新代幣)由於燃料不足而失敗,則存款將無法恢復。 - -最後,我們應該注意,合約之間的二層網路 > 一層網路訊息呼叫需要考慮延遲(一層網路 > 二層網路呼叫通常在幾分鐘後執行)。 這是因爲從樂觀卷軸發送到主網的訊息在挑戰窗口到期之前無法執行。 - -## 樂觀卷軸的費用如何計算? {#how-do-optimistic-rollup-fees-work} - -樂觀卷軸使用與以太坊非常相似的燃料費方案來表示使用者為每筆交易支付的費用。 樂觀卷軸收取的費用取決於以下組成部分: - -1. **狀態寫入**:樂觀卷軸將交易資料和區塊頭(由前一個區塊頭的雜湊、狀態根、批次根組成)作爲 `blob`,即「二進位大型物件」,發佈到以太坊。 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) 為鏈上納入資料引入了具成本效益的解決方案。 `blob` 是一個新交易欄位,讓卷軸可以將壓縮的狀態轉換資料發佈到以太坊一層網路。 與鏈上永久保留的 `calldata` 不同,二進位大型物件的生命周期很短,在 [4096 個時期](https://github.com/ethereum/consensus-specs/blob/81f3ea8322aff6b9fb15132d050f8f98b16bdba4/configs/mainnet.yaml#L147)(約 18 天)后即會被用戶端刪除。 透過使用二進位大型物件發佈壓縮的交易批次,樂觀卷軸可以顯著降低向一層網路寫入交易的成本。 - -2. **二進位大型物件燃料使用**:二進位大型物件攜帶的交易采用類似於 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 中引入的動態費用機制。 3 型交易的燃料費會考慮二進位大型物件的基本費用,該費用由網路根據二進位大型物件空間需求和所發送交易的二進位大型物件空間使用來決定。 - -3. **二層網路營運者費用**:這是支付給卷軸節點的金額,用於補償處理交易時產生的計算成本,與以太坊上的燃料費非常相似。 由於二層網路處理能力更强,並且不會出現網路擁塞迫使以太坊上的驗證者優先處理費用更高的交易,卷軸節點收取的交易費更低。 - -樂觀卷軸套用了多種機制來降低使用者的費用,包括批次交易和壓縮 `calldata` 來降低資料發佈成本。 你可以查看[二層網路費用追蹤器](https://l2fees.info/)來即時瞭解使用基於以太坊的樂觀卷軸的成本。 - -## 樂觀卷軸如何擴張以太坊? {#scaling-ethereum-with-optimistic-rollups} - -如前所述,樂觀卷軸在以太坊上發佈壓縮的交易資料,以保證資料可用性。 壓縮鏈上發佈的資料的能力,對於透過樂觀卷軸來擴張以太坊的吞吐量至關重要。 - -以太坊主鏈限制了區塊可容納的資料量,以燃料單位計價([平均區塊大小](/developers/docs/blocks/#block-size)為 1500 萬燃料)。 雖然這限制了每筆交易可以使用的燃料數量,但也意味著我們可以透過減少與交易相關的資料來增加每個區塊處理的交易 — 直接改進了可擴展性。 - -樂觀卷軸使用多種技術來實現交易資料壓縮並提高每秒交易數速率。 例如,這篇[文章](https://vitalik.eth.limo/general/2021/01/05/rollup.html)將基本使用者交易(發送以太幣)在主網上產生的資料量與相同交易在卷軸上產生的資料量進行了比較: - -| 參數 | 以太坊(一層網路) | 卷軸(二層網路) | -| ------ | ----------------- | ------------ | -| 隨機數 | ~3 | 0 | -| 燃料價格 | ~8 | 0-0.5 | -| 燃料 | 3 | 0-0.5 | -| 目標 | 21 | 4 | -| 數值 | 9 | ~3 | -| 簽名 | ~68 (2 + 33 + 33) | ~0.5 | -| 來源 | 0(從簽名恢復) | 4 | -| **總計** | **~112 個位元組** | **~12 個位元組** | - -對這些數字進行一些初略計算,有助於顯示樂觀卷軸提供的可擴展性改進: - -1. 每個區塊的目標大小為 1500 萬燃料,驗證一個位元組的資料需要 16 燃料。 將平均區塊大小除以 16 燃料 (15,000,000/16),顯示了一般區塊可以容納 **937,500 個位元組的資料**。 -2. 如果一個基本卷軸交易使用 12 個位元組,則以太坊區塊平均可以處理 **78,125 筆卷軸交易** (937,5000/12) 或 **39 個卷軸批次**(如果每個批次平均包含 2,000 筆交易)。 -3. 如果每 15 秒在以太坊上產生一個新區塊,則卷軸的處理速度大約爲**每秒 5,208 筆交易**。 計算方法是,將以太坊區塊可以容納的基本卷軸交易數量 (**78,125**) 除以平均出塊時間(**15 秒**)。 - -鑒於樂觀卷軸交易不可能包含以太坊上的整個區塊,這是一個比較樂觀的預計。 但是,透過它可以大致瞭解樂觀卷軸可以為以太坊使用者提供多少可擴展性收益(當前實現可提供每秒高達 2,000 筆交易的速率)。 - -在以太坊上引入[資料分片](/roadmap/danksharding/)有望增加樂觀卷軸的可擴展性。 由於卷軸交易必須與其他非卷軸交易共用區塊空間,因此其最大處理能力受制於以太坊主鏈上的資料吞吐量。 Danksharding 使用更便宜的非永久型「二進位大型物件」存儲,而不是昂貴的永久型 `CALLDATA`,這將增加二層網路鏈上用於按區塊發佈資料的空間。 - -### 樂觀卷軸的優點和缺點 {#optimistic-rollups-pros-and-cons} - -| 優勢 | 劣勢 | -| ------------------------------------------------------------------ | --------------------------------------- | -| 在不犧牲安全和去信任的情況下大幅改進可擴展性。 | 潛在的欺詐挑戰導致交易最終性延遲。 | -| 交易資料儲存在一層網路鏈上,提高了透明性、安全性、抗審查性和去中心化。 | 中心化卷軸營運者(排序者)可以影響交易順序。 | -| 詐欺證明保證了去信任的最終性,並使誠實少數能夠保護鏈的安全。 | 如果沒有誠實節點,惡意營運者就可以透過發佈無效區塊和狀態承諾來竊取資金。 | -| 計算詐欺證明對常規二層網路節點開放,這與需要特殊硬體的有效性證明(用於零知識卷軸中)不同。 | 安全模式依賴於至少一個誠實節點執行卷軸交易並提交詐欺證明來挑戰無效的狀態轉換。 | -| 卷軸受益於「去信任活躍性」(任何人都可以透過執行交易和發佈斷言來强制鏈前進) | 使用者在將資金提取回以太坊之前,必須等待為期一周的挑戰期結束。 | -| 樂觀卷軸依賴於精心設計的加密激勵機制來提升鏈上安全性。 | 卷軸必須在鏈上發佈所有交易資料,這可能會增加成本。 | -| 與以太坊虛擬機和 Solidity 的相容性,讓開發者可以將以太坊原生智慧型合約移植到卷軸或使用現有工具來建立新的去中心化應用程式。 | | - -### 樂觀卷軸之視覺範例 {#optimistic-video} - -想透過視覺方式學習? 觀看 Finematics 解釋樂觀卷軸: - - - -### 使用樂觀卷軸 {#use-optimistic-rollups} - -樂觀卷軸存在多種實作,可供你整合到去中心化應用程式: - - - -## 有關樂觀卷軸的延伸閲讀 - -- [樂觀卷軸如何運作(完整指引)](https://www.alchemy.com/overviews/optimistic-rollups) -- [什麽是區塊鏈卷軸? (技術介紹)](https://www.ethereum-ecosystem.com/blog/what-is-a-blockchain-rollup-a-technical-introduction) -- [Arbitrum 之概要指引](https://newsletter.banklesshq.com/p/the-essential-guide-to-arbitrum) -- [樂觀卷軸究竟如何運作?](https://www.paradigm.xyz/2021/01/how-does-optimisms-rollup-really-work) -- [樂觀虛擬機深入探索](https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52) -- [什麽是樂觀虛擬機?](https://www.alchemy.com/overviews/optimistic-virtual-machine) diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/plasma/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/plasma/index.md" deleted file mode 100644 index 1f74e0ceff7..00000000000 --- "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/plasma/index.md" +++ /dev/null @@ -1,175 +0,0 @@ ---- -title: Plasma 鏈 -description: 介紹目前作為擴張解決方案供以太坊社群使用的 Plasma 鏈。 -lang: zh-tw -incomplete: true -sidebarDepth: 3 ---- - -Plasma 鏈是錨定以太坊主網的獨立區塊鏈,其交易在鏈外執行並有自己的區塊驗證機制。 Plasma 鏈有時被稱為「子」鏈,本質上是以太坊主網的縮小複製版, 使用[詐欺證明](/glossary/#fraud-proof)(如[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/))來仲裁爭議。 - -使用默克爾樹可以建立這些鏈的無限堆疊,將父母鏈(包括以太坊主網)的頻寬載荷轉移到 Plasma 鏈。 然而,雖然這些鏈會繼承以太坊的一些安全性(透過詐欺證明),但它們的安全性和效率受多項設計限制的影響。 - -## 基本資訊 {#prerequisites} - -推薦你先熟悉以太坊的所有基本概念,並大致了解[以太坊擴張](/developers/docs/scaling/)。 - -## 何謂 Plasma 鏈? - -Plasma 是一個改善公共區塊鏈(如以太坊)可擴展性的框架。 如原始版 [Plasma 白皮書](http://plasma.io/plasma.pdf)中所述,Plasma 鏈建置在另一個區塊鏈(稱為「根鏈」)之上。 每個「子鏈」都是從根鏈延伸而來,通常由部署於父母鏈上的智慧型合約來管理。 - -Plasma 合約的功能之一是作為[跨鏈橋](/developers/docs/bridges/),讓使用者可以在以太坊主網和 Plasma 鏈之間移動資產。 雖然這讓 Plasma 鏈看似很像[側鏈](/developers/docs/scaling/sidechains/),但不同的是,Plasma 鏈至少某種程度上受益於以太坊主網的安全性, 而側鏈則是完全為自身的安全性負責,與以太坊主網無關。 - -## Plasma 鏈如何運作? - -Plasma 鏈的基本組成部分有: - -### 鏈外計算 {#off-chain-computation} - -以太坊目前的處理速度限制約是每秒 15 到 20 筆交易,短期內無法有效地擴張以面對更多使用者。 存在這個問題的原因是,以太坊的[共識機制](/developers/docs/consensus-mechanisms/)需要大量點對點節點來驗證區塊鏈狀態的每次更新。 - -雖然以太坊的共識機制對於安全性是必需的,但這並不適用於所有使用案例。 例如,Alice 不需要讓整個以太坊網路來驗證她每天付給 Bob 的咖啡錢,畢竟她跟 Bob 雙方之間已經有一定的信任關係了。 - -Plasma 鏈假設以太坊主網不需要驗證所有交易。 相反,我們可以在主網外處理交易,讓節點不必驗證每一筆交易。 - -由於 Plasma 鏈可以最佳化速度和成本,鏈外運算是有必要的。 舉例來說,Plasma 鏈可能(實際上經常如此)使用單一的「營運者」來管理交易的排序與執行。 既然只有一個實體驗證交易,在 Plasma 鏈上處理交易的速度就比以太坊主網快得多。 - -### 狀態承諾 {#state-commitments} - -儘管 Plasma 鏈在鏈外執行交易,這些交易仍會在以太坊主網的執行層結算,否則 Plasma 鏈也無法受益於以太坊的安全保障。 但如果在最終確定鏈外交易時未能獲知 Plasma 鏈的狀態,那將打破前述安全性模型,並可能導致無效交易氾濫。 這就是為何在 Plasma 鏈上負責產生區塊的營運者,需要定期在以太坊主網上發布「狀態承諾」。 - -[承諾方案](https://en.wikipedia.org/wiki/Commitment_scheme)是一種密碼學技術,用以在不洩漏給另一方的情況下承諾某個價值或是主張。 承諾就其意義而言是一種約束,一旦做出承諾就無法變更承諾的價值或主張。 Plasma 鏈上的狀態承諾會採用「默克爾根」(源自[默克爾樹](/whitepaper/#merkle-trees))的形式,營運者會定期把狀態承諾傳送到以太坊鏈上的 Plasma 合約。 - -默克爾根為密碼學基元,讓我們得以將大量資訊進行壓縮。 默克爾根(在這一情境下也稱「區塊根」)可以代表區塊內的所有交易。 默克爾根還讓我們可以很容易地驗證,一小份資料是否存在於較大資料集中。 舉例來說,使用者可以透過產生一個[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/#main-content),來證明一筆交易有被納入特定區塊中。 - -默克爾根非常重要,用於把鏈外狀態的相關資訊提供給以太坊。 我們可以把默克爾根想像成「暫存點」:營運者表示,「這是 Plasma 鏈在時間點 x 的狀態,以此默克爾根為證」。 營運者承諾 Plasma 鏈的_目前狀態_,並附上一個默克爾根,也就是所謂的「狀態承諾」。 - -### 進入與退出 {#entries-and-exits} - -以太坊的使用者如果想要享受到 Plasma 的好處,會需要一個機制來在以太坊主網與 Plasma 鏈之間轉移資金。 我們不能把以太幣隨意地傳送到 Plasma 鏈上的地址,不過由於兩個鏈並不相容,所以交易結果不是失敗就是資金消失。 - -Plasma 鏈使用一個在以太坊上執行的主合約來處理使用者的進入和退出。 這個主合約也負責追蹤狀態承諾(上文提到的),並依據詐欺證明來懲罰不誠實的行為(我們等等會詳談)。 - -#### 進入 Plasma 鏈 {#entering-the-plasma-chain} - -若要進入 Plasma 鏈,Alice(使用者)會需要存入以太幣或是任意 ERC-20 代幣到 Plasma 合約。 Plasma 上負責監視合約存款的營運者,會建立一筆與 Alice 的首筆存款等額的資產並發放到她在 Plasma 鏈上的地址。 Alice 需要在子鏈上證明有收到這筆資金,接著就可以使用這些資金進行交易。 - -#### 退出 Plasma 鏈 {#exiting-the-plasma-chain} - -退出 Plasma 鏈則因為各種原因,比進入時複雜了許多。 最大的原因是,雖然以太坊有關於 Plasma 鏈狀態的資訊,但以太坊並無法驗證那些資訊是否真實。 惡意使用者可以不實地宣稱(如「我有 1000 枚以太幣」),透過提供虛假證明來支持其謊言並逍遙法外。 - -為了避免惡意提款,「挑戰期」應運而生。 在挑戰期間(通常為一週),任何人都可以使用詐欺證明,對一個提款請求進行挑戰。 如果挑戰成功,提款請求就會被拒絕。 - -不過,使用者通常都是誠實的,對其擁有資金的宣稱也是正確的。 延續 Alice 的情境,她會透過向 Plasma 合約提交一筆交易,在根鏈(以太坊)上發起提款請求。 - -她還必須提供一個默克爾證明,驗證 Plamsa 鏈上有一筆建立 Alice 資金的交易已被納入到區塊中。 這對於 Plasma 的迭代實作來說很有必要,如 [Plasma MVP](https://www.learnplasma.org/en/learn/mvp.html),它採用的是[未花費交易輸出 (UTXO)](https://en.wikipedia.org/wiki/Unspent_transaction_output) 模型。 - -其他的實作方案如 [Plasma Cash](https://www.learnplasma.org/en/learn/cash.html),將資金視作[非同質化代幣](/developers/docs/standards/tokens/erc-721/),而非未花費交易輸出模型。 在這一實作方案中,提款時需要附上 Plasma 鏈上代幣的擁有權證明。 這可以透過提交兩筆包含代幣的最新交易,及一份默克爾證明,驗證這兩筆交易有被打包進區塊。 - -使用者也需要在提款請求中加入保證金,來擔保其行為誠實。 如果有挑戰者證明 Alice 的提款請求是無效的,她的保證金會被罰沒,其中一部分保證金會給挑戰者作為獎勵。 - -如果直至挑戰期結束,仍沒有任何人提供詐欺證明,Alice 的提款要求就會被視為有效,她便能把存款從以太鏈上的 Plasma 合約中取回。 - -### 爭議仲裁 {#dispute-arbitration} - -與任何區塊鏈一樣,Plasma 鏈需要一種機制來確保交易的完整性,防範參與者的惡意行爲(例如,雙重消費資金)。 爲此,Plasma 鏈使用詐欺證明來對有關狀態轉換有效性的爭議進行仲裁並懲罰不良行爲。 詐欺證明可作爲一種機制,Plasma 子鏈可以透過它向父母鏈或根鏈提出投訴。 - -詐欺證明只是聲明特定的狀態轉換無效。 例如,如果使用者 Alice 嘗試兩次消費同一資金。 也許她在與 Bob 的交易中消費了未花費交易輸出 (UTXO),並希望在另一筆交易中消費相同的未花費交易輸出(但現在是 Bob 的了)。 - -爲了防止提款,Bob 將透過提供 Alice 在之前交易中消費上述未花費交易輸出 (UTXO) 的證據以及該交易已納入區塊的默克爾證明,來建構詐欺證明。 在 Plasma Cash 中使用相同的程序 — Bob 需要提交證明,證明 Alice 先前已經傳送了她嘗試提取的代幣。 - -如果 Bob 挑戰成功,Alice 的提款請求將被取消。 然而,這種方法依賴於 Bob 有能力監視鏈上的提款請求。 如果 Bob 離綫,一旦挑戰期結束,Alice 就可以處理這筆惡意提款。 - -## Plasma 鏈中的大規模退出問題 {#the-mass-exit-problem-in-plasma} - -當大量使用者試圖同時從 Plasma 鏈提款時,就會出現大規模退出問題。 出現該問題的原因與 Plasma 的最大問題之一有關:**資料不可用性**。 - -資料可用性是驗證所提議區塊的資訊是否已實際發佈在區塊鏈網路上的能力。 如果生產者自己發佈區塊但保留用於建立區塊的資料,則該區塊是「不可用的」。 - -如果節點要能夠下載區塊並驗證交易的有效性,區塊必須是可用的。 區塊鏈透過迫使區塊生產者在鏈上發佈所有交易資料來確保資料可用性。 - -資料可用性還有助於保護建構於以太坊基礎層之上的鏈外擴張協議。 透過迫使這些鏈上營運者在以太坊上發佈交易資料,任何人都可以藉由構建引用正確鏈狀態的詐欺證明,來挑戰無效區塊。 - -Plasma 鏈主要儲存與營運者的交易資料,並且**不在主網上發佈任何資料**(即除了定期狀態承諾之外)。 這意味著如果使用者需要建立詐欺證明來挑戰無效交易,他們就必須仰賴營運者提供交易資料。 如果該系統正常運作,則使用者始終可以使用詐欺證明來保護資金。 - -當進行惡意行爲的是營運者而不僅僅是使用者時,問題就開始了。 由於營運者完全控制區塊鏈,他們更有動力更大規模地推進無效狀態轉換,例如竊取 Plasma 鏈上屬於使用者的資金。 - -在這種情況下,使用經典的詐欺證明系統是行不通的。 營運者可以簡單地進行無效交易,將 Alice 和 Bob 的資金傳送到其錢包中,並隱藏建立詐欺證明所需的資料。 這是可能的,因爲營運者不需要向使用者或主網提供資料。 - -因此,最樂觀的解決方案是嘗試從 Plasma 鏈上「大規模退出」使用者。 大規模退出減慢了惡意營運者竊取資金的計劃,並為使用者提供了一定程度的保護。 提款請求根據每個未花費交易輸出 (UTXO)(或代幣)的建立時間排序,以防止惡意營運者搶先交易誠實的使用者。 - -盡管如此,我們仍然需要一種方法來驗證大規模退出期間提款請求的有效性,以防止機會主義個人在處理無效退出的混亂中獲利。 解決方案很簡單:要求使用者發佈最後一個**有效的鏈狀態**來退出其資金。 - -但這種方法仍然存在問題。 例如,如果 Plasma 鏈上的所有使用者都需要退出(在惡意營運者的情況下是可能的),Plasma 鏈的整個有效狀態就必須立即轉儲到以太坊的基礎層。 由於 Plasma 鏈可能為任意大小(高吞吐量 = 更多資料)和以太坊處理速度的限制,這不是一個理想的解決方案。 - -儘管退出游戲在理論上聽起來不錯,但現實中的大規模退出可能會引發以太坊本身的全網路擁塞。 除了損害以太坊的功能之外,協調不善的大規模退出意味著使用者可能無法在營運者耗盡 Plasma 鏈上的每個帳戶之前提取資金。 - -## Plasma 的優勢和劣勢 {#pros-and-cons-of-plasma} - -| 優勢 | 劣勢 | -| ----------------------------------------------------------------------------- | --------------------------------------------------- | -| 提供高吞吐量和低單位交易成本。 | 不支援一般運算(無法執行智慧型合約)。 僅透過特定運用邏輯支援基本的代幣轉移、交換及其他幾種交易類型。 | -| 適合任意使用者之間的交易(若雙方使用者都處於 Plasma 鏈上,則不會產生任何開銷) | 需要本人定期監看網路(活躍性要求)或委託他人監看,以保障資金安全。 | -| Plasma 鏈可以適應與主鏈無關的特定使用案例。 包括企業在内的任何人,都可以自訂 Plasma 智慧型合約,以提供可在不同情境下運作的可擴展基礎設施。 | 仰賴一或多個營運者來儲存資料並根據要求提供此資料。 | -| 透過將計算和存儲遷移到鏈外來減少以太坊主網的載荷。 | 提款可被延遲數日以容許挑戰。 對於同質化資產,流動性提供者可以緩解這種情況,但存在相關的資本成本。 | -| | 如果太多使用者同時嘗試退出,以太坊主網可能會擁塞。 | - -## Plasma 與二層網路擴張協定 {#plasma-vs-layer-2} - -雖然 Plasma 曾被視爲對以太坊有用的擴張解決方案,但後來被棄用,由[二層網路 (L2) 擴張協定](/layer-2/)所取代。 二層網路擴張解決方案解決了 Plasma 的幾個問題: - -### 效率 {#efficiency} - -[零知識卷軸](/developers/docs/scaling/zk-rollups)為在鏈外處理的每批交易的有效性產生加密證明。 這可防止使用者(和營運者)推進無效的狀態轉換,因而不再需要挑戰期和退出游戲。 這也意味著使用者不必透過定期監視鏈來保護其資金安全。 - -### 支援智慧型合約 {#support-for-smart-contracts} - -Plasma 框架的另一個問題是[無法支援以太坊智慧型合約的執行](https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598/4)。 因此,Plasma 的大多數實作主要是用於簡單的支付或 ERC-20 代幣交換。 - -相反,樂觀卷軸與[以太坊虛擬機](/developers/docs/evm/)相容,並且可以執行以太坊原生[智慧型合約](/developers/docs/smart-contracts/),使其成爲擴張[去中心化應用程式](/developers/docs/dapps/)的實用且_安全_的解決方案。 類似地,[建立以太坊虛擬機的零知識實作 (zkEVM)](https://ethresear.ch/t/a-zk-evm-specification/11549) 正在計劃中,使零知識卷軸能夠處理任意邏輯並執行智慧型合約。 - -### 資料不可用 {#data-unavailability} - -如前所述,Plasma 存在資料可用性問題。 如果惡意營運者在 Plasma 鏈上推進了無效轉換,使用者將無法挑戰它,因爲營運者可以扣留建立詐欺證明所需的資料。 卷軸迫使營運者在以太坊上發佈交易資料,允許任何人驗證鏈的狀態並在必要時建立詐欺證明,從而解決了該問題。 - -### 大規模退出問題 {#mass-exit-problem} - -零知識卷軸和樂觀卷軸都以不同方式解決了 Plasma 的大規模退出問題。 例如,零知識卷軸依賴加密機制來確保營運者在任何情況下都無法竊取使用者的資金。 - -類似地,樂觀卷軸對提款施加了延遲期,在延遲期内任何人都可以發起挑戰並阻止惡意的提款請求。 儘管這與 Plasma 類似,但區別在於,驗證者可以存取建立詐欺證明所需的資料。 因此,卷軸使用者無需瘋狂地「爭先恐後」般遷移到以太坊主網。 - -## Plasma 與側鏈和分片有何不同? {#plasma-sidechains-sharding} - -Plasma、側鏈和分片技術有一定的相似,因爲它們都以某種方式連線到以太坊主網。 然而,連線到以太坊主網的級別和强度有所不同,影響這些擴張解決方案的安全屬性。 - -### Plasma 與側鏈 {#plasma-vs-sidechains} - -[側鏈](/developers/docs/scaling/sidechains/)是一種獨立運行的區塊鏈,透過雙向跨鏈橋連線到以太坊主網。 [跨鏈橋](/bridges/)讓使用者可以在兩條區塊鏈之間交換代幣,以便在側鏈進行交易,降低了以太坊主網上的擁塞並增加了可擴展性。 側鏈使用獨立的共識機制,並且它們通常比以太坊主網小得多。 因此,將資產橋接到這些區塊鏈會增加風險;由於側鏈模型中缺少從以太坊主網繼承的安全保證,在側鏈受到攻擊時,使用者會承擔資金損失的風險。 - -相反,Plasma 鏈的安全性來自主網。 這使其明顯比側鏈更安全。 側鏈和 Plasma 鏈都可以使用不同的共識協定。但區別是,Plasma 鏈在以太坊主網上發佈每個區塊的默克爾根。 區塊根是小段的資訊,可用於驗證在 Plasma 鏈上進行的相關交易的資訊。 如果 Plasma 鏈受到攻擊,使用者可以使用適當的證明來安全地將資金提取回主網。 - -### Plasma 與分片 {#plasma-vs-sharding} - -Plasma 鏈和分片鏈都會定期向以太坊主網發佈加密證明。 然而,它們的安全屬性有所不同。 - -分片鏈向主網提交「定序頭」,其中包含有關每個資料分片的詳細資訊。 主網上的節點驗證和執行資料分片的有效性,減少了無效分片轉換的可能性並防止網路上出現惡意活動。 - -Plasma 有所不同,因爲主網只接收最少量的子鏈狀態資訊。 這意味著主網無法有效驗證子鏈上進行的交易,降低了交易的安全性。 - -**請注意**,以太坊區塊鏈分片已經不再包含在開發藍圖中。 它已經被卷軸和 [Danksharding](/roadmap/danksharding) 擴張所取代。 - -### 使用 Plasma {#use-plasma} - -有多項專案提供 Plasma 實作,歡迎整合到你的去中心化應用程式: - -- [Polygon](https://polygon.technology/)(前身為 Matic 網路) - -## 延伸閱讀 {#further-reading} - -- [瞭解 Plasma](https://www.learnplasma.org/en/) -- [「共用安全性」的含義及其重要性概覽](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) -- [側鏈、Plasma 與分片](https://vitalik.eth.limo/general/2019/06/12/plasma_vs_sharding.html) -- [瞭解 Plasma,第一部分:基礎知識](https://www.theblockcrypto.com/amp/post/10793/understanding-plasma-part-1-the-basics) -- [Plasma 的生與死](https://medium.com/dragonfly-research/the-life-and-death-of-plasma-b72c6a59c5ad#) - -_知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源!_ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/sidechains/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/sidechains/index.md" deleted file mode 100644 index 711afd99424..00000000000 --- "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/sidechains/index.md" +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: 側鏈 -description: 介紹目前作為擴張解決方案供以太坊社群使用的側鏈。 -lang: zh-tw -sidebarDepth: 3 ---- - -側鏈是獨立於以太坊運行的獨立區塊鏈,並透過雙向跨鏈橋連線到以太坊主網。 側鏈可以有單獨的區塊參數和[共識演算法](/developers/docs/consensus-mechanisms/),通常是為了高效處理交易而設計。 然而,使用側鏈需要權衡,因為它們不會繼承以太坊的安全屬性。 與[二層網路擴張解決方案](/layer-2/)不同,側鏈不會將狀態變更和交易數據發佈回以太坊主網。 - -側鏈也犧牲了一些去中心化或安全性措施來實現高吞吐量([可擴展性三難困境](https://vitalik.eth.limo/general/2021/05/23/scaling.html))。 然而,正如其升級[願景聲明](/roadmap/vision/)中所述,以太坊致力於在不影響去中心化和安全性的情況下擴張。 - -## 側鏈的工作原理 {#how-do-sidechains-work} - -側鏈是獨立的區塊鏈,具有不同的歷史記錄、開發藍圖和設計考量。 雖然側鏈可能與以太坊有一些表面上的相似,但它有幾個獨特功能。 - -### 共識演算法 {#consensus-algorithms} - -讓側鏈獨一無二(即不同於以太坊)的特質之一是所使用的共識演算法。 側鏈不依賴以太坊達成共識,並可以選擇適合其需求的替代共識協議。 側鏈上使用的共識演算法的一些範例包括: - -- [權威證明](/developers/docs/consensus-mechanisms/poa/) -- [委託權益證明](https://en.bitcoin.it/wiki/Delegated_proof_of_stake) -- [拜占庭容錯](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained)。 - -跟以太坊一樣,側鏈也有驗證節點去驗證和處理交易、產生區塊並儲存區塊鏈狀態。 驗證者也負責維護整個網路的共識,並確保它不受惡意攻擊。 - -#### 區塊參數 {#block-parameters} - -以太坊對[出塊時間](/developers/docs/blocks/#block-time)(即產生新區塊所需時間)和[區塊大小](/developers/docs/blocks/#block-size)(即以燃料為計量單位,每個區塊包含的資料量)設定了限制。 相反地,側鏈通常會採用不同的參數,例如更快的出塊時間和更高的燃料限制,以達到高吞吐量、快速交易和低費用。 - -雖然這樣做有一些好處,但對網路去中心化和安全性卻有重大影響。 高速的出塊時間和大的區塊大小這些區塊參數,增加了運行全節點的難度,讓一些「超級節點」負責保護區塊鏈的安全。 在這種情況下,驗證者串通或惡意接管鏈的可能性就會增加。 - -若要在不損害去中心化的情況下擴大區塊鏈的規模,就必須讓人人都能運行節點,而不一定是擁有專門硬體的人。 這就是我們一直在努力確保每個人都能在以太坊網路上[運行全節點](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node)的原因。 - -### 以太坊虛擬機 (EVM) 相容性 {#evm-compatibility} - -一些側鏈與以太坊虛擬機相容,並且能夠執行為[以太坊虛擬機 (EVM)](/developers/docs/evm/) 開發的合約。 相容於以太坊虛擬機的側鏈支援以 [Solidity 編寫](/developers/docs/smart-contracts/languages/)的智慧型合約,也支援其他以太坊虛擬機智慧型合約語言,這意味著為以太坊主網編寫的智慧型合約也將在相容於以太坊虛擬機的側鏈上有效。 - -這意味著若你想在側鏈上使用你的[去中心化應用程式](/developers/docs/dapps/),只需將你的[智慧型合約](/developers/docs/smart-contracts/)部署到該側鏈即可。 側鏈的外觀、給人的感覺和行為與主鏈相似 — 你可以用 Solidity 編寫合約,並透過側鏈遠端程序呼叫與側鏈互動。 - -由於側鏈和以太坊虛擬機相容,因而被視為對以太坊原生去中心化應用程式有效的[擴張解決方案](/developers/docs/scaling/)。 去中心化應用程式部署到側鏈後,使用者可以盡享更低的燃料費用和更快的交易速度,尤其是在主網擁塞的情況下。 - -不過,如前所述,使用側鏈涉及重大取捨。 每條側鏈負責其安全性,不會繼承以太坊的安全屬性。 這會增加惡意行為的可能性,影響你的使用者或讓他們的資金面臨風險。 - -### 資產轉移 {#asset-movement} - -爲了使一條獨立區塊鏈成爲以太坊主網的側鏈,區塊鏈需要支持在它與以太坊主網之間傳送資產。 這種與以太坊的互操作性是使用區塊鏈跨鏈橋實現的。 [跨鏈橋](/bridges/)使用部署在以太坊主網和側鏈上的智慧型合約控制兩者之間的資金橋接。 - -儘管跨鏈橋可以幫助使用者在以太坊和側鏈之間傳送資金,但實體資產不會在兩條鏈之間移動。 相反,通常采用與鑄造和銷毀相關的機制跨鏈傳送價值。 更多關於[跨鏈橋如何運作](/developers/docs/bridges/#how-do-bridges-work)的資訊。 - -## 側鏈的優勢和劣勢 {#pros-and-cons-of-sidechains} - -| 優勢 | 劣勢 | -| ------------------------------------------ | ------------------------------------ | -| 支撐側鏈的技術是成熟的,並得益於廣泛的研究和設計的改進。 | 側鏈犧牲了一定程度的去中心化和去信任以換取可擴展性。 | -| 側臉支援通用計算並提供以太坊虛擬機相容性(它們能夠運行以太坊原生去中心化應用程式)。 | 側鏈使用單獨的共識機制,並且不從以太坊的安全保證中獲益。 | -| 側鏈使用不同的共識模型,為使用者高效處理交易並降低交易費。 | 側鏈需要更高的信任假設(例如,惡意側鏈驗證者達到一定人數可以進行欺詐)。 | -| 與以太坊虛擬機相容的側鏈讓去中心化應用程式可以擴展其生態系統。 | | - -### 使用側鏈 {#use-sidechains} - -有多項專案提供側鏈實作,歡迎整合到你的去中心化應用程式: - -- [Polygon PoS](https://polygon.technology/solutions/polygon-pos) -- [Skale](https://skale.network/) -- [Gnosis Chain(前身為 xDai)](https://www.gnosischain.com/) -- [Loom Network](https://loomx.io/) -- [Metis Andromeda](https://www.metis.io/) - -## 衍生閱讀 {#further-reading} - -- [透過側鏈擴張以太坊去中心化應用程式](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _2018 年 2 月 8 日 - Georgios Konstantopoulos_ - -_認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!_ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/state-channels/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/state-channels/index.md" deleted file mode 100644 index abc7c29a79b..00000000000 --- "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/state-channels/index.md" +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: 狀態通道 -description: 介紹狀態通道和支付通道,作為以太坊社群目前使用的擴展解決方案。 -lang: zh-tw -sidebarDepth: 3 ---- - -狀態通道允許參與者安全地進行鏈外交易,同時將與以太坊主網的互動保持在最低水平。 通道對等方可進行任意數量的鏈外交易,同時只需提交兩個鏈上交易來開啟和關閉通道。 這允許極高的交易吞吐量並降低使用者的成本。 - -## {#how-do-sidechains-work} - -以太坊等公共區塊鏈因其分散式架構,即鏈上交易必須由所有節點執行,而面臨可擴展性挑戰。 節點必須能夠使用普通硬體來處理區塊中的交易量,為了保持網路去中心化而限制了交易吞吐量。 - -### {#consensus-algorithms} - -通道是簡單的點對點協定,它讓雙方可以在彼此之間進行多筆交易,然後只將最終結果發佈到區塊鏈。 通道使用密碼學證明產生的摘要資料確實是一組有效中間交易的結果。 [「多簽」](/developers/docs/smart-contracts/#multisig)智慧型合約確保交易由正確的各方簽署。 - -- []() -- []() -- - -透過通道,狀態變更由相關各方執行和驗證,最大限度地減少了以太坊執行層上的計算。 這減少了以太坊的擁堵並提高了使用者的交易處理速度。 - -#### {#block-parameters} - -每個通道均由在以太坊上執行的[多簽智慧型合約](/developers/docs/smart-contracts/#multisig)管理。 要開啟通道,參與者在鏈上部署通道合約並向其中存入資金。 - -若要關閉通道,參與者會在鏈上提交最後商定的通道狀態。 之後,智慧型合約會根據每位參與者在通道最終狀態的餘額來分配鎖定的資金。 - -對於一些預先定義的參與者希望以高頻率進行交易而不產生可見開銷的情況,點對點通道特別適用。 區塊鏈通道分為兩類:**支付通道**和**狀態通道**。 - -### {#evm-compatibility} - -將支付通道描述成由兩個使用者共同維護的「雙向帳本」最為恰當。 帳本的初始餘額是通道開放階段鎖定到鏈上合約的存款總和。 - -帳本餘額的更新(即支付通道的狀態)需要通道中所有方批准。 通道更新在所有通道參與者簽署后被視爲最終確定,這和以太坊上的交易非常相似。 - -支付通道是最早的擴張解決方案之一,用於最大限度減少因簡單的使用者互動帶來的高成本鏈上活動(例如,以太幣傳送、原子交換、小額支付)。 通道參與者彼此之間可以進行不限數額的即時、無費用交易,只要他們傳送的净總和不超過存入的代幣。 - -除了支援鏈外支付以外,支付通道尚未被證明可用於處理通用狀態轉換邏輯。 建立狀態通道是爲了解決該問題,並使通道可用於擴張通用計算。 - -### {#asset-movement} - -狀態通道與支付通道仍有許多共同點。 例如,當使用者透過交換加密簽名的訊息(交易)進行互動時,其他通道參與者也必須簽署訊息。 如果提議的狀態更新沒有獲得所有參與者的簽名,則被認爲無效。 - -## {#pros-and-cons-of-sidechains} - -| | | -| | | -| | | -| | | -| | | -| | | - -### {#use-sidechains} - -- []() -- []() -- []() -- []() -- []() - -## {#further-reading} - -- - -_ _ diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/validium/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/validium/index.md" deleted file mode 100644 index acf85470894..00000000000 --- "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/validium/index.md" +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Validium -description: 介紹目前作為擴張解決方案供以太坊社群使用的 Validium。 -lang: zh-tw -sidebarDepth: 3 ---- - -Validium 是一種[擴張解決方案](/developers/docs/scaling/),使用如[零知識卷軸](/developers/docs/scaling/zk-rollups/)之類的有效性證明來強制執行交易的完整性,但它不在以太坊主網上儲存交易資料。 雖然鏈外資料可用性會帶來取捨,但卻能大幅提升可擴展性(Validium [每秒](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)可處理 [~9,000 個交易,甚至更多](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263))。 - -## 前置要求 {#prerequisites} - -你應該已經在我們的頁面上閲讀並理解有關[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2)的内容。 - -## 什麼是 Validium? {#what-is-validium} - -Validium 是使用鏈外資料可用性和計算的擴張解決方案,旨在透過在以太坊主網外處理交易來提高吞吐量。 與零知識卷軸 (ZK-rollup) 一樣,Validium 發佈[零知識證明](/glossary/#zk-proof)以在以太坊上驗證鏈外交易。 這能夠防止無效的狀態轉換並增强 Validium 鏈的安全保證。 - -這些「有效性證明」可以是 ZK-SNARK(零知識簡潔非互動式知識論證)或 ZK-STARK(零知識可擴展透明知識論證)兩種形式。 更多有關[零知識證明](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/)的資訊。 - -屬於 Validium 使用者的資金由以太坊上的智慧型合約控制。 Validium 與零知識卷軸很像,能夠提供幾乎即時的提款;在主網上驗證提款請求的有效性證明后,使用者可以透過提供[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/)來提取資金。 默克爾證明驗證使用者的提款交易是否包含在經過驗證的交易批次中,這讓鏈上合約可以處理提款。 - -然而,Validium 使用者的資金可能會被凍結,並受到提款限制。 如果 Validium 鏈上資料可用性管理器拒絕向使用者提供鏈外狀態資料,就會發生這種情況。 如果無法存取交易資料,使用者將無法計算證明資金所有權和執行提款所需的默克爾證明。 - -這是 Validium 和零知識卷軸之間的主要區別,即它們在資料可用性範圍上的位置不同。 兩種解決方案處理資料存儲的方式不同,這會影響安全性和去信任。 - -## Validium 如何與以太坊互動? {#how-do-validiums-interact-with-ethereum} - -Validium 是建置在現有以太坊鏈上的擴張協定。 儘管它在鏈外執行交易,但 Validium 鏈由部署在主網上的一系列智慧型合約管理,包括: - -1. **驗證者合約**:驗證者合約驗證 Validium 營運者在進行狀態更新時所提交證明的有效性。 該合約需要證明鏈外交易正確性的有效性證明,和驗證鏈外交易資料存在的資料可用性證明。 - -2. **主合約**:主合約儲存區塊生產者提交的狀態承諾(默克爾根),並在有效性證明完成鏈上驗證后更新 Validium 的狀態。 該合約還處理 Validium 鏈上的存款和提款。 - -Validium 還依賴於以太坊主鏈來獲得: - -### 結算 {#settlement} - -在 Validium 上執行的交易無法完全確認,直至父母鏈驗證其有效性。 所有在 Validium 上進行的業務最終都必須在主網上結算。 以太坊區塊鏈還為 Validium 使用者提供了「結算保證」,這意味鏈外交易一旦提交到鏈上,就無法逆轉或改變。 - -### 安全性 {#security} - -充當結算層的以太坊也保證 Validium 上狀態轉換的有效性。 在 Validium 鏈上執行的鏈外交易透過以太坊基礎層上的智慧型合約進行驗證。 - -如果鏈上驗證者合約認爲證明無效,交易就會被拒絕。 這意味著營運者在更新 Validium 的狀態之前,必須滿足以太坊協定強制執行的有效性條件。 - -## Validium 如何運作? {#how-does-validium-work} - -### 交易 {#transactions} - -使用者向營運者提交交易 - 營運者是負責在 Validium 鏈上執行交易的節點。 一些 Validium 可能使用單個營運者來執行鏈,或依賴[權益證明 (PoS)](/developers/docs/consensus-mechanisms/pos/) 機制來輪換營運者。 - -營運者將交易彙總到一個批次中,並將其發送到證明電路進行證明。 證明電路接受交易批次(以及其他有關資料)作爲輸入,並輸出驗證作業正確執行的有效性證明。 - -### 狀態承諾 {#state-commitments} - -Validium 的狀態被雜處理湊為默克爾樹,其根儲存在以太坊的主合約中。 默克爾根,又稱爲狀態根,充當對 Validium 上當前帳戶狀態和餘額的加密承諾。 - -爲了執行狀態更新,營運者必須(在執行交易后)計算一個新的狀態根並將其提交給鏈上合約。 如果有效性證明得到驗證,提議的狀態就會被接受,Validium 將切換到新的狀態根。 - -### 存款和提款 {#deposits-and-withdrawals} - -使用者透過在鏈上合約中存入以太幣(或任何與 ERC 兼容的代幣),將資金從以太坊轉移到 Validium。 該合約將存款事件轉發到鏈外 Validium,並向使用者在 Validium 上的地址存入與其存款相同的金額。 營運者還會將該存款交易包含在新批次中。 - -爲了將資金轉移回主網,Validium 使用者需要發起提款交易並提交到營運者,營運者將驗證提款請求並將其包含在批次中。 使用者在 Validium 鏈上的資產也會被銷毀,才能退出系統。 一旦與該批次相關的有效性證明得到驗證,使用者就可以呼叫主合約來提取剩餘的初始存款。 - -作爲一種抗審查機制,Validium 協定允許使用者直接從 Validium 合約提款,而無需透過營運者。 在這種情況下,使用者需要向驗證者合約提供默克爾證明,展示帳戶包含在狀態根内。 如果證明被接受,使用者就能夠呼叫主合約的提款函式,從 Validium 中提取其資金。 - -### 批次提交 {#batch-submission} - -在執行一批交易后,營運者向驗證者合約提交相關的有效性證明,並向主合約提議新的狀態根。 如果證明有效,主合約就會更新 Validium 的狀態並最終確定批次中交易的結果。 - -與零知識卷軸不同,Validium 上的區塊生產者不需要發佈交易批次的交易資料(僅發佈區塊頭)。 這使 Validium 成爲一個純鏈外擴張協定,而不是在以太坊主鏈上發佈狀態資料(如 `calldata`)的「混合」擴張協定(即[二層網路](/layer-2/))。 - -### 資料可用性 {#data-availability} - -如前所述,Validium 利用一個鏈外資料可用性模型,營運者會將所有交易資料儲存在其中,而不是以太坊主網。 Validium 的鏈上資料足跡較低,這提升了可擴展性(吞吐量不受以太坊的資料處理能力限制),並降低了使用者費用(發佈 `calldata` 的成本降低)。 - -然而,鏈外資料可用性導致了一個問題:建立或驗證默克爾證明所需的資料可能不可用。 這意味著,如果營運者采取惡意行爲,使用者就可能無法從鏈上合約中提取資金。 - -各種 Validium 解決方案試圖透過將狀態資料的儲存去中心化來解決此問題。 這涉及迫使區塊生產者將底層資料發送至「資料可用性管理者」,由他們負責儲存鏈外資料並在使用者請求時提供給使用者。 - -Validium 中的資料可用性管理者透過簽署每個 Validium 批次,來證明鏈外交易資料的可用性。 這些簽名構成了一種「可用性證明」,鏈上驗證者合約會在批准狀態更新之前進行檢查。 - -Validium 的資料可用性管理方法不同。 一些依賴可信方儲存狀態資料,另一些則使用隨機指定的驗證者完成此工作。 - -#### 資料可用性委員會 (DAC) {#data-availability-committee} - -爲了保證鏈外資料的可用性,一些 Validium 解決方案指定了一組可信實體(統稱爲資料可用性委員會 (DAC))來儲存狀態複本並提供資料可用性證明。 由於成員較少,資料可用性委員會更容易實作,並且需要的協調更少。 - -然而,使用者必須信任資料可用性委員會,以便在需要時獲得資料(例如,用於產生默克爾證明)。 資料可用性委員會的成員有可能[被惡意行爲者損害](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view),然後後者會扣留鏈外資料。 - -[更多有關 Validium 中資料可用性委員會的資訊](https://medium.com/starkware/data-availability-e5564c416424)。 - -#### 有保證金的資料可用性 {#bonded-data-availability} - -其他 Validium 需要負責儲存離綫資料的參與者,在承擔其角色之前在智慧型合約中質押(即鎖定)代幣。 該質押充當一種「保證金」,保證資料可用性管理者之間誠實行事並減少信任假設。 如果這些參與者未能證明資料可用性,該保證金就會被罰沒。 - -在有保證金的資料可用性方案中,任何人在提供需要的質押后,都可以被指定保存鏈外資料。 這擴展了合格資料可用性管理者池,減少了影響資料可用性委員會 (DAC) 的中心化。 更重要的是,這種方法依賴於加密經濟激勵措施來防止惡意活動,這相比指定可信方在 Validium 中保護離綫資料要安全很多。 - -[更多有關 Validium 中有保證金的資料可用性的資訊](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf)。 - -## Volition 和 Validium {#volitions-and-validium} - -Validium 提供許多好處,但也會有取捨(最明顯的就是資料可用性)。 但是,與許多擴張解決方案一樣,Validium 適合特定的用例 - 這就是為何建立 Volition 的原因。 - -Volition 結合了零知識卷軸和 Validium 鏈,它允許使用者在兩種擴張解決方案之間切換。 使用 Volition,使用者能夠利用 Validium 的鏈外資料可用性進行某些交易,同時可以在需要時自由地切換到鏈上資料可用性解決方案(零知識卷軸)。 這本質上讓使用者能夠根據其獨特情況自由地進行權衡。 - -去中心化交易所 (DEX) 可能偏好使用 Validium 的可擴展和隱私基礎設施進行高價值交易。 它還可以為需要零知識卷軸的更高安全性保證和去信任的使用者使用零知識卷軸。 - -## Validium 和以太坊虛擬機的相容性 {#validiums-and-evm-compatibility} - -與零知識卷軸一樣,Validium 最適合簡單的應用程式,例如代幣交換和支付。 由於在零知識證明電路中證明[以太坊虛擬機](/developers/docs/evm/)指示的開銷很大,因此很難實作在 Validium 之間為通用計算和智慧型合約執行提供支援。 - -一些 Validium 專案嘗試透過編譯與以太坊虛擬機兼容的語言(例如 Solidity、Viper),來建立為高效證明而最佳化的自訂位元組碼,從而回避這個問題。 這種方法的一個缺點是,零知識證明友好的新虛擬機可能不支援重要的以太坊虛擬機作業碼,並且開發者必須直接使用高階語言進行編寫才能獲得最佳體驗。 這導致了更多問題:它迫使開發者使用全新的開發堆棧構建去中心化應用程式,並破壞了與目前以太坊基礎設施的相容性。 - -然而,一些團隊正在嘗試針對零知識證明電路最佳化現有的以太坊虛擬機作業碼。 這包括對零知識以太坊虛擬機 (zkEVM) 的開發,這是一種與以太坊虛擬機兼容的虛擬機,可以生成驗證程式是否正確執行的證明。 使用零知識以太坊虛擬機,Validium 鏈可以在鏈外執行智慧型合約並提交有效性證明,以在以太坊上驗證鏈外計算(無需重新執行合約)。 - -[更多有關零知識以太坊虛擬機的資訊](https://www.alchemy.com/overviews/zkevm)。 - -## Validium 如何擴張以太坊? {#scaling-ethereum-with-validiums} - -### 1. 鏈外資料存儲 {#off-chain-data-storage} - -二層網路擴張項目,例如樂觀卷軸和零知識卷軸,透過將部分交易資料發佈到一層網路,犧牲了純鏈外擴容協定(如 [Plasma](/developers/docs/scaling/plasma/))的無限可擴展性來換取安全性。 然而,這意味著卷軸的可擴展性屬性受到以太坊主網上資料帶寬的限制(因此提出[資料分片](/roadmap/danksharding/)以提高以太坊的資料存儲容量)。 - -Validium 透過將所有交易資料保存在鏈外,並在轉送狀態更新到以太坊主鏈時僅發佈狀態承諾(及有效性證明),實現了可擴展性。 然而,有效性證明的存在為 Validium 提供了比其他純鏈外擴張解決方案(包括 Plasma 和[側鏈](/developers/docs/scaling/sidechains/))更高的安全保證。 透過減少以太坊在驗證鏈外交易之前必須處理的資料量,Validium 設計極大地提升了主網上的吞吐量。 - -### 2. 遞迴證明 {#recursive-proofs} - -遞迴證明是一種有效性證明,可驗證其他證明的有效性。 這些「證明的證明」透過以遞迴方式彙總多個證明,直到建立一個可以驗證所有先前證明的最終證明。 遞迴證明透過增加每個有效性證明可以驗證的交易數量來提升區塊鏈處理速度。 - -通常,Validium 營運者提交到以太坊來驗證的每個有效性證明都會驗證單個區塊的完整性。 而一個遞迴證明可用於同時確認幾個 Validium 區塊的有效性 - 這是有可能的,因爲證明電路能夠以遞迴方式將幾個區塊證明彙總為一個最終證明。 如果鏈上驗證者合約接受遞迴證明,則所有底層區塊都會立即被最終確定。 - -## Validium 的優勢和劣勢 {#pros-and-cons-of-validium} - -| 優勢 | 劣勢 | -| ------------------------------------ | ------------------------------------------------------- | -| 有效性證明强制驗證鏈外交易的完整性,並防止營運者最終確定無效的狀態更新。 | 生成有效性證明需要使用特定硬體,這會導致中心化風險。 | -| 提高使用者的資本效率(將資金提取回以太坊時不會出現延遲) | 對通用計算/智慧型合約的支持有限;開發需要使用專業化語言。 | -| 對高價值應用程式中的詐欺證明型系統所面臨的某些經濟攻擊有高抵抗性。 | 生成零知識證明需要强大的算力;對於低吞吐量的應用程式不具有成本效益。 | -| 透過不將回呼資料發佈到以太坊主網來降低使用者的燃料費用。 | 較慢的主觀最終性時間(生成零知識證明需要 10 - 30 分鐘),但完全最終性會快一些,因爲沒有爭議時間延遲。 | -| 這適用於特定用例,例如優先考慮交易隱私和可擴展性的交易或區塊鏈游戲。 | 可能會阻止使用者提取資金,因爲生成所有權的默克爾證明需要鏈外資料始終可用。 | -| 鏈外資料可用性提升了吞吐量並增加了可擴展性。 | 安全模型依賴於信任假設和加密經濟激勵措施,與完全依賴加密安全機制的零知識卷軸不同。 | - -### 使用 Validium/Volition {#use-validium-and-volitions} - -有多項專案提供 Validium 和 Volition 實作,歡迎整合到你的去中心化應用程式: - -**StarkWare StarkEx** - _StarkEx 是基於有效性證明的以太坊二層網路 (L2) 可擴展性解決方案。 它能夠在零知識卷軸或 Validium 資料可用性模式下運作。_ - -- [文件](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes#validium) -- [網站](https://starkware.co/starkex/) - -**Matter Labs zkPorter**- _zkPorter 是一個二層網路擴張協定,它使用一種結合了零知識卷軸與分片理念的混合方法來處理資料可用性。 它可支援任意數量的分片,每個分片都有自己的資料可用性原則。_ - -- [部落格](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) -- [文件](https://docs.zksync.io/zk-stack/concepts/data-availability) -- [網站](https://zksync.io/) - -## 衍生閱讀 {#further-reading} - -- [Validium 及二層網路二合一 — 第 99 期](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) -- [零知識卷軸與 Validium 的比較](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) -- [Volition 和新興資料可用性範圍](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) -- [卷軸、Validium 和 Volition:瞭解最熱門的以太坊擴張解決方案](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) diff --git "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/zk-rollups/index.md" "b/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/zk-rollups/index.md" deleted file mode 100644 index 1799f2f5b78..00000000000 --- "a/public/content/translations/zh-tw/24) Advanced Docs \342\200\223 Scaling/developers/docs/scaling/zk-rollups/index.md" +++ /dev/null @@ -1,259 +0,0 @@ ---- -title: 零知識證明卷軸 -description: 零知識證明卷軸介紹 — 一個以太坊社群所使用的擴張解決方案。 -lang: zh-tw ---- - -零知識證明卷軸 (ZK-rollup) 是二層網路的[擴張解決方案](/developers/docs/scaling/),透過將計算和狀態儲存遷移至鏈外來提高以太坊主網上的吞吐量。 零知識證明卷軸可以一次批量處理數千個交易,然後僅將一些最低限度的摘要資料發佈到主網。 此摘要資料定義了以太坊狀態應進行的變更以及一些確保這些更變正確的密碼學證明。 - -## 前置要求 {#prerequisites} - -你應該已經在我們的頁面上閲讀並理解有關[以太坊擴張](/developers/docs/scaling/)和[二層網路](/layer-2)的内容。 - -## 什麼是零知識證明卷軸? {#what-are-zk-rollups} - -**零知識證明卷軸 (ZK-rollup)** 將交易批量打包(或「捲起來」),然後在鏈外執行。 鏈外計算減少了必須發佈到區塊鏈的資料量。 零知識證明卷軸提交代表批次中所有交易所需變更的匯總,而不是單獨發送每一筆交易。 它們還產生[有效性證明](/glossary/#validity-proof)來證明其變更的正確性。 - -零知識證明卷軸的狀態由部署在以太坊網路上的智慧型合約維護。 爲了更新該狀態,零知識證明卷軸必須提交有效性證明來進行驗證。 如上所述,有效性證明是一種加密保證,證明卷軸提交的狀態變更確實是執行給定批量交易的結果。 這意味著零知識證明卷軸只需要提供有效性證明就可以在以太坊上最終確定交易,而無需像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/)一樣將所有交易資料發佈到鏈上。 - -將資金從零知識證明卷軸轉移到以太坊沒有延遲,因爲一旦零知識證明卷軸合約驗證有效性證明,退出交易就會被執行。 相反,從樂觀卷軸提取資金則可能會有延遲,以便任何人都可以使用[詐欺證明](/glossary/#fraud-proof)來挑戰退出交易。 - -零知識證明卷軸將交易作爲 `calldata` 寫入以太坊。 對智慧型合約函式的外部調用中包含的資料就存儲在 `calldata` 中。 `calldata` 中的資訊被發佈到區塊鏈上,讓任何人都能夠獨立重建卷軸的狀態。 零知識證明卷軸使用壓縮技術來減少交易資料 — 例如,由索引而非地址來代表帳戶,這將節省 28 個位元組的資料。 鏈上資料發佈是卷軸的一大成本,因此資料壓縮能夠降低使用者的費用。 - -## 零知識證明卷軸如何與以太坊互動? {#zk-rollups-and-ethereum} - -零知識證明卷軸鏈是一種在以太坊區塊鏈之上運作的鏈外協定,並由鏈上的以太坊智慧型合約管理。 零知識證明卷軸在主網之外執行交易,但定期將鏈外交易批次提交到鏈上卷軸合約。 這種交易記錄是不可變的(與以太坊非常像),並且形成了零知識證明卷軸鏈, - -零知識證明卷軸的核心架構由以下部分構成: - -1. **鏈上合約**:如前所述,零知識證明卷軸協定由在以太坊上執行的智慧型合約控制。 這包括存儲卷軸區塊、追蹤存款,以及監控狀態更新的主要合約。 另一個鏈上合約(驗證者合約)驗證區塊生產者提交的零知識證明。 因此,以太坊充當零知識證明卷軸的基礎層或「一層網路」。 - -2. **鏈外虛擬機 (VM)**:儘管零知識證明卷軸活躍於以太坊上,但交易執行和狀態存儲發生在獨立於[以太坊虛擬機](/developers/docs/evm/)的單獨虛擬機。 這種鏈外虛擬機是零知識證明卷軸交易的執行環境,並充當零知識證明卷軸協定的次層或「二層網路」。 在以太坊主網上驗證的有效性證明可保證鏈外虛擬機中狀態轉換的正確性。 - -零知識證明卷軸是「混合擴張解決方案」— 獨立運作但從以太坊獲得安全性的鏈外協定。 具體來講,以太坊網路在零知識證明卷軸上執行狀態有效性更新,並保證每次更新卷軸狀態時的背景資料可用性。 因此,零知識證明卷軸比純鏈外擴張解決方案安全很多,例如自行負責安全屬性的[側鏈](/developers/docs/scaling/sidechains/),或同樣使用有效性證明在以太坊上驗證交易,但將交易資料存儲在其他地方的 [Validium](/developers/docs/scaling/validium/)。 - -零知識證明卷軸依賴以太坊協定來獲得: - -### 資料可用性 {#data-availability} - -零知識證明卷軸將鏈外處理的每筆交易的狀態資料發佈到以太坊。 透過這些資料,個人或企業能夠復現卷軸的狀態並自行驗證鏈。 以太坊將這些資料作爲 `calldata` 提供給所有網路參與者。 - -零知識證明卷軸不需要在鏈上發佈很多交易資料,因爲有效性證明已經驗證了狀態轉換的真實性。 盡管如此,在鏈上儲存資料仍然重要,因爲這樣便可以對二層網路鏈的狀態進行無需許可的獨立驗證,從而使任何人都能提交批次交易,防止惡意營運者審查或凍結鏈。 - -使用者需要在鏈上與卷軸互動。 如果無法存取狀態資料,使用者將無法查詢帳戶餘額或發起依賴狀態資訊的交易(如提款)。 - -### 交易最終性 {#transaction-finality} - -以太坊充當零知識證明卷軸的結算層:只有當一層網路合約接受有效性證明時,二層網路交易才會最終確定。 這消除了惡意營運者破壞鏈的風險(例如,竊取卷軸資金),因爲每筆交易都必須在主網上得到批准。 此外,以太坊還保證使用者作業一旦在一層網路上最終確定,就無法被撤銷。 - -### 審查阻力 {#censorship-resistance} - -大多數零知識證明卷軸使用「超級節點」(營運者)來執行交易、生產批次,以及提交區塊到一層網路。 儘管這確保了效率,但也增加了審查風險:惡意零知識證明卷軸營運者可以透過拒絕將使用者的交易添加到批次交易來審查使用者。 - -作爲一項安全措施,零知識證明卷軸允許使用者在認爲自己受到營運者審查時,直接向主網上的卷軸合約提交交易。 這讓使用者能夠强制從零知識證明卷軸退出到以太坊,而無需依賴營運者的許可。 - -## 零知識證明卷軸如何運作? {#how-do-zk-rollups-work} - -### 交易 {#transactions} - -零知識證明卷軸中的使用者簽署交易,提交給二層網路營運者進行處理並添加到下一個批次中。 在某些情況下,營運者是一個被稱爲排序者的中心化實體,它會執行交易,將交易彙總到批次中,然後提交到一層網路。 該系統中的排序者是唯一被允許產生二層網路區塊並將卷軸交易新增到零知識證明卷軸合約的實體。 - -其他零知識證明卷軸可以透過使用一組[權益證明](/developers/docs/consensus-mechanisms/pos/)驗證者來輪換營運者的角色。 潛在的營運者將資金存入卷軸合約,每份質押的大小會影響質押者被選中產生下一批次卷軸的機會。 如果營運者實施惡意行爲,其質押會被罰沒,這會激勵其發佈有效的區塊。 - -#### 零知識證明卷軸如何在以太坊上發佈交易資料 {#how-zk-rollups-publish-transaction-data-on-ethereum} - -如前所述,交易資料作爲 `calldata` 被發佈到以太坊上。 `calldata` 是智慧型合約中的資料區域,用於將引數傳送給函式,其行爲類似於[記憶體](/developers/docs/smart-contracts/anatomy/#memory)。 儘管 `calldata` 不會存儲到以太坊的狀態中,但其作爲以太坊鏈[歷史日志](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs)的一部分一直存在於鏈上。 `calldata` 不會影響以太坊的狀態,這使其成爲一種在鏈上存儲資料的便宜方法。 - -`calldata` 關鍵字通常標識交易所呼叫的智慧型合約方法,並以任意位元組序列的形式保存對方法的輸入。 零知識證明卷軸使用 `calldata` 將壓縮的交易資料發佈到鏈上;卷軸營運者只需要透過呼叫卷軸合約中所需的函式來添加一個新批次,並將壓縮資料作爲函式引數進行傳送。 這有助於降低使用者的成本,因爲卷軸費用的很大一部分用於在鏈上儲存交易資料。 - -### 狀態承諾 {#state-commitments} - -零知識證明卷軸的狀態包括二層網路帳戶和餘額,用[默克爾樹](/whitepaper/#merkle-trees)表示。 默克爾樹根(默克爾根)的加密雜湊儲存在鏈上合約中,這使卷軸協定能夠追蹤零知識證明卷軸狀態的變化。 - -在執行一組新交易后,卷軸轉換到新狀態。 發起狀態轉換的營運者需要計算新的狀態根並提交到鏈上合約。 如果與批次相關的有效性證明經過驗證者合約的驗證,新的默克爾根將成爲零知識證明卷軸的規範狀態根。 - -除了計算狀態根以外,零知識證明卷軸營運者還會建立一個批次根 — 包含批次中所有交易的默克爾樹根。 當提交新批次時,卷軸合約會儲存批次根,讓使用者能夠證明交易(如提款請求)包含在批次中。 使用者必須提供交易詳情、批次根和顯示包含路徑的[默克爾證明](/developers/tutorials/merkle-proofs-for-offline-data-integrity/)。 - -### 有效性證明 {#validity-proofs} - -零知識證明卷軸營運者提交到一層網路合約的新狀態根是更新卷軸狀態的結果。 假設 Alice 向 Bob 發送了 10 枚代幣,營運者只需要將 Alice 的餘額減少 10,並將 Bob 的餘額增加 10。 然後營運者對更新后的帳戶資料進行雜湊處理,重建卷軸的默克爾樹,並將新的默克爾根提交到鏈上合約。 - -但是,在營運者證明新默克爾根是由卷軸狀態的正確更新產生之前,卷軸合約不會自動接受提議的狀態承諾。 零知識證明卷軸營運者透過生成有效性證明來做到這一點,有效性證明是一種簡潔的加密承諾,用於驗證批次交易的正確性。 - -有效性證明允許各方在不揭露聲明本身的情況下證明聲明的正確性,因此又被稱爲零知識證明。 零知識證明卷軸使用有效性證明確認鏈外狀態轉換的正確性,而無需在以太坊上重新執行交易。 這些證明可以是 [ZK-SNARK](https://arxiv.org/abs/2202.06877)(零知識簡潔非互動式知識論證)或 [ZK-STARK](https://eprint.iacr.org/2018/046)(零知識可擴展透明知識論證)兩種形式。 - -SNARK(簡潔非互動式知識論證)和 STARK(可擴展透明知識論證)都有助於證明零知識證明卷軸中鏈外計算的完整性,儘管每種證明類型都有不同的功能。 - -**ZK-SNARK(零知識簡潔非互動式知識論證)** - -爲了使 ZK-SNARK 協定正常運作,需要建立公共參考串 (CRS):公共參考串提供公共參數來證明和驗證有效性證明。 證明系統的安全性取決於公共參考串設定;如果用於建立公共參數的資訊落入惡意行爲者手中,他們或許能夠產生虛假的有效性證明。 - -一些零知識證明卷軸嘗試透過采用[多方計算儀式 (MPC)](https://zkproof.org/2021/06/30/setup-ceremonies/amp/) 來解決該問題,即由可信的個人為 ZK-SNARK 電路產生公共參數。 每一方都貢獻一些隨機性(稱為「有毒廢棄物」)來構建公共參考串,而且必須立即將其銷毀。 - -使用可信的設定,因爲這會提高公共參考串設定的安全性。 只要誠實的參與者銷毀其輸入,ZK-SNARK 系統的安全性就會得到保證。 這種方法仍然需要信任相關人員刪除他們采樣的隨機性,並且不會破壞系統的安全保證。 - -抛開信任假設不談,ZK-SNARK 因其更小的證明大小和恆定時間驗證而受到歡迎。 由於執行零知識證明卷軸的大部分成本用於一層網路上的證明驗證,因此二層網路使用 ZK-SNARK 來產生可在主網上快速、便宜地進行驗證的證明。 - -**ZK-STARK** - -與 ZK-SNARK 相似,ZK-STARK 在不揭露輸入的情況下證明鏈外計算的有效性。 然而,ZK-STARK 因其具有可擴展性和透明性,被認爲是對 ZK-SNARK 的改進。 - -ZK-STARK 是「透明的」,因爲它能夠在沒有可信的公共參考串 (CRS) 設定的情況下正常運作。 相反,ZK-STARK 則依賴可公開驗證的隨機性來設定用於產生和驗證證明的參數。 - -ZK-STARK 還提供了更多可擴展性,因爲證明和驗證有效性證明所需的時間相對於底層計算的複雜性呈_准綫性_增長。 對於 ZK-SNARK,證明和驗證時間相對於底層計算的規模呈_綫性_擴張。 這意味著當涉及大資料集時,ZK-STARK 相比 ZK-SNARK 需要的證明和驗證時間更少,因而適用於大批量應用程式。 - -ZK-STARK 對於量子電腦也是安全的,而 ZK-SNARK 中使用的橢圓曲綫密碼學 (ECC) 則被廣范認爲容易受到量子電腦攻擊。 ZK-STARK 的缺點是其產生的證明大小更大,在以太坊上進行驗證時更加昂貴。 - -#### 有效性證明如何在零知識證明卷軸中運作? {#validity-proofs-in-zk-rollups} - -##### 證明產生 - -在接受交易之前,營運者會執行常規檢查。 這包括確認: - -- 發送者和接收者帳戶是狀態樹的一部分。 -- 發送者有足夠的資金處理交易。 -- 交易是正確的並與卷軸上的發送者公鑰相符。 -- 發送者的隨機數是正確的,等等。 - -一旦零知識證明卷軸節點擁有足夠的交易,就會將這些交易彙總成一個批次,並為證明電路編譯輸入,以編譯成簡潔的零知識證明。 這包括: - -- 包含批次中所有交易的默克爾樹根。 -- 用於證明交易包含在批次中的默克爾交易證明。 -- 交易中每個發送者-接收者對的默克爾證明,用於證明這些帳戶是卷軸狀態樹的一部分。 -- 一組中間狀態根,源於應用每筆交易的狀態更新(即減少發送者帳戶餘額並增加接收者帳戶餘額)後更新狀態根。 - -證明電路透過「遍歷」每筆交易並執行並營運者完成的相同檢查來計算有效性證明,然後處理交易。 首先,它使用提供的默克爾證明來驗證發送者的帳戶是現有狀態根的一部分。 然後,它會減少發送者的餘額,增加他們的隨機數,對更新的帳戶資料進行雜湊處理,並將其與默克爾證明合併以生成新的默克爾根。 - -該默克爾根反映了零知識證明卷軸狀態的唯一變化:發送者餘額和隨機數的變化。 這是有可能的,因爲用於證明帳戶存在的默克爾證明也用於產生新的狀態根。 - -證明電路對接收者帳戶執行相同的過程。 它會(使用默克爾證明)檢查接收者帳戶是否存在于中間狀態根下,增加它們的餘額,對帳戶資料重新進行雜湊處理,並將其與默克爾證明合併以產生新的狀態根。 - -該過程會對每一筆交易重複;每次「循環」都會透過更新發送者帳戶建立一個新的狀態根,隨後透過更新接收者帳戶建立一個新的狀態根。 如前所述,狀態根的每次更新都代表卷軸狀態樹一部分發生變更。 - -零知識證明電路迭代處理整個交易批次,並在執行最後一筆交易后對產生最終狀態根的更新序列進行驗證。 最後計算的默克爾根成爲零知識證明卷軸的最新規範狀態根。 - -##### 證明驗證 - -在證明電路驗證狀態更新的正確性后,二層網路營運者將計算后的有效性證明提交給一層網路上的驗證者合約。 合約的驗證電路驗證證明的有效性,並檢查證明中包含的公開輸入: - -- **前狀態根**:零知識證明卷軸的舊狀態根(即在交易批次被執行之前),反映二層網路鏈的上一個已知有效狀態。 - -- **后狀態根**:零知識證明卷軸的新狀態根(即交易批次執行之後),反映二層網路鏈的最新狀態。 后狀態根是在證明電路中應用狀態更新后產生的最終根。 - -- **批次根**:批次的默克爾根,透過對批次中的交易進行_默克爾化_和對樹根進行雜湊處理得到。 - -- **交易輸入**:與在已提交批次中執行的交易相關的資料。 - -如果證明滿足電路條件(即證明有效),則意味著存在一系列有效交易,這些交易將卷軸從先前狀態(由前狀態根提供加密指紋)轉換為新狀態(由后狀態根提供加密指紋)。 如果前狀態根與儲存在卷軸合約中的根相符,並且證明是有效的,则卷軸合約就會從證明中獲取后狀態根並更新其狀態樹以反映卷軸的狀態變化。 - -### 進入與退出 {#entries-and-exits} - -使用者透過向部署在一層網路鏈上的卷軸合約中存入代幣,來進入零知識證明卷軸。 該交易已排隊,因爲只有營運者能夠將交易提交到卷軸合約。 - -如果待處理的存款隊列開始填滿,零知識證明卷軸營運者將接受存款交易並將其提交到卷軸合約。 一旦使用者的資金進入卷軸,他們就可以開始交易,將交易發送到營運者進行處理。 使用者可以透過對其帳戶進行杂凑處理,將杂凑發送到卷軸合約,並提供針對當前狀態根進行驗證的默克爾證明,以此驗證他們在卷軸上的餘額。 - -從零知識證明卷軸提款到一層網路非常簡單。 使用者透過將其卷軸上的資產發送到指定帳戶進行銷毀,來發起退出交易。 如果營運者將該交易添加到下一個批次中,使用者就可以向鏈上合約提交提款請求。 該提款請求包含以下内容: - -- 默克爾證明,證明使用者的交易添加到交易批次中的銷毀帳戶。 - -- 交易資料 - -- 批次根 - -- 用於接收存入資金的一層網路地址 - -卷軸合約對交易資料進行杂凑處理,檢查批次根是否存在,並使用默克爾證明檢查交易杂凑是否為批次根的一部分。 之後,合約會執行退出交易並將資金發送到使用者選擇的一層網路上的地址。 - -## 零知識證明卷軸和以太坊虛擬機的相容性 {#zk-rollups-and-evm-compatibility} - -與樂觀卷軸不同,零知識證明卷軸不直接與[以太坊虛擬機 (EVM)](/developers/docs/evm/) 相容。 在電路中證明通用以太坊虛擬機計算比證明簡單計算(如先前描述的代幣傳送)更加困難,且更消耗資源。 - -然而,[零知識技術的進步](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now)重新點燃了將以太坊虛擬機計算包裝在零知識證明中的興趣。 這些努力旨在建立一個零知識以太坊虛擬機 (zkEVM) 實作,能夠高效地驗證程式執行的正確性。 零知識以太坊虛擬機重新建立在電路中進行證明/驗證的現有以太坊虛擬機作業碼,使其能夠執行智慧型合約。 - -與以太坊虛擬機相似,零知識以太坊虛擬機在對某些輸入執行計算之後,會在狀態之間轉換。 區別在於,零知識以太坊虛擬機還會建立零知識證明,以驗證程式執行中每一步的正確性。 有效性證明可以驗證涉及虛擬機狀態(記憶體、堆棧、存儲)和計算本身的作業的正確性(即作業是否調用了正確的作業碼並正確地執行它們?)。 - -與以太坊虛擬機相容的零知識證明卷軸的引入,有望幫助開發者利用零知識證明的可擴展性和安全保證。 更重要的是,與原生以太坊基礎設施的相容性意味著,開發者可以使用熟悉(且經過實地檢驗)的工具和語言構建零知識友好的去中心化應用程式。 - -## 零知識證明卷軸費用如何運作? {#how-do-zk-rollup-fees-work} - -使用者為零知識證明卷軸上的交易支付多少費用取決於燃料費,就像在以太坊主網上一樣。 然而,燃料費在二層網路上的運作方式不同,並且受以下費用影響: - -1. **狀態寫入**:寫入以太坊狀態(即,在以太坊區塊鏈上提交交易)有固定費用。 零知識證明卷軸透過進行批次交易並將固定費用分攤給多名使用者,降低了該費用。 - -2. **資料發佈**:零知識證明卷軸將每筆交易的狀態資料作爲 `calldata` 發佈到以太坊。 `calldata` 費用目前由 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 管控,它規定 `calldata` 的非零位元組和零位元組的費用分別爲 16 燃料和 4 燃料。 每筆交易支付的費用受到需要在鏈上爲其發佈的 `calldata` 數量所影響。 - -3. **二層網路營運者費用**:這是支付給卷軸營運者的金額,作爲處理交易所產生的計算費用的補償,很像以太坊主網上的[交易「優先費」(小費)](/developers/docs/gas/#how-are-gas-fees-calculated)。 - -4. **證明產生和驗證**:零知識證明卷軸營運者必須為交易批次生成有效性證明,這會消耗大量資源。 在主網上驗證零知識證明也會花費燃料(約 500,000 燃料)。 - -除了進行批次交易之外,零知識證明卷軸還透過壓縮交易資料來降低使用者的費用。 你可以[查看即時概覽](https://l2fees.info/)來瞭解使用以太坊零知識證明卷軸的費用。 - -## 零知識證明卷軸如何擴張以太坊? {#scaling-ethereum-with-zk-rollups} - -### 交易資料壓縮 {#transaction-data-compression} - -零知識證明卷軸透過在鏈外計算來提高以太坊基礎層的吞吐量,但真正提升擴展的手段是壓縮交易資料。 以太坊的[區塊大小](/developers/docs/blocks/#block-size)限制了每個區塊能夠保存的資料,進而限制了每個區塊處理的交易數量。 透過壓縮交易相關的資料,零知識證明卷軸顯著增加了每個區塊處理的交易數量。 - -零知識證明卷軸能夠比樂觀卷軸更好地壓縮交易資料,因爲它不必發佈驗證每筆交易所需的所有資料。 它只需要發佈在卷軸上重建帳戶最新狀態和餘額所需的最少資料。 - -### 遞迴證明 {#recursive-proofs} - -零知識證明的一個優點是,證明可以驗證其他證明。 例如,單個 ZK-SNARK 可以驗證其他的 ZK-SNARK。 這種「證明的證明」被稱爲遞迴證明,它顯著提高了零知識證明卷軸的吞吐量。 - -目前,有效性證明是逐塊產生的,並被提交到一層網路合約進行驗證。 然而,驗證單個區塊證明限制了零知識證明卷軸可以實現的吞吐量,因爲當營運者提交證明時只能最終確定一個區塊。 - -然而,遞迴證明可以使用一個有效性證明最終確定多個區塊。 這是因爲證明電路會遞迴彙總多個區塊證明,直到建立一個最終證明。 二層網路營運者提交該遞迴證明,如果合約接受它,所有相關的區塊將會立即最終確定。 使用遞迴證明,可以定期在以太坊上最終確定的零知識證明卷軸交易的數量將會增加。 - -### 零知識證明卷軸的優勢和劣勢 {#zk-rollups-pros-and-cons} - -| 優勢 | 劣勢 | -| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | -| 有效性證明確保鏈外交易的正確性,並防止營運者執行無效的狀態轉換。 | 與計算和驗證有效性證明相關的成本很高,並且可能會增加卷軸使用者的費用。 | -| 一旦在一層網路上驗證了有效性證明,當狀態更新獲得批准後,交易會更快地最終確定。 | 由於零知識技術的複雜性,構建與以太坊虛擬機相容的零知識證明卷軸很困難。 | -| 依賴去信任加密機制來保證安全,而不是像[樂觀卷軸](/developers/docs/scaling/optimistic-rollups/#optimistic-pros-and-cons)一樣依賴受激勵行爲者的誠實。 | 生成有效性證明需要專業化硬體,這可能會鼓勵一些參與方對鏈進行集中化控制。 | -| 將恢復鏈外狀態所需的資料儲存在一層網路上,這保證了安全性、抗審查性和去中心化。 | 中心化營運者(排序者)可以影響交易的順序。 | -| 使用者從更高的資本效率中受益,並且可以立即從二層網路提取資金。 | 硬體要求可能會減少能夠强制推進鏈的參與者數量,這增加了惡意營運者凍結卷軸狀態和審查使用者的風險。 | -| 不依賴於活躍性假設,使用者不必驗證鏈也能保護其資金。 | 一些證明系統(如 ZK-SNARK)需要可信的設定,如果處理不當,可能會損害零知識證明卷軸的安全模型。 | -| 更好的資料壓縮有助於降低在以太坊上發佈 `calldata` 的成本,並將使用者的卷軸費用降到最低。 | | - -### 零知識證明卷軸之視覺解釋 {#zk-video} - -觀看 Finematics 的零知識證明卷軸影片: - - - -### 使用零知識證明卷軸 {#use-zk-rollups} - -零知識證明卷軸存在多種實作,可供你整合到去中心化應用程式: - - - -## 零知識以太坊虛擬機上有哪些項目? {#zkevm-projects} - -零知識以太坊虛擬機上運作的專案包括: - -- **[zkEVM](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _zkEVM 是由以太坊基金會資助的專案,旨在開發與以太坊虛擬機相容的零知識證明卷軸,以及為以太坊區塊產生有效性證明的機制。_ - -- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _是以太坊主網上的一個去中心化零知識證明卷軸,它在零知識以太坊虛擬機 (zkEVM) 上運作,以透明的方式執行以太坊交易,包括具有零知識證明驗證的智慧型合約。_ - -- **[Scroll](https://scroll.io/blog/zkEVM)** - _是一家技術驅動型公司,致力於為以太坊構建原生零知識以太坊虛擬機二層網路解決方案。_ - -- **[Taiko](https://taiko.xyz)** - _Taiko 是等同於以太坊的去中心化零知識證明卷軸([第一類零知識以太坊虛擬機](https://vitalik.eth.limo/general/2022/08/04/zkevm.html))。_ - -- **[ZKsync](https://docs.zksync.io/)** - _ZKsync Era 是與以太坊個虛擬機相容的零知識證明卷軸,由 Matter Labs 構建,並由其自己的零知識以太坊虛擬機提供支援。_ - -- **[Starknet](https://starkware.co/starknet/)** - _StarkNet 是一個與以太坊虛擬機相容的二層網路擴張解決方案,由 StarkWare 構建。_ - -- **[Morph](https://www.morphl2.io/)** - _Morph 是一個利用零知識證明來解決二層網路狀態挑戰問題的混合卷軸擴張解決方案。_ - -## 深入閲讀零知識證明卷軸的相關内容 {#further-reading-on-zk-rollups} - -- [什麼是零知識證明卷軸?](https://coinmarketcap.com/alexandria/glossary/zero-knowledge-rollups) -- [什麼是零知識證明卷軸?](https://alchemy.com/blog/zero-knowledge-rollups) -- [STARK 和 SNARK 的比較](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) -- [什麽是零知識以太坊虛擬機?](https://www.alchemy.com/overviews/zkevm) -- [零知識以太坊虛擬機類型:等同於以太坊、等同於以太坊虛擬機、第 1 類、第 4 類,以及其他難以理解的拗口詞](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4) -- [介紹零知識以太坊虛擬機](https://hackmd.io/@yezhang/S1_KMMbGt) -- [超贊的零知識以太坊虛擬機資源](https://github.com/LuozhuZhang/awesome-zkevm) -- [深入瞭解 ZK-SNARK](https://vitalik.eth.limo/general/2017/02/01/zk_snarks.html) -- [如何實現 SNARK?](https://vitalik.eth.limo/general/2021/01/26/snarks.html) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/index.md deleted file mode 100644 index 505b1639240..00000000000 --- a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/index.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: 資料結構和編碼 -description: 以太坊基本資料結構概覽。 -lang: zh-tw -sidebarDepth: 2 ---- - -以太坊會建立、儲存和傳送大量資料。 該資料必須使用標準化格式和節省記憶體的方式,以便任何人都能夠在相對一般的消費級硬體上[運行節點](/run-a-node/)。 爲了實現這一點,以太坊堆棧中使用了一些特定的資料結構。 - -## 前置要求 {#prerequisites} - -你應該對以太坊和[用戶端軟體](/developers/docs/nodes-and-clients/)的基本原理已經有所了解。 熟悉網路層和[以太坊白皮書](/whitepaper/)會更加好。 - -## 資料結構 {#data-structures} - -### 帕特里夏默克爾樹 {#patricia-merkle-tries} - -帕特里夏默克爾樹是一種資料結構,將鍵值對編碼為具有確定性且經過加密驗證的樹。 這些資料結構被廣泛用於以太坊執行層。 - -[有關帕特里夏默克爾樹的更多資訊](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) - -### 遞迴長度前置詞 {#recursive-length-prefix} - -遞迴長度前置詞 (RLP) 是一種在以太坊執行層中廣泛使用的序列化方法。 - -[有關遞迴長度前置詞的更多資訊](/developers/docs/data-structures-and-encoding/rlp) - -### 簡易序列化 {#simple-serialize} - -簡單序列化 (SSZ) 因爲與默克爾化功能相容,是以太坊共識層主要序列化格式。 - -[有關簡易序列化的更多資訊](/developers/docs/data-structures-and-encoding/ssz) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md deleted file mode 100644 index a1d46f18502..00000000000 --- a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md +++ /dev/null @@ -1,263 +0,0 @@ ---- -title: 默克爾帕特里夏樹 -description: 介紹默克爾帕特里夏樹。 -lang: zh-tw -sidebarDepth: 2 ---- - -以太坊的狀態(所有帳戶、餘額和智慧型合約的總體)被編碼成一種特殊版本的資料結構,這種結構在計算機科學界通常被稱作默克爾樹。 這種結構在密碼學中的許多應用中都非常有用,因為它會在默克爾樹中所有互相有關的資料片段之間建立了一種可驗證的關係,產生可用於驗證相關資料的單一**根**值。 - -以太坊的資料結構是「改良版的默克爾帕特里夏樹」,之所以會這樣命名,是因為它借鑒了一些 PATRICIA(字母數字編碼的資訊擷取實用演算法)的部分特徵,同時它是為了對構成以太坊狀態的項目進行有效率的資料**擷取**而設計的。 - -默克爾帕特里夏樹是確定性的,並且可以透過加密方式驗證:生成狀態根的唯一方式是從每個單獨的狀態進行計算,且兩個相同的狀態可以透過比較根雜湊和其父雜湊(_默克爾證明_)來簡單地證明相同。 相反,無法用同一個根雜湊建立兩個不同的狀態,任何用不同值修改狀態的嘗試都會導致不同的狀態根雜湊。 從理論上講,這種結構為置入、查找和刪除提供了完美的 `O(log(n))` 效率。 - -在不久的將來,以太坊計劃遷移到[沃克爾樹](https://ethereum.org/en/roadmap/verkle-trees)結構,這將為未來的協定改進帶來更多新的可能性。 - -## 前置要求 {#prerequisites} - -為了更容易理解本文,具備以下基礎知識會很有幫助:[雜湊](https://en.wikipedia.org/wiki/Hash_function)、[默克爾樹](https://en.wikipedia.org/wiki/Merkle_tree)、[字典树](https://en.wikipedia.org/wiki/Trie)和[序列化](https://en.wikipedia.org/wiki/Serialization)。 本文從基本的[基數樹](https://en.wikipedia.org/wiki/Radix_tree)描述開始,然後逐步介紹使以太坊資料結構更爲優化的必要修改。 - -## 基數樹 {#basic-radix-tries} - -在基數樹中,每個節點看起來如下: - -``` - [i_0, i_1 ... i_n, value] -``` - -其中,`i_0 ... i_n` 代表字母表的符號(通常是二進位或十六進位),`value` 是節點的終值,`i_0, i_1 ... i_n` 插槽中的值為 `NULL` 或指向其他節點(在我們的示例中,是其他節點的雜湊)的指針。 這形成了基本的 `(key, value)` 存儲。 - -假設你想使用基數樹資料結構永久保存一組鍵值對的順序。 爲了在字典樹中找到目前與鍵 `dog` 對應的值,你首先需要把 `dog` 轉換為字母表中的字母(提供 `64 6f 67`),然後沿著該路徑向下遍歷字典樹,直到找到該值。 也就是説,爲了找到字典樹的根節點,你首先需要在平面鍵/值資料庫中找到根雜湊。 它表示指向其他節點的一個鍵陣列。 你將使用索引 `6` 的值作爲鍵,並通過在平面鍵/值資料庫中查找該鍵來獲取下一級的節點。 然後選取索引 `4` 查找下一個值,再選取索引 `6`,依此類推,直到遍歷路徑 `root -> 6 -> 4 -> 6 -> 15 -> 6 -> 7` 后,你會找到該節點的值並返回結果。 - -從「樹」中和從底層平面鍵/值「資料庫」中進行查找有所區別。 它們都定義了鍵/值排列,但底層資料庫能夠對鍵執行傳統的一步查找。 在樹中查找一個鍵對應的值則需要在底層資料庫中查詢多次,才能得到上述的最終值。 讓我們將後者稱爲 `path`,以消除歧義。 - -基數樹的更新和刪除操作可被定義如下: - -``` - def update(node,path,value): - curnode = db.get(node) if node else [ NULL ] * 17 - newnode = curnode.copy() - if path == '': - newnode[-1] = value - else: - newindex = update(curnode[path[0]],path[1:],value) - newnode[path[0]] = newindex - db.put(hash(newnode),newnode) - return hash(newnode) - - def delete(node,path): - if node is NULL: - return NULL - else: - curnode = db.get(node) - newnode = curnode.copy() - if path == '': - newnode[-1] = NULL - else: - newindex = delete(curnode[path[0]],path[1:]) - newnode[path[0]] = newindex - - if all(x is NULL for x in newnode): - return NULL - else: - db.put(hash(newnode),newnode) - return hash(newnode) -``` - -「默克爾」基數樹是透過使用確定性產生的加密雜湊摘要連結節點來構建的。 這種(鍵/值資料庫中 `key == keccak256(rlp(value))`)内容尋址提供了儲存資料的加密完整性保證。 如果給定字典樹的根雜湊是公開的,則任何能夠訪問底層葉資料的人都可以透過提供將特定值與樹根連結的每個節點的雜湊,來證明該字典樹在特定路徑中包含給定值。 - -對於攻擊者來講,他們無法證明 `(path, value)` 對不存在,因爲根雜湊最終基於其下方的所有雜湊。 任何底層修改都會改變根雜湊。 你可以將雜湊想做是資料結構資訊的一種壓縮表示,並透過雜湊函式的預映射保護保證安全。 - -我們將基數樹的原子單位(例如單個十六進位字元或 4 位二進位數字)稱爲「nibble」。 如上所述,以 nibble 為單位遍歷路徑時,節點最多可以指向 16 個子節點,但是還包括一個 `value` 元素。 因此,我們將它們表示爲長度 17 的陣列。 我們將這 17 個元素的陣列稱爲「分支節點」。 - -## 默克爾帕特里夏樹 {#merkle-patricia-trees} - -基數樹有一個主要限制:效率低下。 如果你希望將一個 `(path, value)` 繫結儲存在路徑長度為 64 字符(`bytes32` 中的 nibble 數)的位置,如以太坊中,我們需要超過一千個位元組的額外空間將每個字元存儲一個等級,並且每次查詢或刪除都需要執行完整的 64 步。 下文介紹的帕特里夏樹解決了這個問題。 - -### 最佳化 {#optimization} - -默克爾帕特里夏樹中的節點可以是以下其中一種: - -1. `NULL`(表示爲空字串) -2. `branch` 一個 17 項目節點 `[ v0 ... v15, vt ]` -3. `leaf` 一個 2 項目節點 `[ encodedPath, value ]` -4. `extension` 一個 2 項目節點 `[ encodedPath, key ]` - -在 64 字元的路徑中,遍歷樹的前幾層后,你將會達到一個至少下游部分不再有分支路徑的節點。 爲了避免在路徑中建立多達 15 個稀疏 `NULL` 節點,我們需要透過設置一個形式爲 `[ encodedPath, key ]` 的 `extension` 節點來簡化向下遍歷,其中 `encodedPath` 包含要跳過的「部分路徑」(使用下面描述的壓縮編碼),`key` 用於下一次資料庫查詢。 - -對於 `leaf` 節點,可以使用 `encodedPath` 的第一個 nibble 中的標記來標注,該路徑編碼了所有先前節點的路徑片段,並且我們可以直接查找 `value`。 - -然而,上述優化帶來了歧義。 - -當 nibble 遍歷路徑時,最後我們可能需要遍歷奇數個 nibble,但是所有資料都需要以 `bytes` 形式儲存。 兩者之間是無法區分的,例如,nibble `1` 和 nibble `01`(兩者都必須存儲爲 `<01>`)。 爲了指定奇數長度,這部分路徑需要用標記作爲前置詞。 - -### 規範:具有可選終止符的十六進位序列壓縮編碼 {#specification} - -如上所述,_剩餘部分路徑長度為奇數 vs 偶數_和_葉節點 vs 擴展節點_的標記位於任意 2 項目節點中部分路徑的第一個 nibble。 它們會產生以下結果: - - hex char bits | node type partial path length - ---------------------------------------------------------- - 0 0000 | extension even - 1 0001 | extension odd - 2 0010 | terminating (leaf) even - 3 0011 | terminating (leaf) odd - -對於剩餘路徑長度為偶數的情況(`0` 或 `2`),一定會附加一個 `0`「填充」nibble。 - -``` - def compact_encode(hexarray): - term = 1 if hexarray[-1] == 16 else 0 - if term: hexarray = hexarray[:-1] - oddlen = len(hexarray) % 2 - flags = 2 * term + oddlen - if oddlen: - hexarray = [flags] + hexarray - else: - hexarray = [flags] + [0] + hexarray - // hexarray now has an even length whose first nibble is the flags. - o = '' - for i in range(0,len(hexarray),2): - o += chr(16 * hexarray[i] + hexarray[i+1]) - return o -``` - -範例: - -``` - > [ 1, 2, 3, 4, 5, ...] - '11 23 45' - > [ 0, 1, 2, 3, 4, 5, ...] - '00 01 23 45' - > [ 0, f, 1, c, b, 8, 10] - '20 0f 1c b8' - > [ f, 1, c, b, 8, 10] - '3f 1c b8' -``` - -下面是獲取默克爾帕特里夏樹中節點的擴展程式碼: - -``` - def get_helper(node,path): - if path == []: return node - if node = '': return '' - curnode = rlp.decode(node if len(node) < 32 else db.get(node)) - if len(curnode) == 2: - (k2, v2) = curnode - k2 = compact_decode(k2) - if k2 == path[:len(k2)]: - return get(v2, path[len(k2):]) - else: - return '' - elif len(curnode) == 17: - return get_helper(curnode[path[0]],path[1:]) - - def get(node,path): - path2 = [] - for i in range(len(path)): - path2.push(int(ord(path[i]) / 16)) - path2.push(ord(path[i]) % 16) - path2.push(16) - return get_helper(node,path2) -``` - -### 示例樹 {#example-trie} - -假設我們想要一個包含四個路徑/值對 `('do', 'verb')`、`('dog', 'puppy')`、`('doge', 'coins')`、`('horse', 'stallion')` 的樹。 - -首先,我們需要將路徑和值都轉換爲 `bytes`。 如下,_paths_ 的實際位元組代表由 `<>` 表示,而 _values_ 仍然顯示爲字串,由 `"` 表示,以方便理解(值也應該為 `bytes`): - -``` - <64 6f> : 'verb' - <64 6f 67> : 'puppy' - <64 6f 67 65> : 'coins' - <68 6f 72 73 65> : 'stallion' -``` - -現在,我們使用底層資料庫中的以下鍵/值對構建了這樣一顆樹: - -``` - rootHash: [ <16>, hashA ] - hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] - hashB: [ <00 6f>, hashC ] - hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] - hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] -``` - -當一個節點在另一個節點内部被引用時,包含的内容是 `H(rlp.encode(node))`,其中 `H(x) = keccak256(x) if len(x) >= 32 else x` 並且 `rlp.encode` 是[遞迴長度前置詞](/developers/docs/data-structures-and-encoding/rlp)編碼函式。 - -請注意,更新樹時,_如果_新建立的節點長度 >= 32,則需要將鍵/值對 `(keccak256(x), x)` 儲存在一個持續不變的查找表中。 然而,如果節點比這短,則不需要儲存任何資料,因爲函式 f(x) = x 是可逆的。 - -## 以太坊中的樹 {#tries-in-ethereum} - -以太坊執行層中的所有默克爾樹都使用默克爾帕特里夏樹。 - -在區塊頭,有來自其中 3 棵樹的 3 個根。 - -1. stateRoot -2. transactionsRoot -3. receiptsRoot - -### 狀態樹 {#state-trie} - -有一個全域狀態樹,每次用戶端處理一個區塊時它都會更新。 其中,`path` 始終為 `keccak256(ethereumAddress)`,並且 `value` 始終為 `rlp(ethereumAccount)`。 具體來講,一個以太坊 `account` 是包含 4 個項目的陣列:`[nonce,balance,storageRoot,codeHash]`。 此時,值得注意的是,該 `storageRoot` 是另一個帕特里夏樹的根: - -### 存儲樹 {#storage-trie} - -存儲樹是保存_所有_合約資料的地方。 每個帳戶都有一棵單獨的存儲樹。 爲了用給定地址檢索位於特定存儲位置的值,需要有存儲地址、存儲中所儲存資料的整數位置,以及區塊 ID。 之後,這些資料可以作爲引數傳入 JSON-RPC 應用程式介面中定義的 `eth_getStorageAt`,例如,用於檢索地址 `0x295a70b2de5e3953354a6a8344e616ed314d7251` 的存儲插槽 0 中的資料: - -``` -curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 - -{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} - -``` - -檢索存儲中的其他元素稍微複雜一些,因爲必須首先計算存儲樹中的位置。 該位置作爲地址和存儲位置的 `keccak256` 雜湊進行計算,兩者都從左側開始,用零填充 32 位元組的長度。 例如,地址 `0x391694e7e0b0cce554cb130d723a9d27458f9298` 存儲插槽 1 中的資料位置是: - -``` -keccak256(decodeHex("000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001")) -``` - -在 Geth 主控台中,可以按以下方式計算: - -``` -> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" -undefined -> web3.sha3(key, {"encoding": "hex"}) -"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" -``` - -因此,`path` 為 `keccak256(<6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9>)`。 與之前一樣,該地址現在可用於從存儲樹檢索資料: - -``` -curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 - -{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} -``` - -注:如果不是合約帳戶,以太坊帳戶的 `storageRoot` 預設為空。 - -### 交易樹 {#transaction-trie} - -每個區塊都有一個獨立的交易樹,也用於儲存 `(key, value)` 對。 此處的路徑為:`rlp(transactionIndex)`,代表了對應一個值的鍵,該值由以下程式碼決定: - -``` -if legacyTx: - value = rlp(tx) -else: - value = TxType | encode(tx) -``` - -在 [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) 文件中可以找到更多相關資訊。 - -### 收據樹 {#receipts-trie} - -每個區塊都有其收據樹。 此處的 `path` 是:`rlp(transactionIndex)`。 `transactionIndex` 是其所在區塊中的索引。 收據樹從不更新。 與交易樹類似,它也有當前和以前的收據。 爲了在收據樹中查詢特定的收據,需要提供區塊中交易的索引、收據承載以及交易類型。 返回的收據可以是 `Receipt` 類型,該類型被定義爲 `TransactionType` 和 `ReceiptPayload` 的串聯,也可以是 `LegacyReceipt` 類型,該類型被定義爲 `rlp([status, cumulativeGasUsed, logsBloom, logs])`。 - -在 [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) 文件中可以找到更多相關資訊。 - -## 衍生閱讀 {#further-reading} - -- [修改後的默克爾帕特里夏樹 — 以太坊如何保存狀態](https://medium.com/codechain/modified-merkle-patricia-trie-how-ethereum-saves-a-state-e6d7555078dd) -- [以太坊中的默克爾](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/) -- [瞭解以太坊樹](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/rlp/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/rlp/index.md deleted file mode 100644 index 30cef3a9519..00000000000 --- a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/rlp/index.md +++ /dev/null @@ -1,163 +0,0 @@ ---- -title: 遞迴長度前置詞 (RLP) 序列化 -description: 以太坊執行層中的遞迴長度前置詞編碼的定義 -lang: zh-tw -sidebarDepth: 2 ---- - -遞迴長度前置詞 (RLP) 序列化在以太坊執行層用戶端中廣泛使用。 遞迴長度前置詞以節省空間的格式標準化資料在節點之間的傳送。 遞迴長度前置詞的目的在於,對任意嵌套的二進位資料陣列進行編碼,而遞迴長度前置詞是用於序列化以太坊執行層中物件的主要編碼方法。 遞迴長度前置詞的主要目的是對結構進行解碼;除了正整數外,遞迴長度前置詞將特定資料類型(例如字串、浮點數)的編碼委托給更高階的協定。 正整數必須以沒有前導零的大端二進位形式表示(因而使整數值零相當於空位元組陣列)。 任何使用遞迴長度前置詞的高階協定都必須將具有前導零的反序列化正整數視爲無效。 - -更多資訊請參閱[以太坊黃皮書(附錄 B)](https://ethereum.github.io/yellowpaper/paper.pdf#page=19)。 - -要使用遞迴長度前置詞對字典進行編碼,建議的兩種規範形式為: - -- 配合按字典順序排序的鍵使用 `[[k1,v1],[k2,v2]...]` -- 像以太坊一樣使用更高階的帕特里夏樹編碼 - -## 定義 {#definition} - -遞迴長度前置詞編碼函式接受一個項目。 該項目的定義如下: - -- 一個字串(即位元組陣列)是一個項目 -- 一個項目清單是一個項目 -- 一個正整數是一個項目 - -例如,下列所述都是項目: - -- 空字串; -- 包含單詞「cat」的字串; -- 包含任意數量字串的清單; -- 以及更複雜的資料結構,例如 `["cat", ["puppy", "cow"], "horse", [[]], "pig", [""], "sheep"]`。 -- 數字 `100` - -請注意,在本頁剩餘部分的情境下,「字串」表示「一定數量的二進位資料位元組」;不使用特殊編碼,並且不隱含有關字串内容的知識(除非針對非最小正整數的規則有要求)。 - -遞迴長度前置詞編碼的定義如下: - -- 對於正整數,將其轉換爲最短位元組陣列,其大端解釋為整數,然後根據下面的規則編碼為字串。 -- 對於值在 `[0x00, 0x7f]`(十進位 `[0, 127]`)範圍内的單一位元組,該位元組就是它自己的遞迴長度前置詞編碼。 -- 否則,如果字串的長度為 0-55 位元組,則遞迴長度前置詞編碼包含一個值為 **0x80**(十進位 128)的單一位元組,加上該字串后字串的長度。 因此,第一個位元組的範圍是 `[0x80, 0xb7]`(十進位 `[128, 183]`)。 -- 如果字串的長度超過 55 位元組,則遞迴長度前置詞編碼的組成為:一個值為 **0xb7**(十進位 183)的單一位元組,加上二進位形式的字串長度之長度(以位元組為單位),后跟字串的長度,然後是字串。 例如,一個 1024 位元組長的字串將被編碼為 `\xb9\x04\x00`(十進位 `185, 4, 0`),後跟該字串。 在這裏,`0xb9` (183 + 2 = 185) 為第一個位元組,然後是表示實際字串長度的 2 個位元組 `0x0400`(十進位 1024)。 因此,第一個位元組的範圍是 `[0xb8, 0xbf]`(十進位 `[184, 191]`)。 -- 如果字串長度為 2^64 位元組或者更長,則可能不會對其進行編碼。 -- 如果清單的縂承載長度(即其所有經過遞迴長度前置詞編碼的項目的組合長度)為 0-55 位元組,則遞迴長度前置詞編碼包含一個值為 **0xc0** 的單一位元組,加上承載長度,後跟項目遞迴長度前置詞編碼的串聯。 因此,第一個字節位元組的範圍是 `[0xc0, 0xf7]`(十進位 `[192, 247]`)。 -- 如果清單的縂承載長度超過 55 位元組,則遞迴長度前置詞編碼包含一個值為 **0xf7** 的單一位元組,加上二進位形式的承載長度(以位元組為單位),後跟承載的長度,後跟項目遞迴長度前置詞編碼的串聯。 因此,第一個字節位元組的範圍是 `[0xf8, 0xff]`(十進位 `[248, 255]`)。 - -對應的程式碼為: - -```python -def rlp_encode(input): - if isinstance(input,str): - if len(input) == 1 and ord(input) < 0x80: - return input - return encode_length(len(input), 0x80) + input - elif isinstance(input, list): - output = '' - for item in input: - output += rlp_encode(item) - return encode_length(len(output), 0xc0) + output - -def encode_length(L, offset): - if L < 56: - return chr(L + offset) - elif L < 256**8: - BL = to_binary(L) - return chr(len(BL) + offset + 55) + BL - raise Exception("input too long") - -def to_binary(x): - if x == 0: - return '' - return to_binary(int(x / 256)) + chr(x % 256) -``` - -## 範例 {#examples} - -- 字串 "dog" = [ 0x83, 'd', 'o', 'g' ] -- 清單 [ "cat", "dog" ] = `[ 0xc8, 0x83, 'c', 'a', 't', 0x83, 'd', 'o', 'g' ]` -- 空字串 ('null') = `[ 0x80 ]` -- 空清單 = `[ 0xc0 ]` -- 整數 0 = `[ 0x80 ]` -- 位元組 '\\x00' = `[ 0x00 ]` -- 位元組 '\\x0f' = `[ 0x0f ]` -- 位元組 '\\x04\\x00' = `[ 0x82, 0x04, 0x00 ]` -- 3 的[集合理論表示](http://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers),`[ [], [[]], [ [], [[]] ] ] = [ 0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0 ]` -- 字串 "Lorem ipsum dolor sit amet, consectetur adipisicing elit" = `[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ... , 'e', 'l', 'i', 't' ]` - -## 遞迴長度前置詞解碼 {#rlp-decoding} - -根據遞迴長度前置詞編碼的規則和過程,遞迴長度前置詞解碼的輸入被視爲一個二進位資料陣列。 遞迴長度前置詞解碼過程如下: - -1. 根據輸入資料的第一個位元組(即前置詞),解碼資料類型、實際資料長度和位移; - -2. 根據資料的類型和位移,對資料進行相應的解碼,遵循正整數的最小編碼規則; - -3. 繼續解碼輸入的剩餘部分; - -其中,解碼資料類型和位移的規則如下: - -1. 如果第一個位元組(即前置詞)的範圍是 [0x00, 0x7f],則資料為字串,并且字串本身就是第一個位元組; - -2. 如果第一個位元組的範圍是 [0x80, 0xb7],則資料為字串,并且第一個位元組后跟長度等於第一個位元組減去 0x80 的字串; - -3. 如果第一個位元組的範圍是 [0xb8, 0xbf],則資料為字串,第一個位元組后跟長度等於第一個位元組減去 0xb7 的字串長度,后跟該字串; - -4. 如果第一個位元組的範圍是 [0xc0, 0xf7],則資料為清單,第一個位元組後跟清單中所有項目的遞迴長度前置詞編碼串聯,而清單的縂承載等於第一個位元組減去 0xc0; - -5. 如果第一個位元組的範圍是 [0xf8, 0xff],則資料為清單,第一個位元組后跟長度等於第一個位元組減去 0xf7 的縂承載,而清單所有項目的遞迴長度前置詞編碼串聯則跟在清單的縂承載之後; - -對應的程式碼為: - -```python -def rlp_decode(input): - if len(input) == 0: - return - output = '' - (offset, dataLen, type) = decode_length(input) - if type is str: - output = instantiate_str(substr(input, offset, dataLen)) - elif type is list: - output = instantiate_list(substr(input, offset, dataLen)) - output += rlp_decode(substr(input, offset + dataLen)) - return output - -def decode_length(input): - length = len(input) - if length == 0: - raise Exception("input is null") - prefix = ord(input[0]) - if prefix <= 0x7f: - return (0, 1, str) - elif prefix <= 0xb7 and length > prefix - 0x80: - strLen = prefix - 0x80 - return (1, strLen, str) - elif prefix <= 0xbf and length > prefix - 0xb7 and length > prefix - 0xb7 + to_integer(substr(input, 1, prefix - 0xb7)): - lenOfStrLen = prefix - 0xb7 - strLen = to_integer(substr(input, 1, lenOfStrLen)) - return (1 + lenOfStrLen, strLen, str) - elif prefix <= 0xf7 and length > prefix - 0xc0: - listLen = prefix - 0xc0; - return (1, listLen, list) - elif prefix <= 0xff and length > prefix - 0xf7 and length > prefix - 0xf7 + to_integer(substr(input, 1, prefix - 0xf7)): - lenOfListLen = prefix - 0xf7 - listLen = to_integer(substr(input, 1, lenOfListLen)) - return (1 + lenOfListLen, listLen, list) - raise Exception("input does not conform to RLP encoding form") - -def to_integer(b): - length = len(b) - if length == 0: - raise Exception("input is null") - elif length == 1: - return ord(b[0]) - return ord(substr(b, -1)) + to_integer(substr(b, 0, -1)) * 256 -``` - -## 衍生閱讀 {#further-reading} - -- [以太坊中的遞迴長度前置詞](https://medium.com/coinmonks/data-structure-in-ethereum-episode-1-recursive-length-prefix-rlp-encoding-decoding-d1016832f919) -- [深入瞭解以太坊:遞迴長度前置詞](https://medium.com/coinmonks/ethereum-under-the-hood-part-3-rlp-decoding-df236dc13e58) -- [Coglio, A. (2020)。 ACL2 中的以太坊遞迴長度前置詞。 arXiv 預印本 arXiv:2009.13769。](https://arxiv.org/abs/2009.13769) - -## 相關主題 {#related-topics} - -- [帕特里夏默克爾樹](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/ssz/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/ssz/index.md deleted file mode 100644 index efb6450536c..00000000000 --- a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/ssz/index.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: 簡單序列化 -description: 以太坊簡單序列化 (SSZ) 格式的解釋説明。 -lang: zh-tw -sidebarDepth: 2 ---- - -**簡單序列化 (SSZ)** 是信標鏈上使用的序列化方法。 它取代了遞迴長度前置詞序列化,後者在除了對等點發現協定以外的共識層到執行層上廣泛使用。 簡單序列化被設計爲具有確定性,並且也能夠有效率地進行默克爾化。 簡單序列化可以被認爲有兩個組成部分:序列化方案和默克爾化方案,其中默克爾化方案旨在有效率地處理序列化資料結構。 - -## 簡單序列化如何運作? {#how-does-ssz-work} - -### 序列化 {#serialization} - -簡單序列化是一種非自我描述的序列化方案 - 依賴於必須提前知道的方案。 簡單序列化的目標是將任意複雜性的物件用位元組字串來表示。 對於「基本類型」來講,這是一個非常簡單的過程。 元素被簡單地轉換爲十六進位位元組。 基本類型包括: - -- 無號整數 -- 布林值 - -對於複雜的「複合」類型,序列化會更加複雜,因爲複合類型包含多個可能具有不同類型或不同大小或兩者都有的元素。 在這些物件都具有固定長度的情況下(即無論它們的實際值如何,元素的大小將始終保持不變),序列化只是將複合類型中的每個元素轉換爲小端位元組字串。 這些位元組字串會連結在一起。 序列化物件用位元組清單表示,清單中的元素具有固定長度,它們的排序順序與其在反序列化物件中的順序相同。 - -對於具有可變長度的類型,實際資料會被序列化物件中該元素位置的「位移」值取代。 實際資料會添加到序列化物件末尾的堆中。 位移值是堆中實際資料開始的索引,充當指向相關位元組的指針。 - -下面的範例説明了位移如何作用於具有固定和可變長度元素的容器: - -```Rust - - struct Dummy { - - number1: u64, - number2: u64, - vector: Vec, - number3: u64 - } - - dummy = Dummy{ - - number1: 37, - number2: 55, - vector: vec![1,2,3,4], - number3: 22, - } - - serialized = ssz.serialize(dummy) - -``` - -`serialized` 將具有以下結構(這裏只填充到 4 個位元,實際會填充到 32 個位元,並爲了清晰起見保留 `int` 表示): - -``` -[37, 0, 0, 0, 55, 0, 0, 0, 16, 0, 0, 0, 22, 0, 0, 0, 1, 2, 3, 4] ------------- ----------- ----------- ----------- ---------- - | | | | | - number1 number2 offset for number 3 value for - vector vector - -``` - -爲了清晰起見,分成幾行: - -``` -[ - 37, 0, 0, 0, # little-endian encoding of `number1`. - 55, 0, 0, 0, # little-endian encoding of `number2`. - 16, 0, 0, 0, # The "offset" that indicates where the value of `vector` starts (little-endian 16). - 22, 0, 0, 0, # little-endian encoding of `number3`. - 1, 2, 3, 4, # The actual values in `vector`. -] -``` - -這仍然是簡化版 - 上述示意圖中的整數和零實際上將儲存在位元組清單中,就像這樣: - -``` -[ - 10100101000000000000000000000000 # little-endian encoding of `number1` - 10110111000000000000000000000000 # little-endian encoding of `number2`. - 10010000000000000000000000000000 # The "offset" that indicates where the value of `vector` starts (little-endian 16). - 10010110000000000000000000000000 # little-endian encoding of `number3`. - 10000001100000101000001110000100 # The actual value of the `bytes` field. -] -``` - -因此,可變長度類型的實際值儲存在序列化物件末尾的堆中,它們的位移則儲存在有序欄位清單中的正確位置。 - -還有一些特殊情況需要特殊處理,例如 `BitList` 類型需要在序列化過程中新增長度上限,並在反序列化過程中移除該上限。 在[簡單序列化規範](https://github.com/ethereum/consensus-specs/blob/dev/ssz/simple-serialize.md)中查看完整詳情。 - -### 反序列化 {#deserialization} - -反序列化該物件需要一個方案。 方案會定義序列化資料的精確配置,以便每個特定元素都可以從一個位元組二進位大型物件反序列化為一些有意義的物件,其中的元素具有正確的類型、值、大小和位置。 該方案告訴反序列化器哪些值是實際值,哪些是位移值。 當物件被序列化時,所有欄位名稱都會消失,但會根據方案在反序列化時被重新具現化。 - -參閱 [ssz.dev](https://www.ssz.dev/overview) 上關於此主題的互動式解釋。 - -## 默克爾化 {#merkleization} - -該簡單序列化物件之後可以被默克爾化 - 即轉換爲表示相同資料的默克爾樹。 首先,確定序列化物件中的 32 位元組區塊數量。 這些都是樹的「葉子」。 葉子的總數必須為 2 的冪,以便將葉子散列到一起,最終產生單個雜湊樹根。 如果情況並非如此,則會新增包含 32 位元組零的額外葉子。 如圖所示: - -``` - hash tree root - / \ - / \ - / \ - / \ - hash of leaves hash of leaves - 1 and 2 3 and 4 - / \ / \ - / \ / \ - / \ / \ - leaf1 leaf2 leaf3 leaf4 -``` - -在某些情況下,樹的葉子不會像上述範例中一樣自然均匀分佈。 例如,葉子 4 可能是一個包含多個元素的容器,需要向默克爾樹增加額外的「深度」,從而建立一棵不均匀的樹。 - -與其將這些樹元素稱爲葉子 X、節點 X 等,我們可以賦予它們廣義索引,從根 = 1 開始,沿著每個層級從左往右計數。 這就是之前解釋的廣義索引。 序列化清單中的每個元素都有一個等於 `2**depth + idx` 的廣義索引,其中 idx 是其在序列化物件中的零索引位置,depth 是默克爾樹的層級數,可以計算爲元素(葉子)數量以 2 為底的對數。 - -## 廣義索引 {#generalized-indices} - -廣義索引是一個整數,表示二進位默克爾樹中的一個節點,其中每個節點都有一個廣義索引 `2 ** depth + index in row`。 - -``` - 1 --depth = 0 2**0 + 0 = 1 - 2 3 --depth = 1 2**1 + 0 = 2, 2**1+1 = 3 - 4 5 6 7 --depth = 2 2**2 + 0 = 4, 2**2 + 1 = 5... - -``` - -這種表示爲默克爾樹中的每條資料產生一個節點索引。 - -## 多重證明 {#multiproofs} - -提供表示特定元素的廣義索引清單,以使我們可以根據雜湊樹根來對其進行驗證。 該根是我們接受的現實版本。 我們提供的任何資料都可以根據現實進行驗證,即,將資料插入默克爾樹中的正確位置(由其廣義索引確定),然後觀察根是否保持不變。 [此處](https://github.com/ethereum/consensus-specs/blob/dev/ssz/merkle-proofs.md#merkle-multiproofs)的規範中包含了一些函式,這些函式展示了如何計算所需的最小節點集,來驗證一組特定廣義索引的内容。 - -例如,爲了驗證下面樹中索引 9 中的資料,我們需要索引 8、9、5、3、1 處資料的雜湊。 (8,9) 的雜湊應該等於 (4) 的雜湊,它與 5 進行雜湊計算將產生 2,與 3 進行雜湊計算將產生樹根 1。 如果為 9 提供了不正確的資料,根將會改變,我們會檢測到這個問題並無法驗證分支。 - -``` -* = data required to generate proof - - 1* - 2 3* - 4 5* 6 7 -8* 9* 10 11 12 13 14 15 - -``` - -## 進一步閱讀 {#further-reading} - -- [升級以太坊:簡單序列化](https://eth2book.info/altair/part2/building_blocks/ssz) -- [升級以太坊:默克爾化](https://eth2book.info/altair/part2/building_blocks/merkleization) -- [簡單序列化實作](https://github.com/ethereum/consensus-specs/issues/2138) -- [簡單序列化計算器](https://simpleserialize.com/) -- [SSZ.dev](https://www.ssz.dev/) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md deleted file mode 100644 index 858d1258106..00000000000 --- a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/data-structures-and-encoding/web3-secret-storage-definition/index.md +++ /dev/null @@ -1,189 +0,0 @@ ---- -title: Web3 金鑰儲存的定義 -description: Web3 金鑰儲存的正式定義 -lang: zh-tw -sidebarDepth: 2 ---- - -要讓應用程式在以太坊上執行,可以使用 web3.js 程式庫提供的 web3 物件。 在底層,它透過遠端程序呼叫與區域節點通訊。 [web3](https://github.com/ethereum/web3.js/) 可與任何有公開遠端程序呼叫層的以太坊節點一起使用。 - -`web3` 包含 `eth` 物件 - web3.eth。 - -```js -var fs = require("fs") -var recognizer = require("ethereum-keyfile-recognizer") - -fs.readFile("keyfile.json", (err, data) => { - var json = JSON.parse(data) - var result = recognizer(json) -}) - -/** result - * [ 'web3', 3 ] web3 (v3) keyfile - * [ 'ethersale', undefined ] Ethersale keyfile - * null invalid keyfile - */ -``` - -以下記載了**第 3 版** Web3 金鑰儲存定義。 - -## 定義 {#definition} - -除了加密演算法不再綁定 AES-128-CBC 外(現在最低要求是 AES-128-CTR),和第一版對照,檔案的編碼和解碼方式差異不大。 大部分意義/演算法與第 1 版本相似,但 `mac` 除外,它是衍生金鑰最左邊算起第二組 16 位元組與完整的 `ciphertext` 串連在一起的 SHA3 (keccak-256)。 - -秘密金鑰檔案直接儲存在 `~/.web3/keystore`(類 Unix 系統)和 `~/AppData/Web3/keystore`(Windows 系統)中。 該檔案可以任意命名,但良好的慣例是以 `.json` 命名,其中 `` 是賦予秘密金鑰(秘密金鑰地址的隱私保護代理程式)的 128 位元 UUID。 - -所有這類的檔案都有一個相關的密碼。 要導出給定 `.json` 檔案的秘密金鑰,首先要導出這個檔案的加密金鑰,完成這工作要透過取得檔案的密碼,並將它傳給 `kdf` 金鑰中記述的金鑰導出函式。 KDF 函式的靜態和動態 KDF 依存參數是記述在 `kdfparams` 金鑰裡。 - -KDF 函式的靜態和動態 KDF 依存參數是記述在 `kdfparams` 金鑰裡。 - -- `kdf`:`pbkdf2` - -就 PBKDF2 而言,kdfparams 包含: - -- `prf`:必須是 `hmac-sha256`(未來可能會增加長度)。 -- `c`:反覆次数; -- `salt`:傳送給 PBKDF 的 salt -- `dklen`:衍生金鑰的長度。 必需大於或等於 32。 - -一旦檔案的金鑰導出後,必須透過 MAC 的導出進行驗証。 MAC 是由串聯衍生金鑰最左算起第二組 16 位元組和`ciphertext` 金鑰的內容所形成的位元組陣列的 SHAK3 (keccak-256) 雜湊值,也就是: - -```js -KECCAK(DK[16..31] ++ ) -``` - -(其中 `++` 是串連運算子) - -這數值應該和 `mac` 金鑰的內容進行比較;如果不同,會被要求提供替代密碼(否則運算會被取消)。 - -檔案的金鑰被驗證後,加密文字(檔案內的`ciphertext` 金鑰)可用 `cipher` 金鑰指定的對稱式加密演算法進行解碼,並透過 `cipherparams` 執行參數化。 如果衍生金鑰的長度和演算法的金鑰大小不一樣,則用 0 填滿,衍生金鑰最右邊的位元組應當用作演算法的金鑰。 - -所有最低限度合規實作都必須支援 AES-128-CTR 演算法,表示如下: - -- `cipher: aes-128-ctr` - -這密碼取得下列參數,作為 cipherparams 金鑰的金鑰提供: - -- `iv`:加密的 128 位元初始化向量。 - -加密金鑰是衍生金鑰的最左 16 位元組,也就是 `DK[0..15]`。 - -祕密金鑰的建立/加密基本上應該是這些步驟的反序操作。 確認 `uuid`、`salt` 和 `iv` 的確是隨機數。 - -除了 `version` 欄位應該作為版本的「硬」識別碼外,實作中也可以使用 `minorversion` 來追蹤較小的非破壞性格式變更。 - -## 測試向量 {#test-vectors} - -詳細資料: - -- `Address`: `008aeeda4d805471df9b2a5b0f38a0c3bcba786b` -- `ICAP`: `XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67` -- `UUID`: `3198bc9c-6672-5ab3-d9954942343ae5b6` -- `Password`: `testpassword` -- `Secret`: `7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d` - -### PBKDF2-SHA-256 {#PBKDF2-SHA-256} - -測試向量使用 `AES-128-CTR` 和 `PBKDF2-SHA-256`: - -`~/.web3/keystore/3198bc9c-6672-5ab3-d9954942343ae5b6.json` 檔案的內容: - -```json -{ - "crypto": { - "cipher": "aes-128-ctr", - "cipherparams": { - "iv": "6087dab2f9fdbbfaddc31a909735c1e6" - }, - "ciphertext": "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46", - "kdf": "pbkdf2", - "kdfparams": { - "c": 262144, - "dklen": 32, - "prf": "hmac-sha256", - "salt": "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd" - }, - "mac": "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2" - }, - "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6", - "version": 3 -} -``` - -**中間事物**: - -`Derived key`: `f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551` `MAC Body`: `e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46` `MAC`: `517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2` `Cipher key`: `f06d69cdc7da0faffb1008270bca38f5` - -### Scrypt {#scrypt} - -測試向量使用 AES-128-CTR 和 Scrypt: - -```json -{ - "crypto": { - "cipher": "aes-128-ctr", - "cipherparams": { - "iv": "740770fce12ce862af21264dab25f1da" - }, - "ciphertext": "dd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2", - "kdf": "scrypt", - "kdfparams": { - "dklen": 32, - "n": 262144, - "p": 1, - "r": 8, - "salt": "25710c2ccd7c610b24d068af83b959b7a0e5f40641f0c82daeb1345766191034" - }, - "mac": "337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c" - }, - "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6", - "version": 3 -} -``` - -**中間事物**: - -`衍生金鑰`:`7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d` `MAC 本體`:`edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2` `MAC`:`337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c` `加密金鑰`:`7446f59ecc301d2d79bc3302650d8a5c` - -## 對第一版的修正 {#alterations-from-v2} - -這版本修正了與發佈於[此處](https://github.com/ethereum/homestead-guide/blob/master/old-docs-for-reference/go-ethereum-wiki.rst/Passphrase-protected-key-store-spec.rst)的第一版的若干不一致的地方。 簡述如下: - -- 大小寫未對齊和不一致(scrypt 為小寫字母,Kdf 為大小寫字母混合,MAC 為大寫字母)。 -- 不必要的地址和侵害隱私權。 -- `Salt` 本質上是金鑰衍生函式的一個參數,一般而言應該與金鑰衍生函式而不是與加密相關聯。 -- _SaltLen_ 是不需要的(因為它是從 Salt 衍生的)。 -- 給定了金鑰衍生函式,但加密演算法是硬式指定的。 -- `Version` 本質上是數値但卻設為字串(結構化版本管理對於字串是可能的,但對於難得修改的設定檔案格式可能被認定超出範圍)。 -- `KDF` 和 `cipher` 理論上是同層級概念但組織方式卻不一樣。 -- `MAC` 是透過無關空白位置的資料片段 (!) 計算出來的。 - -已變更格式,賦予下列檔案等同先前連結頁面所述範例的功能: - -```json -{ - "crypto": { - "cipher": "aes-128-cbc", - "ciphertext": "07533e172414bfa50e99dba4a0ce603f654ebfa1ff46277c3e0c577fdc87f6bb4e4fe16c5a94ce6ce14cfa069821ef9b", - "cipherparams": { - "iv": "16d67ba0ce5a339ff2f07951253e6ba8" - }, - "kdf": "scrypt", - "kdfparams": { - "dklen": 32, - "n": 262144, - "p": 1, - "r": 8, - "salt": "06870e5e6a24e183a5c807bd1c43afd86d573f7db303ff4853d135cd0fd3fe91" - }, - "mac": "8ccded24da2e99a11d48cda146f9cc8213eb423e2ea0d8427f41c3be414424dd", - "version": 1 - }, - "id": "0498f19a-59db-4d54-ac95-33901b4f1870", - "version": 2 -} -``` - -## 對第二版的修正 {#alterations-from-v2} - -第二版是早期的 C++ 實作,有若干缺陷。 所有基本元素保留不變。 diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/index.md deleted file mode 100644 index 669968f52d2..00000000000 --- a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/index.md +++ /dev/null @@ -1,155 +0,0 @@ ---- -title: 網路層(Networking Layer) -description: 以太坊網路層簡介 -lang: zh-tw -sidebarDepth: 2 ---- - -以太坊是擁有數千節點的點對點網路,必須仰賴標準化協定與彼此通訊。 「網路層」則是一系列讓節點尋找彼此並交換資訊的協定, 包含全網路「八卦(gossiping)」資訊(一對多通訊)以及特定節點間交換請求與回應(一對一通訊)。 每個節點都必須遵守特定網路規則,確保發送與接收正確資訊。 - -用戶端軟體有兩個部分(執行用戶端和共識用戶端),每個都有自己獨特的網路堆疊。 除了與其他以太坊節點通訊之外,執行用戶端和共識用戶端還必須相互通訊。 本頁介紹對支援此通訊的協定。 - -執行用戶端透過執行層的點對點網路廣播交易。 這需要經過驗證的對等點之間進行加密通訊。 當一名驗證者被選擇來提議區塊,來自區域交易池的交易將會透過區域遠端程序呼叫連線傳遞到共識用戶端,然後被打包進信標區塊中。 之後,共識用戶端將在其點對點網路中廣播信標區塊。 這需要兩個獨立的點對點網路:一個連線執行用戶端來廣播交易,另一個連線共識用戶端來廣播區塊。 - -## 前置要求 {#prerequisites} - -對以太坊[節點和用戶端](/developers/docs/nodes-and-clients/)稍有瞭解將有助於理解本文。 - -## 執行層 {#execution-layer} - -執行層的網路協定被分爲兩個堆疊: - -- 發現堆疊:建立於使用者資料包通訊協定之上,使新節點能夠找到對等點進行連線 - -- DevP2P 堆疊:建立於傳輸控制通訊協定之上,使節點能夠交換資訊 - -這兩個堆疊平行運作。 發現堆疊將新的網路參與者傳送到網路中,而 DevP2P 堆疊則使它們能夠進行互動。 - -### 發現 {#discovery} - -發現是在網路中尋找其他節點的過程。 這會使用一小組引導節點來啓動(地址被[硬編碼](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go)到用戶端中的節點,因此它們能夠立即被找到並將用戶端連線到對等點)。 這些引導節點只用於將新節點引入到一組對等點 - 這是它們唯一的目的,它們不參與正常的用戶端任務,如同步鏈,並且它們只在用戶端第一次啓動時使用。 - -用於節點-引導節點互動的協定是 [Kademlia](https://medium.com/coinmonks/a-brief-overview-of-kademlia-and-its-use-in-various-decentralized-platforms-da08a7f72b8f) 的修改版本,它使用[分散式雜湊資料表](https://en.wikipedia.org/wiki/Distributed_hash_table)來共用節點清單。 每個節點都有一個該資料表的版本,其中包含連線到其最近對等點所需的資訊。 這裏的「近」不是地理上的 - 距離是由節點 ID 的相似性來定義的。 每個節點的資料表都會定期刷新,作爲一種安全功能。 例如,在 [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) 中,發現協定節點也可以發送「ads」來展示用戶端支持的子協定,這允許對等點協調它們可以用於通訊的協定。 - -發現從 PING-PONG 游戲開始。 一個成功的 PING-PONG 將新節點「連結綁定」到一個引導節點。 通知引導節點有新節點進入網路的初始訊息為 `PING`。 此 `PING` 包括關於新節點、引導節點和過期時間戳的雜湊資訊。 引導節點接收 `PING` 並返回包含 `PING` 雜湊的 `PONG`。 如果 `PING` 和 `PONG` 的雜湊相吻合,新節點和引導節點之間的連線就會被驗證,然後它們就被認爲「已綁定連結」。 - -一旦綁定連結,新節點就可以向引導節點發送 `FIND-NEIGHBOURS` 請求。 引導節點返回的資料包含一個新節點可以連線的對等點清單。 如果節點沒有綁定連結,`FIND-NEIGHBOURS` 請求將會失敗,因而新節點將無法進入網路。 - -一旦新節點從引導節點收到鄰居清單,就會開始與每個鄰居節點進行 PING-PONG 交換。 成功的 PING-PONG 會將新節點與鄰居節點連結綁定,以實現訊息交換。 - -``` -start client --> connect to bootnode --> bond to bootnode --> find neighbours --> bond to neighbours -``` - -執行用戶端目前使用 [Discv4](https://github.com/ethereum/devp2p/blob/master/discv4.md) 發現協定,並且正在努力遷移到 [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) 協定。 - -#### ENR:以太坊節點記錄 {#enr} - -[以太坊節點記錄 (ENR)](/developers/docs/networking-layer/network-addresses/) 是一個包含 3 個基本元素的物件:一個簽名(根據某種商定同意的身分識別方案產生的記錄内容的雜湊),一個追蹤記錄變更的序列編號,以及一個鍵值配對的任意清單。 這是一種面向未來的格式,它使得新對等點之間身分識別資訊的交換更加容易,並且是以太坊節點偏好的[網路地址](/developers/docs/networking-layer/network-addresses)格式。 - -#### 爲什麽在使用者資料包通訊協定之上建置發現? {#why-udp} - -使用者資料包通訊協定不支持任何錯誤檢查、失敗資料包的重新發送,或者動態開啓和關閉連線 - 相反,它只是向目標發送連續的訊息流,無論是否被成功接收。 這種最少的功能產生的開銷也最少,使得這種連線非常快速。 對於發現來講,如果某個節點只希望使其他節點知道其存在,以便與某個對等點建立正式的連線,使用使用者資料包通訊協定就足夠了。 然而,對於網路堆疊的其餘部分,使用者資料包通訊協定並不適合。 節點之間的資訊交換是相當複雜的,並因此需要更多功能齊全的協定來支持重新發送、錯誤檢查等等。 與傳輸控制通訊協定相關的額外開銷相對其額外功能而言是值得的。 因此,大多數點對點堆疊在傳輸控制通訊協定上運作。 - -### DevP2P {#devp2p} - -DevP2P 本身是以太坊爲了建立和維護點對點網路而實作的一整套協定。 新節點進入網路之後,其互動由 [DevP2P](https://github.com/ethereum/devp2p)堆疊中的協定管理。 這些都建立於傳輸控制通訊協定之上,包括 RLPx 傳輸協定、綫路協定和一些子協定。 [RLPx](https://github.com/ethereum/devp2p/blob/master/rlpx.md) 是管理啓動、驗證和維護節點之間工作階段的協定 RLPx 使用 RLP(遞迴長度前綴)編碼訊息,這是一種將資料編碼為最小結構來在節點之間發送的方法,這種方法非常節省空間。 - -兩個節點之間的 RLPx 工作階段從初始加密握手開始。 這需要節點發送身份驗證訊息,然後對等點會進行驗證。 成功驗證後,對等點會生成驗證確認訊息,並將其返回初始節點。 這是一個密鈅交換程序,使節點能夠私密且安全地進行通訊。 成功的加密握手會觸發兩個節點「在綫上」互相發送「hello」訊息。 綫路協定透過成功交換 hello 訊息來發起。 - -hello 訊息包含: - -- 協定版本 -- 用戶端 ID -- 連接埠 -- 節點 ID -- 支援的子協定清單 - -這是成功互動所需的訊息,因爲它定義了在兩個節點之間共用的功能並配置了通訊。 有一個子協定協調的程序,其中會將每個節點支援的子協定清單進行比較,並能將兩個節點共用的子協定用於工作階段中。 - -除了「hello」訊息以外,綫路協定還可以發送「disconnect」訊息,該訊息警告對等點連線將會被關閉。 綫路協定還包含定期發送的 PING 和 PONG 訊息,以保持工作階段開放。 因此,RLPx 和綫路協定的交換為節點之間的通訊奠定了基礎,並為根據特定子協定交換的有用資訊提供了平台。 - -### 子協定 {#sub-protocols} - -#### 綫路協定 {#wire-protocol} - -一旦對等點連線並且 RLPx 工作階段啓動,綫路協定就會定義對等點的通訊方式。 一開始,綫路協定會定義三個主要任務:鏈同步、區塊傳播和交易交換。 然而,以太坊切換到權益證明後,區塊傳播和鏈同步變成了共識層的一部分。 但交易交換仍然由執行用戶端負責。 交易交換指的是節點之間交換等待處理的交易,以便區塊建置者能夠選擇其中一些放到下一個區塊中。 請在[此處](https://github.com/ethereum/devp2p/blob/master/caps/eth.md)查看有關這些任務的詳細資訊。 支持這些子協定的用戶端透過 [JSON-RPC](/developers/docs/apis/json-rpc/) 將自己公開。 - -#### les(輕量以太坊子協定) {#les} - -這是用於同步輕量級用戶端的最小協定。 傳統上,該協定很少被使用,因爲全節點需要在沒有激勵的情況下向輕用戶端提供資料。 執行用戶端的預設行爲不是透過 les 為輕量級用戶端提供服務。 請在 les [規範](https://github.com/ethereum/devp2p/blob/master/caps/les.md)中查看更多相關資訊。 - -#### 快照 {#snap} - -[快照協定](https://github.com/ethereum/devp2p/blob/master/caps/snap.md#ethereum-snapshot-protocol-snap)是一種可選的擴充功能,它使對等點能夠交換最近狀態的快照,從而無需下載默克爾樹的内部節點就能驗證帳戶及存儲資料。 - -#### Wit(見證協定) {#wit} - -[見證協定](https://github.com/ethereum/devp2p/blob/master/caps/wit.md#ethereum-witness-protocol-wit)是一種可選的擴充功能,使對等點之間能夠交換狀態見證,幫助用戶端與鏈前端同步。 - -#### Whisper {#whisper} - -Whisper 是一個旨在實現安全的點對點資訊傳輸,而不需要向區塊鏈寫入任何資訊的協定。 它曾是 DevP2P 綫路協定的一部分,但現在已經棄用。 其他[相關專案](https://wakunetwork.com/)也有類似目標。 - -## 共識層 {#consensus-layer} - -共識用戶端參與具有不同規範的單獨點對點網路。 共識用戶端需要參與區塊廣播,以便其能夠從對等點接受新區塊,並在輪到其成爲區塊提議者時廣播它們。 與執行層類似,這首先需要一個發現協定,一邊節點可以找到對等點並建立安全的工作階段來交換區塊、證明等。 - -### 發現 {#consensus-discovery} - -與執行用戶端類似,共識用戶端使用使用者資料包通訊協定上的 [discv5](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-discovery-domain-discv5) 尋找對等點。 discv5 的共識層實現與執行用戶端的區別僅在於,它包含一個將 discv5 連線到 [libP2P](https://libp2p.io/) 堆疊的適配器,棄用了 DevP2P。 執行層的 RLPx 工作階段被棄用,代之以 libP2P 的噪音安全通道握手。 - -### 以太坊節點記錄 {#consensus-enr} - -共識節點的以太坊節點記錄包括節點的公鑰、IP 地址、使用者資料包通訊協定和傳輸控制通訊協定連接埠,以及兩個共識特定欄位:證明子網路位元欄位和 `eth2` 金鑰。 前者使節點更容易找到參與特定證明廣播子網路的對等點。 `eth2` 金輪包含節點正在使用的以太坊分叉版本的資訊,以確保對等點連線到正確的以太坊。 - -### libP2P {#libp2p} - -libP2P 堆疊支持發現之後的所有通訊。 用戶端可以根據其以太坊節點記錄的定義在 IPv4 和/或 IPv6 上撥號和接聽。 libP2P 層上的協定可以細分爲廣播和請求/響應域。 - -### 廣播 {#gossip} - -廣播域包括必須在整個網路中快速傳播的所有資訊。 這包括信標區區塊、證據、證明、退出和罰沒。 這是使用 libP2P gossipsub v1 傳輸的,並且依賴於在每個節點本機儲存的各種中繼資料,包括接收和傳輸的廣播承載的上限。 請在[此處](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-gossip-domain-gossipsub)查看有關廣播域的詳細資訊。 - -### 請求-回應 {#request-response} - -請求-回應域包含用戶端從其對等點請求特定資訊的協定。 範例包括請求匹配某些根雜湊或在一定時隙範圍内的特定信標區塊。 回應始終以快速壓縮的簡單序列化編碼位元組形式傳回。 - -## 為什麼共識用戶端喜歡簡單序列化而非遞迴長度前置詞? {#ssz-vs-rlp} - -SSZ 代表簡單序列化。 它使用固定位移,能夠簡單地解碼編碼訊息的單獨部分,而無需解碼整個結構,這對於共識用戶端非常有用,因爲它可以高效地從編碼訊息中獲取特定資訊片段。 它還專門設計於與默克爾協定整合,並提升與默克爾化相關的效率。 由於共識層中的所有雜湊都是默克爾根,這會帶來顯著的改進。 簡單序列化也保證值的唯一表示。 - -## 連線執行用戶端和共識用戶端 {#connecting-clients} - -共識用戶端和執行用戶端平行運作。 它們需要彼此連線,以便共識用戶端向執行用戶端提供指示,並使執行用戶端能夠向執行用戶端傳送需要納入信標區塊的交易捆綁。 兩個用戶端之間的通訊可以透過本機遠端程序呼叫連線來實現。 名爲[「Engine-API」](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)的應用程式介面定義兩個用戶端之間發送的指示。 由於兩個用戶端共用一個網路身分,它們也共用一個 ENR(以太坊節點記錄),其中包含每個用戶端的單獨金鑰(eth1 金鑰和 eth2 金鑰)。 - -如下展示了控制流摘要,括號中是相關的網路堆疊。 - -### 當共識用戶端不是區塊生產者時: {#when-consensus-client-is-not-block-producer} - -- 共識用戶端透過區塊廣播協定(共識點對點)接收區塊 -- 共識用戶端預驗證區塊,即確保它來自具有正確中繼資料的有效發送者 -- 區塊中的交易作爲執行承載發送到執行層(本機遠端程序呼叫連線) -- 執行層執行交易並驗證區塊頭中的狀態(即檢查雜湊是否相符) -- 執行層將驗證資料傳送回共識層,區塊現在被認爲已驗證(本機遠端程序呼叫連線) -- 共識層將區塊添加到其區塊鏈頭並證明該區塊,透過網路廣播證明(共識點對點) - -### 當共識用戶端是區塊生產者時: {#when-consensus-client-is-block-producer} - -- 共識用戶端收到其將成爲下一個區塊生產者的通知(共識點對點) -- 共識層在執行用戶端調用 `create block` 方法(本機遠端程序呼叫) -- 執行層訪問已由交易廣播協定填充的交易内存池(執行點對點) -- 執行用戶端將交易捆綁進一個區塊,執行交易並產生一個區塊雜湊 -- 共識用戶端從執行用戶端獲取交易和區塊雜湊,並將其新增至信標區塊(本機遠端程序呼叫) -- 共識用戶端透過區塊廣播協定廣播區塊(共識點對點) -- 其他用戶端透過區塊廣播協定接收提議的區塊,並如上述進行驗證(共識點對點) - -一旦區塊被足夠多的驗證者證明后,就會被新增到鏈頭,經過合理化並最終確定。 - -![](cons_client_net_layer.png) ![](exe_client_net_layer.png) - -共識用戶端和執行用戶端的網路層示意圖,取自 [ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) - -## 衍生閱讀 {#further-reading} - -[DevP2P](https://github.com/ethereum/devp2p) [LibP2p](https://github.com/libp2p/specs) [共識層網路規範](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) [kademlia 到 discv5](https://vac.dev/kademlia-to-discv5) [kademlia 論文](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) [以太坊點對點簡介](https://p2p.paris/en/talks/intro-ethereum-networking/) [eth1/eth2 的關係](http://ethresear.ch/t/eth1-eth2-client-relationship/7248) [合併和 eth2 用戶端詳情影片](https://www.youtube.com/watch?v=zNIrIninMgg) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/network-addresses/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/network-addresses/index.md deleted file mode 100644 index 029dba3a0d2..00000000000 --- a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/network-addresses/index.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: 網路地址(Network addresses) -description: 網路地址簡介 -lang: zh-tw -sidebarDepth: 2 ---- - -以太坊節點必須使用一些基本資訊識別自身,以連接對等節點。 為了確保任何潛在對等節點都能解釋該資訊,需要使用任何以太網節點都能理解的三種標準化格式中的一種進行轉送:Multiaddr、Enode 或以太坊節點記錄 (ENR)。 以太坊節點紀錄 (ENR) 是目前的以太坊網路地址標準。 - -## 先備知識 {#prerequisites} - -要理解本頁內容,需具備一些以太坊[網路層](/developers/docs/networking-layer/)的基本知識。 - -## Multiaddr {#multiaddr} - -原始以太坊節點地址的格式為「multiaddr」(簡稱「多重地址」)。 Multiaddr 是為點對點網絡設計的通用格式。 這些地址利用鍵值配對表示,其中的鍵與值以斜線分隔。 例如,對於一個 IPv4 地址為 `192.168.22.27`、監聽傳輸控制通訊協定 (TCP) 連接埠 `33000` 的節點,其 Multiaddr 可以表示為: - -`/ip4/192.168.22.27/tcp/33000` - -若以太坊節點為例,含有節點 ID(其公鑰的雜湊值)的 Multiaddr 可以表示為: - -`/ip4/192.168.22.27/tcp/33000/p2p/5t7Nv7dG2d6ffbvAiewVsEwWweU3LdebSqX2y1bPrW8br` - -## Enode {#enode} - -Enode 使得以太坊節點可以用統一資源定位器地址格式識別。 在統一資源定位器的使用者名稱部分編碼十六進位的節點 ID,並使用 @ 將其與主機名稱分開。 主機名稱只能使用 IP 地址表示;不能使用網域名稱服務名稱。 主機名稱部分的連接埠是傳輸控制通訊協定 (TCP) 監聽連接埠。 如果傳輸控制通訊協定 (TCP) 與使用者資料包通訊協定 (UDP) 連接埠不同,則使用者資料包通訊協定 (UDP) 連接埠必須宣告為查詢參數「discport」。 - -下述範例中,節點統一資源定位器由 IP 地址 `10.3.58.6`、傳輸控制通訊協定 (TCP) 連接埠 `30303` 以及使用者資料包通訊協定 (UDP) 探索連接埠 `30301` 組成。 - -`enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301` - -## 以太坊節點紀錄 (ENR) {#enr} - -以太坊節點紀錄 (ENR) 是目前以太坊網路地址的標準化格式。 它取代了 Multiaddr 與 Encode 格式, 並允許節點間更大量的資訊交換,這一點尤其有用。 以太坊節點紀錄包含簽章、序列編號和多個欄位,這些欄位詳細說明用於產生和驗證簽章的身分識別方案。 以太坊節點紀錄也可以填入任意組織為鍵值配對形式的資料。 這些鍵值配對包含節點的 IP 地址以及節點能使用的子通訊協定相關資訊。 共識用戶端使用一種[特定的以太坊節點記錄結構](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure)來識別引導節點,並且也包含一個 `eth2` 欄位,其中包含有關目前以太坊分叉和證明八卦子網路(該子網路將節點連線到一組已將其證明彙總到一起的特定對等方)的資訊。 - -## 衍生閱讀 {#further-reading} - -[EIP-778:以太坊節點記錄 (ENR)](https://eips.ethereum.org/EIPS/eip-778)
[以太坊中的網路地址](https://dean.eigenmann.me/blog/2020/01/21/network-addresses-in-ethereum/)
[LibP2P:Multiaddr-Enode-ENR?!](https://consensys.net/diligence/blog/2020/09/libp2p-multiaddr-enode-enr/) diff --git a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/portal-network/index.md b/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/portal-network/index.md deleted file mode 100644 index b8ed30ab824..00000000000 --- a/public/content/translations/zh-tw/25) Research Documentation/developers/docs/networking-layer/portal-network/index.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: 入口網路 -description: 入口網路概覽 - 一個開發中的網路,設計用來支援資源匱乏的客戶端。 -lang: zh-tw ---- - -以太坊是一個由執行以太坊用戶端軟體的電腦所構成的網路。 每一台這類的電腦就是一個所謂的「節點」。 用戶端軟體允許一個節點在以太坊網路上傳送和接收資料,和對照以太坊協定規則驗證資料。 節點保存了許多歷史資料在它們的磁碟存儲裝置裏,並在它們從網路上的其他節點接收到新的封包訊息(又稱區塊)時新增到其中。 有必要經常確認節點擁有的資訊與網路其餘節點的資訊是否一致。 這意味著經營一個節點需要大量的磁碟空間。 某些節點的運作也可能需要大量的隨機存取記憶體。 - -為規避磁碟儲存問題,可向全節點要求資訊而不是儲存所有資料在節點本身的「輕量級」節點已經被開發出來了。 然而,這意味著輕量級節點不會獨立驗證資訊,而是信任另一個節點。 這也意味著全節點需要承擔額外的工作來服務這些輕量級節點。 - -入口網路是為以太坊開發的新型網路設計。藉由以小塊方式在整個網路分享必要性的資料,輕量級節點不需要信任或增加全節點負擔的方式,解決資料可用性問題。 - -更多資訊請參閱[節點和用戶端](/developers/docs/nodes-and-clients/) - -## 為什麼我們需要入口網路 {#why-do-we-need-portal-network} - -以太坊節點儲存以太坊區塊鏈的全部或部分複製資料。 這些區域性的複本被用來驗證交易和確保節點沿著正確的區塊鏈行進。 在區域儲存資料使節點能夠獨立驗證進來的資料有效和正確與否,不需要依賴任何其他實體。 - -區塊鏈以及相關狀態和收據資料的區域複本佔據節點硬碟相當大的空間。 例如:使用 [Geth](https://geth.ethereum.org) 搭配共識用戶端來經營一個節點,建議要有 2TB 的硬碟。 使用只儲存比較近期的區塊組的鏈資料的快照同步,Geth 通常佔用約 650GB 的磁碟空間,但以約 14GB/周在成長(你可以定期向下修整節點至 650GB)。 - -這意味著經營節點的成本是很高的,因為以太坊需要大量的專用磁碟空間。 在以太坊開發藍圖上對這個問題有若干解決方法,包括[歷史有效期限](/roadmap/statelessness/#history-expiry)、[狀態有效期限](/roadmap/statelessness/#state-expiry)和[無狀態](/roadmap/statelessness/)。 然而,這可能要若干年後才有可能實行。 還有不必保存自己的鏈上資料複本的[輕量級節點](/developers/docs/nodes-and-clients/light-clients/),它們需要向全節點請求資料。 然而,這意味著輕量級節點必須信任全節點會提供真實的資料,並且強調全節點必須提供輕量級節點需要的資料。 - -入口網路旨在提供一種替代方法,使輕量級節點能夠獲取它們的資料,而無需信任或顯著增加全節點必須完成的工作。 讓整個網路上的以太坊節點可以分享資料,需要引入新的方法。 - -## 入口網路如何運作? {#how-does-portal-network-work} - -以太坊節點有嚴格的協定來定義它們如何相互通訊。 執行用戶端使用一組稱為 [DevP2P](/developers/docs/networking-layer/#devp2p) 的子協定通訊,而共識用戶端則使用一組不同的被稱為 [libP2P](/developers/docs/networking-layer/#libp2p) 的子協定。 它們定義了可以在節點之間傳遞的資料類型。 - -![devP2P 和 libP2P](portal-network-devp2p-libp2p.png) - -節點可以經由 [JSON-RPC 應用程式介面](/developers/docs/apis/json-rpc/)提供特定資料,這是應用程式和電子錢包與以太坊節點交換資訊的方式。 然而,這些都不是用來提供資料給輕量級用戶端的理想協定。 - -輕量級用戶端目前無法透過 DevP2P 或 libP2p 請求具體的鏈資料,因爲那些協定只被設計來實現鏈同步和廣播區塊與交易。 輕量級用戶端不想下載這些資訊,因為這樣它們將不再是「輕量」的。 - -JSON-RPC 應用程式介面也不是輕量級用戶端資料請求的理想選擇,因爲它依賴於與能夠提供資料的特定全節點或中心化遠端程序呼叫提供者的連線。 這意味著輕量級用戶端必須信任特定節點/提供者是誠實的,並且該全節點可能也必須處理來自許多輕量級用戶端的大量請求,這增加了其帶寬要求。 - -入口網路的重點在於重新思考整個設計,專門為輕便而建立,不受現有以太坊用戶端的設計限制。 - -入口網路的核心思想是使用[分散式雜湊資料表](https://en.wikipedia.org/wiki/Distributed_hash_table)(類似於 Bittorrent),透過輕量 DevP2P 式的點對點去中心化網絡啓用輕量級用戶端所需的資訊,例如歷史資料和目前鏈頭的身份,從而充分利用目前網路堆棧的最佳部分。 - -這個概念是新增小部分的以太坊全體歷史資料和一些特定節點責任到每一個節點。 然後,尋找儲存所請求特定資料的節點,擷取這些資料,將資料提供給請求。 - -這倒轉了輕量級節點尋找單獨節點、要求過濾和提供大量資料的正規模式,取而代之的是迅速過濾分別負責小量資料的大量網路節點。 - -目標是讓輕量級入口用戶端的去中心化網路能夠: - -- 追蹤鏈頭 -- 同步近期和歷史鏈資料 -- 擷取狀態資料 -- 廣播交易 -- 使用[以太坊虛擬機](/developers/docs/evm/)執行交易 - -這個網路設計的優勢是: - -- 降低對中心化提供者的依存 -- 降低網際網路頻寬的使用 -- 同步處理減到最少或零 -- 可存取資源有限的裝置(<1 GB RAM,<100 MB 磁碟空間,1 個 CPU) - -下圖顯示可由入口網路提供的現存用戶端功能,如此讓使用者能在低資源裝置上存取這些功能。 - -![入口網路資料表](portal-network-table2.png) - -## 預設的用戶端多樣性 {#client-diversity-as-default} - -入口網路開發者最初也決定建立三種不同的入口網路用戶端設計。 - -入口網路用戶端如下: - -- [Trin](https://github.com/ethereum/trin):以 Rust 編寫 -- [Fluffy](https://nimbus.team/docs/fluffy.html):以 Nim 編寫 -- [Ultralight](https://github.com/ethereumjs/ultralight):以 Typescript 編寫 -- [Shisui](https://github.com/GrapeBaBa/shisui):以 Go 編寫 - -有多個獨立用戶端安裝啟用,增強了以太坊網路的回復力和去中心化。 - -假如一個用戶端遭受問題或漏洞,其他用戶端能繼續順暢運作,可以防止單點失靈。 此外,多樣化的用戶端安裝啟用能促進創新和競爭,驅使改善,和降低在這生態系統的單一文化風險。 - -## 了解更多 {#futher-reading} - -- [入口網路(Piper Merriam 在 Bogota 舉辦的 Devcon 大會)](https://www.youtube.com/watch?v=0stc9jnQLXA)。 -- [入口網路 discord](https://discord.gg/CFFnmE7Hbs) -- [入口網路網站](https://www.ethportal.net/) diff --git a/public/content/translations/zh-tw/26) Miscellaneous/about/index.md b/public/content/translations/zh-tw/26) Miscellaneous/about/index.md deleted file mode 100644 index c078a882609..00000000000 --- a/public/content/translations/zh-tw/26) Miscellaneous/about/index.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: 關於我們 -description: 有關 ethereum.org 的團隊,社群以及目標 -lang: zh-tw ---- - -# 關於 ethereum.org {#about-ethereumorg} - -ethereum.org 是一個屬於以太坊社群的開放原始碼資源,所有人都可貢獻一己之力。 我們有一個小型核心團隊致力於維護和開發網站,也有全球數千名社群成員做出貢獻。 - -## 有關名字的說明 {#a-note-on-names} - -人們常常混淆以太坊領域的名稱,這可能會導致人們難以理解以太坊的運作方式。 這裡有簡明解釋作釐清: - -### 以太坊 {#ethereum} - -以太坊是一個公共網路、區塊鏈和開放原始碼協議 — 由數以萬計的開發者、節點營運者、以太幣持有者和使用者運營、治理、管理和擁有組成的全球社群。 - -[有關以太坊的更多資訊](/what-is-ethereum/) - -[有關以太坊治理的更多資訊](/governance/) - -### 以太幣 (ETH) {#ether-or-eth} - -以太幣(其代碼也稱為 ETH)是在以太坊上交易的原生貨幣。 使用以太坊網路需要 ETH 來支付費用(以交易費的形式)。 透過質押 ETH,也可用於保護以太坊網路安全。 當人們談論以太坊的價格時,他們指的是 ETH 這種資產。 - -[有關以太幣的更多資訊](/eth/) - -[有關質押以太幣的更多資訊](/staking/) - -### 以太坊基金會 {#ethereum-foundation} - -最初由 ETH 眾籌融資的非營利組織,致力於支持以太坊網路和生態系統。 - -[有關以太坊基金會的更多資訊](/foundation/) - -### ethereum.org {#ethereum-org} - -為以太坊社群提供的開放原始碼網站和教育資源。 ethereum.org 由以太坊基金會資助的一個小型核心團隊領導,並得到全球數千名社群成員做出貢獻。 - -此頁面涵蓋有關 ethereum.org 的更多資訊。 - -## 我們的使命 {#our-mission} - -**ethereum.org 的使命是成為日益增長的以太坊社群的最佳入口網站。** - -為了幫助新的使用者熟悉以太坊與它的核心概念,我們努力打造一個淺顯易懂的教育資源,涵蓋所有與以太坊有關的主題。 我們希望: - -- 向新人介紹以太坊這個新科技 -- 幫助新成員著手使用 ETH 和以太坊 -- 幫助新的開發者起步 -- 報導以太坊世界的新聞 -- 展示我們的社群所創造的資源 -- 儘可能用多種語言散佈以太坊的相關知識 - -欲達成此使命,我們的團隊著重於 ethereum.org 的兩個主要目標: - -### 1. 改善 ethereum.org 的使用者體驗 {#visitors} - -- 延伸、改善及持續更新內容 -- 透過本地化和網路開發最佳案例來改善可用性和可存取性 -- 透過調查、測驗和 Web3 整合來提升使用者的參與度 -- 保持網站輕量與高效 - -### 2. 賦權貢獻者社群並使其成長與茁壯 {#community} - -- 增加網站貢獻者的總數 -- 透過參與、致謝和酬勞提高貢獻者的留存率。 -- 賦權社群成員,使他們做出越來越重要的貢獻 -- 促進貢獻的多樣性:程式碼、内容、設計、翻譯、修改 -- 持續更新程式庫,使其保持簡潔並有據可查 - -## 核心原則 {#core-principles} - -我們踐行一些核心原則,幫助並引導我們完成使命。 - -### 1. ethereum.org 是以太坊的入口網站 🌏 {#core-principles-1} - -我們想要激發使用者的興趣和解答他們的問題。 所以我們的入口網站要組合信息與「芝麻開門的時刻」以及現有的社區內傑出資源的鏈結。 我們的目的不是成為大量已有資源的替代品,而是作爲一個「新手教學」內容。 我們致力於支持與整合社群所建的資源,讓更多人發現和看到他們。 [以太坊的社群](/community/)便處於這一切的中心,我們不只是為之服務,更要與他們協作並納入其意見回饋。 這個網站不只是屬於現有社群,它更是屬於我們希望將來歡迎的新成員。 我們必須銘記,我們的社群是國際化的,包含著來自不同語言、地區和文化的人。 - -### 2. ethereum.org 不停演進 🛠 {#core-principles-2} - -以太坊及其社群也在不斷演進, 所以 ethereum.org 也是。 這也正造就了這個網站的簡單設計與模組化結構。 我們依據人們的使用習慣和社群的需求反覆對網站做出改變。 我們開放原始碼平台擁有著一群卓越的貢獻者,因此任何人都可以提出改變或者提供協助。 [了解如何貢獻](/contributing/) - -### 3. ethereum.org 不是典型的產品網站 🦄 {#core-principles-3} - -以太坊是一個非常大的專案:它囊括了一個社群,一種科技,一套全新的理念等。 這意味著網站需要處理許多不同的使用者旅程,從「需要特定工具的開發者」到「剛購買了一些以太幣但不知道錢包是什麽的新手」。 「什麼才是當之無愧的區塊鏈最佳平台?」一直都是個尋求解答的問題——我們便是先趨。 付諸實踐才能看到答案。 - -## 產品開發藍圖 {#roadmap} - -爲了使我們的工作更加易於存取,並促進更多社群合作,ethereum.org 核心團隊發佈了一份季度開發藍圖目標的概述。 - -[查看我們的 2024 年第三季產品開發藍圖](https://github.com/ethereum/ethereum-org-website/issues/13399) - -**這聽起來怎麽樣?**我們始終感謝對我們開發藍圖提出的意見回饋——如果你認爲我們有某些方面需要改善,請告訴我們! 我們歡迎來自社群中任何人的想法和提取請求。 - -**想要參與?**[瞭解更多有關貢獻的資訊](/contributing/),[在 X(前身為 Twitter)上聯係我們](https://twitter.com/ethdotorg),或者加入我們在 [ Discord 服務器](https://discord.gg/ethereum-org)上的社群討論。 - -## 設計理念 {#design-principles} - -我們利用一組重要[設計原則](/contributing/design-principles/)來指引這個網站的內容創作及決策。 - -## 設計系統 {#design-system} - -我們構建並發佈了一個[設計系統](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System?node-id=0%3A1&t=QBt9RkhpPqzE3Aa6-1),以加快功能上綫的速度,並讓社群成員參與 ethereum.org 的開放設計。 - -想要參與?[在 Figma 中追隨 ](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System) [GitHub 問題](https://github.com/ethereum/ethereum-org-website/issues/6284) 並加入我們在 [#design Discord 頻道](https://discord.gg/ethereum-org)中的討論。 - -## 設計指南 {#style-guide} - -我們有一個[設計指南](/contributing/style-guide/)來標準化某方面的寫作內容,以使貢獻過程更加暢順。 - -如果你想[為網站做出貢獻](/contributing/),請確認你已閱讀[我們的原則](/contributing/design-principles/)和[我們的設計指南](/contributing/style-guide/)。 - -歡迎對我們的設計原則、設計系統和設計指南提供意見回饋。 請記住,ethereum.org 來自社群,服務社群。 - -## 證照 {#license} - -除非另有説明,ethereum.org 是一個開放原始碼網站,並基於[ MIT 證照](https://github.com/ethereum/ethereum-org-website/blob/dev/LICENSE)構建。 更多有關 ethereum.org [使用條款](/terms-of-use/)的資訊。 - -## 空缺職位 {#open-jobs} - -雖然此為開放原始碼網站且任何人能在此自由貢獻,我們依舊需要一熱誠工作團隊致力於 ethereum.org 及其他以太坊基金會網頁專案。 - -我們將公告任何開放職位於此。 如果您找不到適合的職位,請移駕至[我們的 Discord 伺服器](https://discord.gg/ethereum-org)並讓我們知道你想加入我們! - -想加入 ethereum.org 團隊嗎? [歡迎查看其他以太坊相連職位](/community/get-involved/#ethereum-jobs/)。 diff --git a/public/content/translations/zh-tw/26) Miscellaneous/enterprise/index.md b/public/content/translations/zh-tw/26) Miscellaneous/enterprise/index.md deleted file mode 100644 index 0a31a3da2e3..00000000000 --- a/public/content/translations/zh-tw/26) Miscellaneous/enterprise/index.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: 以太坊主網上的企業 -description: 有關公共以太坊區塊鏈上的企業應用程式的指南、文章和工具 -lang: zh-tw ---- - -# 企業級以太坊 {#ethereum-for-enterprise} - -以太坊可以幫助包括大公司在內的多種企業: - -- 增加企業各方之間的信任並降低協調成本 -- 提高企業網路問責性和營運效率 -- 建立新的商業模式和價值創造的機會 -- 提高企業組織的未來競爭性 - -早些年前,許多企業區塊鏈應用程式都是建構在私有權限的以太坊相容區塊鏈或聯盟鏈上。 如今,得益於技術進步帶來的更高吞吐量、更低的交易成本以及隱私保護,大多數使用以太坊技術的企業應用程式都是在公共以太坊主網或[二層網路](/layer-2)鏈上構建的。 - - -## 資源 {#enterprise-resources} - -### 了解更多 {#further-reading} - -用於了解企業如何從以太坊受益的非技術資源 - -- [為什麼區塊鏈對商業有益?](https://entethalliance.org/why-are-blockchains-useful-for-business/) - _從可預測性的角度討論區塊鏈的價值_ -- [企業以太坊聯盟 2023 年商業準備報告](https://entethalliance.org/eea-ethereum-business-readiness-report-2023/) - _調查了公共以太坊和更廣泛的企業以太坊生態系統的潛力和能力_ -- [_《以太坊商業》_ 作者 Paul Brody](https://www.uapress.com/product/ethereum-for-business/) - _一本簡單易懂的英文用例指南,内容包括從資產管理、支付以及供應鏈獲取回報_ - -### 組織 {#organizations} - -一些組織已經通力合作讓以太坊更適合企業使用 - -- [企業以太坊聯盟 (EEA)](https://entethalliance.org/) - 幫助組織在日常業務運營中採用以太坊技術。 其目標是通過專業和商業支持、倡導和研究、標準開發以及生態系統信任服務,加速企業以太坊的發展。 -- [全球區塊鏈商業委員會 (GBBC)](https://www.gbbc.io/)——區塊鏈技術生態系統的行業協會。 通過與政策制定者和監管機構的互動、策劃活動和深入討論,以及推動研究,全球區塊鏈商業委員會致力於推動區塊鏈的進一步採用,以創建更安全、公平和功能更強的社會。 - - -## 企業開發者資源 {#enterprise-developer-resources} - -### 產品和服務 {#products-and-services} - -- [4EVERLAND](https://www.4everland.org/) - _提供應用程式介面、遠端程序呼叫服務和工具,用於託管去中心化應用程式並在以太坊上啟用去中心化存儲_ -- [Alchemy](https://www.alchemy.com/) - _提供應用程式介面服務和工具,用於在以太坊上建立和監控應用程式_ -- [Blast](https://blastapi.io/) - _一個應用程式介面平台,為以太坊歸檔主網和測試網 提供 RPC/WSS 應用程式介面。_ -- [Blockapps](https://blockapps.net/) - _構成 STRATO 平台的企業以太坊協議、工具和應用程式介面的實作_ -- [Chainstack](https://chainstack.com/) - _主網和測試網以太坊基礎結構,託管在公共隔離的客戶雲端中_ -- [ConsenSys](https://consensys.io/) - _提供一系列用於在以太坊上構建的產品和工具,以及諮詢和定制開發服務_ -- [Crossmint](http://crossmint.com/) _企業級 web3 開發平台,用於部署智慧型合約,支援信用卡和跨鏈支付,並使用應用程式介面來建立、分發、銷售、儲存和編輯非同質化代幣。_ -- [Envision Blockchain](https://envisionblockchain.com/) - _提供專門針對以太坊主網的企業級諮詢和開發服務_ -- [EY OpsChain](https://blockchain.ey.com/products/contract-manager) - _透過在你值得信賴的業務合作夥伴網路中發出報價請求、合約、採購訂單和發票來提供採購工作流程_ -- [Hyperledger Besu](https://www.hyperledger.org/use/besu) - _一個以企業為中心的開放原始碼以太坊用戶端,在 Apache 2.0 許可下開發並用 Java 編寫_ -- [Infura](https://infura.io/) - _對以太坊和星際檔案系統網路的可擴展應用程式介面存取_ -- [Kaleido](https://kaleido.io/) - _以企業為中心的開發平台,提供簡化的區塊鏈和數位資產應用程式_ -- [NodeReal](https://nodereal.io/) - _為 Web3 生態系統提供可擴展的區塊鏈基礎結構和應用程式介面服務供應商_ -- [Moralis](http://moralis.io/) - _具備 SOC2 第 2 類認證的企業級應用程式介面與節點_ -- [Provide](https://provide.services/) - _企業零知識中介軟體_ -- [QuickNode](https://www.quicknode.com/) - _提供可靠、快速的節點以及 NFT API、Token API 等高階應用程式介面,同時提供統一的產品套件和企業級解決方案_ -- [Tenderly](https://tenderly.co) - _一個 Web3 開發平台,為開發、測試、監控和操作智慧型合約提供偵錯、可觀察性和基礎結構構建塊_ -- [Unibright](https://unibright.io/) - _一支由區塊鏈專家、架構師、開發者和顧問組成的團隊,擁有 20 多年的業務流程與整合經驗_ -- [Zeeve](https://www.zeeve.io/) - _提供一系列用於在以太坊上構建的產品和工具,以及用於企業 Web3 應用程式的基礎結構和應用程式介面。_ - -### 工具及程式庫 {#tooling-and-libraries} - -- [Baseline 專案](https://www.baseline-protocol.org/) - _Baseline 協議是一組工具和程式庫,協助企業在隱私的情況下協調複雜的多方業務流程和工作流程,同時將資料保存在各自的記錄系統中。 此標準使兩個或多個狀態機器,透過使用網路作為公共參考框架,來實現和維護資料一致性和工作流程連續性。_ -- [Chainlens](https://www.chainlens.com/) - _來自 Web3 實驗室的質押即服務和本地區塊鏈數據及分析平台_ -- [Ernst & Young's 'Nightfall'](https://github.com/EYBlockchain/nightfall_3) - _使用樂觀卷軸的應用程式,在零知識下轉移 ERC20、ERC721 和 ERC1155 應用程式_ -- [Truffle 套件](https://trufflesuite.com) - _區塊鏈開發套件(Truffle、Ganache、Drizzle)_ - -### 可擴展性解決方案 {#scalability-solutions} - -大多數新的區塊鏈應用程式都建構在[二層網路](/layer-2)鏈上。 二層網路是一組運行在以太坊(一層網路)之上的技術或系統,繼承了一層網路的安全性,並提供比一層網路更大的交易處理能力(吞吐量)、更低的交易費用(運營成本),以及更快的交易確認速度。 二層網路擴展解決方案由一層網路保護,但它們使區塊鏈應用程式能夠處理比一層網路所能容納的更多的使用者、操作或資料。 其中許多利用密碼學和零知識 (ZK) 證明的最新進展,來最大限度地提高效能和安全性,有些還提供額外的隱私等級。 - -## 以太坊主網上運行的企業應用程式 {#enterprise-live-on-mainnet} - -以下是一些由傳統、非區塊鏈公司在公共以太坊主網和二層網路之上構建的企業應用程式。 - -### 付款 {#payments} - -- [Brave Browser](https://basicattentiontoken.org/) - _向使用者支付對廣告的關注,並且用戶可以透過 Basic Attention 代幣向發布商付費以支持他們_ -- [瑞士盧加諾市](https://bitcoinsuisse.com/news/city-of-lugano-accepts-crypto-payments) - _繳稅和其他市政服務_ -- [EthereumAds](https://ethereumads.com/) - _讓網站經營者出售廣告空間並透過以太坊獲得報酬_ -- [hCaptcha](https://www.hcaptcha.com/) - _預防機器人的驗證碼系統,根據使用者為機器學習標記資料所做的工作向網站營運商付費。 目前由 Cloudflare 部署_ -- [Opera MiniPay](https://www.opera.com/products/minipay) - _讓擁有非託管錢包的非洲人更容易、更安全地使用行動支付,並利用電話號碼輕鬆交易_ -- [Roxpay](https://www.roxpay.ch/) - _自動執行按使用付費的資產發票和付款_ -- [SAP 數位貨幣中心](https://community.sap.com/t5/technology-blogs-by-sap/cross-border-payments-made-easy-with-digital-money-experience-the-future/ba-p/13560384) - _穩定幣跨境支付_ -- [Toku](https://www.toku.com/) - _薪資單、代幣授予管理、稅務合規、當地就業、福利和分散式人力資源解決方案_ -- [Xerof](https://www.xerof.com/) - _促進快速且廉價的國際(跨境)企業對企業支付_ - -### 金融 {#finance} - -- [荷蘭銀行](https://tokeny.com/tokeny-fuels-abn-amro-bank-in-tokenizing-green-bonds-on-polygon/) - _使用 Tokeny、代幣化綠色債券_ -- [Crowdz](https://crowdz.io/) - _發票/應收帳款融資和保理平台_ -- [Mata Capital](https://consensys.io/blockchain-use-cases/finance/mata-capital) - _房地產投資代幣化_ -- [Obligate](https://www.obligate.com/) - _受監管且經過 KYC 的鏈上債券和商業票據_ -- [西門子](https://press.siemens.com/global/en/pressrelease/siemens-issues-first-digital-bond-blockchain) - _債券發行_ -- [Sila](https://silamoney.com/) - _使用穩定幣的銀行和代收代付業務之基礎設施即服務_ -- [法國興業銀行 FORGE](https://www.sgforge.com/product/bonds/) - _債券發行_ -- [Taurus](https://www.taurushq.com/) - _發行代幣化證券_ - -### 資產代幣化 {#tokenization} - -- [AgroToken](https://agrotoken.io/en/) - _農產品代幣化與交易_ -- [Bitbond](https://www.bitbond.com/) - _透過代幣化改善金融資產的發行、結算和託管_ -- [Blocksquare](https://blocksquare.io/) - _房地產代幣化基礎設施_ -- [Centrifuge](https://centrifuge.io/) - _代幣化應收帳款融資、債務和資產_ -- [Clearmatics](https://www.clearmatics.com) - _為代幣化價值的點對點交換建構去中心化網路平台_ -- [dClimate](https://www.dclimate.net/) - _去中心化氣候資訊生態系統_ -- [Fabrica](https://www.fabrica.land/) - _用於數位化房地產資產、支援去中心化金融借貸和房地產交易的平台_ -- [Fasset](https://www.fasset.com/) - _支援永續基礎設施的平台_ -- [Nori](https://nori.com/) - _開源市場基礎設施​​,讓碳清除專案衡量其活動並從中賺取利潤_ -- [Propy](https://propy.com/) - _透過智慧型合約實現住宅房地產交易自動化的平台_ -- [RealT](https://realt.co/) - _全球各地的投資者可以透過完全合規、分級和代幣化所有權在美國房地產市場上購買物業_ -- [Ruby](https://www.rubey.be/) - _一個將高端藝術品代幣化以供零售投資者使用的平台_ -- [Swarm](https://swarm.com/) - _一個專注於以合規方式實現真實世界資產數位化和交易的平台_ -- [Thallo](https://www.thallo.io/) - _將數位碳信用融入商業交易的平台_ -- [Tokenchampions](https://tokenchampions.com/) - _代幣化歐洲足球員的肖像權_ - -### 數據公證 {#notarization-of-data} - -- [ANSA](https://www.ansa.it/english/news/science_tecnology/2020/04/06/ansa-using-blockchain-to-help-readers_af820b4f-0947-439b-843e-52e114f53318.html) - _義大利通訊社,它打擊假新聞並使讀者能夠透過將新聞報導記錄在主網上來驗證新聞報導的來源_ -- [Breitling](https://www.coindesk.com/breitling-arianee-all-new-watches-ethereum) - _在以太坊上記錄手錶的出處和維修歷史_ -- [BRØK](https://www.xn--brk-1na.no/) - _挪威政府為公眾非上市公司提供的股權結構表平台_ -- [Certifaction](https://certifaction.com/) - _具有隱私設計的合法有效電子簽名_ -- [EthSign](https://ethsign.xyz/) - _在以太坊區塊鏈上記錄簽名的電子文檔_ -- [Stacktical](https://stacktical.com/) - _透過本地代管功能實現服務等級協定 (SLA) 的軟體開發、數位發行和數位簽名_ -- [Verizon](https://decrypt.co/46745/verizon-news-press-releases-ethereum-full-transparency) - _在以太坊上記錄新聞稿,以確保企業責任和信任_ -- [WolfTown](https://www.mef.net/edge-view-blog/automated-secure-timely-sla-reporting-is-finally-a-reality/) - _ 屬於 MEF 與 Sage Management,自動執行電信業者之間的服務等級協定報告_ - -### 供應鏈 {#supply-chain} - -- [Birra Peroni](https://www.ey.com/en_gl/news/2021/05/birra-peroni-is-the-first-industrial-organization-to-mint-unique-non-fungible-tokens-using-ey-opschain-traceability) _為每批新啤酒鑄造非同質化代幣,從而提高整個供應鏈的可見度和效率_ -- [CargoX](https://cargox.io/) - _用於運輸的電子提單和文件傳輸提供者_ -- [Circularize](https://www.circularise.com/) - _產品原料的端到端可追溯性解決方案_ -- [EY OpsChain 合約管理器](https://blockchain.ey.com/products/contract-manager) - _透過業務夥伴網路發出詢價、合約、採購訂單和發票,使公司能夠參與採購工作流程_ -- [Minespider](https://www.minespider.com/) - _供應鏈追蹤和來源監測,以及二氧化碳排放追蹤_ -- [Morpheus.network](https://morpheus.network/) - _供應鏈自動化平台_ -- [StaTwig](https://statwig.com/) - _供應鏈營運_ -- [TradeTrust](https://www.tradetrust.io/) - _驗證國際運輸的電子提單 (eBL)_ -- [Transmute](https://transmute.industries/) - _全球貿易資料交換平台;支援以太坊上使用去中心化身分的交易_ - -### 保險 {#insurance} - -- [Arbol](https://www.arbolmarket.com/) - _涵蓋天氣相關風險的參數型保險_ -- [Etherisc](https://etherisc.com/) - _針對各種風險的去中心化保險_ -- [Nayms](https://www.nayms.com/) - _使用 AON 構建的數位空間,用於創建保險計劃、籌集和交易資本、風險記錄以及保費和索賠交易的支付方式_ - -### 身分、憑證和認證 {#credentials} - -- [BCdiploma](https://www.bcdiploma.com/) - _數位化並驗證文憑、證書和微型認證_ -- [Hyland Credentials](https://www.hylandcredentials.com) - _數位文憑和其他教育認證、執照和證書_ -- [帛琉數位居留計劃](https://rns.id/) - _讓全球公民能夠擁有帛琉政府頒發的合法身分證_ -- [Spherity](https://www.spherity.com/) - _提供數位身分管理解決方案,以在生態系統中建立數位信任,專注於去中心化身分和可驗證的憑證_ -- [Zug Digital ID](https://ezug.ch/en/) - _是瑞士基於區塊鏈的身份系統,為居民提供對政府服務的數位存取和支援功能,例​​如租借電動自行車和市政投票_ - -### 娛樂、非同質化代幣、忠誠度 - -- [Adidas Virtual Gear](https://www.adidas.com/metaverse) - _虛擬裝備非同質化代幣收藏_ -- [大英博物館的沙盒](https://decrypt.co/150405/british-museum-enter-metaverse-via-sandbox) - _非同質化代幣收藏_ -- [Fruitlab](https://fruitlab.com/) - _遊戲玩家透過觀看、分享和玩線上遊戲來賺錢的平台_ -- [Nike Swoosh](https://www.swoosh.nike/) - _非同質化代幣平台_ -- [Sothbebys Metaverse](https://metaverse.sothebys.com/) - _蘇富比的數位藝術非同質化代幣市場_ - -如你願意添增至此清單,請查看[貢獻方案程序簡介](/contributing/)。 diff --git a/public/content/translations/zh-tw/26) Miscellaneous/enterprise/private-ethereum/index.md b/public/content/translations/zh-tw/26) Miscellaneous/enterprise/private-ethereum/index.md deleted file mode 100644 index 86a75fafd73..00000000000 --- a/public/content/translations/zh-tw/26) Miscellaneous/enterprise/private-ethereum/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: 企業級私有以太坊 -description: 有關私有以太坊區塊鏈上的企業應用程式的資源。 -lang: zh-tw ---- - -# 企業級私有以太坊 {#private-ethereum-for-enterprise} - -企業區塊鏈應用程式可以建立在公共且無需許可的以太坊主網上,或者依據以太坊技術研發的私有區塊鏈之上。 有關在公有以太坊主網上建立應有程式的更多資訊,請見[企業級以太坊主網](/enterprise/)。 - -## 私有企業用以太坊開發者資源 {#developer-resources-private-enterprise-ethereum} - -### 組織 {#organisations} - -透過不同組織間的共同努力以及合作,以太坊對於企業來說更加友善: - -- [企業以太坊聯盟](https://entethalliance.org/) EEA 幫助組織在日常業務運營中採用以太坊技術。 我們深耕以太坊生態系統,開發更多新的商業機會、促進產業採納並互相學習合作。 -- [Hyperledger](https://hyperledger.org) _ Hyperledger 是一個旨在推動區塊鏈跨行業應用的開放原始碼專案。 它具國際合作性,由 Linux 基金會主導發起,成員包括金融、銀行、物聯網、供應鏈、製造和科技業。 基金會有一些與以太坊技術堆棧配合使用的專案,包括 [Besu](https://www.hyperledger.org/use/besu)。_ - -### 協議和基礎結構 {#protocol-and-infrastructure} - -- [ Chainstack ](https://chainstack.com/) _多雲端和多協議平台即服務,使企業能夠快速建置、部署和管理去中心化網路和服務_ -- [Clearmatics Autonity](https://www.clearmatics.com/about/) _一種為用戶端提供軟體和基礎結構的 P2P 協議套件_ -- [Hyperledger Besu](https://www.hyperledger.org/use/besu) _在 Apache 2.0 許可證下開發,以 Java 編寫的開放原始碼以太坊用戶端,其中包括 PoW 和 PoA 等多種共識演算法(IBFT、IBFT 2.0、Ethash 和 Clique)。 它的複雜許可機制是為了聯盟環境所設計。_ -- [Kaleido](https://kaleido.io/) _用於建置和執行跨雲端、混合式企業生態系統的全堆棧平台_ -- [Zeeve](https://www.zeeve.io/) _提供一系列用於在以太坊上構建的產品和工具,以及企業 Web3 應用程式的基礎結構和 API_ diff --git a/public/content/translations/zh-tw/26) Miscellaneous/foundation/index.md b/public/content/translations/zh-tw/26) Miscellaneous/foundation/index.md deleted file mode 100644 index 12ff3f0867d..00000000000 --- a/public/content/translations/zh-tw/26) Miscellaneous/foundation/index.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: 以太坊基金會 -description: 了解更多關於以太坊基金會 (EF) 的資訊,這是一個致力於支持以太坊及相關技術的非營利組織。 -hideEditButton: true -lang: zh-tw ---- - -# 關於以太坊基金會 {#about-the-ethereum-foundation} - - - -[以太坊基金會 (EF)](http://ethereum.foundation/) 是一個致力於支持[以太坊](/what-is-ethereum/)與相關技術的非營利組織。 - -以太坊基金會並不是公司,甚至不是傳統的非營利組織。 其角色並不控制或主導以太坊發展方向,也僅是資助以太坊相關技術發展的眾多組織之一。 以太坊基金會是更大[生態系統](/community/)的一部分。 - -## 以太坊基金會倡議 {#ethereum-foundation-initiatives} - -### 生態系支援計畫 {#ecosystem-support-program} - -[生態系支援計畫](https://esp.ethereum.foundation/)旨在為更大以太坊社群內的專案和實體提供經濟及非經濟支援,從而刺激生態系成長。 生態系統支援計畫是最初以太坊資助計畫之擴充,後者關注經濟支援。 - -請造訪 [esp.ethereum.foundation](https://esp.ethereum.foundation/) 了解更多有關生態系統支持計畫、過去資助接收者及資助申請流程的資訊。 你也可閱覽[生態系統支持計畫部落格](https://blog.ethereum.org/category/ecosystem-support-program/)或關注 [@EF_ESP](https://twitter.com/EF_ESP) 取得最新消息及公告。 - -### 開發者展會 {#devcon} - -自 2014 年以來,以太坊基金會組織了以太坊開發者大會 Devcon,這是匯聚眾多以太坊開發者、研究者、思考者及創作者的年度盛會。 - -你可造訪 [archive.devcon.org](https://archive.devcon.org/) 閱覽自成立以來的年度會議影片資料。 - -請造訪 [devcon.org](https://devcon.org/) 了解更多資訊,查看 [Devcon 部落格](https://devcon.org/en/blogs/),或關注 [@efdevcon](https://twitter.com/EFDevcon) 取得最新公告。 - -### 夥伴計畫 {#fellowship-program} - -[以太坊基金會夥伴計畫](https://fellowship.ethereum.foundation/)是一項解決不同文化、國籍與社會階級差距的倡議。 夥伴計劃旨在透過識別和支援獨特且有才華的個人來彌合這些差距,幫助實現以太坊的相關性,並為那些將成為 Web3 未來但代表性不足的的人們和社群打破進入障礙。 - -[請造訪 fellowship.ethereum.foundation 了解更多資訊](https://fellowship.ethereum.foundation/)。 - -
- -有關基金會及其工作的更多資訊,請訪造 [ethereum.foundation](http://ethereum.foundation/),或查看[以太坊基金會部落格](https://blog.ethereum.org/)以取得以太坊基金會的最新消息及公告。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/design-principles/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/design-principles/index.md deleted file mode 100644 index a4f53596b44..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/design-principles/index.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: 設計原則 -lang: zh-tw -description: ethereum.org 設計與內容決策背後的原則 ---- - -# 我們的設計原則 {#contributing-to-ethereumorg-} - - 你好,歡迎瞭解 ethereum.org 的設計原則。 這是 ethereum.org 不斷發展和改進過程的一部分。 - -我們的原則決定了網站的外觀和感覺以及網站上的內容。 - -為 [ethereum.org 做出貢獻](/contributing/)前,你應該閱讀以下內容。 - -## 設計原則是什麼? {#ways-to-contribute} - -別擔心,設計原則非常簡單! **設計原則**是我們在設計(即建立、維護或更新)某些東西時參考的一組準則。 - -在 ethereum.org 的背景下,這些設計原則是我們希望網站向世界呈現和展示的內容的基礎。 它們既能表達我們的抱負,**也**實現功能。 這不僅僅是網站_外觀_,還體現網站的_運作方式_,甚至是網站給人的_感覺_。從顏色到頁面佈局,再到我們在網站上談論以太坊的方式,一切都應該遵循這些原則。 - -## 原則實踐 {#how-decisions-about-the-site-are-made} - -讓我們來看一個例子。 其中一項原則是「可信」,這意味著我們希望網站訪問者_感受_並_知道_網站值得信賴 — 就像更寬泛的以太坊生態系統一樣。 在該原則下,我們有 3 個功能性「次原則」,這些是我們可以採取的可行步驟,以使網站具有可信度: - -- _“新鮮”_,即保持內容最新。 -- _“社會認同”_,即展示生態繫統的規模、多樣性和活躍度(你知道的:以太坊昇級進度、去中心化金融、遊戲、所有黑客馬拉鬆等) -- _“一緻”_,即網站設計以及冩作的基調和準確性是一緻的。 - -因此,當我們做出設計或文案決策時,我們可以參考「可信」原則並自問: - -- _「網站是否反映了目前的資訊?」_ -- _「我們如何以及在哪裡展示生態繫統的規模和活動?」_ -- _「我正在審核的由社群成員提出的新貢獻內容是否與網站上目前的設計和文風一致?」_ - -## Ethereum.org 設計原則 {#contributors} - -### 1. 啟發性 {#1-inspirational} - -網站應該能夠激發使用者,想象以太坊能如何改變世界。 應該能夠激勵人們去探索、體驗和修複以太坊生態繫統的工具和應用程式。 - -- **鬥誌昂揚:**網站應該傳達以太坊雄心勃勃的目標,即有意義地改變世界。 應該清楚的是,以太坊不僅僅是一些新技術的堆疊 - 它是一種變革性的技術。 -- **通過教育賦予權力:**網站應該對人們進行教導,以便他們了解以太坊的潛力,在生態繫統中找到自己的位置,並感到有權參與其中。 - -視覺導航 • 內容 - -### 2. 通用性 {#2-universal} - -以太坊是一個全球性的、去中心化的專案,我們的使用者反映了這一點。 網站應該致力於讓每個人都能存取,並體現出世界上的多元文化。 - -- **無障礙:**網站應遵循無障礙指南 - 包括允許低帶寬連接的人訪問。 -- **簡單明了:**網站應該是簡單而明確的。 文案不應使用可能被誤解的用語或意思缺失的譯文。 -- **以太坊是多麵的:**以太坊是一個專案、一個代碼庫、一個社區和一個願景 以太坊出於不同的原因對不同的人都有價值,參與的方式也多種多樣。 - -冩作系統 • 色彩的使用 • 視覺導航 • 內容 - -### 3 好故事 {#3-a-good-story} - -網站的運作應該像一個好故事一樣。 訪客就像在旅途中,而你所貢獻的內容是旅途的一部分。 你的貢獻應該運用清晰的敘述技巧:一個有開頭(介紹/切入點)、中間(一些經驗和見解)和結尾(指向相關資源或後續步驟的連結)。 - -- **層次分明:**如果內容具有一個清晰的、有層次的信息架構,這將有助於 ethereum.org 的訪問者在尋求達到他們的目的時“像讀故事一樣”瀏覽網站。 -- **踏腳石:**我們是來網站尋找答案的訪問者的踏腳石。 我們不想取代許多現有資源或成爲這些資源的替代品。 我們給出答案並提供可靠的後續步驟。 - -使用者旅程 • 內容 - -### 4 可信 {#4-credible} - -人們可能想要初步了解以太坊生態系統,或者對以太坊保持懷疑態度。 你的溝通方式發揮重要作用。 請確保他們在離開網站時對以太坊生態系統更加有信心。 - -- **最新:**始終保持最新。 -- **社會認同:**展示生態繫統的規模、多樣性和活躍度。 -- **一緻:**設計和內容的一緻性傳達了可信度。 - -視覺導航 • 內容 - -### 5 協作改進 {#5-collaborative-improvement} - -網站是許多貢獻者的産物,就像整個生態系統一樣。 - -- **開放性:**爲整個生態繫統的源代碼、流程和專案的透明度而歡呼吧。 -- **可擴展性:**模塊化是我們一切努力背後的關鍵重點,所以貢獻也應該是模塊化的。 核心設計、組件程式碼和網站的實作應使其能夠在未來輕鬆擴展。 -- **實驗性:**我們正在不斷地進行實驗、測試和迭代。 -- **協作性:**這個專案將我們所有人聚集在一起。 -- **可持續性:**爲社區長期維護而設置。 - -你可以看到[我們的整個網站](/)充分體現了我們的設計原則。 - -## 提供意見回饋 {#give-feedback} - -**分享你對本文檔的意見回饋!**我們提出的原則之一是「**協作改進**」,這意味着我們希望網站是衆多貢獻者的産物。 因此,基於這一原則,我們希望與以太坊社群分享這些設計原則。 - -雖然這些原則主要體現在 ethereum.org 網站上,但我們希望其中許多原則能夠代表以太坊生態系統的整體價值(例如,你可以看到[以太坊白皮書的原則](https://github.com/ethereum/wiki/wiki/White-Paper#philosophy)的影響)。 也許你甚至想將其中一些原則運用到你自己的專案中! - -請透過 [Discord 伺服器](https://discord.gg/ethereum-org)或[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=)來讓我們知道你的想法。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/design/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/design/index.md deleted file mode 100644 index 806346c7328..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/design/index.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: 設計貢獻 -description: 為 ethereum.org 作出設計貢獻 -lang: zh-tw ---- - -# 為 ethereum.org 作出設計貢獻 {#design-contributions} - -設計是任何專案的關鍵組成部分,把你的時間和設計技能投入到 Ethereum.org,有助替我們的訪客改善使用者體驗。 替開源專案做出貢獻,會為你提供機會以獲取相關經驗,並在協作環境中發展技能。 你有機會與其他擁有獨特觀點和見解的設計師、開發者和社群成員合作。 - -最後,這是建立多元且令人印象深刻的作品集,以展示你設計技能的好方式。 - -## 如何做出貢獻? - -###  對早期設計原型提供意見回饋 {#design-critique} - -有時候我們需要獲得幫助來測試我們的原始構想。 這是在沒有任何技術知識的情況下做出貢獻的好方法。 - -1. 設計團隊會在 [Discord](https://discord.com/invite/ethereum-org) 和 [GitHub](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) 上分享模型設計。 -2. 你會在指導下熟悉這些設計,並透過評論功能提供意見回饋。 -3. 結果將在 GitHub 議題中分享,然後由團隊關閉。 - -###  參與調查研究 {#answer-surveys} - -透過以下方式在我們網站上提供意見回饋: - -1. 造訪 ethereum.org 並閱讀有關頁面。 -2. 點擊右下角的意見回饋小工具,並回答與設計和內容相關的問題。 -3. 重點關注開放式問題。 - -###  尋找網站上與設計相關的問題並回報 {#report-design-issues} - -Ethereum.org 是個擁有許多功能和內容,而且快速發展的網站。 某些使用者介面很容易過時或需要改進。 如果你遇到這類情況,請報告以讓我們注意。 - -1. 瀏覽網站並注意其設計。 -2. 如果你發現任何視覺或使用者體驗方面問題,請取得螢幕擷取畫面並記錄下來。 -3. 使用[錯誤報告](https://github.com/ethereum/ethereum-org-website/issues/new/choose)來報告發現的問題。 - -###  提出設計變更 {#propose-design-changes} - -如果你願意接受設計挑戰,可以造訪我們的 GitHub 議題板並篩選[設計相關議題](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8)。 - -1. 瀏覽我們的網站並注意其設計,或訪問我們的 GitHub 儲存庫並查看標示 [「Design required」標籤](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8)的議題。 -2. 構思解決方案並進行設計。 (最好使用我們的[設計系統](https://www.figma.com/community/file/1134414495420383395))。 -3. 在對應的 GitHub 議題中提出解決方案或[建立一個新的議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A&template=feature_request.yaml&title=Feature+request)。 -4. 等待設計團隊審核。 - -###  一起構建設計系統 {#Contribute-to-design-system} - -利用我們的設計系統,讓設計 ethereum.org 變得輕鬆有趣。 如果你是位經驗豐富的設計師,便可以幫助我們為網站準備許多組件。 - -1. 從 GitHub 上的[設計系統板](https://github.com/ethereum/ethereum-org-website/labels/design%20system)選擇要處理的議題,或建立一個新的議題。 -2. 請求將選定的議題分配給你。 -3. 開始在 figma 中設計要求的元件。 -4. 需要審核或指導時,請在 GitHub 上將組件分享給設計團隊。 -5. 設計團隊將進行審核。 -6. 設計團隊會將變更合併到主檔案中,並將它發佈到社群。 - -###  在網站上撰寫與設計相關的內容 {#write-design-articles} - -以太坊開發者社群很強大,但設計社群稍顯落後。 如果你是具備 Web3 知識的設計師,請考慮與廣大社群分享你的知識,讓我們可以共同成長和進步;我們有一個[關於以太坊設計的頁面](/developers/docs/design-and-ux/),你可以在此做出貢獻。 你也可以查看我們的[上架政策](/contributing/design/adding-design-resources)。 - -1. 構思 ethereum.org 上應該涵蓋的設計主題,會對該領域的設計師有所裨益。 -2. 前往我們的 GitHub 儲存庫,[發起議題](https://github.com/ethereum/ethereum-org-website/issues/new)來建議主題(先不要寫內容)。 -3. 等待設計團隊核准。 -4. 一旦核准,開始撰寫內容。 -5. 在相應的 GH 議題中提交。 - -###  繪製新插圖 {#prepare-illustrations} - -可視化是用來解釋抽象主題的其中一種最強大工具。 透過新增圖表和資訊圖,可以發掘巨大潛力。 畢竟,一張圖片勝過千言萬語。 - -1. 訪問我們的網站,並查看可以新增一些新資訊圖的頁面。 -2. 確保插圖風格與我們的[網站](/assets/)相對應。 -3. 前往我們的 GitHub 儲存庫並[發起議題](https://github.com/ethereum/ethereum-org-website/issues/new)來建議插圖。 -4. 設計團隊將會審核。 -5. 我們建立一個新議題,並邀請開發者來實作該新圖像。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/index.md deleted file mode 100644 index eaf36252a59..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/index.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: 參與貢獻 -description: 瞭解為 ethereum.org 做出貢獻的不同方法 -lang: zh-tw ---- - -# 為 ethereum.org 做出貢獻 🦄 {#contributing-to-ethereumorg} - -Ethereum.org 是一個開源專案,擁有超過 **12000 名**貢獻者,幫助翻譯、編寫、設計和維護網站。 - -我們是個熱情的社群,將助你在以太坊生態系統中成長和學習,同時讓你做出有意義的貢獻,並獲得相關實踐經驗! - -## 貢獻方法 {#ways-to-contribute} - -**翻譯** -- [加入翻譯計劃](/contributing/translation-program/) – 幫助我們把 ethereum.org 內容翻譯成新語言 - -**開發** -- [處理未解決的問題](https://github.com/ethereum/ethereum-org-website/issues) – 我們確定為需要完成的工作 - -**設計** -- [幫助設計網站](/contributing/design/)設計師不論資歷,都可以為改進網站做出貢獻 - -**內容** -- [建立/編輯內容](/contributing/#how-to-update-content) – 提議建立新頁面或對已有內容稍微改進 -- [新增社群資源](/contributing/content-resources/) – 將有用的文章或資源加入相關頁面 -- [建議設計資源](/contributing/design/adding-design-resources/) – 新增、更新和刪除設計資源 -- [新增詞彙表術語](/contributing/adding-glossary-terms/) – 幫助我們繼續擴大以太坊的[詞彙表](/glossary/) -- [測驗](/contributing/quizzes/) – 新增、更新和刪除相關頁面的測驗題庫 - -**特色功能的想法** -- [請求一項特色功能](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) – 讓我們知道有關你對新特色功能或設計的任何想法 - -**產品列表** -- [新增交易所](/contributing/adding-exchanges/) – 新增交易所到我們的 [交易所搜尋工具](/get-eth/#country-picker) -- [新增產品](/contributing/adding-products/) – 新增去中心化應用程式或錢包到相關頁面 -- [新增開發者工具](/contributing/adding-developer-tools/) – 新增開發者工具到相關頁面 -- [新增二層網路](/contributing/adding-layer-2s/) – 新增二層網路到相關頁面 -- [新增質押產品或服務](/contributing/adding-staking-products/) – 新增專案以幫助加速單獨質押、聯合質押,或質押即服務 -- [新增錢包](/contributing/adding-wallets/) – 為[查找錢包頁面](/wallets/find-wallet/)新增錢包 -- [為我們的去中心化科學頁面建議一個專案](/contributing/adding-desci-projects/) – 新增一個基於以太坊構建專案,為去中心化科學做出貢獻 - -有問題嗎? 🤔 加入我們的 [Discord 伺服器](https://discord.gg/ethereum-org) - -## 開始貢獻的首要任務 - -目前這裡有些你可以助我們解決並負責的任務。 大致上說你將需要 GitHub 帳戶,因為幾乎所有網站變更都是透過 GitHub 進行的。 - - - -查看所有任務 - -## 如何開展 ethereum.org 相關工作 {#how-to-update-content} - -如你希望為[翻譯計劃](/contributing/translation-program/)做出貢獻,我們需要你在 [Crowdin](https://crowdin.com/project/ethereum-org) 上建立帳戶。 對於其他事項,例如在網站上新增或編輯內容或視覺效果、修復錯誤、處理未完成的任務,你將需要一個 [GitHub](https://github.com/) 帳戶。 - -所有更新會透過 GitHub 提取請求 (PR) 流程完成。 這意味著你建立網站的一個本機副本,做出變更並要求合併你的變更。 如你未曾執行過該操作,請遵照 [GitHub 儲存庫](https://github.com/ethereum/ethereum-org-website) 底部的說明。 - -你不需要許可即可開始任何工作內容,但最好始終告知我們你打算做什麼。 你可以透過以下方式向我們告知你的計劃: - -- 在 [GitHub](https://github.com/ethereum/ethereum-org-website) 內對一個議題或提取請求做出評論 -- 在我們的 [Discord 伺服器](https://discord.gg/ethereum-org)上作訊息交流 - -在做出貢獻前,請確定你熟悉下列內容: - -- 不斷演化的 [ethereum.org 願景](/about/) -- 我們的[設計原則](/contributing/design-principles/) -- 我們的[風格指南](/contributing/style-guide/) -- 我們的[行為準則](/community/code-of-conduct) - - - -## 如何做出有關網站的決定 {#how-decisions-about-the-site-are-made} - -有關個人提取請求、設計演進和主要更新的決定由來自整個以太坊生態系統的人員組成的團隊作出。 該團隊包括專案管理人、開發者、設計師、市場和溝通部門,以及內容專家。 社群意見為每個決定提供參考:因此,請在議題中提出問題、提交提取請求或聯絡團隊: - -- [website@ethereum.org](mailto:website@ethereum.org) -- [@ethdotorg](https://twitter.com/ethdotorg) -- [Discord服務器](https://discord.gg/ethereum-org) - -### 有關抄襲的說明 {#plagiarism} - -向 ethereum.org 貢獻任何內容或作品時,請只使用原創作品或你有權使用的內容。 以太坊生態系統內的很多專案使用開放原始碼授權,允許自由分享資訊。 但是,如你未能找到有關開放原始碼授權的資訊,不要嘗試將其新增到 ethereum.org。 任何看似抄襲的提取請求將會被拒絕。 - -## 剛開始接觸開放原始碼項目? {#new-to-open-source} - -在我們的 GitHub 儲存庫,問題的准入門檻很低,有些問題特別適合新接觸開放原始碼項目的開發者查看。我們將這類問題標記為[適合入門問題](https://github.com/ethereum/ethereum-org-website/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)。 - -## 領取你的鏈上成就代幣 (OAT) {#oat} - -如果你的貢獻合併到 ethereum.org,你將有機會在 [Galxe](https://app.galxe.com/quest/ethereumorg) 上領取特殊徽章。 鏈上成就代幣 (OAT) 證明你曾經協助生態系統變得更加出色。 - -[有關鏈上成就代幣的更多資訊](https://help.galxe.com/en/articles/7067290-galxe-oats-reward-and-celebrate-achievements) - -### 如何領取 -1. 加入我們的 [Discord 伺服器](https://discord.gg/ethereum-org)。 -2. 將你貢獻內容的連結貼到 `#🥇 | proof-of-contribution` 頻道 -3. 等待我們團隊的成員向你發送前往你的鏈上成就代幣的連結。 -4. 領取你的鏈上成就代幣! - -你應該只用自行保管的錢包來領取鏈上成就代幣。 請勿使用交易所帳戶或你未持有私密金鑰的其他帳戶,因為這些帳戶將不容許你存取和管理你的鏈上成就代幣。 - -## 領取你的 GitPOAP {#claim-gitpoap} - -GitPOAP 還會自動識別你的合併貢獻,並讓你在其平臺上,鑄造一個獨有的貢獻者 POAP! - - -### 如何領取 {#how-to-claim} - -1. 造訪 [GitPOAP](https://www.gitpoap.io)。 -2. 透過你的錢包建立連接,甚至以電子郵件登入選項來連接。 -3. 搜尋你的 GitHub 使用者名稱、以太幣地址、以太坊域名服務名稱或任何 GitPOAP 以檢查你是否符合條件。 -4. 如果你的 GitHub 帳戶符合條件,那麼你就可以鑄造一個 GitPOAP! - -## 貢獻者 {#contributors} - - diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/faq/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/faq/index.md deleted file mode 100644 index 87dc605464d..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/faq/index.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: 翻譯計劃常見問題 (FAQ) -lang: zh-tw -description: ethereum.org 翻譯計劃常見問題 ---- - -# ethereum.org 翻譯指南 {#translating-ethereum-guide} - -如果你對翻譯計劃不熟悉,不確定要不要加入其中,這裡的一些常見問題會有所幫助。 使用這份指南來找到常見問題的答案。 - -## 翻譯 ethereum.org 上的內容能夠得到補償嗎? {#compensation} - -Ethereum.org 是一個開源網站,這意味著任何人都能參與其中,做出貢獻。 - -ethereum.org 翻譯計劃是其延伸,並且其組織方式考慮了相近的理念。 - -翻譯計劃的目標是讓所有人能夠使用以太坊內容,無論他們說哪種語言。 也讓任何雙語人員參與到以太坊生態系統中,並以可行的方式作出貢獻。 - -因此,翻譯計劃的性質是開放和自願的,而且參與其中不會得到補償。 如果我們要按照翻譯字數給譯者提供補償,我們只會邀請那些具有足夠翻譯經驗的人員(專業譯者)加入翻譯計劃。 這會讓翻譯計劃具有排他性,妨礙我們達成所概述的目標,具體而言:讓所有人參加和參與到生態系統中。 - -我們盡一切努力讓貢獻者在以太坊生態系統中取得成功;許多非貨幣性激勵措施已就位,如:[提供 POAP](/contributing/translation-program/acknowledgements/#poap)、[譯者證書](/contributing/translation-program/acknowledgements/#certificate)、整理 [翻譯排行榜](/contributing/translation-program/acknowledgements/),以及 [在網站上列出我們所有的譯者](/contributing/translation-program/contributors/)。 - -## 如何翻譯帶有 `` 的語句? {#tags} - -並非每個語句都以純文本形式編寫。 有些語句包含 HTML 標籤 (`<0>`, ``) 等混合腳本。這些標籤通常用於表示句子中間的一些超連結或其他格式。 - -- 翻譯標籤內的文字,但不翻譯標籤本身。 不能翻譯或刪除 `<` 和 `>` 中的任何內容。 -- 為了保持語句完整,建議按一下左下方的「複製原文」按鈕。 這將複製原文語句,並貼進文本框中。 這讓你釐清標籤的位置,幫助你避免錯誤。 - -![Crowdin 介面醒目顯示「複製原文」按鈕](./html-tag-strings.png) - -你可以在語句中移動標籤的位置,使其在句子中更加自然 — 但請確保移動整個標籤。 - -更多關於處理標籤和程式碼片段的詳細資訊,請參閱 [ethereum.org 翻譯風格指南](/contributing/translation-program/translators-guide/#dealing-with-tags)。 - -## 上下文在哪裡? {#strings} - -一般而言,光是原文語句可能不足以讓你提供準確翻譯。 - -- 看看「screenshots」和「screenshots」來獲得更多資訊。 在原文語句區段,你將看到附上的螢幕擷取畫面,從而瞭解該語句的上下文。 -- 如你依然有疑惑,請在「Comments」區段中提出問題。 [不確定要如何留下一則評論?](#comment) - -![顯示如何透過螢幕擷取畫面提供語句上下文](./source-string.png) - -![新增一個用來提供上下文的範例螢幕擷取畫面](./source-string-2.png) - -## 如何留下評論或提出問題? 我想要標記問題或錯別字... {#comment} - -如果你想標記某個需要注意的語句,可以隨時提交一則評論。 - -- 按一下右上方欄目的第二個按鈕。 隱藏標籤將會在你的右邊顯示出來。 留下一則新評論,並按一下底部的核取方塊「Issue」。 你可以從下拉式功能表選擇一個選項,指明問題類型。 -- 問題一旦提交,將會報告給我們的團隊。 我們將解決這個問題,並透過回覆你的評論和關閉問題來回應你。 -- 如果你上報錯誤的翻譯,那麼在下次審查期間,母語人士將審核目前的翻譯以及你建議的翻譯。 - -![展示如何評論和提出問題](./comment-issue.png) - -## 甚麼是翻譯記憶 (TM)? {#translation-memory} - -翻譯記憶 (TM) 是 Crowdin 的一項功能,能夠儲存 [ethereum.org](http://ethereum.org/) 中所有先前翻譯過的語句。 翻譯過的語句會自動儲存到專案 TM 中。 這款實用工具可以幫助你節省時間! - -- 查看「TM and MT Suggestions」區段,你可以看到其他譯者如何翻譯相同或類似語句。 如果發現匹配率很高的建議,可以按一下該建議來引用該翻譯內容。 -- 如果清單中沒有任何內容,你可以搜索 TM 中以前做過的翻譯,並重新使用以保持一致性。 - -![翻譯記憶的螢幕擷取畫面](./translation-memory.png) - -## 如何使用 Crowdin 詞彙表? {#glossary} - -以太坊術語是我們翻譯工作的另一個關鍵部分,因為通常新的技術術語在許多語言中還沒有完成本地化。 另外,有些術語在不同的上下文中有不同的含義。 [更多關於以太坊術語的資訊](#terminology) - -Crowdin 詞彙表是釐清術語和定義的最佳場所。 有兩種方法來參考詞彙表。 - -- 首先,當你在原文語句中發現帶底線的術語時,將滑鼠移到上面,就能夠看到概要定義。 - -![一個詞彙表定義範例](./glossary-definition.png) - -- 其次,如果看見一個不熟悉但沒有底線的術語,你可以在詞彙表標籤(右邊欄目的第三個按鈕)內搜尋該術語。 你將找到特定術語和專案中常用術語的解釋。 - -![顯示 Crowdin 中詞彙表標籤位置的螢幕擷取畫面](./glossary-tab.png) - -- 如果仍舊找不到該術語,可以藉此機會添加新術語! 我們建議你在搜尋引擎上進行搜尋,並將描述新增到詞彙表。 這將非常有助於其他譯者更好地理解該術語。 - -![展示如何向 Crowdin 新增詞彙表術語的螢幕擷取畫面](./add-glossary-term.png) - -### 術語翻譯原則 {#terminology} - -_適用於名稱(品牌、公司、人員)和新技術術語(信標鏈、分片鏈,等等)。_ - -以太坊提出了很多最近提出的新術語。 由於沒有各自語言的官方譯文,因此譯者對有些術語的翻譯不同。 這種不一致會導致誤解且降低可讀性。 - -由於語言多樣性和每種語言的標準化程度不同,幾乎不可能提出可適合所有支持語言的統一術語翻譯原則。 - -經過謹慎的考慮後,我們決定將最常用的術語留給譯者翻譯。 - -如果發現你不熟悉的術語,建議你: - -- 參考[術語詞彙表](#glossary),你可能會找到其他譯者之前的譯法。 如你覺得先前翻譯的術語不恰當,請隨時向 Crowdin 詞彙表新增一個新術語來還原你的翻譯準確度。 -- 如果詞彙表中先前沒有翻譯,建議你在搜尋引擎或媒體文章中搜尋,以說明該術語在社群中的實際使用情況。 -- 如果根本找不到任何參考資料,請按你的直覺和理解進行翻譯! -- 如果不確定術語的涵義,可以保留不譯。 有時候,英文術語足以傳達準確定義。 - -我們建議將品牌、公司和人員名稱保留不譯,因為翻譯這些內容可能造成不必要的混亂和搜尋引擎優化困難。 - -## 審核過程是怎樣進行的? {#review-process} - -為確保我們的翻譯品質和一致性達到一定水平,我們與 [Acolad](https://www.acolad.com/) 合作。Acolad 是全球最大的語言服務提供者之一。 Acolad 有 20,000 名專業語言學家,這意味著表他們可以針對我們需要的每種語言以及內容類型提供專業的審核人員。 - -審核過程簡單直接;一旦一個特定 [內容門類](/contributing/translation-program/content-buckets) 100% 翻譯完成,我們便安排對該內容進行審核。 審核過程直接在 Crowdin 中進行。 一旦審核完成,我們會把翻譯好的內容更新到網站中。 - -## 如何以我的語言新增內容? {#adding-foreign-language-content} - -現時,所有非英文內容是直接從英文來源內容翻譯過來的,並且任何英文中不存在的內容都不能新增到其他語言中。 - -若要為 ethereum.org 提議新內容,你可以在 GitHub 上[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues)。 如果要添加內容,將以英文編寫並透過 Crowdin 翻譯成其他語言。 - -我們計劃在不久的將來支持以非英文新增內容。 - -## 聯絡我們 {#contact} - -感謝你閱讀整篇文章。 我們希望這對你加入我們的專案有所幫助。 歡迎隨時加入我們的 [Discord 翻譯頻道](https://discord.gg/ethereum-org),提問並與其他譯者合作,或透過 translations@ethereum.org 聯絡我們! diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/how-to-translate/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/how-to-translate/index.md deleted file mode 100644 index 160cbb719da..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/how-to-translate/index.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: 如何翻譯 -lang: zh-tw -description: 使用 Crowdin 翻譯 ethereum.org 的說明 ---- - -# 如何翻譯 {#how-to-translate} - -## 影片指南 {#visual-guide} - -對於喜歡從影片學習者,請觀看 Luka 演示逐步完成設定 Crowdin。 此外,你可以在下一節的書面格式中找到相同步驟。 - - - -## 書寫指南 {#written-guide} - -### 在 Crowdin 中加入我們的專案 {#join-project} - -你需要登入 Crowdin 帳戶,如果你還沒有則請註冊帳戶。 只需要電子郵件帳戶和密碼便可註冊。 - - - 參與專案 - - -### 選擇語言 {#open-language} - -登入 Crowdin 後,你將看到專案描述和所有可用語言的清單。 每種語言還包含有關可翻譯單字總數的資訊,以及特定語言已翻譯和核准的內容數量的概述。 - -打開你要翻譯的語言,查看可進行翻譯的檔案清單。 - -![Crowdin 的語言列表](./list-of-languages.png) - -### 尋找要翻譯的文件 {#find-document} - -網站內容分為許多文件和內容門類。 你可以在右邊查看每份文件的進度—如果翻譯進程低過100%,請你不吝作出貢獻吧! - -找不到你的語言? [開啟一個議題](https://github.com/ethereum/ethereum-org-website/issues/new/choose) 或在我們的 [Discord](/discord/) 頻道內提問。 - -![Crowdin 中已翻譯和未翻譯的檔案](./crowdin-files.png) - -關於內容門類的說明:我們在 Crowdin 內用「內容門類」來先釋出最高優先順序的內容。 當你查看一種語言時,例如,[菲律賓語](https://crowdin.com/project/ethereum-org/fil#) ,你將會看見「內容門類」的一些文件夾(「1. Homepage」、「2. Essentials」、「3. Exploring」等)。 - -我們建議你按照數字順序來翻譯 (1 → 2 → 3 → ⋯),以確保影響力最大的頁面最先翻譯。 - -[瞭解有關 ethereum.org 內容門類的更多資訊](/contributing/translation-program/content-buckets/) - -### 翻譯 {#translate} - -當你選擇想翻譯的檔案後,它將在線上編輯器內開啟。 如果你從未使用過 Crowdin,可使用這份快速指南來瞭解基礎知識。 - -![Crowdin 線上編輯器](./online-editor.png) - -**_1 — 左側邊欄_** - -- 未翻譯(紅色)— 尚未翻譯的文字。 這些是你應該翻譯的語句。 -- 翻譯完成(綠色)— 已翻譯但尚未審核的文字。 歡迎你提出其他翻譯建議,或使用加號「+」和減號「-」按鈕在編輯器內對現有翻譯投票。 -- 已核准(核取記號)— 已審核並且已經在網站上使用的文字。 - -你也可以使用頂部的按鈕來搜尋一些特定字串,透過狀態篩選或變更視圖。 - -**_2 — 編輯區域_** - -主要的翻譯區域 — 原文顯示在頂部,如果有的話,還有上下文和螢幕擷取畫面可提供。 要提議新翻譯,請在「Enter translation here」欄位輸入你的翻譯並按一下「Save」。 - -你還可以在此區段找到語句的現有翻譯和其他語言的翻譯、翻譯記憶匹配項和機器翻譯建議。 - -**_3 — 右側邊欄_** - -在這裡你可以找到評論、翻譯記憶和詞彙表條目。 預設視圖會顯示評論,讓譯者能夠互相溝通,提出問題或報告錯誤的翻譯。 - -透過使用頂部的按鈕,你還可以切換到翻譯記憶。在那裡,你可以搜尋現有的翻譯,或者切換到「詞彙表」,其中包含關鍵術語的描述和標準翻譯。 - -想瞭解更多嗎? 請隨時查看[有關使用 Crowdin 線上編輯器的文件](https://support.crowdin.com/online-editor/) - -### 審核過程 {#review-process} - -一旦你已經完成了翻譯(即內容門類中的所有檔案都顯示為 100%),我們的專業翻譯服務將會審核(並可能會編輯)這些內容。 一旦審核完成(如:審核進度為 100%),我們將把內容新增到網站上。 - - - 請不要使用機器翻譯來翻譯這個專案。 所有翻譯將會在新增到網站之前進行審核。 如果你建議的翻譯被發現是機器翻譯的,它們將不被考慮採用,而經常使用機器翻譯的貢獻者將從專案中被移除。 - - -### 聯絡我們 {#get-in-touch} - -還有其他問題嗎? 或是想要跟我們的團隊和其他譯者合作? 請在我們的 [ethereum.org Discord 伺服器](/discord/)的 #translations 頻道中發布帖子 - -也可以透過 translations@ethereum.org 聯絡我們 - -感謝你參與 ethereum.org 翻譯計劃! diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/index.md deleted file mode 100644 index 3ae33a2bb04..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/index.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: 翻譯計劃 -lang: zh-tw -description: 有關 ethereum.org 翻譯計劃的資訊 ---- - -# 翻譯計畫 {#translation-program} - -翻譯計劃是一項協作計劃,致力於將 ethereum.org 內容翻譯成不同語言,讓數以億計的全球非英文使用者能夠使用網站內容。 - -![](./enterprise-eth.png) - -## 幫助我們翻譯 {#help-us-translate} - -ethereum.org 翻譯計劃是開放的,所有人都可以參與其中! - -1. 你將需要登入 Crowdin 帳戶或是註冊一個 Crowdin 帳戶。 -2. 選擇你想要翻譯的語言。 -3. 在開始之前,請查看[如何翻譯](/contributing/translation-program/how-to-translate/)指南,學習如何使用 Crowdin 和[翻譯風格指南](/contributing/translation-program/translators-guide/),瞭解翻譯小提示和最佳做法。 -4. 機器翻譯將無法通過審核。 -5. 所有翻譯在加進網站前都會經過審核,所以你的翻譯上線前會有短暫的延遲。 - -_加入 [ethereum.org Discord](/discord/) 合作翻譯、提出問題、分享回饋和想法,或加入翻譯小組。_ - - - 開始翻譯 - - -## 關於翻譯計劃 {#about-us} - -以太坊社群旨在成為全球化和包容性的社群,但大部分內容僅面向英語使用者,忽略了全球 60 億非英語使用者。 為了讓 ethereum.org 成為全球社群接觸以太坊的入口網站,我們認為很有必要為非英語國家人士以其母語提供以太坊內容。 - -ethereum.org 翻譯計劃旨在透過將 ethereum.org 和其他以太坊內容翻譯成盡可能多的語言,讓所有人都能參與以太坊。 - -詳細瞭解 ethereum.org 翻譯計劃的[使命和願景](/contributing/translation-program/mission-and-vision)。 - -### 我們迄今為止取得的進展 {#our-progress} - -- [**超過 6,000 位**譯者](/contributing/translation-program/contributors/) -- 網站支持 **62** 種語言 -- [2023 年翻譯了 **300 萬**字](/contributing/translation-program/acknowledgements/) - - - -### 致謝 {#acknowledgements} - -數以千計的社群成員參與 Ethereum.org 網站的翻譯,是翻譯計劃的關鍵組成部分。 我們想感謝我們的譯者,並為他們的職業生涯提供支援。 以下是我們對譯者的一些致謝: - -#### 證書 {#certificate} - -如果你為翻譯計劃作出貢獻,並且至少有 5000 個翻譯單字已獲核准,就有資格獲得 ethereum.org 譯者證書。 [有關證書的更多資訊](/contributing/translation-program/acknowledgements/#certificate) - -#### 鏈上成就代幣 (OAT) {#oats} - -根據 2024 年翻譯的字數,翻譯計畫的貢獻者有資格獲得不同的 OAT(鏈上成就代幣)。 鏈上成就代幣是非同質化代幣 (NFT),可以證明你對 ethereum.org 翻譯計劃的貢獻。 [有關鏈上成就代幣的更多資訊](/contributing/translation-program/acknowledgements/#oats) - -#### 致謝譯者 {#translator-acknowledgements} - -透過[排行榜](/contributing/translation-program/acknowledgements/)和[翻譯計劃貢獻者清單](/contributing/translation-program/contributors/),對我們的最優秀譯者公開致謝。 - -#### 酬勞 {#rewards} - -過去,我們追加獎勵了最活躍的貢獻者,為其提供參加 [Devcon](https://devcon.org/en/) 和 [Devconnect](https://devconnect.org/) 等以太坊會議的門票,以及獨家 ethereum.org 商品。 - -我們不斷思考創新方式來獎勵我們的貢獻者,敬請期待! - -### 指南及資源 {#guides-and-resources} - -如果你正在為翻譯計劃做出貢獻或考慮參與其中,應該查看以下翻譯指南: - -- [翻譯風格指南](/contributing/translation-program/translators-guide/)_ — 給 ethereum.org 譯者的說明和小提示_ -- [翻譯常見問題](/contributing/translation-program/faq/)_ — 有關 ethereum.org 翻譯計劃的常見問題和答案_ -- [Crowdin 線上編輯器指南](https://support.crowdin.com/online-editor/)_ — 使用 Crowdin 線上編輯器和 Crowdin 的一些進階功能的深度指南_ -- [內容門類](/contributing/translation-program/content-buckets/)_ — ethereum.org 每個內容門類包含哪些頁面_ - -有關其他有用的翻譯工具、譯者社群和翻譯計劃部落格文章,請造訪[資源頁面](/contributing/translation-program/resources/)。 - -## 聯繫我們 {#get-in-touch} - -還有其他問題嗎? 或是想要跟我們的團隊和其他譯者合作? 請在我們 [ethereum.org Discord 伺服器](https://discord.gg/ethereum-org)的 #translations 頻道發帖 - -也可以透過 translations@ethereum.org 聯絡我們 - -## 開啟你自己的翻譯計劃 {#starting-a-translation-program} - -我們致力於將以太坊內容翻譯成盡可能多的語言,並且向所有人提供教育內容。 我們很重視翻譯,想協助其他以太坊專案整合、管理,和改善它們自身的翻譯工作。 - -因此,我們製作了一份[翻譯計劃手冊](/contributing/translation-program/playbook/),裡面有一些我們在翻譯 ethereum.org 過程中發現的小提示和最佳做法。 - -想要進一步和我們合作,或使用我們的某些翻譯資源嗎? 對手冊有任何意見回饋? 歡迎你透過 translations@ethereum.org 向我們反饋你的意見。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/mission-and-vision/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/mission-and-vision/index.md deleted file mode 100644 index 733dbc905af..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/mission-and-vision/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 使命和願景 -lang: zh-tw -description: ethereum.org 翻譯計畫的使命和願景 ---- - -# 使命和願景 {#mission-and-vision} - -以太坊社群旨在成為全球化和包容性的社群,但大部分內容僅面向英語使用者,忽略了全球 60 億非英語使用者。 為了讓 ethereum.org 成為全球社群接觸以太坊的入口網站,我們認為很有必要為非英語國家人士以其母語提供以太坊內容。 - -ethereum.org 翻譯計劃旨在透過將 ethereum.org 和其他以太坊內容翻譯成盡可能多的語言,讓所有人都能參與以太坊。 - -## 我們的使命 {#our-mission} - -- 提供網站的翻譯版本,讓全球訪客能夠以母語了解以太坊 -- 促進更多成員加入全球以太坊社群 -- 支持以更易取得和更具包容性的方式分享以太坊資訊及知識 -- 支持社群成員為以太坊提供翻譯,並在生態系統中留下自己的痕跡 -- 辨識、聯絡希望參與生態系統的熱情貢獻者,並為其提供指導 - -## 我們的願景 {#our-vision} - -- 為全球盡可能多的國家/地區的以太坊社群成員翻譯基本內容 -- 支援跨語種的知識分享,以建立一個資訊豐富和受教育程度高的以太坊社群。 -- 通過消除非英語人士加入生態系統時的語言障礙,提高以太坊的包容性和可及性。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/resources/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/resources/index.md deleted file mode 100644 index 6de44085724..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/resources/index.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: 供譯者使用的資源 -lang: zh-tw -description: 對 ethereum.org 譯者有用的資源 ---- - -# 資源 {#resources} - -你可以在下面找到一些對 ethereum.org 譯者有用的指南和工具,以及翻譯社群和更新。 - -## 指南 {#guides} - -- [翻譯風格指南](/contributing/translation-program/translators-guide/) _ — 給 ethereum.org 譯者的說明和小提示_ -- [翻譯常見問題](/contributing/translation-program/faq/)_ — 有關 ethereum.org 翻譯計劃的常見問題和答案_ -- [Crowdin 線上編輯器指南](https://support.crowdin.com/online-editor/)_ — 使用 Crowdin 線上編輯器和 Crowdin 的一些進階功能的深度指南_ -- [內容門類](/contributing/translation-program/content-buckets/)_ — ethereum.org 每個內容門類包含哪些頁面_ - -## 工具 {#tools} - -- [微軟語言入口網站](https://www.microsoft.com/en-us/language)_ — 在尋找和檢查技術術語的標準翻譯時很有用處_ -- [Linguee](https://www.linguee.com/)。 _ — 翻譯和字典搜尋引擎,可按詞或短語進行搜尋_ -- [Proz 術語搜尋](https://www.proz.com/search/) _ — 特殊術語的翻譯字典和詞彙表資料庫_ -- [Eurotermbank](https://www.eurotermbank.com/)_ — 42 種語言的歐洲術語集_ - -## 社群 {#communities} - -- [特定語言的 Discord 翻譯群組](/discord/) _ — 把 ethereum.org 譯者連結到翻譯群組的計劃_ -- [中文譯者的群組](https://www.notion.so/Ethereum-org-05375fe0a94c4214acaf90f42ba40171)_ — 為了讓中國譯者之間更輕鬆地進行協調的概念頁面_ - -## 最近更新 {#latest-updates} - -要瞭解翻譯計劃的最新進展,你可以追蹤[以太坊基金會部落格](https://blog.ethereum.org/): - -- [2021 年 10 月里程碑更新](https://blog.ethereum.org/2021/10/04/translation-program-update/) -- [2020 年 12 月里程碑更新](https://blog.ethereum.org/2020/12/21/translation-program-milestones-updates-20/) -- [2020 年 7 月里程碑更新](https://blog.ethereum.org/2020/07/29/ethdotorg-translation-milestone/) -- [2019 年 8 月翻譯計劃啟動](https://blog.ethereum.org/2019/08/20/translating-ethereum-for-our-global-community/) - -## 譯者辦公時間 {#office-hours} - -我們在每月的第二個星期三會定期舉辦「譯者辦公時間」活動。 這會在 [ethereum.org Discord](/discord/) 的語音頻道 #office-hours 舉辦,你也可以在此確認舉辦的確切時間以及進一步的細節資訊。 - -在「譯者辦公時間」活動中,我們的譯者可以詢問有關翻譯過程的問題、提供有關專案的意見回饋、分享想法,或只是與 ethereum.org 核心團隊聊天。 最後,我們想利用這些通話溝通一下翻譯計劃近期的發展,與我們的貢獻者分享關鍵的翻譯小提示和說明。 - -如果你已經是或是想成為 ethereum.org 譯者,歡迎在這些階段加入我們。 diff --git a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/translators-guide/index.md b/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/translators-guide/index.md deleted file mode 100644 index 00c2a1f2bb6..00000000000 --- a/public/content/translations/zh-tw/27) Contributing/contributing/translation-program/translators-guide/index.md +++ /dev/null @@ -1,293 +0,0 @@ ---- -title: 譯者指南 -lang: zh-tw -description: 給 ethereum.org 譯者的說明和小提示 ---- - -# Ethereum.org 翻譯風格指南 {#style-guide} - -Ethereum.org 翻譯風格指南包含一些給譯者的最重要的準則、說明和小提示,能夠幫助我們將網站本土化。 - -這份文件是一份通用指南,並不特定於任何一種語言。 - -如你有任何問題、建議或意見回饋,請隨時透過 translations@ethereum.org 聯絡我們,在 Crowdin 上向 @ethdotorg 傳送訊息,或者[加入我們的 Discord](https://discord.gg/ethereum-org),你可以在當中透過 #translations 頻道聯絡我們,或者聯絡任何團隊成員。 - -## 使用 Crowdin {#using-crowdin} - -你可以在[翻譯計劃頁面](/contributing/translation-program/#how-to-translate)中找到有關如何在 Crowdin 中加入專案以及如何使用 Crowdin 線上編輯器的基本說明。 - -若你想要學習更多有關 Crowdin 及如何使用其某些進階功能的資訊,[Crowdin 知識庫](https://support.crowdin.com/online-editor/)內有很多針對所有 Crowdin 功能的深度指南和總觀。 - -## 傳達訊息的重點 {#capturing-the-essence} - -翻譯 ethereum.org 的內容時,請避免字面翻譯。 - -翻譯能夠傳達訊息的重點很重要。 這可能意味著改寫某些短語,或者使用描述性翻譯而不是逐字翻譯。 - -不同語言有不同的文法規則、慣例和字詞順序。 翻譯時,請注意目標語言中句子的結構,避免字面翻譯英文原文,因為這會導致句子結構不佳且可讀性差。 - -建議你閱讀整個句子,並對其進行調整以適應目標語言的慣例,而不是逐字翻譯原文。 - -## 正式與非正式 {#formal-vs-informal} - -我們使用正式的稱呼形式,這對所有訪客都是有禮貌且妥當的。 - -使用正式的稱呼可以讓我們避免聽起來不官方或冒犯,並且無論訪客的年齡和性別如何都可以適用。 - -多數印歐語係和亞非語係語言都使用特定於性別的第二人稱人稱代詞,以區分男性和女性。 在稱呼使用者或或使用所有格代名詞時,我們可以避免對訪客的性別作出假設,因為正式的稱呼形式通常適用且一致,無論他們如何定位自己的性別。 - -## 簡單清楚的詞彙和意思 {#simple-vocabulary} - -我們的目標是讓盡可能多的人能夠理解網站上的內容。 - -在大多數情況下,這可以透過使用易於理解的簡短單詞輕鬆實現。 如果在你的語言中對某一個單詞有多種含義相同的翻譯,最佳選擇通常是能夠清楚地反映含義的最短單字。 - -## 書寫系統 {#writing-system} - -Ethereum.org 透過拉丁語外的不同書寫系統(或書寫腳本)提供多種語言版本。 - -所有內容都應該使用適合你的語言的正確書寫系統進行翻譯,並且不應該包含使用拉丁文字書寫的任何文字。 - -翻譯內容時,應該確保翻譯內容一致,且不包含任何拉丁字符。 - -一個常見的錯誤觀念:Ethereum 應該一直用拉丁文來書寫。 這在大多情況下都是不正確的,請根據你的語言而改變「以太坊」的拼字(如在中文中是「以太坊」,在阿拉伯文中是「إيثيريوم」)。 - -**以上規則不適用於通常不應翻譯專有名詞的語言。** - -## 翻譯頁面中繼資料 {#translating-metadata} - -某些頁面含有頁面上的中繼資料,像「title」、「lang」、「description」、「sidebar」等等。 - -在將新頁面上傳到 Crowdin 時,我們隱藏了譯者不應該翻譯的內容,這意味著 Crowdin 中對譯者可見的所有中繼資料都應該翻譯。 - -翻譯源文本為「en」的任何語句中,請格外留意。 這代表頁面提供的語言,並且應該翻譯為[你的語言的 ISO 語言代碼](https://www.andiamo.co.uk/resources/iso-language-codes/)。 這些字串應該始終翻譯為拉丁文字元,而不是對應目標語言的書寫腳本。 - -如你不確定要使用哪個語言代碼,可以在 Crowdin 中查看翻譯記憶,或在 Crowdin 線上編輯器中的頁面 URL 內尋找目標語言的語言代碼。 - -最廣泛使用的語言的語言代碼範例: - -- 阿拉伯語 - ar -- 簡體中文 - zh -- 法語 - fr -- 印地語 - hi -- 西班牙語 - es - -## 外部文章的標題 {#external-articles} - -一些語句中包含外部文章的標題。 我們的大多數開發者文件頁面,都包含外部文章的連結以供進一步閱讀。 不論文章是何種語言,都需要翻譯包含文章標題的語句,以確保以母語檢視頁面的訪客取得一致的使用者體驗。 - -你可以在下方找到譯者會遇到的這類字串,以及如何辨認出這類字串(文章的連結大多位於頁面底部的「延伸閱讀」區段): - -![sidebar.png 中的文章標題](./article-titles-in-sidebar.png) ![editor.png 中的文章標題](./article-titles-in-editor.png) - -## Crowdin 警告 {#crowdin-warnings} - -Crowdin 有一個內建功能,在譯者即將出錯時發出警告。 在儲存翻譯之前,如果你忘記包含原文中的標籤、翻譯了不應翻譯的元素、添加了多個連續空格、忘記結尾標點符號等,Crowdin 會自動警告你。 若你看見這類警告,請返回並仔細檢查你所提議的翻譯。 - -**永遠不要忽視這類警告,因為它們通常意味著翻譯存在問題,或者缺少源文本中的關鍵部分。** - -當你忘記在翻譯中新增標籤時會出現的 Crowdin 警告範例: ![Crowdin 警告範例](./crowdin-warning-example.png) - -## 處理標籤和程式碼片段 {#dealing-with-tags} - -很多源內容包含標籤和變數,它們在 Crowdin 編輯器中以黃色醒目顯示。 它們提供不同功能,因而應該正確處理。 - -**Crowdin 設定** - -為了更輕鬆地管理標籤並直接從原文複製它們,我們建議在 Crowdin 編輯器中更改你的設定。 - -1. 開啟設定 ![如何在編輯器中開啟設定](./editor-settings.png) - -2. 向下捲動至「HTML tags displaying」區段 - -3. 選擇「Hide」 ![請選擇「Hide」](./hide-tags.png) - -4. 按一下「Save」 - -透過選擇此選項,完整的標籤文本將不再顯示,並會替換為數字。 翻譯時,點擊該標籤會自動將準確的標籤複製到翻譯欄位。 - -**連結** - -你可能注意到指向 ethereum.org 或其他網站的頁面的完整連結。 - -這些連結應與原文相同,並且不得更改或翻譯。 若你翻譯或以任何方式更改了連結,就算只是移除連結的一部份,如斜線 (/),也將導致連結中斷和無法使用。 - -處理連結的最佳方式是直接從原文中複製連結,可以透過按一下連結或使用「複製原文」按鈕(快捷鍵是「Alt+C」)。 - -![link.png 的例子](./example-of-link.png) - -連結也會以標籤的形式出現在源文本中(即 <0> ). 若你將滑鼠停留在標籤上,編輯器將顯示標籤的全部內容 - 有時候這些標籤將會代表連結。 - -從原文複製連結並且不要改變連結的順序是很重要的。 - -如果標籤的順序改變,其所代表的連結將中斷。 - -![tags.png 內的連結的範例](./example-of-links-inside-tags.png) - -**標籤和變數** - -原文包含許多不同類型的標籤,應該始終從原文中複製連結並且不做任何變更。 跟上述相似,這些標籤在翻譯中的順序應該與原文一致。 - -標籤始終包含一個開始和結束標籤。 在多數情況下,開始標籤和結束標籤中間的文字應該翻譯。 - -例子:``Decentralized`` - -`` - _讓文字變粗體的開始標籤_ - -Decentralized - _可翻譯的文字_ - -`` - _結束標籤_ - -![「strong」tags.png 的例子](./example-of-strong-tags.png) - -程式碼片段的處理方式與其他標籤略有不同,因為其包含不應翻譯的程式碼。 - -例子:``nonce`` - -`` - _開始標籤,其中含有一個程式碼片段_ - -nonce - _不可翻譯的文字_ - -`` - _結束標籤_ - -![程式碼 snippets.png 的例子](./example-of-code-snippets.png) - -原文還包含縮短的標籤,這類標籤只含有數字,這意味著標籤的功能不明顯。 你可以將滑鼠停留在這些標籤上,查看標籤的確切功能。 - -在下面的例子中,可以看見滑鼠停留在標籤上時, <0> 會顯示標籤代表 ``,並且含有一個程式碼片段,因此標籤內的內容不應該翻譯。 - -![意義含糊的 tags.png 例子](./example-of-ambiguous-tags.png) - -## 簡短與完整形式/縮寫 {#short-vs-full-forms} - -網站上使用很多縮寫,例如 dapps、NFT、DAO、DeFi 等等。 這些縮寫通常用於英語,並且多數網站的訪客都熟悉這些縮寫。 - -由於這些縮寫通常在其他語言中沒有既定翻譯,處理這些或類似術語最佳方法是提供完整形式的描述性翻譯,並在括號中添加英文縮寫。 - -不要翻譯這些縮寫,因為多數人對它們不熟悉,而且本土化後的翻譯版本對多數訪客來說沒有意義。 - -如何翻譯 dapps 的例子: - -- Decentralized applications (dapps) → _完整翻譯形式 (括號內為英文縮寫)_ - -## 沒有既定翻譯的術語 {#terms-without-established-translations} - -某些術語在其他語言中可能沒有既定翻譯,並且以原始英語術語的形式廣為人知。 這類術語主要包括較新的概念,如工作量證明、權益證明、信標鏈、質押等。 - -雖然這些術語的翻譯可能聽起來不自然,但由於英文版本也常用於其他語言,因此強烈建議翻譯這些術語。 - -翻譯時,請自由發揮創意,使用描述性翻譯,或直接按字面翻譯。 - -**大多數術語應該翻譯而不是將其中一些保留英文的原因是,隨著越來越多的人開始使用以太坊和相關技術,這種新術語將在未來變得更加普及。 如果我們想讓來自世界各地的更多人加入這個領域,我們需要以盡可能多的語言提供易於理解的術語,即使需要我們自行創建這些術語。** - -## 按鈕和行動呼籲 {#buttons-and-ctas} - -網站包含很多按鈕,其翻譯方式與其他內容不同。 - -可以透過檢視上下文螢幕擷取畫面、與大多數字串連結或通過查看編輯器中的上下文(包括詞語「按鈕」)來辨認出按鈕文字。 - -按鈕的翻譯應該越短越好,以防止格式不匹配。 此外,按鈕翻譯應採用命令式,如:呈現命令或請求。 - -![如何尋找 button.png](./how-to-find-a-button.png) - -## 翻譯的包容性 {#translating-for-inclusivity} - -Ethereum.org 的訪客來自世界各地和不同的背景。 因此,網站上的語言應該是中性的,歡迎所有人且沒有排他性。 - -其中一個重要方面是性別中性。 透過在翻譯中使用正式稱呼,並避免任何指代特定性別的單字可以輕鬆實現這一點。 - -包容性的另一種形式是,嘗試針對全球受眾進行翻譯,而不是針對特定國家、種族或地區。 - -最後,語言應該對所有受眾和年齡組來說都是適宜的。 - -## 特定語言的翻譯 {#language-specific-translations} - -翻譯時,重要的是要遵循你的語言中的文法規則、慣例和格式,而不是從原文直接字面翻譯。 原文遵循英文文法的規則和慣例,而這並不能套用在很多其他語言上。 - -你應該瞭解自己語言的規則,並進行相應地翻譯。 若你需要幫助,請聯絡我們,我們將幫你尋找關於如何在你的語言中使用這些元素的資源。 - -需要特別留意事項的具體例子: - -### 標點符號、格式 {#punctuation-and-formatting} - -**大寫** - -- 不同語言的大寫有著很大的差異。 -- 在英文中,標題和名稱、月份和日期、語言名稱、假期等中的所有單詞通常會大寫。 在很多其他語言中,這在文法上是不正確的,這些語言有自己的一套大寫規則。 -- 一些語言也有關於將個人代名詞、名詞和某些形容詞大寫的規則,這些詞在英文中是不大寫的。 - -**間距** - -- 正字法規則定義了每種語言中空格的使用。 由於空格的使用很廣泛,所以這些規則最獨特,而空格是最容易錯譯的元素。 -- 英語和其他語言在空格用法上的一些常見差異: - - 測量和貨幣單位(如:USD、EUR、kB、MB)前的空格 - - 溫度符號(如:°C、℉)前的空格 - - 一些標點符號前的空格,尤其是省略號 (…) - - 斜線 (/) 前後的空格 - -**清單** - -- 每種語言都有一套多樣化和複雜的規則來編寫清單。 這些規則可能與英語大不相同。 -- 在一些語言中,每個新行的第一個字詞需要大寫,而在其他語言中,新行應以小寫字母開頭。 許多語言對清單中的大小寫也有不同的規則,具體取決於每行的長度。 -- 這同樣適用於列項目的標點符號。 清單中的結束標點可以是句號(**。**)、逗號(**,**)、或分號(**;**),具體取決於語言。 - -**引號** - -- 各種不同的語言使用各式各樣的引號。 簡單複製原文中的英文引號通常是錯誤的。 -- 一些最常見的引號類型包括: - - „範例文字“ - - ‚範例文字’ - - »範例文字« - - “範例文字” - - ‘範例文字’ - - «範例文字» - -**連字號和破折号** - -- 在英語中,連字號 (-) 是用來連接單詞或單詞的不同部分,而破折號 (—) 是用來標示範圍或停頓。 -- 很多語言在使用連字符和破折號上有不同的規則,應該遵循這些規則。 - -### 格式 {#formats} - -**數字** - -- 不同語言中,數字書寫的主要區別是小數和千位數的分離符號。 對於千位數,分隔符號可以是句號、逗號或空格。 同樣,一些語言使用句號小數點,而其他語言則使用逗號小數點。 - - 一些大數的例子: - - 英語 - **1,000.50** - - 西班牙語 - **1.000,50** - - 法語 - **1 000,50** -- 在翻譯數字時,另外一個重要考慮因素是百分比符號。 它能以不同方法書寫:**100%**、**100 %**或**%100**。 -- 最後,依據語言類型,負數可以有不同的形式:-100、100-、(100) 或 [100]。 - -**日期** - -- 在翻譯日期時,有許多依據語言的考慮和差異。 其中包括日期格式、分隔符號、大寫和前導零。 全寫日期和數字日期之間也有差異。 - - 一些不同日期格式的範例: - - 英語(英國)(dd/mm/yyyy) – 1st January, 2022 - - 英語(美國)(mm/dd/yyyy) – January 1st, 2022 - - 中文 (yyyy-mm-dd) – 2022 年 1 月 1 日 - - 法語 (dd/mm/yyyy) – 1er janvier 2022 - - 意大利語 (dd/mm/yyyy) – 1º gennaio 2022 - - 德語 (dd/mm/yyyy) – 1. Januar 2022 - -**貨幣** - -- 貨幣翻譯可能有難度,這是因為貨幣之間不同的格式、慣例和轉換。 作為一般規則,請與原文中的貨幣保持一致。 為了便於讀者,你可以在括號中新增你本地貨幣和轉換值。 -- 不同語言書寫貨幣的主要差異包括符號位置、逗號小數點、句號小數點、空格和縮寫與符號。 - - 符號位置:$100 或 100$ - - 逗號小數點與句號小數點:100,50$ 或 100.50$ - - 空格:100$ 或 100 $ - - 縮寫與符號:100 $ 或 100 USD - -**測量單位** - -- 作為一般規則,請依據原文保留測量單位。 如你的國家/地區使用不同的系統,可以在括號中新增轉換值。 -- 除了測量單位的本土化外,注意語言對這些單位的處理方式差異也很重要。 主要差異為數字與單位間的間距,這可能依據語言不同而不同。 這方面的範例包括 100kB 與 100 kB,或 50ºF 與 50 ºF。 - -## 結論 {#conclusion} - -翻譯 ethereum.org 是學習以太坊不同方面的絕佳機會。 - -翻譯時,不要匆忙完成。 放輕鬆,享受過程吧! - -感謝你參與翻譯計劃並幫助我們讓更廣泛的受眾可以訪問網站。 以太坊社群是全球性的,我們很高興你成為其中的一份子! diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-desci-projects/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-desci-projects/index.md deleted file mode 100644 index 7a4decec4da..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-desci-projects/index.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: 新增去中心化科研專案 -description: 我們在 ethereum.org 的去中心化科研頁面上新增專案連結時使用的政策 -lang: zh-tw ---- - -# 新增專案 {#adding-projects} - -我們希望確保展示各種專案,並提供去中心化科研全景的一個準確簡況。 - -任何人都可以在 ethereum.org 的去中心化科研頁面上推薦可上架的專案。 同樣地,任何人如發現某個專案已不再相關或不再符合我們的資格標準,也可以隨時建議我們將其移除。 - -## 決策框架 {#the-decision-framework} - -### 納入標準:必備條件 {#the-must-haves} - -- **開源程式碼/資料** - 開放的程式碼和資料是去中心化科研的核心原則,因此去中心化科研專案不得閉源。 程式碼庫應該是可存取的,並且最好對拉取請求開放。 -- **DeSci 專案應明顯去中心化** - 這可能包括由去中心化自治組織 (DAO) 管理,或透過使用包括非託管錢包在內的去中心化技術堆疊進行建置。 它可能涉及以太坊上的可審核智慧型合約。 -- **上架資訊真實準確** - 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 -- **擴大科學普及的明確承諾** - 去中心化科研專案應該能夠闡明它們如何擴大公眾對科學的參與,而不僅僅包括代幣/非同質化代幣持有者。 -- **全球皆可存取** - 你的專案沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 -- **資訊豐富的網站和文件** - 讓專案網站的訪客能夠了解該專案的實際用途、如何為去中心化科學基礎設施做出貢獻以及如何參與,這些都非常重要。 -- **專案應該是以太坊生態系統一部分** - 在 ethereum.org,我們相信以太坊(及其二層網路)是去中心化科研運動的合適基礎層。 -- **專案已相當完善** - 該專案擁有真實使用者,在幾個月中都能夠存取該專案服務。 - -### 加分項 - -- **支援多種語言** - 你的專案已經翻譯成多種語言,全球使用者皆可存取。 -- **教育資源/文件** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 -- **第三方審核** - 你的產品已經由可靠第三方進行了專業的漏洞審核。 -- **聯絡人** - 實施變更時,專案聯絡人(可能是去中心化自治組織或社群的代表)將大力幫助我們獲得準確資訊。 這樣將在日後收集資訊時,確保 ethereum.org 的更新可控。 - -## 維護 {#maintenance} - -由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: - -- 確保列出的所有專案仍符合我們的標準 -- 驗證建議的產品不比目前列出的產品更符合我們的標準 - -Ethereum.org 由開源社群維護,我們依靠社群來助其保持最新狀態。 如果你發現所列專案有任何資訊需要更新,請在我們的 GitHub 存放庫上建立一個議題或拉取請求。 - -## 使用條款 {#terms-of-use} - -另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-developer-tools/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-developer-tools/index.md deleted file mode 100644 index df281f40858..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-developer-tools/index.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: 新增開發者工具 -lang: zh-tw -description: 我們在 ethereum.org 上架開發者工具的標準 ---- - -# 新增開發者工具 {#contributing-to-ethereumorg-} - -我們想要確保盡可能地將最佳的開發者資源上架,讓開發者能夠自信地構建並獲取他們需要的支持。 - -如果我們遺漏了某個實用的開發者工具,請你在合適的地方提出建議。 - -我們目前在我們的[開發者門戶](/developers/)中上架開發者工具。 - -**請隨時去適當的頁面提出新增工具。** - -## 我們怎樣決定的 {#ways-to-contribute} - -提交的開發者工具將按照以下標準進行評估: - -**它是否與已經上架的工具有明顯的區別?** - -- 是否是新分類或類型的工具 -- 相較於已有相似工具,是否具有新的功能 -- 是否針對現有類似工具未涵蓋的獨特用例 - -**該工具是否有完善的說明文件?** - -- 是否存在相關文件? -- 相關文件是否足以使用該工具? -- 文件近期是否有過更新? - -**該工具是否被廣泛使用?** - -- 我們將會考慮 GitHub 星數、下載數量統計以及是否被知名公司或專案使用等指標作為參考 - -**該工具的品質是否足夠好?** - -- 是否有重複出現的錯誤? -- 工具是否可靠? -- 工具是否得到積極維護? - -**工具是否開源?** - -以太坊領域的許多專案都是開源的。 我們更有可能上架開源專案,讓社群開發者能夠檢查程式碼並為此做出貢獻。 - ---- - -## 產品次序 {#product-ordering} - -除非指定產品以特定順序排列,如按照英文字母順序,否則將按照最早至最晚新增到頁面的順序顯示。 換句話說,最新的產品會被新增到清單的底部。 - ---- - -## 新增你的開發者工具 {#how-decisions-about-the-site-are-made} - -如果你想為 ethereum.org 新增開發者工具並且該工具符合條件,請在 GitHub 上建立一個議題。 - - - 建立議題 - diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-exchanges/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-exchanges/index.md deleted file mode 100644 index 520e047f8a3..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-exchanges/index.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: 新增交易所 -description: 向 ethereum.org 新增交易所時使用的政策 -lang: zh-tw ---- - -# 新增以太坊交易所 {#adding-ethereum-exchanges} - -任何人都可以在 ethereum.org 上自由提議新的交易所。 - -我們目前將這些交易所列於: - -- [ethereum.org/get-eth](/get-eth/) - -使用者在這個頁面輸入他們的居住地,就能查看他們可以使用哪些交易所。 這有助於儘早發現任何地域限制。 - -鑑於此類情況,當你建議交易所時我們需要一些具體資訊。 - -**注意:**如果你想列出去中心化交易所,請查看我們的[錢包和去中心化應用程式上架政策](/contributing/adding-products/)。 - -## 我們需要的資訊 {#what-we-need} - -- 適用於交易所的地域限制。 與交易所相關的地域限制應在交易所網站的專門頁面詳細說明。 -- 使用者可以用來購買以太幣的貨幣 -- 證明該交易所是合法營運的公司的證據 -- 你可能擁有的任何額外資訊 - 這可能是有關公司的信息,例如經營年限、財務支持等。 - -我們需要這些資訊,以便我們精準[幫助使用者找到他們可以使用的交易所](/get-eth/#country-picker), - -這樣 ethereum.org 也能夠更加確保交易所可以提供合法且安全的兌換服務。 - ---- - -## 新增你的交易所 {#add-exchange} - -如果你想向 ethereum.org 新增交易所,請在 GitHub 上建立一個議題。 - - - 建立一個議題 - diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-glossary-terms/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-glossary-terms/index.md deleted file mode 100644 index f69ed7c6175..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-glossary-terms/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: 新增詞彙表術語 -lang: zh-tw -description: 我們在 ethereum.org 詞彙表增加新術語的標準 ---- - -# 增加術語表 {#contributing-to-ethereumorg-} - -以太坊的世界日新月異。 以太坊使用者需要不斷應對層出不窮的新術語,因此我們需要你幫助我們提供最準確、最新的參照。 查看目前的[詞彙表](/glossary/),如果你想做出貢獻,請參考下列內容! - -## 標準 {#criteria} - -新的詞彙表術語將按照以下標準進行評估: - -- 這個術語/定義是否是最新並且相關的? -- 術語表中是否已經有類似的術語? (如果有,請衡量新增一個新術語相對於更新現有術語的好處) -- 這個術語/定義是否不涉及產品廣告或其他的宣傳內容? -- 這個術語/定義是否與以太坊直接相關? -- 這個定義是否客觀、準確、並且不包含主觀的判斷和意見? -- 資料來源是否可信? 資料來源是否有引用相應的出處? - ---- - -## 新增你的術語 {#how-decisions-about-the-site-are-made} - -如果你想新增符合以上標準的術語到 ethereum.org,[請在 GitHub 上建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_glossary_term.yaml)。 diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-layer-2s/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-layer-2s/index.md deleted file mode 100644 index 9a6c4a5bd46..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-layer-2s/index.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: 新增二層網路 -description: 向 ethereum.org 新增二層網路時使用的政策 -lang: zh-tw ---- - -# 新增二層網路 {#adding-layer-2} - -我們想確保上架最佳的資源,讓使用者能夠以安全放心的方式瀏覽二層網路空間。 - -任何人都可以建議在 ethereum.org 上新增二層網路。 如我們有遺漏二層網絡,**[請提出建議](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_layer2.yaml)!** - -我們目前在以下頁面上架二層網路: - -- [Optimistic rollup (樂觀卷軸)](/developers/docs/scaling/optimistic-rollups/) -- [ZK零知識證明卷軸](/developers/docs/scaling/zk-rollups/) -- [層二(Layer 2)](/layer-2/) - -二層網路是以太坊相對較新且令人興奮的範式。 我們嘗試在 ethereum.org 上創建一個公平的考量框架,但納入標準會隨時間推移而變化和發展。 - -## 決策框架 {#decision-framework} - -### 納入標準:必備條件 {#criteria-for-inclusion-the-must-haves} - -**在 L2BEAT 上架** - -- 要被納入考量範圍,專案必須已在 [L2BEAT](https://l2beat.com) 上架。 L2BEAT 為二層網路專案提供了可靠的風險評估,供我們評估二層網路專案。 **如果專案未在 L2BEAT 上架,我們不會在 ethereum.org 上將其作為二層網路上架。** -- [了解如何將二層網路專案新增到 L2BEAT](https://github.com/l2beat/l2beat/blob/master/CONTRIBUTING.md)。 - -**開源** - -- 你的程式碼必須是可存取的,同時你應接受來自更廣泛社群的拉取請求 (PR)。 - -**二層網路類別** - -我們目前將以下列為二層網路解決方案: - -- 樂觀卷軸 -- 零知識卷軸 - -_我們認為,其他不使用以太坊來實現資料可用性或安全性的擴張解決方案,不是二層網路。_ - -**以太坊的資料可用性** - -- 資料可用性是其他擴張方案與二層網路方案之間的重要區分因素。 一個專案**必須**使用以太坊主網來實現資料可用性,才能考慮讓其上架。 - -**跨鏈橋** - -- 使用者怎樣才能登錄利用二層網路? - -**專案上線日期** - -- 二層網路已在主網「上線」超過 6 個月 - -- 未經使用者實際測試的較新專案不太可能上架。 - -**外部安全審核** - -- 無論是透過審核、內部安全團隊或其他方法,你的產品安全性都必須經可靠測試。 對我們的用戶而言,這會減低相關風險,並且向我們顯示出你有認真思考產品安全的問題。 - -**持續的使用者群** - -- 我們會考慮總鎖定價值 (TVL) 歷史記錄、交易統計數據以及是否被知名公司或專案使用等指標 - -**活躍的開發團隊** - -- 我們不會上架沒有活躍團隊去開發專案的二層網路。 - -**區塊瀏覽器** - -- 上架的專案需要正常運作的區塊瀏覽器,讓使用者輕鬆瀏覽區塊鏈。 - -### 其他標準:加分項 {#nice-to-haves} - -**交易所對專案的支援** - -- 使用者能否直接存款到交易所和/或從交易所提款? - -**二層網絡生態系統的去中心化應用程式連結** - -- 我們希望能夠提供有關使用者可以在此二層網路上執行哪些操作的資訊。 (例如 https://portal.arbitrum.io/、https://www.optimism.io/apps) - -**代幣合約清單** - -- 由於資產會在二層網路擁有新地址,如有可用的代幣清單資源,請分享。 - -**支援原生錢包** - -- 是否有任何錢包原生支援二層網路? - -## 新增你的二層網絡 {#add-exchange} - -如果你想在 ethereum.org 上新增二層網路層,請在 GitHub 上建立議題。 - - - 建立一個議題 - diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-products/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-products/index.md deleted file mode 100644 index 2fb80a6e099..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-products/index.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: 新增產品 -description: 向 ethereum.org 新增去中心化應用程式時使用的政策 -lang: zh-tw ---- - -# 新增以太坊產品 {#adding-products} - -任何人都可以在適當情況下,向 ethereum.org 的內容上推薦新的去中心化應用程式。 **但我們不會在網站首頁列出你的去中心化應用程式** 😜 - -目前所有去中心化應用程式都列於: - -- ethereum.org/dapps -- ethereum.org/get-eth - -**請僅在上列頁面上建議新增新的去中心化應用程式。** - -雖然我們歡迎新增新的去中心化應用程式,但目前我們以我們努力為使用者創造的使用體驗為基準來選擇去中心化應用程式。 此使用體驗基於下方一些設計原則: - -- _具啟發性_:ethereum.org 上的任何事物都應該讓使用者耳目一新 -- _好故事_:列出的內容應該讓人感到驚嘆 -- _可信_:所有業務/專案都應該是合法的,以最大程度降低使用者面臨的風險 - -整體而言,**ethereum.org 想為新的使用者提供「無縫加入體驗」**。 為此,我們會根據下列條件來新增去中心化應用程式: - -- 方便使用 -- 與其他產品的互通性 -- 安全性 -- 耐用 - -以下是關於我們決策框架的更詳細資訊。 請隨時提供意見回饋或更改建議。 - -## 決策框架 {#decision-framework} - -### 納入標準:必備條件 {#criteria-for-inclusion-the-must-haves} - -- **產品通過安全測試** — 無論是透過審核、內部安全團隊或某些其他方法,你的產品安全必須通過可靠測試。 這將降低我們的使用者面臨的風險,並向我們表明你非常重視安全性。 -- **產品已「上線」超過 6 個月** — 這是產品安全性的另一個指標。 6 個月是發現嚴重錯誤和漏洞的最佳時間窗口。 -- **由活躍的團隊開發** — 這有助於確保品質,並讓使用者的查詢得到支援。 -- **上架資訊真實準確** — 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 - -### 排名標準:加分項 {#criteria-for-ranking-the-nice-to-haves} - -你的去中心化應用程式或因以下標準,未能像其他產品一樣在 ethereum.org 顯眼地方列出。 - -**去中心化應用程式** - -- **可以透過大多數上架的錢包存取** - 去中心化應用程式應該與 ethereum.org 上架的大多數錢包相容。 -- **使用者可以自行試用 –** 個人使用者應該能夠使用你的去中心化應用程式並執行一些實際操作。 -- **入門培訓** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 -- **非託管模式** – 使用者可以控制自己的資金。 如果你的產品消失,使用者仍然可以存取和轉移他們的資金。 -- **全球皆可存取** – 你的產品沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 -- **開源** – 你的程式碼應該易於存取,並應接受來自更廣泛社群的拉取請求 (PR)。 -- **社群** – 你有一個專門社群,例如 Discord,使用者可以在其中與你的團隊互動,以獲得幫助或建議新功能。 - -## 實踐中的標準 {#criteria-in-practice} - -你達到的標準越多,你的產品就越有可能進入 ethereum.org。 - -如果建議的新產品符合必備條件和其中幾個加分條件,僅符合必備條件的已上架產品則可能會被移除。 - -會影響此決定的其他因素: - -- 新增應用程式而非替換應用程式的話,會破壞頁面的使用者體驗嗎? - - 我們的網站主要是教育性的,目的是解釋以太坊及其相關概念。 為使用者新增太多選項,頁面可讀性或會變得較差,導致實用性降低。 -- 該頁面目前是否讓使用者難以選擇? - - 就像你坐上幾個小時瀏覽 Netflix,因為你無法決定要觀看的內容。 提供太多選擇會讓新使用者迷惑,這是一種風險。 - -ethereum.org 負責做出這種設計決策。 - -但請放心,**我們會提供一些網站的連結,這些網站對更多去中心化應用程式進行排名** - -### 產品訂購 {#product-ordering} - -除非指定產品以特定順序排列,如按照英文字母順序,否則將按照最晚至最早新增到頁面的順序顯示。 換句話說,最新的產品會被新增到清單的底部。 - -### 使用條款 {#terms-of-use} - -另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 - -## 維護 {#maintenance} - -由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: - -- 確保列出的所有去中心化應用程式仍符合我們的標準 -- 驗證建議的產品不比目前列出的產品更符合我們的標準 - -你可以查驗上述兩項,並告知我們查驗結果,以此提供幫助。 [建立議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=)或發送電子郵件至 [website@ethereum.org](mailto:website@ethereum.org) - -_我們也在研究投票的可能性,讓社群可以表明偏好,並突顯最好的產品供我們推薦。_ - ---- - -## 新增你的產品 {#add-your-product} - -如果你想將去中心化應用程式新增至 ethereum.org 並且該應用程式符合標準,請在 GitHub 上建立一個議題。 - - - 創建一個議題 - diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-staking-products/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-staking-products/index.md deleted file mode 100644 index 8606b09e29a..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-staking-products/index.md +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: 新增質押產品或服務 -description: 向 ethereum.org 新增質押產品或服務時使用的政策 -lang: zh-tw ---- - -# 添加質押的產品或服務 {#adding-staking-products-or-services} - -我們想要確保上架最佳的資源,讓使用者能夠安全放心。 - -任何人都可以建議在 ethereum.org 上新增質押產品或服務。 如我們有遺漏,**[請提出建議](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_staking_product.yaml)!** - -我們目前在以下頁面上架質押產品與服務: - -- [單獨質押](/staking/solo/) -- [質押即服務](/staking/saas/) -- [質押池](/staking/pools/) - -信標鏈上的權益證明自 2020 年 12 月 1 日起生效。 雖然質押仍然相對較新,但我們嘗試在 ethereum.org 建立一個公平透明的考慮框架,但上架標準會隨著時間推移而變化和發展,最終由 ethereum.org 網站團隊自行決定。 - -## 決策框架 {#the-decision-framework} - -是否在 ethereum.org 上架產品並非由單一因素決定。 當要決定上架一個產品或服務時,會同時考慮多個標準。 符合以下標準越多,產品或服務上架的可能性就越高。 - -**首先,它是屬於哪個類別的產品或服務呢?** - -- 節點或用戶端工具 -- 金鑰管理 -- 質押即服務 (SaaS) -- 質押池 - -目前,我們僅上架以下類別的產品或服務。 - -### 納入標準 {#criteria-for-inclusion} - -提交的質押產品或服務將按照以下標準進行評估: - -**該專案或服務是何時啟動的?** - -- 是否有證據證明該產品或服務開放給大眾的時間? -- 這用來確定產品的「實戰測試」評分。 - -**專案是否得到積極維護?** - -- 是否有活躍的團隊開發專案? 有誰參與到當中了? -- 只有積極維護的產品才會被考慮。 - -**產品或服務是否不需要可信賴/人工中間人?** - -- 在使用者使用產品或服務的過程中,哪些步驟需要信賴他人來保管其資金金鑰,或妥善分配酬勞? -- 這用來確定產品或服務「去信賴」評分。 - -**該專案是否提供準確可靠的資訊?** - -- 產品網站提供最新、準確且無誤導性的資訊至關重要,尤其涉及以太坊協定或其他相關技術。 -- 提交內容中包含錯誤資訊、過時細節或有關以太坊或其他相關主題的潛在誤導性陳述將不會被上架,如果已經上架,則將被移除。 - -**支援哪些平台?** - -- 如: Linux,、macOS、Windows、iOS、Android - -#### 軟體與智慧型合約 {#software-and-smart-contracts} - -對於涉及的任何客製化軟體或者智慧型合約: - -**一切都是開源的嗎?** - -- 開源專案應該有一個開放給公眾的原始程式碼存放庫 -- 這用來確定產品的「開源」評分。 - -**產品是否完成_測試版_開發?** - -- 產品處於開發週期的哪個階段? -- 處於測試階段的產品不會納入 ethereum.org - -**軟體是否經過外部安全審核?** - -- 如果為否,是否有計畫進行外部審核? -- 這用來確定產品的「審核」評分。 - -**專案是否有漏洞懸賞計畫?** - -- 如果沒有該項計畫,是否打算建立漏洞懸賞計畫? -- 這用來確定產品的「漏洞懸賞」評分。 - -#### 節點或用戶端模組化 {#node-or-client-tooling} - -對於有關節點或用戶端設定、管理或移植的軟體產品: - -**支援哪些共識層用戶端(例如 Lighthouse、Teku、Nimbus 和 Prysm)?** - -- 支援哪些用戶端? 使用者可以自己選擇嗎? -- 這用來確定產品的「多樣用戶端」評分。 - -#### 質押即服務(SaaS) {#staking-as-a-service} - -對於[質押即服務的上架](/staking/saas/)(即委託節點操作): - -**使用該服務有哪些相關費用?** - -- 它的費用結構是甚麼?例如:該服務是否有定期收取月費? -- 有任何額外的質押需求嗎? - -**使用者需要註冊帳戶嗎?** - -- 使用者是否可以在未經許可或身分驗證的情況下使用服務? -- 這用來確定產品的「無需許可」評分。 - -**誰會持有簽名金鑰及取款金鑰呢?** - -- 使用者可以存取哪些金鑰? 服務可以存取哪些金鑰? -- 這用來決定產品的「去信賴」評分。 - -**所運作節點的用戶端多樣性是怎樣的?** - -- 有多少比例的驗證者金鑰正在主流共識層 (CL) 用戶端運行? -- 截止上一次的編輯,大多數節點運營者都在運行 Prysm 這一共識層用戶端,這對網路是危險的。 如果目前有超過 33% 的網路在使用某一共識層用戶端,我們會索取該用戶端使用情況的相關數據。 -- 這用來決定產品的「多樣用戶端」評分。 - -#### 質押池 {#staking-pool} - -對於[聯合質押服務](/staking/pools/): - -**質押最少需要多少以太幣?** - -- 例如 0.01 以太幣 - -**涉及哪些費用或質押需求?** - -- 有多少百分比的獎勵作為費用被扣除? -- 有任何額外的質押需求嗎? - -**有流動性代幣嗎?** - -- 涉及哪些代幣? 它們是如何運作的? 合約地址是什麼? -- 這用來確定產品的「流動性代幣」評分。 - -**使用者可以作為節點運營者參與嗎?** - -- 使用聯合資金運行驗證者用戶端需要什麼條件? -- 這是否需要個人、公司或去中心化自治組織的許可? -- 這用來確定產品的「無需許可節點」評分。 - -**質押池內節點營運商用戶端多樣性是怎樣的?** - -- 有多少比例的節點營運商正在運行主流共識層 (CL) 用戶端? -- 截止上一次的編輯,大多數節點運營者都在運行 Prysm 這一共識層用戶端,這對網路是危險的。 如果目前有超過 33% 的網路在使用某一共識層用戶端,我們會索取該用戶端使用情況的相關數據。 -- 這用來決定產品的「多樣用戶端」評分。 - -### 其它範疇:有的話會比較好的元素 {#other-criteria} - -**支援哪些使用者介面?** - -- 如: 瀏覽器應用程式、桌面應用程式、行動應用程式、命令列介面 - -**對於節點工具,該軟體是否提供了在用戶端之間切換的簡單方法?** - -- 用戶可以透過該工具來輕易並安全地改變用戶端嗎? - -**對於質押即服務,該服務目前正在運作多少個驗證者?** - -- 這讓我們能夠了解你至今為止的服務範圍。 - -## 我們會怎樣顯示結果 {#product-ordering} - -上述[納入標準](#criteria-for-inclusion)將用於計算每個產品或服務的累計評分。 該評分用來對滿足特定客觀標準的產品進行排序和展示。 能夠證實滿足的標準越多,產品的排序就越高,且載入時是隨機排列的。 - -這些標準的程式碼邏輯和權重目前包含在我們存放庫的[這個 JavaScript 元件](https://github.com/ethereum/ethereum-org-website/blob/dev/src/components/Staking/StakingProductsCardGrid.js#L350)。 - -## 新增你的產品或服務 {#add-product} - -如果你想在 ethereum.org 上新增質押產品或服務,請在 GitHub 上建立一個議題。 - - - 建立一個議題 - diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-wallets/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-wallets/index.md deleted file mode 100644 index 40ab8f14771..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/adding-wallets/index.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: 新增錢包 -description: 向 ethereum.org 上新增錢包時使用的政策 -lang: zh-tw ---- - -# 新增錢包 {#adding-wallets} - -我們希望確保展示各種錢包,涵蓋它們所有不同功能,讓使用者可以放心使用以太坊。 - -任何人都可以建議向 ethereum.org 新增錢包。 如我們遺漏了某個錢包,請提出建議! - -目前所有錢包都列於: - -- [ethereum.org/wallets/find-wallet/](/wallets/find-wallet/) - -以太坊中的錢包日新月異。 我們嘗試在 ethereum.org 上創建一個公平的考量框架,但納入標準會隨時間推移而變化和發展。 - -## 決策框架 {#the-decision-framework} - -### 納入標準:必備條件 {#the-must-haves} - -- **經過安全測試的產品** - 無論是透過審核、內部安全團隊、開源編碼或其他方法,你的錢包的安全性都必須可靠。 這將降低我們的使用者面臨的風險,並向我們表明你非常重視安全性。 -- **錢包已「上線」超過六個月或由具有良好記錄的團體發布** - 這是安全性的另一指標。 六個月是發現嚴重錯誤和漏洞的最佳時間窗口。 我們要求六個月的時間,來幫助篩選出那些作為專案很快就被放棄的分叉。 -- **由活躍的團隊開發** - 這有助於確保品質,並讓使用者的查詢得到支援。 -- **上架資訊真實準確** — 專案的任何提議上架產品都應包含真實準確的資訊。 如果偽造產品的上架資訊,例如聲稱產品為「開源」產品但事實並非如此,該產品將被移除。 -- **聯絡人** - 實施變更時,錢包的聯絡人將大力幫助我們獲得準確資訊。 這樣將在日後收集資訊時,確保 ethereum.org 的更新可控。 -- **EIP-1559(第 2 類)交易** - 你的錢包必須支援 EIP-1559(第 2 類)交易,才能在以太坊主網上進行交易。 -- **良好的使用者體驗** - 雖然使用者體驗是主觀的,但如果多位核心團隊成員在測試產品後,發現產品難以使用,我們保留拒絕該錢包的權利,並會提供有用的改進建議。 這樣做是為了保護我們的使用者群,因為它主要由初學者組成。 - -### 產品移除 {#product-removals} - -- **更新資訊** - 錢包提供者有責任每 6 個月重新提交錢包資訊,以確保其有效性和相關性(即使他們的產品沒有變化)。 如果產品團隊未能這麼做,ethereum.org 或會從頁面上移除該專案。 - -### 其他標準:加分項 {#the-nice-to-haves} - -- **全球皆可存取** - 你的錢包沒有地域限製或身分驗證 (KYC) 要求,以免某些人無法存取你的服務。 -- **支援多種語言** - 你的錢包已經翻譯成多種語言,讓全球使用者都能存取它。 -- **開源** - 你整個專案的程式碼庫(不只是模組)應可被存取,並且你應該接受來自更廣泛社群的拉取請求。 -- **非託管模式** - 使用者可以控制自己的資金。 如果你的產品消失,使用者仍然可以存取和轉移他們的資金。 -- **支援硬體錢包** - 使用者可以連接硬體錢包來簽署交易。 -- **WalletConnect** - 使用者可以使用 WalletConnect 連接到去中心化應用程式。 -- **匯入以太坊遠端程序呼叫 (RPC) 端點** - 使用者可以匯入節點遠端程序呼叫資料,讓它們連接到自己選擇的節點或其他以太坊虛擬機相容網路。 -- **非同質化代幣** - 使用者能夠查看錢包中的非同質化代幣並與之互動。 -- **連接到以太坊應用程式** - 使用者能夠連接並使用以太坊應用程式。 -- **質押** - 使用者可以直接透過錢包質押。 -- **兌換** - 使用者可以透過錢包兌換代幣。 -- **多鏈網路** - 你的錢包預設支援使用者存取多個區塊鏈網路。 -- **二層網路** - 你的錢包預設支援使用者存取二層網路。 -- **自訂燃料費** - 你的錢包允許使用者自訂其交易燃料費(基本費用、優先費和最高費用)。 -- **支援以太坊名稱服務** - 你的錢包允許使用者傳送交易到 ENS 名稱。 -- **支援 ERC-20** - 你的錢包允許使用者匯入 ERC-20 代幣合約,或自動查詢並顯示 ERC-20 代幣。 -- **購買加密貨幣** - 你的錢包支援使用者直接購買和操作加密貨幣。 -- **以法幣出售** - 你的錢包支援使用者以法幣出售加密貨幣,並直接以法幣提款到銀行卡或銀行帳戶。 -- **多重簽名** - 你的錢包支援多重簽名來簽署交易。 -- **社交恢復** - 你的錢包支援守護人功能,當使用者遺失了種子助記詞,可以透過守護人來恢復他們的錢包。 -- **專屬支援團隊** - 你的錢包擁有專屬的支援團隊,使用者遇到問題時可以向該團隊尋求協助。 -- **教育資源/文件** - 你的產品應具有精心設計的入門體驗,以幫助和教育使用者。 或有介紹操作方法的內容,例如文章或影片。 - -## 新增錢包 {#adding-a-wallet} - -如果你想向 ethereum.org 新增錢包,請在 GitHub 上建立一個議題。 - - - 建立一個議題 - - -## 維護 {#maintenance} - -由於以太坊的流動性,團隊和產品來來去去,每天都有創新,所以我們將對我們的內容進行例行檢查,以便: - -- 確保上架的所有錢包和去中心化應用程式仍符合我們的標準 -- 驗證建議的產品不比目前列出的產品更符合我們的標準 - -ethereum.org 由開源社群維護,我們依靠社群來助其保持最新狀態。 如果你發現有任何關於上架錢包的資訊需要更新,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=wallet+%3Apurse%3A&template=suggest_wallet.yaml)或[拉取請求](https://github.com/ethereum/ethereum-org-website/pulls)! - - -## 使用條款 {#terms-of-use} - -另請參閱我們的[使用條款](/terms-of-use/)。 ethereum.org 上的資訊僅供一般參考。 diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/content-resources/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/content-resources/index.md deleted file mode 100644 index 51cc723e439..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/content-resources/index.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: 添加內容資源 -lang: zh-tw -description: 我們在 ethereum.org 上列出內容資源的標準 ---- - -# 添加內容資源 {#adding-content-resources} - -我們無法涵蓋所有有關以太坊的內容,所以我們會嘗試展示一些由社群建立的出色的文章、使用教學、電子報、工作展示板,和各式內容資源。 這些資源通常為使用者可能感興趣的主題提供更深入的資訊。 - -如果這裡有你感到應該新增到頁面的一份內容資源,請隨時在適合的地方提出建議。 - -## 我們是如何決策的 {#how-we-decide} - -學習資源將按照以下標準評估: - -- 內容是最新的嗎? -- 內容是否需要付費? -- 資訊準確嗎? 它是根據客觀事實,還是根據主觀意見? -- 作者可信嗎? 他們會引用文本出處麼? -- 這份內容是否提供了現存資源/連結沒有的獨特價值? -- 這份內容是否服務於我們其中一部分[使用者](https://www.notion.so/efdn/Ethereum-org-User-Persona-Memo-b44dc1e89152457a87ba872b0dfa366c)? - ---- - -## 新增你的內容資源 {#add-your-content-resource} - -如果你想將內容資源新增至 ethereum.org 並且它符合標準,請在 GitHub 上建立一個議題。 - - - 創建一個議題 - diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/design/adding-design-resources/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/design/adding-design-resources/index.md deleted file mode 100644 index 60fce770821..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/design/adding-design-resources/index.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: 新增設計資源 -description: 確保 ethereum.org 上設計材料品質的指南和要求 -lang: zh-tw ---- - -# 新增設計資源 {#adding-design-resources} - -任何人都可以為 [web3 頁面中的設計和使用者體驗區域](/developers/docs/design-and-ux/)建議新的設計材料。 - -請注意本頁面的重點,是為有抱負的 web3 設計師提供使用者價值。 設計部分不是為了宣傳你的服務、產品或平台。 - -為確保我們維持高標準的資訊並推廣有價值的見解,我們制定了上架政策: - -## 研究和儀表板 {#Research-studies} - -1. 健全的方法論 - -a. 方法應明確定義如何收集資料。 - -b. 應說明研究參與人數。 - -c. 應描述所採用的研究方法。 - -2. 與 Web3 設計師和常見設計用例的相關性 - -a. 研究主題應該與 web3 設計師相關,並處理常見的設計用例。 - -3. 專注於提供見解 - -a. 文本的主要目標應為分享見解,而非宣傳特定專案或公司。 - -## 文章 {#Articles} - -1. 與 Web3 設計師/研究人員和常見 Web3 設計用例的相關性 - -a. 文章主題應該與 web3 設計師和研究人員有關,並專注於常見的 web3 設計用例。 - -2. 基本寫作品質 - -a. 文章應沒有語法和拼字錯誤。 - -b. 重點應放在提供關鍵見解和學習。 - -c. 寫作應簡明扼要。 - -3. 文本的目標 - -a. 文章主要目標應為分享見解,而非宣傳特定專案或公司。 - -## 社群/去中心化自治組織 {#Communities-and-DAOs} - -1. 網站必須清楚說明如何加入去中心化自治組織/社群 - -2. 成為會員的明確益處 - -a. 應把成為會員的益處顯著展示。 - -**範例**:收到工作回饋、獲得工作機會或懸賞、分享設計和研究見解。 - -3. Discord 上積極活躍溝通 - -a. Discord 社群應展現活躍且積極的溝通。 - -b. 版主應積極參與維護社群並促進討論。 - -c. 社群應展示過去兩週內有價值及成果的討論記錄。 - -透過遵守這些標準,我們目標是在社群內營造一個充滿生氣和知識共享的環境。 我們相信,該白名單政策將確保我們的使用者能夠存取可靠、相關且富有見解的資源。 感謝你的理解與合作,以維護我們平台的內容品質。 diff --git a/public/content/translations/zh-tw/28) Contributing 2/contributing/quizzes/index.md b/public/content/translations/zh-tw/28) Contributing 2/contributing/quizzes/index.md deleted file mode 100644 index 6ddd4ba5e77..00000000000 --- a/public/content/translations/zh-tw/28) Contributing 2/contributing/quizzes/index.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: 新增測驗 -description: 向 ethereum.org 新增測驗時使用的政策 -lang: zh-tw ---- - -# 測驗 {#quizzes} - -測驗讓使用者有機會測試自己,是否理解剛剛閱讀的頁面內容。 問題只應基於頁面上提供的內容,而不應問及頁面上未提供的資訊。 - -問題結構如下。 問題提示、1 個正確答案以及為什麼正確的解釋、3 個錯誤答案以及為什麼錯誤的解釋。 - -一些現有測驗的範例可以在下面找到: - -- [二層網路](/layer-2) -- [非同質化代幣](/nft/) -- [什麼是以太坊?](/what-is-ethereum/) -- [什麼是以太幣?](/eth/) - -## 新增學習測驗 - -如果有頁面尚未建立學習測驗,請為其[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)。 - -請提供以下資訊: - -- 你想新增測驗的頁面 -- 包含以下資訊的 5 個問題: - - 問題所依據的頁面內容 - - 問題提示 - - 1 個正確答案以及為什麼正確的解釋 - - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 - -## 新增測驗問題 - -如果你想將一個問題新增到測驗的問題庫中,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)並提供以下資訊: - -- 你想新增測驗問題的頁面 -- 對於每個問題,請提供以下資訊: - - 問題所依據的頁面內容 - - 問題提示 - - 1 個正確答案以及為什麼正確的解釋 - - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 - -## 更新測驗問題 - -如果你想在測驗的問題庫中更新問題,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)並提供以下資訊: - -- 你想更新測驗問題的頁面 -- 對於每個更新的問題,請提供以下資訊: - - 問題所依據的頁面內容 - - 你想更新問題的問題提示 - - 更新的問題提示 - - 1 個正確答案以及為什麼正確的解釋 - - 3 個錯誤答案,每一答案都有為什麼錯誤的解釋 - -## 刪除測驗問題 - -如果頁面上和問題相關的內容不再存在並且需要刪除問題,請[建立一個議題](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml)以刪除測驗問題並提供以下資訊: - -- 你想刪除測驗問題的頁面 -- 你想刪除的問題 -- 如必要,請解釋為什麼應刪除該問題 From c3ca3844483cd9e2b343fd88e3c635ca409bb83e Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:49:56 -0700 Subject: [PATCH 3/6] fix: markdown syntax --- .../zh-tw/developers/docs/apis/backend/index.md | 2 +- .../zh-tw/developers/docs/apis/javascript/index.md | 4 ++-- .../consensus-mechanisms/pos/block-proposal/index.md | 9 +-------- .../zh-tw/developers/docs/nodes-and-clients/index.md | 2 +- .../developers/docs/programming-languages/java/index.md | 2 +- .../translations/zh-tw/developers/docs/storage/index.md | 2 +- .../zh-tw/developers/docs/transactions/index.md | 2 +- 7 files changed, 8 insertions(+), 15 deletions(-) diff --git a/public/content/translations/zh-tw/developers/docs/apis/backend/index.md b/public/content/translations/zh-tw/developers/docs/apis/backend/index.md index 9492893476d..b7be4a2a262 100644 --- a/public/content/translations/zh-tw/developers/docs/apis/backend/index.md +++ b/public/content/translations/zh-tw/developers/docs/apis/backend/index.md @@ -204,4 +204,4 @@ _知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源! ## 相關教學影片 {#related-tutorials} - [設定 Web3js 以在 Javascript 中使用以太坊區塊鏈](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– 在專案中設定 web3.js 的說明。_ -- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _ – 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。 +- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。_ diff --git a/public/content/translations/zh-tw/developers/docs/apis/javascript/index.md b/public/content/translations/zh-tw/developers/docs/apis/javascript/index.md index f78e9eea38d..6b991e4f4e5 100644 --- a/public/content/translations/zh-tw/developers/docs/apis/javascript/index.md +++ b/public/content/translations/zh-tw/developers/docs/apis/javascript/index.md @@ -291,5 +291,5 @@ _知道對你有幫助的社群資源嗎? 請編輯此頁面並新增資源! ## 相關教學影片 {#related-tutorials} - [設定 Web3js 以在 Javascript 中使用以太坊區塊鏈](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– 在專案中設定 web3.js 的說明。_ -- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _ – 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。 -- [使用 web3 和 Alchemy 傳送交易](/developers/tutorials/sending-transactions-using-web3-and-alchemy/)_ -- 從後端傳送交易的逐步演練。_ +- [從 JavaScript 呼叫智慧型合約](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– 使用 DAI 代幣,瞭解如何使用 JavaScript 呼叫合約函式。_ +- [使用 web3 和 Alchemy 傳送交易](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) _– 從後端傳送交易的逐步演練。_ diff --git a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md index c2329bdf429..bba4beeea6e 100644 --- a/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md +++ b/public/content/translations/zh-tw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md @@ -48,25 +48,18 @@ class BeaconBlockBody(Container): 所有這些資料都被收集在一個信標區塊中,經過簽署並廣播給區塊提議者的對等節點,再由他們傳播給他們的對等節點,以此類推。 -閱讀更多關於 -區塊剖析的內容。

- - +閱讀更多關於[區塊剖析](/developers/docs/blocks)的內容。 ## 區塊會發生什麼? {#what-happens-to-blocks} 區塊被新增至區塊提議者的本機資料庫,並透過共識層廣播網路廣播給對等節點。 當驗證者接收到區塊時,它會驗證其中的資料,包括檢查區塊是否有正確的父塊、是否對應正確的時隙、提議者索引是否符合預期、RANDAO 揭示是否有效,以及提議者是否被罰沒。 `execution_payload` 被解綁,驗證者的執行用戶端重新執行清單中的交易,以檢查所提議的狀態變化。 假設區塊通過了所有這些檢查,每個驗證者將區塊新增到自己的規範鏈中。 然後,在下一個時隙中重新開始這個過程。 - - ## 區塊獎勵 {#block-rewards} 區塊提議者會收到他們工作的報酬。 有一個 `base_reward`,是根據活躍驗證者的數量和他們的有效餘額來計算的。 然後,區塊提議者會因為區塊中包含的每個有效證明而收到 `base_reward` 的一部分;證明區塊的驗證者越多,區塊提議者獲得的獎勵就越高。 還有一個獎勵是報告應該被罰沒的驗證者,數額等於每個被罰沒的驗證者的 `1/512 * effective balance`。 [更多關於獎勵和懲罰的資訊](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) - - ## 了解更多 {#further-reading} - [區塊簡介](/developers/docs/blocks/) diff --git a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md index 5e6184393d0..85fbea7ada5 100644 --- a/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md +++ b/public/content/translations/zh-tw/developers/docs/nodes-and-clients/index.md @@ -170,7 +170,7 @@ Nethermind 也為高級使用者提供[詳細文件](https://docs.nethermind.io) ### Reth {#reth} -Reth(Rust Etherum 的簡稱)是以太坊全節點的實作,致力於達成使用者友善、高度模組化、快速高效等目標。 Reth 最初由 Paradigm 開發並推動,且使用了 Apache 和 MIT 授權。 +Reth(Rust Ethereum 的簡稱)是以太坊全節點的實作,致力於達成使用者友善、高度模組化、快速高效等目標。 Reth 最初由 Paradigm 開發並推動,且使用了 Apache 和 MIT 授權。 Reth 是生產就緒的執行用戶端,且適用於質押或高正常運作時間的服務等重要任務上。 在一些高效能、高利潤下的使用案例中表現優秀,如遠端程序呼叫、最大可提取價值、索引、模擬和點對點活動等。 diff --git a/public/content/translations/zh-tw/developers/docs/programming-languages/java/index.md b/public/content/translations/zh-tw/developers/docs/programming-languages/java/index.md index 7ed8da743d6..ed569f0a4b6 100644 --- a/public/content/translations/zh-tw/developers/docs/programming-languages/java/index.md +++ b/public/content/translations/zh-tw/developers/docs/programming-languages/java/index.md @@ -46,7 +46,7 @@ incomplete: true ## 進階使用模式 {#advanced-use-patterns} -- [使用 Eventeum 建置 Java 智慧型合約資料快取](使用 Eventeum 構建Java 智慧型合約數據緩存) +- [使用 Eventeum 建置 Java 智慧型合約資料快取](https://kauri.io/article/fe81ee9612eb4e5a9ab72790ef24283d/using-eventeum-to-build-a-java-smart-contract-data-cache) ## Java 專案和工具 {#java-projects-and-tools} diff --git a/public/content/translations/zh-tw/developers/docs/storage/index.md b/public/content/translations/zh-tw/developers/docs/storage/index.md index 7743865a665..59de37e310a 100644 --- a/public/content/translations/zh-tw/developers/docs/storage/index.md +++ b/public/content/translations/zh-tw/developers/docs/storage/index.md @@ -127,7 +127,7 @@ SWARM 是一種去中心化的資料儲存和分發技術,具有儲存激勵 - [文件](https://docs.storj.io/) - [GitHub](https://github.com/storj/storj) -**Skynet - _Skynet 是一個致力於去中心化網路的去中心化工作量證明鏈。

+**Skynet - _Skynet 是一個致力於去中心化網路的去中心化工作量證明鏈。_** - [Skynet.net](https://siasky.net/) - [文件](https://siasky.net/docs/) diff --git a/public/content/translations/zh-tw/developers/docs/transactions/index.md b/public/content/translations/zh-tw/developers/docs/transactions/index.md index fe0c577f705..9dda15f6dce 100644 --- a/public/content/translations/zh-tw/developers/docs/transactions/index.md +++ b/public/content/translations/zh-tw/developers/docs/transactions/index.md @@ -200,7 +200,7 @@ Alice 的帳戶將存入 **+1.0 以太幣** 根據 `TransactionType` 值,交易可以分類為 -1. **類型 0(傳統)交易:**自以太坊推出以來使用的原始交易格式。 它們不包括 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 的功能,例如動態燃料費計算或智慧型合約的存取清單。 傳統交易缺少在序列化形式中指示交易類型的特定前綴,在使用[遞迴長度前綴 (RLP) ](/developers/docs/data-structures-and-encoding/rlp)編碼時,該前綴以位元組 `0xf8` 開始。 這些交易的 TransactionType 值為 `0x0`。 +1. **類型 0(傳統)交易:**自以太坊推出以來使用的原始交易格式。 它們不包括 [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) 的功能,例如動態燃料費計算或智慧型合約的存取清單。 傳統交易缺少在序列化形式中指示交易類型的特定前綴,在使用[遞迴長度前綴 (RLP)](/developers/docs/data-structures-and-encoding/rlp) 編碼時,該前綴以位元組 `0xf8` 開始。 這些交易的 TransactionType 值為 `0x0`。 2. **類型 1 交易:**在 [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) 中引入作為以太坊[柏林升級](/history/#berlin)的一部分,這些交易包含一個 `accessList` 參數。 此清單指定了交易期望存取的地址和儲存金鑰,有助於潛在降低涉及智慧型合約的複雜交易的[燃料](/developers/docs/gas/)成本。 EIP-1559 的費用市場變化不會包含在類型 1 交易中。 類型 1 交易也包含一個 `yParity` 參數,該參數可以是 `0x0` 或 `0x1`,表示 secp256k1 簽章的 y 值的奇偶性。 此類交易透過開頭的位元組 `0x01` 開頭辨識,其 TransactionType 值為 `0x1`。 From a4bae3a2861210d0f5d79fc5742fd191bc28c5c7 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:58:55 -0700 Subject: [PATCH 4/6] revert: private enterprise --- .../enterprise/private-ethereum/index.md | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 public/content/translations/zh-tw/enterprise/private-ethereum/index.md diff --git a/public/content/translations/zh-tw/enterprise/private-ethereum/index.md b/public/content/translations/zh-tw/enterprise/private-ethereum/index.md deleted file mode 100644 index 86a75fafd73..00000000000 --- a/public/content/translations/zh-tw/enterprise/private-ethereum/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: 企業級私有以太坊 -description: 有關私有以太坊區塊鏈上的企業應用程式的資源。 -lang: zh-tw ---- - -# 企業級私有以太坊 {#private-ethereum-for-enterprise} - -企業區塊鏈應用程式可以建立在公共且無需許可的以太坊主網上,或者依據以太坊技術研發的私有區塊鏈之上。 有關在公有以太坊主網上建立應有程式的更多資訊,請見[企業級以太坊主網](/enterprise/)。 - -## 私有企業用以太坊開發者資源 {#developer-resources-private-enterprise-ethereum} - -### 組織 {#organisations} - -透過不同組織間的共同努力以及合作,以太坊對於企業來說更加友善: - -- [企業以太坊聯盟](https://entethalliance.org/) EEA 幫助組織在日常業務運營中採用以太坊技術。 我們深耕以太坊生態系統,開發更多新的商業機會、促進產業採納並互相學習合作。 -- [Hyperledger](https://hyperledger.org) _ Hyperledger 是一個旨在推動區塊鏈跨行業應用的開放原始碼專案。 它具國際合作性,由 Linux 基金會主導發起,成員包括金融、銀行、物聯網、供應鏈、製造和科技業。 基金會有一些與以太坊技術堆棧配合使用的專案,包括 [Besu](https://www.hyperledger.org/use/besu)。_ - -### 協議和基礎結構 {#protocol-and-infrastructure} - -- [ Chainstack ](https://chainstack.com/) _多雲端和多協議平台即服務,使企業能夠快速建置、部署和管理去中心化網路和服務_ -- [Clearmatics Autonity](https://www.clearmatics.com/about/) _一種為用戶端提供軟體和基礎結構的 P2P 協議套件_ -- [Hyperledger Besu](https://www.hyperledger.org/use/besu) _在 Apache 2.0 許可證下開發,以 Java 編寫的開放原始碼以太坊用戶端,其中包括 PoW 和 PoA 等多種共識演算法(IBFT、IBFT 2.0、Ethash 和 Clique)。 它的複雜許可機制是為了聯盟環境所設計。_ -- [Kaleido](https://kaleido.io/) _用於建置和執行跨雲端、混合式企業生態系統的全堆棧平台_ -- [Zeeve](https://www.zeeve.io/) _提供一系列用於在以太坊上構建的產品和工具,以及企業 Web3 應用程式的基礎結構和 API_ From d41382b96c5913545c543c26f85064b50573036a Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:44:27 -0700 Subject: [PATCH 5/6] fix: markdown checker results zh-tw --- .../zh-tw/developers/docs/data-and-analytics/index.md | 4 ++-- .../content/translations/zh-tw/developers/docs/ides/index.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/content/translations/zh-tw/developers/docs/data-and-analytics/index.md b/public/content/translations/zh-tw/developers/docs/data-and-analytics/index.md index 4c68011fcc3..d6653924bdd 100644 --- a/public/content/translations/zh-tw/developers/docs/data-and-analytics/index.md +++ b/public/content/translations/zh-tw/developers/docs/data-and-analytics/index.md @@ -14,11 +14,11 @@ lang: zh-tw 你應該瞭解[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)的基本概念,以便更好地理解在資料分析背景中如何使用它們。 此外,熟悉[索引](/glossary/#index)的概念以瞭解它們對系統設計所帶來的好處。 -在架構基礎方面,瞭解[應用程式介面](https://www.wikipedia.org/wiki/API)和 [ REST ](https://www.wikipedia.org/wiki/Representational_state_transfer) 的基本概念,即使只是理論上的也很重要。 +在架構基礎方面,瞭解[應用程式介面](https://www.wikipedia.org/wiki/API)和 [REST](https://www.wikipedia.org/wiki/Representational_state_transfer) 的基本概念,即使只是理論上的也很重要。 ## 區塊瀏覽器 {#block-explorers} -許多[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)提供 [RESTful ](https://www.wikipedia.org/wiki/Representational_state_transfer) [應用程式介面](https://www.wikipedia.org/wiki/API)閘道,這些閘道能夠讓開發者查看區塊、交易、驗證者、帳戶及其他鏈上活動的即時資料。 +許多[區塊瀏覽器](/developers/docs/data-and-analytics/block-explorers/)提供 [RESTful](https://www.wikipedia.org/wiki/Representational_state_transfer) [應用程式介面](https://www.wikipedia.org/wiki/API)閘道,這些閘道能夠讓開發者查看區塊、交易、驗證者、帳戶及其他鏈上活動的即時資料。 開發者可以進一步處理和轉換這些資料,以提供使用者獨特的見解和與[區塊鏈](/glossary/#blockchain)的互動。 例如,[Etherscan](https://etherscan.io) 在每個 12 秒時隙都提供執行和共識資料。 diff --git a/public/content/translations/zh-tw/developers/docs/ides/index.md b/public/content/translations/zh-tw/developers/docs/ides/index.md index e67e15e5e48..fcecfeeef8a 100644 --- a/public/content/translations/zh-tw/developers/docs/ides/index.md +++ b/public/content/translations/zh-tw/developers/docs/ides/index.md @@ -61,7 +61,7 @@ lang: zh-tw ## 外掛程式和擴充功能 {#plugins-extensions} - [solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) - 支援 Visual Studio Code 的以太坊 Solidity 語言 -- [支援 VS Code 的 Solidity + Hardhat ](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Hardhat 團隊提供 Solidity 和 Hardhat 支援 +- [支援 VS Code 的 Solidity + Hardhat](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Hardhat 團隊提供 Solidity 和 Hardhat 支援 - [Prettier Soliditty](https://github.com/prettier-solidity/prettier-plugin-solidity) - 使用 prettier 的程式碼格式器 ## 衍生閱讀 {#further-reading} From 849e5341ec7dc1f51a1759c30c51b71a0479a660 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 16 Oct 2024 15:12:23 -0700 Subject: [PATCH 6/6] revert: zh-tw state-channels --- .../docs/scaling/state-channels/index.md | 67 ------------------- 1 file changed, 67 deletions(-) delete mode 100644 public/content/translations/zh-tw/developers/docs/scaling/state-channels/index.md diff --git a/public/content/translations/zh-tw/developers/docs/scaling/state-channels/index.md b/public/content/translations/zh-tw/developers/docs/scaling/state-channels/index.md deleted file mode 100644 index abc7c29a79b..00000000000 --- a/public/content/translations/zh-tw/developers/docs/scaling/state-channels/index.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: 狀態通道 -description: 介紹狀態通道和支付通道,作為以太坊社群目前使用的擴展解決方案。 -lang: zh-tw -sidebarDepth: 3 ---- - -狀態通道允許參與者安全地進行鏈外交易,同時將與以太坊主網的互動保持在最低水平。 通道對等方可進行任意數量的鏈外交易,同時只需提交兩個鏈上交易來開啟和關閉通道。 這允許極高的交易吞吐量並降低使用者的成本。 - -## {#how-do-sidechains-work} - -以太坊等公共區塊鏈因其分散式架構,即鏈上交易必須由所有節點執行,而面臨可擴展性挑戰。 節點必須能夠使用普通硬體來處理區塊中的交易量,為了保持網路去中心化而限制了交易吞吐量。 - -### {#consensus-algorithms} - -通道是簡單的點對點協定,它讓雙方可以在彼此之間進行多筆交易,然後只將最終結果發佈到區塊鏈。 通道使用密碼學證明產生的摘要資料確實是一組有效中間交易的結果。 [「多簽」](/developers/docs/smart-contracts/#multisig)智慧型合約確保交易由正確的各方簽署。 - -- []() -- []() -- - -透過通道,狀態變更由相關各方執行和驗證,最大限度地減少了以太坊執行層上的計算。 這減少了以太坊的擁堵並提高了使用者的交易處理速度。 - -#### {#block-parameters} - -每個通道均由在以太坊上執行的[多簽智慧型合約](/developers/docs/smart-contracts/#multisig)管理。 要開啟通道,參與者在鏈上部署通道合約並向其中存入資金。 - -若要關閉通道,參與者會在鏈上提交最後商定的通道狀態。 之後,智慧型合約會根據每位參與者在通道最終狀態的餘額來分配鎖定的資金。 - -對於一些預先定義的參與者希望以高頻率進行交易而不產生可見開銷的情況,點對點通道特別適用。 區塊鏈通道分為兩類:**支付通道**和**狀態通道**。 - -### {#evm-compatibility} - -將支付通道描述成由兩個使用者共同維護的「雙向帳本」最為恰當。 帳本的初始餘額是通道開放階段鎖定到鏈上合約的存款總和。 - -帳本餘額的更新(即支付通道的狀態)需要通道中所有方批准。 通道更新在所有通道參與者簽署后被視爲最終確定,這和以太坊上的交易非常相似。 - -支付通道是最早的擴張解決方案之一,用於最大限度減少因簡單的使用者互動帶來的高成本鏈上活動(例如,以太幣傳送、原子交換、小額支付)。 通道參與者彼此之間可以進行不限數額的即時、無費用交易,只要他們傳送的净總和不超過存入的代幣。 - -除了支援鏈外支付以外,支付通道尚未被證明可用於處理通用狀態轉換邏輯。 建立狀態通道是爲了解決該問題,並使通道可用於擴張通用計算。 - -### {#asset-movement} - -狀態通道與支付通道仍有許多共同點。 例如,當使用者透過交換加密簽名的訊息(交易)進行互動時,其他通道參與者也必須簽署訊息。 如果提議的狀態更新沒有獲得所有參與者的簽名,則被認爲無效。 - -## {#pros-and-cons-of-sidechains} - -| | | -| | | -| | | -| | | -| | | -| | | - -### {#use-sidechains} - -- []() -- []() -- []() -- []() -- []() - -## {#further-reading} - -- - -_ _