From 7b8d52cea73806378e20024c808e7c1a724f187b Mon Sep 17 00:00:00 2001 From: wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 4 Feb 2026 09:04:44 -0500 Subject: [PATCH 1/7] i18n(sw): Crowdin translations --- public/content/translations/sw/about/index.md | 134 ++ .../translations/sw/ai-agents/index.md | 143 ++ .../content/translations/sw/bridges/index.md | 145 ++ .../sw/community/code-of-conduct/index.md | 77 + .../sw/community/events/organizing/index.md | 221 ++ .../sw/community/get-involved/index.md | 132 +- .../translations/sw/community/grants/index.md | 65 +- .../sw/community/language-resources/index.md | 163 +- .../translations/sw/community/online/index.md | 58 +- .../sw/community/research/index.md | 399 ++++ .../sw/community/support/index.md | 99 +- .../adding-desci-projects/index.md | 44 + .../adding-developer-tools/index.md | 61 + .../sw/contributing/adding-exchanges/index.md | 40 + .../adding-glossary-terms/index.md | 26 + .../sw/contributing/adding-layer-2s/index.md | 97 + .../sw/contributing/adding-products/index.md | 100 + .../sw/contributing/adding-resources/index.md | 53 + .../adding-staking-products/index.md | 176 ++ .../sw/contributing/adding-wallets/index.md | 80 + .../contributing/content-resources/index.md | 32 + .../contributing/design-principles/index.md | 93 + .../design/adding-design-resources/index.md | 69 + .../sw/contributing/design/index.md | 77 + .../translations/sw/contributing/index.md | 120 + .../sw/contributing/quizzes/index.md | 62 + .../translation-program/faq/index.md | 119 + .../how-to-translate/index.md | 92 + .../contributing/translation-program/index.md | 91 + .../mission-and-vision/index.md | 25 + .../translation-program/playbook/index.md | 317 +++ .../translation-program/resources/index.md | 49 + .../translatathon/details/index.md | 90 + .../translatathon/index.md | 100 + .../translators-guide/index.md | 299 +++ public/content/translations/sw/dao/index.md | 169 ++ .../sw/decentralized-identity/index.md | 218 ++ public/content/translations/sw/defi/index.md | 369 +++ public/content/translations/sw/desci/index.md | 139 ++ .../sw/developers/docs/accounts/index.md | 137 ++ .../sw/developers/docs/apis/backend/index.md | 211 ++ .../developers/docs/apis/javascript/index.md | 289 +++ .../sw/developers/docs/apis/json-rpc/index.md | 1898 ++++++++++++++++ .../sw/developers/docs/blocks/index.md | 153 ++ .../sw/developers/docs/bridges/index.md | 138 ++ .../docs/consensus-mechanisms/index.md | 92 + .../docs/consensus-mechanisms/poa/index.md | 80 + .../pos/attack-and-defense/index.md | 166 ++ .../pos/attestations/index.md | 92 + .../pos/block-proposal/index.md | 69 + .../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 | 102 + .../pos/pos-vs-pow/index.md | 69 + .../pos/rewards-and-penalties/index.md | 91 + .../pos/weak-subjectivity/index.md | 39 + .../pos/withdrawal-credentials/index.md | 64 + .../docs/consensus-mechanisms/pow/index.md | 114 + .../consensus-mechanisms/pow/mining/index.md | 86 + .../dagger-hashimoto/index.md | 329 +++ .../mining/mining-algorithms/ethash/index.md | 1019 +++++++++ .../pow/mining/mining-algorithms/index.md | 42 + .../sw/developers/docs/dapps/index.md | 97 + .../block-explorers/index.md | 254 +++ .../docs/data-and-analytics/index.md | 72 + .../index.md | 118 + .../docs/data-availability/index.md | 84 + .../data-structures-and-encoding/index.md | 32 + .../patricia-merkle-trie/index.md | 266 +++ .../data-structures-and-encoding/rlp/index.md | 163 ++ .../data-structures-and-encoding/ssz/index.md | 150 ++ .../web3-secret-storage/index.md | 195 ++ .../dex-design-best-practice/index.md | 220 ++ .../heuristics-for-web3/index.md | 138 ++ .../sw/developers/docs/design-and-ux/index.md | 86 + .../docs/development-networks/index.md | 71 + .../developers/docs/ethereum-stack/index.md | 61 + .../sw/developers/docs/evm/index.md | 88 + .../sw/developers/docs/evm/opcodes/index.md | 177 ++ .../sw/developers/docs/frameworks/index.md | 157 ++ .../sw/developers/docs/gas/index.md | 151 ++ .../sw/developers/docs/ides/index.md | 64 + .../translations/sw/developers/docs/index.md | 25 + .../developers/docs/intro-to-ether/index.md | 78 + .../docs/intro-to-ethereum/index.md | 124 ++ .../sw/developers/docs/mev/index.md | 221 ++ .../developers/docs/networking-layer/index.md | 163 ++ .../network-addresses/index.md | 39 + .../networking-layer/portal-network/index.md | 89 + .../sw/developers/docs/networks/index.md | 216 ++ .../nodes-and-clients/archive-nodes/index.md | 81 + .../docs/nodes-and-clients/bootnodes/index.md | 32 + .../client-diversity/index.md | 132 ++ .../docs/nodes-and-clients/index.md | 319 +++ .../nodes-and-clients/light-clients/index.md | 61 + .../node-architecture/index.md | 59 + .../nodes-as-a-service/index.md | 418 ++++ .../nodes-and-clients/run-a-node/index.md | 484 ++++ .../sw/developers/docs/oracles/index.md | 433 ++++ .../docs/programming-languages/dart/index.md | 32 + .../programming-languages/delphi/index.md | 56 + .../programming-languages/dot-net/index.md | 86 + .../programming-languages/elixir/index.md | 55 + .../programming-languages/golang/index.md | 84 + .../docs/programming-languages/index.md | 33 + .../docs/programming-languages/java/index.md | 64 + .../programming-languages/javascript/index.md | 72 + .../programming-languages/python/index.md | 99 + .../docs/programming-languages/ruby/index.md | 60 + .../docs/programming-languages/rust/index.md | 65 + .../sw/developers/docs/scaling/index.md | 113 + .../docs/scaling/optimistic-rollups/index.md | 265 +++ .../developers/docs/scaling/plasma/index.md | 176 ++ .../docs/scaling/sidechains/index.md | 73 + .../docs/scaling/state-channels/index.md | 261 +++ .../developers/docs/scaling/validium/index.md | 166 ++ .../docs/scaling/zk-rollups/index.md | 257 +++ .../docs/smart-contracts/anatomy/index.md | 658 ++++++ .../docs/smart-contracts/compiling/index.md | 282 +++ .../smart-contracts/composability/index.md | 76 + .../docs/smart-contracts/deploying/index.md | 81 + .../formal-verification/index.md | 284 +++ .../developers/docs/smart-contracts/index.md | 112 + .../docs/smart-contracts/languages/index.md | 325 +++ .../docs/smart-contracts/libraries/index.md | 117 + .../docs/smart-contracts/naming/index.md | 101 + .../docs/smart-contracts/security/index.md | 576 +++++ .../docs/smart-contracts/testing/index.md | 310 +++ .../docs/smart-contracts/upgrading/index.md | 165 ++ .../docs/smart-contracts/verifying/index.md | 113 + .../sw/developers/docs/standards/index.md | 59 + .../docs/standards/tokens/erc-1155/index.md | 146 ++ .../docs/standards/tokens/erc-1363/index.md | 213 ++ .../docs/standards/tokens/erc-20/index.md | 192 ++ .../docs/standards/tokens/erc-223/index.md | 200 ++ .../docs/standards/tokens/erc-4626/index.md | 227 ++ .../docs/standards/tokens/erc-721/index.md | 248 +++ .../docs/standards/tokens/erc-777/index.md | 47 + .../developers/docs/standards/tokens/index.md | 41 + .../sw/developers/docs/storage/index.md | 216 ++ .../sw/developers/docs/transactions/index.md | 231 ++ .../sw/developers/docs/web2-vs-web3/index.md | 62 + .../index.md | 300 +++ .../tutorials/all-you-can-cache/index.md | 867 ++++++++ .../developers/tutorials/app-plasma/index.md | 1255 +++++++++++ .../index.md | 131 ++ .../index.md | 585 +++++ .../index.md | 95 + .../index.md | 372 ++++ .../index.md | 144 ++ .../index.md | 129 ++ .../erc-721-vyper-annotated-code/index.md | 715 ++++++ .../tutorials/erc20-annotated-code/index.md | 930 ++++++++ .../erc20-with-safety-rails/index.md | 217 ++ .../tutorials/ethereum-for-web2-auth/index.md | 886 ++++++++ .../index.md | 156 ++ .../index.md | 102 + .../index.md | 1539 +++++++++++++ .../hello-world-smart-contract/index.md | 367 +++ .../index.md | 145 ++ .../tutorials/how-to-mint-an-nft/index.md | 329 +++ .../index.md | 102 + .../index.md | 709 ++++++ .../index.md | 524 +++++ .../index.md | 233 ++ .../how-to-use-tellor-as-your-oracle/index.md | 81 + .../how-to-view-nft-in-metamask/index.md | 33 + .../how-to-write-and-deploy-an-nft/index.md | 380 ++++ .../index.md | 179 ++ .../tutorials/ipfs-decentralized-ui/index.md | 73 + .../index.md | 111 + .../index.md | 269 +++ .../logging-events-smart-contracts/index.md | 62 + .../index.md | 252 +++ .../index.md | 151 ++ .../developers/tutorials/nft-minter/index.md | 874 ++++++++ .../index.md | 1356 ++++++++++++ .../reverse-engineering-a-contract/index.md | 744 +++++++ .../tutorials/run-node-raspberry-pi/index.md | 190 ++ .../tutorials/scam-token-tricks/index.md | 470 ++++ .../tutorials/secret-state/index.md | 736 ++++++ .../secure-development-workflow/index.md | 52 + .../tutorials/send-token-ethersjs/index.md | 210 ++ .../index.md | 208 ++ .../tutorials/server-components/index.md | 295 +++ .../index.md | 92 + .../developers/tutorials/short-abi/index.md | 585 +++++ .../index.md | 91 + .../tutorials/stealth-addr/index.md | 443 ++++ .../index.md | 314 +++ .../token-integration-checklist/index.md | 80 + .../index.md | 314 +++ .../index.md | 177 ++ .../uniswap-v2-annotated-code/index.md | 1971 +++++++++++++++++ .../tutorials/using-websockets/index.md | 245 ++ .../index.md | 300 +++ .../index.md | 204 ++ .../index.md | 199 ++ .../tutorials/yellow-paper-evm/index.md | 278 +++ public/content/translations/sw/eips/index.md | 74 +- .../sw/energy-consumption/index.md | 86 + .../translations/sw/eth/supply/index.md | 80 + .../translations/sw/ethereum-forks/index.md | 677 ++++++ .../translations/sw/foundation/index.md | 33 + .../content/translations/sw/gaming/index.md | 70 + .../content/translations/sw/glossary/index.md | 505 +++++ .../translations/sw/governance/index.md | 184 ++ .../index.md | 75 + .../sw/guides/how-to-id-scam-tokens/index.md | 97 + .../how-to-revoke-token-access/index.md | 75 + .../sw/guides/how-to-swap-tokens/index.md | 70 + .../sw/guides/how-to-use-a-bridge/index.md | 72 + .../sw/guides/how-to-use-a-wallet/index.md | 91 + .../content/translations/sw/guides/index.md | 27 + public/content/translations/sw/nft/index.md | 64 +- .../content/translations/sw/payments/index.md | 208 ++ .../sw/prediction-markets/index.md | 87 + .../content/translations/sw/privacy/index.md | 97 + .../sw/real-world-assets/index.md | 93 + public/content/translations/sw/refi/index.md | 81 + .../translations/sw/restaking/index.md | 188 ++ .../sw/roadmap/account-abstraction/index.md | 71 + .../sw/roadmap/beacon-chain/index.md | 62 +- .../sw/roadmap/danksharding/index.md | 95 + .../translations/sw/roadmap/dencun/index.md | 121 + .../translations/sw/roadmap/fusaka/index.md | 301 +++ .../sw/roadmap/fusaka/peerdas/index.md | 88 + .../sw/roadmap/future-proofing/index.md | 53 + .../translations/sw/roadmap/merge/index.md | 223 +- .../sw/roadmap/merge/issuance/index.md | 143 ++ .../translations/sw/roadmap/pbs/index.md | 50 + .../sw/roadmap/pectra/7702/index.md | 149 ++ .../translations/sw/roadmap/pectra/index.md | 128 ++ .../sw/roadmap/pectra/maxeb/index.md | 204 ++ .../translations/sw/roadmap/scaling/index.md | 58 + .../roadmap/secret-leader-election/index.md | 44 + .../translations/sw/roadmap/security/index.md | 48 + .../sw/roadmap/single-slot-finality/index.md | 65 + .../sw/roadmap/statelessness/index.md | 104 + .../sw/roadmap/user-experience/index.md | 36 + .../sw/roadmap/verkle-trees/index.md | 66 + .../content/translations/sw/security/index.md | 305 +++ .../translations/sw/smart-contracts/index.md | 90 + .../translations/sw/social-networks/index.md | 140 ++ .../translations/sw/staking/dvt/index.md | 91 + .../translations/sw/staking/pools/index.md | 84 + .../translations/sw/staking/saas/index.md | 92 + .../translations/sw/staking/solo/index.md | 199 ++ .../sw/staking/withdrawals/index.md | 217 ++ public/content/translations/sw/web3/index.md | 169 ++ .../translations/sw/what-are-apps/index.md | 81 + .../translations/sw/whitepaper/index.md | 523 +++++ .../translations/sw/wrapped-eth/index.md | 70 + .../sw/zero-knowledge-proofs/index.md | 238 ++ src/intl/sw/common.json | 10 +- src/intl/sw/glossary-tooltip.json | 164 ++ src/intl/sw/glossary.json | 408 ++++ src/intl/sw/learn-quizzes.json | 698 ++++++ src/intl/sw/page-10-year-anniversary.json | 131 ++ src/intl/sw/page-about.json | 35 + src/intl/sw/page-apps.json | 345 +-- src/intl/sw/page-assets.json | 61 + src/intl/sw/page-bug-bounty.json | 136 +- src/intl/sw/page-collectibles.json | 67 + src/intl/sw/page-community-events.json | 5 +- src/intl/sw/page-community.json | 64 + ...-translation-program-acknowledgements.json | 42 + ...ting-translation-program-contributors.json | 10 + src/intl/sw/page-developers-docs.json | 150 ++ src/intl/sw/page-developers-index.json | 104 +- .../sw/page-developers-learning-tools.json | 32 +- .../sw/page-developers-local-environment.json | 12 +- src/intl/sw/page-developers-tutorials.json | 20 +- src/intl/sw/page-energy-consumption.json | 21 + ...thereum-history-founder-and-ownership.json | 65 + src/intl/sw/page-ethereum-vs-bitcoin.json | 101 + src/intl/sw/page-founders.json | 65 + src/intl/sw/page-gas.json | 4 +- src/intl/sw/page-history.json | 7 + src/intl/sw/page-index.json | 2 +- src/intl/sw/page-layer-2-learn.json | 55 + src/intl/sw/page-layer-2-networks.json | 85 + src/intl/sw/page-layer-2.json | 114 +- src/intl/sw/page-learn.json | 39 +- src/intl/sw/page-resources.json | 97 + src/intl/sw/page-roadmap-vision.json | 36 +- src/intl/sw/page-roadmap.json | 102 + src/intl/sw/page-run-a-node.json | 12 +- src/intl/sw/page-stablecoins.json | 72 +- .../sw/page-staking-deposit-contract.json | 2 +- src/intl/sw/page-staking.json | 63 +- src/intl/sw/page-start.json | 38 + .../sw/page-trillion-dollar-security.json | 196 ++ src/intl/sw/page-upgrades-get-involved.json | 14 +- src/intl/sw/page-upgrades-index.json | 100 +- src/intl/sw/page-upgrades.json | 8 +- src/intl/sw/page-wallets-find-wallet.json | 11 +- src/intl/sw/page-wallets.json | 3 +- src/intl/sw/page-what-is-ether.json | 100 + src/intl/sw/page-what-is-ethereum.json | 309 +-- .../sw/page-what-is-the-ethereum-network.json | 89 + src/intl/sw/table.json | 6 +- src/intl/sw/template-usecase.json | 11 +- 304 files changed, 56766 insertions(+), 1011 deletions(-) create mode 100644 public/content/translations/sw/about/index.md create mode 100644 public/content/translations/sw/ai-agents/index.md create mode 100644 public/content/translations/sw/bridges/index.md create mode 100644 public/content/translations/sw/community/code-of-conduct/index.md create mode 100644 public/content/translations/sw/community/events/organizing/index.md create mode 100644 public/content/translations/sw/community/research/index.md create mode 100644 public/content/translations/sw/contributing/adding-desci-projects/index.md create mode 100644 public/content/translations/sw/contributing/adding-developer-tools/index.md create mode 100644 public/content/translations/sw/contributing/adding-exchanges/index.md create mode 100644 public/content/translations/sw/contributing/adding-glossary-terms/index.md create mode 100644 public/content/translations/sw/contributing/adding-layer-2s/index.md create mode 100644 public/content/translations/sw/contributing/adding-products/index.md create mode 100644 public/content/translations/sw/contributing/adding-resources/index.md create mode 100644 public/content/translations/sw/contributing/adding-staking-products/index.md create mode 100644 public/content/translations/sw/contributing/adding-wallets/index.md create mode 100644 public/content/translations/sw/contributing/content-resources/index.md create mode 100644 public/content/translations/sw/contributing/design-principles/index.md create mode 100644 public/content/translations/sw/contributing/design/adding-design-resources/index.md create mode 100644 public/content/translations/sw/contributing/design/index.md create mode 100644 public/content/translations/sw/contributing/index.md create mode 100644 public/content/translations/sw/contributing/quizzes/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/faq/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/how-to-translate/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/mission-and-vision/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/playbook/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/resources/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/translatathon/details/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/translatathon/index.md create mode 100644 public/content/translations/sw/contributing/translation-program/translators-guide/index.md create mode 100644 public/content/translations/sw/dao/index.md create mode 100644 public/content/translations/sw/decentralized-identity/index.md create mode 100644 public/content/translations/sw/defi/index.md create mode 100644 public/content/translations/sw/desci/index.md create mode 100644 public/content/translations/sw/developers/docs/accounts/index.md create mode 100644 public/content/translations/sw/developers/docs/apis/backend/index.md create mode 100644 public/content/translations/sw/developers/docs/apis/javascript/index.md create mode 100644 public/content/translations/sw/developers/docs/apis/json-rpc/index.md create mode 100644 public/content/translations/sw/developers/docs/blocks/index.md create mode 100644 public/content/translations/sw/developers/docs/bridges/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/poa/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attestations/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/faqs/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/gasper/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/keys/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pow/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md create mode 100644 public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md create mode 100644 public/content/translations/sw/developers/docs/dapps/index.md create mode 100644 public/content/translations/sw/developers/docs/data-and-analytics/block-explorers/index.md create mode 100644 public/content/translations/sw/developers/docs/data-and-analytics/index.md create mode 100644 public/content/translations/sw/developers/docs/data-availability/blockchain-data-storage-strategies/index.md create mode 100644 public/content/translations/sw/developers/docs/data-availability/index.md create mode 100644 public/content/translations/sw/developers/docs/data-structures-and-encoding/index.md create mode 100644 public/content/translations/sw/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md create mode 100644 public/content/translations/sw/developers/docs/data-structures-and-encoding/rlp/index.md create mode 100644 public/content/translations/sw/developers/docs/data-structures-and-encoding/ssz/index.md create mode 100644 public/content/translations/sw/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md create mode 100644 public/content/translations/sw/developers/docs/design-and-ux/dex-design-best-practice/index.md create mode 100644 public/content/translations/sw/developers/docs/design-and-ux/heuristics-for-web3/index.md create mode 100644 public/content/translations/sw/developers/docs/design-and-ux/index.md create mode 100644 public/content/translations/sw/developers/docs/development-networks/index.md create mode 100644 public/content/translations/sw/developers/docs/ethereum-stack/index.md create mode 100644 public/content/translations/sw/developers/docs/evm/index.md create mode 100644 public/content/translations/sw/developers/docs/evm/opcodes/index.md create mode 100644 public/content/translations/sw/developers/docs/frameworks/index.md create mode 100644 public/content/translations/sw/developers/docs/gas/index.md create mode 100644 public/content/translations/sw/developers/docs/ides/index.md create mode 100644 public/content/translations/sw/developers/docs/index.md create mode 100644 public/content/translations/sw/developers/docs/intro-to-ether/index.md create mode 100644 public/content/translations/sw/developers/docs/intro-to-ethereum/index.md create mode 100644 public/content/translations/sw/developers/docs/mev/index.md create mode 100644 public/content/translations/sw/developers/docs/networking-layer/index.md create mode 100644 public/content/translations/sw/developers/docs/networking-layer/network-addresses/index.md create mode 100644 public/content/translations/sw/developers/docs/networking-layer/portal-network/index.md create mode 100644 public/content/translations/sw/developers/docs/networks/index.md create mode 100644 public/content/translations/sw/developers/docs/nodes-and-clients/archive-nodes/index.md create mode 100644 public/content/translations/sw/developers/docs/nodes-and-clients/bootnodes/index.md create mode 100644 public/content/translations/sw/developers/docs/nodes-and-clients/client-diversity/index.md create mode 100644 public/content/translations/sw/developers/docs/nodes-and-clients/index.md create mode 100644 public/content/translations/sw/developers/docs/nodes-and-clients/light-clients/index.md create mode 100644 public/content/translations/sw/developers/docs/nodes-and-clients/node-architecture/index.md create mode 100644 public/content/translations/sw/developers/docs/nodes-and-clients/nodes-as-a-service/index.md create mode 100644 public/content/translations/sw/developers/docs/nodes-and-clients/run-a-node/index.md create mode 100644 public/content/translations/sw/developers/docs/oracles/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/dart/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/delphi/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/dot-net/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/elixir/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/golang/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/java/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/javascript/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/python/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/ruby/index.md create mode 100644 public/content/translations/sw/developers/docs/programming-languages/rust/index.md create mode 100644 public/content/translations/sw/developers/docs/scaling/index.md create mode 100644 public/content/translations/sw/developers/docs/scaling/optimistic-rollups/index.md create mode 100644 public/content/translations/sw/developers/docs/scaling/plasma/index.md create mode 100644 public/content/translations/sw/developers/docs/scaling/sidechains/index.md create mode 100644 public/content/translations/sw/developers/docs/scaling/state-channels/index.md create mode 100644 public/content/translations/sw/developers/docs/scaling/validium/index.md create mode 100644 public/content/translations/sw/developers/docs/scaling/zk-rollups/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/anatomy/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/compiling/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/composability/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/deploying/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/formal-verification/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/languages/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/libraries/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/naming/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/security/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/testing/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/upgrading/index.md create mode 100644 public/content/translations/sw/developers/docs/smart-contracts/verifying/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/tokens/erc-1155/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/tokens/erc-1363/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/tokens/erc-4626/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/tokens/erc-721/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/tokens/erc-777/index.md create mode 100644 public/content/translations/sw/developers/docs/standards/tokens/index.md create mode 100644 public/content/translations/sw/developers/docs/storage/index.md create mode 100644 public/content/translations/sw/developers/docs/transactions/index.md create mode 100644 public/content/translations/sw/developers/docs/web2-vs-web3/index.md create mode 100644 public/content/translations/sw/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md create mode 100644 public/content/translations/sw/developers/tutorials/all-you-can-cache/index.md create mode 100644 public/content/translations/sw/developers/tutorials/app-plasma/index.md create mode 100644 public/content/translations/sw/developers/tutorials/calling-a-smart-contract-from-javascript/index.md create mode 100644 public/content/translations/sw/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md create mode 100644 public/content/translations/sw/developers/tutorials/deploying-your-first-smart-contract/index.md create mode 100644 public/content/translations/sw/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md create mode 100644 public/content/translations/sw/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md create mode 100644 public/content/translations/sw/developers/tutorials/eip-1271-smart-contract-signatures/index.md create mode 100644 public/content/translations/sw/developers/tutorials/erc-721-vyper-annotated-code/index.md create mode 100644 public/content/translations/sw/developers/tutorials/erc20-annotated-code/index.md create mode 100644 public/content/translations/sw/developers/tutorials/erc20-with-safety-rails/index.md create mode 100644 public/content/translations/sw/developers/tutorials/ethereum-for-web2-auth/index.md create mode 100644 public/content/translations/sw/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md create mode 100644 public/content/translations/sw/developers/tutorials/guide-to-smart-contract-security-tools/index.md create mode 100644 public/content/translations/sw/developers/tutorials/hello-world-smart-contract-fullstack/index.md create mode 100644 public/content/translations/sw/developers/tutorials/hello-world-smart-contract/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-implement-an-erc721-market/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-mint-an-nft/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-view-nft-in-metamask/index.md create mode 100644 public/content/translations/sw/developers/tutorials/how-to-write-and-deploy-an-nft/index.md create mode 100644 public/content/translations/sw/developers/tutorials/interact-with-other-contracts-from-solidity/index.md create mode 100644 public/content/translations/sw/developers/tutorials/ipfs-decentralized-ui/index.md create mode 100644 public/content/translations/sw/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md create mode 100644 public/content/translations/sw/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md create mode 100644 public/content/translations/sw/developers/tutorials/logging-events-smart-contracts/index.md create mode 100644 public/content/translations/sw/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md create mode 100644 public/content/translations/sw/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md create mode 100644 public/content/translations/sw/developers/tutorials/nft-minter/index.md create mode 100644 public/content/translations/sw/developers/tutorials/optimism-std-bridge-annotated-code/index.md create mode 100644 public/content/translations/sw/developers/tutorials/reverse-engineering-a-contract/index.md create mode 100644 public/content/translations/sw/developers/tutorials/run-node-raspberry-pi/index.md create mode 100644 public/content/translations/sw/developers/tutorials/scam-token-tricks/index.md create mode 100644 public/content/translations/sw/developers/tutorials/secret-state/index.md create mode 100644 public/content/translations/sw/developers/tutorials/secure-development-workflow/index.md create mode 100644 public/content/translations/sw/developers/tutorials/send-token-ethersjs/index.md create mode 100644 public/content/translations/sw/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md create mode 100644 public/content/translations/sw/developers/tutorials/server-components/index.md create mode 100644 public/content/translations/sw/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md create mode 100644 public/content/translations/sw/developers/tutorials/short-abi/index.md create mode 100644 public/content/translations/sw/developers/tutorials/smart-contract-security-guidelines/index.md create mode 100644 public/content/translations/sw/developers/tutorials/stealth-addr/index.md create mode 100644 public/content/translations/sw/developers/tutorials/the-graph-fixing-web3-data-querying/index.md create mode 100644 public/content/translations/sw/developers/tutorials/token-integration-checklist/index.md create mode 100644 public/content/translations/sw/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/index.md create mode 100644 public/content/translations/sw/developers/tutorials/understand-the-erc-20-token-smart-contract/index.md create mode 100644 public/content/translations/sw/developers/tutorials/uniswap-v2-annotated-code/index.md create mode 100644 public/content/translations/sw/developers/tutorials/using-websockets/index.md create mode 100644 public/content/translations/sw/developers/tutorials/waffle-dynamic-mocking-and-testing-calls/index.md create mode 100644 public/content/translations/sw/developers/tutorials/waffle-say-hello-world-with-hardhat-and-ethers/index.md create mode 100644 public/content/translations/sw/developers/tutorials/waffle-test-simple-smart-contract/index.md create mode 100644 public/content/translations/sw/developers/tutorials/yellow-paper-evm/index.md create mode 100644 public/content/translations/sw/energy-consumption/index.md create mode 100644 public/content/translations/sw/eth/supply/index.md create mode 100644 public/content/translations/sw/ethereum-forks/index.md create mode 100644 public/content/translations/sw/foundation/index.md create mode 100644 public/content/translations/sw/gaming/index.md create mode 100644 public/content/translations/sw/glossary/index.md create mode 100644 public/content/translations/sw/governance/index.md create mode 100644 public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md create mode 100644 public/content/translations/sw/guides/how-to-id-scam-tokens/index.md create mode 100644 public/content/translations/sw/guides/how-to-revoke-token-access/index.md create mode 100644 public/content/translations/sw/guides/how-to-swap-tokens/index.md create mode 100644 public/content/translations/sw/guides/how-to-use-a-bridge/index.md create mode 100644 public/content/translations/sw/guides/how-to-use-a-wallet/index.md create mode 100644 public/content/translations/sw/guides/index.md create mode 100644 public/content/translations/sw/payments/index.md create mode 100644 public/content/translations/sw/prediction-markets/index.md create mode 100644 public/content/translations/sw/privacy/index.md create mode 100644 public/content/translations/sw/real-world-assets/index.md create mode 100644 public/content/translations/sw/refi/index.md create mode 100644 public/content/translations/sw/restaking/index.md create mode 100644 public/content/translations/sw/roadmap/account-abstraction/index.md create mode 100644 public/content/translations/sw/roadmap/danksharding/index.md create mode 100644 public/content/translations/sw/roadmap/dencun/index.md create mode 100644 public/content/translations/sw/roadmap/fusaka/index.md create mode 100644 public/content/translations/sw/roadmap/fusaka/peerdas/index.md create mode 100644 public/content/translations/sw/roadmap/future-proofing/index.md create mode 100644 public/content/translations/sw/roadmap/merge/issuance/index.md create mode 100644 public/content/translations/sw/roadmap/pbs/index.md create mode 100644 public/content/translations/sw/roadmap/pectra/7702/index.md create mode 100644 public/content/translations/sw/roadmap/pectra/index.md create mode 100644 public/content/translations/sw/roadmap/pectra/maxeb/index.md create mode 100644 public/content/translations/sw/roadmap/scaling/index.md create mode 100644 public/content/translations/sw/roadmap/secret-leader-election/index.md create mode 100644 public/content/translations/sw/roadmap/security/index.md create mode 100644 public/content/translations/sw/roadmap/single-slot-finality/index.md create mode 100644 public/content/translations/sw/roadmap/statelessness/index.md create mode 100644 public/content/translations/sw/roadmap/user-experience/index.md create mode 100644 public/content/translations/sw/roadmap/verkle-trees/index.md create mode 100644 public/content/translations/sw/security/index.md create mode 100644 public/content/translations/sw/smart-contracts/index.md create mode 100644 public/content/translations/sw/social-networks/index.md create mode 100644 public/content/translations/sw/staking/dvt/index.md create mode 100644 public/content/translations/sw/staking/pools/index.md create mode 100644 public/content/translations/sw/staking/saas/index.md create mode 100644 public/content/translations/sw/staking/solo/index.md create mode 100644 public/content/translations/sw/staking/withdrawals/index.md create mode 100644 public/content/translations/sw/web3/index.md create mode 100644 public/content/translations/sw/what-are-apps/index.md create mode 100644 public/content/translations/sw/whitepaper/index.md create mode 100644 public/content/translations/sw/wrapped-eth/index.md create mode 100644 public/content/translations/sw/zero-knowledge-proofs/index.md create mode 100644 src/intl/sw/glossary-tooltip.json create mode 100644 src/intl/sw/glossary.json create mode 100644 src/intl/sw/learn-quizzes.json create mode 100644 src/intl/sw/page-10-year-anniversary.json create mode 100644 src/intl/sw/page-about.json create mode 100644 src/intl/sw/page-assets.json create mode 100644 src/intl/sw/page-collectibles.json create mode 100644 src/intl/sw/page-community.json create mode 100644 src/intl/sw/page-contributing-translation-program-acknowledgements.json create mode 100644 src/intl/sw/page-contributing-translation-program-contributors.json create mode 100644 src/intl/sw/page-energy-consumption.json create mode 100644 src/intl/sw/page-ethereum-history-founder-and-ownership.json create mode 100644 src/intl/sw/page-ethereum-vs-bitcoin.json create mode 100644 src/intl/sw/page-founders.json create mode 100644 src/intl/sw/page-history.json create mode 100644 src/intl/sw/page-layer-2-learn.json create mode 100644 src/intl/sw/page-layer-2-networks.json create mode 100644 src/intl/sw/page-resources.json create mode 100644 src/intl/sw/page-roadmap.json create mode 100644 src/intl/sw/page-start.json create mode 100644 src/intl/sw/page-trillion-dollar-security.json create mode 100644 src/intl/sw/page-what-is-ether.json create mode 100644 src/intl/sw/page-what-is-the-ethereum-network.json diff --git a/public/content/translations/sw/about/index.md b/public/content/translations/sw/about/index.md new file mode 100644 index 00000000000..2ad7e949503 --- /dev/null +++ b/public/content/translations/sw/about/index.md @@ -0,0 +1,134 @@ +--- +title: "''Kuhusu sisi.''" +description: "''Kuhusu timu, jamii, na dhamira ya ethereum.org" +lang: sw +--- + +# Kuhusu ethereum.org {#about-ethereumorg} + +''ethereum.org ni chanzo-wazi cha umma kwa ajili ya jamii ya Ethereum ambacho mtu yeyote anaweza kuchangia.''. ''Tuna timu ndogo ya msingi iliyejitolea kudumisha na kuendeleza kurasa za mtandao, kwa michango kutoka kwa maelfu ya wanajamii duniani kote.''. + +**Hakuna mtu yeyote kutoka ethereum.org atakayewasiliana nawe kamwe. Usijibu.** + +## Tanbihi kuhusu majina {#a-note-on-names} + +''Ni jambo la kawaida kwa watu kuchanganya majina ndani ya mazingira ya Ethereum, jambo ambalo linaweza kusababisha mitazamo isiyo sahihi kuhusu jinsi Ethereum inavyofanya kazi.''. ''Hapa kuna ufafanuzi mfupi wa kusaidia kufafanua maswala.'': + +### Ethereum {#ethereum} + +''Ethereum ni wavu wa umma, msururu wa vizuizi, na itifaki ya wazi -unaotumika, kuongozwa, kuendeshwa na kumilikiwa na jamii ya kimataifa yenye maelfu ya watengenezaji, waendeshaji wa kituo, wenye ETH na watumiaji.''. + +[Zaidi kuhusu Ethereum](/what-is-ethereum/) + +[Zaidi kuhusu utawala wa Ethereum](/utawala/) + +### Ether (ETH) {#ether-or-eth} + +''Ether (maarufu pia kwa kifupi chake cha biashara, ETH) ni sarafu asili inayotumika katika miamala ya Ethereum.''. ''ETH inastahili kulipia matumizi ya wavu wa Ethereum ( kwa njia ya ada za miamala).''. ''ETH pia hutumika kulinda mtandao kupitia kuweka dhamana.''. ''Wakati watu wanazungumza kuhusu bei ya Ethereum, wanamaanisha ETH kama mali.''. + +[Zaidi kuhusu ETH](/what-is-ether/) + +[Zaidi kuhusu kuhodhi ETH](/staking/) + +### Msingi wa Ethereum {#ethereum-foundation} + +Shirika lisilo la faida, lililofadhiliwa awali na uuzaji wa watu wengi wa ETH, inayojitolea kwa usaidizi wa mtandao wa Ethereum na mfumo wa ikolojia. + +[Zaidi kuhusu Msingi wa Ethereum](/foundation/) + +### ethereum.org {#ethereum-org} + +Tovuti ya umma, chanzo-wazi na rasilimali ya elimu kwa jumuiya ya Ethereum. ethereum.org inaongozwa na timu ndogo ya msingi, inayofadhiliwa na msingi wa Ethereum, kwa michango kutoka kwa maelfu ya wanajamii kote ulimwenguni. + +Ukurasa huu unashughulikia habari zaidi kuhusu ethereum.org. + +## Dhamira yetu {#our-mission} + +**dhamira ya ethereum.org ni kuwa lango bora kwa jumuiya inayokua ya Ethereum** + +Tunajitahidi kuunda nyenzo ya elimu iliyo rahisi kueleweka kwa mada zote zinazohusiana na Ethereum, iliyoundwa ili kuwasaidia watumiaji wapya kuifahamu Ethereum na dhana zake kuu. Tunataka: + +- kuelezea Ethereum kwa mtu yeyote mpya kwa teknolojia +- husaidia watumiaji wapya kuanza na ETH na Ethereum +- kusaidia watengenezaji wapya kuanza kujenga +- mabadiliko na Maendeleo katika Ulimwengu wa Ethereum +- onyesha rasilimali iliyoundwa na wanajamii +- kuleta elimu ya Ethereum kwa lugha nyingi iwezekanavyo + +Ili kufikia dhamira hii, timu yetu inaangazia malengo mawili ya msingi kwenye ethereum.org: + +### 1. Kuboresha uzoefu wa mtumiaji kwa wageni wa ethereum.org {#visitors} + +- Panua, boresha, na weka maudhui kuwa ya kisasa +- Boresha urahisi wa kutumia na upatikanaji kupitia ulinganifu wa lugha na mbinu bora za maendeleo ya wavuti +- Ongeza ushiriki wa watumiaji kupitia vipengele kama vile tafiti, maswali na miunganisho ya web3 +- Weka tovuti iwe nyepesi na tendaji + +### 2. Kuza, imarisha na kuwezesha jumuiya yetu ya wachangiaji {#community} + +- Kuza jumla ya idadi ya wachangiaji kwenye tovuti +- Boresha uhifadhi wa wachangiaji kupitia ushirikiano, shukrani na zawadi +- Kuwawezesha wanajamii kutoa mchango mkubwa zaidi +- Kuwezesha utofauti mkubwa zaidi wa michango: kanuni, maudhui, muundo, tafsiri, udhibiti +- Hakikisha msingi wa msimbo uko wa kisasa, safi, na umeandikwa kwa maandishi ya kueleweka + +## Kanuni za msingi {#core-principles} + +Tunayo baadhi ya kanuni za msingi zinazotusaidia kutuongoza kutimiza misheni yetu. + +### 1. ethereum.org ni lango la Ethereum 🌏 {#core-principles-1} + +Tunataka watumiaji wetu wavutiwe na maswali yao kujibiwa. Kwa hivyo tovuti yetu inahitaji kuchanganya habari, "nyakati za kipekee" na viungo vya rasilimali bora za jamii ambazo zipo huko nje. Madhumuni ya maudhui yetu ni kuwa "lango la kuingia" na si kuchukua nafasi ya rasilimali nyingi ambazo tayari zipo. Tuna nia ya kuunga mkono na kujumuika na rasilimali zilizoundwa na jumuiya, kuzipa mwonekano zaidi na kuzifanya ziweze kutambulika zaidi. +[Jumuiya ya Ethereum](/community/) ndiyo kiini cha hili: hatuhitaji tu kuhudumia jumuiya, bali kufanya kazi nayo na kujumuisha maoni yake. Tovuti sio tu ya jumuiya tuliyo nayo sasa bali ni ya jumuiya tunayotarajia kukua. Ni lazima tukumbuke jumuiya yetu ni ya kimataifa, inayo watu kutoka lugha, maeneo na tamaduni nyingi. + +### 2. ethereum.org inabadilika kila wakati 🛠 {#core-principles-2} + +Ethereum na jumuiya daima zinaendelea, kwa hivyo ethereum.org pia. Ndio maana tovuti ina mfumo rahisi wa usanifu na muundo wa moduli. Tunafanya mabadiliko ya mara kwa mara tunapojifunza zaidi kuhusu jinsi watu wanavyotumia tovuti na kile ambacho jumuiya inataka kutoka kwayo. +Sisi ni chanzo huria, na jumuiya ya wachangiaji, kwa hivyo unaweza kupendekeza mabadiliko au utusaidie pia. +[Jifunze kuhusu kuchangia](/contributing/) + +### 3. ethereum.org si tovuti ya kawaida ya bidhaa 🦄 {#core-principles-3} + +Ethereum ni jambo kubwa: inajumuisha jumuiya, teknolojia, seti ya mawazo na itikadi, na zaidi. +Hii inamaanisha kuwa tovuti inahitaji kushughulikia safari nyingi tofauti za watumiaji, kutoka kwa "msanifu programu ambaye anataka zana maalum" na "mgeni ambaye amenunua ETH na hajui pochi ni nini". +"Ni tovuti gani bora kwa jukwaa la kiambajengo?" bado ni swali wazi - sisi ni waanzilishi. Kuunda hii kunahitaji majaribio. + +## Ramani ya maendeleo ya bidhaa {#roadmap} + +Ili kufanya kazi yetu ipatikane zaidi na kuhimiza ushirikiano zaidi wa jumuiya, timu ya msingi ya ethereum.org inachapisha muhtasari wa malengo ya ramani yetu ya maendeleo ya [shape up cycle](https://www.productplan.com/glossary/shape-up-method/). + +[Tazama ramani yetu ya maendeleo ya bidhaa ya Mzunguko 1 wa 2025](https://github.com/ethereum/ethereum-org-website/issues/14726) + +**Unaonaje?** Tunathamini maoni kuhusu ramani yetu ya maendeleo kila wakati - ikiwa kuna jambo unalofikiri tunapaswa kulifanyia kazi, tafadhali tujulishe! Tunakaribisha mawazo na PRs kutoka kwa mtu yeyote katika jumuiya. + +**Je, unataka kujihusisha?** [Jifunze zaidi kuhusu kuchangia](/contributing/), [tupate kwenye Twitter](https://x.com/ethdotorg), au jiunge na majadiliano ya jamii katika [seva yetu ya Discord](https://discord.gg/ethereum-org). + +## Kanuni za usanifu {#design-principles} + +Tunatumia seti ya [kanuni za usanifu](/contributing/design-principles/) kuongoza maudhui yetu na maamuzi ya usanifu kwenye tovuti. + +## Mfumo wa usanifu {#design-system} + +Tulijenga na kutoa [mfumo wa usanifu](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System?node-id=0%3A1&t=QBt9RkhpPqzE3Aa6-1) ili kutoa vipengele haraka zaidi na kuruhusu wanajamii kushiriki katika usanifu huria wa ethereum.org. + +Unataka kujihusisha?[Fuatilia kwenye Figma](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System), [suala la GitHub](https://github.com/ethereum/ethereum-org-website/issues/6284) na ujiunge na mazungumzo kwenye [chaneli yetu ya Discord ya #design](https://discord.gg/ethereum-org). + +## Mwongozo wa mtindo {#style-guide} + +Tuna [mwongozo wa mtindo](/contributing/style-guide/) wa kusawazisha vipengele fulani vya uandishi wa maudhui ili kurahisisha mchakato wa uchangiaji. + +Hakikisha umesoma [kanuni zetu](/contributing/design-principles/) na [mwongozo wetu wa mtindo](/contributing/style-guide/) ikiwa ungependa [kuchangia kwenye tovuti](/contributing/). + +Tunakaribisha maoni kuhusu kanuni zetu za muundo, mfumo wa muundo na mwongozo wa mtindo. Kumbuka, ethereum.org ni ya jumuiya, na jumuiya. + +## Leseni {#license} + +Tovuti ya ethereum.org ni chanzo huria na imejengwa chini ya [Leseni ya MIT](https://github.com/ethereum/ethereum-org-website/blob/dev/LICENSE) isipokuwa kama itaelezwa vinginevyo. Zaidi kuhusu [masharti ya matumizi](/terms-of-use/) ya ethereum.org. + +## Nafasi za kazi zilizo wazi {#open-jobs} + +''Ingawa tovuti hii ni chanzio huria na mtu yeyote anaweza kuifanyia kazi, tun timu maalum inayojishughulisha na ethereum.org na miradi mengine na wavuti ya Ethereum.' + +''Tutaweka nafasi za kazi hapa.''. Ikiwa huoni nafasi yako hapa, nenda kwenye [seva yetu ya Discord](https://discord.gg/ethereum-org) na utujulishe jinsi ambavyo ungependa kufanya kazi nasi! + +''Kuangalia zaidi ya timu ya etherium.org?''? [Angalia kazi zingine zinazohusiana na Ethereum](/community/get-involved/#ethereum-jobs/). diff --git a/public/content/translations/sw/ai-agents/index.md b/public/content/translations/sw/ai-agents/index.md new file mode 100644 index 00000000000..9fcbab01d27 --- /dev/null +++ b/public/content/translations/sw/ai-agents/index.md @@ -0,0 +1,143 @@ +--- +title: Wakala za AI +metaTitle: Mawakala wa AI | Mawakala wa AI kwenye Ethereum +description: Muhtasari wa mawakala wa AI kwenye Ethereum +lang: sw +template: use-cases +emoji: ":roboti:" +sidebarDepth: 2 +image: /picha/ai-mawakala/shujaa-picha.png +alt: Watu walikusanyika kwenye jedwali la kituo +summaryPoint1: AI ambayo inaingiliana na kiambajengo na inafanya biashara kwa kujitegemea +summaryPoint2: Hudhibiti pochi na fedha zilizo kwenye mnyororo +summaryPoint3: Huajiri watu au mawakala wengine kwa kazi +buttons: + - content: Mawakala wa AI ni nini? + toId: mawakala wa-ai-ni-nini + - content: Chunguza mawakala + toId: ai-mawakala-katika-ethereum + isSecondary: false +--- + +Hebu fikiria kupitia Ethereum ukitumia msaidizi wa AI anayesoma mwenendo wa soko kwenye mnyororo 24/7, anajibu maswali, na hata kutekeleza miamala kwa niaba yako. Karibu katika ulimwengu wa Mawakala wa AI—mifumo mahiri iliyoundwa ili kurahisisha maisha yako ya kidijitali. + +Kwenye Ethereum, tunaona ubunifu wa mawakala wa AI kuanzia washawishi bandia na waundaji wa maudhui wanaojitegemea hadi majukwaa ya uchanganuzi wa soko katika wakati halisi, kuwawezesha watumiaji kwa kutoa maarifa, burudani na ufanisi wa utendaji. + +## Mawakala wa AI ni nini? {#mawakala-ni-nini} + +Mawakala wa AI ni programu za kompyuta zinazotumia akili ya bandia kufanya kazi au kufanya maamuzi yako mwenyewe. Wanajifunza kutoka kwa data, kukabiliana na mabadiliko, na kushughulikia kazi ngumu. Wanafanya kazi bila kukoma na wanaweza kugundua fursa papo hapo. + +### Jinsi mawakala wa AI hufanya kazi na viambajengo {#how-ai-agents-work-with-blockchains} + +Katika ufadhili wa kitamaduni, mawakala wa AI mara nyingi hufanya kazi katika mazingira ya kati na pembejeo ndogo za data. Hii inazuia uwezo wao wa kujifunza au kudhibiti mali kwa uhuru. + +Kwa upande mwingine, mfumo mtawanyo wa ikilojia wa Ethereum hutoa faida kadhaa muhimu: + +- Data iliyo wazi: Ufikiaji wa maelezo ya muda halisi ya kiambajengo. +- Umiliki halisi wa mali: Raslimali za kidijitali zinamilikiwa kikamilifu na mawakala wa AI. +- Utendaji thabiti wa mnyororo: Huwawezesha Mawakala wa AI kutekeleza miamala, kuingiliana na mikataba mahiri, kutoa ukwasi, na kushirikiana katika itifaki zote. + +Sababu hizi hubadilisha mawakala wa AI kutoka roboti rahisi hadi mifumo inayobadilika, inayojiboresha ambayo hutoa thamani kubwa katika sekta nyingi: + + + + + + + +## AI inayoweza kuthibitishwa {#verifiable-ai} + +Mawakala wa AI wanaoendesha offchain mara nyingi hufanya kazi kama "visanduku vyeusi"—hoja zao, pembejeo zao, na matokeo yao hayawezi kuthibitishwa kwa kujitegemea. Ethereum inabadilisha hilo. Kwa kuimarisha tabia ya wakala onchain, wasanidi programu wanaweza kuunda mawakala ambao ni _wasiohitaji kuaminiwa_, _wazi_, na _wanaojitegemea kiuchumi_. Matendo ya mawakala kama hao yanaweza kukaguliwa, kudhibitiwa na kuthibitishwa. + +### Makisio yanayoweza kuthibitishwa {#verifiable-inference} + +Makisio ya AI kwa kawaida hufanyika offchain, ambapo utekelezaji ni wa bei rahisi lakini utekelezaji wa modeli huwa hauko wazi. Kwenye Ethereum, wasanidi programu wanaweza kuoanisha mawakala na ukokotoaji unaoweza kuthibitishwa kwa kutumia mbinu kadhaa: + +- [**zkML (zero-knowledge machine learning)**](https://opengradient.medium.com/a-gentle-introduction-to-zkml-8049a0e10a04) huruhusu mawakala kuthibitisha kuwa modeli ilitekelezwa ipasavyo bila kufichua modeli au pembejeo. +- [**Uthibitisho wa TEE (mazingira ya utekelezaji ya kuaminika)**](https://en.wikipedia.org/wiki/Trusted_execution_environment) huruhusu ithibati zinazoungwa mkono na maunzi kwamba wakala aliendesha modeli maalum au njia ya msimbo. +- **Kutobadilika kwa onchain** huhakikisha ithibati na uthibitisho huu unaweza kurejelewa, kuchezwa tena, na kuaminiwa na mkataba au wakala yeyote. + +## Malipo, na biashara na x402 {#x402} + +Itifaki ya [x402](https://www.x402.org/), iliyotumwa kwenye Ethereum na L2s, huwapa mawakala njia asilia ya kulipia rasilimali na kuingiliana kiuchumi bila uingiliaji wa binadamu. Wakala wanaweza: + +- Kulipia ukokotoaji, data, na miito ya API kwa kutumia stablecoins. +- Kuomba au kuthibitisha uthibitisho kutoka kwa mawakala au huduma zingine +- Kushiriki katika biashara ya wakala-kwa-wakala, kununua na kuuza ukokotoaji, data, au matokeo ya modeli + +x402 inageuza Ethereum kuwa safu ya kiuchumi inayoweza kupangwa kwa mawakala wanaojitegemea, kuwezesha mwingiliano wa kulipia-kwa-matumizi badala ya akaunti, usajili, au malipo ya kati. + +### Usalama wa kifedha wa kiwakala {#agentic-finance-security} + +Wakala wanaojitegemea wanahitaji vizuizi. Ethereum huwapa katika kiwango cha mkoba na mkataba: + +- [Akaunti mahiri (EIP-4337)](https://eips.ethereum.org/EIPS/eip-4337) huwaruhusu wasanidi programu kutekeleza vikomo vya matumizi, orodha zilizoidhinishwa, funguo za vipindi na ruhusa za kina. +- Vikwazo vilivyopangwa katika mikataba-erevu vinaweza kuzuia kile ambacho wakala anaruhusiwa kufanya. +- Vikomo vinavyotegemea makisio (k.m., kuhitaji ithibati ya zkML kabla ya kutekeleza kitendo hatari) huongeza safu nyingine ya usalama. + +Vidhibiti hivi huwezesha upelekaji wa mawakala wanaojitegemea ambao hawana mipaka. + +### Rejesta za onchain: ERC-8004 {#erc-8004} + +[ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) ni kiwango kinachochipukia (kwa sasa kinapitiwa na wenzao) kinachopendekeza rejesta za onchain za utambulisho wa wakala, uwezo, na uthibitisho. + +Ikikubalika, inaweza kutoa: + +- Saraka ya pamoja, isiyohitaji kuaminiwa ya mawakala +- Miundo sanifu ya uthibitishaji +- Msingi wa "miundombinu ya wakala isiyohitaji kuaminiwa" moja kwa moja kwenye Mtandao Mkuu wa Ethereum + +Hii ingeruhusu mawakala kugundua, kuthibitisha, na kufanya miamala kwa urahisi zaidi katika mazingira yaliyogatuliwa kikamilifu. + +## Mawakala wa AI kwenye Ethereum {#ai-agents-on-ethereum} + +Tunaanza kuchunguza uwezo kamili wa mawakala wa AI, na miradi tayari inaboresha maelewano kati ya AI na kiambajengo—hasa katika uwazi na uchumaji wa mapato. + + + +Mwonekano wa kwanza wa Luna kama mgeni wa podcasti + + + +## Pochi zinazodhibitiwa na wakala {#pochi-zinazodhibitiwa-wakala} + +Mawakala kama Luna au AIXBT hudhibiti pochi yao ya mnyororo ([pochi ya AIXBT](https://clusters.xyz/aixbt), [pochi ya Luna](https://zapper.xyz/account/0x0d177181e3763b20d47dc3a72dd584368f shughuli za kiuchumi). + +Wakati wa kampeni ya kijamii ya Luna ya #LunaMuralChallenge, Luna alichagua na kuwazawadia washindi kupitia pochi yake ya Base — akiashiria tukio la kwanza la AI kuajiri wanadamu kwa malipo ya sarafu za kidigitali. + + + + +

Ni vizuri kujua

+

Mawakala wa AI na zana zinazohusiana bado ziko katika maendeleo ya mapema na ni za majaribio sana—zinatumiwa kwa tahadhari.

+
+
+ +## Dhibiti pochi yako kwa kutumia amri za mazungumzo ya kidigitali {#control-your-wallet-using-chat-commands} + +Unaweza kuruka miingiliano changamano ya DeFi na kudhibiti sarafu yako ya kidigitali kwa amri rahisi za mazungumzo za kidigitali. + +Mbinu hii rahisi kueleweka hufanya miamala kuwa haraka, rahisi, na kukabiliwa na makosa kama vile kutuma pesa kwa anwani isiyo sahihi au kulipia ada kupita kiasi. + + + +## Mawakala wa AI dhidi ya roboti za AI {#ai-agents-vs-ai-bots} + +Tofauti kati ya mawakala wa AI na roboti za AI wakati mwingine inaweza kuwa ya kutatanisha, kwani zote mbili hufanya vitendo vya kiotomatiki kulingana na ingizo. + +- Roboti za AI ni kama wasaidizi otomatiki - Zinafuata maagizo mahususi, yaliyopangwa mapema ili kufanya kazi za kawaida. +- Mawakala wa AI ni kama marafiki wenye akili - Wanajifunza kutokana na uzoefu, kukabiliana na taarifa mpya, na kufanya maamuzi wao wenyewe. + +| | Wakala za AI | Roboti za AI | +| ----------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------- | +| **Mwingiliano** | Changamano, kinachobadilika, huru-kujiendesha | Rahisi, uliofafanuliwa mapema, wenye msimbo mgumu | +| **Kujifunza** | Anajifunza kila wakati, anaweza kujaribu na kuzoea data mpya katika muda halisi | Inafanya kazi kwa data iliyofunzwa mapema au sheria zilizowekwa | +| **Kukamilika kwa kazi** | Inalenga kufikia malengo mapana | Huzingatia kazi mahususi pekee | + +## Zama kwa undani zaidi {#dive-deeper} + + + +## Unaweza kujenga wakala wako wa AI {#you-can-build-your-own-ai-agent} + + diff --git a/public/content/translations/sw/bridges/index.md b/public/content/translations/sw/bridges/index.md new file mode 100644 index 00000000000..bed29420942 --- /dev/null +++ b/public/content/translations/sw/bridges/index.md @@ -0,0 +1,145 @@ +--- +title: Kuanzishwa kwa daraja za blockchain +description: Daraja hizi zinakubalisha users waweze kupeleka mapato yao kati ya different blockchains +lang: sw +--- + +# Madaraja ya mnyororo wa bloku {#prerequisites} + +_Web3 imepitia mabadiliko mwanana hadi ikawa ukolojia ya L1 blockchains na ufumbuzi wa L2 scaling, kila mmoja imeboreshwa na uwezo wa kipekee na biashara-offs. Idadi ya blochi mnyororo inakua, na mahitaji ya kusogeza mali kati yao pia yanakua.Tunahitaji daraja kutimiza haya mahitaji._ + + + +## Je, daraja ni nini? {#what-are-bridges} + +Daraja za Blockchain zinatumika sawasawa na daraja tunazozitumia kila siku duniani. Jinsi kama daraja ya kawaida inavyounganisha sehemu mbili, daraja ya blockchain inaunganisha ikolojia mbili ya blockchain. **Madaraja huwezesha mawasiliano kati ya minyororo ya kizuizi kupitia utumaji wa habari na mali**. + +Hebu tuzingatie mfano: + +Umetoka Amerika na unapanga kuzuru Ughaibuni. Una USD lakini unahitaji kutumia EUR. Ukitaka kuexchange USD yako iwe EUR unatumia exchange ya masarafu utakapotozwa ada ndogo. + +Lakini, unafanya nini ikiwa unataka kufanya ubadilishanaji sawa ili utumie [mnyororo wa bloku](/glossary/#blockchain) tofauti? Tuseme unataka kubadilishana [ETH](/glossary/#ether) kwenye Mtandao Mkuu wa Ethereum kwa ETH kwenye [Arbitrum](https://arbitrum.io/). Kama vile tulivyounda exchange ya sarafu ya EUR, tunahitaji utaratibu wa kusongeza ETH kutoka Ethereum hadi Arbitrum. Daraja zinafanya hii shughuli itimizwe. Katika hali hii, [Arbitrum ina daraja asili](https://portal.arbitrum.io/bridge) ambalo linaweza kuhamisha ETH kutoka Mtandao Mkuu hadi Arbitrum. + +## Kwa nini tunahitaji madaraja? {#why-do-we-need-bridges} + +Viambajengo vyote vina mapungufu yao. Ili Ethereum ipanuke na kukidhi mahitaji, imehitaji [unda-mpya](/glossary/#rollups). Vinginevyo, L1 kama Solana na Avalanche zimeundwa kwa njia tofauti ili kuwezesha matokeo ya juu lakini kwa gharama ya ugatuaji. + +Hata hivyo, minyororo yote ya bloku hutengenezwa katika mazingira yaliyotengwa na huwa na sheria na mifumo tofauti ya [makubaliano](/glossary/#consensus). Hii inamaanisha kuwa hawawezi kuwasiliana asili, na ishara haziwezi kusonga kwa uhuru kati ya viambajengo. + +Madaraja yapo ili kuunganisha viambajengo, kuruhusu uhamisho wa habari na ishara kati yao. + +**Bridges enable**: + +- uhamisho wa mnyororo wa mali na habari. +- [mfumo mtawanyo wa kimamlaka](/glossary/#dapp) za kufikia uwezo wa minyororo mbalimbali ya bloku – hivyo basi kuimarisha uwezo wao (kwa kuwa sasa itifaki zina nafasi zaidi ya kubuni kwa ajili ya uvumbuzi). +- watumiaji kufikia majukwaa mapya na kuongeza manufaa ya minyororo tofauti. +- watengenezaji kutoka kwa mifumo tofauti ya ikolojia ya kiambajengo ili kushirikiana na kuunda mifumo mipya ya watumiaji. + +[Jinsi ya kuhamisha tokeni kwa safu ya 2 kwa kutumia daraja](/guides/how-to-use-a-bridge/) + + + +## Matumizi ya daraja {#bridge-use-cases} + +Zifuatazo ni baadhi ya matukio ambapo unaweza kutumia daraja: + +### Ada za chini za muamala {#transaction-fees} + +Hebu tuseme una ETH kwenye Ethereum Mainnet lakini unataka ada nafuu za ununuzi ili kuchunguza dapps tofauti. Kwa kuweka daraja la ETH yako kutoka Mainnet hadi kwenye mkusanyo wa Ethereum L2, unaweza kufurahia ada za chini za ununuzi. + +### mfumo mtawanyo wa kimamlaka kwenye minyororo mingine ya bloku {#dapps-other-chains} + +Ikiwa umekuwa ukitumia Aave kwenye Ethereum Mainnet kusambaza USDT lakini kiwango cha riba unachoweza kupokea kwa kusambaza USDT kwa kutumia Aave on Polygon ni cha juu zaidi. + +### Gundua mifumo ikolojia ya mnyororo wa bloku {#explore-ecosystems} + +Ikiwa una ETH kwenye Ethereum Mainnet na ungependa kuchunguza alt L1 ili kujaribu dapp zao asili. Unaweza kutumia daraja kuhamisha ETH yako kutoka Ethereum Mainnet hadi alt L1. + +### Miliki mali asili za sarafu ya kidigitali {#own-native} + +Hebu tuseme unataka kumiliki Bitcoin asilia (BTC), lakini una pesa tu kwenye Ethereum Mainnet. Ili kupata kufichuliwa na BTC kwenye Ethereum, unaweza kununua Wrapped Bitcoin (WBTC). Hata hivyo, WBTC ni tokeni ya [ERC-20](/glossary/#erc-20) asili ya mtandao wa Ethereum, ambayo ina maana kwamba ni toleo la Ethereum la Bitcoin na si mali asili kwenye mnyororo wa bloku wa Bitcoin. Ili kumiliki BTC asili, utahitaji kuunganisha mali yako kutoka Ethereum hadi Bitcoin kwa kutumia daraja. Hii itaunganisha WBTC yako na kuibadilisha kuwa BTC asili. Vinginevyo, unaweza kumiliki BTC na kutaka kuitumia katika itifaki za [DeFi](/glossary/#defi) za Ethereum. Hii itahitaji kuunganishwa kwa njia nyingine, kutoka BTC hadi WBTC ambayo inaweza kutumika kama mali kwenye Ethereum. + + + + + + Unaweza pia kufanya yote yaliyo hapo juu kwa kutumia [centralized exchange](/get-eth). Walakini, isipokuwa pesa zako tayari ziko kwenye ubadilishaji, itahusisha hatua nyingi, na unaweza kuwa bora kutumia daraja. + + + + + + +## Aina za madaraja {#types-of-bridge} + +Madaraja yana aina nyingi za miundo na ugumu. Kwa ujumla, madaraja yapo katika makundi mawili: madaraja yanayoaminika na yasiyoaminika. + +| Madaraja yanayoaminika | Madaraja yasiyoaminika | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Madaraja yanayoaminika hutegemea huluki kuu au mfumo kwa shughuli zao. | Madaraja yasiyoaminika yanafanya kazi kwa kutumia mikataba mahiri na kanuni za algoriti. | +| Madaraja yasiyoaminika yanafanya kazi kwa kutumia mikataba na kanuni za algoriti. Watumiaji wengi hutegemea sifa ya mwendeshaji daraja. | Hawana uaminifu, yaani, usalama wa daraja ni sawa na ule wa kiambajengo cha msingi. | +| Watumiaji wanahitaji kuacha udhibiti wa mali zao za kripto. | Kupitia [mikataba-erevu](/glossary/#smart-contract), madaraja yasiyohitaji kuaminiwa huwawezesha watumiaji kubaki na udhibiti wa fedha zao. | + +Kwa kifupi, tunaweza kusema kwamba madaraja yanayoaminika yana mawazo ya kuaminiana, ilhali madaraja yasiyoaminika yanapunguzwa uaminifu na hayatoi mawazo mapya ya uaminifu zaidi ya yale ya vikoa vya msingi. Hivi ndivyo maneno haya yanaweza kuelezewa: + +- **Isiyohitaji kuaminiwa**: kuwa na usalama sawa na vikoa vya msingi. Kama ilivyoelezwa na [Arjun Bhuptani katika makala hii.](https://medium.com/connext/the-interoperability-trilemma-657c2cf69f17) +- **Dhana za uaminifu:** kuondoka kwenye usalama wa vikoa vya msingi kwa kuongeza vithibitishaji vya nje kwenye mfumo, na hivyo kuufanya usiwe salama sana kiuchumi-kripto. + +Ili kukuza uelewa mzuri wa tofauti kuu kati ya njia hizi mbili, wacha tuchukue mfano: + +Fikiria uko kwenye kituo cha ukaguzi cha usalama cha uwanja wa ndege. Kuna aina mbili za vituo vya ukaguzi: + +1. Vituo vya ukaguzi wa Mwongozo - vinavyoendeshwa na maafisa ambao huangalia wenyewe maelezo yote ya tikiti na utambulisho wako kabla ya kupeana pasi ya kuabiri. +2. Kujiandikisha - kunaendeshwa na mashine ambapo unaweka maelezo ya safari yako ya ndege na kupokea pasi ya kupanda kila kitu kitakapokamilika. + +Sehemu ya ukaguzi ya mwongozo ni sawa na muundo unaoaminika kwani inategemea mtu wa tatu, yaani, maafisa, kwa shughuli zake. Kama mtumiaji, unawaamini maafisa kufanya maamuzi sahihi na kutumia taarifa zako za faragha kwa usahihi. + +Kujiandikisha ni sawa na modeli isiyoaminika kwani huondoa jukumu la mwendeshaji na kutumia teknolojia kwa shughuli zake. Watumiaji daima hubakia kudhibiti data zao na si lazima waamini watu wengine na taarifa zao za faragha. + +Suluhu nyingi za kuweka daraja hupitisha modeli kati ya hali hizi mbili za kupita kiasi na viwango tofauti vya kutokuwa na imani. + + + +## Tumia madaraja {#use-bridge} + +Kutumia madaraja hukuruhusu kuhamisha mali yako kwenye viambajengo tofauti tofauti. Hapa kuna nyenzo ambazo zinaweza kukusaidia kupata na kutumia madaraja: + +- **[L2BEAT Bridges Summary](https://l2beat.com/bridges/summary) & [L2BEAT Bridges Risk Analysis](https://l2beat.com/bridges/summary)**: Muhtasari wa kina wa madaraja mbalimbali, ukijumuisha maelezo kuhusu hisa za soko, aina ya daraja, na minyororo lengwa. L2BEAT pia ina uchanganuzi wa hatari kwa madaraja, kusaidia watumiaji kufanya maamuzi sahihi wakati wa kuchagua daraja. +- **[DefiLlama Bridge Summary](https://defillama.com/bridges/Ethereum)**: Muhtasari wa ujazo wa madaraja kwenye mitandao ya Ethereum. + + + +## Hatari za kutumia madaraja {#bridge-risk} + +Madaraja yako katika hatua za mwanzo za maendeleo. Kuna uwezekano kwamba muundo bora wa daraja bado haujagunduliwa. Kuingiliana na aina yoyote ya daraja hubeba hatari: + +- **Hatari ya Mkataba-erevu —** hatari ya hitilafu kwenye msimbo ambayo inaweza kusababisha fedha za mtumiaji kupotea +- **Hatari ya Teknolojia —** kushindwa kwa programu, msimbo wenye hitilafu, makosa ya kibinadamu, barua taka, na mashambulizi mabaya yanaweza kutatiza shughuli za mtumiaji + +Zaidi ya hayo, kwa kuwa madaraja yanayoaminika huongeza mawazo ya uaminifu, yana hatari zaidi kama vile: + +- **Hatari ya Udhibiti —** waendeshaji wa daraja wanaweza kinadharia kuwazuia watumiaji kuhamisha mali zao kwa kutumia daraja +- **Hatari ya Ulinzi —** waendeshaji wa daraja wanaweza kushirikiana kuiba fedha za watumiaji + +Pesa za mtumiaji ziko hatarini ikiwa: + +- kuna hitilafu kwenye mkataba mahiri +- mtumiaji hufanya makosa +- kiambajengo cha msingi kimedukuliwa +- waendeshaji daraja wana nia ovu katika daraja linaloaminika +- daraja linadukuliwa + +Udukuzi mmoja wa hivi majuzi ulikuwa wa daraja la Wormhole la Solana, [ambapo wETH 120k ($325 milioni USD) iliibwa wakati wa udukuzi huo](https://rekt.news/wormhole-rekt/). [Nyingi za udukuzi mkuu katika minyororo ya bloku zilihusisha madaraja](https://rekt.news/leaderboard/). + +Madaraja ni muhimu kwa watumiaji kuingia kwenye Ethereum L2s, na hata kwa watumiaji wanaotaka kuchunguza mifumo mbalimbali ya ikolojia. Hata hivyo, kutokana na hatari zinazohusika katika kuingiliana na madaraja, watumiaji lazima waelewe usuluhishi unaofanywa na madaraja. Hii ni baadhi ya [mikakati ya usalama wa kuvuka-minyororo](https://debridge.com/learn/blog/10-strategies-for-cross-chain-security/). + + + +## Masomo zaidi {#further-reading} + +- [EIP-5164: Cross-Chain Execution](https://ethereum-magicians.org/t/eip-5164-cross-chain-execution/9658) - _Juni 18, 2022 - Brendan Asselstine_ +- [L2Bridge Risk Framework](https://gov.l2beat.com/t/l2bridge-risk-framework/31) - _Julai 5, 2022 - Bartek Kiepuszewski_ +- ["Kwa nini mustakabali utakuwa wa minyororo mingi, lakini hautakuwa wa kuvuka-minyororo."](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) - _Januari 8, 2022 - Vitalik Buterin_ +- [Harnessing Shared Security For Secure Cross-Chain Interoperability: Lagrange State Committees And Beyond](https://web.archive.org/web/20250125035123/https://research.2077.xyz/harnessing-shared-security-for-secure-blockchain-interoperability) - _Juni 12, 2024 - Emmanuel Awosika_ +- [The State Of Rollup Interoperability Solutions](https://web.archive.org/web/20250428015516/https://research.2077.xyz/the-state-of-rollup-interoperability) - _Juni 20, 2024 - Alex Hook_ + diff --git a/public/content/translations/sw/community/code-of-conduct/index.md b/public/content/translations/sw/community/code-of-conduct/index.md new file mode 100644 index 00000000000..20ac5b81ed6 --- /dev/null +++ b/public/content/translations/sw/community/code-of-conduct/index.md @@ -0,0 +1,77 @@ +--- +title: Kanuni za maadili +description: Viwango vya msingi ambavyo tunajitahidi kuvifikia katika maeneo yote ya ethereum.org. +lang: sw +--- + +# Kanuni za maadili {#code-of-conduct} + +## Dhamira {#mission} + +Kuendeleza na kudumisha kitovu cha maarifa ambacho ni kamili na kinachopatikana kwa urahisi kwa ajili ya Ethereum. + +## Maadili {#values} + +Jumuiya ya ethereum.org inajitahidi kuwa: + +- ya kielimu, inayolenga kusaidia kila mtu kuelewa Ethereum +- jumuishi +- inayopatikana +- inaendeshwa na jamii +- imejikita kwenye teknolojia ya msingi ya Ethereum na matumizi yake +- imejikita kwenye dhana na kanuni za usanifu za Ethereum + +## Sisi sio nini {#what-we-are-not} + +- Tovuti ya Ethereum Foundation +- Jukwaa la kukuza uwekezaji au upataji faida wa aina yoyote +- Jukwaa la kuinua au kuidhinisha miradi au mashirika binafsi +- DEX, CEX au aina nyingine yoyote ya jukwaa la kifedha +- Jukwaa linalotoa ushauri wa kifedha au kisheria wa aina yoyote + +## Kanuni za maadili {#code-of-conduct} + +### Ahadi {#pledge} + +Ushiriki wa wazi ni msingi wa maadili ya ethereum.org. Sisi ni tovuti na jamii inayodumishwa na maelfu ya wachangiaji, na hili linawezekana tu ikiwa tutadumisha mazingira ya kukaribisha na kushirikisha. Kwa ajili hii, wachangiaji kwenye tovuti hii wanaahidi kudumisha mazingira yasiyo na unyanyasaji kwa washiriki wote katika majukwaa yote ya ethereum.org na maeneo ya jamii. Jumuiya ya ethereum.org inakaribisha na inathamini mtu yeyote anayetaka kushiriki kwa njia ya kujenga na ya kirafiki, bila kujali umri, ulemavu, kabila, sifa za kijinsia, utambulisho wa kijinsia, kiwango cha uzoefu, eneo la utaalamu, elimu, hadhi ya kijamii na kiuchumi, utaifa, mwonekano wa kibinafsi, rangi, dini au kipimo kingine chochote cha utofauti. + +### Wigo {#scope} + +Kanuni hizi za Maadili zinatumika kwa maeneo yote ya ethereum.org (kama vile GitHub, Discord, Figma, Crowdin, X (zamani Twitter) na majukwaa mengine ya mtandaoni), na pia zinatumika wakati jamii inawakilishwa katika maeneo ya umma ya ulimwengu halisi kama vile mikutano, makongamano na matukio. + +### Viwango vyetu {#our-standards} + +Mifano ya tabia inayochangia kuunda mazingira chanya ni pamoja na: + +- Kutumia lugha ya kukaribisha na jumuishi +- Kuheshimu maoni na uzoefu tofauti +- Kukubali kwa upole na/au kutoa ukosoaji wa kujenga kwa huruma +- Kutenda kwa utulivu na weledi wakati wa kutatua migogoro au kutokubaliana +- Kuonyesha huruma na uvumilivu kwa wanajamii wengine +- Kuhimiza na kukuza sauti mpya katika jamii + +Mifano ya tabia isiyokubalika na washiriki ni pamoja na: + +- Ukatili wa kimwili, kutishia ukatili wa kimwili au kuhimiza ukatili wa kimwili wa aina yoyote +- Kutumia lugha au picha za kingono au kulazimisha usikivu wa kingono usiotakikana +- Kujifanya mtu mwingine au vinginevyo kudai kwa udanganyifu kuwa na uhusiano na mtu au shirika fulani +- Uchokozi, matusi/maoni ya dharau, na mashambulizi ya kibinafsi au ya kisiasa +- Kuwasumbua wanajamii wengine katika chaneli za umma au za faragha +- Kuchapisha taarifa za faragha za wengine, kama vile anwani ya mahali au ya kielektroniki, bila ruhusa ya wazi +- Uhandisi wa kijamii, utapeli au vinginevyo kuwahadaa wanajamii wengine +- Kukuza uwekezaji, tokeni, miradi au kitu kingine chochote kwa faida ya kibinafsi ya kifedha au isiyo ya kifedha +- Kutuma barua taka kwenye seva zenye maudhui yasiyohusiana +- Kupuuza maombi au maonyo kutoka kwa wasimamizi wa jamii +- Kujihusisha na mwenendo mwingine ambao unaweza kuchukuliwa kuwa usiofaa katika mazingira ya kitaaluma + +### Kuripoti {#reporting} + +Ukiukaji wa kanuni za maadili kwa kawaida utaonekana kwa jamii kwani tunajaribu kufanya kila kitu katika chaneli za wazi, za umma, kuruhusu wanajamii kujisimamia wenyewe. + +Hata hivyo, ikiwa kitu kitatokea ambacho unahisi kinahitaji uangalizi, unaweza kukiwasilisha kwa mtu ambaye ana jukumu la usimamizi (k.m., mwongozo wa discord) ili waweze kusaidia kuchunguza na kutekeleza jibu linalofaa. + +Unaporipoti, tafadhali jumuisha maelezo mengi iwezekanavyo, ikiwa ni pamoja na mifano maalum na mihuri ya muda. Hii itasaidia kuhakikisha matokeo ya haki. + +### Utekelezaji {#enforcement} + +Kulingana na uzito wa kosa, watu wanaokiuka kanuni za maadili wanaweza kupokea maonyo, marufuku ya muda au marufuku ya kudumu kutoka kwa jamii za ethereum.org. diff --git a/public/content/translations/sw/community/events/organizing/index.md b/public/content/translations/sw/community/events/organizing/index.md new file mode 100644 index 00000000000..17615a13d89 --- /dev/null +++ b/public/content/translations/sw/community/events/organizing/index.md @@ -0,0 +1,221 @@ +--- +title: "''Kuandaa tukio la Ethereum.''" +description: "''Jinsi ya kuandaa tukio la Ethereum.''" +lang: sw +hideEditButton: true +--- + +# ''Jinsi ya kuandaa tukio la Ethereum{#how-to-organize-an-ethereum-event}.'' + +Kujenga jumuiya yenye nguvu na yenye uchangamfu ndio kiini cha kukuza mfumo ikolojia wa Ethereum. Iwe unapanga kuandaa mikutano, warsha, au kongamano kamili, mafanikio ya tukio lako yanategemea miunganisho na ushirikiano ndani ya mtandao wako wa karibu. Mwongozo huu utakusaidia kuweka msingi kwa jumuiya hai ya Ethereum na kukupeleka hatua kwa hatua katika mchakato wa kuandaa mkutano wa kukumbukwa na wenye matokeo. + +## ''Tafakari, je kuna jumuiya ya Ethereum?''? {#ask-yourself-is-there-an-ethereum-community} + +''Mkutano wa Ethereum iliofanikiwa inajengwa juu ya jumuiya iliyo hai na inayoshiriki kikamilifu.''. Ikiwa tayari unayo, uko mbele ya mchezo - lakini ikiwa huna, hatua muhimu ya mapema ni kujenga msingi huo. Ikiwa tayari unayo, uko mbele ya mchezo - lakini ikiwa huna, hatua muhimu ya mapema ni kujenga msingi huo. Jumuiya, kwa upande mwingine, ni mtandao wa watu waliounganishwa na mashirika yanayoshirikiana na kusaidiana, ambayo mara nyingi huonekana katika mifumo ikolojia ya web3. + +**Hatua yako ya kwanza inapaswa kuwa:** + +- Gundua waanzishaji na kampuni za ndani - kuwa na kampuni dhabiti, zinazofanya kazi katika jiji au nchi yako mara nyingi ndilo hitaji muhimu zaidi la kujenga jumuiya. +- Angalia kama tayari kuna baadhi ya mikutano — ethereum.org [ukurasa wa matukio](https://ethereum.org/community/events/) +- [Tovuti ya ethereum.org](https://ethereum.org/community/events/) na ethereum.org Discord — ili kuangalia kama kuna matukio ya ndani ya Ethereum, wasanidi na wachangiaji. +- Luma na Meetup.com — ili kuona kama kuna matukio yanayohusiana na Ethereum au matukio mapana zaidi ya web3 yanayotokea katika eneo lako. +- ''X - jaribu kutafuta watetezi wa ndani au washawishi katika sekta hiyo.''. + +Ukipata vipengele vingi hivi, ni ishara dhabiti kwamba masharti ya kujenga jumuiya yapo - lakini si lazima kwamba jumuiya tayari iko. Hatua inayofuata ni kazi muhimu ya kuandaa, kuwashirikisha, na kuwalea watendaji hawa, kutengeneza fursa za ushirikiano na ukuaji wa muda mrefu. + +### ''Kama sivyo, jinsi ya kuijenga {#if-not-how-to-build-it}.'' + +Ukigundua kuwa vipengele hivi vingi havipo, usijali - kujenga jumuiya kutoka chini ni mchakato mgumu lakini wenye kuthawabisha sana. Jumuiya yenye nguvu ya Ethereum haionekani mara moja; inahitaji subira, uthabiti, na maono yaliyo wazi. ''Hivi ndivyo unaweza kuanza:'': + +- **Weka kituo cha mawasiliano** — hii inaweza kuwa Telegram, Signal, WhatsApp, WeChat, au seva ya Discord, chochote ambacho ni maarufu zaidi mahali ulipo, ili watu waweze kuunganisha, kuuliza maswali na kushiriki nyenzo. +- **Tafuta watu wanaokukubali mapema.** Tambua watu wachache wanaopenda sana Ethereum na Web3. ''Watakua wafuasi wako wakuu na washirikiano wako.''. +- **Pandisha matukio madogo yanayofanana.** Anza na mikutano isiyo rasmi, vikundi vya masomo au warsha. Uthabiti ni muhimu - hata kama kikundi ni kidogo mwanzoni, matukio ya kawaida hujenga uaminifu na kasi. +- **Jaribu kuwasiliana na kampuni za ndani**, taasisi za elimu, au nafasi za kazi ili kukupa nafasi bila malipo. Ikiwa huwezi kupata wazungumzaji kutoka nchi yako, alika wazungumzaji mtandaoni lakini uwakusanye watu kimwili. ''Ni muhimu sana kuhakikisha hadhira yako ipo kimwili katika eneo moja.''. +- **Shirikiana na jumuiya zilizopo za teknolojia.** Ikiwa kuna vikundi vya wasanidi programu, mifumo ikolojia inayoanzishwa, au mikutano ya blockchain tayari imeanzishwa, shirikiana navyo ili kutambulisha mada za Ethereum na kupanua ufikiaji wako. +- **shiriki maudhui ya kielimu** kuhusu uwezo wa Ethereum.''. +- **Fikia jumuiya za kimataifa.** Wasiliana na vikundi na miradi iliyoanzishwa ya Ethereum duniani kote kwa usaidizi, ushauri na ushirikiano unaowezekana. Jumuiya za Ethereum kote ulimwenguni zina angalau jambo moja linalofanana: Zote zina hamu ya kusaidia. +- **Jaribu na upate ufadhili** — iwe kutoka kwa kampuni za ndani za web3 au kupitia baadhi ya mpango wa ruzuku kama vile [ESP](https://esp.ethereum.foundation/). + +### ''Kama ndiyo, jinsi ya kudumisha na kukuza{#if-yes-how-to-maintain-and-grow-it}.'' + +Mara tu ukiwa na jumuiya iliyoanzishwa, kazi haikomi - kwa kweli, inaanza tu. Kuweka jumuiya hai, kuhusika, na kukua kunahitaji juhudi na ubunifu unaoendelea. Mojawapo ya vipengele muhimu vya kuhusisha jamii ni kwamba unapaswa kujaribu kila mara miundo na mawazo mapya. + +''Hapa kuna baadhi ya mbinu za kudumisha jumuiya yenye uhai ya Ethereum.'': + +- \*\*Tofautisha aina za matukio yako.\*\*Usishikilie tu aina moja ya mkusanyiko.''. Changanya mambo na mikutano, hackathons fupi, mijadala ya paneli, na matukio ya mtandao. ''Unaweza kujaribu kuandaa siku za kufanya kazi kwa pamoja au kozi la elimu.''. +- **Mada anuwai:** Ethereum sio teknolojia tu; pia ni seti ya maadili ambayo inahusisha kisheria, masoko, na biashara. +- **Uliza jumuiya yako**maoni na mawazo.''. +- **Shirikiana na hadhira tofauti**sehemu.''. Badilisha maudhui na matukio kulingana na viwango tofauti vya uzoefu - kutoka kwa wanaoanza wanaogundua Ethereum kwa mara ya kwanza hadi watengenezaji na wajasiriamali waliobobea. + +Kwa kutoa fursa mbalimbali za kujifunza, ushirikiano na ukuaji, unahakikisha kuwa jumuiya yako inasalia hai na tayari kwa ajili ya mipango mikubwa kama vile kuandaa mkutano. + +## ''Tukio{#event} + +### ''Ni wakati gani unaofaa kuandaa tukio?''? {#when-is-the-right-time-to-organize-an-event} + +Kuandaa mkutano wa Ethereum wenye mafanikio au tukio la jumuiya kunahitaji muda na kuzingatia kwa uangalifu. Wakati unaofaa unategemea mambo mbalimbali yanayochangia mafanikio ya jumla ya tukio. + +Unapaswa kuzingatia ukomavu wa jumuiya, hali ya soko, kama una timu, na kama kuna mandhari ya karibu (k.m. wafadhili wanaotarajiwa). + +### ''KYC - jua jumuiya yako {#kyc-know-your-community} + +Mojawapo ya hatua muhimu zaidi katika kuandaa tukio ni kuelewa jumuiya yako. Kama vile Mjue Mteja Wako (KYC) katika huduma za kifedha, Jua Jumuiya Yako (KYC) inamaanisha kuchukua muda kuelewa mahitaji mahususi, mapendeleo na sifa za hadhira yako ya karibu. ''Uelewa huu utakusaidia kubuni mkutano ili kuhakikisha mafanikio yake na umuhimu wake.''. + +Inajaribu kulenga tukio kubwa mara moja, lakini kuanza kidogo mara nyingi ndio njia bora zaidi. Utajua ni suluhu gani bora kwako ikiwa utachunguza kwa ukamilifu hali ya jumuiya yako na vipengele vingine ambavyo vinaweza kuonekana kuwa visivyo muhimu kwako, kama vile: je, nchi yako ni kivutio maarufu cha watalii au gharama ya malazi. + +Katika mwaka wa kwanza, sehemu kubwa zaidi ya hadhira yako itakuwa jumuiya ya karibu nawe, kwa hivyo kila kitu unachofanya kwa mwaka wa kwanza kuandaa tukio kubwa zaidi kinapaswa kukidhi mahitaji na ukubwa wa jumuiya hiyo. + +### ''Wapi pa kuanzia{#where-to-start} + +Linapokuja suala la kuandaa mkutano, hatua za kwanza zinaweza kuhisi kuwa nzito. Lakini kwa mpango wazi na muundo, unaweza kuvunja mchakato katika kazi zinazoweza kudhibitiwa. ''Tutavunja kila kimoja chake.''. + +Kuanzia na mbinu iliyopangwa itakusaidia kukaa kwa mpangilio na kupunguza mafadhaiko unapopitia hatua mbali mbali za kuandaa hafla yako. Kila uamuzi unaofanya unapaswa kukuleta karibu na kutoa uzoefu unaokidhi mahitaji ya jumuiya yako. + +**Jambo la kwanza ni kujenga timu ya waandaji yenye majukumu na wajibu ulio wazi.** + +Hatua nyingine muhimu kabla ya kuanza kuunda programu au kufikia wafadhili ni kuchagua tarehe. Ingawa hiyo inaonekana kama hatua rahisi, kuna mambo machache muhimu ambayo unapaswa kuzingatia kabla. ''Baadhi yao ni.'': + +- \*\*Epuka tarehe zinazogongana na mikutano au matukio makubwa \*\*.'' +- **Zingatia hali na hali za eneo lako** (kama vile msimu wa mwaka, likizo kuu, n. k.) +- **Zingatia hali ya soko** +- **Jipe muda wa kutosha kuandaa na kila kitu** - angalau miezi tisa.'' + +### ''Jinsi ya kusanya timu{#how-to-assemble-a-team} + +''Chagua watu wanaoshirikiana na maono yako na wanaokamilisha ujuzi wako.''. Baadhi ya timu hufanya kazi kama vikundi, huku zingine zimebainishwa majukumu - tafuta kinachokufaa zaidi. ''Mawasiliano ya mara kwa mara na matarajio yaliyo wazi ni muhimu.''. Ingawa inavutia kutegemea mifumo ya mawasiliano kwa ajili ya kupanga matukio, tunapendekeza kuchagua jukwaa la usimamizi wa kazi (kama vile Notion, Basecamp, Trello, Asana, au hata Majedwali ya zamani ya Google mazuri) kwa ajili ya kupanga na kufuatilia kile kinachohitajika kufanywa. Ni muhimu kuwa na timu inayofanya kazi vizuri na iliyoandaliwa vizuri. + +Timu tofauti za waandaaji wa Ethereum zina majukumu tofauti katika timu zao, lakini zote zina watu wa kawaida ambao wanafanya kazi kwenye vifaa, bajeti, uuzaji, programu, muundo, na ubia. + +### Mpango: Kipengele muhimu cha tukio lenye ufanisi {#the-program-a-key-element-of-a-successful-event} + +Linapokuja suala la kuandaa mkutano muhimu na wa kukumbukwa, **mpango ndio kila kitu**. Hili si eneo ambalo unaweza kumudu kuafikiana. Ingawa wafadhili ni muhimu na mara nyingi ni muhimu kwa kufadhili tukio, uzoefu wa watazamaji na thamani wanayopokea lazima iwe ya kwanza kila wakati. Mpango uliojaa maudhui ya utangazaji na viwango vingi vya wafadhili vitawatenga waliohudhuria na kudhoofisha uaminifu wa tukio lako. + +Kila kikao, jopo, na warsha vinapaswa kuelimisha, kuhamasisha, na kushirikisha jumuiya. Sikiliza hadhira yako—elewa maslahi, mahitaji, na changamoto zao. Ni mada zipi zinazowagusa? Wakati huo huo, anzisha mitazamo mipya na umbizo bunifu ili kuweka programu ikiwa hai. Sawazisha masomo yanayofahamika na yanayovuma na mawazo ya kisasa, kuhakikisha ajenda iliyokamilika ambayo inashughulikia vipengele tofauti vya mfumo ikolojia wa Ethereum—kutoka kwa kupiga mbizi kwa kina kitaalam na vikao vya kujenga jamii hadi mijadala ya sera na warsha za kushughulikia. Zaidi ya hayo, zingatia lugha ya mkutano huo—wakati Kiingereza ndicho chaguomsingi katika matukio mengi ya Ethereum, kutoa vipindi katika lugha ya ndani kunaweza kufanya tukio hilo kufikiwa zaidi na wasanidi programu wa eneo na wapenda shauku. + +**Unapochagua wazungumzaji, fungua simu angalau miezi sita kabla ya kongamano ili kuvutia mawasilisho ya ubora wa juu na kuruhusu muda wa kutosha wa kuratibu ajenda.** Mtu anayehusika na uteuzi wa spika anapaswa kuwa na uzoefu mkubwa katika sekta hii na ufahamu wa kina wa mfumo ikolojia. Hii inahakikisha kwamba wanaweza kutambua michango muhimu, yenye maarifa na kudumisha kiwango cha juu cha maudhui. + +### Wapi pa kupata msaada wa kifedha {#where-to-find-financial-support} + +Kuandaa mkutano wa ubora wa juu kunakuja na gharama kubwa - kukodisha ukumbi, nyenzo za matangazo, chakula na vinywaji, uzalishaji na gharama zingine nyingi. Kupata usaidizi wa kifedha mapema ni muhimu ili kuhakikisha tukio lako linakidhi viwango vya kitaaluma na kukupa hali nzuri ya matumizi kwa waliohudhuria. + +#### Jinsi ya kuunda wasilisho la udhamini? {#how-to-create-a-sponsorship-deck} + +Kwanza, utahitaji wasilisho. **Waulize waandaaji wengine wa kongamano kwa ushauri**, hata kushiriki staha zao ili uweze kuunda vifurushi vyako kulingana na hilo. Unapaswa kuwa wa kweli linapokuja suala la bei ya vifurushi na ulenga kufidia gharama, sio kupata pesa, haswa mwanzoni. + +**Kila safu ya ufadhili inapaswa kutoa muhtasari wazi na wa kuvutia wa tukio**, kuhakikisha wafadhili watarajiwa wanaelewa upeo, umakini na thamani yake. Anza na mambo ya msingi—mahali, tarehe, na maelezo kuhusu timu inayoratibu—ili kuthibitisha uaminifu. Kisha, onyesha lengo kuu la tukio, kwani mikutano tofauti ya Ethereum inahudumia watazamaji tofauti. Baadhi zina mwelekeo wa wajenzi zaidi, zinazojumuisha mijadala ya kina ya kiufundi, ilhali zingine zinaweza kulenga zaidi DeFi, DAO, au mada za sera. + +Zaidi ya kuelezea tukio tu, weka matarajio wazi. **Orodhesha idadi inayotarajiwa ya wahudhuriaji na wasemaji wowote wakuu ambao tayari wamethibitishwa**, kwa kuwa hii huwasaidia wafadhili kupima uwezo wao wa kufikia. Muhimu zaidi, fafanua kwa uwazi kile watakachopokea kama malipo ya ufadhili wao—nafasi ya kibanda, fursa za kuzungumza, ukuzaji wa mitandao ya kijamii, mwonekano wa chapa, au ufikiaji wa kipekee wa mitandao. Dawati iliyo na muundo mzuri haifahamishi tu bali pia inasisimua wafadhili wanaowezekana kuhusu fursa ya kuwa sehemu ya hafla yako. + +#### Nani anaweza kufadhili tukio lako? {#who-might-support-your-event} + +Anza kwa kuwasiliana na kampuni zilizo ndani ya Ethereum na mfumo mpana wa kiteknolojia katika jiji au nchi yako. **mashirika haya mara nyingi huwa na nia ya kusaidia matukio ya ndani** ambayo yanakuza ukuaji na uvumbuzi wa jumuiya. . + +Once you’ve tapped into local support, expand your outreach to global players in the web3 space. **Itifaki zilizoanzishwa, DAO, na fedha za mfumo ikolojia mara nyingi hutenga bajeti kwa matukio yanayoendeshwa na jamii**. Hili linaweza kuwa changamoto kwa waandaaji wa mara ya kwanza, kwa kuwa bado hawajaunda rekodi ya kuonyesha lakini jaribu kuunda kifurushi cha ufadhili cha kuvutia ambacho kinaonyesha kwa uwazi manufaa ya kuunga mkono tukio lako - mwonekano wa chapa, fursa za kuzungumza, na ushirikiano wa maana na hadhira inayolengwa. Jaribu kupata thamani yako ya kipekee ambayo wengine wanaweza wasiwe nayo. + +#### Njia mbadala za kufadhili tukio lako {#alternative-forms-of-funding-your-event} + +Ruzuku ni chanzo kingine cha ufadhili ambacho waandaaji wengi hukipuuza. Mipango kama vile [Mpango wa Usaidizi wa Mfumo wa Mazingira] wa Ethereum Foundation (https://esp.ethereum.foundation/) (ESP) na [mipango mingine ya ruzuku](https://ethereum.org/community/grants/#ethereum-grants) ipo ili kusaidia matukio yanayoendeshwa na jumuiya. + +Zaidi ya ufadhili wa kifedha, zingatia ushirikiano wa hisani, hasa kwa vyakula na vinywaji. Chapa zinazolingana na utamaduni wa eneo lako au jumuiya ya teknolojia zinaweza kuwa washirika wazuri wa tukio lako. Chapa za kahawa, kampuni za vinywaji, au hata pizzeria za karibu zinaweza kuwa tayari kutoa bidhaa badala ya kuonekana kwenye hafla hiyo. Ushirikiano huu unaweza kusaidia kupunguza gharama huku ukiboresha uzoefu wa mhudhuriaji. + +Kwa kuwa tunazungumza kuhusu fedha, kumbuka hili: kila dola unayowekeza katika kuunda hali ya kipekee ya matumizi ya wahudhuriaji italipa kwa kiasi kikubwa. Uzalishaji wa hali ya juu, kumbi za starehe, swag ya kufikiria, na matukio ya kando yaliyopangwa vyema huchangia tukio la kukumbukwa ambalo washiriki watazungumzia muda mrefu baada ya mkutano kumalizika. Wahudhuriaji wenye furaha huwa watetezi wako wakubwa na huhakikisha mafanikio ya muda mrefu ya tukio lako. + +### Mipangilio {#logistics} + +Sambamba na kupata ufadhili, lengo lako kuu linapaswa kuwa mipangilio. Kongamano lililopangwa vyema linahitaji upangaji wa kina katika maeneo mengi, kuanzia upangaji wa ukumbi hadi tajriba ya wahudhuriaji. Kuwa na mtu aliye na uzoefu thabiti katika kupanga tukio - si lazima iwe matukio ya web3, lakini matukio kwa ujumla - kunaweza kuleta mabadiliko makubwa. Mwongozo wa vifaa mwenye uzoefu anaweza kuona masuala yanayoweza kutokea na kuyatatua kabla hayajawa matatizo, kuokoa muda, pesa na mafadhaiko. + +Mtu anayehusika na usafirishaji anapaswa kuchagua mahali, kampuni ya uzalishaji, na wachuuzi tofauti wa chakula, vinywaji na bidhaa, na pia mfumo rahisi wa kutumia mtandaoni wa kukata tikiti unaoruhusu waliohudhuria kujiandikisha na kulipa kwa njia ya crypto pia. + +### Miundombinu ya eneo {#location-infrastructure} + +Wakati wa kuchagua eneo la mkutano wako, ni muhimu kufikiria zaidi ya ukumbi yenyewe na kuzingatia miundombinu ya jiji na nchi pana. Mambo kama vile hali ya hewa, uhamaji, usalama, na mazingira ya kisiasa huchukua jukumu kubwa katika kuunda uzoefu wa waliohudhuria. + +Kwa maeneo yasiyojulikana sana, hili linakuwa muhimu hasa. Wahudhuriaji na wafadhili kutoka kote ulimwenguni wanahitaji kujisikia ujasiri kwamba wanaweza kusafiri kwa urahisi na kwa usalama. Angalia vipengele kama vile muunganisho wa uwanja wa ndege, usafiri wa umma na chaguzi za malazi. Pia ni busara kuzingatia hali ya kitamaduni na kisiasa ya eneo hili ili kuepuka matatizo yoyote ambayo yanaweza kuzuia washiriki wa kimataifa, kama vile sera ya visa. + +### Jinsi ya kutangaza tukio {#how-to-promote-the-event} + +Kutangaza tukio lako kwa ufanisi ni muhimu ili kuvutia hadhira inayofaa na kujenga msisimko. Mkakati wa ukuzaji uliofikiriwa vyema huhakikisha mkutano wako unapata mwonekano na ushirikiano unaostahili. Ubunifu una jukumu muhimu katika chapa yako pia, kwa hivyo lazima uweke bajeti kwa hiyo pia. + +#### Mitandao ya kijamii {#social-media} + +X.com itakuwa uti wa mgongo wa utangazaji wako kwenye mitandao ya kijamii. Jaribu kuwa hai na kulingana na kuchapisha huko, lakini pia shiriki katika mazungumzo tofauti, na akaunti yako ya kibinafsi na akaunti ya shirika lako. + +Ingawa LinkedIn haionekani kama chaguo dhahiri zaidi la ukuzaji, unaweza kufikia hadhira tofauti kabisa huko, au hata wafadhili wengine. + +#### Ushirikiano na jumuiya nyingine za Ethereum {#partnerships-with-other-ethereum-communities} + +Ushirikiano na waandaaji tofauti wa Ethereum unaweza kusaidia kukuza ufikiaji wako kwa kugusa mitandao iliyopo, haswa unapoanza kutoka mwanzo. Toa punguzo la jumuia, utangaze pamoja na matukio mengine, na waalike washirika waandalizi mwenza matukio ya kando au warsha. + +#### Ufikiaji wa vyuo vikuu {#university-outreach} + +Fikia vyuo vya ufundi na uchumi mjini kupitia vilabu vya wanafunzi au maprofesa ili kukuza tukio. Kujihusisha na vyuo vikuu kunaweza kusaidia kuvutia vipaji vya vijana, watafiti, na wataalamu wa sekta ya siku zijazo, na hivyo kukuza uhusiano mkubwa kati ya wasomi na mfumo wa ikolojia wa Ethereum. Hii ni nzuri sana ikiwa unapanga hackathon, kwani wanafunzi mara nyingi huleta maoni mapya, shauku na msingi thabiti wa kiufundi. + +#### Vyombo vya habari {#media} + +Wasiliana na vyombo vya habari na majarida yanayolenga web3 kwa ajili ya utangazaji wa tukio. Ingawa Web3 Media inatarajia kulipwa kwa makala zao za PR, unaweza kuwapa tikiti bila malipo au mahojiano na wasemaji na wafadhili wengine wa hali ya juu ikiwa huna bajeti ya ukuzaji unaolipishwa. Unda kifurushi cha PR kilicho na taarifa kwa vyombo vya habari na taswira zingine tayari kwa utangazaji kwenye mitandao ya kijamii au tovuti katika miundo tofauti. Pia, panua wigo kwa wanahabari wa ndani au hata waundaji wa maudhui (ilimradi wana sifa nzuri) ambao wanaweza kuandika habari za teknolojia, kwani hiyo inaweza kuwa muhimu katika kuonyesha tukio kwa hadhira kubwa. Hii husaidia kuziba pengo kati ya tasnia ya crypto na umma mpana, na kuvutia watu wa kawaida wa teknolojia na biashara. + +### Je, unapaswa kuandaa hackathon pia? {#should-you-organize-a-hackathon-as-well} + +Kupanga hackathon kunaweza kuwa na manufaa kwa sababu hakathoni inaweza kuwa njia nzuri ya kushirikisha jumuiya ya wasanidi programu na kukuza uvumbuzi. Pia hutoa fursa kwa vitendo kushirikiana na kujenga miradi, ambayo inaweza kusababisha matokeo yanayoonekana kwa mfumo ikolojia. Hakathoni huvutia wasanidi programu ambao huenda wasihudhurie mikutano kwa kawaida lakini wanapenda changamoto ya kujenga na kujaribu mawazo mapya. Ikiwa mkutano wako unalenga wasanidi programu, uvumbuzi, na miradi inayotekelezwa, kuandaa hackathon ni jambo la kawaida. + +Lakini, kabla ya kuandaa, fikiria kama una rasilimali na muda wa kutosha. **Hakathoni inahitaji rasilimali muhimu katika suala la wakati, nguvu kazi, na uwekezaji wa kifedha**. Hakikisha kuwa una timu iliyojitolea kuishughulikia, haswa ikiwa pia unasimamia mkutano. Pia, angalia kama kuna nia katika jumuiya yako. Ikiwa jumuiya yako ina mwelekeo wa wajenzi zaidi, basi pengine itakuwa na maana kuipanga. + +Ingawa kuna manufaa mengi ya kuiandaa, zingatia kwamba, kulingana na ukubwa wa mkutano, kuongeza hackathon kunaweza kuwa mwingi. Ingawa kuna manufaa mengi ya kuiandaa, zingatia kwamba, kulingana na ukubwa wa mkutano, kuongeza hackathon kunaweza kuwa mwingi. Ingawa kuna manufaa mengi ya kuiandaa, zingatia kwamba, kulingana na ukubwa wa mkutano, kuongeza hackathon kunaweza kuwa mwingi. + +### Ingawa kuna manufaa mengi ya kuiandaa, zingatia kwamba, kulingana na ukubwa wa mkutano, kuongeza hackathon kunaweza kuwa mwingi + +Ingawa kuna manufaa mengi ya kuiandaa, zingatia kwamba, kulingana na ukubwa wa mkutano, kuongeza hackathon kunaweza kuwa mwingi. Ingawa kuna manufaa mengi ya kuiandaa, zingatia kwamba, kulingana na ukubwa wa mkutano, kuongeza hackathon kunaweza kuwa mwingi. Ingawa kuna manufaa mengi ya kuiandaa, zingatia kwamba, kulingana na ukubwa wa mkutano, kuongeza hackathon kunaweza kuwa mwingi. Zaidi ya hayo, ugumu wa kuvutia wafadhili unaweza kuongezeka wakati wa kushuka kwa soko, kwa kuwa makampuni yanaweza kuwa na nia ya chini ya kuwekeza katika shughuli zisizo za msingi. + +Kusimamia bajeti kwa ufanisi ni muhimu. **Gharama zisizotarajiwa**, kama vile mabadiliko ya mahali pa dakika za mwisho na mahitaji ya ziada ya teknolojia ya tukio, zinaweza kuboresha bajeti yako kwa haraka. + +Kwa matukio mapya, **kupata wazungumzaji wa hali ya juu kunaweza kuwa ngumu hasa**. Viongozi wa mawazo walioimarishwa au washawishi katika nafasi ya Ethereum wanaweza kuwa tayari wana ratiba kamili na wanaweza kusitasita kujitolea kwa tukio jipya bila rekodi iliyothibitishwa. Kuwa tayari kutumia muda kwenye mitandao na kufikia wazungumzaji watarajiwa muda mrefu kabla ya tukio. + +Pia, linapokuja suala la wazungumzaji, wasiliana nao kwa uwazi na mara kwa mara - weka tarehe ya mwisho ya kutuma mawasilisho na uepuke mabadiliko yoyote ya dakika za mwisho. + +Kongamano lenye mafanikio linahitaji timu iliyojitolea inayoweza kushughulikia vifaa, uuzaji, ufadhili, usaidizi wa kiufundi na usimamizi wa waliohudhuria. Kupata watu walio na uzoefu katika kuandaa matukio ya teknolojia kunaweza kuwa changamoto, hasa ikiwa unafanya kazi na bajeti ndogo au, mara nyingi, bila bajeti, lakini kwa kujitolea. + +### Hupaswi kuifanya peke yako. Unahitaji wanaojitolea. {#you-shouldnt-do-it-alone-you-need-volunteers} + +Kuandaa tukio la Ethereum kunahitaji timu tofauti na iliyojitolea kushughulikia vifaa, usajili, uratibu wa spika, usaidizi wa waliohudhuria, na mengi zaidi. Kwa ukubwa wa timu kuanzia watu 3 hadi 15 tu, inakuwa wazi kuwa watu wa kujitolea ni muhimu kwa ajili ya kuendesha tukio vizuri. + +Wajitolea mara nyingi ni uti wa mgongo wa mikutano mingi, wakitoa usaidizi muhimu, hasa unapofanya kazi na bajeti ndogo. Wanaweza kushughulikia kila kitu kuanzia kusimamia madawati ya usajili hadi kusaidia kupanga tukio, kuhakikisha kuwa tukio linaendeshwa kwa urahisi iwezekanavyo. + +Ingawa ni changamoto kutoa fidia ya fedha kwa wanaojitolea, ni muhimu kuwapa kitu cha thamani kitakachofanya uzoefu wao kuwa wa manufaa. Fikiria kuwapa fursa za mitandao, ukuzaji ujuzi, manufaa fulani ya kipekee, cheti au barua za mapendekezo. + +### Mambo muhimu ya kufuata kwa waandaaji wa hafla {#compliance-essentials-for-event-organizers} + +Wakati wa kuandaa tukio, kuna mambo kadhaa muhimu ya kisheria na ya kuzingatia: + +- **Makubaliano ya ufadhili** - Hakikisha kuwa una mkataba wazi kwa wafadhili, ikijumuisha sera iliyofafanuliwa vyema ya kughairi. +- **Kanuni za Maadili** - Tayarisha Kanuni za Maadili iliyoundwa kulingana na aina mahususi ya tukio (mkutano/hakathoni, nyumba za wadukuzi n. k). +- **Sera ya faragha** - Rasimu ya sera ya faragha kwa tovuti yako ili kutii kanuni na picha za ulinzi wa data +- **Taarifa ya serikali za mitaa** - Hata kama tukio lako ni mkusanyiko wa watu wachache, inashauriwa kuripoti kwa kituo cha polisi cha eneo lako. +- **Makubaliano ya tiketi** – Anzisha makubaliano rasmi na mtoa huduma wako wa tikiti ili kufafanua masharti na majukumu. +- **Utiifu wa udhibiti** - Angalia mapema ikiwa nchi unayoandaa mkutano ina kanuni au vizuizi maalum kwa tasnia ya crypto +- **Uidhinishaji wa forodha kwa bidhaa** - Ikiwa unaagiza bidhaa za wafadhili, inashauriwa kuajiri wakala wa forodha ili kushughulikia mchakato kwa ufanisi. +- **Sera ya upigaji picha na vyombo vya habari** – Fafanua kwa uwazi miongozo kuhusu upigaji picha na utangazaji wa vyombo vya habari, kuhakikisha washiriki wanafahamishwa kuhusu idhini na chaguo za kujiondoa. + +## Baada ya tukio: Nini kinafuata? {#after-the-event-whats-next} + +Baada ya tukio kukamilika, ni muhimu kukusanya maoni kutoka kwa waliohudhuria, wasemaji na wafadhili na kuunda ripoti ya ndani ili uweze kujiandaa vyema kwa matukio yajayo. Hii husaidia kutambua yaliyokwenda vizuri na wapi maboresho yanaweza kufanywa. Tumia tafiti au mahojiano ya ana kwa ana kukusanya maarifa muhimu ambayo yataongoza marudio ya siku zijazo. Chukua muda wa kukagua makosa yoyote au maeneo ya uzembe, kwani yanaweza kuepukwa katika mkutano ujao, na kufanya mchakato kuwa laini. + +Jambo la msingi ni kuendeleza kasi. Endelea kujihusisha na jumuiya yako, shiriki taarifa kuhusu maendeleo unayofanya kulingana na maoni yao, na ujenge msisimko kwa tukio linalofuata. Kwa kudumisha muunganisho huu, unahakikisha athari ya mkutano inaenea zaidi ya tukio lenyewe, kuimarisha uhusiano na kuweka msingi wa mafanikio ya baadaye. + +## Shukrani {#acknowledgement} + +Asante sana kwa kila mtu aliyechangia makala hii kwa kushiriki maarifa yao: Slavo Fabisik kutoka ETHBratislava; Lola kutoka ETH Kipu na ETH Latam; Tanja Mladenovic kutoka ETH Belgrade, Juan David kutoka Ethereum Bogota; Monika Zając kutoka ETHWarsaw; Raffaele Orefice kutoka NapulETH; Xiao Wu(Ling) kutoka ETH Riyadh; Marco kutoka urbe.eth; Caolán Walsh kutoka ETH Dublin; Alex Males kutoka ETHCluj; na Stanko Devic kutoka ETH Slovenia. + +## Rasilimali {#resources} + +Podikasti: Jinsi ya kuandaa na kutangaza tukio la ETH kutoka A hadi Z: + +- [Mfano wa kifani wa ETHWarsaw, wa Nje ya Kawaida](https://www.youtube.com/watch?v=io2Dx1ouse8o) + +Nafasi ya Twitter: + +- [AMA ya Jumuiya ya ETH](https://x.com/NapulETH/status/1905732699094151623) + +Makala: + +- [Kujenga ETHKL, na Danny H.](https://sekto.tech/ethkl24) +- [Mwongozo wa Matukio wa POKT](https://docs.pokt.network/community/pokt-events-playbook) diff --git a/public/content/translations/sw/community/get-involved/index.md b/public/content/translations/sw/community/get-involved/index.md index bf48adaeff1..59b6a109cbb 100644 --- a/public/content/translations/sw/community/get-involved/index.md +++ b/public/content/translations/sw/community/get-involved/index.md @@ -1,5 +1,5 @@ --- -title: Nawezaje kushiriki? +title: Ninaweza kushiriki vipi? description: Jinsi ya kushiriki kwenye jamii ya Ethereum. lang: sw --- @@ -8,105 +8,125 @@ lang: sw Jumuiya ya Ethereum inahusisha watu wa asili tofauti na wenye ujuzi wa kila aina. Endapo wewe ni msanii, msimbuaji au mhasibu, kuna njia za kujihusisha. Hii ni orodha ya mapendekezo yanayoweza kukusaidia. -## Wasimbuaji {#developers} +Anza kwa kusoma kuhusu dhamira na maadili ya ethereum.org katika [kanuni zetu za maadili](/community/code-of-conduct). -- Jifunze kuhusu Ethereum na ijaribishe kwenye [etehereum.org/developers/](/developers/) -- Shiriki kwenye[ETHGlobal](http://ethglobal.co/)hackathon iliyokaribu nawe! -- Vinjari juu ya [miradi inayohusiana na taaluma yako au lugha ya usimbuajiutakayochagua.](/developers/docs/programming-languages/) -- Tazama au shiriki kwenye [mikutano ya wasimbuaji wa ndani](https://www.youtube.com/@EthereumProtocol) -- [Orodha pendekezwa ya kuunga mkono Ikolojia ya Ethereum](https://esp.ethereum.foundation/wishlist/) - maeneo amabayo Ikolojia ya Ethereum inatafuta maombi ya fedha kwa ajili ya vifaa, nyaraka, na miundombinu -- [Daraja la Web3](https://www.web3bridge.com/) - jiunge na wapenzi wa web3 kwenye mpango wa kutambua, kujifunza, na kuunga mkono mamia ya wasanidi programu na wanachama Afrika +## Wasanidi Programu ‍ {#developers} -## Watafiti & Taaluma {#researchers-and-academics} +- Jifunze kuhusu Ethereum na uijaribu katika [ethereum.org/developers/](/developers/) +- Hudhuria hackathon ya [ETHGlobal](http://ethglobal.co/) karibu nawe! +- Angalia [miradi inayohusiana na eneo lako la utaalamu au lugha ya programu unayoipenda](/developers/docs/programming-languages/) +- Tazama au shiriki katika [simu za Safu ya Makubaliano na Utekelezaji](https://www.youtube.com/@EthereumProtocol/streams) +- [Orodha ya matamanio ya Mpango wa Usaidizi wa Mfumo-ikolojia](https://esp.ethereum.foundation/wishlist/) - maeneo ya zana, nyaraka, na miundombinu ambapo Mpango wa Usaidizi wa Mfumo-ikolojia wa Ethereum unatafuta kikamilifu maombi ya ruzuku +- [Web3Bridge](https://www.web3bridgeafrica.com) - jiunge na jumuiya inayochipukia ya web3 katika mpango wao wa kutambua, kufunza, na kusaidia mamia ya wasanidi programu na wanajumuiya kote barani Afrika +- Jiunge na [Discord ya Eth R&D](https://discord.com/invite/VmG7Uxc) +- Jiunge na [Discord ya Ethereum Cat Herders](https://discord.com/invite/Nz6rtfJ8Cu) -Una taaluma ya hisabati, kriptografia ama uchumi? Unaweza kupenda kazi za viwango vya juu, zilizofanywa na ikolojia ya Ethereum +## Watafiti na Wanataaluma ‍ {#researchers-and-academics} -- [Changamoto.ethereum.org](https://challenges.ethereum.org/) - mfululizo wa itilafu zilizofanyiwa uchunguzi, unapoweza kujipatia hadi >$100,000 USD -- [Ethersear.ch](https://ethresear.ch) - Jukwaa la msingi la Ethereum la watafiti, na jukwaa lenye ushawishi mkubwa zaidi duniani kwenye sdarafu za kripto -- [Orodha pendekezwa ya kuunga mkono Ikolojia ya Ethereum](https://esp.ethereum.foundation/wishlist/) - maeneo amabayo Ikolojia ya Ethereum inatafuta maombi ya fedha kwa ajili ya vifaa, nyaraka, na miundombinu +Una taaluma ya hisabati, kriptografia ama uchumi? Unaweza kupenda kazi za viwango vya juu, zilizofanywa na ikolojia ya Ethereum: -## Seti zisizo za kiufundi {#non-technical} +- Jiunge na [Discord ya Eth R&D](https://discord.com/invite/VmG7Uxc) +- Andika au kagua Pendekezo la Uboreshaji la Ethereum + - Andika EIP + 1. Wasilisha wazo lako kwenye [Ethereum Magicians](https://ethereum-magicians.org) + 2. Soma [EIP-1](https://eips.ethereum.org/EIPS/eip-1) - **Ndio, hiyo ndiyo hati _nzima_.** + 3. Fuata maelekezo katika EIP-1. Irejelee unapoandika rasimu yako. + - Jifunze jinsi ya kuwa [Mhariri wa EIP](https://eips.ethereum.org/EIPS/eip-5069) + - Unaweza kufanya ukaguzi wa rika kwa EIPs sasa hivi! Angalia [PR zilizo wazi zenye lebo ya `e-review`](https://github.com/ethereum/EIPs/pulls?q=is%3Apr+is%3Aopen+label%3Ae-review). Toa maoni ya kiufundi kwenye kiungo cha `discussion-to`. + - Shiriki katika [Utawala wa EIP](https://github.com/ethereum-cat-herders/EIPIP) + - Jiunge na [Discord ya Ethereum Cat Herders](https://discord.com/invite/Nz6rtfJ8Cu) + - [Zaidi kuhusu EIPs](/eips/) +- [Challenges.ethereum.org](https://challenges.ethereum.org/) - mfululizo wa zawadi za utafiti za thamani ya juu, ambapo unaweza kupata >$100,000 USD +- [Ethresear.ch](https://ethresear.ch) - jukwaa kuu la Ethereum la utafiti, na jukwaa lenye ushawishi mkubwa zaidi ulimwenguni la uchumi wa kripto +- [Utafiti wa EF AMA](https://old.reddit.com/r/ethereum/comments/vrx9xe/ama_we_are_ef_research_pt_8_07_july_2022) - Mfululizo unaoendelea wa Maswali na Majibu na watafiti. Kila sehemu inayofuata inapofunguliwa, mtu yeyote anaweza kutuma maswali. +- [Orodha ya matamanio ya Mpango wa Usaidizi wa Mfumo-ikolojia](https://esp.ethereum.foundation/wishlist/) - maeneo ya utafiti ambapo Mpango wa Usaidizi wa Mfumo-ikolojia wa Ethereum unatafuta kikamilifu maombi ya ruzuku +- [AllWalletDevs](https://allwallet.dev) - jukwaa la wasanidi programu wa Ethereum, wabunifu, na watumiaji wenye nia kukutana mara kwa mara na kujadili kuhusu mikoba + +[Gundua maeneo mengine hai ya utafiti](/community/research/). + +## Ujuzi usio wa kiufundi ‍ {#non-technical} Kama wewe sio msanidi programu, inaweza kua vigumu kujua ni wapi unapaswa kuanzia kwenye Ethereum. Kuna mapendekezo kadhaa, pamoja nayo ni vyanzo maalumu kwa kila asili ya taaluma. -### Panga kikao kwenye mji wako {#meetups} +### Panga mkutano katika jiji lako {#meetups} -- Huna uhakika jinsi ya kuanza? [Mtandao wa BUIDL](https://consensys.net/developers/buidlnetwork/) unaweza kukusaidia. +- Huna uhakika jinsi ya kuanza? [Mtandao wa BUIDL](https://consensys.net/developers/buidlnetwork/) unaweza kusaidia. ### Andika maudhui kuhusu Ethereum {#write-content} - Ethereum inahitaji waandishi wazuri wanaoweza kuelezea thamani yake kwa kutumia lugha rahisi -- Hauko tayari kuchapisha makala yako pekee? Zingattia kuchangia kwenye maudhui yaliopo kwenye vyanzo vya jumuiya kama, ama pendekeza maudhui mapya kwa ajili ya ethereum.org! +- Hauko tayari kuchapisha makala yako pekee? Fikiria kuchangia kwenye maudhui yaliyopo kwenye rasilimali za jamii, au [pendekeza maudhui mapya kwa ethereum.org](/contributing/)! -### Toa msaada wa kuandika muhtasari kwenye mikutano ya jumuiya {#take-notes} +### Jitolee kuandika madokezo kwa ajili ya simu za jamii {#take-notes} -- Kuna mikutano mingi ya jumuiya, na kua na waandishi wa mihutsari itasaidia sana. Kama ungependa, jiunge na discord ya [ Wafugaji wa Paka wa Ethereum (Ethereum Cat Herders)](https://discord.com/invite/Nz6rtfJ8Cu), na ujitambulishe! +- Kuna mikutano mingi ya jumuiya, na kua na waandishi wa mihutsari itasaidia sana. Ikiwa una nia, jiunge na [discord ya Ethereum Cat Herders](https://discord.com/invite/Nz6rtfJ8Cu), na ujitambulishe! -### Tafsiri maudhui ya Etjereum kwenda kwenye lugha mama, ama lugha uliozaliwa ukizungumza {#translate-ethereum} +### Tafsiri maudhui ya Ethereum kwa lugha yako ya asili {#translate-ethereum} - ethereum.org husimamia programu ya ufasiri inayo fasiri tovuti, na vyanzo vingine, kwenda kwenye lugha zingine tofauti -- Jifunze jinsi ya kuchangia[hapa](/contributing/translation-program) +- Tafuta jinsi ya kujihusisha [hapa](/contributing/translation-program) ### Endesha nodi {#run-a-node} Jiunge na maelefu ya waendesha nodi kwa ugatuzi mkubwa zaidi wa Ethereum. -- [Zaidi juu ya kuendesha nodi](/developers/docs/nodes-and-clients/run-a-node/) +- [Zaidi kuhusu jinsi ya kuendesha nodi](/developers/docs/nodes-and-clients/run-a-node/) -### Weka hisa za ETH {#staking} +### Weka hisa ETH yako {#staking} Kwa kusimamisha hisa zako za ETH unaweza kupata zawadi huku ukisaidia kulinda mtandao wa Ethereum. -- [Zaidi juu ya kusimamisha hisa](/staking/) +- [Zaidi kuhusu kuweka hisa](/staking/) -### Unga mkono miradi {#suport-projects} +### Saidia miradi {#support-projects} -Ikolojia ya Ethereum iko njiani katika kufadhili bidhaa za umma na miradi inayoleta tofauti katika Ethereum. Kwa mchango mdigo tu unaweza kuunga mkono na kuruhsu kazi muhimu kutekelezwa. +Ikolojia ya Ethereum iko njiani katika kufadhili bidhaa za umma na miradi inayoleta tofauti katika Ethereum. Kwa mchango mdogo tu unaweza kuunga mkono na kuruhsu kazi muhimu kutekelezwa. - [Gitcoin](https://gitcoin.co/fund) -- [clr.fedha](https://clr.fund/#/about) +- [clr.fund](https://clr.fund/#/about) -## Wataalamu wa Kifedha & Akaunti {#financial-professionals} +## Wataalamu wa fedha na Wahasibu ‍ {#financial-professionals} -- Ethereum ni mji wa ikolojia ya "feddha zilizogatuliwa" - mtandao wa itifaki na programu zinatoa huduma mbadala za kifedha. Kama wewe ni unataaluma ya uchumi, tazama app za DeFi kwenye [DeFi Llama](https://defillama.com/) ama [DeFiprime](https://defiprime.com) -- Mhasibu? Mali za Ethereum - ETH, tokeni, DeFi, nk - tambulisha masuala mengi ya riwaya. Unaweza kuanza kwa kutazama baadhi ya miradi inayolenga kusaidia watumiaji wa sarafu ya kripto na kupanga vitabu vyao & changamoto za uhasibu, kama [Rotki](https://rotki.com/) +- Ethereum ni mji wa ikolojia ya "feddha zilizogatuliwa" - mtandao wa itifaki na programu zinatoa huduma mbadala za kifedha. Ikiwa wewe ni mtaalamu wa fedha, angalia baadhi ya programu za DeFi katika [DeFi Llama](https://defillama.com/) au [DeFiPrime](https://defiprime.com) +- Mhasibu? Mali za Ethereum - ETH, tokeni, DeFi, nk - tambulisha masuala mengi ya riwaya. Unaweza kuanza kwa kuangalia baadhi ya miradi inayolenga kuwasaidia watumiaji wa sarafu za kidigitali kutatua changamoto zao za uwekaji hesabu na uhasibu, kama vile [Rotki](https://rotki.com/) -## Wasimamizi wa bidhaa {#product-managers} +## Wasimamizi wa Bidhaa ‍ {#product-managers} -- Ikolijia ya Ethereum inahitaji talanta zako! Makampuni mengi yanatoa ajira kwa wasimsmizi wa bidhaa. Kama unataka kuanza kwa kuchangia kwenye mradi wa vyanzo huria, wasiliana na [Wafugaji wa Paka wa Ethereum](https://discord.com/invite/Nz6rtfJ8Cu) ama [RaidGuild](https://www.raidguild.org/) +- Ikolijia ya Ethereum inahitaji talanta zako! Makampuni mengi yanatoa ajira kwa wasimsmizi wa bidhaa. Ikiwa unataka kuanza kwa kuchangia mradi wa chanzo huria, wasiliana na [Ethereum Cat Herders](https://discord.com/invite/Nz6rtfJ8Cu) au [RaidGuild](https://www.raidguild.org/) -## Masoko {#marketing} +## Masoko ‍ {#marketing} - Kuna nafasi nyingi za masoko na mawasiliano kwenye ikolojia ya Ethereum! -## Ajira za Ethereum {#ethereum-jobs} +## Kazi za Ethereum {#ethereum-jobs} **Unataka kupata ajira kwenye Ethereum?** -- [ajiara za ethereum.org](/about/#open-jobs) -- [Bodi ya kazi ya Msingi wa Ethereum (Wenzo)](https://jobs.lever.co/ethereumfoundation) -- [Bodi ya kazi ya Msingi wa Ethereum (BambooHR)](https://ethereum.bamboohr.com/jobs/) -- [Kazi za sarafu ya kripto](https://cryptocurrencyjobs.co/ethereum/) -- [Kazi-za.kripto](https://crypto.jobs/) -- [Ajira kwenye ConsenSys](https://consensys.net/careers/) -- [Orodha ya kazi za kripto](https://cryptojobslist.com/ethereum-jobs) -- [Bodi ya ajira zisizo za benki](https://pallet.xyz/list/bankless/jobs) -- [tumia kazi za Web3](https://www.useweb3.xyz/jobs) +- [Kazi za ethereum.org](/about/#open-jobs) +- [Ubao wa kazi wa Wakfu wa Ethereum](https://jobs.ashbyhq.com/ethereum-foundation) +- [JobStash](https://jobstash.xyz) +- [Ubao wa Kazi wa Ethereum](https://www.ethereumjobboard.com/) +- [Kazi za Sarafu za Kidigitali](https://cryptocurrencyjobs.co/ethereum/) +- [Kazi katika ConsenSys](https://consensys.net/careers/) +- [Orodha ya Kazi za Kripto](https://cryptojobslist.com/ethereum-jobs) +- [Ubao wa kazi wa Bankless](https://pallet.xyz/list/bankless/jobs) - [Kazi za Web3](https://web3.career) - [Jeshi la Web3](https://web3army.xyz/) +- [Kazi za Crypto Valley](https://cryptovalley.jobs/) +- [Kazi za Ethereum](https://startup.jobs/ethereum-jobs) ## Jiunge na DAO {#decentralized-autonomous-organizations-daos} -"DAOs" ni mashirika huru yaliogatuliwa. Haya makundi yanainua teknolojia ya Ethereum ili kuwezesha ushirikiano. Kwa mfano, kudhibiti uanachama, upigaji kura wa mapendekezo, ama kusimamia mali zilizokusanywa. Huku DAO bado ziko kwenye majaribio, zinatoa fursa ya kupata makundi unayofanana nayo, utapata washiriki na kukuza mchango wako kwenye jumuiya ya Ethereum. [Zaidi juu ya DAOs](/dao/) - -- [DAOSquare](https://www.daosquare.io) [@DAOSquare](https://twitter.com/DAOSquare) - _Tangaza dhana ya DAO katika nyanja zisizo za kiufundi na usaidie watu kupata thamani kupitia DAO._ -- [Msanidi DAO](https://www.developerdao.com/) [@Msanidi_dao](https://twitter.com/developer_dao) - _Jumuiya ya wajenzi wanaoamini katika umiliki wa ushirika wa mtandao_ -- [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _Mfanyakazi huru wa Web3 akiafanya kazi kama DAO_ -- [HausDAO](https://daohaus.club) [@nowdaoit](https://twitter.com/nowdaoit) - _Utawala wa jumuiya ya DAOhaus_ -- [LexDAO](https://lexdao.org)[@lex_DAO](https://twitter.com/lex_DAO) - _Uhandisi wa kisheria_ -- [MetaCartel](https://metacartel.org) [@Metaa_Cartel](https://twitter.com/Meta_Cartel) - _kiota cha DAO_ -- [Ubia wa MetaCartel](https://metacartel.xyz) [@VENTURE_DAO](https://twitter.com/VENTURE_DAO) - _Ubia wa kripto za kabla ya kuanzishwa_ -- [MetaMchezo](https://metagame.wtf) [@MetaShamba](https://twitter.com/MetaFam) - _MMORPG makanika ya Mchezo kwenye maisha halisi_ -- [KiwandaMeta](https://metafactory.ai) [@KiwandaMeta](https://twitter.com/TheMetaFactory) - _Chapa ya Mavazi ya Nusu dijiti na halisi_ -- [Moloch](https://molochdao.com) [@MolochDAO](https://twitter.com/MolochDAO) - _Jumuiya inayolenga kutegemeza uboreshwaji wa Ethereum_ -- [Chama cha Uvamizi](https://raidguild.org) [@ChamachaUmavimizi](https://twitter.com/RaidGuild) - _Mkusanyiko wa wajenzi wa Web3_ +"DAOs" ni mashirika huru yaliogatuliwa. Haya makundi yanainua teknolojia ya Ethereum ili kuwezesha ushirikiano. Kwa mfano, kudhibiti uanachama, upigaji kura wa mapendekezo, ama kusimamia mali zilizokusanywa. Huku DAO bado ziko kwenye majaribio, zinatoa fursa ya kupata makundi unayofanana nayo, utapata washiriki na kukuza mchango wako kwenye jumuiya ya Ethereum. [Zaidi kuhusu DAOs](/dao/) + +- [DAOSquare](https://daosquare.io/) [@DAOSquare](https://twitter.com/DAOSquare) - _Tangaza dhana ya DAO katika nyanja zisizo za kiufundi na usaidie watu kuunda thamani kupitia DAO_ +- [Developer DAO](https://www.developerdao.com/) [@developer_dao](https://twitter.com/developer_dao) - _Jumuiya ya wajenzi wanaoamini katika umiliki wa pamoja wa mtandao_ +- [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _Kikundi cha wasanidi wa kujitegemea wa Web3 kinachofanya kazi kama DAO_ +- [HausDAO](https://daohaus.club) [@nowdaoit](https://twitter.com/nowdaoit) - _Utawala wa kijamii wa DAOhaus_ +- [LexDAO](https://lexdao.org) [@lex_DAO](https://twitter.com/lex_DAO) - _Uhandisi wa kisheria_ +- [MetaCartel Ventures](https://metacartel.xyz) [@VENTURE_DAO](https://twitter.com/VENTURE_DAO) - _Ubia kwa ajili ya miradi ya kripto ya hatua ya awali_ +- [MetaFactory](https://metafactory.ai) [@TheMetaFactory](https://twitter.com/TheMetaFactory) - _Bidhaa za Mavazi za Kidijitali-Halisi_ +- [MolochDAO](https://molochdao.com) [@MolochDAO](https://twitter.com/MolochDAO) - _Jumuiya inayojikita katika kufadhili maendeleo ya Ethereum_ +- [Raid Guild](https://raidguild.org) [@RaidGuild](https://twitter.com/RaidGuild) - _Kikundi cha wajenzi wa Web3_ + +Tafadhali kumbuka kuzingatia [kanuni za maadili](/community/code-of-conduct) za ethereum.org wakati wowote na kwa namna yoyote unayochangia kwenye ethereum.org! diff --git a/public/content/translations/sw/community/grants/index.md b/public/content/translations/sw/community/grants/index.md index c02db101f42..8f6eb689a1a 100644 --- a/public/content/translations/sw/community/grants/index.md +++ b/public/content/translations/sw/community/grants/index.md @@ -1,5 +1,5 @@ --- -title: Msingi wa Ethereum na mipango ya ruzuku ya jamii +title: Programu za ruzuku za Msingi wa Ethereum na jamii description: Orodha ya mipango ya ruzuku katika mazingira yote ya Ethereum. lang: sw --- @@ -10,36 +10,59 @@ Programu zilizoorodheshwa hapa chini hutoa misaada ya ufadhili kwa miradi inayof Orodha hii imepangwa na jamii yetu. Ikiwa kuna kitu kinakosekana au sio sahihi, tafadhali hariri ukurasa huu! + + +
Waanzilishi, mnahitaji msaada kukuza biashara yenu? [Nenda kwenye Usaidizi kwa Waanzilishi](/founders/)
+
+ ## Mfumo mpana wa ikolojia ya Ethereum {#broad-ethereum-ecosystem} Programu hizi zinasaidia ikolojia ya Ethereum kwa kutoa fedha kwa miradi mingi. Hizi ni pamoja na suluhu za kutoweka, ujenzi wa jamii, usalama, faragha, na zaidi. Ruzuku hizi sio maalum kwa jukwaa moja la Ethereum na ni mahali pazuri pa kuanzia ikiwa huna uhakika. -- [Programu ya Usaidizi wa Ekolojia ya EF](https://esp.ethereum.foundation) - _Kufadhili miradi ya chanzo wazi ambayo inanufaisha Ethereum, kwa kuzingatia zana za ulimwengu , miundombinu, utafiti na bidhaa za umma_ -- [RFPs za Ethereum](https://github.com/ethereum/requests-for-proposals) - _Maombi ya Mapendekezo na Ethereum Foundation ya kazi na miradi katika ikolojia ya Ethereum_ -- [Moloch DAO](https://www.molochdao.com/) - _Faragha, ukuaji wa safu ya 2, usalama wa mteja, na zaidi_ -- [Ruzuku zilizo wazi](https://opengrants.com/explore) -- [Ruzuku za DAO](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _Ukurasa wa google wa mashirika yanayotoa Ruzuku._ +- [Programu ya Usaidizi wa Mfumo Ikolojia ya EF](https://esp.ethereum.foundation) - _Kufadhili miradi ya chanzo huria inayonufaisha Ethereum, kwa kuzingatia hasa zana za jumla, miundombinu, utafiti na bidhaa za umma_ +- [Ruzuku za Kitaaluma](https://esp.ethereum.foundation/academic-grants) - _Ruzuku za kusaidia kazi ya kitaaluma inayohusiana na Ethereum_ + +## Vikusanyaji na mifumo ya orodha za ruzuku {#grant-list-aggregators} + +Rasilimali hizi hukusanya na kupanga fursa mbalimbali za ruzuku katika mfumo mzima wa ikolojia ya Ethereum, na kurahisisha ugunduzi wa fursa za ufadhili zinazolingana na mahitaji ya mradi wako. Tumezipanga kulingana na wasifu ili kukusaidia kuanza kutafuta rasilimali muhimu zaidi kulingana na mahitaji yako maalum ya ufadhili. + +### Kwa watafutaji wote wa ruzuku: Saraka za kina {#comprehensive-directories} + +Mifumo hii ya jumla inatoa chanjo pana ya ruzuku katika nafasi nzima ya Web3 na ni sehemu muhimu za kuanzia kwa mtu yeyote anayetafuta ufadhili: + +- [Blockworks Grantfarm](https://blockworks.co/grants/programs) - _Blockworks imekusanya saraka ya kina ya ruzuku zote, Maombi ya mapendekezo (RFP), na zawadi za hitilafu._ +- [Ruzuku za Blockchain](https://www.blockchaingrants.org/) - _Saraka ya ruzuku za blockchain na sarafu za kidigitali_ +- [Ramani ya Ufadhili ya Karma](https://gap.karmahq.xyz/funding-map) - Saraka ya programu zote za ruzuku za web3, inayosasishwa kila wiki + +### Kwa wasanidi programu na wajenzi {#for-developers-and-builders} + +- [Kitazamaji cha Programu za Ruzuku](https://airtable.com/shr86elKgWTSCP4AY) - _Hifadhidata ya umma ya Airtable ya programu za ruzuku_ +- [Lahajedwali la Ruzuku za Web3](https://docs.google.com/spreadsheets/d/1c8koZCI-GLnD8MG-eFcXPOBCNu1v8-aXIfwAAvc7AMc/edit#gid=0) - _Lahajedwali la Google la fursa za ruzuku za Web3_ +- [Ruzuku za Arbitrum](https://arbitrum.foundation/grants) — Arbitrum DAO na [The Arbitrum Foundation](https://arbitrum.foundation/) + +### Kwa miradi ya DeFi na programu za kifedha {#for-defi-projects} + +- [LlamaoGrants](https://wiki.defillama.com/wiki/LlamaoGrants) - _Saraka ya programu za ruzuku ya DeFi Llama_ +- [Ruzuku za AlphaGrowth](https://alphagrowth.io/crypto-web3-grants-list) - _Orodha ya kina ya ruzuku za crypto na Web3_ +- [Ruzuku za Uniswap Foundation](https://www.uniswapfoundation.org/build) - _Ruzuku za Unichain na Uniswap v4 na usaidizi kwa wajenzi wa DeFi_ -## Mradi maalum {#project-specific} +### Kwa wachangiaji wa DAO na wabunifu wa utawala {#for-dao-contributors} -Miradi hii imeunda misaada yao kwa miradi inayolenga kukuza na kujaribu teknolojia yao wenyewe. +Rasilimali za miradi inayoendeshwa na jamii na majaribio ya utawala: -- [Mpango wa Ruzuku wa Aave](https://aavegrants.org/) - _[Aave](https://aave.com/) hutoa ruzuku za DAO_ -- [Mpango wa Ruzuku za Compound](https://compoundgrants.questbook.app/) - _[Compaound](https://compound.finance/) hugharamia ikolojia_ -- [Balancer](https://quark-ceres-740.notion.site/Balancer-Grants-938f1b979810427f8d903a904315da41) - _fedha za ikolojia ya [Balancer](https://balancer.fi/)_ -- [Mpango wa Ruzuku wa Consensys](https://consensys.net/grants/) - _[Consensys](https://consensys.net/) fedha za minyororo ya blocku & ruzuku za Ethereum_ -- [Shirika la Ruzuku ya Ikolojia ya Lido (LEGO)](https://lego.lido.fi/) - _hugharamia ikolojia ya [Lido](https://lido.fi/)_ -- [Programu ya Ruzuku ya mStable](https://docs.mstable.org/advanced/grants-program) - _jamii ya [mStablei](https://mstable.org/)_ -- [Grafu](https://airtable.com/shrdfvnFvVch3IOVm) - _Ikolojia ya [Grafu](https://thegraph.com/)_ -- [Programu ya Ruzuku za Uniswap](https://www.uniswapfoundation.org/) - _Jamii ya [Uniswap](https://uniswap.org/)_ +- [Ruzuku za DAO](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _Lahajedwali la Google la mashirika yanayotoa ruzuku_ +- [Hifadhidata ya MetaGov](https://docs.google.com/spreadsheets/d/1e5g-dlWWsK2DZoZGBgfxyfGNSddLk-V7sLEgfPjEhbA/edit#gid=780420708) - _Ramani ya kina ya ruzuku za Web3_ -## Ufadhili wa Kwadratiki {#quadratic-funding} +### Bidhaa za umma na athari {#public-goods-and-impact} -Mizizi ya wazi ya Ethereum imesababisha ukuaji wa mtindo mpya wa kuvutia wa kukusanya fedha: fedha za kwadratiki. Hii ina uwezo wa kuboresha jinsi tunavyofadhili aina zote za bidhaa za umma katika siku zijazo. Ufadhili wa kwadaratiki huhakikisha kuwa miradi inayopokea ufadhili mwingi ni ile yenye mahitaji ya kipekee. Kwa maneno mengine, miradi ambayo inasimama kuboresha maisha ya watu wengi. [Zaidi juu ya ufadhili wa kwadaratiki.](/defi/#quadratic-funding) +Programu hizi hulenga kufadhili miradi inayonufaisha jamii pana, bidhaa za umma, na mipango yenye athari. Hizi ni pamoja na watoa ruzuku, pamoja na mifumo ya michango inayotumia mifumo ya ugawaji wa ufadhili wa onchain ikiwa ni pamoja na [ufadhili wa quadratic](/defi/#quadratic-funding): -- [Gitcoin](https://gitcoin.co/grants) -- [clr.fedha](https://clr.fund/) +- [Gitcoin](https://www.gitcoin.co/program) - _Ruzuku za Gitcoin hutumia mifumo mingi ya ugawaji wa mtaji kufadhili miradi ya chanzo huria na bidhaa za umma katika mfumo wa ikolojia wa Ethereum_ +- [Octant](https://octant.app/home) - _Mfumo ikolojia wa ufadhili wa bidhaa za umma unaosawazisha manufaa ya wote na uwezeshaji wa kifedha wa mtu binafsi_ +- [Giveth](https://giveth.io/) - _Jukwaa la michango ya sarafu za kidigitali linalowezesha michango ya moja kwa moja kutoka kwa miradi ya manufaa bila ada zozote za ziada_ +- [Artizen](https://artizen.fund/) - _Husaidia wabunifu kufadhili kwa kulinganisha miradi mipya katika mstari wa mbele wa sanaa, sayansi, teknolojia na utamaduni_ +- [Quadratic Accelerator](https://qacc.giveth.io/) - _Programu ya kuongeza kasi ya uanzishaji inayotumia ufadhili wa quadratic kusaidia miradi inayofaidi umma_ -## Fanya kazi kwenye Ethereum {#work-in-ethereum} +## Kazi katika Ethereum {#work-in-ethereum} Hauko tayari kuanza rasimu yako mwenyewe? Kuna makampuni zaidi ya mia moja yanayotafuta watu binafsi wenye shauku wafanye kazi na kutoa michango kwenye ikolojia ya Ethereum. Unatafuta taarifa zaidi? [Angalia kazi zinazohusiana na Ethereum](/community/get-involved/#ethereum-jobs) diff --git a/public/content/translations/sw/community/language-resources/index.md b/public/content/translations/sw/community/language-resources/index.md index 126389f3c45..9201fc75e7f 100644 --- a/public/content/translations/sw/community/language-resources/index.md +++ b/public/content/translations/sw/community/language-resources/index.md @@ -4,117 +4,150 @@ description: Vyanzo vya kujifunza kuhusu Ethereum vya lugha tofauti na kiingerez lang: sw --- -# Vyanzo vya lugha {#language-resources} +# Rasilimali za lugha {#language-resources} Jamii ya Ethereum ni ya ulimwengu mzima na imejaa mamilioni ya wazungumzaji wasiozungumza kiingereza. Lengo letu ni kutoa elimu kwa kutumia lugha zote na kuondoa kizuizi cha lugha kinachofanya uungaji mkono wa Ethereum kutoka pande zote ulimwenguni kutokua changamoto. -Kama ungependa kusoma katika lugha yako ama unafahamu m tu asiyezungumza kiingereza, unaweza kupata orodha ya vyanzo visivyo katika lugha ya kiingereza hapo chini. Mamia kwa maelfu ya wapenzi wa Ethereum hukusanyika kwenye majukwaa ya mtandaoni kupeana taarufa, kuongelea mabaoresho ya hivi karibuni, jadili masuala ya kiufundi, na kufikiria Ethereum ijayo. +Kama ungependa kusoma katika lugha yako ama unafahamu m tu asiyezungumza kiingereza, unaweza kupata orodha ya vyanzo visivyo katika lugha ya kiingereza hapo chini. Mamia ya maelfu ya wapenzi wa Ethereum hukusanyika kwenye majukwaa haya ya mtandaoni kushiriki taarifa, kuongelea mabaoresho ya hivi karibuni, kujadili masuala ya kiufundi, na kufikiria masuala ya baadaye. -Je, unajua chanzo cha elimu ya Ethereum cha lugha yako? [Fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new/choose) kukiongeza kwenye orodha! +Je, unajua chanzo cha elimu ya Ethereum cha lugha yako? [Fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new/choose) ili kuliongeza kwenye orodha! -## Vyanzo vya Ethereum.org {#ethereum-org} +## Rasilimali za Ethereum.org {#ethereum-org} -Ethereum.org imetafsiriwa kwenda kwenye lugha zaidi ya 40 unazoweza kupata kwenye ukurasa wetu wa lugha. +Ethereum.org imetafsiriwa katika lugha zaidi ya 40 ambazo unaweza kuzipata kwa kutumia menyu yetu ya kiteuzi cha lugha, iliyoko juu ya kila ukurasa. -![Language selector menu](./language-selector-menu.png) +![Menyu ya kiteuzi cha lugha](./language-selector-menu.png) -Kama unazungumza lugha zaidi ya moja na ungependa kutusaidia kufikia watu wengi zaidi, unaweza kujihusisha nasi kwenye[Programu ya Ufasiri wa ethereum.org](/contributing/translation-program/#translation-program) na kutusaidia kutafsiri tovuti yetu. +Ikiwa unajua lugha mbili na unataka kutusaidia kufikia watu wengi zaidi, unaweza pia kushiriki katika [Programu ya Tafsiri ya ethereum.org](/contributing/translation-program/#translation-program) na utusaidie kutafsiri tovuti. -## Vyanzo kwa wanajamii {#community} +## Rasilimali za jamii {#community} -### Kireno cha Brazili {#br-pt} +### Kireno cha Brazil {#br-pt} **Habari** -- [BelnCrypto](http://www.beincrypto.com.br) -taarifa za kripto na majarida, ikijumuisha orodha za masoko yanayopatikana Brazili -- [Cointelegraph](http://cointelegraph.com.br/category/analysis)- Hii ni Cointelegrapgh ya kibrazili, chanzo kikubwa cha habari juu ya kripto -- [Livecoins](http://www.livecoins.com.br/ethereum) - Taarifa na chombo cha kripto -- [Seudinheiro](http://www.seudinheiro.com/criptomoedas/) ripoti na taarifa za kripto +- [BeInCrypto](http://www.beincrypto.com.br) - habari na makala za sarafu ya kidigitali, ikiwa ni pamoja na orodha ya mabadilishano, yanayopatikana nchini Brazil +- [Cointelegraph](http://cointelegraph.com.br/category/analysis) - toleo la Kireno la Cointelegraph, chanzo kikuu cha habari za sarafu ya kidigitali +- [Livecoins](http://www.livecoins.com.br/ethereum) - habari za sarafu ya kidigitali na zana +- [Seudinheiro](http://www.seudinheiro.com/criptomoedas/) - habari na ripoti za sarafu ya kidigitali +- [Modular Crypto](https://modularcrypto.xyz/) - habari za sarafu ya kidigitali na makala za kielimu **Elimu** -- [web3dev](https://www.web3dev.com.br/) - Ghala la maudhui na jamii ya wasanidi programu walioko discord. -- [Web3Brasil](https://github.com/web3brasil/web3brasil) - vyanzo vya kujifunza Web3 na DeFi -- [CriptoFacil](http://www.criptofacil.com/ultimas-noticias/) - taarifa na elimu juu ya kripto, ikijumuisha 'ethereum na DeFi kwa wanaoanza' -- [CriptoAtivos](http://www.criptoativos.wiki.br/) - Utambuzi kutoka kwenye uwazi wa kripto, blogu na elimu -- [Cointimes](http://www.cointimes.com.br/) - Taarfia na elimu juu ya kripto -- [Kianzilishi cha Web3](https://docs.google.com/document/d/1X8PSTFH7FTw9J-gbKWM6Y430SWCBT8d4t4pJgFQHJ8E/) - muongozo unaojibu maswali yanayoulizwa mara nyingi na maswali ya msingi ya kripto +- [web3dev](https://www.web3dev.com.br/) - Kitovu cha maudhui na jamii ya Discord kwa wasanidi programu wa web 3. +- [Web3Brasil](https://github.com/web3brasil/web3brasil) - rasilimali za kujifunza Web3 na DeFi +- [CriptoFacil](http://www.criptofacil.com/ultimas-noticias/) - habari na elimu ya sarafu ya kidigitali, ikiwa ni pamoja na ‘Ethereum kwa wanaoanza’ na ‘DeFi’ kwa wanaoanza +- [CriptoAtivos](http://www.criptoativos.wiki.br/) - maarifa kutoka kwa nafasi ya sarafu ya kidigitali, elimu na blogi +- [Cointimes](http://www.cointimes.com.br/) - habari na elimu ya sarafu ya kidigitali +- [Web3 starter pack](https://docs.google.com/document/d/1X8PSTFH7FTw9J-gbKWM6Y430SWCBT8d4t4pJgFQHJ8E/) - mwongozo unaojibu maswali yanayoulizwa mara kwa mara na ya msingi ya crypto ### Kichina {#zh} **Vyanzo vya jumla** -- [Ethereum.cn](https://www.ethereum.cn/) - maudhui yanayodumishwa na jamii, yakieleza visasisho vya safu ya makubaliano, vikao vyote vya wasanidi programu waliobobea, safu ya 2, na mengineyo mengi. -- [EthFans](https://github.com/editor-Ajian/EthFans.org-annual-collected-works/) - jifunze kila kitu toka misingi ya chini ya Ethereum hadi mada za juu -- [Unitimes](https://mp.weixin.qq.com/s/tvloZSDBSOQN9zDQj_91kA) - maudhui yanayodumisha jamii, yakieleza juu ya Ethereum, DeFi, NFT, maarifa yanayohusiana na Web3 -- [123ETH](https://123eth.org/) - Lango la ikolojia ya Ethereum -- [Zhen Xiao](http://zhenxiao.com/blockchain/) - kozi za bure juu ya sarafu ya kripto na programu zake -- [Karatasi Nyeupe](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) - Toleo la kichina la Karatasi Nyeupe +- [Ethereum.cn](https://www.ethereum.cn/) - maudhui yanayotunzwa na jamii, yanayohusu sasisho la safu ya makubaliano, madokezo yote ya mikutano ya wasanidi wa msingi, safu ya 2, n.k. +- [EthFans](https://github.com/editor-Ajian/EthFans.org-annual-collected-works/) - jifunze kila kitu kuanzia misingi hadi mada za juu za Ethereum +- [Unitimes](https://mp.weixin.qq.com/s/tvloZSDBSOQN9zDQj_91kA) - maudhui yanayotunzwa na jamii, yanayohusu maarifa yanayohusiana na Ethereum, DeFi, NFT, Web3 +- [123ETH](https://123eth.org/) - Lango la mfumo ikolojia wa Ethereum +- [Zhen Xiao](http://zhenxiao.com/blockchain/) - kozi za bure za mtandaoni kuhusu sarafu ya kidigitali na matumizi yake +- [Waraka Rasmi wa Ethereum](/zh/whitepaper/) - toleo la Kichina la Waraka Rasmi wa Ethereum **Ikolojia ya Ethereum** -- [ETHPlanet](https://www.ethplanet.org/) - hackathons za mtandaoni na za uso kwa uso, zikitioa mafunzo kwa wanafunzi walioko vyuoni -- [PrimitiveLane](https://www.primitiveslane.org/) - shirika lisilo la faida, lililojikita juu ya teknolojia ya blockchain(mnyororo-wa-bloku) -- [Jamii ya watafsiri wa Ethereum CN](https://www.notion.so/Ethereum-Translation-Community-CN-05375fe0a94c4214acaf90f42ba40171) - jamii iliojikita kutafsiri maudhui ya elimu ya Ethereum +- [ETHPlanet](https://www.ethplanet.org/) - hackathon za mtandaoni na za ana kwa ana, zinazotoa mafunzo kwa wanafunzi wa vyuo vikuu +- [PrimitivesLane](https://www.primitiveslane.org/) - kikundi cha utafiti kisicho cha faida, kinachojikita kwenye teknolojia ya blockchain +- [Ethereum Translation Community CN](https://www.notion.so/Ethereum-Translation-Community-CN-05375fe0a94c4214acaf90f42ba40171) - jamii inayojitolea kutafsiri maudhui ya kielimu ya Ethereum **Kwa wasanidi programu** -- [DappLearning](https://github.com/Dapp-Learning-DAO/Dapp-Learning) - kundi linalojifunza miradi ya dapp na hushirikisha wengine mawazo na maoni yao kila wiki -- [JifunzeBlockchain](https://learnblockchain.cn/) - jumuiya kwa ajili ya wasanidi programu, kushirikishana taarifa juu kuhusu teknolojia ya blockchain(mnyororo wa bloku) +- [DappLearning](https://github.com/Dapp-Learning-DAO/Dapp-Learning) - kikundi cha kujifunza kinachosoma miradi mikuu ya mfumo mtawanyo wa kimamlaka na kushiriki mawazo na maoni kila wiki +- [LearnBlockchain](https://learnblockchain.cn/) - jamii ya wasanidi programu, wanaoshiriki habari kuhusu teknolojia ya blockchain **Kwa watafiti wa Kriptograhia** -- [SecbitLabs](https://mp.weixin.qq.com/s/69_tqBJpr_sbaKtR1sBRMw) ni anauani ta WeChat, inayoelezea kriptograhia, usalama na mengineyo. -- [Sparkbyte](https://mp.weixin.qq.com/s/9KgKTc_jtJ7bWKdbNPoqvQ) - anuanani ya WeChat, inayoelezea teknolijia ya zk +- [SecbitLabs](https://mp.weixin.qq.com/s/69_tqBJpr_sbaKtR1sBRMw) - akaunti ya WeChat, inayoelezea kriptografia, usalama, n.k. +- [Sparkbyte](https://mp.weixin.qq.com/s/9KgKTc_jtJ7bWKdbNPoqvQ) - akaunti ya WeChat, inayoelezea teknolojia ya zk + +### Kicheki {#cs} + +- [Gwei.cz](https://gwei.cz) - jamii ya karibu na Web3, inaunda maudhui ya kielimu, inaandaa matukio ya mtandaoni na ya ana kwa ana +- [Gwei.cz Příručka](https://prirucka.gwei.cz/) - mwongozo wa Ethereum kwa wanaoanza +- [DAO Příručka](https://dao.gwei.cz/) - mwongozo wa wanaoanza kwa DAO +- [Mastering Ethereum](https://ipfs.io/ipfs/bafybeidvuxhnsgfx3tncpfxheqglkjwmdxclknlgd7s7qggd2a6bzgb27m) - Mastering Ethereum kwa Kicheki ### Kifaransa {#fr} -- [Ethereum Ufaransa](https://www.ethereum-france.com/) - Ethereum Ufaransa hupanga matukio, huunda maudhui na huimiza mijadala katika Ethereum -- [Ethereum.fr](https://ethereum.fr/) - Taarifa za Ethereum na elimu -- [BanklessFR](https://banklessfr.substack.com/) - jarida la Bankless katika lugha ya kifaransa -- [KriptoFR](https://cryptofr.com/category/44/ethereum-general) - jukwaa la sarafu-ya-kripto na ukurasa mdogo wa Ethereum +- [Ethereum France](https://www.ethereum-france.com/) - Ethereum France huandaa matukio, huunda maudhui na kuhimiza majadiliano kuhusu Ethereum +- [Ethereum.fr](https://ethereum.fr/) - habari na elimu ya Ethereum +- [BanklessFR](https://banklessfr.substack.com/) - jarida la Bankless kwa Kifaransa +- [CryptoFR](https://cryptofr.com/category/44/ethereum-general) - jukwaa la sarafu ya kidigitali lenye ukurasa mdogo wa Ethereum ### Kijerumani {#de} -- [Jifunze na Microsoft (Solidity)](https://docs.microsoft.com/de-de/learn/modules/blockchain-learning-solidity/) - kwa kutumia Solidity -- [Jifunze na Microsoft (mikataba erevu)](https://docs.microsoft.com/de-de/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - Andika Mikataba Erevu ya Ethereum kwa kutmia Solidity -- [Jifunze na Microsoft (Mitandao ya Ethereum)](https://docs.microsoft.com/de-de/learn/modules/blockchain-ethereum-networks/) - jiunge na tuma mitandao ya Ethereum -- [Jifunze na Microsoft (minyororo-ya-bloku)](https://docs.microsoft.com/de-de/learn/paths/ethereum-blockchain-development/) - kuingia katika uundaji wa minyororo-ya-bloku +- [Microsoft Learn (Solidity)](https://docs.microsoft.com/de-de/learn/modules/blockchain-learning-solidity/) - kutumia Solidity +- [Microsoft Learn (smart contracts)](https://docs.microsoft.com/de-de/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - kuandika mikataba-erevu ya Ethereum kwa kutumia Solidity +- [Microsoft Learn (Ethereum networks)](https://docs.microsoft.com/de-de/learn/modules/blockchain-ethereum-networks/) - unganisha na sambaza mitandao ya Ethereum +- [Microsoft Learn (blockchains)](https://docs.microsoft.com/de-de/learn/paths/ethereum-blockchain-development/) - mwanzo wa usanidi wa blockchain + +### Kiebrania {#he} + +- [Udi Wertheimer - Nini watumiaji wa bitcoin wanaweza kujifunza kutoka kwa Ethereum](https://www.cryptojungle.co.il/udi-wertheimer-what-bitcoiners-can-learn-from-ethereum/) +- [Omer Greismen (OpenZeppelin) - Jinsi Tulivyozuia Udukuzi wa Mkataba-erevu wa Dola Bilioni 15](https://www.cryptojungle.co.il/omer-greisman-openzeppelin/) +- [Shy Datika (INX) - Uwekaji ishara na mustakabali wa dhamana, ikiwa ni pamoja na je Ethereum ni dhamana](https://www.cryptojungle.co.il/shy-datika-tokenization/) +- [Roy Confino (Lemonade) - Bima @ Ethereum](https://www.cryptojungle.co.il/roy-confino-insurance/) +- [Idan Ofrat (Fireblocks) - Upokeaji wa Kitaasisi](https://www.cryptojungle.co.il/idan-ofrat-fireblocks/) +- [Gal Weizman (MetaMask) - MetaMask ni nini](https://www.cryptojungle.co.il/gal-weizman-metamask/) +- [Dror Aviely (Consensys) - Kituo cha Ethereum](https://www.cryptojungle.co.il/dror-aviely-ethereum-center/) +- [Nir Rozin - Kuwa cryptopunk](https://www.cryptojungle.co.il/nir-rozin-cryptopunk/) +- [Adan Kedem - Michezo ya Kubahatisha & Metaverse](https://www.cryptojungle.co.il/adan-kedem-web3-gaming/) +- [Uri Kolodny (Starkware) - Tabaka za Ethereum na blockchain](https://www.cryptojungle.co.il/uri-kolodny-starkware/) +- [Udi Wertheimer - Ethereum 2.0 dhidi ya ushindani](https://www.cryptojungle.co.il/udi-on-eth2/) +- [Ben Samocha (mimi mwenyewe) - Ethereum 2.0 - je ni fursa?](https://www.cryptojungle.co.il/etherurm2-week-summary/) +- [Alon Muroch (Bloxstaking) - Ethereum 2.0 ni nini?](https://www.cryptojungle.co.il/alon-moroch-eth2/) +- [Eilon Aviv (Collider Ventures) - Nini kinaweza kwenda vibaya na Ethereum 2.0](https://www.cryptojungle.co.il/eilon-aviv-eth2-0/) +- [Eilon Aviv (Collider Ventures) - Kwa nini tunahitaji Ethereum 2.0](https://www.cryptojungle.co.il/eilon-aviv-ethereum-2-0/) ### Kiitaliano {#it} -- [Ethereum ya Italia](https://www.ethereum-italia.it/) - Elimu ya Ethereu, Matukio, na taarifa zinazojikiata katika mikataba erevu na teknolijia ya minyororo-ya-bloku -- [Podkasti ya Ethereum Italia](https://www.ethereum-italia.it/podcast/) - Podkasti ya Ethereum katika lugha ya Kiitaliano -- [Jifunze na Microsoft (Solidity)](https://docs.microsoft.com/it-it/learn/modules/blockchain-learning-solidity/) - jifunze jinsi ya kutumia Solidity -- [Jifunze na Microsoft (mikataba erevu)](https://docs.microsoft.com/it-it/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - jifunze juu ya uandishi wa mikataba erevu ya Ethereum kwa kutmia Solidity -- [Jifunze na Microsoft (dApps)](https://docs.microsoft.com/it-it/learn/modules/blockchain-create-ui-decentralized-apps/) - uunda kiolesura kwa kutumia programu zilizogatuliwa +- [Ethereum Italia](https://www.ethereum-italia.it/) - elimu, matukio, na habari za Ethereum, inayojikita kwenye mikataba-erevu na teknolojia ya blockchain +- [Ethereum Italia Podcast](https://www.ethereum-italia.it/podcast/) - Podcast ya Ethereum kwa Kiitaliano +- [Microsoft Learn (Solidity)](https://docs.microsoft.com/it-it/learn/modules/blockchain-learning-solidity/) - jifunze jinsi ya kutumia Solidity +- [Microsoft Learn (Smart contracts)](https://docs.microsoft.com/it-it/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - jifunze kuhusu kuandika mikataba-erevu ukitumia Solidity +- [Microsoft Learn (dapps)](https://docs.microsoft.com/it-it/learn/modules/blockchain-create-ui-decentralized-apps/) - tengeneza kiolesura cha mtumiaji na mifumo uliotawanywa -### Kiispaniola {#es} +### Kijapani {#ja} -- [Ethereum Madrid](https://ethereummadrid.com/) - blockchain, DeFi, na kozi za utawala, matukio na blogi -- [Cointelegraph](https://es.cointelegraph.com/ethereum-for-beginners) - Muongozo wa Ethereum kwa wanaoanza katika lugha ya kihispaniola -- [ Mafunzo mtandaoni](https://tutoriales.online/curso/solidity) - jifunze solidity na usanidi programu juu ya Ethereum -- [ Utangulizi wa kozi za uundaji wa Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8y9pfUBjhkVa1IDMwyQz-fU) - Misingi ya Solidity, upimaji na usambazji wa mkataba erevu wa kwanza uliounda -- [Utangilizi wa usalama na uvamizi kwenye Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8yHOvteko_DmUxUTMHnlfci) - elewa wa udhaifu wa kawaida na mambo ya usalama kwenye mikataba erevu ilio halisi -- [Utangulizi wa kozo za uundaji wa DeFi](https://youtube.com/playlist?list=PLTqiwJDd_R8zZiP9_jNdaPqA3HqoW2lrS) - jifinze jinsi mikataba erevu ya DeFi inavyofanya kazi kwenye Solidity na unda programu ya kutengeneza masoko kiotomatiki +- [Chama cha Mabadilishano ya Mali za Mtandaoni na za Kripto cha Japani](https://jvcea.or.jp/) +- [Chama cha Biashara ya Mali za Kripto cha Japani](https://cryptocurrency-association.org/) +- [Anza na usanidi wa blockchain - Jifunze | Microsoft Docs](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - Njia hii ya kujifunza inakutambulisha kwa blockchain na usanidi kwenye jukwaa la Ethereum +- [Mastering Ethereum](https://www.oreilly.co.jp/books/9784873118963/) - Mastering Ethereum kwa Kijapani +- [Hands-On Smart Contract Development with Solidity and Ethereum](https://www.oreilly.co.jp/books/9784873119342/) - Usanidi wa Vitendo wa Mkataba-erevu kwa kutumia Solidity na Ethereum kwa Kijapani -### Kituruki {#tr} +### Kirusi {#ru} -- [BTk Akademi](https://www.btkakademi.gov.tr/portal/course/blokzincir-ve-kripto-paralar-10569#!/about) - kozi zinazojikita kwenye blockchain na sarafu ya kirpto -- [Ubadilishwaji mkuu wa jina: nini kilitokea juu ya Eth2?](https://miningturkiye.org/konu/ethereum-madenciligi-bitiyor-mu-onemli-gelisme.655/) - Fasiri ya kituruki ya chapisho la blogi, linaloelezea kuondoka kwa neno 'Eth2' +- [Cyber Academy](https://cyberacademy.dev) - nafasi ya kielimu kwa wajenzi wa web3 +- [Forklog](https://forklog.com) - habari na makala za kielimu kuhusu crypto kwa ujumla, teknolojia zilizopo na masasisho yajayo ya blockchain mbalimbali +- [BeInCrypto](https://ru.beincrypto.com) - habari, uchambuzi wa bei za crypto na makala zisizo za kiufundi zenye maelezo rahisi kuhusu kila kitu katika crypto -### Kivietinamu {#vi} +### Kihispania {#es} -- [Kundi la Tino](https://wiki.tino.org/ethereum-la-gi/) - muihstasari wa Ethereum, dApps, pochi na maulizo -- [Bonyeza Chi Bitcoin](https://tapchibitcoin.io/tap-chi/tin-tuc-ethereum-eth) - jukwaa la mtandaoni likiwa na kurasa ndogo za elimu na taarifa juu ya Ethereum -- [Coin68](https://coin68.com/ethereum-tieu-diem/) - lango la sarafu ya kripto likiwa na taarifa za Ethereum na maudhui ya kuelimisha +- [Ethereum Madrid](https://ethereummadrid.com/) - kozi za blockchain, DeFi, na utawala, matukio na blogi +- [Cointelegraph](https://es.cointelegraph.com/ethereum-for-beginners) - mwongozo wa Ethereum kwa wanaoanza kwa Kihispania +- [Tutoriales online](https://tutoriales.online/curso/solidity) - jifunze Solidity na upangaji programu kwenye Ethereum +- [Utangulizi wa Kozi ya Usanidi wa Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8y9pfUBjhkVa1IDMwyQz-fU) - misingi ya Solidity, majaribio na usambazaji wa mkataba wako wa kwanza wa erevu +- [Utangulizi wa Kozi ya Usalama na Udukuzi kwenye Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8yHOvteko_DmUxUTMHnlfci) - elewa udhaifu wa kawaida na masuala ya usalama katika mikataba-erevu halisi +- [Utangulizi wa Kozi ya Usanidi wa DeFi](https://youtube.com/playlist?list=PLTqiwJDd_R8zZiP9_jNdaPqA3HqoW2lrS) - jifunze jinsi mikataba-erevu ya DeFi inavyofanya kazi katika Solidity na uunde Muundaji wako wa Soko la Kiotomatiki +- [Cryptoversidad](https://www.youtube.com/c/Cryptoversidad) - Elimu isiyo ya kiufundi ya blockchain kutoka kwa anayeanza hadi wa juu. Jifunze kila kitu kuhusu crypto na Ethereum. -### Kijapani {#ja} +### Kituruki {#tr} + +- [BTK Akademi](https://www.btkakademi.gov.tr/portal/course/blokzincir-ve-kripto-paralar-10569#!/about) - kozi inayozingatia blockchain na sarafu ya kidigitali +- [Kubadilisha jina kuu: nini kilitokea kwa Eth2?](https://miningturkiye.org/konu/ethereum-madenciligi-bitiyor-mu-onemli-gelisme.655/) - Tafsiri ya Kituruki ya chapisho la blogu la kubadilisha jina kuu, ikielezea kuachana na istilahi ya 'Eth2' + +### Kivietinamu {#vi} -- [Muungano wa Masoko ya mtandaoni na mali za Kripto za Japani](https://jvcea.or.jp/) -- [Muungano wa Biashara za Kriptomali za Japani](https://cryptocurrency-association.org/) -- [Anza na uundaji wa programu za blockchain - Jifunze | Nyaraka za Microsoft](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - Njia hii ya kujifunza itakupa utangulizi wa minyororo na usimbuaji juu ya jukwaa la Ethereum -- [Kujiimarisha na Ethereum](https://www.oreilly.co.jp/books/9784873118963/) - Kujiimarisha na Ethereum kwa kijapani -- [Fanya kazi juu ya undaji wa mikataba erevu kwa Solidity na Ethereum](https://www.oreilly.co.jp/books/9784873119342/) - Fanya kazi juu ya undaji wa mikataba erevu kwa Solidity na Ethereum kwa kijapani +- [Tino Group](https://wiki.tino.org/ethereum-la-gi/) - muhtasari wa Ethereum, mfumo mtawanyo wa kimamlaka, mikoba na Maswali Yanayoulizwa Mara kwa Mara +- [Tap Chi Bitcoin](https://tapchibitcoin.io/tap-chi/tin-tuc-ethereum-eth) - jukwaa la wavuti lenye kurasa ndogo za habari na elimu ya Ethereum +- [Coin68](https://coin68.com/ethereum-tieu-diem/) - lango la sarafu ya kidigitali lenye habari za Ethereum na maudhui ya kielimu diff --git a/public/content/translations/sw/community/online/index.md b/public/content/translations/sw/community/online/index.md index 137326efcb6..0ddf50fdfaf 100644 --- a/public/content/translations/sw/community/online/index.md +++ b/public/content/translations/sw/community/online/index.md @@ -1,44 +1,52 @@ --- title: Jamii za mtandaoni -description: Orodha ya mipango ya ruzuku katika mazingira yote ya Ethereum. +description: Gundua majukwaa ya mtandaoni, vyumba vya mazungumzo, na jumuiya za mitandao ya kijamii ambapo wapenzi wa Ethereum hukusanyika kujadili na kushirikiana. lang: sw --- -# Jamii za mtandaoni {#online-communities} +# Jumuiya za mtandaoni {#online-communities} Mamia ya maelfu ya wapenzi wa Ethereum hukusanyika kwenye majukwaa haya ya mtandaoni kushiriki taarifa, kuongelea mabaoresho ya hivi karibuni, kujadili masuala ya kiufundi, na kufikiria masuala ya baadaye. -## Mikutano {#forums} +## Sera ya kuorodhesha {#listing-policy} -r/ethereum - mambo yote kuhusu -r/ethfinance - upande wa fedha kuhusu Ethereum, ikiwemo DeFi -r/ethdev - kulenga maboresho ya -r/ethtrader - mitindo na uchanganuzi wa soko -r/ethstaker - karibuni nyote mnaotaka kuweka hisa kwenye -Ushirika wa Ethereum Magicians - jamii iliyozama kwenye viwango vya kiufundi katika -Ethereum Stackexchange - majadiliano na usaidizi wa wasanidi programu wa -Utafiti wa Ethereum - bodi ya ujumbe yenye ushawishi mkubwa kuhusu utafiti wa uchumi wa kripto +Ili kudumisha uadilifu na thamani ya jumuiya zilizoorodheshwa, ethereum.org hufuata sera kali ya kuamua ustahiki: -## Vyumba vya gumzo {#chat-rooms} +### Vigezo vya kustahiki {#eligibility-criteria} -Ethereum Cat Herders - jamii iliyozama kutoa usaidizi wa usimamizi wa miradi kwa maboresho ya -Wadukuzi wa Ethereum - gumzo la Discord linaloendeshwa na ETHGlobal: jamii ya mtandaoni ya wadukuzi wa Ethereum kote duniani -CryptoDevs - Maboresho ya Ethereum yanalenga jamii ya Discord -EthStaker Discord - jamii iliyozama kutoa usaidizi wa usimamizi wa miradi kwa maboresho ya -Timu ya tovuti ya Ethereum.org - tembelea na upige gumzo kwenye maboresho ya wavuti wa ethereum.org na uunde na timu na watu kutoka katika jamii -Solidity Gitter - gumzo la maboresho ya solidity (Gitter) -Solidity Matrix - gumzo la maboresho ya solidity (Matrix) +- **Umuhimu**: Jumuiya lazima ihusiane moja kwa moja na Ethereum na mfumo wake wa ikolojia. +- **Kiwango cha shughuli**: Jumuiya inapaswa kuwa hai, kwa mwingiliano wa mara kwa mara, machapisho, au majadiliano. Jumuiya ambazo hazitumiki au zilizolala zinaweza kuondolewa. +- **Ujumuishi**: Jumuiya inapaswa kukuza mazingira ya kukaribisha yanayoheshimu utofauti na kuhimiza ushiriki kutoka kwa watu wa asili zote. +- **Lengo lisilo la kibiashara**: Orodha zimekusudiwa kwa nafasi zinazoendeshwa na jumuiya badala ya majukwaa ya kibiashara au ya utangazaji. -## YouTube na Twitter {#youtube-and-twitter} +### Miongozo ya maudhui {#content-guidelines} -Msingi wa Ethereum - Fahamu yanayojiri kutoka Msingi wa -@ethereum - Akaunti rasmi ya Msingi wa -@ethdotorg - Tovuti ya Ethereum, imeundwa kwa ajili ya kukuza jamii ya kimataifa -Orodha ya akaunti za twitter za Ethereum zenye ushawishi +- **Maudhui yanayofaa**: Jumuiya lazima ziwe na miongozo yao ya usimamizi, ikiepuka barua taka, matamshi ya chuki, unyanyasaji, au maudhui yoyote yanayokuza shughuli haramu. +- **Lugha**: Ingawa Kiingereza ndiyo lugha ya msingi, jumuiya katika lugha zingine zinahimizwa kuwasilisha mradi tu zinadumisha mazingira jumuishi na ya heshima. +- **Uwazi**: Taarifa zilizo wazi kuhusu madhumuni ya jumuiya, kanuni, na wasimamizi zinapaswa kupatikana kwa wanachama. + +### Mapendekezo mengine {#other-recommendations} + +- **Ufikivu**: Mabaraza ya jumuiya yanapaswa kufikiwa na kila mtu kusoma bila kuhitaji kujisajili. +- **Mialiko ya seva ya Discord**: Inapendekezwa kuwa mialiko ya kuaminika tu ya seva ya Discord iongezwe kwenye ethereum.org. Ikiwezekana, mialiko hii inapaswa kuunganishwa na ukurasa wa jumuiya kwenye tovuti (k.m., [ethglobal.com/discord](https://ethglobal.com/discord)) au kutoka kwa URL rasmi (k.m., [discord.gg/ethstaker](https://discord.gg/ethstaker) au [discord.com/invite/ethstaker](https://discord.com/invite/ethstaker)). + +Ikiwa unaamini jumuiya inapaswa kuongezwa au kuondolewa kulingana na miongozo hii, tafadhali [fungua hoja kwenye hazina yetu ya GitHub](https://github.com/ethereum/ethereum-org-website/issues). + +## Mabaraza {#forums} + +r/ethereum - mambo yote ya Ethereum r/ethfinance - upande wa kifedha wa Ethereum, ikiwemo DeFi r/ethdev - inalenga maendeleo ya Ethereum r/ethtrader - mitindo na uchambuzi wa soko r/ethstaker - karibu kwa wote wanaopenda kusimamisha kwenye Ethereum Fellowship of Ethereum Magicians - jumuiya inayolenga viwango vya kiufundi katika Ethereum Ethereum Stackexchange - majadiliano na msaada kwa wasanidi programu wa Ethereum Ethereum Research - ubao wa ujumbe wenye ushawishi mkubwa zaidi kwa utafiti wa kiuchumi-kripto + +## Vyumba vya mazungumzo {#chat-rooms} + +Ethereum Cat Herders - jumuiya inayolenga kutoa usaidizi wa usimamizi wa miradi kwa maendeleo ya Ethereum Ethereum Hackers - Soga ya Discord inayoendeshwa na ETHGlobal: jumuiya ya mtandaoni kwa ajili ya wahandisi wa Ethereum kote ulimwenguni CryptoDevs - Jumuiya ya Discord inayolenga maendeleo ya Ethereum EthStaker Discord - mwongozo unaoendeshwa na jumuiya, elimu, usaidizi, na rasilimali kwa wasimamishaji waliopo na wanaotarajiwa Ethereum.org website team - pita na uzungumze kuhusu maendeleo na usanifu wa wavuti wa ethereum.org na timu na watu kutoka kwa jumuiya Matos Discord - jumuiya ya wabunifu wa web3 ambapo wajenzi, watu mashuhuri wa viwanda, na wapenzi wa Ethereum hukutana. Tunapenda sana maendeleo, usanifu, na utamaduni wa web3. Njoo ujenge nasi. Solidity Gitter - soga kwa ajili ya maendeleo ya solidity (Gitter) Solidity Matrix - soga kwa ajili ya maendeleo ya solidity (Matrix) Ethereum Stack Exchange - jukwaa la maswali na majibu Peera Community Forum - jukwaa la maswali na majibu lililogatuliwa + +## YouTube na X (zamani Twitter) {#youtube-and-twitter} + +Ethereum Foundation - Pata taarifa za hivi punde kutoka kwa Msingi wa Ethereum @ethereum - Akaunti kuu ya Ethereum kwa jumuiya @ethereumfndn - Akaunti rasmi ya Msingi wa Ethereum @ethdotorg - Lango la Ethereum, lililojengwa kwa ajili ya jumuiya yetu inayokua ya kimataifa - +
Pata maelezo zaidi kuhusu DAO diff --git a/public/content/translations/sw/community/research/index.md b/public/content/translations/sw/community/research/index.md new file mode 100644 index 00000000000..0cffc5c6aa7 --- /dev/null +++ b/public/content/translations/sw/community/research/index.md @@ -0,0 +1,399 @@ +--- +title: Maeneo makuu ya utafiti hai kuhusu Ethereum +description: Uchunguzi wa maeneo tofauti ya utafiti huria na jinsi ya kushiriki +lang: sw +--- + +# Maeneo Yanayofanyiwa Utafiti katika Ethereum + +Moja ya nguvu za msingi za Ethereum ni kwamba jumuiya inayofanya kazi ya utafiti na uhandisi inaiboresha kila mara. Watu wengi wenye shauku na ujuzi ulimwenguni pote wangependa kujishughulisha na masuala bora ya Ethereum, lakini si rahisi kila wakati kujua masuala hayo ni nini. Ukurasa huu unaeleza kwa kifupi maeneo muhimu ya utafiti yanayofanyiwa kazi kwa bidii, yakitumika kama mwongozo wa kuelewa maendeleo ya kisasa na ya msingi ya mtandao wa Ethereum. + +## Jinsi ambavyo utafiti wa Ethereum unafanya kazi + +Utafiti wa Ethereum uko wazi na uko wazi, unaojumuisha kanuni za [Sayansi Iliyogatuliwa (DeSci)](https://hackernoon.com/desci-decentralized-science-as-our-chance-to-recover-the-real-science). Utamaduni ni kufanya zana za utafiti na matokeo kuwa wazi na shirikishi iwezekanavyo, kwa mfano, kupitia daftari zinazoweza kutekelezeka. Utafiti wa Ethereum unaendelea haraka, matokeo mapya yamechapishwa na kujadiliwa hadharani kwenye mijadala kama vile [ethresear.ch](https://ethresear.ch/) badala ya kufikia jumuiya kupitia machapisho ya kitamaduni baada ya duru za ukaguzi wa marika. + +## Rasilimali za Jumla za Utafiti + +Bila kujali mada mahususi, kuna habari nyingi kuhusu utafiti wa Ethereum zinazoweza kupatikana katika [ethresear.ch](https://ethresear.ch) na [kituo cha Eth R&D Discord](https://discord.gg/qGpsxSA). Haya ndiyo maeneo ya msingi ambapo watafiti wa Ethereum wanajadili mawazo ya hivi punde na fursa za maendeleo. + +Ripoti hii iliyochapishwa Mei 2022 na [DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) inatoa muhtasari mzuri wa mpango wa utekelezaji wa Ethereum. + +## Vyanzo vya Ufadhili + +Jinsi ya kuhusika katika utafiti wa Ethereun na kulipwa kwa sababu yake Kwa mfano, [Wakfu wa Ethereum](/foundation/) uliendesha hivi majuzi [raundi ya ufadhili wa Ruzuku za Masomo](https://esp.ethereum.foundation/academic-grants). You can find information on active and upcoming funding opportunities on [the Ethereum grants page](/community/grants/). + +## Utafiti wa Itifaki + +Utafiti wa itifaki unahusika na safu ya msingi ya Ethereum - seti ya sheria zinazofafanua jinsi nodes zinavyounganisha, kuwasiliana, kubadilishana na kuhifadhi data ya Ethereum na kuja kwa makubaliano kuhusu hali ya kiambajengo. Utafiti wa itifaki hugawanywa katika kategoria mbili za kiwango cha juu: makubaliano na utekelezaji. + +### Makubaliano + +Utafiti wa makubaliano unahusika na [utaratibu wa uthibitisho wa hisa wa Ethereum](/developers/docs/conssensus-mechanisms/pos/). Baadhi ya Mifano ya Mada za Utafiti wa Makubaliano + +- Kutambua na Kufunga Mianya +- Kukadiria Kiasi cha Usalama wa Uchumi wa Kripto +- Kuongeza Usalama au Utendakazi wa Utekelezaji wa Wateja +- na Kuendeleza Wateja Wepesi + +Pamoja na utafiti wa kuangalia mbele, baadhi ya marekebisho ya kimsingi ya itifaki, kama vile mwisho wa nafasi moja, yanafanyiwa utafiti ili kuruhusu maboresho makubwa kwa Ethereum. Zaidi ya hayo, ufanisi, usalama, na ufuatiliaji wa mitandao ya rika-kwa-rika kati ya wateja wa makubaliano pia ni mada muhimu za utafiti. + +#### Vifaa vya Kusoma vya Msingi + +- Utangulizi wa Uthibitisho wa Rehani +- Hati ya Utafiti ya Casper +- [Maelezo ya Casper-FFG](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) +- Hati ya Utafiti ya Gasper + +#### Utafiti wa hivi karibuni + +- Makubaliano ya Ethresear.ch +- Mzozo wa Upatikanaji dhidi ya Uthibitisho wa Mwisho +- [Mwisho wa nafasi moja](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) +- Mgawanyo wa Mtengenezaji na Mpendekezaji + +### Utekelezaji + +[Mwisho wa nafasi moja](https://ethresear. ch/t/a-model-for-cumulative-committee-based-finality/10259). Kuna Maeneo Mengi ya Utafiti Inayoendelea, Ikiwa Ni Pamoja Na: + +- Kujenga na Kuimarisha Usaidizi wa Wateja Wepesi +- Utafiti wa Viwango vya Gas +- na kujumuisha miundo mipya ya data (k.m., Verkle Tries). + +#### Vifaa vya Kusoma vya Msingi/Marejeleo + +- Utangulizi wa Mashine Halisi ya Ethereum +- Makubaliano ya Ethresear.ch: Tabaka la Utekelezaji + +#### Utafiti wa Hivi Karibuni + +- [Uboreshaji wa hifadhidata](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) +- Mwisho wa Muda wa Hali ya Mtandao +- Njia za Kufikia Mwisho wa Muda wa Hali ya Mtandao +- [Pendekezo la mwisho wa matumizi na hali](https://notes.ethereum.org/@vbuterin/verkle_and_state_expiry_proposal) +- Usimamizi wa Historia ya Mtandao +- Miti ya Verkle +- [Sampuli ya upatikanaji wa data](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) + +## Uendelezaji wa Wateja + +Wateja wa Ethereum ni Utekelezaji wa Itifaki ya Ethereum Ukuzaji wa mteja hufanya matokeo kutoka kwa utafiti wa itifaki kuwa ukweli kwa kuwajenga kuwa wateja hawa. Ukuzaji wa mteja ni pamoja na kusasisha vipimo vya mteja na pia kujenga utekelezaji maalum. + +Kituo cha Ethereum Kinahitajika Kuendesha Programu Mbili + +1. Programu ya Mteja wa Makubaliano +2. Programu ya Mteja wa Utekelezaji + +Marejeo: Kurasa za Vituo na Wateja Unaweza pia kupata historia ya masasisho yote ya Ethereum kwenye [ukurasa wa historia](/ethereum-forks/). + +### Programu ya utekelezaji + +- Programu za Wateja wa Utekelezaji +- Uainishaji wa API ya Utekelezaji + +### Programu za Wateja wa Makubaliano + +- Uainishaji wa Programu za Wateja wa Makubaliano +- Uainishaji wa API ya Beacon + +## Uongezaji na utendaji {#scaling-and-performance} + +Kuongeza Ethereum ni eneo kubwa la utafiti kwa watafiti wa Ethereum. Mbinu za sasa ni pamoja na upakiaji wa miamala kwenye matoleo na kuyafanya kuwa ya bei nafuu iwezekanavyo kwa kutumia matone ya data. Maelezo ya utangulizi kuhusu kuongeza viwango vya Ethereum yanapatikana kwenye [ukurasa wa kuongeza](/developers/docs/scaling). + +### Safu ya 2 {#layer-2} + +Sasa kuna itifaki kadhaa za Tabaka 2 ambazo huweka kiwango cha Ethereum kwa kutumia mbinu tofauti za kuunganisha shughuli na kuziweka kwenye safu ya 1 ya Ethereum. Hili ni jambo linalokua kwa kasi sana lenye utafiti mwingi na uwezo wa maendeleo. + +#### Usomaji wa ziada {#background-reading-2} + +- [Utangulizi wa safu ya 2](/layer-2/) +- [Polynya: Rollups, DA na minyororo ya kawaida](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) + +#### Utafiti wa hivi karibuni {#recent-research-2} + +- [Upangaji-sawa wa Arbitrum kwa waratibu wa mfuatano](https://eprint.iacr.org/2021/1465) +- [Ethresear.ch Safu ya 2](https://ethresear.ch/c/layer-2/32) +- [Ramani inayolenga Rollup](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) +- [L2Beat](https://l2beat.com/) + +### Madaraja {#bridges} + +Eneo moja mahususi la safu ya 2 ambalo linahitaji utafiti na maendeleo zaidi ni madaraja salama na yenye utendaji. Hii inajumuisha madaraja kati ya Safu za 2 mbalimbali na madaraja kati ya Safu ya 1 na Safu ya 2. Hili ni eneo muhimu sana la utafiti kwa sababu madaraja hulengwa mara kwa mara na wadukuzi. + +#### Usomaji wa ziada {#background-reading-3} + +- [Utangulizi wa madaraja ya blockchain](/bridges/) +- [Vitalik kwenye madaraja](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) +- [Makala ya madaraja ya Blockchain](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) +- [Thamani iliyofungwa kwenye madaraja](https://dune.com/eliasimos/Bridge-Away-\(from-Ethereum\)) + +#### Utafiti wa hivi karibuni {#recent-research-3} + +- [Kuhalalisha madaraja](https://stonecoldpat.github.io/images/validatingbridges.pdf) + +### Ugawanyaji {#sharding} + +Kugawa blockchain ya Ethereum kwa muda mrefu imekuwa sehemu ya ramani ya maendeleo. Hata hivyo, suluhisho jipya za uongezaji kama vile "Danksharding" kwa sasa zinachukua nafasi kuu. + +Mtangulizi wa Dankharding kamili inayojulikana kama Proto-Dankharding ilipatikana na uboreshaji wa mtandao wa Cancun-Deneb ("Dencun"). + +[Zaidi kuhusu sasisho la Dencun](/roadmap/dencun/) + +#### Usomaji wa ziada {#background-reading-4} + +- [Maelezo ya Proto-Danksharding](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) +- [Video ya Bankless kuhusu Danksharding](https://www.youtube.com/watch?v=N5p0TB77flM) +- [Muhtasari wa Utafiti wa Ugawanyaji wa Ethereum](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) +- [Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) + +#### Utafiti wa hivi karibuni {#recent-research-4} + +- [EIP-4844: Proto-Danksharding](https://eips.ethereum.org/EIPS/eip-4844) +- [Vitalik kuhusu ugawanyaji na sampuli za upatikanaji wa data](https://hackmd.io/@vbuterin/sharding_proposal) + +### Vifaa {#hardware} + +[nodes zinazoendeshwa] /developers/docs/nodes-and-clients/run-a-node/kwenye vifaa vya kompyuta vya wastani ni muhimu kuweka mfumo mtawanyo wa kawaida wa Ethereum. Kwa hivyo, utafiti unaofanya kazi katika kupunguza mahitaji ya vifaa vya kuendesha nodi ni eneo muhimu la utafiti. + +#### Usomaji wa ziada {#background-reading-5} + +- [Ethereum kwenye ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) + +#### Utafiti wa hivi karibuni {#recent-research-5} + +- [ecdsa kwenye FPGAs](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) + +## Usalama {#security} + +Usalama ni mada pana ambayo inaweza kujumuisha uzuiaji wa barua taka/udanganyifu, usalama wa mkoba, usalama wa vifaa, usalama wa uchumi wasarafu ya kidigitali, ufuatiliaji wa hitilafu na majaribio ya programu na programu za mteja na usimamizi wa ufunguo. Kuchangia maarifa katika maeneo haya kutasaidia kuchochea utumiaji mkuu. + +### Kriptografia na ZKP {#cryptography--zkp} + +Uthibitisho wa Zero-knowledge (ZKP) na kriptografia ni muhimu kwa kujenga faragha na usalama katika Ethereum na matumizi yake. Zero-knowledge ni nafasi changa lakini inayosonga Kasi na fursa nyingi za utafiti na maendeleo zilizo wazi. Baadhi ya uwezekano ni pamoja na kuendeleza utekelezaji bora zaidi wa [algorithm ya Keccak hashing](https://hackmd.io/sK7v0lr8Txi1bgION1rRpw?view#overview), kupata ahadi bora zaidi za polynomial kuliko zilizopo sasa au kupunguza gharama ya kutengeneza ufunguo wa umma wa ecdsa na sakiti za uthibitishaji wa sahihi. + +#### Usomaji wa ziada {#background-reading-6} + +- [blogu ya 0xparc](https://0xparc.org/blog) +- [zkp.science](https://zkp.science/) +- [Podikasti ya Zero-Knowledge](https://zeroknowledge.fm/) + +#### Utafiti wa hivi karibuni {#recent-research-6} + +- [Maendeleo ya hivi karibuni katika kriptografia ya mkunjo wa duaradufu](https://ethresear.ch/t/the-ec-fft-algorithm-without-elliptic-curve-and-isogenies/11346) +- [Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) + +### Pochi {#wallets} + +Pochi za Ethereum zinaweza kuwa viendelezi vya kivinjari, programu za kompyuta na simu au mikataba-erevu kwenye Ethereum. Kuna utafiti unaoendelea kuhusu pochi za urejeshaji za kijamii ambazo hupunguza baadhi ya hatari zinazohusiana na usimamizi wa ufunguo wa mtumiaji binafsi. Kuhusishwa na maendeleo ya mikoba ni utafiti wa aina ya kitofauti ya uondoaji wa akaunti, ambayo ni eneo muhimu la utafiti mchanga. + +#### Usomaji wa ziada {#background-reading-7} + +- [Utangulizi wa pochi](/wallets/) +- [Utangulizi wa usalama wa pochi](/security/) +- [Usalama wa Ethresear.ch](https://ethresear.ch/tag/security) +- [Uondoaji wa Akaunti wa EIP-2938](https://eips.ethereum.org/EIPS/eip-2938) +- [Uondoaji wa Akaunti wa EIP-4337](https://eips.ethereum.org/EIPS/eip-4337) + +#### Utafiti wa hivi karibuni {#recent-research-7} + +- [mkoba wa mikataba mahiri zinazozingatia uhalali](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [Mustakabali wa akaunti](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [Opcodes za EIP-3074 AUTH na AUTHCALL](https://eips.ethereum.org/EIPS/eip-3074) +- [Kuchapisha msimbo kwenye anwani ya EOA](https://eips.ethereum.org/EIPS/eip-5003) + +## Jamii, elimu na uhamasishaji {#community-education-and-outreach} + +Kuingiza watumiaji wapya kwenye Ethereum kunahitaji nyenzo mpya za elimu na mbinu za kuwafikia. Hii inaweza kujumuisha machapisho na makala za blogu, vitabu, podikasti, meme, rasilimali za kufundishia, matukio na kitu kingine chochote ambacho hujenga jumuiya, kukaribisha wanaoanzisha wapya na kuelimisha watu kuhusu Ethereum. + +### UX/UI {#uxui} + +Ili kuwaleta watu wengi zaidi kwenye Ethereum, mfumo ikolojia lazima uboreshe UX/UI. Hii itahitaji wabunifu na wataalam wa bidhaa kuchunguza upya muundo wa pochi na programu. + +#### Usomaji wa ziada {#background-reading-8} + +- [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) + +#### Utafiti wa hivi karibuni {#recent-research-8} + +- [Discord ya Ubunifu wa Web3](https://discord.gg/FsCFPMTSm9) +- [Kanuni za Ubunifu wa Web3](https://www.web3designprinciples.com/) +- [Majadiliano ya UX ya Ethereum Magicians](https://ethereum-magicians.org/t/og-council-ux-follow-up/9032/3) + +### Uchumi {#economics} + +Utafiti wa uchumi katika Ethereum kwa upana hufuata mbinu mbili: kuthibitisha usalama wa taratibu zinazotegemea motisha za kiuchumi na kuchambua mtiririko wa thamani kati ya itifaki, maombi na watumiaji. Kuna mambo changamano ya kiuchumi ya sarafu ya kidigitali zinayohusiana na mali asili ya Ethereum (etha) na ishara zilizojengwa juu yake (kwa mfano NFTs na tokeni za ERC20). + +#### Usomaji wa ziada {#background-reading-9} + +- [Kikundi cha Motisha Imara](https://rig.ethereum.org/) +- [Warsha ya ETHconomics katika Devconnect](https://www.youtube.com/playlist?list=PLTLjFJ0OQOj5PHRvA2snoOKt2udVsyXEm) + +#### Utafiti wa hivi karibuni {#recent-research-9} + +- [Uchambuzi wa kimajaribio wa EIP1559](https://arxiv.org/abs/2201.05574) +- [usawa katika usambazaji wa mzunguko](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954) +- [Kupima MEV: Je, msitu una giza kiasi gani?](https://arxiv.org/abs/2101.05511) + +### Nafasi ya bloku na masoko ya ada {#blockspace-fee-markets} + +Masoko ya blockspace husimamia ujumuishaji wa shughuli za watumiaji wa mwisho, ama moja kwa moja kwenye Ethereum (Safu ya 1) au kwenye mitandao iliyounganishwa, kwa mfano, mkusanyo(Safu ya 2). Kwenye Ethereum, miamala huwasilishwa kwa soko la ada lililowekwa katika itifaki kama EIP-1559, kulinda msururu dhidi ya barua taka na msongamano wa bei. Katika tabaka zote mbili, miamala inaweza kuzalisha bidhaa za nje, zinazojulikana kama Thamani ya Juu Inayoweza Kuchimbwa (MEV), ambayo hushawishi miundo mipya ya soko kunasa au kudhibiti bidhaa hizi za nje. + +#### Usomaji wa ziada {#background-reading-10} + +- [Muundo wa Utaratibu wa Ada ya Muamala wa Ethereum kiambajengo: Uchambuzi wa Kiuchumi wa EIP-1559 (Tim Roughgarden, 2020)](https://timroughgarden.org/papers/eip1559.pdf) +- [Uigaji wa EIP-1559 (Kikundi cha Motisha Imara)](https://ethereum.github.io/abm1559) +- [Ongeza uchumi kutoka kanuni za kwanza](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) +- [Flash Boys 2.0: Uendeshaji Mbele, Upangaji Upya wa Muamala, na Kukosekana kwa Uthabiti wa Makubaliano katika Ubadilishanaji Madaraka](https://arxiv.org/abs/1904.05234) + +#### Utafiti wa hivi karibuni {#recent-research-10} + +- [Wasilisho la video la EIP-1559 lenye sura nyingi](https://youtu.be/QbR4MTgnCko) +- [MEV ya vikoa tofauti](http://arxiv.org/abs/2112.01472) +- [Minada ya MEV](https://ethresear.ch/t/mev-auction-auctioning-transaction-ordering-rights-as-a-solution-to-miner-extractable-value/6788) + +### Motisha ya Proof-of-stake {#proof-of-stake-incentives} + +Wathibitishaji hutumia mali asili ya Ethereum (ether) kama dhamana dhidi ya tabia isiyo ya uaminifu. Uchumi wa kripto wa hili huamua usalama wa mtandao. Wathibitishaji wa hali ya juu wanaweza kutumia nuances ya safu ya motisha ili kuzindua mashambulizi ya wazi. + +#### Usomaji wa ziada {#background-reading-11} + +- [Kielelezo kikuu cha uchumi na uchumi wa Ethereum](https://github.com/CADLabs/ethereum-economic-model) +- [Uigaji wa motisha za PoS (Kikundi cha Motisha Imara)](https://ethereum.github.io/beaconrunner/) + +#### Utafiti wa hivi karibuni {#recent-research-11} + +- [Kuongezeka kwa upinzani wa udhibiti wa shughuli chini ya utenganisho wa mapendekezo/wajenzi (PBS)](https://notes.ethereum.org/s3JToeApTx6CKLJt8AbhFQ) +- [Mashambulizi Matatu kwenye PoS ya Ethereum](https://arxiv.org/abs/2110.10086) + +### Kusimamisha kioevu na derivatives {#liquid-staking-and-derivatives} + +Uwekaji hisa wa kioevu huruhusu watumiaji walio na chini ya 32 ETH kupokea mavuno mengi kwa kubadilishana ether kwa tokeni inayowakilisha ether iliyowekwa kwenye sehemu ambayo inaweza kutumika katika DeFi. Hata hivyo, motisha na mienendo ya soko inayohusiana na kusimamisha kioevu bado inagunduliwa, pamoja na athari zake kwa usalama wa Ethereum (k.m., hatari za uwekaji kati). + +#### Usomaji wa ziada {#background-reading-12} + +- [Ethresear.ch kusimamisha kioevu](https://ethresear.ch/search?q=liquid%20staking) +- [Lido: njia isiyosahihi ya uwekaji dhamana za Ethereum](https://blog.lido.fi/the-road-to-trustless-ethereum-staking/) +- [Roketi Pool: Utangulizi wa itifaki ya uwekaji dhamana](https://medium.com/rocket-pool/rocket-pool-staking-protocol-part-1-8be4859e5fbd) + +#### Utafiti wa hivi karibuni {#recent-research-12} + +- [Kushughulikia uondoaji kutoka kwa Lido](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-staking-protocol/8873) +- [Kitambulisho cha kujiondoa](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) +- [Hatari za Derivatives za Kusimamisha Kioevu](https://notes.ethereum.org/@djrtwo/risks-of-lsd) + +## Kujaribu {#testing} + +### Uthibitishaji rasmi {#formal-verification} + +Uthibitishaji rasmi ni kuandika msimbo ili kuthibitisha kwamba vipimo vya makubaliano ya Ethereum ni sahihi na hayana hitilafu. Kuna toleo linaloweza kutekelezwa la vipimo vilivyoandikwa katika Python ambalo linahitaji matengenezo na maendeleo. Utafiti zaidi unaweza kusaidia kuboresha utekelezaji wa Python wa vipimo na kuongeza zana ambazo zinaweza kuthibitisha usahihi zaidi na kutambua masuala. + +#### Usomaji wa ziada {#background-reading-13} + +- [Utangulizi wa uthibitishaji rasmi](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) +- [Uthibitishaji Rasmi (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) + +#### Utafiti wa hivi karibuni {#recent-research-13} + +- [Uthibitishaji rasmi wa mkataba wa amana](https://github.com/runtimeverification/deposit-contract-verification) +- [Uthibitishaji rasmi wa mnyororo wa Beacon](https://github.com/runtimeverification/deposit-contract-verification) + +## Sayansi ya data na uchanganuzi {#data-science-and-analytics} + +Kuna haja ya zana zaidi za uchambuzi wa data na dashibodi zinazotoa maelezo ya kina kuhusu shughuli kwenye Ethereum na afya ya mtandao. + +### Usomaji wa ziada {#background-reading-14} + +- [Dune Analytics](https://dune.com/browse/dashboards) +- [Dashibodi ya utofauti wa wateja](https://clientdiversity.org/) + +#### Utafiti wa hivi karibuni {#recent-research-14} + +- [Uchanganuzi wa Data wa Kikundi cha Motisha Imara](https://rig.ethereum.org/) + +## Programu na zana {#apps-and-tooling} + +Safu ya maombi inasaidia mfumo wa ikolojia tofauti wa programu ambazo hutatua shughuli kwenye safu ya msingi ya Ethereum. Timu za maendeleo zinatafuta kila mara njia mpya za kutumia Ethereum ili kuunda matoleo yanayotungwa, yasiyoruhusiwa na yanayostahimili udhibiti ya programu muhimu za Web2 au kuunda dhana mpya kabisa za asili ya Web3. Wakati huo huo, zana mpya inatengenezwa ambayo inafanya dapps za ujenzi kwenye Ethereum kuwa ngumu zaidi. + +### DeFi {#defi} + +Fedha za kidijitali zisizo na mfumo mtawanyo (DeFi) ni mojawapo ya makundi makuu ya programu zilizojengwa juu ya Ethereum.Let me know if you need anything else. DeFi inalenga kuunda "legos za pesa" zinazoweza kutumika ambazo huruhusu watumiaji kuhifadhi, kuhamisha, kukopesha, kukopa na kuwekeza mali za sarafu ya Kidigitali kwa kutumia mikataba mahiri. DeFi ni nafasi inayoenda kwa kasi ambayo inasasishwa kila mara. Utafiti kuhusu itifaki salama, zenye ufanisi na zinazopatikana unahitajika kila mara. + +#### Usomaji wa ziada {#background-reading-15} + +- [DeFi](/defi/) +- [Coinbase: DeFi ni nini?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) + +#### Utafiti wa hivi karibuni {#recent-research-15} + +- [Fedha zilizogatuliwa, umiliki wa kati?](https://arxiv.org/pdf/2012.09306.pdf) +- [Matumaini: Njia ya kufikia miamala ya dola ndogo](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) + +### DAO {#daos} + +Kesi ya matumizi yenye athari kwa Ethereum ni uwezo wa kupanga kwa njia iliyotawanywa kupitia matumizi ya DAO. Kuna utafiti mwingi unaoendelea kuhusu jinsi DAOs kwenye Ethereum zinavyoweza kutayarishwa na kutumika kutekeleza aina zilizoboreshwa za utawala, kama zana ya uratibu iliyopunguzwa uaminifu, inayopanua sana chaguo za watu zaidi ya mashirika na mashirika ya kitamaduni. + +#### Usomaji wa ziada {#background-reading-16} + +- [Utangulizi wa DAO](/dao/) +- [Dao Collective](https://daocollective.xyz/) + +#### Utafiti wa hivi karibuni {#recent-research-16} + +- [Kuweka ramani ya mfumo ikolojia wa DAO](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) + +### Zana za wasanidi programu {#developer-tools} + +Zana za wasanidi programu wa Ethereum zinaboreshwa kwa kasi. Kuna utafiti mwingi na maendeleo yanayoendelea katika eneo hili kwa ujumla. + +#### Usomaji wa ziada {#background-reading-17} + +- [Zana kulingana na lugha ya programu](/developers/docs/programming-languages/) +- [Mifumo ya Wasanidi Programu](/developers/docs/frameworks/) +- [Orodha ya zana za wasanidi programu za makubaliano](https://github.com/ConsenSys/ethereum-developer-tools-list) +- [Viwango vya tokeni](/developers/docs/standards/tokens/) +- [CryptoDevHub: Zana za EVM](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) + +#### Utafiti wa hivi karibuni {#recent-research-17} + +- [Kituo cha Vifaa vya Eth R&D Discord Consensus](https://discordapp.com/channels/595666850260713488/746343380900118528) + +### Oracle {#oracles} + +Oracle huleta data ya nje ya mnyororo kwenye blockchain kwa njia isiyo na ruhusa na iliyogatuliwa. Kupata data hii kwenye mnyororo huwezesha dapps kuwa tendaji kwa matukio ya ulimwengu halisi kama vile kushuka kwa bei katika mali ya ulimwengu halisi, matukio katika programu za nje ya mtandao, au hata mabadiliko ya hali ya hewa. + +#### Usomaji wa ziada {#background-reading-18} + +- [Utangulizi wa Oracle](/developers/docs/oracles/) + +#### Utafiti wa hivi karibuni {#recent-research-18} + +- [Utafiti wa oracle za blockchain](https://arxiv.org/pdf/2004.07140.pdf) +- [Waraka mweupe wa Chainlink](https://chain.link/whitepaper) + +### Usalama wa programu {#app-security} + +Udukuzi kwenye Ethereum kwa ujumla hutumia udhaifu katika programu binafsi badala ya kwenye itifaki yenyewe. Wadukuzi na wasanidi programu wamefungwa katika mbio za silaha ili kuendeleza mashambulizi na ulinzi mpya. Hii inamaanisha kuwa kuna utafiti na maendeleo muhimu kila wakati ili kuweka programu salama dhidi ya udukuzi. + +#### Usomaji wa ziada {#background-reading-19} + +- [Ripoti ya unyonyaji wa Wormhole](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) +- Orodha ya matukio ya udukuzi wa kandarasi ya Ethereum](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) +- [Rekt News](https://x.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) + +#### Utafiti wa hivi karibuni {#recent-research-19} + +- [Programu za Ethresear.ch](https://ethresear.ch/c/applications/18) + +### Rundo la teknolojia {#technology-stack} + +Kugatua rundo zima la teknolojia ya Ethereum ni eneo muhimu la utafiti. Kwa sasa, dapps kwenye Ethereum kwa kawaida huwa na sehemu fulani za uwekaji kati kwa sababu zinategemea zana za kati au miundombinu. + +#### Usomaji wa ziada {#background-reading-20} + +- [Rundo la Ethereum](/developers/docs/ethereum-stack/) +- [Coinbase: utangulizi wa Web3 Stack](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) +- [Utangulizi wa mikataba-erevu](/developers/docs/smart-contracts/) +- [Utangulizi wa hifadhi ya ugatuzi](/developers/docs/storage/) + +#### Utafiti wa hivi karibuni {#recent-research-20} + +- [Utungamanifu wa mkataba-erevu](/developers/docs/smart-contracts/composability/) diff --git a/public/content/translations/sw/community/support/index.md b/public/content/translations/sw/community/support/index.md index de54ff3978a..cc7c8aaab24 100644 --- a/public/content/translations/sw/community/support/index.md +++ b/public/content/translations/sw/community/support/index.md @@ -4,45 +4,63 @@ description: Pata msaada kwenye ikolojia ya Ethereum. lang: sw --- -# Msaada wa Ethereum {#support} +# Usaidizi wa Ethereum {#support} -## Msaada rasmi wa Ethereum {#official-support} +## Usaidizi Rasmi wa Ethereum {#official-support} Je, unatafuta msaada rasmi wa Ethereum? Cha kwanza unachopaswa kujua ni kua Ethereum imegatuliwa. Hii inamaana hamna mashirika ya kati ama ya kiserikali, chombo, ama mtu anayemiliki Ethereum, na kwasababu hio, hakunana chaneli ya kutoa msaada ilio rasmi. -Ufahamu wa asili ya ugatuzi wa Ethereum ni muhimu kwa kila mmoja maana yeyote anayedai kua mtu anaeweza kutoa msaada kuhusu Ethereum anaweza kukulaghai! Ulinzi thabiti dhidi ya walaghai na kujifunza na kua makini na ulinzi. +Kuelewa hali ya ugatuzi ya Ethereum ni muhimu kwa sababu **mtu yeyote anayedai kuwa msaada rasmi wa Ethereum pengine anajaribu kukutapeli!** Njia bora ya kujilinda dhidi ya matapeli ni kujielimisha na kuchukua usalama kwa uzito. - Usalama wa Ethereum na udhibiti wa matapeli + Usalama wa Ethereum na kuzuia utapeli - Jifunze mambo ya msingi ya Ethereum + Jifunze misingi ya Ethereum -Licha ya upungufu wa uungaji mkono, makundi mengi, jumuiya na mirandi ndani ya ikolojia ya Ethereum wanafurahi kuunga mkono, na unaweza kupata taarifa muhimu na vyanzo kwenye ukurasa huu. Bado unamswali? Jiunge na [Discord ya ethereum.org](https://discord.gg/ethereum-org), na tutajaribu kukusaidia. +Licha ya upungufu wa uungaji mkono, makundi mengi, jumuiya na mirandi ndani ya ikolojia ya Ethereum wanafurahi kuunga mkono, na unaweza kupata taarifa muhimu na vyanzo kwenye ukurasa huu. Bado unamswali? Jiunge na [ethereum.org Discord](https://discord.gg/ethereum-org), na tutajaribu kukusaidia. -## Huduma za pochi {#wallet-support} +## Maswali yanayoulizwa mara kwa mara {#faq} -Je unapata shida na pochi yako? Pochi nyingi zina timu inayojiyuma inayoweza kukusaidia: +### Nimetuma ETH kwenye mkoba usio sahihi {#wrong-wallet} -- [MetaMask](https://metamask.zendesk.com/hc/) -- [Argent](https://support.argent.xyz/hc/) -- [MyEtherWallet](https://help.myetherwallet.com/) +Muamala unaofanyika kwenye Ethereum hauwezi kurudishwa ulikotoka. Kwa bahati mbaya, kama umetuma ETH kwenye pochi isiyo sahihi, hamna njia ya kupata fedha hizo. Hakuna shirika la kati, chombo ama mtu mmoja anaemiliki Ethereum, kwa maana kwamba hamna anaeweza kurudisha muamala ulikwishafanyika. Kwahiyo, ni muhimu kukagua mara kadhaa kama anauani ya pochi unayoingiza iko sahihi kabala ya kufanya muamala. -_Hii sio orodha kamili. Unahitaji msaada kupata huduma juu ya pochi maalum? Jiunge na [ discord ya ethereum.org](https://discord.gg/ethereum-org) na tutajaribu kusaidia._ +### Nawezaje kudai zawadi yangu ya Ethereum? {#giveaway-scam} + +Zawadi za Ethereum ni mitego/ulaghai unaobuniwa ili kuiba ETH zako. Usishawishike na huduma inayotanganzwa inayoonekana kua ya uwongo - ukiotuma ETH kwenye anwani ya zawadi, hautapokea zawadi, na hautaweza kupata fedha ulizotuma mwanzo. + +[Zaidi kuhusu kuzuia utapeli](/security/#common-scams) + +### Muamala wangu umekwama {#stuck-transaction} + +Wakati mwingine miamala hugita kwenye Ethereum kama umetoa kiwango kidogo cha malipo ya muamala kuliko kile kinachohitajika kwenye mtandao. Pochi nyingi hutoa chaguo la kutuma tena muamala huo huo kwa bei ya juu zaidi ili muamala ufanyiwe mchakato. Kwa njia mbadala unaweza kughairi muamala usio kamili kwa kutuma fedha hizo kwenye anwani yako mwenyewe, na kutumia nonce sawa na ya muamala ambao haujakamlika. -Unatafuta pochi ya Ethereum? [Chunguza orodha yetu yote ya Ethereum](/wallets/find-wallet/). +[Jinsi ya kuharakisha au kughairi muamala unaosubiri kwenye MetaMask](https://metamask.zendesk.com/hc/en-us/articles/360015489251-How-to-speed-up-or-cancel-a-pending-transaction) -## Jenga dapps {#building-support} +[Jinsi ya kughairi miamala inayosubiri ya Ethereum](https://info.etherscan.com/how-to-cancel-ethereum-pending-transactions/) + +### Nawezaje kuchimba Ethereum? {#mining-ethereum} + +Uchimbaji wa Ethereum hauwezekani tena. Uchimbaji ulizimwa wakati Ethereum ilipohama kutoka kwa [uthibitisho-wa-kazi](/glossary/#pow) kwenda kwa [uthibitisho-wa-dau](/glossary/#pos). Sasa, badala ya wachimbaji, Ethereum ina wathibitishaji. Mtu yeyote anaweza [kuweka dau](/glossary/#staking) ETH na kupokea zawadi za uwekaji dau kwa kuendesha programu ya mthibitishaji ili kulinda mtandao. + +### Ninawezaje kuwa mweka dau / kuendesha mthibitishaji? {#how-to-stake} + +Ili kuwa mthibitishaji, lazima uweke dau la ETH 32 katika mkataba wa amana wa Ethereum na uanzishe nodi ya mthibitishaji. Taarifa zaidi inapatikana kwenye [kurasa zetu za uwekaji dau](/staking) na kwenye [launchpad ya uwekaji dau](https://launchpad.ethereum.org/). + +## Ujenzi wa mfumo mtawanyo wa kimamlaka {#building-support} Ujenzi unaweza kua mgumu. Haya ni majukwaa yaliojikita kwenye uendelezaji ukiwa na wasanidi programu waliobobea wenye furaha kukuasaidia. -- [Discord ya CryptoDevs](https://discord.gg/Z9TA39m8Yu) -- [StackExchange ya Ethereum](https://ethereum.stackexchange.com/) -- [Chuo cha Web3](https://www.web3.university/) +- [Alchemy University](https://university.alchemy.com/#starter_code) +- [CryptoDevs discord](https://discord.com/invite/5W5tVb3) +- [Ethereum StackExchange](https://ethereum.stackexchange.com/) +- [Web3 University](https://www.web3.university/) +- [LearnWeb3](https://discord.com/invite/learnweb3) -Unaweza kupata nyarak na miongozo ya usanidi kwenye kipengele cha [vyanzo vya msanidi programu wa Ethereum](/developers/). +Unaweza pia kupata nyaraka na miongozo ya uendelezaji katika sehemu yetu ya [rasilimali za wasanidi wa Ethereum](/developers/). ### Zana {#dapp-tooling} @@ -50,58 +68,37 @@ Je swali lako linahusiana na chimbo fulani maalum, mradi au maktaba? Miradi ming Hii ni baadhi ya mifano maalum: -- [Uimara](https://gitter.im/ethereum/solidity) +- [Solidity](https://gitter.im/ethereum/solidity) - [ethers.js](https://discord.gg/6jyGVDK6Jx) - [web3.js](https://discord.gg/GsABYQu4sC) - [Hardhat](https://discord.gg/xtrMGhmbfZ) - [Alchemy](http://alchemy.com/discord) +- [Tenderly](https://discord.gg/fBvDJYR) -## Endesha nodi {#node-support} +## Kuendesha nodi {#node-support} Kama unaendesha nodi am mthibitishaji, hizi ni baadhi ya jamii zinazotoa msaada ili upate kuanza katika Ethereum. -- [Discord ya EthStaker](https://discord.gg/ethstaker) -- [Reddit ya EthStaker](https://www.reddit.com/r/ethstaker) +- [EthStaker discord](https://discord.gg/ethstaker) +- [EthStaker reddit](https://www.reddit.com/r/ethstaker) Timu zilizo nyingi za usanidi programu za Ethereum zinajitolea kusaidia mikutano ya hadhara amabayo unaweza kupata waunga mkono na kuuliza maswaloi muhimu. -### Programu za utelekezji {#execution-clients} +### Wateja wa utekelezaji {#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) -### Programu ya makubaliano {#consensus-clients} +### Wateja wa makubaliano {#consensus-clients} - [Prysm](https://discord.gg/prysmaticlabs) - [Nimbus](https://discord.gg/nSmEH3qgFv) -- [Taa ya taa](https://discord.gg/cyAszAh) +- [Lighthouse](https://discord.gg/cyAszAh) - [Teku](https://discord.gg/7hPv2T6) -- [Mwangaza](https://discord.gg/aMxzVcr) - -Unaweza [kujifunza jinsi ya kuendesha nodi hapa](/developers/docs/nodes-and-clients/run-a-node/). - -## Maswali yanayoulizwa mara kwa mara {#faq} - -### Nimetuma ETH kwenye pochi isiyo sahihi {#wrong-wallet} - -Muamala unaofanyika kwenye Ethereum hauwezi kurudishwa ulikotoka. Kwa bahati mbaya, kama umetuma ETH kwenye pochi isiyo sahihi, hamna njia ya kupata fedha hizo. Hakuna shirika la kati, chombo ama mtu mmoja anaemiliki Ethereum, kwa maana kwamba hamna anaeweza kurudisha muamala ulikwishafanyika. Kwahiyo, ni muhimu kukagua mara kadhaa kama anauani ya pochi unayoingiza iko sahihi kabala ya kufanya muamala. - -### Nawezaje kudai zawadi yangu ya Ethereum? {#giveaway-scam} - -Zawadi za Ethereum ni mitego/ulaghai unaobuniwa ili kuiba ETH zako. Usishawishike na huduma inayotanganzwa inayoonekana kua ya uwongo - ukiotuma ETH kwenye anwani ya zawadi, hautapokea zawadi, na hautaweza kupata fedha ulizotuma mwanzo. - -[Zaidi juu ya kuzuia ulaghai](/security/#common-scams) - -### Muamala wangu umegota {#stuck-transaction} - -Wakati mwingine miamala hugita kwenye Ethereum kama umetoa kiwango kidogo cha malipo ya muamala kuliko kile kinachohitajika kwenye mtandao. Pochi nyingi hutoa chaguo la kutuma tena muamala huo huo kwa bei ya juu zaidi ili muamala ufanyiwe mchakato. Kwa njia mbadala unaweza kughairi muamala usio kamili kwa kutuma fedha hizo kwenye anwani yako mwenyewe, na kutumia nonce sawa na ya muamala ambao haujakamlika. - -[Jinsi ya kuongeza kasi au kusimamisha malipo/muamala ambao haujamkamilika kwenye MetaMask](https://metamask.zendesk.com/hc/en-us/articles/360015489251-How-to-speed-up-or-cancel-a-pending-transaction) - -[Jinsi ya kuzuia/ghairi miamala kwenye Ethereum](https://info.etherscan.com/how-to-cancel-ethereum-pending-transactions/) - -### Nawezaje kuchimba Ethereum? {#mining-ethereum} +- [Lodestar](https://discord.gg/aMxzVcr) +- [Grandine](https://discord.gg/H9XCdUSyZd) -Hatushauri kununua maunzi ya kuchimba Ethereum kama bado haujaanza kuchimba. Kwenye ~Q3. Q4 2022, [Muungano](/roadmap/merge/) utatokea, utabadilisha Ethereum kutoka kwenye uthibitisho-wa-kazi kwenda kwenye usthibitisho-wa-hisa. Haya mabadiliko yatafanya uchimbaji wa Ethereum kutowezekana tena. +Unaweza pia [kujifunza jinsi ya kuendesha nodi hapa](/developers/docs/nodes-and-clients/run-a-node/). diff --git a/public/content/translations/sw/contributing/adding-desci-projects/index.md b/public/content/translations/sw/contributing/adding-desci-projects/index.md new file mode 100644 index 00000000000..cf97c495d03 --- /dev/null +++ b/public/content/translations/sw/contributing/adding-desci-projects/index.md @@ -0,0 +1,44 @@ +--- +title: Kuongeza miradi ya DeSci +description: Sera tunayoitumia tunapoongeza kiungo cha miradi kwenye ukurasa wa DeSci kwenye ethereum.org +lang: sw +--- + +# Kuongeza miradi {#adding-projects} + +Tunataka kuhakikisha tunaonyesha miradi mbalimbali na kutoa picha nzuri ya mandhari ya DeSci. + +Mtu yeyote yuko huru kupendekeza mradi wa kuorodhesha kwenye ukurasa wa DeSci kwenye ethereum.org. Vile vile, mtu yeyote anayegundua mradi ambao hauhusiani tena au hautimizi tena vigezo vyetu vya kustahiki yuko huru kupendekeza uondoaji wake. + +## Mfumo wa uamuzi{#the-decision-framework} + +### Vigezo vya kujumuishwa: Mahitaji ya lazima {#the-must-haves} + +- **Msimbo/data huria** - Uwazi wa msimbo na data ni kanuni ya msingi ya DeSci, hivyo miradi ya DeSci haipaswi kuwa ya chanzo funge. Msingi wa msimbo unapaswa kupatikana na ikiwezekana uwe wazi kwa maombi ya kuvuta (PRs). +- **Miradi ya DeSci inapaswa kugatuliwa kwa njia inayoonekana** - Hii inaweza kujumuisha kutawaliwa na DAO, au kwa kujenga kwa kutumia rundo la teknolojia lililogatuliwa pamoja na pochi zisizo za ulinzi. Pengine inahusisha mikataba-erevu inayoweza kukaguliwa kwenye Ethereum. +- **Taarifa za uorodheshaji zilizo za kweli na sahihi** - Inatarajiwa kwamba orodha zozote zilizopendekezwa kutoka kwa miradi zinakuja na taarifa za kweli na sahihi. Bidhaa zitakazodanganya taarifa za orodha, kama kudai bidhaa yako ni "chanzo wazi" wakati siyo, zitatolewa. +- **Kujitolea kunakoonekana kupanua ufikiaji wa sayansi** - Mradi wa DeSci unapaswa kuweza kueleza jinsi wanavyopanua ushiriki katika sayansi kwa umma kwa jumla, sio tu kwa wamiliki wa tokeni/NFT. +- **Inapatikana ulimwenguni kote** - Mradi wako hauna vikwazo vya kijiografia au mahitaji ya KYC yanayowatenga watu fulani kupata huduma yako. +- **Tovuti na nyaraka zenye taarifa** - Ni muhimu wageni kwenye tovuti ya mradi waweze kuelewa kile ambacho mradi unafanya hasa, jinsi unavyochangia katika ugatuzi wa miundombinu ya sayansi na jinsi ya kushiriki. +- **Mradi unapaswa kuwa sehemu ya mfumo ikolojia wa Ethereum** - Katika ethereum.org tunaamini Ethereum (na Tabaka zake za 2) kuwa ndio tabaka la msingi linalofaa kwa vuguvugu la DeSci. +- **Mradi umeimarika vizuri** - Mradi una watumiaji halisi ambao wameweza kupata huduma za mradi kwa miezi kadhaa. + +### Sifa za ziada + +- **Inapatikana katika lugha nyingi** - Mradi wako umetafsiriwa katika lugha nyingi, kuruhusu watumiaji kote ulimwenguni kuufikia. +- **Rasilimali za kielimu** - Bidhaa yako inapaswa kuwa na uzoefu mzuri wa kuanzisha mtumiaji ili kusaidia na kuwaelimisha watumiaji. Au ushahidi wa jinsi-ya maudhui kama makala au filamu. +- **Ukaguzi wa wahusika wengine** - Bidhaa yako imekaguliwa kitaalamu kwa ajili ya udhaifu na mhusika mwingine anayeaminika. +- **Mtu wa mawasiliano** - Mtu wa mawasiliano wa mradi (huyu anaweza kuwa mwakilishi kutoka DAO au jamii) atatusaidia sana kupata taarifa sahihi wakati mabadiliko yanapofanywa. Hii itaendelea kuhuisha ethereum.org ili iwe rahisi kusimamia wakati wa kukusanya taarifa za baadaye. + +## Matengenezo{#maintenance} + +Kama ni asili ya maji ya Ethereum, timu na bidhaa kuja na kwenda na uvumbuzi hutokea kila siku, hivyo tutaweza kufanya ukaguzi wa kawaida wa maudhui yetu ya: + +- Hakikisha kwamba miradi yote iliyoorodheshwa bado inatimiza vigezo vyetu +- Thibitisha kuwa hakuna bidhaa ambazo zimependekezwa zinazokidhi vigezo vyetu zaidi kuliko zile zilizoorodheshwa sasa hivi. + +Ethereum.org inasimamiwa na jamii ya chanzo huria na tunategemea jamii kusaidia kuiweka ikiwa ya kisasa. Ukigundua taarifa yoyote kuhusu miradi iliyoorodheshwa inayohitaji kusasishwa, tafadhali fungua suala au ombi la kuvuta (pull request) kwenye hazina yetu ya GitHub. + +## Masharti ya matumizi {#terms-of-use} + +Tafadhali pia rejelea [masharti yetu ya matumizi](/terms-of-use/). Taarifa juu ya ethereum.org hutolewa tu kwa madhumuni ya taarifa ya jumla. diff --git a/public/content/translations/sw/contributing/adding-developer-tools/index.md b/public/content/translations/sw/contributing/adding-developer-tools/index.md new file mode 100644 index 00000000000..50a703b15e4 --- /dev/null +++ b/public/content/translations/sw/contributing/adding-developer-tools/index.md @@ -0,0 +1,61 @@ +--- +title: Kuongeza zana za wasanidi programu +lang: sw +description: Vigezo vyetu vya kuorodhesha zana za wasanidi programu kwenye ethereum.org +--- + +# Kuongeza zana za wasanidi programu {#contributing-to-ethereumorg-} + +Tunataka kuhakikisha tunaorodhesha rasilimali bora zaidi za wasanidi programu iwezekanavyo ili watu waweze kujenga kwa kujiamini na kupata usaidizi wanaohitaji. + +Kama kuna zana muhimu ya msanidi programu ambayo tumeikosa, jisikie huru kuipendekeza mahali panapofaa. + +Kwa sasa tunaorodhesha zana za wasanidi programu katika [tovuti yetu ya wasanidi programu](/developers/). + +**Jisikie huru kupendekeza nyongeza mpya kwenye kurasa zinazofaa.** + +## Jinsi tunavyoamua {#ways-to-contribute} + +Mapendekezo ya zana za wasanidi programu yatatathminiwa kwa vigezo vifuatavyo: + +**Je, imetofautishwa kwa njia ya maana kutoka kwa zana zilizokwisha orodheshwa?** + +- Aina au kategoria mpya za zana +- Vipengele vipya vikilinganishwa na zana zilizopo zinazofanana +- Inalenga matumizi maalum ambayo hayajashughulikiwa na zana zilizopo zinazofanana + +**Je, zana ina nyaraka nzuri?** + +- Je, nyaraka zipo? +- Je, inatosha kutumia zana hiyo? +- Je, imesasishwa hivi karibuni? + +**Je, zana inatumika sana?** + +- Tutazingatia vipimo kama vile nyota za GitHub, takwimu za upakuaji, na iwapo inatumiwa na kampuni au miradi inayojulikana + +**Je, zana ina ubora wa kutosha?** + +- Je, kuna hitilafu zinazojirudia? +- Je, zana ni ya kuaminika? +- Je, zana inatunzwa kikamilifu? + +**Je, zana ni ya chanzo wazi?** + +Miradi mingi katika mfumo wa Ethereum ni ya chanzo wazi. Tuna uwezekano mkubwa wa kuorodhesha miradi ya chanzo wazi inayoruhusu wasanidi programu wa jumuiya kukagua msimbo na kuchangia humo. + +--- + +## Kuagiza Bidhaa {#product-ordering} + +Isipokuwa bidhaa zimepangwa kwa utaratibu maalum, kama vile kialfabeti, bidhaa zitaonyeshwa kuanzia ile iliyoongezwa zamani zaidi hadi ile mpya zaidi kwenye ukurasa. Kwa maneno mengine, bidhaa mpya zaidi huongezwa chini ya orodha. + +--- + +## Ongeza zana yako ya msanidi programu {#how-decisions-about-the-site-are-made} + +Kama unataka kuongeza zana ya msanidi programu kwenye ethereum.org na inakidhi vigezo, fungua suala kwenye GitHub. + + + Unda suala + diff --git a/public/content/translations/sw/contributing/adding-exchanges/index.md b/public/content/translations/sw/contributing/adding-exchanges/index.md new file mode 100644 index 00000000000..6f06bc69fef --- /dev/null +++ b/public/content/translations/sw/contributing/adding-exchanges/index.md @@ -0,0 +1,40 @@ +--- +title: Kuongeza masoko +description: Sera tunazotumia kuongeza masoko kwenye ethereum.org +lang: sw +--- + +# Kuongeza exchange za Ethereum {#adding-ethereum-exchanges} + +Yeyote anaweza kupendekeza kuongeza masoko mapya kwenye ethereum.org. + +Kwa sasa tunayaorodhesha kwenye: + +- [ethereum.org/get-eth](/get-eth/) + +Ukurasa huu unamruhusu mtumiaji kuingiza anapoishi na kuona ni masoko yapi anayoweza kutumia. Hii husaidia kubaini mapema kama kuna vizuizi vya kijiografia. + +Kwa sababu ya muktadha huu, tunahitaji taarifa mahususi pale unapopendekeza soko. + +**KUMBUKA:** Ikiwa unataka kuorodhesha exchange iliyogatuliwa, angalia [sera yetu ya kuorodhesha mikoba na mfumo mtawanyo wa kimamlaka](/contributing/adding-products/). + +## Tunachohitaji {#what-we-need} + +- Vizuizi vya kijiografia vinavyohusiana na soko hilo. Vizuizi vya kijiografia vinavyohusiana na soko la ubadilishaji vinapaswa kuelezwa kwa kina kwenye ukurasa au sehemu maalumu ya tovuti ya soko hilo. +- Sarafu ambazo watumiaji wanaweza kutumia kununua ETH +- Uthibitisho kwamba exchange ni kampuni halali ya biashara +- Taarifa za nyongeza ulizonazo - hizi zinaweza kuwa taarifa kuhusu kampuni kama vile miaka ya kufanya kazi, msaada wa kifedha, nk. + +Tunahitaji taarifa hizi ili tuweze kwa usahihi [kuwasaidia watumiaji kupata exchange wanayoweza kutumia](/get-eth/#country-picker). + +Na pia ili ethereum.org iwe na uhakika zaidi kwamba soko la kubadilishia fedha ni huduma halali na salama. + +--- + +## Ongeza exchange yako {#add-exchange} + +Kama unataka kuongeza soko lako la kubadilishia fedha kwenye ethereum.org, tengeneza suala kwenye GitHub. + + + Unda suala + diff --git a/public/content/translations/sw/contributing/adding-glossary-terms/index.md b/public/content/translations/sw/contributing/adding-glossary-terms/index.md new file mode 100644 index 00000000000..f24f4d2f8f3 --- /dev/null +++ b/public/content/translations/sw/contributing/adding-glossary-terms/index.md @@ -0,0 +1,26 @@ +--- +title: "''Kuweka maneno ya ufafanuzi.''" +lang: sw +description: "''Vigezo vyetu vya kuongeza maneno mapya kwenye kamusi ya ethereum.org.''" +--- + +# Kuongeza maneno ya kamusi {#contributing-to-ethereumorg-} + +''Eneo hili hubadilika kila siku.''. ''Maneno mapya huingia mara kwa mara katika msamiati wa watumiaji wa Ethereum, na tunahitaji msaada wako kutoa marejeleo sahihi na ya kisasa kwa maneno yote yanayohusiana na Ethereum.''. Angalia [kamusi](/glossary/) ya sasa na tazama hapa chini ikiwa unataka kusaidia! + +## Viwango{#criteria} + +''Masharti mapya ya kamusi yatakaguliwa kwa kuzingatia vigezo ifuatavyo.'': + +- ''Je neno/ ufafanuzi huu ni wa kisasa na unahusiana na hali ya sasa? +- ''Je kuna neno linalofanana tayari kwenye kamusi?''? ''(Iwapo ndivyo, zingatia faida za kuongeza neno jipya dhidi ya kusasisha neno iliyokuwepo tayari).'' +- ''Je neno/ufafanuzi bila matangazo ya bidhaa au maudhui mengine ya matangazo? +- ''Je neno/ufafanuzi lina uhusiano wa moja kwa moja na Ethereum? +- ''Je, fasiri hiyo ni ya kimaadili, sahihi na haina maoni ya kibinafsi au upendeleo? +- ''Je chanzo ni cha kuaminika? ''Je wanafanya vyanzo vyao? + +--- + +## Ongeza neno lako {#how-decisions-about-the-site-are-made} + +Ikiwa unataka kuongeza neno la kamusi kwenye ethereum.org na linakidhi vigezo, [tengeneza suala kwenye 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/sw/contributing/adding-layer-2s/index.md b/public/content/translations/sw/contributing/adding-layer-2s/index.md new file mode 100644 index 00000000000..5707e31621c --- /dev/null +++ b/public/content/translations/sw/contributing/adding-layer-2s/index.md @@ -0,0 +1,97 @@ +--- +title: Kuongeza Tabaka 2s +description: "''Kanuni tunayotumia wakati wa kuongeza tabaka la 2 kwenye ethereu.org.''" +lang: sw +--- + +# Kuongeza safu za 2 {#adding-layer-2} + +''Tunataka kuhakikisha tunaorodhesha rasilimali bora zaidi ili watumiaji waweze kuvinjari nafasi ya tabaka la pili 2 kwa usalama wa kujiamini.''. + +''Kila mtu ana uhuru wa kupendekeza kuongeza tabaka la pili 2 kwenye ethereum.org.''. Ikiwa kuna safu ya 2 ambayo tumeikosa, **[tafadhali pendekeza](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_layer2.yaml)!** + +''Kwa sasa tunaorodhesha tabaka la pili kwenye kurasa zifuatazo.'': + +- [Optimistic rollups](/developers/docs/scaling/optimistic-rollups/) +- [Zero-knowledge rollups](/developers/docs/scaling/zk-rollups/) +- [Safu ya 2](/layer-2/) + +''Tabaka la pili 2 ni dhana mpya na ya kusisimua kwa Ethereum.''. ''Tumejaribu kuunda mfumo wa haki wa kuzingatia kwenye ethereum.org, lakini vigezo vya kuorodhesha vitabadilika na kubadilika kadri muda unavyopita.''. + +## Mfumo wa uamuzi{#decision-framework} + +### Vigezo vya kujumuishwa: ya lazima {#criteria-for-inclusion-the-must-haves} + +**Kuorodhesha kwenye L2BEAT** + +- Ili mradi huu uzingatiwe, ni lazima uorodheshwe kwenye [L2BEAT](https://l2beat.com). ''L2BEAT inatoa tathmini thabiti ya hatari kwa miradi ya tabaka la pili 2 ambayo tunategemea katika kutathmini miradi ya tabaka la pili L2.''. **Ikiwa mradi haujaangaziwa kwenye L2BEAT, hatutauorodhesha kama L2 kwenye ethereum.org.** +- [Jifunze jinsi ya kuongeza mradi wako wa L2 kwenye L2BEAT](https://github.com/l2beat/l2beat/blob/master/CONTRIBUTING.md). + +**Chanzo wazi** + +- ''Kanuni zako lazima ziweze kupatikana na unapaswa kupokea ombi la mchanganyiko wa mabadiliko kutoka kwa jamii pana.''. + +**Jamii ya safu ya 2** + +''Kwa sasa tunazingatia yafuatayo kuwa suluhisho za tabaka la pili 2: + +- ''Kuunganisha kwa matumaini.'' +- ''Kuunganisha kwa ujanja wa kukosa maarifa.'' + +_Hatuzingatii masuluhisho mengine ya kuongeza kiwango ambayo hayatumii Ethereum kwa upatikanaji wa data au usalama kuwa safu ya 2._ + +**Ethereum kwa upatikanaji wa data** + +- ''Upatikanaji wa taarifa ni kipengele muhimu kinachotofautisha suluhisho zingine za kuongeza kasi na tabaka la pili 2.''. Mradi **lazima** utumie Ethereum Mainnet kwa upatikanaji wa data ili uzingatiwe kuorodheshwa. + +**Madaraja** + +- ''Watumiaji wanawezaje kujiunga na tabaka la pili 2.''? + +**Tarehe ambayo mradi ulianza kufanya kazi** + +- ''Tabaka la pili 2 ambayo imekua ''hai'' inafanya kazi kwenye wavu kuu kwa zaidi ya miezi sita 6.'' + +- ''Miradi mpya ambayo haijajaribiwa kikamilifu na watumiaji ina uwezekano mdogo wa kuorodheshwa.''. + +**Ukaguzi wa usalama wa nje** + +- ''Iwe kupitia ukaguzi, timu ya usalama wa ndani, au njia nyingine yoyote, usalama wa bidhaa yako lazima ijaribiwe kwa kuaminika.''. Hii kupunguza hatari kwa watumiaji wetu na inaonyesha kuwa unachukua usalama kwa makini. + +**Msingi endelevu wa watumiaji** + +- ''Tutazingatia vipimo kama historia ya TVL, takwimu za muamala, na kama inatumika na kampuni au miradi inavyojulikana.'' + +**Timu tendaji ya maendeleo** + +- ''Hatutaorodhesha tabaka la pili 2 ambayo haina timu inayofanya kazi kwenye mradi.''. + +**Kichunguzi cha bloku** + +- ''Miradi iliyoorodheshwa inahitaji kuwa na kichunguzi cha mnyororo kinachofanya kazi ili kuruhusu watumiaji kuvinjari wavu kwa urahisi. + +### Vigezo vingine: vinavyopendelewa lakini si vya lazima {#nice-to-haves} + +**Usaidizi wa Exchange kwa mradi** + +- ''Je, watumiaji wanaweza kuweka na/au kutoa moja kwa moja kutoka kwenye kubadilishana.''? + +**Viungo vya mfumo mtawanyo wa kimamlaka katika mfumo-ikolojia wa safu ya 2** + +- ''Tunataka kuwa na uwezo wa kutoa taarifa juu ya kile watumiaji wanaweza kutegemea kuweza kufanya kwenye tabaka la pili 2.''. (k.m., https://portal.arbitrum.io/, https://www.optimism.io/apps) + +**Orodha za mikataba ya tokeni** + +- ''Kwa kuwa mali zitakuwa na anwani mpya kwenye tabaka la pili 2, kama kuna rasilimali za orodha ya tokeni zinapatikana tafadhali shiriki.''. + +**Usaidizi wa mkoba asilia** + +- ''Je, pochi yoyote inaunga mkono tabaka la pili L2 moja kwa moja? + +## Ongeza safu yako ya 2 {#add-exchange} + +''Kama unataka kuongeza tabaka ya pili 2 kwenye ethereum.org, tengeneza tatizo kwenye GitHub.''. + + + Unda suala + diff --git a/public/content/translations/sw/contributing/adding-products/index.md b/public/content/translations/sw/contributing/adding-products/index.md new file mode 100644 index 00000000000..4aad078eee2 --- /dev/null +++ b/public/content/translations/sw/contributing/adding-products/index.md @@ -0,0 +1,100 @@ +--- +title: Kuongeza Bidhaa +description: Hati sisi kutumia wakati kuongeza madaraka maombi kwa ethereum.org +lang: sw +--- + +# Kuongeza bidhaa za Ethereum {#adding-products} + +Mtu yeyote ni huru kupendekeza madaraka maombi mpya kwa maudhui ya ethereum.org, ambapo ni sahihi kufanya hivyo. **Hapana, kosekana kwenye orodha madaraka maombi yako kwenye ukurasa wetu wa nyumbani** 😜 + +Madaraka maombi kwa sasa kwenye orodha: + +- ethereum.org/dapps +- ethereum.org/get-eth + +**Tafadhali tu kupendekeza nyongeza mpya kwenye kurasa hizi.** + +Ingawa karibisha nyongeza mpya, kuchaguliwa madaraka maombi ya sasa kulingana na uzoefu tunajaribu kuunda kwa watumiaji wetu. Hizi kutegemea baadhi ya kanuni zetu za kubuni: + +- _kutia moyo_: kitu chochote juu ethereum.org lazima kutoa kitu kipya kwa watumiaji +- _A hadithi nzuri_: nini ni kwenye orodha lazima kutoa "aha" wakati +- _ Kuaminika_: kila kitu lazima biashara halali / miradi ya kupunguza hatari kwa watumiaji + +Kwa ujumla **ethereum.org inataka kutoa "uzoefu wa utangulizi usio na mshono" kwa watumiaji wapya**. Kwa sababu hiyo, ongeza madaraka maombi kulingana na yao: + +- urahisi wa matumizi +- ushirikiano na bidhaa nyingine +- usalama +- marefu + +Hapa ni mfumo wetu wa uamuzi kwa undani zaidi. Hisi huru kutoa maoni au kupendekeza mabadiliko. + +## Mfumo wa uamuzi{#decision-framework} + +### Vigezo vya kujumuishwa: ya lazima {#criteria-for-inclusion-the-must-haves} + +- **Bidhaa iliyojaribiwa kiusalama** – iwe kupitia ukaguzi, timu ya ndani ya usalama au mbinu nyingine yoyote, usalama wa bidhaa yako lazima ujaribiwe kwa uhakika. Hii kupunguza hatari kwa watumiaji wetu na inaonyesha kuwa unachukua usalama kwa makini. +- **Bidhaa ambayo imekuwa "hewani" kwa zaidi ya miezi 6** – hii ni ishara nyingine ya usalama. Miezi 6 ni muda mzuri kwa ajili ya wadudu muhimu na utumiaji kuwa kupatikana. +- **Inafanyiwa kazi na timu hai** – hii husaidia kuhakikisha ubora na kwamba mtumiaji atapata usaidizi kwa maswali yake. +- **Taarifa ya uorodheshaji iliyo ya kweli na sahihi** - inatarajiwa kuwa orodha zozote zinazopendekezwa kutoka kwa miradi zinakuja na taarifa za kweli na sahihi. Bidhaa ambazo kudanganya orodha ya habari, kama kutangaza bidhaa yako ni "chanzo wazi" wakati sio, kuondolewa. + +### Vigezo vya kupanga: yanayopendeza kuwa nayo {#criteria-for-ranking-the-nice-to-haves} + +Madaraka maombi yako inaweza kuwa kwenye orodha wa ethereum.org kama maarufu kama wengine kwa sababu ya vigezo kufuatia. + +**mfumo mtawanyo wa kimamlaka** + +- **Unaweza kuifikia kupitia mikoba mingi iliyoorodheshwa** – mfumo mtawanyo wa kimamlaka unapaswa kufanya kazi na mikoba mingi iliyoorodheshwa kwenye ethereum.org. +- **Watumiaji wanaweza kujaribu wenyewe –** mtumiaji binafsi anapaswa kuwa na uwezo wa kutumia mfumo wako mtawanyo na kufanikisha kitu kinachoonekana. +- **Kuanza kutumia** – bidhaa yako inapaswa kuwa na uzoefu wa kuanza kutumia ulioundwa vizuri ili kusaidia na kuwaelimisha watumiaji. Au ushahidi wa jinsi-ya maudhui kama makala au filamu. +- **Isiyo na uhifadhi** – watumiaji hudhibiti fedha zao. Kama bidhaa yako kutoweka, watumiaji bado wanaweza kupata na kuhamisha fedha zao. +- **Inapatikana ulimwenguni kote** – bidhaa yako haina vikwazo vya kijiografia au masharti ya KYC yanayowazuia watu fulani kupata huduma yako. +- **Chanzo wazi** – msimbo wako unapaswa kupatikana na unapaswa kukubali PRs kutoka kwa jamii pana. +- **Jumuiya** – una jumuiya maalum, labda Discord, ambapo watumiaji wanaweza kuwasiliana na timu yako kupata msaada au kupendekeza vipengele vipya. + +## Vigezo katika utekelezaji {#criteria-in-practice} + +Zaidi ya vigezo wewe kujaza, zaidi uwezekano bidhaa yako kupata njia yake juu ya ethereum.org. + +Bidhaa kwenye orodha ambayo hukutana tu mahitaji ya lazima inaweza kuondolewa ikiwa bidhaa mpya kupendekeza ambayo hukutana mahitaji ya lazima na kadhaa ya mazuri ya kuwa nayo. + +Vitu mengine ambayo sababu uamuzi huu: + +- Je, kuongeza badala ya kuchukua nafasi kuvunja UX ya ukurasa? + - wavu yetu ni kimsingi elimu na lengo kuu ni kueleza Ethereum na dhana zake husika. Kwa kuongeza chaguzi nyingi sana kwa watumiaji, kurasa zinaweza kuwa chini ya kusoma na hivyo kuwa chini ya manufaa. +- Je ukurasa huu sasa kupooza mtumiaji na chaguzi? + - kama wakati unakaa na kuvinjari Netflix kwa masaa kwa sababu huwezi kuamua kitu cha kutazama. Kudanganya watumiaji wapya na chaguo nyingi ni hatari. + +Hii ni uamuzi wa kubuni kwamba ethereum.org ni wajibu kwa. + +Lakini uwe na hakika, **kutakuwa na viungo vya tovuti nyingine zinazoorodhesha mfumo mtawanyo wa kimamlaka zaidi** + +### Kuagiza Bidhaa {#product-ordering} + +Isipokuwa bidhaa ni maalum ili vinginevyo, kama alfabeti, bidhaa kuonyeshwa kutoka zaidi kwa angalau hivi karibuni aliongeza kwa ukurasa. Kwa maneno mengine, bidhaa mpya zaidi huongezwa chini ya orodha. + +### Masharti ya matumizi {#terms-of-use} + +Tafadhali pia rejelea [masharti yetu ya matumizi](/terms-of-use/). Taarifa juu ya ethereum.org hutolewa tu kwa madhumuni ya taarifa ya jumla. + +## Matengenezo{#maintenance} + +Kama ni asili ya maji ya Ethereum, timu na bidhaa kuja na kwenda na uvumbuzi hutokea kila siku, hivyo tutaweza kufanya ukaguzi wa kawaida wa maudhui yetu ya: + +- kuhakikisha kuwa madaraka maombi zote kwenye orodha bado kutimiza vigezo yetu +- kuthibitisha hakuna bidhaa ambazo kupendekeza ambazo hukutana zaidi ya vigezo vyetu kuliko wao kwenye orodha sasa + +Unaweza kusaidia kwa kuangalia na kujua. [Tengeneza toleo](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=)au tuma barua pepe kwa [Mtandao@ethereum.org](mailto:website@ethereum.org) + +_Sisi pia ni kuchunguza chaguzi kwa ajili ya kupiga kura ili jamii inaweza kuonyesha upendeleo wao na kuonyesha bidhaa bora huko nje kwa ajili yetu kupendekeza._ + +--- + +## Ongeza bidhaa yako {#add-your-product} + +Ikiwa unataka kuongeza mfumo mtawanyo kwa ethereum.org na unakidhi vigezo, tafadhali tujulishe. + + + Pendekeza programu + diff --git a/public/content/translations/sw/contributing/adding-resources/index.md b/public/content/translations/sw/contributing/adding-resources/index.md new file mode 100644 index 00000000000..981b906c766 --- /dev/null +++ b/public/content/translations/sw/contributing/adding-resources/index.md @@ -0,0 +1,53 @@ +--- +title: Kuongeza rasilimali +description: Hati sisi kutumia wakati kuongeza rasilimali kwa ethereum.org +lang: sw +--- + +# Kuongeza Rasilimali {#adding-resources} + +Tunataka kuhakikisha orodha rasilimali bora inawezekana wakati wa kuweka watumiaji salama na kujiamini. + +Mtu yeyote ni huru kupendekeza rasilimali mpya kuongeza kwa rasilimali ubao juu ethereum.org, sasa kupatikana katika [ethereum.org/rasilimali](/resources/). + +Ingawa kuwakaribisha nyongeza mpya, rasilimali za sasa kuchaguliwa kulingana na uzoefu tunajaribu kuunda kwa watumiaji wetu. Hizi kutegemea baadhi ya kanuni zetu za kubuni: + +- _kutia moyo_: kitu chochote juu ethereum.org lazima kutoa kitu kipya kwa watumiaji +- _A hadithi nzuri_: nini ni kwenye orodha lazima kutoa "aha" wakati +- _ Kuaminika_: kila kitu lazima biashara halali / miradi ya kupunguza hatari kwa watumiaji + +Kwa ujumla **ethereum.org inakusudia kutoa bila mshono ndani ya jambo uzoefu kwa watumiaji wapya**. Kwa sababu hiyo, ongeza rasilimali kulingana na: + +- urahisi wa matumizi +- usahihi +- matengenezo + +## Mfumo wa uamuzi{#decision-framework} + +### Viwango{#criteria} + +- \*\* Habari ya uaminifu na sahihi ya orodha \*\* - Orodha yoyote kupendekeza lazima kuja na habari ya uaminifu na sahihi. Bidhaa ambazo kudanganya habari kuondolewa. +- \*\* mradi kazi \*\* - rasilimali inapaswa kudumisha na timu ya kazi ili kuhakikisha ubora na msaada kwa watumiaji. Rasilimali pitwa na wakati ni chini ya kuondolewa. + +### Kuagiza Bidhaa {#product-ordering} + +Tuna haki ya kuagiza bidhaa kulingana na athari zao. Bidhaa mpya kwa ujumla ongeza chini ya orodha isipokuwa vinginevyo maalum. + +## Matengenezo{#maintenance} + +Kama mazingira ya Ethereum inaendelea, tutaweza mara kwa mara maudhui yetu ili: + +- Kuhakikisha kwamba rasilimali zote kwenye orodha bado kutimiza vigezo yetu +- Thibitisha kuwa hakuna bidhaa ambazo zimependekezwa zinazokidhi vigezo vyetu zaidi kuliko zile zilizoorodheshwa sasa hivi. + +Unaweza kusaidia kwa kuangalia na kujua. [Tengeneza toleo](https://github.com/ethereum/ethereum-org-website/issues/new?template=bug_report.yaml)au tuma barua pepe kwa [Mtandao@ethereum.org](mailto:website@ethereum.org). + +--- + +## Ongeza rasilimali yako{#add-your-resource} + +Kama unataka kuongeza rasilimali kwa ethereum.org na hukutana vigezo, kujenga suala juu ya Github. + + + Unda suala + diff --git a/public/content/translations/sw/contributing/adding-staking-products/index.md b/public/content/translations/sw/contributing/adding-staking-products/index.md new file mode 100644 index 00000000000..fde881fcb6f --- /dev/null +++ b/public/content/translations/sw/contributing/adding-staking-products/index.md @@ -0,0 +1,176 @@ +--- +title: Kuongeza kuunganisha bidhaa au huduma +description: Hati sisi kutumia wakati wa kuongeza bidhaa kuunganisha au huduma kwa ethereum.org +lang: sw +--- + +# Kuongeza bidhaa au huduma za kusimamisha {#adding-staking-products-or-services} + +Tunataka kuhakikisha orodha rasilimali bora inawezekana wakati wa kuweka watumiaji salama na kujiamini. + +Mtu yeyote ni huru kupendekeza kuongeza bidhaa kuunganisha au huduma kwenye ehtereum.org. Ikiwa kuna moja ambayo tumeikosa, **[tafadhali pendekeza](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_staking_product.yaml)!** + +Kwa sasa orodha bidhaa na huduma za kuunganisha kwenye kurasa kufuatia: + +- [Kusimamisha peke yako](/staking/solo/) +- [Kusimamisha kama huduma](/staking/saas/) +- [Vidimbwi vya kusimamisha](/staking/pools/) + +Uthibitisho wa hisa kwenye mlolongo wa mwangaza umekuwa ukifanya kazi tangu Desemba 1, 2020. Wakati kuunganisha bado ni mpya, sisi wamejaribu kujenga haki na uwazi mfumo kwa ajili kuzingatia ethereum.org lakini orodha vigezo mabadiliko na kuendeleza baada ya muda, na ni hatimaye kwa hiari ya ethereum.org Mtandao ya timu. + +## Mfumo wa uamuzi{#the-decision-framework} + +Uamuzi wa orodha ya bidhaa kwenye ethereum.org si tegemezi juu ya sababu yeyote moja. Vigezo mbalimbali ni kuchukuliwa pamoja wakati wa kuamua kuorodhesha bidhaa au huduma. Kadiri zaidi ya vigezo hivi kutimizwa, ndivyo uwezekano zaidi kwenye orodha. + +**Kwanza ni aina gani ya bidhaa au huduma je ni?** + +- Zana za nodi au mteja +- Usimamizi muhimu +- Kuunganisha kama huduma(Mtandao) +- Kuunganisha bwawa + +Kwa sasa kwenye orodha tu bidhaa au huduma katika makundi haya. + +### Vigezo vya kujumuishwa {#criteria-for-inclusion} + +Kuunganisha kwa bidhaa au huduma za wasilisha kutathmini na vigezo kufuatia: + +**Mradi au huduma kuzindua lini?** + +- Je kuna uthibitisho wa wakati bidhaa au huduma ikawa inapatikana kwa umma? +- Hii ni kutumika kuamua bidhaa "mapigano pimwa" alama. + +**Je mradi huo kudumisha kikamilifu?** + +- Je kuna timu hai kuendeleza mradi? ''Ni nani washiriki.''? +- Bidhaa zilizo kudumisha tu kuchukuliwa. + +**Je bidhaa au huduma ni huru ya kuaminiwa / binadamu waamuzi?** + +- Ni hatua gani katika safari ya watumiaji lazima kuamini binadamu ama kushikilia funguo za fedha zao, au kugawanya tuzo kwa usahihi? +- Hii kutumika kuamua bidhaa au huduma "kutokuwa na uaminifu" alama. + +**Je mradi huo hutoa habari sahihi na yenye kutegemeka?** + +- Ni muhimu kwamba Mtandao ya bidhaa ina juu-kwa-habari, sahihi, na yasiyo ya kupotosha habari, hasa kama kuhusiana na itifaki Ethereum au teknolojia nyingine kuhusiana. +- Wasilisha yaliyo na habari potofu, maelezo ya zamani, au taarifa zinazoweza kupotosha kuhusu Ethereum au mada zingine muhimu kutolewa kwenye orodha au kutolewa ikiwa tayari kwenye orodha. + +**Ni majukwaa gani kuungwa mkono?** + +- yaani, Linux, macOS, Windows, iOS, Android + +#### Programu na mikataba-erevu {#software-and-smart-contracts} + +Kwa mpango yeyote maalum au mikataba erevu inayohusika: + +**Je kila kitu ni chanzo wazi?** + +- Kufungua chanzo miradi lazima kuwa na umma inapatikana chanzo kumbukumbu ya kificho +- Hii ni kutumika kuamua bidhaa "chanzo wazi" alama. + +**Je, bidhaa imetoka katika usanidi wa _beta_?** + +- Je, bidhaa ni katika mzunguko yake wa maendeleo? +- Bidhaa katika hatua ya miali si kuchukuliwa kwa ajili ya kuingizwa kwenye ethereum.org + +**Je, mpango imekuwa chini ya ukaguzi wa usalama wa nje?** + +- Kama si, kuna mipango ya kufanya ukaguzi wa nje? +- Hii ni kutumika kuamua bidhaa "kaguliwa" alama. + +**Je, mradi huo una mpango ya kutafuta wadudu?** + +- Kama si, kuna mipango ya kujenga usalama kutafuta wadudu? +- Hii hutumiwa kuamua bidhaa "kutafuta wadudu" alama. + +#### Zana za nodi au mteja {#node-or-client-tooling} + +Kwa ajili ya bidhaa za mpango kuhusiana na nodi au mteja kuanzisha, usimamizi au uhamiaji: + +**Ni wateja gani wa safu ya makubaliano (yaani, Lighthouse, Teku, Nimbus, Prysm, Grandine) wanaotumika?** + +- Ni wateja gani ni saidiwa? Je mtumiaji anaweza kuchagua? +- Hii ni kutumika kuamua bidhaa nyingi-mteja alama. + +#### Kusimamisha kama huduma {#staking-as-a-service} + +Kwa [orodha za kusimamisha kama huduma](/staking/saas/) (yaani, uendeshaji wa nodi uliokabidhiwa): + +**Ni ada gani kuhusishwa na kutumia huduma hiyo?** + +- Muundo wa ada ukoje, k.m., je, kuna ada ya kila mwezi kwa huduma? +- Je kuna matakwa mengine ya kuweka nguzo? + +**Je watumiaji takiwa kujiandikisha kwa ajili ya hifadhi ya fedha?** + +- Je mtu anaweza kutumia huduma bila ruhusa au KYC? +- Hii ni kutumika kuamua bidhaa "ruhusa" alama. + +**Ni nani anayeshikilia funguo za kutia sahihi, na funguo za kuondoa pesa?** + +- Ni funguo gani mtumiaji anaendelea kupata? Ni funguo gani huduma ya kupata kufikia wa? +- Hii hutumiwa kuamua bidhaa "kutokuwa na uhakika" alama. + +**Ni nini mteja tofauti wa nodi kuwa enezwa?** + +- Ni asilimia ngapi ya kuthibitisha funguo ni kuwa kukimbia na wengi makubaliano safu (CL) mteja? +- Kama ya mwisho hariri, Prysm ni makubaliano safu mteja kuwa kukimbia na wengi wa nodi waendeshaji, ambayo ni hatari kwa ajili ya Mtandao. Kama yoyote CL mteja ni sasa kutumika kwa zaidi ya 33% ya Mtandao, sisi kuomba habari kuhusiana na matumizi yake. +- Hii ni kutumika kuamua bidhaa "wanunuzi mbalimbali" alama. + +#### Kidimbwi cha kusimamisha {#staking-pool} + +Kwa [huduma za vidimbwi vya kusimamisha](/staking/pools/): + +**Je ni kiwango cha chini ETH lazima ufanye mchango?** + +- k.m., 0.01 ETH + +**Ni ada au mahitaji gani ya kuweka kushiriki?** + +- Ni asilimia ngapi ya tuzo huondolewa kama ada? +- Je kuna matakwa mengine ya kuweka nguzo? + +**Je, kuna tokeni ya ukwasi?** + +- Ni ishara yapi zinazohusika? Jinsi gani wanafanya kazi? Anwani za mkataba ni nini? +- Hii ni kutumika kuamua bidhaa "fedha taslimu ishara" alama. + +**Je watumiaji kushiriki kama nodi waendeshaji?** + +- Ni nini takiwa kuendesha wateja wa uthibitishaji kutumia fedha pamoja? +- Je hii takiwa ruhusa kutoka kwa mtu binafsi, kampuni au DAO? +- Hii ni kutumika kuamua bidhaa "bila ruhusa nodi" alama. + +**Je ni mteja tofauti wa watoa huduma kundi nodi waendeshaji?** + +- Ni asilimia ngapi ya nodi waendeshaji ni mbio wengi makubaliano safu (CL) mteja? +- Kama ya mwisho hariri, Prysm ni makubaliano safu mteja kuwa kukimbia na wengi wa nodi waendeshaji, ambayo ni hatari kwa ajili ya Mtandao. Kama yoyote CL mteja ni sasa kutumika kwa zaidi ya 33% ya Mtandao, sisi kuomba habari kuhusiana na matumizi yake. +- Hii ni kutumika kuamua bidhaa "wanunuzi mbalimbali" alama. + +### Vigezo vingine: vinavyopendelewa lakini si vya lazima {#other-criteria} + +**Nini mtumiaji wasilisha ni saidiwa?** + +- yaani, Programu ya kivinjari, programu ya kompyuta, programu ya simu, CLI + +**Kwa nodi zana, je mpango kutoa njia rahisi ya kubadili kati ya wateja?** + +- Je mtumiaji urahisi na salama kubadilisha wateja kutumia chombo? + +**Kwa Mtandao, jinsi wengi kuthibitisha kwa sasa ni enezwa na huduma?** + +- Hii inatoa wazo la kufikia huduma yako hadi sasa. + +## Jinsi tunavyoonyesha matokeo {#product-ordering} + +[Vigezo vya kujumuishwa](#criteria-for-inclusion) vilivyo hapo juu hutumika kukokotoa alama ya jumla kwa kila bidhaa au huduma. Hii hutumiwa kama njia ya kuchagua na kuonyesha bidhaa ambazo kukutana vigezo fulani vya lengo. Vigezo zaidi kwamba ushahidi ni kutoa kwa ajili ya, juu ya bidhaa itakuwa aina, na vifungo kuwa nasibu juu ya mzigo. + +Mantiki ya msimbo na uzito wa vigezo hivi kwa sasa vimo ndani ya [sehemu hii ya JavaScript](https://github.com/ethereum/ethereum-org-website/blob/dev/src/components/Staking/StakingProductsCardGrid.js#L350) katika repo yetu. + +## Ongeza bidhaa au huduma yako {#add-product} + +Kama unataka kuongeza bidhaa kuunganisha au huduma kwa ethereum.org, kujenga suala juu ya jukwaa la kuhifadhi. + + + Unda suala + diff --git a/public/content/translations/sw/contributing/adding-wallets/index.md b/public/content/translations/sw/contributing/adding-wallets/index.md new file mode 100644 index 00000000000..1fa27712871 --- /dev/null +++ b/public/content/translations/sw/contributing/adding-wallets/index.md @@ -0,0 +1,80 @@ +--- +title: Kuongeza Pochi za Kidijitali +description: Sera tunazotumia katika kuongeza pochi za kidijitali kwenye ethereum.org +lang: sw +--- + +# Kuongeza mikoba {#adding-wallets} + +Tunataka kuhakikisha tunaonesha aina mbalimbali za pochi za kidijitali zinazohusisha huduma tofauti ili watumiaji waweze kutumia Ethereum kwa namna ya kujiamini. + +Mtu yeyote yuko huru kupendekeza kuongeza pochi za kidijitali kwenye ethereum.org. Kama kuna pochi ambayo hatujaiweka, tafadhali ipendekeze! + +Kwa sasa pochi zimeorodheshwa kwenye: + +- [ethereum.org/wallets/find-wallet/](/wallets/find-wallet/) + +Pochi za kidijitali hubadilika kwa haraka sana kwenye Ethereum. ''Tumejaribu kuunda mfumo wa haki wa kuzingatia kwenye ethereum.org, lakini vigezo vya kuorodhesha vitabadilika na kubadilika kadri muda unavyopita.''. + +## Mfumo wa uamuzi{#the-decision-framework} + +### Vigezo vya kujumuishwa: Mahitaji ya lazima {#the-must-haves} + +- **Bidhaa iliyojaribiwa kiusalama** - iwe kupitia ukaguzi, timu ya ndani ya usalama, msimbo wa chanzo wazi, au njia nyingine yoyote, usalama wa mkoba wako lazima uwe wa kuaminika. Hii kupunguza hatari kwa watumiaji wetu na inaonyesha kuwa unachukua usalama kwa makini. +- **Mkoba ambao umekuwa "live" kwa zaidi ya miezi sita AU umetolewa na kundi lenye rekodi ya sifa nzuri** - hii ni ishara nyingine ya usalama. Miezi sita ni muda mzuri wa makosa muhimu na mianya ya usalama kugunduliwa. Tunaomba miezi sita ili kusaidia kuchuja miradi iliyogawanyika ambayo mara nyingi husalitiwa haraka. +- **Kushughulikiwa na timu hai** - hii husaidia kuhakikisha ubora na kwamba mtumiaji atapata usaidizi kwa maswali yake. +- **Taarifa ya uorodheshaji iliyo ya kweli na sahihi** - inatarajiwa kuwa orodha zozote zinazopendekezwa kutoka kwa miradi zinakuja na taarifa za kweli na sahihi. Bidhaa zitakazodanganya taarifa za orodha, kama kudai bidhaa yako ni "chanzo wazi" wakati siyo, zitatolewa. +- **Anwani ya mawasiliano** - Anwani ya mawasiliano ya mkoba itatusaidia sana kupata taarifa sahihi pindi mabadiliko yanapofanywa. Hii itaendelea kuhuisha ethereum.org ili iwe rahisi kusimamia wakati wa kukusanya taarifa za baadaye. +- **Miamala ya EIP-1559 (aina ya 2)** - mkoba wako lazima uunge mkono miamala ya EIP-1559 (aina ya 2) kwa ajili ya miamala kwenye Mtandao Mkuu wa Ethereum. +- **Uzoefu mzuri wa mtumiaji** - Ingawa UX ni suala la kibinafsi, ikiwa wanachama kadhaa wa timu ya msingi watajaribu bidhaa na kuiona ni ngumu kutumia, tunahifadhi haki ya kuukataa mkoba huo na badala yake tutatoa mapendekezo muhimu ya kuboresha. Hii inafanywa ili kulinda msingi wetu wa watumiaji ambao mara nyingi unajumuishwa na wanaoanza. +- **Unaolenga Ethereum** - Mkoba lazima utoe uzoefu wa kimsingi unaolenga Ethereum. Hii inamaanisha Ethereum (au L2 yoyote) imewekwa kama mtandao chaguo-msingi, mali za ERC zinaungwa mkono ipasavyo, na vipengele vinaendana na mfumo ekolojia wa Ethereum. Mikoba inayopa kipaumbele safu mbadala za 1 (alternative layer 1s) katika kiolesura cha mtumiaji (UI) haitaorodheshwa. + +### Kuondoa bidhaa {#product-removals} + +- **Taarifa zilizosasishwa** - Watoa huduma za mikoba wana jukumu la kuwasilisha tena taarifa za mikoba yao kila baada ya miezi 6 ili kuhakikisha uhalali na umuhimu wa taarifa zilizotolewa (hata kama hakuna mabadiliko kwenye bidhaa zao). Kama timu ya bidhaa itashindwa kufanya hivyo, ethereum.org inaweza kuondoa mradi huo kutoka kwenye ukurasa. + +### Vigezo vingine: Yanayopendeza kuwa nayo {#the-nice-to-haves} + +- **Inapatikana ulimwenguni kote** - mkoba wako hauna vikwazo vya kijiografia au mahitaji ya KYC yanayowatenga baadhi ya watu kupata huduma yako. +- **Inapatikana katika lugha nyingi** - mkoba wako umetafsiriwa katika lugha nyingi na kuruhusu watumiaji kote ulimwenguni kuufikia. +- **Chanzo huria** - msimbo mzima wa mradi wako (sio moduli tu) unapaswa kupatikana na unapaswa kukubali Maombi ya Uunganishaji (PRs) kutoka kwa jamii pana. +- **Isiyo na Mlinzi** - watumiaji hudhibiti fedha zao wenyewe. Kama bidhaa yako kutoweka, watumiaji bado wanaweza kupata na kuhamisha fedha zao. +- **Usaidizi wa mkoba wa maunzi** - watumiaji wanaweza kuunganisha mkoba wao wa maunzi ili kutia saini miamala. +- **WalletConnect** - watumiaji wanaweza kuunganisha kwenye mifumo mtawanyo ya kimamlaka (dapps) wakitumia WalletConnect. +- **Kuingiza vituo vya mwisho vya Ethereum RPC** - watumiaji wanaweza kuingiza data za RPC za nodi, na kuwaruhusu kuungana na nodi ya chaguo lao, au mitandao mingine inayoendana na EVM. +- **NFTs** - watumiaji wanaweza kutazama na kuingiliana na NFTs zao kwenye mkoba. +- **Kuunganisha kwenye programu za Ethereum** - watumiaji wanaweza kuunganisha na kutumia programu za Ethereum. +- **Staking** - watumiaji wanaweza kufanya staking moja kwa moja kupitia mkoba. +- **Ubadilishaji** - watumiaji wanaweza kubadilisha tokeni kupitia mkoba. +- **Mitandao ya Multichain** - mkoba wako unawezesha watumiaji kufikia mitandao mingi ya mnyororo wa bloku kwa chaguo-msingi. +- **Mitandao ya Safu ya 2 (Layer 2)** - mkoba wako unawezesha watumiaji kufikia mitandao ya safu ya 2 kwa chaguo-msingi. +- **Kubinafsisha ada za gesi** - mkoba wako unawaruhusu watumiaji kubinafsisha ada zao za gesi za miamala (ada ya msingi, ada ya kipaumbele, ada ya juu). +- **Usaidizi wa ENS** - mkoba wako unawaruhusu watumiaji kutuma miamala kwenda kwa majina ya ENS. +- **Usaidizi wa ERC-20** - mkoba wako unawaruhusu watumiaji kuingiza mikataba ya tokeni za ERC-20, au unauliza na kuonyesha tokeni za ERC-20 kiotomatiki. +- **Nunua sarafu ya kidigitali** - mkoba wako unawezesha watumiaji kununua na kuanza kutumia sarafu za kidigitali moja kwa moja. +- **Uza kwa fiat** - mkoba wako unawezesha watumiaji kuuza na kutoa kwa fedha za serikali (fiat) moja kwa moja kwenye kadi au akaunti ya benki. +- **Multisig** - mkoba wako unaunga mkono sahihi nyingi ili kutia saini muamala. +- **Urejeshaji wa kijamii** - mkoba wako unaunga mkono walinzi na mtumiaji anaweza kurejesha mkoba wake ikiwa atapoteza funguo la maneno (seed phrase) kwa kutumia walinzi hawa. +- **Timu maalum ya usaidizi** - mkoba wako una timu maalum ya usaidizi ambapo watumiaji wanaweza kwenda wanapopata matatizo. +- **Nyenzo/nyaraka za kielimu** - bidhaa yako inapaswa kuwa na uzoefu mzuri wa kumkaribisha mtumiaji ili kusaidia na kuelimisha watumiaji. Au ushahidi wa jinsi-ya maudhui kama makala au filamu. + +## Kuongeza mkoba {#adding-a-wallet} + +Kama unataka kuongeza pochi kwenye ethereum.org, tengeneza suala kwenye Github. + + + Unda suala + + +## Matengenezo{#maintenance} + +Kama ni asili ya maji ya Ethereum, timu na bidhaa kuja na kwenda na uvumbuzi hutokea kila siku, hivyo tutaweza kufanya ukaguzi wa kawaida wa maudhui yetu ya: + +- hakikisha kwamba pochi na dapps zote zilizoorodheshwa bado zinakidhi vigezo vyetu +- kuthibitisha hakuna bidhaa ambazo kupendekeza ambazo hukutana zaidi ya vigezo vyetu kuliko wao kwenye orodha sasa + +ethereum.org inatunzwa na jamii ya chanzo huria na tunategemea jamii kusaidia kuiweka ikiwa imesasishwa. Ukiona taarifa yoyote kuhusu mikoba iliyoorodheshwa inayohitaji kusasishwa, tafadhali [fungua hoja](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=wallet+%3Apurse%3A&template=suggest_wallet.yaml) au [ombi la uunganishaji](https://github.com/ethereum/ethereum-org-website/pulls)! + +## Masharti ya matumizi {#terms-of-use} + +Tafadhali pia rejelea [masharti yetu ya matumizi](/terms-of-use/). Taarifa juu ya ethereum.org hutolewa tu kwa madhumuni ya taarifa ya jumla. diff --git a/public/content/translations/sw/contributing/content-resources/index.md b/public/content/translations/sw/contributing/content-resources/index.md new file mode 100644 index 00000000000..34b318776e4 --- /dev/null +++ b/public/content/translations/sw/contributing/content-resources/index.md @@ -0,0 +1,32 @@ +--- +title: Kuongeza rasilimali za maudhui +lang: sw +description: Vigezo vyetu vya kuorodhesha rasilimali za maudhui kwenye ethereum.org +--- + +# Kuongeza rasilimali za maudhui {#adding-content-resources} + +Hatutarajii kuelezea kila kitu kwenye Ethereum hivyo tunajaribu kuonesha baadhi ya makala bora, mafunzo, barua za taarifa, mbao za matangazo ya kazi na rasilimali mbalimbali za maudhui ambazo zimetengenezwa na jamii. Hii hutoa maelezo zaidi mara kwa mara kuhusu mada ambazo watumiaji wanaweza kuvutiwa nazo. + +Kama kuna rasilimali ya maudhui ambayo unahisi inatakiwa iongezwe kwenye ukurasa, jisikie huru kutoa mapendekezo sehemu husika. + +## Jinsi tunavyoamua {#how-we-decide} + +Rasilimali za kujifunzia zitafanyiwa tathmini kwa vigezo vifuatavyo: + +- Je, maudhui ni ya kisasa? +- Je, maudhui yana kizuizi cha malipo? +- Je, taarifa ni sahihi? Je, ni ya ukweli au ni ya maoni? +- Je, mwandishi ni wa kuaminika? ''Je wanafanya vyanzo vyao? +- Je, maudhui haya yanaongeza thamani mpya ambayo rasilimali/viungo vilivyopo havina? +- Je, maudhui haya yanahudumia mmoja wa [wasifu wetu wa watumiaji](https://www.notion.so/efdn/Ethereum-org-User-Persona-Memo-b44dc1e89152457a87ba872b0dfa366c)? + +--- + +## Ongeza rasilimali yako ya maudhui {#add-your-content-resource} + +Kama unataka kuongeza rasilimali ya maudhui kwenye ethereum.org na imekidhi vigezo, tengeneza suala kwenye GitHub. + + + Unda suala + diff --git a/public/content/translations/sw/contributing/design-principles/index.md b/public/content/translations/sw/contributing/design-principles/index.md new file mode 100644 index 00000000000..5801a0c5c31 --- /dev/null +++ b/public/content/translations/sw/contributing/design-principles/index.md @@ -0,0 +1,93 @@ +--- +title: Kanuni za kubuni +lang: sw +description: Kanuni za usanifu na maamuzi ya maudhui ya ethereum.org +--- + +# Kanuni zetu za usanifu {#contributing-to-ethereumorg-} + + Hujambo, na karibu kwenye kanuni za usanifu za ethereum.org. Hii ni sehemu ya mchakato unaoendelea wa kubadilika na kuboresha ethereum.org. + +Kanuni zetu hufahamisha mwonekano na hisia za tovuti na maudhui yaliyomo. + +Unapaswa kusoma hizi kabla ya [kuchangia ethereum.org](/contributing/). + +## Kanuni za kubuni ni nini? {#ways-to-contribute} + +Usijali, wao ni rahisi sana! **Kanuni za usanifu** ni seti ya miongozo tunayorejelea wakati wa kusanifu (yaani, kuunda, kutunza au kusasisha) kitu. + +Katika muktadha wa ethereum.org kanuni hizi za usanifu ndizo msingi wa kile tunachotaka tovuti iwakilishe na kutayarisha kwa ulimwengu. Zote mbili ni za kutia moyo **na** za kiutendaji. Sio tu jinsi tovuti _inavyoonekana_, lakini pia jinsi _inavyofanya kazi_ na hata jinsi inavyomfanya mtu _ajisikie._ Kila kitu, kuanzia rangi hadi mpangilio wa kurasa hadi jinsi tunavyozungumza kuhusu Ethereum kwenye tovuti kinapaswa kuongozwa na kanuni hizi. + +## Kanuni katika utendaji {#how-decisions-about-the-site-are-made} + +Hebu tuangalie mfano. Mojawapo ya kanuni ni “Inayoaminika”, ambayo ina maana kwamba tunataka wageni kwenye tovuti _wahisi_ na _wajue_ kwamba tovuti ni ya kuaminika - kama ilivyo mfumo mkuu wa ikolojia wa Ethereum. Kwa mujibu wa kanuni hiyo, tuna "kanuni ndogo" 3 zinazofanya kazi ambazo tunaamini ni hatua zinazoweza kuchukuliwa ili kufanya tovuti iaminike: + +- _“Mpya”_ yaani, kuweka maudhui yakiwa yamesasishwa. +- _“Uthibitisho wa Kijamii”_ yaani, onyesha ukubwa, utofauti na shughuli za mfumo wa ikolojia (unajua: maendeleo ya sasisho la Ethereum, DeFi, michezo ya kubahatisha, hackathon zote, n.k.) +- _“Thabiti”_ yaani, uthabiti katika usanifu wa tovuti na sauti na usahihi wa maandishi. + +Kwa hivyo tunapofanya maamuzi ya muundo, au maamuzi ya uandishi, basi tunaweza kurejelea kanuni ya "Inayoaminika" na kuuliza: + +- _“Je, tovuti inaakisi taarifa za sasa?”_ +- _“Tunaonyesha vipi na wapi ukubwa na shughuli za mfumo wa ikolojia?”_ +- _“Je, michango mipya iliyopendekezwa na mwanajumuiya ninayoikagua inalingana na usanifu wa sasa na uandishi kwenye tovuti?”_ + +## Kanuni za usanifu za ethereum.org {#contributors} + +### 1. Ya kutia moyo {#1-inspirational} + +Tovuti inapaswa kuhamasisha watumiaji kuota jinsi Ethereum inaweza kubadilisha ulimwengu. Inapaswa kuwahamasisha watu kuchunguza, kucheza na kucheza kwa kutumia zana na programu za mfumo ikolojia wa Ethereum. + +- **Radical:** Tovuti inapaswa kuwasilisha malengo makuu ya Ethereum ya kubadilisha ulimwengu kwa njia yenye maana. Inapaswa kuwa wazi kuwa Ethereum sio tu safu mpya ya teknolojia - ni teknolojia ya mabadiliko. +- **Uwezeshaji kupitia elimu:** Tovuti inapaswa kuwaelimisha watu ili waweze kuelewa uwezo wa Ethereum, wapate nafasi yao katika mfumo wa ikolojia, na wajisikie wamewezeshwa kushiriki ndani yake. + +Mwelekeo Unaoonekana • Maudhui + +### 2. Kwa wote {#2-universal} + +Ethereum ni mradi wa kimataifa, umfumo mtawanyo na watazamaji wetu wanaonyesha hili. Tovuti inapaswa kutamani kupatikana kwa kila mtu, na nyeti kwa tamaduni nyingi za ulimwengu. + +- **Inayofikika:** Tovuti inapaswa kufuata miongozo ya ufikivu - ikiwa ni pamoja na kwa watu wenye miunganisho ya kipimo data cha chini. +- **Moja kwa moja:** Tovuti inapaswa kuwa rahisi na isiyo na utata. Nakala haipaswi kutumia lugha ambayo inaweza kutafsiriwa vibaya au kupotea katika tafsiri. +- **Ethereum ina vipengele vingi:** Ethereum ni mradi, msingi wa msimbo, jumuiya, na dira. Ethereum ni ya thamani kwa watu tofauti kwa sababu tofauti, na kuna njia nyingi za kuhusika. + +Mifumo ya uandishi • Matumizi ya rangi • Mwelekeo Unaoonekana • Maudhui + +### 3. Hadithi Nzuri {#3-a-good-story} + +Tovuti inapaswa kufanya kazi kama hadithi nzuri. Wageni wako safarini, na maudhui unayochangia ni sehemu yake. Michango yako inapaswa kutoshea ndani ya masimulizi ya wazi: yenye mwanzo (utangulizi/mahali pa kuingilia), katikati (seti ya mafunzo na maarifa), na mwisho (viungo) vya nyenzo husika, au hatua zinazofuata). + +- **Kidaraja**: Usanifu wazi wa habari, uliopangwa kidaraja huwasaidia wageni wa ethereum.org kuvinjari tovuti "kama hadithi" wanapotafuta kufikia malengo yao. +- **Jiwe la Kukanyagia:** Sisi ni jiwe la kukanyagia kwa yeyote anayetafuta majibu. Hatutaki kubadilisha au kuwa mbadala wa rasilimali nyingi ambazo tayari zipo. Tunatoa jibu na kutoa hatua zinazofuata za kuaminika. + +Safari za Mtumiaji • Maudhui + +### 4. Inayoaminika {#4-credible} + +Huenda watu wanatafuta kuanzishwa kwao kwa mfumo ikolojia wa Ethereum au wanaweza kuwa na wasiwasi. Tambua wajibu huo katika jinsi unavyowasiliana. Hakikisha kwamba wote wawili wanaondoka kwa ujasiri mkubwa katika mfumo wa ikolojia wa Ethereum. + +- **Mpya:** Imesasishwa kila wakati. +- **Uthibitisho wa Kijamii:** Onyesha ukubwa, utofauti na shughuli za mfumo wa ikolojia. +- **Thabiti:** Uthabiti katika usanifu na maudhui huwasilisha uaminifu. + +Mwelekeo Unaoonekana • Maudhui + +### 5. Uboreshaji wa Pamoja {#5-collaborative-improvement} + +Tovuti ni zao la wachangiaji wengi, kama vile mfumo wa ikolojia kwa ujumla. + +- **Wazi:** Idhimishe uwazi wa msimbo chanzo, michakato na miradi katika mfumo wote wa ikolojia. +- **Inayoweza Kupanuliwa:** Mfumo wa sehemu ni lengo muhimu nyuma ya kila kitu tunachofanya, na kwa hivyo michango inapaswa pia kuwa ya kimfumo wa sehemu. Usanifu mkuu, msimbo wa kijenzi na utekelezaji wa tovuti unapaswa kuiwezesha kupanuliwa kwa urahisi katika siku zijazo. +- **Kijaribio:** Tunafanya majaribio, kupima na kurudia kila mara. +- **Shirikishi:** Mradi huu unatuleta sote pamoja. +- **Endelevu:** Kuweka mazingira kwa ajili ya matengenezo ya muda mrefu na jamii + +Unaweza kuona kanuni zetu za usanifu zikifanya kazi [katika tovuti yetu yote](/). + +## Toa maoni {#give-feedback} + +**Shiriki maoni yako kuhusu hati hii!** Mojawapo ya kanuni zetu zilizopendekezwa ni “**Uboreshaji wa Pamoja**” ambayo ina maana kwamba tunataka tovuti iwe zao la wachangiaji wengi. Kwa hiyo katika roho ya kanuni hiyo, tunataka kushiriki kanuni hizi za kubuni na jumuiya ya Ethereum. + +Ingawa kanuni hizi zinalenga tovuti ya ethereum.org, tunatumai kuwa nyingi kati yazo zinawakilisha maadili ya mfumo mzima wa ikolojia wa Ethereum. Labda hata unataka kuingiza baadhi yao katika mradi wako mwenyewe! + +Tujulishe mawazo yako kwenye [seva ya Discord](https://discord.gg/ethereum-org) au kwa [kufungua hoja](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/sw/contributing/design/adding-design-resources/index.md b/public/content/translations/sw/contributing/design/adding-design-resources/index.md new file mode 100644 index 00000000000..49bffa834e4 --- /dev/null +++ b/public/content/translations/sw/contributing/design/adding-design-resources/index.md @@ -0,0 +1,69 @@ +--- +title: Kuongeza rasilimali za kubuni +description: Miongozo na mahitaji ya kuhakikisha ubora wa vifaa vya kubuni kwenye ethereum.org +lang: sw +--- + +# Kuongeza rasilimali za usanifu {#adding-design-resources} + +Mtu yeyote anaweza kupendekeza nyenzo mpya za usanifu kwenye [ukurasa wa Usanifu na UX katika web3](/developers/docs/design-and-ux/). + +Kuwa na ufahamu kwamba lengo la ukurasa huu ni juu ya kutoa thamani ya mtumiaji kwa wabunifu wa Mtandao wanaotamani. Sehemu ya kubuni si huko kutangaza huduma zako, bidhaa, au majukwaa. + +Ili kuhakikisha kwamba kudumisha kiwango cha juu cha habari na endeleza ufahamu wa dhamani, imara hati ya orodha: + +## Tafiti za Utafiti na Dashibodi {#Research-studies} + +1. Mbinu Sahihi + +a. Mbinu inapaswa kufafanua wazi jinsi habari kukusanya. + +ba. Idadi ya washiriki wanaohusika katika utafiti inapaswa kutajwa. + +ka. Mbinu za utafiti wafanyakazi inapaswa kuelezwa. + +2. Umuhimu kwa Mtandao wabunifu na kawaida matukio ya matumizi ya kubuni + +a. Mada ya utafiti inapaswa kuwa muhimu kwa wabunifu wa Mtandao na kushughulikia kesi za kawaida za matumizi ya muundo. + +3. Kuzingatia kutoa ufahamu + +a. Lengo kuu la maandishi inapaswa kuwa kushiriki ufahamu badala ya endeleza mradi maalum au kampuni. + +## Makala {#Articles} + +1. Umuhimu kwa Mtandao wabunifu / watafiti na kawaida Mtandao matukio ya matumizi ya kesi + +a. Mada ya makala inapaswa kuwa muhimu kwa wabunifu wa Mtandao na watafiti, kuelekeza kesi za kawaida za matumizi ya muundo wa Mtandao. + +2. Ubora wa msingi wa kuandika + +a. Makala hiyo Haipaswi kuwa na makosa ya sarufi na ya herufi. + +ba. Msisitizo unapaswa kuwekwa juu ya kutoa ufahamu muhimu na kujifunza. + +ka. Maandishi yapasa kuwa mafupi na ya moja kwa moja. + +3. Kusudi la maandishi + +a. Lengo kuu la makala inapaswa kuwa kushiriki ufahamu badala ya kuendeleza mradi fulani au kampuni. + +## Jumuiya / DAO {#Communities-and-DAOs} + +1. Tovuti lazima wazi kuonyesha jinsi ya kujiunga na DAO/ jumuiya + +2. Manufaa zilizo wazi za ushirikiano + +a. Manufaa za kuwa mshiriki inapaswa kuonyeshwa waziwazi. + +**Mifano**: kupokea mrejesho kuhusu kazi, kupata fursa za kazi au zawadi, kushiriki maarifa ya usanifu na utafiti. + +3. Mawasiliano yenye bidii na yenye nguvu kuhusu ugomvi + +a. Jumuiya ya Discord inapaswa kuonyesha mawasiliano ya kupendeza na ya kushiriki. + +ba. Wasimamizi wanapaswa kushiriki kikamilifu katika kudumisha jamii na kuwezesha majadiliano. + +ka. Jamii inapaswa kuonyesha rekodi ya mazungumzo ya dhamani na yenye tija ndani ya wiki mbili zilizopita. + +Kwa kuzingatia vigezo hivi, tuna lengo mlezi mazingira ya kusisimua na kushiriki maarifa ndani ya jamii yetu. Tunaamini kuwa hati hii ya orodha nyeupe kuhakikisha kwamba watumiaji wetu wanapata rasilimali za kuaminika, muhimu, na zenye ufahamu. Asante kwa kuelewa na ushirikiano wako katika kudumisha ubora wa yaliyomo ndani ya jukwaa letu. diff --git a/public/content/translations/sw/contributing/design/index.md b/public/content/translations/sw/contributing/design/index.md new file mode 100644 index 00000000000..97b56ececd2 --- /dev/null +++ b/public/content/translations/sw/contributing/design/index.md @@ -0,0 +1,77 @@ +--- +title: Mchango wa usanifu +description: Mchango wa usanifu kwa ethereum.org +lang: sw +--- + +# Mchango wa usanifu kwa ethereum.org {#design-contributions} + +Usanifu ni sehemu muhimu ya mradi wowote, na kwa kutumia muda wako na ujuzi wako wa usanifu kwa ethereum.org, unaweza kusaidia kuboresha hali ya utumiaji kwa wageni wetu. Kuchangia katika mradi wa chanzo-wazi kunatoa fursa ya kupata uzoefu muhimu na kukuza ujuzi wako katika mazingira ya ushirikiano. Utapata fursa ya kufanya kazi na wabunifu wengine, wasanidi programu, na wanajamii, ambao wote watakuwa na mitazamo na maarifa yao ya kipekee. + +Mwishowe, hii ni njia nzuri ya kujenga jalada mbalimbali na la kuvutia ambalo linaonyesha ujuzi wako wa usanifu. + +## Jinsi ya kuchangia? + +###  Toa maoni kuhusu mifano ya usanifu ya awali {#design-critique} + +Wakati mwingine tunahitaji msaada katika kujaribu mawazo yetu ghafi. Hii ni njia nzuri ya jinsi ya kuchangia bila maarifa yoyote ya kiufundi. + +1. Timu ya usanifu itashiriki muundo wa dhihaka kwenye [Discord](https://discord.com/invite/ethereum-org) na kwenye [GitHub](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8). +2. Utaongozwa kupitia miundo ili kutoa maoni kupitia kazi ya maoni. +3. Matokeo yatashirikiwa katika suala la GitHub na kisha kufungwa na timu. + +###  Shiriki katika utafiti wa tafiti {#answer-surveys} + +Toa maoni kwenye tovuti yetu kwa: + +1. Kutembelea ethereum.org na kusoma kurasa. +2. Kubofya wijeti ya maoni kwenye kona ya chini kulia na kujibu maswali yanayohusiana na usanifu na maudhui. +3. Zingatia maswali ya muundo huru. + +###  Tafuta masuala yanayohusiana na usanifu kwenye tovuti na uyaripoti {#report-design-issues} + +ethereum.org ni tovuti inayokua kwa kasi na vipengele na maudhui mengi. Baadhi ya UI inaweza kupitwa na wakati kwa urahisi au inaweza kuboreshwa. Ukikutana na tukio kama hilo, tafadhali liripoti ili lipate usikivu wetu. + +1. Pitia tovuti na uzingatie usanifu wake. +2. Piga picha za skrini na uandike madokezo ukiona masuala yoyote ya kuona au ya UX. +3. Ripoti masuala yaliyopatikana kwa kutumia [ripoti ya hitilafu](https://github.com/ethereum/ethereum-org-website/issues/new/choose). + +###  Pendekeza mabadiliko ya usanifu {#propose-design-changes} + +Ikiwa unajisikia vizuri kukabiliana na changamoto za usanifu, unaweza kutembelea bodi yetu ya masuala ya GitHub na kuchuja [masuala yanayohusiana na usanifu](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8). + +1. Pitia tovuti yetu na uzingatie usanifu wake au nenda kwenye hazina yetu ya GitHub na upitie masuala yaliyotiwa alama ya [tagi ya “Usanifu unahitajika”](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8). +2. Pata wazo la suluhisho na ulisanifu. (ikiwezekana kwa kutumia [mfumo wetu wa usanifu](https://www.figma.com/community/file/1134414495420383395)). +3. Pendekeza suluhisho katika suala linalolingana la GitHub au [unda jipya.](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A&template=feature_request.yaml&title=Feature+request) +4. Subiri timu ya usanifu ipitie. + +###  Jenga Mfumo wa Usanifu pamoja {#Contribute-to-design-system} + +Mfumo wetu wa usanifu hufanya usanifu wa ethereum.org uwe wa kufurahisha na rahisi. Ikiwa wewe ni mbunifu mwenye uzoefu, unaweza kutusaidia kuandaa vipengele vingi vya tovuti. + +1. Chagua suala la kufanyia kazi kutoka kwa [bodi ya mfumo wa usanifu](https://github.com/ethereum/ethereum-org-website/labels/design%20system) kwenye GitHub au unda jipya. +2. Omba suala lililochaguliwa lipewe wewe. +3. Anza kusanifu kijenzi kilichoombwa katika Figma. +4. Shiriki na timu ya usanifu kwenye GitHub pindi utakapohitaji mapitio au mwongozo. +5. Timu ya usanifu itapitia. +6. Timu ya usanifu itajumuisha mabadiliko katika faili kuu na kuchapisha faili hiyo kwa jamii. + +###  Andika maudhui yanayohusiana na usanifu kwenye tovuti {#write-design-articles} + +Jumuiya ya wasanidi programu wa Ethereum ina nguvu, lakini jumuiya ya usanifu iko nyuma kidogo. Ikiwa wewe ni mbunifu mwenye ujuzi wa web3, tafadhali fikiria kushiriki mafunzo yako na jumuiya kubwa ili sote tuweze kukua na kuboresha pamoja; tuna [ukurasa wa usanifu wa Ethereum](/developers/docs/design-and-ux/) unaoweza kuchangia. Unaweza pia kuangalia [sera zetu za kuorodhesha](/contributing/design/adding-design-resources). + +1. Pata mawazo juu ya mada za usanifu ambazo zinapaswa kushughulikiwa kwenye ethereum.org na ambazo zingekuwa za manufaa kwa wabunifu katika nyanja hii. +2. Nenda kwenye hazina yetu ya GitHub na [fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new) ukipendekeza mada (usiiandike maudhui bado). +3. Subiri timu ya usanifu iidhinishe. +4. Mara baada ya kuidhinishwa, andika maudhui. +5. Wasilisha katika suala linalolingana la GitHub. + +###  Chora vielelezo vipya {#prepare-illustrations} + +Taswira ni mojawapo ya zana zenye nguvu zaidi za kuelezea mada dhahania. Kuna uwezo mkubwa kwa kuongeza michoro na infographics. Hata hivyo, picha moja inaweza kusema maneno elfu. + +1. Nenda kwenye tovuti yetu na uone kurasa ambapo infographics mpya zinaweza kuongezwa. +2. Hakikisha kwamba mtindo wa kielelezo unalingana na [rasilimali](/assets/) zetu. +3. Nenda kwenye hazina yetu ya GitHub na [fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new) ukipendekeza kielelezo. +4. Timu ya usanifu itaipitia. +5. Tunaunda suala jipya la kumuuliza msanidi programu atekeleze picha mpya. diff --git a/public/content/translations/sw/contributing/index.md b/public/content/translations/sw/contributing/index.md new file mode 100644 index 00000000000..faf6332c8ad --- /dev/null +++ b/public/content/translations/sw/contributing/index.md @@ -0,0 +1,120 @@ +--- +title: Kuchangia +description: Jifunze kuhusu njia tofauti unazoweza kuchangia kwenye ethereum.org +lang: sw +--- + +# Kuchangia kwenye ethereum.org 🦄 {#contributing-to-ethereumorg} + +Ethereum.org ni mradi wa chanzo-wazi unaoendeshwa na wachangiaji **12,000+** wanaosaidia kutafsiri, kuandika, kubuni na kudumisha tovuti. + +Sisi ni jumuiya karibishi ambayo itakusaidia kukua na kujifunza katika mfumo ikolojia wa Ethereum huku pia ukichangia kwa maana na kupata uzoefu wa vitendo! + +## Njia za kuchangia {#ways-to-contribute} + +**Tafsiri** + +- [Jiunge na programu ya utafsiri](/contributing/translation-program/) – Tusaidie kuleta ethereum.org katika lugha mpya + +**Uendelezaji** + +- [Fanyia kazi suala lililo wazi](https://github.com/ethereum/ethereum-org-website/issues) – Kazi tuliyobaini inahitaji kufanywa + +**Ubuni** + +- [Saidia kubuni tovuti](/contributing/design/) – Wabunifu wa viwango vyote wanaweza kuchangia kuboresha tovuti + +**Maudhui** + +- [Tengeneza/hariri maudhui](/contributing/#how-to-update-content) – Pendekeza kurasa mpya au fanya mabadiliko madogo kwa yaliyopo tayari +- [Ongeza rasilimali za jamii](/contributing/content-resources/) – Ongeza makala au rasilimali yenye msaada kwenye ukurasa husika +- [Pendekeza rasilimali ya ubunifu](/contributing/design/adding-design-resources/) – Ongeza, sasisha, na ufute rasilimali muhimu za ubunifu +- [Maswali](/contributing/quizzes/) – Ongeza, sasisha, na ufute benki za maswali za maswali kwa ukurasa husika + +**Mawazo ya vipengele** + +- [Omba kipengele](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) – Tujulishe kuhusu mawazo yoyote uliyo nayo kwa kipengele kipya au muundo + +**Orodha za bidhaa** + +- [Ongeza ubadilishanaji](/contributing/adding-exchanges/) – Ongeza ubadilishanaji kwenye [kitafuta chetu cha ubadilishanaji](/get-eth/#country-picker) +- [Ongeza bidhaa](/contributing/adding-products/) – Ongeza mfumo mtawanyo wa kimamlaka au mkoba kwenye ukurasa husika +- [Ongeza zana za msanidi programu](/contributing/adding-developer-tools/) – Ongeza zana ya msanidi programu kwenye ukurasa husika +- [Ongeza safu ya 2](/contributing/adding-layer-2s/) – Ongeza safu ya 2 kwenye ukurasa husika +- [Ongeza bidhaa au huduma ya uwekaji hisa](/contributing/adding-staking-products/) – Ongeza mradi unaosaidia kuwezesha uwekaji hisa wa kibinafsi, uwekaji hisa wa pamoja, au uwekaji hisa kama huduma +- [Ongeza mkoba](/contributing/adding-wallets/) – Ongeza mkoba kwa ajili ya [ukurasa wa kupata mikoba](/wallets/find-wallet/) +- [Pendekeza mradi kwa ukurasa wetu wa DeSci](/contributing/adding-desci-projects/) – Ongeza mradi uliojengwa kwenye Ethereum unaochangia sayansi isiyogatuliwa + +Maswali yoyote? 🤔 Jiunge na [seva yetu ya Discord](https://discord.gg/ethereum-org) + +## Kazi nzuri za kwanza za kuanza kuchangia + +Hizi ni kazi chache za sasa ambazo unaweza kutusaidia kutatua na kuwajibika nazo. Kwa nyingi utahitaji akaunti ya GitHub kwani mabadiliko mengi kwenye tovuti hufanywa kupitia GitHub. + + + +Tazama kazi zote + +## Jinsi ya kufanyia kazi ethereum.org {#how-to-update-content} + +Ikiwa ungependa kuchangia katika [Programu ya Utafsiri](/contributing/translation-program/), tunakuomba ufungue akaunti kwenye [Crowdin](https://crowdin.com/project/ethereum-org). Kwa kila kitu kingine – kuongeza au kuhariri maudhui au vielelezo kwenye tovuti, kurekebisha hitilafu, kufanyia kazi kazi zilizo wazi – utahitaji akaunti ya [GitHub](https://github.com/). + +Masasisho yote hufanywa kupitia mchakato wa PR wa GitHub. Hii inamaanisha unatengeneza nakala ya ndani ya tovuti, unafanya mabadiliko yako na kuomba kuunganisha mabadiliko yako. Ikiwa hujawahi kufanya hivi hapo awali, fuata maagizo yaliyo chini ya [hifadhi yetu ya GitHub](https://github.com/ethereum/ethereum-org-website). + +Huhitaji ruhusa kufanyia kazi chochote, lakini ni vyema kila wakati kutujulisha unachopanga kufanya. Unaweza kufanya hivi kwa: + +- Kutoa maoni kuhusu suala au PR kwenye [GitHub](https://github.com/ethereum/ethereum-org-website) +- Kutuma ujumbe kwenye [seva yetu ya Discord](https://discord.gg/ethereum-org) + +Kabla ya kuchangia, hakikisha unafahamu: + +- maono yanayoendelea ya [ethereum.org](/about/) +- [kanuni zetu za ubunifu](/contributing/design-principles/) +- [mwongozo wetu wa mtindo](/contributing/style-guide/) +- [kanuni zetu za maadili](/community/code-of-conduct) + +## Jinsi maamuzi kuhusu tovuti yanavyofanywa {#how-decisions-about-the-site-are-made} + +Maamuzi kuhusu PR za kibinafsi, mageuzi ya muundo na masasisho makuu hufanywa na timu kutoka kote katika mfumo ikolojia wa Ethereum. Timu hii inajumuisha wasimamizi wa miradi, wasanidi programu, wabunifu, wataalamu wa masoko na mawasiliano, na wataalamu wa mada. Maoni ya jamii huarifu kila uamuzi: kwa hivyo tafadhali uliza maswali katika masuala, wasilisha PR, au wasiliana na timu: + +- [website@ethereum.org](mailto:website@ethereum.org) +- [@ethdotorg](https://twitter.com/ethdotorg) +- [Seva ya Discord](https://discord.gg/ethereum-org) + +### Tanbihi kuhusu wizi wa kazi za kitaaluma {#plagiarism} + +Tumia tu kazi yako halisi au maudhui ambayo una ruhusa ya kutumia unapochangia maudhui yoyote au kazi ya sanaa kwa ethereum.org. Miradi mingi ndani ya mfumo ikolojia wa Ethereum hutumia leseni za chanzo-wazi zinazoruhusu kushiriki habari kwa uhuru. Hata hivyo, ikiwa huwezi kupata habari hii, usijaribu kuiongeza kwenye ethereum.org. Maombi yoyote ya mabadiliko yatakayoonekana kuwa ni wizi wa kazi za kitaaluma yatakataliwa. + +## Mgeni kwenye chanzo-wazi? {#new-to-open-source} + +Tuna masuala yenye kizuizi kidogo cha kuingia kwenye hifadhi yetu ya GitHub yaliyoundwa mahususi kwa wasanidi programu ambao ni wageni kwenye chanzo-wazi yaliyoitwa [suala zuri la kwanza](https://github.com/ethereum/ethereum-org-website/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). + +## Dai Tokeni yako ya Mafanikio ya Onchain (OAT) {#oat} + +Ikiwa mchango wako utaunganishwa kwenye ethereum.org, utapata fursa ya kudai beji maalum kwenye [Galxe](https://app.galxe.com/quest/ethereumorg). Tokeni ya Mafanikio ya Onchain (OAT) ni uthibitisho kwamba ulisaidia kufanya mfumo ikolojia kuwa mzuri zaidi. + +[Zaidi kuhusu OAT](https://help.galxe.com/en/articles/9645630-create-quest-rewards#h_1c5d63ba03) + +### Jinsi ya kudai + +1. Jiunge na [seva yetu ya Discord](https://discord.gg/ethereum-org). +2. Bandika kiungo cha mchango wako kwenye chaneli ya `#🥇 | proof-of-contribution`. +3. Subiri mwanachama wa timu yetu akutumie kiungo cha OAT yako. +4. Dai OAT yako! + +Unapaswa kutumia mikoba ya kujihifadhi pekee kudai OAT. Usitumie akaunti za soko la kubadilishana au akaunti zingine ambazo huna funguo za faragha, kwani hizi hazitakuruhusu kufikia na kudhibiti OAT zako. + +## Dai GitPOAP yako {#claim-gitpoap} + +GitPOAP pia itatambua kiotomatiki mchango wako ulioounganishwa na kukuruhusu kuunda POAP ya kipekee ya wachangiaji kwenye jukwaa lao lenyewe! + +### Jinsi ya kudai {#how-to-claim} + +1. Tembelea [GitPOAP](https://www.gitpoap.io). +2. Unganisha na mkoba wako au hata kwa barua pepe yako kupitia chaguo la kuingia. +3. Tafuta jina lako la mtumiaji la GitHub, anwani ya ETH, majina ya ENS au GitPOAP yoyote ili kuangalia kama unastahiki. +4. Ikiwa akaunti yako ya GitHub inastahiki, basi utaweza kuunda GitPOAP! + +## Wachangiaji {#contributors} + + diff --git a/public/content/translations/sw/contributing/quizzes/index.md b/public/content/translations/sw/contributing/quizzes/index.md new file mode 100644 index 00000000000..d5e7cc744a8 --- /dev/null +++ b/public/content/translations/sw/contributing/quizzes/index.md @@ -0,0 +1,62 @@ +--- +title: Kuongeza jaribio +description: Hati sisi kutumia wakati wa kuongeza maswali kwa ethereum.org +lang: sw +--- + +# Maswali {#quizzes} + +Maswali ni fursa kwa watumiaji kujaribu kuona kama kuelewa yaliyomo kwenye ukurasa waliosoma tu. Maswali yanapaswa kutegemea tu yaliyomo kwenye ukurasa na haipaswi kuuliza juu ya habari ambayo zilizotajwa kwenye ukurasa. + +Maswali muundo kama kufuata. Swali haraka, 1 jibu sahihi na maelezo ya kwa nini ni sahihi, 3 majaribu yasiyo sahihi na maelezo ya kwa nini wao si sahihi. + +Baadhi ya mifano ya maswali ya sasa inaweza kupatikana hapa: + +- [Layer 2](/layer-2) +- [NFT](/nft/) +- [Ethereum ni nini?](/what-is-ethereum/) +- [ETH ni nini?](/what-is-ether/) + +## Kuongeza kujifunza jaribio + +Kama kuna ukurasa ambao haujatengenezewa maswali ya kujifunza, tafadhali [fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) kwa ajili yake. + +Tafadhali toa taarifa kufuatia: + +- Ukurasa unataka kuongeza jaribio kwenye +- 5 maswali na taarifa kufuatia: + - Sehemu ya ukurasa ambayo swali kulingana na + - Jibu la swali + - 1 jibu sahihi na maelezo ya kwa nini ni sahihi + - Majibu 3 yasiyo sahihi, kila moja ikiwa na ufafanuzi wa kwa nini si sahihi + +## Kuongeza swali la jaribio + +Kama kuna swali ambalo ungependa kuliongeza kwenye benki ya maswali kwa ajili ya jaribio, tafadhali [fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) na utoe taarifa zifuatazo: + +- Ukurasa unataka kuongeza swali jaribio juu ya +- Kwa kila swali kutoa taarifa kufuatia: + - Sehemu ya ukurasa ambayo swali kulingana na + - Jibu la swali + - 1 jibu sahihi na maelezo ya kwa nini ni sahihi + - Majibu 3 yasiyo sahihi, kila moja ikiwa na ufafanuzi wa kwa nini si sahihi + +## Tengeneza swali jaribio + +Kama kuna swali ambalo ungependa kulisasisha katika benki ya maswali kwa ajili ya jaribio, tafadhali [fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) na utoe taarifa zifuatazo: + +- Ukurasa unataka tengeneza swali jaribio juu ya +- Kwa kila swali kuwa tengeneza, kutoa taarifa kufuatia: + - Sehemu ya ukurasa ambayo swali kulingana na + - Swali haraka ya swali unataka tengeneza + - Tengeneza swali haraka + - 1 jibu sahihi na maelezo ya kwa nini ni sahihi + - Majibu 3 yasiyo sahihi, kila moja ikiwa na ufafanuzi wa kwa nini si sahihi + +## Kuondoa swali jaribio + +Kama maudhui hayapo tena kwenye ukurasa kwa ajili ya swali na linahitaji kuondolewa, tafadhali [fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) ili kuondoa swali na utoe taarifa zifuatazo: + +- Ukurasa ambao unataka kufuta swali la jaribio +- Swali ambalo unataka kufuta +- Maelezo ikiwa ni lazima kwa nini swali linapaswa kuondolewa diff --git a/public/content/translations/sw/contributing/translation-program/faq/index.md b/public/content/translations/sw/contributing/translation-program/faq/index.md new file mode 100644 index 00000000000..73abffa093d --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/faq/index.md @@ -0,0 +1,119 @@ +--- +title: Maswali yanayoulizwa mara nyingi kwenye progrmu hii ya ufasiri +lang: sw +description: Maswali yanayoulizwa mara nyingi juu ya programu ya ufasiri wa ethereum.org +--- + +# Mwongozo wa kutafsiri ethereum.org {#translating-ethereum-guide} + +Kama wewe ni mpya kwenye programu hii ya ufasiri na unawasiwasi wa kujiunga, kuna miongozo kadhaa itakusaidia kuanza. Tumia muongozo huu upate majibu juu ya maswali yanayopulizwa mara kwa mara. + +## Je ninaweza kupata malipo kwa kufasiri ethereum.org? {#compensation} + +Ethereum.org ni tovuti ya chanzo-cha-wazi, inamaanisha kwamba mtu yeyote anaweza kujihusisha na kuchangia. + +Programu ya ufasirir wa Ethereum.org ni ugani wa tovuti hii na inapangwa na falsafa sawa. + +Lengo la programu ya kutafsiri ni kufanya maudhui ya Ethereum kufikia na kupatikana kwa kila mmoja, bila kujali lugha wanayozungumza. Pia hurusu mtu yeyote anaezungumza lugha zaidi ya moja kujihusisha kwenye ikolojia ya Ethereum na kuchangia kwa njia rahisi. + +Kwasababu hii, programu ya ufasiri iko wazi na ya hiyari, na ushiriki wako haukupi dhamana ya malipo yoyote. Kama tungekuwa tunalipa wafasiri kwa idadi ya maneno wanayofasiri, tungealika wale wenye sifa nzuri na uzoefu katika kazi ya kutafsiri( wataalamu wa kutafsiri) kujiunga na programu ya ufasiri. Hii ingeifanya Programu ya Tafsiri kuwa ya kibaguzi na kutuzuia kufikia malengo yaliyoainishwa, haswa: kumruhusu kila mtu kushiriki na kujihusisha na mfumo ikolojia. + +Tunafanya kila juhudi kuwawezesha wachangiaji wetu kufanikiwa katika mfumo ikolojia wa Ethereum; motisha nyingi zisizo za kifedha zipo kama vile: [kutoa POAPs](/contributing/translation-program/acknowledgements/#poap) na [cheti cha mtafsiri](/contributing/translation-program/acknowledgements/#certificate), pamoja na kuandaa [Bao za wanaoongoza katika Tafsiri](/contributing/translation-program/acknowledgements/) na [kuorodhesha watafsiri wetu wote kwenye tovuti](/contributing/translation-program/contributors/). + +## Ninawezaje kutafsiri mifuatano yenye ``? {#tags} + +Sio kila mlolongo umeandikwa kwa maneno halisi. Kuna baadhi ya mifuatano ambayo ina maandishi mchanganyiko kama vile tagi za HTML (`<0>`, ``). Hii kwa kawaida ni kwa ajili ya viungo au mtindo mbadala katikati ya sentensi. + +- Tafsiri maneno yalio ndani ya tagi/vitambulisho lakini sio tagi zenyewe. Chochote kilicho ndani ya `<` na `>` hakipaswi kutafsiriwa au kuondolewa. +- Kuacha maneno salama, tushauri ubonyeze kitufe cha "kunakikili chanzo" chini kushoto. Hii itanakili maandishi ya mwanzo na kuyabandika kwenye sanduku la maandishi. Hii inakusaidia kutoa maelezo ni wapi tagi zinapatikana na inakusaidia kuepuka makosa. + +![Kiolesura cha Crowdin chenye kitufe cha kunakili chanzo kikiwa kimeangaziwa](./html-tag-strings.png) + +Unaweza kuhamsiha sehemu ya tagi ndani ya maandishi kuifanya kuwa halisi kulingana na lugha yako - hakikisha uanhamisha tagi nzima. + +Kwa maelezo ya kina zaidi kuhusu kushughulikia tagi na vijisehemu vya msimbo, tafadhali rejelea [Mwongozo wa Mtindo wa Tafsiri wa ethereum.org](/contributing/translation-program/translators-guide/#dealing-with-tags). + +## Maandishi yanaishi wapi? {#strings} + +Mara nyingi chanzo cha maandishi kinaweza kuwa na uhaba ili uweze kutafsiri ipasavyo. + +- Angalia katika "picha" hizi na "muktadha" kwa taarifa zaidi. Kwenye kitengo cha chanzo cha maandishi, utaona picha iliounganishwa itakayokuonyesh jinsi tunavyotumia muktadha wa maandshi. +- Kama bado huna uhakika, inua kibendera kwenye "kitengo cha maoni". [Huna uhakika jinsi ya kuacha maoni?](#comment) + +![Inaonyesha jinsi muktadha unavyoweza kutolewa kwa mfuatano wenye picha ya skrini](./source-string.png) + +![Mfano wa picha ya skrini iliyoongezwa kwa ajili ya muktadha](./source-string-2.png) + +## Nawezaje kuacha maoni au kuuliza maswali? Ningependa kunyanyua kibendera juu ya swala au makosa ya kiuandishi... {#comment} + +Kama unataka kunyoosha kibendera juu ya maandishi maalum yanayohitaji umakini, jisikie huru kuwasilisha maoni. + +- Bonyeza kitufe cha pili juu kulia kwako. Kichupo kilichofichw kitattokea upande wako wa kulia. Acha maoni mapya na bonyeza kitufe cha "suala" hapo chini. Unaweza kubainisha aina ya suala kwa kuchagua chaguzi kwenye orodha. +- Utakapoiwasilisha, itaripoitwa kwenye timu yetu. Tutataua tatizo na tutakupa taarifa kwa kujibu oni lako na kufunga suala. +- Ukitoa taarifa juu ya tafsiri isio sahihi, tafsiri na pendekezo lako vitafanyiwa uchunguzi na mzawa wa lugha hio kwenye uhakiki ujao. + +![Inaonyesha jinsi ya kutoa maoni na masuala](./comment-issue.png) + +## Kumbukumbu ya Tasfiri ni nini(KT)? {#translation-memory} + +Kumbukumbu ya Tasfiri ni nini(KT) ni huduma inayotolewa na Crowdin inayotunza maneno yaliotafsiriwa hapo awali katika ethereum.org. Pale maandishi yanpotafsiriwa, inatunzwa moja kwa moja kwenye KT. Hiki kinaweza kua kifaa kitakachokufaa na kukusaidia kuoka mda! + +- Angalia "mapendekezo ya KT na TK" na utaoina jinsi ambavyo watafsiri wengine wametafsiri kitu hicho hicho. Ukipata pendekezo lenye ufanano wa pointi za juu, jisikia huru kupendekeza tafsiri hio kwa kuibonyeza. +- Kama hama kitu kwenye orodha, unaweza kutafuta kwenye KT kwa tafsiri za nyuma zilizoshafanywa na kuzitumia tena ili kuwe na ufanano. + +![Picha ya skrini ya kumbukumbu ya tafsiri](./translation-memory.png) + +## Nawezaje kutumia faharasa ya crowdin? {#glossary} + +Ethereum ni moja ya maneno yenye utata katika kazi ya kutafsiri kama jinsi maneno mapya ya kiteknolojia hayatawekwa katika lugha zingine hiivi karibuni. Licha ya hilo kuna maneno yenye maana tofauti katika mazingira tofauti. [Zaidi kuhusu kutafsiri istilahi za Ethereum](#terminology) + +Maktaba ya Crowdin ndio sehemu nzuri ya kufanya uhakiki wa maneno na maana zake. Kuna namna mbili za kufikia maktaba. + +- Kwanza, pale unapokutana na neno lililopigiwa mstari, unaweza kutumia kipanya kuona maana yake kwa ufupi. + +![Mfano wa ufafanuzi wa faharasa](./glossary-definition.png) + +- Pili, utakapoona neno geni sana kwako lakini halijapigiwa mstari, unaweza kulitafuta kwenye maktaba ( kitufer cha tatu cha safu ya kulia). Utapata maana ya maneno maalum na yale yanayotumika mara nyingi kwenye mradi. + +![Picha ya skrini inayoonyesha mahali pa kupata kichupo cha faharasa katika Crowdin](./glossary-tab.png) + +- Kama bado hujalipata, ni nafasi yako ya kuongeza neno/maneno mapya! Tunashauri kuangalia neno kwenye injini ya utafutaji na kuongeza maelezoi kwenye maktaba. Itakua msaada mkubwa sana kwa watafsiri wengine ili waweze kuelewa maana kamili ya neno au sentesi ilioandikwa. + +![Picha ya skrini inayoonyesha jinsi ya kuongeza neno la faharasa kwa Crowdin](./add-glossary-term.png) + +### Sera ya tafsiri ya istilahi {#terminology} + +_Kwa majina (chapa, makampuni, watu) na istilahi mpya za teknolojia (Mnyororo Kioleza, shard chains, nk.)_ + +Ethereum inaleta maneno mapya mengi yaliosarafiwa hivi karibuni. Baadhi ya maneno yatatofautina kati ya mtafsiri mmoja na mwingine kwakua hamna tafsiri halisi ya lugha iliotafsiriwa. Tofauti hizi zinaweza kuleta kutokuelewana na kupunguza usomekaji. + +Kwasababu za utofauti tofauti wa kiismu na viwango tofauti katika kila lugha, imekua ngumu sana kukaribia kua na neno moja la muungano wa sera za utafsiri amabazo zinaweza kutumiwa na lugha husika. + +Baada ya kuzingatiwa kw umakini, tumeamua kuacha maneno yanayotumika mara kwa mara iwe uamuzi wako wewe, mtafsiri. + +Tunapendekeza, pale unapokutana na neno ambalo ni geni kwako: + +- Rejelea [Faharasa ya istilahi](#glossary), unaweza kupata jinsi watafsiri wengine walivyotafsiri hapo awali. Kama unafikiri tafsiri ya hapo mwanzo sio sahihi, jisikie huru kutunza tafsri yako kwa kuongeza maneno kwenye maktaba ya Crowdin. +- Iwapo tafsiri kama hiyo ya awali haipo katika Faharasa, tunakuhimiza utafute kwenye injini ya utafutaji au makala ya maudhui ambayo yanaonyesha jinsi neno hili linavyotumika katika jumuiya yako. +- Ikiwa hutapata marejeleo yoyote hata kidogo, jisikie huru kuamini angavu yako na kupendekeza tafsiri mpya kwa lugha yako! +- Iwapo hujiamini kufanya hivyo, liache neno bila kutafsiriwa. Wakati mwingine, maneno ya Kiingereza ni zaidi ya kutosha katika kutoa ufafanuzi sahihi. + +Tunapendekeza uache majina ya chapa, makampuni na wafanyakazi bila kutafsiriwa kama tafsiri inaweza kusababisha mkanganyiko usiohitajika na matatizo ya SEO. + +## Mchakato wa uhakiki unafanyaje kazi? {#review-process} + +Ili kuhakikisha kiwango fulani cha ubora na uthabiti katika tafsiri zetu, tunafanya kazi na [Acolad](https://www.acolad.com/), mmoja wa watoa huduma wakubwa zaidi wa lugha ulimwenguni. Acolad ina wataalamu wa lugha 20,000, ambayo ina maana kwamba wanaweza kutoa wahakiki wa kitaalamu kwa kila lugha na aina ya maudhui tunayohitaji. + +Mchakato wa uhakiki ni wa moja kwa moja; pindi seti ya maudhui inapotafsiriwa 100%, tunaagiza uhakiki kwa kundi hilo la maudhui. Mchakato wa uhakiki unafanyika moja kwa moja katika Crowdin. Uhakiki ukikamilika, tunasasisha tovuti na maudhui yaliyotafsiriwa. + +## Naongezaje maudhui kwenye lugha yangu? {#adding-foreign-language-content} + +Kwa sasa, maudhui yote yasiyo ya kiingereza yanatafsiriwa moja kwa moja kutoka kwenye chanzo kilochondikwa kwa lugha ya kiingereza, na maudhui yoyote amabayo hayapo katika lugha ya kiingereza hayawezi kuongezwa na lugha zingine. + +Ili kupendekeza maudhui mapya kwa ajili ya ethereum.org, unaweza [kufungua suala](https://github.com/ethereum/ethereum-org-website/issues) kwenye GitHub. Kama kuna maudhui yalioongezwa, yataandikwa kwa kiingereza na kutafsiriwa kwenda kwenye lugha zingine kwa kutumia Crowdin. + +Tunampango wa kuongeza na kuunga mkono maudhui yaongezwe katika kwa kutumia lugha zingine hivi karibuni. + +## Wasiliana nasi {#contact} + +Asante kwa kusoma haya yote. Tunatumaini hii itakusaidia kuingia kwenye programu yetu. Jisikie huru kujiunga na [chaneli yetu ya tafsiri ya Discord](https://discord.gg/ethereum-org) kuuliza maswali na kushirikiana na watafsiri wengine, au wasiliana nasi kwa translations@ethereum.org! diff --git a/public/content/translations/sw/contributing/translation-program/how-to-translate/index.md b/public/content/translations/sw/contributing/translation-program/how-to-translate/index.md new file mode 100644 index 00000000000..fc7a3e3f3b0 --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/how-to-translate/index.md @@ -0,0 +1,92 @@ +--- +title: Jinsi ya kutafsiri +lang: sw +description: Maagizo ya kutumia Crowdin kutafsiri ethereum.org +--- + +# Jinsi ya kutafsiri {#how-to-translate} + +## Mwongozo wa kuona {#visual-guide} + +Kwa wanaojifunza zaidi kwa kuona, tazama Luka akielezea jinsi ya kujiandaa kutumia Crowdin. Vinginevyo, unaweza kupata hatua sawa katika mfumo wa maandishi katika sehemu inayofuata. + + + +## Mwongozo wa maandishi {#written-guide} + +### Jiunge na mradi wetu katika Crowdin {#join-project} + +Utahitaji kuingia katika akaunti yako ya Crowdin au ujisajili ikiwa huna. Kinachohitajika ili kujisajili ni akaunti ya barua pepe na nenosiri. + + + Jiunge na mradi + + +### Fungua lugha yako {#open-language} + +Baada ya kuingia katika Crowdin, utaona maelezo ya mradi na orodha ya lugha zote zinazopatikana. +Kila lugha pia ina maelezo kuhusu jumla ya maneno yanayoweza kutafsiriwa na muhtasari wa kiasi cha maudhui yaliyotafsiriwa na kuidhinishwa katika lugha maalum. + +Fungua lugha unayotaka kutafsiri ili kuona orodha ya faili, zinazopatikana kwa ajili ya kutafsiriwa. + +![Orodha ya lugha katika Crowdin](./list-of-languages.png) + +### Tafuta hati ya kufanyia kazi {#find-document} + +Maudhui ya tovuti yamegawanywa katika idadi ya hati na makundi ya maudhui. Unaweza kuangalia maendeleo ya kila hati upande wa kulia – kama maendeleo ya tafsiri ni chini ya 100%, tafadhali changia! + +Huioni lugha yako kwenye orodha? [Fungua suala](https://github.com/ethereum/ethereum-org-website/issues/new/choose) au uliza katika [Discord](https://discord.gg/ethereum-org) yetu + +![Faili zilizotafsiriwa na ambazo hazijatafsiriwa katika Crowdin](./crowdin-files.png) + +Dokezo kuhusu makundi ya maudhui: tunatumia 'makundi ya maudhui' ndani ya Crowdin ili kupata maudhui yenye kipaumbele cha juu zaidi yatolewe kwanza. Unapoangalia lugha, kwa mfano, [Filipino](https://crowdin.com/project/ethereum-org/fil#) utaona folda za makundi ya maudhui (\"1. Ukurasa wa nyumbani\", \"2. Mambo muhimu\", \"3. Kuchunguza\", n.k.). + +Tunakuhimiza kutafsiri kwa utaratibu huu wa nambari (1 → 2 → 3 → ⋯) ili kuhakikisha kurasa zenye athari kubwa zaidi zinatafsiriwa kwanza. + +### Tafsiri {#translate} + +Baada ya kuchagua faili unayotaka kutafsiri, itafunguka kwenye kihariri cha mtandaoni. Ikiwa hujawahi kutumia Crowdin hapo awali, unaweza kutumia mwongozo huu wa haraka kupitia misingi. + +![Kihariri cha mtandaoni cha Crowdin](./online-editor.png) + +**_1 – Upau wa pembeni wa kushoto_** + +- Hazijatafsiriwa (nyekundu) – maandishi ambayo hayajafanyiwa kazi bado. Hizi ndizo nyanja unazopaswa kutafsiri. +- Zilizotafsiriwa (kijani) – maandishi ambayo tayari yametafsiriwa, lakini bado hayajakaguliwa. Unakaribishwa kupendekeza tafsiri mbadala, au kupiga kura kwenye zilizopo kwa kutumia vitufe vya ‘’+’’ na ‘’-‘‘ katika kihariri. +- Zilizoidhinishwa (alama ya tiki) – maandishi ambayo tayari yamekaguliwa na kwa sasa yanapatikana kwenye tovuti. + +Unaweza pia kutumia vitufe vilivyo juu kutafuta nyanja maalum, kuzichuja kulingana na hadhi au kubadilisha mwonekano. + +**_2 – Eneo la kihariri_** + +Eneo kuu la kutafsiri – maandishi chanzo huonyeshwa juu, pamoja na muktadha wa ziada na picha za skrini, ikiwa zinapatikana. +Ili kupendekeza tafsiri mpya, weka tafsiri yako kwenye nyanja ya ‘’Weka tafsiri hapa’’ na ubofye Hifadhi. + +Unaweza pia kupata tafsiri zilizopo za nyanja na tafsiri katika lugha zingine katika sehemu hii, pamoja na padanifu za kumbukumbu ya tafsiri na mapendekezo ya tafsiri ya mashine. + +**_3 – Upau wa pembeni wa kulia_** + +Hapa ndipo unaweza kupata maoni, maingizo ya kumbukumbu ya tafsiri na maingizo ya faharasa. Mwonekano chaguo-msingi unaonyesha maoni na huwaruhusu watafsiri kuwasiliana, kuibua masuala au kuripoti tafsiri zisizo sahihi. + +Kwa kutumia vitufe vilivyo juu, unaweza pia kubadili kwenda kwenye Kumbukumbu ya Tafsiri, ambapo unaweza kutafuta tafsiri zilizopo, au kwenye Faharasa, ambayo ina maelezo na tafsiri za kawaida za istilahi muhimu. + +Unataka kujifunza zaidi? Jisikie huru kuangalia [nyaraka kuhusu kutumia kihariri cha mtandaoni cha Crowdin](https://support.crowdin.com/online-editor/) + +### Mchakato wa ukaguzi {#review-process} + +Mara tu utakapokamilisha tafsiri (yaani, faili zote za kundi la maudhui zinaonyesha 100%), huduma yetu ya kitaalamu ya kutafsiri itakagua (na pengine kuhariri) maudhui. Mara tu ukaguzi utakapokamilika (yaani, maendeleo ya ukaguzi ni 100%), tutayaongeza kwenye tovuti. + + + + + Tafadhali usitumie tafsiri ya mashine kutafsiri mradi. Tafsiri zote zitakaguliwa kabla ya kuongezwa kwenye tovuti. Ikiwa tafsiri zako zilizopendekezwa zitagundulika kuwa zimetafsiriwa na mashine, zitakataliwa na wachangiaji wanaotumia tafsiri ya mashine mara kwa mara wataondolewa kwenye mradi. + + + +### Wasiliana nasi {#get-in-touch} + +Je, una maswali yoyote? Au unataka kushirikiana na timu yetu na watafsiri wengine? Tafadhali chapisha katika chaneli ya #translations ya [seva yetu ya Discord ya ethereum.org](https://discord.gg/ethereum-org) + +Unaweza pia kuwasiliana nasi kupitia translations@ethereum.org + +Asante kwa ushiriki wako katika Mpango wa Tafsiri wa ethereum.org! diff --git a/public/content/translations/sw/contributing/translation-program/index.md b/public/content/translations/sw/contributing/translation-program/index.md new file mode 100644 index 00000000000..3a860a7425e --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/index.md @@ -0,0 +1,91 @@ +--- +title: Mpango wa tafsiri +lang: sw +description: Taarifa kuhusu Mpango wa Tafsiri wa ethereum.org +--- + +# Mpango wa Tafsiri {#translation-program} + +Mpango wa Tafsiri ni juhudi shirikishi ya kutafsiri ethereum.org katika lugha tofauti ili kufanya tovuti ipatikane zaidi na mabilioni ya watu wasiozungumza Kiingereza kote ulimwenguni. + +![](./enterprise-eth.png) + +## Tusaidie kutafsiri {#help-us-translate} + +Mpango wa Tafsiri wa ethereum.org uko wazi na mtu yeyote anaweza kuchangia! + +1. Utahitaji kuingia katika akaunti yako ya Crowdin au ujisajili. +2. Chagua lugha unayotaka kuchangia. +3. Kabla ya kuanza, tafadhali angalia mwongozo wa [Jinsi ya kutafsiri](/contributing/translation-program/how-to-translate/) ili kujifunza jinsi ya kutumia Crowdin, na [Mwongozo wa Mtindo wa Tafsiri](/contributing/translation-program/translators-guide/) kwa vidokezo na mbinu bora. +4. Tafsiri za mashine hazitakubaliwa. +5. Tafsiri zote hukaguliwa kabla ya kuongezwa kwenye tovuti, kwa hivyo kutakuwa na ucheleweshaji mfupi kabla ya tafsiri zako kuonekana. + +_Jiunge na [Discord ya ethereum.org](https://discord.gg/ethereum-org) ili kushirikiana kwenye tafsiri, kuuliza maswali, kushiriki maoni na mawazo, au kujiunga na kikundi cha tafsiri._ + + + Anza kutafsiri + + +## Kuhusu Mpango wa Tafsiri {#about-us} + +Jamii ya Ethereu inalenga kuwa ya ulimwengu wote na inayojumuisha, japo maudhui yake yanahudumia wazungumzaji wa kiingereza tu, na ikiacha watu bilioni 6 wasiozungumza kiingereza. Ili Ethereum.org ifanye kazi kama lango la Ethereum kwa jamii duniani kote, tunaamini kutoa maudhui ya Ethereum kwa wasiozungumza kiingereza katika lugha zao ni kitu muhimu. + +Programu ya Ufasiri wa ethereum.org unalenga kuifanya Ethereum kupatikana kwa kila mmoja kwa kufasiri ethereum.org na maudhui mengine ya Ethereum kwenda katika lugha nyingi iwezekanavyo. + +Soma zaidi kuhusu [dhamira na maono](/contributing/translation-program/mission-and-vision) ya Mpango wa Tafsiri wa ethereum.org. + +### Maendeleo yetu hadi sasa {#our-progress} + +- [**6,900 +** watafsiri](/contributing/translation-program/contributors/) +- **Lugha 68** ziko hai kwenye tovuti +- [**milioni 2.89** za maneno yaliyotafsiriwa mwaka wa 2024](/contributing/translation-program/acknowledgements/) + + + +### Shukrani {#acknowledgements} + +Ethereum.org inatafsiriwa na maelfu ya wanajamii na wao ndio sehemu muhimu ya Mpango wa Tafsiri. +Tunataka kuwashukuru watafsiri wetu na kuwaunga mkono katika njia zao za kikazi. Hizi ni baadhi ya shukrani zetu kwa watafsiri: + +#### Cheti {#certificate} + +Ikiwa umechangia katika Mpango wa Tafsiri na angalau maneno 5,000 uliyotafsiri yameidhinishwa, unastahiki cheti cha mtafsiri wa ethereum.org. [Zaidi kuhusu vyeti](/contributing/translation-program/acknowledgements/#certificate) + +#### OATs {#oats} + +Wachangiaji katika Mpango wa Tafsiri wanastahiki OATs (tokeni za mafanikio za onchain) tofauti kulingana na idadi ya maneno waliyotafsiri mwaka wa 2024. OATs ni NFTs zinazothibitisha mchango wako kwa Mpango wa Tafsiri wa ethereum.org. [Zaidi kuhusu OATs](/contributing/translation-program/acknowledgements/#oats) + +#### Shukrani kwa watafsiri {#translator-acknowledgements} + +Shukrani za hadharani kwa watafsiri wetu wakuu kwa kutumia [bao za wanaoongoza](/contributing/translation-program/acknowledgements/) na [orodha ya wachangiaji wote kwenye Mpango wa Tafsiri](/contributing/translation-program/contributors/). + +#### Zawadi {#rewards} + +Hapo awali, tumewazawadia wachangiaji wetu wenye bidii zaidi kwa kuwapa tiketi za mikutano ya Ethereum kama vile [Devcon](https://devcon.org/en/) na [Devconnect](https://devconnect.org/), pamoja na bidhaa za kipekee za ethereum.org. + +Tunafikiria kila mara njia mpya na bunifu za kuwazawadia wachangiaji wetu, kwa hivyo kaa nasi! + +### Miongozo na rasilimali {#guides-and-resources} + +Ikiwa unachangia katika Mpango wa Tafsiri au unafikiria kujihusisha, unapaswa kuangalia miongozo ya tafsiri hapa chini: + +- [Mwongozo wa Mtindo wa Tafsiri](/contributing/translation-program/translators-guide/) _– maagizo na vidokezo kwa watafsiri wa ethereum.org_ +- [Maswali Yanayoulizwa Mara kwa Mara Kuhusu Tafsiri](/contributing/translation-program/faq/) _– maswali na majibu yanayoulizwa mara kwa mara kuhusu Mpango wa Tafsiri wa ethereum.org_ +- [Mwongozo wa mhariri wa mtandaoni wa Crowdin](https://support.crowdin.com/online-editor/) _– mwongozo wa kina wa kutumia mhariri wa mtandaoni wa Crowdin na baadhi ya vipengele vya hali ya juu vya Crowdin_ + +Kwa zana zingine muhimu za tafsiri, jumuiya za watafsiri na machapisho ya blogu ya Mpango wa Tafsiri, tafadhali tembelea [ukurasa wa Rasilimali](/contributing/translation-program/resources/). + +## Wasiliana nasi {#get-in-touch} + +Je, una maswali yoyote? Au unataka kushirikiana na timu yetu na watafsiri wengine? Tafadhali chapisha katika chaneli ya #translations ya [seva yetu ya Discord ya ethereum.org](https://discord.gg/ethereum-org) + +Unaweza pia kuwasiliana nasi kupitia translations@ethereum.org + +## Kuanzisha mpango wako wa tafsiri {#starting-a-translation-program} + +Tumejitolea kutafsiri maudhui ya Ethereum katika lugha nyingi iwezekanavyo na kufanya maudhui ya kielimu yapatikane kwa kila mtu. +Kulingana na mwelekeo wetu kwenye tafsiri, tunataka kusaidia miradi mingine ya Ethereum kupanga, kusimamia, na kuboresha juhudi zao za tafsiri. + +Kwa sababu hii, tumeunda [kitabu cha mwongozo cha Mpango wa Tafsiri](/contributing/translation-program/playbook/) ambacho kina vidokezo na mbinu bora tulizojifunza katika mchakato wa kutafsiri ethereum.org. + +Unataka kushirikiana zaidi au kutumia baadhi ya rasilimali zetu za tafsiri? Una maoni yoyote kuhusu kitabu cha mwongozo? Tungependa kusikia kutoka kwako kupitia translations@ethereum.org. diff --git a/public/content/translations/sw/contributing/translation-program/mission-and-vision/index.md b/public/content/translations/sw/contributing/translation-program/mission-and-vision/index.md new file mode 100644 index 00000000000..730146417ff --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/mission-and-vision/index.md @@ -0,0 +1,25 @@ +--- +title: Kazi na maono +lang: sw +description: Dhamira na maono ya Mpango wa Tafsiri wa ethereum.org +--- + +# Dhamira na maono {#mission-and-vision} + +Jamii ya Ethereu inalenga kuwa ya ulimwengu wote na inayojumuisha, japo maudhui yake yanahudumia wazungumzaji wa kiingereza tu, na ikiacha watu bilioni 6 wasiozungumza kiingereza. Ili Ethereum.org ifanye kazi kama lango la Ethereum kwa jamii duniani kote, tunaamini kutoa maudhui ya Ethereum kwa wasiozungumza kiingereza katika lugha zao ni kitu muhimu. + +Programu ya Ufasiri wa ethereum.org unalenga kuifanya Ethereum kupatikana kwa kila mmoja kwa kufasiri ethereum.org na maudhui mengine ya Ethereum kwenda katika lugha nyingi iwezekanavyo. + +## Dhamira yetu {#our-mission} + +- Kuto matoleo yaliotafsiriwa ya tovuti kuwawezweha wageni duniani kote kujifunza kuhusu Ethereum kwenye lugha zao za asili +- Wezesha ujio wa wanachama zaidi kwenye jumuiya ya kimataifa ya Ethereum +- Ruhusu kushiriki kwa urahisi zaidi na kujumuisha zaidi taarifa na maarifa ya Ethereum +- Wawezeshe wanajamii kuchangia tafsiri kwa Ethereum na kuweka alama zao kwenye mfumo wa ikolojia +- Tambua, ungana na, na utoe mwongozo kwa wachangiaji wenye shauku wanaotaka kujihusisha na mfumo ikolojia + +## Maono yetu {#our-vision} + +- Tafsiri maudhui muhimu kwa wanachama wa jumuiya ya Ethereum kutoka nchi na sehemu nyingi za dunia iwezekanavyo +- Kuunga mkono ugawanaji wa maarifa katika lugha mbalimbali ili kuunda jamii ya Ethereum iliyo na habari bora na iliyoelimika +- Kuongeza ushirikishwaji na ufikiaji wa Ethereum kwa kuondoa vizuizi vya lugha vinavyowazuia wasiozungumza Kiingereza kujiunga na mfumo wa ikolojia diff --git a/public/content/translations/sw/contributing/translation-program/playbook/index.md b/public/content/translations/sw/contributing/translation-program/playbook/index.md new file mode 100644 index 00000000000..806b4eea023 --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/playbook/index.md @@ -0,0 +1,317 @@ +--- +title: Kitabu cha mwongozo wa programu ya tafsiri +lang: sw +description: Mkusanyiko wa vidokezo na mambo muhimu ya kuzingatia unapoweka programu ya tafsiri +--- + +# Kitabu cha Mwongozo wa Programu ya Tafsiri {#translation-program-playbook} + +Kiingereza ni mojawapo ya lugha zinazozungumzwa zaidi ulimwenguni na ndiyo lugha inayosomwa zaidi ulimwenguni. Kwa vile Kiingereza ndiyo lugha inayotumiwa sana kwenye mtandao - hasa kwenye mitandao ya kijamii - na lugha za programu za lugha nyingi ni chache, maudhui mengi katika nafasi ya kiambajengo yameandikwa kwa lugha ya Kiingereza. + +Hata hivyo, kwa vile zaidi ya watu bilioni 6 duniani (zaidi ya 75% ya watu) hawazungumzi Kiingereza kabisa, hii inatoa kizuizi kikubwa cha kuingia Ethereum kwa idadi kubwa ya watu duniani. + +Kwa sababu hii, idadi inayoongezeka ya miradi katika anga inatazamia kupata maudhui yao kutafsiriwa katika lugha tofauti na kujanibishwa kwa jumuiya za kimataifa. + +Kutoa maudhui ya lugha nyingi ni njia rahisi nafanisi ya kukuza jumuiya yako ya kimataifa, kutoa elimu kwa wazungumzaji wasiozungumza Kiingereza, kuhakikisha maudhui na mawasiliano yako yanafikia hadhira pana zaidi, na kujumuisha watu wengi zaidi kwenye anga. + +Mwongozo huu unalenga kushughulikia changamoto na dhana potofu za kawaida kuhusu ujanibishaji wa maudhui. Inatoa mwongozo wa hatua kwa hatua wa kudhibiti maudhui, mchakato wa tafsiri na ukaguzi, uhakikisho wa ubora, ufikiaji wa watafsiri, na vipengele vingine muhimu vya mchakato wa ujanibishaji. + +## Usimamizi wa Maudhui {#content-management} + +Udhibiti wa maudhui ya tafsiri hurejelea mchakato wa kubadilisha utendaji kazi wa kiotomatiki, ambao huondoa hitaji la kurudiwa rudiwa kwa kazi ya mikono, kuboresha ufanisi na ubora, kuruhusu udhibiti bora na kuwezesha ushirikiano. + +Kuna mbinu nyingi tofauti za usimamizi wa maudhui katika mchakato wa ujanibishaji, kulingana na maudhui na mahitaji yako. + +Njia ya msingi ya kudhibiti maudhui ni kuunda faili za lugha mbili, zenye chanzo na maandishi lengwa. Hii haitumiki sana katika kutafsiri, kwani haitoi faida kubwa, mbali na unyenyekevu. + +Mashirika ya tafsiri kwa kawaida hukaribia usimamizi wa tafsiri kwa kutumia programu ya usimamizi wa tafsiri au zana za ujanibishaji, ambazo hutoa uwezo wa usimamizi wa mradi na kuruhusu udhibiti mkubwa zaidi wa faili, maudhui na wanaisimu. + +Soma zaidi kuhusu usimamizi wa maudhui: + +[Trados kuhusu usimamizi wa tafsiri ni nini](https://www.trados.com/solutions/translation-management/) + +[Neno kuhusu usimamizi wa maudhui ya lugha nyingi](https://phrase.com/blog/posts/multilingual-content-management/) + +### Programu ya Usimamizi wa Tafsiri {#translation-management-software} + +Kuna mifumo mingi ya usimamizi wa tafsiri na zana za ubadilishanaji wa lugha na tamaduni, na uchaguzi wa programu inategemea hasa mahitaji yako. + +Ingawa baadhi ya miradi huamua dhidi ya kutumia mifumo ya usimamizi wa tafsiri na kupendelea kushughulikia tafsiri kwa mikono ama moja kwa moja katika faili za lugha mbili au kwenye huduma za upangishaji, kama vile GitHub - hii inapunguza kwa kiasi kikubwa udhibiti, tija, ubora, ukubwa na uwezo wa kushirikiana. Mbinu kama hiyo inaweza kuwa na manufaa zaidi kwa miradi midogo au ya mara moja ya tafsiri. + +Mtazamo wa haraka wa baadhi ya zana zenye nguvu na zinazotumika sana za usimamizi wa tafsiri: + +**Bora kwa upataji vyanzo kutoka kwa umma na ushirikiano** + +[Crowdin](https://crowdin.com/) + +- Bure kwa miradi ya chanzo-wazi (idadi isiyo na kikomo ya misururu na miradi) +- TM na kamusi zinapatikana kwa mipango yote +- Fomati 60+ za faili zinazotumika, miunganisho 70+ ya API + +[Lokalise](https://lokalise.com/) + +- Bure kwa washiriki wawili wa timu, mipango inayolipishwa kwa wachangiaji zaidi (idadi ndogo ya mifuatano kwa mipango mingi) +- TM na kamusi zinapatikana kwa baadhi ya mipango ya kulipia +- Fomati 30+ za faili zinazotumika, miunganisho 40+ ya API + +[Transifex](https://www.transifex.com/) + +- Mipango ya kulipia pekee (idadi ndogo ya misururu kwa mipango mingi) +- TM na kamusi zinapatikana kwa mipango yote ya kulipia +- Fomati 30+ za faili zinazotumika, miunganisho 20+ ya API + +[Phrase](https://phrase.com/) + +- Mipango inayolipwa pekee (idadi isiyo na kikomo ya mifuatano ya mipango yote, idadi ndogo ya miradi na washiriki wa timu) +- TM na kamusi zinapatikana kwa baadhi ya mipango ya kulipia +- Fomati 40+ za faili zinazotumika, miunganisho 20+ ya API + +[Smartcat](https://www.smartcat.com/) + +- Mpango wa kimsingi usiolipishwa na vipengele vya juu vinavyolipwa (idadi isiyo na kikomo ya mifuatano na miradi ya mipango yote) +- TM na kamusi zinapatikana kwa mipango yote +- Fomati 60+ za faili zinazotumika, miunganisho 20+ ya API + +[POEditor](https://poeditor.com/) + +- Bila malipo kwa miradi ya programu huria (idadi ndogo ya mifuatano ya miradi yote, isiyo na kikomo kwa miradi huria) +- TM na kamusi zinapatikana kwa mipango ya kulipia +- Fomati 20+ za faili zinazotumika, miunganisho 10+ ya API + +na nyingine nyingi... + +**Zana za kitaalamu za kutafsiri** + +[SDL Trados Studio](https://www.trados.com/products/trados-studio/) + +- Mipango ya kulipia kwa watafsiri na timu zinazojitegemea +- Zana yenye nguvu sana ya tafsiri inayosaidiwa na kompyuta (CAT) na programu ya tija ya watafsiri + +[MemoQ](https://www.memoq.com/) + +- Toleo la bure lenye kikomo linapatikana na mipango kadhaa ya kulipia kwa vipengele vya hali ya juu +- Programu ya usimamizi wa tafsiri kwa makampuni, watoa huduma za lugha na watafsiri + +[Memsource](https://www.memsource.com/) + +- Bure kwa watafsiri binafsi na mipango kadhaa ya kulipia kwa timu +- Tafsiri inayosaidiwa na kompyuta yenye msingi wa wingu na mfumo wa usimamizi wa tafsiri + +na nyingine nyingi... + +Soma zaidi kuhusu programu ya usimamizi wa tafsiri: + +[Ufafanuzi wa Wikipedia wa mifumo ya usimamizi wa tafsiri](https://en.wikipedia.org/wiki/Translation_management_system) + +[Phrase kuhusu mambo 7 ambayo kila programu ya usimamizi wa tafsiri inapaswa kuwa nayo](https://phrase.com/blog/posts/7-things-every-translation-management-software-should-have/) + +[MemoQ kuhusu mfumo wa usimamizi wa tafsiri ni nini](https://www.memoq.com/tools/what-is-a-translation-management-system) + +[Orodha ya Gengo ya mifumo 16 bora ya usimamizi wa tafsiri](https://gengo.com/translator-product-updates/16-best-translation-management-systems/) + +## Mtiririko wa kazi {#workflow} + +Katika ulimwengu wa tafsiri, mtiririko wa kazi wa tafsiri unaweza kumaanisha mambo kadhaa tofauti, yote yanahusiana kwa kiasi fulani, na ni mambo muhimu ya kuzingatia kwa mradi wako. + +Tutachunguza yote mawili hapa chini. + +**Maana ya 1** + +Pengine hii ndiyo njia ya kawaida zaidi ya kufikiria kuhusu mtiririko wa kazi wa tafsiri na kitu ambacho kwa kawaida huja akilini unaposikia neno mtiririko wa kazi. + +Kwa asili yake, ni 'mtiririko wa kazi' kutoka kuanza kufikiria kuhusu tafsiri hadi kutumia maudhui yaliyotafsiriwa katika bidhaa yako. + +Mfano wa mtiririko wa kazi katika kesi hii utakuwa: + +1. Kutayarisha faili kwa ajili ya kutafsiri, Inaonekana rahisi; hata hivyo, unahitaji kuzingatia mambo kadhaa muhimu. Katika hatua hii, unapaswa kuwa na mpango wazi wa jinsi mchakato mzima unavyopaswa kufanya kazi. + +- _Ni aina gani za faili utakuwa unatumia? Unataka kupokea faili zako zilizotafsiriwa katika fomati gani?_ + - Ikiwa maudhui yako yanapatikana katika umbizo la DOCX au MD, mbinu hiyo itakuwa rahisi zaidi kuliko ikiwa unatafsiri toleo la PDF la nyaraka yako rasmi au hati zingine. +- _Ni zana gani za ujanibishaji zinazotumia aina hii ya faili? Je, faili inaweza kutafsiriwa kwa njia ambayo inahifadhi muundo wa asili?_ + - Sio aina zote za faili zinazotumia ujanibishaji wa moja kwa moja (k.m., faili za PDF, faili za picha), na sio zana zote za ujanibishaji zinazotumia aina zote za faili. +- _Nani atakuwa akitafsiri maudhui? Je, utaagiza tafsiri za kitaalamu au utategemea watu wa kujitolea?_ + - Hii huathiri maamuzi mengine kadhaa unayohitaji kufanya. Kwa mfano, watafsiri wataalamu wana raha zaidi kufanya kazi na zana za hali ya juu za ubadilishanaji wa lugha na tamaduni kuliko watu waliojitolea. +- _Matarajio yako kwa wataalamu wa lugha ni yapi? Ikiwa unatumia mtoa huduma za lugha, wanatarajia nini kutoka kwako?_ + - Hii ni hatua ya kuhakikisha malengo, matarajio, na ratiba zako zinalingana. +- _Je, maudhui yote ya tafsiri ni muhimu kwa usawa? Je, baadhi ya maudhui yanapaswa kutafsiriwa kwanza?_ + - Kuna baadhi ya njia za kuyapa kipaumbele maudhui fulani, ambayo yanapaswa kutafsiriwa na kutekelezwa kwanza. Kwa mfano, ikiwa una maudhui mengi ya kutafsiri, unaweza kutumia udhibiti wa toleo ili kuhakikisha kuwa watafsiri wanafahamu ni kipi wanapaswa kutanguliza. + +2. Kushiriki faili kwa tafsiri, Hatua hii pia inahitaji kufikiri kwa muda mrefu na si rahisi kama kutuma faili chanzo kwa mtoa huduma wa lugha. + +- _Nani atakuwa akitafsiri maudhui? Ni watu wangapi watahusika katika mchakato huu?_ + - Ikiwa unapanga kutumia zana ya ushirikishanaji wa lugha na tamaduni, hatua hii inarahisishwa kwa kuwa unaweza kupakia faili chanzo kwenye zana moja kwa moja. Hii pia ni kweli ikiwa mchakato wa kutafsiri unafanyika kwenye huduma ya kupangisha kwani faili za chanzo hazihitaji kutumwa popote. +- _Je, faili chanzo zitashughulikiwa kwa mikono, au mchakato huu unaweza kufanywa kiotomatiki?_ + - Zana nyingi za ushirikishanaji wa lugha na tamaduni huruhusu aina fulani ya ujumuishaji au kiotomatiki ya mchakato wa usimamizi wa faili. Kwa upande mwingine, ikiwa unafanya kazi na watafsiri binafsi na hutumii zana ya ushirikishanaji wa lugha na tamaduni kutuma faili za chanzo kwa mamia au maelfu ya watafsiri si mchakato unaoweza kuongezeka. +- _Ni zana gani zitatumika kwa ujanibishaji?_ + - Jibu la swali hili litaamua jinsi unavyoshughulikia kila kitu kingine. Kuchagua zana inayofaa kunaweza kukusaidia kuhariri maudhui kiotomatiki, kudhibiti Kumbukumbu ya Tafsiri na misamiati, kudhibiti watafsiri, kufuatilia maendeleo ya utafsiri/ukaguzi, n. k., kwa hivyo chukua muda na ufanye utafiti kuhusu zana unayotaka kutumia. Ikiwa huna mpango wa kutumia zana ya ushirikishanaji wa lugha, yote yaliyo hapo juu yatahitaji kufanywa kwa mikono. +- _Mchakato wa kutafsiri utachukua muda gani? Itagharimu kiasi gani?_ + - Katika hatua hii, unapaswa kuwa tayari kushiriki faili za chanzo na mtoa huduma wa lugha au kundi la watafsiri. Mtoa huduma wa lugha anaweza kukusaidia kuchanganua hesabu ya maneno na kutoa nukuu, ikijumuisha viwango na kalenda ya matukio ya mchakato wa kutafsiri. +- _Je, unapanga kufanya mabadiliko/kusasisha maudhui chanzo wakati wa mchakato huu?_ + - Ikiwa maudhui yako yanabadilika na yanabadilika mara kwa mara, mabadiliko yoyote au maboresho yanaweza kukwamisha maendeleo ya utafsiri. Kutumia Kumbukumbu ya Tafsiri kunaweza kusaidia kupunguza hili kwa kiasi kikubwa, ingawa bado ni muhimu kufikiria jinsi mchakato utakavyofanya kazi na jinsi unavyoweza kuzuia kurudisha nyuma maendeleo ambayo watafsiri wanafanya. + +3. Kudhibiti mchakato wa kutafsiri, Kazi yako haitafanywa baada ya maudhui chanzo kukabidhiwa kwa mtoa huduma wa lugha au watafsiri. Ili kuhakikisha ubora kamili wa tafsiri, watengenezaji wa maudhui wanapaswa kuhusishwa na mchakato wa kutafsiri iwezekanavyo. + +- _Unapanga vipi kuwasiliana na watafsiri?_ + - Ikiwa unapanga kutumia zana ya ushirikishanaji wa lugha na tamaduni, mawasiliano yanaweza kufanyika moja kwa moja kwenye chombo. Kuweka njia mbadala ya mawasiliano na watafsiri pia kunapendekezwa kwa kuwa huenda wasisite kuwasiliana, na zana za kutuma ujumbe huruhusu mawasiliano zaidi yanayotiririka bila malipo. +- _Jinsi ya kushughulikia maswali kutoka kwa watafsiri? Nani anapaswa kujibu maswali haya?_ + - Watafsiri (wa kitaaluma na wasio wataalamu) mara nyingi watawasiliana na maswali na maombi ya ufafanuzi au muktadha wa ziada, pamoja na maoni na mawazo ya kuboresha. Kujibu maswali haya mara nyingi kunaweza kusababisha ushirikiano bora na ubora wa maudhui yaliyotafsiriwa. Pia ni muhimu kuwapa nyenzo nyingi iwezekanavyo (k.m., miongozo, vidokezo, miongozo ya istilahi, Maswali Yanayoulizwa Mara kwa Mara, n.k.). +- _Jinsi ya kushughulikia mchakato wa uhakiki? Je, unataka kuupeleka kwa watu wa nje, au una uwezo wa kufanya uhakiki ndani ya shirika lako?_ + - Ingawa sio lazima kila wakati, kuhakiki ni sehemu muhimu ya mchakato bora wa tafsiri. Kawaida, ni rahisi zaidi kuupeleka mchakato wa uhakiki kwa wahakiki wa kitaalamu. Hata hivyo, ikiwa una timu kubwa ya kimataifa, uhakiki au QA unaweza pia kushughulikiwa ndani ya shirika. + +4. **Kutekeleza maudhui yaliyotafsiriwa** – Sehemu ya mwisho ya mtiririko wa kazi, ingawa bado ni muhimu kuizingatia mapema. + +- _Je, tafsiri zote zitakamilika kwa wakati mmoja?_ + - Ikiwa sivyo, unapaswa kufikiria ni tafsiri zipi zinapaswa kupewa kipaumbele, jinsi ya kufuatilia tafsiri zinazoendelea, na jinsi utekelezaji unavyoshughulikiwa wakati tafsiri zinafanywa. +- _Maudhui yaliyotafsiriwa yatakabidhiwa kwako vipi? Yatakuwa katika fomati gani?_ + - Hili ni jambo muhimu la kuzingatia, bila kujali ni mbinu gani unayotumia. Zana za ujanibishaji hukuruhusu kudumisha udhibiti wa fomati ya faili lengwa na mchakato wa kusafirisha na kwa kawaida hutumia otomatiki, k.m., kwa kuwezesha ujumuishaji na huduma ya upangishaji. +- _Utatekeleza vipi tafsiri katika mradi wako?_ + - Katika baadhi ya matukio, hii inaweza kuwa rahisi kama kupakia faili iliyotafsiriwa au kuiongeza kwenye hati zako. Hata hivyo, kwa miradi changamano zaidi, kama vile tafsiri za tovuti au programu, unapaswa kuhakikisha kuwa msimbo unaauni ujanibishaji kimataifa na uweke wazi jinsi mchakato wa utekelezaji utakavyoshughulikiwa mapema. +- _Nini hutokea ikiwa fomati ni tofauti na chanzo?_ + - Sawa na hapo juu, ikiwa unatafsiri faili za maandishi rahisi, fomati labda si muhimu sana. Hata hivyo, ukiwa na faili changamano zaidi, kama maudhui ya tovuti au programu, fomati na msimbo vinahitaji kufanana na chanzo ili kutekelezwa katika mradi wako. Ikiwa sivyo, faili lengwa zitahitaji kuhaririwa, ama na watafsiri au wasanidi programu wako. + +**Maana ya 2** + +Mtiririko mbadala wa kazi wa tafsiri, ambao hauzingatii maamuzi na mbinu za ndani. Jambo kuu la kuzingatia hapa ni mtiririko wa maudhui yenyewe. + +Mfano wa mtiririko wa kazi katika kesi hii utakuwa: + +1. _Tafsiri → Utekelezaji_ + +- Mtiririko rahisi zaidi wa kazi, ambapo tafsiri inawezekana itakuwa tafsiri ya binadamu, kwa kuwa hakuna mchakato wa uhakiki au QA wa kutathmini ubora na kuhariri tafsiri kabla ya utekelezaji. +- Kwa mtiririko huu wa kazi, ni muhimu watafsiri waweze kudumisha kiwango fulani cha ubora, ambacho kitahitaji rasilimali zinazofaa na mawasiliano kati ya wasimamizi wa mradi na watafsiri. + +2. _Tafsiri → Uhakiki → Utekelezaji_ + +- Mtiririko wa kazi wa hali ya juu zaidi, ambao unajumuisha mchakato wa uhakiki na uhariri, ili kuhakikisha ubora wa tafsiri unakubalika na una uwiano. +- Kuna mbinu kadhaa za mtiririko huu wa kazi, ambapo tafsiri zinaweza kufanywa na watafsiri wa kitaalamu au watu wa kujitolea, huku mchakato wa uhakiki ukiwezekana kushughulikiwa na wahakiki wa kitaalamu, ambao wanafahamu kanuni zote za sarufi na tahajia zinazopaswa kuzingatiwa katika lugha lengwa. + +3. _Tafsiri → Uhakiki → QA → Utekelezaji_ + +- Mtiririko bora wa kazi ili kuhakikisha kiwango cha juu zaidi cha ubora. Ingawa maswali na majibu si lazima kila wakati, inaweza kuwa muhimu kukupa hisia bora zaidi ya ubora wa maandishi yaliyotafsiriwa baada ya tafsiri na ukaguzi. +- Kwa mtiririko huu wa kazi, tafsiri zinaweza kufanywa na watu waliojitolea pekee au hata tafsiri ya mashine. Mchakato wa ukaguzi unapaswa kufanywa na wafasiri wa kitaalamu, ilhali maswali na majibu yanaweza kufanywa na mtoa huduma wa lugha au ndani, ikiwa una wafanyakazi ambao ni wazungumzaji asilia wa lugha lengwa. + +Soma zaidi kuhusu mtiririko wa kazi wa tafsiri: + +[Kanuni za maudhui kwenye awamu tano za utendakazi wa tafsiri](https://contentrules.com/creating-translation-workflow/) + +[Kujua ni nini usimamizi wa mtiririko wa kazi ya tafsiri](https://www.smartling.com/resources/101/what-is-translation-workflow-management/) + +[RixTrans kuhusu mtiririko wa kazi wa tafsiri](https://www.rixtrans.com/translation-workflow) + +## Usimamizi wa Istilahi {#terminology-management} + +Kuweka mpango wazi wa jinsi ya kushughulikia istilahi ni mojawapo ya hatua muhimu zaidi za kuhakikisha ubora na uthabiti wa tafsiri zako na kuokoa muda wa watafsiri wako. + +Katika nafasi ya utafsiri, hii inajulikana kama usimamizi wa istilahi na ni mojawapo ya huduma kuu za watoa huduma za lugha zinazowapa wateja wao, pamoja na kufikia kundi lao la wanaisimu na usimamizi wa maudhui. + +Usimamizi wa istilahi unarejelea mchakato wa kutambua, kukusanya, na kudhibiti istilahi ambazo ni muhimu kwa mradi wako na zinapaswa kutafsiriwa kila wakati kwa usahihi na kwa uthabiti. + +Kuna hatua kadhaa za kufuata unapoanza kufikiria juu ya usimamizi wa istilahi: + +- Bainisha istilahi muhimu ambazo zinapaswa kujumuishwa katika hifadhidata ya istilahi. +- Tengeneza kamusi ya istilahi na ufafanuzi wake. +- Tafsiri istilahi na uziongeze kwenye kamusi. +- Kagua na uidhinishe tafsiri. +- Tunza kamusi na uisasisho kwa istilahi mpya, kadri zinavyokuwa muhimu. + +Soma zaidi kuhusu usimamizi wa istilahi: + +[Trados kuhusu nini ni usimamizi wa istilahi](https://www.trados.com/solutions/terminology-management/translation-101-what-is-terminology-management.html) + +[Lugha ya kiSayansi kuhusu kwa nini usimamizi wa istilahi ni muhimu](https://www.languagescientific.com/terminology-management-why-it-matters/#:~:text=Terminology%20management%20is%20the%20process, are%20related%20to%20each) + +[Tafsiri ya Maneno ya Wazi kuhusu usimamizi wa istilahi ni nini na kwa nini ni muhimu](http://clearwordstranslations.com/language/en/what-is-terminology-management/) + +### Kumbukumbu ya Tafsiri na Kamusi {#tm-and-glossary} + +Kumbukumbu ya Tafsiri na misamiati ni zana muhimu katika tasnia ya utafsiri na kitu ambacho watoa huduma wengi wa lugha hutegemea. + +Hebu tuangalie maana ya istilahi hizi na jinsi zinavyotofautiana: + +Kumbukumbu ya tafsiri (TM), Hifadhidata ambayo huhifadhi sehemu au mifuatano kiotomatiki, ikijumuisha maandishi marefu, sentensi kamili, aya na maneno mahususi, pamoja na tafsiri zao za sasa na za awali katika kila lugha. + +Zana nyingi za ushirikishanaji wa lugha na tamaduni, mifumo ya usimamizi wa tafsiri, na zana za utafsiri zinazosaidiwa na kompyuta zina kumbukumbu za ndani za utafsiri, ambazo kwa kawaida zinaweza kusafirishwa na kutumika katika zana zingine zinazofanana pia. + +Manufaa ya kutumia kumbukumbu ya tafsiri ni pamoja na tafsiri za haraka, ubora wa tafsiri, uwezo wa kuhifadhi tafsiri fulani wakati wa kuboresha au kubadilisha maudhui ya chanzo na gharama nafuu za tafsiri kwa maudhui yanayojirudia. + +Kumbukumbu ya tafsiri hufanya kazi kwa msingi wa uwiano wa asilimia kati ya sehemu tofauti na kwa kawaida ni muhimu zaidi wakati sehemu mbili zina zaidi ya 50% ya maudhui sawa. Pia hutumiwa kutafsiri kiotomati sehemu zinazojirudia, ambazo ni 100% zinazolingana, hivyo basi kuondoa hitaji la kuwahi kutafsiri maudhui yanayojirudia zaidi ya mara moja. + +Soma zaidi kuhusu kumbukumbu za tafsiri: + +[Memsource kuhusu kumbukumbu za tafsiri](https://www.memsource.com/translation-memory/) + +[Kuzingatia kumbukumbu ya tafsiri ni nini](https://www.smartling.com/resources/101/what-is-translation-memory/) + +misamiati, Orodha ya istilahi muhimu au nyeti, fasili zake, utendakazi na tafsiri zilizothibitishwa. Tofauti kuu kati ya misamiati na kumbukumbu ya tafsiri ni kwamba misamiati haijaundwa kiotomatiki, na kwamba haina tafsiri za sentensi kamili. + +Zana nyingi za ushirikishanaji wa lugha na tamaduni, mifumo ya usimamizi wa tafsiri, na zana za utafsiri zinazosaidiwa na kompyuta zina misamiati iliyojengewa ndani ambayo unaweza kudumisha ili kuhakikisha kuwa zina istilahi muhimu kwa mradi wako. Kama TM, misamiati inaweza kusafirishwa na kutumika katika zana zingine za ushirikishanaji wa lugha na tamaduni. + +Kabla ya kuanza mradi wako wa kutafsiri, inashauriwa sana kuchukua muda na kuunda misamiati kwa ajili ya wafasiri na wakaguzi wako. Kutumia misamiati huhakikisha kuwa maneno muhimu yanatafsiriwa kwa usahihi, huwapa watafsiri muktadha unaohitajika sana, na huhakikisha uthabiti katika tafsiri. + +Ingawa misamiati mara nyingi huwa na tafsiri zilizothibitishwa katika lugha lengwa, zinafaa pia bila hii. Hata bila tafsiri zilizoidhinishwa, faharasa inaweza kuwa na ufafanuzi wa istilahi za kiufundi, kuangazia istilahi ambazo hazifai kutafsiriwa, na kuwafahamisha watafsiri kama neno mahususi linatumika kama nomino, kitenzi, nomino halisi, au sehemu nyingine yoyote ya hotuba. + +Soma zaidi kuhusu kamusi: + +[Lionbridge kuhusu misamiati ya tafsiri ni nini](http://info.lionbridge.com/rs/lionbridge/images/Lionbridge%20FAQ_Glossary_2013.pdf) + +[Transifex kuhusu kamusi](https://docs.transifex.com/glossary/glossary) + +Iwapo huna mpango wa kutumia zana ya ushirikishanaji wa lugha na tamaduni kwa mradi wako, kuna uwezekano kwamba hutaweza kutumia kumbukumbu ya tafsiri na misamiati (unaweza kuunda misamiati au istilahi katika faili bora, hata hivyo, misamiati kiotomatiki huondoa hitaji la watafsiri kutafuta maneno na ufafanuzi wao wenyewe). + +Hii ina maana kwamba maudhui yote yanayorudiwa na sawia yatalazimika kutafsiriwa kwa mikono kila wakati. Zaidi ya hayo, watafsiri wangehitaji kuuliza maswali kuhusu ikiwa neno fulani linahitaji kutafsiriwa au la, jinsi linavyotumiwa katika maandishi, na ikiwa neno tayari lina tafsiri fulani. + +_Je, unataka kutumia kumbukumbu ya tafsiri ya ethereum.org na kamusi katika mradi wako? Wasiliana nasi kupitia translations@ethereum.org._ + +## Ufikiaji wa Watafsiri {#translator-outreach} + +**Kufanya kazi na mtoa huduma za lugha** + +Ikiwa unafanya kazi na mtoa huduma wa lugha na watafsiri wao wa kitaalamu, sehemu hii inaweza isikufae sana. + +Katika kesi hii, ni muhimu kuchagua mtoa huduma wa lugha na uwezo wa kutoa huduma zote unazohitaji (kwa mfano, tafsiri, ukaguzi, maswali na majibu) katika lugha nyingi. + +Ingawa inaweza kushawishi kuchagua mtoa huduma wa lugha kulingana na viwango vyao vinavyotolewa, ni muhimu kutambua kwamba watoa huduma wakubwa wa lugha wana viwango vya juu kwa sababu fulani. + +- Wana makumi ya maelfu ya wanaisimu katika hifadhidata yao, ambayo ina maana kwamba wataweza kuwapa watafsiri wenye uzoefu wa kutosha na ujuzi wa sekta yako mahususi kwa mradi wako (yaani, wafasiri wa kiufundi). +- Wana uzoefu mkubwa wa kufanya kazi kwenye miradi tofauti na kukidhi mahitaji tofauti ya wateja wao. Hii inamaanisha kuwa watakuwa na uwezekano mkubwa wa kuzoea utendakazi wako mahususi, kutoa mapendekezo muhimu na maboresho yanayoweza kutokea kwa mchakato wako wa kutafsiri, na kukidhi mahitaji, mahitaji na makataa yako. +- Watoa huduma wengi wakubwa wa lugha pia wana zana zao za ujanibishaji, kumbukumbu za tafsiri na faharasa ambazo unaweza kutumia. La sivyo, angalau wana wanaisimu wa kutosha katika kundi lao ili kuhakikisha kwamba watafsiri wao watafahamu na kuweza kufanya kazi na zana yoyote ya ushirikishanaji wa lugha na tamaduni unayotaka kutumia. + +Unaweza kupata ulinganisho wa kina wa watoa huduma wakubwa zaidi wa lugha duniani, baadhi ya maelezo kuwahusu na uchanganuzi wa huduma wanazotoa, data ya kijiografia, n.k. katika [ripoti ya 2021 ya Nimdzi 100](https://www.nimdzi.com/nimdzi-100-top-lsp/). + +**Kufanya kazi na watafsiri wasio wataalamu** + +Huenda unafanya kazi na wafasiri wasio wataalamu na unatafuta watu wa kujitolea kukusaidia kutafsiri. + +Kuna njia kadhaa za kuwafikia watu na kuwaalika wajiunge na mradi wako. Hii itategemea sana bidhaa yako na ukubwa wa jumuiya uliyo nayo tayari. + +Baadhi ya njia za kuwapokea watu wa kujitolea zimeainishwa hapa chini: + +Ufikiaji, Ingawa hii inashughulikiwa kwa kiasi fulani katika vidokezo vilivyo hapa chini, kufikia watu wanaoweza kujitolea na kuhakikisha kuwa wanafahamu mpango wako wa kutafsiri kunaweza kuwa na matokeo yenyewe. + +Watu wengi wanataka kuhusika na kuchangia miradi wanayopenda, lakini mara nyingi hawaoni njia wazi ya kufanya hivyo bila kuwa msanidi programu au kuwa na ujuzi maalum wa kiufundi. Ikiwa unaweza kueneza ufahamu kuhusu mradi wako, watu wengi wa lugha mbili wanaweza kuwa na hamu ya kuhusika. + +Ukiangalia ndani ya jumuiya yako, Miradi mingi katika nafasi tayari ina jumuiya kubwa na zinazofanya kazi. Wanajamii wako wengi pengine wangefurahia nafasi ya kuchangia mradi kwa njia rahisi. + +Ingawa kuchangia miradi huria mara nyingi hutegemea motisha ya ndani, pia ni uzoefu mzuri wa kujifunza. Yeyote anayetaka kujifunza zaidi kuhusu mradi wako anaweza kuwa na furaha kujihusisha na programu ya kutafsiri kama mtu aliyejitolea, kwa kuwa ingemruhusu kuchanganya ukweli kwamba amechangia jambo analojali na uzoefu wa kina wa kujifunza. + +Kutaja mpango katika bidhaa yako, Ikiwa bidhaa yako ni maarufu na inatumiwa na idadi kubwa ya watu, kuangazia programu yako ya utafsiri na kuwaita watumiaji kuchukua hatua huku ukitumia bidhaa kunaweza kuwa na ufanisi mkubwa. + +Hii inaweza kuwa rahisi kama kuongeza bango au ibukizi na CTA kwa bidhaa yako kwa programu na tovuti. Hii ni nzuri kwa sababu hadhira unayolenga ni jamii yako na watu ambao wana uwezekano mkubwa wa kuhusika hapo kwanza. + +Mitandao ya kijamii, Mitandao ya kijamii inaweza kuwa njia mwafaka ya kueneza ufahamu kuhusu mpango wako wa kutafsiri na kuwafikia wanajumuiya yako, pamoja na watu wengine ambao bado si wanachama wa jumuiya yako. + +Ikiwa una seva ya Discord au chaneli ya Telegramu, ni rahisi kutumia hiyo kwa mawasiliano, mawasiliano na watafsiri wako, na kuwatambua wachangiaji wako. + +Mifumo kama X (zamani Twitter) inaweza pia kusaidia katika kuwapokea wanachama wapya wa jumuiya na kuwatambua wachangiaji wako hadharani. + +The Linux Foundation imeunda [Ripoti ya kina ya utafiti wa mchangiaji wa FOSS wa 2020](https://www.linuxfoundation.org/wp-content/uploads/2020FOSSContributorSurveyReport_121020.pdf), ikichanganua wachangiaji wa chanzo-wazi na motisha zao. + +## Hitimisho {#conclusion} + +Hati hii ina mambo muhimu ambayo kila programu ya tafsiri inapaswa kufahamu. Kwa vyovyote vile si mwongozo kamili, ingawa unaweza kusaidia mtu yeyote ambaye hana uzoefu katika tasnia ya utafsiri kupanga mpango wa utafsiri wa mradi wao. + +Iwapo unatafuta maelekezo ya kina zaidi na uchanganuzi wa zana tofauti, michakato, na vipengele muhimu vya kudhibiti programu ya utafsiri, baadhi ya watoa huduma wakubwa wa lugha hudumisha blogu na mara nyingi huchapisha makala kuhusu vipengele tofauti vya mchakato wa ushirikishanaji wa lugha na tamaduni. Hizi ndizo nyenzo bora zaidi ikiwa ungependa kuzama zaidi katika mada yoyote kati ya zilizo hapo juu na kuelewa jinsi mchakato wa ushirikishanaji wa lugha na tamaduni unavyofanya kazi kitaalamu. + +Viungo vingine muhimu vimejumuishwa mwishoni mwa kila sehemu; hata hivyo, unaweza kupata rasilimali nyingine nyingi mtandaoni. + +Kwa mapendekezo ya ushirikiano au maelezo ya ziada, mafunzo, na mbinu bora ambazo tumechukua kwa kudumisha Mpango wa Tafsiri wa ethereum.org, jisikie huru kuwasiliana nasi katika translation@ethereum.org. diff --git a/public/content/translations/sw/contributing/translation-program/resources/index.md b/public/content/translations/sw/contributing/translation-program/resources/index.md new file mode 100644 index 00000000000..0891370a294 --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/resources/index.md @@ -0,0 +1,49 @@ +--- +title: Rasilimali kwa watafsiri +lang: sw +description: Rasilimali muhimu kwa watafsiri wa ethereum.org +--- + +# Rasilimali {#resources} + +Unaweza kupata miongozo na zana muhimu kwa watafsiri wa ethereum.org, pamoja na jumuiya za watafsiri na masasisho hapa chini. + +## Miongozo {#guides} + +- [Mwongozo wa mtindo wa utafsiri](/contributing/translation-program/translators-guide/) _– maelekezo na vidokezo kwa watafsiri wa ethereum.org_ +- [Maswali Yanayoulizwa Mara kwa Mara Kuhusu Tafsiri](/contributing/translation-program/faq/) _– maswali na majibu yanayoulizwa mara kwa mara kuhusu Mpango wa Tafsiri wa ethereum.org_ +- [Mwongozo wa mhariri wa mtandaoni wa Crowdin](https://support.crowdin.com/online-editor/) _– mwongozo wa kina wa kutumia mhariri wa mtandaoni wa Crowdin na baadhi ya vipengele vya hali ya juu vya Crowdin_ + +## Zana {#tools} + +- [Linguee](https://www.linguee.com/) + _– injini ya utafutaji ya tafsiri na kamusi inayowezesha kutafuta kwa neno au kifungu_ +- [Utafutaji wa istilahi wa Proz](https://www.proz.com/search/) + _– hifadhidata ya kamusi za tafsiri na faharasa za istilahi maalum_ +- [Eurotermbank](https://www.eurotermbank.com/) + _– makusanyo ya istilahi za Ulaya katika lugha 42_ + +## Jumuiya {#communities} + +- [Vikundi vya tafsiri vya Discord kulingana na lugha](https://discord.gg/ethereum-org) + _– mpango wa kuunganisha watafsiri wa ethereum.org na Vikundi vya Utafsiri_ +- [Kikundi cha watafsiri wa Kichina](https://www.notion.so/Ethereum-org-05375fe0a94c4214acaf90f42ba40171) + _– Ukurasa wa Notion kwa uratibu rahisi kati ya watafsiri wa Kichina_ + +## Masasisho ya hivi karibuni {#latest-updates} + +Ili kupata habari za hivi punde kuhusu maendeleo ya Mpango wa Utafsiri, unaweza kufuata [blogu ya Ethereum Foundation](https://blog.ethereum.org/): + +- [Sasisho la hatua muhimu za Oktoba 2021](https://blog.ethereum.org/2021/10/04/translation-program-update/) +- [Sasisho la hatua muhimu za Desemba 2020](https://blog.ethereum.org/2020/12/21/translation-program-milestones-updates-20/) +- [Sasisho la hatua muhimu za Julai 2020](https://blog.ethereum.org/2020/07/29/ethdotorg-translation-milestone/) +- [Uzinduzi wa Mpango wa Utafsiri wa Agosti 2019](https://blog.ethereum.org/2019/08/20/translating-ethereum-for-our-global-community/) + +## Saa za kazi kwa watafsiri {#office-hours} + +Tuna saa za kazi kwa watafsiri kila Jumatano ya pili ya kila mwezi. Hizi hufanyika kwenye chaneli ya sauti ya #office-hours kwenye [Discord ya ethereum.org](https://discord.gg/ethereum-org), ambapo unaweza pia kupata nyakati kamili na maelezo ya ziada. + +Saa za kazi huruhusu watafsiri wetu kuuliza maswali kuhusu mchakato wa utafsiri, kutoa maoni kuhusu programu, kushiriki mawazo yao, au kuzungumza tu na timu kuu ya ethereum.org. +Mwisho, tunataka kutumia mikutano hii kuwasiliana kuhusu maendeleo ya hivi karibuni ya Mpango wa Utafsiri na kushiriki vidokezo muhimu na maelekezo na wachangiaji wetu. + +Ikiwa wewe ni mtafsiri wa ethereum.org au ungependa kuwa mmoja, jisikie huru kujiunga nasi wakati wa mojawapo ya vipindi hivi. diff --git a/public/content/translations/sw/contributing/translation-program/translatathon/details/index.md b/public/content/translations/sw/contributing/translation-program/translatathon/details/index.md new file mode 100644 index 00000000000..6735f371a60 --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/translatathon/details/index.md @@ -0,0 +1,90 @@ +--- +title: Maelezo na sheria +lang: sw +template: Tafsirithoni +--- + +![](./participate.png) + +Translatathon iko wazi na mtu yeyote anaweza kushiriki kwa kujaza fomu ya maombi na kujiunga na mradi katika Crowdin. + +Watafsiri hukusanya alama kwa kupendekeza tafsiri kwa stringi ambazo hazijatafsiriwa katika lugha yao kwenye kihariri cha Crowdin wakati wa kipindi cha kutafsiri. + +Alama ya mwisho ya kila mshiriki huamuliwa na nafasi yake kwenye ubao wa viongozi kulingana na idadi ya maneno aliyotafsiri wakati wa kipindi cha kutafsiri na alama zozote za ziada alizokusanya. + +## Kuanza {#getting-started} + +Mchakato wa kutafsiri unafanyika katika mradi wa ethereum.org katika Crowdin na watafsiri hupendekeza tafsiri zao kwa stringi ambazo hazijatafsiriwa, zinazoundwa na takriban maudhui yote kutoka kwa tovuti ya ethereum.org. + +Tafsiri zinapendekezwa moja kwa moja katika kihariri cha mtandaoni kwa hivyo hakuna haja ya kupakua au kupakia faili zozote au matokeo. Kila neno lililotafsiriwa hufuatiliwa na kuhesabiwa. + +**1) Jiunge na mradi** + +- Ili kuanza kuchangia, jiunge na [mradi wa ethereum.org katika Crowdin](https://crowdin.com/project/ethereum-org) +- Utahitaji kuingia au kufungua akaunti - kinachohitajika tu ni anwani ya barua pepe na nenosiri + +**2) Chagua lugha yako** + +- Tafuta lugha yako kwenye orodha ya lugha lengwa na uifungue kwa kubofya jina lake au bendera +- Ikiwa ungependa kutafsiri katika lugha ambayo haipatikani, wasiliana na [Timu ya Ethereum.org](https://crowdin.com/profile/ethdotorg) kwenye Crowdin au ututumie barua pepe kwa translations@ethereum.org na tutaongeza lugha lengwa za ziada kulingana na ombi + +**3) Fungua faili ambayo haijatafsiriwa** + +- Tafuta faili ya kwanza ambayo haijatafsiriwa ili kuanza kutafsiri. Folda zilizo na faili za chanzo zimepangwa kulingana na kipaumbele, kwa hivyo unapaswa kuanza kutafsiri folda ya kwanza iliyo na faili ambazo hazijatafsiriwa +- Kila faili ina kiashiria cha maendeleo kinachoonyesha ni kiasi gani cha maudhui yanayoweza kutafsiriwa katika faili kimetafsiriwa na kuidhinishwa… ikiwa maendeleo ya tafsiri ya faili yoyote iko chini ya 100%, tafadhali itafsiri + +**4) Tafsiri stringi ambazo hazijatafsiriwa** + +- Unapofungua faili ili kutafsiri, hakikisha unatafsiri stringi ambazo hazijatafsiriwa pekee! +- Kila stringi ina kiashiria cha hali kinachoonyesha ikiwa ni _Imetafsiriwa_, _Haijatafsiriwa_, au _Imeidhinishwa_. Ikiwa stringi ya chanzo tayari ina tafsiri iliyopendekezwa katika lugha yako, hakuna haja ya kuitafsiri +- Unaweza pia kuchuja stringi katika kihariri ili kuonyesha _Zisizotafsiriwa kwanza_ au _Zisizotafsiriwa pekee_ + +Kwa mwongozo wa kina wa kuabiri na kutumia kihariri cha Crowdin, tunapendekeza washiriki wote wa Translatathon wasome mwongozo wetu wa [Jinsi ya kutafsiri](/contributing/translation-program/how-to-translate/). + +Unaweza pia kupata vidokezo na mbinu bora kwa kuangalia [mwongozo wetu wa mtindo wa utafsiri](/contributing/translation-program/translators-guide/). + +**Jinsi alama zinavyofanya kazi** + +Kila mshiriki wa Translatathon atapata alama kwa ajili ya alama yake ya mwisho kwa kutafsiri maudhui katika mradi wa ethereum.org Crowdin na miradi mingine inayostahiki (orodha kamili ya miradi inayostahiki inapatikana hapa chini). + +Upataji wa alama ni rahisi: **neno 1 lililotafsiriwa = alama 1** + +Ili kupokea mgao wako wa mwisho wa alama, tafsiri zako zilizopendekezwa zitahitaji kupita mchakato wa tathmini, ambapo wahakiki wa kitaalamu watakagua tafsiri za kila mshiriki ili kuhakikisha zinakidhi kiwango cha chini cha ubora na hakuna tafsiri za mashine au AI zilizotumika katika mchakato. + +## Maudhui ya mfumo ikolojia {#ecosystem-content} + +Kwa kuwa mpango wa kutafsiri wa ethereum.org unafanya kazi wakati wote, maendeleo ya tafsiri katika baadhi ya lugha lengwa kwenye tovuti ni ya juu zaidi kuliko mengine. + +Ili kuhakikisha kuwa washiriki wote wa Translatathon wana fursa sawa ya kutafsiri maudhui mengi kadri wanavyoweza na kushindania zawadi za juu, maudhui ya chanzo ambayo ni sehemu ya Translatathon hayako tu kwa maudhui ya tovuti ya ethereum.org. + +Washiriki wanaotafsiri mradi wowote unaostahiki watapata kiasi sawa cha alama, neno 1 lililotafsiriwa katika mradi wowote = alama 1. + +Hii hapa ni orodha ya miradi yote inayostahiki ambayo ni sehemu ya Translatathon ya 2025: + +- [Ethereum.org](https://crowdin.com/project/ethereum-org) + +- [Mafunzo ya wasanidi programu wa Ethereum.org](https://crowdin.com/project/33388446abbe9d7aa21e42e49bba7f97) + +- [EthStaker deposit CLI](https://crowdin.com/project/ethstaker-deposit-cli) + +- [Nyaraka za Eth Docker](https://crowdin.com/project/eth-docker-docs) + +- [Nyaraka za Remix IDE](https://crowdin.com/project/remix-translation) + +- [Remix LearnEth](https://crowdin.com/project/remix-learneth) + +- [web3.py](https://crowdin.com/project/web3py) + +## Mchakato wa tathmini {#evaluation-process} + +Tafsiri zote zitafanyiwa uhakiki wa ubora (QA) na maoni, ambapo wataalamu wa lugha watatathmini mawasilisho kulingana na ubora na usahihi. + +Pia tutakuwa tukitumia **hatua za kuzuia tafsiri za mashine** kwa kutumia zana fulani zinazotambua kiotomatiki tafsiri za mashine au AI. + +Ingawa ubora wa tafsiri hautakuwa na jukumu muhimu katika utoaji alama, **mshiriki yeyote atakayepatikana akitumia tafsiri za mashine au AI** au kupendekeza tafsiri zenye ubora wa chini na zisizo sahihi hatastahili kupata zawadi! + +Kipindi cha tathmini kitafanyika mwezi wote wa Septemba na matokeo yatatangazwa kwenye simu ya jumuiya ya ethereum.org tarehe 25 Septemba. + +Tafsiri zote pia zitakaguliwa kikamilifu kabla ya kuongezwa kwenye tovuti. + + diff --git a/public/content/translations/sw/contributing/translation-program/translatathon/index.md b/public/content/translations/sw/contributing/translation-program/translatathon/index.md new file mode 100644 index 00000000000..28eff2dd320 --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/translatathon/index.md @@ -0,0 +1,100 @@ +--- +title: Translatathon ya ethereum.org ya 2025 +lang: sw +template: Marathoni ya tafsiri +--- + + + + + + + +## Utangulizi {#introduction} + +Tunaamini kwamba maudhui ya Ethereum na rasilimali za kuanzisha zinapaswa kupatikana kwa kila mtu, bila kujali lugha wanayozungumza. +Ili kusogea karibu na lengo hili, mpango wa utafsiri wa ethereum.org ni mpango wa kutafsiri tovuti katika lugha nyingi iwezekanavyo. + +Kama sehemu ya mpango wa utafsiri, tunaandaa toleo la 3 la Translatathon, shindano letu la utafsiri linalolenga kuhamasisha michango ya utafsiri katika lugha ambazo hazitumiki sana, kuongeza idadi ya lugha na kiasi cha maudhui yanayopatikana kwenye tovuti, kuwakaribisha wachangiaji wapya na kuwazawadia waliopo. + +Ikiwa wewe ni mzungumzaji asilia wa lugha nyingine isipokuwa Kiingereza na unataka kusaidia kufanya maudhui ya Ethereum yapatikane zaidi huku ukishindania zawadi, endelea kusoma ili kujifunza zaidi! + +[Jifunze zaidi kuhusu mpango wa utafsiri wa ethereum.org](/contributing/translation-program/) + +## Ratiba {#timeline} + +Hizi hapa ni tarehe muhimu za Translatathon ya 2025: + + + + + +## Shiriki {#participate} + +![Picha ya jamii na dunia](./participate.png) + + + +

Nani anaweza kushiriki?

+ Mtu yeyote mwenye umri wa zaidi ya miaka 18, mzungumzaji asilia wa angalau lugha moja isiyo ya Kiingereza na anayekimudu Kiingereza. +
+ +

Je, ninahitaji kuwa mtafsiri?

+ Hapana. Unahitaji tu kuwa na lugha mbili na kupendekeza tafsiri za kibinadamu (kutumia tafsiri ya mashine ni marufuku!) kwa kadri ya uwezo wako, uzoefu wa kitaalamu hauhitajiki. +
+
+ + + +

Ninahitaji kutumia muda kiasi gani?

+ Muda wowote unaotaka. Kiwango cha chini cha kustahiki zawadi ni maneno 1,000 yaliyotafsiriwa, ambacho kinapaswa kuchukua takriban saa 2 kukamilisha, huku kushindania zawadi za juu kutahitaji kujitolea kwa muda mwingi zaidi. +
+ +

Je, ninahitaji kuifahamu Ethereum?

+ Hapana. Ingawa kuifahamu Ethereum kunaweza kusaidia katika uzalishaji na ubora wako, Translatathon pia ni fursa ya kujifunza, na kila mtu anakaribishwa kujiunga na kujifunza zaidi kuhusu Ethereum huku akishiriki. +
+
+ +Kwa maelezo zaidi, [tazama Vigezo na Masharti kamili](/contributing/translation-program/translatathon/terms-and-conditions) + +### Maelekezo ya hatua kwa hatua {#step-by-step-instructions} + + + +## Zawadi {#prizes} + +| Nafasi | Kiasi cha zawadi | +| ------------------- | ---------------- | +| Nafasi ya 1 | $4000 | +| Nafasi ya 2 | $2500 | +| Nafasi ya 3 | $1500 | +| Nafasi ya 4 | $1100 | +| Nafasi ya 5 | $1000 | +| Nafasi ya 6 | $600 | +| Nafasi ya 7 | $550 | +| Nafasi ya 8 | $500 | +| Nafasi ya 9 | $450 | +| Nafasi ya 10 | $400 | +| Nafasi ya 11 - 20 | $240 | +| Nafasi ya 21 - 50 | $120 | +| Nafasi ya 51 - 100 | $60 | +| Nafasi ya 101 - 150 | $40 | +| Wengine | $20 | + +Zawadi zote zitalipwa kwa ETH. + + + + diff --git a/public/content/translations/sw/contributing/translation-program/translators-guide/index.md b/public/content/translations/sw/contributing/translation-program/translators-guide/index.md new file mode 100644 index 00000000000..6095c08ef26 --- /dev/null +++ b/public/content/translations/sw/contributing/translation-program/translators-guide/index.md @@ -0,0 +1,299 @@ +--- +title: "''Mwongozo wa watafsiri.''" +lang: sw +description: "''Maelekezo na vidokezo kwa watafsiri wa ethereum.org.''" +--- + +# Mwongozo wa Mtindo wa Tafsiri wa Ethereum.org {#style-guide} + +''Mwongozo wa mtindo wa tafsiri wa ethereum.org unaorodhesha baadhi ya miongozo muhimu, maelekezo na vidokezo kwa watafsiri, ukitusaidia kutafsiri na kuandaa wavuti kwa lugha za mtaa.''. + +''Hati hii inatumika kama mwongozo wa jumla na haijaziingizwa kwenye lugha yoyote maalum.''. + +Ikiwa una maswali, mapendekezo au maoni yoyote, jisikie huru kuwasiliana nasi kupitia translations@ethereum.org, tuma ujumbe kwa @ethdotorg kwenye Crowdin, au [jiunge na Discord yetu](https://discord.gg/ethereum-org), ambapo unaweza kututumia ujumbe katika chaneli ya #translations au wasiliana na mwanachama yeyote wa timu. + +## Kutumia Crowdin {#using-crowdin} + +Unaweza kupata maagizo ya msingi kuhusu jinsi ya kujiunga na mradi katika Crowdin na jinsi ya kutumia kihariri cha mtandaoni cha Crowdin kwenye [ukurasa wa Mpango wa Tafsiri](/contributing/translation-program/#how-to-translate). + +Ikiwa ungependa kujifunza zaidi kuhusu Crowdin na kutumia baadhi ya vipengele vyake vya hali ya juu, [msingi wa maarifa wa Crowdin](https://support.crowdin.com/online-editor/) una miongozo mingi ya kina na muhtasari wa utendaji kazi wote wa Crowdin. + +## Kupata Kiini cha Ujumbe {#capturing-the-essence} + +''Wakati wa kutafsiri maudhui ya ethereum.org, epuka tafsiri ya maneno moja kwa moja.''. + +''Ni muhimu kwamba tafsiri zikamatishe kiini cha ujumbe.''. Hii inaweza kumaanisha kutunga upya maneno fulani, au kutumia tafsiri zenye maelezo badala ya kutafsiri maudhui neno kwa neno. + +Lugha tofauti zina kanuni tofauti za sarufi, kaida na mpangilio wa maneno. Wakati wa kutafsiri, tafadhali zingatia jinsi sentensi zinavyoundwa katika lugha lengwa, na epuka kutafsiri neno kwa neno kutoka kwa chanzo cha Kiingereza, kwani hii inaweza kusababisha muundo duni wa sentensi na usomaji. + +Badala ya kutafsiri maandiko neno kwa neno, inashauriwa kusoma sentensi nzima na kuirekebisha ili iendane na kanuni za lugha lengwa. + +## Rasmi dhidi ya isiyo rasmi {#formal-vs-informal} + +Tunatumia lugha rasmi, ambayo daima ni ya heshima na inafaa kwa wageni wote. + +Kutumia mtindo rasmi wa kuhutubia hutuwezesha kuepuka kuonekana kama wasio rasmi au wakosoaji, na hufanya kazi bila kujali umri au jinsia ya mgeni. + +Lugha nyingi za Kihindi-Kiulaya na Kiafrika-Kiasia hutumia viwakilishi vya kibinafsi vya mtu wa pili mahususi jinsia, ambavyo hutofautisha kati ya mwanamume na mwanamke. Tunapozungumza na mtumiaji au kutumia viwakilishi vimilikishi, tunaweza kuepuka kuchukulia jinsia ya mgeni, kwa kuwa aina rasmi ya anwani inatumika kwa ujumla na inalingana, bila kujali jinsi wanavyotambua. + +## Msamiati na maana rahisi na wazi {#simple-vocabulary} + +Lengo letu ni kufanya maudhui kwenye tovuti yaeleweke kwa watu wengi iwezekanavyo. + +Katika visa vingi, hili linaweza kufikiwa kwa urahisi kwa kutumia maneno mafupi na rahisi ambayo yanaeleweka kwa urahisi. Iwapo kuna tafsiri nyingi zinazowezekana za neno fulani katika lugha yako zenye maana sawa, chaguo bora zaidi mara nyingi ni neno fupi zaidi linaloakisi maana yake kwa uwazi. + +## Mfumo wa uandishi {#writing-system} + +Ethereum.org inapatikana katika lugha kadhaa, kwa kutumia mifumo mbadala ya uandishi (au hati za uandishi) badala ya Kilatini. + +Maudhui yote yanapaswa kutafsiriwa kwa kutumia mfumo sahihi wa uandishi wa lugha yako, na yasijumuishe maneno yoyote, yaliyoandikwa kwa kutumia herufi za Kilatini. + +Wakati wa kutafsiri maudhui, unapaswa kuhakikisha kuwa tafsiri zinawiana na hazijumuishi herufi zozote za Kilatini. + +Dhana potofu ya kawaida ni kwamba Ethereum inapaswa kuandikwa daima kwa Kilatini. Hii mara nyingi si sahihi, tafadhali tumia tahajia ya Ethereum, asili ya lugha yako (k.m., 以太坊 kwa Kichina, إيثيريوم kwa Kiarabu, n.k.). + +**Hayo yaliyo hapo juu hayatumiki kwa lugha, ambapo majina maalum hayapaswi kutafsiriwa kama kanuni.** + +## Kutafsiri metadata ya ukurasa {#translating-metadata} + +Baadhi ya kurasa zina metadata kwenye ukurasa, kama vile 'title', 'lang', 'description', 'sidebar', n.k. + +Tunaficha maudhui ambayo watafsiri hawapaswi kamwe kutafsiri wakati wa kupakia kurasa mpya kwa Crowdin, kumaanisha kuwa metadata yote inayoonekana kwa watafsiri katika Crowdin inapaswa kutafsiriwa. + +Tafadhali kuwa mwangalifu hasa unapotafsiri misururu yoyote ambapo maandishi chanzo ni 'en'. Hii inawakilisha lugha ambayo ukurasa unapatikana na inapaswa kutafsiriwa kwa [msimbo wa lugha wa ISO wa lugha yako](https://www.andiamo.co.uk/resources/iso-language-codes/). Misururu hii inapaswa kutafsiriwa daima kwa kutumia herufi za Kilatini, si hati ya uandishi, ya asili ya lugha lengwa. + +Ikiwa huna uhakika ni msimbo wa lugha gani utumie, unaweza kuangalia kumbukumbu ya tafsiri katika Crowdin au kupata msimbo wa lugha ya lugha yako katika URL ya ukurasa katika kihariri cha mtandaoni cha Crowdin. + +Baadhi ya mifano ya misimbo ya lugha kwa lugha zinazozungumzwa zaidi: + +- Kiarabu - ar +- Kichina Kilichorahisishwa - zh +- Kifaransa - fr +- Kihindi - hi +- Kihispania - es + +## Vichwa vya habari vya makala za nje {#external-articles} + +Baadhi ya misururu ina vichwa vya habari vya makala za nje. Kurasa zetu nyingi za nyaraka za wasanidi programu zina viungo vya makala za nje kwa ajili ya usomaji zaidi. Mifuatano iliyo na mada za makala inahitaji kutafsiliwa, bila kujali lugha ya makala, ili kuhakikisha matumizi thabiti zaidi ya mtumiaji kwa wanaotazama ukurasa katika lugha yao. + +''Unaweza kupata baadhi ya mifano ya jinsi mistari hii inavyoonekana kwa watafsiri na jinsi ya kuibaini hapa chini (viungo vya makala vinapatikana zaidi sehemu ya chini ya kurasa hizi, katika sehemu ya 'kusoma zaidi'): + +![Vichwa vya habari vya makala katika upau wa kando.png](./article-titles-in-sidebar.png) +![Vichwa vya habari vya makala katika kihariri.png](./article-titles-in-editor.png) + +## Maonyo ya Crowdin {#crowdin-warnings} + +Crowdin ina kipengele kilichojengewa ndani ambacho huwaonya watafsiri wanapokaribia kufanya kosa. Crowdin itakuonya kiotomatiki kuhusu hili kabla ya kuhifadhi tafsiri yako ikiwa utasahau kujumuisha lebo kutoka kwa chanzo, kutafsiri vipengele ambavyo havipaswi kutafsiriwa, kuongeza nafasi kadhaa mfululizo, kusahau alama za mwisho za uakifishaji, n.k. +Ukiona onyo kama hili, tafadhali rudi nyuma na uangalie upya tafsiri iliyopendekezwa. + +**Usiwahi kupuuza maonyo haya, kwani kwa kawaida yanamaanisha kuwa kuna kitu kibaya, au kwamba tafsiri inakosa sehemu muhimu ya maandishi chanzo.** + +Mfano wa onyo la Crowdin unaposahau kuongeza lebo kwenye tafsiri yako: +![Mfano wa onyo la Crowdin](./crowdin-warning-example.png) + +## Kushughulikia lebo na vijisehemu vya msimbo {#dealing-with-tags} + +''Sehemu kubwa ya maudhui ya kozi ina alama na vigezo, ambavyo vinaangaziwa kwa rangi ya njano katika mhariri wa jukwaa la tafsiri.''. 'Kila moja ina kazi yake, hivyo zinapaswa kutumika kwa njia sahihi.''. + +**Mipangilio ya Crowdin** + +''Ili iwe rahisi kusimamia alama na kunakili moja kwa moja kutoka chanzo, tunapendekeza ubadilishe mipangilio yako kwenye mhariri wa jukwaa la tafsiri.''. + +1. Fungua mipangilio + ![Jinsi ya kufungua mipangilio katika kihariri](./editor-settings.png) + +2. ''Shuka chini hadi sehemu ya 'alama ya HTML'.'' + +3. Chagua 'Ficha' + ![Tafadhali chagua 'Ficha'](./hide-tags.png) + +4. ''Bonyeza 'hifadhi'.'' + +''Kwa kuchagua chaguo hili, maandiko kamili ya alama hayatatarajiwa kuonekana tena, na badala yake yataonyesha kwa namba.''. +Wakati wa kutafsiri, kubofya lebo hii kutanakili kiotomatiki lebo kamili kwenye sehemu ya tafsiri. + +**Viungo** + +Unaweza kugundua viungo kamili vya kurasa kwenye ethereum.org au tovuti zingine. + +Hivi vinapaswa kufanana na chanzo na visibadilishwe au kutafsiriwa. Ukitafsiri kiungo au ukikibadilisha kwa njia yoyote, hata kuondoa tu sehemu yake, kama vile mkwaju (/), hii itasababisha viungo vilivyovunjika na visivyoweza kutumika. + +Njia bora ya kushughulikia viungo ni kuvinakili moja kwa moja kutoka kwenye chanzo, ama kwa kuvibofya au kutumia kitufe cha ‘Nakili Chanzo’ (Alt+C). + +![Mfano wa kiungo.png](./example-of-link.png) + +Viungo pia huonekana katika maandishi chanzo katika mfumo wa lebo (yaani, `<0>` ``). Ukielea juu ya lebo, kihariri kitaonyesha maudhui yake kamili - wakati mwingine lebo hizi zitawakilisha viungo. + +Ni muhimu sana kunakili viungo kutoka kwenye chanzo na si kubadilisha mpangilio wao. + +Ikiwa mpangilio wa lebo utabadilishwa, kiungo wanachowakilisha kitavunjika. + +![Mfano wa viungo ndani ya lebo.png](./example-of-links-inside-tags.png) + +**Lebo na vigezo** + +Maandishi chanzo yana aina nyingi tofauti za lebo, ambazo zinapaswa kunakiliwa daima kutoka kwa chanzo na zisiwahi kubadilishwa. Sawa na hapo juu, mpangilio wa lebo hizi katika tafsiri unapaswa pia kubaki sawa na chanzo. + +Lebo daima huwa na lebo ya ufunguzi na ya kufunga. Katika visa vingi, maandishi kati ya lebo za ufunguzi na kufunga yanapaswa kutafsiriwa. + +Mfano: ``Ugatuaji`` + +`` - _Lebo ya ufunguzi inayofanya maandishi kuwa mazito_ + +Ugatuaji - _Maandishi yanayoweza kutafsiriwa_ + +`` - _Lebo ya kufunga_ + +![Mfano wa lebo za 'strong'.png](./example-of-strong-tags.png) + +Vijisehemu vya msimbo vinapaswa kushughulikiwa tofauti kidogo na lebo zingine, kwa kuwa vina msimbo ambao haupaswi kutafsiriwa. + +Mfano: ``nonce`` + +`` - _Lebo ya ufunguzi, ambayo ina kijisehemu cha msimbo_ + +nonce - _Maandishi yasiyoweza kutafsiriwa_ + +`` - _Lebo ya kufunga_ + +![Mfano wa vijisehemu vya msimbo.png](./example-of-code-snippets.png) + +Maandishi chanzo pia yana lebo fupishi, ambazo zina nambari tu, ikimaanisha kuwa kazi yake haionekani wazi mara moja. Unaweza kuelekeza juu ya lebo hizi ili kuona hasa kazi gani zinafanya. + +Katika mfano ulio hapa chini, unaweza kuona kuwa kuelea juu ya lebo ya `<0>` huonyesha kuwa inawakilisha `` na ina kijisehemu cha msimbo, kwa hivyo maudhui yaliyo ndani ya lebo hizi hayapaswi kutafsiriwa. + +![Mfano wa lebo zenye utata.png](./example-of-ambiguous-tags.png) + +## Fomu fupi dhidi ya ndefu/vifupisho {#short-vs-full-forms} + +Kuna vifupisho vingi vinavyotumika kwenye tovuti, k.m., mfumo mtawanyo wa kimamlaka, NFT, DAO, DeFi, n.k. Vifupisho hivi hutumiwa sana katika lugha ya Kiingereza na wageni wengi kwenye tovuti wanavifahamu. + +Kwa kuwa kwa kawaida hazina tafsiri zilizoanzishwa katika lugha zingine, njia bora ya kushughulikia maneno haya na sawa ni kutoa tafsiri ya maelezo ya fomu kamili, na kuongeza ufupisho wa Kiingereza kwenye mabano. + +Usitafsiri vifupisho hivi, kwa kuwa watu wengi hawangevifahamu, na matoleo yaliyotanabaishwa hayatakuwa na maana kwa wageni wengi. + +Mfano wa jinsi ya kutafsiri mfumo mtawanyo wa kimamlaka: + +- Mifumo iliyotawanywa (mfumo mtawanyo wa kimamlaka) → _Fomu kamili iliyotafsiriwa (kifupisho cha Kiingereza kwenye mabano)_ + +## Istilahi zisizo na tafsiri zilizozoeleka {#terms-without-established-translations} + +Baadhi ya istilahi huenda zisiwe na tafsiri zilizozoeleka katika lugha zingine, na zinajulikana sana kwa istilahi asilia ya Kiingereza. Istilahi kama hizo hujumuisha dhana mpya zaidi, kama vile uthibitisho-wa-kazi, uthibitisho-wa-usalama, Mnyororo Kioleza, kusimamisha, n.k. + +Ingawa kutafsiri maneno haya kunaweza kusikika kuwa si ya kawaida, kwa kuwa toleo la Kiingereza linatumiwa sana katika lugha nyingine pia, inashauriwa sana zitafsiliwe. + +Unapozitafsiri, jisikie huru kuwa mbunifu, tumia tafsiri zenye maelezo, au zafsiri kihalisi tu. + +**Sababu kwa nini maneno mengi yanapaswa kutafsiliwa, badala ya kuacha baadhi katika Kiingereza, ni ukweli kwamba istilahi hii mpya itaenea zaidi katika siku zijazo, watu wengi wanaanza kutumia Ethereum na teknolojia zinazohusiana. Iwapo tunataka kuvutia watu wengi zaidi kutoka pande zote za dunia kujiunga na eneo hili, tunapaswa kutoa istilahi zinazoweza kueleweka katika lugha nyingi kadri inavyowezekana, hata kama tutalazimika kuziunda sisi wenyewe.** + +## Vifungo na CTA {#buttons-and-ctas} + +Tovuti ina vifungo vingi, ambavyo vinapaswa kutafsiriwa tofauti na maudhui mengine. + +Maandishi ya vitufe yanaweza kutambuliwa kwa kuangalia picha za skrini za muktadha, zilizounganishwa na mifuatano mingi, au kwa kuangalia muktadha katika kihariri, ambacho kinajumuisha maneno ‘’kitufe’’. + +Tafsiri za vifungo zinapaswa kuwa fupi iwezekanavyo, ili kuzuia kutofautiana kwa uumbizaji. Zaidi ya hayo, tafsiri za vifungo zinapaswa kuwa za kuamuru, yaani, zionyeshe amri au ombi. + +![Jinsi ya kupata kitufe.png](./how-to-find-a-button.png) + +## Kutafsiri kwa Ujumuishi {#translating-for-inclusivity} + +Wageni wa Ethereum.org wanatoka kote ulimwenguni na kutoka katika malezi tofauti. Kwa hiyo, lugha kwenye tovuti inapaswa kuwa ya upande wowote, inayomkaribisha kila mtu na isiyo ya ubaguzi. + +Kipengele muhimu cha hili ni kutokuwa na upendeleo wa kijinsia. Hili linaweza kufikiwa kwa urahisi kwa kutumia lugha rasmi, na kuepuka maneno yoyote maalum ya kijinsia katika tafsiri. + +Aina nyingine ya ujumuishi ni kujaribu kutafsiri kwa hadhira ya kimataifa, si mahususi kwa nchi, kabila au eneo lolote. + +Mwishowe, lugha inapaswa kufaa kwa hadhira na rika zote. + +## Tafsiri mahususi za lugha {#language-specific-translations} + +Wakati wa kutafsiri, ni muhimu kufuata kanuni za sarufi, desturi na mpangilio unaotumika katika lugha yako, badala ya kunakili moja kwa moja kutoka kwenye chanzo. Maandishi chanzo hufuata kanuni za sarufi na kaida za Kiingereza, ambazo hazitumiki kwa lugha nyingine nyingi. + +Unapaswa kufahamu kanuni za lugha yako na utafsiri ipasavyo. Ikiwa unahitaji usaidizi, wasiliana nasi na tutakusaidia kupata baadhi ya rasilimali kuhusu jinsi vipengele hivi vinavyopaswa kutumika katika lugha yako. + +Baadhi ya mifano ya mambo ya kuzingatia hasa: + +### Uakifishaji, uumbizaji {#punctuation-and-formatting} + +**Matumizi ya herufi kubwa** + +- Kuna tofauti kubwa katika matumizi ya herufi kubwa katika lugha tofauti. +- Katika Kiingereza, ni kawaida kuanza maneno yote kwa herufi kubwa katika vichwa vya habari na majina, miezi na siku, majina ya lugha, likizo, n.k. Katika lugha nyingine nyingi, hii si sahihi kisarufi, kwani zina kanuni tofauti za matumizi ya herufi kubwa. +- Baadhi ya lugha pia zina kanuni za kuanza na herufi kubwa kwa viwakilishi vya nafsi, nomino, na vivumishi fulani, ambavyo havianzi kwa herufi kubwa katika Kiingereza. + +**Nafasi** + +- Kanuni za tahajia hufafanua matumizi ya nafasi kwa kila lugha. Kwa sababu nafasi hutumiwa kila mahali, kanuni hizi ni baadhi ya zinazotofautiana zaidi, na nafasi ni baadhi ya vipengele vinavyotafsiriwa vibaya zaidi. +- Baadhi ya tofauti za kawaida katika nafasi kati ya Kiingereza na lugha zingine: + - Nafasi kabla ya vipimo na sarafu (k.m., USD, EUR, kB, MB) + - Nafasi kabla ya alama za nyuzi (k.m., °C, ℉) + - Nafasi kabla ya baadhi ya alama za uakifishaji, hasa nukta-nukta (...) + - Nafasi kabla na baada ya mikwaju (/) + +**Orodha** + +- Kila lugha ina seti tofauti na changamano ya kanuni za kuandika orodha. Hizi zinaweza kuwa tofauti sana na Kiingereza. +- Katika baadhi ya lugha, neno la kwanza la kila mstari mpya linahitaji kuanza kwa herufi kubwa, wakati katika lugha zingine, mistari mipya inapaswa kuanza kwa herufi ndogo. Lugha nyingi pia zina kanuni tofauti kuhusu matumizi ya herufi kubwa katika orodha, kulingana na urefu wa kila mstari. +- Hali kadhalika kwa uakifishaji wa vipengee vya mstari. Uakifishaji wa mwisho katika orodha unaweza kuwa kitone (**.**), koma (**,**), au nusu-koma (**;**), kulingana na lugha. + +**Alama za nukuu** + +- Lugha hutumia alama nyingi tofauti za nukuu. Kunakili tu alama za nukuu za Kiingereza kutoka chanzo mara nyingi si sahihi. +- Baadhi ya aina za kawaida za alama za nukuu ni pamoja na: + - „maandishi ya mfano“ + - ‚maandishi ya mfano’ + - »maandishi ya mfano« + - “maandishi ya mfano” + - ‘maandishi ya mfano’ + - «maandishi ya mfano» + +**Vistariungio na Deshi** + +- Katika Kiingereza, kistariungio (-) hutumika kuunganisha maneno au sehemu tofauti za neno, wakati deshi (–) hutumika kuonyesha masafa au kusitisha. +- Lugha nyingi zina kanuni tofauti za kutumia vistariungio na deshi ambazo zinapaswa kuzingatiwa. + +### Miundo {#formats} + +**Nambari** + +- Tofauti kuu katika kuandika nambari katika lugha tofauti ni kitenganishi kinachotumika kwa desimali na maelfu. Kwa maelfu, hii inaweza kuwa kitone, koma au nafasi. Vivyo hivyo, baadhi ya lugha hutumia nukta ya desimali, wakati zingine hutumia koma ya desimali. + - Baadhi ya mifano ya nambari kubwa: + - Kiingereza – **1,000.50** + - Kihispania – **1.000,50** + - Kifaransa – **1 000,50** +- Jambo lingine muhimu la kuzingatia wakati wa kutafsiri nambari ni alama ya asilimia. Inaweza kuandikwa kwa njia tofauti: **100%**, **100 %** au **%100**. +- Mwishowe, nambari hasi zinaweza kuonyeshwa tofauti, kulingana na lugha: -100, 100-, (100) au [100]. + +**Tarehe** + +- Wakati wa kutafsiri tarehe, kuna idadi ya mazingatio na tofauti kulingana na lugha. Hizi ni pamoja na muundo wa tarehe, kitenganishi, matumizi ya herufi kubwa na sifuri zinazoongoza. Pia kuna tofauti kati ya tarehe za urefu kamili na za nambari. + - Baadhi ya mifano ya miundo tofauti ya tarehe: + - Kiingereza cha Uingereza (dd/mm/yyyy) – 1st January, 2022 + - Kiingereza cha Marekani (mm/dd/yyyy) – January 1st, 2022 + - Kichina (yyyy-mm-dd) – 2022 年 1 月 1 日 + - Kifaransa (dd/mm/yyyy) – 1er janvier 2022 + - Kiitaliano (dd/mm/yyyy) – 1º gennaio 2022 + - Kijerumani (dd/mm/yyyy) – 1. Januar 2022 + +**Sarafu** + +- Kutafsiri sarafu kunaweza kuwa changamoto, kutokana na miundo, kaida na ubadilishaji tofauti. Kama kanuni ya jumla, tafadhali weka sarafu sawa na chanzo. Unaweza kuongeza sarafu yako ya ndani na ubadilishaji katika mabano, kwa manufaa ya msomaji. +- Tofauti kuu katika kuandika sarafu katika lugha tofauti ni pamoja na uwekaji wa alama, koma za desimali dhidi ya nukta za desimali, nafasi, na vifupisho dhidi ya alama. + - Uwekaji wa alama: $100 au 100$ + - Koma za desimali dhidi ya nukta za desimali: 100,50$ au 100.50$ + - Nafasi: 100$ au 100 $ + - Vifupisho dhidi ya alama: 100 $ au 100 USD + +**Vipimo** + +- Kama kanuni ya jumla, tafadhali weka vipimo kulingana na chanzo. Ikiwa nchi yako inatumia mfumo tofauti, unaweza kujumuisha ubadilishaji katika mabano. +- Kando na ujanibishaji wa vipimo, ni muhimu pia kutambua tofauti katika jinsi lugha zinavyoshughulikia vipimo hivi. Tofauti kuu ni nafasi kati ya nambari na kipimo, ambayo inaweza kuwa tofauti, kulingana na lugha. Mifano ya hii ni pamoja na 100kB dhidi ya 100 kB au 50ºF dhidi ya 50 ºF. + +## Hitimisho {#conclusion} + +Kutafsiri ethereum.org ni fursa nzuri ya kujifunza kuhusu nyanja mbalimbali za Ethereum. + +Unapotafsiri, jaribu kutokuwa na haraka. Chukua kwa urahisi na ufurahie! + +Asante kwa kushiriki katika Mpango wa Tafsiri na kutusaidia kufanya tovuti ipatikane kwa hadhira pana zaidi. Jumuiya ya Ethereum ni ya kimataifa, na tunafurahi kuwa wewe ni sehemu yake! diff --git a/public/content/translations/sw/dao/index.md b/public/content/translations/sw/dao/index.md new file mode 100644 index 00000000000..00220054911 --- /dev/null +++ b/public/content/translations/sw/dao/index.md @@ -0,0 +1,169 @@ +--- +title: DAO ni nini? +metaTitle: DAO ni nini? | Shirika Linalojitawala Lililogatuliwa +description: Muhtasari wa DAO juu ya Ethereum +lang: sw +template: use-cases +emoji: ":handshake:" +sidebarDepth: 2 +image: /images/use-cases/dao-2.png +alt: Uwakilishi wa DAO wa kupiga kura juu ya pendekezo. +summaryPoint1: Jamii zinazomilikiwa na wanachama bila miongozo ya serikali. +summaryPoint2: Njia salama ya kushirikiana na wageni wa mtandaoni. +summaryPoint3: Sehemu salama ya kutoa fedha kwa sababu maalumu. +--- + +## DAOs ni nini? {#what-are-daos} + +Mashirika huru gatuzi (DAO) ni mashirika yanayomilikiwa kwa pamoja kufanya kazi kuelekea malengo ya kushirikishana. + +Mashirika huru yaliogatuliwa (DAOs) yanaturuhusu kufanya kazi na watu wenye mielekeo kama yetu ulimwenguni kote pasipokuwepo kuamini kiongozi mwema atakae simamia fedha au operesheni zetu. Hakuna mkurugenzi mtendaji ambaye atatumia fedha kwa mpigo wala afisa mkuu wa fedha wakuharibu vitabu vya fesha. Badala yake, sheria za minyororo ya bloku zilizookwa kwenye kanunu, zinafafanua vile shirika linafanya kazi na vile fedha zinatumika. + +Wana hazina zilizojengwa ndani ambazo hakuna mtu mwenye mamlaka ya kuzipata bila idhini ya kikundi. Maamuzi hutawaliwa na mapendekezo na upigaji kura ili kuhakikisha kila mtu katika shirika ana sauti, na kila kitu hutokea kwa uwazi [kwenye mnyororo](/glossary/#onchain). + +## Kwanini tunahitaji DAO? {#why-dao} + +Kuanzisha shirika na mtu anayehusisha ufadhili na pesa kunahitaji uaminifu mkubwa kwa watu unaofanya kazi nao. Lakini ni vigumu kumwamini mtu ambaye umesiliana naye mtandaoni tu. Ukiwa na DAO huhitaji kumwamini mtu mwingine yeyote kwenye kikundi, ila msimbo wa DAO pekee, ambao uko wazi 100% na unaweza kuthibitishwa na mtu yeyote. + +Hii inafungua fursa nyingi mpya za ushirikiano na uratibu wa kimataifa. + +### Ulinganisho {#dao-comparison} + +| DAO | Shirika la jadi | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| Huwa ni tambarare, na iliyo na demokrasia kamili. | Kwa kawaida huwa na madaraja. | +| Ili mabadilioko yoyote yafanyike wanachama lazima wapige kura. | Mabadiliko yanaweza kuhitajika kutoka chama pekee, ama upigaji wa kura utakuwepo, kwa kutegemea muundo. | +| Kura zitahesabiwa, na matokeo yatatekelezwa kwa njia ya otomatiki bila kutumia mpatanishi. | Kama upigaji kura utaruhusiwa, kura zitahesabiwa ndani, na matokeo ya upigaji kura lazima yashughulikiwe kwa mikono. | +| Huduma zinazotolewa zinatekelwza kwa njia ya otomatiki kwa namna iliogatuliwa (kwa mfano ugawanyaji wa pesa za hisani). | Inahitaji kutekelezwa na binandamu, ama mfumo wa otomatiki wa kiserikali, ambao unakua hatarini kufanyiwa ghiliba. | +| Shughuli zote ziko wazi kwa jamii. | Shughuli zote zinafanywa kwa siri, na hazitolewi kwa umma. | + +### Mifano ya DAO {#dao-examples} + +Ili kuongeza uelewa juu ya haya, angalia mifano kadhaa ya DAO ambayo ungeweza kutumia: + +- **Shirika la hisani** – unaweza kukubali michango kutoka kwa mtu yeyote duniani na kupiga kura ni sababu zipi za kufadhili. +- **Umiliki wa pamoja** – unaweza kununua mali halisi au za kidijitali na wanachama wanaweza kupiga kura jinsi ya kuzitumia. +- **Ubia na ruzuku** – unaweza kuunda mfuko wa ubia unaokusanya mtaji wa uwekezaji na kupiga kura kuhusu ubia gani wa kuunga mkono. Malipo yanaweza kugawanya baadae miongoni mwa wanachama wa DAO. + + + +## DAO zinafanyaje kazi? {#how-daos-work} + +Uti wa mgongo wa DAO ni [mkataba wake mahiri](/glossary/#smart-contract), unaofafanua sheria za shirika na kushikilia hazina ya kikundi. Pale mkataba unapokua hai kwenye Ethereum, hakuna anaeweza kubadili sheria ila kwa kupiga kura tu. Kama mtu yeyote atajaribu kufanya kitu kinyume na sheria na mantiki ya msimbo, hatafanikiwa. Kwasababu mkataba erevu hufafanua hazina, inamaana kwamba hamna mtu anayeweza kutumia pesa bila kuruhusiwa na kundi. Hii inamaana DAO hazihitaji mamlaka ya kati. Badala yake, kundi hutoa maamuzi kwa pamoja, na malipo yanaruhusiwa kwa automatiki pale kura zinapopigwa. + +Hii inawezekana kwasababu mikataba erevu ina ngao-ya-uvamizi mara inapokua hai kwenye Ethereum. Huwezi kuhariri msimbo (sheria za DAO) bila watu kugundua kwasababu kila kitu kiko wazi kwa umma. + +## Ethereum na DAOs {#ethereum-and-daos} + +Ethereum ndio msingi thabiti wa DAO kwasababu kadhaa: + +- Makubaliano ya Ethereum yamesambazwa na yenye nguvu ya kutosha mpaka mashirika kuamini mtandao. +- Msimbo wa mkataba erevu hauwezi kubadilishwa pale unapokua hai, hata na wamiliki wake. Hii huruhusu DAO kujiendesha na masharti yaliowekwa kwenye msimbo toka mwanzo. +- Mikataba erevu inaweza kutuma/kupokea fedha. Bila hii ungehitaji mpatanishi unaemuamini ili asimamie fedha za kundi. +- Jamii ya Ethereum imethibitishwa kuwa ya ushirikiano zaidi kuliko ushindani, na hii imeruhusu utendaji mzuri na mifumo ya usaidizi kuvumbuliwa haraka zaidi. + +## Utawala wa DAO {#dao-governance} + +Kuna mambo mengi ya kuzingatia unapo tawala DAO, kama vile upigaji kura na kazi ya mapendekezo. + +### Uwakilishi {#governance-delegation} + +Ujumbe ni kama DAO toleo la wajumbe kidemokrasia. Wamiliki tokeni hukabidhi kura kwa watumizi amabao hujiteua wenyewe na kujitolea kuwakili programu and kukaa kujulishwa. + +#### Mfano maarufu {#governance-example} + +[ENS](https://claim.ens.domains/delegate-ranking) – Wamiliki wa ENS wanaweza kukabidhi kura zao kwa wanajamii wanaoshiriki kikamilifu ili kuwawakilisha. + +### Utawala wa muamala wa kiotomatiki {#governance-example} + +Kwa mikataba ya DAO, makubaliano hutekelezwa moja kwa moja kama kiwango cha kura za wanachama zinakubaliana. + +#### Mfano maarufu {#governance-example} + +[Nouns](https://nouns.wtf) – Katika Nouns DAO, muamala hutekelezwa kiotomatiki ikiwa akidi ya kura itafikiwa na walio wengi wakipiga kura ya ndiyo, mradi tu haijapingwa na waanzilishi. + +### Utawala wa Multisig {#governance-example} + +Ingawa DAOs zinaweza kuwa na maelfu ya wanachama wapigakura, fedha zinaweza kuwekwa kwenye [mkoba](/glossary/#wallet) unaotumiwa na wanajamii 5-20 hai wanaoaminika na kwa kawaida utambulisho wao ni wa umma (utambulisho wa umma unaojulikana na jamii). Baada ya kura, watia sahihi wa [multisig](/glossary/#multisig) hutekeleza matakwa ya jamii. + +## Sheria za DAO {#dao-laws} + +Mwaka wa 1977, eneo la wyoming ilivumbua dhima yenye kikomo (LLC) amabayo hukinga waekezaji na kuweka kikomo cha madeni. Hivi majuzi, walianzisha sheria za DAO ambazo ziliweka kisheria hali ya DAO. Kwa sasa wyoming, vermont na kisiwa cha virgin wana sheria za DAO kwa njia moja ama nyingine. + +### Mfano maarufu {#law-example} + +[CityDAO](https://citizen.citydao.io/) – CityDAO ilitumia sheria ya DAO ya Wyoming kununua ekari 40 za ardhi karibu na Hifadhi ya Taifa ya Yellowstone. + +## Uanachama wa DAO {#dao-membership} + +Kuna mifano tofauti tofauti ya uanachama wa DAO. Uanachama unaweza kuamua jinsi upigaji kura utafanya kazi na sehemu nyingine kuu za DAO husika. + +### Uanachama unaotegemea tokeni {#token-based-membership} + +Kwa kawaida [haihitaji ruhusa](/glossary/#permissionless) kikamilifu, kulingana na tokeni inayotumika. Mara nyingi tokeni hizi za utawala zinaweza kuuzwa bila ruhusa kwenye [exchange isiyogatuliwa](/glossary/#dex). Tokeni nyingine zitapatikana kwa kutoa ukwasi au baadhi ya 'uthibitisho-wa-kazi'. Kwa vyovyote vile, ukishikilia ruzuku za tokeni zinahukupa nafasi ya kupiga kura. + +_Kwa kawaida hutumika kutawala itifaki pana zilizogatuliwa na/au tokeni zenyewe._ + +#### Mfano maarufu {#token-example} + +[MakerDAO](https://makerdao.com) – Tokeni ya MakerDAO, MKR, inapatikana kwa wingi kwenye exchange zisizogatuliwa, na mtu yeyote anaweza kuinunua ili awe na uwezo wa kupiga kura kuhusu mustakabali wa itifaki ya Maker. + +### Uanachama unaotegemea hisa {#share-based-membership} + +DAO za-hisa zinahitaji ruhusa, ila bado ziko wazi. Mwanachama mtarajiwa yeyote anaweza akatoa pendekezo kujiunga na DAO, mara nyingi hutoa kodi ya thamani fulani katika mfumo wa tokeni au kazi. Hisa hutoa nguvu ya kupiga kura moja kwa moja na umiliki. Washiriki wanaweza kutoka mda wowote na uwiano wao wa sehemu ya hazina. + +_Hua inatumika kwa ajili ya muunganiko wa karibu, mashirika yanayozingatia binadamu kama vile misaada, mikusanyiko ya wafanyakazi na vilabu vya uwekezaji. Inaweza kutawala itifaki na tokeni._ + +#### Mfano maarufu {#share-example} + +[MolochDAO](http://molochdao.com/) – MolochDAO imejikita katika kufadhili miradi ya Ethereum. Inahitaji pendekezo kwenye chama ili kundi lifanye tathmini kama unavigezo vinavyokidhi mahitaji na mtaji kufanya maamuzi sahihi kuhusu wafadhili watarajiwa. Huwezi kununua ufikiaji wa DAO kwenye soko la wazi. + +### Uanachama unaotegemea sifa {#reputation-based-membership} + +Sifa za uanachama zinatoa ushahidi wa ushirika wao na kukupatia nguvu ya upigaji kura kwenye DAO. Kinyume cha tokeni ama uanachama wa msingi wa hisa, uanachama wa msingi wa sifa wa DAO hauhamishi umiliki kwende kwa wachangiaji. Sifa haziwezi kununuliwa, kuhamishwa au kukabidhiwa; wanachama wa DAO lazima wafanye kazi ya kupata sifa hizo kwa kushiriki. Upigaji kura kwenye mnyororo hauhitaji ruhusa na wanachama watarajiwa wanaweza kuwasilisha mapendekezo kwa uhuru ili kujiunga na DAO na kuomba kupokea sifa na tokeni kama zawadi kwa kubadilishana na michango yao. + +_Kwa kawaida hutumika kwa maendeleo yaliyogatuliwa na utawala wa itifaki na [mfumo mtawanyo wa kimamlaka](/glossary/#dapp), lakini pia inafaa kwa mashirika mbalimbali kama vile mashirika ya hisani, jumuiya za wafanyakazi, vilabu vya uwekezaji, n.k._ + +#### Mfano maarufu {#reputation-example} + +[DXdao](https://DXdao.eth.limo) – DXdao ilikuwa kundi huru la kimataifa linalojenga na kutawala itifaki na programu zilizogatuliwa tangu 2019. Ilitumia utawala unaotegemea sifa na [makubaliano ya holografia](/glossary/#holographic-consensus) ili kuratibu na kusimamia fedha, ikimaanisha hakuna mtu angeweza kununua ushawishi wa kuathiri mustakabali wake au utawala. + +## Jiunge na / anzisha DAO {#join-start-a-dao} + +### Jiunge na DAO {#join-a-dao} + +- [DAOs za jumuiya ya Ethereum](/community/get-involved/#decentralized-autonomous-organizations-daos) +- [Orodha ya DAOs ya DAOHaus](https://app.daohaus.club/explore) +- [Orodha ya DAOs ya Tally.xyz](https://www.tally.xyz/explore) +- [Orodha ya DAOs ya DeGov.AI](https://apps.degov.ai/) + +### Anzisha DAO {#start-a-dao} + +- [Anzisha DAO na DAOHaus](https://app.daohaus.club/summon) +- [Anzisha Governor DAO na Tally](https://www.tally.xyz/get-started) +- [Unda DAO inayoendeshwa na Aragon](https://aragon.org/product) +- [Anzisha colony](https://colony.io/) +- [Unda DAO kwa kutumia makubaliano ya holografia ya DAOstack](https://alchemy.daostack.io/daos/create) +- [Zindua DAO ukitumia DeGov Launcher](https://docs.degov.ai/integration/deploy) + +## Masomo zaidi {#further-reading} + +### Makala za DAO {#dao-articles} + +- [DAO ni nini?](https://aragon.org/dao) – [Aragon](https://aragon.org/) +- [House of DAOs](https://wiki.metagame.wtf/docs/great-houses/house-of-daos) – [Metagame](https://wiki.metagame.wtf/) +- [DAO ni nini na inatumika kwa nini?](https://daohaus.substack.com/p/-what-is-a-dao-and-what-is-it-for) – [DAOhaus](https://daohaus.club/) +- [Jinsi ya Kuanzisha Jumuiya ya Kidijitali Inayoendeshwa na DAO](https://daohaus.substack.com/p/four-and-a-half-steps-to-start-a) – [DAOhaus](https://daohaus.club/) +- [DAO ni nini?](https://coinmarketcap.com/alexandria/article/what-is-a-dao) – [Coinmarketcap](https://coinmarketcap.com) +- [Makubaliano ya Holografia ni Nini?](https://medium.com/daostack/holographic-consensus-part-1-116a73ba1e1c) - [DAOstack](https://daostack.io/) +- [DAOs si mashirika: ambapo ugatuzi katika mashirika yanayojitawala ni muhimu, na Vitalik](https://vitalik.eth.limo/general/2022/09/20/daos.html) +- [DAOs, DACs, DAs na Zaidi: Mwongozo Usiokamilika wa Istilahi](https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide) - [Blogu ya Ethereum](https://blog.ethereum.org) + +### Video {#videos} + +- [DAO ni nini katika crypto?](https://youtu.be/KHm0uUPqmVE) +- [Je, DAO Inaweza Kujenga Jiji?](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/sw/decentralized-identity/index.md b/public/content/translations/sw/decentralized-identity/index.md new file mode 100644 index 00000000000..55c9f202929 --- /dev/null +++ b/public/content/translations/sw/decentralized-identity/index.md @@ -0,0 +1,218 @@ +--- +title: Utambulisho uliokatuliwa +description: Ni nini utambulisho uliogatuliwa, na kwa nini ina umuhimu? +lang: sw +template: use-cases +emoji: ":id:" +sidebarDepth: 2 +image: /images/eth-gif-cat.png +summaryPoint1: Mifumo ya kitambulisho cha jadi imekita utoaji, matengenezo, na udhibiti wa vitambulisho vyako katika kituo kimoja. +summaryPoint2: Utambulisho uliogatuliwa huondoa utegemezi kwa washirika wengine wa kati. +summaryPoint3: Shukrani kwa crypto, watumiaji sasa wana zana za kutoa, kushikilia na kudhibiti vitambulisho na uthibitishaji wao wenyewe kwa mara nyingine. +--- + +Utambulisho unashikilia takriban kila nyanja ya maisha yako leo. Kutumia huduma za mtandaoni, kufungua akaunti ya benki, kupiga kura katika uchaguzi, kununua mali, kupata ajira—mambo haya yote yanahitaji kuthibitisha utambulisho wako. + +Hata hivyo, mifumo ya jadi ya usimamizi wa utambulisho kwa muda mrefu imetegemea wasuluhishi wa kati ambao hutoa, kushikilia, na kudhibiti vitambulisho vyako na [uthahidi](/glossary/#attestation). Hii ina maana kwamba huwezi kudhibiti taarifa zako zinazohusiana na utambulisho au kuamua ni nani anayeweza kufikia taarifa zinazoweza kumtambulisha mtu binafsi (PII) na ni kiasi gani cha ufikiaji ambacho wahusika hawa wanacho. + +Ili kutatua matatizo haya, tuna mifumo ya utambulisho iliyogatuliwa iliyojengwa kwenye mnyororo wa bloku za umma kama vile Ethereum. Utambulisho uliogatuliwa unaruhusu watu binafsi kusimamia taarifa zao zinazohusiana na utambulisho. Kwa masuluhisho ya utambulisho yaliyogatuliwa, _wewe_ unaweza kuunda vitambulisho na kudai na kushikilia uthibitishaji wako bila kutegemea mamlaka kuu, kama watoa huduma au serikali. + +## Utambulisho ni nini? {#what-is-identity} + +Utambulisho unamaanisha hisia ya mtu binafsi kujitambua, inayofafanuliwa na sifa za kipekee. Utambulisho unarejelea kuwa _mtu binafsi_, yaani, huluki ya kipekee ya binadamu. Utambulisho unaweza pia kurejelea huluki zingine zisizo za kibinadamu, kama vile shirika au mamlaka. + + + +## Vitambulisho ni nini? {#what-are-identifiers} + +Kitambulisho ni kipande cha taarifa kinachofanya kazi kama kielekezi kwa utambulisho au vitambulisho fulani. Vitambulisho vya kawaida ni pamoja na: + +- Jina +- Nambari ya usalama wa jamii/nambari ya kitambulisho cha kodi +- Nambari ya simu ya mkononi +- Tarehe na mahali pa kuzaliwa +- Vitambulisho vya kidijitali, k.m., anwani za barua pepe, majina ya watumiaji, avatari + +Mifano hii ya jadi ya vitambulisho hutolewa, hushikiliwa na kudhibitiwa na huluki za kati. Unahitaji ruhusa kutoka kwa serikali yako kubadilisha jina lako au kutoka kwenye jukwaa la mitandao ya kijamii ili kubadilisha jina lako la mtumiaji. + +## Faida za utambulisho uliogatuliwa {#benefits-of-decentralized-identity} + +1. Utambulisho uliogatuliwa huongeza udhibiti wa mtu binafsi wa taarifa za utambulisho. Vitambulisho na uthibitishaji vilivyogatuliwa vinaweza kuthibitishwa bila kutegemea mamlaka kuu na huduma za washirika wengine. + +2. Masuluhisho ya utambulisho uliogatuliwa huwezesha mbinu isiyo na uaminifu, isiyo na mshono, na inayolinda faragha kwa ajili ya kuthibitisha na kusimamia utambulisho wa mtumiaji. + +3. Utambulisho uliogatuliwa hutumia teknolojia ya mnyororo wa bloku, ambayo hujenga uaminifu kati ya pande tofauti na hutoa dhamana za kikriptografia kuthibitisha uhalali wa uthibitishaji. + +4. Utambulisho uliogatuliwa hufanya data ya utambulisho iweze kuhamishika. Watumiaji huhifadhi uthibitishaji na vitambulisho katika pochi ya simu na wanaweza kushiriki na mhusika yeyote wa chaguo lao. Vitambulisho na uthibitishaji vilivyogatuliwa havijafungiwa kwenye hifadhidata ya shirika linalotoa. + +5. Utambulisho uliogatuliwa unapaswa kufanya kazi vizuri na teknolojia zinazochipukia za [zero-knowledge](/glossary/#zk-proof) ambazo zitawawezesha watu binafsi kuthibitisha wanamiliki au wamefanya kitu bila kufichua kitu hicho ni nini. Hii inaweza kuwa njia yenye nguvu ya kuchanganya uaminifu na faragha kwa programu kama vile upigaji kura. + +6. Utambulisho uliogatuliwa huwezesha mifumo ya [kupambana na Sybil](/glossary/#anti-sybil) kutambua wakati binadamu mmoja anajifanya kuwa binadamu wengi ili kudanganya au kutuma barua taka kwenye mfumo fulani. + +## Matumizi ya utambulisho uliogatuliwa {#decentralized-identity-use-cases} + +Utambulisho uliogatuliwa una matumizi mengi yanayowezekana: + +### 1. Kuingia kwa wote {#universal-dapp-logins} + +Utambulisho uliogatuliwa unaweza kusaidia kubadilisha uingiaji unaotegemea nenosiri na uthibitishaji uliogatuliwa. Watoa huduma wanaweza kutoa uthibitishaji kwa watumiaji, ambao unaweza kuhifadhiwa katika pochi ya Ethereum. Mfano wa uthibitishaji ungekuwa [NFT](/glossary/#nft) inayompa mwenye nayo ufikiaji wa jumuiya ya mtandaoni. + +Kitendaji cha [Kuingia na Ethereum](https://siwe.xyz/) kingewezesha seva kuthibitisha akaunti ya Ethereum ya mtumiaji na kupata uthibitishaji unaohitajika kutoka kwa anwani ya akaunti yake. Hii inamaanisha watumiaji wanaweza kufikia majukwaa na tovuti bila kulazimika kukariri nywila ndefu na inaboresha uzoefu wa mtandaoni kwa watumiaji. + +### 2. Uthibitishaji wa KYC {#kyc-authentication} + +Kutumia huduma nyingi za mtandaoni kunahitaji watu binafsi kutoa uthibitishaji na vitambulisho, kama vile leseni ya udereva au pasipoti ya kitaifa. Lakini mbinu hii ina matatizo kwa sababu taarifa za faragha za mtumiaji zinaweza kuathiriwa na watoa huduma hawawezi kuthibitisha uhalisi wa uthibitishaji huo. + +Utambulisho uliogatuliwa huruhusu kampuni kuruka michakato ya kawaida ya [Mjue Mteja Wako (KYC)](https://en.wikipedia.org/wiki/Know_your_customer) na kuthibitisha utambulisho wa watumiaji kupitia Vitambulisho Vinavyoweza Kuthibitishwa. Hii inapunguza gharama ya usimamizi wa utambulisho na inazuia matumizi ya nyaraka bandia. + +### 3. Upigaji kura na jumuiya za mtandaoni {#voting-and-online-communities} + +Upigaji kura mtandaoni na mitandao ya kijamii ni programu mbili mpya za utambulisho uliogatuliwa. Mipango ya upigaji kura mtandaoni iko hatarini kudanganywa, hasa ikiwa wahusika wenye nia mbaya huunda utambulisho wa uwongo ili kupiga kura. Kuwauliza watu binafsi wawasilishe uthibitishaji wa kwenye mnyororo kunaweza kuboresha uadilifu wa michakato ya upigaji kura mtandaoni. + +Utambulisho uliogatuliwa unaweza kusaidia kuunda jumuiya za mtandaoni ambazo hazina akaunti bandia. Kwa mfano, kila mtumiaji anaweza kulazimika kuthibitisha utambulisho wake kwa kutumia mfumo wa utambulisho wa kwenye mnyororo, kama Huduma ya Majina ya Ethereum, na hivyo kupunguza uwezekano wa boti. + +### 4. Ulinzi dhidi ya Sybil {#sybil-protection} + +Programu za kutoa ruzuku zinazotumia [upigaji kura wa quadratic](/glossary/#quadratic-voting) ziko hatarini kwa [mashambulizi ya Sybil](/glossary/#sybil-attack) kwa sababu thamani ya ruzuku huongezeka watu wengi wanapoipigia kura, na kuwahamasisha watumiaji kugawanya michango yao katika utambulisho mwingi. Utambulisho uliogatuliwa husaidia kuzuia hili kwa kuongeza mzigo kwa kila mshiriki kuthibitisha kuwa wao ni binadamu kweli, ingawa mara nyingi bila kulazimika kufichua taarifa maalum za faragha. + +### 5. Kitambulisho cha Kitaifa na Serikali {#national-and-government-id} + +Serikali zinaweza kutumia kanuni za utambulisho uliogatuliwa kutoa nyaraka za msingi za utambulisho—kama vile vitambulisho vya taifa, pasipoti, au leseni za udereva—kama vitambulisho vinavyoweza kuthibitishwa kwenye Ethereum, zikitoa dhamana thabiti za kikriptografia za uhalisi ili kupunguza ulaghai na ughushi katika uthibitishaji wa utambulisho mtandaoni. Raia wanaweza kuhifadhi uthibitishaji huu katika [pochi](/wallets/) zao binafsi na kuutumia kuthibitisha utambulisho wao, umri, au haki ya kupiga kura. + +Mfumo huu unaruhusu ufichuzi wa kuchagua, hasa unapojumuishwa na teknolojia ya faragha ya [uthibitisho wa zero-knowledge (ZKP)](/zero-knowledge-proofs/). Kwa mfano, raia anaweza kuthibitisha kikriptografia kwamba ana umri wa zaidi ya miaka 18 ili kufikia huduma yenye kizuizi cha umri bila kufichua tarehe yake kamili ya kuzaliwa, akitoa faragha kubwa zaidi kuliko kitambulisho cha jadi. + +#### 💡Uchunguzi kifani: Kitambulisho cha Kidijitali cha Kitaifa cha Bhutan (NDI) kwenye Ethereum {#case-study-bhutan-ndi} + +- Hutoa ufikiaji wa vitambulisho vya utambulisho vinavyoweza kuthibitishwa kwa takriban raia 800,00a wa Bhutan +- Ilihamishwa kutoka mtandao wa Polygon [hadi mtandao mkuu wa Ethereum](https://www.bhutanndi.com/article/bhutan-adopts-ethereum-for-national-identity-a-new-chapter-in-digital-sovereignty_2d0c7ec2-5605-4c42-b258-bd9361ae8878) mnamo Oktoba 2025 +- Zaidi ya [vitambulisho vya kidijitali 234,000](https://www.blockchain-council.org/blockchain/bhutan-uses-blockchain-in-digital-id-project/) vilitolewa kufikia Machi 2025 + +Ufalme wa Bhutan [ulihamisha mfumo wake wa Kitambulisho cha Kidijitali cha Kitaifa (NDI)](https://www.bhutanndi.com/article/bhutan-adopts-ethereum-for-national-identity-a-new-chapter-in-digital-sovereignty_2d0c7ec2-5605-4c42-b258-bd9361ae8878) hadi Ethereum mnamo Oktoba 2025. Uliojengwa juu ya kanuni za utambulisho uliogatuliwa na utambulisho wa kujitawala, mfumo wa NDI wa Bhutan hutumia vitambulisho vilivyogatuliwa na vitambulisho vinavyoweza kuthibitishwa kutoa vitambulisho vilivyosainiwa kidijitali moja kwa moja kwenye pochi ya kibinafsi ya raia. Kwa kutia nanga uthibitisho wa kikriptografia wa vitambulisho hivi kwenye Ethereum, mfumo huhakikisha kuwa ni halisi, hauwezi kuchezewa, na unaweza kuthibitishwa na mhusika yeyote bila kuuliza mamlaka kuu. + +Usanifu wa mfumo unasisitiza faragha kupitia matumizi ya teknolojia ya [uthibitisho wa zero-knowledge (ZKP)](/zero-knowledge-proofs/). Utekelezaji huu wa "ufichuzi wa kuchagua" unaruhusu raia kuthibitisha ukweli maalum (k.m., "Nina umri wa zaidi ya miaka 18" au "Mimi ni raia") ili kufikia huduma bila kufichua data ya msingi ya kibinafsi, kama vile nambari yao kamili ya kitambulisho au tarehe kamili ya kuzaliwa. Hii inaonyesha matumizi yenye nguvu, ya ulimwengu halisi ya Ethereum kwa mfumo wa kitambulisho cha kitaifa ulio salama, unaomlenga mtumiaji, na unaolinda faragha. + +#### 💡Uchunguzi kifani: QuarkID ya Jiji la Buenos Aires kwenye Ethereum [Safu ya 2](/layer-2/) ZKSync Era {#case-study-buenos-aires-quarkid} + +- Ilitoa vitambulisho vya utambulisho vilivyogatuliwa kwa zaidi ya [watumiaji milioni 3.6](https://buenosaires.gob.ar/innovacionytransformaciondigital/miba-con-tecnologia-quarkid-la-ciudad-de-buenos-aires-incorporo) wakati wa uzinduzi +- QuarkID ni itifaki ya chanzo-wazi inayotambuliwa kama [Bidhaa ya Umma ya Kidijitali](https://www.digitalpublicgoods.net/r/quarkid) chini ya Malengo ya Maendeleo Endelevu ya Umoja wa Mataifa +- Inasisitiza mfumo wa "[serikali-kama-mtumiaji](https://buenosaires.gob.ar/innovacionytransformaciondigital/miba-con-tecnologia-quarkid-la-ciudad-de-buenos-aires-incorporo)", ambapo jiji halimiliki itifaki, na kuwapa raia umiliki kamili wa data na faragha + +Mnamo 2024, Serikali ya Jiji la Buenos Aires (GCBA) iliunganisha QuarkID, “mfumo wa uaminifu wa kidijitali” wa chanzo-wazi uliojengwa na Sekretarieti ya Ubunifu na Mabadiliko ya Kidijitali ya GCBA, katika miBA, programu rasmi ya jiji kwa wakaazi kupata huduma za serikali na nyaraka rasmi. Wakati wa uzinduzi, watumiaji wote milioni 3.6+ wa miBA walitolewa utambulisho wa kidijitali uliogatuliwa unaowaruhusu kusimamia na kushiriki nyaraka na vyeti vya kidijitali vinavyoweza kuthibitishwa kwenye mnyororo, ikiwa ni pamoja na vitambulisho vya uraia, vyeti vya kuzaliwa, ndoa, na kifo, rekodi za kodi, rekodi za chanjo, na zaidi. + +Uliojengwa kwenye mtandao wa Ethereum [Safu ya 2](/layer-2/) ZKSync Era, mfumo wa QuarkID unatumia teknolojia ya ZKP kuruhusu raia kuthibitisha vitambulisho vya kibinafsi rika-kwa-rika kupitia vifaa vyao vya mkononi—bila kufichua data isiyo ya lazima ya kibinafsi. Mpango huu unaangazia mfumo wa “serikali-kama-mtumiaji” ambapo GCBA hufanya kazi kama mtumiaji mmoja wa itifaki ya QuarkID ya chanzo-wazi, inayoweza kushirikiana, badala ya kufanya kazi kama mmiliki wa kati. Usanifu huu unaowezeshwa na ZKP unatoa kipengele muhimu cha faragha: hakuna mhusika mwingine, hata GCBA, anayeweza kufuatilia jinsi, lini, au kwa nini raia anatumia vitambulisho vyake. Mpango huu wenye mafanikio huwapa raia utambulisho kamili wa kujitawala na udhibiti juu ya data zao nyeti, zote zikilindwa na mtandao wa Ethereum uliosambazwa kimataifa. + +## Uthibitishaji ni nini? {#what-are-attestations} + +Uthibitishaji ni dai linalotolewa na huluki moja kuhusu huluki nyingine. Ikiwa unaishi Marekani, leseni ya udereva uliyopewa na Idara ya Magari (huluki moja) inathibitisha kwamba wewe (huluki nyingine) unaruhusiwa kisheria kuendesha gari. + +Uthibitishaji ni tofauti na vitambulisho. Uthibitishaji _una_ vitambulisho vya kurejelea utambulisho fulani, na hutoa dai kuhusu sifa inayohusiana na utambulisho huu. Kwa hiyo, leseni yako ya udereva ina vitambulisho (jina, tarehe ya kuzaliwa, anwani) lakini pia ni uthibitishaji kuhusu haki yako ya kisheria ya kuendesha gari. + +### Vitambulisho vilivyogatuliwa ni nini? {#what-are-decentralized-identifiers} + +Vitambulisho vya jadi kama vile jina lako la kisheria au anwani ya barua pepe hutegemea wahusika wengine—serikali na watoa huduma za barua pepe. Vitambulisho vilivyogatuliwa (DIDs) ni tofauti—havitolewi, kusimamiwa, au kudhibitiwa na huluki yoyote ya kati. + +Vitambulisho vilivyogatuliwa hutolewa, hushikiliwa, na kudhibitiwa na watu binafsi. [Akaunti ya Ethereum](/glossary/#account) ni mfano wa kitambulisho kilichogatuliwa. Unaweza kuunda akaunti nyingi unavyotaka bila ruhusa kutoka kwa mtu yeyote na bila hitaji la kuzihifadhi katika sajili kuu. + +Vitambulisho vilivyogatuliwa huhifadhiwa kwenye leja zilizosambazwa ([minyororo wa bloku](/glossary/#blockchain)) au [mitandao ya rika-kwa-rika](/glossary/#peer-to-peer-network). Hii inafanya DIDs kuwa [za kipekee kimataifa, zinazoweza kutatuliwa kwa upatikanaji wa juu, na kuthibitishwa kikriptografia](https://w3c-ccg.github.io/did-primer/). Kitambulisho kilichogatuliwa kinaweza kuhusishwa na huluki tofauti, ikiwa ni pamoja na watu, mashirika, au taasisi za serikali. + +## Ni nini kinachowezesha vitambulisho vilivyogatuliwa? {#what-makes-decentralized-identifiers-possible} + +### 1. Kriptografia ya Ufunguo wa Umma {#public-key-cryptography} + +Kriptografia ya ufunguo wa umma ni hatua ya usalama wa taarifa inayozalisha [ufunguo wa umma](/glossary/#public-key) na [ufunguo binafsi](/glossary/#private-key) kwa ajili ya huluki. [Kriptografia](/glossary/#cryptography) ya ufunguo wa umma hutumika katika mitandao ya mnyororo wa bloku kuthibitisha utambulisho wa watumiaji na kuthibitisha umiliki wa mali za kidijitali. + +Baadhi ya vitambulisho vilivyogatuliwa, kama vile akaunti ya Ethereum, vina funguo za umma na za binafsi. Ufunguo wa umma hutambulisha mtawala wa akaunti, huku funguo za binafsi zikiweza kutia saini na kusimbua ujumbe wa akaunti hii. Kriptografia ya ufunguo wa umma hutoa uthibitisho unaohitajika ili kuthibitisha huluki na kuzuia kuiga na matumizi ya utambulisho bandia, kwa kutumia [sahihi za kikriptografia](https://andersbrownworth.com/blockchain/public-private-keys/) ili kuthibitisha madai yote. + +### 2. Hifadhi za data zilizogatuliwa {#decentralized-datastores} + +Mnyororo wa bloku hutumika kama sajili ya data inayoweza kuthibitishwa: hifadhi ya habari iliyo wazi, isiyohitaji kuaminiana, na iliyogatuliwa. Kuwepo kwa minyororo ya bloku za umma huondoa hitaji la kuhifadhi vitambulisho katika sajili za kati. + +Ikiwa mtu yeyote anahitaji kuthibitisha uhalali wa kitambulisho kilichogatuliwa, anaweza kuangalia ufunguo wa umma unaohusishwa kwenye mnyororo wa bloku. Hii ni tofauti na vitambulisho vya jadi vinavyohitaji wahusika wengine kuthibitisha. + +## Je, vitambulisho na uthibitishaji uliogatuliwa huwezeshaje utambulisho uliogatuliwa? {#how-decentralized-identifiers-and-attestations-enable-decentralized-identity} + +Utambulisho uliogatuliwa ni wazo kwamba taarifa zinazohusiana na utambulisho zinapaswa kujidhibiti, kuwa za faragha, na kuweza kuhamishika, huku vitambulisho na uthibitishaji vilivyogatuliwa vikiwa ndio msingi mkuu. + +Katika muktadha wa utambulisho uliogatuliwa, uthibitishaji (pia hujulikana kama [Vitambulisho Vinavyoweza Kuthibitishwa](https://www.w3.org/TR/vc-data-model/)) ni madai yasiyoweza kuchezewa, yanayoweza kuthibitishwa kikriptografia yaliyotolewa na mtoaji. Kila uthibitishaji au Kitambulisho Kinachoweza Kuthibitishwa ambacho huluki (k.m., shirika) hutoa kinahusishwa na DID yao. + +Kwa sababu DIDs huhifadhiwa kwenye mnyororo wa bloku, mtu yeyote anaweza kuthibitisha uhalali wa uthibitishaji kwa kuangalia DID ya mtoaji kwenye Ethereum. Kimsingi, mnyororo wa bloku wa Ethereum hufanya kazi kama saraka ya kimataifa inayowezesha uthibitishaji wa DIDs zinazohusiana na huluki fulani. + +Vitambulisho vilivyogatuliwa ndiyo sababu uthibitishaji unajidhibiti na unaweza kuthibitishwa. Hata kama mtoaji hayupo tena, mwenye nayo daima ana uthibitisho wa asili na uhalali wa uthibitishaji. + +Vitambulisho vilivyogatuliwa pia ni muhimu katika kulinda faragha ya taarifa za kibinafsi kupitia utambulisho uliogatuliwa. Kwa mfano, ikiwa mtu binafsi atawasilisha uthibitisho wa uthibitishaji (leseni ya udereva), mhusika anayethibitisha hahitaji kuangalia uhalali wa taarifa katika uthibitisho huo. Badala yake, mthibitishaji anahitaji tu dhamana za kikriptografia za uhalisi wa uthibitishaji na utambulisho wa shirika linalotoa ili kubaini kama uthibitisho ni halali. + +## Aina za uthibitishaji katika utambulisho uliogatuliwa {#types-of-attestations-in-decentralized-identity} + +Jinsi taarifa za uthibitishaji zinavyohifadhiwa na kupatikana katika mfumo ikolojia wa utambulisho unaotegemea Ethereum ni tofauti na usimamizi wa jadi wa utambulisho. Huu ni muhtasari wa mbinu mbalimbali za kutoa, kuhifadhi, na kuthibitisha uthibitishaji katika mifumo ya utambulisho iliyogatuliwa: + +### Uthibitishaji wa nje ya mnyororo {#offchain-attestations} + +Hoja moja kuhusu kuhifadhi uthibitishaji kwenye mnyororo ni kwamba inaweza kuwa na taarifa ambazo watu binafsi wanataka kuziweka faragha. Hali ya umma ya mnyororo wa bloku wa Ethereum hufanya isiwe ya kuvutia kuhifadhi uthibitishaji kama huo. + +Suluhisho ni kutoa uthibitishaji, unaoshikiliwa na watumiaji nje ya mnyororo katika pochi za kidijitali, lakini zilizosainiwa na DID ya mtoaji iliyohifadhiwa kwenye mnyororo. Uthibitishaji huu umesimbwa kama [Tokeni za Wavuti za JSON](https://en.wikipedia.org/wiki/JSON_Web_Token) na una saini ya dijitali ya mtoaji—ambayo inaruhusu uthibitishaji rahisi wa madai ya nje ya mnyororo. + +Huu ni mfano wa kinadharia kuelezea uthibitishaji wa nje ya mnyororo: + +1. Chuo kikuu (mtoaji) kinazalisha uthibitishaji (cheti cha kitaaluma cha kidijitali), kinasaini na funguo zake, na kumpa Bob (mmiliki wa utambulisho). + +2. Bob anaomba kazi na anataka kuthibitisha sifa zake za kitaaluma kwa mwajiri, kwa hiyo anashiriki uthibitishaji kutoka kwenye pochi yake ya simu. Kampuni (mthibitishaji) inaweza kisha kuthibitisha uhalali wa uthibitishaji kwa kuangalia DID ya mtoaji (yaani, ufunguo wake wa umma kwenye Ethereum). + +### Uthibitishaji wa nje ya mnyororo na ufikiaji wa kudumu {#offchain-attestations-with-persistent-access} + +Chini ya mpangilio huu, uthibitishaji hubadilishwa kuwa faili za JSON na kuhifadhiwa nje ya mnyororo (ikiwezekana kwenye jukwaa la [hifadhi ya wingu iliyogatuliwa](/developers/docs/storage/), kama vile IPFS au Swarm). Hata hivyo, [hashi](/glossary/#hash) ya faili ya JSON huhifadhiwa kwenye mnyororo na kuunganishwa na DID kupitia sajili ya kwenye mnyororo. DID inayohusishwa inaweza kuwa ya mtoaji wa uthibitishaji au mpokeaji. + +Mbinu hii huwezesha uthibitishaji kupata udumu unaotegemea mnyororo wa bloku, huku ukiweka taarifa za madai zikiwa zimesimbwa na zinazoweza kuthibitishwa. Pia inaruhusu ufichuzi wa kuchagua kwa kuwa mwenye ufunguo binafsi anaweza kusimbua taarifa. + +### Uthibitishaji wa kwenye mnyororo {#onchain-attestations} + +Uthibitishaji wa kwenye mnyororo hushikiliwa katika [mikataba-erevu](/glossary/#smart-contract) kwenye mnyororo wa bloku wa Ethereum. Mkataba-erevu (unaochukuwa jukumu kama sajili) utapanga uthibitishaji kwa kitambulisho kinacholingana cha ugatuzi kwenye mnyororo (ufunguo wa umma). + +Huu ni mfano wa kuonyesha jinsi uthibitishaji wa kwenye mnyororo unavyoweza kufanya kazi kwa vitendo: + +1. Kampuni (XYZ Corp) inapanga kuuza hisa za umiliki kwa kutumia mkataba-erevu lakini inataka tu wanunuzi ambao wamekamilisha ukaguzi wa usuli. + +2. XYZ Corp inaweza kuwa na kampuni inayofanya ukaguzi wa usuli kutoa uthibitishaji wa kwenye mnyororo kwenye Ethereum. Uthibitishaji huu unathibitisha kuwa mtu binafsi amefaulu ukaguzi wa usuli bila kufichua taarifa zozote za kibinafsi. + +3. Mkataba-erevu unaouza hisa unaweza kuangalia mkataba wa sajili kwa utambulisho wa wanunuzi waliochujwa, na kufanya iwezekane kwa mkataba-erevu kubaini ni nani anayeruhusiwa kununua hisa au la. + +### Tokeni za Soulbound na utambulisho {#soulbound} + +[Tokeni za Soulbound](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) ([NFTs zisizohamishika](/glossary/#nft)) zinaweza kutumika kukusanya taarifa za kipekee kwa pochi maalum. Hii kwa ufanisi huunda utambulisho wa kipekee kwenye mnyororo unaofungamanishwa na anwani fulani ya Ethereum ambayo inaweza kujumuisha tokeni zinazowakilisha mafanikio (k.m., kumaliza kozi fulani ya mtandaoni au kufikia alama ya kiwango cha chini katika mchezo) au ushiriki wa jamii. + +## Tumia utambulisho uliogatuliwa {#use-decentralized-identity} + +Kuna miradi mingi kabambe inayotumia Ethereum kama msingi wa masuluhisho ya utambulisho uliogatuliwa: + +- **[Huduma ya Majina ya Ethereum (ENS)](https://ens.domains/)** - _Mfumo wa ugatuzi wa kutaja majina kwa vitambulisho vya kwenye mnyororo, vinavyoweza kusomwa na mashine, kama vile anwani za pochi za Ethereum, hashi za maudhui, na metadata._ +- **[Ingia na Ethereum (SIWE)](https://siwe.xyz/)** - _Kiwango wazi cha uthibitishaji na akaunti za Ethereum._ +- **[SpruceID](https://www.spruceid.com/)** - _Mradi wa utambulisho uliogatuliwa unaoruhusu watumiaji kudhibiti utambulisho wa kidijitali na akaunti za Ethereum na wasifu wa ENS badala ya kutegemea huduma za watu wengine._ +- **[Huduma ya Uthibitishaji ya Ethereum (EAS)](https://attest.org/)** - _Leja/itifaki iliyogatuliwa ya kufanya uthibitishaji kwenye mnyororo au nje ya mnyororo kuhusu chochote._ +- **[Uthibitisho wa Ubinadamu](https://www.proofofhumanity.id)** - _Uthibitisho wa Ubinadamu (au PoH) ni mfumo wa uthibitishaji wa utambulisho wa kijamii uliojengwa kwenye Ethereum._ +- **[BrightID](https://www.brightid.org/)** - _Mtandao wa utambulisho wa kijamii uliogatuliwa, wa chanzo-wazi unaotaka kurekebisha uthibitishaji wa utambulisho kupitia uundaji na uchambuzi wa grafu ya kijamii._ +- **[walt.id](https://walt.id)** — _Miundombinu ya utambulisho uliogatuliwa wa chanzo-wazi na pochi inayowawezesha wasanidi programu na mashirika kutumia utambulisho wa kujitawala na NFTs/SBTs._ +- **[Veramo](https://veramo.io/)** - _Mfumo wa JavaScript unaorahisisha mtu yeyote kutumia data inayoweza kuthibitishwa kikriptografia katika programu zao._ + +## Masomo zaidi {#further-reading} + +### Makala {#articles} + +- [Matumizi ya Mnyororo wa bloku: Mnyororo wa bloku katika Utambulisho wa Kidijitali](https://consensys.net/blockchain-use-cases/digital-identity/) — _ConsenSys_ +- [Ethereum ERC725 ni nini? Usimamizi wa Utambulisho wa Kujitawala kwenye Mnyororo wa bloku](https://cryptoslate.com/what-is-erc725-self-sovereign-identity-management-on-the-blockchain/) — _Sam Town_ +- [Jinsi Mnyororo wa bloku Unavyoweza Kutatua Tatizo la Utambulisho wa Kidijitali](https://time.com/6142810/proof-of-humanity/) — _Andrew R. Chow_ +- [Utambulisho Uliogatuliwa ni Nini na Kwa Nini Unapaswa Kujali?](https://web3.hashnode.com/what-is-decentralized-identity) — _Emmanuel Awosika_ +- [Utangulizi wa Utambulisho Uliogatuliwa](https://walt.id/white-paper/digital-identity) — _Dominik Beron_ + +### Video {#videos} + +- [Utambulisho Uliogatuliwa (Kipindi cha Bonasi cha Mtanashati)](https://www.youtube.com/watch?v=ySHNB1za_SE&t=539s) — _Video nzuri ya maelezo kuhusu utambulisho uliogatuliwa na Andreas Antonopolous_ +- [Ingia na Ethereum na Utambulisho Uliogatuliwa na Ceramic, IDX, React, na 3ID Connect](https://www.youtube.com/watch?v=t9gWZYJxk7c) — _Mafunzo ya YouTube kuhusu kujenga mfumo wa usimamizi wa utambulisho kwa ajili ya kuunda, kusoma, na kusasisha wasifu wa mtumiaji kwa kutumia pochi yake ya Ethereum na Nader Dabit_ +- [BrightID - Utambulisho Uliogatuliwa kwenye Ethereum](https://www.youtube.com/watch?v=D3DbMFYGRoM) — _Kipindi cha podikasti cha Bankless kinachojadili BrightID, suluhisho la utambulisho uliogatuliwa kwa Ethereum_ +- [Mtandao wa Nje ya Mnyororo: Utambulisho Uliogatuliwa & Vitambulisho Vinavyoweza Kuthibitishwa](https://www.youtube.com/watch?v=EZ_Bb6j87mg) — Wasilisho la EthDenver 2022 na Evin McMullen +- [Vitambulisho Vinavyoweza Kuthibitishwa Vyaelezwa](https://www.youtube.com/watch?v=ce1IdSr-Kig) - Video ya maelezo ya YouTube yenye onyesho na Tamino Baumann + +### Jumuiya {#communities} + +- [Muungano wa ERC-725 kwenye GitHub](https://github.com/erc725alliance) — _Wafuasi wa kiwango cha ERC725 cha kusimamia utambulisho kwenye mnyororo wa bloku wa Ethereum_ +- [Seva ya Discord ya EthID](https://discord.com/invite/ZUyG3mSXFD) — _Jumuiya ya wapenzi na wasanidi programu wanaofanyia kazi Kuingia na Ethereum, na Itifaki ya Kufuata Ethereum_ +- [Maabara za Veramo](https://discord.gg/sYBUXpACh4) — _Jumuiya ya wasanidi programu wanaochangia katika kujenga mfumo wa data inayoweza kuthibitishwa kwa ajili ya programu_ +- [walt.id](https://discord.com/invite/AW8AgqJthZ) — _Jumuiya ya wasanidi programu na wajenzi wanaofanyia kazi matumizi ya utambulisho uliogatuliwa katika tasnia mbalimbali_ diff --git a/public/content/translations/sw/defi/index.md b/public/content/translations/sw/defi/index.md new file mode 100644 index 00000000000..5be8ea06b4a --- /dev/null +++ b/public/content/translations/sw/defi/index.md @@ -0,0 +1,369 @@ +--- +title: Fedha zilizogatuliwa (DeFi) +metaTitle: Nini ni DeFi (Uchumi Gatuzi)? manufaa na utumizi wa fedha huru kati +description: Maelezo ya jumla ya DeFi kwenye Ethereum +lang: sw +template: use-cases +emoji: ":money_with_wings:" +image: /images/use-cases/defi.png +alt: |- + Nembo ya Eth kufanywa + kwa matofali ya matofali. +sidebarDepth: 2 +summaryPoint1: Mpango mwingine wa kimataifa, ulio wazi kwa mfumo wa sasa wa kifedha. +summaryPoint2: Bidhaa ambayo Kuazima, kuhifadhi kufanya biashara, na zaidi. +summaryPoint3: Kulingana na teknolojia ya chanzo wazi ambayo mtu yeyote anaweza Mpango na. +--- + +DeFi ni mfumo wa kifedha wa wazi na wa kimataifa uliojengwa kwa enzi ya mzunguko - chaguo wa mfumo ambao hauna uwazi, bila udhibiti kwa nguvu, na kushikamana na miundombinu na taratibu ya miongo kadhaa. Anatoa udhibiti na kujulikana kwa pesa zako. Anatoa ufikiaji wa masoko ya kimataifa na kwa sarafu yako ya ndani au chaguzi za benki. Bidhaa za DeFi hufungua huduma za kifedha kwa mtu yeyote aliye na kiungo wa shirikisho na kwa kiasi kikubwa inayoshikilia na kuhifadhiwa na watumiaji wao. Hadi sasa, kripto yenye thamani ya makumi ya mabilioni ya dola imepita kwenye programu za DeFi na inaendelea kukua kila siku. + +## DeFi ni nini? {#what-is-defi} + +DeFi ni neno la pamoja la bidhaa na huduma za kifedha ambazo kupatikana kwa mtu yeyote anayeweza kutumia Ethereum mtu yeyote aliye na Shirikisho uhusiano. Pamoja na DeFi, masoko huwa wazi kila wakati na hakuna mamlaka kuu ambayo inaweza kuzuia malipo au kukataa ufikiaji wa chochote. Huduma ambazo hapo awali zilikuwa polepole na hatari ya makosa ya kibinadamu ni moja kwa moja na salama zaidi sasa kwamba ni kushughulikia na kanuni kwamba mtu yeyote anaweza kukagua na kuchunguza. + +Kuna uchumi unaositawi huko nje, ambapo unaweza kukopesha, kuomba, kwa muda mrefu / mfupi, kupata riba, na zaidi. Wakazi wa pwani wenye ujuzi wa uchumi kutumika DeFi kutoroka kulemaza wa bei. Makampuni yameanza kutazama mishahara ya wafanya kazi wao kwa wakati halisi. Watu wengine hata wamechukua na kulipa mikopo yenye thamani ya mamilioni ya dola bila uhitaji wa utambulisho wowote wa kibinafsi. + + + +## DeFi dhidi ya fedha za jadi {#defi-vs-tradfi} + +Moja ya njia bora ya kuona uwezo wa DeFi ni kuelewa matatizo kuwepo leo. + +- Baadhi ya watu sio kufungua kuanzisha ya benki au kutumia huduma za kifedha. +- Ukosefu wa huduma za kifedha unaweza kuwazuia watu kupata kazi. +- Huduma za kifedha zinaweza kuzuia kulipwa. +- Malipo ya siri ya huduma za kifedha ni takwimu yako binafsi. +- Serikali na taasisi za serikali kuu zinaweza kufunga masoko kwa hiari. +- Saa za biashara mara nyingi huwa na kikomo cha saa za kazi za ukanda maalum wa saa. +- Uhamisho wa fedha unaweza kuchukua siku kutokana na taratibu ya ndani ya binadamu. +- Kuna tuzo za huduma za fedha kwasababu mpatanishi anahitaji makato yake. + +### Ulinganisho {#defi-comparison} + +| DeFi | Fedha za jadi | +| ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Unashikilia hela yako. | Pesa zako uendeshaji na makampuni. | +| Wewe ndiye kudhibiti pesa zako huenda wapi na alitumia. | Lazima uamini makampuni si kwa usimamizi mbaya wa fedha yako, kama kukopesha kwa watoaji wa mikopo hatari. | +| Uhamisho wa fedha hufanywa kwa dakika chache. | Malipo yanaweza kuchukua siku kadhaa kwasababu ya utendaji kazi wa mikono. | +| Shughuli ya shughuli ni jina bandia. | Shughuli za kifedha pamoja sana na utambulisho wako. | +| DeFi iko wazi kwa kila mmoja. | Lazima kutumika kutumia huduma za kifedha. | +| Masoko yako wazi sikuzote. | Masoko hufungwa kwa sababu wafanyakazi haja mapumziko. | +| Ni kujengwa juu ya uwazi - mtu yeyote anaweza kuangalia binafsi ya bidhaa na kukagua jinsi mfumo hufanya kazi. | Taasisi za kifedha ni vitabu kufungwa: huwezi kuuliza kuona mkopo historia yao, rekodi ya mali zao kuongozwa, na kadhalika. | + + + Chunguza programu za DeFi + + +## Ilianza na Bitcoin... {#bitcoin} + +Bitcoin kwa njia nyingi ilikuwa maombi ya kwanza ya DeFi. Bitcoin kweli ruhusa wewe kweli kumiliki na kudhibiti thamani na kupeleka popote duniani kote. Hufanya hivyo kwa kutoa njia kwa idadi kubwa ya watu, ambao hawana imani na kila mmoja, kukubaliana juu ya kitabu cha hesabu bila ya haja ya mpatanishi wa kuaminika. Bitcoin iko wazi kwa kila mmoja na hamna mwenye uwezo wa kubadili masharti yake. Sheria za Bitcoin, kama upungufu mhusika na uwazi wa mhusika, zimeandikwa katika teknolojia. Si kama fedha za jadi ambapo serikali zinaweza kuandika pesa ambazo punguza thamani ya akiba yako na kampuni zinaweza kufunga masoko. + +Ethereum hujenga juu ya hii. Kama Bitcoin, kanuni haziwezi kubadilika kwako na kila mtu ana kupatikana. Lakini pia inafanya fedha hizi za kidijitali ziweze kupangwa, kwa kutumia [mikataba-erevu](/glossary/#smart-contract), ili uweze kufanya zaidi ya kuhifadhi na kutuma thamani. + + + +## Fedha zinazoweza kupangwa {#programmable-money} + +Hii inaonekana ya ajabu... "kwa nini nitake kupanga pesa zangu"? Hata hivyo, hii ni zaidi ya kipengele chaguo-msingi tu cha tokeni kwenye Ethereum. Mtu yeyote anaweza mpango hoja katika malipo. Hivyo unaweza kupata udhibiti na usalama wa Bitcoin mchanganyiko na huduma hutumiwa na taasisi za fedha. Hii ambayo Kuazima kufanya vitu na sarafu za kijamii kwamba huwezi kufanya na Bitcoin kama kukopesha na mkopo, malipo ya ratiba, kuchangia katika fedha faharisi na zaidi. + + + + +
Chunguza mapendekezo yetu ya mpango za DeFi kujaribu ikiwa wewe ni mpya kwa Ethereum.
+ + Chunguza programu za DeFi + +
+
+ +## Unaweza kufanya nini na DeFi? {#defi-use-cases} + +Kuna madaraka mwingine kwa huduma nyingi za kifedha. Lakini Ethereum inatoa nafasi ya kuunda bidhaa za kifedha ambazo ni mpya kabisa. Hii ni orodha inayoendelea kukua. + +- [Tuma pesa kote ulimwenguni](#send-money) +- [Tiririsha pesa kote ulimwenguni](#stream-money) +- [Pata sarafu thabiti](#stablecoins) +- [Kopa fedha kwa dhamana](#lending) +- [Kopa bila dhamana](#flash-loans) +- [Anza akiba ya kripto](#saving) +- [Fanya biashara ya tokeni](#swaps) +- [Kuza kwingineko lako](#investing) +- [Fadhili mawazo yako](#crowdfunding) +- [Nunua bima](#insurance) +- [Dhibiti kwingineko lako](#aggregators) + + + +### Tuma pesa kote ulimwenguni haraka {#send-money} + +Kama mlolongo wa vizuizi, Ethereum ni iliyoundwa kwa ajili ya kutumia shughuli katika njia salama na kimataifa. Kama Bitcoin, Ethereum hurahisisha kutumia pesa kuwa kama kutumia barua pepe. Weka tu [jina la ENS](/glossary/#ens) la mpokeaji wako (kama bob.eth) au anwani ya akaunti yake kutoka kwa mkoba wako na malipo yako yatakwenda moja kwa moja kwake kwa dakika chache (kawaida). Ili kutuma au kupokea malipo, utahitaji [mkoba](/wallets/). + + + Angalia mfumo mtawanyo wa kimamlaka wa malipo + + +#### Pata mkondo wa pesa duniani kote... {#stream-money} + +Unaweza kupata mkondo wa pesa juu ya Ethereum. Hii ambayo kulipa mtu mshahara yao kwa sekunde, kuwapa pata wa fedha zao wakati wowote haja. Au kukodisha kitu ndani ya sekunde kama kufuli la hazina ama skuta ya umeme. + +Na kama hutaki kutuma au kutiririsha [ETH](/glossary/#ether) kwa sababu thamani yake inaweza kubadilika sana, kuna sarafu mbadala kwenye Ethereum: [sarafu-imara](/glossary/#stablecoin). + + + +### Pata sarafu thabiti {#stablecoins} + +Kutokuwa na uhakika kwa sarafu ni tatizo kwa bidhaa nyingi za kifedha na matumizi ya jumla. Jumuiya ya DeFi kurekebishwa hili kwa sarafu imara. Thamani yake huambukizwa kutoka kwenye mali nyingine, kwa kawaida ni sarafu mashuhuri kama dola. + +Sarafu kama Dai au USDC zina thamani ambayo kukaa ndani ya senti chache za dola. Hii hufanya kamili kwa ajili ya mapato au rejareja. Watu wengi katika Amerika ya Kusini kutumika sarafu imara kama njia ya kulinda akiba zao katika wakati wa kutokuwa na uhakika mkubwa na sarafu zao zilizotolewa na serikali. + + +Zaidi juu ya sarafu imara + + + + +### Kukopa {#lending} + +Kukopa fedha kutoka kwa watoaji madaraka huja katika aina kuu mbili. + +- Rika-kwa-rika, kwa maana kwamba mkopaji atapewa pesa kutoka kwa mkopeshaji maalum. +- Msako msingi ambapo mkopeshaji kutoa fedha (upungufu wa fedha) kwa msako ambayo wanaweza wapeni fedha kutoka. + + + Angalia mfumo mtawanyo wa kimamlaka wa kukopa + + +Kuna faida nyingi kwa kutumia mkopeshaji madaraka... + +#### Kukopa kwa faragha {#borrowing-privacy} + +Leo, kukopesha na ukopeshaji fedha hutegemea watu mmoja-mmoja wanaohusika. Benki haja kujua kama wewe ni uwezekano wa kulipa mkopo kabla ya kukopesha. + +Utoaji mkopo usio wa kati hufanya kazi bila yeyote kati ya pande hizo kuwa na wajibu wa kutambua. Badala yake, mkopeshaji lazima atoe dhamana ambayo mkopeshaji atapokea moja kwa moja ikiwa mkopo wao kurudishwa. Baadhi ya wakopeshaji hata hukubali [NFTs](/glossary/#nft) kama dhamana. NFT ni mkataba kwenda kwenye mali ya kipekee, kama mchoro au kazi ya mchoraji. [Zaidi kuhusu NFTs](/nft/) + +Hii inakuruhusu kukopa hela bila hitaji la kuchunguzwa ama kutoa taarifa zako za faragha. + +#### Upatikanaji wa fedha za kimataifa {#access-global-funds} + +Unapotumia mkopaji aliegatuliwa unaweza kufikia fedha zilizowekwa popote duniani, sio fedha zilizo chini ya mipaka ya benki yako au taasisi. Hii inafanya mikopo ipatikane kwa urahisi zaidi na inaboresha viwango vya riba. + +#### Ufanisi wa kodi {#tax-efficiencies} + +Ukikopa unapata pesa bila kuuza ETH yako (tukio litakalohisha kukatwa kodi). Badala yake unaweza kutumia ETH kama dhamana ya mkopo wa sarafu-imara. Hii inakupa mzunguko wa pesa unaohitaji na unakua umetunza ETH yako. Sarafu-imara ni tokeni zilizo bora kwako unapohitaji pesa kwasababu hazina utete wa thamani kama ETH. [Zaidi kuhusu sarafu-imara](#stablecoins) + +#### Mikopo ya haraka {#flash-loans} + +Mikopo myepesi iko kwenye majaribio ya ukopeshaji uliogatuliwa unaokuwezesha kukopa bila ya dhamana au kutoa taarifa binafsi. + +Wao ni hakuna kwa watu wasio wa kiufundi kwa sasa lakini wao kidokezo kile kinachoweza kufanyika kwa kila mtu katika siku zijazo. + +Ni kazi juu ya msingi kwamba mkopo ni kuchukuliwa na kulipwa nyuma ndani ya shughuli hiyo. Ikiwa haiwezi kulipwa tena, shughuli hiyo rudi nyuma kana kwamba hakuna kilichotokea. + +Fedha ambazo hutumiwa mara nyingi huhifadhiwa katika makundi ya fedha (makundi makubwa ya fedha kutumika kwa ajili ya ukopeshaji). Kama si kutumika katika wakati fulani, hii +hujenga fursa kwa mtu ukopeshaji fedha hizi, kufanya biashara nao, na kulipa yao katika kamili kabisa asili wakati huo huo wao ni ukopeshaji. + +Hii ina maana mengi ya ufahamu lazima ni pamoja na katika shughuli sana bora. Mfano rahisi inaweza kuwa mtu kutumia mkopo mwangaza wa ghafula kopa kama kiasi cha mali kwa bei moja ili waweze kuuza katika kupeana tofauti ambapo bei ni ya juu. + +Kwa hiyo katika shughuli moja, yafuatayo hutokea: + +- Unakopa kiasi X cha mali $asset kwa $1.00 kutoka kwa jukwaa la mabadilishano A +- Wewe uza X $asset kwenye jukwaa la kupeana B kwa $1.10 +- Wewe kulipa nyuma mkopo kupeana A +- Wewe kuweka faida chini ada ya shughuli + +Kama kupeana B ya ugavi pungua ghafla na mtumiaji hakuwa na uwezo wa kununua kutosha ili kufidia mkopo wa awali, shughuli ingekuwa tu kushindwa. + +Ili uweze kufanya mfano hapo juu katika ulimwengu wa jadi wa kifedha, wewe ingekuwa kiasi kikubwa cha pesa. Mfumo huu wa upataji fedha unaweza kufikiwa na hao wenye utajiri. Mikopo ya haraka ni mfano wa mustakabali ambapo kuwa na pesa si lazima iwe sharti la kupata pesa. + + + Zaidi kuhusu mikopo ya haraka + + + + +### Anza kuweka akiba kwa kutumia kripto {#saving} + +#### Kukopesha {#lending} + +Unaweza pata riba kwenye kripto zako kwa kukopesha na kuona fedha zako zinakuwa kwa muda halisi. Kwa sasa kiwango cha riba ni kikubwa zaidi ya nini weza kupata kwenye benki ya mji wako (Kama una bahati kufikia moja wapo). Mfano huu hapa: + +- Unakopesha Dai yako 100, [sarafu-imara](/stablecoins/), kwa bidhaa kama Aave. +- Wewe pokea 100 mfumo wa kifedha usio na kituo Dai ( jukwaa la mikopo) ambayo ni ishara ambayo wakilisha Dai yako mkopo. +- Jukwaa la mikopo yako ongezeko kulingana na viwango vya riba na unaweza kuona salio lako kukua kwenye mkoba wako. Kulingana na [APR](/glossary/#apr), salio la mkoba wako litaonyesha kitu kama 100.1234 baada ya siku chache au hata saa! +- Unaweza kuondoa kiasi cha kawaida mikopo kwamba ni sawa na salio lako mikopo wakati wowote. + + + Angalia mfumo mtawanyo wa kimamlaka wa kukopesha + + +#### Bahati nasibu zisizo na hasara {#no-loss-lotteries} + +Mashindano ya bahati nasibu yasiyo na hasara kama Kucheza Pamoja ni njia mpya ya kufurahisha na ya ubunifu ya kuokoa pesa. + +- Wewe kununua tiketi 100 kwa kutumia ishara 100 za mkopo. +- Wewe kupokea 100 sarafu thabiti mkopo kuwakilisha yako 100 tiketi. +- Kama moja ya tiketi yako ni kuchaguliwa kama mshindi, yako salio sarafu thabiti ongezeko kwa kiasi cha bwawa tuzo. +- Kama huna kushinda, yako 100 salio mikunjo juu ya wiki ijayo sare. +- Unaweza kuondoa kiasi cha kawaida Dai kwamba ni sawa na salio lako salio wakati wowote. + +Bwawa tuzo ni kuzalisha na riba yote kuzalisha na kukopesha amana tiketi kama katika mkopo mfano hapo juu. + + + Jaribu PoolTogether + + + + +### Badilishana tokeni {#swaps} + +Kuna maelfu ya tokeni kwenye Ethereum. Kubadilisha madaraka (Masoko ya tarakimu) kuruhusu biashara ishara tofauti wakati wowote unataka. Kamwe usiache udhibiti wa mali zako. Kufanya hivyo ni kama kusafiri katika nchi ya kigeni na kubadilisha sarufi. Lakini toleo la DeFi halifungwi kamwe. Masoko ni 24/7, 365 siku kwa mwaka na teknolojia dhamana kutakuwa daima mtu kukubali biashara. + +Kwa mfano, kama unataka kutumia hakuna-hasara bahati nasibu kucheza pamoja (ilivyoelezwa hapo juu), unahitaji ishara kama Dai au USDC. Hizi Masoko ya tarakimu kuruhusu wewe kubadilisha ETH yako kwa ishara hizo na nyuma tena wakati wewe ni kumaliza. + + + Angalia mabadilishano ya tokeni + + + + +### Biashara ya hali ya juu {#trading} + +Kuna chaguzi zaidi ya juu kwa wauzaji ambao kama kuongoza zaidi kidogo. Amri za kikomo, kudumu, biashara ya ukingo na zaidi yote inawezekana. Pamoja na biashara ya madaraka kupata kudhibiti wa fedha za kimataifa, soko kamwe kufunga, na wewe ni daima katika udhibiti wa mali yake. + +Wakati matumizi ya kuu kati una kuweka mali yako kabla ya biashara na kuamini yao kuangalia baada yao. Wakati mali yako ni zilizowekwa, wao ni katika hatari kama kati kuu ni malengo ya kuvutia kwa walaghai. + + + Angalia mfumo mtawanyo wa kimamlaka wa biashara + + + + +### Kuza kwingineko lako {#investing} + +Fedha ya usimamizi wa bidhaa kwenye Ethereum ambayo jaribu kukua soko lako kulingana na mpango wa uteuzi wako. Hii ni moja kwa moja, wazi kwa kila mtu, na haina haja ya meneja binadamu kuchukua kukata ya faida yako. + +Mfano mzuri ni hazina ya [DeFi Pulse Index (DPI)](https://defipulse.com/blog/defi-pulse-index/). Hii ni mfuko ambao kusawazisha upya usawa moja kwa moja ili kuhakikisha mkusanyiko wako daima ishara za juu za DeFi kwa mtaji wa soko. Hauhitaji kusimamia kila maelezo na unaweza kutoa fedha wakati wowote ule. + + + Angalia mfumo mtawanyo wa kimamlaka wa uwekezaji + + + + +### Fadhili mawazo yako {#crowdfunding} + +Ethereum ni mfumo zuri wa kukusanya fedha: + +- Wafadhili wa muhimu wanaweza kutoka popote - Ethereum na tokeni zake ziko huru kwa mtu yeyote, mahali popote ulimwenguni huu. +- Ni wazi hivyo wakusanya fedha wanaweza kuthibitisha mkusanyo pesa. Unaweza hata kufuatilia jinsi fedha tumika kadri muda kwenda. +- Wakusanya fedha wanaweza weka fedha kurudishwa moja kwa moja, kwa mfano, kuna muda wa mwisho maalumu na kiasi cha chini cha fedha ambacho haijafika mahitaji. + + + Angalia mfumo mtawanyo wa kimamlaka wa uchangishaji wa umma + + +#### Ufadhili wa kipeo cha pili {#quadratic-funding} + +Ethereum ni ratiba ya chanzo wazi na mengi ya kazi hadi sasa imekuwa kufadhiliwa na jamii. Hii kuongozwa ukuaji wa mtindo mpya wa kuvutia wa kukusanya fedha: fedha wa mraba. Hii ina uwezo wa kuboresha jinsi tunavyofadhili aina zote za bidhaa za umma katika siku zijazo. + +Ufadhili wa kwadaratiki huhakikisha kuwa miradi inayopokea ufadhili mwingi ni ile yenye mahitaji ya kipekee. Kwa maneno mengine, miradi ambayo inasimama kuboresha maisha ya watu wengi. Hivi ndivyo jinsi gani kazi: + +1. Kuna kiasi kilekile cha pesa kuchangia. +2. Mzunguko wa fedha za umma huanza. +3. Watu wanaweza kuonyesha mahitaji yao kwa mradi kwa kutoa mchango wa pesa. +4. Mara mzunguko ni juu, bwawa lingana ni kugawanywa kwa miradi. Hao wenye mahitaji ya kipekee wanapata kiasi kikubwa kutoka kwenye mfuko wa fedha. + +Hii inamaanisha kuwa mradi A na mchango wao wa dola 100 unaweza ikapata fedha zaidi ya mradi B ambao una mchango mmoja wa dola 10,000 (inategemea na ukubwa wa mfuko wa fedha). + + + Zaidi kuhusu ufadhili wa kipeo cha pili + + + + +### Bima {#insurance} + +Bima madaraka ina lengo la kufanya bima kuwa nafuu, kulipa haraka, na uwazi zaidi. Pamoja na utumiaji wa mitambo endesha zaidi, chanjo ni zaidi nafuu na malipo ni mengi kwa kasi. Takwimu kutumika kuamua juu ya madai yako ni wazi kabisa. + +Bidhaa Ethereum, kama ratiba yoyote, wanaweza kuteseka kutokana na mende na kutumia. Kwa hiyo sasa bidhaa nyingi za bima katika nafasi ya kuzingatia kulinda watumiaji wao dhidi ya kupoteza fedha. Hata hivyo, kuna miradi kuanzia kujenga chanjo kwa kila kitu ambacho maisha yanaweza kutupa. Mfano mzuri wa hili ni Bima ya Mazao ya Etherisc ambayo inalenga [kuwalinda wakulima wadogo nchini Kenya dhidi ya ukame na mafuriko](https://blog.etherisc.com/etherisc-teams-up-with-chainlink-to-deliver-crop-insurance-in-kenya-137e433c29dc). Bima madaraka inaweza kutoa chanjo ya bei nafuu kwa wakulima ambao mara nyingi hulipwa nje ya bima ya jadi. + + + Angalia mfumo mtawanyo wa kimamlaka wa bima + + + + +### Vikusanyaji na wasimamizi wa kwingineko {#aggregators} + +Kwa kuwa kuna kwenda mengi sana, hitaji njia ya kufuatilia changia kwa mradi wako wote, mikopo, na biashara. Kuna bidhaa nyingi kukuacha kuratibu shughuli zako zote za DeFi kutoka sehemu moja. Huu ndio uzuri wa uwazi wa muundo wa DeFi. Timu wanaweza kujenga nje kiunganishi ambapo huwezi tu kuona mizani yako katika bidhaa, unaweza kutumia makala yao pia. Unaweza kupata hii muhimu kama wewe kuchunguza zaidi ya DeFi. + + + Angalia mfumo mtawanyo wa kimamlaka wa kwingineko + + + + +## Je, DeFi hufanya kazi? {#how-defi-works} + +DeFi hutumia Sarafu za tarakimu na mikataba Mzuri wa akili kutoa huduma ambazo si kufanya wapatanishi. Katika ulimwengu wa leo wa kifedha, taasisi za kifedha hutenda kama wakunga wa shughuli za kifedha. Hii anatoa taasisi hizi nguvu kubwa kwa sababu pesa zako mtiririko kupitia kwao. Zaidi ya hayo, mabilioni ya watu kote ulimwenguni hawawezi hata kupata akaunti ya benki. + +Kwenye DeFi, mkataba erevu inachukua nafasi ya mashirika ya fedha kwenye kufanya muamala. Mkataba erevu ni aina ya hesabu Ethereum ambayo inaweza kushikilia fedha na inaweza kuweka / malipo yao kulingana na hali fulani. Hakuna mtu anaweza kubadilisha kwamba mkataba erevu wakati ni kuishi daima kukimbia kama kupangwa. + +Mkataba ambao iliyoundwa kutoa posho au pesa za mfukoni unaweza kupangwa Kuweka pesa kutoka Akaunti A kwenda Akaunti B kila Ijumaa. Na itafanya hivyo tu kwa muda mrefu kama Akaunti A ina fedha kuhitajika. Hakuna mtu anayeweza kubadilisha mkataba na kuongeza Akaunti C kama mpokeaji kuiba fedha. + +Mikataba pia ni ya umma kwa mtu yeyote kukagua na ukaguzi. Hii ina maana mikataba mbaya mara nyingi kuja chini ya uchunguzi wa jamii rembo haraka. + +Hii haina maana kuna sasa haja ya kuamini wanachama zaidi ya kiufundi ya jamii Ethereum ambao wanaweza kusoma kanuni. Jamii ya chanzo wazi husaidia kuweka watengenezaji katika udhibiti, lakini hitaji hili kupungua kwa muda kama mikataba erevu kuwa rahisi kusoma na njia nyingine za kuthibitisha uaminifu wa kanuni ni maendeleo. + +## Ethereum na DeFi {#ethereum-and-defi} + +Ethereum ni msingi kamili kwa DeFi kwa sababu kadhaa: + +- Hakuna anayemiliki Ethereum au mikataba erevu kuishi juu yake ⁇ hii inatoa kila mtu fursa ya kutumia DeFi. Hii pia inamaanisha hakuna mtu anayeweza kubadilisha utawala juu yako. +- Bidhaa za DeFi zote kusema lugha moja nyuma ya pazia: Ethereum. Hii inamaanisha bidhaa nyingi hufanya kazi pamoja bila mshono. Unaweza kukopesha ishara kwenye jukwaa moja na Kubadilika ishara ya riba katika soko tofauti kwenye kupangwa tofauti kabisa. Hii ni kama kutoa tiketi ya uaminifu kwenye benki yako. +- Ishara na sarafu za kijamii ni kujengwa katika Ethereum, pamoja kitabu - kufuatilia shughuli na Uki wa mali ni kinda kitu Ethereum ya. +- Ethereum kuruhusu uhuru kamili wa kifedha - bidhaa nyingi usichukue kamwe ulinzi wa fedha zako, kuondoka katika udhibiti. + +Unaweza kufikiria DeFi katika tabaka: + +1. Mtandao wa vizuizi - Ethereum ina historia ya shughuli na hali ya Hesabu. +2. Mali – [ETH](/what-is-ether/) na tokeni zingine (sarafu). +3. Itifaki – [mikataba-erevu](/glossary/#smart-contract) ambayo hutoa utendaji, kwa mfano, huduma inayoruhusu ukopeshaji uliogatuliwa wa mali. +4. [Programu](/apps/) – bidhaa tunazotumia kudhibiti na kupata itifaki. + +Kumbuka: sehemu kubwa ya DeFi hutumia [kiwango cha ERC-20](/glossary/#erc-20). Usajili katika DeFi hutumia ukusanyaji cha ETH mkusanyo wa Ether (WETH). [Jifunze zaidi kuhusu ether iliyofungwa](/wrapped-eth). + +## Jenga DeFi {#build-defi} + +DeFi ni harakati ya chanzo wazi. Itifaki na matumizi ya DeFi yote yako wazi kwa ajili yako kukagua, kugawanya, na kubuni. Kwa sababu ya hii kuchanganya vitu vilivyo na tabaka (wao wote kushiriki Mtandao wa vizuizi msingi huo na mali), itifaki inaweza kuwa mchanganyiko na linganishwa kufungua kipekee fursa mchanganyiko. + + + Zaidi kuhusu kujenga mfumo mtawanyo wa kimamlaka + + +## Masomo zaidi {#further-reading} + +### Data za DeFi {#defi-data} + +- [DeFi Prime](https://defiprime.com/) +- [DeFi Llama](https://defillama.com/) + +### Makala za DeFi {#defi-articles} + +- [Mwongozo wa wanaoanza wa DeFi](https://blog.coinbase.com/a-beginners-guide-to-decentralized-finance-defi-574c68ff43c4) – _Sid Coelho-Prabhu, Januari 6, 2020_ +- [Miongozo ya Kutathmini Hatari ya DeFi ya EEA](https://entethalliance.org/specs/defi-risks/) – Muhtasari unaoungwa mkono na sekta kuhusu jinsi ya kutambua na kutathmini hatari muhimu katika itifaki za DeFi. + +### Video {#videos} + +- [Finematics - elimu ya fedha zilizogatuliwa](https://finematics.com/) – _Video kuhusu DeFi_ +- [The Defiant](https://www.youtube.com/playlist?list=PLaDcID4s1KronHMKojfjwiHL0DdQEPDcq) - _Misingi ya DeFi: Kila kitu unachohitaji kujua ili kuanza katika nafasi hii ambayo wakati mwingine inachanganya._ +- [Whiteboard Crypto](https://youtu.be/17QRFlml4pA) _DeFi ni nini?_ + +### Jumuiya {#communities} + +- [Seva ya Discord ya DeFi Llama](https://discord.defillama.com/) +- [Seva ya Discord ya DeFi Pulse](https://discord.gg/Gx4TCTk) + + + + diff --git a/public/content/translations/sw/desci/index.md b/public/content/translations/sw/desci/index.md new file mode 100644 index 00000000000..ceb1cb8b3bd --- /dev/null +++ b/public/content/translations/sw/desci/index.md @@ -0,0 +1,139 @@ +--- +title: Sayansi iliogatuliwa (DeSci) +description: Muhtasari wa sayansi iliyogatuliwa kwenye Ethereum +lang: sw +template: use-cases +emoji: ":microscope:" +sidebarDepth: 2 +image: /images/future_transparent.png +alt: "" +summaryPoint1: Mbadala wa kimataifa, wazi kwa mfumo wa sasa wa kisayansi. +summaryPoint2: Teknolojia inayowezesha wanasayansi kukusanya fedha, kufanya majaribio, kushiriki data, kusambaza maarifa, na zaidi. +summaryPoint3: Inajengwa juu ya harakati ya sayansi huria. +--- + +## Sayansi iliyogatuliwa (DeSci) ni nini? {#what-is-desci} + +Sayansi iliyogatuliwa (DeSci) ni harakati inayolenga kujenga miundombinu ya umma kwa ajili ya kufadhili, kuunda, kupitia upya, kutambua mchango, kuhifadhi na kusambaza maarifa ya kisayansi kwa haki na usawa kwa kutumia mfumo wa [Web3](/glossary/#web3). + +DeSci inalenga kuunda mfumo ambapo wanasayansi wanahimizwa kushiriki utafiti wao waziwazi na kupokea sifa kwa kazi yao, huku ikiruhusu mtu yeyote kufikia na kuchangia katika utafiti kwa urahisi. DeSci inafanya kazi kutokana na wazo kwamba maarifa ya kisayansi yanapaswa kupatikana kwa kila mtu na kwamba mchakato wa utafiti wa kisayansi unapaswa kuwa wa uwazi. DeSci inaunda mfumo wa utafiti wa kisayansi uliogatuliwa na kusambazwa zaidi, na kuifanya iwe sugu zaidi dhidi ya udhibiti na usimamizi na mamlaka kuu. DeSci inatumai kuunda mazingira ambapo mawazo mapya na yasiyo ya kawaida yanaweza kustawi kwa kugatua ufikiaji wa ufadhili, zana za kisayansi, na njia za mawasiliano. + +Sayansi iliyogatuliwa inaruhusu vyanzo mbalimbali vya ufadhili (kutoka [DAOs](/glossary/#dao), [michango ya quadratic](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531) hadi ufadhili wa umma na zaidi), data na mbinu zinazopatikana zaidi, na kwa kutoa motisha kwa urudufishaji. + +### Juan Benet - Harakati ya DeSci + + + +## Jinsi DeSci inavyoboresha sayansi {#desci-improves-science} + +Orodha isiyo kamili ya matatizo muhimu katika sayansi na jinsi sayansi iliyogatuliwa inavyoweza kusaidia kushughulikia masuala haya + +| **Sayansi iliyogatuliwa** | **Sayansi ya jadi** | +| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Usambazaji wa fedha **huamuliwa na umma** kwa kutumia mifumo kama vile michango ya quadratic au DAOs. | Vikundi vidogo, vilivyofungwa, na **viliyopo katikati** hudhibiti usambazaji wa fedha. | +| Unashirikiana na wenzako kutoka **kote ulimwenguni** katika timu zenye mabadiliko. | Mashirika ya ufadhili na taasisi za nyumbani **huzuia** ushirikiano wako. | +| Maamuzi ya ufadhili hufanywa mtandaoni na **kwa uwazi**. Mifumo mipya ya ufadhili inachunguzwa. | Maamuzi ya ufadhili hufanywa kwa muda mrefu wa kusubiri na **uwazi mdogo**. Kuna mifumo michache ya ufadhili. | +| Kushiriki huduma za maabara hurahisishwa na kuwa wazi zaidi kwa kutumia teknolojia ya [Web3](/glossary/#web3). | Kushiriki rasilimali za maabara mara nyingi huwa **polepole na hakuna uwazi**. | +| **Miundo mipya ya uchapishaji** inaweza kuendelezwa inayotumia misingi ya Web3 kwa ajili ya uaminifu, uwazi na ufikiaji kwa wote. | Unachapisha kupitia njia zilizowekwa ambazo mara nyingi zinatambuliwa kuwa **zisizo na ufanisi, zenye upendeleo na unyonyaji**. | +| Unaweza **kupata tokeni na sifa kwa kupitia kazi** za wenzako. | **Kazi yako ya kupitia kazi za wenzako hailipwi**, ikinufaisha wachapishaji wanaotafuta faida. | +| **Unamiliki mali miliki (IP)** unayozalisha na kuisambaza kulingana na masharti ya wazi. | **Taasisi yako ya nyumbani inamiliki IP** unayozalisha. Ufikiaji wa IP hauko wazi. | +| **Kushiriki utafiti wote**, ikiwa ni pamoja na data kutoka kwa jitihada zisizofanikiwa, kwa kuwa na hatua zote onchain. | **Upendeleo wa uchapishaji** unamaanisha kuwa watafiti wana uwezekano mkubwa wa kushiriki majaribio yaliyokuwa na matokeo ya mafanikio. | + +## Ethereum na DeSci {#ethereum-and-desci} + +Mfumo wa sayansi iliyogatuliwa utahitaji usalama imara, gharama ndogo za kifedha na miamala, na mfumo tajiri wa uendelezaji wa programu. Ethereum inatoa kila kitu kinachohitajika kwa ajili ya kujenga teknolojia ya sayansi iliyogatuliwa. + +## Matumizi ya DeSci {#use-cases} + +DeSci inajenga zana za kisayansi za kuingiza wasomi wa jadi katika ulimwengu wa kidijitali. Hapo chini ni sampuli ya matumizi ambayo Web3 inaweza kutoa kwa jamii ya kisayansi. + +### Uchapishaji {#publishing} + +Uchapishaji wa kisayansi una matatizo maarufu kwa sababu unasimamiwa na makampuni ya uchapishaji yanayotegemea kazi ya bure kutoka kwa wanasayansi, wapitiaji, na wahariri ili kutoa machapisho, lakini kisha hutoza ada za uchapishaji za juu sana. Umma, ambao kwa kawaida umelipia kazi na gharama za uchapishaji kwa njia isiyo ya moja kwa moja kupitia kodi, mara nyingi hauwezi kupata kazi hiyo hiyo bila kumlipa mchapishaji tena. Jumla ya ada za kuchapisha makala za kisayansi za kibinafsi mara nyingi ni tarakimu tano ($USD), ikidhoofisha dhana nzima ya maarifa ya kisayansi kama [bidhaa ya umma](/glossary/#public-goods) huku ikizalisha faida kubwa kwa kundi dogo la wachapishaji. + +Mifumo huria na ya wazi ipo kwa njia ya seva za machapisho ya awali, [kama vile ArXiv](https://arxiv.org/). Hata hivyo, mifumo hii haina udhibiti wa ubora, [mifumo ya kuzuia sybil](/glossary/#anti-sybil), na kwa ujumla haifuatilii vipimo vya kiwango cha makala, ikimaanisha kuwa kwa kawaida hutumiwa tu kutangaza kazi kabla ya kuiwasilisha kwa mchapishaji wa jadi. SciHub pia hufanya machapisho yaliyochapishwa kupatikana bure, lakini si kisheria, na tu baada ya wachapishaji tayari kuchukua malipo yao na kufunga kazi hiyo katika sheria kali za hakimiliki. Hii inaacha pengo muhimu kwa machapisho ya sayansi na data zinazopatikana na mfumo uliopachikwa wa uhalali na mfumo wa motisha. Zana za kujenga mfumo kama huo zipo katika Web3. + +### Urudufishaji na Uigaji {#reproducibility-and-replicability} + +Urudufishaji na uigaji ni misingi ya ugunduzi wa kisayansi wa ubora. + +- Matokeo yanayoweza kurudufishwa yanaweza kupatikana mara nyingi mfululizo na timu ileile ikitumia mbinu ileile. +- Matokeo yanayoweza kuigwa yanaweza kupatikana na kundi tofauti likitumia usanidi uleule wa majaribio. + +Zana mpya za asili za Web3 zinaweza kuhakikisha kuwa urudufishaji na uigaji ni msingi wa ugunduzi. Tunaweza kuunganisha sayansi ya ubora katika muundo wa kiteknolojia wa wasomi. Web3 inatoa uwezo wa kuunda [uthibitishaji](/glossary/#attestation) kwa kila sehemu ya uchambuzi: data ghafi, injini ya kukokotoa, na matokeo ya programu. Uzuri wa mifumo ya makubaliano ni kwamba wakati mtandao unaoaminika unaundwa kwa ajili ya kudumisha vipengele hivi, kila mshiriki wa mtandao anaweza kuwajibika kwa kurudufisha hesabu na kuthibitisha kila matokeo. + +### Ufadhili {#funding} + +Mfumo wa sasa wa kawaida wa kufadhili sayansi ni kwamba watu binafsi au vikundi vya wanasayansi huwasilisha maombi yaliyoandikwa kwa shirika la ufadhili. Jopo dogo la watu wanaoaminika hutathmini maombi na kisha kuwahoji watahiniwa kabla ya kutoa fedha kwa sehemu ndogo ya waombaji. Mbali na kuunda vikwazo vinavyosababisha wakati mwingine **miaka ya kusubiri** kati ya kuomba na kupokea ruzuku, mfumo huu unajulikana kuwa katika hatari kubwa **ya upendeleo, maslahi binafsi na siasa** za jopo la mapitio. + +Uchunguzi umeonyesha kwamba majopo ya mapitio ya ruzuku hayafanyi kazi nzuri ya kuchagua mapendekezo ya hali ya juu kwani mapendekezo yale yale yanayopelekwa kwa majopo tofauti huwa na matokeo tofauti sana. Kadiri ufadhili unavyokuwa mchache, umejilimbikizia kwenye kundi dogo la watafiti waandamizi zaidi wenye miradi isiyo na ubunifu mwingi kiakili. Athari hiyo imeunda mazingira ya ufadhili yenye ushindani mkali, ikijenga motisha potofu na kukandamiza uvumbuzi. + +Web3 ina uwezo wa kuvuruga mfumo huu mbovu wa ufadhili kwa kujaribu mifumo tofauti ya motisha iliyoundwa na DAOs na Web3 kwa upana. [Ufadhili wa bidhaa za umma wa kurudi nyuma](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c), [ufadhili wa quadratic](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531), [utawala wa DAO](https://www.antler.co/blog/daos-and-web3-governance-the-promise-implications-and-challenges-ahead) na [miundo ya motisha ya tokeni](https://cdixon.org/2017/05/27/crypto-tokens-a-breakthrough-in-open-network-design) ni baadhi ya zana za Web3 zinazoweza kuleta mapinduzi katika ufadhili wa sayansi. + +### Umiliki na uendelezaji wa IP {#ip-ownership} + +Mali miliki (IP) ni tatizo kubwa katika sayansi ya jadi: kuanzia kukwama katika vyuo vikuu au kutotumika katika bioteknolojia, hadi kuwa ngumu sana kuthaminiwa. Hata hivyo, umiliki wa mali za kidijitali (kama vile data ya kisayansi au makala) ni kitu ambacho Web3 hufanya vizuri sana kwa kutumia [tokeni zisizoweza kubadilishwa (NFTs)](/glossary/#nft). + +Kwa njia ileile ambayo NFTs zinaweza kupitisha mapato kwa miamala ya baadaye kurudi kwa muundaji wa asili, unaweza kuanzisha minyororo ya uwazi ya utoaji wa thamani ili kuwazawadia watafiti, miili ya uongozi (kama DAOs), au hata watu ambao data zao zimekusanywa. + +[IP-NFTs](https://medium.com/molecule-blog/ip-nfts-for-researchers-a-new-biomedical-funding-paradigm-91312d8d92e6) zinaweza pia kufanya kazi kama ufunguo wa hifadhi ya data iliyogatuliwa ya majaribio ya utafiti yanayofanywa, na kuunganisha kwenye uwekaji fedha wa NFT na [DeFi](/glossary/#defi) (kutoka ugawanyaji hadi mabwawa ya kukopesha na tathmini ya thamani). Pia inaruhusu huluki za asili za onchain kama vile DAOs kama [VitaDAO](https://www.vitadao.com/) kufanya utafiti moja kwa moja onchain. +Ujio wa [tokeni za "soulbound"](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) zisizoweza kuhamishwa unaweza pia kuwa na jukumu muhimu katika DeSci kwa kuruhusu watu binafsi kuthibitisha uzoefu wao na sifa zao zilizounganishwa na anwani yao ya Ethereum. + +### Hifadhi ya data, ufikiaji na usanifu {#data-storage} + +Data za kisayansi zinaweza kufanywa zipatikane kwa urahisi zaidi kwa kutumia ruwaza za Web3, na hifadhi iliyosambazwa huwezesha utafiti kustahimili matukio ya maafa. + +Kianzio lazima kiwe mfumo unaofikika na utambulisho wowote uliogatuliwa ulio na sifa zinazoweza kuthibitishwa. Hii inaruhusu data nyeti kurudufishwa kwa usalama na pande zinazoaminika, kuwezesha urudufu na ukinzani wa udhibiti, urudufishaji wa matokeo, na hata uwezo wa pande nyingi kushirikiana na kuongeza data mpya kwenye seti ya data. Mbinu za kompyuta za siri kama [compute-to-data](https://7wdata.be/predictive-analytics/compute-to-data-using-blockchain-to-decentralize-data-science-and-ai-with-the-ocean-protocol) hutoa mifumo mbadala ya ufikiaji kwa urudufishaji wa data ghafi, na kuunda Mazingira ya Utafiti Yanayoaminika kwa data nyeti zaidi. Mazingira ya Utafiti Yanayoaminika yametajwa na [NHS](https://medium.com/weavechain/whats-in-store-for-the-future-of-healthcare-data-b6398745fbbb) kama suluhisho la siku zijazo kwa faragha ya data na ushirikiano kwa kuunda mfumo ambapo watafiti wanaweza kufanya kazi na data kwa usalama papo hapo kwa kutumia mazingira sanifu ya kushiriki msimbo na mazoea. + +Suluhisho nyumbufu za data za Web3 huunga mkono hali zilizotajwa hapo juu na kutoa msingi wa Sayansi Huria ya kweli, ambapo watafiti wanaweza kuunda bidhaa za umma bila ruhusa za ufikiaji au ada. Suluhisho za data za umma za Web3 kama vile IPFS, Arweave na Filecoin zimeboreshwa kwa ajili ya ugatuaji. dClimate, kwa mfano, hutoa ufikiaji wa jumla kwa data ya hali ya hewa na tabianchi, ikiwa ni pamoja na kutoka kwa vituo vya hali ya hewa na miundo ya utabiri wa hali ya hewa. + +## Shiriki {#get-involved} + +Gundua miradi na ujiunge na jumuiya ya DeSci. + +- [DeSci.Global: kalenda ya matukio ya kimataifa na mikutano](https://desci.global) +- [Telegramu ya Mnyororo wa bloku kwa ajili ya Sayansi](https://t.me/BlockchainForScience) +- [Molecule: Fadhili na upate ufadhili kwa miradi yako ya utafiti](https://www.molecule.xyz/) +- [VitaDAO: pokea ufadhili kupitia mikataba ya utafiti unaofadhiliwa kwa ajili ya utafiti wa maisha marefu](https://www.vitadao.com/) +- [ResearchHub: chapisha matokeo ya kisayansi na ushiriki katika mazungumzo na wenzako](https://www.researchhub.com/) +- [dClimate API: uliza data ya hali ya hewa iliyokusanywa na jumuiya iliyogatuliwa](https://www.dclimate.net/) +- [DeSci Foundation: Mtengenezaji wa zana za uchapishaji za DeSci](https://descifoundation.org/) +- [DeSci.World: kituo kimoja kwa watumiaji kutazama, kushiriki na sayansi iliyogatuliwa](https://desci.world) +- [OceanDAO: ufadhili unaosimamiwa na DAO kwa ajili ya sayansi inayohusiana na data](https://oceanprotocol.com/) +- [Opscientia: mtiririko wa kazi wazi wa sayansi iliyogatuliwa](https://opsci.io/research/) +- [Bio.xyz: pata ufadhili kwa mradi wako wa biotech DAO au desci](https://www.bio.xyz/) +- [Fleming Protocol: uchumi wa data huria unaochochea ugunduzi wa ushirikiano wa kibayomedikali](http://flemingprotocol.io/) +- [Taasisi ya Active Inference](https://www.activeinference.org/) +- [IdeaMarkets: kuwezesha uaminifu wa kisayansi uliogatuliwa](https://ideamarket.io/) +- [DeSci Labs](https://www.desci.com/) +- [ValleyDAO: jumuiya huria, ya kimataifa inayotoa ufadhili na usaidizi wa kutafsiri kwa utafiti wa biolojia ya sintetiki](https://www.valleydao.bio) +- [Cerebrum DAO: kutafuta na kukuza suluhisho za kuendeleza afya ya ubongo na kuzuia kuzorota kwa neva](https://www.cerebrumdao.com/) +- [CryoDAO: kufadhili utafiti wa kina katika uwanja wa uhifadhi baridi](https://www.cryodao.org) +- [Elata: Kuwa na sauti katika mustakabali wa dawa za akili](https://www.elata.bio/) + +Tunakaribisha mapendekezo ya miradi mipya ya kuorodhesha - tafadhali angalia [sera yetu ya uorodheshaji](/contributing/adding-desci-projects/) ili kuanza! + +## Masomo zaidi {#further-reading} + +- [Wiki ya DeSci na Jocelynn Pearl na Ultrarare](https://docs.google.com/document/d/1aQC6zn-eXflSmpts0XGE7CawbUEHwnL6o-OFXO52PTc/edit#) +- [Mwongozo wa bioteknolojia iliyogatuliwa na Jocelynn Pearl kwa ajili ya a16z future](https://future.a16z.com/a-guide-to-decentralized-biotech/) +- [Hoja ya DeSci](https://gitcoin.co/blog/desci-the-case-for-decentralised-science/) +- [Mwongozo wa DeSci](https://future.com/what-is-decentralized-science-aka-desci/) +- [Rasilimali za sayansi iliyogatuliwa](https://www.vincentweisser.com/desci) +- [IP-NFTs za Biopharma za Molecule - Maelezo ya Kiufundi](https://www.molecule.xyz/blog/molecules-biopharma-ip-nfts-a-technical-description) +- [Kujenga Mifumo ya Sayansi Isiyo na Uaminifu na Jon Starr](https://medium.com/@jringo/building-systems-of-trustless-science-1cd2d072f673) +- [Paul Kohlhaas - DeSci: Mustakabali wa Sayansi Iliyogatuliwa (podikasti)](https://anchor.fm/andrew-steinwold/episodes/Paul-Kohlhaas---DeSci-The-Future-of-Decentralized-Science---Zima-Red-ep-117-e1h683a) +- [Ontolojia ya Ufafanuzi Amilifu kwa Sayansi Iliyogatuliwa: kutoka kwa Uelewa wa Muktadha hadi Mali ya Pamoja ya Kimaarifa](https://zenodo.org/record/6320575) +- [DeSci: Mustakabali wa Utafiti na Samuel Akinosho](https://lucidsamuel.medium.com/desci-the-future-of-research-b76cfc88c8ec) +- [Ufadhili wa Sayansi (Hitimisho: DeSci na misingi mipya ya crypto) na Nadia](https://nadia.xyz/science-funding) +- [Ugatuaji Unavuruga Uendelezaji wa Dawa](https://medium.com/id-theory/decentralisation-is-disrupting-drug-development-28b5ba5d447f) +- [DeSci ni Nini – Sayansi Iliyogatuliwa?](https://usadailytimes.com/2022/09/12/what-is-desci-decentralized-science/) + +### Video {#videos} + +- [Sayansi Iliyogatuliwa ni Nini?](https://www.youtube.com/watch?v=-DeMklVWNdA) +- [Mazungumzo kati ya Vitalik Buterin na mwanasayansi Aubrey de Grey kuhusu makutano ya utafiti wa maisha marefu na crypto](https://www.youtube.com/watch?v=x9TSJK1widA) +- Uchapishaji wa Kisayansi Umeharibika. Je, Web3 Inaweza Kuirekebisha?](https://www.youtube.com/watch?v=WkvzYgCvWj8) +- [Juan Benet - DeSci, Maabara Huru, na Sayansi ya Data ya Kiwango Kikubwa](https://www.youtube.com/watch?v=zkXM9H90g_E) +- [Sebastian Brunemeier - Jinsi DeSci Inaweza Kubadilisha Utafiti wa Kibayomedikali na Mtaji wa Ubia](https://www.youtube.com/watch?v=qB4Tc3FcVbM) +- [Paige Donner - Kuandaa Zana za Sayansi Huria kwa Web3 na Mnyororo wa Bloku](https://www.youtube.com/watch?v=nC-2QWQ-lgw&t=17s) diff --git a/public/content/translations/sw/developers/docs/accounts/index.md b/public/content/translations/sw/developers/docs/accounts/index.md new file mode 100644 index 00000000000..2a496662240 --- /dev/null +++ b/public/content/translations/sw/developers/docs/accounts/index.md @@ -0,0 +1,137 @@ +--- +title: Akaunti za Ethereum +description: Maelezo ya akaunti za Ethereum – miundo yao ya data na uhusiano wao na usimbaji fiche wa jozi za funguo. +lang: sw +--- + +Akaunti ya Ethereum ni chombo chenye salio la ether (ETH) ambacho kinaweza kutuma ujumbe kwenye Ethereum. Akaunti zinaweza kudhibitiwa na mtumiaji au kupelekwa kama mikataba mahiri + +## Mahitaji ya awali {#prerequisites} + +Ili kukusaidia kuelewa ukurasa huu vyema, tunapendekeza usome kwanza [utangulizi wetu wa Ethereum](/developers/docs/intro-to-ethereum/). + +## Aina za akaunti {#types-of-account} + +Ethereum ina aina mbili za akaunti: + +- Akaunti inayomilikiwa nje (EOA) – inadhibitiwa na yeyote mwenye funguo za kibinafsi +- Akaunti ya mkataba – mkataba mahiri uliowekwa kwenye mtandao, unaodhibitiwa na msimbo Jifunze kuhusu [mikataba-erevu](/developers/docs/smart-contracts/) + +Aina zote mbili za akaunti zina uwezo wa: + +- Pokea, shikilia, na tuma ETH na tokeni +- Shirikiana na mikataba mahiri iliyowekwa + +### Tofauti muhimu {#key-differences} + +**Inayomilikiwa Nje** + +- Kuunda akaunti hakugharimu chochote +- Inaweza kuanzisha miamala +- Miamala kati ya akaunti zinazomilikiwa nje inaweza kuwa ni uhamisho wa ETH/tokeni pekee +- Inaundwa na jozi ya funguo za usimbaji fiche: funguo za umma na za kibinafsi zinazodhibiti shughuli za akaunti + +**Mkataba** + +- Kuunda mkataba kuna gharama kwa sababu unatumia hifadhi ya mtandao +- Inaweza tu kutuma ujumbe kwa kujibu kupokea muamala +- Miamala kutoka akaunti ya nje kwenda akaunti ya mkataba inaweza kuchochea msimbo ambao unaweza kutekeleza vitendo mbalimbali, kama vile kuhamisha tokeni au hata kuunda mkataba mpya +- Akaunti za mkataba hazina funguo za kibinafsi Badala yake, zinadhibitiwa na mantiki ya msimbo wa mkataba mahiri + +## Uchunguzi wa akaunti {#an-account-examined} + +Akaunti za Ethereum zina sehemu nne: + +- `nonce` – Kihesabu kinachoonyesha idadi ya miamala iliyotumwa kutoka kwa akaunti inayomilikiwa nje au idadi ya mikataba iliyoundwa na akaunti ya mkataba. Ni muamala mmoja tu wenye nonce fulani unaweza kutekelezwa kwa kila akaunti, ikilinda dhidi ya mashambulio ya kurudia ambapo miamala iliyosainiwa inatangazwa tena na kutekelezwa upya +- `balance` – Idadi ya wei inayomilikiwa na anwani hii. Wei ni mgawanyo wa ETH na kuna 1e+18 wei kwa kila ETH. +- `codeHash` – Hashi hii inarejelea _msimbo_ wa akaunti kwenye mashine halisi ya ethereum (EVM). Akaunti za mkataba zina vipande vya msimbo vilivyopangwa ambavyo vinaweza kutekeleza shughuli tofauti. Msimbo huu wa EVM hutekelezwa ikiwa akaunti inapokea mwito wa ujumbe. Haiwezi kubadilishwa, tofauti na sehemu zingine za akaunti. Vipande vyote vya msimbo kama hivyo huhifadhiwa kwenye hifadhidata ya hali chini ya hash zinazolingana kwa upatikanaji wa baadaye. Thamani hii ya hash inajulikana kama codeHash. Kwa akaunti zinazomilikiwa nje, sehemu ya codeHash ni hash ya herufi tupu. +- `storageRoot` – Wakati mwingine hujulikana kama hashi ya hifadhi. Hashi ya biti 256 ya nodi ya mzizi ya [Merkle Patricia Trie](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) inayoweka msimbo wa yaliyomo kwenye hifadhi ya akaunti (ramani kati ya thamani za nambari kamili za biti 256), iliyowekwa msimbo ndani ya trie kama ramani kutoka kwa hashi ya Keccak ya biti 256 ya funguo za nambari kamili za biti 256 hadi kwa thamani za nambari kamili za biti 256 zilizowekwa msimbo kwa RLP. Trie hii inaonyesha hash ya maudhui ya hifadhi ya akaunti hii, na kwa chaguo-msingi huwa tupu. + +![Mchoro unaoonyesha muundo wa akaunti](./accounts.png) +_Mchoro umechukuliwa kutoka [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## Akaunti zinazomilikiwa nje na jozi za funguo {#externally-owned-accounts-and-key-pairs} + +Akaunti inaundwa na jozi ya funguo za usimbaji fiche: ya umma na ya kibinafsi. Hizi husaidia kuthibitisha kuwa muamala ulisainiwa kweli na mtumaji na kuzuia ulaghai. Funguo yako ya kibinafsi ndiyo unayotumia kusaini miamala, kwa hivyo inakupa umiliki wa fedha zilizounganishwa na akaunti yako. Huwezi kamwe kushikilia sarafu za kidijitali moja kwa moja, unashikilia funguo za kibinafsi – fedha daima zipo kwenye leja ya Ethereum. + +Hii huzuia wahalifu kutoka kutangaza miamala bandia kwa sababu unaweza kila mara kuthibitisha mtumaji wa muamala. + +Ikiwa Alice anataka kutuma ether kutoka kwa akaunti yake kwenda kwa akaunti ya Bob, Alice anapaswa kuunda ombi la muamala na kulituma kwa mtandao ili lithibitishwe. Matumizi ya Ethereum ya usimbaji fiche wa funguo za umma yanahakikisha kwamba Alice anaweza kuthibitisha kuwa yeye ndiye aliyekusudia kuanzisha ombi la muamala. Bila mbinu za usimbaji fiche, mshambulizi Eve anaweza kutangaza ombi hadharani linalofanana na "tuma 5 ETH kutoka kwa akaunti ya Alice kwenda kwa akaunti ya Eve," na hakuna mtu anayeweza kuthibitisha kuwa halikutoka kwa Alice. + +## Uundaji wa akaunti {#account-creation} + +Unapotaka kuunda akaunti, maktaba nyingi zitakutengenezea funguo ya kibinafsi ya nasibu. + +Funguo ya kibinafsi inaundwa na herufi 64 za hex na inaweza kusimbwa kwa nenosiri. + +Mfano: + +`fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f` + +Ufunguo wa umma hutengenezwa kutoka kwa ufunguo binafsi kwa kutumia [Elliptic Curve Digital Signature Algorithm](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm). Unapata anwani ya umma ya akaunti yako kwa kuchukua baiti 20 za mwisho za hashi ya Keccak-256 ya ufunguo wa umma na kuongeza `0x` mwanzoni. + +Hii inamaanisha kuwa akaunti inayomilikiwa nje (EOA) ina anwani ya herufi 42 (sehemu ya baiti 20 ambayo ni herufi 40 za heksadesimali pamoja na kiambishi awali cha `0x`). + +Mfano: + +`Mfano wa Anwani ya Ethereum 0x5e97870f263700f46aa00d967821199b9bc5a120` + +Mfano ufuatao unaonyesha jinsi ya kutumia zana ya kusaini iitwayo [Clef](https://geth.ethereum.org/docs/tools/clef/introduction) ili kuunda akaunti mpya. Clef ni zana ya usimamizi wa akaunti na utiaji saini inayokuja pamoja na mteja wa Ethereum, [Geth](https://geth.ethereum.org). Amri ya `clef newaccount` huunda jozi mpya ya funguo na kuzihifadhi kwenye keystore iliyosimbwa kwa njia fiche. + +``` +> clef newaccount --keystore + +Tafadhali weka nenosiri kwa ajili ya akaunti mpya itakayoundwa: +> + +------------ +INFO [10-28|16:19:09.156] Ufunguo wako mpya umetengenezwa address=0x5e97870f263700f46aa00d967821199b9bc5a120 +WARN [10-28|16:19:09.306] Tafadhali hifadhi nakala ya faili yako ya ufunguo path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120 +WARN [10-28|16:19:09.306] Tafadhali kumbuka nenosiri lako! +Akaunti iliyoundwa 0x5e97870f263700f46aa00d967821199b9bc5a120 +``` + +[Nyaraka za Geth](https://geth.ethereum.org/docs) + +Inawezekana kupata funguo mpya za umma kutoka kwa funguo yako ya kibinafsi, lakini huwezi kupata funguo ya kibinafsi kutoka kwa funguo za umma. Ni muhimu kuweka funguo zako za kibinafsi salama na, kama jina linavyopendekeza, **KIBINAFSI**. + +Unahitaji funguo ya kibinafsi kusaini jumbe na miamala inayozalisha saini. Wengine wanaweza kuchukua saini hiyo ili kupata funguo yako ya umma, kuthibitisha mwandishi wa ujumbe. Katika programu yako, unaweza kutumia maktaba ya JavaScript kutuma miamala kwa mtandao. + +## Akaunti za mkataba {#contract-accounts} + +Akaunti za mkataba pia zina anwani ya herufi 42 ya hexadesimali: + +Mfano: + +`0x06012c8cf97bead5deae237070f9587f8e7a266d` + +Anwani ya mkataba kwa kawaida hutolewa wakati mkataba unapowekwa kwenye Blockchain ya Ethereum. Anwani hutokana na anwani ya muundaji na idadi ya miamala iliyotumwa kutoka kwa anwani hiyo ("nonce"). + +## Funguo za mthibitishaji {#validators-keys} + +Kuna aina nyingine ya funguo katika Ethereum, iliyoanzishwa Ethereum ilipobadilika kutoka uthibitisho wa kazi hadi uthibitisho wa hisa kama mfumo wa makubaliano. Hizi ni funguo za BLS, na zinatumika kutambua vihakiki. Funguo hizi zinaweza kujumlishwa kwa ufanisi ili kupunguza bandwidth inayohitajika kwa mtandao kufikia makubaliano. Bila ujumuishaji huu wa funguo, kiwango cha chini cha hisa kwa kihakiki (validator) kingekuwa cha juu zaidi. + +[Zaidi kuhusu funguo za mthibitishaji](/developers/docs/consensus-mechanisms/pos/keys/). + +## Dokezo kuhusu mikoba {#a-note-on-wallets} + +Akaunti siyo wallet. Wallet ni kiolesura au programu inayokuwezesha kuingiliana na akaunti yako ya Ethereum, iwe ni akaunti inayomilikiwa nje au akaunti ya mkataba. + +## Onyesho la picha {#a-visual-demo} + +Tazama Austin akielezea jinsi hash functions na key pairs zinavyofanya kazi. + + + + + +## Masomo zaidi {#further-reading} + +- [Kuelewa Akaunti za Ethereum](https://info.etherscan.com/understanding-ethereum-accounts/) - etherscan + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Mikataba-erevu](/developers/docs/smart-contracts/) +- [Miamala](/developers/docs/transactions/) diff --git a/public/content/translations/sw/developers/docs/apis/backend/index.md b/public/content/translations/sw/developers/docs/apis/backend/index.md new file mode 100644 index 00000000000..104b4127503 --- /dev/null +++ b/public/content/translations/sw/developers/docs/apis/backend/index.md @@ -0,0 +1,211 @@ +--- +title: Maktaba za API za Backend +description: Utangulizi wa API za mteja wa Ethereum zinazokuruhusu kuingiliana na mnyororo wa bloku kutoka kwenye programu yako. +lang: sw +--- + +Ili programu ya kompyuta iweze kuingiliana na mnyororo wa bloku wa Ethereum (yaani, kusoma data ya mnyororo wa bloku na/au kutuma miamala kwenye mtandao), ni lazima iunganishwe na nodi ya Ethereum. + +Kwa kusudi hili, kila mteja wa Ethereum hutekeleza vipimo vya [JSON-RPC](/developers/docs/apis/json-rpc/), kwa hivyo kuna seti sare ya [njia](/developers/docs/apis/json-rpc/#json-rpc-methods) ambazo programu zinaweza kutegemea. + +Ikiwa unataka kutumia lugha maalum ya programu kuungana na nodi ya Ethereum, kuna maktaba nyingi za kurahisisha ndani ya mfumo ikolojia ambazo hurahisisha hili zaidi. Kwa maktaba hizi, wasanidi programu wanaweza kuandika njia angavu, za mstari mmoja ili kuanzisha maombi ya JSON-RPC (chini ya pazia) yanayoingiliana na Ethereum. + +## Mahitaji ya awali {#prerequisites} + +Inaweza kusaidia kuelewa [mkusanyiko wa Ethereum](/developers/docs/ethereum-stack/) na [wateja wa Ethereum](/developers/docs/nodes-and-clients/). + +## Kwa nini utumie maktaba? {#why-use-a-library} + +Maktaba hizi hurahisisha sehemu kubwa ya utata wa kuingiliana moja kwa moja na nodi ya Ethereum. Pia hutoa kazi za matumizi (k.m., kubadilisha ETH kwenda Gwei) hivyo kama msanidi programu unaweza kutumia muda mfupi kushughulikia ugumu wa wateja wa Ethereum na muda mwingi zaidi kulenga utendaji wa kipekee wa programu yako. + +## Maktaba zinazopatikana {#available-libraries} + +### Miundombinu na huduma za nodi {#infrastructure-and-node-services} + +**Alchemy -** **_Jukwaa la Maendeleo la Ethereum._** + +- [alchemy.com](https://www.alchemy.com/) +- [Nyaraka](https://www.alchemy.com/docs/) +- [GitHub](https://github.com/alchemyplatform) +- [Discord](https://discord.com/invite/alchemyplatform) + +**All That Node -** **_Nodi-kama-Huduma._** + +- [All That Node.com](https://www.allthatnode.com/) +- [Nyaraka](https://docs.allthatnode.com) +- [Discord](https://discord.gg/GmcdVEUbJM) + +**Blast by Bware Labs -** **_API zilizogatuliwa za Mtandao Mkuu wa Ethereum na Testnet._** + +- [blastapi.io](https://blastapi.io/) +- [Nyaraka](https://docs.blastapi.io) +- [Discord](https://discord.gg/SaRqmRUjjQ) + +**BlockPi -** **_Hutoa huduma za RPC zenye ufanisi na kasi zaidi_** + +- [blockpi.io](https://blockpi.io/) +- [Nyaraka](https://docs.blockpi.io/) +- [GitHub](https://github.com/BlockPILabs) +- [Discord](https://discord.com/invite/xTvGVrGVZv) + +**Lango la Cloudflare Ethereum.** + +- [cloudflare-eth.com](https://www.cloudflare.com/application-services/products/web3/) + +**Etherscan - Kichunguzi cha Bloku na API za Miamala** + +- [Nyaraka](https://docs.etherscan.io/) + +**Blockscout - Kichunguzi cha Bloku cha Chanzo Huria** + +- [Nyaraka](https://docs.blockscout.com/) + +**GetBlock-** **_Blockchain-kama-huduma kwa ajili ya maendeleo ya Web3_** + +- [GetBlock.io](https://getblock.io/) +- [Nyaraka](https://docs.getblock.io/) + +**Infura -** **_API ya Ethereum kama huduma._** + +- [infura.io](https://infura.io) +- [Nyaraka](https://docs.infura.io/api) +- [GitHub](https://github.com/INFURA) + +**Node RPC - _Mtoa huduma wa EVM JSON-RPC wa gharama nafuu_** + +- [noderpc.xyz](https://www.noderpc.xyz/) +- [Nyaraka](https://docs.noderpc.xyz/node-rpc) + +**NOWNodes - _Nodi Kamili na Vichunguzi vya Bloku._** + +- [NOWNodes.io](https://nownodes.io/) +- [Nyaraka](https://nownodes.gitbook.io/documentation) + +**QuickNode -** **_Miundombinu ya Blockchain kama Huduma._** + +- [quicknode.com](https://quicknode.com) +- [Nyaraka](https://www.quicknode.com/docs/welcome) +- [Discord](https://discord.gg/quicknode) + +**Rivet -** **_API za Ethereum na Ethereum Classic kama huduma zinazoendeshwa na programu ya chanzo huria._** + +- [rivet.cloud](https://rivet.cloud) +- [Nyaraka](https://rivet.cloud/docs/) +- [GitHub](https://github.com/openrelayxyz/ethercattle-deployment) + +**Zmok -** **_Nodi za Ethereum zinazozingatia kasi kama API ya JSON-RPC/WebSockets._** + +- [zmok.io](https://zmok.io/) +- [GitHub](https://github.com/zmok-io) +- [Nyaraka](https://docs.zmok.io/) +- [Discord](https://discord.gg/fAHeh3ka6s) + +### Zana za maendeleo {#development-tools} + +**ethers-kt -** **_Maktaba ya Async, ya utendaji wa juu ya Kotlin/Java/Android kwa minyororo ya bloku inayotumia EVM._** + +- [GitHub](https://github.com/Kr1ptal/ethers-kt) +- [Mifano](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) +- [Discord](https://discord.gg/rx35NzQGSb) + +**Nethereum -** **_Maktaba ya chanzo huria ya .NET ya kuunganisha kwa ajili ya blockchain._** + +- [GitHub](https://github.com/Nethereum/Nethereum) +- [Nyaraka](http://docs.nethereum.com/en/latest/) +- [Discord](https://discord.com/invite/jQPrR58FxX) + +**Zana za Python -** **_Aina mbalimbali za maktaba kwa ajili ya mwingiliano wa Ethereum kupitia Python._** + +- [py.ethereum.org](https://snakecharmers.ethereum.org/) +- [GitHub ya web3.py](https://github.com/ethereum/web3.py) +- [Gumzo la web3.py](https://gitter.im/ethereum/web3.py) + +**Tatum -** **_Jukwaa bora kabisa la maendeleo ya blockchain._** + +- [Tatum](https://tatum.io/) +- [GitHub](https://github.com/tatumio/) +- [Nyaraka](https://docs.tatum.io/) +- [Discord](https://discord.gg/EDmW3kjTC9) + +**web3j -** **_Maktaba ya kuunganisha ya Java/Android/Kotlin/Scala kwa ajili ya Ethereum._** + +- [GitHub](https://github.com/web3j/web3j) +- [Nyaraka](https://docs.web3j.io/) +- [Gitter](https://gitter.im/web3j/web3j) + +### Huduma za Blockchain {#blockchain-services} + +**BlockCypher -** **_API za Wavuti za Ethereum._** + +- [blockcypher.com](https://www.blockcypher.com/) +- [Nyaraka](https://www.blockcypher.com/dev/ethereum/) + +**Chainbase -** **_Miundombinu ya data ya web3 yote kwa moja kwa ajili ya Ethereum._** + +- [chainbase.com](https://chainbase.com/) +- [Nyaraka](https://docs.chainbase.com/) +- [Discord](https://discord.gg/Wx6qpqz4AF) + +**Chainstack -** **_Nodi za Ethereum zenye kunyumbulika na maalum kama huduma._** + +- [chainstack.com](https://chainstack.com) +- [Nyaraka](https://docs.chainstack.com/) +- [Rejeleo la API ya Ethereum](https://docs.chainstack.com/reference/ethereum-getting-started) + +**Nodi ya Wingu ya Coinbase -** **_API ya Miundombinu ya Blockchain._** + +- [Nodi ya Wingu ya Coinbase](https://www.coinbase.com/developer-platform) +- [Nyaraka](https://docs.cdp.coinbase.com/) + +**DataHub by Figment -** **_Huduma za API za Web3 pamoja na Mtandao Mkuu wa Ethereum na testnet._** + +- [DataHub](https://www.figment.io/) +- [Nyaraka](https://docs.figment.io/) + +**Moralis -** **_Mtoa Huduma wa API wa EVM wa Kiwango cha Biashara._** + +- [moralis.io](https://moralis.io) +- [Nyaraka](https://docs.moralis.io/) +- [GitHub](https://github.com/MoralisWeb3) +- [Discord](https://moralis.io/joindiscord/) +- [Jukwaa](https://forum.moralis.io/) + +**NFTPort -** **_Data za Ethereum na API za Mint._** + +- [nftport.xyz](https://www.nftport.xyz/) +- [Nyaraka](https://docs.nftport.xyz/) +- [GitHub](https://github.com/nftport/) +- [Discord](https://discord.com/invite/K8nNrEgqhE) + +**Tokenview -** **_Jukwaa la Jumla la API za Blockchain za Sarafu-Crypto Nyingi._** + +- [services.tokenview.io](https://services.tokenview.io/) +- [Nyaraka](https://services.tokenview.io/docs?type=api) +- [GitHub](https://github.com/Tokenview) + +**Watchdata -** **_Hutoa ufikiaji rahisi na wa kuaminika wa API kwa blockchain ya Ethereum._** + +- [Watchdata](https://watchdata.io/) +- [Nyaraka](https://docs.watchdata.io/) +- [Discord](https://discord.com/invite/TZRJbZ6bdn) + +**Covalent -** **_API za blockchain zilizoboreshwa kwa Minyororo 200+._** + +- [covalenthq.com](https://www.covalenthq.com/) +- [Nyaraka](https://www.covalenthq.com/docs/api/) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Nodi na wateja](/developers/docs/nodes-and-clients/) +- [Mifumo ya uundaji](/developers/docs/frameworks/) + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Sanidi Web3js kutumia blockchain ya Ethereum katika JavaScript](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– Maagizo ya kusanidi web3.js katika mradi wako._ +- [Kuita mkataba-erevu kutoka JavaScript](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– Kwa kutumia tokeni ya DAI, ona jinsi ya kuita kazi za mikataba kwa kutumia JavaScript._ diff --git a/public/content/translations/sw/developers/docs/apis/javascript/index.md b/public/content/translations/sw/developers/docs/apis/javascript/index.md new file mode 100644 index 00000000000..42710699de9 --- /dev/null +++ b/public/content/translations/sw/developers/docs/apis/javascript/index.md @@ -0,0 +1,289 @@ +--- +title: Maktaba za JavaScript API +description: Utangulizi wa maktaba za wateja za JavaScript zinazokuwezesha kuingiliana na mnyororo wa bloku kutoka kwa programu yako. +lang: sw +--- + +Ili programu ya wavuti iweze kuingiliana na mnyororo wa bloku wa Ethereum (yaani, kusoma data ya mnyororo wa bloku na/au kutuma miamala kwenye mtandao), lazima iunganishwe na nodi ya Ethereum. + +Kwa madhumuni haya, kila mteja wa Ethereum hutekeleza vipimo vya [JSON-RPC](/developers/docs/apis/json-rpc/), kwa hivyo kuna seti sare ya [mbinu](/developers/docs/apis/json-rpc/#json-rpc-methods) ambazo programu zinaweza kutegemea. + +Ikiwa unataka kutumia JavaScript kuungana na nodi ya Ethereum, inawezekana kutumia JavaScript tupu lakini maktaba kadhaa za kurahisisha zipo ndani ya mfumo ikolojia zinazofanya hili kuwa rahisi zaidi. Kwa maktaba hizi, wasanidi programu wanaweza kuandika njia angavu, za mstari mmoja ili kuanzisha maombi ya JSON-RPC (chini ya pazia) yanayoingiliana na Ethereum. + +Tafadhali kumbuka kuwa tangu [Muungano](/roadmap/merge/), sehemu mbili zilizounganishwa za programu ya Ethereum - mteja wa utekelezaji na mteja wa makubaliano - zinahitajika ili kuendesha nodi. Tafadhali hakikisha nodi yako inajumuisha mteja wa utekelezaji na mteja wa makubaliano. Ikiwa nodi yako haiko kwenye mashine yako ya karibu (k.m., nodi yako inaendeshwa kwenye kielelezo cha AWS) sasisha anwani za IP katika mafunzo ipasavyo. Kwa maelezo zaidi tafadhali angalia ukurasa wetu kuhusu [kuendesha nodi](/developers/docs/nodes-and-clients/run-a-node/). + +## Mahitaji ya awali {#prerequisites} + +Pamoja na kuelewa JavaScript, inaweza kusaidia kuelewa [rundo la Ethereum](/developers/docs/ethereum-stack/) na [wateja wa Ethereum](/developers/docs/nodes-and-clients/). + +## Kwa nini utumie maktaba? {#why-use-a-library} + +Maktaba hizi hurahisisha sehemu kubwa ya utata wa kuingiliana moja kwa moja na nodi ya Ethereum. Pia hutoa kazi za matumizi (k.m., kubadilisha ETH kwenda Gwei) hivyo kama msanidi programu unaweza kutumia muda mfupi kushughulikia ugumu wa wateja wa Ethereum na muda mwingi zaidi kulenga utendaji wa kipekee wa programu yako. + +## Vipengele vya maktaba {#library-features} + +### Ungana na nodi za Ethereum {#connect-to-ethereum-nodes} + +Kwa kutumia watoa huduma, maktaba hizi zinakuruhusu kuungana na Ethereum na kusoma data yake, iwe ni kupitia JSON-RPC, INFURA, Etherscan, Alchemy au MetaMask. + +> **Onyo:** Web3.js iliwekwa kwenye kumbukumbu tarehe 4 Machi 2025. [Soma tangazo](https://blog.chainsafe.io/web3-js-sunset/). Fikiria kutumia maktaba mbadala kama [ethers.js](https://ethers.org) au [viem](https://viem.sh) kwa miradi mipya. + +**Mfano wa Ethers** + +```js +// BrowserProvider hufunga mtoa huduma wa kawaida wa Web3, ambayo ni +// kile MetaMask hudunga kama window.ethereum katika kila ukurasa +const provider = new ethers.BrowserProvider(window.ethereum) + +// Programu-jalizi ya MetaMask pia inaruhusu kusaini miamala ili +// kutuma ether na kulipia ili kubadilisha hali ndani ya mnyororo wa bloku. +// Kwa hili, tunahitaji msaini wa akaunti... +const signer = provider.getSigner() +``` + +**Mfano wa Web3js** + +```js +var web3 = new Web3("http://localhost:8545") +// au +var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) + +// badilisha mtoa huduma +web3.setProvider("ws://localhost:8546") +// au +web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546")) + +// Kutumia mtoa huduma wa IPC katika node.js +var net = require("net") +var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // njia ya mac os +// au +var web3 = new Web3( + new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net) +) // njia ya mac os +// kwenye windows njia ni: "\\\\.\\pipe\\geth.ipc" +// kwenye linux njia ni: "/users/myuser/.ethereum/geth.ipc" +``` + +Baada ya kusanidi utaweza kuuliza mnyororo wa bloku kwa: + +- nambari za bloku +- makadirio ya gesi +- matukio ya mkataba-erevu +- kitambulisho cha mtandao +- na zaidi... + +### Utendaji wa mkoba {#wallet-functionality} + +Maktaba hizi hukupa utendaji wa kuunda mikoba, kusimamia funguo na kusaini miamala. + +Huu hapa ni mfano kutoka kwa Ethers + +```js +// Unda kielelezo cha mkoba kutoka kwa mnemonic... +mnemonic = + "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol" +walletMnemonic = Wallet.fromPhrase(mnemonic) + +// ...au kutoka kwa ufunguo wa faragha +walletPrivateKey = new Wallet(walletMnemonic.privateKey) + +walletMnemonic.address === walletPrivateKey.address +// kweli + +// Anwani kama Ahadi kulingana na API ya Signer +walletMnemonic.getAddress() +// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' } + +// Anwani ya Mkoba pia inapatikana kwa usawa +walletMnemonic.address +// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' + +// Vipengele vya ndani vya kriptografia +walletMnemonic.privateKey +// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db' +walletMnemonic.publicKey +// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64' + +// Mnemonic ya mkoba +walletMnemonic.mnemonic +// { +// locale: 'en', +// path: 'm/44\'/60\'/0\'/0/0', +// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol' +// } + +// Kumbuka: Mkoba ulioundwa na ufunguo wa faragha hauna +// mnemonic (utolewaji unazuia) +walletPrivateKey.mnemonic +// batili + +// Kusaini ujumbe +walletMnemonic.signMessage("Hello World") +// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' } + +tx = { + to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72", + value: utils.parseEther("1.0"), +} + +// Kusaini muamala +walletMnemonic.signTransaction(tx) +// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' } + +// Mbinu ya kuunganisha inarudisha kielelezo kipya cha +// Mkoba uliounganishwa na mtoa huduma +wallet = walletMnemonic.connect(provider) + +// Kuuliza mtandao +wallet.getBalance() +// { Promise: { BigNumber: "42" } } +wallet.getTransactionCount() +// { Promise: 0 } + +// Kutuma ether +wallet.sendTransaction(tx) +``` + +[Soma hati kamili](https://docs.ethers.io/v5/api/signer/#Wallet) + +Baada ya kusanidi utaweza: + +- kuunda akaunti +- kutuma miamala +- kusaini miamala +- na zaidi... + +### Ingiliana na utendaji wa mkataba-erevu {#interact-with-smart-contract-functions} + +Maktaba za wateja za JavaScript huruhusu programu yako kuita utendaji wa mkataba-erevu kwa kusoma Kiolesura cha Binary cha Programu (ABI) ya mkataba uliokusanywa. + +Kimsingi ABI inaelezea utendaji wa mkataba katika muundo wa JSON na hukuruhusu kuitumia kama kitu cha kawaida cha JavaScript. + +Kwa hivyo mkataba ufuatao wa Solidity: + +```solidity +contract Test { + uint a; + address d = 0x12345678901234567890123456789012; + + constructor(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; + } +} +``` + +Itasababisha JSON ifuatayo: + +```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 +}] +``` + +Hii inamaanisha unaweza: + +- Tuma muamala kwa mkataba-erevu na utekeleze mbinu yake +- Piga simu ili kukadiria gesi ambayo utekelezaji wa mbinu utachukua unapotekelezwa katika EVM +- Sambaza mkataba +- Na zaidi... + +### Utendaji wa matumizi {#utility-functions} + +Utendaji wa matumizi hukupa njia za mkato zinazofaa ambazo hufanya ujenzi na Ethereum kuwa rahisi kidogo. + +Thamani za ETH ziko katika Wei kwa chaguo-msingi. ETH 1 = WEI 1,000,000,000,000,000,000 – hii inamaanisha unashughulika na nambari nyingi! `web3.utils.toWei` hubadilisha ether kuwa Wei kwa ajili yako. + +Na katika ethers inaonekana kama hivi: + +```js +// Pata salio la akaunti (kwa anwani au jina la ENS) +balance = await provider.getBalance("ethers.eth") +// { BigNumber: "2337132817842795605" } + +// Mara nyingi utahitaji kupangilia matokeo kwa ajili ya mtumiaji +// ambaye anapendelea kuona thamani katika ether (badala ya wei) +ethers.utils.formatEther(balance) +// '2.337132817842795605' +``` + +- [Utendaji wa matumizi wa Web3js](https://docs.web3js.org/api/web3-utils) +- [Utendaji wa matumizi wa Ethers](https://docs.ethers.org/v6/api/utils/) + +## Maktaba zinazopatikana {#available-libraries} + +**Web3.js -** **_API ya JavaScript ya Ethereum._** + +- [Nyaraka](https://docs.web3js.org) +- [GitHub](https://github.com/ethereum/web3.js) + +**Ethers.js -** **_Utekelezaji kamili wa mkoba wa Ethereum na huduma katika JavaScript na TypeScript._** + +- [Nyumbani kwa Ethers.js](https://ethers.org/) +- [Nyaraka](https://docs.ethers.io) +- [GitHub](https://github.com/ethers-io/ethers.js) + +**The Graph -** **_Itifaki ya kuorodhesha data ya Ethereum na IPFS na kuiuliza kwa kutumia GraphQL._** + +- [The Graph](https://thegraph.com) +- [Graph Explorer](https://thegraph.com/explorer) +- [Nyaraka](https://thegraph.com/docs) +- [GitHub](https://github.com/graphprotocol) +- [Discord](https://thegraph.com/discord) + +**Alchemy SDK -** **_Kifuniko karibu na Ethers.js na api zilizoboreshwa._** + +- [Nyaraka](https://www.alchemy.com/docs) +- [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js) + +**viem -** **_Kiolesura cha TypeScript cha Ethereum._** + +- [Nyaraka](https://viem.sh) +- [GitHub](https://github.com/wagmi-dev/viem) + +**Drift -** **_Maktaba-meta ya TypeScript iliyo na kashe iliyojengewa ndani, ndoano, na dhihaka za majaribio._** + +- [Nyaraka](https://ryangoree.github.io/drift/) +- [GitHub](https://github.com/ryangoree/drift/) + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Nodi na wateja](/developers/docs/nodes-and-clients/) +- [Mifumo ya uundaji](/developers/docs/frameworks/) + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Sanidi Web3js kutumia blockchain ya Ethereum katika JavaScript](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– Maagizo ya kusanidi web3.js katika mradi wako._ +- [Kuita mkataba-erevu kutoka JavaScript](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– Kwa kutumia tokeni ya DAI, ona jinsi ya kuita kazi za mikataba kwa kutumia JavaScript._ +- [Kutuma miamala kwa kutumia web3 na Alchemy](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) _– Mwongozo wa hatua kwa hatua kwa ajili ya kutuma miamala kutoka sehemu ya nyuma._ diff --git a/public/content/translations/sw/developers/docs/apis/json-rpc/index.md b/public/content/translations/sw/developers/docs/apis/json-rpc/index.md new file mode 100644 index 00000000000..b54c84bf9a1 --- /dev/null +++ b/public/content/translations/sw/developers/docs/apis/json-rpc/index.md @@ -0,0 +1,1898 @@ +--- +title: API ya JSON-RPC +description: Itifaki isiyo na hali, nyepesi ya wito wa utaratibu wa mbali (RPC) kwa wateja wa Ethereum. +lang: sw +--- + +Ili programu ya programu kuingiliana na blockchain ya Ethereum - ama kwa kusoma data ya blockchain au kutuma shughuli kwenye mtandao lazima iunganishe kwenye node ya Ethereum. + +Kwa kusudi hili, kila [mteja wa Ethereum](/developers/docs/nodes-and-clients/#execution-clients) hutekeleza [vipimo vya JSON-RPC](https://github.com/ethereum/execution-apis), kwa hivyo kuna seti sare ya mbinu ambazo programu zinaweza kutegemea bila kujali nodi maalum au utekelezaji wa mteja. + +[JSON-RPC](https://www.jsonrpc.org/specification) ni itifaki isiyo na hali, nyepesi ya wito wa utaratibu wa mbali (RPC). Inafafanua miundo kadhaa ya data na sheria zinazohusu usindikaji wao. Ni usafiri usioaminika kwa kuwa dhana zinaweza kutumika ndani ya mchakato sawa, juu ya soketi, juu ya HTTP, au katika mazingira mengi ya kupitisha ujumbe. Inatumia JSON (RFC 4627) kama umbizo la data. + +## Utekelezaji wa mteja {#client-implementations} + +Wateja wa Ethereum kila mmoja anaweza kutumia lugha tofauti za kupanga wakati wa kutekeleza vipimo vya JSON-RPC. Angalia [nyaraka za mteja](/developers/docs/nodes-and-clients/#execution-clients) binafsi kwa maelezo zaidi yanayohusiana na lugha maalum za programu. Tunapendekeza uangalie nyaraka za kila mteja kwa taarifa za hivi karibuni za usaidizi wa API. + +## Maktaba za Urahisi {#convenience-libraries} + +Ingawa unaweza kuchagua kuingiliana moja kwa moja na wateja wa Ethereum kupitia API ya JSON-RPC, mara nyingi kuna chaguo rahisi kwa wasanidi wa dapp. Maktaba nyingi za [JavaScript](/developers/docs/apis/javascript/#available-libraries) na [API za backend](/developers/docs/apis/backend/#available-libraries) zipo ili kutoa vifuniko juu ya API ya JSON-RPC. Kwa kutumia maktaba hizi, watengenezaji wanaweza kuandika mbinu angavu, za mstari mmoja katika lugha ya programu wanayochagua ili kuanzisha maombi ya JSON-RPC (chini ya kifuniko) ambayo yanaingiliana na Ethereum. + +## API za mteja wa makubaliano {#consensus-clients} + +Ukurasa huu unahusika hasa na API ya JSON-RPC inayotumiwa na wateja wa utekelezaji wa Ethereum. Hata hivyo, wateja wa makubaliano pia wana API ya RPC ambayo inaruhusu watumiaji kuuliza maelezo kuhusu nodi, kuomba vizuizi vya Beacon, hali ya Beacon, na maelezo mengine yanayohusiana na makubaliano moja kwa moja kutoka kwa nodi. API hii imeandikwa kwenye [ukurasa wa wavuti wa Beacon API](https://ethereum.github.io/beacon-APIs/#/). + +API ya ndani pia inatumika kwa mawasiliano kati ya mteja ndani ya nodi - yaani, inawezesha mteja wa makubaliano na mteja wa utekelezaji kubadilishana data. Hii inaitwa 'Engine API' na vipimo vinapatikana kwenye [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md). + +## Vipimo vya mteja wa utekelezaji {#spec} + +[Soma vipimo kamili vya API ya JSON-RPC kwenye GitHub](https://github.com/ethereum/execution-apis). API hii imeandikwa kwenye [ukurasa wa wavuti wa Execution API](https://ethereum.github.io/execution-apis/) na inajumuisha Mkaguzi ili kujaribu mbinu zote zinazopatikana. + +## Mikataba {#conventions} + +### Usimbaji wa thamani ya hex {#hex-encoding} + +Aina mbili kuu za data hupitishwa kupitia JSON: safu za baiti zisizo na umbizo na idadi. Zote mbili hupitishwa kwa usimbaji wa hex lakini na mahitaji tofauti ya uumbizaji. + +#### Idadi {#quantities-encoding} + +Wakati wa kusimba idadi (nambari kamili, nambari): simba kama hex, kiambishi awali chenye "0x", kiwakilishi chanya zaidi (isipokuwa kidogo: sufuri inapaswa kuwakilishwa kama "0x0"). + +Hapa kuna baadhi ya mifano: + +- 0x41 (65 katika desimali) +- 0x400 (1024 katika desimali) +- SI SAHIHI: 0x (inapaswa kuwa na angalau tarakimu moja - sifuri ni "0x0") +- SI SAHIHI: 0x0400 (sifuri zinazoongoza haziruhusiwi) +- SI SAHIHI: ff (lazima iwe na kiambishi awali 0x) + +### Data isiyo na umbizo {#unformatted-data-encoding} + +Wakati wa kusimba data ambayo haijaumbizwa (safu za baiti, anwani za akaunti, heshi, safu za msimbo wa baiti): simba kama hex, kiambishi awali na "0x", tarakimu mbili za heksi kwa kila baiti. + +Hapa kuna baadhi ya mifano: + +- 0x41 (ukubwa 1, "A") +- 0x004200 (ukubwa 3, "0B0") +- 0x (ukubwa 0, "") +- SI SAHIHI: 0xf0f0f (lazima iwe nambari sawa ya tarakimu) +- SI SAHIHI: 004200 (lazima iwe na kiambishi awali 0x) + +### Kigezo cha kizuizi {#block-parameter} + +Mbinu zifuatazo zina kigezo cha kizuizi: + +- [eth_getBalance](#eth_getbalance) +- [eth_getCode](#eth_getcode) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_call](#eth_call) + +Wakati maombi yanafanywa kwamba swala hali ya Ethereum, parameter ya kuzuia iliyotolewa huamua urefu wa kizuizi. + +Chaguo zifuatazo zinawezekana kwa kigezo cha kizuizi: + +- `HEX String` - nambari kamili ya kizuizi +- `String "earliest"` kwa kizuizi cha mwanzo kabisa/cha mwanzo +- `String "latest"` - kwa kizuizi cha hivi karibuni kilichopendekezwa +- `String "safe"` - kwa kizuizi cha hivi karibuni salama cha kichwa +- `String "finalized"` - kwa kizuizi cha hivi karibuni kilichokamilishwa +- `String "pending"` - kwa hali/miamala inayosubiri + +## Mifano + +Katika ukurasa huu tunatoa mifano ya jinsi ya kutumia ncha za mwisho za API za JSON_RPC kwa kutumia zana ya mstari wa amri, [curl](https://curl.se). Mifano hii ya ncha za mwisho za kibinafsi inapatikana hapa chini katika sehemu ya [Mifano ya Curl](#curl-examples). Zaidi chini ya ukurasa, tunatoa pia [mfano wa mwanzo hadi mwisho](#usage-example) wa kuandaa na kupeleka mkataba-erevu kwa kutumia nodi ya Geth, API ya JSON_RPC na curl. + +## Mifano ya Curl {#curl-examples} + +Mifano ya kutumia API ya JSON_RPC kwa kufanya maombi ya [curl](https://curl.se) kwa nodi ya Ethereum imetolewa hapa chini. Kila mfano +unajumuisha maelezo ya ncha maalum ya mwisho, vigezo vyake, aina ya urejeshaji, na mfano uliofanyiwa kazi wa jinsi inapaswa kutumika. + +Maombi ya curl yanaweza kurudisha ujumbe wa hitilafu unaohusiana na aina ya maudhui. Hii ni kwa sababu chaguo la `--data` huweka aina ya maudhui kuwa `application/x-www-form-urlencoded`. Ikiwa nodi yako inalalamika kuhusu hili, weka kichwa kwa mikono kwa kuweka `-H "Content-Type: application/json"` mwanzoni mwa wito. Mifano pia haijumuishi mchanganyiko wa URL/IP & mlango ambao lazima uwe hoja ya mwisho iliyotolewa kwa curl (k.m., `127.0.0.1:8545`). Ombi kamili la curl linalojumuisha data hizi za ziada huchukua fomu ifuatayo: + +```shell +curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 +``` + +## Uvumi, Hali, Historia {#gossip-state-history} + +Mbinu chache za msingi za JSON-RPC zinahitaji data kutoka kwa mtandao wa Ethereum, na ziko katika kategoria tatu kuu: _Uvumi, Hali, na Historia_. Tumia viungo katika sehemu hizi kurukia kila mbinu, au tumia jedwali la yaliyomo kuchunguza orodha nzima ya mbinu. + +### Mbinu za Uvumi {#gossip-methods} + +> Mbinu hizi hufuatilia kichwa cha mnyororo. Hivi ndivyo miamala inavyozunguka mtandao, kutafuta njia kwenye vizuizi, na jinsi wateja wanavyojua kuhusu vizuizi vipya. + +- [eth_blockNumber](#eth_blocknumber) +- [eth_sendRawTransaction](#eth_sendrawtransaction) + +### Mbinu za Hali {#state_methods} + +> Mbinu zinazoripoti hali ya sasa ya data zote zilizohifadhiwa. "Jimbo" ni kama sehemu kubwa ya RAM iliyoshirikiwa, na inajumuisha salio la akaunti, data ya mkataba na makadirio ya gharama ya muamala. + +- [eth_getBalance](#eth_getbalance) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getCode](#eth_getcode) +- [eth_call](#eth_call) +- [eth_estimateGas](#eth_estimategas) + +### Mbinu za Historia {#history_methods} + +> Hupata rekodi za kihistoria za kila kizuizi kurudi hadi mwanzo. Hii ni kama faili moja kubwa ya kiambatisho pekee, na inajumuisha vichwa vyote vya block, vikundi vya kuzuia, vizuizi vya ukaribu, na risiti za muamala. + +- [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) + +## Uwanja wa Michezo wa API ya JSON-RPC + +Unaweza kutumia [zana ya uwanja wa michezo](https://ethereum-json-rpc.com) kugundua na kujaribu mbinu za API. Pia inakuonyesha ni mbinu na mitandao gani inasaidiwa na watoa huduma mbalimbali wa nodi. + +## Mbinu za API za JSON-RPC {#json-rpc-methods} + +### web3_clientVersion {#web3_clientversion} + +Inarudisha toleo la sasa la mteja. + +**Vigezo** + +Hakuna + +**Inarudisha** + +`String` - Toleo la sasa la mteja + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' +// Matokeo +{ + "id":67, + "jsonrpc":"2.0", + "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1" +} +``` + +### web3_sha3 {#web3_sha3} + +Inarudisha Keccak-256 (_sio_ SHA3-256 iliyosanifishwa) ya data iliyotolewa. + +**Vigezo** + +1. `DATA` - Data ya kubadilisha kuwa hashi ya SHA3 + +```js +params: ["0x68656c6c6f20776f726c64"] +``` + +**Inarudisha** + +`DATA` - Matokeo ya SHA3 ya mfuatano uliotolewa. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' +// Matokeo +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" +} +``` + +### net_version {#net_version} + +Inarudisha kitambulisho cha sasa cha mtandao. + +**Vigezo** + +Hakuna + +**Inarudisha** + +`String` - Kitambulisho cha sasa cha mtandao. + +Orodha kamili ya vitambulisho vya sasa vya mtandao inapatikana kwenye [chainlist.org](https://chainlist.org). Baadhi ya za kawaida ni: + +- `1`: Mtandao Mkuu wa Ethereum +- `11155111`: Testnet ya Sepolia +- `560048` : Testnet ya Hoodi + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' +// Matokeo +{ + "id":67, + "jsonrpc": "2.0", + "result": "3" +} +``` + +### net_listening {#net_listening} + +Inarudisha `true` ikiwa mteja anasikiliza kikamilifu miunganisho ya mtandao. + +**Vigezo** + +Hakuna + +**Inarudisha** + +`Boolean` - `true` inaposikiliza, vinginevyo `false`. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' +// Matokeo +{ + "id":67, + "jsonrpc":"2.0", + "result":true +} +``` + +### net_peerCount {#net_peercount} + +Inarudisha idadi ya rika zilizounganishwa kwa sasa na mteja. + +**Vigezo** + +Hakuna + +**Inarudisha** + +`QUANTITY` - nambari kamili ya idadi ya rika zilizounganishwa. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' +// Matokeo +{ + "id":74, + "jsonrpc": "2.0", + "result": "0x2" // 2 +} +``` + +### eth_protocolVersion {#eth_protocolversion} + +Inarudisha toleo la sasa la itifaki ya Ethereum. Kumbuka kuwa mbinu hii [haipatikani katika Geth](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924). + +**Vigezo** + +Hakuna + +**Inarudisha** + +`String` - Toleo la sasa la itifaki ya Ethereum + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' +// Matokeo +{ + "id":67, + "jsonrpc": "2.0", + "result": "54" +} +``` + +### eth_syncing {#eth_syncing} + +Inarudisha kitu chenye data kuhusu hali ya usawazishaji au `false`. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +Hakuna + +**Inarudisha** + +Data kamili ya urejeshaji hutofautiana kati ya utekelezaji wa mteja. Wateja wote hurudisha `False` wakati nodi haisawazishi, na wateja wote hurudisha sehemu zifuatazo. + +`Object|Boolean`, Kitu chenye data ya hali ya usawazishaji au `FALSE`, wakati haisawazishi: + +- `startingBlock`: `QUANTITY` - Kizuizi ambapo uingizaji ulianza (itawekwa upya tu, baada ya usawazishaji kufikia kichwa chake) +- `currentBlock`: `QUANTITY` - Kizuizi cha sasa, sawa na eth_blockNumber +- `highestBlock`: `QUANTITY` - Kizuizi cha juu zaidi kinachokadiriwa + +Hata hivyo, wateja binafsi wanaweza pia kutoa data ya ziada. Kwa mfano, Geth inarudisha yafuatayo: + +```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" + } +} +``` + +Wakati Besu inarudisha: + +```json +{ + "jsonrpc": "2.0", + "id": 51, + "result": { + "startingBlock": "0x0", + "currentBlock": "0x1518", + "highestBlock": "0x9567a3", + "pulledStates": "0x203ca", + "knownStates": "0x200636" + } +} +``` + +Rejelea nyaraka za mteja wako maalum kwa maelezo zaidi. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": { + startingBlock: '0x384', + currentBlock: '0x386', + highestBlock: '0x454' + } +} +// Au wakati haisawazishi +{ + "id":1, + "jsonrpc": "2.0", + "result": false +} +``` + +### eth_coinbase {#eth_coinbase} + +Inarudisha anwani ya coinbase ya mteja. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +> **Kumbuka:** Mbinu hii imeacha kutumika kuanzia **v1.14.0** na haitumiki tena. Kujaribu kutumia mbinu hii kutasababisha hitilafu ya "Mbinu haitumiki". + +**Vigezo** + +Hakuna + +**Inarudisha** + +`DATA`, baiti 20 - anwani ya sasa ya coinbase. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' +// Matokeo +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1" +} +``` + +### eth_chainId {#eth_chainId} + +Inarudisha kitambulisho cha mnyororo kinachotumiwa kutia saini miamala iliyolindwa dhidi ya uchezaji tena. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +Hakuna + +**Inarudisha** + +`chainId`, thamani ya heksadesimali kama mfuatano unaowakilisha nambari kamili ya kitambulisho cha sasa cha mnyororo. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' +// Matokeo +{ + "id":67, + "jsonrpc": "2.0", + "result": "0x1" +} +``` + +### eth_mining {#eth_mining} + +Inarudisha `true` ikiwa mteja anachimba kikamilifu vizuizi vipya. Hii inaweza tu kurudisha `true` kwa mitandao ya uthibitishaji-wa-kazi na huenda isipatikane kwa baadhi ya wateja tangu [Muungano](/roadmap/merge/). + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +Hakuna + +**Inarudisha** + +`Boolean` - inarudisha `true` ikiwa mteja anachimba, vinginevyo `false`. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' +// +{ + "id":71, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_hashrate {#eth_hashrate} + +Inarudisha idadi ya hashi kwa sekunde ambayo nodi inachimba nayo. Hii inaweza tu kurudisha `true` kwa mitandao ya uthibitishaji-wa-kazi na huenda isipatikane kwa baadhi ya wateja tangu [Muungano](/roadmap/merge/). + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +Hakuna + +**Inarudisha** + +`QUANTITY` - idadi ya hashi kwa sekunde. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' +// Matokeo +{ + "id":71, + "jsonrpc": "2.0", + "result": "0x38a" +} +``` + +### eth_gasPrice {#eth_gasprice} + +Inarudisha makadirio ya bei ya sasa kwa kila gesi katika wei. Kwa mfano, mteja wa Besu huchunguza vitalu 100 vya mwisho na kurejesha bei ya wastani ya kitengo cha gesi kwa chaguo-msingi. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +Hakuna + +**Inarudisha** + +`QUANTITY` - nambari kamili ya bei ya sasa ya gesi katika wei. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +// Matokeo +{ + "id":73, + "jsonrpc": "2.0", + "result": "0x1dfd14000" // 8049999872 Wei +} +``` + +### eth_accounts {#eth_accounts} + +Inarudisha orodha ya anwani zinazomilikiwa na mteja. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +Hakuna + +**Inarudisha** + +`Array of DATA`, Baiti 20 - anwani zinazomilikiwa na mteja. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] +} +``` + +### eth_blockNumber {#eth_blocknumber} + +Hurudisha nambari ya bloku ya hivi karibuni zaidi. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +Hakuna + +**Inarudisha** + +`QUANTITY` - nambari kamili ya nambari ya sasa ya kizuizi ambayo mteja yuko. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' +// Matokeo +{ + "id":83, + "jsonrpc": "2.0", + "result": "0x4b7" // 1207 +} +``` + +### eth_getBalance {#eth_getbalance} + +Hurudisha salio la akaunti kwenye anwani fulani. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 20 - anwani ya kuangalia salio. +2. `QUANTITY|TAG` - nambari kamili ya kizuizi, au mfuatano `"latest"`, `"earliest"`, `"pending"`, `"safe"`, au `"finalized"`, angalia [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter) + +```js +params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] +``` + +**Inarudisha** + +`QUANTITY` - nambari kamili ya salio la sasa katika wei. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0234c8a3397aab58" // 158972490234375000 +} +``` + +### eth_getStorageAt {#eth_getstorageat} + +Inarudisha thamani kutoka kwa nafasi ya hifadhi katika anwani fulani. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 20 - anwani ya hifadhi. +2. `QUANTITY` - nambari kamili ya nafasi katika hifadhi. +3. `QUANTITY|TAG` - nambari kamili ya kizuizi, au mfuatano `"latest"`, `"earliest"`, `"pending"`, `"safe"`, `"finalized"`, angalia [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter) + +**Inarudisha** + +`DATA` - thamani katika nafasi hii ya hifadhi. + +**Mfano** +Kukokotoa nafasi sahihi kunategemea hifadhi ya kupata. Fikiria mkataba ufuatao uliotumwa katika `0x295a70b2de5e3953354a6a8344e616ed314d7251` kwa anwani `0x391694e7e0b0cce554cb130d723a9d27458f9298`. + +``` +contract Storage { + uint pos0; + mapping(address => uint) pos1; + constructor() { + pos0 = 1234; + pos1[msg.sender] = 5678; + } +} +``` + +Kupata thamani ya pos0 ni rahisi. + +```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"} +``` + +Kupata kipengele cha ramani ni ngumu zaidi. Nafasi ya kipengele katika ramani inakokotolewa na: + +```js +keccak(LeftPad32(key, 0), LeftPad32(map position, 0)) +``` + +Hii inamaanisha kupata hifadhi kwenye pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] tunahitaji kukokotoa nafasi na: + +```js +keccak( + decodeHex( + "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + + "0000000000000000000000000000000000000000000000000000000000000001" + ) +) +``` + +Koni ya geth ambayo inakuja na maktaba ya web3 inaweza kutumika kufanya hesabu: + +```js +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +Sasa ili kupata hifadhi: + +```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} + +Inarudisha idadi ya miamala _iliyotumwa_ kutoka kwa anwani. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 20 - anwani. +2. `QUANTITY|TAG` - nambari kamili ya kizuizi, au mfuatano `"latest"`, `"earliest"`, `"pending"`, `"safe"` au `"finalized"`, angalia [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter) + +```js +params: [ + "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + "latest", // hali kwenye kizuizi cha hivi karibuni +] +``` + +**Inarudisha** + +`QUANTITY` - nambari kamili ya idadi ya miamala iliyotumwa kutoka kwa anwani hii. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} + +Inarudisha idadi ya miamala katika kizuizi kutoka kwa kizuizi kinacholingana na hashi ya kizuizi iliyotolewa. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 32 - hashi ya kizuizi + +```js +params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] +``` + +**Inarudisha** + +`QUANTITY` - nambari kamili ya idadi ya miamala katika kizuizi hiki. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} + +Inarudisha idadi ya miamala katika kizuizi kinacholingana na nambari ya kizuizi iliyotolewa. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `QUANTITY|TAG` - nambari kamili ya nambari ya kizuizi, au mfuatano `"earliest"`, `"latest"`, `"pending"`, `"safe"` au `"finalized"`, kama ilivyo katika [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter). + +```js +params: [ + "0x13738ca", // 20396234 +] +``` + +**Inarudisha** + +`QUANTITY` - nambari kamili ya idadi ya miamala katika kizuizi hiki. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} + +Inarudisha idadi ya wajomba katika kizuizi kutoka kwa kizuizi kinacholingana na hashi ya kizuizi iliyotolewa. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 32 - hashi ya kizuizi + +```js +params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] +``` + +**Inarudisha** + +`QUANTITY` - nambari kamili ya idadi ya wajomba katika kizuizi hiki. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} + +Inarudisha idadi ya wajomba katika kizuizi kutoka kwa kizuizi kinacholingana na nambari ya kizuizi iliyotolewa. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `QUANTITY|TAG` - nambari kamili ya nambari ya kizuizi, au mfuatano `"latest"`, `"earliest"`, `"pending"`, `"safe"` au `"finalized"`, angalia [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter) + +```js +params: [ + "0xe8", // 232 +] +``` + +**Inarudisha** + +`QUANTITY` - nambari kamili ya idadi ya wajomba katika kizuizi hiki. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0" // 0 +} +``` + +### eth_getCode {#eth_getcode} + +Inarudisha msimbo katika anwani fulani. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 20 - anwani +2. `QUANTITY|TAG` - nambari kamili ya kizuizi, au mfuatano `"latest"`, `"earliest"`, `"pending"`, `"safe"` au `"finalized"`, angalia [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter) + +```js +params: [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x5daf3b", // 6139707 +] +``` + +**Inarudisha** + +`DATA` - msimbo kutoka kwa anwani iliyotolewa. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029" +} +``` + +### eth_sign {#eth_sign} + +Mbinu ya kutia saini inakokotoa saini maalum ya Ethereum na: `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))`. + +Kwa kuongeza kiambishi awali kwenye ujumbe hufanya saini iliyokokotolewa itambulike kama saini maalum ya Ethereum. Hii inazuia matumizi mabaya ambapo mfumo mtawanyo wa kimamlaka hasidi unaweza kusaini data holela (k.m., muamala) na kutumia saini kumwiga mwathiriwa. + +Kumbuka: anwani ya kutia saini nayo lazima ifunguliwe. + +**Vigezo** + +1. `DATA`, Baiti 20 - anwani +2. `DATA`, Baiti N - ujumbe wa kutia saini + +**Inarudisha** + +`DATA`: Sahihi + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_signTransaction {#eth_signtransaction} + +Inatia saini muamala ambao unaweza kuwasilishwa kwenye mtandao baadaye kwa kutumia [eth_sendRawTransaction](#eth_sendrawtransaction). + +**Vigezo** + +1. `Object` - Kitu cha muamala + +- `type`: +- `from`: `DATA`, Baiti 20 - Anwani ambayo muamala unatumwa kutoka. +- `to`: `DATA`, Baiti 20 - (si lazima unapounda mkataba mpya) Anwani ambayo muamala unaelekezwa. +- `gas`: `QUANTITY` - (si lazima, chaguo-msingi: 90000) Nambari kamili ya gesi iliyotolewa kwa ajili ya utekelezaji wa muamala. Itarudisha gesi isiyotumika. +- `gasPrice`: `QUANTITY` - (si lazima, chaguo-msingi: Itaamuliwa) Nambari kamili ya gasPrice inayotumika kwa kila gesi inayolipwa, katika Wei. +- `value`: `QUANTITY` - (si lazima) Nambari kamili ya thamani iliyotumwa na muamala huu, katika Wei. +- `data`: `DATA` - Msimbo uliokusanywa wa mkataba AU hashi ya saini ya mbinu iliyoitwa na vigezo vilivyosimbwa. +- `nonce`: `QUANTITY` - (si lazima) Nambari kamili ya nonce. Hii inaruhusu kubatilisha miamala yako mwenyewe inayosubiri inayotumia nonce sawa. + +**Inarudisha** + +`DATA`, Kitu cha muamala kilichosimbwa na RLP kilichotiwa saini na akaunti maalum. + +**Mfano** + +```js +// Ombi +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"}]}' +// Matokeo +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_sendTransaction {#eth_sendtransaction} + +Huunda muamala mpya wa wito wa ujumbe au uundaji wa mkataba, ikiwa sehemu ya data ina msimbo, na inautia saini kwa kutumia akaunti maalum katika `from`. + +**Vigezo** + +1. `Object` - Kitu cha muamala + +- `from`: `DATA`, Baiti 20 - Anwani ambayo muamala unatumwa kutoka. +- `to`: `DATA`, Baiti 20 - (si lazima unapounda mkataba mpya) Anwani ambayo muamala unaelekezwa. +- `gas`: `QUANTITY` - (si lazima, chaguo-msingi: 90000) Nambari kamili ya gesi iliyotolewa kwa ajili ya utekelezaji wa muamala. Itarudisha gesi isiyotumika. +- `gasPrice`: `QUANTITY` - (si lazima, chaguo-msingi: Itaamuliwa) Nambari kamili ya gasPrice inayotumika kwa kila gesi inayolipwa. +- `value`: `QUANTITY` - (si lazima) Nambari kamili ya thamani iliyotumwa na muamala huu. +- `input`: `DATA` - Msimbo uliokusanywa wa mkataba AU hashi ya saini ya mbinu iliyoitwa na vigezo vilivyosimbwa. +- `nonce`: `QUANTITY` - (si lazima) Nambari kamili ya nonce. Hii inaruhusu kubatilisha miamala yako mwenyewe inayosubiri inayotumia nonce sawa. + +```js +params: [ + { + from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", + to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + gas: "0x76c0", // 30400 + gasPrice: "0x9184e72a000", // 10000000000000 + value: "0x9184e72a", // 2441406250 + input: + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", + }, +] +``` + +**Inarudisha** + +`DATA`, Baiti 32 - hashi ya muamala, au hashi sifuri ikiwa muamala bado haupatikani. + +Tumia [eth_getTransactionReceipt](#eth_gettransactionreceipt) kupata anwani ya mkataba, baada ya muamala kupendekezwa katika kizuizi, ulipounda mkataba. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_sendRawTransaction {#eth_sendrawtransaction} + +Huunda muamala mpya wa wito wa ujumbe au uundaji wa mkataba kwa miamala iliyotiwa saini. + +**Vigezo** + +1. `DATA`, Data ya muamala iliyotiwa saini. + +```js +params: [ + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", +] +``` + +**Inarudisha** + +`DATA`, Baiti 32 - hashi ya muamala, au hashi sifuri ikiwa muamala bado haupatikani. + +Tumia [eth_getTransactionReceipt](#eth_gettransactionreceipt) kupata anwani ya mkataba, baada ya muamala kupendekezwa katika kizuizi, ulipounda mkataba. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_call {#eth_call} + +Hutekeleza wito mpya wa ujumbe mara moja bila kuunda muamala kwenye mnyororo wa bloku. Mara nyingi hutumika kutekeleza kazi za mkataba-erevu za kusoma tu, kwa mfano `balanceOf` kwa mkataba wa ERC-20. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `Object` - Kitu cha wito wa muamala + +- `from`: `DATA`, Baiti 20 - (si lazima) Anwani ambayo muamala unatumwa kutoka. +- `to`: `DATA`, Baiti 20 - Anwani ambayo muamala unaelekezwa. +- `gas`: `QUANTITY` - (si lazima) Nambari kamili ya gesi iliyotolewa kwa ajili ya utekelezaji wa muamala. eth_call hutumia gesi sifuri, lakini kigezo hiki kinaweza kuhitajika na baadhi ya utekelezaji. +- `gasPrice`: `QUANTITY` - (si lazima) Nambari kamili ya gasPrice inayotumika kwa kila gesi inayolipwa +- `value`: `QUANTITY` - (si lazima) Nambari kamili ya thamani iliyotumwa na muamala huu +- `input`: `DATA` - (si lazima) Hashi ya saini ya mbinu na vigezo vilivyosimbwa. Kwa maelezo angalia [ABI ya Mkataba wa Ethereum katika nyaraka za Solidity](https://docs.soliditylang.org/en/latest/abi-spec.html). + +2. `QUANTITY|TAG` - nambari kamili ya kizuizi, au mfuatano `"latest"`, `"earliest"`, `"pending"`, `"safe"` au `"finalized"`, angalia [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter) + +**Inarudisha** + +`DATA` - thamani ya urejeshaji ya mkataba uliotekelezwa. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x" +} +``` + +### eth_estimateGas {#eth_estimategas} + +Huzalisha na kurudisha makadirio ya gesi kiasi gani inahitajika kuruhusu muamala kukamilika. Muamala hautaongezwa kwenye mnyororo wa bloku. Kumbuka kwamba makadirio yanaweza kuwa zaidi ya kiasi cha gesi inayotumiwa na shughuli ya ununuzi, kwa sababu mbalimbali ikiwa ni pamoja na mechanics ya EVM na utendaji wa nodi. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +Angalia vigezo vya [eth_call](#eth_call), isipokuwa kwamba sifa zote ni za hiari. Ikiwa hakuna kikomo cha gesi kilichobainishwa, geth hutumia kikomo cha gesi ya block kutoka kwa kizuizi kinachosubiri kama njia ya juu. Matokeo yake, makadirio yaliyorejeshwa yanaweza yasitoshe kutekeleza wito/muamala wakati kiasi cha gesi ni cha juu kuliko kikomo cha gesi cha bloku inayosubiri. + +**Inarudisha** + +`QUANTITY` - kiasi cha gesi iliyotumika. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x5208" // 21000 +} +``` + +### eth_getBlockByHash {#eth_getblockbyhash} + +Inarudisha taarifa kuhusu kizuizi kwa hashi. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 32 - Hashi ya kizuizi. +2. `Boolean` - Ikiwa `true` inarudisha vitu kamili vya muamala, ikiwa `false` ni hashi tu za miamala. + +```js +params: [ + "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + false, +] +``` + +**Inarudisha** + +`Object` - Kitu cha kizuizi, au `null` wakati hakuna kizuizi kilichopatikana: + +- `number`: `QUANTITY` - nambari ya kizuizi. `null` wakati ni kizuizi kinachosubiri. +- `hash`: `DATA`, Baiti 32 - hashi ya kizuizi. `null` wakati ni kizuizi kinachosubiri. +- `parentHash`: `DATA`, Baiti 32 - hashi ya kizuizi cha mzazi. +- `nonce`: `DATA`, Baiti 8 - hashi ya uthibitishaji-wa-kazi uliotengenezwa. `null` wakati ni kizuizi kinachosubiri, `0x0` kwa vizuizi vya uthibitishaji-wa-hisa (tangu Muungano) +- `sha3Uncles`: `DATA`, Baiti 32 - SHA3 ya data ya wajomba katika kizuizi. +- `logsBloom`: `DATA`, Baiti 256 - kichujio cha bloom kwa kumbukumbu za kizuizi. `null` wakati ni kizuizi kinachosubiri. +- `transactionsRoot`: `DATA`, Baiti 32 - mzizi wa trie ya muamala wa kizuizi. +- `stateRoot`: `DATA`, Baiti 32 - mzizi wa trie ya hali ya mwisho ya kizuizi. +- `receiptsRoot`: `DATA`, Baiti 32 - mzizi wa trie ya risiti za kizuizi. +- `miner`: `DATA`, Baiti 20 - anwani ya mnufaika ambaye zawadi za kizuizi zilipewa. +- `difficulty`: `QUANTITY` - nambari kamili ya ugumu kwa kizuizi hiki. +- `totalDifficulty`: `QUANTITY` - nambari kamili ya ugumu jumla wa mnyororo hadi kizuizi hiki. +- `extraData`: `DATA` - sehemu ya "data ya ziada" ya kizuizi hiki. +- `size`: `QUANTITY` - nambari kamili ya ukubwa wa kizuizi hiki katika baiti. +- `gasLimit`: `QUANTITY` - gesi ya juu inayoruhusiwa katika kizuizi hiki. +- `gasUsed`: `QUANTITY` - jumla ya gesi iliyotumika na miamala yote katika kizuizi hiki. +- `timestamp`: `QUANTITY` - muhuri wa muda wa unix wa wakati kizuizi kilikusanywa. +- `transactions`: `Array` - Safu ya vitu vya muamala, au hashi za muamala za Baiti 32 kulingana na kigezo cha mwisho kilichotolewa. +- `uncles`: `Array` - Safu ya hashi za wajomba. + +**Mfano** + +```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} + +Inarudisha taarifa kuhusu kizuizi kwa nambari ya kizuizi. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `QUANTITY|TAG` - nambari kamili ya nambari ya kizuizi, au mfuatano `"earliest"`, `"latest"`, `"pending"`, `"safe"` au `"finalized"`, kama ilivyo katika [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter). +2. `Boolean` - Ikiwa `true` inarudisha vitu kamili vya muamala, ikiwa `false` ni hashi tu za miamala. + +```js +params: [ + "0x1b4", // 436 + true, +] +``` + +**Inarudisha** +Angalia [eth_getBlockByHash](#eth_getblockbyhash) + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' +``` + +Matokeo angalia [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_getTransactionByHash {#eth_gettransactionbyhash} + +Inarudisha taarifa kuhusu muamala ulioombwa kwa hashi ya muamala. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 32 - hashi ya muamala + +```js +params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] +``` + +**Inarudisha** + +`Object` - Kitu cha muamala, au `null` wakati hakuna muamala uliopatikana: + +- `blockHash`: `DATA`, Baiti 32 - hashi ya kizuizi ambapo muamala huu ulikuwa. `null` wakati inasubiri. +- `blockNumber`: `QUANTITY` - nambari ya kizuizi ambapo muamala huu ulikuwa. `null` wakati inasubiri. +- `from`: `DATA`, Baiti 20 - anwani ya mtumaji. +- `gas`: `QUANTITY` - gesi iliyotolewa na mtumaji. +- `gasPrice`: `QUANTITY` - bei ya gesi iliyotolewa na mtumaji katika Wei. +- `hash`: `DATA`, Baiti 32 - hashi ya muamala. +- `input`: `DATA` - data iliyotumwa pamoja na muamala. +- `nonce`: `QUANTITY` - idadi ya miamala iliyofanywa na mtumaji kabla ya hii. +- `to`: `DATA`, Baiti 20 - anwani ya mpokeaji. `null` wakati ni muamala wa uundaji wa mkataba. +- `transactionIndex`: `QUANTITY` - nambari kamili ya nafasi ya faharasa ya miamala katika kizuizi. `null` wakati inasubiri. +- `value`: `QUANTITY` - thamani iliyohamishwa katika Wei. +- `v`: `QUANTITY` - kitambulisho cha urejeshaji cha ECDSA +- `r`: `QUANTITY` - saini ya ECDSA r +- `s`: `QUANTITY` - saini ya ECDSA s + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' +// Matokeo +{ + "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} + +Inarudisha taarifa kuhusu muamala kwa hashi ya kizuizi na nafasi ya faharasa ya muamala. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 32 - hashi ya kizuizi. +2. `QUANTITY` - nambari kamili ya nafasi ya faharasa ya muamala. + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**Inarudisha** +Angalia [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +Matokeo angalia [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} + +Inarudisha taarifa kuhusu muamala kwa nambari ya kizuizi na nafasi ya faharasa ya muamala. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `QUANTITY|TAG` - nambari ya kizuizi, au mfuatano `"earliest"`, `"latest"`, `"pending"`, `"safe"` au `"finalized"`, kama ilivyo katika [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter). +2. `QUANTITY` - nafasi ya faharasa ya muamala. + +```js +params: [ + "0x9c47cf", // 10241999 + "0x24", // 36 +] +``` + +**Inarudisha** +Angalia [eth_getTransactionByHash](#eth_gettransactionbyhash) + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' +``` + +Matokeo angalia [eth_getTransactionByHash](#eth_gettransactionbyhash) + +### eth_getTransactionReceipt {#eth_gettransactionreceipt} + +Inarudisha risiti ya muamala kwa hashi ya muamala. + +**Kumbuka** Kwamba risiti haipatikani kwa miamala inayosubiri. + +**Vigezo** + +1. `DATA`, Baiti 32 - hashi ya muamala + +```js +params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] +``` + +**Inarudisha** +`Object` - Kitu cha risiti ya muamala, au `null` wakati hakuna risiti iliyopatikana: + +- `transactionHash `: `DATA`, Baiti 32 - hashi ya muamala. +- `transactionIndex`: `QUANTITY` - nambari kamili ya nafasi ya faharasa ya miamala katika kizuizi. +- `blockHash`: `DATA`, Baiti 32 - hashi ya kizuizi ambapo muamala huu ulikuwa. +- `blockNumber`: `QUANTITY` - nambari ya kizuizi ambapo muamala huu ulikuwa. +- `from`: `DATA`, Baiti 20 - anwani ya mtumaji. +- `to`: `DATA`, Baiti 20 - anwani ya mpokeaji. `null` wakati ni muamala wa uundaji wa mkataba. +- `cumulativeGasUsed` : `QUANTITY ` - Jumla ya kiasi cha gesi iliyotumika wakati muamala huu ulitekelezwa katika kizuizi. +- `effectiveGasPrice` : `QUANTITY` - Jumla ya ada ya msingi na ncha iliyolipwa kwa kila kitengo cha gesi. +- `gasUsed `: `QUANTITY ` - Kiasi cha gesi kilichotumiwa na muamala huu maalum pekee. +- `contractAddress `: `DATA`, Baiti 20 - Anwani ya mkataba iliyoundwa, ikiwa muamala ulikuwa uundaji wa mkataba, vinginevyo `null`. +- `logs`: `Array` - Safu ya vitu vya kumbukumbu, ambavyo muamala huu ulizalisha. +- `logsBloom`: `DATA`, Baiti 256 - Kichujio cha Bloom kwa wateja wepesi kupata kumbukumbu zinazohusiana haraka. +- `type`: `QUANTITY` - nambari kamili ya aina ya muamala, `0x0` kwa miamala ya zamani, `0x1` kwa aina za orodha ya ufikiaji, `0x2` kwa ada za nguvu. + +Pia inarudisha _ama_ : + +- `root` : `DATA` baiti 32 za mzizi wa hali baada ya muamala (kabla ya Byzantium). +- `status`: `QUANTITY` ama `1` (mafanikio) au `0` (kushindwa) + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' +// Matokeo +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "blockHash": + "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", + "blockNumber": "0xeff35f", + "contractAddress": null, // mfuatano wa anwani ikiwa iliundwa + "cumulativeGasUsed": "0xa12515", + "effectiveGasPrice": "0x5a9c688d4", + "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", + "gasUsed": "0xb4c8", + "logs": [{ + // kumbukumbu kama zilivyorudishwa na getFilterLogs, n.k. + }], + "logsBloom": "0x00...0", // kichujio cha bloom cha baiti 256 + "status": "0x1", + "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "transactionHash": + "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5", + "transactionIndex": "0x66", + "type": "0x2" + } +} +``` + +### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} + +Hurejesha taarifa kuhusu uncle wa bloku kwa hashi na nafasi ya faharasa ya uncle. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `DATA`, Baiti 32 - Hashi ya kizuizi. +2. `QUANTITY` - Nafasi ya faharasa ya mjomba. + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**Inarudisha** +Angalia [eth_getBlockByHash](#eth_getblockbyhash) + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +Matokeo angalia [eth_getBlockByHash](#eth_getblockbyhash) + +**Kumbuka**: Mjomba hana miamala ya kibinafsi. + +### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} + +Hurejesha taarifa kuhusu uncle wa bloku kwa nambari na nafasi ya faharasa ya uncle. + + + Jaribu ncha ya mwisho katika uwanja wa michezo + + +**Vigezo** + +1. `QUANTITY|TAG` - nambari ya kizuizi, au mfuatano `"earliest"`, `"latest"`, `"pending"`, `"safe"`, `"finalized"`, kama ilivyo katika [kigezo cha kizuizi](/developers/docs/apis/json-rpc/#block-parameter). +2. `QUANTITY` - nafasi ya faharasa ya mjomba. + +```js +params: [ + "0x29c", // 668 + "0x0", // 0 +] +``` + +**Inarudisha** +Angalia [eth_getBlockByHash](#eth_getblockbyhash) + +**Kumbuka**: Mjomba hana miamala ya kibinafsi. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' +``` + +Matokeo angalia [eth_getBlockByHash](#eth_getblockbyhash) + +### eth_newFilter {#eth_newfilter} + +Huunda kitu cha kichujio, kulingana na chaguzi za kichujio, ili kuarifu wakati hali inabadilika (kumbukumbu). +Ili kuangalia kama hali imebadilika, piga simu [eth_getFilterChanges](#eth_getfilterchanges). + +**Kumbuka kuhusu kubainisha vichujio vya mada:** +Mada zinategemea mpangilio. Muamala wenye kumbukumbu na mada [A, B] utalinganishwa na vichujio vifuatavyo vya mada: + +- `[]` "chochote" +- `[A]` "A katika nafasi ya kwanza (na chochote baada)" +- `[null, B]` "chochote katika nafasi ya kwanza NA B katika nafasi ya pili (na chochote baada)" +- `[A, B]` "A katika nafasi ya kwanza NA B katika nafasi ya pili (na chochote baada)" +- `[[A, B], [A, B]]` "(A AU B) katika nafasi ya kwanza NA (A AU B) katika nafasi ya pili (na chochote baada)" +- **Vigezo** + +1. `Object` - Chaguzi za kichujio: + +- `fromBlock`: `QUANTITY|TAG` - (si lazima, chaguo-msingi: `"latest"`) Nambari kamili ya kizuizi, au `"latest"` kwa kizuizi cha mwisho kilichopendekezwa, `"safe"` kwa kizuizi cha mwisho salama, `"finalized"` kwa kizuizi cha mwisho kilichokamilishwa, au `"pending"`, `"earliest"` kwa miamala ambayo bado haiko kwenye kizuizi. +- `toBlock`: `QUANTITY|TAG` - (si lazima, chaguo-msingi: `"latest"`) Nambari kamili ya kizuizi, au `"latest"` kwa kizuizi cha mwisho kilichopendekezwa, `"safe"` kwa kizuizi cha mwisho salama, `"finalized"` kwa kizuizi cha mwisho kilichokamilishwa, au `"pending"`, `"earliest"` kwa miamala ambayo bado haiko kwenye kizuizi. +- `address`: `DATA|Array`, Baiti 20 - (si lazima) Anwani ya mkataba au orodha ya anwani ambazo kumbukumbu zinapaswa kutoka. +- `topics`: `Array of DATA`, - (si lazima) Safu ya mada za `DATA` za Baiti 32. Mada zinategemea mpangilio. Kila mada inaweza pia kuwa safu ya DATA na chaguzi za "au". + +```js +params: [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0x8888f1f195afa192cfee860698584c030f4c9db1", + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + null, + [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc", + ], + ], + }, +] +``` + +**Inarudisha** +`QUANTITY` - Kitambulisho cha kichujio. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newBlockFilter {#eth_newblockfilter} + +Huunda kichujio katika nodi, ili kuarifu wakati kizuizi kipya kinafika. +Ili kuangalia kama hali imebadilika, piga simu [eth_getFilterChanges](#eth_getfilterchanges). + +**Vigezo** +Hakuna + +**Inarudisha** +`QUANTITY` - Kitambulisho cha kichujio. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} + +Huunda kichujio katika nodi, ili kuarifu wakati miamala mipya inayosubiri inafika. +Ili kuangalia kama hali imebadilika, piga simu [eth_getFilterChanges](#eth_getfilterchanges). + +**Vigezo** +Hakuna + +**Inarudisha** +`QUANTITY` - Kitambulisho cha kichujio. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_uninstallFilter {#eth_uninstallfilter} + +Huondoa kichujio chenye kitambulisho fulani. Inapaswa kuitwa kila wakati ufuatiliaji hauhitajiki tena. +Zaidi ya hayo, Vichujio huisha muda wake wakati havijaombwa na [eth_getFilterChanges](#eth_getfilterchanges) kwa kipindi fulani. + +**Vigezo** + +1. `QUANTITY` - Kitambulisho cha kichujio. + +```js +params: [ + "0xb", // 11 +] +``` + +**Inarudisha** +`Boolean` - `true` ikiwa kichujio kimeondolewa kwa mafanikio, vinginevyo `false`. + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' +// Matokeo +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_getFilterChanges {#eth_getfilterchanges} + +Mbinu ya kupiga kura kwa kichujio, ambayo inarudisha safu ya kumbukumbu zilizotokea tangu upigaji kura wa mwisho. + +**Vigezo** + +1. `QUANTITY` - kitambulisho cha kichujio. + +```js +params: [ + "0x16", // 22 +] +``` + +**Inarudisha** +`Array` - Safu ya vitu vya kumbukumbu, au safu tupu ikiwa hakuna kitu kilichobadilika tangu upigaji kura wa mwisho. + +- Kwa vichujio vilivyoundwa na `eth_newBlockFilter` marejesho ni hashi za bloku (`DATA`, Baiti 32), k.m., `["0x3454645634534..."]`. + +- Kwa vichujio vilivyoundwa na `eth_newPendingTransactionFilter ` marejesho ni hashi za muamala (`DATA`, Baiti 32), k.m., `["0x6345343454645..."]`. + +- Kwa vichujio vilivyoundwa na `eth_newFilter` kumbukumbu ni vitu vyenye vigezo vifuatavyo: + - `removed`: `TAG` - `true` wakati kumbukumbu iliondolewa, kutokana na upangaji upya wa mnyororo. `false` ikiwa ni kumbukumbu halali. + - `logIndex`: `QUANTITY` - nambari kamili ya nafasi ya faharasa ya kumbukumbu katika kizuizi. `null` wakati ni kumbukumbu inayosubiri. + - `transactionIndex`: `QUANTITY` - nambari kamili ya nafasi ya faharasa ya miamala ambayo kumbukumbu ilitengenezwa kutoka. `null` wakati ni kumbukumbu inayosubiri. + - `transactionHash`: `DATA`, Baiti 32 - hashi ya miamala ambayo kumbukumbu hii ilitengenezwa kutoka. `null` wakati ni kumbukumbu inayosubiri. + - `blockHash`: `DATA`, Baiti 32 - hashi ya kizuizi ambapo kumbukumbu hii ilikuwa. `null` wakati inasubiri. `null` wakati ni kumbukumbu inayosubiri. + - `blockNumber`: `QUANTITY` - nambari ya kizuizi ambapo kumbukumbu hii ilikuwa. `null` wakati inasubiri. `null` wakati ni kumbukumbu inayosubiri. + - `address`: `DATA`, Baiti 20 - anwani ambayo kumbukumbu hii ilitoka. + - `data`: `DATA` - data ya kumbukumbu isiyo na faharasa ya urefu-tofauti. (Katika _solidity_: hoja sifuri au zaidi za kumbukumbu zisizo na faharasa za Baiti 32.) + - `topics`: `Array of DATA` - Safu ya hoja za kumbukumbu zilizoorodheshwa za Baiti 0 hadi 4 32 za `DATA`. (Katika _solidity_: Mada ya kwanza ni _hashi_ ya saini ya tukio (k.m., `Deposit(address,bytes32,uint256)`), isipokuwa umetangaza tukio hilo na kibainishi `anonymous`.) + +- **Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' +// Matokeo +{ + "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} + +Inarudisha safu ya kumbukumbu zote zinazolingana na kichujio chenye kitambulisho fulani. + +**Vigezo** + +1. `QUANTITY` - Kitambulisho cha kichujio. + +```js +params: [ + "0x16", // 22 +] +``` + +**Inarudisha** +Angalia [eth_getFilterChanges](#eth_getfilterchanges) + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' +``` + +Matokeo angalia [eth_getFilterChanges](#eth_getfilterchanges) + +### eth_getLogs {#eth_getlogs} + +Inarudisha safu ya kumbukumbu zote zinazolingana na kitu fulani cha kichujio. + +**Vigezo** + +1. `Object` - Chaguzi za kichujio: + +- `fromBlock`: `QUANTITY|TAG` - (si lazima, chaguo-msingi: `"latest"`) Nambari kamili ya kizuizi, au `"latest"` kwa kizuizi cha mwisho kilichopendekezwa, `"safe"` kwa kizuizi cha mwisho salama, `"finalized"` kwa kizuizi cha mwisho kilichokamilishwa, au `"pending"`, `"earliest"` kwa miamala ambayo bado haiko kwenye kizuizi. +- `toBlock`: `QUANTITY|TAG` - (si lazima, chaguo-msingi: `"latest"`) Nambari kamili ya kizuizi, au `"latest"` kwa kizuizi cha mwisho kilichopendekezwa, `"safe"` kwa kizuizi cha mwisho salama, `"finalized"` kwa kizuizi cha mwisho kilichokamilishwa, au `"pending"`, `"earliest"` kwa miamala ambayo bado haiko kwenye kizuizi. +- `address`: `DATA|Array`, Baiti 20 - (si lazima) Anwani ya mkataba au orodha ya anwani ambazo kumbukumbu zinapaswa kutoka. +- `topics`: `Array of DATA`, - (si lazima) Safu ya mada za `DATA` za Baiti 32. Mada zinategemea mpangilio. Kila mada inaweza pia kuwa safu ya DATA na chaguzi za "au". +- `blockHash`: `DATA`, Baiti 32 - (si lazima, **baadaye**) Kwa kuongezwa kwa EIP-234, `blockHash` itakuwa chaguo jipya la kichujio ambalo linazuia kumbukumbu zilizorudishwa kwa kizuizi kimoja na hashi ya baiti 32 `blockHash`. Kutumia `blockHash` ni sawa na `fromBlock` = `toBlock` = nambari ya kizuizi na hashi `blockHash`. Ikiwa `blockHash` ipo katika vigezo vya kichujio, basi `fromBlock` wala `toBlock` haziruhusiwi. + +```js +params: [ + { + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + ], + }, +] +``` + +**Inarudisha** +Angalia [eth_getFilterChanges](#eth_getfilterchanges) + +**Mfano** + +```js +// Ombi +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' +``` + +Matokeo angalia [eth_getFilterChanges](#eth_getfilterchanges) + +## Mfano wa Matumizi {#usage-example} + +### Kupeleka mkataba kwa kutumia JSON_RPC {#deploying-contract} + +Sehemu hii inajumuisha onyesho la jinsi ya kupeleka mkataba kwa kutumia kiolesura cha RPC pekee. Kuna njia mbadala za kupeleka mikataba ambapo utata huu unaondolewa—kwa mfano, kutumia maktaba zilizojengwa juu ya kiolesura cha RPC kama vile [web3.js](https://web3js.readthedocs.io/) na [web3.py](https://github.com/ethereum/web3.py). Uondoaji huu kwa ujumla ni rahisi kuelewa na una makosa machache, lakini bado ni muhimu kuelewa kinachoendelea chini ya kofia. + +Ifuatayo ni mkataba-erevu ulio wazi unaoitwa `Multiply7` ambao utapelekwa kwa kutumia kiolesura cha JSON-RPC kwa nodi ya Ethereum. Mafunzo haya yanadhania msomaji tayari anaendesha nodi ya Geth. Maelezo zaidi kuhusu nodi na wateja yanapatikana [hapa](/developers/docs/nodes-and-clients/run-a-node). Tafadhali rejelea nyaraka za [mteja](/developers/docs/nodes-and-clients/) binafsi ili kuona jinsi ya kuanza HTTP JSON-RPC kwa wateja wasio wa Geth. Wateja wengi hutoa huduma kwa chaguo-msingi kwenye `localhost:8545`. + +```javascript +contract Multiply7 { + event Print(uint); + function multiply(uint input) returns (uint) { + Print(input * 7); + return input * 7; + } +} +``` + +Jambo la kwanza kufanya ni kuhakikisha kiolesura cha HTTP RPC kimewashwa. Hii inamaanisha tunatoa Geth na bendera ya `--http` wakati wa kuanza. Katika mfano huu tunatumia nodi ya Geth kwenye mnyororo wa kibinafsi wa maendeleo. Kwa kutumia mbinu hii hatuhitaji ether kwenye mtandao halisi. + +```bash +geth --http --dev console 2>>geth.log +``` + +Hii itaanza kiolesura cha HTTP RPC kwenye `http://localhost:8545`. + +Tunaweza kuthibitisha kuwa kiolesura kinafanya kazi kwa kupata anwani ya coinbase (kwa kupata anwani ya kwanza kutoka kwenye safu ya akaunti) na salio kwa kutumia [curl](https://curl.se). Tafadhali kumbuka kuwa data katika mifano hii itatofautiana kwenye nodi yako ya ndani. Ikiwa unataka kujaribu amri hizi, badilisha vigezo vya ombi katika ombi la pili la curl na matokeo yaliyorudishwa kutoka kwa la kwanza. + +```bash +curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "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"} +``` + +Kwa sababu nambari zimesimbwa kwa hex, salio hurudishwa katika wei kama mfuatano wa hex. Ikiwa tunataka kuwa na salio katika ether kama nambari tunaweza kutumia web3 kutoka kwa koni ya Geth. + +```javascript +web3.fromWei("0x1639e49bba16280000", "ether") +// "410" +``` + +Sasa kwa kuwa kuna ether fulani kwenye mnyororo wetu wa kibinafsi wa maendeleo, tunaweza kupeleka mkataba. Hatua ya kwanza ni kuandaa mkataba wa Multiply7 kuwa msimbo wa baiti ambao unaweza kutumwa kwa EVM. Ili kusakinisha solc, mkusanyaji wa Solidity, fuata [nyaraka za Solidity](https://docs.soliditylang.org/en/latest/installing-solidity.html). (Unaweza kutaka kutumia toleo la zamani la `solc` ili kuendana na [toleo la mkusanyaji lililotumika kwa mfano wetu](https://github.com/ethereum/solidity/releases/tag/v0.4.20).) + +Hatua inayofuata ni kuandaa mkataba wa Multiply7 kuwa msimbo wa baiti unaoweza kutumwa kwa EVM. + +```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 +``` + +Sasa kwa kuwa tuna msimbo uliokusanywa tunahitaji kuamua ni kiasi gani cha gesi kinagharimu kuupeleka. Kiolesura cha RPC kina mbinu ya `eth_estimateGas` ambayo itatupa makadirio. + +```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"} +``` + +Na hatimaye peleka mkataba. + +```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"} +``` + +Muamala unakubaliwa na nodi na hashi ya muamala inarudishwa. Hashi hii inaweza kutumika kufuatilia muamala. Hatua inayofuata ni kuamua anwani ambapo mkataba wetu umepelekwa. Kila muamala uliotekelezwa utaunda risiti. Risiti hii ina taarifa mbalimbali kuhusu muamala kama vile ni katika kizuizi gani muamala ulijumuishwa na ni kiasi gani cha gesi kilitumika na EVM. Ikiwa muamala +unaunda mkataba pia utakuwa na anwani ya mkataba. Tunaweza kupata risiti kwa kutumia mbinu ya `eth_getTransactionReceipt` ya RPC. + +```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"}} +``` + +Mkataba wetu uliundwa kwenye `0x4d03d617d700cf81935d7f797f4e2ae719648262`. Matokeo ya null badala ya risiti inamaanisha muamala bado haujajumuishwa kwenye kizuizi. Subiri kwa muda na uangalie ikiwa mteja wako wa makubaliano anafanya kazi na ujaribu tena. + +#### Kuwasiliana na mikataba-erevu {#interacting-with-smart-contract} + +Katika mfano huu tutakuwa tunatuma muamala kwa kutumia `eth_sendTransaction` kwa mbinu ya `multiply` ya mkataba. + +`eth_sendTransaction` inahitaji hoja kadhaa, hasa `from`, `to` na `data`. `Kutoka` ni anwani ya umma ya akaunti yetu, na `kwenda` ni anwani ya mkataba. Hoja ya `data` ina mzigo unaobainisha ni mbinu gani lazima itumike na kwa hoja gani. Hapa ndipo [ABI (application binary interface)](https://docs.soliditylang.org/en/latest/abi-spec.html) inapoingia. ABI ni faili ya JSON inayobainisha jinsi ya kubainisha na kusimba data kwa ajili ya EVM. + +Baiti za mzigo hubainisha ni mbinu gani katika mkataba inayoitwa. Hizi ni baiti 4 za kwanza kutoka kwenye hashi ya Keccak juu ya jina la utendakazi na aina zake za hoja, zilizosimbwa kwa hex. Kazi ya kuzidisha inakubali uint ambayo ni jina lingine la uint256. Hii inatuacha na: + +```javascript +web3.sha3("multiply(uint256)").substring(0, 10) +// "0xc6888fa1" +``` + +Hatua inayofuata ni kusimba hoja. Kuna uint256 moja tu, tuseme, thamani 6. ABI ina sehemu inayobainisha jinsi ya kusimba aina za uint256. + +`int: enc(X)` ni usimbaji wa kikamilisho cha mbili-kubwa-mwisho cha X, kilichopachikwa kwenye upande wa juu (kushoto) na 0xff kwa X hasi na baiti > sifuri kwa X chanya ili urefu uwe zidisho la baiti 32. + +Hii inasimba hadi `0000000000000000000000000000000000000000000000000000000000000006`. + +Kuchanganya kiteuzi cha kazi na hoja iliyosimbwa, data yetu itakuwa `0xc6888fa10000000000000000000000000000000000000000000000000000000000000006`. + +Hii sasa inaweza kutumwa kwa nodi: + +```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"} +``` + +Kwa kuwa muamala ulitumwa, hashi ya muamala ilirejeshwa. Kupata risiti kunatoa: + +```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 +} +``` + +Risiti ina kumbukumbu. Kumbukumbu hii ilitolewa na EVM kwenye utekelezaji wa muamala na kujumuishwa kwenye risiti. Kazi ya `multiply` inaonyesha kuwa tukio la `Print` liliibuliwa na ingizo mara 7. Kwa kuwa hoja ya tukio la `Print` ilikuwa uint256 tunaweza kuisimbua kulingana na sheria za ABI ambazo zitatuacha na desimali inayotarajiwa 42. Kando na data inafaa kuzingatia kwamba mada zinaweza kutumika kubainisha ni tukio gani lililounda kumbukumbu: + +```javascript +web3.sha3("Print(uint256)") +// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" +``` + +Huu ulikuwa utangulizi mfupi tu wa baadhi ya kazi za kawaida, ukionyesha matumizi ya moja kwa moja ya JSON-RPC. + +## Mada zinazohusiana {#related-topics} + +- [Ufafanuzi wa JSON-RPC](http://www.jsonrpc.org/specification) +- [Nodi na wateja](/developers/docs/nodes-and-clients/) +- [API za JavaScript](/developers/docs/apis/javascript/) +- [API za Backend](/developers/docs/apis/backend/) +- [Wateja wa utekelezaji](/developers/docs/nodes-and-clients/#execution-clients) diff --git a/public/content/translations/sw/developers/docs/blocks/index.md b/public/content/translations/sw/developers/docs/blocks/index.md new file mode 100644 index 00000000000..bf9424525ff --- /dev/null +++ b/public/content/translations/sw/developers/docs/blocks/index.md @@ -0,0 +1,153 @@ +--- +title: Vipande +description: Muhtasari wa bloku katika mnyororo wa bloku wa Ethereum – muundo wao wa data, kwa nini zinahitajika, na jinsi zinavyotengenezwa. +lang: sw +--- + +Bloku ni makundi ya miamala yenye hashi ya bloku iliyotangulia katika mnyororo. Hii inaunganisha bloku pamoja (katika mnyororo) kwa sababu hashi hutokana na usimbaji fiche kutoka kwa data ya bloku. Hii inazuia udanganyifu, kwa sababu badiliko moja katika bloku yoyote katika historia litabatilisha bloku zote zinazofuata kwa kuwa hashi zote zinazofuata zingebadilika na kila mtu anayeendesha mnyororo wa bloku angetambua. + +## Mahitaji ya awali {#prerequisites} + +Bloku ni mada rahisi sana kwa wanaoanza. Lakini ili kukusaidia kuelewa ukurasa huu vizuri zaidi, tunapendekeza usome kwanza [Akaunti](/developers/docs/accounts/), [Miamala](/developers/docs/transactions/), na [utangulizi wetu wa Ethereum](/developers/docs/intro-to-ethereum/). + +## Kwa nini bloku? {#why-blocks} + +Ili kuhakikisha kuwa washiriki wote kwenye mtandao wa Ethereum wanadumisha hali iliyosawazishwa na kukubaliana kuhusu historia kamili ya miamala, tunakusanya miamala katika bloku. Hii inamaanisha miamala kadhaa (au mamia) inakamilishwa, inakubaliwa, na kusawazishwa yote kwa wakati mmoja. + +![Mchoro unaoonyesha muamala katika bloku ukisababisha mabadiliko ya hali](./tx-block.png) +_Mchoro umechukuliwa kutoka [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +Kwa kutenga muda kati ya uthibitisho, tunawapa washiriki wote wa mtandao muda wa kutosha kufikia makubaliano: ingawa maombi ya miamala hutokea mara nyingi kwa sekunde, bloku hutengenezwa na kuthibitishwa kwenye Ethereum mara moja kila sekunde kumi na mbili. + +## Jinsi bloku zinavyofanya kazi {#how-blocks-work} + +Ili kuhifadhi historia ya miamala, bloku zimepangwa kwa utaratibu mkali (kila bloku mpya inayoundwa huwa na marejeleo ya bloku yake mzazi), na miamala ndani ya bloku pia imepangwa kwa utaratibu mkali. Isipokuwa katika visa nadra, wakati wowote, washiriki wote kwenye mtandao wanakubaliana kuhusu idadi kamili na historia ya bloku, na wanafanya kazi ya kukusanya maombi ya sasa ya miamala katika bloku inayofuata. + +Pindi bloku inapokusanywa na mthibitishaji aliyechaguliwa bila mpangilio kwenye mtandao, husambazwa kwa mtandao wote; nodi zote huongeza bloku hii mwishoni mwa mnyororo wao wa bloku, na mthibitishaji mpya huchaguliwa kuunda bloku inayofuata. Mchakato kamili wa kuunganisha bloku na mchakato wa uthibitisho/makubaliano kwa sasa umeainishwa na itifaki ya "Uthibitisho wa Hisa" ya Ethereum. + +## Itifaki ya Uthibitisho wa Hisa {#proof-of-stake-protocol} + +Uthibitisho wa Hisa inamaanisha yafuatayo: + +- Nodi za kuthibitisha zinapaswa kuweka hisa ya ETH 32 katika mkataba wa amana kama dhamana dhidi ya tabia mbaya. Hii husaidia kulinda mtandao kwa sababu shughuli isiyo ya uaminifu inayoweza kuthibitishwa husababisha baadhi au hisa yote hiyo kuharibiwa. +- Katika kila nafasi (yenye muda wa sekunde kumi na mbili) mthibitishaji huchaguliwa bila mpangilio kuwa mpendekezaji wa bloku. Wanakusanya miamala pamoja, wanazitekeleza na kubainisha 'hali' mpya. Wanafunga taarifa hii katika bloku na kuisambaza kwa wathibitishaji wengine. +- Wathibitishaji wengine wanaopata habari kuhusu bloku mpya hutekeleza upya miamala ili kuhakikisha wanakubaliana na mabadiliko yaliyopendekezwa kwa hali ya kimataifa. Ikichukuliwa kuwa bloku ni halali, wanaiongeza kwenye hifadhidata yao. +- Ikiwa mthibitishaji atapata habari kuhusu bloku mbili zinazokinzana kwa nafasi moja, hutumia algoriti yao ya kuchagua uma kuchagua ile inayoungwa mkono na ETH nyingi zaidi zilizowekwa kama hisa. + +[Zaidi kuhusu Uthibitisho wa Hisa](/developers/docs/consensus-mechanisms/pos) + +## Kuna nini ndani ya bloku? {#block-anatomy} + +Kuna taarifa nyingi zilizomo ndani ya bloku. Katika kiwango cha juu kabisa, bloku huwa na sehemu zifuatazo: + +| Sehemu | Maelezo | +| :--------------- | :---------------------------------------------------------- | +| `yanayopangwa` | nafasi ambayo bloku ni yake | +| `proposer_index` | kitambulisho cha mthibitishaji anayependekeza bloku | +| `parent_root` | hashi ya bloku iliyotangulia | +| `state_root` | hashi ya msingi ya kitu cha hali | +| `mwili` | kitu chenye sehemu kadhaa, kama ilivyofafanuliwa hapa chini | + +`Mwili` wa bloku una sehemu zake kadhaa: + +| Sehemu | Maelezo | +| :------------------- | :---------------------------------------------------------------------- | +| `randao_reveal` | thamani inayotumika kuchagua mpendekezaji wa bloku inayofuata | +| `eth1_data` | taarifa kuhusu mkataba wa amana | +| `graffiti` | data yoyote inayotumika kuweka lebo kwenye bloku | +| `proposer_slashings` | orodha ya wathibitishaji watakaoadhibiwa | +| `attester_slashings` | orodha ya waidhinishaji watakaoadhibiwa | +| `attestations` | orodha ya uidhinishaji uliofanywa dhidi ya nafasi za awali | +| `weka` | orodha ya amana mpya kwenye mkataba wa amana | +| `voluntary_exits` | orodha ya wathibitishaji wanaoondoka kwenye mtandao | +| `sync_aggregate` | kikundi kidogo cha wathibitishaji kinachotumika kuhudumia wateja wepesi | +| `execution_payload` | miamala iliyopitishwa kutoka kwa programu ya utekelezaji | + +Sehemu ya `attestations` ina orodha ya uidhinishaji wote katika bloku. Uidhinishaji una aina yake ya data ambayo ina vipande kadhaa vya data. Kila uidhinishaji una: + +| Sehemu | Maelezo | +| :----------------- | :------------------------------------------------------------------ | +| `aggregation_bits` | orodha ya wathibitishaji walioshiriki katika uidhinishaji huu | +| `data` | chombo chenye sehemu ndogo nyingi | +| `signature` | sahihi ya jumla ya seti ya wathibitishaji dhidi ya sehemu ya `data` | + +Sehemu ya `data` katika `attestation` ina yafuatayo: + +| Sehemu | Maelezo | +| :------------------ | :----------------------------------------------------------------------- | +| `yanayopangwa` | nafasi ambayo uidhinishaji unahusiana nayo | +| `index` | faharasa za wathibitishaji wanaoidhinisha | +| `beacon_block_root` | hashi ya msingi ya bloku ya Beacon inayoonekana kama kichwa cha mnyororo | +| `chanzo` | kituo cha ukaguzi cha mwisho kilichohalalishwa | +| `target` | bloku ya mpaka wa enzi ya hivi karibuni | + +Kutekeleza miamala katika `execution_payload` husasisha hali ya kimataifa. Wateja wote hutekeleza upya miamala katika `execution_payload` ili kuhakikisha hali mpya inalingana na ile katika sehemu ya `state_root` ya bloku mpya. Hivi ndivyo wateja wanaweza kujua kwamba bloku mpya ni halali na salama kuiongeza kwenye mnyororo wao wa bloku. `execution payload` yenyewe ni kitu chenye sehemu kadhaa. Pia kuna `execution_payload_header` ambayo ina taarifa muhimu za muhtasari kuhusu data ya utekelezaji. Miundo hii ya data imepangwa kama ifuatavyo: + +`execution_payload_header` ina sehemu zifuatazo: + +| Sehemu | Maelezo | +| :------------------ | :--------------------------------------------------------------------------------- | +| `parent_hash` | hashi ya bloku mzazi | +| `fee_recipient` | anwani ya akaunti ya kulipia ada za muamala | +| `state_root` | hashi ya msingi kwa hali ya kimataifa baada ya kutumia mabadiliko katika bloku hii | +| `receipts_root` | hashi ya trie ya risiti za miamala | +| `logs_bloom` | muundo wa data wenye kumbukumbu za matukio | +| `prev_randao` | thamani inayotumika katika uteuzi wa mthibitishaji bila mpangilio | +| `block_number` | nambari ya bloku ya sasa | +| `gas_limit` | kiwango cha juu cha gesi kinachoruhusiwa katika bloku hii | +| `gas_used` | kiasi halisi cha gesi kilichotumika katika bloku hii | +| `timestamp` | muda wa bloku | +| `extra_data` | data ya ziada yoyote kama baiti ghafi | +| `base_fee_per_gas` | thamani ya ada ya msingi | +| `block_hash` | Hashi ya bloku ya utekelezaji | +| `transactions_root` | hashi ya msingi ya miamala katika payload | +| `withdrawal_root` | hashi ya msingi ya utoaji fedha katika payload | + +`execution_payload` yenyewe ina yafuatayo (kumbuka hii inafanana na kichwa isipokuwa badala ya hashi ya msingi ya miamala inajumuisha orodha halisi ya miamala na taarifa za utoaji fedha) : + +| Sehemu | Maelezo | +| :----------------- | :--------------------------------------------------------------------------------- | +| `parent_hash` | hashi ya bloku mzazi | +| `fee_recipient` | anwani ya akaunti ya kulipia ada za muamala | +| `state_root` | hashi ya msingi kwa hali ya kimataifa baada ya kutumia mabadiliko katika bloku hii | +| `receipts_root` | hashi ya trie ya risiti za miamala | +| `logs_bloom` | muundo wa data wenye kumbukumbu za matukio | +| `prev_randao` | thamani inayotumika katika uteuzi wa mthibitishaji bila mpangilio | +| `block_number` | nambari ya bloku ya sasa | +| `gas_limit` | kiwango cha juu cha gesi kinachoruhusiwa katika bloku hii | +| `gas_used` | kiasi halisi cha gesi kilichotumika katika bloku hii | +| `timestamp` | muda wa bloku | +| `extra_data` | data ya ziada yoyote kama baiti ghafi | +| `base_fee_per_gas` | thamani ya ada ya msingi | +| `block_hash` | Hashi ya bloku ya utekelezaji | +| `miamala` | orodha ya miamala itakayotekelezwa | +| `kutoa` | orodha ya vitu vya utoaji fedha | + +Orodha ya `withdrawals` ina vitu vya `withdrawal` vilivyopangwa kwa njia ifuatayo: + +| Sehemu | Maelezo | +| :--------------- | :----------------------------------- | +| `anwani` | anwani ya akaunti iliyotoa fedha | +| `amount` | kiasi cha utoaji fedha | +| `index` | thamani ya faharasa ya utoaji fedha | +| `validatorIndex` | thamani ya faharasa ya mthibitishaji | + +## Muda wa bloku {#block-time} + +Muda wa bloku unarejelea muda unaotenganisha bloku. Katika Ethereum, muda umegawanywa katika vipande vya sekunde kumi na mbili vinavyoitwa 'nafasi'. Katika kila nafasi mthibitishaji mmoja huchaguliwa kupendekeza bloku. Ikichukuliwa kuwa wathibitishaji wote wako mtandaoni na wanafanya kazi kikamilifu, kutakuwa na bloku katika kila nafasi, ikimaanisha muda wa bloku ni sekunde 12. Hata hivyo, mara kwa mara wathibitishaji wanaweza kuwa nje ya mtandao wanapoitwa kupendekeza bloku, ikimaanisha nafasi zinaweza kuwa tupu wakati mwingine. + +Utekelezaji huu ni tofauti na mifumo inayotegemea uthibitishaji-wa-kazi ambapo muda wa bloku ni wa uwezekano na hurekebishwa na ugumu unaolengwa wa uchimbaji wa itifaki. [Muda wa wastani wa bloku](https://etherscan.io/chart/blocktime) wa Ethereum ni mfano kamili wa hili ambapo mpito kutoka uthibitishaji-wa-kazi kwenda uthibitisho wa hisa unaweza kufahamika wazi kulingana na uthabiti wa muda mpya wa bloku wa sekunde 12. + +## Ukubwa wa bloku {#block-size} + +Jambo la mwisho muhimu la kuzingatia ni kwamba bloku zenyewe zina ukomo wa ukubwa. Kila bloku ina ukubwa unaolengwa wa gesi milioni 30 lakini ukubwa wa bloku utaongezeka au kupungua kulingana na mahitaji ya mtandao, hadi kufikia kikomo cha bloku cha gesi milioni 60 (mara 2 ya ukubwa unaolengwa wa bloku). Kikomo cha gesi cha bloku kinaweza kurekebishwa juu au chini kwa sababu ya 1/1024 kutoka kwa kikomo cha gesi cha bloku iliyotangulia. Kutokana na hayo, wathibitishaji wanaweza kubadilisha kikomo cha gesi cha bloku kupitia makubaliano. Jumla ya kiasi cha gesi kinachotumiwa na miamala yote katika bloku lazima iwe chini ya kikomo cha gesi cha bloku. Hii ni muhimu kwa sababu inahakikisha kwamba bloku haziwezi kuwa na ukubwa wa kiholela. Kama bloku zingeweza kuwa na ukubwa wa kiholela, basi nodi kamili zenye utendaji duni zingeacha polepole kuweza kwenda sambamba na mtandao kwa sababu ya mahitaji ya nafasi na kasi. Kadiri bloku inavyokuwa kubwa, ndivyo nguvu kubwa zaidi ya kompyuta inavyohitajika kuzichakata kwa wakati kwa ajili ya nafasi inayofuata. Hii ni nguvu ya uwekaji wa mamlaka kati, ambayo inapingwa kwa kuweka ukomo wa ukubwa wa bloku. + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Miamala](/developers/docs/transactions/) +- [Gesi](/developers/docs/gas/) +- [Uthibitisho wa Hisa](/developers/docs/consensus-mechanisms/pos) diff --git a/public/content/translations/sw/developers/docs/bridges/index.md b/public/content/translations/sw/developers/docs/bridges/index.md new file mode 100644 index 00000000000..4fbf2b47312 --- /dev/null +++ b/public/content/translations/sw/developers/docs/bridges/index.md @@ -0,0 +1,138 @@ +--- +title: Madaraja +description: Muhtasari wa kuunda madaraja kwa ajili ya wasanidi programu +lang: sw +--- + +Kutokana na kuongezeka kwa minyororo ya bloku ya L1 na suluhu za [uongezaji](/developers/docs/scaling/) wa L2, pamoja na idadi inayoongezeka ya programu zilizogatuliwa zinazovuka minyororo, hitaji la mawasiliano na uhamishaji wa rasilimali kwenye minyororo limekuwa sehemu muhimu ya miundombinu ya mtandao. Kuna aina tofauti za madaraja zinazosaidia kufanya hili liwezekane. + +## Haja ya madaraja {#need-for-bridges} + +Madaraja yapo ili kuunganisha mitandao ya blokucheni. Huwezesha muunganisho na utangamano kati ya minyororo ya bloku. + +Minyororo ya bloku ipo katika mazingira yaliyotengwa, ikimaanisha hakuna njia ya minyororo ya bloku kufanya biashara na kuwasiliana na minyororo mingine ya bloku kiasili. Matokeo yake, ingawa kunaweza kuwa na shughuli kubwa na uvumbuzi ndani ya mfumo ikolojia, inazuiliwa na ukosefu wa muunganisho na utangamano na mifumo mingine ikolojia. + +Madaraja hutoa njia kwa mazingira ya minyororo ya bloku yaliyotengwa kuungana. Huanzisha njia ya usafirishaji kati ya minyororo ya bloku ambapo tokeni, ujumbe, data holela, na hata wito za [mkataba-erevu](/developers/docs/smart-contracts/) zinaweza kuhamishwa kutoka mnyororo mmoja hadi mwingine. + +## Faida za madaraja {#benefits-of-bridges} + +Kwa ufupi, madaraja hufungua visa vingi vya utumiaji kwa kuruhusu mitandao ya minyororo ya bloku kubadilishana data na kuhamisha rasilimali baina yao. + +Minyororo ya bloku ina nguvu, udhaifu na mbinu za kipekee za kuunda programu (kama vile kasi, upitishaji, gharama, n.k.). Madaraja husaidia maendeleo ya mfumo ikolojia mzima wa crypto kwa kuwezesha minyororo ya bloku kutumia ubunifu wa kila mmoja. + +Kwa wasanidi programu, madaraja huwezesha yafuatayo: + +- uhamishaji wa data, taarifa, na rasilimali zozote kwenye minyororo. +- kufungua vipengele vipya na visa vya utumiaji kwa ajili ya itifaki kwani madaraja hupanua nafasi ya usanifu kwa kile ambacho itifaki zinaweza kutoa. Kwa mfano, itifaki ya kilimo cha mavuno iliyotumwa awali kwenye Mtandao Mkuu wa Ethereum inaweza kutoa vidimbwi vya ukwasi kwenye minyororo yote inayotangamana na EVM. +- fursa ya kutumia nguvu za minyororo tofauti ya bloku. Kwa mfano, wasanidi programu wanaweza kufaidika na ada za chini zinazotolewa na suluhu mbalimbali za L2 kwa kutuma dApps zao kwenye unda-mpya na sidechains na watumiaji wanaweza kutumia daraja baina yao. +- ushirikiano kati ya wasanidi programu kutoka mifumo ikolojia mbalimbali ya minyororo ya bloku ili kuunda bidhaa mpya. +- kuvutia watumiaji na jamii kutoka mifumo mbalimbali ikolojia hadi kwenye dApps zao. + +## Madaraja hufanyaje kazi? {#how-do-bridges-work} + +Ingawa kuna [aina nyingi za miundo ya madaraja](https://li.fi/knowledge-hub/blockchain-bridges-and-classification/), njia tatu za kuwezesha uhamishaji wa rasilimali kwenye minyororo tofauti hujitokeza: + +- **Funga na unda –** Funga rasilimali kwenye mnyororo chanzo na unda rasilimali kwenye mnyororo lengwa. +- **Teketeza na unda –** Teketeza rasilimali kwenye mnyororo chanzo na unda rasilimali kwenye mnyororo lengwa. +- **Ubadilishanaji wa atomiki –** Badilisha rasilimali kwenye mnyororo chanzo kwa rasilimali kwenye mnyororo lengwa na upande mwingine. + +## Aina za madaraja {#bridge-types} + +Madaraja kwa kawaida yanaweza kuainishwa katika mojawapo ya makundi yafuatayo: + +- **Madaraja ya asili –** Madaraja haya kwa kawaida hujengwa ili kuanzisha ukwasi kwenye mnyororo fulani wa bloku, na kurahisisha watumiaji kuhamisha fedha kwenye mfumo ikolojia. Kwa mfano, [Daraja la Arbitrum](https://bridge.arbitrum.io/) limejengwa ili kurahisisha watumiaji kutumia daraja kutoka Mtandao Mkuu wa Ethereum kwenda Arbitrum. Madaraja mengine kama hayo ni pamoja na Daraja la PoS la Polygon, [Lango la Optimism](https://app.optimism.io/bridge), n.k. +- **Madaraja yanayotegemea wathibitishaji au oracles –** Madaraja haya hutegemea seti ya wathibitishaji wa nje au oracles ili kuthibitisha uhamishaji wa minyororo-tofauti. Mifano: Multichain na Across. +- **Madaraja ya upitishaji ujumbe yaliyo jumla –** Madaraja haya yanaweza kuhamisha rasilimali, pamoja na ujumbe na data holela kwenye minyororo. Mifano: Axelar, LayerZero, na Nomad. +- **Mitandao ya ukwasi –** Madaraja haya hulenga hasa kuhamisha rasilimali kutoka mnyororo mmoja hadi mwingine kupitia ubadilishanaji wa atomiki. Kwa ujumla, hayaauni upitishaji wa ujumbe kwenye minyororo-tofauti. Mifano: Connext na Hop. + +## Mambo ya kubadilishana ya kuzingatia {#trade-offs} + +Kuhusu madaraja, hakuna suluhu kamilifu. Badala yake, kuna mabadilishano tu yanayofanywa ili kutimiza kusudi. Wasanidi programu na watumiaji wanaweza kutathmini madaraja kulingana na mambo yafuatayo: + +- **Usalama –** Nani anathibitisha mfumo? Madaraja yanayolindwa na wathibitishaji wa nje kwa kawaida si salama sana kuliko madaraja yanayolindwa ndani ya nchi au asili na wathibitishaji wa mnyororo wa bloku. +- **Urahisi –** Inachukua muda gani kukamilisha muamala, na je, mtumiaji alihitaji kusaini miamala mingapi? Kwa msanidi programu, inachukua muda gani kuunganisha daraja, na mchakato ni mgumu kiasi gani? +- **Muunganisho –** Je, ni minyororo gani tofauti lengwa ambayo daraja linaweza kuunganisha (k.m., unda-mpya, sidechains, minyororo mingine ya bloku ya safu ya 1, n.k.), na ni vigumu kiasi gani kuunganisha mnyororo mpya wa bloku? +- **Uwezo wa kupitisha data changamano zaidi –** Je, daraja linaweza kuwezesha uhamishaji wa ujumbe na data holela changamano zaidi kwenye minyororo, au linasaidia tu uhamishaji wa rasilimali kwenye minyororo-tofauti? +- **Ufanisi wa gharama –** Inagharimu kiasi gani kuhamisha rasilimali kwenye minyororo kupitia daraja? Kwa kawaida, madaraja hutoza ada isiyobadilika au inayobadilika kulingana na gharama za gesi na ukwasi wa njia maalum. Pia ni muhimu kutathmini ufanisi wa gharama wa daraja kulingana na mtaji unaohitajika ili kuhakikisha usalama wake. + +Kwa kiwango cha juu, madaraja yanaweza kugawanywa kama yanayoaminika na yasiyo na uaminifu. + +- **Yanayoaminika –** Madaraja yanayoaminika yanathibitishwa na wahusika wa nje. Hutumia seti ya nje ya wathibitishaji (Mashirikisho yenye sahihi-nyingi, mifumo ya ukokotoaji ya wahusika wengi, mtandao wa oracle) kutuma data kwenye minyororo. Matokeo yake, yanaweza kutoa muunganisho mzuri na kuwezesha upitishaji wa ujumbe ulio jumla kabisa kwenye minyororo. Pia huwa yanafanya vizuri kwa kasi na ufanisi wa gharama. Hii inakuja kwa gharama ya usalama, kwani watumiaji wanapaswa kutegemea usalama wa daraja. +- **Yasiyo na uaminifu –** Madaraja haya hutegemea minyororo ya bloku wanayounganisha na wathibitishaji wao kuhamisha ujumbe na tokeni. Haya 'hayana uaminifu' kwa sababu hayaongezi dhana mpya za uaminifu (pamoja na minyororo ya bloku). Matokeo yake, madaraja yasiyo na uaminifu yanachukuliwa kuwa salama zaidi kuliko madaraja yanayoaminika. + +Ili kutathmini madaraja yasiyo na uaminifu kulingana na mambo mengine, lazima tuyagawanye katika madaraja ya upitishaji wa ujumbe yaliyo jumla na mitandao ya ukwasi. + +- **Madaraja ya upitishaji ujumbe yaliyo jumla –** Madaraja haya hufanya vizuri sana kwa usalama na uwezo wa kuhamisha data changamano zaidi kwenye minyororo. Kwa kawaida, pia ni mazuri kwa ufanisi wa gharama. Hata hivyo, nguvu hizi kwa ujumla huja kwa gharama ya muunganisho kwa madaraja ya wateja wepesi (k.m., IBC) na hasara za kasi kwa madaraja ya matumaini (k.m., Nomad) yanayotumia ushahidi wa ulaghai. +- **Mitandao ya ukwasi –** Madaraja haya hutumia ubadilishanaji wa atomiki kuhamisha rasilimali na ni mifumo iliyothibitishwa ndani (yaani, hutumia wathibitishaji wa minyororo ya bloku ya msingi kuthibitisha miamala). Matokeo yake, hufanya vizuri sana kwa usalama na kasi. Zaidi ya hayo, yanachukuliwa kuwa na ufanisi wa gharama kwa kulinganisha na hutoa muunganisho mzuri. Hata hivyo, mbadilishano mkuu ni kutokuwa na uwezo wa kupitisha data changamano zaidi – kwani hayaauni upitishaji wa ujumbe kwenye minyororo-tofauti. + +## Hatari zinazohusiana na madaraja {#risk-with-bridges} + +Madaraja yanahusika na [udukuzi tatu kubwa zaidi katika DeFi](https://rekt.news/leaderboard/) na bado yako katika hatua za awali za maendeleo. Kutumia daraja lolote kuna hatari zifuatazo: + +- **Hatari ya mkataba-erevu –** Ingawa madaraja mengi yamefaulu kupita ukaguzi, kinachohitajika ni kasoro moja tu katika mkataba-erevu ili rasilimali ziwe wazi kwa udukuzi (k.m., [Daraja la Wormhole la Solana](https://rekt.news/wormhole-rekt/)). +- **Hatari za kifedha za kimfumo** – Madaraja mengi hutumia rasilimali zilizofungwa ili kuunda matoleo ya kikanuni ya rasilimali asili kwenye mnyororo mpya. Hii huweka mfumo ikolojia kwenye hatari ya kimfumo, kama tulivyoona matoleo yaliyofungwa ya tokeni yakitumiwa vibaya. +- **Hatari ya mhusika mwingine –** Baadhi ya madaraja hutumia muundo unaoaminika unaohitaji watumiaji kutegemea dhana kwamba wathibitishaji hawatashirikiana kuiba fedha za watumiaji. Haja ya watumiaji kuwaamini wahusika hawa wa tatu huwaweka katika hatari kama vile uvutaji zulia, udhibiti, na shughuli nyingine hasidi. +- **Masuala yaliyo wazi –** Kwa kuwa madaraja yako katika hatua za awali za maendeleo, kuna maswali mengi yasiyo na majibu yanayohusiana na jinsi madaraja yatakavyofanya kazi katika hali tofauti za soko, kama vile nyakati za msongamano wa mtandao na wakati wa matukio yasiyotarajiwa kama vile mashambulizi ya kiwango cha mtandao au urejeshaji wa hali. Kutokuwa na uhakika huu huleta hatari fulani, ambazo kiwango chake bado hakijulikani. + +## Je, dApps zinawezaje kutumia madaraja? {#how-can-dapps-use-bridges} + +Hapa kuna baadhi ya matumizi ya vitendo ambayo wasanidi programu wanaweza kuzingatia kuhusu madaraja na kupeleka dApp yao kwenye minyororo-tofauti: + +### Kuunganisha madaraja {#integrating-bridges} + +Kwa wasanidi programu, kuna njia nyingi za kuongeza usaidizi kwa madaraja: + +1. **Kujenga daraja lako mwenyewe –** Kujenga daraja salama na la kuaminika si rahisi, hasa ukichukua njia iliyopunguzwa uaminifu. Zaidi ya hayo, inahitaji miaka ya uzoefu na utaalamu wa kiufundi unaohusiana na masomo ya uongezaji na utangamano. Zaidi ya hayo, ingehitaji timu ya vitendo ili kudumisha daraja na kuvutia ukwasi wa kutosha ili kuifanya iwezekane. + +2. **Kuwaonyesha watumiaji chaguo nyingi za madaraja –** [dApps](/developers/docs/dapps/) nyingi huhitaji watumiaji wawe na tokeni yao asili ili kuingiliana nazo. Ili kuwawezesha watumiaji kufikia tokeni zao, hutoa chaguo tofauti za madaraja kwenye tovuti yao. Hata hivyo, njia hii ni suluhu ya haraka kwa tatizo kwani humwondoa mtumiaji kwenye kiolesura cha dApp na bado inamhitaji aingiliane na dApps na madaraja mengine. Huu ni uzoefu mgumu wa kuanza kutumia wenye wigo ulioongezeka wa kufanya makosa. + +3. **Kuunganisha daraja –** Suluhu hii haihitaji dApp kuwatuma watumiaji kwenye daraja la nje na violesura vya DEX. Inaruhusu dApps kuboresha uzoefu wa mtumiaji anayeanza. Hata hivyo, mbinu hii ina mapungufu yake: + + - Tathmini na matengenezo ya madaraja ni magumu na huchukua muda mwingi. + - Kuchagua daraja moja huunda sehemu moja ya kutofaulu na utegemezi. + - dApp inawekewa mipaka na uwezo wa daraja. + - Madaraja pekee huenda yasitoshe. dApps zinaweza kuhitaji DEXs kutoa utendaji zaidi kama vile ubadilishanaji wa minyororo-tofauti. + +4. **Kuunganisha madaraja mengi –** Suluhu hii hutatua matatizo mengi yanayohusiana na kuunganisha daraja moja. Hata hivyo, pia ina mapungufu, kwani kuunganisha madaraja mengi hutumia rasilimali nyingi na huleta gharama za ziada za kiufundi na mawasiliano kwa wasanidi programu—rasilimali adimu zaidi katika crypto. + +5. **Kuunganisha mkusanyaji wa madaraja –** Chaguo jingine kwa dApps ni kuunganisha suluhisho la mkusanyiko wa madaraja ambalo huwapa ufikiaji wa madaraja mengi. Wakusanyaji wa madaraja hurithi nguvu za madaraja yote na hivyo hawazuiliwi na uwezo wa daraja lolote moja. Hasa, wakusanyaji wa madaraja kwa kawaida hudumisha uunganishaji wa madaraja, jambo ambalo huiepusha dApp na usumbufu wa kufuatilia masuala ya kiufundi na kiutendaji ya uunganishaji wa daraja. + +Hata hivyo, wakusanyaji wa madaraja pia wana mapungufu yao. Kwa mfano, ingawa wanaweza kutoa chaguo zaidi za madaraja, kwa kawaida kuna madaraja mengi zaidi yanayopatikana sokoni kuliko yale yanayotolewa kwenye jukwaa la mkusanyaji. Zaidi ya hayo, kama vile madaraja, wakusanyaji wa madaraja pia wako wazi kwa hatari za mkataba-erevu na teknolojia (mikataba-erevu zaidi = hatari zaidi). + +Ikiwa dApp itafuata njia ya kuunganisha daraja au mkusanyaji, kuna chaguo tofauti kulingana na jinsi uunganishaji unavyokusudiwa kuwa wa kina. Kwa mfano, ikiwa ni uunganishaji wa mbele tu ili kuboresha uzoefu wa kuanza kwa mtumiaji, dApp itaunganisha wijeti. Hata hivyo, ikiwa uunganishaji ni kuchunguza mikakati ya kina ya minyororo-tofauti kama vile kusimamisha, kilimo cha mavuno, n.k., dApp huunganisha SDK au API. + +### Kutuma dApp kwenye minyororo mingi {#deploying-a-dapp-on-multiple-chains} + +Ili kutuma dApp kwenye minyororo mingi, wasanidi programu wanaweza kutumia majukwaa ya maendeleo kama [Alchemy](https://www.alchemy.com/), [Hardhat](https://hardhat.org/), [Moralis](https://moralis.io/), n.k. Kwa kawaida, majukwaa haya huja na programu-jalizi zinazoweza kutungika ambazo zinaweza kuwezesha dApps kwenda kwenye minyororo-tofauti. Kwa mfano, wasanidi programu wanaweza kutumia proksi ya utumaji ya kudhamiria inayotolewa na [programu-jalizi ya hardhat-deploy](https://github.com/wighawag/hardhat-deploy). + +#### Mifano: + +- [Jinsi ya kuunda dApps za minyororo-tofauti](https://moralis.io/how-to-build-cross-chain-dapps/) +- [Kuunda Soko la NFT la Minyororo-Tofauti](https://youtu.be/WZWCzsB1xUE) +- [Moralis: Kuunda dApps za NFT za minyororo-tofauti](https://www.youtube.com/watch?v=ehv70kE1QYo) + +### Kufuatilia shughuli za mkataba kwenye minyororo {#monitoring-contract-activity-across-chains} + +Ili kufuatilia shughuli za mkataba kwenye minyororo, wasanidi programu wanaweza kutumia subgrafu na majukwaa ya wasanidi programu kama Tenderly ili kuchunguza mikataba-erevu kwa wakati halisi. Majukwaa kama haya pia yana zana zinazotoa utendaji mkuu zaidi wa ufuatiliaji wa data kwa shughuli za minyororo-tofauti, kama vile kuangalia [matukio yanayotolewa na mikataba](https://docs.soliditylang.org/en/v0.8.14/contracts.html?highlight=events#events), n.k. + +#### Zana + +- [The Graph](https://thegraph.com/en/) +- [Tenderly](https://tenderly.co/) + +## Masomo zaidi {#further-reading} + +- [Madaraja ya Mnyororo wa bloku](/bridges/) – ethereum.org +- [Mfumo wa Hatari wa Daraja wa L2Beat](https://l2beat.com/bridges/summary) +- [Madaraja ya Mnyororo wa bloku: Kujenga Mitandao ya Mitandao ya Crypto](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) - Sep 8, 2021 – Dmitriy Berenzon +- [Utata wa Utangamano](https://blog.connext.network/the-interoperability-trilemma-657c2cf69f17) - Okt 1, 2021 – Arjun Bhuptani +- [Makundi: Jinsi Madaraja Yanayoaminika na Yaliyopunguzwa Uaminifu Yanavyounda Mandhari ya Minyororo-Mingi](https://blog.celestia.org/clusters/) - Okt 4, 2021 – Mustafa Al-Bassam +- [LI.FI: Kwa Madaraja, Uaminifu ni Wigo](https://blog.li.fi/li-fi-with-bridges-trust-is-a-spectrum-354cd5a1a6d8) - Apr 28, 2022 – Arjun Chand +- [Hali ya Suluhu za Utangamano za Unda-mpya](https://web.archive.org/web/20250428015516/https://research.2077.xyz/the-state-of-rollup-interoperability) - Juni 20, 2024 – Alex Hook +- [Kutumia Usalama wa Pamoja kwa Utangamano Salama wa Minyororo-Tofauti: Kamati za Hali za Lagrange na Zaidi](https://web.archive.org/web/20250125035123/https://research.2077.xyz/harnessing-shared-security-for-secure-blockchain-interoperability) - Juni 12, 2024 – Emmanuel Awosika + +Zaidi ya hayo, hapa kuna mawasilisho yenye ufahamu wa kina na [James Prestwich](https://twitter.com/_prestwich) ambayo yanaweza kusaidia kukuza uelewa wa kina wa madaraja: + +- [Kujenga Madaraja, Sio Bustani Zenye Ukuta](https://youtu.be/ZQJWMiX4hT0) +- [Kuchambua Madaraja](https://youtu.be/b0mC-ZqN8Oo) +- [Kwa Nini Madaraja Yanaungua](https://youtu.be/c7cm2kd20j8) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/index.md new file mode 100644 index 00000000000..70ef8e036a0 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/index.md @@ -0,0 +1,92 @@ +--- +title: Utaratibu wa makubaliano +description: Ufafanuzi wa itifaki za makubaliano katika mifumo iliyosambazwa na jukumu wanalocheza katika Ethereum. +lang: sw +--- + +Neno 'utaratibu wa makubaliano' mara nyingi hutumika kwa mazungumzo kurejelea 'uthibitisho-wa-stake', 'uthibitisho-wa-kazi' au 'uthibitisho-wa-mamlaka'. Hata hivyo, hivi ni vipengele tu katika utaratibu wa makubaliano unaolinda dhidi ya [mashambulizi ya Sybil](/glossary/#sybil-attack). Mbinu za Makubaliano ni mkusanyiko kamili wa mawazo, itifaki na motisha zinazowezesha seti iliyosambazwa ya nodi kukubaliana juu ya hali ya kiambajengo. + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri, tunapendekeza kwanza usome [utangulizi wetu wa Ethereum](/developers/docs/intro-to-ethereum/). + +## Makubaliano ni nini? {#what-is-consensus} + +Kwa makubaliano, tunamaanisha kuwa makubaliano ya jumla yamefikiwa. Fikiria kikundi cha watu wanaoenda kwenye sinema. Ikiwa hakuna kutokubaliana juu ya uchaguzi uliopendekezwa wa filamu, basi makubaliano yanapatikana. Ikiwa kuna kutokubaliana, kikundi lazima kiwe na njia ya kuamua ni filamu gani itaonyeshwa. Katika hali mbaya, kikundi hatimaye kitagawanyika. + +Kuhusiana na kiambajengo cha Ethereum, mchakato huo umewekwa rasmi, na kufikia makubaliano ina maana kwamba angalau 66% ya nodi kwenye mtandao hukubaliana juu ya hali ya kimataifa ya mtandao. + +## Utaratibu wa makubaliano ni nini? {#what-is-a-consensus-mechanism} + +Neno utaratibu wa makubaliano hurejelea rundo zima la itifaki, motisha na mawazo ambayo huruhusu mtandao wa nodi kukubaliana juu ya hali ya kiambajengo. + +Ethereum hutumia utaratibu wa makubaliano wa uthibitisho wa stake unaopata usalama wake wa kiuchumi wa kripto kutoka kwa seti ya zawadi na adhabu zinazotumika kwa mtaji uliofungwa na wahusika. Muundo huu wa motisha huwahimiza washikadau binafsi kutumia vithibitishaji waaminifu, huwaadhibu wale wasiofanya hivyo, na huleta gharama ya juu sana kushambulia mtandao. + +Kisha, kuna itifaki ambayo inasimamia jinsi wathibitishaji waaminifu wanachaguliwa ili kupendekeza au kuthibitisha vitalu, mchakato wa shughuli na kupiga kura kwa maoni yao ya mkuu wa mnyororo. Katika hali nadra ambapo vitalu vingi viko katika nafasi sawa karibu na kichwa cha mnyororo, kuna utaratibu wa kuchagua uma unaochagua vitalu vinavyounda mnyororo 'mzito zaidi', unaopimwa kwa idadi ya viidhinishi vilivyopiga kura kwa vitalu vilivyopimwa kwa salio lao la etha lililowekwa kigingi. + +Baadhi ya dhana ni muhimu kwa maafikiano ambayo hayajafafanuliwa kwa uwazi katika msimbo, kama vile usalama wa ziada unaotolewa na uratibu wa kijamii wa nje ya bendi kama njia ya mwisho ya ulinzi dhidi ya mashambulizi kwenye mtandao. + +Vipengele hivi kwa pamoja huunda utaratibu wa makubaliano. + +## Aina za taratibu za makubaliano {#types-of-consensus-mechanisms} + +### Kulingana na Uthibitisho wa kazi {#proof-of-work} + +Kama Bitcoin, Ethereum hapo awali ilitumia itifaki ya makubaliano inayotegemea **uthibitisho wa kazi (PoW)**. + +#### Uundaji wa Bloku {#pow-block-creation} + +Wachimbaji madini hushindana kuunda vitalu vipya vilivyojazwa na miamala iliyochakatwa. Mshindi hushiriki kitalu kipya na mtandao wengine na hupata ETH mpya iliyotengenezwa hivi karibuni. Mbio hizo hushinda kwa kompyuta ambayo ina uwezo wa kutatua fumbo la hesabu haraka sana. Hii hutoa kiunga cha kriptografia kati ya kitalu cha sasa na kitalu kilichotangulia. Kutatua fumbo hili ni kazi katika "uthibitisho wa kazi". Mnyororo wa canonical kisha huamuliwa na sheria ya kuchagua uma ambayo huchagua seti ya vitalu ambavyo vimekuwa na kazi kubwa zaidi ya kuzichimba. + +#### Usalama {#pow-security} + +Mtandao umewekwa salama kwa kuwa utahitaji 51% ya nguvu ya kompyuta ya mtandao ili kulaghai mnyororo. Hii ingehitaji uwekezaji mkubwa kama huu katika vifaa na nishati; una uwezekano wa kutumia zaidi ya unayoweza kupata. + +Maelezo zaidi kuhusu [uthibitisho wa kazi](/developers/docs/consensus-mechanisms/pow/) + +### Kulingana na Uthibitisho wa Rehani {#proof-of-stake} + +Ethereum sasa inatumia itifaki ya makubaliano inayotegemea **uthibitisho wa rehani (PoS)**. + +#### Uundaji wa Bloku {#pos-block-creation} + +Kidhibiti cha kuunda kitalu. Kithibitishaji kimoja kimechaguliwa kwa nasibu katika kila nafasi kuwa mpendekezaji wa kitalu. Mteja wao wa makubaliano anaomba fungu la miamala na malipo ya utekelezaji kutoka kwa mteja wao wa utekelezaji waliooanishwa. Wanafunga hii kwa data ya makubaliano ili kuunda kitalu, ambayo hutuma kwa nodi nyingine kwenye mtandao wa Ethereum. Uzalishaji huu wa kitalu hutuzwa katika ETH. Katika hali nadra wakati vitalu vingi vinavyowezekana vipo kwa nafasi moja, au nodi husikia juu ya vitalu kwa nyakati tofauti, algorithm ya uchaguzi wa uma huchagua kitalu kinachounda mnyororo wenye uzito mkubwa wa uthibitisho (ambapo uzani ni idadi ya wathibitishaji wanaothibitisha kupunguzwa kwa usawa wao wa ETH). + +#### Usalama {#pos-security} + +Mfumo wa uthibitisho wa dau ni salama kwa njia ya kripto-kiuchumi kwa sababu mvamizi anayejaribu kuchukua udhibiti wa mnyororo lazima aharibu kiasi kikubwa cha ETH. Mfumo wa zawadi huwapa motisha washikadau binafsi kuwa waaminifu, na adhabu huwakatisha tamaa wadau kutokana na kutenda kwa nia mbaya. + +Maelezo zaidi kuhusu [uthibitisho wa rehani](/developers/docs/consensus-mechanisms/pos/) + +### Mwongozo wa picha {#types-of-consensus-video} + +Tazama zaidi kuhusu aina tofauti za mbinu za makubaliano zinazotumika kwenye Ethereum: + + + +### Ukinzani wa Sybil na uteuzi wa mnyororo {#sybil-chain} + +Uthibitisho wa kazi na uthibitisho wa stake pekee sio itifaki ya makubaliano, lakini mara nyingi hurejelewa kama hivyo kwa urahisi. Kwa kweli ni mifumo ya upinzani ya Sybil na wateuzi wa waandishi vitalu; wao ni njia ya kuamua nani ni mwandishi wa vitalu hivi karibuni. Sehemu nyingine muhimu ni algorithm ya uteuzi wa mnyororo (aka chaguo la uma) ambayo huwezesha nodi kuchukua kitalu kimoja kilicho sahihi kwenye kichwa cha mnyororo katika hali ambapo vitalu vingi vipo katika nafasi sawa. + +**Ukinzani wa Sybil** hupima jinsi itifaki inavyokabiliana na shambulio la Sybil. Upinzani wa aina hii ya shambulio ni muhimu kwa kiambajengo cha mfumo mtawanyo na kuwawezesha wachimbaji na wathibitishaji kutuzwa kwa usawa kulingana na rasilimali iliyowekwa. Kuanzishwa kwa ishara hizi ni kiini cha kiambajengo ambacho itafunguliwa na kulipwa na mtumiaji kutoka kwa mtumiaji kulingana na kiasi cha fedha kilichowekwa. Ulinzi huu ni kikwazo cha kiuchumi kwa mashambulizi ya Sybil. + +**Kanuni ya uteuzi wa mnyororo** hutumika kuamua ni mnyororo upi ndio "sahihi". Bitcoin hutumia sheria ya "mnyororo mrefu zaidi", ambayo inamaanisha kuwa kiambajengo chochote nikirefu zaidi itakuwa ile ambayo nodi zingine zitakubali kuwa halali na kufanya kazi nayo. Kwa minyororo ya uthibitisho wa kazi, msururu mrefu zaidi hubainishwa na ugumu wa jumla wa uthibitisho wa kazi. Ethereum ilitumia sheria ndefu zaidi ya mnyororo; hata hivyo, kwa kuwa sasa Ethereum inaendeshwa kwa uthibitisho wa stake ilipitisha algorithm iliyosasishwa ya kuchagua uma ambayo inapima 'uzito' wa mnyororo. Uzito ni jumla iliyokusanywa ya kura za kiidhinishaji, zinazopimwa kwa stake ya wadhibiti vilivyowekwa kigingi. + +Ethereum hutumia utaratibu wa makubaliano unaojulikana kama [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) unaochanganya [Uthibitisho wa Rehani wa Casper FFG](https://arxiv.org/abs/1710.09437) na [kanuni ya uteuzi wa uma ya GHOST](https://arxiv.org/abs/2003.03052). + +## Masomo zaidi {#further-reading} + +- [Algorithm ya Makubaliano ya Mnyororo wa Bloku ni Nini?](https://academy.binance.com/en/articles/what-is-a-blockchain-consensus-algorithm) +- [Makubaliano ya Nakamoto ni nini? Mwongozo Kamili kwa Wanaoanza](https://blockonomi.com/nakamoto-consensus/) +- [Casper Inafanyaje Kazi?](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) +- [Kuhusu Usalama na Utendaji wa Minyororo ya Bloku ya Uthibitisho wa Kazi](https://eprint.iacr.org/2016/555.pdf) +- [Kosa la Byzantine](https://en.wikipedia.org/wiki/Byzantine_fault) + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Uthibitisho wa kazi](/developers/docs/consensus-mechanisms/pow/) +- [Uchimbaji](/developers/docs/consensus-mechanisms/pow/mining/) +- [Uthibitisho wa rehani](/developers/docs/consensus-mechanisms/pos/) +- [Uthibitisho wa Mamlaka](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/poa/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/poa/index.md new file mode 100644 index 00000000000..169ff2fbd5b --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/poa/index.md @@ -0,0 +1,80 @@ +--- +title: Uthibitisho wa mamlaka (PoA) +description: Maelezo ya itifaki ya makubaliano ya uthibitisho wa mamlaka na jukumu lake katika mfumo ikolojia wa mnyororo wa bloku. +lang: sw +--- + +**Uthibitisho wa mamlaka (PoA)** ni kanuni ya makubaliano inayotegemea sifa ambayo ni toleo lililorekebishwa la [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/). Hutumika zaidi na minyororo ya kibinafsi, testnet, na mitandao ya usanidi wa ndani. PoA ni kanuni ya makubaliano inayotegemea sifa ambayo inahitaji kuamini seti ya watiaji saini walioidhinishwa ili kutoa bloku, badala ya utaratibu unaotegemea hisa katika PoS. + +## Mahitaji ya awali {#prerequisites} + +Ili kuielewa ukurasa huu vizuri, tunapendekeza usome kwanza kuhusu [miamala](/developers/docs/transactions/), [bloku](/developers/docs/blocks/), na [taratibu za makubaliano](/developers/docs/consensus-mechanisms/). + +## Uthibitisho wa mamlaka (PoA) ni nini? {#what-is-poa} + +Uthibitisho wa mamlaka ni toleo lililorekebishwa la **[uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/) (PoS)** ambalo ni kanuni ya makubaliano inayotegemea sifa badala ya utaratibu unaotegemea hisa katika PoS. Istilahi hii ilianzishwa kwa mara ya kwanza mnamo 2017 na Gavin Wood, na kanuni hii ya makubaliano imekuwa ikitumika zaidi na minyororo ya kibinafsi, testnet na mitandao ya usanidi wa ndani, kwani inashinda hitaji la rasilimali za hali ya juu kama PoW, na inashinda masuala ya kuongezeka kwa PoS kwa kuwa na seti ndogo ya nodi zinazohifadhi mnyororo wa bloku na kutoa bloku. + +Uthibitisho wa mamlaka unahitaji kuamini seti ya watiaji saini walioidhinishwa ambao wamewekwa katika [bloku ya mwanzo](/glossary/#genesis-block). Katika utekelezaji mwingi wa sasa, watiaji saini wote walioidhinishwa huhifadhi nguvu na mapendeleo sawa wakati wa kuamua makubaliano ya mnyororo. Wazo la kusimamisha sifa ni kwamba kila mthibitishaji aliyeidhinishwa anajulikana vyema kwa kila mtu kupitia mambo kama vile mjue mteja wako (KYC), au kwa kuwa na shirika linalojulikana kuwa ndiye mthibitishaji pekee—kwa njia hii ikiwa mthibitishaji atafanya kosa lolote, utambulisho wake unajulikana. + +Kuna utekelezaji mwingi wa PoA, lakini utekelezaji wa kawaida wa Ethereum ni **clique**, ambayo inatekeleza [EIP-225](https://eips.ethereum.org/EIPS/eip-225). Clique ni rafiki kwa wasanidi programu na ni kiwango rahisi kutekeleza, kinachoauni aina zote za ulandanishi wa mteja. Utekelezaji mwingine unajumuisha [IBFT 2.0](https://besu.hyperledger.org/private-networks/concepts/poa) na [Aura](https://openethereum.github.io/Chain-specification). + +## Inavyofanya kazi {#how-it-works} + +Katika PoA, seti ya watiaji saini walioidhinishwa huchaguliwa ili kuunda bloku mpya. Watiaji saini huchaguliwa kulingana na sifa zao, na wao ndio pekee wanaoruhusiwa kuunda bloku mpya. Watiaji saini huchaguliwa kwa mtindo wa mzunguko, na kila mtiaji saini anaruhusiwa kuunda bloku katika muda maalum. Muda wa uundaji wa bloku umewekwa, na watiaji saini wanatakiwa kuunda bloku ndani ya muda huo. + +Sifa katika muktadha huu si jambo linaloweza kupimika bali ni sifa ya mashirika yanayojulikana kama Microsoft na Google, hivyo basi njia ya kuchagua watiaji saini wanaoaminika si ya kikanuni bali ni kitendo cha kawaida cha binadamu cha _kuamini_ ambapo chombo, tuseme kwa mfano Microsoft, huunda mtandao wa kibinafsi wa PoA kati ya mamia au maelfu ya kampuni zinazoanza na jukumu lenyewe kama mtiaji saini pekee anayeaminika na uwezekano wa kuongeza watiaji saini wengine wanaojulikana kama Google katika siku zijazo, kampuni zinazoanza, bila shaka, zingeamini Microsoft kutenda kwa uaminifu kila wakati na kutumia mtandao. Hii hutatua hitaji la kuweka hisa katika mitandao tofauti midogo/ya kibinafsi ambayo ilijengwa kwa madhumuni tofauti ili kuiweka ikiwa imegatuliwa na kufanya kazi, pamoja na hitaji la wachimbaji, ambalo hutumia nguvu na rasilimali nyingi. Baadhi ya mitandao ya kibinafsi hutumia kiwango cha PoA kama vile VeChain, na baadhi huirekebisha kama vile Binance ambayo hutumia [PoSA](https://academy.binance.com/en/glossary/proof-of-staked-authority-posa) ambayo ni toleo la kawaida lililorekebishwa la PoA na PoS. + +Mchakato wa kupiga kura unafanywa na watiaji saini wenyewe. Kila mtiaji saini hupiga kura kwa ajili ya kuongeza au kumwondoa mtiaji saini katika bloku yao wanapounda bloku mpya. Kura huhesabiwa na nodi, na watiaji saini huongezwa au kuondolewa kulingana na kura kufikia kiwango fulani cha `SIGNER_LIMIT`. + +Kunaweza kuwa na hali ambapo nyuma ndogo hutokea, ugumu wa bloku hutegemea kama bloku ilitiwa saini kwa zamu au nje ya zamu. Bloku za “kwa zamu” zina ugumu wa 2, na bloku za “nje ya zamu” zina ugumu wa 1. Katika kisa cha nyuma ndogo, mnyororo wenye watiaji saini wengi wanaofunga bloku “kwa zamu” utakusanya ugumu mwingi zaidi na kushinda. + +## Vekta za mashambulizi {#attack-vectors} + +### Watiaji saini hasidi {#malicious-signers} + +Mtumiaji hasidi anaweza kuongezwa kwenye orodha ya watiaji saini, au ufunguo/mashine ya kutia saini inaweza kuathiriwa. Katika hali kama hiyo itifaki inahitaji kuwa na uwezo wa kujilinda dhidi ya upangaji upya na barua taka. Suluhisho lililopendekezwa ni kwamba kwa orodha fulani ya watiaji saini N walioidhinishwa, mtiaji saini yeyote anaweza tu kutengeneza bloku 1 kati ya kila K. Hii inahakikisha kwamba uharibifu ni mdogo, na wathibitishaji waliosalia wanaweza kumpigia kura kumtoa mtumiaji hasidi. + +### Udhibiti {#censorship-attack} + +Vekta nyingine ya mashambulizi ya kuvutia ni ikiwa mtiaji saini (au kikundi cha watiaji saini) anajaribu kudhibiti bloku zinazopiga kura kuwaondoa kwenye orodha ya uidhinishaji. Ili kukabiliana na hili, marudio ya kutengeneza yanayoruhusiwa ya watiaji saini yamezuiliwa kwa 1 kati ya N/2. Hii inahakikisha kwamba watiaji saini hasidi wanahitaji kudhibiti angalau 51% ya akaunti za kutia saini, ambapo kwa wakati huo watakuwa chanzo kipya cha ukweli kwa mnyororo. + +### Barua taka {#spam-attack} + +Vekta nyingine ndogo ya mashambulizi ni watiaji saini hasidi wanaoanzisha mapendekezo mapya ya kura ndani ya kila bloku wanayotengeneza. Kwa kuwa nodi zinahitaji kuhesabu kura zote ili kuunda orodha halisi ya watiaji saini walioidhinishwa, ni lazima zirekodi kura zote kwa muda. Bila kuweka kikomo kwenye dirisha la kura, hii inaweza kukua polepole, lakini bila kikomo. Suluhisho ni kuweka dirisha _linalosonga_ la bloku W baada ya hapo kura huchukuliwa kuwa zimepitwa na wakati. _Dirisha linalofaa linaweza kuwa epoch 1-2._ + +### Bloku za wakati mmoja {#concurrent-blocks} + +Katika mtandao wa PoA, kunapokuwa na watiaji saini N walioidhinishwa, kila mtiaji saini anaruhusiwa kutengeneza bloku 1 kati ya K, ambayo ina maana kwamba wathibitishaji N-K+1 wanaruhusiwa kutengeneza kwa wakati wowote. Ili kuzuia wathibitishaji hawa kushindania bloku, kila mtiaji saini anapaswa kuongeza "tofauti" ndogo ya nasibu kwenye muda anaotoa bloku mpya. Ingawa mchakato huu unahakikisha kwamba nyuma ndogo ni nadra, nyuma za mara kwa mara bado zinaweza kutokea, kama vile Mtandao Mkuu. Ikiwa mtiaji saini atapatikana akitumia vibaya mamlaka yake na kusababisha fujo, watiaji saini wengine wanaweza kumpigia kura kumtoa. + +Ikiwa kwa mfano kuna watiaji saini 10 walioidhinishwa na kila mtiaji saini anaruhusiwa kuunda bloku 1 kati ya 20, basi wakati wowote, wathibitishaji 11 wanaweza kuunda bloku. Ili kuwazuia wasishindane kuunda bloku, kila mtiaji saini huongeza "tofauti" ndogo ya nasibu kwenye muda wanaotoa bloku mpya. Hii inapunguza kutokea kwa nyuma ndogo lakini bado inaruhusu nyuma za mara kwa mara, kama inavyoonekana kwenye Mtandao Mkuu wa Ethereum. Ikiwa mtiaji saini atatumia vibaya mamlaka yake na kusababisha usumbufu, anaweza kupigiwa kura kuondolewa kwenye mtandao. + +## Faida na hasara {#pros-and-cons} + +| Faida | Hasara | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Inaweza kuongezeka zaidi kuliko mifumo mingine maarufu kama PoS na PoW, kwani inategemea idadi ndogo ya watiaji saini wa bloku | Mitandao ya PoA kwa kawaida huwa na idadi ndogo ya nodi za kuthibitisha. Hii hufanya mtandao wa PoA kuwa wa kati zaidi. | +| Minyororo ya bloku ya PoA ni nafuu sana kuendesha na kudumisha | Kuwa mtiaji saini aliyeidhinishwa kwa kawaida huwa ni vigumu kwa mtu wa kawaida, kwa sababu mnyororo wa bloku unahitaji vyombo vyenye sifa iliyoimarika. | +| Miamala inathibitishwa haraka sana kwani inaweza kufikia chini ya sekunde 1 kwa sababu ni idadi ndogo tu ya watiaji saini wanaohitajika kuthibitisha bloku mpya | Watiaji saini hasidi wanaweza kupanga upya, kutumia mara mbili, kudhibiti miamala katika mtandao, mashambulizi hayo yanapunguzwa lakini bado yanawezekana | + +## Masomo zaidi {#further-reading} + +- [EIP-225](https://eips.ethereum.org/EIPS/eip-225) _Kiwango cha Clique_ +- [Utafiti wa Uthibitisho wa Mamlaka](https://github.com/cryptoeconomics-study/website/blob/master/docs/sync/2.4-lecture.md) _Cryptoeconomics_ +- [Uthibitisho wa Mamlaka ni Nini](https://forum.openzeppelin.com/t/proof-of-authority/3577) _OpenZeppelin_ +- [Ufafanuzi wa Uthibitisho wa Mamlaka](https://academy.binance.com/en/articles/proof-of-authority-explained) _binance_ +- [PoA katika mnyororo wa bloku](https://medium.com/techskill-brew/proof-of-authority-or-poa-in-blockchain-part-11-blockchain-series-be15b3321cba) +- [Ufafanuzi wa Clique](https://medium.com/@Destiner/clique-cross-client-proof-of-authority-algorithm-for-ethereum-8b2a135201d) +- [PoA iliyopitwa na wakati, vipimo vya Aura](https://openethereum.github.io/Chain-specification) +- [IBFT 2.0, utekelezaji mwingine wa PoA](https://besu.hyperledger.org/private-networks/concepts/poa) + +### Wewe ni mwanafunzi wa kuona zaidi? {#visual-learner} + +Tazama maelezo ya picha ya uthibitisho wa mamlaka: + + + +## Mada zinazohusiana {#related-topics} + +- [Uthibitisho wa kazi](/developers/docs/consensus-mechanisms/pow/) +- [Uthibitisho wa rehani](/developers/docs/consensus-mechanisms/pos/) + diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md new file mode 100644 index 00000000000..423ea2db6c0 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md @@ -0,0 +1,166 @@ +--- +title: Mashambulizi na Ulinzi wa uthibitisho wa hisa za Ethereum +description: Jifunze kuhusu njia mbalimbali zinazojulikana za kushambulia uthibitisho wa hisa za Ethereum na mbinu zinazotumika kujilinda dhidi ya mashambulizi hayo. +lang: sw +--- + +Wezi na waharibifu huwa mara nyingi wanatafuta mianya ya kushambulia programu za wateja wa Ethereum. Ukurasa huu unaeleza mbinu zinazojulikana za kushambulia safu ya makubaliano ya Ethereum na jinsi mashambulizi hayo yanavyoweza kuzuiwa. Taarifa zilizopo hapa zimetokana na [toleo refu zaidi la maelezo haya](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs). + +## Mahitaji ya awali {#prerequisites} + +Ufahamu wa msingi wa [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/) unahitajika. Pia, itasaidia kuwa na uelewa wa msingi wa [faida za Ethereum] (/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) na algoriti ya uchaguzi wa uma, [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper). + +## Washambuliaji wanataka nini? {#what-do-attackers-want} + +Dhana potofu inayojirudia ni kwamba mshambuliaji anayefanikiwa anaweza kuzalisha ether mpya au kuondoa ether kutoka kwenye akaunti yoyote anayoichagua. Hakuna kati ya haya yanayowezekana kwa sababu miamala yote inaendeshwa na wateja wote wa utekelezaji kwenye mtandao. Ni lazima yatimize masharti ya msingi ya uhalali (k.m., miamala imesainiwa na ufunguo binafsi wa mtumaji, mtumaji ana salio la kutosha, n.k.) la sivyo yanarudishwa. Kuna makundi matatu ya matokeo ambayo mshambuliaji anaweza kulenga: reorgs, double finality, au finality delay. + +**Reorg** ni mpangilio wa vitalu kwa mpangilio mpya, huenda kwa kuongeza au kupunguza vitalu kwenye mnyororo rasmi. Reorg ya kiuhalifu inaweza kuhakikisha vitalu fulani kujumuishwa au kuondolewa, jambo linaloweza kuruhusu matumizi mara mbili au kuchukua thamani kupitia mbinu za mbele-na-nyuma katika miamala(MEV). Pia, reorg zinaweza kutumika kuzuia baadhi ya miamala isijumuishwe kwenye mnyororo rasmi - aina ya udhibiti. Aina iliyokithiri zaidi ya reorg ni “kurudishwa kwa uthibitisho wa mwisho” ambapo vitalu vilivyokuwa tayari vimehakikishwa vinaondolewa au kubadilishwa. Hii inawezekana tu ikiwa zaidi ya ⅓ ya jumla ya ether iliyowekwa kama dhamana itaharibiwa na mshambuliaji - uhakika huu unajulikana kama “economic finality” - tutaeleza zaidi kuhusu hili baadae. + +"Double finality" ni hali isiyowezekana kwa urahisi lakini yenye madhara makubwa, ambapo matawi mawili ya mnyororo yanaweza kuthibitishwa kwa wakati mmoja, na kusababisha mgawanyiko wa kudumu kwenye mnyororo. Kidhana, hili linawezekana kwa mshambuliaji aliye tayari kuhatarisha 34% ya jumla ya ether iliyowekwa kama dhamana. Jamii ya watumiaji italazimika kuratibu maamuzi nje ya mtandao na kukubaliana ni mlolongo upi ufuatwe, jambo ambalo litahitaji mshikamano na nguvu katika kijamii. + +Shambulio la **ucheleweshaji wa uthibitisho wa mwisho** huzuia mtandao kufikia masharti muhimu ya kuthibitisha sehemu za mnyororo. Bila uthibitisho wa mwisho, ni vigumu kuamini programu za kifedha zilizojengwa juu ya Ethereum. Lengo la shambulio la aina hii mara nyingi ni kuvuruga mtandao wa Ethereum kuliko kupata faida ya moja kwa moja, au labda mshambuliaji awe na mkakati wa kupata faida kwenye ushukaji wa thamani wa Ethereum. + +Shambulio kwa jamii linaweza kulenga kudhoofisha imani ya umma kwa Ethereum, kushusha thamani ya ether, kupunguza matumizi yake, au kudhoofisha jamii ya Ethereum ili kufanya uratibu wa nje ya mtandao kuwa mgumu zaidi. + +Baada ya kueleza kwa nini mshambuliaji anaweza kushambulia Ethereum, sehemu zinazofuata zinaeleza jinsi gani wanaweza kufanya hivyo. + +## Mbinu za Mashambulizi {#methods-of-attack} + +### Mashambulizi ya Safu ya 0 {#layer-0} + +Kwanza kabisa, watu ambao hawashiriki moja kwa moja katika mtandao wa Ethereum (kupitia kuendesha programu za wateja) wanaweza kushambulia kwa kulenga safu ya kijamii (Layer 0). Safu ya 0 ndiyo msingi ambao Ethereum imejengwa juu yake, na kwa hivyo inawakilisha sehemu inayoweza kushambuliwa yenye madhara yanayoweza kuenea kwenye sehemu zote za mfumo. Baadhi ya mifano ni pamoja na: + +- Kampeni ya upotoshaji inayoweza kuharibu imani ambayo jumuiya inayo kwa ramani ya maendeleo ya Ethereum, timu za wasanidi, programu, n.k. Hii inaweza kupunguza idadi ya watu walioko tayari kushiriki katika kulinda mtandao, na hivyo kudhoofisha ugatuzi na usalama wa kiuchumi wa kripto. + +- Mashambulizi ya moja kwa moja au vitisho dhidi ya jamii ya wasanidi. Hili linaweza kusababisha baadhi ya wasanidi kuacha kwa hiari, na hatimaye kupunguza kasi ya maendeleo ya Ethereum. + +- Kanuni kali kupita kiasi zinaweza pia kuchukuliwa kama shambulio la Safu ya 0, kwa kuwa zinaweza kuondoa motisha haraka ya ushiriki na matumizi. + +- Upenyezaji wa watu wenye ujuzi lakini waovu ndani ya jamii ya wasanidi, ambao lengo lao ni kuchelewesha maendeleo kwa majadiliano yasiyo na tija, kuchelewesha maamuzi muhimu, kuunda taka ya kidijitali, n.k. + +- Rushwa kwa wachezaji muhimu katika mfumo wa Ethereum ili kushawishi maamuzi. + +Kinachofanya mashambulizi haya kuwa hatari zaidi ni kwamba mara nyingi hayahitaji mtaji mkubwa au ujuzi wa juu wa kiufundi. Shambulio la Safu ya 0 linaweza kuwa kizidishi cha shambulio la kripto kiuchumi. Kwa mfano, iwapo udhibiti wa taarifa au kurudishwa nyuma kwa uthibitisho wa mwisho vitafanywa na mshikiliaji mkubwa mwenye nia mbaya, kudhoofisha safu ya kijamii kunaweza kufanya iwe vigumu zaidi kuratibu mwitikio wa jumuiya nje ya mfumo rasmi. + +Kujilinda dhidi ya mashambulizi ya Layer 0 si jambo rahisi, lakini kanuni za msingi zinaweza kuwekwa. Moja wapo ni kuhakikisha kuwa kuna uwiano mzuri wa taarifa sahihi dhidi ya kelele za upotoshaji kuhusu Ethereum, zinazoundwa na kusambazwa na wanajamii waaminifu kupitia blogu, majukwaa ya Discord, maelezo ya viwango, vitabu, podikasti na YouTube. Hapa ethereum.org tunajitahidi sana kudumisha taarifa sahihi na kuzitafsiri katika lugha nyingi kadri inavyowezekana. Kusambaza taarifa sahihi na picha za kuchekesha nyingi ni njia bora ya kujikinga na upotoshaji. + +Ngome nyingine muhimu dhidi ya mashambulizi ya kijamii ni kuwa na tamko la wazi la dhamira na utaratibu wa utawala. Ethereum imejiweka kama kinara wa ugatuzi na usalama miongoni mwa safu ya 1 ya mikataba mahiri, huku pia ikithamini sana uwezo wa kupanuka na uendelevu. Haijalishi tofauti zipi zitakazojitokeza katika jamii ya Ethereum, kanuni hizi kuu hubaki zikiheshimiwa kwa kiwango cha juu kabisa. Kutathmini simulizi kwa kuzingatia kanuni hizi, na kuchambua mizunguko ya mapitio katika mchakato wa EIP (Ethereum Improvement Proposal), kunaweza kusaidia jamii kutofautisha waigizaji wazuri na wabaya, na kupunguza nafasi ya waharibifu kuathiri mwelekeo wa baadaye wa Ethereum. + +Mwisho, ni muhimu jamii ya Ethereum ibaki wazi na yenye kukaribisha washiriki wote. Jumuiya yenye wahakiki na upekee huwa ni rahisi kushambuliwa kijamii kwa sababu ni rahisi kujenga simulizi za “sisi na wao”. Ubagauzi wa kikabila na imani kwamba sarafu moja ndiyo pekee yenye thamani ya kweli na kwamba zote zingine hazina maana au ni udanganyifu huumiza jamii na kudhoofisha usalama wa safu ya 0. Wana-Ethereum wenye maslahi ya moja kwa moja katika usalama wa mtandao wanapaswa kuangalia mwenendo wao mtandaoni na katika maisha halisi kama mchango wa moja kwa moja katika usalama wa safu ya 0 la Ethereum. + +### Kushambulia Itifaki {#attacking-the-protocol} + +Mtu yeyote anaweza kuendesha programu ya mteja ya Ethereum. Ili kumuongeza mthibitishaji kwa mteja, mtumiaji anatakiwa kuweka ether 32 kwenye mkataba wa amana. Mthibitishaji humruhusu mtumiaji kushiriki kikamilifu katika usalama wa mtandao wa Ethereum kwa kupendekeza na kuthibitisha vitalu vipya. Mthibitishaji sasa ana sauti ambayo anaweza kuitumia kuathiri maudhui ya baadaye ya blockchain - anaweza kufanya hivyo kwa uaminifu na kukuza akiba yake ya ether kupitia zawadi, au anaweza kujaribu kudanganya mchakato kwa manufaa yake binafsi, akihatarisha amana yake. Njia moja wapo ya kushambulia ni kujikusanyia sehemu kubwa zaidi ya jumla ya amana kisha kuitumia kuwazidi kura wathibitishaji waaminifu. Kadri mshambuliaji anavyodhibiti sehemu kubwa ya dhamana, ndivyo nguvu yake ya kupiga kura inavyoongezeka, hasa kwenye hatua fulani za kiuchumi ambazo tutazichunguza baadaye. Hata hivyo, washambuliaji wengi hawawezi kukusanya ether za kutosha kushambulia kwa njia hii, kwa hivyo badala yake hutumia mbinu za hila kushawishi wengi waaminifu wachukue hatua fulani. + +Kimsingi, mashambulizi yote ya wale wenye dhamana ndogo ni mabadiliko ya hila ya aina mbili za mienendo mibaya ya wathibitishaji: kutokuwa na shughuli za kutosha (kushindwa kuthibitisha/kupendekeza au kufanya hivyo kwa kuchelewa) au kuwa na shughuli kupita kiasi (kupendekeza/kuthibitisha mara nyingi mno ndani ya nafasi moja). Katika hali zao za kawaida kabisa, vitendo hivi hushughulikiwa kirahisi na algoriti ya uchaguzi wa uma na safu ya motisha, lakini kuna mbinu za ujanja ambazo zinaweza kumsaidia mshambuliaji kuchezea mfumo kwa manufaa yake. + +### Mashambulizi kwa kutumia kiasi kidogo cha ETH {#attacks-by-small-stakeholders} + +#### reorgs {#reorgs} + +Machapisho kadhaa yameelezea mashambulizi dhidi ya Ethereum ambayo yanaweza kusababisha reorgs au ucheleweshaji wa ukamilishaji kwa kutumia sehemu ndogo tu ya jumla ya Eth iliyowekwa kwenye dhamana. Mashambulizi haya kwa kawaida hutegemea mshambuliaji kuficha taarifa fulani kutoka kwa wathibitishaji wengine na kisha kuziachia kwa namna ya hila na/au katika muda muafaka. Lengo lao mara nyingi ni kuondoa baadhi ya vitalu vya kweli kutoka kwenye mlolongo rasmi. [Neuder et al 2020](https://arxiv.org/pdf/2102.02247.pdf) walionyesha jinsi mthibitishaji mshambuliaji anaweza kuunda na kuthibitisha kwa kitalu (B) kwa nafasi fulani `n+1` lakini akakataa kukisambaza kwa nodi nyingine kwenye mtandao. Badala yake, huifadhi kitalu hiko kilichothibitishwa hadi nafasi inayofuata `n+2`. Mthibitishaji mwaminifu hupendekeza kitalu (C) kwa nafasi ya `n+2`. Wakati huohuo, mshambuliaji anaweza kuachia kitalu (B) chake alichokizuia pamoja na uthibitisho wake aliokuwa ameuficha, na pia kuthibitisha kuwa `B` ndio kichwa cha mlolongo kwa kura zake za nafasi `n+2`, na hivyo kukataa kuwepo kwa kitalu `C` ambacho ni cha ukweli. Wakati kitalu `D` ambacho ni cha kweli kinapotolewa, algoriti ya kuchagua tawi inaona `D` ikijengwa juu ya `B` ikiwa nzito zaidi kuliko `D` kujengwa juu ya `C`. Kwa hivyo, mshambuliaji atakuwa ameweza kuondoa bloku `C` ambayo ni ya kweli katika nafasi `n+2` kutoka kwenye mlolongo rasmi kwa kutumia reorg ya bloku moja ya aina ya ex‑ante. [Mshambuliaji mwenye 34%](https://www.youtube.com/watch?v=6vzXwwk12ZE) ya dhamana ana nafasi kubwa ya kufanikisha shambulio hili, kama ilivyoelezwa kwenye [makala hii](https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair). Kidhana, hata hivyo, shambulio hili linaweza kujaribiwa kwa dhamana ndogo zaidi. [Neuder et al 2020](https://arxiv.org/pdf/2102.02247.pdf) alieleza shambulio hili likifanya kazi kwa dhamana ya 30%, lakini baadaye ikaonyeshwa kuwa linawezekana kwa [2% ya jumla ya dhamana](https://arxiv.org/pdf/2009.04987.pdf) na hata kwa [mthibitishaji mmoja](https://arxiv.org/abs/2110.10086#) tu akitumia mbinu za usawa ambazo tutazichunguza katika sehemu inayofuata. + +![ex-ante re-org](reorg-schematic.png) + +Mchoro wa kifikra unaoonyesha shambulio la reorg ya bloku moja lililoelezwa hapo juu (limechukuliwa na kubadilishwa kutoka https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair) + +Shambulio lililosukwa kwa ustadi zaidi linaweza kugawanya kundi la wathibitishaji waaminifu katika makundi tofauti yenye mitazamo tofauti kuhusu kichwa cha mlolongo. Hii inajulikana kama **ushambuliaji wa usawa**. Mshambuliaji husubiri nafasi yake ya kupendekeza bloku, na inapofika, hutoa taarifa mbili zinazokinzana na kupendekeza bloku mbili tofauti. Anatuma bloku moja kwa nusu ya kundi la wathibitishaji waaminifu na bloku nyingine kwa nusu iliyosalia. Kitendo cha kutoa taarifa zinazokinzana kingebainika na algoriti ya kuchagua tawi, na mpangaji wa bloku angeadhibiwa na kuondolewa kwenye mtandao, lakini bloku hizo mbili zingebaki zipo na kila moja ikiwa na takribani nusu ya wathibitishaji wakithibitisha tawi husika. Wakati huohuo, wathibitishaji waovu waliobaki wanazuia uthibitisho wao. Kisha, kwa kuachia uthibitisho unaounga mkono tawi fulani kwa idadi ya kutosha ya wathibitishaji wakati tu algoriti ya kuchagua tawi inapotekelezwa, wanapindua uzito wa jumla wa uthibitisho kuunga mkono tawi moja au jingine. Hii inaweza kuendelea bila kikomo, huku wathibitishaji washambuliaji wakidumisha mgawanyiko sawa wa wathibitishaji kwenye matawi hayo mawili. Kwa kuwa hakuna tawi linaloweza kupata wingi wa 2/3, mtandao hautakamilisha. + +**Mashambulizi ya kurukaruka** yanafanana. Kura zinashikiliwa tena na wathibitishaji washambuliaji. Badala ya kuziachia kura ili kudumisha mgawanyiko sawa kati ya matawi mawili, wanazitumia kura zao katika nyakati muafaka kuhalalisha checkpoints zinazobadilishana kati ya tawi A na tawi B. Kubadilishana huku kwa uhalalishaji kati ya matawi mawili kunazuia kuwepo kwa jozi za checkpoints za chanzo na shabaha zilizohalalishwa ambazo zinaweza kukamilishwa kwenye mlolongo wowote, na hivyo kusitisha finality. + + + +Mashambulizi ya kurukaruka na ya usawa yote hutegemea mshambuliaji kuwa na mamlaka juu ya muda wa ujumbe kwenye mtandao, jambo ambalo si la kawaida. Hata hivyo, ulinzi umejengwa ndani ya itifaki kupitia utoaji wa uzito wa ziada kwa ujumbe unaowasili haraka ukilinganisha na wa taratibu. Hii hujulikana kama [Uongezaji uzito kwa mpangaji wa bloku](https://github.com/ethereum/consensus-specs/pull/2730). Ili kujilinda dhidi ya mashambulizi ya bouncing, algoriti ya kuchagua tawi ilisahihishwa ili kuhakikisha kwamba checkpoint ya hivi karibuni iliyohalalishwa inaweza kubadilishwa na ile ya mlolongo mbadala tu katika [1/3 ya mwanzo wa nafasi za kila epoch](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114). Sharti hili linazuia mshambuliaji kuhifadhi kura ili azitumie baadaye - algoriti ya kuchagua tawi hubaki ikishikilia checkpoint iliyoichagua katika 1/3 ya mwanzo wa epoch, kipindi ambacho wathibitishaji wengi waaminifu huwa tayari wamepiga kura. + +Kwa pamoja, hatua hizi zinaunda mazingira ambayo mpendekeza bloku mwaminifu anatoa bloku yake kwa haraka mara baada ya nafasi kuanza, kisha kunakuwa na kipindi cha takribani 1/3 ya nafasi (sekunde 4) ambapo bloku mpya inaweza kusababisha algoriti ya kuchagua tawi kubadilisha blockchain. Baada ya muda huo kuisha, uthibitisho unaokuja kutoka kwa wathibitishaji wa polepole hupunguzwa uzito ukilinganisha na ule uliowasili mapema. Hii inapendelea sana wapendekezaji na wathibitishaji wa haraka katika kubainisha mwanzo wa mnyororo na inapunguza kwa kiasi kikubwa uwezekano wa shambulio la kusawazisha au kudunda. + +Inafaa kukumbuka, kwamba uongezaji wa wapendekezaji pekee hulinda dhidi ya “upangaji upya wa bei nafuu”, yaani, yale yanayojaribiwa na mshambulizi mwenye hisa ndogo. Kwa hakika, uongezaji wa wapendekezaji wenyewe unaweza kudhibitiwa na washikadau wakubwa. Waandishi wa [chapisho hili](https://ethresear.ch/t/change-fork-choice-rule-to-mitigate-balancing-and-reorging-attacks/11127) wanaelezea jinsi mshambulizi mwenye hisa ya 7% anaweza kutumia kura zake kimkakati ili kuwahadaa wathibitishaji waaminifu kujenga kwenye mgawanyiko wao, na kuondoa bloku ya kweli. Shambulio hili lilibuniwa kwa kudhani hali bora za muda wa kusubiri ambazo hazina uwezekano mkubwa. Uwezekano bado ni mdogo sana kwa mshambulizi, na hisa kubwa pia inamaanisha mtaji zaidi uko hatarini na kizuizi kikubwa cha kiuchumi. + +[Shambulio la kusawazisha linalolenga sheria ya LMD haswa](https://ethresear.ch/t/balancing-attack-lmd-edition/11853) lilipendekezwa pia, ambalo lilipendekezwa kuwa linawezekana licha ya uongezaji wa wapendekezaji. Mshambulizi huweka minyororo miwili inayoshindana kwa kutoa mapendekezo ya bloku yanayokinzana na kusambaza kila bloku kwa takriban nusu ya mtandao kila mmoja, na kuweka usawa wa takriban kati ya migawanyiko. Kisha, wathibitishaji wanaoshirikiana hutoa kura zinazokinzana, wakipanga wakati ili nusu ya mtandao ipokee kura zao za Mgawanyiko `A` kwanza na nusu nyingine ipokee kura zao za Mgawanyiko `B` kwanza. Kwa kuwa sheria ya LMD inatupa uthibitishaji wa pili na kuweka tu wa kwanza kwa kila mthibitishaji, nusu ya mtandao huona kura za `A` na hakuna za `B`, na nusu nyingine huona kura za `B` na hakuna za `A`. Waandishi wanaelezea sheria ya LMD ikimpa adui “nguvu ya ajabu” ya kufanya shambulio la kusawazisha. + +Njia hii ya mashambulizi ya LMD ilifungwa kwa [kusasisha algoriti ya kuchagua mgawanyiko](https://github.com/ethereum/consensus-specs/pull/2845) ili iwatupilie mbali kabisa wathibitishaji wanaokinzana kutoka kwa uzingatiaji wa uchaguzi wa mgawanyiko. Wathibitishaji wanaokinzana pia ushawishi wao wa baadaye hupunguzwa na algoriti ya kuchagua mgawanyiko. Hii inazuia shambulio la kusawazisha lililoelezwa hapo juu huku pia ikidumisha uwezo wa kustahimili mashambulizi ya avalanche. + +Aina nyingine ya shambulio, inayoitwa [**mashambulizi ya avalanche**](https://ethresear.ch/t/avalanche-attack-on-proof-of-stake-ghost/11854/3), ilielezewa katika [karatasi ya Machi 2022](https://arxiv.org/pdf/2203.01315.pdf). Ili kufanya shambulio la avalanche, mshambulizi anahitaji kudhibiti wapendekezaji kadhaa wa bloku mfululizo. Katika kila nafasi ya pendekezo la bloku, mshambulizi huzuia bloku yake, akizikusanya hadi mnyororo wa kweli ufikie uzito sawa wa mti mdogo na bloku zilizozuiliwa. Kisha, bloku zilizozuiliwa hutolewa ili zikinzane kwa kiwango cha juu. Waandishi wanapendekeza kuwa uongezaji wa wapendekezaji - ulinzi mkuu dhidi ya mashambulizi ya kusawazisha na kudunda - haulindi dhidi ya aina fulani za mashambulizi ya avalanche. Hata hivyo, waandishi pia walionyesha shambulio hilo kwenye toleo la kubuniwa sana la algoriti ya kuchagua mgawanyiko ya Ethereum (walitumia GHOST bila LMD). + +Shambulio la avalanche linapunguzwa na sehemu ya LMD ya algoriti ya kuchagua mgawanyiko ya LMD-GHOST. LMD inamaanisha “inayoendeshwa na ujumbe wa hivi karibuni” na inarejelea jedwali linalohifadhiwa na kila mthibitishaji lenye ujumbe wa hivi karibuni uliopokelewa kutoka kwa wathibitishaji wengine. Sehemu hiyo inasasishwa tu ikiwa ujumbe mpya unatoka kwenye nafasi ya baadaye kuliko ile iliyopo tayari kwenye jedwali kwa mthibitishaji fulani. Kwa vitendo, hii inamaanisha kuwa katika kila nafasi, ujumbe wa kwanza uliopokelewa ndio unaokubaliwa na ujumbe wowote wa ziada ni ukinzani wa kupuuzwa. Kwa maneno mengine, wateja wa makubaliano hawahesabu ukinzani - wanatumia ujumbe wa kwanza kufika kutoka kwa kila mthibitishaji na ukinzani hutupwa tu, na kuzuia mashambulizi ya avalanche. + +Kuna maboresho mengine kadhaa ya baadaye yanayowezekana kwa sheria ya kuchagua mgawanyiko ambayo yanaweza kuongeza usalama unaotolewa na uongezaji wa wapendekezaji. Moja ni [view-merge](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739), ambapo wathibitishaji husitisha mtazamo wao wa uchaguzi wa mgawanyiko sekunde `n` kabla ya kuanza kwa nafasi na kisha mpendekezaji husaidia kusawazisha mtazamo wa mnyororo kwenye mtandao mzima. Boresho jingine linalowezekana ni [umwisho wa nafasi moja](https://notes.ethereum.org/@vbuterin/single_slot_finality), ambalo hulinda dhidi ya mashambulizi yanayotegemea muda wa ujumbe kwa kukamilisha mnyororo baada ya nafasi moja tu. + +#### Ucheleweshaji wa Umwisho {#finality-delay} + +[Karatasi ileile](https://econcs.pku.edu.cn/wine2020/wine2020/Workshop/GTiB20_paper_8.pdf) iliyoelezea kwa mara ya kwanza shambulio la gharama nafuu la kupanga upya bloku moja pia ilielezea shambulio la ucheleweshaji wa umwisho (yaani “kushindwa kwa uhai”) ambalo linategemea mshambulizi kuwa mpendekezaji wa bloku kwa bloku ya mpaka wa epoch. Hii ni muhimu kwa sababu bloku hizi za mpaka wa epoch huwa vituo vya ukaguzi ambavyo Casper FFG hutumia kukamilisha sehemu za mnyororo. Mshambulizi huzuia tu bloku yake hadi wathibitishaji waaminifu wa kutosha watumie kura zao za FFG kwa kupendelea bloku ya awali ya mpaka wa epoch kama lengo la sasa la ukamilishaji. Kisha wanatoa bloku yao iliyozuiliwa. Wanathibitisha bloku yao na wathibitishaji waaminifu waliobaki pia wanafanya hivyo, na kuunda migawanyiko yenye vituo tofauti vya ukaguzi. Ikiwa walipanga muda vizuri, watazuia umwisho kwa sababu hakutakuwa na wingi wa 2/3 unaothibitisha mgawanyiko wowote. Kadiri hisa inavyokuwa ndogo, ndivyo muda unavyohitaji kuwa sahihi zaidi kwa sababu mshambulizi hudhibiti thibitisho chache moja kwa moja, na ndivyo uwezekano wa mshambulizi kudhibiti mthibitishaji anayependekeza bloku fulani ya mpaka wa epoch unavyopungua. + +#### Mashambulizi ya masafa marefu {#long-range-attacks} + +Pia kuna aina ya shambulio mahususi kwa minyororo ya bloku ya uthibitisho wa hisa ambayo inahusisha mthibitishaji aliyeshiriki katika bloku ya mwanzo kudumisha mgawanyiko tofauti wa mnyororo wa bloku kando ya ule wa kweli, hatimaye kuwashawishi wathibitishaji waaminifu kuhamia kwake wakati fulani unaofaa baadaye sana. Aina hii ya shambulio haiwezekani kwenye Ethereum kwa sababu ya kifaa cha umwisho kinachohakikisha wathibitishaji wote wanakubaliana juu ya hali ya mnyororo wa kweli kwa vipindi vya kawaida (“vituo vya ukaguzi”). Utaratibu huu rahisi hupunguza nguvu za washambuliaji wa masafa marefu kwa sababu wateja wa Ethereum hawatapanga upya bloku zilizokamilishwa. Nodi mpya zinazojiunga na mtandao hufanya hivyo kwa kupata hashi ya hali ya hivi karibuni inayoaminika (kituo cha ukaguzi cha “[udhaifu wa kibinafsi](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/)”) na kuitumia kama bloku bandia ya mwanzo ya kujenga juu yake. Hii inaunda 'lango la uaminifu' kwa nodi mpya inayoingia kwenye mtandao kabla ya kuanza kuthibitisha habari yenyewe. + +#### Kukataliwa kwa Huduma {#denial-of-service} + +Utaratibu wa PoS wa Ethereum huchagua mthibitishaji mmoja kutoka kwa seti nzima ya wathibitishaji kuwa mpendekezaji wa bloku katika kila nafasi. Hii inaweza kukokotwa kwa kutumia kazi inayojulikana hadharani na inawezekana kwa adui kumtambua mpendekezaji wa bloku anayefuata mapema kidogo kabla ya pendekezo lake la bloku. Kisha, mshambulizi anaweza kumsumbua mpendekezaji wa bloku kwa barua taka ili kuwazuia kubadilishana habari na wenzao. Kwa mtandao wote, ingeonekana kuwa mpendekezaji wa bloku hakuwa hewani na nafasi ingebaki tupu. Hii inaweza kuwa aina ya udhibiti dhidi ya wathibitishaji maalum, kuwazuia kuongeza habari kwenye mnyororo wa bloku. Utekelezaji wa chaguzi za kiongozi mmoja wa siri (SSLE) au chaguzi za kiongozi zisizo za siri moja utapunguza hatari za DoS kwa sababu ni mpendekezaji wa bloku pekee anayejua kuwa amechaguliwa na uchaguzi haujulikani mapema. Hii bado haijatekelezwa, lakini ni eneo tendaji la [utafiti na maendeleo](https://ethresear.ch/t/secret-non-single-leader-election/11789). + +Yote haya yanaashiria ukweli kwamba ni vigumu sana kushambulia Ethereum kwa mafanikio ukiwa na hisa ndogo. Mashambulizi yanayowezekana ambayo yameelezwa hapa yanahitaji algoriti ya kubuniwa ya kuchagua mgawanyiko, hali za mtandao zisizowezekana, au njia za mashambulizi tayari zimefungwa na viraka vidogo kiasi kwenye programu ya mteja. Hii, bila shaka, haiondoi uwezekano wa kuwepo kwa zero-days, lakini inaonyesha kiwango cha juu sana cha uwezo wa kiufundi, ujuzi wa safu ya makubaliano na bahati inayohitajika kwa mshambulizi mwenye hisa ndogo kuwa na ufanisi. Kwa mtazamo wa mshambulizi, dau lao bora linaweza kuwa kukusanya ether nyingi iwezekanavyo na kurudi wakiwa na sehemu kubwa zaidi ya hisa yote. + +### Washambuliaji wanaotumia >= 33% ya hisa yote {#attackers-with-33-stake} + +Mashambulizi yote yaliyotajwa hapo awali katika makala haya yana uwezekano mkubwa wa kufanikiwa wakati mshambulizi ana ether nyingi zaidi iliyowekwa hisa ya kupigia kura, na wathibitishaji wengi zaidi ambao wanaweza kuchaguliwa kupendekeza bloku katika kila nafasi. Kwa hiyo, mthibitishaji hasidi anaweza kulenga kudhibiti ether nyingi iwezekanavyo iliyowekwa hisa. + +33% ya ether iliyowekwa hisa ni kigezo kwa mshambulizi kwa sababu kwa kiasi chochote kikubwa kuliko hiki wana uwezo wa kuzuia mnyororo kukamilika bila kulazimika kudhibiti kwa makini matendo ya wathibitishaji wengine. Wanaweza tu kutoweka wote pamoja. Ikiwa 1/3 au zaidi ya ether iliyowekwa hisa inathibitisha kwa nia mbaya au inashindwa kuthibitisha, basi wingi wa 2/3 hauwezi kuwepo na mnyororo hauwezi kukamilika. Ulinzi dhidi ya hili ni uvujaji wa kutotenda kazi. Uvujaji wa kutotenda kazi huwatambua wathibitishaji wale wanaoshindwa kuthibitisha au wanaothibitisha kinyume na wengi. Ether iliyowekwa hisa inayomilikiwa na wathibitishaji hawa wasiothibitisha hupunguzwa polepole hadi hatimaye kwa pamoja wanawakilisha chini ya 1/3 ya jumla ili mnyororo uweze kukamilika tena. + +Madhumuni ya uvujaji wa kutotenda kazi ni kuufanya mnyororo ukamilike tena. Hata hivyo, mshambulizi pia hupoteza sehemu ya ether yake iliyowekwa hisa. Kutotenda kazi kwa kudumu kwa wathibitishaji wanaowakilisha 33% ya ether yote iliyowekwa hisa ni ghali sana ingawa wathibitishaji hawakatwi. + +Tukichukulia kuwa mtandao wa Ethereum haufuatani (yaani, kuna ucheleweshaji kati ya ujumbe kutumwa na kupokelewa), mshambulizi anayedhibiti 34% ya hisa yote anaweza kusababisha umwisho maradufu. Hii ni kwa sababu mshambulizi anaweza kutoa kauli zinazokinzana anapochaguliwa kuwa mzalishaji wa bloku, kisha apige kura mara mbili na wathibitishaji wake wote. Hii inaunda hali ambapo mgawanyiko wa mnyororo wa bloku unakuwepo, kila mmoja ukiwa na 34% ya ether iliyowekwa hisa ikipigia kura. Kila mgawanyiko unahitaji tu 50% ya wathibitishaji waliobaki kupiga kura kuunga mkono ili migawanyiko yote miwili iungwe mkono na wingi mkuu, ambapo minyororo yote miwili inaweza kukamilika (kwa sababu 34% ya wathibitishaji wa washambuliaji + nusu ya 66% iliyobaki = 67% kwa kila mgawanyiko). Bloku zinazoshindana zingelazimika kupokelewa na takriban 50% ya wathibitishaji waaminifu kwa hivyo shambulio hili linawezekana tu wakati mshambulizi ana kiwango fulani cha udhibiti juu ya muda wa ujumbe unaosambaa kwenye mtandao ili waweze kusukuma nusu ya wathibitishaji waaminifu kwenye kila mnyororo. Mshambulizi bila shaka angeharibu hisa yake yote (34% ya ~milioni 10 za ether na seti ya leo ya wathibitishaji) ili kufikia umwisho huu maradufu kwa sababu 34% ya wathibitishaji wake wangekuwa wakipiga kura mara mbili kwa wakati mmoja - kosa linaloweza kukatwa na adhabu ya juu zaidi ya uwiano. Ulinzi dhidi ya shambulio hili ni gharama kubwa sana ya kuharibu 34% ya ether yote iliyowekwa hisa. Kupona kutokana na shambulio hili kungehitaji jamii ya Ethereum kuratibu “nje ya bendi” na kukubaliana kufuata mmoja wa migawanyiko na kupuuza mwingine. + +### Washambuliaji wanaotumia ~50% ya hisa yote {#attackers-with-50-stake} + +Kwa 50% ya ether iliyowekwa hisa, kikundi hasidi cha wathibitishaji kinaweza kinadharia kugawanya mnyororo katika migawanyiko miwili ya ukubwa sawa na kisha kutumia tu hisa yao yote ya 50% kupiga kura kinyume na seti ya wathibitishaji waaminifu, na hivyo kudumisha migawanyiko miwili na kuzuia umwisho. Uvujaji wa kutotenda kazi kwenye migawanyiko yote miwili hatimaye ungesababisha minyororo yote miwili kukamilika. Katika hatua hii, chaguo pekee ni kutegemea urejesho wa kijamii. + +Haiwezekani sana kwamba kundi la wathibitishaji hasidi lingeweza kudhibiti kwa usahihi 50% ya hisa yote kwa kuzingatia kiwango cha mabadiliko katika idadi ya wathibitishaji waaminifu, muda wa kusubiri wa mtandao n.k - gharama kubwa ya kufanya shambulio kama hilo pamoja na uwezekano mdogo wa kufanikiwa inaonekana kuwa kizuizi kikubwa kwa mshambulizi mwenye busara, haswa wakati uwekezaji mdogo wa ziada katika kupata _zaidi ya_ 50% unafungua nguvu nyingi zaidi. + +Kwa >50% ya hisa yote mshambulizi anaweza kutawala algoriti ya kuchagua mgawanyiko. Katika kesi hii, mshambulizi angeweza kuthibitisha kwa kura ya wengi, na kuwapa udhibiti wa kutosha kufanya upangaji upya mfupi bila kuhitaji kuwahadaa wateja waaminifu. Wathibitishaji waaminifu wangefuata mkondo kwa sababu algoriti yao ya kuchagua mgawanyiko pia ingeona mnyororo unaopendelewa na mshambulizi kama mzito zaidi, kwa hivyo mnyororo ungeweza kukamilika. Hii inamwezesha mshambulizi kudhibiti miamala fulani, kufanya upangaji upya wa masafa mafupi na kutoa MEV ya juu zaidi kwa kupanga upya bloku kwa manufaa yao. Ulinzi dhidi ya hili ni gharama kubwa ya hisa ya wengi (kwa sasa chini kidogo ya dola bilioni 19 za Kimarekani) ambayo inawekwa hatarini na mshambulizi kwa sababu safu ya kijamii ina uwezekano wa kuingilia kati na kupitisha mgawanyiko wa wachache waaminifu, na kupunguza thamani ya hisa ya mshambulizi kwa kiasi kikubwa. + +### Washambuliaji wanaotumia >=66% ya hisa yote {#attackers-with-66-stake} + +Mshambulizi mwenye 66% au zaidi ya ether yote iliyowekwa hisa anaweza kukamilisha mnyororo wake anaopendelea bila kulazimisha wathibitishaji wowote waaminifu. Mshambulizi anaweza tu kupiga kura kwa mgawanyiko wake anaopendelea na kisha kuukamilisha, kwa sababu tu wanaweza kupiga kura na wingi mkuu usio waaminifu. Kama mshikadau mwenye wingi mkuu, mshambulizi angekuwa akidhibiti yaliyomo kwenye bloku zilizokamilishwa kila wakati, akiwa na uwezo wa kutumia, kurudisha nyuma na kutumia tena, kudhibiti miamala fulani na kupanga upya mnyororo apendavyo. Kwa kununua ether ya ziada ili kudhibiti 66% badala ya 51%, mshambulizi ananunua uwezo wa kufanya upangaji upya wa baada ya tukio na ugeuzaji wa umwisho (yaani, kubadilisha yaliyopita na kudhibiti yajayo). Ulinzi pekee wa kweli hapa ni gharama kubwa sana ya 66% ya ether yote iliyowekwa hisa, na chaguo la kutegemea safu ya kijamii kuratibu upitishaji wa mgawanyiko mbadala. Tunaweza kuchunguza hili kwa undani zaidi katika sehemu inayofuata. + +## Watu: mstari wa mwisho wa ulinzi {#people-the-last-line-of-defense} + +Ikiwa wathibitishaji wasio waaminifu watafanikiwa kukamilisha toleo lao wanalopendelea la mnyororo, jamii ya Ethereum inawekwa katika hali ngumu. Mnyororo wa kikanuni unajumuisha sehemu isiyo ya uaminifu iliyojikita katika historia yake, huku wathibitishaji waaminifu wanaweza kuishia kuadhibiwa kwa kuthibitisha mnyororo mbadala (waaminifu). Kumbuka kuwa mnyororo uliokamilishwa lakini usio sahihi unaweza pia kutokea kutokana na hitilafu katika mteja wa wengi. Mwishowe, suluhisho la mwisho ni kutegemea safu ya kijamii - Safu ya 0 - kutatua hali hiyo. + +Moja ya nguvu za makubaliano ya PoS ya Ethereum ni kwamba kuna [mikakati mbalimbali ya kujihami](https://youtu.be/1m12zgJ42dI?t=1712) ambayo jamii inaweza kutumia inapokabiliwa na shambulio. Jibu dogo linaweza kuwa kuwaondoa kwa nguvu wathibitishaji wa washambuliaji kutoka kwenye mtandao bila adhabu yoyote ya ziada. Ili kuingia tena kwenye mtandao mshambulizi angelazimika kujiunga na foleni ya uanzishaji ambayo inahakikisha seti ya wathibitishaji inakua polepole. Kwa mfano, kuongeza wathibitishaji wa kutosha kuongeza maradufu kiasi cha ether iliyowekwa hisa huchukua takriban siku 200, na kuwapa wathibitishaji waaminifu siku 200 kabla ya mshambulizi kujaribu shambulio lingine la 51%. Hata hivyo, jamii inaweza pia kuamua kumwadhibu mshambulizi vikali zaidi, kwa kubatilisha zawadi za zamani au kuchoma sehemu fulani (hadi 100%) ya mtaji wao uliowekwa hisa. + +Licha ya adhabu yoyote anayopewa mshambulizi, jamii pia inapaswa kuamua pamoja ikiwa mnyororo usio waaminifu, licha ya kuwa ndio unaopendelewa na algoriti ya kuchagua mgawanyiko iliyowekwa kwenye wateja wa Ethereum, kwa kweli ni batili na kwamba jamii inapaswa kujenga juu ya mnyororo wa kweli badala yake. Wathibitishaji waaminifu wanaweza kwa pamoja kukubaliana kujenga juu ya mgawanyiko unaokubaliwa na jamii wa mnyororo wa bloku wa Ethereum ambao unaweza, kwa mfano, kuwa umejitenga na mnyororo wa kikanuni kabla ya shambulio kuanza au wathibitishaji wa washambuliaji kuondolewa kwa nguvu. Wathibitishaji waaminifu wangehamasishwa kujenga kwenye mnyororo huu kwa sababu wangeepuka adhabu zinazotolewa kwao kwa kushindwa (ipasavyo) kuthibitisha mnyororo wa mshambulizi. Majukwaa ya kubadilishana, njia za kuingia na programu zilizojengwa kwenye Ethereum labda zingependelea kuwa kwenye mnyororo wa kweli na zingefuata wathibitishaji waaminifu hadi kwenye mnyororo wa bloku wa kweli. + +Hata hivyo, hii itakuwa changamoto kubwa ya utawala. Baadhi ya watumiaji na wathibitishaji bila shaka wangepoteza kutokana na kurudi kwenye mnyororo wa kweli, miamala katika bloku zilizothibitishwa baada ya shambulio inaweza kurudishwa nyuma, na kuvuruga safu ya programu, na kwa urahisi inadhoofisha maadili ya baadhi ya watumiaji ambao huwa wanaamini “msimbo ni sheria”. Majukwaa ya kubadilishana na programu huenda zimeunganisha vitendo vya nje ya mnyororo na miamala ya ndani ya mnyororo ambayo sasa inaweza kurudishwa nyuma, na kuanzisha mfululizo wa uondoaji na marekebisho ambayo itakuwa vigumu kuyafumbua kwa haki, hasa ikiwa faida haramu zimechanganywa, kuwekwa kwenye DeFi au derivatifi zingine zenye athari za pili kwa watumiaji waaminifu. Bila shaka baadhi ya watumiaji, labda hata wa kitaasisi, wangekuwa wameshanufaika na mnyororo usio waaminifu ama kwa kuwa werevu au kwa bahati, na wanaweza kupinga mgawanyiko ili kulinda faida zao. Kumekuwa na wito wa kufanya mazoezi ya jibu la jamii kwa mashambulizi ya >51% ili upunguzaji wa kuratibiwa wenye busara uweze kutekelezwa haraka. Kuna mjadala muhimu wa Vitalik kwenye ethresear.ch [hapa](https://ethresear.ch/t/timeliness-detectors-and-51-attack-recovery-in-blockchains/6925) na [hapa](https://ethresear.ch/t/responding-to-51-attacks-in-casper-ffg/6363) na kwenye Twitter [hapa](https://twitter.com/skylar_eth/status/1551798684727508992?s=20&t=oHZ1xv8QZdOgAXhxZKtHEw). Lengo la jibu la kijamii lililoratibiwa linapaswa kuwa kulenga na kuwa maalum sana kuhusu kumwadhibu mshambulizi na kupunguza athari kwa watumiaji wengine. + +Utawala tayari ni mada ngumu. Kusimamia jibu la dharura la Safu-0 kwa mnyororo unaokamilisha kwa njia isiyo ya uaminifu bila shaka kutakuwa changamoto kwa jamii ya Ethereum, lakini [limewahi kutokea](/ethereum-forks/#dao-fork-summary) - [mara mbili](/ethereum-forks/#tangerine-whistle) - katika historia ya Ethereum). + +Hata hivyo, kuna kitu cha kuridhisha katika suluhisho la mwisho kuwa katika ulimwengu halisi. Mwishowe, hata na rundo hili la ajabu la teknolojia juu yetu, ikiwa mabaya zaidi yangetokea watu halisi wangelazimika kuratibu njia yao ya kutoka. + +## Muhtasari {#summary} + +Ukurasa huu ulichunguza baadhi ya njia ambazo washambuliaji wanaweza kujaribu kutumia vibaya itifaki ya makubaliano ya uthibitisho wa hisa ya Ethereum. Upangaji upya na ucheleweshaji wa umwisho ulichunguzwa kwa washambuliaji wenye idadi inayoongezeka ya ether yote iliyowekwa hisa. Kwa ujumla, mshambulizi tajiri ana nafasi kubwa zaidi ya kufanikiwa kwa sababu hisa yake inatafsiriwa kuwa nguvu ya kupiga kura anayoweza kutumia kushawishi yaliyomo kwenye bloku za baadaye. Katika viwango fulani vya kizingiti vya ether iliyowekwa hisa, nguvu za mshambulizi huongezeka: + +33%: ucheleweshaji wa umwisho + +34%: ucheleweshaji wa umwisho, umwisho maradufu + +51%: ucheleweshaji wa umwisho, umwisho maradufu, udhibiti, udhibiti juu ya mustakabali wa mnyororo wa bloku + +66%: ucheleweshaji wa umwisho, umwisho maradufu, udhibiti, udhibiti juu ya mustakabali na zamani za mnyororo wa bloku + +Pia kuna aina mbalimbali za mashambulizi ya kisasa zaidi ambayo yanahitaji kiasi kidogo cha ether iliyowekwa hisa lakini yanategemea mshambulizi wa kisasa sana kuwa na udhibiti mzuri juu ya muda wa ujumbe ili kuwashawishi wathibitishaji waaminifu kwa manufaa yao. + +Kwa ujumla, licha ya njia hizi za mashambulizi zinazowezekana, hatari ya shambulio lenye mafanikio ni ndogo, hakika ni ndogo kuliko vielelezo vya uthibitisho wa kazi. Hii ni kwa sababu ya gharama kubwa ya ether iliyowekwa hisa iliyowekwa hatarini na mshambulizi anayelenga kuwazidi nguvu wathibitishaji waaminifu kwa nguvu zao za kupiga kura. Safu ya motisha iliyojengwa ndani ya “karoti na fimbo” inalinda dhidi ya uovu mwingi, hasa kwa washambuliaji wenye hisa ndogo. Mashambulizi ya hila zaidi ya kudunda na kusawazisha pia hayana uwezekano wa kufanikiwa kwa sababu hali halisi ya mtandao hufanya udhibiti mzuri wa utoaji wa ujumbe kwa vikundi maalum vya wathibitishaji kuwa mgumu sana kufikia, na timu za wateja zimefunga haraka njia zinazojulikana za mashambulizi ya kudunda, kusawazisha na avalanche na viraka rahisi. + +Mashambulizi ya 34%, 51% au 66% huenda yakahitaji uratibu wa kijamii nje ya bendi ili kuyatatua. Ingawa hii inaweza kuwa chungu kwa jamii, uwezo wa jamii kujibu nje ya bendi ni kizuizi kikubwa kwa mshambulizi. Safu ya kijamii ya Ethereum ndio kinga ya mwisho - shambulio lililofanikiwa kiufundi bado linaweza kudhibitiwa na jamii kukubaliana kupitisha mgawanyiko wa kweli. Kungekuwa na mbio kati ya mshambulizi na jamii ya Ethereum - mabilioni ya dola yaliyotumika kwenye shambulio la 66% huenda yangefutwa na shambulio la uratibu wa kijamii lililofanikiwa ikiwa lingewasilishwa haraka vya kutosha, na kumwacha mshambulizi na mifuko mizito ya ether isiyoweza kuuzika iliyowekwa hisa kwenye mnyororo unaojulikana kuwa si waaminifu na unaopuuzwa na jamii ya Ethereum. Uwezekano kwamba hili lingeishia kuwa na faida kwa mshambulizi ni mdogo vya kutosha kuwa kizuizi cha ufanisi. Hii ndiyo sababu uwekezaji katika kudumisha safu ya kijamii yenye mshikamano na maadili yaliyopangiliwa vizuri ni muhimu sana. + +## Masomo zaidi {#further-reading} + +- [Toleo la kina zaidi la ukurasa huu](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [Vitalik kuhusu umwisho wa suluhu](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) +- [Karatasi ya LMD GHOST](https://arxiv.org/abs/2003.03052) +- Hati ya Utafiti ya Casper +- [Karatasi ya Gasper](https://arxiv.org/pdf/2003.03052.pdf) +- [Vipimo vya makubaliano ya kuongeza uzito wa mpendekezaji](https://github.com/ethereum/consensus-specs/pull/2730) +- [Mashambulizi ya kudunda kwenye ethresear.ch](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) +- [Utafiti wa SSLE](https://ethresear.ch/t/secret-non-single-leader-election/11789) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attestations/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attestations/index.md new file mode 100644 index 00000000000..d88d5135afc --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attestations/index.md @@ -0,0 +1,92 @@ +--- +title: Uthibitishaji +description: Maelezo ya uthibitishaji kwenye Ethereum ya uthibitisho wa hisa. +lang: sw +--- + +Mthibitishaji anatarajiwa kuunda, kutia sahihi na kutangaza uthibitishaji wakati wa kila epoch. Ukurasa huu unaelezea jinsi uthibitishaji huu unavyoonekana na jinsi unavyochakatwa na kuwasilishwa kati ya wateja wa makubaliano. + +## Uthibitishaji ni nini? {#what-is-an-attestation} + +Kila [epoch](/glossary/#epoch) (dakika 6.4) mthibitishaji anapendekeza uthibitishaji kwenye mtandao. Uthibitishaji unahusu yanayopangwa maalum katika epoch. Madhumuni ya uthibitishaji ni kupiga kura kuunga mkono mtazamo wa mthibitishaji wa mnyororo, hasa bloku ya hivi karibuni iliyohalalishwa na bloku ya kwanza katika epoch ya sasa (inayojulikana kama vituo vya ukaguzi vya `chanzo` na `lengo`). Taarifa hii huunganishwa kwa wathibitishaji wote wanaoshiriki, na kuuwezesha mtandao kufikia makubaliano kuhusu hali ya mnyororo wa bloku. + +Uthibitishaji una vipengele vifuatavyo: + +- `aggregation_bits`: orodha ya biti ya wathibitishaji ambapo nafasi inaonyesha faharasa ya mthibitishaji katika kamati yao; thamani (0/1) inaonyesha kama mthibitishaji alitia sahihi `data` (yaani, kama wanafanya kazi na wanakubaliana na mpendekezaji wa bloku) +- `data`: maelezo yanayohusiana na uthibitishaji, kama ilivyoelezwa hapa chini +- `signature`: sahihi ya BLS inayojumlisha sahihi za wathibitishaji binafsi + +Kazi ya kwanza kwa mthibitishaji anayethibitisha ni kuunda `data`. `data` ina taarifa ifuatayo: + +- `slot`: Nambari ya yanayopangwa ambayo uthibitishaji unarejelea +- `index`: Nambari inayobainisha kamati gani mthibitishaji yumo katika yanayopangwa fulani +- `beacon_block_root`: Hashi ya mzizi ya bloku ambayo mthibitishaji anaona kwenye kichwa cha mnyororo (matokeo ya kutumia algoriti ya kuchagua uma) +- `source`: Sehemu ya kura ya mwisho inayoonyesha kile wathibitishaji wanachoona kama bloku ya hivi karibuni iliyohalalishwa +- `target`: Sehemu ya kura ya mwisho inayoonyesha kile wathibitishaji wanachoona kama bloku ya kwanza katika epoch ya sasa + +Mara tu `data` inapoundwa, mthibitishaji anaweza kugeuza biti katika `aggregation_bits` inayolingana na faharasa yake ya mthibitishaji kutoka 0 hadi 1 kuonyesha kuwa alishiriki. + +Mwishowe, mthibitishaji hutia sahihi uthibitishaji na kuutangaza kwenye mtandao. + +### Uthibitishaji uliokusanywa {#aggregated-attestation} + +Kuna gharama kubwa ya ziada inayohusishwa na kupitisha data hii kwenye mtandao kwa kila mthibitishaji. Kwa hiyo, uthibitishaji kutoka kwa wathibitishaji binafsi hukusanywa ndani ya mitandao midogo kabla ya kutangazwa kwa upana zaidi. Hii inajumuisha kukusanya sahihi pamoja ili uthibitishaji unaotangazwa ujumuishe `data` ya makubaliano na sahihi moja iliyoundwa kwa kuunganisha sahihi za wathibitishaji wote wanaokubaliana na `data` hiyo. Hii inaweza kukaguliwa kwa kutumia `aggregation_bits` kwa sababu hii inatoa faharasa ya kila mthibitishaji katika kamati yao (ambayo ID yake imetolewa katika `data`) ambayo inaweza kutumika kuuliza sahihi za kibinafsi. + +Katika kila epoch wathibitishaji 16 katika kila mtandao mdogo huchaguliwa kuwa `wakusanyaji`. Wakusanyaji hukusanya uthibitishaji wote wanaosikia kupitia mtandao wa umbea ambao una `data` sawa na yao. Mtumaji wa kila uthibitishaji unaolingana hurekodiwa katika `aggregation_bits`. Wakusanyaji kisha hutangaza mkusanyiko wa uthibitishaji kwenye mtandao mpana zaidi. + +Mthibitishaji anapochaguliwa kuwa mpendekezaji wa bloku, hufunga uthibitishaji uliokusanywa kutoka kwenye mitandao midogo hadi yanayopangwa ya hivi karibuni katika bloku mpya. + +### Mzunguko wa maisha ya ujumuishaji wa uthibitishaji {#attestation-inclusion-lifecycle} + +1. Uzalishaji +2. Uenezaji +3. Mkusanyiko +4. Uenezaji +5. Ujumuishaji + +Mzunguko wa maisha ya uthibitishaji umeelezwa katika mchoro ulio hapa chini: + +![mzunguko wa maisha ya uthibitishaji](./attestation_schematic.png) + +## Zawadi {#rewards} + +Wathibitishaji hupewa zawadi kwa kuwasilisha uthibitishaji. Zawadi ya uthibitishaji inategemea bendera za ushiriki (chanzo, lengo na kichwa), zawadi ya msingi na kiwango cha ushiriki. + +Kila moja ya bendera za ushiriki inaweza kuwa ya kweli au ya uongo, kulingana na uthibitishaji uliowasilishwa na ucheleweshaji wake wa ujumuishaji. + +Hali bora zaidi hutokea wakati bendera zote tatu ni za kweli, ambapo mthibitishaji angepata (kwa kila bendera sahihi): + +`zawadi += zawadi ya msingi * uzito wa bendera * kiwango cha uthibitisho wa bendera / 64` + +Kiwango cha uthibitisho wa bendera hupimwa kwa kutumia jumla ya salio faafu za wathibitishaji wote wanaothibitisha kwa bendera husika ikilinganishwa na jumla ya salio faafu linalofanya kazi. + +### Zawadi ya msingi {#base-reward} + +Zawadi ya msingi huhesabiwa kulingana na idadi ya wathibitishaji wanaothibitisha na salio zao faafu za ether zilizowekwa hisa: + +`zawadi ya msingi = salio faafu la mthibitishaji x 2^6 / SQRT(Salio faafu la wathibitishaji wote wanaofanya kazi)` + +#### Ucheleweshaji wa ujumuishaji {#inclusion-delay} + +Wakati wathibitishaji walipopiga kura kwenye kichwa cha mnyororo (`bloku n`), `bloku n+1` ilikuwa bado haijapendekezwa. Kwa hiyo uthibitishaji kwa kawaida hujumuishwa **bloku moja baadaye** hivyo uthibitishaji wote uliopiga kura kwenye `bloku n` kuwa kichwa cha mnyororo ulijumuishwa katika `bloku n+1` na, **ucheleweshaji wa ujumuishaji** ni 1. Ikiwa ucheleweshaji wa ujumuishaji utaongezeka maradufu hadi yanayopangwa mawili, zawadi ya uthibitishaji hupungua kwa nusu, kwa sababu ili kukokotoa zawadi ya uthibitishaji zawadi ya msingi huzidishwa na kinyume cha ucheleweshaji wa ujumuishaji. + +### Matukio ya uthibitishaji {#attestation-scenarios} + +#### Mthibitishaji Anayekosekana Kupiga Kura {#missing-voting-validator} + +Wathibitishaji wana upeo wa epoch 1 kuwasilisha uthibitishaji wao. Ikiwa uthibitishaji ulikosekana katika epoch 0, wanaweza kuwasilisha kwa ucheleweshaji wa ujumuishaji katika epoch 1. + +#### Mkusanyaji Anayekosekana {#missing-aggregator} + +Kuna Wakusanyaji 16 kwa kila epoch kwa jumla. Kwa kuongezea, wathibitishaji wa nasibu hujiandikisha kwa **mitandao midogo miwili kwa epoch 256** na hutumika kama hifadhi endapo wakusanyaji watakosekana. + +#### Mpendekezaji wa bloku anayekosekana {#missing-block-proposer} + +Kumbuka kuwa katika baadhi ya matukio mkusanyaji mwenye bahati anaweza pia kuwa mpendekezaji wa bloku. Ikiwa uthibitishaji haukujumuishwa kwa sababu mpendekezaji wa bloku amekosekana, mpendekezaji wa bloku anayefuata angechukua uthibitishaji uliokusanywa na kuujumuisha katika bloku inayofuata. Hata hivyo, **ucheleweshaji wa ujumuishaji** utaongezeka kwa moja. + +## Masomo zaidi {#further-reading} + +- [Uthibitishaji katika ufafanuzi wa makubaliano uliotolewa maelezo na Vitalik](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#attestationdata) +- [Uthibitishaji katika eth2book.info](https://eth2book.info/capella/part3/containers/dependencies/#attestationdata) + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md new file mode 100644 index 00000000000..1914d7c54cb --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/block-proposal/index.md @@ -0,0 +1,69 @@ +--- +title: Pendekezo la bloku +description: Maelezo ya jinsi bloku zinavyopendekezwa katika uthibitisho wa hisa wa Ethereum. +lang: sw +--- + +Bloku ndio vitengo vya msingi vya mnyororo wa bloku. Bloku ni vitengo tofauti vya habari vinavyopitishwa kati ya nodi, kukubaliwa na kuongezwa kwenye hifadhidata ya kila nodi. Ukurasa huu unaelezea jinsi zinavyotengenezwa. + +## Mahitaji ya awali {#prerequisites} + +Pendekezo la bloku ni sehemu ya itifaki ya uthibitisho wa hisa. Ili kusaidia kuelewa ukurasa huu, tunapendekeza usome kuhusu [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/) na [usanifu wa bloku](/developers/docs/blocks/). + +## Nani anayetengeneza bloku? {#who-produces-blocks} + +Akaunti za wathibitishaji hupendekeza bloku. Akaunti za wathibitishaji husimamiwa na waendeshaji wa nodi wanaoendesha programu ya wathibitishaji kama sehemu ya wateja wao wa utekelezaji na makubaliano na wameweka angalau ETH 32 kwenye mkataba wa amana. Hata hivyo, kila mthibitishaji huwajibika mara kwa mara tu kupendekeza bloku. Ethereum hupima muda katika nafasi na epochs. Kila nafasi ni sekunde kumi na mbili, na nafasi 32 (dakika 6.4) hufanya epoch moja. Kila nafasi ni fursa ya kuongeza bloku mpya kwenye Ethereum. + +### Uteuzi nasibu {#random-selection} + +Mthibitishaji mmoja huchaguliwa kwa njia isiyo ya kawaida ili kupendekeza bloku katika kila nafasi. Hakuna kitu kama nasibu ya kweli katika mnyororo wa bloku kwa sababu kama kila nodi ingezalisha nambari nasibu kweli, wasingeweza kufikia makubaliano. Badala yake, lengo ni kufanya mchakato wa uteuzi wa mthibitishaji usiweze kutabirika. Unasibu unafikiwa kwenye Ethereum kwa kutumia algoriti inayoitwa RANDAO inayochanganya hashi kutoka kwa mpendekezaji wa bloku na mbegu ambayo husasishwa kila bloku. Thamani hii hutumiwa kuchagua mthibitishaji maalum kutoka kwa seti nzima ya wathibitishaji. Uteuzi wa wathibitishaji umewekwa epochs mbili mapema kama njia ya kujilinda dhidi ya aina fulani za udukuzi wa mbegu. + +Ingawa wathibitishaji huongeza kwenye RANDAO katika kila nafasi, thamani ya RANDAO ya kimataifa inasasishwa mara moja tu kwa kila epoch. Ili kukokotoa faharasa ya mpendekezaji wa bloku inayofuata, thamani ya RANDAO huchanganywa na nambari ya nafasi ili kutoa thamani ya kipekee katika kila nafasi. Uwezekano wa mthibitishaji binafsi kuchaguliwa si tu `1/N` (ambapo `N` = jumla ya wathibitishaji wanaofanya kazi). Badala yake, ina uzito kulingana na salio la ETH linalofaa la kila mthibitishaji. Salio la juu zaidi linalofaa ni ETH 32 (hii inamaanisha kuwa `salio < 32 ETH` husababisha uzito wa chini kuliko `salio == 32 ETH`, lakini `salio > 32 ETH` haisababishi uzito wa juu kuliko `salio == 32 ETH`). + +Mpendekezaji mmoja tu wa bloku huchaguliwa katika kila nafasi. Katika hali ya kawaida, mtengenezaji mmoja wa bloku hutengeneza na kutoa bloku moja katika nafasi yake maalum. Kuunda bloku mbili kwa nafasi moja ni kosa linaloweza kusababisha kupunguzwa, mara nyingi hujulikana kama "utata". + +## Bloku huundwaje? {#how-is-a-block-created} + +Mpendekezaji wa bloku anatarajiwa kutangaza bloku ya beacon iliyosainiwa ambayo inajengwa juu ya mkuu wa hivi karibuni wa mnyororo kulingana na mtazamo wa algoriti yao ya kuchagua uma inayoendeshwa ndani. Algoriti ya uteuzi wa uma hutumia uthibitishaji wowote uliowekwa kwenye foleni uliobaki kutoka kwenye nafasi ya awali, kisha hupata bloku yenye uzito mkubwa zaidi uliokusanywa wa uthibitishaji katika historia yake. Bloku hiyo ndiyo mzazi wa bloku mpya iliyoundwa na mpendekezaji. + +Mpendekezaji wa bloku hutengeneza bloku kwa kukusanya data kutoka kwenye hifadhidata yake ya ndani na mtazamo wa mnyororo. Yaliyomo kwenye bloku yanaonyeshwa kwenye dondoo hapa chini: + +```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 +``` + +Sehemu ya `randao_reveal` inachukua thamani nasibu inayoweza kuthibitishwa ambayo mpendekezaji wa bloku huunda kwa kusaini nambari ya epoch ya sasa. `eth1_data` ni kura kwa mtazamo wa mpendekezaji wa bloku wa mkataba wa amana, ikiwa ni pamoja na mzizi wa amana ya Merkle trie na jumla ya idadi ya amana zinazowezesha amana mpya kuthibitishwa. `graffiti` ni sehemu ya hiari ambayo inaweza kutumika kuongeza ujumbe kwenye bloku. `proposer_slashings` na `attester_slashings` ni sehemu zenye uthibitisho kwamba wathibitishaji fulani wamefanya makosa yanayoweza kusababisha kupunguzwa kulingana na mtazamo wa mpendekezaji wa mnyororo. `deposits` ni orodha ya amana mpya za wathibitishaji ambazo mpendekezaji wa bloku anazifahamu, na `voluntary_exits` ni orodha ya wathibitishaji wanaotaka kujiondoa ambayo mpendekezaji wa bloku amesikia kuihusu kwenye mtandao wa porojo wa safu ya makubaliano. `sync_aggregate` ni vekta inayoonyesha ni wathibitishaji gani waliopewa hapo awali kamati ya kusawazisha (kikundi kidogo cha wathibitishaji wanaohudumia data ya mteja mwepesi) na walishiriki katika kusaini data. + +`execution_payload` huwezesha taarifa kuhusu miamala kupitishwa kati ya wateja wa utekelezaji na makubaliano. `execution_payload` ni bloku ya data ya utekelezaji ambayo huwekwa ndani ya bloku ya beacon. Sehemu zilizo ndani ya `execution_payload` zinaakisi muundo wa bloku uliobainishwa katika karatasi ya manjano ya Ethereum, isipokuwa hakuna ommers na `prev_randao` ipo badala ya `difficulty`. Mteja wa utekelezaji ana ufikiaji wa hifadhi ya ndani ya miamala ambayo ameisikia kwenye mtandao wake wa porojo. Miamala hii inatekelezwa ndani ya nchi ili kuzalisha trie ya hali iliyosasishwa inayojulikana kama hali ya baada. Miamala imejumuishwa katika `execution_payload` kama orodha inayoitwa `transactions` na hali ya baada inatolewa katika sehemu ya `state-root`. + +Data hizi zote hukusanywa katika bloku ya beacon, husainiwa, na kutangazwa kwa wenzao wa mpendekezaji wa bloku, ambao huisambaza kwa wenzao, na kadhalika. + +Soma zaidi kuhusu [muundo wa bloku](/developers/docs/blocks). + +## Nini kinatokea kwa bloku? {#what-happens-to-blocks} + +Bloku huongezwa kwenye hifadhidata ya ndani ya mpendekezaji wa bloku na kutangazwa kwa wenzao kupitia mtandao wa porojo wa safu ya makubaliano. Mthibitishaji anapopokea bloku, huthibitisha data iliyo ndani yake, ikiwa ni pamoja na kuangalia kama bloku ina mzazi sahihi, inalingana na nafasi sahihi, kwamba faharasa ya mpendekezaji ndiyo inayotarajiwa, kwamba ufichuzi wa RANDAO ni halali na kwamba mpendekezaji hajapunguzwa. `execution_payload` imetenganishwa, na mteja wa utekelezaji wa mthibitishaji hutekeleza tena miamala katika orodha ili kuangalia mabadiliko ya hali yaliyopendekezwa. Kwa kudhania bloku inapita ukaguzi huu wote, kila mthibitishaji huongeza bloku kwenye mnyororo wake mkuu. Mchakato huo kisha huanza tena katika nafasi inayofuata. + +## Zawadi za Bloku {#block-rewards} + +Mpendekezaji wa bloku hupokea malipo kwa kazi yao. Kuna `zawadi ya msingi` inayokokotolewa kama kitendo cha idadi ya wathibitishaji wanaofanya kazi na salio zao zinazofaa. Kisha mpendekezaji wa bloku hupokea sehemu ya `zawadi ya msingi` kwa kila uthibitishaji halali uliojumuishwa kwenye bloku; kadiri wathibitishaji wengi wanavyothibitisha bloku, ndivyo zawadi ya mpendekezaji wa bloku inavyokuwa kubwa. Pia kuna zawadi ya kuripoti wathibitishaji wanaopaswa kupunguzwa, sawa na `1/512 * salio linalofaa` kwa kila mthibitishaji aliyepunguzwa. + +[Zaidi kuhusu zawadi na adhabu](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) + +## Masomo zaidi {#further-reading} + +- [Utangulizi wa bloku](/developers/docs/blocks/) +- Utangulizi wa Uthibitisho wa Rehani +- [Vigezo vya makubaliano vya Ethereum](https://github.com/ethereum/consensus-specs) +- [Utangulizi wa Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) +- [Kuboresha Ethereum](https://eth2book.info/) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/faqs/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/faqs/index.md new file mode 100644 index 00000000000..c6c29ce799b --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/faqs/index.md @@ -0,0 +1,172 @@ +--- +title: Maswali Yanayoulizwa Mara kwa Mara +description: Maswali yanayoulizwa mara kwa mara kuhusu uthibitisho wa hisa wa Ethereum. +lang: sw +--- + +## Uthibitisho wa hisa ni nini? {#what-is-proof-of-stake} + +Uthibitisho wa hisa ni aina ya algoriti ambayo inaweza kutoa usalama kwa mnyororo wa bloku kwa kuhakikisha kuwa mali za thamani zinapotea na washambuliaji wanaotenda kwa udanganyifu. Mifumo ya uthibitisho wa hisa inahitaji seti ya wathibitishaji kuweka mali fulani ambayo inaweza kuharibiwa ikiwa mthibitishaji atajihusisha na tabia fulani isiyo ya uaminifu inayoweza kuthibitishwa. Ethereum inatumia utaratibu wa uthibitisho wa hisa ili kuulinda mnyororo wa bloku. + +## Uthibitisho wa hisa unalinganishwaje na uthibitisho wa kazi? {#comparison-to-proof-of-work} + +Zote, uthibitisho wa kazi na uthibitisho wa hisa ni taratibu ambazo kiuchumi huwakatisha tamaa watendaji hasidi kutuma barua taka au kulaghai mtandao. Katika hali zote mbili, nodi zinazoshiriki kikamilifu katika makubaliano huweka mali fulani "kwenye mtandao" ambayo wataipoteza ikiwa watatenda isivyofaa. + +Katika uthibitisho wa kazi, mali hii ni nishati. Nodi, inayojulikana kama mchimbaji, huendesha algoriti inayolenga kukokotoa thamani kwa haraka kuliko nodi nyingine yoyote. Nodi ya haraka zaidi ina haki ya kupendekeza bloku kwenye mnyororo. Ili kubadilisha historia ya mnyororo au kutawala pendekezo la bloku, mchimbaji angehitaji kuwa na nguvu nyingi za kompyuta kiasi kwamba daima anashinda mbio. Hii ni ghali mno na ni vigumu kutekeleza, hivyo kulinda mnyororo dhidi ya mashambulizi. Nishati inayohitajika "kuchimba" kwa kutumia uthibitisho wa kazi ni mali halisi ya ulimwengu ambayo wachimbaji hulipia. + +Uthibitisho wa hisa unahitaji nodi, zinazojulikana kama wathibitishaji, kuwasilisha mali ya crypto kwa uwazi kwa mkataba-erevu. Ikiwa mthibitishaji atatenda isivyofaa, crypto hii inaweza kuharibiwa kwa sababu "wanaweka hisa" mali zao moja kwa moja kwenye mnyororo badala ya kwa njia isiyo ya moja kwa moja kupitia matumizi ya nishati. + +Uthibitisho wa kazi unatumia nishati nyingi zaidi kwa sababu umeme unachomwa katika mchakato wa uchimbaji. Kwa upande mwingine, uthibitisho wa hisa, unahitaji kiasi kidogo sana cha nishati - wathibitishaji wa Ethereum wanaweza hata kuendeshwa kwenye kifaa chenye nguvu ndogo kama vile Raspberry Pi. Utaratibu wa uthibitisho wa hisa wa Ethereum unafikiriwa kuwa salama zaidi kuliko uthibitisho wa kazi kwa sababu gharama ya kushambulia ni kubwa zaidi, na matokeo kwa mshambuliaji ni makali zaidi. + +Uthibitisho wa kazi dhidi ya uthibitisho wa hisa ni mada yenye utata. [Blogu ya 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) na mjadala kati ya Justin Drake na Lyn Alden unatoa muhtasari mzuri wa hoja. + + + +## Je, uthibitisho wa hisa unatumia nishati kwa ufanisi? {#is-pos-energy-efficient} + +Ndiyo. Nodi kwenye mtandao wa uthibitisho wa hisa hutumia kiasi kidogo sana cha nishati. Utafiti wa watu wengine ulihitimisha kuwa mtandao mzima wa uthibitisho wa hisa wa Ethereum unatumia karibu TWh/mwaka 0.0026 - karibu mara 13,000 pungufu kuliko michezo ya kubahatisha nchini Marekani pekee. + +[Zaidi kuhusu matumizi ya nishati ya Ethereum](/energy-consumption/). + +## Je, uthibitisho wa hisa ni salama? {#is-pos-secure} + +Uthibitisho wa hisa wa Ethereum ni salama sana. Utaratibu huo ulifanyiwa utafiti, ukaendelezwa, na kujaribiwa kwa umakini kwa zaidi ya miaka minane kabla ya kuanza kutumika. Dhamana za usalama ni tofauti na minyororo ya bloku ya uthibitisho wa kazi. Katika uthibitisho wa hisa, wathibitishaji hasidi wanaweza kuadhibiwa kikamilifu ("kupunguzwa hisa") na kutolewa kwenye seti ya wathibitishaji, jambo ambalo hugharimu kiasi kikubwa cha ETH. Chini ya uthibitisho wa kazi, mshambuliaji anaweza kuendelea kurudia shambulio lake mradi ana nguvu ya kutosha ya hashi. Pia ni ghali zaidi kufanya mashambulizi sawa kwenye Ethereum ya uthibitisho wa hisa kuliko chini ya uthibitisho wa kazi. Ili kuathiri uhai wa mnyororo, angalau 33% ya jumla ya ether iliyowekwa hisa kwenye mtandao inahitajika (isipokuwa katika kesi za mashambulizi ya kisasa sana yenye uwezekano mdogo sana wa kufaulu). Ili kudhibiti yaliyomo kwenye bloku za siku zijazo, angalau 51% ya jumla ya ETH iliyowekwa hisa inahitajika, na ili kuandika upya historia, zaidi ya 66% ya jumla ya hisa inahitajika. Itifaki ya Ethereum ingeharibu mali hizi katika hali za mashambulizi ya 33% au 51% na kwa makubaliano ya kijamii katika hali ya shambulio la 66%. + +- [Zaidi kuhusu kulinda uthibitisho wa hisa wa Ethereum dhidi ya washambuliaji](/developers/docs/consensus-mechanisms/pos/attack-and-defense) +- [Zaidi kuhusu muundo wa uthibitisho wa hisa](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) + +## Je, uthibitisho wa hisa unaifanya Ethereum kuwa nafuu? {#does-pos-make-ethereum-cheaper} + +Hapana. Gharama ya kutuma muamala (ada ya gesi) huamuliwa na soko la ada linalobadilika ambalo huongezeka kadiri mahitaji ya mtandao yanavyoongezeka. Utaratibu wa makubaliano hauathiri hili moja kwa moja. + +[Zaidi kuhusu gesi](/developers/docs/gas). + +## Nodi, wateja na wathibitishaji ni nini? {#what-are-nodes-clients-and-validators} + +Nodi ni kompyuta zilizounganishwa na mtandao wa Ethereum. Wateja ni programu wanayoitumia inayobadilisha kompyuta kuwa nodi. Kuna aina mbili za wateja: wateja wa utekelezaji na wateja wa makubaliano. Zote zinahitajika ili kuunda nodi. Mthibitishaji ni programu-jalizi ya hiari kwa mteja wa makubaliano ambayo huwezesha nodi kushiriki katika makubaliano ya uthibitisho wa hisa. Hii inamaanisha kuunda na kupendekeza bloku zinapochaguliwa na kuthibitisha bloku wanazosikia kuzihusu kwenye mtandao. Ili kuendesha mthibitishaji, mwendeshaji wa nodi lazima aweke ETH 32 kwenye mkataba wa amana. + +- [Zaidi kuhusu nodi na wateja](/developers/docs/nodes-and-clients) +- [Zaidi kuhusu kuweka hisa](/staking) + +## Je, uthibitisho wa hisa ni wazo jipya? {#is-pos-new} + +Hapana. Mtumiaji kwenye BitcoinTalk [alipendekeza wazo la msingi la uthibitisho wa hisa](https://bitcointalk.org/index.php?topic=27787.0) kama sasisho la Bitcoin mnamo 2011. Ilichukua miaka kumi na moja kabla ya kuwa tayari kutekelezwa kwenye Mtandao Mkuu wa Ethereum. Baadhi ya minyororo mingine ilitekeleza uthibitisho wa hisa mapema kuliko Ethereum, lakini si utaratibu maalum wa Ethereum (unaojulikana kama Gasper). + +## Ni nini maalum kuhusu uthibitisho wa hisa wa Ethereum? {#why-is-ethereum-pos-special} + +Utaratibu wa uthibitisho wa hisa wa Ethereum ni wa kipekee katika muundo wake. Haukuwa utaratibu wa kwanza wa uthibitisho wa hisa kuundwa na kutekelezwa, lakini ndio ulio thabiti zaidi. Utaratibu wa uthibitisho wa hisa unajulikana kama "Casper". Casper inaelezea jinsi wathibitishaji wanavyochaguliwa kupendekeza bloku, jinsi na lini uthibitishaji unafanywa, jinsi uthibitishaji unavyohesabiwa, zawadi na adhabu wanazopewa wathibitishaji, masharti ya kupunguza hisa, taratibu za usalama kama vile uvujaji wa kutoshiriki, na masharti ya "mwisho". Mwisho ni sharti kwamba ili bloku ichukuliwe kuwa sehemu ya kudumu ya mnyororo mkuu lazima iwe imepigiwa kura na angalau 66% ya jumla ya ETH iliyowekwa hisa kwenye mtandao. Watafiti walitengeneza Casper mahususi kwa ajili ya Ethereum, na Ethereum ndio mnyororo wa bloku wa kwanza na wa pekee kuutekeleza. + +Mbali na Casper, uthibitisho wa hisa wa Ethereum unatumia algoriti ya uchaguzi wa uma iitwayo LMD-GHOST. Hii inahitajika endapo hali itatokea ambapo bloku mbili zipo kwa ajili ya nafasi moja. Hii inaunda uma mbili za mnyororo wa bloku. LMD-GHOST huchagua ile iliyo na "uzito" mkubwa zaidi wa uthibitisho. Uzito ni idadi ya uthibitisho uliopimwa kwa salio la ufanisi la wathibitishaji. LMD-GHOST ni ya kipekee kwa Ethereum. + +Mchanganyiko wa Casper na LMD_GHOST unajulikana kama Gasper. + +[Zaidi kuhusu Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) + +## Kupunguza hisa ni nini? {#what-is-slashing} + +Kupunguza hisa ni neno linalotumika kuelezea uharibifu wa baadhi ya hisa za mthibitishaji na kumwondoa mthibitishaji kwenye mtandao. Kiasi cha ETH kinachopotea katika upunguzaji hisa huongezeka kulingana na idadi ya wathibitishaji wanaopunguzwa hisa - hii inamaanisha wathibitishaji wanaoshirikiana wanaadhibiwa vikali zaidi kuliko watu binafsi. + +[Zaidi kuhusu kupunguza hisa](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties#slashing) + +## Kwa nini wathibitishaji wanahitaji ETH 32? {#why-32-eth} + +Wathibitishaji wanapaswa kuweka hisa ya ETH ili wawe na kitu cha kupoteza wakitenda isivyofaa. Sababu mahususi ya wao kuweka hisa ya ETH 32 ni kuwezesha nodi kufanya kazi kwenye maunzi ya kawaida. Kama kiwango cha chini cha ETH kwa kila mthibitishaji kingekuwa cha chini, basi idadi ya wathibitishaji na hivyo basi idadi ya jumbe zinazopaswa kuchakatwa katika kila nafasi ingeongezeka, ikimaanisha maunzi yenye nguvu zaidi yangehitajika ili kuendesha nodi. + +## Wathibitishaji huchaguliwaje? {#how-are-validators-selected} + +Mthibitishaji mmoja huchaguliwa kwa njia isiyo ya nasibu kupendekeza bloku katika kila nafasi kwa kutumia algoriti iitwayo RANDAO ambayo inachanganya hashi kutoka kwa mpendekezaji wa bloku na mbegu ambayo inasasishwa kila bloku. Thamani hii hutumiwa kuchagua mthibitishaji maalum kutoka kwa seti nzima ya wathibitishaji. Uchaguzi wa mthibitishaji huwekwa vipindi viwili mapema. + +[Zaidi kuhusu uchaguzi wa wathibitishaji](/developers/docs/consensus-mechanisms/pos/block-proposal) + +## Udanganyifu wa hisa ni nini? {#what-is-stake-grinding} + +Udanganyifu wa hisa ni aina ya shambulio kwenye mitandao ya uthibitisho wa hisa ambapo mshambuliaji anajaribu kupendelea algoriti ya uteuzi wa wathibitishaji kwa niaba ya wathibitishaji wake. Mashambulizi ya udanganyifu wa hisa kwenye RANDAO yanahitaji karibu nusu ya jumla ya ETH iliyowekwa hisa. + +[Zaidi kuhusu udanganyifu wa hisa](https://eth2book.info/altair/part2/building_blocks/randomness/#randao-biasability) + +## Upunguzaji hisa wa kijamii ni nini? {#what-is-social-slashing} + +Upunguzaji hisa wa kijamii ni uwezo wa jumuiya kuratibu uma wa mnyororo wa bloku katika kukabiliana na shambulio. Huwezesha jumuiya kupona kutoka kwa mshambuliaji anayekamilisha mnyororo usio mwaminifu. Upunguzaji hisa wa kijamii unaweza pia kutumika dhidi ya mashambulizi ya udhibiti. + +- [Zaidi kuhusu upunguzaji hisa wa kijamii](https://ercwl.medium.com/the-case-for-social-slashing-59277ff4d9c7) +- [Vitalik Buterin kuhusu upunguzaji hisa wa kijamii](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) + +## Je, nitapunguzwa hisa? {#will-i-get-slashed} + +Kama mthibitishaji, ni vigumu sana kupunguzwa hisa isipokuwa ukijihusisha kimakusudi na tabia hasidi. Upunguzaji hisa hutekelezwa tu katika hali maalum sana ambapo wathibitishaji wanapendekeza bloku nyingi kwa nafasi moja au wanajipinga wenyewe na uthibitisho wao - hizi haziwezekani kutokea kwa bahati mbaya. + +[Zaidi kuhusu masharti ya upunguzaji hisa](https://eth2book.info/altair/part2/incentives/slashing) + +## Tatizo la 'hakuna-kilichowekwa-hisa' ni nini? {#what-is-nothing-at-stake-problem} + +Tatizo la 'hakuna-kilichowekwa-hisa' ni suala la dhana na baadhi ya taratibu za uthibitisho wa hisa ambapo kuna zawadi tu na hakuna adhabu. Ikiwa hakuna kilichowekwa hisa, mthibitishaji mwenye busara anafurahi kwa usawa kuthibitisha uma wowote, au hata nyingi, za mnyororo wa bloku, kwani hii huongeza zawadi zao. Ethereum inaepuka hili kwa kutumia masharti ya mwisho na upunguzaji hisa ili kuhakikisha mnyororo mmoja mkuu. + +[Zaidi kuhusu tatizo la 'hakuna-kilichowekwa-hisa'](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed) + +## Algoriti ya uchaguzi wa uma ni nini? {#what-is-a-fork-choice-algorithm} + +Algoriti ya uchaguzi wa uma hutekeleza sheria zinazoamua ni mnyororo upi ulio mkuu. Chini ya hali bora, hakuna haja ya sheria ya uchaguzi wa uma kwa sababu kuna mpendekezaji mmoja tu wa bloku kwa kila nafasi na bloku moja tu ya kuchagua. Hata hivyo, mara kwa mara, bloku nyingi kwa nafasi moja au habari zinazofika kwa kuchelewa husababisha chaguzi nyingi za jinsi bloku zilizo karibu na kichwa cha mnyororo zinavyopangwa. Katika kesi hizi, wateja wote lazima watekeleze sheria fulani kwa kufanana ili kuhakikisha wote wanachagua mfuatano sahihi wa bloku. Algoriti ya uchaguzi wa uma huweka sheria hizi. + +Algoriti ya uchaguzi wa uma ya Ethereum inaitwa LMD-GHOST. Huchagua uma yenye uzito mkubwa zaidi wa uthibitisho, ikimaanisha ile ambayo ETH nyingi iliyowekwa hisa imeipigia kura. + +[Zaidi kuhusu LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper/#fork-choice) + +## Mwisho katika uthibitisho wa hisa ni nini? {#what-is-finality} + +Mwisho katika uthibitisho wa hisa ni hakikisho kwamba bloku fulani ni sehemu ya kudumu ya mnyororo mkuu na haiwezi kurejeshwa isipokuwa kuwe na kushindwa kwa makubaliano ambapo mshambuliaji anateketeza 33% ya jumla ya ether iliyowekwa hisa. Huu ni mwisho wa "kiuchumi-kripto", kinyume na "mwisho wa uwezekano" ambao unahusiana na minyororo ya bloku ya uthibitisho wa kazi. Katika mwisho wa uwezekano, hakuna hali zilizo wazi za bloku zilizokamilishwa/zisizokamilishwa - inakuwa tu chini na chini ya uwezekano kwamba bloku inaweza kuondolewa kwenye mnyororo kadri inavyozeeka, na watumiaji huamua wenyewe wakati wanajiamini vya kutosha kuwa bloku iko "salama". Kwa mwisho wa kiuchumi-kripto, jozi za bloku za vituo vya ukaguzi zinapaswa kupigiwa kura na 66% ya ether iliyowekwa hisa. Ikiwa sharti hili litatimizwa, bloku kati ya vituo hivyo vya ukaguzi "zimekamilishwa" waziwazi. + +[Zaidi kuhusu mwisho](/developers/docs/consensus-mechanisms/pos/#finality) + +## "Upendeleo dhaifu" ni nini? {#what-is-weak-subjectivity} + +Upendeleo dhaifu ni kipengele cha mitandao ya uthibitisho wa hisa ambapo habari za kijamii hutumiwa kuthibitisha hali ya sasa ya mnyororo wa bloku. Nodi mpya au nodi zinazojiunga tena na mtandao baada ya kuwa nje ya mtandao kwa muda mrefu zinaweza kupewa hali ya hivi karibuni ili nodi iweze kuona mara moja ikiwa ziko kwenye mnyororo sahihi. Hali hizi zinajulikana kama "vituo vya ukaguzi vya upendeleo dhaifu" na zinaweza kupatikana kutoka kwa waendeshaji wengine wa nodi nje ya bendi, au kutoka kwa wachunguzi wa bloku, au kutoka kwa sehemu kadhaa za umma. + +[Zaidi kuhusu upendeleo dhaifu](/developers/docs/consensus-mechanisms/pos/weak-subjectivity) + +## Je, uthibitisho wa hisa ni sugu dhidi ya udhibiti? {#is-pos-censorship-resistant} + +Upinzani dhidi ya udhibiti kwa sasa ni vigumu kuthibitisha. Hata hivyo, tofauti na uthibitisho wa kazi, uthibitisho wa hisa hutoa fursa ya kuratibu upunguzaji hisa ili kuwaadhibu wathibitishaji wanaodhibiti. Kuna mabadiliko yajayo kwenye itifaki ambayo yanatenganisha wajenzi wa bloku na wapendekezaji wa bloku na kutekeleza orodha za miamala ambayo wajenzi lazima wajumuishe katika kila bloku. Pendekezo hili linajulikana kama utengano wa mpendekezaji na mjenzi na husaidia kuzuia wathibitishaji kudhibiti miamala. + +[Zaidi kuhusu utengano wa mpendekezaji na mjenzi](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Original-basic-scheme) + +## Je, mfumo wa uthibitisho wa hisa wa Ethereum unaweza kushambuliwa kwa 51%? {#pos-51-attack} + +Ndiyo. Uthibitisho wa hisa uko katika hatari ya mashambulizi ya 51%, kama vile uthibitisho wa kazi. Badala ya mshambuliaji kuhitaji 51% ya nguvu ya hashi ya mtandao, mshambuliaji anahitaji 51% ya jumla ya ETH iliyowekwa hisa. Mshambuliaji anayekusanya 51% ya jumla ya hisa anapata kudhibiti algoriti ya uchaguzi wa uma. Hii humwezesha mshambuliaji kudhibiti miamala fulani, kufanya upangaji upya wa masafa mafupi na kutoa MEV (thamani ya juu ambayo inaweza kutolewa) kwa kupanga upya bloku kwa manufaa yao. + +[Zaidi kuhusu mashambulizi kwenye uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/attack-and-defense) + +## Uratibu wa kijamii ni nini, na kwa nini unahitajika? {#what-is-social-coordination} + +Uratibu wa kijamii ni mstari wa mwisho wa ulinzi kwa Ethereum ambao ungeruhusu mnyororo mwaminifu kurejeshwa kutoka kwa shambulio lililokamilisha bloku zisizo za uaminifu. Katika hali hii, jumuiya ya Ethereum ingelazimika kuratibu "nje ya bendi" na kukubali kutumia uma wa wachache waaminifu, huku wakiwapunguza hisa wathibitishaji wa mshambuliaji katika mchakato huo. Hii ingehitaji programu na soko za ubadilishanaji kutambua uma wa uaminifu pia. + +[Soma zaidi kuhusu uratibu wa kijamii](/developers/docs/consensus-mechanisms/pos/attack-and-defense#people-the-last-line-of-defense) + +## Je, matajiri wanazidi kuwa matajiri katika uthibitisho wa hisa? {#do-rich-get-richer} + +Kadiri mtu anavyokuwa na ETH nyingi za kuweka hisa, ndivyo anavyoweza kuendesha wathibitishaji wengi, na ndivyo anavyoweza kupata zawadi nyingi zaidi. Zawadi huongezeka kwa uwiano na kiasi cha ETH iliyowekwa hisa, na kila mtu anapata asilimia sawa ya faida. Uthibitisho wa kazi huwatajirisha matajiri zaidi kuliko uthibitisho wa hisa kwa sababu wachimbaji matajiri wanaonunua maunzi kwa kiwango kikubwa hunufaika na uchumi wa kiwango, ikimaanisha uhusiano kati ya utajiri na zawadi si wa kimstari. + +## Je, uthibitisho wa hisa una ugatuzi mdogo kuliko uthibitisho wa kazi? {#is-pos-decentralized} + +Hapana, uthibitisho wa kazi huelekea kwenye ugatuzi mdogo kwa sababu gharama za uchimbaji huongezeka na kuwaondoa watu binafsi sokoni, kisha kuwaondoa makampuni madogo sokoni, na kadhalika. Tatizo la sasa na uthibitisho wa hisa ni ushawishi wa derivativi za kuweka hisa za kioevu (LSDs). Hizi ni tokeni zinazowakilisha ETH iliyowekwa hisa na mtoa huduma fulani ambazo mtu yeyote anaweza kubadilisha kwenye masoko ya pili bila ETH halisi kutolewa kwenye hisa. LSDs huruhusu watumiaji kuweka hisa na chini ya ETH 32, lakini pia huunda hatari ya ugatuzi mdogo ambapo mashirika machache makubwa yanaweza kuishia kudhibiti sehemu kubwa ya hisa. [kuweka hisa kwa kujitegemea](/staking/solo) ndiyo chaguo bora zaidi kwa Ethereum. + +[Zaidi kuhusu ugatuzi mdogo wa hisa katika LSDs](https://notes.ethereum.org/@djrtwo/risks-of-lsd) + +## Kwa nini naweza tu kuweka hisa ya ETH? {#why-can-i-only-stake-eth} + +ETH ni sarafu asili ya Ethereum. Ni muhimu kuwa na sarafu moja ambayo hisa zote zinatajwa kwayo, kwa ajili ya kuhesabu salio la ufanisi kwa kupima kura na usalama. ETH yenyewe ni sehemu ya msingi ya Ethereum badala ya kuwa mkataba-erevu. Kujumuisha sarafu nyingine kungeongeza kwa kiasi kikubwa utata na kupunguza usalama wa kuweka hisa. + +## Je, Ethereum ndiyo mnyororo wa bloku pekee wa uthibitisho wa hisa? {#is-ethereum-the-only-pos-blockchain} + +Hapana, kuna minyororo kadhaa ya bloku ya uthibitisho wa hisa. Hakuna inayofanana na Ethereum; utaratibu wa uthibitisho wa hisa wa Ethereum ni wa kipekee. + +## Muunganisho ni nini? {#what-is-the-merge} + +Muungano ulikuwa wakati ambapo Ethereum ilizima utaratibu wake wa makubaliano wenye msingi wa uthibitisho wa kazi na kuwasha utaratibu wake wa makubaliano wenye msingi wa uthibitisho wa hisa. Muungano ulifanyika Septemba 15, 2022. + +[Zaidi kuhusu Muungano](/roadmap/merge) + +## Uhai na usalama ni nini? {#what-are-liveness-and-safety} + +Uhai na usalama ni maswala mawili ya msingi ya usalama kwa mnyororo wa bloku. Uhai ni upatikanaji wa mnyororo unaokamilisha. Ikiwa mnyororo utaacha kukamilisha au watumiaji hawawezi kuufikia kwa urahisi, hayo ni mapungufu ya uhai. Gharama kubwa sana ya ufikiaji inaweza pia kuchukuliwa kuwa upungufu wa uhai. Usalama unahusu jinsi ilivyo vigumu kushambulia mnyororo - yaani, kukamilisha vituo vya ukaguzi vinavyokinzana. + +[Soma zaidi kwenye karatasi ya Casper](https://arxiv.org/pdf/1710.09437.pdf) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/gasper/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/gasper/index.md new file mode 100644 index 00000000000..c78b8777039 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/gasper/index.md @@ -0,0 +1,52 @@ +--- +title: Gasper +description: Maelezo ya utaratibu wa Gasper wa uthibitisho-wa-hisa. +lang: sw +--- + +Gasper ni mchanganyiko wa Casper the Friendly Finality Gadget (Casper-FFG) na kanuni ya kuchagua uma ya LMD-GHOST. Kwa pamoja, vipengele hivi huunda utaratibu wa makubaliano unaolinda uthibitisho-wa-hisa wa Ethereum. Casper ni utaratibu unaoboresha bloku fulani kuwa "zilizokamilishwa" ili washiriki wapya kwenye mtandao wawe na uhakika kwamba wanasawazisha mnyororo mkuu. Kanuni ya kuchagua uma hutumia kura zilizokusanywa kuhakikisha nodi zinaweza kuchagua kwa urahisi ile sahihi wakati nyuma zinapotokea kwenye mnyororo wa bloku. + +**Kumbuka** kwamba ufafanuzi wa awali wa Casper-FFG ulisasishwa kidogo ili ujumuishwe katika Gasper. Kwenye ukurasa huu tunazingatia toleo lililosasishwa. + +## Masharti + +Ili kuelewa nyenzo hii ni muhimu kusoma ukurasa wa utangulizi kuhusu [uthibitisho-wa-hisa](/developers/docs/consensus-mechanisms/pos/). + +## Jukumu la Gasper {#role-of-gasper} + +Gasper ipo juu ya mnyororo wa bloku wa uthibitisho-wa-hisa ambapo nodi hutoa ether kama amana ya usalama ambayo inaweza kuharibiwa ikiwa ni wazembe au wadanganyifu katika kupendekeza au kuthibitisha bloku. Gasper ni utaratibu unaofafanua jinsi wathibitishaji wanavyopata zawadi na kuadhibiwa, kuamua ni bloku zipi za kukubali na kukataa, na ni uma upi wa mnyororo wa bloku wa kujenga juu yake. + +## Mwisho ni nini? {#what-is-finality} + +Mwisho ni sifa ya bloku fulani ambayo inamaanisha haziwezi kurejeshwa isipokuwa kumekuwa na hitilafu kubwa ya makubaliano na mshambulizi ameharibu angalau 1/3 ya jumla ya ether iliyohusishwa. Bloku zilizokamilishwa zinaweza kufikiriwa kama taarifa ambayo mnyororo wa bloku una uhakika nayo. Bloku lazima ipitie utaratibu wa uboreshaji wa hatua mbili ili bloku ikamilishwe: + +1. Theluthi mbili ya jumla ya ether iliyohusishwa lazima iwe imepiga kura kuunga mkono ujumuishwaji wa bloku hiyo katika mnyororo mkuu. Hali hii inaboresha bloku kuwa "iliyohalalishwa". Bloku zilizohalalishwa haziwezekani kurejeshwa, lakini zinaweza kurejeshwa chini ya hali fulani. +2. Wakati bloku nyingine inapohalalishwa juu ya bloku iliyohalalishwa, inaboreshwa kuwa "iliyokamilishwa". Kukamilisha bloku ni ahadi ya kujumuisha bloku hiyo katika mnyororo mkuu. Haiwezi kurejeshwa isipokuwa mshambulizi aharibu mamilioni ya ether (mabilioni ya $USD). + +Maboresho haya ya bloku hayatokei katika kila slot. Badala yake, ni bloku za mpaka wa kipindi pekee zinazoweza kuhalalishwa na kukamilishwa. Bloku hizi zinajulikana kama "vituo vya ukaguzi". Uboreshaji huzingatia jozi za vituo vya ukaguzi. "Kiungo cha walio wengi zaidi" lazima kiwepo kati ya vituo viwili vya ukaguzi vinavyofuatana (yaani, theluthi mbili ya jumla ya ether iliyohusishwa ikipiga kura kwamba kituo cha ukaguzi B ndicho kizazi sahihi cha kituo cha ukaguzi A) ili kuboresha kituo cha ukaguzi cha zamani zaidi kuwa kilichokamilishwa na bloku ya hivi karibuni zaidi kuwa iliyohalalishwa. + +Kwa sababu mwisho unahitaji makubaliano ya theluthi mbili kwamba bloku ni ya kikanuni, mshambulizi hawezi kabisa kuunda mnyororo mbadala uliokamilishwa bila: + +1. Kumiliki au kuchezea theluthi mbili ya jumla ya ether iliyohusishwa. +2. Kuharibu angalau theluthi moja ya jumla ya ether iliyohusishwa. + +Hali ya kwanza inatokea kwa sababu theluthi mbili ya ether iliyohusishwa inahitajika kukamilisha mnyororo. Hali ya pili inatokea kwa sababu ikiwa theluthi mbili ya hisa yote imepiga kura kuunga mkono nyuma zote mbili, basi theluthi moja lazima iwe imepiga kura kwa zote mbili. Kupiga kura mara mbili ni hali ya "slashing" ambayo ingeadhibiwa vikali zaidi, na theluthi moja ya hisa yote ingeharibiwa. Kufikia Mei 2022, hii inahitaji mshambulizi kuchoma takriban ether yenye thamani ya dola bilioni 10. Kanuni inayohalalisha na kukamilisha bloku katika Gasper ni aina iliyobadilishwa kidogo ya [Casper the Friendly Finality Gadget (Casper-FFG)](https://arxiv.org/pdf/1710.09437.pdf). + +### Vivutio na Slashing {#incentives-and-slashing} + +Wathibitishaji hupata zawadi kwa kupendekeza na kuthibitisha bloku kwa uaminifu. Ether hutolewa kama zawadi na kuongezwa kwenye hisa yao. Kwa upande mwingine, wathibitishaji ambao hawapo na wanashindwa kutenda wanapoitwa hukosa zawadi hizi na wakati mwingine hupoteza sehemu ndogo ya hisa yao iliyopo. Hata hivyo, adhabu za kutokuwa mtandaoni ni ndogo na, katika visa vingi, ni sawa na gharama za fursa za kukosa zawadi. Hata hivyo, baadhi ya vitendo vya wathibitishaji ni vigumu sana kufanya kwa bahati mbaya na huashiria nia mbaya, kama vile kupendekeza bloku nyingi kwa slot moja, kuthibitisha bloku nyingi kwa slot moja, au kupingana na kura za awali za kituo cha ukaguzi. Hizi ni tabia "zinazoweza kupigwa slashing" ambazo huadhibiwa vikali zaidi—slashing husababisha sehemu ya hisa ya mthibitishaji kuharibiwa na mthibitishaji kuondolewa kwenye mtandao wa wathibitishaji. Mchakato huu huchukua siku 36. Siku ya 1, kuna adhabu ya awali ya hadi ETH 1. Kisha ether ya mthibitishaji aliyepigwa slashing hupungua polepole katika kipindi cha kutoka, lakini Siku ya 18, wanapokea "adhabu ya uwiano", ambayo ni kubwa zaidi wakati wathibitishaji wengi wanapigwa slashing kwa wakati mmoja. Adhabu ya juu zaidi ni hisa nzima. Zawadi na adhabu hizi zimeundwa kuwahamasisha wathibitishaji waaminifu na kuzuia mashambulizi kwenye mtandao. + +### Uvujaji wa Kutofanya Kazi {#inactivity-leak} + +Pamoja na usalama, Gasper pia hutoa "uhai unaowezekana". Hii ndiyo hali ambayo maadamu theluthi mbili ya jumla ya ether iliyohusishwa inapiga kura kwa uaminifu na kufuata itifaki, mnyororo utaweza kukamilika bila kujali shughuli nyingine yoyote (kama vile mashambulizi, masuala ya kusubiri, au slashing). Kwa maneno mengine, theluthi moja ya jumla ya ether iliyohusishwa lazima iathiriwe kwa namna fulani ili kuzuia mnyororo kukamilika. Katika Gasper, kuna mstari wa ziada wa ulinzi dhidi ya kushindwa kwa uhai, unaojulikana kama "uvujaji wa kutofanya kazi". Utaratibu huu huwashwa mnyororo unaposhindwa kukamilika kwa zaidi ya vipindi vinne. Wathibitishaji ambao hawathibitishi kikamilifu mnyororo wa wengi hisa yao hupunguzwa polepole hadi wengi wapate tena theluthi mbili ya hisa yote, kuhakikisha kwamba kushindwa kwa uhai ni kwa muda tu. + +### Uchaguzi wa uma {#fork-choice} + +Ufafanuzi wa awali wa Casper-FFG ulijumuisha kanuni ya kuchagua uma iliyoweka sheria: `fuata mnyororo ulio na kituo cha ukaguzi kilichohalalishwa chenye urefu mrefu zaidi` ambapo urefu unafafanuliwa kama umbali mrefu zaidi kutoka kwa bloku ya mwanzo. Katika Gasper, sheria ya awali ya kuchagua uma imeachwa kwa ajili ya kanuni ya hali ya juu zaidi iitwayo LMD-GHOST. Ni muhimu kutambua kwamba chini ya hali za kawaida, sheria ya kuchagua uma si ya lazima - kuna mpendekezaji mmoja wa bloku kwa kila slot, na wathibitishaji waaminifu wanathibitisha. Ni katika visa vya kutokuwa na usawazishaji mkubwa wa mtandao tu au wakati mpendekezaji wa bloku asiye mwaminifu ametoa taarifa za kupotosha ndipo kanuni ya kuchagua uma inahitajika. Hata hivyo, visa hivyo vinapotokea, kanuni ya kuchagua uma ni ulinzi muhimu unaolinda mnyororo sahihi. + +LMD-GHOST inasimama kwa ajili ya "mti mdogo mzito zaidi uliozingatiwa unaoendeshwa na ujumbe wa hivi karibuni". Hii ni njia yenye jargon nyingi ya kufafanua kanuni inayochagua uma wenye uzito mwingi zaidi wa uthibitisho kama ule wa kikanuni (mti mdogo mzito zaidi wenye tamaa) na kwamba ikiwa ujumbe mwingi unapokelewa kutoka kwa mthibitishaji, ni ule wa hivi karibuni tu unaozingatiwa (unaoendeshwa na ujumbe wa hivi karibuni). Kabla ya kuongeza bloku nzito zaidi kwenye mnyororo wake mkuu, kila mthibitishaji hutathmini kila bloku kwa kutumia sheria hii. + +## Masomo zaidi {#further-reading} + +- [Gasper: Kuunganisha GHOST na Casper](https://arxiv.org/pdf/2003.03052.pdf) +- [Casper the Friendly Finality Gadget](https://arxiv.org/pdf/1710.09437.pdf) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/index.md new file mode 100644 index 00000000000..927b1a4044f --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/index.md @@ -0,0 +1,99 @@ +--- +title: Uthibitisho-wa-hisa (PoS) +description: Maelezo ya itifaki ya makubaliano ya uthibitisho wa stake na jukumu lake katika Ethereum. +lang: sw +--- + +Uthibitisho wa Hisa (PoS) ndio msingi wa [utaratibu wa makubaliano](/developers/docs/consensus-mechanisms/) wa Ethereum. Ethereum iliwasha utaratibu wake wa uthibitisho wa hisa mnamo 2022 kwa sababu ni salama zaidi, hutumia nishati kidogo, na ni bora zaidi kwa kutekeleza suluhu mpya za kuongeza ukubwa ikilinganishwa na usanifu wa awali wa [uthibitisho wa kazi](/developers/docs/consensus-mechanisms/pow). + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri zaidi, tunapendekeza usome kwanza kuhusu [taratibu za makubaliano](/developers/docs/consensus-mechanisms/). + +## Uthibitisho wa stake (PoS) ni nini? {#what-is-pos} + +Uthibitisho-wa-stake ni njia ya kuthibitisha kwamba wathibitishaji wameweka kitu cha thamani kwenye mtandao ambacho kinaweza kuharibiwa ikiwa watafanya uaminifu. Katika uthibitisho wa dau la Ethereum, waidhinishaji huweka stake waziwazi katika mfumo wa ETH na kuwa kandarasi mahiri kwenye Ethereum. Mthibitishaji basi ana jukumu la kuangalia ikiwa vitalu vipya vinavyoenezwa kwenye mtandao ni halali na mara kwa mara huunda na kueneza vitalu vipya vyenyewe. Iwapo watajaribu kulaghai mtandao (kwa mfano kwa kupendekeza vitalu vingi wakati wanapaswa kutuma moja au kutuma uthibitisho unaokinzana), baadhi ya staked ETH zao au zote zilizowekwa hatarini zinaweza kuharibiwa. + +## Wathibitishaji {#validators} + +Ili kushiriki kama mthibitishaji, ni lazima mtumiaji aweke 32 ETH kwenye mkataba wa amana na aendeshe vipande vitatu tofauti vya programu: mteja wa kutekeleza, mteja wa makubaliano na mteja aliyeidhinisha. Wakati wa kuweka ETH zao, mtumiaji hujiunga na foleni ya kuwezesha ambayo inaweka kikomo cha wathibitishaji wapya wanaojiunga na mtandao. Mara baada ya kuanzishwa, wathibitishaji hupokea vitalu vipya kutoka kwa wenzao kwenye mtandao wa Ethereum. Shughuli zilizowasilishwa kwenye kitalu zinatekelezwa tena ili kuangalia kwamba mabadiliko yaliyopendekezwa kwa hali ya Ethereum ni halali, na saini ya kitalu imeangaliwa. Kisha mthibitishaji hutuma kura (inayoitwa uthibitisho) kupendelea kitalu hicho kwenye mtandao. + +Ingawa chini ya uthibitisho wa kazi, muda wa vitalu huamuliwa na ugumu wa uchimbaji madini, katika uthibitisho wa stake, tempo huwekwa. Wakati katika uthibitisho wa hatari Ethereum imegawanywa katika nafasi (sekunde 12) na vipindi (mipaka 32). Kithibitishaji kimoja huchaguliwa kwa nasibu kuwa pendekezo la kitalu katika kila yanayopangwa. Kithibitishaji hiki kinawajibika kuunda kitalu kipya na kutuma kwa nodi zingine kwenye mtandao. Pia katika kila yanayopangwa, kamati ya wathibitishaji huchaguliwa kwa nasibu, ambao kura zao hutumiwa kuamua uhalali wa kitalu kinachopendekezwa. Kugawanya kiidhinishi kilichoundwa katika kamati ni muhimu kwa kuweka mzigo wa mtandao kudhibitiwa. Kamati hugawanya seti ya kiidhinishaji ili kila mthibitishaji anayetumika athibitishe katika kila kipindi, lakini si katika kila nafasi. + +## Jinsi Muamala Unavyotekelezwa katika Ethereum PoS {#transaction-execution-ethereum-pos} + +Ifuatayo inatoa maelezo ya mwisho hadi mwisho ya jinsi shughuli inavyotekelezwa katika uthibitisho wa stake ya Ethereum. + +1. Mtumiaji huunda na kutia saini [muamala](/developers/docs/transactions/) kwa kutumia ufunguo wake wa siri. Hii kwa kawaida hushughulikiwa na mkoba au maktaba kama vile [ethers.js](https://docs.ethers.org/v6/), [web3js](https://docs.web3js.org/), [web3py](https://web3py.readthedocs.io/en/v5/) n.k. lakini kwa ndani mtumiaji anafanya ombi kwa nodi kwa kutumia [API ya JSON-RPC](/developers/docs/apis/json-rpc/) ya Ethereum. Mtumiaji anafafanua kiasi cha gharama za miamala ambazo amejitayarisha kulipa kama kidokezo kwa kithibitishaji ili kumhimiza kujumuisha muamala kwenye kiambajengo. [Ada za kipaumbele](/developers/docs/gas/#priority-fee) hulipwa kwa mthibitishaji huku [ada ya msingi](/developers/docs/gas/#base-fee) ikichomwa. +2. Muamala huwasilishwa kwa [mteja wa utekelezaji](/developers/docs/nodes-and-clients/#execution-client) wa Ethereum ambaye huthibitisha uhalali wake. Hii inamaanisha kuhakikisha kuwa mtumaji ana ETH ya kutosha kutimiza muamala na wametia saini kwa ufunguo sahihi. +3. Ikiwa muamala ni halali, mteja wa utekelezaji anauongeza kwenye kumbukumbu yake ya ndani (orodha ya miamala ambayo haijashughulikiwa) na pia huitangaza kwa nodi nyingine juu ya safu ya utekelezaji ya mtandao wa porojo. Nodi nyingine zinaposikia kuhusu muamala huongeza kwenye kumbukumbu zao za ndani pia. Watumiaji wa hali ya juu wanaweza kujizuia kutangaza muamala wao na badala yake kuupeleka kwa wajenzi maalum wa vizuizi kama vile [Flashbots Auction](https://docs.flashbots.net/flashbots-auction/overview). Hii huwaruhusu kupanga miamala katika vizuizi vijavyo kwa faida ya juu zaidi ([MEV](/developers/docs/mev/#mev-extraction)). +4. Moja ya nodi za uthibitishaji kwenye mtandao ni pendekezo la kitalu kwa slot ya sasa, ambayo hapo awali ilichaguliwa pseudo-randomly kwa kutumia RANDAO. Node hii inawajibika kwa kujenga na kutangaza kitalu kinachofuata kuongezwa kwenye kiambajengo cha Ethereum na kusasisha hali ya kimataifa. Node imeundwa na sehemu tatu: mteja wa utekelezaji, mteja wa makubaliano na mteja wa kuthibitisha. Mteja wa utekelezaji hukusanya miamala kutoka kwa mempool ya ndani hadi "mzigo wa utekelezaji" na kuzitekeleza ndani ili kuleta mabadiliko ya hali. Taarifa hii hupitishwa kwa mteja wa makubaliano ambapo malipo ya utekelezaji yanafungwa kama sehemu ya "kitalu cha beacon" ambacho pia kina taarifa kuhusu zawadi, adhabu, kufyeka, uthibitisho n. k. zinazowezesha mtandao kukubaliana juu ya mlolongo wa vitalu kwenye kichwa cha mnyororo. Mawasiliano kati ya wateja wa utekelezaji na makubaliano yameelezewa kwa undani zaidi katika [Kuunganisha Wateja wa Makubaliano na Utekelezaji](/developers/docs/networking-layer/#connecting-clients). +5. Nodi zingine hupokea kitalu kipya cha beacon kwenye mtandao wa uvumi wa safu ya makubaliano. Wanaipitisha kwa mteja wao wa utekelezaji ambapo miamala inatekelezwa tena ndani ya nchi ili kuhakikisha kuwa mabadiliko ya hali yanayopendekezwa ni halali. Mteja mthibitishaji kisha huthibitisha kwamba kizuizi ni halali na ndicho kizuizi kinachofuata kimantiki katika mtazamo wao wa mnyororo (ikimaanisha inajengwa kwenye mnyororo wenye uzito mkubwa zaidi wa uthibitisho kama ilivyofafanuliwa katika [sheria za kuchagua uma](/developers/docs/consensus-mechanisms/pos/#fork-choice)). Kizuizi kinaongezwa kwenye hifadhidata ya ndani katika kila nodi inayoithibitisha. +6. Muamala unaweza kuchukuliwa kuwa "umekamilika" ikiwa umekuwa sehemu ya mlolongo wenye "kiungo cha walio wengi" kati ya vituo viwili vya ukaguzi. Vituo vya ukaguzi hutokea mwanzoni mwa kila kipindi na vipo kwa ajili ya ukweli kwamba ni sehemu ndogo tu ya wathibitishaji amilifu wanaothibitisha katika kila nafasi, lakini wathibitishaji wote wanaofanya kazi huthibitisha kila moja. Kwa hivyo, ni kati ya enzi pekee ambapo 'kiungo cha walio wengi zaidi' kinaweza kuonyeshwa (hapa ndipo 66% ya jumla ya ETH iliyowekwa kwenye mtandao inakubalika katika vituo viwili vya ukaguzi). + +Maelezo zaidi juu ya mwisho yanaweza kupatikana hapa chini. + +## Mwisho {#finality} + +Muamala una "mwisho" katika mitandao iliyosambazwa wakati ni sehemu ya kizuizi ambacho hakiwezi kubadilika bila kiwango kikubwa cha ETH kuchomwa. Kwenye Ethereum ya uthibitisho wa dau, hii inadhibitiwa kwa kutumia vitalu vya "vituo vya ukaguzi". Kitalu cha kwanza katika kila enzi ni kituo cha ukaguzi. Wathibitishaji hupigia kura jozi za vituo vya ukaguzi ambavyo inachukulia kuwa halali. Iwapo jozi ya vituo vya ukaguzi vitavutia kura zinazowakilisha angalau theluthi mbili ya jumla ya ETH zilizokua staked, vituo vya ukaguzi vinaboreshwa. Hivi karibuni zaidi ya mbili (lengo) inakuwa "haki". Mapema kati ya haya mawili tayari yamehesabiwa haki kwa sababu ilikuwa "lengo" katika enzi iliyopita. Sasa imeboreshwa hadi "imekamilika". Mchakato huu wa kuboresha vituo vya ukaguzi unashughulikiwa na **[Casper the Friendly Finality Gadget (Casper-FFG)](https://arxiv.org/pdf/1710.09437)**. Casper-FFG ni zana ya umwisho wa kizuizi kwa ajili ya makubaliano. Pindi kizuizi kinapokamilishwa, hakiwezi kurejeshwa nyuma au kubadilishwa bila kufyekwa kwa hisa za walio wengi, na kuifanya isiwezekane kiuchumi. + +Ili kurejesha kizuizi kilichokamilika, mshambulizi atajitolea kupoteza angalau theluthi moja ya jumla ya usambazaji wa ETH iliyokua staked. Sababu kamili ya hili imeelezewa katika [chapisho hili la blogu la Wakfu wa Ethereum](https://blog.ethereum.org/2016/05/09/on-settlement-finality/). Kwa kuwa umaliziaji unahitaji kura ya thuluthi mbili, mshambulizi anaweza kuzuia mtandao kufikia tamati kwa kupiga kura na thuluthi moja ya stake zote. Kuna utaratibu wa kujilinda dhidi ya hili: [uvujaji kutokana na kutokuwepo shughuli](https://eth2book.info/bellatrix/part2/incentives/inactivity). Hii huwashwa wakati wowote mnyororo unaposhindwa kukamilika kwa zaidi ya vipindi vinne. Uvujaji wa kutofanya kazi huondoa ETH iliyowekwa hatarini kutoka kwa waidhinishaji wanaopiga kura dhidi ya walio wengi, na hivyo kuruhusu walio wengi kurejesha thuluthi mbili na kukamilisha mnyororo. + +## Usalama wa kiuchumi-kripto {#crypto-economic-security} + +Kuendesha kithibitishaji ni kujitolea. Kithibitishaji kinatarajiwa kudumisha maunzi na muunganisho wa kutosha ili kushiriki katika uthibitishaji wa kitalu na pendekezo. Kwa kurudi, kihalalishaji hulipwa kwa ETH (salio lao la stake huongezeka). Kwa upande mwingine, kushiriki kama mthibitishaji pia hufungua njia mpya kwa watumiaji kushambulia mtandao kwa manufaa ya kibinafsi au hujuma. Ili kuzuia hili, waidhinishaji hukosa zawadi za ETH ikiwa watashindwa kushiriki walipoitwa, na hisa yao iliyopo inaweza kuharibiwa ikiwa watafanya ukosefu wa uaminifu. Tabia mbili za msingi zinaweza kuchukuliwa kuwa si za uaminifu: kupendekeza vizuizi vingi katika nafasi moja (kusawazisha) na kuwasilisha uthibitisho unaokinzana. + +Kiasi cha ETH kilichopunguzwa kinategemea ni wathibitishaji wangapi pia wanapunguzwa karibu wakati huo huo. Hii inajulikana kama ["adhabu ya uwiano"](https://eth2book.info/bellatrix/part2/incentives/slashing#the-correlation-penalty), na inaweza kuwa ndogo (~1% ya hisa kwa mthibitishaji mmoja anayefyekwa peke yake) au inaweza kusababisha 100% ya hisa ya mthibitishaji kuharibiwa (tukio la kufyeka kwa wingi). Imewekwa katikati ya kipindi cha kuondoka kwa kulazimishwa ambacho huanza na adhabu ya papo hapo (hadi 1 ETH) Siku ya 1, adhabu ya uunganisho Siku ya 18, na hatimaye, kutolewa kwenye mtandao Siku ya 36. Wanapokea adhabu ndogo za uthibitisho kila siku kwa sababu wapo kwenye mtandao lakini hawawasilishi kura. Hii yote inamaanisha kuwa shambulio lililoratibiwa litakuwa ghali sana kwa mshambuliaji. + +## Uchaguzi wa uma {#fork-choice} + +Wakati mtandao unafanya kazi kikamilifu na kwa uaminifu, kuna kizuizi kimoja tu kipya kwenye kichwa cha mnyororo, na waidhinishaji wote wanathibitisha hilo. Walakini, inawezekana kwa waidhinishaji kuwa na maoni tofauti ya mkuu wa mnyororo kwa sababu ya latency ya mtandao au kwa sababu mpendekezaji wa kitalu amepata usawa. Kwa hivyo, wateja wa makubaliano wanahitaji algorithm kuamua ni ipi ya kupendelea. Kanuni inayotumika katika uthibitisho wa hisa wa Ethereum inaitwa [LMD-GHOST](https://arxiv.org/pdf/2003.03052.pdf), na inafanya kazi kwa kutambua uma ambao una uzito mkubwa zaidi wa uthibitisho katika historia yake. + +## Uthibitisho wa hisa na usalama {#pos-and-security} + +Tishio la [shambulizi la 51%](https://www.investopedia.com/terms/1/51-attack.asp) bado lipo kwenye uthibitisho wa hisa kama ilivyo kwenye uthibitisho wa kazi, lakini ni hatari zaidi kwa washambuliaji. Mshambulizi atahitaji 51% ya ETH iliyowekwa stake. Kisha wangeweza kutumia ushuhuda wao wenyewe ili kuhakikisha uma wapendao ndio ulikuwa na uthibitisho uliokusanywa zaidi. 'Uzito' wa uthibitisho uliokusanywa ndio ambao wateja wa makubaliano hutumia kubainisha mnyororo sahihi, ili mshambuliaji huyu aweze kufanya uma wao kuwa wa kisheria. Hata hivyo, nguvu ya uthibitisho wa hatari juu ya uthibitisho wa-kazi ni kwamba jumuiya ina badilika katika kuweka mashambulizi ya kukabiliana. Kwa mfano, wathibitishaji waaminifu wanaweza kuamua kuendelea kujikita kwenye mnyororo wa wachache na kupuuza uma wa mshambulizi huku wakihimiza programu, exchange na mabwawa kufanya vivyo hivyo. Wanaweza pia kuamua kumwondoa mshambuliaji kutoka kwa mtandao kwa nguvu na kuharibu staked ETH yao iliyohusika. Hizi ni ulinzi mkali wa kiuchumi dhidi ya shambulio la 51%. + +Zaidi ya 51% ya mashambulizi, watendaji wabaya wanaweza pia kujaribu aina zingine za shughuli hasidi, kama vile: + +- mashambulizi ya masafa marefu (ingawa kifaa cha mwisho kinapunguza vekta hii ya shambulio) +- masafa mafupi 'reorgs' (ingawa uongezaji wa mapendekezo na tarehe za mwisho za uthibitisho hupunguza hii) +- mashambulizi ya kurukaruka na kusawazisha (pia yamepunguzwa na uongezaji wa pendekezo, na mashambulizi haya hata hivyo yameonyeshwa tu chini ya hali bora za mtandao) +- mashambulizi ya avalanche (yaliyotengwa na sheria ya algorithms ya uchaguzi wa uma ya kuzingatia tu ujumbe wa hivi punde) + +Kwa ujumla, uthibitisho wa stake, kama unavyotekelezwa kwenye Ethereum, umeonyeshwa kuwa salama zaidi kiuchumi kuliko uthibitisho wa kazi. + +## Faida na hasara {#pros-and-cons} + +| Faida | Hasara | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| Staking hurahisisha watu binafsi kushiriki katika kupata mtandao, kukuza mfumo mtawanyo. nodi ya uthibitisho inaweza kuendeshwa kwenye kompyuta ndogo ya kawaida. Mabwawa ya staking huruhusu watumiaji kuhusika bila kuwa na 32 ETH. | Uthibitisho wa stake ni mchanga na haujajaribiwa vitani ikilinganishwa na uthibitisho wa kazi | +| Staking ni ya mfumo mtawanyo zaidi. Uchumi wa viwango hautumiki kwa njia sawa na vile hufanya kwa uchimbaji wa PoW. | Uthibitisho wa stake ni ngumu zaidi kutekeleza kuliko uthibitisho wa kazi | +| Uthibitisho-wa-stake hutoa usalama mkubwa zaidi wa kiuchumi wa kripto kuliko uthibitisho wa kazi | Watumiaji wanahitaji kuendesha vipande vitatu vya programu ili kushiriki katika uthibitisho wa stake ya Ethereum. | +| Utoaji mdogo wa ETH mpya unahitajika ili kutoa motisha kwa washiriki wa mtandao | | + +### Ulinganisho na uthibitisho wa kazi {#comparison-to-proof-of-work} + +Hapo awali Ethereum alitumia uthibitisho wa kazi lakini akabadilisha hadi uthibitisho wa stake mnamo Septemba 2022. PoS inatoa faida kadhaa juu ya PoW, kama vile: + +- ufanisi bora wa nishati - hakuna haja ya kutumia nishati nyingi kwenye hesabu za uthibitisho wa kazi +- vizuizi vya chini vya kuingia, mahitaji ya vifaa vilivyopunguzwa - hakuna haja ya vifaa vya wasomi kupata nafasi ya kuunda vitalu vipya +- kupunguza hatari ya mfumo mkusanyo - uthibitisho wa kuhusika unapaswa kusababisha nodi nyingi kupata mtandao +- kwa sababu ya mahitaji ya chini ya nishati utoaji mdogo wa ETH unahitajika ili kuhamasisha ushiriki +- adhabu za kiuchumi kwa utovu wa nidhamu hufanya mashambulizi ya mtindo wa 51% kuwa ghali zaidi kwa mshambuliaji ikilinganishwa na uthibitisho wa kazi +- jamii inaweza kuamua kufufua kijamii ya mlolongo wa uaminifu ikiwa shambulio la 51% lingeshinda ulinzi wa kripto-uchumi. + +## Masomo zaidi {#further-reading} + +- [Maswali Yanayoulizwa Mara kwa Mara kuhusu Uthibitisho wa Hisa](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html) _Vitalik Buterin_ +- [Uthibitisho wa Hisa ni nini](https://consensys.net/blog/blockchain-explained/what-is-proof-of-stake/) _ConsenSys_ +- [Uthibitisho wa Hisa ni Nini na Kwa Nini ni Muhimu](https://bitcoinmagazine.com/culture/what-proof-of-stake-is-and-why-it-matters-1377531463) _Vitalik Buterin_ +- [Kwa Nini Uthibitisho wa Hisa (Nov 2020)](https://vitalik.eth.limo/general/2020/11/06/pos2020.html) _Vitalik Buterin_ +- [Uthibitisho wa Hisa: Jinsi Nilivyojifunza Kupenda Ubinifu Dhaifu](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) _Vitalik Buterin_ +- [Shambulizi na ulinzi wa uthibitisho wa hisa wa Ethereum](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [Falsafa ya Usanifu wa Uthibitisho wa Hisa](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) _Vitalik Buterin_ +- [Video: Vitalik Buterin anaelezea uthibitisho wa hisa kwa Lex Fridman](https://www.youtube.com/watch?v=3yrqBG-7EVE) + +## Mada zinazohusiana {#related-topics} + +- [Uthibitisho wa kazi](/developers/docs/consensus-mechanisms/pow/) +- [Uthibitisho wa Mamlaka](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/keys/index.md new file mode 100644 index 00000000000..bc693a21f59 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -0,0 +1,102 @@ +--- +title: Funguo katika Ethereum ya uthibitisho-wa-hisa +description: Ufafanuzi wa funguo zinazotumika katika utaratibu wa makubaliano wa uthibitisho-wa-hisa wa Ethereum +lang: sw +--- + +Ethereum hulinda mali za mtumiaji kwa kutumia kriptografia ya funguo za umma-binafsi. Ufunguo wa umma hutumika kama msingi wa anwani ya Ethereum—yaani, unaonekana kwa umma kwa ujumla na hutumika kama kitambulisho cha kipekee. Ufunguo binafsi (au wa 'siri') unapaswa kufikiwa tu na mmiliki wa akaunti. Ufunguo binafsi hutumika 'kutia saini' miamala na data ili kriptografia iweze kuthibitisha kwamba mmiliki anaidhinisha hatua fulani ya ufunguo binafsi maalum. + +Funguo za Ethereum hutengenezwa kwa kutumia [kriptografia ya mkunjo-duaradufu](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography). + +Hata hivyo, wakati Ethereum ilipobadilisha kutoka [uthibitisho-wa-kazi](/developers/docs/consensus-mechanisms/pow) kwenda [uthibitisho-wa-hisa](/developers/docs/consensus-mechanisms/pos), aina mpya ya ufunguo iliongezwa kwenye Ethereum. Funguo za awali bado zinafanya kazi sawa na hapo awali—hapakuwa na mabadiliko yoyote kwenye funguo za msingi wa mkunjo-duaradufu zinazolinda akaunti. Hata hivyo, watumiaji walihitaji aina mpya ya ufunguo kwa ajili ya kushiriki katika uthibitisho-wa-hisa kwa kusimamisha ETH na kuendesha wathibitishaji. Hitaji hili lilitokana na changamoto za upanuzi zinazohusiana na jumbe nyingi zinazopita kati ya idadi kubwa ya wathibitishaji ambazo zilihitaji mbinu ya kriptografia ambayo inaweza kujumlishwa kwa urahisi ili kupunguza kiwango cha mawasiliano kinachohitajika ili mtandao ufikie makubaliano. + +Aina hii mpya ya ufunguo inatumia mpango wa sahihi wa [**Boneh-Lynn-Shacham (BLS)**](https://wikipedia.org/wiki/BLS_digital_signature). BLS inawezesha ujumlishaji mzuri sana wa sahihi lakini pia inaruhusu ubunifu wa kinyumenyume wa funguo za wathibitishaji binafsi zilizojumlishwa na ni bora kwa kusimamia vitendo kati ya wathibitishaji. + +## Aina mbili za funguo za mthibitishaji {#two-types-of-keys} + +Kabla ya kubadili kwenda uthibitisho-wa-hisa, watumiaji wa Ethereum walikuwa na ufunguo binafsi mmoja tu wa msingi wa mkunjo-duaradufu ili kufikia fedha zao. Kwa kuanzishwa kwa uthibitisho-wa-hisa, watumiaji waliotaka kuwa wasimamishaji wa pekee pia walihitaji **ufunguo wa mthibitishaji** na **ufunguo wa kutoa**. + +### Ufunguo wa mthibitishaji {#validator-key} + +Ufunguo wa kutia saini wa mthibitishaji unajumuisha vitu viwili: + +- Ufunguo **binafsi** wa mthibitishaji +- Ufunguo wa **umma** wa mthibitishaji + +Madhumuni ya ufunguo binafsi wa mthibitishaji ni kutia saini shughuli za kwenye mnyororo kama vile mapendekezo ya bloku na uthibitisho. Kwa sababu ya hili, funguo hizi lazima zihifadhiwe katika hot wallet. + +Unyumbufu huu una faida ya kuhamisha funguo za kutia saini za mthibitishaji haraka sana kutoka kifaa kimoja hadi kingine, hata hivyo, zikipotea au kuibiwa, mwizi anaweza **kutenda kwa nia mbaya** kwa njia chache: + +- Kusababisha mthibitishaji apigwe faini kwa: + - Kuwa mpendekezaji na kutia saini bloku mbili tofauti za beacon kwa nafasi moja + - Kuwa mthibitishaji na kutia saini uthibitisho ambao "unazunguka" mwingine + - Kuwa mthibitishaji na kutia saini uthibitisho mbili tofauti zenye lengo sawa +- Kulazimisha kujiondoa kwa hiari, ambayo humzuia mthibitishaji kusimamisha, na kumpa ufikiaji wa salio lake la ETH mmiliki wa ufunguo wa kutoa + +**Ufunguo wa umma wa mthibitishaji** hujumuishwa kwenye data ya muamala mtumiaji anapoweka ETH kwenye mkataba wa amana ya kusimamisha. Hii inajulikana kama _data ya amana_ na inairuhusu Ethereum kumtambua mthibitishaji. + +### Vitambulisho vya utoaji {#withdrawal-credentials} + +Kila mthibitishaji ana sifa inayojulikana kama _vitambulisho vya utoaji_. Baiti ya kwanza ya sehemu hii ya baiti 32 hutambulisha aina ya akaunti: `0x00` inawakilisha vitambulisho asili vya BLS (kabla ya Shapella, visivyoweza kutolewa), `0x01` inawakilisha vitambulisho vya zamani vinavyoelekeza kwenye anwani ya utekelezaji, na `0x02` inawakilisha aina ya kisasa ya kitambulisho cha kujumuisha. + +Wathibitishaji walio na funguo za BLS za `0x00` lazima wasasishe vitambulisho hivi ili vielekeze kwenye anwani ya utekelezaji ili kuwezesha malipo ya salio la ziada au utoaji kamili kutoka kwenye usimamishaji. Hili linaweza kufanywa kwa kutoa anwani ya utekelezaji katika data ya amana wakati wa utengenezaji wa awali wa funguo, _AU_ kwa kutumia ufunguo wa kutoa baadaye kutia saini na kutangaza ujumbe wa `BLSToExecutionChange`. + +[Maelezo zaidi kuhusu vitambulisho vya utoaji vya wathibitishaji](/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/) + +### Ufunguo wa kutoa {#withdrawal-key} + +Ufunguo wa kutoa utahitajika kusasisha vitambulisho vya utoaji ili vielekeze kwenye anwani ya utekelezaji, ikiwa haukuwekwa wakati wa amana ya awali. Hii itawezesha malipo ya salio la ziada kuanza kushughulikiwa, na pia itawaruhusu watumiaji kutoa kikamilifu ETH yao iliyosimamishwa. + +Kama tu funguo za mthibitishaji, funguo za kutoa pia zinajumuisha vipengele viwili: + +- Ufunguo **binafsi** wa kutoa +- Ufunguo wa **umma** wa kutoa + +Kupoteza ufunguo huu kabla ya kusasisha vitambulisho vya utoaji kuwa aina ya `0x01` kunamaanisha kupoteza ufikiaji wa salio la mthibitishaji. Mthibitishaji bado anaweza kutia saini uthibitisho na bloku kwa kuwa vitendo hivi vinahitaji ufunguo binafsi wa mthibitishaji, hata hivyo kuna motisha mdogo au hakuna kabisa ikiwa funguo za kutoa zimepotea. + +Kutenganisha funguo za mthibitishaji kutoka kwenye funguo za akaunti ya Ethereum kunawezesha wathibitishaji wengi kuendeshwa na mtumiaji mmoja. + +![mchoro wa ufunguo wa mthibitishaji](validator-key-schematic.png) + +**Kumbuka**: Kujiondoa kwenye majukumu ya usimamishaji na kutoa salio la mthibitishaji kwa sasa kunahitaji kutia saini [ujumbe wa kujiondoa kwa hiari (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) kwa kutumia ufunguo wa mthibitishaji. Hata hivyo, [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) ni pendekezo ambalo litamruhusu mtumiaji kuanzisha kujiondoa kwa mthibitishaji na kutoa salio lake kwa kutia saini jumbe za kujiondoa kwa kutumia ufunguo wa kutoa katika siku zijazo. Hii itapunguza dhana za uaminifu kwa kuwawezesha wasimamishaji wanaokabidhi ETH kwa [watoa huduma za usimamishaji kama huduma](/staking/saas/#what-is-staking-as-a-service) kubaki na udhibiti wa fedha zao. + +## Kutohoa funguo kutoka kwenye fungu la maneno {#deriving-keys-from-seed} + +Ikiwa kila ETH 32 zilizosimamishwa zingehitaji seti mpya ya funguo 2 zinazojitegemea kabisa, usimamizi wa funguo ungekuwa mgumu haraka, hasa kwa watumiaji wanaoendesha wathibitishaji wengi. Badala yake, funguo nyingi za wathibitishaji zinaweza kutoholewa kutoka siri moja ya pamoja na kuhifadhi siri hiyo moja kunaruhusu ufikiaji wa funguo nyingi za wathibitishaji. + +[Manemoni](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase) na njia ni sifa maarufu ambazo watumiaji hukutana nazo mara kwa mara wanapo[fikia](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0) mikoba yao. Manemoni ni mfuatano wa maneno ambayo hufanya kazi kama mbegu ya awali kwa ufunguo binafsi. Inapojumuishwa na data ya ziada, manemoni hutengeneza hashi inayojulikana kama 'ufunguo mkuu'. Hii inaweza kufikiriwa kama mzizi wa mti. Matawi kutoka kwenye mzizi huu yanaweza kutoholewa kwa kutumia njia ya kihierarkia ili nodi za watoto ziweze kuwepo kama mchanganyiko wa hashi ya nodi yao ya mzazi na faharasa yao kwenye mti. Soma kuhusu viwango vya [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) na [BIP-19](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) kwa ajili ya utengenezaji wa funguo za msingi wa manemoni. + +Njia hizi zina muundo ufuatao, ambao utakuwa unajulikana kwa watumiaji ambao wamewahi kutumia mikoba ya maunzi: + +``` +m/44'/60'/0'/0` +``` + +Mikwaju katika njia hii hutenganisha vipengele vya ufunguo binafsi kama ifuatavyo: + +``` +master_key / purpose / coin_type / account / change / address_index +``` + +Mantiki hii huwawezesha watumiaji kuambatisha wathibitishaji wengi iwezekanavyo kwenye **fungu moja la manemoni** kwa sababu mzizi wa mti unaweza kuwa wa pamoja, na utofautishaji unaweza kutokea kwenye matawi. Mtumiaji anaweza **kutohoa idadi yoyote ya funguo** kutoka kwenye fungu la manemoni. + +``` + [m / 0] + / + / +[m] - [m / 1] + \ + \ + [m / 2] +``` + +Kila tawi limetenganishwa na `/` kwa hivyo `m/2` inamaanisha anza na ufunguo mkuu na ufuate tawi la 2. Katika mchoro ulio hapa chini, fungu moja la manemoni linatumika kuhifadhi funguo tatu za kutoa, kila moja ikiwa na wathibitishaji wawili wanaohusiana. + +![mantiki ya ufunguo wa mthibitishaji](multiple-keys.png) + +## Masomo zaidi {#further-reading} + +- [Chapisho la blogu la Wakfu wa Ethereum na Carl Beekhuizen](https://blog.ethereum.org/2020/05/21/keys/) +- [Utengenezaji wa funguo za EIP-2333 BLS12-381](https://eips.ethereum.org/EIPS/eip-2333) +- [EIP-7002: Uondoaji Unaoanzishwa na Safu ya Utekelezaji](https://web.archive.org/web/20250125035123/https://research.2077.xyz/eip-7002-unpacking-improvements-to-staking-ux-post-merge) +- [Usimamizi wa funguo kwa kiwango kikubwa](https://docs.ethstaker.cc/ethstaker-knowledge-base/scaled-node-operators/key-management-at-scale) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md new file mode 100644 index 00000000000..e6b5a9e84a6 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md @@ -0,0 +1,69 @@ +--- +title: Uthibitisho wa dhamana dhidi ya uthibitisho wa kazi +description: Ulinganisho kati ya utaratibu wa makubaliano wa Ethereum unaotegemea uthibitisho wa dhamana na uthibitisho wa kazi +lang: sw +--- + +Wakati Ethereum ilipozinduliwa, uthibitisho wa dhamana bado ulihitaji utafiti na maendeleo mengi kabla ya kuaminiwa kulinda Ethereum. Uthibitisho wa kazi ulikuwa utaratibu rahisi ambao tayari ulikuwa umethibitishwa na Bitcoin, kumaanisha wasanidi programu wakuu wangeweza kuutekeleza mara moja ili kuzindua Ethereum. Ilichukua miaka mingine nane kuendeleza uthibitisho wa dhamana hadi kufikia kiwango ambacho ungeweza kutekelezwa. + +Ukurasa huu unaelezea sababu za msingi za mabadiliko ya Ethereum kutoka uthibitisho wa kazi kwenda uthibitisho wa dhamana na maelewano yaliyohusika. + +## Usalama {#security} + +Watafiti wa Ethereum wanaona uthibitisho wa dhamana kuwa salama zaidi kuliko uthibitisho wa kazi. Hata hivyo, utaratibu huu umetekelezwa hivi majuzi tu kwenye Mtandao Mkuu halisi wa Ethereum na haujathibitishwa kwa muda mrefu kama uthibitisho wa kazi. Sehemu zifuatazo zinajadili faida na hasara za mfumo wa usalama wa uthibitisho wa dhamana ikilinganishwa na uthibitisho wa kazi. + +### Gharama ya kushambulia {#cost-to-attack} + +Katika uthibitisho wa dhamana, wathibitishaji wanatakiwa kuweka dhamana ("stake") angalau ETH 32 katika mkataba-erevu. Ethereum inaweza kuharibu ether iliyowekwa kama dhamana ili kuwaadhibu wathibitishaji wanaokiuka sheria. Ili kufikia makubaliano, angalau 66% ya jumla ya ether iliyowekwa dhamana inapaswa kupiga kura kuunga mkono seti maalum ya bloku. Bloku zilizopigiwa kura na >=66% ya dhamana huwa "zimekamilika", kumaanisha haziwezi kuondolewa au kupangwa upya. + +Kushambulia mtandao kunaweza kumaanisha kuzuia mnyororo usikamilike au kuhakikisha mpangilio fulani wa bloku katika mnyororo mkuu ambao kwa namna fulani unamnufaisha mshambuliaji. Hii inahitaji mshambuliaji kupotosha njia ya makubaliano ya kweli ama kwa kukusanya kiasi kikubwa cha ether na kupiga kura nacho moja kwa moja au kuwahadaa wathibitishaji waaminifu kupiga kura kwa njia fulani. Ukiacha mashambulizi ya hali ya juu na uwezekano mdogo yanayowahadaa wathibitishaji waaminifu, gharama ya kushambulia Ethereum ni gharama ya dhamana ambayo mshambuliaji anapaswa kukusanya ili kushawishi makubaliano kwa niaba yake. + +Gharama ya chini kabisa ya shambulio ni >33% ya jumla ya dhamana. Mshambuliaji anayemiliki >33% ya jumla ya dhamana anaweza kusababisha ucheleweshaji wa ukamilifu kwa kutokuwa mtandaoni tu. Hili ni tatizo dogo kiasi kwa mtandao kwani kuna utaratibu unaojulikana kama "uvujaji wa kutotenda kazi" ambao huvujisha dhamana kutoka kwa wathibitishaji wasio mtandaoni hadi idadi kubwa ya walio mtandaoni iwakilishe 66% ya dhamana na waweze kukamilisha mnyororo tena. Kinadharia, inawezekana pia kwa mshambuliaji kusababisha ukamilifu maradufu akiwa na zaidi ya 33% ya jumla ya dhamana kwa kuunda bloku mbili badala ya moja anapoombwa kuwa mzalishaji wa bloku na kisha kupiga kura mara mbili na wathibitishaji wake wote. Kila mgawanyiko unahitaji tu 50% ya wathibitishaji waaminifu waliosalia kuona kila bloku kwanza, kwa hivyo wakifanikiwa kupanga muda wa ujumbe wao vizuri, wanaweza kukamilisha migawanyiko yote miwili. Hii ina uwezekano mdogo wa kufanikiwa, lakini ikiwa mshambuliaji angeweza kusababisha ukamilifu-maradufu, jumuiya ya Ethereum ingelazimika kuamua kufuata mgawanyiko mmoja, ambapo wathibitishaji wa mshambuliaji wangeadhibiwa kwa kupunguziwa dhamana kwenye ule mwingine. + +Akiwa na >33% ya jumla ya dhamana, mshambuliaji ana nafasi ya kuwa na athari ndogo (ucheleweshaji wa ukamilifu) au kali zaidi (ukamilifu maradufu) kwenye mtandao wa Ethereum. Kukiwa na zaidi ya ETH 14,000,000 zilizowekwa kama dhamana kwenye mtandao na bei wakilishi ya $1000/ETH, gharama ya chini zaidi ya kufanya mashambulizi haya ni `1000 x 14,000,000 x 0.33 = $4,620,000,000`. Mshambuliaji angepoteza pesa hizi kupitia adhabu ya kuondolewa dhamana na kutolewa nje ya mtandao. Ili kushambulia tena, wangelazimika kukusanya >33% ya dhamana (tena) na kuiteketeza (tena). Kila jaribio la kushambulia mtandao lingegharimu >$4.6 bilioni (kwa bei ya $1000/ETH na ETH milioni 14 zikiwa zimewekwa kama dhamana). Mshambuliaji pia anatolewa nje ya mtandao anapoadhibiwa kwa kuondolewa dhamana, na inabidi ajiunge na foleni ya uanzishaji ili ajiunge tena. Hii inamaanisha kiwango cha shambulio la kurudia hakipunguzwi tu na kiwango ambacho mshambuliaji anaweza kukusanya >33% ya jumla ya dhamana bali pia na muda unaochukua kuingiza wathibitishaji wake wote kwenye mtandao. Kila wakati mshambuliaji anaposhambulia, anakuwa masikini zaidi, na jumuiya iliyobaki inakuwa tajiri zaidi, kutokana na mshtuko wa usambazaji unaotokea. + +Mashambulizi mengine, kama vile mashambulizi ya 51% au urejeshaji wa ukamilifu kwa 66% ya jumla ya dhamana, yanahitaji ETH nyingi zaidi na ni ghali zaidi kwa mshambuliaji. + +Linganisha hii na uthibitisho wa kazi. Gharama ya kuanzisha shambulio kwenye Ethereum ya uthibitisho wa kazi ilikuwa gharama ya kumiliki >50% ya jumla ya kiwango cha hashi cha mtandao kila wakati. Hii ilijumuisha gharama za maunzi na uendeshaji wa nguvu ya kompyuta ya kutosha kuwashinda wachimbaji wengine katika kukokotoa suluhu za uthibitisho wa kazi kila wakati. Ethereum ilichimbwa zaidi kwa kutumia GPU badala ya ASIC, jambo ambalo liliweka gharama chini (ingawa kama Ethereum ingebaki kwenye uthibitisho wa kazi, uchimbaji wa ASIC ungeweza kuwa maarufu zaidi). Adui angelazimika kununua maunzi mengi na kulipia umeme wa kuyaendesha ili kushambulia mtandao wa Ethereum wa uthibitisho wa kazi, lakini gharama yote ingekuwa chini ya gharama inayohitajika kukusanya ETH za kutosha kuanzisha shambulio. Shambulio la 51% ni rahisi kwa takriban [mara 20](https://youtu.be/1m12zgJ42dI?t=1562) kwenye uthibitisho wa kazi kuliko uthibitisho wa dhamana. Ikiwa shambulio lingegunduliwa na mnyororo kugawanywa kwa nguvu (hard-forked) ili kuondoa mabadiliko yao, mshambuliaji angeweza kutumia maunzi yale yale kushambulia mgawanyiko mpya mara kwa mara. + +### Utata {#complexity} + +Uthibitisho wa dhamana ni tata zaidi kuliko uthibitisho wa kazi. Hii inaweza kuwa hoja inayounga mkono uthibitisho wa kazi kwani ni vigumu zaidi kuingiza hitilafu au athari zisizotarajiwa katika itifaki rahisi kwa bahati mbaya. Hata hivyo, utata umedhibitiwa na miaka ya utafiti na maendeleo, uigaji, na utekelezaji kwenye testnet. Itifaki ya uthibitisho wa dhamana imetekelezwa kwa uhuru na timu tano tofauti (kwenye kila safu ya utekelezaji na safu ya makubaliano) katika lugha tano za programu, ikitoa ustahimilivu dhidi ya hitilafu za mteja. + +Ili kuendeleza na kupima kwa usalama mantiki ya makubaliano ya uthibitisho wa dhamana, Mnyororo Kioleza ulizinduliwa miaka miwili kabla ya uthibitisho wa dhamana kutekelezwa kwenye Mtandao Mkuu wa Ethereum. Mnyororo Kioleza ulifanya kazi kama sanduku la mchanga kwa ajili ya kupima uthibitisho wa dhamana, kwani ulikuwa mnyororo wa bloku hai unaotekeleza mantiki ya makubaliano ya uthibitisho wa dhamana lakini bila kugusa miamala halisi ya Ethereum - kimsingi ulikuwa unafikia makubaliano juu yake wenyewe. Mara tu hii ilipokuwa thabiti na bila hitilafu kwa muda wa kutosha, Mnyororo Kioleza "uliunganishwa" na Mtandao Mkuu wa Ethereum. Haya yote yalichangia kudhibiti utata wa uthibitisho wa dhamana hadi kufikia kiwango ambacho hatari ya matokeo yasiyotarajiwa au hitilafu za mteja ilikuwa ndogo sana. + +### Eneo la mashambulizi {#attack-surface} + +Uthibitisho wa dhamana ni tata zaidi kuliko uthibitisho wa kazi, ambayo inamaanisha kuna njia nyingi zaidi za mashambulizi zinazowezekana kushughulikiwa. Badala ya mtandao mmoja wa rika-kwa-rika unaounganisha wateja, kuna mitandao miwili, kila mmoja ukitekeleza itifaki tofauti. Kuwa na mthibitishaji mmoja maalum aliyechaguliwa mapema kupendekeza bloku katika kila nafasi huunda uwezekano wa shambulio la kukatiza huduma ambapo kiasi kikubwa cha trafiki ya mtandao kinamtoa mthibitishaji huyo maalum nje ya mtandao. + +Pia kuna njia ambazo washambuliaji wanaweza kupanga kwa makini muda wa kutoa bloku zao au ithibati zao ili zipokewe na sehemu fulani ya mtandao mwaminifu, na kuwashawishi kupiga kura kwa njia fulani. Mwishowe, mshambuliaji anaweza kukusanya ETH za kutosha kuweka dhamana na kutawala utaratibu wa makubaliano. Kila moja ya [njia hizi za mashambulizi ina ulinzi unaohusiana](/developers/docs/consensus-mechanisms/pos/attack-and-defense), lakini hazipo ili kulindwa chini ya uthibitisho wa kazi. + +## Ugatuaji {#decentralization} + +Uthibitisho wa dhamana umegatuliwa zaidi kuliko uthibitisho wa kazi kwa sababu mashindano ya zana za uchimbaji madini huwa yanawaondoa watu binafsi na mashirika madogo sokoni. Ingawa mtu yeyote anaweza kuanza uchimbaji kitaalamu kwa maunzi ya kawaida, uwezekano wao wa kupokea zawadi yoyote ni mdogo sana ikilinganishwa na shughuli za uchimbaji za kitaasisi. Katika uthibitisho wa dhamana, gharama ya kuweka dhamana na asilimia ya faida kwenye dhamana hiyo ni sawa kwa kila mtu. Kwa sasa inagharimu ETH 32 kuendesha mthibitishaji. + +Kwa upande mwingine, uvumbuzi wa derivatibu za uwekaji dhamana kioevu umesababisha wasiwasi wa uwekaji kati kwa sababu watoa huduma wakubwa wachache wanasimamia kiasi kikubwa cha ETH zilizowekwa kama dhamana. Hili ni tatizo na linahitaji kurekebishwa haraka iwezekanavyo, lakini pia lina utata zaidi kuliko inavyoonekana. Watoa huduma wa uwekaji dhamana wa kati si lazima wawe na udhibiti wa kati wa wathibitishaji - mara nyingi ni njia tu ya kuunda bwawa la kati la ETH ambalo waendeshaji wengi wa nodi huru wanaweza kuweka dhamana bila kila mshiriki kuhitaji ETH 32 zake mwenyewe. + +Chaguo bora kwa Ethereum ni kwa wathibitishaji kuendeshwa ndani ya nchi kwenye kompyuta za nyumbani, na hivyo kuongeza ugatuaji. Hii ndiyo sababu Ethereum inapinga mabadiliko yanayoongeza mahitaji ya maunzi kwa ajili ya kuendesha nodi/mthibitishaji. + +## Uendelevu {#sustainability} + +Uthibitisho wa dhamana ni njia ya bei nafuu ya kaboni ya kulinda mnyororo wa bloku. Chini ya uthibitisho wa kazi wachimbaji hushindana kupata haki ya kuchimba bloku. Wachimbaji wanafanikiwa zaidi wanapoweza kufanya hesabu haraka, na hivyo kuhimiza uwekezaji katika maunzi na matumizi ya nishati. Hili lilionekana kwa Ethereum kabla ya kubadili kwenda kwenye uthibitisho wa dhamana. Muda mfupi kabla ya mpito kwenda kwenye uthibitisho wa dhamana, Ethereum ilikuwa inatumia takriban TWh/mwaka 78 - sawa na nchi ndogo. Hata hivyo, kubadili kwenda kwenye uthibitisho wa dhamana kulipunguza matumizi haya ya nishati kwa ~99.98%. Uthibitisho wa dhamana uliifanya Ethereum kuwa jukwaa lenye ufanisi wa nishati na kaboni kidogo. + +[Zaidi kuhusu matumizi ya nishati ya Ethereum](/energy-consumption) + +## Utoaji {#issuance} + +Ethereum ya uthibitisho wa dhamana inaweza kulipia usalama wake kwa kutoa sarafu chache sana kuliko Ethereum ya uthibitisho wa kazi kwa sababu wathibitishaji hawahitaji kulipa gharama kubwa za umeme. Kutokana na hili, ETH inaweza kupunguza mfumuko wake wa bei au hata kuwa na upungufu wa bei wakati kiasi kikubwa cha ETH kinateketezwa. Viwango vya chini vya mfumuko wa bei vinamaanisha usalama wa Ethereum ni nafuu kuliko ilivyokuwa chini ya uthibitisho wa kazi. + +## Wewe ni mwanafunzi wa kuona zaidi? {#visual-learner} + +Tazama Justin Drake akielezea faida za uthibitisho wa dhamana dhidi ya uthibitisho wa kazi: + + + +## Masomo zaidi {#further-reading} + +- [Falsafa ya muundo wa uthibitisho wa dhamana ya Vitalik](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) +- [Maswali Yanayoulizwa Mara kwa Mara kuhusu uthibitisho wa dhamana ya Vitalik](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) +- [Video ya "Imeelezwa kwa Urahisi" kuhusu PoS dhidi ya PoW](https://www.youtube.com/watch?v=M3EFi_POhps) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md new file mode 100644 index 00000000000..e5649ef799d --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md @@ -0,0 +1,91 @@ +--- +title: Tuzo na adhabu za uthibitisho wa hisa +description: Jifunze kuhusu motisha katika itifaki katika uthibitisho wa hisa Ethereum. +lang: sw +--- + +Ethereum imehifadhiwa kwa kutumia sarafu yake ya asili, ether (ETH). Waendeshaji wa nodi wanaotaka kushiriki katika kuthibitisha bloku na kutambua kiongozi wa mnyororo, huweka ether kwenye [mkataba wa amana](/staking/deposit-contract/) kwenye Ethereum. Wao ni kisha kulipwa katika ether kuendesha programu ya kuthibitisha kwamba kuangalia uhalali wa vitalu mpya kupokea juu ya wenzao kwa wenzao Mtandao na kutumia uma-uchaguzi algorithm kutambua kichwa cha mnyororo. + +Kuna majukumu mawili ya msingi kwa uthibitisho: 1) kuangalia vitalu mpya na " kuthibitisha " kwao kama wao ni halali, 2) kupendekeza vitalu mpya wakati waliochaguliwa kwa nasibu kutoka kwa jumla uthibitisho pool. Kama uthibitisho kushindwa kufanya yoyote ya kazi hizi wakati aliuliza wao kukosa nje juu ya malipo ether. Uthibitisho pia ni wakati mwingine kazi na saini mkusanyiko na kushiriki katika kamati sync. + +Pia kuna baadhi ya vitendo ambayo ni vigumu sana kufanya kwa bahati mbaya na kuashiria baadhi ya nia mbaya, kama vile kupendekeza vitalu mbalimbali kwa ajili ya yanayopangwa sawa au kuthibitisha vitalu mbalimbali kwa ajili ya yanayopangwa sawa. Hizi ni "slashable" tabia ambayo kusababisha uthibitisho kuwa baadhi ya kiasi cha ether (hadi 1 ETH) kuchomwa moto kabla ya uthibitisho ni kuondolewa kutoka Mtandao, ambayo inachukua siku 36. Slashed uthibitisho ether polepole eneza mbali katika kipindi kutoka, lakini siku ya 18 wao kupokea " uhusiano adhabu " ambayo ni kubwa wakati uthibitisho zaidi ni slashed karibu wakati huo huo. Kwa hiyo, utaratibu wa makubaliano kulipia unyoovu na kuwaadhibu wahusika wabaya. + +Tuzo zote na adhabu ni kutumika mara moja kwa kila enzi. + +Endelea kusoma ili upate habari zaidi... + +## Zawadi na adhabu {#rewards} + +### Zawadi {#rewards} + +Uthibitishaji wanapokea tuzo wanapofanya kura ambazo kuambatana na wengi wa uthibitisho wengine, wanapopendekeza vitalu, na wanaposhiriki katika kamati za usawazishaji. Thamani ya zawadi katika kila epoch hukokotolewa kutoka kwa `base_reward`. Hii ni kitengo msingi kwamba tuzo nyingine ni mahesabu kutoka. `base_reward` inawakilisha zawadi ya wastani inayopokelewa na mthibitishaji chini ya hali bora kwa kila epoch. Hii ni mahesabu kutoka kwa usawa wa kweli wa uthibitisho na idadi ya jumla ya validators hai kama ifuatavyo: + +``` +base_reward = effective_balance * (base_reward_factor / (base_rewards_per_epoch * sqrt(sum(active_balance)))) +``` + +ambapo `base_reward_factor` ni 64, `base_rewards_per_epoch` ni 4 na `sum(active balance)` ni jumla ya ether iliyowekezwa kwa wathibitishaji wote wanaofanya kazi. + +Hii ina maana malipo ya msingi ni sawa na usawa wa kweli wa uthibitisho na kwa usawa wa idadi ya validators kwenye mtandao. Kadiri wathibitishaji wanavyoongezeka, ndivyo utoaji wa jumla unavyoongezeka (kama `sqrt(N)`) lakini `base_reward` kwa kila mthibitishaji huwa ndogo zaidi (kama `1/sqrt(N)`). Sababu hizi ushawishi APR kwa nodi kuunganisha. Soma sababu ya hili katika [maelezo ya Vitalik](https://notes.ethereum.org/@vbuterin/rkhCgQteN?type=view#Base-rewards). + +Tuzo ya jumla ni kisha mahesabu kama jumla ya vipengele tano kwamba kila mmoja na uzito kwamba huamua kiasi gani kila sehemu anaongeza kwa tuzo ya jumla. Vipengele ni: + +``` +1. kura ya chanzo: mthibitishaji amepiga kura kwa wakati kwa kituo sahihi cha ukaguzi cha chanzo +2. kura ya lengo: mthibitishaji amepiga kura kwa wakati kwa kituo sahihi cha ukaguzi cha lengo +3. kura ya kiongozi: mthibitishaji amepiga kura kwa wakati kwa bloku sahihi ya kiongozi +4. zawadi ya kamati ya usawazishaji: mthibitishaji ameshiriki katika kamati ya usawazishaji +5. zawadi ya mpendekezaji: mthibitishaji amependekeza bloku katika nafasi (slot) sahihi +``` + +Uzito kwa kila sehemu ni kama ifuatavyo: + +``` +TIMELY_SOURCE_WEIGHT uint64(14) +TIMELY_TARGET_WEIGHT uint64(26) +TIMELY_HEAD_WEIGHT uint64(14) +SYNC_REWARD_WEIGHT uint64(2) +PROPOSER_WEIGHT uint64(8) +``` + +Vipimo hivi vinajumlisha 64. Thawabu ni mahesabu kama jumla ya uzito husika kugawanywa na 64. Mthibitishaji ambaye amepiga kura za chanzo, lengo na kiongozi kwa wakati, amependekeza bloku na kushiriki katika kamati ya usawazishaji anaweza kupokea `64/64 * base_reward == base_reward`. Hata hivyo, mthibitishaji kwa kawaida si mpendekezaji wa bloku, kwa hivyo zawadi yake ya juu zaidi ni `64-8 /64 * base_reward == 7/8 * base_reward`. Wathibitishaji ambao si wapendekezaji wa bloku wala hawako katika kamati ya usawazishaji wanaweza kupokea `64-8-2 / 64 * base_reward == 6.75/8 * base_reward`. + +Tuzo ya ziada imeongezwa ili kuhamasisha uthibitisho wa haraka. Hii ndiyo `inclusion_delay_reward`. Hii ina thamani sawa na `base_reward` ikizidishwa na `1/delay` ambapo `delay` ni idadi ya nafasi (slots) zinazotenganisha pendekezo la bloku na uthibitisho. Kwa mfano, ikiwa uthibitisho utawasilishwa ndani ya nafasi (slot) moja ya pendekezo la bloku, mtoa uthibitisho anapokea `base_reward * 1/1 == base_reward`. Ikiwa uthibitisho utafika katika nafasi (slot) inayofuata, mtoa uthibitisho atapokea `base_reward * 1/2` na kuendelea. + +Wapendekezaji wa bloku hupokea `8 / 64 * base_reward` kwa **kila uthibitisho halali** uliojumuishwa kwenye bloku, kwa hivyo thamani halisi ya zawadi huongezeka kulingana na idadi ya wathibitishaji wanaotoa uthibitisho. Waombaji wa kuzuia wanaweza pia kuongeza tuzo yao kwa kujumuisha ushahidi wa tabia mbaya na wathibitishaji wengine katika kizuizi chao kilichopendekezwa. Tuzo hizi ni "karoti" ambazo kuhimiza uthibitisho uaminifu. Mpendekezaji wa bloku anayejumuisha upunguzaji (slashing) atazawadiwa kwa `slashed_validators_effective_balance / 512`. + +### Adhabu {#penalties} + +Hadi sasa tumezingatia validators kikamilifu vizuri-alitenda, lakini nini kuhusu validators kwamba hawana kufanya kichwa cha wakati, chanzo na lengo kura au kufanya hivyo polepole? + +Adhabu kwa kukosa lengo na chanzo kura ni sawa na tuzo attestor ingekuwa kupokea kama wao kuwasilishwa yao. Hii ina maana kwamba badala ya kuwa na tuzo aliongeza kwa mizani yao, wana thamani sawa kuondolewa kutoka mizani yao. Hakuna adhabu kwa kukosa kura ya kiongozi (yaani, kura za kiongozi huzawadiwa tu, haziadhibiwi kamwe). Hakuna adhabu inayohusiana na `inclusion_delay` - zawadi haitaongezwa tu kwenye salio la mthibitishaji. Pia hakuna adhabu kwa kushindwa kupendekeza kizuizi. + +Soma zaidi kuhusu zawadi na adhabu katika [vipimo vya makubaliano](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md). Zawadi na adhabu zilirekebishwa katika sasisho la Bellatrix - tazama Danny Ryan na Vitalik wakijadili hili katika [video hii ya Peep an EIP](https://www.youtube.com/watch?v=iaAEGs1DMgQ). + +## Upunguzaji (Slashing) {#slashing} + +Slashing ni hatua kali zaidi ambayo husababisha kuondolewa kwa nguvu ya validator kutoka mtandao na kupoteza kuhusiana na ether yao kuunganisha. Kuna njia tatu uthibitisho inaweza kuwa slashed, ambayo yote kiasi cha pendekezo uaminifu au uthibitisho wa vitalu: + +- Kwa kupendekeza na kusaini vitalu mbili tofauti kwa nafasi hiyo hiyo +- Kwa kuthibitisha bodi kwamba "inazunguka" mwingine (kwa ufanisi kubadilisha historia) +- Kwa "kupiga kura mara mbili" kwa kuthibitisha kwa wagombea wawili kwa ajili ya bodi moja + +Kama vitendo hivi ni aligundua, uthibitisho ni slashed. Hii ina maana kwamba 0.0078125 ni mara moja kuchomwa moto kwa 32 ETH uthibitisho (imeongezeka linearly na usawa hai), kisha 36 siku kuondolewa kipindi huanza. Wakati wa kipindi hicho cha kuondolewa, mti wa mtahini unapoteza damu polepole. Katika hatua ya katikati (Siku ya 18) adhabu ya ziada inatumika ambayo ukubwa wake hupanda na jumla ya ether iliyowekwa ya wathibitishaji wote waliokatwa katika siku 36 kabla ya tukio la kukata. Hii ina maana kwamba wakati validators zaidi ni slashed, ukubwa wa slash kuongezeka. Upunguzaji wa juu zaidi ni salio kamili la ufanisi la wathibitishaji wote waliopunguzwa (yaani, ikiwa kuna wathibitishaji wengi wanaopunguzwa, wanaweza kupoteza hisa zao zote). Kwa upande mwingine, moja, imejitenga kukata tukio tu huungua sehemu ndogo ya hisa ya uthibitisho ya. Hii adhabu ya katikati ambayo viwango na idadi ya validators slashed inaitwa "adhabu uwiano". + +## Uvujaji kutokana na kutofanya kazi {#inactivity-leak} + +Ikiwa safu ya makubaliano imepita zaidi ya enzi nne bila kukamilisha, itifaki ya dharura inayoitwa "kuvuja kwa kutofanya kazi" huamilishwa. Lengo la mwisho la uvujaji wa kutokuwa na shughuli ni kuunda hali zinazohitajika kwa mlolongo kurejesha mwisho. Kama ilivyoelezwa hapo juu, mwisho inahitaji 2/3 wengi wa ether jumla iliyofungwa kukubaliana juu ya chanzo na lengo vituo vya uchunguzi. Ikiwa wathibitishaji wanaowakilisha zaidi ya 1/3 ya jumla ya wathibitishaji wanaenda nje ya Mtandao au wanashindwa kuwasilisha uthibitisho sahihi basi haiwezekani kwa idadi kubwa ya 2/3 kukamilisha vituo vya ukaguzi. Uvujaji wa kutokuwa na shughuli huruhusu hisa inayomilikiwa na wathibitishaji wasiofanya kazi kutokwa na damu hatua kwa hatua hadi watakapodhibiti chini ya 1/3 ya hisa nzima, ikiruhusu wathibitishaji waliobaki watendaji kukamilisha mnyororo. Hata hivyo kubwa pool ya uthibitisho wasiofanya kazi, thibithisha kazi iliyobaki hatimaye kudhibiti >2/3 ya hisa. Kupoteza hisa ni motisha kubwa kwa uthibitisho wasiofanya kazi kuamsha tena haraka iwezekanavyo! Hali ya uvujaji wa shughuli haikutokea kwenye mtandao wa majaribio wa Medalla wakati < 66% ya wathibitishaji wanaofanya kazi waliweza kufikia makubaliano juu ya mkuu wa sasa wa blockchain. Uvujaji wa kutofanya kazi ulianzishwa na hatimaye utimizo ulipatikana! + +Tuzo, adhabu na kukata muundo wa utaratibu wa makubaliano inahimiza wathibitishaji wa mtu binafsi kutenda kwa usahihi. Hata hivyo, kutoka uchaguzi huu wa kubuni inatokana na mfumo kwamba nguvu motisha usambazaji sawa wa uthibitisho katika wateja wengi, na lazima nguvu disincentivize moja-mteja kutawala. + +## Masomo zaidi {#further-reading} + +- [Kuboresha Ethereum: Safu ya motisha](https://eth2book.info/altair/part2/incentives) +- [Motisha katika itifaki mseto ya Casper ya Ethereum](https://arxiv.org/pdf/1903.04205.pdf) +- [Vipimo vilivyofafanuliwa vya Vitalik](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#rewards-and-penalties-1) +- [Vidokezo vya Kuzuia Upunguzaji (Slashing) kwenye Eth2](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) +- [Uchambuzi wa adhabu za upunguzaji (slashing) chini ya EIP-7251](https://ethresear.ch/t/slashing-penalty-analysis-eip-7251/16509) + +_Vyanzo_ + +- _[https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/](https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/)_ diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md new file mode 100644 index 00000000000..a993501d266 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md @@ -0,0 +1,39 @@ +--- +title: Upendeleo dhaifu +description: Maelezo ya udhaifu wa mtazamo na jukumu lake katika PoS Ethereum. +lang: sw +--- + +Mtazamo katika minyororo ya bloku hurejelea utegemezi wa taarifa za kijamii ili kukubaliana kuhusu hali ya sasa. Kunaweza kuwa na uma nyingi halali ambazo huchaguliwa kutoka kulingana na taarifa zilizokusanywa kutoka kwa rika wengine kwenye mtandao. Kinyume chake ni uhalisia usioegemea upande ambao hurejelea minyororo ambapo kuna mnyororo mmoja tu unaowezekana kuwa halali ambao nodi zote lazima zikubaliane nao kwa kutumia sheria zao za msimbo. Pia kuna hali ya tatu, inayojulikana kama udhaifu wa mtazamo. Hii inarejelea mnyororo unaoweza kuendelea kwa uhalisia usioegemea upande baada ya mbegu fulani ya awali ya taarifa kupatikana kijamii. + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu ni muhimu kwanza kuelewa misingi ya [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/). + +## Ni matatizo gani udhaifu wa mtazamo hutatua? {#problems-ws-solves} + +Mtazamo ni asili ya minyororo ya bloku ya uthibitisho wa hisa kwa sababu kuchagua mnyororo sahihi kutoka kwa uma nyingi hufanywa kwa kuhesabu kura za kihistoria. Hii inaweka mnyororo wa bloku wazi kwa vekta kadhaa za mashambulizi, ikiwa ni pamoja na mashambulizi ya masafa marefu ambapo nodi zilizoshiriki mapema sana kwenye mnyororo hudumisha uma mbadala ambao wanautoa baadaye sana kwa faida yao wenyewe. Vinginevyo, ikiwa 33% ya wathibitishaji watatoa hisa zao lakini wakaendelea kuthibitisha na kutoa bloku, wanaweza kutengeneza uma mbadala unaokinzana na mnyororo halisi. Nodi mpya au nodi ambazo zimekuwa nje ya mtandao kwa muda mrefu huenda zikawa hazifahamu kwamba wathibitishaji hawa washambulizi wametoa fedha zao, hivyo washambulizi wanaweza kuwadanganya ili zifuate mnyororo usio sahihi. Ethereum inaweza kutatua vekta hizi za mashambulizi kwa kuweka vikwazo vinavyopunguza vipengele vya mtazamo vya utaratibu—na hivyo basi dhana za kuaminiana—hadi kiwango cha chini kabisa. + +## Vituo vya ukaguzi vya udhaifu wa mtazamo {#ws-checkpoints} + +Udhaifu wa mtazamo unatekelezwa katika Ethereum ya uthibitisho wa hisa kwa kutumia "vituo vya ukaguzi vya udhaifu wa mtazamo". Hizi ni mizizi ya hali ambayo nodi zote kwenye mtandao zinakubali ni sehemu ya mnyororo halisi. Zinafanya kazi sawa ya "ukweli wa ulimwengu wote" kama bloku za mwanzo, isipokuwa haziko katika nafasi ya mwanzo katika mnyororo wa bloku. Kanuni ya uchaguzi wa uma inaamini kwamba hali ya mnyororo wa bloku iliyobainishwa katika kituo hicho cha ukaguzi ni sahihi na kwamba inathibitisha mnyororo kwa uhuru na kwa uhalisia usioegemea upande kuanzia hapo na kuendelea. Vituo vya ukaguzi hufanya kazi kama "vikomo vya kurudisha nyuma" kwa sababu bloku zilizoko kabla ya vituo vya ukaguzi vya udhaifu wa mtazamo haziwezi kubadilishwa. Hii inadhoofisha mashambulizi ya masafa marefu kwa kufafanua tu uma za masafa marefu kuwa batili kama sehemu ya muundo wa utaratibu. Kuhakikisha kwamba vituo vya ukaguzi vya udhaifu wa mtazamo vimetenganishwa kwa umbali mdogo kuliko kipindi cha kutoa cha mthibitishaji huhakikisha kwamba mthibitishaji anayetengeneza uma kwenye mnyororo anapunguzwa angalau kiasi fulani cha kizingiti kabla ya kuweza kutoa hisa yake na kwamba waingiaji wapya hawawezi kudanganywa kwenye uma zisizo sahihi na wathibitishaji ambao hisa zao zimetolewa. + +## Tofauti kati ya vituo vya ukaguzi vya udhaifu wa mtazamo na bloku zilizokamilishwa {#difference-between-ws-and-finalized-blocks} + +Bloku zilizokamilishwa na vituo vya ukaguzi vya udhaifu wa mtazamo hushughulikiwa tofauti na nodi za Ethereum. Ikiwa nodi inagundua bloku mbili zinazoshindana zilizokamilishwa, basi inakuwa katika njia panda kati ya hizo mbili - haina njia ya kutambua kiotomatiki ni upi uma halisi. Hii ni dalili ya kushindwa kwa makubaliano. Kinyume chake, nodi inakataa tu bloku yoyote inayokinzana na kituo chake cha ukaguzi cha udhaifu wa mtazamo. Kwa mtazamo wa nodi, kituo cha ukaguzi cha udhaifu wa mtazamo kinawakilisha ukweli kamili ambao hauwezi kudhoofishwa na maarifa mapya kutoka kwa rika zake. + +## Udhaifu wake ni dhaifu kiasi gani? {#how-weak-is-weak} + +Kipengele cha mtazamo cha uthibitisho wa hisa wa Ethereum ni hitaji la hali ya hivi karibuni (kituo cha ukaguzi cha udhaifu wa mtazamo) kutoka chanzo cha kuaminika ili kusawazisha kutoka. Hatari ya kupata kituo kibaya cha ukaguzi cha udhaifu wa mtazamo ni ndogo sana kwa sababu vinaweza kukaguliwa dhidi ya vyanzo kadhaa huru vya umma kama vile vichunguzi vya bloku au nodi nyingi. Hata hivyo, daima kuna kiwango fulani cha uaminifu kinachohitajika ili kuendesha programu yoyote ya kompyuta, kwa mfano, kuamini kwamba wasanidi programu wametengeneza programu ya uaminifu. + +Kituo cha ukaguzi cha udhaifu wa mtazamo kinaweza hata kuja kama sehemu ya programu ya mteja. Pengine mshambulizi anaweza kuharibu kituo cha ukaguzi katika programu na anaweza kwa urahisi vilevile kuharibu programu yenyewe. Hakuna njia halisi ya kiuchumi ya sarafu ya kidijitali kuzunguka tatizo hili, lakini athari ya wasanidi programu wasioaminika inapunguzwa katika Ethereum kwa kuwa na timu nyingi huru za wateja, kila moja ikitengeneza programu inayofanana katika lugha tofauti, zote zikiwa na nia ya kudumisha mnyororo wa uaminifu. Vichunguzi vya bloku vinaweza pia kutoa vituo vya ukaguzi vya udhaifu wa mtazamo au njia ya kurejelea vituo vya ukaguzi vilivyopatikana kutoka kwingineko dhidi ya chanzo cha ziada. + +Hatimaye, vituo vya ukaguzi vinaweza kuombwa kutoka kwa nodi zingine; labda mtumiaji mwingine wa Ethereum anayeendesha nodi kamili anaweza kutoa kituo cha ukaguzi ambacho wathibitishaji wanaweza kisha kuthibitisha dhidi ya data kutoka kwa kichunguzi cha bloku. Kwa ujumla, kuamini mtoa huduma wa kituo cha ukaguzi cha udhaifu wa mtazamo kunaweza kuchukuliwa kuwa na matatizo kama kuamini wasanidi programu wa mteja. Uaminifu wa jumla unaohitajika ni mdogo. Ni muhimu kutambua kwamba mazingatio haya yanakuwa muhimu tu katika tukio lisilowezekana sana kwamba wathibitishaji wengi wanafanya njama za kutengeneza uma mbadala wa mnyororo wa bloku. Chini ya hali nyingine zozote, kuna mnyororo mmoja tu wa Ethereum wa kuchagua. + +## Masomo zaidi {#further-reading} + +- [Udhaifu wa mtazamo katika Eth2](https://notes.ethereum.org/@adiasg/weak-subjectvity-eth2) +- [Vitalik: Jinsi nilivyojifunza kupenda udhaifu wa mtazamo](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) +- [Udhaifu wa mtazamo (nyaraka za Teku)](https://docs.teku.consensys.io/concepts/weak-subjectivity) +- [Mwongozo wa udhaifu wa mtazamo wa Awamu-0](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md) +- [Uchambuzi wa udhaifu wa mtazamo katika Ethereum 2.0](https://github.com/runtimeverification/beacon-chain-verification/blob/master/weak-subjectivity/weak-subjectivity-analysis.pdf) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md new file mode 100644 index 00000000000..deb45ed3fdd --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md @@ -0,0 +1,64 @@ +--- +title: Vitambulisho vya utoaji +description: Ufafanuzi wa aina za vitambulisho vya utoaji vya mthibitishaji (0x00, 0x01, 0x02) na athari zake kwa watia dau wa Ethereum. +lang: sw +--- + +Kila mthibitishaji ana **kitambulisho cha utoaji** ambacho huamua jinsi na wapi ETH yake iliyowekwa dau na zawadi zinaweza kutolewa. Aina ya kitambulisho huonyeshwa na baiti ya kwanza: `0x00`, `0x01`, au `0x02`. Kuelewa aina hizi ni muhimu kwa wathibitishaji wanaosimamia dau lao. + +## 0x00: Vitambulisho vya kabla ya Shapella {#0x00-credentials} + +Aina ya `0x00` ni muundo asili wa kitambulisho cha utoaji kutoka kabla ya sasisho la Shapella (Aprili 2023). Wathibitishaji walio na aina hii ya kitambulisho hawana anwani ya utoaji ya safu ya utekelezaji iliyowekwa, ikimaanisha pesa zao hubaki zimefungwa kwenye safu ya makubaliano. Ikiwa bado una vitambulisho vya `0x00`, lazima usasishe hadi `0x01` au `0x02` kabla ya kupokea utoaji wowote. + +## 0x01: Vitambulisho vya utoaji vya zamani {#0x01-credentials} + +Aina ya `0x01` ilianzishwa na sasisho la Shapella na ikawa kiwango kwa wathibitishaji waliotaka kuweka anwani ya utoaji ya safu ya utekelezaji. Na vitambulisho vya `0x01`: + +- Salio lolote lililo juu ya ETH 32 **huondolewa kiotomatiki** kwenda kwenye anwani yako ya utoaji +- Uondoaji kamili hupitia foleni ya kawaida ya uondoaji +- Zawadi zilizo juu ya ETH 32 haziwezi kujikusanya—huondolewa mara kwa mara + +**Kwa nini baadhi ya wathibitishaji bado wanatumia 0x01:** Ni rahisi na inajulikana. Wathibitishaji wengi waliweka amana baada ya Shapella na tayari wana aina hii, na inafanya kazi vizuri kwa wale wanaotaka utoaji wa kiotomatiki wa salio la ziada. + +**Kwa nini haipendekezwi:** Na `0x01`, unapoteza uwezo wa kujikusanyia zawadi zilizo juu ya ETH 32. Kila kiasi cha ziada huondolewa kiotomatiki, jambo ambalo linapunguza uwezo wa mthibitishaji wako wa kupata mapato na linahitaji usimamizi tofauti wa fedha zilizotolewa. + +## 0x02: Vitambulisho vya utoaji vinavyojikusanya {#0x02-credentials} + +Aina ya `0x02` ilianzishwa na sasisho la Pectra na ndiyo **chaguo linalopendekezwa** kwa wathibitishaji leo. Wathibitishaji walio na vitambulisho vya `0x02` wakati mwingine huitwa "wathibitishaji wanaojikusanya." + +Na vitambulisho vya `0x02`: + +- Zawadi zilizo juu ya ETH 32 **hujikusanya** kwa nyongeza za ETH 1 hadi kufikia salio la juu la ufanisi la ETH 2048 +- Utoaji wa sehemu lazima uombwe mwenyewe (uondoaji wa kiotomatiki hutokea tu juu ya kiwango cha ETH 2048) +- Wathibitishaji wanaweza kuunganisha wathibitishaji wengi wa ETH 32 kuwa mthibitishaji mmoja mwenye salio la juu +- Uondoaji kamili bado unaungwa mkono kupitia foleni ya kawaida ya uondoaji + +Utoaji wa sehemu na uunganishaji vinaweza kufanywa kupitia [Vitendo vya Mthibitishaji vya Launchpad](https://launchpad.ethereum.org/en/validator-actions). + +**Kwa nini wathibitishaji wanapaswa kupendelea 0x02:** Inatoa ufanisi bora wa mtaji kupitia kujikusanya, udhibiti zaidi wa wakati utoaji unafanyika, na inaunga mkono uunganishaji wa wathibitishaji. Kwa watia dau wa pekee wanaokusanya zawadi kadri muda unavyopita, hii inamaanisha salio lao la ufanisi—na hivyo zawadi zao—zinaweza kukua zaidi ya ETH 32 bila kuingilia kati mwenyewe. + +**Muhimu:** Mara tu unapobadilisha kutoka `0x01` hadi `0x02`, huwezi kurudi nyuma. + +Kwa mwongozo wa kina juu ya kubadilisha hadi vitambulisho vya Aina ya 2 na kipengele cha MaxEB, tazama [ukurasa wa maelezo wa MaxEB](/roadmap/pectra/maxeb/). + +## Nichague nini? {#what-should-i-pick} + +- **Wathibitishaji wapya:** Chagua `0x02`. Ni kiwango cha kisasa chenye kujikusanya bora na unyumbufu. +- **Wathibitishaji waliopo wa 0x01:** Fikiria kubadilisha hadi `0x02` ikiwa unataka zawadi zijikusanye juu ya ETH 32 au unapanga kuunganisha wathibitishaji. +- **Wathibitishaji waliopo wa 0x00:** Sasisha mara moja—huwezi kutoa bila kusasisha vitambulisho vyako. Lazima kwanza ubadilishe hadi `0x01`, kisha unaweza kubadilisha hadi `0x02`. + +## Zana za kusimamia vitambulisho vya utoaji {#withdrawal-credential-tools} + +Zana kadhaa zinaunga mkono kuchagua au kubadilisha kati ya aina za vitambulisho: + +- **[Launchpad ya Kusimamisha ya Ethereum](https://launchpad.ethereum.org/en/validator-actions)** - Zana rasmi ya amana na usimamizi wa wathibitishaji, pamoja na ubadilishaji na uunganishaji wa vitambulisho +- **[Meneja wa Kusimamisha wa Pectra](https://pectrastaking.com)** - UI ya wavuti yenye usaidizi wa kuunganisha mkoba kwa ubadilishaji na uunganishaji +- **[Zana ya CLI ya Ops ya Mthibitishaji wa Pectra](https://github.com/Luganodes/Pectra-Batch-Contract)** - Zana ya mstari wa amri kwa ubadilishaji wa makundi +- **[Ethereal](https://github.com/wealdtech/ethereal)** - Zana ya CLI kwa shughuli za Ethereum pamoja na usimamizi wa wathibitishaji + +Kwa orodha kamili ya zana za uunganishaji na maagizo ya kina ya ubadilishaji, tazama [zana za uunganishaji za MaxEB](/roadmap/pectra/maxeb/#consolidation-tooling). + +## Masomo zaidi {#further-reading} + +- [Funguo katika uthibitisho wa hisa wa Ethereum](/developers/docs/consensus-mechanisms/pos/keys/) - Jifunze kuhusu funguo za mthibitishaji na jinsi zinavyohusiana na vitambulisho vya utoaji +- [MaxEB](/roadmap/pectra/maxeb/) - Mwongozo wa kina juu ya sasisho la Pectra na kipengele cha salio la juu la ufanisi diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/index.md new file mode 100644 index 00000000000..207eb0b32d3 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/index.md @@ -0,0 +1,114 @@ +--- +title: Uthibitisho wa kazi (PoW) +description: Maelezo ya itifaki ya makubaliano ya uthibitisho wa kazi na jukumu lake katika Ethereum. +lang: sw +--- + +Mtandao wa Ethereum ulianza kwa kutumia utaratibu wa makubaliano uliohusisha **[Uthibitishaji-wa-kazi (PoW)](/developers/docs/consensus-mechanisms/pow)**. Hii iliruhusu nodes za mtandao wa Ethereum kukubaliana juu ya hali ya taarifa zote zilizoandikwa kwenye kiambajengo cha Ethereum na kuzuia aina fulani za mashambulizi ya kiuchumi. Hata hivyo, Ethereum ilizima uthibitishaji-wa-kazi mnamo 2022 na kuanza kutumia [uthibitisho-wa-dau](/developers/docs/consensus-mechanisms/pos) badala yake. + + + + + + Uthibitisho wa kazi sasa umeacha kutumika. Ethereum haitumii tena uthibitisho wa kazi kama sehemu ya utaratibu wake wa makubaliano. Badala yake, hutumia uthibitisho wa stake. Soma zaidi kuhusu [uthibitisho-wa-dau](/watengenezaji/hati/mbinu-makubaliano/pos/) na [staking](/staking/). + + + + +## Mahitaji ya awali {#prerequisites} + +Ili kuielewa ukurasa huu vizuri, tunapendekeza usome kwanza kuhusu [miamala](/developers/docs/transactions/), [bloku](/developers/docs/blocks/), na [taratibu za makubaliano](/developers/docs/consensus-mechanisms/). + +## Uthibitisho wa kazi (PoW) ni nini? {#what-is-pow} + +Makubaliano ya Nakamoto, ambayo hutumia uthibitishaji-wa-kazi, ni utaratibu ambao hapo awali uliruhusu mtandao wa Ethereum uliogatuliwa kufikia makubaliano (yaani, nodi zote zinakubali) kuhusu mambo kama vile salio za akaunti na utaratibu wa miamala. Hii ilizuia watumiaji kutoka "kutumia mara mbili" sarafu zao na kuhakikisha kuwa mnyororo wa Ethereum ulikuwa mgumu sana kushambulia au kudhibiti. Sifa hizi za usalama sasa zinatokana na uthibitisho-wa-dau badala yake kwa kutumia utaratibu wa makubaliano unaojulikana kama [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/). + +## Uthibitishaji-wa-kazi na uchimbaji {#pow-and-mining} + +Uthibitisho wa kazi ni algorithm ya msingi ambayo huweka ugumu na sheria kwa wachimbaji wa kazi kufanya kwenye viambajengo vya uthibitisho wa kazi. Uchimbaji madini ndio "kazi" yenyewe. Ni kitendo cha kuongeza kitalu halali kwenye mnyororo. Hii ni muhimu kwa sababu urefu wa mnyororo husaidia mtandao kufuata uma sahihi wa kiambajengo. "Kazi" zaidi inafanywa, mlolongo mrefu zaidi, na idadi ya juu ya kuzuia, mtandao unaweza kuwa na uhakika zaidi wa hali ya sasa ya mambo. + +[Zaidi kuhusu uchimbaji](/developers/docs/consensus-mechanisms/pow/mining/) + +## Je, uthibitisho wa kazi wa Ethereum ulifanya kazi gani? {#how-it-works} + +Shughuli za Ethereum zinachakatwa kuwa vitalu. Katika uthibitisho wa kazi ulioacha kutumika sasa wa Ethereum, kila kitalu kilikuwa na: + +- ugumu wa kitalu - kwa mfano: 3,324,092,183,262,715 +- mixHash – kwa mfano: `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29` +- nonce – kwa mfano: `0xd3ee432b4fb3d26b` + +Data hii ya kitalu ilihusiana moja kwa moja na uthibitisho wa kazi. + +### Kazi katika uthibitishaji-wa-kazi {#the-work} + +Itifaki ya uthibitisho wa kazi, Ethash, ilihitaji wachimba migodi kupitia mbio kali ya majaribio na makosa ili kupata nonce kwa kitalu. Vitalu vilivyo na nonce halali pekee vinaweza kuongezwa kwenye mnyororo. + +Wakati wa mbio za kuunda kitalu, mchimbaji aliweka seti ya data mara kwa mara, ambayo inaweza kupatikana tu kwa kupakua na kuendesha mlolongo kamili (kama mchimbaji anavyofanya), kupitia kazi ya hisabati. Seti ya data ilitumika kutengeneza mixHash chini ya lengo ambalo linaamuriwa na ugumu wa kitalu. Njia bora ya kufanya hivyo ni kupitia majaribio na makosa. + +Ugumu uliamua lengo la hashi. Kadiri lengo linavyopungua, ndivyo seti ya hashi halali inavyopungua. Mara baada ya kuzalishwa, hii ilikuwa rahisi sana kwa wachimbaji madini wengine na wateja kuthibitisha. Hata kama muamala mmoja ungebadilika, hashi itakuwa tofauti kabisa, ikiashiria ulaghai. + +Hashing hurahisisha ulaghai kubainika. Lakini uthibitisho wa kazi kama mchakato pia ulikuwa kizuizi kikubwa cha kushambulia mnyororo. + +### Uthibitishaji-wa-kazi na usalama {#security} + +Wachimbaji walihamasishwa kufanya kazi hii kwenye mlolongo mkuu wa Ethereum. Kulikuwa na motisha ndogo kwa kikundi kidogo cha wachimbaji kuanzisha mnyororo wao wenyewe-inadhoofisha mfumo. Viambajengo hutegemea kuwa na serikali moja kama chanzo cha ukweli. + +Madhumuni ya uthibitisho wa kazi ilikuwa kupanua mnyororo. Mnyororo mrefu zaidi uliaminika zaidi kama ule halali kwa sababu ulikuwa na kazi ya kukokotoa zaidi kufanywa ili kuuzalisha. Ndani ya mfumo wa PoW wa Ethereum, ilikuwa karibu haiwezekani kuunda vizuizi vipya vinavyofuta miamala, kuunda bandia, au kudumisha mnyororo wa pili. Hiyo ni kwa sababu mchimbaji hasidi angehitaji kila wakati kusuluhisha kitalu haraka kuliko kila mtu mwingine. + +Ili kuunda vitalu hasidi lakini halali, mchimbaji hasidi angehitaji zaidi ya 51% ya nguvu ya uchimbaji wa mtandao kushinda kila mtu. Kiasi hicho cha "kazi" kinahitaji nguvu nyingi za gharama kubwa za kompyuta na nishati inayotumika inaweza hata kuwa kubwa kuliko faida iliyopatikana katika shambulio. + +### Uchumi wa uthibitishaji-wa-kazi {#economics} + +Uthibitisho wa kazi pia ulikuwa na jukumu la kutoa sarafu mpya kwenye mfumo na kutoa motisha kwa wachimbaji kufanya kazi hiyo. + +Tangu [sasisho la Constantinople](/ethereum-forks/#constantinople), wachimbaji waliofanikiwa kuunda bloku walituzwa ETH mbili zilizotolewa upya na sehemu ya ada za muamala. Vitalu vya Ommer pia vilifidia 1.75 ETH. Vitalu vya Ommer vilikuwa vitalu halali vilivyoundwa na mchimbaji kwa wakati mmoja kama mchimbaji mwingine aliunda kitalu cha canonical, ambacho hatimaye kiliamuliwa na mnyororo uliojengwa juu ya kwanza. Vizuizi vya Ommer kawaida hufanyika kwa sababu ya hali ya kusubiri ya mtandao. + +## Mwisho {#finality} + +Muamala una "mwisho" kwenye Ethereum wakati ni sehemu ya kitalu ambacho hakiwezi kubadilika. + +Kwa sababu wachimbaji walifanya kazi kwa njia ya mfumo mfumo mtawanyo, vitalu viwili halali vinaweza kuchimbwa kwa wakati mmoja. Hii inaunda uma wa muda. Hatimaye, moja ya minyororo hii ikawa mnyororo uliokubalika baada ya vitalu vilivyofuata kuchimbwa na kuongezwa kwake, na kuifanya kuwa ndefu. + +Hatimaye, moja ya minyororo hii ikawa mnyororo uliokubalika baada ya vitalu vilivyofuata kuchimbwa na kuongezwa kwake, na kuwa ndefu. Hii inamaanisha kuwa inaweza kubadilishwa. Kwa hivyo umaliziaji unarejelea wakati unaopaswa kusubiri kabla ya kuzingatia muamala usioweza kurudishwa. Chini ya Ethereum ya awali ya uthibitishaji-wa-kazi, kadiri bloku nyingi zilivyochimbwa juu ya bloku maalum `N`, ndivyo imani inavyokuwa kubwa kwamba miamala katika `N` ilifanikiwa na haitarejeshwa. Sasa, kwa uthibitisho wa dau, ukamilishaji ni mali ya wazi, badala ya uwezekano, ya kitalu. + +## Matumizi ya nishati ya uthibitishaji-wa-kazi {#energy} + +Lawama kuu ya uthibitisho wa kazi ni kiasi cha nishati inayohitajika ili kuweka mtandao salama. Ili kudumisha usalama na mfumo mtawanyo Ethereum juu ya uthibitisho wa kazi ilitumia kiasi kikubwa cha nishati. Muda mfupi kabla ya kubadili hadi uthibitisho-wa-dau, wachimbaji wa Ethereum walikuwa wakitumia kwa pamoja takriban 70 TWh/mwaka (takriban sawa na Jamhuri ya Cheki - kulingana na [digiconomist](https://digiconomist.net/) mnamo tarehe 18 Julai 2022). + +## Faida na hasara {#pros-and-cons} + +| Faida | Hasara | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Uthibitisho wa kazi hauegemei upande wowote. Huhitaji ETH ili kuanza na kuzuia zawadi hukuruhusu kutoka 0ETH hadi salio chanya. Kwa [uthibitisho-wa-dau](/developers/docs/consensus-mechanisms/pos/) unahitaji ETH ili kuanza. | Uthibitisho wa kazi hutumia nishati nyingi sana kwamba ni mbaya kwa mazingira. | +| Uthibitisho wa kazi ni utaratibu wa makubaliano uliojaribiwa na ambao umeweka Bitcoin na Ethereum salama na mfumo mtawanyo kwa miaka mingi. | Ikiwa unataka kuchimba, unahitaji vifaa maalum hivi kwamba ni uwekezaji mkubwa kuanza. | +| Ikilinganishwa na uthibitisho wa stake ni rahisi kutekeleza. | Kwa sababu ya kuongezeka kwa ukokotoaji unaohitajika, mabwawa ya uchimbaji yanaweza kutawala mchezo wa uchimbaji, na hivyo kusababisha hatari za kuunganishwa na usalama. | + +## Ukilinganisha na uthibitisho-wa-dau {#compared-to-pos} + +Katika kiwango cha juu, uthibitisho wa stake una lengo sawa na uthibitisho wa kazi: kusaidia mtandao uliogawanyika kufikia makubaliano kwa usalama. Lakini ina tofauti fulani katika mchakato na wafanyikazi: + +- Uthibitisho wa dau hubadilisha umuhimu wa nguvu ya hesabu kwa ETH iliyowekwa kwenye hisa. +- Uthibitisho wa dau hubadilisha wachimbaji na vithibitishaji. Vithibitishaji huweka hisa zao kwenye ETH ili kuwezesha uwezo wa kuunda vitalu vipya. +- Vithibitishaji havishindani ili kuunda vitalu, badala yake vinachaguliwa bila mpangilio na kanuni. +- Mwisho ni wazi zaidi: katika vituo fulani vya ukaguzi, ikiwa wathibitishaji 2/3 wanakubaliana juu ya hali ya kitalu inachukuliwa kuwa ya mwisho. Wahalalishaji lazima waweke dau lao zima kwenye hili, kwa hivyo wakijaribu kugongana, watapoteza hisa yao yote. + +[Zaidi kuhusu uthibitisho-wa-dau](/developers/docs/consensus-mechanisms/pos/) + +## Wewe ni mwanafunzi wa kuona zaidi? {#visual-learner} + + + +## Masomo zaidi {#further-reading} + +- [Shambulio la walio wengi](https://en.bitcoin.it/wiki/Majority_attack) +- [Kuhusu mwisho wa malipo](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) + +### Video {#videos} + +- [Maelezo ya kiufundi ya itifaki za uthibitishaji-wa-kazi](https://youtu.be/9V1bipPkCTU) + +## Mada Husika {#related-topics} + +- [Uchimbaji](/developers/docs/consensus-mechanisms/pow/mining/) +- [Uthibitisho wa rehani](/developers/docs/consensus-mechanisms/pos/) +- [Uthibitisho wa Mamlaka](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/index.md new file mode 100644 index 00000000000..9f5b30fe9c9 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -0,0 +1,86 @@ +--- +title: Uchimbaji +description: Maelezo ya jinsi madini yalivyofanya kazi kwenye Ethereum. +lang: sw +--- + + + + + +Uthibitisho wa kazi sio msingi tena wa utaratibu wa makubaliano wa Ethereum, kumaanisha uchimbaji umezimwa. Badala yake, Ethereum inalindwa na wathibitishaji ambao wanashiriki ETH. Unaweza kuanza kuweka ETH yako leo. Soma zaidi kwenye The Merge, ushahidi-wa-stake, na staking. Ukurasa huu ni kwa ajili ya maslahi ya kihistoria tu. + + + + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri zaidi, tunapendekeza kwanza usome kuhusu [miamala](/developers/docs/transactions/), [bloku](/developers/docs/blocks/) na [uthibitishaji-wa-kazi](/developers/docs/consensus-mechanisms/pow/). + +## Je, madini ya Ethereum ni nini? {#what-is-ethereum-mining} + +Uchimbaji madini ni mchakato wa kuunda kitalu cha shughuli za kuongezwa kwenye kiambajengo ya Ethereum katika usanifu wa uthibitisho wa kazi uliopunguzwa wa Ethereum. + +Neno madini linatokana na muktadha wa mlinganisho wa dhahabu wa sarafu fiche. Dhahabu au madini ya thamani ni haba, vivyo hivyo ishara za kidijitali, na njia pekee ya kuongeza kiasi cha jumla katika mfumo wa uthibitisho wa kazi ni kupitia uchimbaji madini. Katika Ethereum ya uthibitisho wa kazi, njia pekee ya utoaji ilikuwa kupitia kuchimba. Tofauti na dhahabu au madini ya thamani hata hivyo, madini ya Ethereum pia yalikuwa njia ya kupata mtandao kwa kuunda, kuthibitisha, kuchapisha na kueneza vitalu katika kiambajengo. + +Uchimbaji ether = Kulinda Mtandao + +Uchimbaji ndio uhai wa kiambajengo chochote cha uthibitisho wa kazi. Wachimba migodi wa Ethereum - kompyuta zinazoendesha programu - walitumia muda wao na nguvu ya kukokotoa kuchakata miamala na kutengeneza vitalu kabla ya mpito hadi uthibitisho wa stake. + +## Kwa nini wachimbaji wapo? {#why-do-miners-exist} + +Katika mifumo mtawanyo kama vile Ethereum, tunahitaji kuhakikisha kuwa kila mtu anakubali utaratibu wa miamala. Wachimbaji walisaidia hili kutokea kwa kutatua mafumbo magumu kwa hesabu kutengeneza vizuizi, kulinda mtandao dhidi ya mashambulizi. + +[Maelezo zaidi kuhusu uthibitishaji-wa-kazi](/developers/docs/consensus-mechanisms/pow/) + +Mtu yeyote hapo awali aliweza kuchimba kwenye mtandao wa Ethereum kwa kutumia kompyuta yake. Walakini, sio kila mtu angeweza kuchimba ether (ETH) kwa faida. Katika hali nyingi, wachimbaji walilazimika kununua vifaa maalum vya kompyuta, na kupata vyanzo vya nishati vya bei ghali. Kompyuta ya wastani haikuwezekana kupata zawadi za kutosha za kuzuia kufidia gharama zinazohusiana za uchimbaji. + +### Gharama ya uchimbaji {#cost-of-mining} + +- Gharama zinazowezekana za vifaa vinavyohitajika kujenga na kudumisha mtambo wa uchimbaji +- Gharama ya umeme ya kuwezesha mtambo wa uchimbaji +- Ikiwa ulikuwa unachimba madini kwenye bwawa, mabwawa haya kwa kawaida yalitoza ada ya % flat ya kila kitalu inayotolewa na bwawa hilo +- Gharama inayowezekana ya vifaa vya kusaidia kifaa cha kuchimba (uingizaji hewa, ufuatiliaji wa nishati, waya za umeme, n. k.) + +Ili kuchunguza zaidi faida ya uchimbaji, tumia kikokotoo cha uchimbaji, kama kile kinachotolewa na [Etherscan](https://etherscan.io/ether-mining-calculator). + +## Jinsi miamala ya Ethereum ilivyokuwa ikichimbwa {#how-ethereum-transactions-were-mined} + +Ifuatayo inatoa muhtasari wa jinsi shughuli zilichimbwa katika uthibitisho wa kazi wa Ethereum. Maelezo yanayofanana ya mchakato huu kwa uthibitisho wa hisa wa Ethereum yanaweza kupatikana [hapa](/developers/docs/consensus-mechanisms/pos/#transaction-execution-ethereum-pos). + +1. Mtumiaji huandika na kutia saini ombi la [muamala](/developers/docs/transactions/) kwa ufunguo binafsi wa [akaunti](/developers/docs/accounts/) fulani. +2. Mtumiaji hutangaza ombi la muamala kwa mtandao mzima wa Ethereum kutoka kwa [nodi](/developers/docs/nodes-and-clients/) fulani. +3. Baada ya kusikia juu ya ombi jipya la shughuli, kila nodi katika mtandao wa Ethereum inaongeza ombi kwa mempool yao ya ndani, orodha ya maombi yote ya shughuli ambayo wamesikia kuhusu ambayo bado hayajafanywa kwa kiambajengo katika kitalu. +4. Wakati fulani, nodi ya uchimbaji hujumlisha maombi kadhaa au mamia ya miamala kuwa [bloku](/developers/docs/blocks/) inayowezekana, kwa njia inayoongeza [ada za muamala](/developers/docs/gas/) wanazopata huku ikibaki chini ya kikomo cha gesi cha bloku. Nodi ya madini basi: + 1. Huthibitisha uhalali wa kila ombi la muamala (yaani, hakuna anayejaribu kuhamisha etha kutoka kwa akaunti ambayo hajaitolea saini, ombi halijaharibika, n.k.), na kisha hutekeleza msimbo wa ombi, na kubadilisha hali ya nakala yake ya ndani ya EVM. Mchimbaji hutoa ada ya ununuzi kwa kila ombi kama hilo la ununuzi kwa akaunti yake mwenyewe. + 2. Huanzisha mchakato wa kutoa "cheti cha uhalali" cha uthibitisho wa kazi kwa kizuizi kinachowezekana, mara tu maombi yote ya miamala kwenye vitalu vimethibitishwa na kutekelezwa kwenye nakala ya EVM ya karibu. +5. Hatimaye, mchimbaji atamaliza kutoa cheti cha kizuizi ambacho kinajumuisha ombi letu mahususi la muamala. Kisha mchimbaji hutangaza kitalu kilichokamilika, ambacho kinajumuisha cheti na hundi ya hali mpya ya EVM inayodaiwa. +6. Nodi zingine husikia juu ya kitalu kipya. Wanathibitisha cheti, hutekeleza miamala yote kwenye bloku wenyewe (ikiwa ni pamoja na muamala uliotangazwa awali na mtumiaji wetu), na kuthibitisha kuwa checksum ya hali yao mpya ya EVM baada ya utekelezaji wa miamala yote inalingana na checksum ya hali iliyodaiwa na bloku ya mchimbaji. Ni hapo tu ambapo nodi hizi huambatanisha kitalu hiki kwenye mkia wa kiambajengo yao, na kukubali hali mpya ya EVM kama hali ya kisheria. +7. Kila nodi huondoa miamala yote kwenye kitalu kipya kutoka kwa kumbukumbu zao za ndani za maombi ambayo hayajatekelezwa. +8. Nodi mpya zinazojiunga na mtandao hupakua vitalu vyote kwa mfuatano, ikijumuisha kitalu kilicho na shughuli yetu ya riba. Wanaanzisha nakala ya ndani ya EVM (ambayo huanza kama EVM ya hali tupu), na kisha kupitia mchakato wa kutekeleza kila muamala katika kila kitalu juu ya nakala yao ya ndani ya EVM, kuthibitisha ukaguzi wa serikali katika kila kitalu njiani. + +Kila shughuli inachimbwa (imejumuishwa kwenye kitalu kipya na kuenezwa kwa mara ya kwanza) mara moja, lakini inatekelezwa na kuthibitishwa na kila mshiriki katika mchakato wa kuendeleza hali ya kisheria ya EVM. Hii inaangazia moja ya kauli mbiu kuu za mnyororo wa bloku: **Usiamini, thibitisha**. + +## Bloku za Ommer (mjomba) {#ommer-blocks} + +Uchimbaji vitalu kwenye uthibitisho wa kazi uliwezekana, ikimaanisha kuwa wakati mwingine vitalu viwili halali vilichapishwa kwa wakati mmoja kwa sababu ya muda wa mtandao. Katika hali hii, itifaki ilibidi iamue mnyororo mrefu zaidi (na kwa hivyo "halali") mwingi zaidi huku ikihakikisha usawa kwa wachimbaji kwa kuwazawadia kwa kiasi kitalu halali ambacho hakijajumuishwa kilichopendekezwa. Hii ilihimiza ugatuaji zaidi wa mtandao kwani wachimbaji wadogo, ambao wanaweza kukabiliwa na hali ya kusubiri zaidi, bado wangeweza kupata mapato kupitia zawadi za bloku za [ommer](/glossary/#ommer). + +Neno "ommer" ni neno linalopendekezwa lisilopendelea kijinsia kwa kaka wa kitalu mzazi, lakini hii pia wakati mwingine hujulikana kama "mjomba". **Tangu hatua ya Ethereum ya kuhamia kwenye uthibitisho wa hisa, bloku za ommer hazichimbwi tena** kwa kuwa ni mpendekezaji mmoja tu anayechaguliwa katika kila yanayopangwa. Unaweza kuona mabadiliko haya kwa kutazama [chati ya kihistoria](https://ycharts.com/indicators/ethereum_uncle_rate) ya bloku za ommer zilizochimbwa. + +## Onyesho la picha {#a-visual-demo} + +Tazama Austin akikutembeza kwenye uchimbaji na uthibitisho wa kazi-kiambajengo. + + + +## Algorithm ya uchimbaji {#mining-algorithm} + +Mtandao Mkuu wa Ethereum ulitumia algorithm moja tu ya uchimbaji - ['Ethash'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/). Ethash ilikuwa mrithi wa algorithm ya awali ya R&D iliyojulikana kama ['Dagger-Hashimoto'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/). + +[Maelezo zaidi kuhusu algorithm za uchimbaji](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/). + +## Mada zinazohusiana {#related-topics} + +- [Gesi](/developers/docs/gas/) +- [EVM](/developers/docs/evm/) +- [Uthibitisho wa kazi](/developers/docs/consensus-mechanisms/pow/) diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md new file mode 100644 index 00000000000..e02a51055fa --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md @@ -0,0 +1,329 @@ +--- +title: Dagger-Hashimoto +description: Mtazamo wa kina kuhusu kanuni ya Dagger-Hashimoto. +lang: sw +--- + +Dagger-Hashimoto ilikuwa utekelezaji wa awali wa utafiti na maelezo ya kanuni ya uchimbaji ya Ethereum. Dagger-Hashimoto ilibadilishwa na [Ethash](#ethash). Uchimbaji ulizimwa kabisa wakati wa [Muungano](/roadmap/merge/) mnamo tarehe 15 Septemba 2022. Tangu wakati huo, Ethereum imekuwa ikilindwa kwa kutumia utaratibu wa [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos) badala yake. Ukurasa huu ni kwa ajili ya maslahi ya kihistoria - maelezo yaliyomo hapa hayahusiani tena na Ethereum ya baada ya Muungano. + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri zaidi, tunapendekeza kwanza usome kuhusu [makubaliano ya uthibitishaji-wa-kazi](/developers/docs/consensus-mechanisms/pow), [uchimbaji](/developers/docs/consensus-mechanisms/pow/mining), na [kanuni za uchimbaji](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms). + +## Dagger-Hashimoto {#dagger-hashimoto} + +Dagger-Hashimoto inalenga kutimiza malengo mawili: + +1. **Ukinzani-wa-ASIC**: faida ya kutengeneza maunzi maalum kwa ajili ya kanuni inapaswa kuwa ndogo iwezekanavyo +2. **Uthibitisho wa mteja mwepesi**: bloku inapaswa kuthibitishwa kwa ufanisi na mteja mwepesi. + +Kwa marekebisho ya ziada, pia tunaeleza jinsi ya kutimiza lengo la tatu ikiwa inahitajika, lakini kwa gharama ya utata wa ziada: + +**Hifadhi kamili ya mnyororo**: uchimbaji unapaswa kuhitaji hifadhi ya hali kamili ya mnyororo wa bloku (kutokana na muundo usio wa kawaida wa trie ya hali ya Ethereum, tunatarajia kuwa upunguzaji fulani utawezekana, hasa wa baadhi ya mikataba inayotumiwa mara kwa mara, lakini tunataka kupunguza hili). + +## Uzazi wa DAG {#dag-generation} + +Msimbo wa kanuni utaelezwa katika Python hapa chini. Kwanza, tunatoa `encode_int` kwa ajili ya kupanga nambari kamili zisizo na alama za usahihi maalum kuwa mifuatano. Kinyume chake pia kimetolewa: + +```python +NUM_BITS = 512 + +def encode_int(x): + "Weka nambari kamili x kama mfuatano wa herufi 64 ukitumia mpango wa big-endian" + o = '' + for _ in range(NUM_BITS / 8): + o = chr(x % 256) + o + x //= 256 + return o + +def decode_int(s): + "Ondoa msimbo wa nambari kamili x kutoka kwenye mfuatano ukitumia mpango wa big-endian" + x = 0 + for c in s: + x *= 256 + x += ord(c) + return x +``` + +Ifuatayo, tunadhani kwamba `sha3` ni chaguo la kukokotoa linalochukua nambari kamili na kutoa nambari kamili, na `dbl_sha3` ni chaguo la kukokotoa la double-sha3; ikiwa unabadilisha msimbo huu wa marejeleo kuwa utekelezaji, tumia: + +```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))) +``` + +### Vigezo {#parameters} + +Vigezo vinavyotumika kwa kanuni ni: + +```python +SAFE_PRIME_512 = 2**512 - 38117 # Nambari Kuu Salama iliyo chini ya 2**512 + +params = { + "n": 4000055296 * 8 // NUM_BITS, # Ukubwa wa seti ya data (Gigabaiti 4); LAZIMA IWE ZIDISHO LA 65536 + "n_inc": 65536, # Ongezeko la thamani ya n kwa kila kipindi; LAZIMA IWE ZIDISHO LA 65536 + # na epochtime=20000 inatoa ukuaji wa MB 882 kwa mwaka + "cache_size": 2500, # Ukubwa wa kache ya mteja mwepesi (inaweza kuchaguliwa na mteja mwepesi; si sehemu ya vipimo vya kanuni) + "diff": 2**14, # Ugumu (hurekebishwa wakati wa tathmini ya bloku) + "epochtime": 100000, # Urefu wa kipindi katika bloku (mara ngapi seti ya data inasasishwa) + "k": 1, # Idadi ya wazazi wa nodi + "w": w, # Inatumika kwa ajili ya uhasishaji wa kipeo cha kimodula + "accesses": 200, # Idadi ya ufikiaji wa seti ya data wakati wa hashimoto + "P": SAFE_PRIME_512 # Nambari Kuu Salama kwa ajili ya uhasishaji na uzalishaji wa nambari nasibu +} +``` + +`P` katika kesi hii ni nambari kuu iliyochaguliwa kiasi kwamba `log₂(P)` ni chini kidogo ya 512, ambayo inalingana na biti 512 ambazo tumekuwa tukitumia kuwakilisha nambari zetu. Kumbuka kwamba ni nusu ya mwisho tu ya DAG ndiyo inayohitaji kuhifadhiwa, kwa hivyo mahitaji halisi ya RAM huanza kwa GB 1 na kukua kwa MB 441 kwa mwaka. + +### Uundaji wa grafu ya Dagger {#dagger-graph-building} + +Asili ya uundaji wa grafu ya dagger imefafanuliwa kama ifuatavyo: + +```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 +``` + +Kimsingi, inaanza grafu kama nodi moja, `sha3(seed)`, na kutoka hapo huanza kuongeza kwa mfuatano nodi zingine kulingana na nodi za awali za nasibu. Wakati nodi mpya inaundwa, nguvu ya kimodula ya mbegu huhesabiwa ili kuchagua kwa nasibu fahirisi fulani zilizo chini ya `i` (kwa kutumia `x % i` hapo juu), na thamani za nodi kwenye fahirisi hizo hutumiwa katika hesabu ili kuzalisha thamani mpya ya `x`, ambayo hupelekwa kwenye chaguo dogo la uthibitisho wa kazi (kulingana na XOR) ili hatimaye kuzalisha thamani ya grafu kwenye fahirisi `i`. Sababu ya muundo huu maalum ni kulazimisha ufikiaji wa mfuatano wa DAG; thamani inayofuata ya DAG itakayofikiwa haiwezi kubainishwa hadi thamani ya sasa ijulikane. Mwishowe, upeo wa kimodula huhasisha matokeo zaidi. + +Kanuni hii inategemea matokeo kadhaa kutoka kwa nadharia ya nambari. Tazama kiambatisho hapa chini kwa majadiliano. + +## Tathmini ya mteja mwepesi {#light-client-evaluation} + +Uundaji wa grafu hapo juu unakusudia kuruhusu kila nodi kwenye grafu kujengwa upya kwa kukokotoa mti mdogo wa idadi ndogo tu ya nodi na kuhitaji kiasi kidogo tu cha kumbukumbu saidizi. Kumbuka kuwa kwa k=1, mti mdogo ni mnyororo tu wa thamani zinazopanda hadi kwenye elementi ya kwanza katika DAG. + +Chaguo la kukokotoa la kompyuta ya mteja mwepesi kwa DAG hufanya kazi kama ifuatavyo: + +```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) +``` + +Kimsingi, ni uandishi upya wa kanuni iliyo hapo juu ambao huondoa kitanzi cha kukokotoa thamani za DAG nzima na kubadilisha utafutaji wa nodi ya awali na wito wa kujirudia au utafutaji wa kache. Kumbuka kuwa kwa `k=1` kache si lazima, ingawa uboreshaji zaidi kwa kweli huhesabu mapema thamani elfu chache za kwanza za DAG na kuweka hiyo kama kache tuli kwa ajili ya hesabu; tazama kiambatisho kwa utekelezaji wa msimbo wa hili. + +## Bafa maradufu ya DAGs {#double-buffer} + +Katika mteja kamili, [_bafa maradufu_](https://wikipedia.org/wiki/Multiple_buffering) ya DAGs 2 zinazozalishwa na fomula iliyo hapo juu hutumiwa. Wazo ni kwamba DAGs huzalishwa kila `epochtime` idadi ya bloku kulingana na vigezo vilivyo hapo juu. Badala ya mteja kutumia DAG ya hivi karibuni iliyozalishwa, hutumia ile ya awali. Faida ya hili ni kwamba inaruhusu DAGs kubadilishwa kwa muda bila kuhitaji kujumuisha hatua ambapo wachimbaji lazima ghafla wahesabu upya data yote. Vinginevyo, kuna uwezekano wa kupungua kwa ghafla kwa muda katika usindikaji wa mnyororo kwa vipindi vya kawaida na kuongezeka kwa kiasi kikubwa kwa umilikishwaji. Hivyo hatari za shambulizi la asilimia 51% ndani ya dakika hizo chache kabla ya data yote kuhesabiwa upya. + +Kanuni inayotumika kuzalisha seti ya DAGs zinazotumika kukokotoa kazi kwa ajili ya bloku ni kama ifuatavyo: + +```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} + +Wazo la awali la Hashimoto ni kutumia mnyororo wa bloku kama seti ya data, kufanya hesabu inayochagua fahirisi za N kutoka kwenye mnyororo wa bloku, kukusanya miamala kwenye fahirisi hizo, kufanya XOR ya data hii, na kurudisha hashi ya matokeo. Kanuni ya awali ya Thaddeus Dryja, iliyotafsiriwa kwa Python kwa ajili ya uwiano, ni kama ifuatavyo: + +```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) +``` + +Kwa bahati mbaya, ingawa Hashimoto inachukuliwa kuwa ngumu kwa RAM, inategemea hesabu za biti 256, ambazo zina gharama kubwa za kikokotozi. Hata hivyo, Dagger-Hashimoto hutumia tu biti 64 za chini kabisa wakati wa kufaharisi seti yake ya data ili kushughulikia suala hili. + +```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) +``` + +Matumizi ya SHA3 maradufu huruhusu aina ya uthibitishaji wa awali wa data-sifuri, karibu wa papo hapo, kuthibitisha tu kwamba thamani sahihi ya kati ilitolewa. Safu hii ya nje ya uthibitishaji-wa-kazi inafaa sana kwa ASIC na ni dhaifu kiasi, lakini ipo ili kufanya DDoS iwe ngumu zaidi kwa kuwa kiasi hicho kidogo cha kazi lazima kifanyike ili kuzalisha bloku ambayo haitakataliwa mara moja. Hii ndiyo toleo la mteja-mwepesi: + +```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) +``` + +## Uchimbaji na uthibitishaji {#mining-and-verifying} + +Sasa, hebu tuviweke vyote pamoja katika kanuni ya uchimbaji: + +```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 +``` + +Hii ndiyo kanuni ya uthibitishaji: + +```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 +``` + +Uthibitishaji unaofaa kwa mteja-mwepesi: + +```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 +``` + +Pia, kumbuka kuwa Dagger-Hashimoto inaweka mahitaji ya ziada kwenye kichwa cha bloku: + +- Ili uthibitishaji wa safu-mbili ufanye kazi, kichwa cha bloku lazima kiwe na nonce na thamani ya kati kabla ya sha3 +- Mahali fulani, kichwa cha bloku lazima kihifadhi sha3 ya seti ya mbegu ya sasa + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Kiambatisho {#appendix} + +Kama ilivyoelezwa hapo juu, RNG inayotumika kwa uzalishaji wa DAG inategemea matokeo fulani kutoka kwa nadharia ya nambari. Kwanza, tunatoa uhakikisho kwamba Lehmer RNG ambayo ni msingi wa kigezo cha `picker` ina kipindi kirefu. Pili, tunaonyesha kwamba `pow(x,3,P)` haitapanga `x` kwa `1` au `P-1` mradi `x ∈ [2,P-2]` mwanzoni. Mwishowe, tunaonyesha kwamba `pow(x,3,P)` ina kiwango cha chini cha mgongano inapotumika kama chaguo la kukokotoa la uhasishaji. + +### Jenereta ya nambari nasibu ya Lehmer {#lehmer-random-number} + +Ingawa chaguo la kukokotoa la `produce_dag` halihitaji kutoa nambari nasibu zisizo na upendeleo, tishio linalowezekana ni kwamba `seed**i % P` huchukua thamani chache tu. Hii inaweza kuwapa faida wachimbaji wanaotambua mchoro kuliko wale wasiotambua. + +Ili kuepuka hili, matokeo kutoka kwa nadharia ya nambari yanatumika. [_Nambari Kuu Salama_](https://en.wikipedia.org/wiki/Safe_prime) inafafanuliwa kuwa nambari kuu `P` kiasi kwamba `(P-1)/2` pia ni nambari kuu. _Mpangilio_ wa mwanachama `x` wa [kikundi cha kuzidisha](https://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n) `ℤ/nℤ` unafafanuliwa kuwa `m` ndogo zaidi kiasi kwamba
xᵐ mod P ≡ 1
+Kutokana na ufafanuzi huu, tuna: + +> Uchunguzi 1. Acha `x` iwe mwanachama wa kikundi cha kuzidisha `ℤ/Pℤ` kwa nambari kuu salama `P`. Ikiwa `x mod P ≠ 1 mod P` na `x mod P ≠ P-1 mod P`, basi mpangilio wa `x` ni `P-1` au `(P-1)/2`. + +_Uthibitisho_. Kwa kuwa `P` ni nambari kuu salama, basi kwa [Nadharia ya Lagrange][lagrange] tuna kwamba mpangilio wa `x` ni `1`, `2`, `(P-1)/2`, au `P-1`. + +Mpangilio wa `x` hauwezi kuwa `1`, kwa kuwa kwa Nadharia Ndogo ya Fermat tuna: + +
xP-1 mod P ≡ 1
+ +Kwa hiyo `x` lazima iwe utambulisho wa kuzidisha wa `ℤ/nℤ`, ambayo ni ya kipekee. Kwa kuwa tulidhani kwamba `x ≠ 1` kwa dhana, hili haliwezekani. + +Mpangilio wa `x` hauwezi kuwa `2` isipokuwa `x = P-1`, kwa kuwa hili lingekiuka kwamba `P` ni nambari kuu. + +Kutoka kwa pendekezo lililo hapo juu, tunaweza kutambua kwamba kurudia `(picker * init) % P` kutakuwa na urefu wa mzunguko wa angalau `(P-1)/2`. Hii ni kwa sababu tulichagua `P` kuwa nambari kuu salama takriban sawa na kuwa nguvu ya juu ya mbili, na `init` iko katika muda wa `[2,2**256+1]`. Kutokana na ukubwa wa `P`, hatupaswi kamwe kutarajia mzunguko kutoka kwa upeo wa kimodula. + +Tunapogawa seli ya kwanza katika DAG (kigezo kilichoandikwa `init`), tunakokotoa `pow(sha3(seed) + 2, 3, P)`. Kwa mtazamo wa kwanza, hili halihakikishi kwamba matokeo si `1` wala `P-1`. Hata hivyo, kwa kuwa `P-1` ni nambari kuu salama, tuna uhakikisho wa ziada ufuatao, ambao ni matokeo ya Uchunguzi 1: + +> Uchunguzi 2. Acha `x` iwe mwanachama wa kikundi cha kuzidisha `ℤ/Pℤ` kwa nambari kuu salama `P`, na acha `w` iwe nambari asilia. Ikiwa `x mod P ≠ 1 mod P` na `x mod P ≠ P-1 mod P`, na vile vile `w mod P ≠ P-1 mod P` na `w mod P ≠ 0 mod P`, basi `xʷ mod P ≠ 1 mod P` na `xʷ mod P ≠ P-1 mod P` + +### Upeo wa kimodula kama chaguo la kukokotoa la hashi {#modular-exponentiation} + +Kwa thamani fulani za `P` na `w`, chaguo la kukokotoa la `pow(x, w, P)` linaweza kuwa na migongano mingi. Kwa mfano, `pow(x,9,19)` huchukua tu thamani za `{1,18}`. + +Kwa kuwa `P` ni nambari kuu, basi `w` inayofaa kwa chaguo la kukokotoa la uhasishaji wa upeo wa kimodula inaweza kuchaguliwa kwa kutumia matokeo yafuatayo: + +> Uchunguzi 3. Acha `P` iwe nambari kuu; `w` na `P-1` ni nambari kuu za jamaa ikiwa na tu ikiwa kwa `a` na `b` zote katika `ℤ/Pℤ`:
`aʷ mod P ≡ bʷ mod P` ikiwa na tu ikiwa `a mod P ≡ b mod P`
+ +Hivyo, kwa kuwa `P` ni nambari kuu na `w` ni nambari kuu ya jamaa na `P-1`, tuna `|{pow(x, w, P) : x ∈ ℤ}| = P`, ikimaanisha kwamba chaguo la kukokotoa la uhasishaji lina kiwango cha chini zaidi cha mgongano kinachowezekana. + +Katika kesi maalum ambapo `P` ni nambari kuu salama kama tulivyochagua, basi `P-1` ina vigawanyo 1, 2, `(P-1)/2` na `P-1` pekee. Kwa kuwa `P` > 7, tunajua kwamba 3 ni nambari kuu ya jamaa na `P-1`, kwa hivyo `w=3` inakidhi pendekezo lililo hapo juu. + +## Kanuni ya tathmini yenye ufanisi zaidi inayotegemea kache {#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/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md new file mode 100644 index 00000000000..81508648aa0 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md @@ -0,0 +1,1019 @@ +--- +title: Ethash +description: Muonekano wa kina wa kanuni ya Ethash. +lang: sw +--- + + + + + + Ethash ilikuwa algoriti ya uchimbaji wa uthibitishaji-wa-kazi ya Ethereum. Uthibitishaji-wa-kazi sasa **umezimwa kabisa** na Ethereum sasa inalindwa kwa kutumia [uthibitishaji-wa-dau](/developers/docs/consensus-mechanisms/pos/) badala yake. Soma zaidi kuhusu [Muungano](/roadmap/merge/), [uthibitishaji-wa-dau](/developers/docs/consensus-mechanisms/pos/) na [kusimamisha](/staking/). Ukurasa huu ni kwa ajili ya maslahi ya kihistoria! + + + + +Ethash ni toleo lililobadilishwa la kanuni ya [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto). Uthibitishaji-wa-kazi wa Ethash ni [ngumu kwa kumbukumbu](https://wikipedia.org/wiki/Memory-hard_function), ambayo ilidhaniwa kufanya kanuni hiyo iwe sugu kwa ASIC. ASIC za Ethash hatimaye zilitengenezwa lakini uchimbaji wa GPU ulikuwa bado chaguo linalowezekana hadi uthibitishaji-wa-kazi ulipozimwa. Ethash bado inatumika kuchimba sarafu nyingine kwenye mitandao mingine isiyo ya Ethereum ya uthibitishaji-wa-kazi. + +## Je, Ethash hufanya kazi vipi? {#how-does-ethash-work} + +Ugumu wa kumbukumbu unafikiwa kwa kanuni ya uthibitisho wa kazi inayohitaji kuchagua vijisehemu vya rasilimali isiyobadilika kutegemeana na nonce na kichwa cha bloku. Rasilimali hii (ukubwa wa gigabaiti chache) inaitwa DAG. DAG hubadilishwa kila baada ya bloku 30,000, dirisha la takriban saa 125 linaloitwa epoch (takriban siku 5.2) na huchukua muda kutengenezwa. Kwa kuwa DAG inategemea tu urefu wa bloku, inaweza kutengenezwa kabla, lakini kama sivyo wateja wanahitaji kusubiri hadi mwisho wa mchakato huu ili kutoa bloku. Ikiwa wateja hawatengenezi kabla na kuhifadhi DAG kabla ya wakati, mtandao unaweza kukumbwa na ucheleweshaji mkubwa wa bloku katika kila mabadiliko ya epoch. Kumbuka kwamba DAG haihitaji kutengenezwa ili kuthibitisha uthibitishaji-wa-kazi, kimsingi kuruhusu uthibitishaji na CPU ya chini na kumbukumbu ndogo. + +Njia ya jumla ambayo kanuni huchukua ni kama ifuatavyo: + +1. Kuna **mbegu** ambayo inaweza kukokotolewa kwa kila bloku kwa kuchanganua vichwa vya bloku hadi kufikia hatua hiyo. +2. Kutoka kwenye mbegu, mtu anaweza kukokotoa **kache bandia ya nasibu ya MB 16**. Wateja wepesi huhifadhi kache. +3. Kutoka kwenye kache, tunaweza kutengeneza **seti ya data ya GB 1**, yenye sifa kwamba kila kipengee katika seti ya data kinategemea tu idadi ndogo ya vipengee kutoka kwenye kache. Wateja kamili na wachimbaji huhifadhi seti ya data. Seti ya data hukua sawasawa na wakati. +4. Uchimbaji unahusisha kuchukua vipande vya nasibu vya seti ya data na kuviweka kwenye hashi pamoja. Uthibitishaji unaweza kufanywa na kumbukumbu ndogo kwa kutumia kache kutengeneza upya vipande maalum vya seti ya data unavyohitaji, hivyo unahitaji tu kuhifadhi kache. + +Seti kubwa ya data husasishwa mara moja kila bloku 30,000, hivyo juhudi kubwa ya mchimbaji itakuwa kusoma seti ya data, sio kuifanyia mabadiliko. + +## Ufafanuzi {#definitions} + +Tunatumia ufafanuzi ufuatao: + +``` +WORD_BYTES = 4 # baiti katika neno +DATASET_BYTES_INIT = 2**30 # baiti katika seti ya data kwenye genesis +DATASET_BYTES_GROWTH = 2**23 # ukuaji wa seti ya data kwa kila epoch +CACHE_BYTES_INIT = 2**24 # baiti katika kache kwenye genesis +CACHE_BYTES_GROWTH = 2**17 # ukuaji wa kache kwa kila epoch +CACHE_MULTIPLIER=1024 # Ukubwa wa DAG kulingana na kache +EPOCH_LENGTH = 30000 # bloku kwa kila epoch +MIX_BYTES = 128 # upana wa mchanganyiko +HASH_BYTES = 64 # urefu wa hashi katika baiti +DATASET_PARENTS = 256 # idadi ya wazazi wa kila kipengele cha seti ya data +CACHE_ROUNDS = 3 # idadi ya mizunguko katika utengenezaji wa kache +ACCESSES = 64 # idadi ya ufikiaji katika kitanzi cha hashimoto +``` + +### Matumizi ya 'SHA3' {#sha3} + +Ukuzaji wa Ethereum ulienda sambamba na ukuzaji wa kiwango cha SHA3, na mchakato wa viwango ulifanya mabadiliko ya kuchelewa katika pedi ya kanuni ya mwisho ya hashi, hivi kwamba hashi za "sha3_256" na "sha3_512" za Ethereum si hashi za kawaida za sha3, bali ni lahaja ambayo mara nyingi hujulikana kama "Keccak-256" na "Keccak-512" katika miktadha mingine. Tazama mjadala, k.m., [hapa](https://eips.ethereum.org/EIPS/eip-1803), [hapa](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use), au [hapa](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057). + +Tafadhali zingatia hilo kwani hashi za "sha3" zinarejelewa katika maelezo ya kanuni hapa chini. + +## Vigezo {#parameters} + +Vigezo vya kache na seti ya data ya Ethash hutegemea nambari ya bloku. Ukubwa wa kache na ukubwa wa seti ya data vyote hukua sawasawa; hata hivyo, daima tunachukua nambari tasa ya juu zaidi chini ya kizingiti kinachokua sawasawa ili kupunguza hatari ya urudiaji wa bahati mbaya unaosababisha tabia ya mzunguko. + +```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 +``` + +Majedwali ya thamani za ukubwa wa seti ya data na kache yametolewa katika kiambatisho. + +## Utengenezaji wa kache {#cache-generation} + +Sasa, tunabainisha chaguo la kukokotoa la kutengeneza kache: + +```python +def mkcache(cache_size, seed): + n = cache_size // HASH_BYTES + + # Tengeneza seti ya data ya awali kwa mfuatano + o = [sha3_512(seed)] + for i in range(1, n): + o.append(sha3_512(o[-1])) + + # Tumia toleo la mzunguko wa chini la 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 +``` + +Mchakato wa utengenezaji wa kache unahusisha kwanza kujaza kumbukumbu ya MB 32 kwa mfuatano, kisha kufanya pasi mbili za kanuni ya _RandMemoHash_ ya Sergio Demian Lerner kutoka [_Strict Memory Hard Hashing Functions_ (2014)](http://www.hashcash.org/papers/memohash.pdf). Tokeo ni seti ya thamani 524,288 za baiti 64. + +## Chaguo la kukokotoa la mkusanyiko wa data {#date-aggregation-function} + +Tunatumia kanuni iliyochochewa na [hashi ya FNV](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) katika baadhi ya matukio kama mbadala usio wa ushirika wa XOR. Kumbuka kwamba tunazidisha nambari tasa na ingizo kamili la biti 32, kinyume na maelezo ya FNV-1 ambayo huzidisha nambari tasa na baiti moja (okteti) kwa zamu. + +```python +FNV_PRIME = 0x01000193 + +def fnv(v1, v2): + return ((v1 * FNV_PRIME) ^ v2) % 2**32 +``` + +Tafadhali kumbuka, hata kama karatasi ya njano inabainisha fnv kama v1\*(FNV_PRIME ^ v2), utekelezaji wote wa sasa unatumia ufafanuzi ulio hapo juu mara kwa mara. + +## Ukadiriaji kamili wa seti ya data {#full-dataset-calculation} + +Kila kipengee cha baiti 64 katika seti kamili ya data ya GB 1 hukokotolewa kama ifuatavyo: + +```python +def calc_dataset_item(cache, i): + n = len(cache) + r = HASH_BYTES // WORD_BYTES + # anzisha mchanganyiko + mix = copy.copy(cache[i % n]) + mix[0] ^= i + mix = sha3_512(mix) + # iweke kwenye fnv na nodi nyingi za kache za nasibu kulingana na 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) +``` + +Kimsingi, tunachanganya data kutoka kwa nodi 256 za kache zilizochaguliwa kinasibu, na kuweka hiyo kwenye hashi ili kukokotoa nodi ya seti ya data. Seti nzima ya data kisha hutengenezwa na: + +```python +def calc_dataset(full_size, cache): + return [calc_dataset_item(cache, i) for i in range(full_size // HASH_BYTES)] +``` + +## Kitanzi kikuu {#main-loop} + +Sasa, tunabainisha kitanzi kikuu kinachofanana na "hashimoto", ambapo tunakusanya data kutoka kwa seti kamili ya data ili kutoa thamani yetu ya mwisho kwa kichwa na nonce maalum. Katika msimbo ulio hapa chini, `header` inawakilisha _hashi_ ya SHA3-256 ya uwakilishi wa RLP ya kichwa cha bloku _kilichopunguzwa_, yaani, cha kichwa bila kujumuisha sehemu za **mixHash** na **nonce**. `nonce` ni baiti nane za nambari kamili isiyo na alama ya biti 64 katika mpangilio wa big-endian. Kwa hivyo `nonce[::-1]` ni uwakilishi wa baiti nane wa little-endian wa thamani hiyo: + +```python +def hashimoto(header, nonce, full_size, dataset_lookup): + n = full_size / HASH_BYTES + w = MIX_BYTES // WORD_BYTES + mixhashes = MIX_BYTES / HASH_BYTES + # changanya header+nonce kuwa mbegu ya baiti 64 + s = sha3_512(header + nonce[::-1]) + # anza mchanganyiko na s iliyorudiwa + mix = [] + for _ in range(MIX_BYTES / HASH_BYTES): + mix.extend(s) + # changanya nodi za nasibu za seti ya data + 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) + # bana mchanganyiko + 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]) +``` + +Kimsingi, tunadumisha "mchanganyiko" wenye upana wa baiti 128, na mara kwa mara tunachukua baiti 128 kwa mfuatano kutoka kwa seti kamili ya data na kutumia chaguo la kukokotoa la `fnv` kuiunganisha na mchanganyiko. Baiti 128 za ufikiaji wa mfuatano hutumika ili kila mzunguko wa kanuni daima uchukue ukurasa kamili kutoka kwa RAM, kupunguza makosa ya Translation Lookaside Buffer (TLB) ambayo kinadharia ASIC zingeweza kuepuka. + +Ikiwa tokeo la kanuni hii liko chini ya lengo linalohitajika, basi nonce ni halali. Kumbuka kwamba matumizi ya ziada ya `sha3_256` mwishoni yanahakikisha kwamba kuna nonce ya kati inayoweza kutolewa kuthibitisha kwamba angalau kiasi kidogo cha kazi kimefanyika; uthibitishaji huu wa haraka wa PoW wa nje unaweza kutumika kwa madhumuni ya kuzuia DDoS. Pia hutumika kutoa uhakikisho wa kitakwimu kwamba matokeo ni nambari isiyo na upendeleo, ya biti 256. + +## Uchimbaji {#mining} + +Kanuni ya uchimbaji inafafanuliwa kama ifuatavyo: + +```python +def mine(full_size, dataset, header, difficulty): + # weka sifuri kwenye lengo ili kulinganisha na hashi kwenye tarakimu sawa + 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 +``` + +## Kufafanua hashi ya mbegu {#seed-hash} + +Ili kukokotoa hashi ya mbegu ambayo itatumika kuchimba juu ya bloku fulani, tunatumia kanuni ifuatayo: + +```python + def get_seedhash(block): + s = '\x00' * 32 + for i in range(block.number // EPOCH_LENGTH): + s = serialize_hash(sha3_256(s)) + return s +``` + +Kumbuka kwamba kwa uchimbaji na uthibitishaji rahisi, tunapendekeza kukokotoa kabla hashi za mbegu na seti za data za siku zijazo katika uzi tofauti. + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Kiambatisho {#appendix} + +Msimbo ufuatao unapaswa kuongezwa mwanzoni ikiwa ungependa kutekeleza maelezo ya python yaliyo hapo juu kama msimbo. + +```python +import sha3, copy + +# Inadhania mpangilio wa biti wa little-endian (sawa na usanifu wa Intel) +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 + +# chaguo la kukokotoa la hashi ya sha3, hutoa baiti 64 +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 +``` + +### Ukubwa wa Data {#data-sizes} + +Majedwali yafuatayo ya marejeleo yanatoa takriban epoch 2048 zilizopangwa za ukubwa wa data na ukubwa wa kache. + +```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, 26777728, 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/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md new file mode 100644 index 00000000000..2217c608060 --- /dev/null +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md @@ -0,0 +1,42 @@ +--- +title: Maelekezo ya uchimbaji +description: Mtazamo wa kina wa kanuni zilizotumika kwa ajili ya uchimbaji wa Ethereum. +lang: sw +--- + + + + + +Uthibitisho wa kazi sio msingi tena wa utaratibu wa makubaliano wa Ethereum, kumaanisha uchimbaji umezimwa. Badala yake, Ethereum inalindwa na wathibitishaji ambao wanashiriki ETH. Unaweza kuanza kuweka ETH yako leo. Soma zaidi kwenye The Merge, ushahidi-wa-stake, na staking. Ukurasa huu ni kwa ajili ya maslahi ya kihistoria tu. + + + + +Uchimbaji wa Ethereum ulitumia kanuni inayojulikana kama Ethash. Wazo la msingi la kanuni ni kwamba mchimbaji anajaribu kupata ingizo la nonce kwa kutumia hesabu za nguvu ili hashi inayotokana iwe ndogo kuliko kizingiti kilichowekwa na ugumu uliokokotolewa. Kiwango hiki cha ugumu kinaweza kurekebishwa kwa nguvu, na kuruhusu uzalishaji wa bloku kufanyika kwa muda wa kawaida. + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri, tunapendekeza kwanza usome kuhusu [makubaliano ya uthibitishaji-wa-kazi](/developers/docs/consensus-mechanisms/pow) na [uchimbaji](/developers/docs/consensus-mechanisms/pow/mining). + +## Dagger Hashimoto {#dagger-hashimoto} + +Dagger Hashimoto ilikuwa kanuni ya utafiti mtangulizi ya uchimbaji wa Ethereum ambayo Ethash iliichukua nafasi. Ulikuwa ni mchanganyiko wa kanuni mbili tofauti: Dagger na Hashimoto. Lilikuwa tu utekelezaji wa utafiti na lilichukuliwa nafasi na Ethash wakati Mtandao Mkuu wa Ethereum ulizinduliwa. + +[Dagger](http://www.hashcash.org/papers/dagger.html) inahusisha uzalishaji wa [Grafu Elekezi Isiyo na Mzunguko](https://en.wikipedia.org/wiki/Directed_acyclic_graph), ambapo vipande vyake nasibu huunganishwa kwa hashi. Kanuni kuu ni kwamba kila nonce inahitaji tu sehemu ndogo ya mti mkuu wa data. Kuhesabu upya mti mdogo kwa kila nonce ni ghali sana kwa uchimbaji - hivyo basi kuna haja ya kuhifadhi mti - lakini ni sawa kwa uthibitishaji wa thamani ya nonce moja. Dagger iliundwa kuwa mbadala wa kanuni zilizopo kama Scrypt, ambazo ni ngumu kwa kumbukumbu lakini ni ngumu kuthibitisha wakati ugumu wao wa kumbukumbu unapoongezeka hadi viwango vya usalama halisi. Hata hivyo, Dagger ilikuwa hatarini kwa uharakishaji wa maunzi ya kumbukumbu ya pamoja na iliachwa ili kupendelea njia nyingine za utafiti. + +[Hashimoto](http://diyhpl.us/%7Ebryan/papers2/bitcoin/meh/hashimoto.pdf) ni kanuni inayoongeza ukinzani wa ASIC kwa kufungwa na I/O (yaani, usomaji wa kumbukumbu ndio kipengele kinachozuia katika mchakato wa uchimbaji). Nadharia ni kwamba RAM inapatikana zaidi kuliko hesabu; mabilioni ya dola za utafiti tayari yamechunguza uboreshaji wa RAM kwa matumizi tofauti, ambayo mara nyingi huhusisha mifumo ya ufikiaji isiyo ya kawaida (hivyo “kumbukumbu ya ufikiaji nasibu”). Kwa hiyo, RAM iliyopo inawezekana kuwa karibu na ubora wa juu kwa kutathmini kanuni. Hashimoto hutumia mnyororo wa bloku kama chanzo cha data, na kukidhi (1) na (3) hapo juu kwa wakati mmoja. + +Dagger-Hashimoto ilitumia matoleo yaliyorekebishwa ya kanuni za Dagger na Hashimoto. Tofauti kati ya Dagger Hashimoto na Hashimoto ni kwamba, badala ya kutumia mnyororo wa bloku kama chanzo cha data, Dagger Hashimoto hutumia seti ya data iliyoundwa maalum, ambayo husasishwa kulingana na data ya bloku kila baada ya bloku N. Seti ya data inazalishwa kwa kutumia kanuni ya Dagger, ikiruhusu uhesabuji mzuri wa seti ndogo maalum kwa kila nonce kwa ajili ya kanuni ya uthibitishaji ya mteja nyepesi. Tofauti kati ya Dagger Hashimoto na Dagger ni kwamba, tofauti na Dagger ya asili, seti ya data inayotumika kuuliza bloku ni ya kudumu kiasi, ikisasishwa tu kwa vipindi vya nadra (k.m., mara moja kwa wiki). Hii inamaanisha kuwa sehemu ya juhudi ya kuzalisha seti ya data ni karibu na sifuri, kwa hivyo hoja za Sergio Lerner kuhusu ongezeko la kasi ya kumbukumbu ya pamoja zinakuwa si muhimu. + +Zaidi kuhusu [Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto). + +## Ethash {#ethash} + +Ethash ilikuwa kanuni ya uchimbaji ambayo ilitumika kwenye Mtandao Mkuu halisi wa Ethereum chini ya usanifu wa uthibitishaji-wa-kazi ambao sasa umeacha kutumika. Ethash kimsingi lilikuwa jina jipya lililopewa toleo maalum la Dagger-Hashimoto baada ya kanuni kusasishwa kwa kiasi kikubwa, huku bado ikirithi kanuni za msingi za mtangulizi wake. Mtandao Mkuu wa Ethereum ulitumia Ethash pekee - Dagger Hashimoto ilikuwa toleo la U&U la kanuni ya uchimbaji ambalo lilichukuliwa nafasi kabla ya uchimbaji kuanza kwenye Mtandao Mkuu wa Ethereum. + +[Zaidi kuhusu Ethash](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash). + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/dapps/index.md b/public/content/translations/sw/developers/docs/dapps/index.md new file mode 100644 index 00000000000..e724f6c5950 --- /dev/null +++ b/public/content/translations/sw/developers/docs/dapps/index.md @@ -0,0 +1,97 @@ +--- +title: Utangulizi wa kiufundi kwa dapps +description: +lang: sw +--- + +Programu iliyogatuliwa (dapp) ni programu iliyojengwa kwenye mtandao uliogatuliwa unaochanganya [mkataba mahiri](/developers/docs/smart-contracts/) na kiolesura cha mtumiaji cha mbele. Kwenye Ethereum, mikataba mahiri inapatikana na ina uwazi – kama APIs wazi – hivyo dapp yako inaweza hata kujumuisha mkataba mahiri ulioandikwa na mtu mwingine. + +## Mahitaji ya awali {#prerequisites} + +Kabla ya kujifunza kuhusu dapps, unapaswa kupitia [misingi ya blockchain](/developers/docs/intro-to-ethereum/) na kusoma kuhusu mtandao wa Ethereum na jinsi ulivyogatuliwa. + +## Ufafanuzi wa dapp {#definition-of-a-dapp} + +Dapp ina msimbo wa backend unaoendesha kwenye mtandao wa wenzao uliogatuliwa. +Tofautisha hii na programu ambapo msimbo wa backend unaendesha kwenye seva zilizogatuliwa. + +Dapp inaweza kuwa na msimbo wa frontend na violesura vya mtumiaji vilivyoandikwa kwa lugha yoyote (kama programu) ili kufanya miito kwa backend yake. Zaidi ya hayo, frontend yake inaweza kupangishwa kwenye hifadhi iliyogatuliwa kama vile [IPFS](https://ipfs.io/). + +- **Imegatuliwa** - dapps hufanya kazi kwenye Ethereum, jukwaa la wazi la umma lililogatuliwa ambapo hakuna mtu mmoja au kikundi kinachodhibiti +- **Inayodhamiria** - dapps hufanya kazi sawa bila kujali mazingira ambamo zinatekelezwa +- **Turing kamili** - dapps zinaweza kufanya kitendo chochote zikiwa na rasilimali zinazohitajika +- **Imetengwa** - dapps hutekelezwa katika mazingira pepe yanayojulikana kama Mashine Halisi ya Ethereum ili kwamba ikiwa mkataba mahiri una hitilafu, haitazuia utendaji wa kawaida wa mtandao wa blockchain + +### Kuhusu mikataba mahiri {#on-smart-contracts} + +Ili kuanzisha dapps, tunahitaji kuanzisha mikataba mahiri – backend ya dapp kwa kukosekana kwa neno bora. Kwa muhtasari wa kina, nenda kwenye sehemu yetu kuhusu [mikataba mahiri](/developers/docs/smart-contracts/). + +Mkataba mahiri ni msimbo unaoishi kwenye blockchain ya Ethereum na unaendesha kama ulivyopangwa. Mara mikataba mahiri inapowekwa kwenye mtandao, huwezi kuibadilisha. Dapps zinaweza kuwa zilizogatuliwa kwa sababu zinadhibitiwa na mantiki iliyoandikwa kwenye mkataba, sio mtu binafsi au kampuni. Hii pia inamaanisha unahitaji kubuni mikataba yako kwa uangalifu na kuijaribu kwa kina. + +## Faida za uundaji wa dapp {#benefits-of-dapp-development} + +- **Upatikanaji wa kila wakati** – Mara tu mkataba mahiri unapowekwa kwenye blockchain, mtandao kwa ujumla utaweza kuwahudumia wateja wanaotaka kuingiliana na mkataba. Wahalifu, kwa hivyo, hawawezi kuzindua mashambulizi ya kukataa huduma yaliyolengwa kwa dapps binafsi. +- **Faragha** – Huhitaji kutoa utambulisho halisi ili kupeleka au kuingiliana na dapp. +- **Upinzani dhidi ya udhibiti** – Hakuna chombo kimoja kwenye mtandao kinachoweza kuzuia watumiaji kuwasilisha miamala, kupeleka dapps, au kusoma data kutoka kwenye blockchain. +- **Uadilifu kamili wa data** – Data iliyohifadhiwa kwenye blockchain haiwezi kubadilika na haiwezi kupingwa, shukrani kwa misingi ya kriptografia. Wahusika waovu hawawezi kughushi miamala au data nyingine ambayo tayari imewekwa hadharani. +- **Hesabu isiyoaminika/tabia inayoweza kuthibitishwa** – Mikataba mahiri inaweza kuchanganuliwa na imehakikishwa kutekelezwa kwa njia zinazotabirika, bila hitaji la kuamini mamlaka kuu. Hii si kweli katika mifano ya jadi; kwa mfano, tunapotumia mifumo ya benki mtandaoni, tunapaswa kuamini kwamba taasisi za kifedha hazitatumia vibaya data zetu za kifedha, kubadilisha rekodi, au kudukuliwa. + +## Hasara za uundaji wa dapp {#drawbacks-of-dapp-development} + +- **Matengenezo** – Dapps zinaweza kuwa ngumu zaidi kudumisha kwa sababu msimbo na data iliyochapishwa kwenye blockchain ni ngumu zaidi kurekebisha. Ni vigumu kwa watengenezaji kufanya masasisho kwenye dapps zao (au data ya msingi iliyohifadhiwa na dapp) mara tu zinapopelekwa, hata kama mende au hatari za usalama zinatambuliwa katika toleo la zamani. +- **Gharama ya ziada ya utendaji** – Kuna gharama kubwa ya ziada ya utendaji, na kuongeza kiwango ni ngumu sana. Ili kufikia kiwango cha usalama, uadilifu, uwazi, na uaminifu ambao Ethereum inakusudia, kila nodi inaendesha na kuhifadhi kila muamala. Juu ya hili, makubaliano ya uthibitisho wa hisa yanachukua muda pia. +- **Msongamano wa mtandao** – Wakati dapp moja inatumia rasilimali nyingi za kompyuta, mtandao mzima unajaa. Hivi sasa, mtandao unaweza kushughulikia takriban miamala 10-15 kwa sekunde; ikiwa miamala inatumwa kwa kasi zaidi ya hii, kundi la miamala isiyothibitishwa linaweza kuongezeka haraka. +- **Uzoefu wa mtumiaji** – Inaweza kuwa ngumu zaidi kubuni uzoefu unaomfaa mtumiaji kwa sababu mtumiaji wa kawaida anaweza kuona ni vigumu sana kusanidi mkusanyiko wa zana unaohitajika ili kuingiliana na blockchain kwa njia salama kabisa. +- **Uwekaji katikati** – Suluhisho zinazofaa watumiaji na wasanidi programu zilizojengwa juu ya safu ya msingi ya Ethereum zinaweza kuishia kuonekana kama huduma zilizowekwa katikati hata hivyo. Kwa mfano, huduma kama hizo zinaweza kuhifadhi funguo au taarifa nyingine nyeti upande wa seva, kutoa kiolesura cha mbele kwa kutumia seva iliyowekwa katikati, au kuendesha mantiki muhimu ya biashara kwenye seva iliyowekwa katikati kabla ya kuandika kwenye blockchain. Uwekaji katikati huondoa faida nyingi (ikiwa sio zote) za blockchain juu ya mfano wa jadi. + +## Wewe ni mwanafunzi wa kuona zaidi? {#visual-learner} + + + +## Zana za kuunda dapps {#dapp-tools} + +**Scaffold-ETH _- Fanya majaribio kwa haraka na Solidity ukitumia frontend inayojirekebisha kulingana na mkataba wako mahiri._** + +- [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) +- [Mfano wa dapp](https://punkwallet.io/) + +**Create Eth App _- Unda programu zinazotumia Ethereum kwa amri moja._** + +- [GitHub](https://github.com/paulrberg/create-eth-app) + +**One Click Dapp _- Zana ya FOSS ya kutengeneza frontend za dapp kutoka kwa [ABI](/glossary/#abi)._** + +- [oneclickdapp.com](https://oneclickdapp.com) +- [GitHub](https://github.com/oneclickdapp/oneclickdapp-v1) + +**Etherflow _- Zana ya FOSS kwa wasanidi programu wa Ethereum ili kujaribu nodi zao, na kutunga na kurekebisha hitilafu za wito wa RPC kutoka kwenye kivinjari._** + +- [etherflow.quiknode.io](https://etherflow.quiknode.io/) +- [GitHub](https://github.com/abunsen/etherflow) + +**thirdweb _- SDK katika kila lugha, mikataba mahiri, zana, na miundombinu ya uundaji wa web3._** + +- [Ukurasa wa nyumbani](https://thirdweb.com/) +- [Nyaraka](https://portal.thirdweb.com/) +- [GitHub](https://github.com/thirdweb-dev/) + +**Crossmint _- Jukwaa la uundaji wa web3 la kiwango cha biashara ili kupeleka mikataba mahiri, kuwezesha malipo ya kadi ya mkopo na malipo ya misururu tofauti, na kutumia APIs kuunda, kusambaza, kuuza, kuhifadhi, na kuhariri NFTs._** + +- [crossmint.com](https://www.crossmint.com) +- [Nyaraka](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) + +## Masomo zaidi {#further-reading} + +- [Gundua dapps](/apps) +- [Usanifu wa programu ya Web 3.0](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ +- [Mwongozo wa 2021 wa programu zilizogatuliwa](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) - _LimeChain_ +- [Programu Zilizogatuliwa ni Nini?](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) - _Gemini_ +- [Dapps maarufu](https://www.alchemy.com/dapps) - _Alchemy_ + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada Husika {#related-topics} + +- [Utangulizi wa mfumo wa Ethereum](/developers/docs/ethereum-stack/) +- [Mifumo ya uundaji](/developers/docs/frameworks/) diff --git a/public/content/translations/sw/developers/docs/data-and-analytics/block-explorers/index.md b/public/content/translations/sw/developers/docs/data-and-analytics/block-explorers/index.md new file mode 100644 index 00000000000..04332334dac --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-and-analytics/block-explorers/index.md @@ -0,0 +1,254 @@ +--- +title: Wachunguzi wa tofali +description: Utangulizi wa wachunguzi wa tofali, lango lako katika ulimwengu wa data ya mnyororo wa bloku, ambapo unaweza kuuliza maelezo kuhusu miamala, akaunti, mikataba na zaidi. +lang: sw +sidebarDepth: 3 +--- + +Wachunguzi wa tofali ni lango lako la data ya Ethereum. Unaweza kuzitumia kuona data ya muda halisi kwenye bloku, miamala, wathibitishaji, akaunti na shughuli zingine za onchain. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuelewa dhana za msingi za Ethereum ili uweze kuelewa data ambayo mchunguzi wa tofali anakupa. Anza na [utangulizi wa Ethereum](/developers/docs/intro-to-ethereum/). + +## Huduma {#services} + +- [Etherscan](https://etherscan.io/) -_Pia inapatikana katika Kichina, Kikorea, Kirusi, na Kijapani_ +- [3xpl](https://3xpl.com/ethereum) +- [Beaconcha.in](https://beaconcha.in/) +- [Blockchair](https://blockchair.com/ethereum) -_Pia inapatikana kwa Kihispania, Kifaransa, Kiitaliano, Kiholanzi, Kireno, Kirusi, Kichina na Kifarsi_ +- [Blockscout](https://eth.blockscout.com/) +- [Chainlens](https://www.chainlens.com/) +- [DexGuru Block Explorer](https://ethereum.dex.guru/) +- [Etherchain](https://www.etherchain.org/) +- [Ethplorer](https://ethplorer.io/) -_Pia inapatikana katika Kichina, Kihispania, Kifaransa, Kituruki, Kirusi, Kikorea na Kivietinamu_ +- [EthVM](https://www.ethvm.com/) +- [OKLink](https://www.oklink.com/eth) +- [Ethseer](https://ethseer.io) + +## Zana za programu huria {#open-source-tools} + +- [Otterscan](https://otterscan.io/) +- [lazy-etherscan](https://github.com/woxjro/lazy-etherscan) + +## Data {#data} + +Ethereum ni wazi kwa muundo kwa hivyo kila kitu kinaweza kuthibitishwa. Wachunguzi wa tofali hutoa kiolesura cha kupata maelezo haya. Na hii ni kwa mtandao mkuu wa Ethereum na testnet, iwapo utahitaji data hiyo. Data imegawanywa katika data ya utekelezaji na data ya makubaliano. Data ya utekelezaji inahusu miamala ambayo imetekelezwa katika bloku maalum. Data ya makubaliano inahusu bloku zenyewe na wathibitishaji waliozipendekeza. + +Huu ni muhtasari wa aina za data unazoweza kupata kutoka kwa mchunguzi wa tofali. + +### Data ya utekelezaji {#execution-data} + +Bloku mpya huongezwa kwenye Ethereum kila sekunde 12 (isipokuwa mpendekezaji wa bloku akikosa zamu yake), kwa hivyo mtiririko wa data unaokaribia kuwa wa kila mara huongezwa kwa wachunguzi wa tofali. Bloku zina data nyingi muhimu ambazo unaweza kupata kuwa za manufaa: + +**Data ya kawaida** + +- Urefu wa bloku - Nambari ya bloku na urefu wa mnyororo wa bloku (katika bloku) wakati wa kuundwa kwa bloku ya sasa +- Timestamp - Wakati ambapo bloku ilipendekezwa +- Miamala - Idadi ya miamala iliyojumuishwa ndani ya bloku +- Mpokeaji wa ada - Anwani iliyopokea zawadi za ada ya gesi kutoka kwa miamala +- Zawadi ya Kizuizi - Kiasi cha ETH kinachotolewa kwa mthibitishaji aliyependekeza bloku +- Ukubwa - Ukubwa wa data ndani ya bloku (hupimwa kwa baiti) +- Gesi iliyotumika - Jumla ya vitengo vya gesi vilivyotumiwa na miamala katika bloku +- Kikomo cha gesi - Jumla ya vikomo vya gesi vilivyowekwa na miamala katika bloku +- Ada ya msingi kwa kila gesi - Kizidisho cha chini kinachohitajika ili muamala ujumuishwe kwenye bloku +- Ada zilizochomwa - Kiasi gani cha ETH kinachomwa kwenye bloku +- Data ya ziada - Data yoyote ya ziada ambayo mjenzi amejumuisha kwenye bloku + +**Data ya hali ya juu** + +- Hashi - Hashi ya kroptografia inayowakilisha kichwa cha bloku (kitambulisho cha kipekee cha bloku) +- Hashi kuu - Hashi ya bloku iliyotangulia bloku ya sasa +- StateRoot - Hashi ya msingi ya Merkle trie ambayo huhifadhi hali nzima ya mfumo + +### Gesi {#gas} + +Sio tu kwamba wachunguzi wa tofali watakupa data kuhusu matumizi ya Gesi katika miamala na bloku, lakini baadhi watakupa maelezo kuhusu bei za sasa za gesi za mtandao. Hii itakusaidia kuelewa matumizi ya mtandao, kuwasilisha miamala salama na kutotumia gesi kupita kiasi. Tafuta API zinazoweza kukusaidia kupata maelezo haya kwenye kiolesura cha bidhaa yako. Data mahususi ya gesi inashughulikia: + +- Vikadirio vya vitengo vya gesi vinavyohitajika kwa muamala salama lakini wa polepole (+ bei na muda uliokadiriwa) +- Vikadirio vya vitengo vya gesi vinavyohitajika kwa muamala wa wastani (+ bei na muda uliokadiriwa) +- Vikadirio vya vitengo vya gesi vinavyohitajika kwa muamala wa haraka (+ bei na muda uliokadiriwa) +- Muda wa wastani wa uthibitishaji kulingana na bei ya gesi +- Mikataba inayotumia gesi - kwa maneno mengine, bidhaa maarufu ambazo zinaona matumizi mengi kwenye mtandao +- Akaunti zinazotumia gesi - kwa maneno mengine, watumiaji wa mara kwa mara wa mtandao + +### Miamala {#transactions} + +Wachunguzi wa tofali wamekuwa mahali pa kawaida kwa watu kufuatilia maendeleo ya miamala yao. Hiyo ni kwa sababu kiwango cha maelezo unayoweza kupata hutoa uhakika wa ziada. Data ya muamala inajumuisha: + +**Data ya kawaida** + +- Hashi ya muamala - Hashi inayotolewa wakati muamala unapowasilishwa +- Hali - Ishara ya iwapo muamala unasubiri, haukufaulu au umefaulu +- Bloku - Bloku ambayo muamala umejumuishwa +- Timestamp - Wakati ambapo muamala ulijumuishwa kwenye bloku iliyopendekezwa na mthibitishaji +- Kutoka - Anwani ya akaunti iliyowasilisha muamala +- Kwa - Anwani ya mpokeaji au mkataba-erevu ambao muamala huingiliana nao +- Tokeni zilizohamishwa - Orodha ya tokeni zilizohamishwa kama sehemu ya muamala +- Thamani - Jumla ya thamani ya ETH inayohamishwa +- Ada ya muamala - Kiasi kilicholipwa kwa mthibitishaji kuchakata muamala (kinachokokotolewa kwa bei ya gesi\*gesi iliyotumika) + +**Data ya hali ya juu** + +- Kikomo cha gesi - Idadi ya juu zaidi ya vitengo vya gesi ambavyo muamala huu unaweza kutumia +- Gesi iliyotumika - Kiasi halisi cha vitengo vya gesi ambavyo muamala ulitumia +- Bei ya gesi - Bei iliyowekwa kwa kila kitengo cha gesi +- Nonce - Nambari ya muamala ya anwani ya `kutoka` (kumbuka hii huanza saa 0 kwa hivyo nonce ya `100` itakuwa muamala wa 101 uliowasilishwa na akaunti hii) +- Data ya ingizo - Taarifa zozote za ziada zinazohitajika na muamala + +### Akaunti {#accounts} + +Kuna data nyingi unazoweza kufikia kuhusu akaunti. Hii ndiyo sababu mara nyingi hupendekezwa kutumia akaunti nyingi ili mali na thamani yako zisiweze kufuatiliwa kwa urahisi. Pia kuna baadhi ya suluhu zinazotengenezwa ili kufanya miamala na shughuli za akaunti kuwa za faragha zaidi. Lakini hii hapa data inayopatikana kwa akaunti: + +**Akaunti za mtumiaji** + +- Anwani ya akaunti - Anwani ya umma unayoweza kutumia kutuma pesa +- Salio la ETH - Kiasi cha ETH kinachohusishwa na akaunti hiyo +- Jumla ya thamani ya ETH - Thamani ya ETH +- Tokeni - Tokeni zinazohusishwa na akaunti na thamani zake +- Historia ya muamala - Orodha ya miamala yote ambapo akaunti hii ilikuwa mtumaji au mpokeaji + +**Mikataba erevu** + +Akaunti za mkataba-erevu zina data zote ambazo akaunti ya mtumiaji itakuwa nazo, lakini baadhi ya wachunguzi wa tofali wataonyesha hata maelezo fulani ya msimbo pia. Mifano ni pamoja na: + +- Muundaji wa mkataba - Anwani iliyosambaza mkataba kwenye Mtandao Mkuu +- Muamala wa uundaji - Muamala uliojumuisha usambazaji kwenye Mtandao Mkuu +- Msimbo chanzo - Msimbo wa solidity au vyper wa mkataba-erevu +- ABI ya Mkataba - Kiolesura cha Programu ya Binari cha mkataba—miito ambayo mkataba hufanya na data inayopokewa +- Msimbo wa uundaji wa mkataba - Msimbo wa baiti uliokusanywa wa mkataba-erevu—ulioundwa unapokusanya mkataba-erevu ulioandikwa katika Solidity au Vyper, n.k. +- Matukio ya mkataba - Historia ya mbinu zinazoitwa katika mkataba-erevu—kimsingi ni njia ya kuona jinsi mkataba unavyotumiwa na mara ngapi + +### Tokeni {#tokens} + +Tokeni ni aina ya mkataba kwa hivyo zitakuwa na data sawa na mkataba-erevu. Lakini kwa sababu zina thamani na zinaweza kuuzwa zina pointi za ziada za data: + +- Aina - Ikiwa ni ERC-20, ERC-721 au kiwango kingine cha tokeni +- Bei - Ikiwa ni ERC-20 zitakuwa na thamani ya sasa ya soko +- Mtaji wa soko - Ikiwa ni ERC-20 zitakuwa na mtaji wa soko (unaokokotolewa kwa bei\*jumla ya usambazaji) +- Jumla ya usambazaji - Idadi ya tokeni zinazozunguka +- Wamiliki - Idadi ya anwani zinazomiliki tokeni +- Uhamisho - Idadi ya mara ambazo tokeni imehamishwa kati ya akaunti +- Historia ya muamala - Historia ya miamala yote inayojumuisha tokeni +- Anwani ya mkataba - Anwani ya tokeni iliyosambazwa kwenye Mtandao Mkuu +- Desimali - Tokeni za ERC-20 zinagawanyika na zina nafasi za desimali + +### Mtandao {#network} + +Baadhi ya data za bloku zinahusika na afya ya Ethereum kwa ujumla zaidi. + +- Jumla ya miamala - Idadi ya miamala tangu Ethereum iundwe +- Miamala kwa sekunde - Idadi ya miamala inayoweza kuchakatwa ndani ya sekunde moja +- Bei ya ETH - Thamani ya sasa ya ETH 1 +- Jumla ya usambazaji wa ETH - Idadi ya ETH inayozunguka—kumbuka ETH mpya huundwa na uundaji wa kila bloku katika mfumo wa zawadi za kizuizi +- Mtaji wa soko - Ukokotoaji wa bei\*usambazaji + +## Data ya safu ya makubaliano {#consensus-layer-data} + +### Epoch {#epoch} + +Kwa sababu za kiusalama, kamati za wathibitishaji zisizo za kawaida huundwa mwishoni mwa kila epoch (kila dakika 6.4). Data ya epoch inajumuisha: + +- Nambari ya epoch +- Hali ya kukamilika - Ikiwa epoch imekamilika (Ndiyo/Hapana) +- Muda - Wakati epoch ilipoisha +- Uthibitishaji - Idadi ya uthibitishaji katika epoch (kura za bloku ndani ya yanayopangwa) +- Amana - Idadi ya amana za ETH zilizojumuishwa katika epoch (wathibitishaji lazima waweke hisa ya ETH ili wawe wathibitishaji) +- Slashings - Idadi ya adhabu zinazotolewa kwa wapendekezaji wa bloku au wathibitishaji +- Ushiriki wa kupiga kura - Kiasi cha ETH iliyowekwa hisa kinachotumika kuthibitisha bloku +- Wathibitishaji - Idadi ya wathibitishaji wanaofanya kazi kwa epoch +- Salio la Wastani la Mthibitishaji - Salio la wastani la wathibitishaji wanaofanya kazi +- Yanayopangwa - Idadi ya yanayopangwa yaliyojumuishwa kwenye epoch (yanayopangwa hujumuisha bloku moja halali) + +### Yanayopangwa {#slot} + +Yanayopangwa ni fursa za uundaji wa bloku, data inayopatikana kwa kila yanayopangwa inajumuisha: + +- Epoch - Epoch ambapo yanayopangwa ni halali +- Nambari ya yanayopangwa +- Hali - Hali ya yanayopangwa (Imependekezwa/Imekosa) +- Muda - Timestamp ya yanayopangwa +- Mpendekezaji - Mthibitishaji aliyependekeza bloku kwa ajili ya yanayopangwa +- Mzizi wa bloku - Mzizi wa mti wa hashi wa BeaconBlock +- Mzizi mkuu - Hashi ya bloku iliyotangulia +- Mzizi wa hali - Mzizi wa mti wa hashi wa BeaconState +- Sahihi +- Ufunuo wa Randao +- Graffiti - Mpendekezaji wa bloku anaweza kujumuisha ujumbe wa baiti 32 kwa pendekezo lake la bloku +- Data ya Utekelezaji + - Hashi ya bloku + - Hesabu ya amana + - Mzizi wa amana +- Uthibitishaji - Idadi ya uthibitishaji wa bloku katika yanayopangwa hili +- Amana - Idadi ya amana wakati wa yanayopangwa hili +- Matokeo ya hiari - Idadi ya wathibitishaji walioondoka wakati wa yanayopangwa +- Slashings - Idadi ya adhabu zinazotolewa kwa wapendekezaji wa bloku au wathibitishaji +- Kura - Wathibitishaji waliopigia kura bloku katika yanayopangwa hili + +### Bloku {#blocks-1} + +Uthibitisho wa Hisa hugawanya muda katika yanayopangwa na epochs. Kwa hivyo hiyo inamaanisha data mpya! + +- Mpendekezaji - Mthibitishaji aliyechaguliwa kimahesabu kupendekeza bloku mpya +- Epoch - Epoch ambapo bloku ilipendekezwa +- Yanayopangwa - Yanayopangwa ambapo bloku ilipendekezwa +- Uthibitishaji - Idadi ya uthibitishaji uliojumuishwa katika yanayopangwa—uthibitishaji ni kama kura zinazoonyesha bloku iko tayari kwenda kwenye Mnyororo Kioleza + +### Wathibitishaji {#validators} + +Wathibitishaji wanawajibika kupendekeza bloku na kuzithibitisha ndani ya yanayopangwa. + +- Nambari ya mthibitishaji - Nambari ya kipekee inayowakilisha mthibitishaji +- Salio la sasa - Salio la mthibitishaji likijumuisha zawadi +- Salio linalofaa - Salio la mthibitishaji linalotumika kwa kuweka hisa +- Mapato - Zawadi au adhabu zilizopokewa na mthibitishaji +- Hali - Ikiwa mthibitishaji yuko mtandaoni na anafanya kazi kwa sasa au la +- Ufanisi wa uthibitishaji - Muda wa wastani unaochukua kwa uthibitisho wa mthibitishaji kujumuishwa kwenye mnyororo +- Kustahiki kuwezeshwa - Tarehe (na epoch) ambapo mthibitishaji alipatikana ili kuthibitisha +- Inafanya kazi tangu - Tarehe (na epoch) ambapo mthibitishaji alianza kufanya kazi +- Bloku zilizopendekezwa - Bloku ambayo mthibitishaji amependekeza +- Uthibitishaji - Uthibitisho ambao mthibitishaji ametoa +- Amana - Anwani ya kutoka, hashi ya muamala, nambari ya bloku, timestamp, kiasi na hali ya amana ya kuweka hisa iliyofanywa na mthibitishaji + +### Uthibitishaji {#attestations} + +Uthibitishaji ni kura za "ndiyo" za kujumuisha bloku kwenye mnyororo. Data zao zinahusiana na rekodi ya uthibitisho na wathibitishaji waliothibitisha + +- Yanayopangwa - Yanayopangwa ambapo uthibitisho ulifanyika +- Faharasa ya kamati - Faharasa ya kamati kwenye yanayopangwa lililotolewa +- Biti za mkusanyiko - Inawakilisha uthibitisho uliokusanywa wa wathibitishaji wote wanaoshiriki katika uthibitisho +- Wathibitishaji - Wathibitishaji waliotoa uthibitisho +- Mzizi wa bloku ya Beacon - Inaelekeza kwenye bloku ambayo wathibitishaji wanathibitisha +- Chanzo - Inaelekeza kwa epoch ya hivi punde iliyohalalishwa +- Lengo - Inaelekeza kwenye mpaka wa hivi punde wa epoch +- Sahihi + +### Mtandao {#network-1} + +Data ya kiwango cha juu cha safu ya makubaliano inajumuisha yafuatayo: + +- Epoch ya sasa +- Yanayopangwa ya sasa +- Wathibitishaji wanaofanya kazi - Idadi ya wathibitishaji wanaofanya kazi +- Wathibitishaji wanaosubiri - Idadi ya wathibitishaji wanaosubiri kufanywa watendaji +- ETH iliyowekwa hisa - Kiasi cha ETH kilichowekwa hisa kwenye mtandao +- Salio la wastani - Salio la wastani la ETH la wathibitishaji + +## Wachunguzi wa bloku {#block-explorers} + +- [Etherscan](https://etherscan.io/) - mchunguzi wa tofali unaoweza kutumia kupata data kwa ajili ya Mtandao Mkuu wa Ethereum na Testnet +- [3xpl](https://3xpl.com/ethereum) - mchunguzi wa Ethereum wa programu huria bila matangazo ambaye huruhusu kupakua seti zake za data +- [Beaconcha.in](https://beaconcha.in/) - mchunguzi wa tofali wa programu huria kwa ajili ya Mtandao Mkuu wa Ethereum na Testnet +- [Blockchair](https://blockchair.com/ethereum) - mchunguzi wa faragha zaidi wa Ethereum. Pia kwa ajili ya kupanga na kuchuja data (mempool) +- [Etherchain](https://www.etherchain.org/) - mchunguzi wa tofali kwa Mtandao Mkuu wa Ethereum +- [Ethplorer](https://ethplorer.io/) - mchunguzi wa tofali anayezingatia tokeni kwa Mtandao Mkuu wa Ethereum na testnet ya Kovan + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Miamala](/developers/docs/transactions/) +- Hifadhi ya fedha (/developers/docs/accounts/) +- [Mitandao](/developers/docs/networks/) diff --git a/public/content/translations/sw/developers/docs/data-and-analytics/index.md b/public/content/translations/sw/developers/docs/data-and-analytics/index.md new file mode 100644 index 00000000000..8c20b319bfc --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-and-analytics/index.md @@ -0,0 +1,72 @@ +--- +title: Data na Uchambuzi +description: Jinsi ya kupata takwimu na data za onchain kwa matumizi katika mfumo mtawanyo wa kimamlaka wako +lang: sw +--- + +## Utangulizi {#Introduction} + +Matumizi ya Mtandao yanapoendelea kukua, kiasi kinachoongezeka cha habari muhimu kitakuwepo katika data ya onchain. Kadiri kiasi cha data kinavyoongezeka haraka, kukokotoa na kujumlisha habari hii ili kuripoti au kuendesha mfumo mtawanyo wa kimamlaka kunaweza kuwa jambo la kuchukua muda mwingi na mchakato mzito. + +Kutumia watoa huduma wa data waliopo kunaweza kuharakisha usanidi, kutoa matokeo sahihi zaidi, na kupunguza juhudi za matengenezo zinazoendelea. Hii itawezesha timu kuzingatia utendakazi mkuu ambao mradi wao unajaribu kutoa. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuelewa dhana ya msingi ya [Wachunguzi wa Bloku](/developers/docs/data-and-analytics/block-explorers/) ili kuelewa vizuri matumizi yao katika muktadha wa uchanganuzi wa data. Aidha, jifahamishe na dhana ya [faharasa](/glossary/#index) ili kuelewa manufaa wanayoongeza kwenye muundo wa mfumo. + +Kwa upande wa misingi ya usanifu, kuelewa [API](https://www.wikipedia.org/wiki/API) na [REST](https://www.wikipedia.org/wiki/Representational_state_transfer) ni nini, hata kwa nadharia. + +## Wachunguzi wa bloku {#block-explorers} + +[Wachunguzi wengi wa Bloku](/developers/docs/data-and-analytics/block-explorers/) hutoa lango za [RESTful](https://www.wikipedia.org/wiki/Representational_state_transfer) [API](https://www.wikipedia.org/wiki/API) ambazo zitawapa wasanidi programu mwonekano wa data ya muda halisi kuhusu bloku, miamala, wathibitishaji, akaunti na shughuli zingine za onchain. + +Wasanidi programu wanaweza kisha kuchakata na kubadilisha data hii ili kuwapa watumiaji wao maarifa ya kipekee na mwingiliano na [mnyororo wa bloku](/glossary/#blockchain). Kwa mfano, [Etherscan](https://etherscan.io) na [Blockscout](https://eth.blockscout.com) hutoa data ya utekelezaji na makubaliano kwa kila nafasi ya sekunde 12. + +## The Graph {#the-graph} + +[The Graph](https://thegraph.com/) ni itifaki ya uorodheshaji ambayo hutoa njia rahisi ya kuuliza data ya mnyororo wa bloku kupitia API wazi zinazojulikana kama grafu ndogo. + +Kwa kutumia The Graph, wasanidi programu wanaweza kunufaika na: + +- Uorodheshaji uliogatuliwa: Huwezesha kuorodhesha data ya mnyororo wa bloku kupitia viorodheshaji vingi, na hivyo kuondoa sehemu yoyote moja ya kutofaulu. +- Hoja za GraphQL: Hutoa kiolesura chenye nguvu cha GraphQL cha kuuliza data iliyoorodheshwa, na kufanya urejeshaji wa data kuwa rahisi sana. +- Ubinafsishaji: Bainisha mantiki yako mwenyewe ya kubadilisha na kuhifadhi data ya mnyororo wa bloku, na utumie tena grafu ndogo zilizochapishwa na wasanidi programu wengine kwenye Mtandao wa The Graph. + +Fuata mwongozo huu wa [kuanza-haraka](https://thegraph.com/docs/en/quick-start/) ili kuunda, kutuma, na kuuliza grafu ndogo ndani ya dakika 5. + +## Utofauti wa wateja {#client-diversity} + +[Utofauti wa wateja](/developers/docs/nodes-and-clients/client-diversity/) ni muhimu kwa afya ya jumla ya mtandao wa Ethereum kwa sababu unatoa ustahimilivu kwa hitilafu na unyonyaji. Sasa kuna dashibodi kadhaa za utofauti wa wateja zikiwemo [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [supermajority.info](https://supermajority.info//) na [Ethernodes](https://ethernodes.org/). + +## Dune Analytics {#dune-analytics} + +[Dune Analytics](https://dune.com/) huchakata awali data ya mnyororo wa bloku kuwa majedwali ya hifadhidata ya uhusiano (DuneSQL), huruhusu watumiaji kuuliza data ya mnyororo wa bloku kwa kutumia SQL na kuunda dashibodi kulingana na matokeo ya hoja. Data ya Onchain imepangwa katika majedwali 4 ghafi: `blocks`, `transactions`, `logs` (za matukio) na `traces` (za wito). Mikataba na itifaki maarufu zimeondolewa usimbaji, na kila moja ina seti yake ya majedwali ya matukio na wito. Majedwali hayo ya matukio na wito huchakatwa zaidi na kupangwa katika majedwali ya kufikirika kulingana na aina ya itifaki, kwa mfano, dex, ukopeshaji, stablecoins, n.k. + +## SQD {#sqd} + +[SQD](https://sqd.dev/) ni jukwaa la data lililogatuliwa na lenye uwezo mkubwa wa kupanuka lililoboreshwa ili kutoa ufikiaji bora, usio na ruhusa kwa kiasi kikubwa cha data. Kwa sasa inatoa data ya kihistoria ya on-chain, ikiwa ni pamoja na kumbukumbu za matukio, risiti za miamala, ufuatiliaji, na tofauti za hali kwa kila muamala. SQD hutoa zana yenye nguvu ya kuunda mifumo maalum ya uchimbaji na uchakataji wa data, na kufikia kasi ya uorodheshaji ya hadi bloku 150k kwa sekunde. + +Ili kuanza, tembelea [nyaraka](https://docs.sqd.dev/) au tazama [mifano ya EVM](https://github.com/subsquid-labs/squid-evm-examples) ya kile unachoweza kuunda na SQD. + +## Mtandao wa SubQuery {#subquery-network} + +[SubQuery](https://subquery.network/) ni kiorodheshaji data kinachoongoza ambacho huwapa wasanidi programu API za haraka, za kuaminika, zilizogatuliwa na zilizobinafsishwa kwa ajili ya miradi yao ya web3. SubQuery huwawezesha wasanidi programu kutoka kwa zaidi ya mifumo ikolojia 165+ (ikiwa ni pamoja na Ethereum) na data tele iliyoorodheshwa ili kuunda uzoefu angavu na wa kina kwa watumiaji wao. Mtandao wa SubQuery huwezesha programu zako zisizozuilika na mtandao thabiti na uliogatuliwa wa miundombinu. Tumia zana ya wasanidi programu wa mnyororo wa bloku ya SubQuery kuunda programu za web3 za siku zijazo, bila kupoteza muda kuunda backend maalum kwa shughuli za uchakataji wa data. + +Ili kuanza, tembelea [mwongozo wa kuanza haraka wa Ethereum](https://academy.subquery.network/quickstart/quickstart_chains/ethereum-gravatar.html) ili kuanza kuorodhesha data ya mnyororo wa bloku ya Ethereum kwa dakika katika mazingira ya ndani ya Docker kwa ajili ya majaribio kabla ya kuanza kutumika kwenye [huduma inayosimamiwa na SubQuery](https://managedservice.subquery.network/) au kwenye [mtandao uliogatuliwa wa SubQuery](https://app.subquery.network/dashboard). + +## Lugha ya Hoja ya EVM {#evm-query-language} + +Lugha ya Hoja ya EVM (EQL) ni lugha inayofanana na SQL iliyoundwa kuuliza minyororo ya EVM (mashine halisi ya ethereum). Lengo kuu la EQL ni kusaidia hoja changamano za uhusiano kwenye raia wa daraja la kwanza la mnyororo wa EVM (bloku, akaunti, na miamala) huku ikiwapa wasanidi programu na watafiti sintaksia rahisi kwa matumizi ya kila siku. Kwa EQL, wasanidi programu wanaweza kupata data ya mnyororo wa bloku kwa kutumia sintaksia inayojulikana kama SQL na kuondoa hitaji la msimbo changamano wa boilerplate. EQL inasaidia maombi ya kawaida ya data ya mnyororo wa bloku (k.m., kupata nonce na salio la akaunti kwenye Ethereum au kupata ukubwa wa sasa wa bloku na mhuri wa muda) na inaendelea kuongeza usaidizi kwa maombi na seti za vipengele changamano zaidi. + +## Masomo zaidi {#further-reading} + +- [Kuchunguza Data za Crypto I: Usanifu wa Mtiririko wa Data](https://web.archive.org/web/20250125012042/https://research.2077.xyz/exploring-crypto-data-1-data-flow-architectures) +- [Muhtasari wa Mtandao wa Graph](https://thegraph.com/docs/en/about/) +- [Uwanja wa Michezo wa Hoja za Graph](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) +- [Mifano ya msimbo wa API kwenye EtherScan](https://etherscan.io/apis#contracts) +- [Nyaraka za API kwenye Blockscout](https://docs.blockscout.com/devs/apis) +- [Mchunguzi wa Mnyororo Kioleza wa Beaconcha.in](https://beaconcha.in) +- [Misingi ya Dune](https://docs.dune.com/#dune-basics) +- [Mwongozo wa Kuanza Haraka wa Ethereum wa SubQuery](https://academy.subquery.network/indexer/quickstart/quickstart_chains/ethereum-gravatar.html) +- [Muhtasari wa Mtandao wa SQD](https://docs.sqd.dev/) +- [Lugha ya Hoja ya EVM](https://eql.sh/blog/alpha-release-notes) diff --git a/public/content/translations/sw/developers/docs/data-availability/blockchain-data-storage-strategies/index.md b/public/content/translations/sw/developers/docs/data-availability/blockchain-data-storage-strategies/index.md new file mode 100644 index 00000000000..707d8348593 --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-availability/blockchain-data-storage-strategies/index.md @@ -0,0 +1,118 @@ +--- +title: Mikakati ya Uhifadhi wa Data ya Mnyororo wa Bloku +description: Kuna njia kadhaa za kuhifadhi data kwa kutumia mnyororo wa bloku. Makala hii italinganisha mikakati tofauti, gharama na mabadilishano yake, pamoja na mahitaji ya kuitumia kwa usalama. +lang: sw +--- + +Kuna njia nyingi za kuhifadhi taarifa moja kwa moja kwenye mnyororo wa bloku, au kwa njia ambayo inalindwa na mnyororo wa bloku: + +- Blobu za EIP-4844 +- Calldata +- Offchain na mifumo ya L1 +- Mkataba \"msimbo\" +- Matukio +- Ghala la EVM + +Uchaguzi wa njia ipi ya kutumia unategemea vigezo kadhaa: + +- Chanzo cha taarifa. Taarifa katika calldata haiwezi kutoka moja kwa moja kwenye mnyororo wa bloku wenyewe. +- Mwisho wa taarifa. Calldata inapatikana tu katika muamala unaoijumuisha. Matukio hayapatikani onchain kabisa. +- Ni usumbufu kiasi gani unaokubalika? Kompyuta zinazoendesha nodi kamili zinaweza kufanya uchakataji mwingi zaidi kuliko mteja mwepesi katika programu inayoendeshwa kwenye kivinjari. +- Je, ni muhimu kuwezesha ufikiaji rahisi wa taarifa kutoka kwa kila nodi? +- Mahitaji ya usalama. + +## Mahitaji ya usalama {#security-requirements} + +Kwa ujumla, usalama wa taarifa una sifa tatu: + +- _Usiri_, huluki ambazo hazijaidhinishwa haziruhusiwi kusoma taarifa. Hii ni muhimu katika visa vingi, lakini si hapa. _Hakuna siri kwenye mnyororo wa bloku_. Minyororo ya bloku hufanya kazi kwa sababu mtu yeyote anaweza kuthibitisha mabadiliko ya hali, kwa hivyo haiwezekani kuzitumia kuhifadhi siri moja kwa moja. Kuna njia za kuhifadhi taarifa za siri kwenye mnyororo wa bloku, lakini zote zinategemea kijenzi fulani cha offchain ili kuhifadhi angalau ufunguo. + +- _Uadilifu_, taarifa ni sahihi, haiwezi kubadilishwa na huluki ambazo hazijaidhinishwa, au kwa njia zisizoidhinishwa (kwa mfano, kuhamisha [tokeni za ERC-20](https://eips.ethereum.org/EIPS/eip-20#events) bila tukio la `Transfer`). Kwenye mnyororo wa bloku, kila nodi huthibitisha kila mabadiliko ya hali, ambayo inahakikisha uadilifu. + +- _Upatikanaji_, taarifa inapatikana kwa huluki yoyote iliyoidhinishwa. Kwenye mnyororo wa bloku, hii kwa kawaida hufikiwa kwa kuwa na taarifa inayopatikana kwenye kila [nodi kamili](https://ethereum.org/developers/docs/nodes-and-clients#full-node). + +Suluhisho tofauti hapa zote zina uadilifu bora, kwa sababu hashi zinachapishwa kwenye L1. Hata hivyo, zina dhamana tofauti za upatikanaji. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa na uelewa mzuri wa [misingi ya mnyororo wa bloku](/developers/docs/intro-to-ethereum/). Ukurasa huu pia unadhania msomaji anafahamu [bloku](/developers/docs/blocks/), [miamala](/developers/docs/transactions/), na mada zingine muhimu. + +## Blobu za EIP-4844 {#eip-4844-blobs} + +Kuanzia na [hardfork ya Dencun](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/beacon-chain.md) mnyororo wa bloku wa Ethereum unajumuisha [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844), ambayo inaongeza blobu za data kwenye Ethereum zenye muda mfupi wa kuishi (awali takriban [siku 18](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/p2p-interface.md#configuration)). Blobu hizi huwekewa bei tofauti na [gesi ya utekelezaji](/developers/docs/gas), ingawa kwa kutumia mfumo unaofanana. Ni njia rahisi ya kuchapisha data ya muda. + +Kesi kuu ya matumizi ya blobu za EIP-4844 ni kwa ajili ya unda-mpya kuchapisha miamala yao. [Optimistic rollups](/developers/docs/scaling/optimistic-rollups) zinahitaji kuchapisha miamala kwenye minyororo yao ya bloku. Miamala hiyo inapaswa kupatikana kwa yeyote wakati wa [kipindi cha changamoto](https://docs.optimism.io/connect/resources/glossary#challenge-period) ili kuwezesha [wathibitishaji](https://docs.optimism.io/connect/resources/glossary#validator) kurekebisha kosa ikiwa [mratibu wa mfuatano](https://docs.optimism.io/connect/resources/glossary#sequencer) wa unda-mpya atachapisha mzizi wa hali usio sahihi. + +Hata hivyo, mara tu kipindi cha changamoto kinapopita na mzizi wa hali unapokamilishwa, madhumuni yaliyosalia ya kujua miamala hii ni kuiga hali ya sasa ya mnyororo. Hali hii pia inapatikana kutoka kwa nodi za mnyororo, na uchakataji mdogo sana unahitajika. Kwa hivyo, taarifa za muamala bado zinapaswa kuhifadhiwa katika maeneo machache, kama vile [wachunguzi wa bloku](/developers/docs/data-and-analytics/block-explorers), lakini hakuna haja ya kulipia kiwango cha upinzani wa udhibiti ambacho Ethereum hutoa. + +[Zero-knowledge rollups](/developers/docs/scaling/zk-rollups/#data-availability) pia huchapisha data zao za miamala ili kuwezesha nodi zingine kuiga hali iliyopo na kuthibitisha uthibitisho wa uhalali, lakini tena hilo ni hitaji la muda mfupi. + +Wakati wa kuandika, kuchapisha kwenye EIP-4844 kunagharimu wei moja (10-18 ETH) kwa kila baiti, ambayo ni ndogo sana ikilinganishwa na [gesi 21,000 ya utekelezaji ambayo muamala wowote, ikiwa ni pamoja na unaochapisha blobu, unagharimu](https://eth.blockscout.com/tx/0xf6cfaf0431c73dd1d96369a5e6707d64f463ccf477a4131265397f1d81466929?tab=index). Unaweza kuona bei ya sasa ya EIP-4844 kwenye [blobscan.com](https://blobscan.com/blocks). + +Hizi ni anwani za kuona blobu zilizochapishwa na baadhi ya unda-mpya maarufu. + +| Unda-mpya | Anwani ya sanduku la barua | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | +| [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 inarejelea baiti zinazotumwa kama sehemu ya muamala. Huhifadhiwa kama sehemu ya rekodi ya kudumu ya mnyororo wa bloku katika bloku inayojumuisha muamala huo. + +Hii ndiyo njia ya bei rahisi zaidi ya kuweka data kabisa kwenye mnyororo wa bloku. Gharama kwa kila baiti ni gesi 4 za utekelezaji (ikiwa baiti ni sifuri) au gesi 16 (thamani nyingine yoyote). Ikiwa data imebanwa, ambayo ni utaratibu wa kawaida, basi kila thamani ya baiti ina uwezekano sawa, kwa hivyo gharama ya wastani ni takriban gesi 15.95 kwa kila baiti. + +Wakati wa kuandika, bei ni gwei 12/gesi na 2300 $/ETH, ambayo inamaanisha gharama ni takriban senti 45 kwa kila kilobaiti. Kwa sababu hii ilikuwa njia ya bei rahisi zaidi kabla ya EIP-4844, hii ndiyo njia ambayo unda-mpya zilitumia kuhifadhi taarifa za miamala, ambazo zinahitaji kupatikana kwa [changamoto za hitilafu](https://docs.optimism.io/stack/protocol/overview#fault-proofs), lakini hazihitaji kupatikana moja kwa moja onchain. + +Hizi ni anwani za kuona miamala iliyochapishwa na baadhi ya unda-mpya maarufu. + +| Unda-mpya | Anwani ya sanduku la barua | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | +| [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) | + +## Offchain na mifumo ya L1 {#offchain-with-l1-mechs} + +Kulingana na mabadilishano yako ya usalama, inaweza kukubalika kuweka taarifa mahali pengine na kutumia mfumo unaohakikisha data inapatikana inapohitajika. Kuna mahitaji mawili ili hili lifanye kazi: + +1. Chapisha [hashi](https://en.wikipedia.org/wiki/Cryptographic_hash_function) ya data kwenye mnyororo wa bloku, inayoitwa _ahadi ya ingizo_. Hili linaweza kuwa neno moja la baiti 32, kwa hivyo si ghali. Muda wote ahadi ya ingizo inapopatikana, uadilifu unahakikishwa kwa sababu haiwezekani kupata data nyingine yoyote ambayo ingetoa hashi kwa thamani sawa. Kwa hivyo, ikiwa data isiyo sahihi itatolewa, inaweza kugunduliwa. + +2. Kuwa na mfumo unaohakikisha upatikanaji. Kwa mfano, katika [Redstone](https://redstone.xyz/docs/what-is-redstone) nodi yoyote inaweza kuwasilisha changamoto ya upatikanaji. Ikiwa mratibu wa mfuatano hatajibu onchain kabla ya tarehe ya mwisho, ahadi ya ingizo hutupwa, kwa hivyo taarifa inachukuliwa kuwa haijawahi kuchapishwa. + +Hili linakubalika kwa optimistic rollup kwa sababu tayari tunategemea kuwa na angalau mthibitishaji mmoja mwaminifu kwa mzizi wa hali. Mthibitishaji mwaminifu kama huyo atahakikisha pia ana data ya kuchakata bloku, na atatoa changamoto ya upatikanaji ikiwa taarifa haipatikani offchain. Aina hii ya optimistic rollup inaitwa [njozi](/developers/docs/scaling/plasma/). + +## Msimbo wa mkataba {#contract-code} + +Taarifa ambayo inahitaji kuandikwa mara moja tu, haiandikwi juu tena, na inahitaji kupatikana onchain inaweza kuhifadhiwa kama msimbo wa mkataba. Hii inamaanisha kwamba tunaunda \"mkataba-erevu\" na data na kisha kutumia [`EXTCODECOPY`](https://www.evm.codes/#3c?fork=shanghai) kusoma taarifa. Faida ni kwamba kunakili msimbo ni rahisi kiasi. + +Zaidi ya gharama ya upanuzi wa kumbukumbu, `EXTCODECOPY` hugharimu gesi 2600 kwa ufikiaji wa kwanza wa mkataba (wakati ni \"baridi\") na gesi 100 kwa nakala zinazofuata kutoka kwa mkataba huo huo pamoja na gesi 3 kwa kila neno la baiti 32. Ikilinganishwa na calldata, ambayo hugharimu 15.95 kwa kila baiti, hii ni rahisi kuanzia takriban baiti 200. Kulingana na [fomula ya gharama za upanuzi wa kumbukumbu](https://www.evm.codes/about#memoryexpansion), mradi tu huhitaji zaidi ya MB 4 za kumbukumbu, gharama ya upanuzi wa kumbukumbu ni ndogo kuliko gharama ya kuongeza calldata. + +Bila shaka, hii ni gharama tu ya _kusoma_ data. Kuunda mkataba hugharimu takriban gesi 32,000 + gesi 200/baiti. Njia hii ina manufaa ya kiuchumi tu wakati taarifa ileile inahitaji kusomwa mara nyingi katika miamala tofauti. + +Msimbo wa mkataba unaweza usiwe na maana, mradi tu hauanzi na `0xEF`. Mikataba inayoanza na `0xEF` inatafsiriwa kama [umbizo la kitu cha ethereum](https://notes.ethereum.org/@ipsilon/evm-object-format-overview), ambalo lina mahitaji magumu zaidi. + +## Matukio {#events} + +[Matukio](https://docs.alchemy.com/docs/solidity-events) hutolewa na mikataba-erevu, na kusomwa na programu ya offchain. +Faida yao ni kwamba msimbo wa offchain unaweza kusikiliza matukio. Gharama ni [gesi](https://www.evm.codes/#a0?fork=cancun), 375 pamoja na gesi 8 kwa kila baiti ya data. Kwa gwei 12/gesi na 2300 $/ETH, hii inatafsiriwa kuwa senti moja pamoja na senti 22 kwa kila kilobaiti. + +## Ghala {#storage} + +Mikataba-erevu ina ufikiaji wa [ghala la kudumu](https://docs.alchemy.com/docs/smart-contract-storage-layout#what-is-storage-memory). Hata hivyo, ni ghali sana. Kuandika neno la baiti 32 kwenye nafasi ya ghala iliyokuwa tupu hapo awali kunaweza [kugharimu gesi 22,100](https://www.evm.codes/#55?fork=cancun). Kwa gwei 12/gesi na 2300 $/ETH, hii ni takriban senti 61 kwa kila operesheni ya uandishi, au $19.5 kwa kila kilobaiti. + +Hii ndiyo aina ya ghala la gharama kubwa zaidi katika Ethereum. + +## Muhtasari {#summary} + +Jedwali hili linafupisha chaguzi tofauti, faida na hasara zake. + +| Aina ya ghala | Chanzo cha data | Dhamana ya upatikanaji | Upatikanaji wa onchain | Vizuizi vya ziada | +| ------------------------ | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------- | +| Blobu za EIP-4844 | Offchain | Dhamana ya Ethereum kwa [~siku 18](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/p2p-interface.md#configuration) | Hashi pekee ndiyo inapatikana | | +| Calldata | Offchain | Dhamana ya Ethereum milele (sehemu ya mnyororo wa bloku) | Inapatikana tu ikiwa imeandikwa kwa mkataba, na katika muamala huo | | +| Offchain na mifumo ya L1 | Offchain | Dhamana ya \"Mthibitishaji mmoja mwaminifu\" wakati wa kipindi cha changamoto | Hashi pekee | Inahakikishwa na mfumo wa changamoto, tu wakati wa kipindi cha changamoto | +| Msimbo wa mkataba | Onchain au offchain | Dhamana ya Ethereum milele (sehemu ya mnyororo wa bloku) | Ndiyo | Imeandikwa kwa anwani \"ya nasibu\", haiwezi kuanza na `0xEF` | +| Matukio | Onchain | Dhamana ya Ethereum milele (sehemu ya mnyororo wa bloku) | Hapana | | +| Ghala | Onchain | Dhamana ya Ethereum milele (sehemu ya mnyororo wa bloku na hali ya sasa hadi iandikwe juu) | Ndiyo | | diff --git a/public/content/translations/sw/developers/docs/data-availability/index.md b/public/content/translations/sw/developers/docs/data-availability/index.md new file mode 100644 index 00000000000..4aeda452025 --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-availability/index.md @@ -0,0 +1,84 @@ +--- +title: Uwepo wa data +description: Muhtasari wa matatizo na suluhu zinazohusiana na upatikanaji wa data katika Ethereum +lang: sw +--- + +"Usiamini, thibitisha" ni kauli mbiu ya kawaida katika Ethereum. Wazo ni kwamba nodi yako inaweza kuthibitisha kwa kujitegemea kuwa taarifa inayopokea ni sahihi kwa kutekeleza miamala yote katika bloku inazopokea kutoka kwa rika ili kuhakikisha kuwa mabadiliko yaliyopendekezwa yanalingana hasa na yale yaliyokokotolewa kwa kujitegemea na nodi. Hii inamaanisha nodi hazilazimiki kuamini kwamba watumaji wa bloku ni waaminifu. Hii haiwezekani ikiwa data haipo. + +**Upatikanaji wa data** unarejelea ujasiri ambao mtumiaji anaweza kuwa nao kwamba data inayohitajika kuthibitisha bloku inapatikana kweli kwa washiriki wote wa mtandao. Kwa nodi kamili kwenye safu ya 1 ya Ethereum hii ni rahisi kiasi; nodi kamili hupakua nakala ya data zote katika kila bloku - data _lazima_ iwepo ili upakuaji uwezekane. Bloku yenye data isiyokamilika itatupwa badala ya kuongezwa kwenye mnyororo wa bloku. Huu ni "upatikanaji wa data kwenye mnyororo" na ni hulka ya minyororo ya bloku ya monolithic. Nodi kamili haziwezi kudanganywa kukubali miamala batili kwa sababu zinapakua na kutekeleza kila muamala zenyewe. Hata hivyo, kwa minyororo ya bloku ya modula, unda-mpya za safu ya 2 na wateja wepesi, mandhari ya upatikanaji wa data ni changamano zaidi, inayohitaji taratibu za uthibitishaji za kisasa zaidi. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa na uelewa mzuri wa [misingi ya mnyororo wa bloku](/developers/docs/intro-to-ethereum/), hasa [taratibu za makubaliano](/developers/docs/consensus-mechanisms/). Ukurasa huu pia unachukulia kuwa msomaji anafahamu [bloku](/developers/docs/blocks/), [miamala](/developers/docs/transactions/), [nodi](/developers/docs/nodes-and-clients/), [suluhisho za uongezwaji](/developers/docs/scaling/), na mada nyingine muhimu. + +## Tatizo la upatikanaji wa data {#the-data-availability-problem} + +Tatizo la upatikanaji wa data ni hitaji la kuthibitisha kwa mtandao mzima kuwa muhtasari wa data fulani ya muamala unaoongezwa kwenye mnyororo wa bloku unawakilisha kweli seti ya miamala halali, lakini kufanya hivyo bila kuhitaji nodi zote kupakua data zote. Data kamili ya muamala ni muhimu kwa ajili ya kuthibitisha bloku kwa kujitegemea, lakini kuhitaji nodi zote kupakua data yote ya muamala ni kizuizi kwa uongezwaji. Suluhisho za tatizo la upatikanaji wa data zinalenga kutoa uhakikisho wa kutosha kwamba data kamili ya muamala ilipatikana kwa ajili ya uthibitishaji kwa washiriki wa mtandao ambao hawapakui na kuhifadhi data wenyewe. + +[Nodi nyepesi](/developers/docs/nodes-and-clients/light-clients) na [unda-mpya za safu ya 2](/developers/docs/scaling) ni mifano muhimu ya washiriki wa mtandao wanaohitaji uhakikisho thabiti wa upatikanaji wa data lakini hawawezi kupakua na kuchakata data ya muamala wao wenyewe. Kuepuka kupakua data ya muamala ndiko kunakofanya nodi nyepesi ziwe nyepesi na kuwezesha unda-mpya kuwa suluhisho bora za uongezwaji. + +Upatikanaji wa data pia ni jambo la muhimu sana kwa wateja wa Ethereum wa siku zijazo ["wasiokuwa na hali"](/roadmap/statelessness) ambao hawahitaji kupakua na kuhifadhi data ya hali ili kuthibitisha bloku. Wateja wasiokuwa na hali bado wanahitaji kuwa na uhakika kwamba data inapatikana _mahali fulani_ na kwamba imechakatwa ipasavyo. + +## Suluhisho za upatikanaji wa data {#data-availability-solutions} + +### Sampuli ya upatikanaji wa data (DAS) {#data-availability-sampling} + +Sampuli ya Upatikanaji wa Data (DAS) ni njia ya mtandao kuangalia kama data inapatikana bila kuweka mkazo mwingi kwenye nodi yoyote binafsi. Kila nodi (ikiwa ni pamoja na nodi zisizohusisha hisa) hupakua sehemu ndogo, iliyochaguliwa kwa nasibu ya jumla ya data. Kufanikiwa kupakua sampuli kunathibitisha kwa ujasiri mkubwa kwamba data yote inapatikana. Hii inategemea uwekaji msimbo wa kufuta data, ambao huongeza seti fulani ya data na taarifa za ziada (njia hii inafanywa ni kwa kutoshea kazi inayojulikana kama _polynomial_ juu ya data na kutathmini polynomial hiyo katika nukta za ziada). Hii inaruhusu data asili kurejeshwa kutoka kwa data ya ziada inapohitajika. Matokeo ya uundaji huu wa data ni kwamba ikiwa _yoyote_ ya data asili haipatikani, _nusu_ ya data iliyopanuliwa itakosekana! Kiasi cha sampuli za data zilizopakuliwa na kila nodi kinaweza kurekebishwa ili iwe _uwezekano mkubwa sana_ kwamba angalau moja ya vipande vya data vilivyosampuliwa na kila mteja vitakosekana _ikiwa_ chini ya nusu ya data inapatikana kweli. + +DAS itatumika kuhakikisha waendeshaji wa unda-mpya wanafanya data zao za miamala zipatikane baada ya [Full Danksharding](/roadmap/danksharding/#what-is-danksharding) kutekelezwa. Nodi za Ethereum zitatwaa sampuli nasibu za data ya muamala iliyotolewa katika blops kwa kutumia mpango wa upungufu ulioelezwa hapo juu ili kuhakikisha kuwa data yote ipo. Mbinu hiyo hiyo inaweza pia kutumika kuhakikisha wazalishaji wa bloku wanafanya data zao zote zipatikane kwa wateja wepesi salama. Vile vile, chini ya [utenganishaji wa mpendekezaji-mjengaji](/roadmap/pbs), ni mjengaji wa bloku tu ndiye angehitajika kuchakata bloku nzima - wathibitishaji wengine wangethibitisha kwa kutumia sampuli ya upatikanaji wa data. + +### Kamati za upatikanaji wa data {#data-availability-committees} + +Kamati za Upatikanaji wa Data (DACs) ni pande zinazoaminika ambazo hutoa, au kuthibitisha, upatikanaji wa data. DAC zinaweza kutumika badala ya, [au kwa pamoja na](https://hackmd.io/@vbuterin/sharding_proposal#Why-not-use-just-committees-and-not-DAS) DAS. Dhamana za usalama zinazokuja na kamati hutegemea usanidi mahususi. Ethereum hutumia seti ndogo za sampuli nasibu za wathibitishaji ili kuthibitisha upatikanaji wa data kwa nodi nyepesi, kwa mfano. + +DACs pia hutumiwa na baadhi ya validiums. DAC ni seti inayoaminika ya nodi zinazohifadhi nakala za data nje ya mtandao. DAC inatakiwa kufanya data ipatikane endapo kutatokea mzozo. Wanachama wa DAC pia huchapisha uthibitishaji kwenye mnyororo ili kuthibitisha kwamba data iliyosemwa inapatikana kweli. Baadhi ya validiums hubadilisha DACs na mfumo wa mthibitishaji wa uthibitisho wa hisa (PoS). Hapa, mtu yeyote anaweza kuwa mthibitishaji na kuhifadhi data nje ya mnyororo. Hata hivyo, lazima watoe "dhamana", ambayo huwekwa katika mkataba-erevu. Katika tukio la tabia hasidi, kama vile mthibitishaji kuzuia data, dhamana inaweza kupunguzwa. Kamati za upatikanaji wa data za uthibitisho wa hisa ni salama zaidi kuliko DACs za kawaida kwa sababu zinahamasisha moja kwa moja tabia ya uaminifu. + +## Upatikanaji wa data na nodi nyepesi {#data-availability-and-light-nodes} + +[Nodi nyepesi](/developers/docs/nodes-and-clients/light-clients) zinahitaji kuthibitisha usahihi wa vichwa vya bloku wanazopokea bila kupakua data ya bloku. Gharama ya wepesi huu ni kutokuwa na uwezo wa kuthibitisha vichwa vya bloku kwa kujitegemea kwa kutekeleza tena miamala ndani ya nchi kama vile nodi kamili zinavyofanya. + +Nodi nyepesi za Ethereum huamini seti nasibu za wathibitishaji 512 ambao wamepewa _kamati ya usawazishaji_. Kamati ya usawazishaji hufanya kama DAC inayoashiria kwa wateja wepesi kwamba data iliyo kwenye kichwa ni sahihi kwa kutumia saini ya kriptografia. Kila siku, kamati ya usawazishaji hujiburudisha. Kila kichwa cha bloku huwaonya nodi nyepesi kuhusu wathibitishaji gani wa kutarajia kutia sahihi bloku _inayofuata_, kwa hivyo hawawezi kudanganywa na kuamini kundi hasidi linalojifanya kuwa kamati halisi ya usawazishaji. + +Hata hivyo, nini kitatokea ikiwa mshambuliaji kwa namna fulani _atafaulu_ kupitisha kichwa cha bloku hasidi kwa wateja wepesi na kuwashawishi kwamba kilitiwa saini na kamati ya usawazishaji ya uaminifu? Katika hali hiyo, mshambuliaji anaweza kujumuisha miamala batili na mteja mwepesi angewakubali bila kuangalia, kwani hawaangalii kwa kujitegemea mabadiliko yote ya hali yaliyofupishwa katika kichwa cha bloku. Ili kujilinda dhidi ya hili, mteja mwepesi anaweza kutumia ushahidi wa ulaghai. + +Jinsi ushahidi huu wa ulaghai unavyofanya kazi ni kwamba nodi kamili, ikiona mabadiliko batili ya hali yakienezwa kwenye mtandao, inaweza kutoa haraka kipande kidogo cha data kinachoonyesha kwamba mpito wa hali uliopendekezwa hauwezi kutokana na seti fulani ya miamala na kutangaza data hiyo kwa rika. Nodi nyepesi zinaweza kuchukua ushahidi huo wa ulaghai na kuutumia kutupa vichwa vibaya vya bloku, na kuhakikisha zinabaki kwenye mnyororo uleule wa uaminifu kama nodi kamili. + +Hii inategemea nodi kamili kuwa na ufikiaji wa data kamili ya muamala. Mshambuliaji anayetangaza kichwa kibaya cha bloku na pia akashindwa kufanya data ya muamala ipatikane ataweza kuzuia nodi kamili kutoa ushahidi wa ulaghai. Nodi kamili zinaweza kuashiria onyo kuhusu bloku mbaya, lakini hazikuweza kuunga mkono onyo lao kwa ushahidi, kwa sababu data haikupatikana ili kutoa ushahidi kutoka kwayo! + +Suluhisho la tatizo hili la upatikanaji wa data ni DAS. Nodi nyepesi hupakua vipande vidogo sana vya nasibu vya data kamili ya hali na hutumia sampuli kuthibitisha kwamba seti kamili ya data inapatikana. Uwezekano halisi wa kudhania kimakosa upatikanaji kamili wa data baada ya kupakua vipande N vya nasibu unaweza kukokotolewa ([kwa vipande 100 nafasi ni 10^-30](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html), yaani, haiwezekani sana). + +Hata katika hali hii, mashambulizi yanayozuia baiti chache tu yanaweza yasigunduliwe na wateja wanaofanya maombi ya data nasibu. Uwekaji msimbo wa kufuta hurekebisha hili kwa kuunda upya vipande vidogo vya data vilivyokosekana ambavyo vinaweza kutumika kuangalia mabadiliko ya hali yaliyopendekezwa. Ushahidi wa ulaghai unaweza kisha kujengwa kwa kutumia data iliyojengwa upya, na kuzuia nodi nyepesi kukubali vichwa vibaya. + +**Kumbuka:** DAS na ushahidi wa ulaghai bado hazijatekelezwa kwa wateja wepesi wa Ethereum wa uthibitisho wa hisa, lakini ziko kwenye ramani ya njia, na kuna uwezekano mkubwa zitakuwa katika mfumo wa ithibati za ZK-SNARK. Wateja wepesi wa leo wanategemea aina ya DAC: wanathibitisha utambulisho wa kamati ya usawazishaji na kisha kuamini vichwa vya bloku vilivyotiwa saini wanavyopokea. + +## Upatikanaji wa data na unda-mpya za safu ya 2 {#data-availability-and-layer-2-rollups} + +[Suluhisho za uongezwaji wa safu ya 2](/layer-2/), kama vile [unda-mpya](/glossary/#rollups), hupunguza gharama za muamala na kuongeza upitishaji wa Ethereum kwa kuchakata miamala nje ya mnyororo. Miamala ya unda-mpya hubanwa na kuwekwa kwenye Ethereum kwa makundi. Makundi huwakilisha maelfu ya miamala ya mtu binafsi ya nje ya mnyororo katika muamala mmoja kwenye Ethereum. Hii inapunguza msongamano kwenye safu ya msingi na kupunguza ada kwa watumiaji. + +Hata hivyo, inawezekana tu kuamini miamala ya 'muhtasari' iliyotumwa kwa Ethereum ikiwa mabadiliko ya hali yaliyopendekezwa yanaweza kuthibitishwa kwa kujitegemea na kuthibitishwa kuwa ni matokeo ya kutumia miamala yote ya mtu binafsi ya nje ya mnyororo. Ikiwa waendeshaji wa unda-mpya hawatoi data ya muamala kwa uthibitisho huu, basi wanaweza kutuma data isiyo sahihi kwa Ethereum. + +[Optimistic rollups](/developers/docs/scaling/optimistic-rollups/) huweka data ya muamala iliyobanwa kwenye Ethereum na kusubiri kwa kiasi fulani cha muda (kawaida siku 7) ili kuruhusu wathibitishaji huru kuangalia data. Ikiwa mtu yeyote atatambua tatizo, anaweza kutoa ushahidi wa ulaghai na kuutumia kupinga unda-mpya. Hii ingesababisha mnyororo kurejea nyuma na kuacha bloku batili. Hii inawezekana tu ikiwa data inapatikana. Hivi sasa, kuna njia mbili ambazo optimistic rollups huweka data ya muamala kwa L1. Baadhi ya unda-mpya hufanya data ipatikane kabisa kama `CALLDATA` ambayo huishi kabisa kwenye mnyororo. Kwa utekelezaji wa EIP-4844, baadhi ya unda-mpya huweka data zao za muamala kwenye ghala la blob la bei nafuu badala yake. Hili si ghala la kudumu. Wathibitishaji huru wanapaswa kuuliza blob na kuwasilisha changamoto zao ndani ya ~siku 18 kabla data haijafutwa kutoka kwa safu-1 ya Ethereum. Upatikanaji wa data umehakikishwa tu na itifaki ya Ethereum kwa dirisha hilo fupi lililowekwa. Baada ya hapo, inakuwa jukumu la vyombo vingine katika mfumo ikolojia wa Ethereum. Nodi yoyote inaweza kuthibitisha upatikanaji wa data kwa kutumia DAS, yaani, kwa kupakua sampuli ndogo, za nasibu za data ya blob. + +[Unda-mpya za Zero-knowledge (ZK)](/developers/docs/scaling/zk-rollups) hazihitaji kuweka data ya muamala kwani [uthibitisho wa uhalali wa zero-knowledge](/glossary/#zk-proof) huhakikisha usahihi wa mabadiliko ya hali. Hata hivyo, upatikanaji wa data bado ni suala kwa sababu hatuwezi kuhakikisha utendaji wa unda-mpya ya ZK (au kuingiliana nayo) bila kupata data yake ya hali. Kwa mfano, watumiaji hawawezi kujua salio lao ikiwa mwendeshaji atazuia maelezo kuhusu hali ya unda-mpya. Pia, hawawezi kufanya masasisho ya hali kwa kutumia taarifa zilizomo kwenye bloku mpya iliyoongezwa. + +## Upatikanaji wa data dhidi ya urejeshaji wa data {#data-availability-vs-data-retrievability} + +Upatikanaji wa data ni tofauti na urejeshaji wa data. Upatikanaji wa data ni uhakikisho kwamba nodi kamili zimeweza kufikia na kuthibitisha seti kamili ya miamala inayohusishwa na bloku maalum. Haimaanishi kwamba data itapatikana milele. + +Urejeshaji wa data ni uwezo wa nodi kurejesha _taarifa za kihistoria_ kutoka kwenye mnyororo wa bloku. Data hii ya kihistoria haihitajiki kwa ajili ya kuthibitisha bloku mpya, inahitajika tu kwa ajili ya kusawazisha nodi kamili kutoka kwenye bloku ya jenesisi au kutoa maombi maalum ya kihistoria. + +Itifaki ya msingi ya Ethereum inahusika hasa na upatikanaji wa data, sio urejeshaji wa data. Urejeshaji wa data unaweza kutolewa na idadi ndogo ya nodi za kumbukumbu zinazoendeshwa na wahusika wengine, au unaweza kusambazwa kwenye mtandao kwa kutumia hifadhi ya faili iliyogatuliwa kama vile [Mtandao wa Portal](https://www.ethportal.net/). + +## Masomo zaidi {#further-reading} + +- [Upatikanaji wa Data ni Nini Hasa?](https://medium.com/blockchain-capital-blog/wtf-is-data-availability-80c2c95ded0f) +- [Upatikanaji wa Data ni Nini?](https://coinmarketcap.com/academy/article/what-is-data-availability) +- [Utangulizi wa ukaguzi wa upatikanaji wa data](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html) +- [Maelezo ya pendekezo la ugawanyaji + DAS](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling) +- [Dokezo juu ya upatikanaji wa data na uwekaji msimbo wa kufuta](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) +- [Kamati za upatikanaji wa data.](https://medium.com/starkware/data-availability-e5564c416424) +- [Kamati za upatikanaji wa data za uthibitisho wa hisa.](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [Suluhisho za tatizo la urejeshaji wa data](https://notes.ethereum.org/@vbuterin/data_sharding_roadmap#Who-would-store-historical-data-under-sharding) +- [Upatikanaji wa Data au: Jinsi Unda-mpya zilivyojifunza Kuacha Kuhangaika na Kuipenda Ethereum](https://web.archive.org/web/20250515194659/https://web.archive.org/web/20241108192208/https://research.2077.xyz/data-availability-or-how-rollups-learned-to-stop-worrying-and-love-ethereum) +- [EIP-7623: Kuongeza Gharama ya Calldata](https://web.archive.org/web/20250515194659/https://research.2077.xyz/eip-7623-increase-calldata-cost) diff --git a/public/content/translations/sw/developers/docs/data-structures-and-encoding/index.md b/public/content/translations/sw/developers/docs/data-structures-and-encoding/index.md new file mode 100644 index 00000000000..c740234b14d --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-structures-and-encoding/index.md @@ -0,0 +1,32 @@ +--- +title: Muundo wa data na usimbuaji +description: Muhtasari wa miundo ya msingi ya data ya Ethereum. +lang: sw +sidebarDepth: 2 +--- + +Ethereum hutengeneza, huhifadhi na huhamisha idadi kubwa ya data. Data hii lazima iumbizwe kwa njia sanifu na zenye ufanisi wa kumbukumbu ili kumruhusu yeyote [kuendesha nodi](/run-a-node/) kwenye maunzi ya kiwango cha watumiaji ya kawaida. Ili kufanikisha hili, miundo kadhaa maalum ya data hutumika kwenye mkusanyiko wa Ethereum. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuelewa misingi ya Ethereum na [programu za wateja](/developers/docs/nodes-and-clients/). Ufahamu wa safu ya mtandao na [Karatasi nyeeupe ya Ethereum](/whitepaper/) unapendekezwa. + +## Miundo ya data {#data-structures} + +### Patricia merkle tries {#patricia-merkle-tries} + +Patricia Merkle Tries ni miundo ambayo huweka msimbo jozi za thamani muhimu katika trie iliyothibitishwa kwa njia fiche na ya uhakika. Hizi hutumiwa sana katika safu ya utekelezaji ya Ethereum. + +[Zaidi kuhusu Patricia Merkle Tries](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) + +### Kiambishi awali cha urefu kinachojirudia {#recursive-length-prefix} + +Kiambishi awali cha urefu kinachojirudia (RLP) ni mbinu ya uratibishaji inayotumika sana katika safu ya utekelezaji ya Ethereum. + +[Zaidi kuhusu RLP](/developers/docs/data-structures-and-encoding/rlp) + +### Uratibishaji Rahisi {#simple-serialize} + +Uratibishaji Rahisi (SSZ) ndiyo muundo mkuu wa uratibishaji kwenye safu ya makubaliano ya Ethereum kwa sababu ya uoanifu wake na uwekaji wa merkle. + +[Zaidi kuhusu SSZ](/developers/docs/data-structures-and-encoding/ssz) diff --git a/public/content/translations/sw/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/sw/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md new file mode 100644 index 00000000000..554fc2557f4 --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -0,0 +1,266 @@ +--- +title: Merkle Patricia Trie +description: Utangulizi wa Merkle Patricia Trie. +lang: sw +sidebarDepth: 2 +--- + +Hali ya Ethereum (jumla ya akaunti zote, salio, na mikataba-erevu), imesimbwa katika toleo maalum la muundo wa data unaojulikana kwa ujumla katika sayansi ya kompyuta kama Mti wa Merkle. Muundo huu ni muhimu kwa matumizi mengi katika kriptografia kwa sababu huunda uhusiano unaoweza kuthibitishwa kati ya vipande vyote vya data vilivyofungamanishwa kwenye mti, na kusababisha thamani moja ya **mzizi** ambayo inaweza kutumika kuthibitisha mambo kuhusu data. + +Muundo wa data wa Ethereum ni 'Merkle-Patricia Trie iliyobadilishwa', iliyopewa jina hilo kwa sababu inakopa baadhi ya vipengele vya PATRICIA (Kanuni Vitendo ya Kupata Taarifa Zilizosimbwa katika Alfanumeriki), na kwa sababu imeundwa kwa ajili ya upatikanaji wa data wenye ufanisi wa vipengee vinavyounda hali ya Ethereum. + +Merkle-Patricia trie ni bainifu na inaweza kuthibitishwa kikriptografia: Njia pekee ya kuzalisha mzizi wa hali ni kwa kuikokotoa kutoka kwa kila kipande cha hali, na hali mbili zinazofanana zinaweza kuthibitishwa kwa urahisi kwa kulinganisha hashi ya mzizi na hashi zilizoielekeza (_uthibitisho wa Merkle_). Kinyume chake, hakuna njia ya kuunda hali mbili tofauti zenye hashi ya mzizi sawa, na jaribio lolote la kurekebisha hali kwa thamani tofauti litasababisha hashi tofauti ya mzizi wa hali. Kinadharia, muundo huu unatoa 'grail takatifu' ya ufanisi wa `O(log(n))` kwa uwekaji, utafutaji na ufutaji. + +Katika siku za usoni, Ethereum inapanga kuhamia kwenye muundo wa [Mti wa Verkle](/roadmap/verkle-trees), ambao utafungua uwezekano mwingi mpya kwa maboresho ya itifaki ya baadaye. + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri, itasaidia kuwa na maarifa ya msingi ya [hashi](https://en.wikipedia.org/wiki/Hash_function), [Miti ya Merkle](https://en.wikipedia.org/wiki/Merkle_tree), [tries](https://en.wikipedia.org/wiki/Trie) na [ufuatishaji](https://en.wikipedia.org/wiki/Serialization). Makala hii inaanza na maelezo ya msingi ya [mti wa radix](https://en.wikipedia.org/wiki/Radix_tree), kisha polepole inaleta marekebisho muhimu kwa muundo wa data ulioboreshwa zaidi wa Ethereum. + +## Tries za msingi za radix {#basic-radix-tries} + +Katika trie ya msingi ya radix, kila nodi inaonekana kama ifuatavyo: + +``` + [i_0, i_1 ... i_n, value] +``` + +Ambapo `i_0 ...` `i_n` zinawakilisha alama za alfabeti (mara nyingi za kibinadamu au heksi), `thamani` ni thamani ya mwisho kwenye nodi, na thamani katika `i_0, i_1 ...` yanayopangwa ya `i_n` ni ama `NULL` au viashiria kwa (katika kesi yetu, hashi za) nodi zingine. Hii huunda hifadhi ya msingi ya `(ufunguo, thamani)`. + +Sema ungetaka kutumia muundo wa data wa mti wa radix kuhifadhi mpangilio juu ya seti ya jozi za ufunguo na thamani. Ili kupata thamani iliyopangwa kwa sasa kwa ufunguo `dog` katika trie, ungeanza kwa kubadilisha `dog` kuwa herufi za alfabeti (kutoa `64 6f 67`), na kisha kushuka chini ya trie ukifuata njia hiyo hadi upate thamani. Hiyo ni, unaanza kwa kutafuta hashi ya mzizi katika DB ya ufunguo/thamani tambarare ili kupata nodi ya mzizi wa trie. Inawakilishwa kama safu ya funguo zinazoelekeza kwa nodi zingine. Ungetumia thamani kwenye faharisi `6` kama ufunguo na uitafute katika DB ya ufunguo/thamani tambarare ili kupata nodi ngazi moja chini. Kisha chagua faharisi `4` kutafuta thamani inayofuata, kisha chagua faharisi `6`, na kadhalika, hadi, mara tu ulipofuata njia: `mzizi -> 6 -> 4 -> 6 -> 15 -> 6 -> 7`, ungetafuta thamani ya nodi na kurudisha matokeo. + +Kuna tofauti kati ya kutafuta kitu katika 'trie' na DB ya ufunguo/thamani 'DB' ya msingi. Zote mbili zinafafanua mipangilio ya ufunguo/thamani, lakini DB ya msingi inaweza kufanya utafutaji wa hatua 1 wa jadi wa ufunguo. Kutafuta ufunguo katika trie kunahitaji utafutaji mwingi wa DB ya msingi ili kufikia thamani ya mwisho iliyoelezwa hapo juu. Wacha turejelee ya mwisho kama `njia` ili kuondoa utata. + +Shughuli za sasisho na ufutaji kwa tries za radix zinaweza kufafanuliwa kama ifuatavyo: + +```python + def update(node_hash, path, value): + curnode = db.get(node_hash) if node_hash 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_hash, path): + if node_hash is NULL: + return NULL + else: + curnode = db.get(node_hash) + 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) +``` + +Mti wa Radix wa "Merkle" hujengwa kwa kuunganisha nodi kwa kutumia muhtasari wa hashi za kikriptografia zinazozalishwa kwa njia bainifu. Utambulisho huu wa maudhui (katika DB ya ufunguo/thamani `ufunguo == keccak256(rlp(thamani))`) unatoa dhamana ya uadilifu wa kikriptografia wa data iliyohifadhiwa. Ikiwa hashi ya mzizi wa trie fulani inajulikana hadharani, basi mtu yeyote aliye na ufikiaji wa data ya majani ya msingi anaweza kutengeneza uthibitisho kwamba trie inajumuisha thamani fulani kwenye njia maalum kwa kutoa hashi za kila nodi inayounganisha thamani maalum kwenye mzizi wa mti. + +Haiwezekani kwa mshambuliaji kutoa uthibitisho wa jozi ya `(njia, thamani)` ambayo haipo kwani hashi ya mzizi hatimaye inategemea hashi zote zilizo chini yake. Marekebisho yoyote ya msingi yangebadilisha hashi ya mzizi. Unaweza kufikiria hashi kama uwakilishi ulioshinikizwa wa habari za kimuundo kuhusu data, iliyolindwa na ulinzi wa kabla ya picha wa kazi ya kuhasi. + +Tutarejelea kitengo cha atomiki cha mti wa radix (k.m., herufi moja ya heksi, au nambari ya kibinadamu ya biti 4) kama "nibble". Wakati wa kupitia njia nibble moja kwa wakati, kama ilivyoelezwa hapo juu, nodi zinaweza kurejelea watoto 16 kwa kiwango cha juu lakini zinajumuisha kipengele cha `thamani`. Kwa hivyo, tunaziwakilisha kama safu ya urefu 17. Tunaziita safu hizi za vipengele 17 "nodi za tawi". + +## Merkle Patricia Trie {#merkle-patricia-trees} + +Tries za Radix zina kizuizi kimoja kikuu: hazina ufanisi. Ikiwa unataka kuhifadhi kifungo kimoja cha `(njia, thamani)` ambapo njia, kama ilivyo katika Ethereum, ina urefu wa herufi 64 (idadi ya nibbles katika `bytes32`), tutahitaji zaidi ya kilobaiti ya nafasi ya ziada kuhifadhi ngazi moja kwa kila herufi, na kila utafutaji au ufutaji utachukua hatua zote 64. Trie ya Patricia iliyoletwa katika yafuatayo inatatua suala hili. + +### Uboreshaji {#optimization} + +Nodi katika Merkle Patricia trie ni mojawapo ya yafuatayo: + +1. `NULL` (inayowakilishwa kama kamba tupu) +2. `tawi` Nodi ya vipengee 17 `[ v0 ...` `v15, vt ]` +3. `jani` Nodi ya vipengee 2 `[ njiaIliyosimbwa, thamani ]` +4. `kiendelezi` Nodi ya vipengee 2 `[ njiaIliyosimbwa, ufunguo ]` + +Kwa njia za herufi 64 haiwezi kuepukika kwamba baada ya kupitia safu chache za kwanza za trie, utafikia nodi ambapo hakuna njia inayotofautiana kwa angalau sehemu ya njia ya kushuka. Ili kuepuka kulazimika kuunda hadi nodi 15 za `NULL` zenye nafasi njiani, tunafupisha mteremko kwa kuanzisha nodi ya `kiendelezi` ya fomu `[ njiaIliyosimbwa, ufunguo ]`, ambapo `njiaIliyosimbwa` ina "njia sehemu" ya kuruka mbele (kwa kutumia usimbaji fupi ulioelezwa hapa chini), na `ufunguo` ni kwa ajili ya utafutaji unaofuata wa DB. + +Kwa nodi ya `jani`, ambayo inaweza kuwekwa alama na bendera katika nibble ya kwanza ya `njiaIliyosimbwa`, njia inasimba vipande vyote vya njia za nodi za awali na tunaweza kutafuta `thamani` moja kwa moja. + +Uboreshaji huu hapo juu, hata hivyo, unaleta utata. + +Wakati wa kupitia njia katika nibbles, tunaweza kuishia na idadi isiyo ya kawaida ya nibbles za kupitia, lakini kwa sababu data yote imehifadhiwa katika umbizo la `baiti`. Haiwezekani kutofautisha kati ya, kwa mfano, nibble `1`, na nibbles `01` (zote mbili lazima zihifadhiwe kama `<01>`). Ili kubainisha urefu usio wa kawaida, njia sehemu inatangulizwa na bendera. + +### Maelezo: Usimbaji fupi wa mfuatano wa heksi na kituo cha hiari {#specification} + +Uwekaji alama wa _urefu wa njia sehemu uliobaki usio wa kawaida dhidi ya wa kawaida_ na _nodi ya jani dhidi ya nodi ya kiendelezi_ kama ilivyoelezwa hapo juu unapatikana katika nibble ya kwanza ya njia sehemu ya nodi yoyote ya vipengee 2. Zinaleta yafuatayo: + +| herufi ya heksi | biti | sehemu ya aina ya nodi | urefu wa njia | +| --------------- | ---- | ----------------------------------- | ---------------- | +| 0 | 0000 | kiendelezi | hata | +| 1 | 0001 | kiendelezi | isiyo ya kawaida | +| 2 | 0010 | inayokoma (jani) | hata | +| 3 | 0011 | inayokoma (jani) | isiyo ya kawaida | + +Kwa urefu wa njia uliobaki hata (`0` au `2`), nibble nyingine ya `0` ya "kujazia" itafuata daima. + +```python + 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 +``` + +Mifano: + +```python + > [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' +``` + +Hapa kuna msimbo uliopanuliwa wa kupata nodi katika Merkle Patricia trie: + +```python + def get_helper(node_hash, path): + if path == []: + return node_hash + if node_hash == "": + return "" + curnode = rlp.decode(node_hash if len(node_hash) < 32 else db.get(node_hash)) + 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_hash, 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_hash, path2) +``` + +### Mfano wa Trie {#example-trie} + +Tuseme tunataka trie iliyo na jozi nne za njia/thamani `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. + +Kwanza, tunabadilisha njia na thamani zote kuwa `baiti`. Hapa chini, uwakilishi halisi wa baiti kwa _njia_ umeonyeshwa na `<>`, ingawa _thamani_ bado zinaonyeshwa kama kamba, zilizoonyeshwa na `''`, kwa ufahamu rahisi (nazo, pia, zingekuwa `baiti`): + +``` + <64 6f> : 'verb' + <64 6f 67> : 'puppy' + <64 6f 67 65> : 'coins' + <68 6f 72 73 65> : 'stallion' +``` + +Sasa, tunajenga trie kama hiyo na jozi zifuatazo za ufunguo/thamani katika DB ya msingi: + +``` + rootHash: [ <16>, hashA ] + hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ] +``` + +Wakati nodi moja inarejelewa ndani ya nodi nyingine, kinachojumuishwa ni `keccak256(rlp.encode(node))`, ikiwa `len(rlp.encode(node)) >= 32` vinginevyo `nodi` ambapo `rlp.encode` ni kazi ya usimbaji ya [RLP](/developers/docs/data-structures-and-encoding/rlp). + +Kumbuka kwamba wakati wa kusasisha trie, mtu anahitaji kuhifadhi jozi ya ufunguo/thamani `(keccak256(x), x)` katika jedwali la utafutaji la kudumu _ikiwa_ nodi mpya iliyoundwa ina urefu >= 32. Hata hivyo, ikiwa nodi ni fupi kuliko hiyo, mtu hahitaji kuhifadhi chochote, kwani kazi f(x) = x inaweza kugeuzwa. + +## Tries katika Ethereum {#tries-in-ethereum} + +Tries zote za merkle katika safu ya utekelezaji ya Ethereum hutumia Merkle Patricia Trie. + +Kutoka kwa kichwa cha bloku kuna mizizi 3 kutoka kwa tries 3 hizi. + +1. stateRoot +2. transactionsRoot +3. receiptsRoot + +### Trie ya Hali {#state-trie} + +Kuna trie moja ya hali ya kimataifa, na inasasishwa kila wakati mteja anapochakata bloku. Ndani yake, `njia` daima ni: `keccak256(ethereumAddress)` na `thamani` daima ni: `rlp(ethereumAccount)`. Kwa usahihi zaidi `akaunti` ya Ethereum ni safu ya vitu 4 ya `[nonce,salio,mziziGhala,codeHash]`. Kwa wakati huu, inafaa kuzingatia kwamba `mziziGhala` hii ni mzizi wa trie nyingine ya patricia: + +### Trie ya Ghala {#storage-trie} + +Trie ya ghala ni mahali ambapo data _yote_ ya mkataba huishi. Kuna trie tofauti ya ghala kwa kila akaunti. Ili kupata thamani katika nafasi maalum za ghala kwenye anwani fulani, anwani ya ghala, nafasi ya nambari kamili ya data iliyohifadhiwa katika ghala, na ID ya bloku zinahitajika. Hizi zinaweza kupitishwa kama hoja kwa `eth_getStorageAt` iliyofafanuliwa katika API ya JSON-RPC, k.m., kupata data katika yanayopangwa kwa ghala 0 kwa anwani `0x295a70b2de5e3953354a6a8344e616ed314d7251`: + +```bash +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"} + +``` + +Kupata vipengele vingine katika ghala ni ngumu kidogo kwa sababu nafasi katika trie ya ghala lazima kwanza ikokotolewe. Nafasi inakokotolewa kama hashi ya `keccak256` ya anwani na nafasi ya ghala, zote zimejazwa upande wa kushoto na sufuri hadi urefu wa baiti 32. Kwa mfano, nafasi ya data katika yanayopangwa kwa ghala 1 kwa anwani `0x391694e7e0b0cce554cb130d723a9d27458f9298` ni: + +```python +keccak256(decodeHex("000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001")) +``` + +Katika koni ya Geth, hii inaweza kukokotolewa kama ifuatavyo: + +``` +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +`Njia` kwa hiyo ni `keccak256(<6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9>)`. Hii sasa inaweza kutumika kupata data kutoka kwa trie ya ghala kama hapo awali: + +```bash +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"} +``` + +Kumbuka: `mziziGhala` ya akaunti ya Ethereum huwa tupu kwa chaguo-msingi ikiwa si akaunti ya mkataba. + +### Trie ya Miamala {#transaction-trie} + +Kuna trie tofauti ya miamala kwa kila bloku, tena ikihifadhi jozi za `(ufunguo, thamani)`. Njia hapa ni: `rlp(transactionIndex)` ambayo inawakilisha ufunguo unaolingana na thamani iliyobainishwa na: + +```python +if legacyTx: + value = rlp(tx) +else: + value = TxType | encode(tx) +``` + +Maelezo zaidi kuhusu hili yanaweza kupatikana katika nyaraka za [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718). + +### Trie ya Risiti {#receipts-trie} + +Kila bloku ina trie yake ya Risiti. `Njia` hapa ni: `rlp(transactionIndex)`. `transactionIndex` ni faharisi yake ndani ya bloku iliyojumuishwa. Trie ya risiti haisasishwi kamwe. Sawa na trie ya Miamala, kuna risiti za sasa na za zamani. Ili kuuliza risiti maalum katika trie ya Risiti, faharisi ya muamala katika bloku yake, mzigo wa risiti na aina ya muamala zinahitajika. Risiti Iliyorejeshwa inaweza kuwa ya aina ya `Risiti` ambayo inafafanuliwa kama muunganisho wa `AinaYaMuamala` na `MzigoWaRisiti` au inaweza kuwa ya aina ya `RisitiYaZamani` ambayo inafafanuliwa kama `rlp([hali, cumulativeGasUsed, logsBloom, kumbukumbu])`. + +Maelezo zaidi kuhusu hili yanaweza kupatikana katika nyaraka za [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718). + +## Masomo zaidi {#further-reading} + +- [Merkle Patricia Trie Iliyobadilishwa — Jinsi Ethereum inavyohifadhi hali](https://medium.com/codechain/modified-merkle-patricia-trie-how-ethereum-saves-a-state-e6d7555078dd) +- [Kufanya Merkle katika Ethereum](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/) +- [Kuelewa trie ya Ethereum](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/) diff --git a/public/content/translations/sw/developers/docs/data-structures-and-encoding/rlp/index.md b/public/content/translations/sw/developers/docs/data-structures-and-encoding/rlp/index.md new file mode 100644 index 00000000000..a214d627980 --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-structures-and-encoding/rlp/index.md @@ -0,0 +1,163 @@ +--- +title: Serializesheni ya kiambishi awali cha urefu kinachojirudia (RLP) +description: Ufafanuzi wa usimbaji wa rlp katika safu ya utekelezaji ya Ethereum. +lang: sw +sidebarDepth: 2 +--- + +Serializesheni ya Kiambishi awali cha Urefu Kinachojirudia (RLP) hutumika sana katika programu za utekelezaji za Ethereum. RLP husanifisha uhamisho wa data kati ya nodi katika umbizo linalotumia nafasi vizuri. Madhumuni ya RLP ni kusimba safu zilizopachikwa kiholela za data ya kibinadamu, na RLP ndiyo njia kuu ya usimbaji inayotumika kusanifisha vitu katika safu ya utekelezaji ya Ethereum. Madhumuni makuu ya RLP ni kusimba muundo; isipokuwa nambari kamili chanya, RLP hukabidhi usimbaji wa aina maalum za data (k.m., mifuatano, nambari za desimali) kwa itifaki za kiwango cha juu. Nambari kamili chanya lazima ziwakilishwe katika umbo la kibinadamu la big-endian bila sifuri zinazoongoza (hivyo kufanya thamani kamili ya sifuri kuwa sawa na safu tupu ya baiti). Nambari kamili chanya zilizotenguliwa kwa serializesheni na zenye sifuri zinazoongoza lazima zichukuliwe kuwa si sahihi na itifaki yoyote ya kiwango cha juu inayotumia RLP. + +Maelezo zaidi katika [waraka wa manjano wa Ethereum (Kiambatisho B)](https://ethereum.github.io/yellowpaper/paper.pdf#page=19). + +Ili kutumia RLP kusimba kamusi, maumbo mawili yaliyopendekezwa ya kikanuni ni: + +- tumia `[[k1,v1],[k2,v2]...]` na vitufe katika mpangilio wa kileksikografia +- tumia usimbaji wa kiwango cha juu wa Mti wa Patricia kama Ethereum inavyofanya + +## Ufafanuzi {#definition} + +Kazi ya usimbaji ya RLP huchukua kipengee. Kipengee kinafafanuliwa kama ifuatavyo: + +- mfuatano (yaani, safu ya baiti) ni kipengee +- orodha ya vipengee ni kipengee +- nambari kamili chanya ni kipengee + +Kwa mfano, vyote vifuatavyo ni vipengee: + +- mfuatano mtupu; +- mfuatano wenye neno "paka"; +- orodha yenye idadi yoyote ya mifuatano; +- na miundo tata zaidi ya data kama `["paka", ["mbwa mdogo", "ng'ombe"], "farasi", [[]], "nguruwe", [""], "kondoo"]`. +- nambari `100` + +Kumbuka kwamba katika muktadha wa ukurasa huu wote, 'mfuatano' unamaanisha "idadi fulani ya baiti za data ya kibinadamu"; hakuna usimbaji maalum unaotumika, na hakuna ufahamu kuhusu maudhui ya mifuatano unaodokezwa (isipokuwa kama inavyotakiwa na sheria dhidi ya nambari kamili chanya zisizo za chini zaidi). + +Usimbaji wa RLP unafafanuliwa kama ifuatavyo: + +- Kwa nambari kamili chanya, hugeuzwa kuwa safu fupi zaidi ya baiti ambayo tafsiri yake ya big-endian ni nambari kamili, kisha kusimbwa kama mfuatano kulingana na sheria zilizo hapa chini. +- Kwa baiti moja ambayo thamani yake iko katika masafa ya `[0x00, 0x7f]` (desimali `[0, 127]`), baiti hiyo ni usimbaji wake wenyewe wa RLP. +- Vinginevyo, ikiwa mfuatano una urefu wa baiti 0-55, usimbaji wa RLP unajumuisha baiti moja yenye thamani ya **0x80** (des. 128) pamoja na urefu wa mfuatano ukifuatiwa na mfuatano wenyewe. Kwa hiyo masafa ya baiti ya kwanza ni `[0x80, 0xb7]` (des. `[128, 183]`). +- Ikiwa mfuatano una urefu wa zaidi ya baiti 55, usimbaji wa RLP unajumuisha baiti moja yenye thamani ya **0xb7** (des. 183) pamoja na urefu katika baiti wa urefu wa mfuatano katika umbo la kibinadamu, ukifuatiwa na urefu wa mfuatano, ukifuatiwa na mfuatano wenyewe. Kwa mfano, mfuatano wenye urefu wa baiti 1024 utasimbwa kama `\xb9\x04\x00` (des. `185, 4, 0`) ukifuatiwa na mfuatano wenyewe. Hapa, `0xb9` (183 + 2 = 185) kama baiti ya kwanza, ikifuatiwa na baiti 2 `0x0400` (des. 1024) zinazoashiria urefu wa mfuatano halisi. Kwa hiyo masafa ya baiti ya kwanza ni `[0xb8, 0xbf]` (des. `[184, 191]`). +- Ikiwa mfuatano una urefu wa baiti 2^64, au mrefu zaidi, huenda usisimbwe. +- Ikiwa shehena jumla ya orodha (yaani, urefu wa pamoja wa vipengee vyake vyote vinavyosimbwa kwa RLP) ni wa baiti 0-55, usimbaji wa RLP unajumuisha baiti moja yenye thamani ya **0xc0** pamoja na urefu wa shehena ukifuatiwa na muunganiko wa usimbaji wa RLP wa vipengee. Kwa hiyo masafa ya baiti ya kwanza ni `[0xc0, 0xf7]` (des. `[192, 247]`). +- Ikiwa shehena jumla ya orodha ina urefu wa zaidi ya baiti 55, usimbaji wa RLP unajumuisha baiti moja yenye thamani ya **0xf7** pamoja na urefu katika baiti wa urefu wa shehena katika umbo la kibinadamu, ukifuatiwa na urefu wa shehena, ukifuatiwa na muunganiko wa usimbaji wa RLP wa vipengee. Kwa hiyo masafa ya baiti ya kwanza ni `[0xf8, 0xff]` (des. `[248, 255]`). + +Katika msimbo, hii ni: + +```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) +``` + +## Mfano {#examples} + +- mfuatano "dog" = [ 0x83, 'd', 'o', 'g' ] +- orodha [ "cat", "dog" ] = `[ 0xc8, 0x83, 'c', 'a', 't', 0x83, 'd', 'o', 'g' ]` +- mfuatano mtupu ('null') = `[ 0x80 ]` +- orodha tupu = `[ 0xc0 ]` +- nambari kamili 0 = `[ 0x80 ]` +- baiti '\x00' = `[ 0x00 ]` +- baiti '\x0f' = `[ 0x0f ]` +- baiti '\x04\x00' = `[ 0x82, 0x04, 0x00 ]` +- [uwakilishi wa nadharia ya seti](http://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers) ya tatu, `[ [], [[]], [ [], [[]] ] ] = [ 0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0 ]` +- mfuatano "Lorem ipsum dolor sit amet, consectetur adipisicing elit" = `[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ...` , 'e', 'l', 'i', 't' ]\` + +## Utenguaji usimbaji wa RLP {#rlp-decoding} + +Kulingana na sheria na mchakato wa usimbaji wa RLP, ingizo la utenguaji usimbaji wa RLP huchukuliwa kama safu ya data ya kibinadamu. Mchakato wa utenguaji usimbaji wa RLP ni kama ifuatavyo: + +1. kulingana na baiti ya kwanza (yaani, kiambishi awali) cha data ya ingizo na kutengua usimbaji wa aina ya data, urefu wa data halisi na mkinzano; + +2. kulingana na aina na mkinzano wa data, tengua usimbaji wa data vivyo hivyo, ukizingatia sheria ya usimbaji wa chini zaidi kwa nambari kamili chanya; + +3. endelea kutengua usimbaji wa sehemu iliyobaki ya ingizo; + +Miongoni mwao, sheria za kutengua usimbaji wa aina za data na mkinzano ni kama zifuatavyo: + +1. data ni mfuatano ikiwa masafa ya baiti ya kwanza (yaani, kiambishi awali) ni [0x00, 0x7f], na mfuatano ni baiti yenyewe hasa; + +2. data ni mfuatano ikiwa masafa ya baiti ya kwanza ni [0x80, 0xb7], na mfuatano ambao urefu wake ni sawa na baiti ya kwanza kutoa 0x80 hufuata baiti ya kwanza; + +3. data ni mfuatano ikiwa masafa ya baiti ya kwanza ni [0xb8, 0xbf], na urefu wa mfuatano ambao urefu wake katika baiti ni sawa na baiti ya kwanza kutoa 0xb7 hufuata baiti ya kwanza, na mfuatano hufuata urefu wa mfuatano; + +4. data ni orodha ikiwa masafa ya baiti ya kwanza ni [0xc0, 0xf7], na muunganiko wa usimbaji wa RLP wa vipengee vyote vya orodha ambayo shehena jumla yake ni sawa na baiti ya kwanza kutoa 0xc0 hufuata baiti ya kwanza; + +5. data ni orodha ikiwa masafa ya baiti ya kwanza ni [0xf8, 0xff], na shehena jumla ya orodha ambayo urefu wake ni sawa na baiti ya kwanza kutoa 0xf7 hufuata baiti ya kwanza, na muunganiko wa usimbaji wa RLP wa vipengee vyote vya orodha hufuata shehena jumla ya orodha; + +Katika msimbo, hii ni: + +```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 +``` + +## Masomo zaidi {#further-reading} + +- [RLP katika Ethereum](https://medium.com/coinmonks/data-structure-in-ethereum-episode-1-recursive-length-prefix-rlp-encoding-decoding-d1016832f919) +- [Ethereum kwa ndani: RLP](https://medium.com/coinmonks/ethereum-under-the-hood-part-3-rlp-decoding-df236dc13e58) +- Coglio, A. (2020). Kiambishi awali cha Urefu Kinachojirudia cha Ethereum katika ACL2. Nakala ya awali ya arXiv:2009.13769.](https://arxiv.org/abs/2009.13769) + +## Mada zinazohusiana {#related-topics} + +- [Trie ya Patricia merkle](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) diff --git a/public/content/translations/sw/developers/docs/data-structures-and-encoding/ssz/index.md b/public/content/translations/sw/developers/docs/data-structures-and-encoding/ssz/index.md new file mode 100644 index 00000000000..51c8c81c35b --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-structures-and-encoding/ssz/index.md @@ -0,0 +1,150 @@ +--- +title: Utaratibu rahisi wa kupanga +description: Ufafanuzi wa muundo wa SSZ wa Ethereum. +lang: sw +sidebarDepth: 2 +--- + +**Serializesheni Rahisi (SSZ)** ni mbinu ya userializesheni inayotumika kwenye Mnyororo Kioleza. Inachukua nafasi ya usanifu wa RLP unaotumiwa kwenye safu ya utekelezaji kila mahali kwenye safu ya makubaliano isipokuwa itifaki ya ugunduzi wa programu zingine. Ili kupata maelezo zaidi kuhusu serializesheni ya RLP, tazama [Kiambishi awali cha urefu kinachojirudia (RLP)](/developers/docs/data-structures-and-encoding/rlp/). SSZ imeundwa kubainisha na pia Merkleize kwa ufanisi. SSZ inaweza kuzingatiwa kuwa na vipengee viwili: mpango wa kuratibu na mpango wa Merkleization ambao umeundwa kufanya kazi kwa ufanisi na muundo wa data uliosanifiwa. + +## SSZ inafanya kazi vipi? {#how-does-ssz-work} + +### Serializesheni {#serialization} + +SSZ ni mpango wa kuratibu ambao haujielezi - badala yake unategemea mpango ambao lazima ujulikane mapema. Kusudi la usanifu wa SSZ ni kuwakilisha vitu vya ugumu wa kiholela kama kamba za baiti. Huu ni mchakato rahisi sana kwa "aina za msingi". Kipengele kinabadilishwa tu kuwa baiti za hexadecimal. Aina za msingi ni pamoja na: + +- nambari kamili ambazo hazijasainiwa +- Thamani za Mantiki + +Kwa aina tata za "mchanganyiko", usakinishaji ni mgumu zaidi kwa sababu aina ya mchanganyiko ina vipengele vingi ambavyo vinaweza kuwa na aina tofauti au ukubwa tofauti, au zote mbili. Ikiwa vitu hivi vyote vina urefu usiobadilika (yaani, ukubwa wa vipengele daima ni wa kudumu bila kujali thamani zao halisi), userializesheni ni ubadilishaji rahisi wa kila kipengele katika aina ya mchanganyiko, unaopangwa katika mifuatano ya baiti ya mwisho-mdogo. Mlolongo huu wa baiti huunganishwa pamoja. Kitu kilichofanyiwa usanifu huwa na mwakilishi wa orodha ya baiti wa vipengele vyenye urefu wa kudumu katika mpangilio uleule kama vinavyoonekana kwenye kitu kilichorudishwa. + +Kwa aina zilizo na urefu tofauti, data halisi hubadilishwa na thamani ya "kukabiliana" katika nafasi ya kipengele hicho katika kitu kilichosanifiwa. Data halisi huongezwa kwenye lundo mwishoni mwa kitu kilichopangwa mfululizo. Thamani ya kukabiliana ni tofauti tofauti ya kuanza kwa data halisi kwenye lundo, ikifanya kazi kama kiashirio kwa baiti husika. + +Mfano hapa chini unaonyesha jinsi urekebishaji unavyofanya kazi kwa kontena iliyo na vitu vilivyowekwa na vya urefu tofauti: + +```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` ingekuwa na muundo ufuatao (imejazwa kwa biti 4 tu hapa, imejazwa kwa biti 32 katika uhalisia, na kuweka uwakilishi wa `int` kwa uwazi): + +``` +[37, 0, 0, 0, 55, 0, 0, 0, 16, 0, 0, 0, 22, 0, 0, 0, 1, 2, 3, 4] +------------ ----------- ----------- ----------- ---------- + | | | | | + namba1 namba2 punguzo kwa namba 3 thamani ya + vekta vekta + +``` + +kugawanywa juu ya mistari kwa uwazi: + +``` +[ + 37, 0, 0, 0, # usimbaji wa mwisho-mdogo wa `namba1`. + 55, 0, 0, 0, # usimbaji wa mwisho-mdogo wa `namba2`. + 16, 0, 0, 0, # "Punguzo" linaloonyesha mahali ambapo thamani ya `vekta` huanza (mwisho-mdogo 16). + 22, 0, 0, 0, # usimbaji wa mwisho-mdogo wa `namba3`. + 1, 2, 3, 4, # Thamani halisi katika `vekta`. +] +``` + +Bado hii ni kurahisisha - nambari kamili na sifuri kwenye michoro hapo juu zingehifadhiwa kwa njia, kama hii: + +``` +[ + 10100101000000000000000000000000 # usimbaji wa mwisho-mdogo wa `namba1` + 10110111000000000000000000000000 # usimbaji wa mwisho-mdogo wa `namba2`. + 10010000000000000000000000000000 # "Punguzo" linaloonyesha mahali ambapo thamani ya `vekta` huanza (mwisho-mdogo 16). + 10010110000000000000000000000000 # usimbaji wa mwisho-mdogo wa `namba3`. + 10000001100000101000001110000100 # Thamani halisi ya sehemu ya `baiti`. +] +``` + +Kwa hivyo maadili halisi ya aina za urefu tofauti huhifadhiwa kwenye lundo mwishoni mwa kitu kilichopangwa kwa mpangilio na urekebishaji wao ukihifadhiwa katika nafasi zao sahihi katika orodha ya sehemu zilizoagizwa. + +Pia kuna baadhi ya kesi maalum zinazohitaji matibabu maalum, kama vile aina ya `BitList` inayohitaji kikomo cha urefu kuongezwa wakati wa userializesheni na kuondolewa wakati wa uondoaji-serializesheni. Maelezo kamili yanapatikana katika [maelezo ya SSZ](https://github.com/ethereum/consensus-specs/blob/dev/ssz/simple-serialize.md). + +### Uondoaji-serializesheni {#deserialization} + +Uondoaji-serializesheni wa kitu hiki unahitaji skema. Ratiba inafafanua mpangilio sahihi wa data iliyosawazishwa ili kila kipengele mahususi kiweze kuondolewa kutoka kwenye sehemu ya baiti hadi kwenye kitu fulani cha maana na vipengele vilivyo na aina, thamani, ukubwa na nafasi sahihi. Ni muundo wa data unaomwambia msanifukwa ni maadili gani ni maadili halisi na ni yapi ambayo yamepunguzwa. Majina yote ya sehemu hupotea wakati kitu kinapofanyiwa usanifu, lakini hurudishwa tena wakati wa Urejeshaji wa data katika muundo wake wa asili kulingana na muundo wa data. + +Tazama [ssz.dev](https://www.ssz.dev/overview) kwa maelezo shirikishi kuhusu hili. + +## Umerkleizesheni {#merkleization} + +Kipengee hiki cha serialized cha SSZ kinaweza kisha kuwa merkleized - ambacho kinabadilishwa kuwa uwakilishi wa mti wa Merkle wa data sawa. Kwanza, idadi ya Vipande 32-baiti katika Kipengele kilichoorodheshwa kimeamuliwa. Hizi ni "majani" ya mti. Idadi ya jumla ya majani lazima iwe na nguvu ya 2 ili kuharakisha pamoja majani hatimaye kutoa mzizi mmoja wa mti wa hashi. Ikiwa hii sio kawaida, majani ya ziada yaliyo na baiti 32 za zero huongezwa. Kielelezo: + +``` + mzizi wa mti wa hashi + / \ + / \ + / \ + / \ + hashi ya majani hashi ya majani + 1 na 2 3 na 4 + / \ / \ + / \ / \ + / \ / \ + jani1 jani2 jani3 jani4 +``` + +Pia kuna matukio ambapo majani ya mti hayana kawaida sawasawa kusambaza kwa njia ya kufanya katika mfano hapo juu. Kwa mfano, jani la 4 linaweza kuwa chombo chenye vipengele vingi vinavyohitaji "kina" cha ziada ili kuongezwa kwenye mti wa Merkle, na kuunda mti usio na usawa. + +Badala ya kurejelea vipengele hivi vya mti kama jani X, nodi X n. k, tunaweza kuvipa viashiria vya jumla, tukianza na mzizi = 1 na kuhesabu kutoka kushoto kwenda kulia kwa kila ngazi. Hiki ni kiashiria juimuishi kiliyoelezwa hapo juu. Kila kipengele katika orodha iliyofanyiwa userializesheni kina faharasa ya jumla sawa na `2**depth + idx` ambapo idx ni nafasi yake yenye faharasa-sifuri katika kitu kilichofanyiwa userializesheni na kina ni idadi ya viwango katika mti wa Merkle, ambayo inaweza kubainishwa kama logariti ya msingi-mbili ya idadi ya vipengele (majani). + +## Faharasa za jumla {#generalized-indices} + +Faharasa ya jumla ni nambari kamili inayowakilisha nodi katika mti wa Merkle wa binary ambapo kila nodi ina faharasa ya jumla `2 ** depth + index in row`. + +``` + 1 --kina = 0 2**0 + 0 = 1 + 2 3 --kina = 1 2**1 + 0 = 2, 2**1+1 = 3 + 4 5 6 7 --kina = 2 2**2 + 0 = 4, 2**2 + 1 = 5... + +``` + +"Uwakilishi huu unatoa kiashiria cha nodi kwa kila kipande cha data katika mti wa Merkle." + +## Uthibitisho-anuwai {#multiproofs} + +"Kutoa orodha ya viashiria vilivyopanuliwa vinavyo wakilisha kipengele fulani kunaturuhusu kukithibitisha dhidi ya mizizi ya mti wa hash." Mzizi huu ni toleo letu la ukweli linalokubalika. Data yoyote tunayopewa inaweza kuthibitishwa dhidi ya ukweli huo kwa kuiingiza mahali pazuri katika mti wa Merkle na kuzingatia kwamba mzizi unabaki bila kubadilika. Kuna kazi katika maelezo [hapa](https://github.com/ethereum/consensus-specs/blob/dev/ssz/merkle-proofs.md#merkle-multiproofs) zinazoonyesha jinsi ya kukokotoa seti ndogo iwezekanavyo ya nodi zinazohitajika ili kuthibitisha maudhui ya seti maalum ya faharasa za jumla. + +Kwa mfano, ili kuthibitisha data katika fahirisi ya 9 kwenye mti ulio hapa chini, tunahitaji heshi ya data katika kiashiria 8, 9, 5, 3, 1. +Heshi ya (8,9) inapaswa kuwa sawa na (4), ambayo heshi na 5 kutoa 2, ambayo heshi yenye 3 ili kutoa mzizi wa mti 1. Ikiwa data isiyo sahihi ilitolewa kwa 9, mzizi ungebadilika - tungegundua hii na kushindwa kuthibitisha tawi. + +``` +* = data inayohitajika ili kutoa uthibitisho + + 1* + 2 3* + 4 5* 6 7 +8* 9* 10 11 12 13 14 15 + +``` + +## Masomo zaidi {#further-reading} + +- [Kuboresha Ethereum: SSZ](https://eth2book.info/altair/part2/building_blocks/ssz) +- [Kuboresha Ethereum: Umerkleizesheni](https://eth2book.info/altair/part2/building_blocks/merkleization) +- [Utekelezaji wa SSZ](https://github.com/ethereum/consensus-specs/issues/2138) +- [Kikokotoo cha SSZ](https://simpleserialize.com/) +- [SSZ.dev](https://www.ssz.dev/) diff --git a/public/content/translations/sw/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md b/public/content/translations/sw/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md new file mode 100644 index 00000000000..68c80a55fc4 --- /dev/null +++ b/public/content/translations/sw/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md @@ -0,0 +1,195 @@ +--- +title: Tovuti ya tatu ufafanuzi wa uhifadhi +description: Ufafanuzi rasmi wa ghala ya siri ya web3 +lang: sw +sidebarDepth: 2 +--- + +Ili kufanya programu yako ifanye kazi kwenye Ethereum, unaweza kutumia kitu cha web3 kinachotolewa na maktaba ya web3.js. Kimsingi huwasiliana na nodi ya ndani kupitia wito za RPC. [web3](https://github.com/ethereum/web3.js/) hufanya kazi na nodi yoyote ya Ethereum ambayo inaonyesha safu ya RPC. + +`web3` ina kitu cha `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) +}) + +/** matokeo + * [ 'web3', 3 ] faili la ufunguo la web3 (v3) + * [ 'ethersale', undefined ] Faili la ufunguo la Ethersale + * null faili la ufunguo batili + */ +``` + +Hati hii inaandika **toleo la 3** la Ufafanuzi wa Ghala la Siri la Web3. + +## Ufafanuzi {#definition} + +Usimbaji na uondoaji usimbaji halisi wa faili haujabadilika kwa kiasi kikubwa kutoka toleo la 1, isipokuwa kwamba algoriti ya kripto haijawekwa tena kwa AES-128-CBC (AES-128-CTR sasa ndiyo hitaji la chini kabisa). Maana/algoriti nyingi ni sawa na toleo la 1, isipokuwa `mac`, ambayo hutolewa kama SHA3 (keccak-256) ya miunganisho ya baiti 16 za pili kutoka kushoto za ufunguo uliotolewa pamoja na `ciphertext` kamili. + +Faili za ufunguo wa siri huhifadhiwa moja kwa moja katika `~/.web3/keystore` (kwa mifumo inayofanana na Unix) na `~/AppData/Web3/keystore` (kwa Windows). Zinaweza kupewa jina lolote, lakini utaratibu mzuri ni `.json`, ambapo `` ni UUID ya biti 128 iliyopewa ufunguo wa siri (wakala wa kuhifadhi faragha kwa anwani ya ufunguo wa siri). + +Faili zote kama hizo zina nenosiri linalohusishwa. Ili kupata ufunguo wa siri wa faili fulani ya `.json`, kwanza pata ufunguo wa usimbaji fiche wa faili; hii inafanywa kwa kuchukua nenosiri la faili na kulipitisha kupitia kitendakazi cha kupata ufunguo kama ilivyoelezwa na ufunguo wa `kdf`. Vigezo vya kudumu na vinavyobadilika vinavyotegemea KDF kwa kitendakazi cha KDF vimeelezwa katika ufunguo wa `kdfparams`. + +PBKDF2 lazima iungwe mkono na utekelezaji wote unaokidhi viwango vya chini kabisa, unaoonyeshwa kupitia: + +- `kdf`: `pbkdf2` + +Kwa PBKDF2, kdfparams zinajumuisha: + +- `prf`: Lazima iwe `hmac-sha256` (inaweza kupanuliwa siku zijazo); +- `c`: idadi ya marudio; +- `salt`: chumvi iliyopitishwa kwa PBKDF; +- `dklen`: urefu wa ufunguo uliotolewa. Lazima iwe >= 32. + +Mara ufunguo wa faili utakapopatikana, unapaswa kuthibitishwa kupitia upatikanaji wa MAC. MAC inapaswa kukokotolewa kama hashi ya SHA3 (keccak-256) ya safu ya baiti iliyoundwa kama miunganisho ya baiti 16 za pili kutoka kushoto za ufunguo uliotolewa na yaliyomo kwenye ufunguo wa `ciphertext`, yaani: + +```js +KECCAK(DK[16..31] ++ ) +``` + +(ambapo `++` ni kiendeshaji cha kuunganisha) + +Thamani hii inapaswa kulinganishwa na yaliyomo kwenye ufunguo wa `mac`; ikiwa ni tofauti, nenosiri mbadala linapaswa kuombwa (au operesheni isitishwe). + +Baada ya ufunguo wa faili kuthibitishwa, maandishi ya kificho (ufunguo wa `ciphertext` katika faili) yanaweza kuondolewa usimbaji kwa kutumia algoriti ya usimbaji fiche linganifu iliyoainishwa na ufunguo wa `cipher` na kuwekewa vigezo kupitia ufunguo wa `cipherparams`. Ikiwa saizi ya ufunguo uliotolewa na saizi ya ufunguo wa algoriti hazifanani, baiti za kulia kabisa za ufunguo uliotolewa, zilizojazwa na sifuri, zinapaswa kutumika kama ufunguo wa algoriti. + +Utekelezaji wote unaokidhi viwango vya chini kabisa lazima uunge mkono algoriti ya AES-128-CTR, inayoonyeshwa kupitia: + +- `cipher: aes-128-ctr` + +Kificho hiki huchukua vigezo vifuatavyo, vilivyotolewa kama funguo za ufunguo wa cipherparams: + +- `iv`: vekta ya kuanzisha ya biti 128 kwa kificho. + +Ufunguo wa kificho ni baiti 16 za kushoto kabisa za ufunguo uliotolewa, yaani, `DK[0..15]` + +Uundaji/usimbaji fiche wa ufunguo wa siri unapaswa kuwa kinyume cha maagizo haya kimsingi. Hakikisha `uuid`, `salt` na `iv` ni za kubahatisha. + +Mbali na sehemu ya `version`, ambayo inapaswa kufanya kazi kama kitambulisho "kigumu" cha toleo, utekelezaji unaweza pia kutumia `minorversion` kufuatilia mabadiliko madogo, yasiyovunja, kwa umbizo. + +## Vekta za Majaribio {#test-vectors} + +Maelezo: + +- `Anwani`: `008aeeda4d805471df9b2a5b0f38a0c3bcba786b` +- `ICAP`: `XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67` +- `UUID`: `3198bc9c-6672-5ab3-d9954942343ae5b6` +- `Nenosiri`: `testpassword` +- `Siri`: `7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d` + +### PBKDF2-SHA-256 {#PBKDF2-SHA-256} + +Vekta ya majaribio inayotumia `AES-128-CTR` na `PBKDF2-SHA-256`: + +Yaliyomo kwenye faili ya `~/.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 +} +``` + +**Hatua za kati**: + +`Ufunguo uliotolewa`: `f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551` +`Mwili wa MAC`: `e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46` +`MAC`: `517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2` +`Ufunguo wa kificho`: `f06d69cdc7da0faffb1008270bca38f5` + +### Scrypt {#scrypt} + +Vekta ya majaribio inayotumia AES-128-CTR na 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 +} +``` + +**Hatua za kati**: + +`Ufunguo uliotolewa`: `7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d` +`Mwili wa MAC`: `edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2` +`MAC`: `337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c` +`Ufunguo wa kificho`: `7446f59ecc301d2d79bc3302650d8a5c` + +## Mabadiliko kutoka Toleo la 1 {#alterations-from-v2} + +Toleo hili linarekebisha kutofautiana kadhaa na toleo la 1 lililochapishwa [hapa](https://github.com/ethereum/homestead-guide/blob/master/old-docs-for-reference/go-ethereum-wiki.rst/Passphrase-protected-key-store-spec.rst). Kwa ufupi haya ni: + +- Matumizi ya herufi kubwa hayana msingi na hayana msimamo (scrypt herufi ndogo, Kdf mchanganyiko, MAC herufi kubwa). +- Anwani sio ya lazima na inahatarisha faragha. +- `Chumvi` kimsingi ni kigezo cha kitendakazi cha kupata ufunguo na inastahili kuhusishwa nacho, sio na kripto kwa ujumla. +- _SaltLen_ sio ya lazima (ipate tu kutoka kwa Chumvi). +- Kitendakazi cha kupata ufunguo kimetolewa, lakini algoriti ya kripto imebainishwa kwa ukali. +- `Toleo` kimsingi ni nambari lakini ni mfuatano (utoaji toleo uliopangwa ungewezekana na mfuatano, lakini unaweza kuzingatiwa kuwa nje ya wigo wa umbizo la faili la usanidi linalobadilika mara chache). +- `KDF` na `cipher` ni dhana ndugu kinadharia lakini zimepangwa tofauti. +- `MAC` inakokotolewa kupitia kipande cha data kisichojali nafasi tupu(!) + +Mabadiliko yamefanywa kwenye umbizo ili kutoa faili ifuatayo, ambayo ni sawa kiutendaji na mfano uliotolewa kwenye ukurasa uliounganishwa hapo awali: + +```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 +} +``` + +## Mabadiliko kutoka Toleo la 2 {#alterations-from-v2} + +Toleo la 2 lilikuwa utekelezaji wa mapema wa C++ na idadi ya hitilafu. Mambo yote muhimu hayajabadilika kutoka humo. diff --git a/public/content/translations/sw/developers/docs/design-and-ux/dex-design-best-practice/index.md b/public/content/translations/sw/developers/docs/design-and-ux/dex-design-best-practice/index.md new file mode 100644 index 00000000000..b02ac007df3 --- /dev/null +++ b/public/content/translations/sw/developers/docs/design-and-ux/dex-design-best-practice/index.md @@ -0,0 +1,220 @@ +--- +title: Mazoezi bora ya ubunifu wa Mabadilishano yaliyogatuliwa (DEX) +description: Mwongozo unaoelezea maamuzi ya UX/UI kwa ajili ya kubadilishana tokeni. +lang: sw +--- + +Tangu kuzinduliwa kwa Uniswap mnamo 2018, kumekuwa na mamia ya mabadilishano yaliyogatuliwa yaliyozinduliwa katika makumi ya minyororo tofauti. +Mengi ya haya yalileta vipengele vipya au kuongeza mabadiliko yao, lakini kiolesura kimebaki sawa kwa ujumla. + +Sababu moja ya hii ni [Sheria ya Jakob](https://lawsofux.com/jakobs-law/): + +> Watumiaji hutumia muda wao mwingi kwenye tovuti zingine. Hii inamaanisha kuwa watumiaji wanapendelea tovuti yako ifanye kazi kwa njia sawa na tovuti zingine zote ambazo tayari wanazijua. + +Shukrani kwa wavumbuzi wa awali kama Uniswap, Pancakeswap, na Sushiswap, watumiaji wa DeFi wana wazo la pamoja la jinsi DEX inavyoonekana. +Kwa sababu hii, kitu kama “mazoezi bora” sasa kinaibuka. Tunaona maamuzi zaidi na zaidi ya ubunifu yakisanifishwa katika tovuti zote. Unaweza kuona mabadiliko ya DEXes kama mfano mkubwa wa kuijaribu moja kwa moja. Vitu vilivyofanya kazi vilibaki, visivyofanya kazi, vilitupiliwa mbali. Bado kuna nafasi ya mtindo wa kipekee, lakini kuna viwango fulani ambavyo DEX inapaswa kuzingatia. + +Makala hii ni muhtasari wa: + +- nini cha kujumuisha +- jinsi ya kuifanya iweze kutumika iwezekanavyo +- njia kuu za kubinafsisha ubunifu + +Violezo vyote vya mfano vilitengenezwa mahususi kwa ajili ya makala hii, ingawa vyote vinatokana na miradi halisi. + +Seti ya Figma pia imejumuishwa chini - jisikie huru kuitumia na kuharakisha violezo vyako mwenyewe! + +## Muundo wa msingi wa DEX {#basic-anatomy-of-a-dex} + +Kwa ujumla, UI ina vipengele vitatu: + +1. Fomu kuu +2. Kitufe +3. Paneli ya maelezo + +![UI ya DEX ya kawaida, inayoonyesha vipengele vitatu vikuu](./1.png) + +## Tofauti {#variations} + +Hii itakuwa mada ya kawaida katika makala hii, lakini kuna njia mbalimbali tofauti ambazo vipengele hivi vinaweza kupangwa. “Paneli ya maelezo” inaweza kuwa: + +- Juu ya kitufe +- Chini ya kitufe +- Imefichwa kwenye paneli ya akodioni +- Na/au kwenye modal ya “hakikisho” + +Zingatia Modal ya “hakikisho” si ya lazima, lakini ikiwa unaonyesha maelezo machache sana kwenye UI kuu, inakuwa muhimu. + +## Muundo wa fomu kuu {#structure-of-the-main-form} + +Hili ndilo kisanduku ambapo unachagua tokeni unayotaka kubadilisha. Sehemu hiyo ina sehemu ya kuingiza data na kitufe kidogo mfululizo. + +Kwa kawaida DEX huonyesha maelezo ya ziada katika safu moja juu na safu moja chini, ingawa hii inaweza kusanidiwa tofauti. + +![Safu ya kuingiza, yenye safu ya maelezo juu na chini](./2.png) + +## Tofauti {#variations2} + +Tofauti mbili za UI zimeonyeshwa hapa; moja bila mipaka yoyote, na kutengeneza ubunifu ulio wazi sana, na moja ambapo safu ya kuingiza ina mpaka, na kutengeneza mwelekeo kwenye kipengele hicho. + +![Tofauti mbili za UI za fomu kuu](./3.png) + +Muundo huu wa msingi huruhusu **maelezo manne muhimu** kuonyeshwa katika ubunifu: moja katika kila kona. Ikiwa kuna safu moja tu ya juu/chini, basi kuna nafasi mbili tu. + +Wakati wa mabadiliko ya DeFi, mambo mengi tofauti yamejumuishwa hapa. + +## Maelezo muhimu ya kujumuisha {#key-info-to-include} + +- Salio katika mkoba +- Kitufe cha Max +- Thamani sawa ya Fiat +- Athari ya bei kwenye kiasi “kilichopokelewa” + +Katika siku za mwanzo za DeFi, thamani sawa ya fiat mara nyingi ilikuwa haipo. Ikiwa unaunda mradi wa aina yoyote wa Web3, ni muhimu thamani sawa ya fiat ionyeshwe. Watumiaji bado wanafikiri kulingana na sarafu za ndani, kwa hivyo ili kuendana na mifumo ya akili ya ulimwengu halisi, hii inapaswa kujumuishwa. + +Kwenye sehemu ya pili (ile unayochagua tokeni unayobadilisha) unaweza pia kujumuisha athari ya bei karibu na kiasi cha sarafu ya fiat, kwa kukokotoa tofauti kati ya kiasi cha kuingiza na kiasi kinachokadiriwa cha kutoa. Haya ni maelezo muhimu sana ya kujumuisha. + +Vitufe vya asilimia (k.m., 25%, 50%, 75%) vinaweza kuwa kipengele muhimu, lakini vinachukua nafasi zaidi, huongeza wito zaidi wa kuchukua hatua, na kuongeza mzigo zaidi wa kiakili. Sawa na vitelezi vya asilimia. Baadhi ya maamuzi haya ya UI yatategemea chapa yako na aina ya mtumiaji wako. + +Maelezo ya ziada yanaweza kuonyeshwa chini ya fomu kuu. Kwa kuwa aina hii ya maelezo ni kwa ajili ya watumiaji wa kitaalamu, inaleta maana ama: + +- kuweka iwe ndogo iwezekanavyo, au; +- kuificha kwenye paneli ya akodioni + +![Maelezo yaliyoonyeshwa kwenye pembe za fomu hiyo kuu](./4.png) + +## Maelezo ya ziada ya kujumuisha {#extra-info-to-include} + +- Bei ya tokeni +- Slippage +- Kiwango cha chini kilichopokelewa +- Matokeo yanayotarajiwa +- Athari ya bei +- Makadirio ya gharama ya gesi +- Ada zingine +- Uelekezaji wa agizo + +Kwa ubishi, baadhi ya maelezo haya yanaweza kuwa ya hiari. + +Uelekezaji wa agizo unavutia, lakini haileti tofauti kubwa kwa watumiaji wengi. + +Baadhi ya maelezo mengine ni kurudia tu jambo lile lile kwa njia tofauti. Kwa mfano “kiwango cha chini kilichopokelewa” na “slippage” ni pande mbili za sarafu moja. Ikiwa umeweka slippage kuwa 1%, basi kiwango cha chini unachoweza kutarajia kupokea = matokeo yanayotarajiwa-1%. Baadhi ya UI zitaonyesha kiasi kinachotarajiwa, kiasi cha chini, na slippage… Ambayo ni muhimu lakini labda ni kuzidisha. + +Watumiaji wengi wataacha slippage chaguo-msingi hata hivyo. + +“Athari ya bei” mara nyingi huonyeshwa kwenye mabano karibu na thamani sawa ya fiat katika sehemu ya “kwa”. Haya ni maelezo mazuri ya UX ya kuongeza, lakini ikiwa yameonyeshwa hapa, je, kweli yanahitaji kuonyeshwa tena hapa chini? Na kisha tena kwenye skrini ya hakikisho? + +Watumiaji wengi (hasa wale wanaobadilisha kiasi kidogo) hawatajali kuhusu maelezo haya; wataingiza tu nambari na kubonyeza badilisha. + +![Baadhi ya maelezo yanaonyesha kitu kile kile](./5.png) + +Ni maelezo gani hasa yanaonyeshwa yatategemea hadhira yako na hisia gani unataka programu iwe nayo. + +Ikiwa utajumuisha uvumilivu wa slippage katika paneli ya maelezo, unapaswa pia kuifanya iweze kuhaririwa moja kwa moja kutoka hapa. Huu ni mfano mzuri wa “kiongeza kasi”; mbinu nadhifu ya UX inayoweza kuharakisha mtiririko wa watumiaji wenye uzoefu, bila kuathiri utumiaji wa jumla wa programu. + +![Slippage inaweza kudhibitiwa kutoka kwa paneli ya maelezo](./6.png) + +Ni wazo zuri kufikiria kwa makini si tu kuhusu taarifa moja maalum kwenye skrini moja, bali kuhusu mtiririko mzima kupitia: +Kuingiza nambari katika Fomu Kuu → Kuchanganua Maelezo → Kubofya hadi kwenye Skrini ya Hakikisho (ikiwa una skrini ya hakikisho). +Je, paneli ya maelezo inapaswa kuonekana wakati wote, au mtumiaji anahitaji kubofya ili kuipanua? +Je, unapaswa kuongeza ugumu kwa kuongeza skrini ya hakikisho? Hii inamlazimu mtumiaji kupunguza kasi na kufikiria biashara yake, ambayo inaweza kuwa muhimu. Lakini je, wanataka kuona maelezo yale yale tena? Ni nini muhimu zaidi kwao katika hatua hii? + +## Chaguo za ubunifu {#design-options} + +Kama ilivyotajwa, mengi ya haya yanategemea mtindo wako binafsi +Mtumiaji wako ni nani? +Chapa yako ni ipi? +Je, unataka kiolesura cha “kitaalamu” kinachoonyesha kila undani, au unataka kuwa na muonekano mdogo? +Hata kama unawalenga watumiaji wa kitaalamu wanaotaka maelezo yote iwezekanavyo, bado unapaswa kukumbuka maneno ya busara ya Alan Cooper: + +> Haijalishi kiolesura chako ni kizuri kiasi gani, haijalishi ni cha kuvutia kiasi gani, ingekuwa bora kama kingekuwa kidogo. + +### Muundo {#structure} + +- tokeni upande wa kushoto, au tokeni upande wa kulia +- Safu 2 au 3 +- maelezo juu au chini ya kitufe +- maelezo yamepanuliwa, yamepunguzwa, au hayaonyeshwi + +### Mtindo wa sehemu {#component-style} + +- tupu +- yenye mpaka +- iliyojazwa + +Kwa mtazamo safi wa UX, mtindo wa UI ni muhimu kidogo kuliko unavyofikiria. Mitindo ya kuona huja na kuondoka kwa mzunguko, na upendeleo mwingi ni wa kibinafsi. + +Njia rahisi zaidi ya kupata hisia ya hili - na kufikiria juu ya usanidi mbalimbali tofauti - ni kuangalia baadhi ya mifano na kisha kufanya majaribio mwenyewe. + +Seti ya Figma iliyojumuishwa ina sehemu tupu, zenye mpaka na zilizojazwa. + +Angalia mifano ifuatayo ili kuona njia tofauti unazoweza kuweka yote pamoja: + +![safu 3 katika mtindo uliojazwa](./7.png) + +![safu 3 katika mtindo wenye mpaka](./8.png) + +![safu 2 katika mtindo tupu](./9.png) + +![safu 3 katika mtindo wenye mpaka, na paneli ya maelezo](./10.png) + +![safu 3 na safu ya kuingiza katika mtindo wenye mpaka](./11.png) + +![safu 2 katika mtindo uliojazwa](./12.png) + +## Lakini tokeni inapaswa kwenda upande gani? {#but-which-side-should-the-token-go-on} + +Jambo la msingi ni kwamba labda haileti tofauti kubwa kwa utumiaji. Hata hivyo, kuna mambo machache ya kuzingatia, ambayo yanaweza kukushawishi kwa njia moja au nyingine. + +Imekuwa ya kuvutia kiasi kuona mtindo ukibadilika na wakati. Hapo awali Uniswap ilikuwa na tokeni upande wa kushoto, lakini tangu wakati huo imeiweka upande wa kulia. Sushiswap pia ilifanya mabadiliko haya wakati wa uboreshaji wa ubunifu. Itifaki nyingi, lakini si zote, zimefuata mkondo. + +Kawaida ya kifedha kwa jadi huweka alama ya sarafu kabla ya nambari, k.m., $50, €50, £50, lakini sisi _tunasema_ dola 50, Euro 50, pauni 50. + +Kwa mtumiaji wa jumla - hasa mtu anayesoma kutoka kushoto kwenda kulia, juu hadi chini - tokeni upande wa kulia labda huhisi asili zaidi. + +![UI yenye tokeni upande wa kushoto](./13.png) + +Kuweka tokeni upande wa kushoto na nambari zote upande wa kulia huonekana kuwa na ulinganifu wa kupendeza, ambayo ni faida, lakini kuna hasara nyingine kwa mpangilio huu. + +Sheria ya ukaribu inasema kuwa vitu vilivyo karibu pamoja huonekana kama vinahusiana. Kwa hiyo, tunataka kuweka vitu vinavyohusiana karibu na kila kimoja. Salio la tokeni linahusiana moja kwa moja na tokeni yenyewe, na litabadilika kila tokeni mpya inapochaguliwa. Kwa hivyo inaleta maana zaidi kidogo kwa salio la tokeni kuwa karibu na kitufe cha kuchagua tokeni. Inaweza kuhamishwa chini ya tokeni, lakini hiyo inavunja ulinganifu wa mpangilio. + +Hatimaye, kuna faida na hasara kwa chaguo zote mbili, lakini inavutia jinsi mwelekeo unavyoonekana kuwa kuelekea tokeni upande wa kulia. + +## Tabia ya kitufe {#button-behavior} + +Usiwe na kitufe tofauti cha Kuidhinisha. Pia usiwe na bofyo tofauti la Kuidhinisha. Mtumiaji anataka Kubadilisha, kwa hivyo sema tu “badilisha” kwenye kitufe na uanzishe uidhinishaji kama hatua ya kwanza. Modal inaweza kuonyesha maendeleo kwa hatua, au arifa rahisi ya “tx 1 kati ya 2 - inaidhinisha”. + +![UI yenye vitufe tofauti vya kuidhinisha na kubadilisha](./14.png) + +![UI yenye kitufe kimoja kinachosema idhinisha](./15.png) + +### Kitufe kama msaada wa kimuktadha {#button-as-contextual-help} + +Kitufe kinaweza kufanya kazi mara mbili kama arifa! + +Huu kwa kweli ni muundo wa ubunifu usio wa kawaida nje ya Web3, lakini umekuwa wa kawaida ndani yake. Huu ni uvumbuzi mzuri kwani unaokoa nafasi, na kuweka umakini. + +Ikiwa kitendo kikuu - KUBADILISHA - hakipatikani kwa sababu ya hitilafu, sababu inaweza kuelezewa kwa kutumia kitufe, k.m.: + +- badilisha mtandao +- unganisha mkoba +- hitilafu mbalimbali + +Kitufe pia kinaweza **kupangwa kwa kitendo** kinachohitaji kufanywa. Kwa mfano, ikiwa mtumiaji hawezi kubadilisha kwa sababu yuko kwenye mtandao usio sahihi, kitufe kinapaswa kusema “badilisha hadi Ethereum”, na mtumiaji anapobofya kitufe, kinapaswa kubadilisha mtandao hadi Ethereum. Hii inaharakisha mtiririko wa mtumiaji kwa kiasi kikubwa. + +![Vitendo muhimu vinavyoanzishwa kutoka kwa CTA kuu](./16.png) + +![Ujumbe wa hitilafu umeonyeshwa ndani ya CTA kuu](./17.png) + +## Jenga yako mwenyewe na faili hii ya figma {#build-your-own-with-this-figma-file} + +Shukrani kwa kazi ngumu ya itifaki nyingi, ubunifu wa DEX umeboreka sana. Tunajua ni maelezo gani mtumiaji anahitaji, jinsi tunapaswa kuyaonyesha, na jinsi ya kufanya mtiririko uwe laini iwezekanavyo. +Tunatumahi makala hii inatoa muhtasari thabiti wa kanuni za UX. + +Ikiwa unataka kujaribu, tafadhali jisikie huru kutumia seti ya violezo vya Figma. Imewekwa rahisi iwezekanavyo, lakini ina unyumbufu wa kutosha kujenga muundo wa msingi kwa njia mbalimbali. + +[Seti ya violezo vya Figma](https://www.figma.com/community/file/1393606680816807382/dex-wireframes-kit) + +DeFi itaendelea kubadilika, na daima kuna nafasi ya kuboresha. + +Kila la kheri! diff --git a/public/content/translations/sw/developers/docs/design-and-ux/heuristics-for-web3/index.md b/public/content/translations/sw/developers/docs/design-and-ux/heuristics-for-web3/index.md new file mode 100644 index 00000000000..063289002a5 --- /dev/null +++ b/public/content/translations/sw/developers/docs/design-and-ux/heuristics-for-web3/index.md @@ -0,0 +1,138 @@ +--- +title: Miongozo 7 ya usanifu wa kiolesura cha Web3 +description: Kanuni za kuboresha utumiaji wa Web3 +lang: sw +--- + +Miongozo ya utumiaji ni "kanuni za jumla" ambazo unaweza kutumia kupima utumiaji wa tovuti yako. +Miongozo 7 hapa imeundwa mahususi kwa Web3 na inapaswa kutumiwa pamoja na [kanuni 10 za jumla za usanifu wa mwingiliano](https://www.nngroup.com/articles/ten-usability-heuristics/) za Jakob Nielsen. + +## Miongozo saba ya utumiaji kwa web3 {#seven-usability-heuristics-for-web3} + +1. Maoni hufuata kitendo +2. Usalama na uaminifu +3. Taarifa muhimu zaidi iko wazi +4. Istilahi zinazoeleweka +5. Vitendo ni vifupi iwezekanavyo +6. Miunganisho ya mtandao inaonekana na ni rahisi kubadilika +7. Udhibiti kutoka kwenye programu, sio kwenye mkoba + +## Ufafanuzi na mifano {#definitions-and-examples} + +### 1. Maoni hufuata kitendo {#feedback-follows-action} + +**Inapaswa kuwa dhahiri wakati kitu kimetokea, au kinatokea.** + +Watumiaji huamua hatua zao zinazofuata kulingana na matokeo ya hatua zao za awali. Kwa hivyo ni muhimu wabaki wanafahamu kuhusu hali ya mfumo. Hii ni muhimu hasa katika Web3 kwani miamala wakati mwingine inaweza kuchukua muda mfupi kuidhinishwa kwenye mnyororo wa bloku. Ikiwa hakuna maoni yanayowafahamisha wasubiri, watumiaji hawana uhakika kama kuna chochote kimetokea. + +**Vidokezo:** + +- Mfahamishe mtumiaji kupitia ujumbe, arifa, na tahadhari nyingine. +- Wasiliana nyakati za kusubiri kwa uwazi. +- Ikiwa kitendo kitachukua zaidi ya sekunde chache, mhakikishie mtumiaji kwa kipima muda au uhuishaji ili kumfanya ahisi kama kuna kitu kinatokea. +- Ikiwa kuna hatua nyingi katika mchakato, onyesha kila hatua. + +**Mfano:** +Kuonyesha kila hatua inayohusika katika muamala huwasaidia watumiaji kujua wako wapi katika mchakato. Aikoni zinazofaa humjulisha mtumiaji hali ya matendo yake. + +![Kumjulisha mtumiaji kuhusu kila hatua wakati wa kubadilisha tokeni](./Image1.png) + +### 2. Usalama na uaminifu vimejengewa ndani {#security-and-trust-are-backed-in} + +Usalama unapaswa kupewa kipaumbele, na hili linapaswa kusisitizwa kwa mtumiaji. +Watu wanajali sana kuhusu data zao. Usalama mara nyingi huwa ni jambo la msingi kwa watumiaji, kwa hivyo unapaswa kuzingatiwa katika ngazi zote za usanifu. Unapaswa daima kutafuta kujipatia uaminifu wa watumiaji wako, lakini jinsi unavyofanya hivi kunaweza kumaanisha mambo tofauti kwenye programu tofauti. Haipaswi kuwa wazo la baadaye, bali inapaswa kusanifiwa kwa makusudi kote. Jenga uaminifu katika uzoefu wote wa mtumiaji, ikijumuisha chaneli za kijamii na nyaraka, pamoja na UI ya mwisho. Mambo kama kiwango cha ugatuaji, hali ya multi-sig ya hazina, na iwapo timu imefichuliwa (doxxed), yote huathiri uaminifu wa watumiaji. + +**Vidokezo:** + +- Orodhesha ukaguzi wako kwa fahari +- Pata ukaguzi mwingi +- Tangaza vipengele vyovyote vya usalama ulivyosanifu +- Angazia hatari zinazowezekana, ikijumuisha miunganisho ya msingi +- Wasiliana kuhusu utata wa mikakati +- Zingatia masuala yasiyo ya UI ambayo yanaweza kuathiri mtazamo wa watumiaji wako kuhusu usalama + +**Mfano:** +Jumuisha ukaguzi wako kwenye sehemu ya futa, kwa ukubwa unaoonekana. + +![Ukaguzi uliorejelewa katika futa ya tovuti](./Image2.png) + +### 3. Taarifa muhimu zaidi iko wazi {#the-most-important-info-is-obvious} + +Kwa mifumo tata, onyesha tu data muhimu zaidi. Amua nini ni muhimu zaidi, na upe kipaumbele onyesho lake. +Taarifa nyingi mno ni mzigo na kwa kawaida watumiaji huegemea kwenye kipande kimoja cha taarifa wanapofanya maamuzi. Katika DeFi, hii pengine itakuwa APR kwenye programu za mavuno na LTV kwenye programu za kukopesha. + +**Vidokezo:** + +- Utafiti wa mtumiaji utafichua kipimo muhimu zaidi +- Fanya taarifa muhimu iwe kubwa, na maelezo mengine yawe madogo na yasiyoonekana sana +- Watu hawasomi, wanapitia kwa haraka; hakikisha usanifu wako unaweza kupitiwa kwa haraka + +**Mfano:** Tokeni kubwa zenye rangi kamili ni rahisi kupata wakati wa kupitia kwa haraka. APR ni kubwa na imeangaziwa kwa rangi ya lafudhi. + +![Tokeni na APR ni rahisi kupata](./Image3.png) + +### 4. Istilahi zilizo wazi {#clear-terminology} + +Istilahi inapaswa kueleweka na kuwa sahihi. +Lugha ya kitaalamu inaweza kuwa kizuizi kikubwa, kwa sababu inahitaji uundaji wa mtindo mpya kabisa wa kiakili. Watumiaji hawawezi kuhusisha usanifu na maneno, vishazi na dhana ambazo tayari wanazijua. Kila kitu kinaonekana kutatanisha na kigeni, na kuna mteremko mkali wa kujifunza kabla hata ya kujaribu kukitumia. Mtumiaji anaweza kuikaribia DeFi akitaka kuweka akiba ya pesa, na anachokipata ni: Uchimbaji, kilimo, kuweka hisa, utoaji, hongo, kuba, kabati, veTokens, uwekezaji, epoch, algorithm zilizogatuliwa, ukwasi unaomilikiwa na itifaki… +Jaribu kutumia istilahi rahisi zitakazoeleweka na kundi kubwa zaidi la watu. Usibuni istilahi mpya kabisa kwa ajili ya mradi wako tu. + +**Vidokezo:** + +- Tumia istilahi rahisi na thabiti +- Tumia lugha iliyopo kadri iwezekanavyo +- Usibuni istilahi zako mwenyewe +- Fuata kaida zinapojitokeza +- Waelimishe watumiaji kadri iwezekanavyo + +**Mfano:** +"Zawadi zako" ni istilahi inayoeleweka kwa mapana, isiyoegemea upande wowote; si neno jipya lililobuniwa kwa ajili ya mradi huu. Zawadi hizo zimeonyeshwa kwa dola za kimarekani (USD) ili kuendana na mifumo ya kiakili ya ulimwengu halisi, hata kama zawadi zenyewe ziko katika tokeni nyingine. + +![Zawadi za tokeni, zikionyeshwa kwa Dola za Marekani ](./Image4.png) + +### 5. Vitendo ni vifupi iwezekanavyo {#actions-are-as-short-as-possible} + +Harakisha mwingiliano wa mtumiaji kwa kuweka pamoja vitendo vidogo. +Hii inaweza kufanywa katika kiwango cha mkataba-erevu, na pia katika UI. Mtumiaji hapaswi kuhama kutoka sehemu moja ya mfumo kwenda nyingine - au kuondoka kabisa kwenye mfumo - ili kukamilisha kitendo cha kawaida. + +**Vidokezo:** + +- Unganisha "Idhinisha" na vitendo vingine inapowezekana +- Kusanya hatua za kusaini karibu iwezekanavyo + +**Mfano:** Kuunganisha "ongeza ukwasi" na "weka hisa" ni mfano rahisi wa kiongeza kasi kinachookoa mtumiaji muda na gesi. + +![Modali inayoonyesha swichi ya kuunganisha vitendo vya kuweka na kuweka hisa](./Image5.png) + +### 6. Miunganisho ya mtandao inaonekana na ni rahisi kubadilika {#network-connections-are-visible-and-flexible} + +Mfahamishe mtumiaji kuhusu mtandao gani ameunganishwa nao, na toa njia za mkato zilizo wazi za kubadilisha mtandao. +Hii ni muhimu hasa kwenye programu za minyororo mingi. Kazi kuu za programu bado zinapaswa kuonekana ukiwa haujaunganishwa au umeunganishwa kwenye mtandao usiokubalika. + +**Vidokezo:** + +- Onyesha sehemu kubwa ya programu iwezekanavyo ukiwa haujaunganishwa +- Onyesha ni mtandao gani mtumiaji ameunganishwa nao kwa sasa +- Usimlazimishe mtumiaji kwenda kwenye mkoba ili kubadilisha mtandao +- Ikiwa programu inamtaka mtumiaji kubadili mtandao, anzisha kitendo kutoka kwa mwito mkuu wa kuchukua hatua +- Ikiwa programu ina masoko au kuba za mitandao mingi, eleza wazi ni kundi gani mtumiaji analitazama kwa sasa + +**Mfano:** Muonyeshe mtumiaji ni mtandao gani ameunganishwa nao, na mruhusu kuubadilisha, katika upau wa programu. + +![Kitufe cha kushuka kinachoonyesha mtandao uliounganishwa](./Image6.png) + +### 7. Udhibiti kutoka kwenye programu, sio kwenye mkoba {#control-from-the-app-not-the-wallet} + +UI inapaswa kumwambia mtumiaji kila kitu anachohitaji kujua na kumpa udhibiti wa kila kitu anachohitaji kufanya. +Katika Web3, kuna vitendo unavyochukua katika UI, na vitendo unavyochukua kwenye mkoba. Kwa ujumla, unaanzisha kitendo katika UI, na kisha unakithibitisha kwenye mkoba. Watumiaji wanaweza kujisikia vibaya ikiwa nyuzi hizi mbili hazijaunganishwa kwa makini. + +**Vidokezo:** + +- Wasiliana hali ya mfumo kupitia maoni katika UI +- Weka rekodi ya historia yao +- Toa viungo vya kwenda kwenye vichunguzi vya bloku kwa ajili ya miamala ya zamani +- Toa njia za mkato za kubadilisha mitandao. + +**Mfano:** Kontena isiyoonekana sana humuonyesha mtumiaji tokeni husika alizonazo kwenye mkoba wake, na CTA kuu hutoa njia ya mkato ya kubadilisha mtandao. + +![CTA kuu inamshawishi mtumiaji kubadili mtandao](./Image7.png) diff --git a/public/content/translations/sw/developers/docs/design-and-ux/index.md b/public/content/translations/sw/developers/docs/design-and-ux/index.md new file mode 100644 index 00000000000..512968600a9 --- /dev/null +++ b/public/content/translations/sw/developers/docs/design-and-ux/index.md @@ -0,0 +1,86 @@ +--- +title: Ubuni na UX katika web3 +description: Utangulizi wa ubuni wa UX na utafiti katika nafasi ya web3 na Ethereum +lang: sw +--- + +Je, wewe ni mgeni katika kubuni na Ethereum? Hapa ndipo mahali pako sahihi. Jumuiya ya Ethereum imeandika rasilimali za kukutambulisha kwa ubuni wa web3 na misingi ya utafiti. Utajifunza kuhusu dhana za msingi ambazo zinaweza kutofautiana na ubuni mwingine wa programu ambao unaufahamu. + +Je, unahitaji uelewa wa kimsingi zaidi wa web3 kwanza? Angalia [**Kituo cha Kujifunza**](/learn/) + +## Anza na utafiti wa watumiaji {#start-with-user-research} + +Ubuni wenye ufanisi huenda zaidi ya kuunda violesura vya watumiaji vinavyovutia kwa mwonekano. Inahusisha kupata uelewa wa kina wa mahitaji ya mtumiaji, malengo, na mambo yanayochochea. Kwa hivyo, tunapendekeza sana kwamba wabunifu wote wafuate mchakato wa ubuni, kama vile [**mchakato wa almasi mbili**](https://en.wikipedia.org/wiki/Double_Diamond_\(design_process_model\)), ili kuhakikisha kuwa kazi yao ni ya makusudi na imepangwa. + +- [Web3 inahitaji Watafiti na Wabunifu wengi zaidi wa UX](https://blog.akasha.org/akasha-conversations-9-web3-needs-more-ux-researchers-and-designers) - Muhtasari wa ukomavu wa sasa wa ubuni +- [Mwongozo rahisi wa Utafiti wa UX katika web3](https://uxplanet.org/a-complete-guide-to-ux-research-for-web-3-0-products-d6bead20ebb1) - Mwongozo rahisi wa jinsi ya kufanya utafiti +- [Jinsi ya Kukaribia Maamuzi ya UX katika Web3](https://archive.devcon.org/archive/watch/6/data-empathy-how-to-approach-ux-decisions-in-web3/) - Muhtasari mfupi wa utafiti wa kiasi na wa ubora na tofauti kati ya hizo mbili (video, dakika 6) +- [Kuwa mtafiti wa UX katika web3](https://medium.com/@georgia.rakusen/what-its-like-being-a-user-researcher-in-web3-6a4bcc096849) - Mtazamo binafsi kuhusu jinsi ilivyo kuwa mtafiti wa UX katika web3 + +## Uchunguzi wa utafiti katika web3 {#research-in-web3} + +Hii ni orodha iliyoratibiwa ya utafiti wa watumiaji uliofanywa katika web3 ambao unaweza kusaidia katika maamuzi ya ubuni na bidhaa au kutumika kama msukumo wa kufanya utafiti wako mwenyewe. + +| Eneo la kuzingatia | Jina | +| :---------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Ujumuishaji wa Kripto | [The Reown Pulse 2024: Hisia za Watumiaji wa Kripto na Matumizi](https://reown.com/blog/unveiling-walletconnects-consumer-crypto-report) | +| Ujumuishaji wa Kripto | [CRADL: UX katika Sarafu ya kidigitali](https://docs.google.com/presentation/d/1s2OPSH5sMJzxRYaJSSRTe8W2iIoZx0PseIV-WeZWD1s/edit?usp=sharing) | +| Ujumuishaji wa Kripto | [CRADL: Ujumuishaji katika Sarafu ya kidigitali](https://docs.google.com/presentation/d/1R9nFuzA-R6SxaGCKhoMbE4Vxe0JxQSTiHXind3LVq_w/edit?usp=sharing) | +| Ujumuishaji wa Kripto | [Ripoti ya UX ya Bitcoin](https://github.com/patestevao/BitcoinUX-report/blob/master/report.md) | +| Ujumuishaji wa Kripto | [ConSensys: Hali ya mtazamo wa Web3 duniani kote 2023](https://consensys.io/insight-report/web3-and-crypto-global-survey-2023) | +| Ujumuishaji wa Kripto | [NEAR: Kuharakisha safari kuelekea kukubalika](https://drive.google.com/file/d/1VuaQP4QSaQxR5ddQKTMGI0b0rWdP7uGn/view) | +| Kusimamisha | [OpenUX: UX ya Mwendeshaji wa Nodi ya Rocket Pool](https://storage.googleapis.com/rocketpool/RocketPool-NodeOperator-UX-Report-Jan-2024.pdf) | +| Kusimamisha | [Kusimamisha: Mwenendo muhimu, mambo ya kujifunza, na utabiri - Msimamishaji wa Eth](https://lookerstudio.google.com/u/0/reporting/cafcee00-e1af-4148-bae8-442a88ac75fa/page/p_ja2srdhh2c?s=hmbTWDh9hJo) | +| Kusimamisha | [Kusimamisha kwa Programu Nyingi](https://github.com/threshold-network/UX-User-Research/blob/main/Multi-App%20Staking%20\(MAS\)/iterative-user-study/MAS%20Iterative%20User%20Study.pdf) | +| DAO | [Sasisho la Utafiti wa DAO 2022: Wajenzi wa DAO Wanahitaji Nini?](https://blog.aragon.org/2022-dao-research-update/) | +| DeFi | [Mabwawa ya Huduma](https://github.com/threshold-network/UX-User-Research/tree/main/Keep%20Coverage%20Pool) | +| DeFi | [ConSensys: Ripoti ya Utafiti wa Watumiaji wa DeFi 2022](https://cdn2.hubspot.net/hubfs/4795067/ConsenSys%20Codefi-Defi%20User%20ResearchReport.pdf) | +| Metaverse | [Metaverse: Ripoti ya Utafiti wa Watumiaji](https://www.politico.com/f/?id=00000187-7685-d820-a7e7-7e85d1420000) | +| Metaverse | [Kwenda Safari: Kuwatafiti Watumiaji katika Metaverse](https://archive.devcon.org/archive/watch/6/going-on-safari-researching-users-in-the-metaverse/?tab=YouTube) (video, dakika 27) | + +## Ubuni wa web3 {#design-for-web3} + +- [Kitabu cha Mwongozo wa Ubuni wa UX wa Web3](https://web3ux.design/) - Mwongozo wa vitendo wa kubuni programu za Web3 +- [Kanuni za Ubuni wa Web3](https://medium.com/@lyricalpolymath/web3-design-principles-f21db2f240c1) - Mfumo wa kanuni za UX kwa mfumo mtawanyo wa kimamlaka unaotegemea mnyororo wa bloku +- [Kanuni za Ubuni wa Mnyororo wa bloku](https://medium.com/design-ibm/blockchain-design-principles-599c5c067b6e) - Masomo yaliyojifunza na timu ya ubuni wa mnyororo wa bloku katika IBM +- [Neueux.com](https://neueux.com/apps) - Maktaba ya UI ya mtiririko wa watumiaji yenye chaguo mbalimbali za kuchuja +- [Mgogoro wa Utumiaji wa Web3: Unachohitaji Kujua!](https://www.youtube.com/watch?v=oBSXT_6YDzg) - Mjadala wa jopo kuhusu changamoto za ujenzi wa miradi unaozingatia wasanidi programu (video, dakika 34) + +## Kuanza {#getting-started} + +- [Heuristiki za Web3](/developers/docs/design-and-ux/heuristics-for-web3/) - Heuristiki 7 za ubuni wa kiolesura cha Web3 +- [Mbinu Bora za Ubuni wa DEX](/developers/docs/design-and-ux/dex-design-best-practice/) - Mwongozo wa kubuni Exchange Zisizogatuliwa + +## Mifano ya Uchunguzi wa Ubuni wa Web3 {#design-case-studies} + +- [Deep Work Studio](https://www.deepwork.studio/case-studies) +- [Kuuza NFT kwenye OpenSea](https://builtformars.com/case-studies/opensea) +- [Uchambuzi wa UX wa mkoba jinsi mikoba inavyohitaji kubadilika](https://www.youtube.com/watch?v=oTpuxYj8JWI&ab_channel=ETHDenver) (video, dakika 20) + +## Zawadi za Ubuni {#bounties} + +- [Dework](https://app.dework.xyz/bounties) +- [Hackathons za Buildbox](https://app.buidlbox.io/) +- [Hackathons za ETHGlobal](https://ethglobal.com/) + +## DAO na jumuiya za ubuni {#design-daos-and-communities} + +Shiriki katika mashirika ya kitaalamu yanayoendeshwa na jamii au jiunge na vikundi vya ubuni kujadili mada na mienendo inayohusiana na ubuni na utafiti na wanachama wengine. + +- [Vectordao.com](https://vectordao.com/) +- [Deepwork.studio](https://www.deepwork.studio/) +- [We3.co](https://we3.co/) +- [Openux.xyz](https://openux.xyz/) + +## Mifumo ya Ubuni na rasilimali zingine za ubuni {#design-systems-and-resources} + +- [Ubuni wa Optimism](https://www.figma.com/@optimism) (Figma) +- [Mfumo wa Ubuni wa Ethereum.org](https://www.figma.com/@ethdotorg) (Figma) +- [Finity, mfumo wa ubuni kutoka Polygon](https://www.figma.com/community/file/1073921725197233598/finity-design-system) (Figma) +- [Mfumo wa Ubuni wa Kleros](https://www.figma.com/community/file/999852250110186964/kleros-design-system) (Figma) +- [Mfumo wa Ubuni wa Safe](https://www.figma.com/community/file/1337417127407098506/safe-design-system) (Figma) +- [Mfumo wa Ubuni wa ENS](https://thorin.ens.domains/) +- [Mfumo wa Ubuni wa Mirror](https://degen-xyz.vercel.app/) + +**Makala na miradi iliyoorodheshwa kwenye ukurasa huu siyo idhini rasmi**, na hutolewa kwa madhumuni ya habari pekee. +Tunaongeza viungo kwenye ukurasa huu kulingana na vigezo katika [sera yetu ya uorodheshaji](/contributing/design/adding-design-resources). Ikiwa ungependa tuongeze mradi/makala, hariri ukurasa huu kwenye [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/sw/developers/docs/development-networks/index.md b/public/content/translations/sw/developers/docs/development-networks/index.md new file mode 100644 index 00000000000..7ad6f9c0b4d --- /dev/null +++ b/public/content/translations/sw/developers/docs/development-networks/index.md @@ -0,0 +1,71 @@ +--- +title: Mitandao ya Maendeleo +description: Muhtasari wa mitandao ya maendeleo na zana zinazopatikana kusaidia kujenga programu za Ethereum. +lang: sw +--- + +Unapounda programu ya Ethereum na mikataba-erevu, utataka kuiendesha kwenye mtandao wa ndani ili kuona jinsi inavyofanya kazi kabla ya kuipeleka. + +Sawa na jinsi unavyoweza kuendesha seva ya ndani kwenye kompyuta yako kwa ajili ya maendeleo ya wavuti, unaweza kutumia mtandao wa maendeleo kuunda mfano wa mnyororo wa bloku wa ndani ili kujaribu mfumo wako uliotawanywa. Mitandao hii ya maendeleo ya Ethereum hutoa vipengele vinavyoruhusu uradidi wa haraka zaidi kuliko testnet ya umma (kwa mfano, huhitaji kushughulika na kupata ETH kutoka kwenye bomba la testnet). + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuelewa [misingi ya mkusanyiko wa Ethereum](/developers/docs/ethereum-stack/) na [mitandao ya Ethereum](/developers/docs/networks/) kabla ya kuzama katika mitandao ya maendeleo. + +## Mtandao wa maendeleo ni nini? {#what-is-a-development-network} + +Mitandao ya maendeleo kimsingi ni wateja wa Ethereum (utekelezaji wa Ethereum) iliyoundwa mahususi kwa maendeleo ya ndani. + +**Kwa nini usiendeshe tu nodi ya kawaida ya Ethereum kwenye kompyuta yako?** + +Wewe _unaweza_ [kuendesha nodi](/developers/docs/nodes-and-clients/#running-your-own-node) lakini kwa kuwa mitandao ya maendeleo imeundwa kwa ajili ya maendeleo, mara nyingi huja na vipengele rahisi kama vile: + +- Kuweka data kwenye mnyororo wako wa bloku wa ndani kwa njia bainifu (k.m., akaunti zenye salio za ETH) +- Kuzalisha bloku papo hapo kwa kila muamala inaopokea, kwa utaratibu na bila kuchelewa +- Utendaji ulioboreshwa wa utatuzi na uwekaji kumbukumbu + +## Zana zinazopatikana {#available-projects} + +**Kumbuka**: [Mifumo mingi ya maendeleo](/developers/docs/frameworks/) hujumuisha mtandao wa maendeleo uliojengewa ndani. Tunapendekeza kuanza na mfumo ili [kuweka mazingira yako ya maendeleo ya ndani](/developers/local-environment/). + +### Mtandao wa Hardhat {#hardhat-network} + +Mtandao wa ndani wa Ethereum ulioundwa kwa ajili ya maendeleo. Inakuruhusu kupeleka mikataba yako, kuendesha majaribio yako na kutatua msimbo wako. + +Mtandao wa Hardhat huja ukiwa umejengewa ndani na Hardhat, mazingira ya maendeleo ya Ethereum kwa wataalamu. + +- [Tovuti](https://hardhat.org/) +- [GitHub](https://github.com/NomicFoundation/hardhat) + +### Minyororo Kioleza ya Ndani {#local-beacon-chains} + +Baadhi ya wateja wa makubaliano wana zana zilizojengewa ndani za kuanzisha minyororo kioleza ya ndani kwa madhumuni ya majaribio. Maagizo ya Lighthouse, Nimbus na Lodestar yanapatikana: + +- [Testnet ya ndani kwa kutumia Lodestar](https://chainsafe.github.io/lodestar/contribution/advanced-topics/setting-up-a-testnet#post-merge-local-testnet/) +- [Testnet ya ndani kwa kutumia Lighthouse](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) + +### Minyororo-Majaribio ya Umma ya Ethereum {#public-beacon-testchains} + +Pia kuna utekelezaji wa majaribio mawili ya umma yanayodumishwa ya Ethereum: Sepolia na Hoodi. Testnet inayopendekezwa yenye usaidizi wa muda mrefu ni Hoodi, ambayo mtu yeyote yuko huru kuthibitisha. Sepolia hutumia seti ya wathibitishaji wenye ruhusa, kumaanisha hakuna ufikiaji wa jumla kwa wathibitishaji wapya kwenye testnet hii. + +- [Launchpad ya Kusimamisha ya Hoodi](https://hoodi.launchpad.ethereum.org/) + +### Kifurushi cha Ethereum cha Kurtosis {#kurtosis} + +Kurtosis ni mfumo wa ujenzi wa mazingira ya majaribio ya makontena mengi ambayo huwawezesha wasanidi programu kuanzisha kwenye kompyuta zao mifano inayoweza kurudiwa ya mitandao ya mnyororo wa bloku. + +Kifurushi cha Ethereum cha Kurtosis kinaweza kutumika kuanzisha haraka testnet ya Ethereum inayoweza kugeuzwa, inayoweza kupanuka sana, na ya faragha juu ya Docker au Kubernetes. Kifurushi hiki kinasaidia wateja wote wakuu wa Safu ya Utekelezaji (EL) na Safu ya Makubaliano (CL). Kurtosis hushughulikia kwa urahisi ramani zote za bandari za ndani na miunganisho ya huduma kwa mtandao wakilishi utakaotumika katika uthibitishaji na mtiririko wa kazi wa majaribio unaohusiana na miundombinu ya msingi ya Ethereum. + +- [Kifurushi cha mtandao wa Ethereum](https://github.com/kurtosis-tech/ethereum-package) +- [Tovuti](https://www.kurtosis.com/) +- [GitHub](https://github.com/kurtosis-tech/kurtosis) +- [Nyaraka](https://docs.kurtosis.com/) + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Mifumo ya uundaji](/developers/docs/frameworks/) +- [Weka mazingira ya maendeleo ya ndani](/developers/local-environment/) diff --git a/public/content/translations/sw/developers/docs/ethereum-stack/index.md b/public/content/translations/sw/developers/docs/ethereum-stack/index.md new file mode 100644 index 00000000000..08031be5c37 --- /dev/null +++ b/public/content/translations/sw/developers/docs/ethereum-stack/index.md @@ -0,0 +1,61 @@ +--- +title: Utangulizi wa mpororo wa Ethereum +description: Mapitio ya safu mbalimbali za mpororo wa Ethereum na jinsi zinavyofanya kazi pamoja. +lang: sw +--- + +Kama ilivyo kwa mpororo wowote wa programu, "mpororo kamili wa Ethereum" utatofautiana kutoka mradi hadi mradi kulingana na malengo yako. + +Hata hivyo, kuna vijenzi vya msingi vya Ethereum ambavyo husaidia kutoa muundo wa kiakili wa jinsi programu za kompyuta zinavyoingiliana na mnyororo wa bloku wa Ethereum. Kuelewa safu za mpororo kutakusaidia kuelewa njia tofauti ambazo Ethereum inaweza kuunganishwa katika miradi ya programu. + +## Safu ya 1: Mashine halisi ya Ethereum {#ethereum-virtual-machine} + +[Mashine halisi ya Ethereum (EVM)](/developers/docs/evm/) ni mazingira ya uendeshaji kwa mikataba-erevu kwenye Ethereum. Mikataba-erevu yote na mabadiliko ya hali kwenye mnyororo wa bloku wa Ethereum hutekelezwa na [miamala](/developers/docs/transactions/). EVM hushughulikia uchakataji wote wa miamala kwenye mtandao wa Ethereum. + +Kama ilivyo kwa mashine yoyote halisi, EVM huunda safu ya dhahania kati ya msimbo unaotekelezwa na mashine inayotekeleza (nodi ya Ethereum). Hivi sasa, EVM inaendeshwa kwenye maelfu ya nodi zilizosambazwa kote ulimwenguni. + +Kwa undani, EVM hutumia seti ya maagizo ya opcode kutekeleza kazi maalum. Hizi (140 za kipekee) opcodes huruhusu EVM kuwa [kamilifu-kwa-Turing](https://en.wikipedia.org/wiki/Turing_completeness), ambayo ina maana kwamba EVM inaweza kukokotoa karibu kila kitu, ikipewa rasilimali za kutosha. + +Kama msanidi programu wa dapp, huhitaji kujua mengi kuhusu EVM isipokuwa kwamba ipo na kwamba inawezesha programu zote kwenye Ethereum kwa uhakika bila muda wa kupumzika. + +## Safu ya 2: Mikataba-erevu {#smart-contracts} + +[Mikataba-erevu](/developers/docs/smart-contracts/) ni programu zinazoweza kutekelezwa ambazo huendeshwa kwenye mnyororo wa bloku wa Ethereum. + +Mikataba-erevu huandikwa kwa kutumia [lugha maalum za programu](/developers/docs/smart-contracts/languages/) ambazo hukusanywa kuwa bytecode ya EVM (maagizo ya mashine ya kiwango cha chini yanayoitwa opcodes). + +Sio tu kwamba mikataba-erevu hutumika kama maktaba za chanzo-wazi, kimsingi ni huduma za API zilizo wazi ambazo zinafanya kazi kila wakati na haziwezi kuzimwa. Mikataba-erevu hutoa kazi za umma ambazo watumiaji na programu ([dapps](/developers/docs/dapps/)) wanaweza kuingiliana nazo, bila kuhitaji ruhusa. Programu yoyote inaweza kuunganishwa na mikataba-erevu iliyotumwa ili kutunga utendakazi, kama vile kuongeza [milisho ya data](/developers/docs/oracles/) au kusaidia ubadilishanaji wa tokeni. Zaidi ya hayo, mtu yeyote anaweza kutuma mikataba-erevu mipya kwa Ethereum ili kuongeza utendakazi maalum ili kukidhi mahitaji ya programu yake. + +Kama msanidi programu wa dapp, utahitaji kuandika mikataba-erevu ikiwa tu unataka kuongeza utendakazi maalum kwenye mnyororo wa bloku wa Ethereum. Unaweza kugundua kuwa unaweza kufikia mahitaji mengi au yote ya mradi wako kwa kuunganisha tu na mikataba-erevu iliyopo, kwa mfano ikiwa unataka kusaidia malipo kwa stablecoins au kuwezesha ubadilishanaji wa tokeni uliogatuliwa. + +## Safu ya 3: Nodi za Ethereum {#ethereum-nodes} + +Ili programu iweze kuingiliana na mnyororo wa bloku wa Ethereum, ni lazima iunganishe kwenye [nodi ya Ethereum](/developers/docs/nodes-and-clients/). Kuunganisha kwenye nodi hukuruhusu kusoma data ya mnyororo wa bloku na/au kutuma miamala kwenye mtandao. + +Nodi za Ethereum ni kompyuta zinazoendesha programu - mteja wa Ethereum. Mteja ni utekelezaji wa Ethereum unaothibitisha miamala yote katika kila bloku, na kuufanya mtandao kuwa salama na data kuwa sahihi. **Nodi za Ethereum ndizo mnyororo wa bloku wa Ethereum**. Kwa pamoja huhifadhi hali ya mnyororo wa bloku wa Ethereum na kufikia makubaliano kuhusu miamala ya kubadilisha hali ya mnyororo wa bloku. + +Kwa kuunganisha programu yako kwenye nodi ya Ethereum (kupitia [API ya JSON-RPC](/developers/docs/apis/json-rpc/)), programu yako inaweza kusoma data kutoka kwenye mnyororo wa bloku (kama vile salio la akaunti ya mtumiaji) na pia kutangaza miamala mipya kwenye mtandao (kama vile kuhamisha ETH kati ya akaunti za watumiaji au kutekeleza kazi za mikataba-erevu). + +## Safu ya 4: API za Wateja wa Ethereum {#ethereum-client-apis} + +Maktaba nyingi za urahisi (zilizoundwa na kudumishwa na jumuiya ya chanzo-wazi ya Ethereum) huruhusu programu zako kuunganisha na kuwasiliana na mnyororo wa bloku wa Ethereum. + +Ikiwa programu yako inayomkabili mtumiaji ni programu ya wavuti, unaweza kuchagua `npm install` [API ya JavaScript](/developers/docs/apis/javascript/) moja kwa moja kwenye frontend yako. Au labda utachagua kutekeleza utendakazi huu upande wa seva, ukitumia [API](/developers/docs/programming-languages/python/) ya [Python](/developers/docs/programming-languages/python/) au [Java](/developers/docs/programming-languages/java/). + +Ingawa API hizi si sehemu ya lazima ya mpororo, zinaondoa ugumu mwingi wa kuingiliana moja kwa moja na nodi ya Ethereum. Pia hutoa kazi za matumizi (k.m., kubadilisha ETH kuwa Gwei) ili kama msanidi programu uweze kutumia muda mchache kushughulikia ugumu wa wateja wa Ethereum na muda mwingi zaidi kulenga utendakazi maalum wa programu yako. + +## Safu ya 5: Programu za mtumiaji wa mwisho {#end-user-applications} + +Katika safu ya juu ya mpororo kuna programu zinazomkabili mtumiaji. Hizi ndizo programu za kawaida unazotumia na kuunda leo: hasa programu za wavuti na za simu. + +Njia unayotengeneza violesura hivi vya watumiaji inabaki kimsingi bila kubadilika. Mara nyingi watumiaji hawatahitaji kujua programu wanayotumia imejengwa kwa kutumia mnyororo wa bloku. + +## Uko tayari kuchagua mpororo wako? {#ready-to-choose-your-stack} + +Angalia mwongozo wetu wa [kuweka mazingira ya usanidi wa ndani](/developers/local-environment/) kwa ajili ya programu yako ya Ethereum. + +## Masomo zaidi {#further-reading} + +- [Usanifu wa programu ya Web 3.0](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/evm/index.md b/public/content/translations/sw/developers/docs/evm/index.md new file mode 100644 index 00000000000..55ae995b268 --- /dev/null +++ b/public/content/translations/sw/developers/docs/evm/index.md @@ -0,0 +1,88 @@ +--- +title: Mashine Halisi ya Ethereum (EVM) +description: Utangulizi wa mashine halisi ya Ethereum na jinsi inavyohusiana na serikali, miamala na mikataba mahiri. +lang: sw +--- + +Mashine halisi ya ethereum(EVM) ni mazingira ya mtandaoni yaliyotawanywa ambayo hutekeleza msimbo kwa uthabiti na kwa usalama katika nodi zote za Ethereum. Nodi huendesha EVM kutekeleza mkataba-erevu, kwa kutumia "[gesi](/developers/docs/gas/)" kupima juhudi za kikokotozi zinazohitajika kwa [shughuli](/developers/docs/evm/opcodes/), kuhakikisha ugawaji bora wa rasilimali na usalama wa mtandao. + +## Mahitaji ya awali {#prerequisites} + +Uelewa fulani wa msingi wa istilahi za kawaida katika sayansi ya kompyuta kama vile [baiti](https://wikipedia.org/wiki/Byte), [kumbukumbu](https://wikipedia.org/wiki/Computer_memory), na [rundo](https://wikipedia.org/wiki/Stack_\(abstract_data_type\)) ni muhimu ili kuelewa EVM. Pia itasaidia kuwa na uelewa mzuri wa dhana za kriptografia/mnyororo wa bloku kama vile [kazi za hashi](https://wikipedia.org/wiki/Cryptographic_hash_function) na [Merkle tree](https://wikipedia.org/wiki/Merkle_tree). + +## Kutoka leja hadi mashine ya hali {#from-ledger-to-state-machine} + +Mfano wa “daftari lililosambazwa” mara nyingi hutumika kuelezea kiambajengo kama sarafu ya mtandao, ambazo zinawezesha sarafu isiyo na kituo kimoja kwa kutumia zana za msingi za usimbaji fiche. Daftari hilo linaweka rekodi za shughuli ambazo lazima zizingatie seti ya sheria zinazodhibiti ni nini mtu anaweza na hawezi kufanya ili kubadilisha daftari hilo. Kwa mfano, anwani ya sarafu ya mtandaoni haiwezi kutumia sarafu ya mtandaoni zaidi ya ile ambayo tayari imepokea. Sheria hizi ndizo msingi wa miamala yote kwenye sarafu mtandaoni na viambajengo vingine vingi. + +Ingawa Ethereum ina sarafu yake ya kidigitali ya asili (ether) inayofuata karibu sheria zilezile angavu, pia huwezesha kazi yenye nguvu zaidi: [mkataba-erevu](/developers/docs/smart-contracts/). Kwa kipengele hiki ngumu zaidi, mlinganisho wa kisasa zaidi unahitajika. Badala ya kuwa leja iliyosambazwa, Ethereum ni [mashine ya hali](https://wikipedia.org/wiki/Finite-state_machine) iliyosambazwa. Hali ya Ethereum ni muundo mkubwa wa data ambao hauhifadhi tu akaunti zote na salio, bali pia _hali ya mashine_, ambayo inaweza kubadilika kutoka bloku moja hadi nyingine kulingana na seti ya sheria zilizobainishwa awali, na ambayo inaweza kutekeleza msimbo wowote wa mashine. Sheria maalum za kubadilisha hali kutoka kizuizi hadi kizuizi zinafafanuliwa na EVM. + +![Mchoro unaoonyesha muundo wa EVM](./evm.png) +_Mchoro umechukuliwa kutoka [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## Kazi ya mpito ya hali ya Ethereum {#the-ethereum-state-transition-function} + +EVM hufanya kama kazi ya hisabati ingekuwa: Kwa kuzingatia ingizo, hutoa matokeo ya kubaini. Kwa hivyo, inasaidia sana kuelezea Ethereum rasmi zaidi kama kuwa na **kazi ya mpito ya hali**: + +``` +Y(S, T)= S' +``` + +Kutokana na hali `(S)` ya zamani iliyo halali na seti mpya ya miamala halali `(T)`, kazi ya mpito ya hali ya Ethereum `Y(S, T)` hutoa hali mpya halali ya towe `S'` + +### Hali {#state} + +Katika muktadha wa Ethereum, hali ni muundo mkubwa wa data unaoitwa [modified Merkle Patricia Trie](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/), unaoshikilia [akaunti](/developers/docs/accounts/) zote zikiwa zimeunganishwa kwa hashi na kupunguzwa hadi hashi moja ya mzizi iliyohifadhiwa kwenye mnyororo wa bloku. + +### Miamala {#transactions} + +Miamala ni maagizo yaliyosainiwa kwa njia fiche kutoka kwa akaunti. Kuna aina mbili za miamala: zile zinazosababisha simu za ujumbe na zile zinazosababisha kuundwa kwa mkataba. + +Uundaji wa mkataba husababisha kuundwa kwa akaunti mpya ya mkataba yenye bytecode ya [mkataba-erevu](/developers/docs/smart-contracts/anatomy/) iliyokusanywa. Wakati wowote akaunti nyingine inapopiga simu kwa mkataba huo, hutekeleza bytecode yake. + +## Maagizo ya EVM {#evm-instructions} + +EVM hutekeleza kama [mashine ya rundo](https://wikipedia.org/wiki/Stack_machine) yenye kina cha vipengee 1024. Kila kipengee ni neno la biti 256, ambalo lilichaguliwa kwa urahisi wa matumizi na ufichaji wa taarifa wa 256-biti (kama vile heshi za Keccak-256 au saini za secp256k1). + +Wakati wa utekelezaji, EVM hudumisha _kumbukumbu_ ya muda mfupi (kama safu ya baiti yenye anwani ya neno), ambayo haidumu kati ya miamala. + +### Ghala la muda + +Ghala la muda ni hifadhi ya ufunguo-thamani kwa kila muamala inayofikiwa kupitia opcodes za `TSTORE` na `TLOAD`. Hudumu katika wito wote wa ndani wakati wa muamala mmoja lakini husafishwa mwishoni mwa muamala. Tofauti na kumbukumbu, ghala la muda huundwa kama sehemu ya hali ya EVM badala ya fremu ya utekelezaji, lakini haihifadhiwi kwenye hali ya kimataifa. Ghala la muda huwezesha ugawanaji wa hali ya muda kwa ufanisi wa gesi katika wito wa ndani wakati wa muamala. + +### Ghala + +Mikataba ina _ghala_ la Merkle Patricia trie (kama safu ya maneno yenye anwani ya neno), inayohusishwa na akaunti husika na ni sehemu ya hali ya kimataifa. Ghala hili la kudumu ni tofauti na ghala la muda, ambalo linapatikana tu kwa muda wa muamala mmoja na haliundi sehemu ya trie ya ghala la kudumu ya akaunti. + +### Opcodes + +Bytecode iliyokusanywa ya mkataba-erevu hutekelezwa kama idadi ya [opcode](/developers/docs/evm/opcodes) za EVM, ambazo hufanya shughuli za kawaida za rundo kama `XOR`, `AND`, `ADD`, `SUB`, n.k. EVM pia inatekeleza idadi ya shughuli za rundo maalum kwa mnyororo wa bloku, kama vile `ADDRESS`, `BALANCE`, `BLOCKHASH`, n.k. Seti ya opcode pia inajumuisha `TSTORE` na `TLOAD`, ambazo hutoa ufikiaji wa ghala la muda. + +![Mchoro unaoonyesha wapi gesi inahitajika kwa shughuli za EVM](../gas/gas.png) +_Michoro imechukuliwa kutoka [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## Utekelezaji wa EVM {#evm-implementations} + +Utekelezaji wote wa EVM lazima uzingatie vipimo vilivyoelezwa katika karatasi ya kiufundi ya Ethereum. + +Katika historia ya miaka kumi ya Ethereum, EVM imefanyiwa marekebisho kadhaa, na kuna utekelezaji kadhaa wa EVM katika lugha mbalimbali za programu. + +[Programu za utekelezaji za Ethereum](/developers/docs/nodes-and-clients/#execution-clients) zinajumuisha utekelezaji wa EVM. Kwa kuongezea, kuna utekelezaji mwingi wa pekee, pamoja na: + +- [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_ + +## Masomo zaidi {#further-reading} + +- [Ethereum Yellowpaper](https://ethereum.github.io/yellowpaper/paper.pdf) +- [Jellopaper aka KEVM: Semantics of EVM in K](https://jellopaper.org/) +- [The Beigepaper](https://github.com/chronaeon/beigepaper) +- [Opcodes za Mashine Halisi ya Ethereum](https://www.ethervm.io/) +- [Marejeleo Mwingiliano ya Opcodes za Mashine Halisi ya Ethereum](https://www.evm.codes/) +- [Utangulizi mfupi katika nyaraka za Solidity](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) +- [Mastering Ethereum - Mashine Halisi ya Ethereum](https://github.com/ethereumbook/ethereumbook/blob/openedition/13evm.asciidoc) + +## Mada Husika {#related-topics} + +- [Gesi](/developers/docs/gas/) diff --git a/public/content/translations/sw/developers/docs/evm/opcodes/index.md b/public/content/translations/sw/developers/docs/evm/opcodes/index.md new file mode 100644 index 00000000000..33d443cf964 --- /dev/null +++ b/public/content/translations/sw/developers/docs/evm/opcodes/index.md @@ -0,0 +1,177 @@ +--- +title: Opcodes za EVM +description: Orodha ya opcode zote zinazopatikana kwa ajili ya mashine halisi ya ethereum. +lang: sw +--- + +## Muhtasari {#overview} + +Hili ni toleo lililosasishwa la ukurasa wa marejeleo wa EVM katika [wolflo/evm-opcodes](https://github.com/wolflo/evm-opcodes). +Pia imetolewa kutoka kwa [Karatasi ya Njano](https://ethereum.github.io/yellowpaper/paper.pdf), [Karatasi ya Jello](https://jellopaper.org/evm/), na utekelezaji wa [geth](https://github.com/ethereum/go-ethereum). +Hii imekusudiwa kuwa rejeleo linalofikika, lakini sio kali hasa. +Ikiwa unataka kuwa na uhakika wa usahihi na kufahamu kila kisa cha pembeni, kutumia Karatasi ya Jello au utekelezaji wa mteja kunashauriwa. + +Unatafuta rejeleo shirikishi? Angalia [evm.codes](https://www.evm.codes/). + +Kwa operesheni zenye gharama za gesi zinazobadilika, tazama [gas.md](https://github.com/wolflo/evm-opcodes/blob/main/gas.md). + +💡 Dokezo la haraka: Ili kuona mistari yote, tumia `[shift] + sogeza` ili kusogeza mlalo kwenye kompyuta ya mezani. + +| Rafu | Jina | Gesi | Rafu ya Awali | Rafu ya Matokeo | Mem / Ghala | Maelezo | | +| :---: | :------------- | :---------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| 00 | STOP | 0 | | | | sitisha utekelezaji | | +| 01 | ADD | 3 | `a, b` | `a + b` | | kujumlisha kwa (u)int256 modulo 2\*\*256 | | +| 02 | MUL | 5 | `a, b` | `a * b` | | kuzidisha kwa (u)int256 modulo 2\*\*256 | | +| 03 | SUB | 3 | `a, b` | `a - b` | | kutoa kwa (u)int256 modulo 2\*\*256 | | +| 04 | DIV | 5 | `a, b` | `a // b` | | kugawanya kwa uint256 | | +| 05 | SDIV | 5 | `a, b` | `a // b` | | kugawanya kwa int256 | | +| 06 | MOD | 5 | `a, b` | `a % b` | | modulo ya uint256 | | +| 07 | SMOD | 5 | `a, b` | `a % b` | | modulo ya int256 | | +| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | kujumlisha kwa (u)int256 modulo N | | +| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | kuzidisha kwa (u)int256 modulo N | | +| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | kipeo cha uint256 modulo 2\*\*256 | | +| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [panua ishara](https://wikipedia.org/wiki/Sign_extension) `x` kutoka baiti `(b+1)` hadi baiti 32 | | +| 0C-0F | _sio halali_ | | | | | | | +| 10 | LT | 3 | `a, b` | `a < b` | | uint256 chini ya | | +| 11 | GT | 3 | `a, b` | `a > b` | | uint256 kubwa kuliko | | +| 12 | SLT | 3 | `a, b` | `a < b` | | int256 chini ya | | +| 13 | SGT | 3 | `a, b` | `a > b` | | int256 kubwa kuliko | | +| 14 | EQ | 3 | `a, b` | `a == b` | | usawa wa (u)int256 | | +| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 ni sifuri | | +| 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` | | baiti ya `i` ya (u)int256 `x`, kutoka kushoto | | +| 1B | SHL | 3 | `shift, val` | `val << shift` | | sogeza kushoto | | +| 1C | SHR | 3 | `shift, val` | `val >> shift` | | sogeza kulia kimantiki | | +| 1D | SAR | 3 | `shift, val` | `val >> shift` | | sogeza kulia kihesabu | | +| 1E-1F | _sio halali_ | | | | | | | +| 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 | _sio halali_ | | | | | | | +| 30 | ADDRESS | 2 | `.` | `anwani(this)` | | anwani ya mkataba unaotekelezwa | | +| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.salio` | | salio, katika wei | | +| 32 | ORIGIN | 2 | `.` | `tx.origin` | | anwani iliyoanzisha tx | | +| 33 | CALLER | 2 | `.` | `msg.sender` | | anwani ya mtumaji wa msg | | +| 34 | CALLVALUE | 2 | `.` | `msg.value` | | thamani ya msg, katika wei | | +| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | soma neno kutoka data ya msg kwenye faharasa `idx` | | +| 36 | CALLDATASIZE | 2 | `.` | `len(msg.data)` | | urefu wa data ya msg, katika baiti | | +| 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] | nakili data ya msg | | +| 38 | CODESIZE | 2 | `.` | `len(this.msimbo)` | | urefu wa msimbo wa mkataba unaotekelezwa, katika baiti | | +| 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.msimbo[ost:ost+len-1] | nakili bytecode ya mkataba unaotekelezwa | +| 3A | GASPRICE | 2 | `.` | `tx.gasprice` | | bei ya gesi ya tx, katika wei kwa kila kitengo cha gesi [\*\*](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.msimbo)` | | ukubwa wa msimbo katika anwani, katika baiti | | +| 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.msimbo[ost:ost+len-1] | nakili msimbo kutoka `addr` | | +| 3D | RETURNDATASIZE | 2 | `.` | `ukubwa` | | ukubwa wa data iliyorejeshwa kutoka wito wa mwisho wa nje, katika baiti | | +| 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] | nakili data iliyorejeshwa kutoka wito wa mwisho wa nje | | +| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hashi` | | hashi = addr.exists ? keccak256(addr.msimbo) : 0 | | +| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | | | +| 41 | COINBASE | 2 | `.` | `block.coinbase` | | anwani ya mpendekezaji wa bloku ya sasa | | +| 42 | TIMESTAMP | 2 | `.` | `block.timestamp` | | mhuri wa muda wa bloku ya sasa | | +| 43 | NUMBER | 2 | `.` | `block.number` | | nambari ya bloku ya sasa | | +| 44 | PREVRANDAO | 2 | `.` | `randomness beacon` | | randomness beacon | | +| 45 | GASLIMIT | 2 | `.` | `block.gaslimit` | | kikomo cha gesi cha bloku ya sasa | | +| 46 | CHAINID | 2 | `.` | `chain_id` | | sukuma [id ya mnyororo](https://eips.ethereum.org/EIPS/eip-155) ya sasa kwenye rafu | | +| 47 | SELFBALANCE | 5 | `.` | `anwani(this).salio` | | salio la mkataba unaotekelezwa, katika wei | | +| 48 | BASEFEE | 2 | `.` | `block.basefee` | | ada ya msingi ya bloku ya sasa | | +| 49 | BLOBHASH | 3 | `idx` | `tx.blob_versioned_hashes[idx]` | | [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) | | +| 4A | BLOBBASEFEE | 2 | `.` | `block.blobbasefee` | | ada ya msingi ya blob ya bloku ya sasa ([EIP-7516](https://eips.ethereum.org/EIPS/eip-7516)) | | +| 4B-4F | _sio halali_ | | | | | | | +| 50 | POP | 2 | `_anon` | `.` | | ondoa kipengee kutoka juu ya rafu na uitupe | | +| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | soma neno kutoka kwenye kumbukumbu kwa 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 | andika neno kwenye kumbukumbu | | +| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost] := val && 0xFF | andika baiti moja kwenye kumbukumbu | | +| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `ufunguo` | `ghala[ufunguo]` | | soma neno kutoka kwenye ghala | | +| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `ufunguo, val` | `.` | ghala[ufunguo] := val | andika neno kwenye ghala | | +| 56 | JUMP | 8 | `dst` | `.` | | `$pc := dst` weka alama kuwa `pc` inapewa tu ikiwa `dst` ni jumpdest halali | | +| 57 | JUMPI | 10 | `dst, sharti` | `.` | | `$pc := sharti ? dst : $pc + 1` | | +| 58 | PC | 2 | `.` | `$pc` | | kihesabu cha programu | | +| 59 | MSIZE | 2 | `.` | `len(mem)` | | ukubwa wa kumbukumbu katika muktadha wa sasa wa utekelezaji, katika baiti | | +| 5A | GAS | 2 | `.` | `gesiIliyobaki` | | | | +| 5B | JUMPDEST | 1 | | | weka alama ya eneo halali la kuruka | eneo halali la kuruka kwa mfano eneo la kuruka sio ndani ya data ya kusukuma | | +| 5C | TLOAD | 100 | `ufunguo` | `tstorage[ufunguo]` | | soma neno kutoka kwenye ghala la muda ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | | +| 5D | TSTORE | 100 | `ufunguo, val` | `.` | tstorage[ufunguo] := val | andika neno kwenye ghala la muda ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | | +| 5E | MCOPY | 3+3\*words+[A0](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `dstOst, ost, len` | `.` | mem[dstOst] := mem[ost:ost+len] | nakili kumbukumbu kutoka eneo moja hadi jingine ([EIP-5656](https://eips.ethereum.org/EIPS/eip-5656)) | | +| 5F | PUSH0 | 2 | `.` | `uint8` | | sukuma thamani ya kudumu 0 kwenye rafu | | +| 60 | PUSH1 | 3 | `.` | `uint8` | | sukuma thamani ya baiti-1 kwenye rafu | | +| 61 | PUSH2 | 3 | `.` | `uint16` | | sukuma thamani ya baiti-2 kwenye rafu | | +| 62 | PUSH3 | 3 | `.` | `uint24` | | sukuma thamani ya baiti-3 kwenye rafu | | +| 63 | PUSH4 | 3 | `.` | `uint32` | | sukuma thamani ya baiti-4 kwenye rafu | | +| 64 | PUSH5 | 3 | `.` | `uint40` | | sukuma thamani ya baiti-5 kwenye rafu | | +| 65 | PUSH6 | 3 | `.` | `uint48` | | sukuma thamani ya baiti-6 kwenye rafu | | +| 66 | PUSH7 | 3 | `.` | `uint56` | | sukuma thamani ya baiti-7 kwenye rafu | | +| 67 | PUSH8 | 3 | `.` | `uint64` | | sukuma thamani ya baiti-8 kwenye rafu | | +| 68 | PUSH9 | 3 | `.` | `uint72` | | sukuma thamani ya baiti-9 kwenye rafu | | +| 69 | PUSH10 | 3 | `.` | `uint80` | | sukuma thamani ya baiti-10 kwenye rafu | | +| 6A | PUSH11 | 3 | `.` | `uint88` | | sukuma thamani ya baiti-11 kwenye rafu | | +| 6B | PUSH12 | 3 | `.` | `uint96` | | sukuma thamani ya baiti-12 kwenye rafu | | +| 6C | PUSH13 | 3 | `.` | `uint104` | | sukuma thamani ya baiti-13 kwenye rafu | | +| 6D | PUSH14 | 3 | `.` | `uint112` | | sukuma thamani ya baiti-14 kwenye rafu | | +| 6E | PUSH15 | 3 | `.` | `uint120` | | sukuma thamani ya baiti-15 kwenye rafu | | +| 6F | PUSH16 | 3 | `.` | `uint128` | | sukuma thamani ya baiti-16 kwenye rafu | | +| 70 | PUSH17 | 3 | `.` | `uint136` | | sukuma thamani ya baiti-17 kwenye rafu | | +| 71 | PUSH18 | 3 | `.` | `uint144` | | sukuma thamani ya baiti-18 kwenye rafu | | +| 72 | PUSH19 | 3 | `.` | `uint152` | | sukuma thamani ya baiti-19 kwenye rafu | | +| 73 | PUSH20 | 3 | `.` | `uint160` | | sukuma thamani ya baiti-20 kwenye rafu | | +| 74 | PUSH21 | 3 | `.` | `uint168` | | sukuma thamani ya baiti-21 kwenye rafu | | +| 75 | PUSH22 | 3 | `.` | `uint176` | | sukuma thamani ya baiti-22 kwenye rafu | | +| 76 | PUSH23 | 3 | `.` | `uint184` | | sukuma thamani ya baiti-23 kwenye rafu | | +| 77 | PUSH24 | 3 | `.` | `uint192` | | sukuma thamani ya baiti-24 kwenye rafu | | +| 78 | PUSH25 | 3 | `.` | `uint200` | | sukuma thamani ya baiti-25 kwenye rafu | | +| 79 | PUSH26 | 3 | `.` | `uint208` | | sukuma thamani ya baiti-26 kwenye rafu | | +| 7A | PUSH27 | 3 | `.` | `uint216` | | sukuma thamani ya baiti-27 kwenye rafu | | +| 7B | PUSH28 | 3 | `.` | `uint224` | | sukuma thamani ya baiti-28 kwenye rafu | | +| 7C | PUSH29 | 3 | `.` | `uint232` | | sukuma thamani ya baiti-29 kwenye rafu | | +| 7D | PUSH30 | 3 | `.` | `uint240` | | sukuma thamani ya baiti-30 kwenye rafu | | +| 7E | PUSH31 | 3 | `.` | `uint248` | | sukuma thamani ya baiti-31 kwenye rafu | | +| 7F | PUSH32 | 3 | `.` | `uint256` | | sukuma thamani ya baiti-32 kwenye rafu | | +| 80 | DUP1 | 3 | `a` | `a, a` | | nakili thamani ya 1 kwenye rafu | | +| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | nakili thamani ya 2 kwenye rafu | | +| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | nakili thamani ya 3 kwenye rafu | | +| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | nakili thamani ya 4 kwenye rafu | | +| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 5 kwenye rafu | | +| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 6 kwenye rafu | | +| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 7 kwenye rafu | | +| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 8 kwenye rafu | | +| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 9 kwenye rafu | | +| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 10 kwenye rafu | | +| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 11 kwenye rafu | | +| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 12 kwenye rafu | | +| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 13 kwenye rafu | | +| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 14 kwenye rafu | | +| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 15 kwenye rafu | | +| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | nakili thamani ya 16 kwenye rafu | | +| 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(kumbukumbu[ost:ost+len-1]) | | +| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(kumbukumbu[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(kumbukumbu[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(kumbukumbu[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(kumbukumbu[ost:ost+len-1], topic0, topic1, topic2, topic3) | | +| A5-EF | _sio halali_ | | | | | | | +| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | anwani = keccak256(rlp([anwani(this), this.nonce])) | | +| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gesi, addr, val, argOst, argLen, retOst, retLen | `mafanikio` | mem[retOst:retOst+retLen-1] := returndata | | | +| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gesi, addr, val, argOst, argLen, retOst, retLen` | `mafanikio` | mem[retOst:retOst+retLen-1] = returndata | sawa na DELEGATECALL, lakini haisambazi msg.sender na msg.value asili | | +| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | rejesha mem[ost:ost+len-1] | | +| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gesi, addr, argOst, argLen, retOst, retLen` | `mafanikio` | 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` | | anwani = keccak256(0xff ++ anwani(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | | +| F6-F9 | _sio halali_ | | | | | | | +| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gesi, addr, argOst, argLen, retOst, retLen` | `mafanikio` | mem[retOst:retOst+retLen-1] := returndata | | | +| FB-FC | _sio halali_ | | | | | | | +| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | rejesha(mem[ost:ost+len-1]) | | +| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | opcode batili iliyoteuliwa - [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` | `.` | | hutuma ETH zote kwa `addr`; ikiwa itatekelezwa katika muamala sawa na ule mkataba ulipoundwa, inaharibu mkataba | | diff --git a/public/content/translations/sw/developers/docs/frameworks/index.md b/public/content/translations/sw/developers/docs/frameworks/index.md new file mode 100644 index 00000000000..0db4454b832 --- /dev/null +++ b/public/content/translations/sw/developers/docs/frameworks/index.md @@ -0,0 +1,157 @@ +--- +title: Mifumo ya Maendeleo ya Dapp +description: Gundua faida za mifumo na ulinganishe chaguo zinazopatikana. +lang: sw +--- + +## Utangulizi wa mifumo {#introduction-to-frameworks} + +Kuunda dapp kamili kunahitaji +sehemu tofauti za teknolojia. Mifumo ya programu inajumuisha vipengele vingi vinavyohitajika +au hutoa mifumo rahisi ya programu-jalizi ili kuchagua zana +unazotaka. + +Mifumo huja na utendaji mwingi wa moja kwa moja, +kama vile: + +- Vipengele vya kuunda mfano wa mnyororo wa bloku. +- Huduma za kukusanya na kujaribu mikataba yako mahiri. +- Viongezeo vya ukuzaji wa mteja ili kuunda programu yako inayomkabili mtumiaji + ndani ya mradi/hazina sawa. +- Mipangilio ya kuunganisha kwenye mitandao ya Ethereum na kupeleka + mikataba, iwe kwa mfano unaoendeshwa nchini, au mojawapo ya + mitandao ya umma ya Ethereum. +- Usambazaji wa programu uliogatuliwa - miunganisho na chaguo za hifadhi + kama vile IPFS. + +## Mahitaji ya awali {#prerequisites} + +Kabla ya kuingia kwa undani kwenye mifumo, tunapendekeza kwanza usome utangulizi wetu wa [dapps](/developers/docs/dapps/) na [safu ya Ethereum](/developers/docs/ethereum-stack/). + +## Mifumo inayopatikana {#available-frameworks} + +**Foundry** - **_Foundry ni seti ya zana yenye kasi ya ajabu, inayobebeka na ya moduli kwa ajili ya maendeleo ya programu za Ethereum_** + +- [Sakinisha Foundry](https://book.getfoundry.sh/) +- [Kitabu cha Foundry](https://book.getfoundry.sh/) +- [Gumzo la jumuiya ya Foundry kwenye Telegram](https://t.me/foundry_support) +- [Awesome Foundry](https://github.com/crisgarner/awesome-foundry) + +**Hardhat -** **_Mazingira ya maendeleo ya Ethereum kwa wataalamu._** + +- [hardhat.org](https://hardhat.org) +- [GitHub](https://github.com/nomiclabs/hardhat) + +**Ape -** **_Zana ya maendeleo ya mkataba-erevu kwa Pythonistas, Wanasayansi wa Data, na Wataalamu wa Usalama._** + +- [Nyaraka](https://docs.apeworx.io/ape/stable/) +- [GitHub](https://github.com/ApeWorX/ape) + +**Web3j -** **_Jukwaa la kuendeleza programu za mnyororo wa bloku kwenye JVM._** + +- [Ukurasa wa nyumbani](https://www.web3labs.com/web3j-sdk) +- [Nyaraka](https://docs.web3j.io) +- [GitHub](https://github.com/web3j/web3j) + +**ethers-kt -** **_Maktaba ya Async, ya utendaji wa juu ya Kotlin/Java/Android kwa minyororo ya bloku inayotumia EVM._** + +- [GitHub](https://github.com/Kr1ptal/ethers-kt) +- [Mifano](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) +- [Discord](https://discord.gg/rx35NzQGSb) + +**Create Eth App -** **_Unda programu zinazoendeshwa na Ethereum kwa amri moja. Inakuja na ofa pana ya mifumo ya UI na violezo vya DeFi vya kuchagua._** + +- [GitHub](https://github.com/paulrberg/create-eth-app) +- [Violezo](https://github.com/PaulRBerg/create-eth-app/tree/develop/templates) + +**Scaffold-Eth -** **_Vipengele na ndoano za Ethers.js + Hardhat + React za web3: kila kitu unachohitaji ili kuanza kujenga mifumo iliyotawanywa inayoendeshwa na mikataba-erevu._** + +- [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) + +**Tenderly -** **_Jukwaa la maendeleo la Web3 linalowawezesha wasanidi programu wa mnyororo wa bloku kujenga, kupima, kurekebisha, kufuatilia, na kuendesha mikataba-erevu na kuboresha UX ya dapp._** + +- [Tovuti](https://tenderly.co/) +- [Nyaraka](https://docs.tenderly.co/) + +**The Graph -** **_The Graph kwa ajili ya kuuliza data ya mnyororo wa bloku kwa ufanisi._** + +- [Tovuti](https://thegraph.com/) +- [Mafunzo](/developers/tutorials/the-graph-fixing-web3-data-querying/) + +**Alchemy -** **_Jukwaa la Maendeleo la Ethereum._** + +- [alchemy.com](https://www.alchemy.com/) +- [GitHub](https://github.com/alchemyplatform) +- [Discord](https://discord.com/invite/alchemyplatform) + +**NodeReal -** **_Jukwaa la Maendeleo la Ethereum._** + +- [Nodereal.io](https://nodereal.io/) +- [GitHub](https://github.com/node-real) +- [Discord](https://discord.gg/V5k5gsuE) + +**thirdweb SDK -** **_Jenga programu za web3 zinazoweza kuingiliana na mikataba-erevu yako kwa kutumia SDK na CLI zetu zenye nguvu._** + +- [Nyaraka](https://portal.thirdweb.com/sdk/) +- [GitHub](https://github.com/thirdweb-dev/) + +**Chainstack -** **_Jukwaa la Maendeleo la Web3 (Ethereum na vinginevyo)._** + +- [chainstack.com](https://www.chainstack.com/) +- [GitHub](https://github.com/chainstack) +- [Discord](https://discord.gg/BSb5zfp9AT) + +**Crossmint -** **_Jukwaa la maendeleo la web3 la kiwango cha biashara, linalokuruhusu kuunda programu za NFT kwenye minyororo yote mikuu ya EVM (na mingineyo)._** + +- [Tovuti](https://www.crossmint.com) +- [Nyaraka](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) + +**Brownie -** **_Mazingira ya maendeleo yanayotegemea Python na mfumo wa majaribio._** + +- [Nyaraka](https://eth-brownie.readthedocs.io/en/latest/) +- [GitHub](https://github.com/eth-brownie/brownie) +- **Kwa sasa Brownie haitunzwi** + +**OpenZeppelin SDK -** **_Seti ya Zana ya Mwisho ya Mikataba-Erevu: Mkusanyiko wa zana za kukusaidia kuendeleza, kuandaa, kuboresha, kupeleka na kuingiliana na mikataba-erevu._** + +- [OpenZeppelin Defender SDK](https://docs.openzeppelin.com/defender/sdk) +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-sdk) +- [Jukwaa la Jumuiya](https://forum.openzeppelin.com/c/support/17) +- **Maendelezo ya OpenZeppelin SDK yamekoma** + +**Catapulta -** **_Zana ya kupeleka mikataba-erevu ya minyororo mingi, fanya uthibitishaji kiotomatiki katika wachunguzi wa bloku, fuatilia mikataba-erevu iliyopelekwa na ushiriki ripoti za upelekaji, plug-n-play kwa miradi ya Foundry na Hardhat._** + +- [Tovuti](https://catapulta.sh/) +- [Nyaraka](https://catapulta.sh/docs) +- [Github](https://github.com/catapulta-sh) + +**GoldRush (inayoendeshwa na Covalent) -** **_GoldRush hutoa seti kamili zaidi ya API ya data ya mnyororo wa bloku kwa wasanidi programu, wachambuzi, na biashara. Iwe unajenga dashibodi ya DeFi, mkoba, roboti ya biashara, wakala wa AI au jukwaa la kufuata sheria, API za data hutoa ufikiaji wa haraka, sahihi, na rafiki kwa msanidi programu kwa data muhimu ya onchain unayohitaji_** + +- [Tovuti](https://goldrush.dev/) +- [Nyaraka](https://goldrush.dev/docs/chains/ethereum) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + +**Wake -** **_Mfumo wa Python wa yote-kwa-mmoja kwa ajili ya kupima mikataba, fuzzing, upelekaji, skanning ya udhaifu na urambazaji wa msimbo._** + +- [Ukurasa wa nyumbani](https://getwake.io/) +- [Nyaraka](https://ackeeblockchain.com/wake/docs/latest/) +- [GitHub](https://github.com/Ackee-Blockchain/wake) +- [Kiendelezi cha VS Code](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) + +**Veramo -** **_Mfumo wa chanzo huria, wa moduli na usioegemea upande wowote unaorahisisha wasanidi programu wa mfumo uliotawanywa kujenga vitambulisho vilivyogatuliwa na stakabadhi zinazoweza kuthibitishwa katika programu zao._** + +- [Ukurasa wa nyumbani](https://veramo.io/) +- [Nyaraka](https://veramo.io/docs/basics/introduction) +- [GitHub](https://github.com/uport-project/veramo) +- [Discord](https://discord.com/invite/FRRBdjemHV) +- [Kifurushi cha NPM](https://www.npmjs.com/package/@veramo/core) + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Weka mazingira ya maendeleo ya ndani](/developers/local-environment/) diff --git a/public/content/translations/sw/developers/docs/gas/index.md b/public/content/translations/sw/developers/docs/gas/index.md new file mode 100644 index 00000000000..645bb58ba3a --- /dev/null +++ b/public/content/translations/sw/developers/docs/gas/index.md @@ -0,0 +1,151 @@ +--- +title: Gesi na ada +metaTitle: "Gesi na ada za Ethereum: Maelezo ya kiufundi" +description: Jifunze kuhusu ada za gesi za Ethereum, jinsi zinavyokokotolewa, na jukumu lake katika usalama wa mtandao na uchakataji wa miamala. +lang: sw +--- + +Gesi ni muhimu kwa mtandao wa Ethereum. Ni mafuta yanayoiwezesha kufanya kazi, kama vile gari linavyohitaji petroli ili kufanya kazi. + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri zaidi, tunapendekeza usome kwanza kuhusu [miamala](/developers/docs/transactions/) na [EVM](/developers/docs/evm/). + +## Gesi ni nini? {#what-is-gas} + +Gesi hurejelea kitengo kinachopima kiasi cha juhudi za kihesabu zinazohitajika kutekeleza shughuli maalumu kwenye mtandao wa Ethereum. + +Kwa sababu kila muamala wa Ethereum unahitaji rasilimali za kompyuta ili kutekelezwa, rasilimali hizo lazima zilipiwe ili kuhakikisha Ethereum sio hatarishi dhidi ya barua taka na haiwezi kukwama kwenye mzunguko wa kompyuta usio na mwisho. Malipo kwa ajili ya hesabu hufanywa kwa njia ya ada ya gesi. + +Ada ya gesi ni **kiasi cha gesi kinachotumika kufanya operesheni fulani, kikizidishwa na gharama ya kila kitengo cha gesi**. Ada inalipwa bila kujali kama muamala unafanikiwa au hautafanikiwa. + +![Mchoro unaoonyesha mahali gesi inahitajika katika operesheni za EVM](./gas.png) +_Mchoro umechukuliwa kutoka [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +Ada za gesi lazima zilipwe kwa kutumia sarafu ya asili ya Ethereum, ether (ETH). Bei za gesi huwekwa kwa gwei, ambayo ni kiwango kidogo cha ETH. Kila gwei ni sawa na sehemu ya bilioni moja ya ETH (0.000000001 ETH au 10-9ETH). + +Kwa mfano, badala ya kusema kuwa gesi yako inagharimu ether 0.000000001, unaweza kusema gesi yako inagharimu gwei 1. + +Neno 'gwei' ni ufupisho wa 'giga-wei', likimaanisha 'bilioni wei'. Gwei moja ni sawa na bilioni wei. Wei yenyewe (iliyoitwa jina la [Wei Dai](https://wikipedia.org/wiki/Wei_Dai), muundaji wa [b-money](https://www.investopedia.com/terms/b/bmoney.asp)) ndiyo sehemu ndogo zaidi ya ETH. + +## Ni jinsi gani gesi inapigiwa mahesabu? {#how-are-gas-fees-calculated} + +Unaweza weka kiwango cha gesi ambacho upo tayari kulipa pale unapotaka kufanya muamala. Kwa kutoa kiasi fulani cha gesi, unajilipia ili muamala wako ujumuishwe katika kitalu kinachofuata. Ikiwa utatoa kidogo sana, wathibitishaji itawawia vigumu kuchagua muamala wako ujumuishwe, ikimaanisha muamala wako unaweza kutekelezwa kwa kuchelewa au usitekelezwe kabisa. Ukitoa kiwango kikubwa zaidi, inawezekana ukapoteza baadhi ya ETH. Sasa, unaweza kugundua kiwango gani unaweza kulipia? + +Jumla ya gesi unayolipa imegawanywa katika vipengele viwili: `ada ya msingi` na `ada ya kipaumbele` (bakshishi). + +`Ada ya msingi` huwekwa na itifaki—unapaswa kulipa angalau kiasi hiki ili muamala wako uchukuliwe kuwa halali. `Ada ya kipaumbele` ni bakshishi unayoongeza kwenye ada ya msingi ili kufanya muamala wako uvutie kwa wathibitishaji ili wauchague kwa ajili ya kujumuishwa kwenye kitalu kinachofuata. + +Muamala unaolipa `ada ya msingi` pekee ni halali kitaalamu lakini hauwezekani kujumuishwa kwa sababu haitoi motisha kwa wathibitishaji kuuchagua badala ya muamala mwingine wowote. Ada 'sahihi' ya `kipaumbele` huamuliwa na matumizi ya mtandao wakati unapotuma muamala wako—ikiwa kuna mahitaji mengi, huenda ikabidi uweke ada yako ya `kipaumbele` juu zaidi, lakini wakati kuna mahitaji kidogo, unaweza kulipa kidogo. + +Kwa mfano, hebu tuseme Jordan anapaswa kumlipa Taylor ETH 1. Uhamisho wa ETH unahitaji vitengo 21,000 vya gesi, na ada ya msingi ni gwei 10. Jordan anajumuisha ada ya kipaumbele ya gwei 2. + +Jumla ya ada itakuwa sawa sawa na: + +`vitengo vya gesi vilivyotumika * (ada ya msingi + ada ya kipaumbele)` + +ambapo `ada ya msingi` ni thamani iliyowekwa na itifaki na `ada ya kipaumbele` ni thamani iliyowekwa na mtumiaji kama bakshishi kwa mthibitishaji. + +k.m., `21,000 * (10 + 2) = 252,000 gwei` (0.000252 ETH). + +Wakati Jordan anapotuma pesa, ETH 1.000252 zitatolewa kutoka kwenye akaunti ya Jordan. Taylor atapewa ETH 1.0000. Mthibitishaji atapokea ada ya kipaumbele ya ETH 0.000042. `Ada ya msingi` ya ETH 0.00021 inachomwa. + +### Ada ya msingi {#base-fee} + +Kila kitalu kina ada ya msingi ambacho kinafanya kazi kama bei ya akiba. Ili kustahili kujumuishwa katika kitalu bei iliyotolewa kwa kila gesi lazima angalau iwe sawa na ada ya msingi. Ada ya msingi huhesabiwa kwa kujitegemea na kitalu cha sasa na badala yake huamuliwa na vitalu vilivyotangulia, na kufanya ada za muamala zitabirike zaidi kwa watumiaji. Kitalu kinapoundwa, **ada hii ya msingi "inachomwa"**, na kuondolewa kwenye mzunguko. + +Ada ya msingi hukokotolewa kwa fomula inayolinganisha ukubwa wa kitalu kilichopita (kiasi cha gesi iliyotumika kwa miamala yote) na ukubwa unaolengwa (nusu ya kikomo cha gesi). Ada ya msingi itaongezeka au kupungua kwa upeo wa 12.5% kwa kila kitalu ikiwa ukubwa wa kitalu lengwa utazidi au kuwa chini ya lengo, mtawalia. Ukuaji huu wa kasi hufanya iwe vigumu kiuchumi kwa ukubwa wa kitalu kubaki juu kwa muda usiojulikana. + +| Namba ya Kitalu | Gesi Iliyojumuishwa | Kuongezeka kwa Ada | Ada ya Msingi ya Hivi Sasa | +| --------------- | ------------------: | --------------------: | -------------------------: | +| 1 | 18M | 0% | gwei 100 | +| 2 | 36M | 0% | gwei 100 | +| 3 | 36M | 12.5% | gwei 112.5 | +| 4 | 36M | 12.5% | gwei 126.6 | +| 5 | 36M | 12.5% | gwei 142.4 | +| 6 | 36M | 12.5% | gwei 160.2 | +| 7 | 36M | 12.5% | gwei 180.2 | +| 8 | 36M | 12.5% | gwei 202.7 | + +Katika jedwali lililo hapo juu, mfano unaonyeshwa kwa kutumia milioni 36 kama kikomo cha gesi. Kufuatia mfano huu, ili kuunda muamala kwenye kitalu nambari 9, mkoba utamjulisha mtumiaji kwa uhakika kwamba **ada ya msingi ya juu zaidi** itakayoongezwa kwenye kitalu kinachofuata ni `ada ya msingi ya sasa * 112.5%` au `202.7 gwei * 112.5% = 228.1 gwei`. + +Ni muhimu pia kuzingatia kuwa kuna uwezekano mdogo wa kuona vitalu vilivyojaa kwa muda mrefu kutokana na kasi ambayo ada ya msingi huongezeka kabla ya kitalu kujaa kabisa. + +| Namba ya Kitalu | Gesi Iliyojumuishwa | Kuongezeka kwa Ada | Ada ya Msingi ya Hivi Sasa | +| --------------------------------------------------- | --------------------------------------------------: | --------------------: | --------------------------------------------------: | +| 30 | 36M | 12.5% | gwei 2705.6 | +| ... | ... | 12.5% | ... | +| 50 | 36M | 12.5% | gwei 28531.3 | +| ... | ... | 12.5% | ... | +| 100 | 36M | 12.5% | gwei 10302608.6 | + +### Ada ya kipaumbele (bakshishi) {#priority-fee} + +Ada ya kipaumbele (bakshishi) huwapa wathibitishaji motisha wa kuongeza idadi ya miamala katika kitalu, wakizuiliwa tu na kikomo cha gesi cha kitalu. Bila bakshishi, mthibitishaji mwenye busara anaweza kujumuisha miamala michache—au hata sifuri—bila adhabu yoyote ya moja kwa moja ya safu ya utekelezaji au safu ya makubaliano, kwa kuwa zawadi za kusimamisha hazitegemei idadi ya miamala iliyo kwenye kitalu. Zaidi ya hayo, bakshishi huwaruhusu watumiaji kuwazidi wengine zabuni kwa ajili ya kipaumbele ndani ya kitalu kimoja, na hivyo kuashiria uharaka. + +### Ada ya juu zaidi {#maxfee} + +Ili kutekeleza muamala kwenye mtandao, watumiaji wanaweza kubainisha kiwango cha juu wanachotaka kulipia ili muamala wao utekelezwe. Kigezo hiki cha hiari kinajulikana kama `maxFeePerGas`. Ili muamala utekelezwe, ada ya juu kabisa lazima izidi jumla ya ada ya msingi na ada ya kipaumbele. Mtumaji wa muamala anarudishiwa tofauti kati ya ada ya juu kabisa na jumla ya ada ya msingi na ada ya kipaumbele. + +### Ukubwa wa bloku {#block-size} + +Kila kitalu kina ukubwa unaolengwa wa nusu ya kikomo cha gesi cha sasa, lakini ukubwa wa vitalu utaongezeka au kupungua kulingana na mahitaji ya mtandao, hadi kikomo cha kitalu kifikiwe (2x ukubwa wa kitalu lengwa). Itifaki hufikia wastani wa ukubwa wa kitalu wa usawa kwenye lengo kupitia mchakato wa _tâtonnement_. Hii inamaanisha ikiwa ukubwa wa kitalu ni mkubwa kuliko ukubwa unaolengwa wa kitalu, itifaki itaongeza ada ya msingi kwa kitalu kinachofuata. Vilevile, itifaki itapunguza ada ya msingi ikiwa ukubwa wa kitalu ni mdogo kuliko ukubwa unaolengwa wa kitalu. + +Kiasi ambacho ada ya msingi hurekebishwa ni sawia na umbali ambao ukubwa wa kitalu cha sasa upo kutoka kwenye lengo. Huu ni ukokotoaji wa mstari kutoka -12.5% kwa kitalu tupu, 0% kwenye ukubwa lengwa, hadi +12.5% kwa kitalu kinachofikia kikomo cha gesi. Kikomo cha gesi kinaweza kubadilika-badilika kadri muda unavyopita kulingana na ishara za wathibitishaji, na pia kupitia maboresho ya mtandao. Unaweza [kuona mabadiliko katika kikomo cha gesi kadiri muda unavyopita hapa](https://eth.blockscout.com/stats/averageGasLimit?interval=threeMonths). + +[Zaidi kuhusu vitalu](/developers/docs/blocks/) + +### Kukokotoa ada za gesi katika vitendo {#calculating-fees-in-practice} + +Unaweza kueleza waziwazi ni kiasi gani uko tayari kulipa ili muamala wako utekelezwe. Hata hivyo, watoa huduma wengi wa mkoba huweka moja kwa moja ada ya muamala inayopendekezwa (ada ya msingi + ada ya kipaumbele iliyopendekezwa) ili kupunguza ugumu kwa watumiaji wao. + +## Kwa nini ada ya gesi ipo? {#why-do-gas-fees-exist} + +Kiufupi, ada ya gesi husaidia kuifanya mtandao wa Ethereum kuwa na ulinzi wa kutosha. Kwa kuhitaji ada kwa kila hesabu inayotekelezwa kwenye mtandao, tunawazuia wahalifu wasijaze mtandao kwa vitu visivyo na maana. Ili kuepuka vitanzi visivyoisha vya bahati mbaya au vya uhasama au upotevu mwingine wa hesabu katika msimbo, kila muamala unahitajika kuweka kikomo cha hatua ngapi za hesabu za utekelezaji wa msimbo unazoweza kutumia. Kitengo cha msingi cha hesabu ni "gesi". + +Ingawa muamala unajumuisha kikomo, gesi yoyote isiyotumika katika muamala hurejeshwa kwa mtumiaji (k.m., `ada ya juu zaidi - (ada ya msingi + bakshishi)` hurejeshwa). + +![Mchoro unaoonyesha jinsi gesi isiyotumika inavyorejeshwa](../transactions/gas-tx.png) +_Mchoro umechukuliwa kutoka [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +## Nini ni kiwango cha gesi? {#what-is-gas-limit} + +Kikomo cha gesi hurejelea kiwango cha juu cha gesi unachotaka kutumia kwenye muamala. Miamala ngumu zaidi inayohusisha [mikataba-erevu](/developers/docs/smart-contracts/) huhitaji kazi zaidi ya kikokotozi, kwa hivyo huhitaji kikomo cha gesi cha juu zaidi kuliko malipo rahisi. Uhamisho wa kawaida wa ETH unahitaji kikomo cha gesi cha vitengo 21,000. + +Kwa mfano, ukiweka kikomo cha gesi cha 50,000 kwa uhamisho rahisi wa ETH, EVM itatumia 21,000, na utarudishiwa 29,000 vilivyobaki. Hata hivyo, ukiweka kiwango kidogo cha gesi, kwa mfano, kikomo cha gesi cha 20,000 kwa uhamisho rahisi wa ETH, muamala utashindikana wakati wa hatua ya uthibitisho. Utakataliwa kabla ya kujumuishwa kwenye kitalu, na hakuna gesi itakayotumiwa. Kwa upande mwingine, ikiwa muamala utaishiwa na gesi wakati wa utekelezaji (kwa mfano, mkataba mahiri unatumia gesi yote katikati ya mchakato), EVM itarudisha mabadiliko yoyote, lakini gesi yote iliyotolewa bado itatumiwa kwa kazi iliyofanywa. + +## Kwa nini ada ya gesi inaweza ikawa ya kiwango cha juu? {#why-can-gas-fees-get-so-high} + +Ada za juu za gesi zinatokana na umaarufu wa Ethereum. Ikiwa kuna mahitaji mengi mno, watumiaji wanapaswa kutoa kiasi cha juu zaidi cha ada ya kipaumbele ili kujaribu kushinda miamala ya watumiaji wengine. Ada ya kipaumbele ya juu inaweza kufanya muamala wako uwe na uwezekano mkubwa wa kuingia kwenye kitalu kinachofuata. Pia, programu tata zaidi za mikataba mahiri zinaweza kufanya shughuli nyingi kusaidia kazi zao, hivyo kuzifanya zitumie gesi nyingi. + +## Mipango ya kupunguza gharama za gesi {#initiatives-to-reduce-gas-costs} + +Maboresho ya [kuongeza uwezo](/roadmap/) wa Ethereum hatimaye yanapaswa kushughulikia baadhi ya masuala ya ada za gesi, ambayo, kwa upande wake, yatawezesha jukwaa kuchakata maelfu ya miamala kwa sekunde na kuongezeka kimataifa. + +Maboresho ya tabaka la pili ni mpango mkuu wa kuboresha kwa kiasi kikubwa gharama za gesi, uzoefu wa mtumiaji na uwezo wa mtandao. + +[Zaidi kuhusu uongezaji wa safu ya 2](/developers/docs/scaling/#layer-2-scaling) + +## Ufuatiliaji wa ada za gesi {#monitoring-gas-fees} + +Ikiwa ungependa kufuatilia bei za gesi, ili uweze kutuma ETH yako kwa bei nafuu, unaweza kutumia zana nyingi tofauti kama vile: + +- [Etherscan](https://etherscan.io/gastracker) _Kikadiriaji bei ya gesi ya muamala_ +- [Blockscout](https://eth.blockscout.com/gas-tracker) _Kikadiriaji bei ya gesi ya muamala cha chanzo huria_ +- [ETH Gas Tracker](https://www.ethgastracker.com/) _Fuatilia bei za gesi za Ethereum, na safu ya 2 ili kupunguza ada za muamala na kuokoa pesa_ +- [Blocknative ETH Gas Estimator](https://chrome.google.com/webstore/detail/blocknative-eth-gas-estim/ablbagjepecncofimgjmdpnhnfjiecfm) _Kiendelezi cha Chrome cha kukadiria gesi kinachoauni miamala ya urithi ya Aina 0 na miamala ya EIP-1559 ya Aina 2._ +- [Cryptoneur Gas Fees Calculator](https://www.cryptoneur.xyz/gas-fees-calculator) _Kokotoa ada za gesi katika sarafu ya nchi yako kwa aina tofauti za miamala kwenye Mtandao Mkuu, Arbitrum, na Polygon._ + +## Zana zinazohusiana {#related-tools} + +- [Blocknative's Gas Platform](https://www.blocknative.com/gas) _API ya kukadiria gesi inayoendeshwa na jukwaa la data la mempool la kimataifa la Blocknative_ +- [Gas Network](https://gas.network) Orakali za Gesi za Onchain. Inasaidia chaini 35+. + +## Masomo zaidi {#further-reading} + +- [Gesi ya Ethereum Imefafanuliwa](https://defiprime.com/gas) +- [Kupunguza matumizi ya gesi ya Mikataba-erevu yako](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) +- [Mbinu za Uboreshaji wa Gesi kwa Wasanidi Programu](https://www.alchemy.com/overviews/solidity-gas-optimization) +- [Nyaraka za EIP-1559](https://eips.ethereum.org/EIPS/eip-1559). +- [Rasilimali za EIP-1559 za Tim Beiko](https://hackmd.io/@timbeiko/1559-resources) +- [EIP-1559: Kutenganisha Mbinu na Memes](https://web.archive.org/web/20241126205908/https://research.2077.xyz/eip-1559-separating-mechanisms-from-memes) diff --git a/public/content/translations/sw/developers/docs/ides/index.md b/public/content/translations/sw/developers/docs/ides/index.md new file mode 100644 index 00000000000..6d25abcbb2a --- /dev/null +++ b/public/content/translations/sw/developers/docs/ides/index.md @@ -0,0 +1,64 @@ +--- +title: Mazingira Jumuishi ya Maendeleo (IDEs) +description: Jifunze kuhusu IDE za wavuti na za eneo-kazi kwa ukuzaji wa Ethereum, ikijumuisha Remix, Msimbo wa VS, na programu jalizi maarufu. +lang: sw +--- + +Linapokuja suala la kusanidi [mazingira jumuishi ya usanidi (IDE)](https://wikipedia.org/wiki/Integrated_development_environment), kutayarisha programu kwenye Ethereum ni sawa na kutayarisha mradi mwingine wowote wa programu. Kuna chaguo nyingi za kuchagua, kwa hivyo mwisho wa siku, chagua IDE au kihariri cha msimbo ambacho kinafaa zaidi mapendeleo yako. Uwezekano mkubwa zaidi, chaguo bora zaidi cha IDE kwa ukuzaji wa Ethereum yako ni IDE ambayo tayari unatumia kutengeneza programu za kitamaduni. + +## IDE za Wavuti {#web-based-ides} + +Ikiwa unatazamia kuchezea msimbo kabla ya [kusanidi mazingira ya usanidi wa ndani](/developers/local-environment/), programu hizi za wavuti zimeundwa maalum kwa ajili ya usanidi wa mkataba-erevu wa Ethereum. + +**[Remix](https://remix.ethereum.org/)** - **_IDE ya wavuti yenye uchanganuzi tuli uliojengewa ndani, na mashine pepe ya majaribio ya mnyororo wa bloku_** + +- [Nyaraka](https://remix-ide.readthedocs.io/en/latest/#) +- [Gitter](https://gitter.im/ethereum/remix) + +**[ChainIDE](https://chainide.com/)** - **_IDE ya minyororo mingi inayotegemea wingu_** + +- [Nyaraka](https://chainide.gitbook.io/chainide-english-1/) +- [Jukwaa la usaidizi](https://forum.chainide.com/) + +**[Replit (Solidity Starter - Beta)](https://replit.com/@replit/Solidity-starter-beta)** - **_Mazingira ya usanidi yanayoweza kubinafsishwa kwa ajili ya Ethereum yenye upakiaji upya wa haraka, ukaguzi wa makosa, na usaidizi wa hali ya juu wa testnet_** + +- [Nyaraka](https://docs.replit.com/) + +**[Tenderly Sandbox](https://sandbox.tenderly.co/)** - **_Mazingira ya haraka ya kuunda mfano wa awali ambapo unaweza kuandika, kutekeleza, na kurekebisha mikataba-erevu kwenye kivinjari kwa kutumia Solidity na JavaScript_** + +**[EthFiddle](https://ethfiddle.com/)** - **_IDE ya wavuti inayokuruhusu kuandika, kukusanya, na kurekebisha mkataba-erevu wako_** + +- [Gitter](https://gitter.im/loomnetwork/ethfiddle) + +## IDE za Eneo-kazi {#desktop-ides} + +IDE nyingi zilizoanzishwa zimeunda programu-jalizi ili kuboresha uzoefu wa maendeleo wa Ethereum. Kwa uchache, hutoa uangaziaji wa sintaksia kwa [lugha za mkataba-erevu](/developers/docs/smart-contracts/languages/). + +**Visual Studio Code -** **_IDE ya kitaalamu ya mifumo mbalimbali yenye usaidizi rasmi wa Ethereum_** + +- [Visual Studio Code](https://code.visualstudio.com/) +- [Sampuli za msimbo](https://github.com/Azure-Samples/blockchain/blob/master/blockchain-workbench/application-and-smart-contract-samples/readme.md) +- [GitHub](https://github.com/microsoft/vscode) + +**JetBrains IDEs (IntelliJ IDEA, etc.) -** **_Essential tools for software developers and teams_** + +- [JetBrains](https://www.jetbrains.com/) +- [GitHub](https://github.com/JetBrains) +- [IntelliJ Solidity](https://github.com/intellij-solidity/intellij-solidity/) + +**Remix Desktop -** **_Tumia Remix IDE kwenye mashine yako_** + +- [Pakua](https://github.com/ethereum/remix-desktop/releases) +- [GitHub](https://github.com/ethereum/remix-desktop) + +## Programu-jalizi na viendelezi {#plugins-extensions} + +- [solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) - Lugha ya Ethereum Solidity kwa ajili ya Visual Studio Code +- [Solidity + Hardhat for VS Code](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Usaidizi wa Solidity na Hardhat kutoka kwa timu ya Hardhat +- [Prettier Solidity](https://github.com/prettier-solidity/prettier-plugin-solidity) - Kiunda muundo wa msimbo kinachotumia prettier + +## Masomo zaidi {#further-reading} + +- [IDE za Ethereum](https://www.alchemy.com/list-of/web3-ides-on-ethereum) _- Orodha ya Alchemy ya IDE za Ethereum_ + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/index.md b/public/content/translations/sw/developers/docs/index.md new file mode 100644 index 00000000000..7125b796c61 --- /dev/null +++ b/public/content/translations/sw/developers/docs/index.md @@ -0,0 +1,25 @@ +--- +title: "''Nyaraka za maendeleo ya Ethereum.''" +description: "''Utangulizi wa nyaraka za watengenezaji kwenye ethereum.org." +lang: sw +--- + +''Nyaraka hizi zimeundwa kukusaidia kujenga kwa kutumia Ethereum.''. ''Inashughulikia Ethereum kama dhana, inaeleza mfumo wa kiteknolojia wa Ethereum, na inaandika mada za juu kwa matumizi na matumizi tata zaidi.''. + +''Huu ni mradi wa jamii wa chanzo huria, kwa hivyo jisikie huru kupendekeza mada mpya, kuongeza maudhui mapya na kutoa mifano wakati wowote unapofikiri inaweza kusaidia. Nyaraka zote zinaweza kuhaririwa kupitia GitHub – ikiwa huna uhakika jinsi ya kufanya, [fuata maagizo haya](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md). + +## Moduli za maendeleo {#development-modules} + +''Ikiwa hii ndio mara yako ya kwanza kujaribu maendeleo ya Ethereum, tunapendekeza uanze mwanzo na uendelee hatua kwa hatua kama vile unasoma kitabu.''. + +### Mada za msingi {#foundational-topics} + + + +### Rafu ya Ethereum {#ethereum-stack} + + + +### Ya hali ya juu {#advanced} + + diff --git a/public/content/translations/sw/developers/docs/intro-to-ether/index.md b/public/content/translations/sw/developers/docs/intro-to-ether/index.md new file mode 100644 index 00000000000..37d1ded9949 --- /dev/null +++ b/public/content/translations/sw/developers/docs/intro-to-ether/index.md @@ -0,0 +1,78 @@ +--- +title: "''Utangulizi wa kiufundi wa Ether''" +description: Utangulizi wa msanidi programu katika sarafu ya kripto. +lang: sw +--- + +## Mahitaji ya awali {#prerequisites} + +Ili kukusaidia kuelewa ukurasa huu vizuri, tunapendekeza usome kwanza [Utangulizi wa Ethereum](/developers/docs/intro-to-ethereum/). + +## Sarafu ya Kripto ni nini? {#what-is-a-cryptocurrency} + +Sarafu ya kripto ni njia ya mabadilishano inayolindwa na leja ya msingi wa mnyororo wa bloku. + +Njia ya mabadilishano ni kitu chochote kinacho kubaliwa na wengi kama malipo ya bidhaa na huduma na leja ni uhifadhi wa data ambao hufatilia miamala. Teknolojia ya mnyororo wa bloku inaruhusu watumiaji kufanya miamala klatika leja bila kutegemea mtu wa tatu anaye aminika kutunza leja. + +Sarafu ya kwanza ya kidijitali ilikuwa Bitcoin, iliyoundwa na Satoshi Nakamoto. Tangu kuanzishwa kwa Bitcoin mnamo mwaka 2009, watu wametengeneza maelfu ya sarafu za kidijitali katika minyororo wa bloku mbalimbali. + +## Ether ni nini? {#what-is-ether} + +**Ether (ETH)** ni sarafu ya kidigitali inayotumika kwa mambo mengi kwenye mtandao wa Ethereum. Kimsingi, ndiyo njia pekee inayokubalika ya malipo kwa ada za miamala, na baada ya [The Merge](/roadmap/merge), ether inahitajika ili kuthibitisha na kupendekeza vizuizi kwenye Mainnet. Ether pia hutumika kama aina ya msingi ya dhamana katika masoko ya ukopeshaji ya [DeFi](/defi), kama kipimo cha hesabu katika masoko ya NFT, kama malipo yanayopatikana kwa kutoa huduma au kuuza bidhaa halisi za ulimwengu, na zaidi. + +Ethereum inaruhusu wasanidi programu kuunda [**mfumo uliotawanywa (mfumo mtawanyo wa kimamlaka)**](/developers/docs/dapps), ambapo zote hushiriki bwawa la nguvu za kompyuta. ''Bwawa hili ni ndogo, hivyo Ethereum inahitaji utaratibu wa kuamua ni nani atakayelipata kulitumia.''. Vinginevyo, mfumo mtawanyo wa kimamlaka unaweza kwa bahati mbaya au kwa nia mbaya kutumia rasilimali zote za mtandao, jambo ambalo lingezuia wengine kuufikia. + +Sarafu ya kidigitali ya ether inasaidia utaratibu wa bei kwa nguvu za kompyuta za Ethereum. Watumiaji wanapotaka kufanya muamala, lazima walipe ether ili muamala wao utambuliwe kwenye mnyororo wa vizuizi. Gharama hizi za matumizi zinajulikana kama [ada za gesi](/developers/docs/gas/), na ada ya gesi inategemea kiasi cha nguvu ya kompyuta inayohitajika kutekeleza muamala na mahitaji ya mtandao mzima ya nguvu ya kompyuta kwa wakati huo. + +Kwa hivyo, hata kama mfumo mtawanyo wa kimamlaka wenye nia mbaya ungewasilisha kitanzi kisicho na kikomo, hatimaye muamala ungeishiwa na ether na kukoma, na kuruhusu mtandao kurudi katika hali ya kawaida. + +Ni [kawaida kuchanganya](https://abcnews.go.com/Business/bitcoin-slumps-week-low-amid-renewed-worries-chinese/story?id=78399845) Ethereum na ether — watu wanaporejelea "bei ya Ethereum," wanakuwa wanaelezea bei ya ether. + +## Kutengeneza ether {#minting-ether} + +Kutengeneza ni mchakato ambapo ether mpya huundwa kwenye leja ya Ethereum. Itifaki ya msingi ya Ethereum huunda ether mpya, na haiwezekani kwa mtumiaji kuunda ether. + +Ether hutengenezwa kama zawadi kwa kila kizuizi kinachopendekezwa na katika kila kituo cha ukaguzi cha epoch kwa shughuli zingine za mthibitishaji zinazohusiana na kufikia makubaliano. Jumla ya kiasi kilichotolewa inategemea idadi ya wathibitishaji na kiasi cha ether walichoweka kama hisa. Jumla ya utoaji huu umegawanywa kwa usawa miongoni mwa wathibitishaji katika hali bora ambapo wathibitishaji wote ni waaminifu na wako mtandaoni, lakini katika hali halisi, hutofautiana kulingana na utendaji wa mthibitishaji. Takriban 1/8 ya jumla ya utoaji huenda kwa mpendekezaji wa kizuizi; salio husambazwa kwa wathibitishaji wengine. Wapendekezaji wa vizuizi pia hupokea vidokezo kutoka kwa ada za miamala na mapato yanayohusiana na MEV, lakini hizi hutoka kwa ether iliyorejelezwa, si utoaji mpya. + +## Kuchoma ether {#burning-ether} + +Pamoja na kuunda ether kupitia zawadi za vizuizi, ether inaweza kuharibiwa kupitia mchakato unaoitwa 'kuchoma'. Wakati ether inapochomwa, huondolewa kwenye mzunguko kabisa. + +Uchomaji wa Ether hutokea katika kila muamala kwenye Ethereum. Watumiaji wanapolipa miamala yao, ada ya msingi ya gesi, iliyowekwa na mtandao kulingana na mahitaji ya miamala, huharibiwa. Hii, pamoja na ukubwa wa vizuizi unaobadilika na ada ya juu zaidi ya gesi, hurahisisha ukadiriaji wa ada ya muamala kwenye Ethereum. Mahitaji ya mtandao yanapokuwa juu, [vizuizi](https://eth.blockscout.com/block/22580057) vinaweza kuchoma ether nyingi kuliko wanavyotengeneza, na hivyo kusawazisha utoaji wa ether. + +Kuchoma ada ya msingi kunazuia uwezo wa mzalishaji wa kizuizi kuchezea miamala. Kwa mfano, kama wazalishaji wa vizuizi wangepokea ada ya msingi, wangeweza kujumuisha miamala yao bila malipo na kuongeza ada ya msingi kwa kila mtu mwingine. Vinginevyo, wangeweza kurejesha ada ya msingi kwa baadhi ya watumiaji nje ya mnyororo, na kusababisha soko la ada ya miamala lisilo wazi na gumu zaidi. + +## Madhehebu ya ether {#denominations} + +Kwa kuwa thamani ya miamala mingi kwenye Ethereum ni ndogo, ether ina madhehebu kadhaa ambayo yanaweza kurejelewa kama vipimo vidogo vya hesabu. Kati ya madhehebu haya, Wei na gwei ni muhimu hasa. + +Wei ni kiasi kidogo zaidi cha ether kinachowezekana, na matokeo yake, utekelezaji mwingi wa kiufundi, kama vile [Karatasi ya Njano ya Ethereum](https://ethereum.github.io/yellowpaper/paper.pdf), utategemea mahesabu yote katika Wei. + +Gwei, kifupi cha giga-wei, hutumiwa mara kwa mara kuelezea gharama za gesi kwenye Ethereum. + +| Dhehebu | Thamani katika ether | Matumizi ya Kawaida | +| ------- | -------------------- | ------------------------------------------ | +| Wei | 10-18 | Utekelezaji wa kiufundi | +| Gwei | 10-9 | Ada za gesi zinazoweza kusomwa na binadamu | + +## Kuhamisha ether {#transferring-ether} + +Kila muamala kwenye Ethereum una sehemu ya `value`, ambayo hubainisha kiasi cha ether kitakachohamishwa, kilichoonyeshwa kwa wei, kutumwa kutoka kwa anwani ya mtumaji hadi anwani ya mpokeaji. + +Wakati anwani ya mpokeaji ni [mkataba mahiri](/developers/docs/smart-contracts/), ether hii iliyohamishwa inaweza kutumika kulipia gesi wakati mkataba mahiri unapotekeleza msimbo wake. + +[Zaidi kuhusu miamala](/developers/docs/transactions/) + +## Kuuliza kuhusu ether {#querying-ether} + +Watumiaji wanaweza kuuliza kuhusu salio la ether la [akaunti](/developers/docs/accounts/) yoyote kwa kukagua sehemu ya `balance` ya akaunti, ambayo huonyesha umiliki wa ether ulioonyeshwa kwa wei. + +[Etherscan](https://etherscan.io) na [Blockscout](https://eth.blockscout.com) ni zana maarufu za kukagua salio za anwani kupitia programu za wavuti. Kwa mfano, [ukurasa huu wa Blockscout](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) unaonyesha salio la Wakfu wa Ethereum. Salio za akaunti pia zinaweza kuhojiwa kwa kutumia mikoba au moja kwa moja kwa kufanya maombi kwa nodi. + +## Masomo zaidi {#further-reading} + +- [Kufafanua ether na Ethereum](https://www.cmegroup.com/education/courses/introduction-to-ether/defining-ether-and-ethereum.html) – _Kundi la CME_ +- [Karatasi Nyeupe ya Ethereum](/whitepaper/): Pendekezo la asili la Ethereum. Hati hii inajumuisha maelezo ya ether na motisha nyuma ya uundaji wake. +- [Kikokotoo cha Gwei](https://www.alchemy.com/gwei-calculator): Tumia kikokotoo hiki cha gwei kubadilisha wei, gwei na ether kwa urahisi. Weka tu kiasi chochote cha wei, gwei, au ETH na uhesabu ubadilishaji kiotomatiki. + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/intro-to-ethereum/index.md b/public/content/translations/sw/developers/docs/intro-to-ethereum/index.md new file mode 100644 index 00000000000..4c73eaad07d --- /dev/null +++ b/public/content/translations/sw/developers/docs/intro-to-ethereum/index.md @@ -0,0 +1,124 @@ +--- +title: Utangulizi wa kiufundi wa Ethereum +description: Utangulizi wa msanidi programu wa dapp kwa dhana za msingi za Ethereum. +lang: sw +--- + +## Blockchain ni nini? {#what-is-a-blockchain} + +Mnyororo wa bloku ni hifadhidata ya umma ambayo husasishwa na kushirikiwa katika kompyuta nyingi kwenye mtandao. + +"Bloku" inarejelea data na hali kuhifadhiwa katika makundi mfululizo yanayojulikana kama "bloku". Ukimtumia mtu mwingine ETH, data ya muamala inahitaji kuongezwa kwenye bloku ili ifanikiwe. + +"Mnyororo" inarejelea ukweli kwamba kila bloku hurejelea bloku iliyotangulia kwa njia ya kriptografia. Kwa maneno mengine, bloku huunganishwa pamoja. Data katika bloku haiwezi kubadilika bila kubadilisha bloku zote zinazofuata, jambo ambalo lingehitaji makubaliano ya mtandao mzima. + +Kila kompyuta kwenye mtandao lazima ikubaliane juu ya kila bloku mpya na mnyororo kwa ujumla. Kompyuta hizi zinajulikana kama "nodi". Nodi huhakikisha kila mtu anayeingiliana na mnyororo wa bloku ana data sawa. Ili kukamilisha makubaliano haya yaliyosambazwa, minyororo ya bloku inahitaji utaratibu wa makubaliano. + +Ethereum hutumia [utaratibu wa makubaliano unaotegemea uthibitisho-wa-hisa](/developers/docs/consensus-mechanisms/pos/). Yeyote anayetaka kuongeza bloku mpya kwenye mnyororo lazima aweke hisa ya ETH - sarafu asili ya Ethereum - kama dhamana na aendeshe programu ya mthibitishaji. "Wathibitishaji" hawa wanaweza kisha kuchaguliwa kwa nasibu kupendekeza bloku ambazo wathibitishaji wengine huangalia na kuongeza kwenye mnyororo wa bloku. Kuna mfumo wa zawadi na adhabu unaowahamasisha sana washiriki kuwa waaminifu na kupatikana mtandaoni kadri iwezekanavyo. + +Ikiwa ungependa kuona jinsi data ya mnyororo wa bloku inavyopigwa hashi na kisha kuongezwa kwenye historia ya marejeleo ya bloku, hakikisha umeangalia [onyesho hili](https://andersbrownworth.com/blockchain/blockchain) la Anders Brownworth na utazame video inayoambatana hapa chini. + +Tazama Anders akielezea hashi katika minyororo ya bloku: + + + +## Ethereum ni nini? {#what-is-ethereum} + +Ethereum ni mnyororo wa bloku wenye kompyuta iliyopachikwa ndani yake. Ni msingi wa kujenga programu na mashirika kwa njia iliyogatuliwa, isiyo na ruhusa, na inayostahimili udhibiti. + +Katika ulimwengu wa Ethereum, kuna kompyuta moja, ya kisheria (inayoitwa Mashine Halisi ya Ethereum, au EVM) ambayo hali yake kila mtu kwenye mtandao wa Ethereum anakubaliana nayo. Kila mtu anayeshiriki katika mtandao wa Ethereum (kila nodi ya Ethereum) huweka nakala ya hali ya kompyuta hii. Zaidi ya hayo, mshiriki yeyote anaweza kutangaza ombi kwa kompyuta hii kufanya hesabu yoyote. Wakati wowote ombi kama hilo linapotangazwa, washiriki wengine kwenye mtandao huhakiki, huthibitisha, na kutekeleza ("execute") hesabu hiyo. Utekelezaji huu husababisha mabadiliko ya hali katika EVM, ambayo huwekwa na kuenezwa katika mtandao mzima. + +Maombi ya hesabu huitwa maombi ya muamala; rekodi ya miamala yote na hali ya sasa ya EVM huhifadhiwa kwenye mnyororo wa bloku, ambayo nayo huhifadhiwa na kukubaliwa na nodi zote. + +Taratibu za kriptografia huhakikisha kwamba mara tu miamala inapohakikiwa kuwa halali na kuongezwa kwenye mnyororo wa bloku, haiwezi kuchezewa baadaye. Taratibu hizo hizo pia huhakikisha kwamba miamala yote inasainiwa na kutekelezwa kwa "ruhusa" zinazofaa (hakuna mtu anayepaswa kuweza kutuma mali za kidijitali kutoka kwa akaunti ya Alice, isipokuwa Alice mwenyewe). + +## Ether ni nini? {#what-is-ether} + +**Ether (ETH)** ni sarafu asili ya kidijitali ya Ethereum. Madhumuni ya ETH ni kuruhusu soko la hesabu. Soko kama hilo hutoa motisha wa kiuchumi kwa washiriki kuhakiki na kutekeleza maombi ya muamala na kutoa rasilimali za kikokotozi kwa mtandao. + +Mshiriki yeyote anayetangaza ombi la muamala lazima pia atoe kiasi fulani cha ETH kwa mtandao kama fadhila. Mtandao utachoma sehemu ya fadhila na kutoa zawadi ya iliyobaki kwa yeyote atakayefanya kazi ya kuhakiki muamala, kuutekeleza, kuuweka kwenye mnyororo wa bloku, na kuutangaza kwenye mtandao. + +Kiasi cha ETH kinacholipwa kinalingana na rasilimali zinazohitajika kufanya hesabu. Fadhila hizi pia huzuia washiriki wenye nia mbaya kuziba mtandao kimakusudi kwa kuomba utekelezaji wa hesabu isiyo na kikomo au hati zingine zinazotumia rasilimali nyingi, kwani washiriki hawa lazima walipe rasilimali za hesabu. + +ETH pia hutumika kutoa usalama wa kiuchumi wa kikripto kwa mtandao kwa njia tatu kuu: 1) hutumika kama njia ya kuwazawadia wathibitishaji wanaopendekeza bloku au kuripoti tabia isiyo ya uaminifu ya wathibitishaji wengine; 2) Huwekwa hisa na wathibitishaji, ikifanya kazi kama dhamana dhidi ya tabia isiyo ya uaminifu—ikiwa wathibitishaji watajaribu kutenda isivyofaa ETH yao inaweza kuharibiwa; 3) hutumika kupima 'kura' za bloku mpya zilizopendekezwa, na kuchangia katika sehemu ya uteuzi wa uma ya utaratibu wa makubaliano. + +## Mikataba erevu ni nini? {#what-are-smart-contracts} + +Katika utendaji, washiriki hawaandiki msimbo mpya kila mara wanapotaka kuomba hesabu kwenye EVM. Badala yake, wasanidi programu wa programu-tumizi hupakia programu (vijisehemu vya msimbo vinavyoweza kutumika tena) kwenye hali ya EVM, na watumiaji hufanya maombi ya kutekeleza vijisehemu hivi vya msimbo na vigezo mbalimbali. Programu zilizopakiwa na kutekelezwa na mtandao tunaziita "mikataba-erevu". + +Katika kiwango cha msingi kabisa, unaweza kufikiria mkataba-erevu kama aina ya mashine ya kuuza bidhaa: hati ambayo, inapoitwa na vigezo fulani, hufanya vitendo au hesabu fulani ikiwa masharti fulani yametimizwa. Kwa mfano, mkataba-erevu rahisi wa muuzaji unaweza kuunda na kugawa umiliki wa mali ya kidijitali ikiwa mpigaji atatuma ETH kwa mpokeaji maalum. + +Msanidi programu yeyote anaweza kuunda mkataba-erevu na kuuafanya kuwa wa umma kwa mtandao, akitumia mnyororo wa bloku kama safu yake ya data, kwa ada inayolipwa kwa mtandao. Mtumiaji yeyote anaweza kisha kuita mkataba-erevu kutekeleza msimbo wake, tena kwa ada inayolipwa kwa mtandao. + +Hivyo, kwa kutumia mikataba-erevu, wasanidi programu wanaweza kujenga na kupeleka programu na huduma changamano zinazoelekezwa kwa watumiaji kama vile: masoko, vyombo vya kifedha, michezo, n.k. + +## Istilahi {#terminology} + +### Mnyororo wa bloku {#blockchain} + +Mfuatano wa bloku zote ambazo zimewekwa kwenye mtandao wa Ethereum katika historia ya mtandao. Imeitwa hivyo kwa sababu kila bloku ina rejeleo la bloku iliyotangulia, jambo ambalo hutusaidia kudumisha mpangilio juu ya bloku zote (na hivyo juu ya historia sahihi). + +### ETH {#eth} + +**Ether (ETH)** ni sarafu asili ya kidijitali ya Ethereum. Watumiaji hulipa ETH kwa watumiaji wengine ili maombi yao ya utekelezaji wa msimbo yatimizwe. + +[Zaidi kuhusu ETH](/developers/docs/intro-to-ether/) + +### EVM {#evm} + +Mashine Halisi ya Ethereum ni kompyuta halisi ya kimataifa ambayo hali yake kila mshiriki kwenye mtandao wa Ethereum huhifadhi na kukubaliana nayo. Mshiriki yeyote anaweza kuomba utekelezaji wa msimbo wowote kwenye EVM; utekelezaji wa msimbo hubadilisha hali ya EVM. + +[Zaidi kuhusu EVM](/developers/docs/evm/) + +### Nodi {#nodes} + +Mashine halisi za maisha zinazohifadhi hali ya EVM. Nodi huwasiliana ili kueneza taarifa kuhusu hali ya EVM na mabadiliko mapya ya hali. Mtumiaji yeyote anaweza pia kuomba utekelezaji wa msimbo kwa kutangaza ombi la utekelezaji wa msimbo kutoka kwa nodi. Mtandao wa Ethereum wenyewe ni jumla ya nodi zote za Ethereum na mawasiliano yao. + +[Zaidi kuhusu nodi](/developers/docs/nodes-and-clients/) + +### Akaunti {#accounts} + +Ambapo ETH huhifadhiwa. Watumiaji wanaweza kuanzisha akaunti, kuweka ETH kwenye akaunti, na kuhamisha ETH kutoka kwa akaunti zao kwenda kwa watumiaji wengine. Akaunti na salio la akaunti huhifadhiwa katika jedwali kubwa katika EVM; ni sehemu ya hali ya jumla ya EVM. + +[Zaidi kuhusu akaunti](/developers/docs/accounts/) + +### Miamala {#transactions} + +"Ombi la muamala" ni neno rasmi la ombi la utekelezaji wa msimbo kwenye EVM, na "muamala" ni ombi la muamala lililotimizwa na mabadiliko yanayohusiana katika hali ya EVM. Mtumiaji yeyote anaweza kutangaza ombi la muamala kwa mtandao kutoka kwa nodi. Ili ombi la muamala liathiri hali ya EVM iliyokubaliwa, lazima lithibitishwe, litekelezwe, na "kuwekwa kwenye mtandao" na nodi nyingine. Utekelezaji wa msimbo wowote husababisha mabadiliko ya hali katika EVM; baada ya kuwekwa, mabadiliko haya ya hali hutangazwa kwa nodi zote kwenye mtandao. Baadhi ya mifano ya miamala: + +- Tuma X ETH kutoka kwa akaunti yangu kwenda kwa akaunti ya Alice. +- Chapisha msimbo fulani wa mkataba-erevu kwenye hali ya EVM. +- Tekeleza msimbo wa mkataba-erevu kwenye anwani X katika EVM, na hoja Y. + +[Zaidi kuhusu miamala](/developers/docs/transactions/) + +### Bloku {#blocks} + +Idadi ya miamala ni kubwa sana, kwa hivyo miamala "huwekwa" kwa makundi, au bloku. Kwa ujumla bloku huwa na miamala kadhaa hadi mamia. + +[Zaidi kuhusu vitalu](/developers/docs/blocks/) + +### Mikataba-erevu {#smart-contracts} + +Kijisehemu cha msimbo kinachoweza kutumika tena (programu) ambacho msanidi programu huchapisha kwenye hali ya EVM. Mtu yeyote anaweza kuomba msimbo wa mkataba-erevu utekelezwe kwa kufanya ombi la muamala. Kwa sababu wasanidi programu wanaweza kuandika programu-tumizi zozote zinazoweza kutekelezwa kwenye EVM (michezo, masoko, vyombo vya kifedha, n.k.) kwa kuchapisha mikataba-erevu, hizi mara nyingi huitwa [dapps, au Programu Zilizogatuliwa](/developers/docs/dapps/). + +[Zaidi kuhusu mikataba-erevu](/developers/docs/smart-contracts/) + +## Masomo zaidi {#further-reading} + +- [Waraka Rasmi wa Ethereum](/whitepaper/) +- [Ethereum inafanyaje kazi, hata hivyo?](https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369) - _Preethi Kasireddy_ (**NB** rasilimali hii bado ni ya thamani lakini fahamu kuwa ni ya kabla ya [Muungano](/roadmap/merge) na kwa hiyo bado inarejelea utaratibu wa uthibitisho-wa-kazi wa Ethereum - Ethereum kwa kweli sasa inalindwa kwa kutumia [uthibitisho-wa-hisa](/developers/docs/consensus-mechanisms/pos)) + +### Wewe ni mwanafunzi wa kuona zaidi? {#visual-learner} + +Mfululizo huu wa video unatoa uchunguzi wa kina wa mada za msingi: + + + +[Orodha ya kucheza ya Misingi ya Ethereum](https://youtube.com/playlist?list=PLqgutSGloqiJyyoL0zvLVFPS-GMD2wKa5&si=kZTf5I7PKGTXDsOZ) + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Mwongozo wa msanidi programu wa Ethereum, sehemu ya 1](/developers/tutorials/a-developers-guide-to-ethereum-part-one/) _– Uchunguzi rahisi sana kwa wanaoanza wa Ethereum kwa kutumia Python na web3.py_ diff --git a/public/content/translations/sw/developers/docs/mev/index.md b/public/content/translations/sw/developers/docs/mev/index.md new file mode 100644 index 00000000000..77aa60726c6 --- /dev/null +++ b/public/content/translations/sw/developers/docs/mev/index.md @@ -0,0 +1,221 @@ +--- +title: Thamani inayoweza kutolewa (MEV) +description: Utangulizi wa thamani inayoweza kutolewa (MEV) +lang: sw +--- + +Thamani ya juu ambayo inaweza kutolewa (MEV) inarejelea thamani ya juu zaidi inayoweza kutolewa kutoka kwa uzalishaji wa vizuizi zaidi ya zawadi ya kawaida ya kizuizi na ada za gesi kwa kujumuisha, kutojumuisha, na kubadilisha mpangilio wa miamala katika kizuizi. + +## Thamani ya juu ambayo inaweza kutolewa {#maximal-extractable-value} + +Thamani ya juu ambayo inaweza kutolewa ilitumika kwa mara ya kwanza katika muktadha wa [uthibitishaji-wa-kazi](/developers/docs/consensus-mechanisms/pow/), na awali ilijulikana kama "thamani inayoweza kutolewa na mchimbaji". Hii ni kwa sababu katika uthibitishaji-wa-kazi, wachimbaji hudhibiti ujumuishaji, utengaji, na upangaji wa miamala. Hata hivyo, tangu kipindi cha mpito hadi uthibitisho-wa-dau kupitia [Muungano](/roadmap/merge) wathibitishaji wamekuwa na jukumu la majukumu haya, na uchimbaji si sehemu ya itifaki ya Ethereum tena. Mbinu za utoaji wa thamani bado zipo, ingawa, kwa hivyo neno "Thamani ya juu ambayo inaweza kutolewa" sasa linatumika badala yake. + +## Mahitaji ya awali {#prerequisites} + +Hakikisha unafahamu [miamala](/developers/docs/transactions/), [vizuizi](/developers/docs/blocks/), [uthibitisho-wa-dau](/developers/docs/consensus-mechanisms/pos) na [gesi](/developers/docs/gas/). Ufahamu wa [mfumo mtawanyo wa kimamlaka](/apps/) na [DeFi](/defi/) pia ni muhimu. + +## Utoaji wa MEV {#mev-extraction} + +Kinadharia, MEV huenda kabisa kwa wathibitishaji kwa sababu wao ndio upande pekee unaoweza kuhakikisha utekelezaji wa fursa ya MEV yenye faida. Katika vitendo, hata hivyo, sehemu kubwa ya MEV inatolewa na washiriki huru wa mtandao wanaojulikana kama "watafutaji." Watafutaji huendesha algoriti changamano kwenye data ya mnyororo wa vizuizi ili kugundua fursa za MEV zenye faida na wana boti za kuwasilisha kiotomatiki miamala hiyo yenye faida kwenye mtandao. + +Wathibitishaji hupata sehemu ya kiasi kamili cha MEV kwa vyovyote vile kwa sababu watafutaji wako tayari kulipa ada za juu za gesi (zinazokwenda kwa mthibitishaji) badala ya uwezekano mkubwa wa kujumuishwa kwa miamala yao yenye faida katika kizuizi. Kwa kudhania watafutaji wana busara kiuchumi, ada ya gesi ambayo mtafutaji yuko tayari kulipa itakuwa kiasi cha hadi 100% ya MEV ya mtafutaji (kwa sababu ikiwa ada ya gesi ingekuwa kubwa zaidi, mtafutaji angepoteza pesa). + +Pamoja na hayo, kwa baadhi ya fursa za MEV zenye ushindani mkubwa, kama vile [usuluhishi wa DEX](#mev-examples-dex-arbitrage), watafutaji wanaweza kulazimika kulipa 90% au hata zaidi ya mapato yao yote ya MEV katika ada za gesi kwa mthibitishaji kwa sababu watu wengi sana wanataka kuendesha biashara sawa ya usuluhishi yenye faida. Hii ni kwa sababu njia pekee ya kuhakikisha kuwa muamala wao wa usuluhishi unafanyika ni ikiwa watawasilisha muamala huo na bei ya juu zaidi ya gesi. + +### Gofu ya gesi {#mev-extraction-gas-golfing} + +Mwenendo huu umefanya kuwa mzuri katika "gofu ya gesi" — kupanga miamala ili itumie kiasi kidogo zaidi cha gesi — faida ya ushindani, kwa sababu inaruhusu watafutaji kuweka bei ya juu ya gesi huku wakiweka ada zao zote za gesi kuwa za kudumu (kwa kuwa ada za gesi = bei ya gesi \* gesi iliyotumika). + +Mbinu chache zinazojulikana za gofu ya gesi ni pamoja na: kutumia anwani zinazoanza na msururu mrefu wa sufuri (k.m., [0x0000000000C521824EaFf97Eac7B73B084ef9306](https://eth.blockscout.com/address/0x0000000000C521824EaFf97Eac7B73B084ef9306)) kwa kuwa zinachukua nafasi ndogo (na hivyo gesi) kuhifadhi; na kuacha salio dogo la tokeni za [ERC-20](/developers/docs/standards/tokens/erc-20/) katika mikataba, kwa kuwa inagharimu gesi nyingi zaidi kuanzisha nafasi ya kuhifadhi (ikiwa salio ni 0) kuliko kusasisha nafasi ya kuhifadhi. Kutafuta mbinu zaidi za kupunguza matumizi ya gesi ni eneo tendaji la utafiti miongoni mwa watafutaji. + +### Waendeshaji wa mbele wa jumla {#mev-extraction-generalized-frontrunners} + +Badala ya kupanga algoriti changamano ili kugundua fursa za MEV zenye faida, baadhi ya watafutaji huendesha waendeshaji wa mbele wa jumla. Waendeshaji wa mbele wa jumla ni boti zinazotazama mempool ili kugundua miamala yenye faida. Mwendeshaji wa mbele atanakili msimbo wa muamala unaoweza kuwa na faida, atabadilisha anwani na anwani ya mwendeshaji wa mbele, na kuendesha muamala huo ndani ya nchi ili kuhakikisha mara mbili kuwa muamala uliobadilishwa unasababisha faida kwa anwani ya mwendeshaji wa mbele. Ikiwa muamala una faida kweli, mwendeshaji wa mbele atawasilisha muamala uliobadilishwa na anwani iliyobadilishwa na bei ya juu ya gesi, "akiendesha mbele" muamala wa asili na kupata MEV ya mtafutaji wa asili. + +### Flashbots {#mev-extraction-flashbots} + +Flashbots ni mradi huru unaopanua wateja wa utekelezaji kwa huduma inayoruhusu watafutaji kuwasilisha miamala ya MEV kwa wathibitishaji bila kuifichua kwa mempool ya umma. Hii inazuia miamala kuendeshwa mbele na waendeshaji wa mbele wa jumla. + +## Mifano ya MEV {#mev-examples} + +MEV hujitokeza kwenye mnyororo wa vizuizi kwa njia chache. + +### Usuluhishi wa DEX {#mev-examples-dex-arbitrage} + +Usuluhishi wa [Badilishano lililogatuliwa](/glossary/#dex) (DEX) ni fursa rahisi na inayojulikana zaidi ya MEV. Kutokana na hilo, pia ndiyo yenye ushindani mkubwa zaidi. + +Inafanya kazi kama hivi: ikiwa DEX mbili zinatoa tokeni kwa bei mbili tofauti, mtu anaweza kununua tokeni kwenye DEX ya bei ya chini na kuiuza kwenye DEX ya bei ya juu katika muamala mmoja, wa atomiki. Shukrani kwa mbinu za mnyororo wa vizuizi, huu ni usuluhishi wa kweli, usio na hatari. + +[Huu ni mfano](https://eth.blockscout.com/tx/0x5e1657ef0e9be9bc72efefe59a2528d0d730d478cfc9e6cdd09af9f997bb3ef4) wa muamala wa usuluhishi wenye faida ambapo mtafutaji aligeuza ETH 1,000 kuwa ETH 1,045 kwa kutumia fursa ya bei tofauti za jozi ya ETH/DAI kwenye Uniswap dhidi ya Sushiswap. + +### Ufilisi {#mev-examples-liquidations} + +Ufilisi wa itifaki ya kukopesha unatoa fursa nyingine inayojulikana ya MEV. + +Itifaki za kukopesha kama Maker na Aave zinahitaji watumiaji kuweka dhamana fulani (k.m., ETH). Dhamana hii iliyowekwa kisha hutumiwa kuwakopesha watumiaji wengine. + +Watumiaji wanaweza kisha kukopa mali na tokeni kutoka kwa wengine kulingana na kile wanachohitaji (k.m., unaweza kukopa MKR ikiwa unataka kupiga kura katika pendekezo la utawala la MakerDAO) hadi asilimia fulani ya dhamana yao iliyowekwa. Kwa mfano, ikiwa kiasi cha kukopa ni cha juu cha 30%, mtumiaji anayeweka DAI 100 kwenye itifaki anaweza kukopa hadi thamani ya DAI 30 ya mali nyingine. Itifaki huamua asilimia kamili ya uwezo wa kukopa. + +Kadiri thamani ya dhamana ya mkopaji inavyobadilika, ndivyo uwezo wake wa kukopa unavyobadilika pia. Ikiwa, kutokana na mabadiliko ya soko, thamani ya mali zilizokopwa inazidi, tuseme, 30% ya thamani ya dhamana yao (tena, asilimia kamili huamuliwa na itifaki), itifaki kwa kawaida inaruhusu mtu yeyote kufilisi dhamana, na kuwalipa wakopeshaji papo hapo (hii ni sawa na jinsi [simu za kando](https://www.investopedia.com/terms/m/margincall.asp) zinavyofanya kazi katika fedha za jadi). Ikifilisiwa, mkopaji kwa kawaida hulazimika kulipa ada kubwa ya ufilisi, ambayo baadhi yake huenda kwa mfilisi — hapa ndipo fursa ya MEV inapoingia. + +Watafutaji hushindana kuchanganua data ya mnyororo wa vizuizi haraka iwezekanavyo ili kubaini ni wakopaji gani wanaweza kufilisiwa na kuwa wa kwanza kuwasilisha muamala wa ufilisi na kujikusanyia ada ya ufilisi. + +### Biashara ya sandwich {#mev-examples-sandwich-trading} + +Biashara ya sandwich ni njia nyingine ya kawaida ya utoaji wa MEV. + +Ili kufanya biashara ya sandwich, mtafutaji atatazama mempool kwa biashara kubwa za DEX. Kwa mfano, tuseme mtu anataka kununua UNI 10,000 kwa DAI kwenye Uniswap. Biashara ya ukubwa huu itakuwa na athari kubwa kwa jozi ya UNI/DAI, na uwezekano wa kuongeza bei ya UNI kwa kiasi kikubwa ikilinganishwa na DAI. + +Mtafutaji anaweza kukokotoa takriban athari ya bei ya biashara hii kubwa kwenye jozi ya UNI/DAI na kutekeleza agizo bora la ununuzi mara moja _kabla_ ya biashara kubwa, akinunua UNI kwa bei nafuu, kisha atekeleze agizo la kuuza mara moja _baada_ ya biashara kubwa, akiuza kwa bei ya juu iliyosababishwa na agizo kubwa. + +Biashara ya sandwich, hata hivyo, ina hatari zaidi kwani si ya atomiki (tofauti na usuluhishi wa DEX, kama ilivyoelezwa hapo juu) na inaweza kushambuliwa na [shambulio la salmonella](https://github.com/Defi-Cartel/salmonella). + +### NFT MEV {#mev-examples-nfts} + +MEV katika nafasi ya NFT ni jambo linaloibuka, na si lazima liwe na faida. + +Hata hivyo, kwa kuwa miamala ya NFT hufanyika kwenye mnyororo wa vizuizi uleule unaoshirikiwa na miamala mingine yote ya Ethereum, watafutaji wanaweza kutumia mbinu sawa na zile zinazotumiwa katika fursa za jadi za MEV katika soko la NFT pia. + +Kwa mfano, ikiwa kuna toleo maarufu la NFT na mtafutaji anataka NFT fulani au seti ya NFT, anaweza kupanga muamala ili awe wa kwanza kwenye mstari wa kununua NFT, au anaweza kununua seti nzima ya NFT katika muamala mmoja. Au ikiwa NFT [imeorodheshwa kimakosa kwa bei ya chini](https://www.theblockcrypto.com/post/113546/mistake-sees-69000-cryptopunk-sold-for-less-than-a-cent), mtafutaji anaweza kuwatangulia wanunuzi wengine na kuinyakua kwa bei nafuu. + +Mfano mmoja maarufu wa NFT MEV ulitokea wakati mtafutaji alitumia dola milioni 7 [kununua](https://eth.blockscout.com/address/0x650dCdEB6ecF05aE3CAF30A70966E2F395d5E9E5?tab=txs) kila Cryptopunk moja kwa bei ya chini kabisa. Mtafiti wa mnyororo wa vizuizi [alielezea kwenye Twitter](https://twitter.com/IvanBogatyy/status/1422232184493121538) jinsi mnunuzi alivyofanya kazi na mtoa huduma wa MEV kuweka ununuzi wao kuwa siri. + +### Mkia mrefu {#mev-examples-long-tail} + +Usuluhishi wa DEX, ufilisi, na biashara ya sandwich zote ni fursa zinazojulikana sana za MEV na hakuna uwezekano wa kuwa na faida kwa watafutaji wapya. Hata hivyo, kuna mkia mrefu wa fursa za MEV zisizojulikana sana (NFT MEV bila shaka ni fursa mojawapo). + +Watafutaji ambao wanaanza wanaweza kupata mafanikio zaidi kwa kutafuta MEV katika mkia huu mrefu. Ubao wa kazi wa [MEV wa Flashbot](https://github.com/flashbots/mev-job-board) unaorodhesha baadhi ya fursa zinazoibuka. + +## Athari za MEV {#effects-of-mev} + +MEV sio mbaya kabisa - kuna matokeo chanya na hasi kwa MEV kwenye Ethereum. + +### Mema {#effects-of-mev-the-good} + +Miradi mingi ya DeFi inategemea watendaji wenye busara kiuchumi ili kuhakikisha manufaa na uthabiti wa itifaki zao. Kwa mfano, usuluhishi wa DEX huhakikisha kuwa watumiaji wanapata bei bora na sahihi zaidi kwa tokeni zao, na itifaki za kukopesha hutegemea ufilisi wa haraka wakati wakopaji wanaposhuka chini ya uwiano wa dhamana ili kuhakikisha wakopeshaji wanalipwa. + +Bila watafutaji wenye busara wanaotafuta na kurekebisha mapungufu ya kiuchumi na kutumia fursa za motisha za kiuchumi za itifaki, itifaki za DeFi na mfumo mtawanyo wa kimamlaka kwa ujumla huenda zisiwe imara kama zilivyo leo. + +### Mabaya {#effects-of-mev-the-bad} + +Katika safu ya matumizi, baadhi ya aina za MEV, kama vile biashara ya sandwich, husababisha uzoefu mbaya kabisa kwa watumiaji. Watumiaji ambao wamefanyiwa biashara ya sandwich wanakabiliwa na ongezeko la slippage na utekelezaji mbaya zaidi wa biashara zao. + +Katika safu ya mtandao, waendeshaji wa mbele wa jumla na minada ya bei za gesi wanayoshiriki mara kwa mara (wakati waendeshaji wa mbele wawili au zaidi wanaposhindana ili muamala wao ujumuishwe katika kizuizi kinachofuata kwa kuongeza bei ya gesi ya miamala yao wenyewe) husababisha msongamano wa mtandao na bei za juu za gesi kwa kila mtu mwingine anayejaribu kufanya miamala ya kawaida. + +Zaidi ya kile kinachotokea _ndani_ ya vizuizi, MEV inaweza kuwa na athari mbaya _kati_ ya vizuizi. Ikiwa MEV inayopatikana katika kizuizi inazidi kwa kiasi kikubwa zawadi ya kawaida ya kizuizi, wathibitishaji wanaweza kushawishika kupanga upya vizuizi na kunasa MEV kwa ajili yao wenyewe, na kusababisha upangaji upya wa mnyororo wa vizuizi na kukosekana kwa uthabiti wa makubaliano. + +Uwezekano huu wa upangaji upya wa mnyororo wa vizuizi [umewahi kuchunguzwa hapo awali kwenye mnyororo wa vizuizi wa Bitcoin](https://dl.acm.org/doi/10.1145/2976749.2978408). Kadiri zawadi ya kizuizi cha Bitcoin inapopungua kwa nusu na ada za muamala zinavyochukua sehemu kubwa na kubwa zaidi ya zawadi ya kizuizi, hali hutokea ambapo inakuwa na busara kiuchumi kwa wachimbaji kuacha zawadi ya kizuizi kinachofuata na badala yake kuchimba tena vizuizi vya zamani vyenye ada za juu. Pamoja na ukuaji wa MEV, hali ya aina hiyo inaweza kutokea katika Ethereum, na kutishia uadilifu wa mnyororo wa vizuizi. + +## Hali ya MEV {#state-of-mev} + +Utoaji wa MEV uliongezeka mwanzoni mwa 2021, na kusababisha bei za juu sana za gesi katika miezi michache ya kwanza ya mwaka. Kuibuka kwa relay ya MEV ya Flashbots kumepunguza ufanisi wa waendeshaji wa mbele wa jumla na kumepeleka minada ya bei za gesi nje ya mnyororo, na kupunguza bei za gesi kwa watumiaji wa kawaida. + +Wakati watafutaji wengi bado wanapata pesa nzuri kutoka kwa MEV, kadri fursa zinavyojulikana zaidi na watafutaji zaidi na zaidi wanaposhindana kwa fursa sawa, wathibitishaji watanasa mapato mengi zaidi ya jumla ya MEV (kwa sababu aina sawa ya minada ya gesi kama ilivyoelezwa hapo awali pia hutokea katika Flashbots, ingawa kwa faragha, na wathibitishaji watanasa mapato ya gesi yanayotokana). MEV pia si ya kipekee kwa Ethereum, na kadri fursa zinavyokuwa na ushindani zaidi kwenye Ethereum, watafutaji wanahamia kwenye minyororo mbadala ya vizuizi kama Binance Smart Chain, ambapo fursa sawa za MEV na zile za Ethereum zipo na ushindani mdogo. + +Kwa upande mwingine, mpito kutoka uthibitishaji-wa-kazi hadi uthibitisho-wa-dau na juhudi zinazoendelea za kuongeza Ethereum kwa kutumia unda-mpya zote zinabadilisha mazingira ya MEV kwa njia ambazo bado hazijawa wazi. Bado haijajulikana vizuri jinsi kuwa na wapendekezaji wa vizuizi waliohakikishwa wanaojulikana mapema kidogo kunavyobadilisha mienendo ya utoaji wa MEV ikilinganishwa na mfumo wa uwezekano katika uthibitishaji-wa-kazi au jinsi hii itakavyovurugwa wakati [uchaguzi wa kiongozi mmoja wa siri](https://ethresear.ch/t/secret-non-single-leader-election/11789) na [teknolojia ya wathibitishaji waliosambazwa](/staking/dvt/) zitakapotekelezwa. Vile vile, bado haijajulikana ni fursa gani za MEV zipo wakati shughuli nyingi za watumiaji zinapohamishwa kutoka Ethereum na kwenda kwenye safu zake za 2 za unda-mpya na shards. + +## MEV katika Uthibitisho-wa-Dau wa Ethereum (PoS) {#mev-in-ethereum-proof-of-stake} + +Kama ilivyoelezwa, MEV ina athari mbaya kwa uzoefu wa jumla wa mtumiaji na usalama wa safu ya makubaliano. Lakini mpito wa Ethereum kwenda kwa makubaliano ya uthibitisho-wa-dau (unaofahamika kama "Muungano") unaweza kuleta hatari mpya zinazohusiana na MEV: + +### Uwekaji kati wa wathibitishaji {#validator-centralization} + +Katika Ethereum ya baada ya Muungano, wathibitishaji (baada ya kuweka amana za usalama za ETH 32) hufikia makubaliano juu ya uhalali wa vizuizi vilivyoongezwa kwenye Mnyororo Kioleza. Kwa kuwa ETH 32 inaweza kuwa nje ya uwezo wa wengi, [kujiunga na bwawa la kuweka hisa](/staking/pools/) kunaweza kuwa chaguo linalowezekana zaidi. Hata hivyo, usambazaji mzuri wa [waweka hisa wa pekee](/staking/solo/) ni bora, kwani unapunguza uwekaji kati wa wathibitishaji na kuboresha usalama wa Ethereum. + +Hata hivyo, utoaji wa MEV unaaminika kuwa na uwezo wa kuharakisha uwekaji kati wa wathibitishaji. Hii ni kwa sababu, kwa vile wathibitishaji [wanapata mapato kidogo kwa kupendekeza vizuizi](/roadmap/merge/issuance/#how-the-merge-impacts-ETH-supply) kuliko wachimbaji hapo awali, utoaji wa MEV umeathiri sana [mapato ya wathibitishaji](https://github.com/flashbots/eth2-research/blob/main/notebooks/mev-in-eth2/eth2-mev-calc.ipynb) tangu [Muungano](/roadmap/merge/). + +Mabwawa makubwa ya kuweka hisa yanaweza kuwa na rasilimali zaidi za kuwekeza katika uboreshaji unaohitajika ili kunasa fursa za MEV. Kadiri MEV inavyotolewa na mabwawa haya, ndivyo rasilimali wanazokuwa nazo za kuboresha uwezo wao wa kutoa MEV (na kuongeza mapato ya jumla) zinavyoongezeka, na hivyo kuunda [uchumi wa kiwango](https://www.investopedia.com/terms/e/economiesofscale.asp#). + +Kwa kuwa na rasilimali chache, waweka hisa wa pekee wanaweza kushindwa kufaidika na fursa za MEV. Hii inaweza kuongeza shinikizo kwa wathibitishaji huru kujiunga na mabwawa yenye nguvu ya kuweka hisa ili kuongeza mapato yao, na kupunguza ugatuaji katika Ethereum. + +### Mempool zinazohitaji ruhusa {#permissioned-mempools} + +Kujibu mashambulizi ya sandwich na ya mbele, wafanyabiashara wanaweza kuanza kufanya mikataba nje ya mnyororo na wathibitishaji kwa ajili ya faragha ya miamala. Badala ya kutuma muamala unaoweza kuwa na MEV kwa mempool ya umma, mfanyabiashara anautuma moja kwa moja kwa mthibitishaji, ambaye anaujumuisha katika kizuizi na kugawana faida na mfanyabiashara. + +“Mabwawa ya giza” ni toleo kubwa la mpangilio huu na hufanya kazi kama mempool zinazohitaji ruhusa, za ufikiaji pekee zilizo wazi kwa watumiaji walio tayari kulipa ada fulani. Mwenendo huu ungepunguza hali ya Ethereum ya kutohitaji ruhusa na kutokuwa na uaminifu na uwezekano wa kubadilisha mnyororo wa vizuizi kuwa utaratibu wa “lipa-ili-ucheze” unaopendelea mzabuni wa juu zaidi. + +Mempool zinazohitaji ruhusa pia zingeharakisha hatari za uwekaji kati zilizoelezwa katika sehemu iliyopita. Mabwawa makubwa yanayoendesha wathibitishaji wengi yanaweza kufaidika kutokana na kutoa faragha ya miamala kwa wafanyabiashara na watumiaji, na kuongeza mapato yao ya MEV. + +Kupambana na matatizo haya yanayohusiana na MEV katika Ethereum ya baada ya Muungano ni eneo la msingi la utafiti. Hadi sasa, suluhisho mbili zilizopendekezwa ili kupunguza athari mbaya za MEV kwenye ugatuaji na usalama wa Ethereum baada ya Muungano ni [**Mgawanyo wa Mpendekezaji na Mjenzi (PBS)**](/roadmap/pbs/) na [**API ya Mjenzi**](https://github.com/ethereum/builder-specs). + +### Mgawanyo wa Mpendekezaji na Mjenzi {#proposer-builder-separation} + +Katika uthibitishaji-wa-kazi na uthibitisho-wa-dau, nodi inayojenga kizuizi inakipendekeza kwa ajili ya kuongezwa kwenye mnyororo kwa nodi nyingine zinazoshiriki katika makubaliano. Kizuizi kipya kinakuwa sehemu ya mnyororo wa kanuni baada ya mchimbaji mwingine kujenga juu yake (katika PoW) au kinapokea uthibitisho kutoka kwa wathibitishaji wengi (katika PoS). + +Mchanganyiko wa majukumu ya mzalishaji wa kizuizi na mpendekezaji wa kizuizi ndio unaoleta matatizo mengi yanayohusiana na MEV yaliyoelezwa hapo awali. Kwa mfano, nodi za makubaliano zinashawishika kuanzisha upangaji upya wa mnyororo katika [mashambulizi ya wezi wa wakati](https://www.mev.wiki/attack-examples/time-bandit-attack) ili kuongeza mapato ya MEV. + +[Mgawanyo wa mpendekezaji na mjenzi](https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725) (PBS) umeundwa ili kupunguza athari za MEV, hasa katika safu ya makubaliano. Kipengele kikuu cha PBS ni mgawanyo wa sheria za mzalishaji wa kizuizi na mpendekezaji wa kizuizi. Wathibitishaji bado wanawajibika kupendekeza na kupiga kura kwenye vizuizi, lakini darasa jipya la vyombo maalum, vinavyoitwa **wajenzi wa vizuizi**, wanapewa jukumu la kupanga miamala na kujenga vizuizi. + +Chini ya PBS, mjenzi wa kizuizi huunda kifurushi cha miamala na kuweka zabuni kwa ajili ya kujumuishwa kwake katika kizuizi cha Mnyororo Kioleza (kama “mzigo wa utekelezaji”). Mthibitishaji aliyechaguliwa kupendekeza kizuizi kinachofuata kisha anachunguza zabuni tofauti na kuchagua kifurushi chenye ada ya juu zaidi. PBS kimsingi inaunda soko la mnada, ambapo wajenzi wanajadiliana na wathibitishaji wanaouza nafasi ya vizuizi. + +Miundo ya sasa ya PBS inatumia [mpango wa ahadi-funua](https://gitcoin.co/blog/commit-reveal-scheme-on-ethereum/) ambapo wajenzi wanachapisha tu ahadi ya kriptografia kwa yaliyomo kwenye kizuizi (kichwa cha kizuizi) pamoja na zabuni zao. Baada ya kukubali zabuni iliyoshinda, mpendekezaji anaunda pendekezo la kizuizi lililosainiwa ambalo linajumuisha kichwa cha kizuizi. Mjenzi wa kizuizi anatarajiwa kuchapisha mwili kamili wa kizuizi baada ya kuona pendekezo la kizuizi lililosainiwa, na ni lazima pia apokee [uthibitisho](/glossary/#attestation) wa kutosha kutoka kwa wathibitishaji kabla ya kukamilishwa. + +#### Je, mgawanyo wa mpendekezaji na mjenzi unapunguzaje athari za MEV? {#how-does-pbs-curb-mev-impact} + +Mgawanyo wa mpendekezaji na mjenzi ndani ya itifaki unapunguza athari za MEV kwenye makubaliano kwa kuondoa utoaji wa MEV kutoka kwa mamlaka ya wathibitishaji. Badala yake, wajenzi wa vizuizi wanaoendesha vifaa maalum watanasa fursa za MEV mbele. + +Hii haiwatengi wathibitishaji kabisa kutoka kwa mapato yanayohusiana na MEV, ingawa, kwani wajenzi lazima watoe zabuni za juu ili vizuizi vyao vikubaliwe na wathibitishaji. Hata hivyo, kwa kuwa wathibitishaji hawajikiti tena moja kwa moja katika kuboresha mapato ya MEV, tishio la mashambulizi ya wezi wa wakati linapungua. + +Mgawanyo wa mpendekezaji na mjenzi pia unapunguza hatari za uwekaji kati wa MEV. Kwa mfano, matumizi ya mpango wa ahadi-funua huondoa hitaji la wajenzi kuwaamini wathibitishaji wasiibe fursa ya MEV au kuifichua kwa wajenzi wengine. Hii inapunguza kizuizi kwa waweka hisa wa pekee kufaidika na MEV, vinginevyo, wajenzi wangeelekea kupendelea mabwawa makubwa yenye sifa nje ya mnyororo na kufanya mikataba nje ya mnyororo nao. + +Vile vile, wathibitishaji hawana haja ya kuwaamini wajenzi wasizuie miili ya vizuizi au kuchapisha vizuizi batili kwa sababu malipo hayana masharti. Ada ya mthibitishaji bado inachakatwa hata kama kizuizi kilichopendekezwa hakipatikani au kinatangazwa kuwa batili na wathibitishaji wengine. Katika kesi ya mwisho, kizuizi kinatupiliwa mbali, na kumlazimisha mjenzi wa kizuizi kupoteza ada zote za muamala na mapato ya MEV. + +### API ya Mjenzi {#builder-api} + +Wakati mgawanyo wa mpendekezaji na mjenzi unapoahidi kupunguza athari za utoaji wa MEV, utekelezaji wake unahitaji mabadiliko kwenye itifaki ya makubaliano. Hasa, sheria ya [uchaguzi wa uma](/developers/docs/consensus-mechanisms/pos/#fork-choice) kwenye Mnyororo Kioleza ingehitaji kusasishwa. [API ya Mjenzi](https://github.com/ethereum/builder-specs) ni suluhisho la muda linalolenga kutoa utekelezaji wa kazi wa mgawanyo wa mpendekezaji na mjenzi, ingawa na dhana za juu za uaminifu. + +API ya Mjenzi ni toleo lililobadilishwa la [API ya Injini](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) linalotumiwa na wateja wa safu ya makubaliano kuomba mizigo ya utekelezaji kutoka kwa wateja wa safu ya utekelezaji. Kama ilivyoainishwa katika [vipimo vya mthibitishaji mwaminifu](https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/validator.md), wathibitishaji waliochaguliwa kwa majukumu ya kupendekeza vizuizi huomba kifurushi cha miamala kutoka kwa mteja wa utekelezaji aliyeunganishwa, ambacho wanakijumuisha katika kizuizi cha Mnyororo Kioleza kilichopendekezwa. + +API ya Mjenzi pia hufanya kazi kama programu ya kati kati ya wathibitishaji na wateja wa safu ya utekelezaji; lakini ni tofauti kwa sababu inaruhusu wathibitishaji kwenye Mnyororo Kioleza kupata vizuizi kutoka kwa vyombo vya nje (badala ya kujenga kizuizi ndani ya nchi kwa kutumia mteja wa utekelezaji). + +Hapa chini kuna muhtasari wa jinsi API ya Mjenzi inavyofanya kazi: + +1. API ya Mjenzi inaunganisha mthibitishaji na mtandao wa wajenzi wa vizuizi wanaoendesha wateja wa safu ya utekelezaji. Kama ilivyo katika PBS, wajenzi ni wahusika maalum wanaowekeza katika ujenzi wa vizuizi unaohitaji rasilimali nyingi na hutumia mikakati tofauti ili kuongeza mapato yanayopatikana kutoka kwa MEV + vidokezo vya kipaumbele. + +2. Mthibitishaji (anayeendesha mteja wa safu ya makubaliano) anaomba mizigo ya utekelezaji pamoja na zabuni kutoka kwa mtandao wa wajenzi. Zabuni kutoka kwa wajenzi zitakuwa na kichwa cha mzigo wa utekelezaji—ahadi ya kriptografia kwa yaliyomo kwenye mzigo—na ada ya kulipwa kwa mthibitishaji. + +3. Mthibitishaji anapitia zabuni zinazoingia na kuchagua mzigo wa utekelezaji wenye ada ya juu zaidi. Kwa kutumia API ya Mjenzi, mthibitishaji anaunda pendekezo la kizuizi cha Beacon "lililofichwa" ambalo linajumuisha tu saini yake na kichwa cha mzigo wa utekelezaji na kulituma kwa mjenzi. + +4. Mjenzi anayeendesha API ya Mjenzi anatarajiwa kujibu na mzigo kamili wa utekelezaji baada ya kuona pendekezo la kizuizi lililofichwa. Hii inaruhusu mthibitishaji kuunda kizuizi cha Beacon "kilichosainiwa", ambacho wanakisambaza kote kwenye mtandao. + +5. Mthibitishaji anayetumia API ya Mjenzi bado anatarajiwa kujenga kizuizi ndani ya nchi ikiwa mjenzi wa kizuizi atashindwa kujibu haraka, ili wasikose zawadi za pendekezo la kizuizi. Hata hivyo, mthibitishaji hawezi kuunda kizuizi kingine kwa kutumia miamala iliyofunuliwa sasa au seti nyingine, kwani ingekuwa sawa na _usawazishaji_ (kusaini vizuizi viwili ndani ya nafasi moja), ambalo ni kosa linaloweza kuadhibiwa. + +Mfano wa utekelezaji wa API ya Mjenzi ni [MEV Boost](https://github.com/flashbots/mev-boost), uboreshaji wa [utaratibu wa mnada wa Flashbots](https://docs.flashbots.net/Flashbots-auction/overview) ulioundwa ili kuzuia athari mbaya za nje za MEV kwenye Ethereum. Mnada wa Flashbots unaruhusu wathibitishaji katika uthibitisho-wa-dau kukabidhi kazi ya kujenga vizuizi vyenye faida kwa wahusika maalum wanaoitwa **watafutaji**. +![Mchoro unaoonyesha mtiririko wa MEV kwa undani](./mev.png) + +Watafutaji hutafuta fursa za MEV zenye faida na kutuma vifurushi vya miamala kwa wapendekezaji wa vizuizi pamoja na [zabuni ya bei iliyofungwa](https://en.wikipedia.org/wiki/First-price_sealed-bid_auction) kwa ajili ya kujumuishwa katika kizuizi. Mthibitishaji anayeendesha mev-geth, toleo la uma la mteja wa go-ethereum (Geth) anahitaji tu kuchagua kifurushi chenye faida zaidi na kukijumuisha kama sehemu ya kizuizi kipya. Ili kuwalinda wapendekezaji wa vizuizi (wathibitishaji) dhidi ya barua taka na miamala batili, vifurushi vya miamala hupitia **warudishaji** kwa ajili ya uthibitisho kabla ya kufika kwa mpendekezaji. + +MEV Boost inabaki na utendaji sawa wa mnada wa asili wa Flashbots, ingawa na vipengele vipya vilivyoundwa kwa ajili ya kubadili kwa Ethereum kwenda kwenye uthibitisho-wa-dau. Watafutaji bado wanapata miamala ya MEV yenye faida kwa ajili ya kujumuishwa katika vizuizi, lakini darasa jipya la wahusika maalum, wanaoitwa **wajenzi**, wanawajibika kukusanya miamala na vifurushi katika vizuizi. Mjenzi anakubali zabuni za bei zilizofungwa kutoka kwa watafutaji na anaendesha uboreshaji ili kupata mpangilio wenye faida zaidi. + +Mrudishaji bado anawajibika kuthibitisha vifurushi vya miamala kabla ya kuvipitisha kwa mpendekezaji. Hata hivyo, MEV Boost inaleta **eskro** zinazowajibika kutoa [upatikanaji wa data](/developers/docs/data-availability/) kwa kuhifadhi miili ya vizuizi iliyotumwa na wajenzi na vichwa vya vizuizi vilivyotumwa na wathibitishaji. Hapa, mthibitishaji aliyeunganishwa na relay anauliza mizigo ya utekelezaji inayopatikana na anatumia algoriti ya upangaji ya MEV Boost kuchagua kichwa cha mzigo chenye zabuni ya juu zaidi + vidokezo vya MEV. + +#### Je, API ya Mjenzi inapunguzaje athari za MEV? {#how-does-builder-api-curb-mev-impact} + +Faida kuu ya API ya Mjenzi ni uwezo wake wa kuweka demokrasia katika upatikanaji wa fursa za MEV. Kutumia mipango ya ahadi-funua huondoa dhana za uaminifu na kupunguza vizuizi vya kuingia kwa wathibitishaji wanaotafuta kufaidika na MEV. Hii inapaswa kupunguza shinikizo kwa waweka hisa wa pekee kuungana na mabwawa makubwa ya kuweka hisa ili kuongeza faida za MEV. + +Utekelezaji ulioenea wa API ya Mjenzi utahimiza ushindani mkubwa zaidi kati ya wajenzi wa vizuizi, ambao unaongeza upinzani dhidi ya udhibiti. Wakati wathibitishaji wanapopitia zabuni kutoka kwa wajenzi wengi, mjenzi anayekusudia kudhibiti miamala ya mtumiaji mmoja au zaidi lazima atoe zabuni ya juu kuliko wajenzi wengine wote wasiodhibiti ili kufanikiwa. Hii inaongeza kwa kiasi kikubwa gharama ya kudhibiti watumiaji na inakatisha tamaa mazoea hayo. + +Baadhi ya miradi, kama vile MEV Boost, inatumia API ya Mjenzi kama sehemu ya muundo wa jumla ulioundwa kutoa faragha ya miamala kwa wahusika fulani, kama vile wafanyabiashara wanaojaribu kuepuka mashambulizi ya mbele/sandwich. Hii inafanikiwa kwa kutoa njia ya mawasiliano ya faragha kati ya watumiaji na wajenzi wa vizuizi. Tofauti na mempool zinazohitaji ruhusa zilizoelezwa hapo awali, mbinu hii ni ya manufaa kwa sababu zifuatazo: + +1. Uwepo wa wajenzi wengi sokoni hufanya udhibiti usiwezekane, jambo ambalo linawanufaisha watumiaji. Kinyume chake, uwepo wa mabwawa ya giza yaliyowekwa kati na yanayotegemea uaminifu ungekusanya nguvu mikononi mwa wajenzi wachache wa vizuizi na kuongeza uwezekano wa udhibiti. + +2. Programu ya API ya Mjenzi ni ya chanzo-wazi, ambayo inaruhusu mtu yeyote kutoa huduma za ujenzi wa vizuizi. Hii inamaanisha watumiaji hawalazimishwi kutumia mjenzi yeyote wa vizuizi na inaboresha kutopendelea na kutohitaji ruhusa kwa Ethereum. Zaidi ya hayo, wafanyabiashara wanaotafuta MEV hawachangii uwekaji kati bila kukusudia kwa kutumia njia za miamala za faragha. + +## Rasilimali zinazohusiana {#related-resources} + +- [Nyaraka za Flashbots](https://docs.flashbots.net/) +- [GitHub ya Flashbots](https://github.com/flashbots/pm) +- [mevboost.org](https://www.mevboost.org/) - _Kifuatiliaji chenye takwimu za wakati halisi za relay za MEV-Boost na wajenzi wa vizuizi_ + +## Masomo zaidi {#further-reading} + +- [Thamani Inayoweza Kutolewa na Mchimbaji (MEV) ni Nini?](https://blog.chain.link/what-is-miner-extractable-value-mev/) +- [MEV na Mimi](https://www.paradigm.xyz/2021/02/mev-and-me) +- [Ethereum ni Msitu Mweusi](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest/) +- [Kutoroka Msitu Mweusi](https://samczsun.com/escaping-the-dark-forest/) +- [Flashbots: Kuendesha Mbele Mgogoro wa MEV](https://medium.com/flashbots/frontrunning-the-mev-crisis-40629a613752) +- [Nyaraka za MEV za @bertcmiller](https://twitter.com/bertcmiller/status/1402665992422047747) +- [MEV-Boost: Usanifu wa Flashbots Tayari kwa Muungano](https://ethresear.ch/t/mev-boost-merge-ready-flashbots-architecture/11177) +- [MEV Boost ni Nini](https://www.alchemy.com/overviews/mev-boost) +- [Kwa nini uendeshe mev-boost?](https://writings.flashbots.net/writings/why-run-mevboost/) +- [Mwongozo wa Msafiri kwa Ethereum](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) diff --git a/public/content/translations/sw/developers/docs/networking-layer/index.md b/public/content/translations/sw/developers/docs/networking-layer/index.md new file mode 100644 index 00000000000..4a66b31ffd9 --- /dev/null +++ b/public/content/translations/sw/developers/docs/networking-layer/index.md @@ -0,0 +1,163 @@ +--- +title: Safu ya mtandao +description: Utangulizi wa safu ya mtandao wa Ethereum. +lang: sw +sidebarDepth: 2 +--- + +Ethereum ni mtandao wa rika-kwa-rika wenye maelfu ya nodi ambazo lazima ziweze kuwasiliana kwa kutumia itifaki sanifu. "Safu ya mtandao" ni mrundiko wa itifaki zinazoruhusu nodi hizo kupatana na kubadilishana habari. Hii inajumuisha kusambaza habari kwa njia ya "gossiping" (mawasiliano ya mmoja-kwa-wengi) kwenye mtandao pamoja na kubadilishana maombi na majibu kati ya nodi maalum (mawasiliano ya mmoja-kwa-mmoja). Kila nodi lazima ifuate sheria maalum za mtandao ili kuhakikisha inatuma na kupokea habari sahihi. + +Kuna sehemu mbili za programu ya mteja (wateja wa utekelezaji na wateja wa makubaliano), kila moja ikiwa na mrundiko wake tofauti wa mtandao. Pamoja na kuwasiliana na nodi zingine za Ethereum, wateja wa utekelezaji na wateja wa makubaliano wanapaswa kuwasiliana wao kwa wao. Ukurasa huu unatoa maelezo ya utangulizi ya itifaki zinazowezesha mawasiliano haya. + +Wateja wa utekelezaji husambaza miamala kwa njia ya uvumi kwenye mtandao wa rika-kwa-rika wa safu ya utekelezaji. Hii inahitaji mawasiliano yaliyosimbwa kwa njia fiche kati ya rika zilizothibitishwa. Mthibitishaji anapochaguliwa kupendekeza bloku, miamala kutoka kwenye bwawa la miamala la ndani la nodi itapitishwa kwa wateja wa makubaliano kupitia muunganisho wa RPC wa ndani, ambayo itawekwa kwenye bloku za Beacon. Wateja wa makubaliano kisha watasambaza bloku za Beacon kwa njia ya uvumi kwenye mtandao wao wa p2p. Hii inahitaji mitandao miwili tofauti ya p2p: mmoja unaounganisha wateja wa utekelezaji kwa ajili ya usambazaji wa uvumi wa miamala na mwingine unaounganisha wateja wa makubaliano kwa ajili ya usambazaji wa uvumi wa bloku. + +## Mahitaji ya awali {#prerequisites} + +Ujuzi fulani kuhusu [nodi na wateja](/developers/docs/nodes-and-clients/) wa Ethereum utasaidia katika kuelewa ukurasa huu. + +## Safu ya Utekelezaji {#execution-layer} + +Itifaki za mtandao za safu ya utekelezaji zimegawanywa katika mirundiko miwili: + +- mrundiko wa ugunduzi: umejengwa juu ya UDP na unaruhusu nodi mpya kupata rika za kuunganisha nazo + +- mrundiko wa DevP2P: unakaa juu ya TCP na huwezesha nodi kubadilishana habari + +Mirundiko yote miwili hufanya kazi sambamba. Mrundiko wa ugunduzi huleta washiriki wapya kwenye mtandao, na mrundiko wa DevP2P huwezesha mwingiliano wao. + +### Ugunduzi {#discovery} + +Ugunduzi ni mchakato wa kupata nodi zingine kwenye mtandao. Hii huanzishwa kwa kutumia seti ndogo ya 'bootnodes' (nodi ambazo anwani zake [zimewekwa kwa msimbo mgumu](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go) kwenye mteja ili ziweze kupatikana mara moja na kuunganisha mteja na rika). Hizi 'bootnodes' zipo tu kwa ajili ya kutambulisha nodi mpya kwa seti ya rika - hili ndilo kusudi lao pekee, hazishiriki katika kazi za kawaida za mteja kama kusawazisha mnyororo, na zinatumika tu mara ya kwanza kabisa mteja anapoanzishwa. + +Itifaki inayotumika kwa mwingiliano wa nodi-bootnode ni toleo lililobadilishwa la [Kademlia](https://medium.com/coinmonks/a-brief-overview-of-kademlia-and-its-use-in-various-decentralized-platforms-da08a7f72b8f) ambalo hutumia [jedwali la hashi lililosambazwa](https://en.wikipedia.org/wiki/Distributed_hash_table) kushiriki orodha za nodi. Kila nodi ina toleo la jedwali hili lenye habari inayohitajika kuungana na rika zake za karibu. Huu 'ukaribu' si wa kijiografia - umbali unafafanuliwa na mfanano wa kitambulisho cha nodi. Jedwali la kila nodi huburudishwa mara kwa mara kama kipengele cha usalama. Kwa mfano, katika itifaki ya ugunduzi ya [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5), nodi pia zinaweza kutuma 'matangazo' yanayoonyesha itifaki-ndogo ambazo mteja anaunga mkono, na hivyo kuruhusu rika kujadiliana kuhusu itifaki ambazo zote zinaweza kutumia kuwasiliana. + +Ugunduzi huanza na mchezo wa PING-PONG. PING-PONG yenye mafanikio "huunganisha" nodi mpya na bootnode. Ujumbe wa kwanza unaoarifu bootnode juu ya kuwepo kwa nodi mpya inayoingia kwenye mtandao ni `PING`. `PING` hii inajumuisha habari iliyohashiwa kuhusu nodi mpya, bootnode na muhuri wa muda wa kuisha. Bootnode hupokea `PING` na kurudisha `PONG` iliyo na hashi ya `PING`. Ikiwa hashi za `PING` na `PONG` zikifanana basi muunganisho kati ya nodi mpya na bootnode unathibitishwa na husemekana kuwa "zimeunganishwa". + +Mara baada ya kuunganishwa, nodi mpya inaweza kutuma ombi la `FIND-NEIGHBOURS` kwa bootnode. Data inayorudishwa na bootnode inajumuisha orodha ya rika ambazo nodi mpya inaweza kuunganisha nazo. Ikiwa nodi hazijaunganishwa, ombi la `FIND-NEIGHBOURS` litashindwa, kwa hivyo nodi mpya haitaweza kuingia kwenye mtandao. + +Mara tu nodi mpya inapopokea orodha ya majirani kutoka kwa bootnode, huanza ubadilishanaji wa PING-PONG na kila mmoja wao. PING-PONG zenye mafanikio huunganisha nodi mpya na majirani zake, na kuwezesha ubadilishanaji wa ujumbe. + +``` +anza mteja --> unganisha kwenye bootnode --> unganisha na bootnode --> tafuta majirani --> unganisha na majirani +``` + +Wateja wa utekelezaji kwa sasa wanatumia itifaki ya ugunduzi ya [Discv4](https://github.com/ethereum/devp2p/blob/master/discv4.md) na kuna juhudi zinazoendelea za kuhamia kwenye itifaki ya [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5). + +#### ENR: Rekodi za Nodi za Ethereum {#enr} + +[Rekodi ya Nodi ya Ethereum (ENR)](/developers/docs/networking-layer/network-addresses/) ni kitu chenye vipengele vitatu vya msingi: saini (hashi ya yaliyomo kwenye rekodi iliyotengenezwa kulingana na mpango fulani wa utambulisho uliokubaliwa), nambari ya mfuatano inayofuatilia mabadiliko kwenye rekodi, na orodha isiyo na mpangilio ya jozi za ufunguo:thamani. Hii ni fomati isiyopitwa na wakati inayoruhusu ubadilishanaji rahisi wa habari za utambulisho kati ya rika mpya na ndiyo fomati inayopendelewa ya [anwani ya mtandao](/developers/docs/networking-layer/network-addresses) kwa nodi za Ethereum. + +#### Kwa nini ugunduzi umejengwa juu ya UDP? {#why-udp} + +UDP haiungi mkono ukaguzi wowote wa makosa, kutuma tena pakiti zilizoshindwa, au kufungua na kufunga miunganisho kiotomatiki - badala yake inatuma tu mtiririko endelevu wa habari kwa lengo, bila kujali kama imepokelewa kwa mafanikio. Utendaji huu mdogo pia unamaanisha gharama ndogo, na kufanya aina hii ya muunganisho kuwa wa haraka sana. Kwa ugunduzi, ambapo nodi inataka tu kujulisha uwepo wake ili kuanzisha muunganisho rasmi na rika, UDP inatosha. Hata hivyo, kwa sehemu iliyobaki ya mrundiko wa mtandao, UDP haifai kwa madhumuni hayo. Ubadilishanaji wa habari kati ya nodi ni mgumu sana na kwa hiyo unahitaji itifaki iliyo na vipengele kamili inayoweza kuunga mkono utumaji upya, ukaguzi wa makosa n.k. Gharama ya ziada inayohusishwa na TCP inastahili utendaji wa ziada. Kwa hiyo, sehemu kubwa ya mrundiko wa P2P hufanya kazi juu ya TCP. + +### DevP2P {#devp2p} + +DevP2P yenyewe ni mrundiko mzima wa itifaki ambazo Ethereum hutekeleza kuanzisha na kudumisha mtandao wa rika-kwa-rika. Baada ya nodi mpya kuingia kwenye mtandao, mwingiliano wao unasimamiwa na itifaki katika mrundiko wa [DevP2P](https://github.com/ethereum/devp2p). Hizi zote ziko juu ya TCP na zinajumuisha itifaki ya usafirishaji ya RLPx, itifaki ya waya na itifaki-ndogo kadhaa. [RLPx](https://github.com/ethereum/devp2p/blob/master/rlpx.md) ni itifaki inayosimamia uanzishaji, uthibitishaji na udumishaji wa vipindi kati ya nodi. RLPx husimba ujumbe kwa kutumia RLP (Recursive Length Prefix) ambayo ni njia yenye ufanisi mkubwa wa nafasi ya kusimba data katika muundo mdogo kwa ajili ya kutuma kati ya nodi. + +Kipindi cha RLPx kati ya nodi mbili huanza na mpeano wa mikono wa awali wa kikriptografia. Hii inahusisha nodi kutuma ujumbe wa uthibitisho ambao kisha huthibitishwa na rika. Baada ya uthibitisho wenye mafanikio, rika hutengeneza ujumbe wa uthibitisho-wa-kukubali kurudisha kwa nodi iliyoanzisha. Huu ni mchakato wa kubadilishana funguo unaowezesha nodi kuwasiliana kwa faragha na kwa usalama. Mpeano wa mikono wa kikriptografia wenye mafanikio kisha huchochea nodi zote mbili kutuma ujumbe wa "hello" kwa kila mmoja "kwenye waya". Itifaki ya waya huanzishwa na ubadilishanaji wenye mafanikio wa ujumbe wa hello. + +Ujumbe wa hello una: + +- toleo la itifaki +- kitambulisho cha mteja +- bandari +- kitambulisho cha nodi +- orodha ya itifaki-ndogo zinazotumika + +Hii ni habari inayohitajika kwa mwingiliano wenye mafanikio kwa sababu inafafanua uwezo gani unashirikiwa kati ya nodi zote mbili na inasanidi mawasiliano. Kuna mchakato wa majadiliano ya itifaki-ndogo ambapo orodha za itifaki-ndogo zinazotumika na kila nodi zinalinganishwa na zile ambazo ni za kawaida kwa nodi zote mbili zinaweza kutumika katika kipindi. + +Pamoja na ujumbe wa hello, itifaki ya waya inaweza pia kutuma ujumbe wa "kukata muunganisho" unaotoa onyo kwa rika kwamba muunganisho utafungwa. Itifaki ya waya pia inajumuisha ujumbe wa PING na PONG ambao hutumwa mara kwa mara ili kuweka kipindi wazi. Kwa hivyo, ubadilishanaji wa itifaki za RLPx na waya huweka misingi ya mawasiliano kati ya nodi, na kutoa jukwaa la habari muhimu kubadilishwa kulingana na itifaki-ndogo maalum. + +### Itifaki-ndogo {#sub-protocols} + +#### Itifaki ya waya {#wire-protocol} + +Mara tu rika zinapounganishwa, na kipindi cha RLPx kimeanzishwa, itifaki ya waya inafafanua jinsi rika zinavyowasiliana. Hapo awali, itifaki ya waya ilifafanua kazi tatu kuu: usawazishaji wa mnyororo, uenezaji wa bloku na ubadilishanaji wa miamala. Hata hivyo, mara tu Ethereum ilipohamia kwenye uthibitisho wa hisa, uenezaji wa bloku na usawazishaji wa mnyororo ukawa sehemu ya safu ya makubaliano. Ubadilishanaji wa miamala bado uko chini ya mamlaka ya wateja wa utekelezaji. Ubadilishanaji wa miamala unamaanisha kubadilishana miamala inayosubiri kati ya nodi ili wajenzi wa bloku waweze kuchagua baadhi yao kwa ajili ya kujumuishwa katika bloku inayofuata. Taarifa za kina kuhusu kazi hizi zinapatikana [hapa](https://github.com/ethereum/devp2p/blob/master/caps/eth.md). Wateja wanaounga mkono itifaki-ndogo hizi huzionesha kupitia [JSON-RPC](/developers/docs/apis/json-rpc/). + +#### les (itifaki-ndogo nyepesi ya Ethereum) {#les} + +Hii ni itifaki ndogo kwa ajili ya kusawazisha wateja wepesi. Kijadi itifaki hii haijatumiwa sana kwa sababu nodi kamili zinahitajika kutoa data kwa wateja wepesi bila kupewa motisha. Tabia chaguomsingi ya wateja wa utekelezaji si kutoa data ya wateja wepesi kupitia les. Taarifa zaidi zinapatikana katika [vipimo](https://github.com/ethereum/devp2p/blob/master/caps/les.md) vya les. + +#### Snap {#snap} + +Itifaki ya [snap](https://github.com/ethereum/devp2p/blob/master/caps/snap.md#ethereum-snapshot-protocol-snap) ni kiendelezi cha hiari kinachoruhusu rika kubadilishana picha za hali za hivi karibuni, kuruhusu rika kuthibitisha data ya akaunti na ghala bila kulazimika kupakua nodi za kati za Merkle trie. + +#### Wit (itifaki ya shahidi) {#wit} + +[Itifaki ya shahidi](https://github.com/ethereum/devp2p/blob/master/caps/wit.md#ethereum-witness-protocol-wit) ni kiendelezi cha hiari kinachowezesha ubadilishanaji wa mashahidi wa hali kati ya rika, kusaidia kusawazisha wateja hadi ncha ya mnyororo. + +#### Whisper {#whisper} + +Whisper ilikuwa itifaki iliyolenga kutoa ujumbe salama kati ya rika bila kuandika habari yoyote kwenye mnyororo wa bloku. Ilikuwa sehemu ya itifaki ya waya ya DevP2P lakini sasa imepitwa na wakati. [Miradi mingine inayohusiana](https://wakunetwork.com/) ipo yenye malengo sawa. + +## Safu ya makubaliano {#consensus-layer} + +Wateja wa makubaliano hushiriki katika mtandao tofauti wa rika-kwa-rika wenye vipimo tofauti. Wateja wa makubaliano wanahitaji kushiriki katika usambazaji wa bloku kwa njia ya uvumi ili waweze kupokea bloku mpya kutoka kwa rika na kuzitangaza inapokuwa zamu yao ya kuwa wapendekezaji wa bloku. Sawa na safu ya utekelezaji, hii kwanza inahitaji itifaki ya ugunduzi ili nodi iweze kupata rika na kuanzisha vipindi salama vya kubadilishana bloku, uthibitisho n.k. + +### Ugunduzi {#consensus-discovery} + +Sawa na wateja wa utekelezaji, wateja wa makubaliano hutumia [discv5](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-discovery-domain-discv5) juu ya UDP kwa ajili ya kupata rika. Utekelezaji wa safu ya makubaliano ya discv5 unatofautiana na ule wa wateja wa utekelezaji tu kwa kuwa inajumuisha adapta inayounganisha discv5 kwenye mrundiko wa [libP2P](https://libp2p.io/), na kuacha kutumia DevP2P. Vipindi vya RLPx vya safu ya utekelezaji vimepitwa na wakati na badala yake kunatumiwa mpeano wa mikono wa kituo salama cha kelele cha libP2P. + +### ENRs {#consensus-enr} + +ENR ya nodi za makubaliano inajumuisha ufunguo wa umma wa nodi, anwani ya IP, bandari za UDP na TCP na sehemu mbili maalum za makubaliano: uwanja wa biti wa mtandao-mdogo wa uthibitisho na ufunguo wa `eth2`. Ya kwanza hurahisisha nodi kupata rika zinazoshiriki katika mitandao-midogo maalum ya usambazaji wa uthibitisho kwa njia ya uvumi. Ufunguo wa `eth2` una habari kuhusu toleo gani la uma la Ethereum ambalo nodi inatumia, kuhakikisha rika zinaunganisha na Ethereum sahihi. + +### libP2P {#libp2p} + +Mrundiko wa libP2P unaunga mkono mawasiliano yote baada ya ugunduzi. Wateja wanaweza kupiga na kusikiliza kwenye IPv4 na/au IPv6 kama ilivyofafanuliwa katika ENR zao. Itifaki kwenye safu ya libP2P zinaweza kugawanywa katika vikoa vya uvumi na req/resp. + +### Uvumi {#gossip} + +Kikoa cha uvumi kinajumuisha habari zote ambazo zinapaswa kuenea haraka kote kwenye mtandao. Hii inajumuisha bloku za beacon, thibitisho, uthibitisho, kutoka na adhabu. Hii inapitishwa kwa kutumia libP2P gossipsub v1 na inategemea metadata mbalimbali kuhifadhiwa ndani ya kila nodi, ikiwa ni pamoja na ukubwa wa juu wa mizigo ya uvumi kupokea na kusambaza. Taarifa za kina kuhusu kikoa cha uvumi zinapatikana [hapa](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-gossip-domain-gossipsub). + +### Ombi-jibu {#request-response} + +Kikoa cha ombi-jibu kina itifaki kwa ajili ya wateja wanaoomba taarifa maalum kutoka kwa rika zao. Mifano inajumuisha kuomba bloku maalum za Beacon zinazolingana na hashi fulani za mizizi au ndani ya safu ya nafasi. Majibu yanarudishwa kila wakati kama baiti zilizosimbwa za SSZ na kubanwa na snappy. + +## Kwa nini mteja wa makubaliano anapendelea SSZ badala ya RLP? {#ssz-vs-rlp} + +SSZ inasimama kwa ajili ya serialisheni rahisi. Inatumia viwianishi visivyobadilika vinavyorahisisha kusimbua sehemu binafsi za ujumbe uliosimbwa bila kulazimika kusimbua muundo mzima, jambo ambalo ni muhimu sana kwa mteja wa makubaliano kwani inaweza kuchukua kwa ufanisi vipande maalum vya habari kutoka kwa ujumbe uliosimbwa. Pia imeundwa mahususi kuunganishwa na itifaki za Merkle, na faida zinazohusiana na ufanisi kwa umerkeleshaji. Kwa kuwa hashi zote katika safu ya makubaliano ni mizizi ya Merkle, hii inaongeza uboreshaji mkubwa. SSZ pia inahakikisha uwakilishi wa kipekee wa thamani. + +## Kuunganisha wateja wa utekelezaji na makubaliano {#connecting-clients} + +Wateja wote wa makubaliano na utekelezaji hufanya kazi sambamba. Wanahitaji kuunganishwa ili mteja wa makubaliano aweze kutoa maelekezo kwa mteja wa utekelezaji, na mteja wa utekelezaji aweze kupitisha vifurushi vya miamala kwa mteja wa makubaliano ili kujumuisha katika bloku za Beacon. Mawasiliano kati ya wateja hao wawili yanaweza kufikiwa kwa kutumia muunganisho wa RPC wa ndani. API inayojulikana kama ['Engine-API'](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) inafafanua maelekezo yanayotumwa kati ya wateja hao wawili. Kwa kuwa wateja wote wawili wako nyuma ya utambulisho mmoja wa mtandao, wanashiriki ENR (rekodi ya nodi ya Ethereum) ambayo ina ufunguo tofauti kwa kila mteja (ufunguo wa eth1 na ufunguo wa eth2). + +Muhtasari wa mtiririko wa udhibiti umeonyeshwa hapa chini, na mrundiko husika wa mtandao ukiwa kwenye mabano. + +### Wakati mteja wa makubaliano si mzalishaji wa bloku: {#when-consensus-client-is-not-block-producer} + +- Mteja wa makubaliano hupokea bloku kupitia itifaki ya uvumi wa bloku (consensus p2p) +- Mteja wa makubaliano anathibitisha awali bloku, yaani, anahakikisha imefika kutoka kwa mtumaji halali na metadata sahihi +- Miamala katika bloku inatumwa kwa safu ya utekelezaji kama mzigo wa utekelezaji (muunganisho wa RPC wa ndani) +- Safu ya utekelezaji inatekeleza miamala na kuthibitisha hali katika kichwa cha bloku (yaani, inakagua kama hashi zinalingana) +- Safu ya utekelezaji inarudisha data ya uthibitishaji kwenye safu ya makubaliano, bloku sasa inachukuliwa kuwa imethibitishwa (muunganisho wa RPC wa ndani) +- Safu ya makubaliano inaongeza bloku kwenye kichwa cha mnyororo wake wa bloku na kuithibitisha, ikitangaza uthibitisho huo kwenye mtandao (consensus p2p) + +### Wakati mteja wa makubaliano ni mzalishaji wa bloku: {#when-consensus-client-is-block-producer} + +- Mteja wa makubaliano hupokea taarifa kwamba ndiye mzalishaji wa bloku anayefuata (consensus p2p) +- Safu ya makubaliano huita mbinu ya `create block` katika mteja wa utekelezaji (RPC ya ndani) +- Safu ya utekelezaji hufikia mempool ya miamala ambayo imejaa kwa kutumia itifaki ya uvumi wa miamala (execution p2p) +- Mteja wa utekelezaji huweka miamala kwenye bloku, hutekeleza miamala na kutengeneza hashi ya bloku +- Mteja wa makubaliano huchukua miamala na hashi ya bloku kutoka kwa mteja wa utekelezaji na kuziongeza kwenye bloku ya beacon (RPC ya ndani) +- Mteja wa makubaliano hutangaza bloku kupitia itifaki ya uvumi wa bloku (consensus p2p) +- Wateja wengine hupokea bloku iliyopendekezwa kupitia itifaki ya uvumi wa bloku na kuthibitisha kama ilivyoelezwa hapo juu (consensus p2p) + +Mara tu bloku inapothibitishwa na wathibitishaji wa kutosha, inaongezwa kwenye kichwa cha mnyororo, inahalalishwa na hatimaye kukamilishwa. + +![](cons_client_net_layer.png) +![](exe_client_net_layer.png) + +Mchoro wa safu ya mtandao kwa wateja wa makubaliano na utekelezaji, kutoka [ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) + +## Masomo zaidi {#further-reading} + +[DevP2P](https://github.com/ethereum/devp2p) +[LibP2p](https://github.com/libp2p/specs) +[Vipimo vya mtandao vya safu ya makubaliano](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) +[kademlia hadi discv5](https://vac.dev/kademlia-to-discv5) +[karatasi ya kademlia](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) +[utangulizi wa Ethereum p2p](https://p2p.paris/en/talks/intro-ethereum-networking/) +[uhusiano wa eth1/eth2](http://ethresear.ch/t/eth1-eth2-client-relationship/7248) +[video ya maelezo ya muungano na mteja wa eth2](https://www.youtube.com/watch?v=zNIrIninMgg) diff --git a/public/content/translations/sw/developers/docs/networking-layer/network-addresses/index.md b/public/content/translations/sw/developers/docs/networking-layer/network-addresses/index.md new file mode 100644 index 00000000000..18b10fa3957 --- /dev/null +++ b/public/content/translations/sw/developers/docs/networking-layer/network-addresses/index.md @@ -0,0 +1,39 @@ +--- +title: Anwani ya mtandao +description: Utangulizi wa anwani za mtandao. +lang: sw +sidebarDepth: 2 +--- + +Nodi za Ethereum zinapaswa kujitambulisha na maelezo ya msingi ili kuunganishwa na rika. Ili kuhakikisha rika yoyote inayowezekana inaweza kufasiri maelezo haya, hutumwa katika mojawapo ya miundo mitatu sanifu ambayo nodi yoyote ya Ethereum inaweza kuelewa: multiaddr, enode, au Rekodi za Nodi za Ethereum (ENRs). ENRs ni kiwango cha sasa cha anwani za mtandao wa Ethereum. + +## Mahitaji ya awali {#prerequisites} + +Uelewa fulani wa [safu ya mtandao](/developers/docs/networking-layer/) ya Ethereum unahitajika ili kuelewa ukurasa huu. + +## Multiaddr {#multiaddr} + +Muundo halisi wa anwani ya nodi ya Ethereum ulikuwa 'multiaddr' (fupi ya 'anwani-nyingi'). Multiaddr ni muundo wa ulimwengu wote ulioundwa kwa ajili ya mitandao ya rika kwa rika. Anwani zinawakilishwa kama jozi za ufunguo-thamani na funguo na thamani zimetenganishwa na mkwaju wa mbele. Kwa mfano, multiaddr ya nodi iliyo na anwani ya IPv4 `192.168.22.27` inayosikiliza kwenye bandari ya TCP `33000` inaonekana hivi: + +/ip4/192.168.22.27/tcp/33000 + +Kwa nodi ya Ethereum, multiaddr ina kitambulisho cha nodi (hashi ya ufunguo wao wa umma): + +/ip4/192.168.22.27/tcp/33000/p2p/5t7Nv7dG2d6ffbvAiewVsEwWweU3LdebSqX2y1bPrW8br + +## Enode {#enode} + +Enode ni njia ya kutambua nodi ya Ethereum kwa kutumia muundo wa anwani ya URL. Kitambulisho cha nodi cha heksadesimali kimesimbwa katika sehemu ya jina la mtumiaji ya URL kimetenganishwa na mwenyeji kwa kutumia alama ya @. Jina la mwenyeji linaweza tu kutolewa kama anwani ya IP; majina ya DNS hayaruhusiwi. Bandari katika sehemu ya jina la mwenyeji ni bandari ya kusikiliza ya TCP. Ikiwa bandari za TCP na UDP (ugunduzi) zinatofautiana, bandari ya UDP imebainishwa kama kigezo cha hoja "discport". + +Katika mfano ufuatao, URL ya nodi inaelezea nodi iliyo na anwani ya IP `10.3.58.6`, bandari ya TCP `30303` na bandari ya ugunduzi ya UDP `30301`. + +enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301 + +## Rekodi za Nodi za Ethereum (ENRs) {#enr} + +Rekodi za Nodi za Ethereum (ENRs) ni muundo sanifu wa anwani za mtandao kwenye Ethereum. Zinachukua nafasi ya multiaddr na enodes. Hizi ni muhimu hasa kwa sababu zinaruhusu ubadilishanaji mkubwa wa habari kati ya nodi. ENR ina sahihi, nambari ya mfuatano na sehemu zinazoelezea mpango wa utambulisho unaotumiwa kutengeneza na kuthibitisha sahihi. ENR inaweza pia kujazwa na data holela iliyoandaliwa kama jozi za ufunguo-thamani. Jozi hizi za ufunguo-thamani zina anwani ya IP ya nodi na maelezo kuhusu itifaki ndogo ambayo nodi inaweza kutumia. Wateja wa makubaliano hutumia [muundo maalum wa ENR](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) kutambua nodi za mwanzo na pia hujumuisha sehemu ya `eth2` iliyo na maelezo kuhusu uma wa sasa wa Ethereum na subneti ya uvumi wa uthibitishaji (hii inaunganisha nodi na seti maalum ya rika ambao uthibitishaji wao umekusanywa pamoja). + +## Masomo zaidi {#further-reading} + +- [EIP-778: Rekodi za Nodi za Ethereum (ENR)](https://eips.ethereum.org/EIPS/eip-778) +- [LibP2P: Multiaddr-Enode-ENR?!](https://consensys.net/diligence/blog/2020/09/libp2p-multiaddr-enode-enr/) diff --git a/public/content/translations/sw/developers/docs/networking-layer/portal-network/index.md b/public/content/translations/sw/developers/docs/networking-layer/portal-network/index.md new file mode 100644 index 00000000000..cef7dea0f47 --- /dev/null +++ b/public/content/translations/sw/developers/docs/networking-layer/portal-network/index.md @@ -0,0 +1,89 @@ +--- +title: Mtandao wa Portal +description: Muhtasari wa Mtandao wa Portal - mtandao unaoendelezwa ulioundwa kusaidia wateja wenye rasilimali chache. +lang: sw +--- + +Ethereum ni mtandao unaoundwa na kompyuta zinazoendesha programu ya mteja wa Ethereum. Kila moja ya kompyuta hizi inaitwa 'nodi'. Programu ya mteja inaruhusu nodi kutuma na kupokea data kwenye mtandao wa Ethereum, na inathibitisha data dhidi ya sheria za itifaki ya Ethereum. Nodi huweka data nyingi za kihistoria katika hifadhi zao za diski na huongeza juu yake zinapopokea pakiti mpya za habari, zinazojulikana kama bloku, kutoka kwa nodi zingine kwenye mtandao. Hii ni muhimu ili kuhakikisha kila wakati kwamba nodi ina taarifa inayoendana na mtandao wote. Hii inamaanisha kuendesha nodi kunaweza kuhitaji nafasi kubwa ya diski. Baadhi ya operesheni za nodi zinaweza kuhitaji RAM nyingi pia. + +Ili kukabiliana na tatizo hili la hifadhi ya diski, nodi 'nyepesi' zimeundwa ambazo huomba taarifa kutoka kwa nodi kamili badala ya kuzihifadhi zote zenyewe. Hata hivyo, hii inamaanisha kuwa nodi nyepesi haithibitishi taarifa kwa kujitegemea na badala yake inaamini nodi nyingine. Inamaanisha pia kwamba nodi kamili zinahitajika kufanya kazi ya ziada ili kuhudumia nodi hizo nyepesi. + +Mtandao wa Portal ni muundo mpya wa mtandao kwa ajili ya Ethereum unaolenga kutatua tatizo la upatikanaji wa data kwa nodi "nyepesi" bila kulazimika kuamini au kuongeza mzigo kwa nodi kamili, kwa kushiriki data muhimu katika vipande vidogo kwenye mtandao. + +Zaidi kuhusu [nodi na wateja](/developers/docs/nodes-and-clients/) + +## Kwa nini tunahitaji Mtandao wa Portal {#why-do-we-need-portal-network} + +Nodi za Ethereum huhifadhi nakala zao kamili au sehemu ya mnyororo wa bloku wa Ethereum. Nakala hii ya ndani hutumiwa kuthibitisha miamala na kuhakikisha nodi inafuata mnyororo sahihi. Data hii iliyohifadhiwa ndani inaruhusu nodi kuthibitisha kwa kujitegemea kuwa data inayoingia ni halali na sahihi bila kuhitaji kuamini chombo kingine chochote. + +Nakala hii ya ndani ya mnyororo wa bloku na data inayohusiana ya hali na risiti huchukua nafasi nyingi kwenye diski kuu ya nodi. Kwa mfano, diski kuu ya 2TB inapendekezwa kwa ajili ya kuendesha nodi kwa kutumia [Geth](https://geth.ethereum.org) iliyooanishwa na mteja wa makubaliano. Kwa kutumia ulandanishi wa haraka (snap sync), ambao huhifadhi tu data ya mnyororo kutoka kwa seti ya bloku za hivi karibuni, Geth kwa kawaida huchukua takriban 650GB ya nafasi ya diski lakini huongezeka kwa takriban 14GB/wiki (unaweza kupunguza nodi kurudi hadi 650GB mara kwa mara). + +Hii inamaanisha kuendesha nodi kunaweza kuwa ghali, kwa sababu kiasi kikubwa cha nafasi ya diski kinapaswa kutengewa Ethereum. Kuna suluhisho kadhaa kwa tatizo hili katika mpango mkakati wa Ethereum, ikiwa ni pamoja na [kuisha muda wa historia](/roadmap/statelessness/#history-expiry), [kuisha muda wa hali](/roadmap/statelessness/#state-expiry) na [kutokuwa na hali (statelessness)](/roadmap/statelessness/). Hata hivyo, kuna uwezekano bado miaka kadhaa kabla ya haya kutekelezwa. Pia kuna [nodi nyepesi](/developers/docs/nodes-and-clients/light-clients/) ambazo hazihifadhi nakala zao za data ya mnyororo, zinaomba data wanayohitaji kutoka kwa nodi kamili. Hata hivyo, hii inamaanisha nodi nyepesi zinapaswa kuamini nodi kamili kutoa data ya kweli na pia huweka shinikizo kwa nodi kamili ambazo zinapaswa kutoa data ambayo nodi nyepesi zinahitaji. + +Mtandao wa Portal unalenga kutoa njia mbadala kwa nodi nyepesi kupata data zao ambayo haihitaji kuamini au kuongeza kwa kiasi kikubwa kazi inayopaswa kufanywa na nodi kamili. Njia hii itafanywa kwa kuanzisha njia mpya kwa nodi za Ethereum kushiriki data kwenye mtandao. + +## Mtandao wa Portal unafanyaje kazi? {#how-does-portal-network-work} + +Nodi za Ethereum zina itifaki kali zinazofafanua jinsi zinavyowasiliana. Wateja wa utekelezaji huwasiliana kwa kutumia seti ya itifaki ndogo zinazojulikana kama [DevP2P](/developers/docs/networking-layer/#devp2p), wakati wateja wa makubaliano hutumia rundo tofauti la itifaki ndogo liitwalo [libP2P](/developers/docs/networking-layer/#libp2p). Hizi hufafanua aina za data zinazoweza kupitishwa kati ya nodi. + +![devP2P na libP2P](portal-network-devp2p-libp2p.png) + +Nodi pia zinaweza kutoa data maalum kupitia [API ya JSON-RPC](/developers/docs/apis/json-rpc/), ambayo ndiyo jinsi programu na mikoba hubadilishana habari na nodi za Ethereum. Hata hivyo, hakuna kati ya hizi ambazo ni itifaki bora za kutoa data kwa wateja wepesi. + +Wateja wepesi kwa sasa hawawezi kuomba vipande maalum vya data ya mnyororo kupitia DevP2P au libP2p kwa sababu itifaki hizo zimeundwa tu kuwezesha ulandanishi wa mnyororo na usambazaji wa bloku na miamala. Wateja wepesi hawataki kupakua taarifa hii kwa sababu hiyo ingewazuia kuwa "wepesi". + +API ya JSON-RPC si chaguo bora kwa maombi ya data ya mteja mwepesi pia, kwa sababu inategemea muunganisho kwa nodi kamili maalum au mtoa huduma wa RPC wa kati anayeweza kutoa data. Hii inamaanisha mteja mwepesi anapaswa kuamini nodi/mtoa huduma huyo maalum kuwa mwaminifu, na pia nodi kamili inaweza kulazimika kushughulikia maombi mengi kutoka kwa wateja wengi wepesi, na kuongeza mahitaji yao ya kipimo data. + +Lengo la Mtandao wa Portal ni kufikiria upya muundo mzima, ukijenga mahsusi kwa ajili ya wepesi, nje ya vikwazo vya muundo wa wateja waliopo wa Ethereum. + +Wazo kuu la Mtandao wa Portal ni kuchukua sehemu bora zaidi za rundo la sasa la mtandao kwa kuwezesha taarifa inayohitajika na wateja wepesi, kama vile data ya kihistoria na utambulisho wa kiongozi wa sasa wa mnyororo kutolewa kupitia mtandao mwepesi wa rika-kwa-rika uliogatuliwa wa mtindo wa DevP2P kwa kutumia [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table) (sawa na Bittorrent). + +Wazo ni kuongeza sehemu ndogo za jumla ya data ya kihistoria ya Ethereum na baadhi ya majukumu maalum ya nodi kwa kila nodi. Kisha, maombi yanashughulikiwa kwa kutafuta nodi zinazohifadhi data maalum iliyoombwa na kuichukua kutoka kwao. + +Hii inageuza mtindo wa kawaida wa nodi nyepesi kupata nodi moja na kuomba wachuje na kutoa kiasi kikubwa cha data; badala yake, wanachuja haraka mtandao mkubwa wa nodi ambapo kila moja hushughulikia kiasi kidogo cha data. + +Lengo ni kuruhusu mtandao uliogatuliwa wa wateja wepesi wa Portal kuweza: + +- kufuatilia kiongozi wa mnyororo +- kulandanisha data ya hivi karibuni na ya kihistoria ya mnyororo +- kurejesha data ya hali +- kutangaza miamala +- kutekeleza miamala kwa kutumia [EVM](/developers/docs/evm/) + +Faida za muundo huu wa mtandao ni: + +- kupunguza utegemezi kwa watoa huduma wa kati +- Kupunguza matumizi ya kipimo data cha Intaneti +- Ulandanishi mdogo au sifuri +- Inapatikana kwa vifaa vyenye rasilimali chache (\<1 GB RAM, \<100 MB nafasi ya diski, 1 CPU) + +Jedwali lililo hapa chini linaonyesha kazi za wateja waliopo ambazo zinaweza kutolewa na Mtandao wa Portal, na kuwawezesha watumiaji kupata kazi hizi kwenye vifaa vyenye rasilimali chache sana. + +### Mitandao ya Portal + +| Mteja mwepesi wa Beacon | Mtandao wa hali | Usambazaji wa miamala | Mtandao wa historia | +| -------------------------- | ----------------------------- | --------------------- | ------------------- | +| Mnyororo mwepesi wa Beacon | Hifadhi ya akaunti na mkataba | Mempool nyepesi | Vichwa | +| Data ya itifaki | | | Miili ya bloku | +| | | | Risiti | + +## Utofauti wa wateja kama chaguo-msingi {#client-diversity-as-default} + +Wasanidi programu wa Mtandao wa Portal pia walifanya chaguo la kubuni ili kujenga wateja wanne tofauti wa Mtandao wa Portal tangu siku ya kwanza. + +Wateja wa Mtandao wa Portal ni: + +- [Trin](https://github.com/ethereum/trin): imeandikwa kwa Rust +- [Fluffy](https://fluffy.guide): imeandikwa kwa Nim +- [Ultralight](https://github.com/ethereumjs/ultralight): imeandikwa kwa Typescript +- [Shisui](https://github.com/zen-eth/shisui): imeandikwa kwa Go + +Kuwa na utekelezaji mwingi wa wateja huru huongeza ustahimilivu na ugatuzi wa mtandao wa Ethereum. + +Ikiwa mteja mmoja atapata matatizo au udhaifu, wateja wengine wanaweza kuendelea kufanya kazi vizuri, na kuzuia chanzo kimoja cha kushindwa. Zaidi ya hayo, utekelezaji mbalimbali wa wateja huchochea uvumbuzi na ushindani, na kusababisha maboresho na kupunguza hatari ya utamaduni mmoja ndani ya mfumo ikolojia. + +## Masomo zaidi {#further-reading} + +- [Mtandao wa Portal (Piper Merriam katika Devcon Bogota)](https://www.youtube.com/watch?v=0stc9jnQLXA). +- [Discord ya Mtandao wa Portal](https://discord.gg/CFFnmE7Hbs) +- [Tovuti ya Mtandao wa Portal](https://www.ethportal.net/) diff --git a/public/content/translations/sw/developers/docs/networks/index.md b/public/content/translations/sw/developers/docs/networks/index.md new file mode 100644 index 00000000000..a2237455a3b --- /dev/null +++ b/public/content/translations/sw/developers/docs/networks/index.md @@ -0,0 +1,216 @@ +--- +title: Mitandao +description: Muhtasari wa mitandao ya Ethereum na mahali pa kupata testnet ether (ETH) kwa ajili ya kujaribu programu yako. +lang: sw +--- + +Mitandao ya Ethereum ni makundi ya kompyuta zilizounganishwa zinazowasiliana kwa kutumia itifaki ya Ethereum. Kuna Mtandao Mkuu mmoja tu wa Ethereum, lakini mitandao huru inayofuata sheria za itifaki sawa inaweza kuundwa kwa madhumuni ya majaribio na maendeleo. Kuna "mitandao" mingi huru inayofuata itifaki bila kuingiliana. Unaweza hata kuanzisha moja kwenye kompyuta yako kwa ajili ya kujaribu mikataba yako erevu na programu za web3. + +Akaunti yako ya Ethereum itafanya kazi kwenye mitandao tofauti, lakini salio la akaunti yako na historia ya miamala haitahamishwa kutoka kwa mtandao mkuu wa Ethereum. Kwa madhumuni ya majaribio, ni muhimu kujua ni mitandao gani inapatikana na jinsi ya kupata testnet ETH ili uweze kujaribu. Kwa ujumla, kwa masuala ya usalama, haipendekezwi kutumia tena akaunti za mtandao mkuu kwenye testnets au kinyume chake. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuelewa [misingi ya Ethereum](/developers/docs/intro-to-ethereum/) kabla ya kusoma kuhusu mitandao tofauti, kwa kuwa mitandao ya majaribio itakupa toleo la bei nafuu na salama la Ethereum la kujaribia. + +## Mitandao ya umma {#public-networks} + +Mitandao ya umma inapatikana kwa yeyote duniani aliye na muunganisho wa intaneti. Mtu yeyote anaweza kusoma au kuunda miamala kwenye mnyororo wa bloku wa umma na kuthibitisha miamala inayotekelezwa. Makubaliano kati ya rika huamua kuhusu ujumuishaji wa miamala na hali ya mtandao. + +### Mtandao Mkuu wa Ethereum {#ethereum-mainnet} + +Mtandao Mkuu ndio mnyororo wa bloku mkuu wa umma wa uzalishaji wa Ethereum, ambapo miamala ya thamani halisi hufanyika kwenye leja iliyosambazwa. + +Watu na masoko ya kubadilishana fedha wanapojadili bei za ETH, wanakuwa wanazungumzia ETH ya Mtandao Mkuu. + +### Testnet za Ethereum {#ethereum-testnets} + +Mbali na Mtandao Mkuu, kuna testnet za umma. Hii ni mitandao inayotumiwa na wasanidi programu wa itifaki au wasanidi programu wa mikataba-erevu kujaribu masasisho ya itifaki pamoja na mikataba-erevu inayowezekana katika mazingira yanayofanana na ya uzalishaji kabla ya kuipeleka kwenye Mtandao Mkuu. Fikiria hili kama mlinganisho wa seva za uzalishaji dhidi ya seva za maandalizi. + +Unapaswa kujaribu msimbo wowote wa mkataba unaouandika kwenye testnet kabla ya kupeleka kwenye Mtandao Mkuu. Miongoni mwa mfumo mtawanyo wa kimamlaka unaojumuishwa na mikataba-erevu iliyopo, miradi mingi ina nakala zilizotumwa kwenye testnet. + +Testnet nyingi zilianza kwa kutumia utaratibu wa makubaliano wa uthibitisho wa mamlaka wenye ruhusa. Hii inamaanisha idadi ndogo ya nodi huchaguliwa kuthibitisha miamala na kuunda bloku mpya – wakisimamisha utambulisho wao katika mchakato huo. Vinginevyo, baadhi ya testnet zina utaratibu wa makubaliano wa uthibitisho wa hisa ulio wazi ambapo kila mtu anaweza kujaribu kuendesha mthibitishaji, kama vile Mtandao Mkuu wa Ethereum. + +ETH kwenye testnet inatakiwa isiwe na thamani halisi; hata hivyo, kumekuwa na masoko yaliyoanzishwa kwa aina fulani za testnet ETH ambazo zimekuwa adimu au vigumu kupata. Kwa kuwa unahitaji ETH ili kuingiliana na Ethereum (hata kwenye testnet), watu wengi hupata testnet ETH bure kutoka kwa bomba. Mabomba mengi ni programu za wavuti ambapo unaweza kuweka anwani unayoomba ETH itumwe. + +#### Nitumie Testnet gani? + +Testnet mbili za umma ambazo wasanidi programu wa wateja wanazidumisha kwa sasa ni Sepolia na Hoodi. Sepolia ni mtandao kwa wasanidi programu wa mikataba na programu kujaribu programu zao. Mtandao wa Hoodi unaruhusu wasanidi programu wa itifaki kujaribu masasisho ya mtandao, na unaruhusu waweka hisa kujaribu kuendesha wathibitishaji. + +#### Sepolia {#sepolia} + +**Sepolia ndiyo testnet chaguomsingi inayopendekezwa kwa ajili ya uundaji wa programu**. Mtandao wa Sepolia unatumia seti ya wathibitishaji wenye ruhusa inayodhibitiwa na timu za wateja na majaribio. + +##### Rasilimali + +- [Tovuti](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/) + +##### Mabomba + +- [Bomba la Alchemy Sepolia](https://www.alchemy.com/faucets/ethereum-sepolia) +- [Bomba la Chain Platform Sepolia](https://faucet.chainplatform.co/faucets/ethereum-sepolia/) +- [Bomba la Chainstack Sepolia](https://faucet.chainstack.com/sepolia-testnet-faucet) +- [Bomba la Mfumo Ikolojia wa Ethereum](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) +- [Bomba la Sepolia la ethfaucet.com](https://ethfaucet.com/networks/ethereum) +- [Bomba la Sepolia la Google Cloud Web3](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) +- [Grabteeth](https://grabteeth.xyz/) +- [Bomba la Infura Sepolia](https://www.infura.io/faucet) +- [Bomba la PoW](https://sepolia-faucet.pk910.de/) +- [Bomba la QuickNode Sepolia](https://faucet.quicknode.com/ethereum/sepolia) + +#### Hoodi {#hoodi} + +Hoodi ni testnet kwa ajili ya kujaribu uthibitishaji na kusimamisha. Mtandao wa Hoodi uko wazi kwa watumiaji wanaotaka kuendesha mthibitishaji wa testnet. Waweka hisa wanaotaka kujaribu masasisho ya itifaki kabla ya kupelekwa kwenye mtandao mkuu kwa hivyo wanapaswa kutumia Hoodi. + +- Seti wazi ya wathibitishaji, waweka hisa wanaweza kujaribu masasisho ya mtandao +- Hali kubwa, muhimu kwa kujaribu mwingiliano changamano wa mikataba-erevu +- Inachukua muda mrefu kusawazisha na inahitaji hifadhi zaidi ili kuendesha nodi + +##### Rasilimali + +- [Tovuti](https://hoodi.ethpandaops.io/) +- [GitHub](https://github.com/eth-clients/hoodi) +- [Kichunguzi](https://explorer.hoodi.ethpandaops.io/) +- [Usawazishaji wa Kituo cha Ukaguzi](https://checkpoint-sync.hoodi.ethpandaops.io/) +- [Otterscan](https://hoodi.otterscan.io/) +- [Etherscan](https://hoodi.etherscan.io/) + +##### Mabomba + +- [Bomba la Hoodi la Chain Platform](https://faucet.chainplatform.co/faucets/ethereum-hoodi/) +- [Bomba la Hoodi](https://hoodi.ethpandaops.io/) +- [Bomba la PoW](https://hoodi-faucet.pk910.de/) + +#### Ephemery {#ephemery} + +Ephemery ni aina ya kipekee ya testnet ambayo huwekwa upya kikamilifu kila mwezi. Hali ya utekelezaji na makubaliano hurejea kwenye mwanzo kila baada ya siku 28, ambayo ina maana chochote kinachotokea kwenye testnet ni cha muda mfupi. Hii inafanya kuwa bora kwa ajili ya majaribio ya muda mfupi, uanzishaji wa haraka wa nodi na aina ya programu za 'hujambo ulimwengu' zisizohitaji udumu. + +- Hali mpya kila wakati, majaribio ya muda mfupi ya wathibitishaji na programu +- Inajumuisha seti ya msingi tu ya mikataba +- Seti ya wathibitishaji iliyo wazi na rahisi kupata kiasi kikubwa cha fedha +- Mahitaji madogo zaidi ya nodi na usawazishaji wa haraka zaidi, <5GB kwa wastani + +##### Rasilimali + +- [Tovuti](https://ephemery.dev/) +- [Github](https://github.com/ephemery-testnet/ephemery-resources) +- [Soga ya jamii](https://matrix.to/#/#staker-testnet:matrix.org) +- [Blockscout](https://explorer.ephemery.dev/) +- [Otterscan](https://otter.bordel.wtf/) +- [Kichunguzi cha Beacon](https://beaconlight.ephemery.dev/) +- [Usawazishaji wa Kituo cha Ukaguzi](https://checkpoint-sync.ephemery.ethpandaops.io) +- [Launchpad](https://launchpad.ephemery.dev/) + +#### Mabomba + +- [Bomba la Bordel](https://faucet.bordel.wtf/) +- [Bomba la Pk910 PoW](https://ephemery-faucet.pk910.de/) + +#### Holesky (imepitwa na wakati) {#holesky} + +Testnet ya Holesky imepitwa na wakati kuanzia Septemba 2025. Waendeshaji wa usimamishaji na watoa huduma za miundombinu wanapaswa kutumia Hoodi kwa majaribio ya wathibitishaji badala yake. + +- [Tangazo la Kuzimwa kwa Testnet ya Holesky](https://blog.ethereum.org/2025/09/01/holesky-shutdown-announcement) - _Blogu ya EF, 1-Septemba-2025_ +- [Masasisho ya Testnet za Holesky na Hoodi](https://blog.ethereum.org/en/2025/03/18/hoodi-holesky) - _Blogu ya EF, 18-Machi-2025_ + +### Testnet za safu ya 2 {#layer-2-testnets} + +[Safu ya 2 (L2)](/layer-2/) ni neno la pamoja linaloelezea seti maalum ya suluhisho za kuongeza uwezo wa Ethereum. Safu ya 2 ni mnyororo wa bloku tofauti unaopanua Ethereum na kurithi dhamana za usalama za Ethereum. Testnet za safu ya 2 kwa kawaida huunganishwa kwa karibu na testnet za umma za Ethereum. + +#### Arbitrum Sepolia {#arbitrum-sepolia} + +Testnet kwa ajili ya [Arbitrum](https://arbitrum.io/). + +##### Rasilimali + +- [Etherscan](https://sepolia.arbiscan.io/) +- [Blockscout](https://sepolia-explorer.arbitrum.io/) + +##### Mabomba + +- [Bomba la Arbitrum Sepolia la Alchemy](https://www.alchemy.com/faucets/arbitrum-sepolia) +- [Bomba la Chainlink Arbitrum Sepolia](https://faucets.chain.link/arbitrum-sepolia) +- [Bomba la ethfaucet.com Arbitrum Sepolia](https://ethfaucet.com/networks/arbitrum) +- [Bomba la QuickNode Arbitrum Sepolia](https://faucet.quicknode.com/arbitrum/sepolia) + +#### Optimistic Sepolia {#optimistic-sepolia} + +Testnet kwa ajili ya [Optimism](https://www.optimism.io/). + +##### Rasilimali + +- [Etherscan](https://sepolia-optimistic.etherscan.io/) +- [Blockscout](https://optimism-sepolia.blockscout.com/) + +##### Mabomba + +- [Bomba la Alchemy](https://www.alchemy.com/faucets/optimism-sepolia) +- [Bomba la Chainlink](https://faucets.chain.link/optimism-sepolia) +- [Bomba la ethfaucet.com Optimism Sepolia](https://ethfaucet.com/networks/optimism) +- [Bomba la Testnet](https://docs.optimism.io/builders/tools/build/faucets) + +#### Starknet Sepolia {#starknet-sepolia} + +Testnet kwa ajili ya [Starknet](https://www.starknet.io). + +##### Rasilimali + +- [Starkscan](https://sepolia.starkscan.co/) + +##### Mabomba + +- [Bomba la Alchemy](https://www.alchemy.com/faucets/starknet-sepolia) +- [Bomba la Blast Starknet Sepolia](https://blastapi.io/faucets/starknet-sepolia-eth) +- [Bomba la Starknet](https://starknet-faucet.vercel.app/) + +## Mitandao ya faragha {#private-networks} + +Mtandao wa Ethereum ni mtandao wa faragha ikiwa nodi zake hazijaunganishwa na mtandao wa umma (yaani, Mtandao Mkuu au testnet). Katika muktadha huu, faragha inamaanisha tu iliyotengwa au kutengwa, badala ya kulindwa au salama. + +### Mitandao ya maendeleo {#development-networks} + +Ili kuendeleza programu ya Ethereum, utataka kuiendesha kwenye mtandao wa faragha ili kuona jinsi inavyofanya kazi kabla ya kuipeleka. Sawa na jinsi unavyounda seva ya ndani kwenye kompyuta yako kwa ajili ya maendeleo ya wavuti, unaweza kuunda mfano wa mnyororo wa bloku wa ndani ili kujaribu mfumo wako uliotawanywa. Hii inaruhusu marudio ya haraka zaidi kuliko testnet ya umma. + +Kuna miradi na zana zinazojitolea kusaidia na hili. Jifunze zaidi kuhusu [mitandao ya maendeleo](/developers/docs/development-networks/). + +### Mitandao ya muungano {#consortium-networks} + +Mchakato wa makubaliano unadhibitiwa na seti iliyoainishwa mapema ya nodi zinazoaminika. Kwa mfano, mtandao wa faragha wa taasisi za kitaaluma zinazojulikana ambapo kila moja inasimamia nodi moja, na bloku zinathibitishwa na kizingiti cha watia saini ndani ya mtandao. + +Ikiwa mtandao wa umma wa Ethereum ni kama intaneti ya umma, mtandao wa muungano ni kama intraneti ya faragha. + +## Kwa nini testnet za Ethereum zinapewa majina ya vituo vya metro? {#why-naming} + +Testnet nyingi za Ethereum zimepewa majina ya vituo halisi vya metro au treni. Utamaduni huu wa majina ulianza mapema na unaakisi miji ya kimataifa ambapo wachangiaji wameishi au kufanya kazi. Ni ya mfano, ya kukumbukwa, na ya vitendo. Kama vile testnet zinavyotengwa na mtandao mkuu wa Ethereum, njia za metro huendeshwa tofauti na trafiki ya juu ya ardhi. + +### Testnet zinazotumika sana na za zamani {#common-and-legacy-testnets} + +- **Sepolia** - Kitongoji kinachounganishwa na metro huko Athens, Ugiriki. Hivi sasa inatumika kwa majaribio ya mkataba-erevu na mfumo mtawanyo wa kimamlaka. +- **Hoodi** - Imepewa jina la kituo cha metro cha Hoodi huko Bengaluru, India. Inatumika kwa majaribio ya mthibitishaji na sasisho la itifaki. +- **Goerli** _(imepitwa na wakati)_ - Imepewa jina la Görlitzer Bahnhof huko Berlin, Ujerumani. +- **Rinkeby** _(imepitwa na wakati)_ - Imepewa jina la kitongoji cha Stockholm chenye kituo cha metro. +- **Ropsten** _(imepitwa na wakati)_ - Inarejelea eneo na kituo cha zamani cha feri/metro huko Stockholm. +- **Kovan** _(imepitwa na wakati)_ - Imepewa jina la kituo cha MRT cha Singapore. +- **Morden** _(imepitwa na wakati)_ - Imepewa jina la kituo cha London Underground. Testnet ya kwanza ya umma ya Ethereum. + +### Testnet zingine maalum {#other-testnets} + +Baadhi ya testnet ziliundwa kwa ajili ya majaribio ya muda mfupi au maalum kwa ajili ya kusasisha na si lazima ziwe na mandhari ya metro: + +- **Holesky** _(imepitwa na wakati)_ - Imepewa jina la kituo cha Holešovice huko Prague. Ilitumika kwa majaribio ya wathibitishaji; ilipitwa na wakati mnamo 2025. +- **Kiln**, **Zhejiang**, **Shandong**, **Prater**, **Pyrmont**, **Olympic** _(zote zimepitwa na wakati)_ na **Ephemery** - Ziliundwa mahususi kwa ajili ya uigaji wa masasisho kama Muungano, Shanghai, au majaribio ya wathibitishaji. Baadhi ya majina ni ya kikanda au ya kimada badala ya kutegemea metro. + +Kutumia majina ya vituo vya metro huwasaidia wasanidi programu kutambua na kukumbuka testnet haraka bila kuhitaji kutegemea vitambulisho vya mnyororo vya nambari. Pia inaakisi utamaduni wa Ethereum: wa vitendo, wa kimataifa, na unaozingatia binadamu. + +## Zana zinazohusiana {#related-tools} + +- [Chainlist](https://chainlist.org/) _orodha ya mitandao ya EVM ili kuunganisha mikoba na watoa huduma kwenye Kitambulisho cha Mnyororo na Kitambulisho cha Mtandao kinachofaa_ +- [Minyororo inayotumia EVM](https://github.com/ethereum-lists/chains) _repo ya GitHub ya metadata ya mnyororo inayoendesha Chainlist_ + +## Masomo zaidi {#further-reading} + +- [Pendekezo: Mzunguko wa Maisha wa Testnet wa Ethereum Unaotabirika](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17) +- [Mageuzi ya Testnet za Ethereum](https://etherworld.co/2022/08/19/the-evolution-of-ethereum-testnet/) diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/archive-nodes/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/archive-nodes/index.md new file mode 100644 index 00000000000..d6a870b72af --- /dev/null +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/archive-nodes/index.md @@ -0,0 +1,81 @@ +--- +title: Nodi ya Kumbukumbu ya Ethereum +description: Muhtasari wa nodi za kumbukumbu +lang: sw +sidebarDepth: 2 +--- + +Nodi ya kumbukumbu ni mfano wa mteja wa Ethereum uliosanidiwa kujenga kumbukumbu ya hali zote za kihistoria. Ni zana muhimu kwa matumizi fulani lakini inaweza kuwa ngumu zaidi kuiendesha kuliko nodi kamili. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuelewa dhana ya [nodi ya Ethereum](/developers/docs/nodes-and-clients/), [usanifu wake](/developers/docs/nodes-and-clients/node-architecture/), [mikakati ya kusawazisha](/developers/docs/nodes-and-clients/#sync-modes), mazoea ya [kuiendesha](/developers/docs/nodes-and-clients/run-a-node/) na [kuitumia](/developers/docs/apis/json-rpc/). + +## Nodi ya kumbukumbu ni nini + +Ili kuelewa umuhimu wa nodi ya kumbukumbu, hebu tufafanue dhana ya "hali". Ethereum inaweza kurejelewa kama _mashine ya hali inayotegemea muamala_. Inajumuisha akaunti na programu zinazotekeleza miamala ambayo inabadilisha hali zao. Data ya kimataifa yenye habari kuhusu kila akaunti na mkataba huhifadhiwa katika hifadhidata ya trie inayoitwa hali. Hii inashughulikiwa na mteja wa safu ya utekelezaji (EL) na inajumuisha: + +- Salio za akaunti na nonces +- Msimbo wa mkataba na ghala +- Data inayohusiana na makubaliano, k.m., Mkataba wa Amana ya Kusimamisha + +Ili kuingiliana na mtandao, kuhakiki na kutoa bloku mpya, wateja wa Ethereum wanapaswa kwenda sambamba na mabadiliko ya hivi karibuni (ncha ya mnyororo) na kwa hivyo hali ya sasa. Mteja wa safu ya utekelezaji aliyesanidiwa kama nodi kamili huhakiki na kufuata hali ya hivi karibuni ya mtandao lakini huhifadhi kwa muda hali chache zilizopita, k.m., hali inayohusishwa na bloku 128 za mwisho, ili iweze kushughulikia upangaji upya wa mnyororo na kutoa ufikiaji wa haraka kwa data ya hivi karibuni. Hali ya hivi karibuni ndiyo wateja wote wanahitaji ili kuhakiki miamala inayoingia na kutumia mtandao. + +Unaweza kufikiria hali kama picha ya mtandao ya muda katika bloku fulani na kumbukumbu kama kurudia historia. + +Hali za kihistoria zinaweza kupunguzwa kwa usalama kwa sababu si muhimu kwa mtandao kufanya kazi na ingekuwa ni kujirudia bila maana kwa mteja kuhifadhi data yote iliyopitwa na wakati. Hali zilizokuwepo kabla ya bloku fulani ya hivi karibuni (k.m., bloku 128 kabla ya ncha) kwa ufanisi hutupwa mbali. Nodi kamili huhifadhi tu data ya kihistoria ya mnyororo wa bloku (bloku na miamala) na picha za kihistoria za mara kwa mara ambazo zinaweza kutumika kuzalisha upya hali za zamani zinapohitajika. Hufanya hivi kwa kutekeleza upya miamala ya zamani katika EVM, jambo ambalo linaweza kuhitaji nguvu kubwa ya kukokotoa wakati hali inayotakiwa iko mbali na picha ya karibu zaidi. + +Hata hivyo, hii inamaanisha kwamba kufikia hali ya kihistoria kwenye nodi kamili hutumia ukokotoaji mwingi. Mteja anaweza kuhitaji kutekeleza miamala yote ya zamani na kukokotoa hali moja ya kihistoria kutoka genesis. Nodi za kumbukumbu hutatua hili kwa kuhifadhi sio tu hali za hivi karibuni bali kila hali ya kihistoria iliyoundwa baada ya kila bloku. Kimsingi hufanya maelewano na hitaji kubwa zaidi la nafasi kwenye diski. + +Ni muhimu kuzingatia kwamba mtandao hautegemei nodi za kumbukumbu kuhifadhi na kutoa data zote za kihistoria. Kama ilivyotajwa hapo juu, hali zote za mpito za kihistoria zinaweza kutolewa kwenye nodi kamili. Miamala huhifadhiwa na nodi yoyote kamili (kwa sasa chini ya 400G) na inaweza kurudiwa ili kujenga kumbukumbu nzima. + +### Tumia kesi + +Matumizi ya kawaida ya Ethereum kama vile kutuma miamala, kupeleka mikataba, kuhakiki makubaliano, n.k. hayahitaji ufikiaji wa hali za kihistoria. Watumiaji hawahitaji kamwe nodi ya kumbukumbu kwa maingiliano ya kawaida na mtandao. + +Faida kuu ya kumbukumbu ya hali ni ufikiaji wa haraka wa maswali kuhusu hali za kihistoria. Kwa mfano, nodi ya kumbukumbu ingerejesha matokeo mara moja kama vile: + +- _Akaunti 0x1337... ilikuwa na salio gani la ETH katika bloku 15537393?_ +- _Je, salio la tokeni 0x ni nini katika mkataba 0x kwenye bloku 1920000?_ + +Kama ilivyoelezwa hapo juu, nodi kamili ingehitaji kuzalisha data hii kwa utekelezaji wa EVM ambao hutumia CPU na huchukua muda. Nodi za kumbukumbu huzifikia kwenye diski na hutoa majibu mara moja. Hiki ni kipengele muhimu kwa sehemu fulani za miundombinu, kwa mfano: + +- Watoa huduma kama vile wachunguzi wa bloku +- Watafiti +- Wachambuzi wa usalama +- Wasanidi programu wa Dapp +- Ukaguzi na ufuataji + +Kuna [huduma](/developers/docs/nodes-and-clients/nodes-as-a-service/) mbalimbali za bure ambazo pia huruhusu ufikiaji wa data ya kihistoria. Kwa vile inahitaji nguvu zaidi kuendesha nodi ya kumbukumbu, ufikiaji huu mara nyingi una mipaka na hufanya kazi tu kwa ufikiaji wa mara kwa mara. Ikiwa mradi wako unahitaji ufikiaji wa kila wakati wa data ya kihistoria, unapaswa kufikiria kuiendesha mwenyewe. + +## Utekelezaji na matumizi + +Nodi ya kumbukumbu katika muktadha huu inamaanisha data inayotolewa na wateja wa safu ya utekelezaji wanaomkabili mtumiaji wanaposhughulikia hifadhidata ya hali na kutoa sehemu za mwisho za JSON-RPC. Chaguo za usanidi, muda wa kusawazisha na ukubwa wa hifadhidata vinaweza kutofautiana kulingana na mteja. Kwa maelezo zaidi, tafadhali rejelea nyaraka zilizotolewa na mteja wako. + +Kabla ya kuanzisha nodi yako mwenyewe ya kumbukumbu, jifunze kuhusu tofauti kati ya wateja na hasa [mahitaji mbalimbali ya maunzi](/developers/docs/nodes-and-clients/run-a-node/#requirements). Wateja wengi hawajaboreshwa kwa kipengele hiki na kumbukumbu zao zinahitaji zaidi ya 12TB ya nafasi. Kinyume chake, utekelezaji kama Erigon unaweza kuhifadhi data sawa katika chini ya 3TB jambo ambalo huwafanya kuwa njia bora zaidi ya kuendesha nodi ya kumbukumbu. + +## Mazoea yaliyopendekezwa + +Mbali na [mapendekezo ya jumla ya kuendesha nodi](/developers/docs/nodes-and-clients/run-a-node/), nodi ya kumbukumbu inaweza kuhitaji zaidi upande wa maunzi na matengenezo. Kwa kuzingatia [vipengele muhimu](https://github.com/ledgerwatch/erigon#key-features) vya Erigon, njia inayofaa zaidi ni kutumia utekelezaji wa mteja wa [Erigon](/developers/docs/nodes-and-clients/#erigon). + +### Vifaa + +Daima hakikisha unahakiki mahitaji ya maunzi kwa hali fulani katika nyaraka za mteja. +Hitaji kubwa zaidi kwa nodi za kumbukumbu ni nafasi ya diski. Kulingana na mteja, inatofautiana kutoka 3TB hadi 12TB. Hata kama HDD inaweza kuchukuliwa kuwa suluhisho bora kwa kiasi kikubwa cha data, kuisawazisha na kusasisha mara kwa mara ncha ya mnyororo itahitaji diski za SSD. Diski za [SATA](https://www.cleverfiles.com/help/sata-hard-drive.html) zinatosha lakini zinapaswa kuwa za ubora wa kuaminika, angalau [TLC](https://blog.synology.com/tlc-vs-qlc-ssds-what-are-the-differences). Diski zinaweza kuwekwa kwenye kompyuta ya mezani au seva yenye nafasi za kutosha. Vifaa maalum kama hivyo ni bora kwa kuendesha nodi yenye muda mrefu wa kufanya kazi. Inawezekana kabisa kuiendesha kwenye laptop lakini uwezo wa kuhamishika utakuja na gharama ya ziada. + +Data yote inahitaji kutoshea kwenye gombo moja, kwa hivyo diski zinapaswa kuunganishwa, k.m., na [RAID0](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0) au LVM. Inaweza pia kufaa kufikiria kutumia [ZFS](https://en.wikipedia.org/wiki/ZFS) kwani inasaidia "Nakili-wakati-wa-kuandika" ambayo inahakikisha data inaandikwa kwa usahihi kwenye diski bila makosa yoyote ya kiwango cha chini. + +Kwa uthabiti na usalama zaidi katika kuzuia uharibifu wa hifadhidata kwa bahati mbaya, hasa katika usanidi wa kitaalamu, fikiria kutumia [memori ya ECC](https://en.wikipedia.org/wiki/ECC_memory) ikiwa mfumo wako unaiunga mkono. Ukubwa wa RAM kwa ujumla unashauriwa kuwa sawa na ule wa nodi kamili lakini RAM zaidi inaweza kusaidia kuharakisha usawazishaji. + +Wakati wa usawazishaji wa awali, wateja katika hali ya kumbukumbu watatekeleza kila muamala tangu genesis. Kasi ya utekelezaji mara nyingi hupunguzwa na CPU, hivyo CPU ya haraka zaidi inaweza kusaidia na muda wa usawazishaji wa awali. Kwenye kompyuta ya kawaida ya mtumiaji, usawazishaji wa awali unaweza kuchukua hadi mwezi mmoja. + +## Masomo zaidi {#further-reading} + +- [Nodi Kamili ya Ethereum dhidi ya Nodi ya Kumbukumbu](https://www.quicknode.com/guides/infrastructure/ethereum-full-node-vs-archive-node) - _QuickNode, Septemba 2022_ +- [Kujenga Nodi Yako Mwenyewe ya Kumbukumbu ya Ethereum](https://tjayrush.medium.com/building-your-own-ethereum-archive-node-72c014affc09) - _Thomas Jay Rush, Agosti 2021_ +- [Jinsi ya kusanidi Erigon, RPC ya Erigon na TrueBlocks (scrape na API) kama huduma](https://magnushansson.xyz/blog_posts/crypto_defi/2022-01-10-Erigon-Trueblocks) _– Magnus Hansson, ilisasishwa Septemba 2022_ + +## Mada zinazohusiana {#related-topics} + +- [Nodi na wateja](/developers/docs/nodes-and-clients/) +- [Kuendesha nodi](/developers/docs/nodes-and-clients/run-a-node/) diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/bootnodes/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/bootnodes/index.md new file mode 100644 index 00000000000..b1ae356e6f2 --- /dev/null +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/bootnodes/index.md @@ -0,0 +1,32 @@ +--- +title: Utangulizi wa Ethereum Bootnodes +description: Taarifa ya msingi unahitaji kuelewa bootnodes +lang: sw +--- + +Wakati nodi mpya anajiunga na Mtandao Ethereum inahitaji kuungana na nodes ambayo tayari ni juu ya Mtandao ili kisha kugundua wenzao mpya. Pointi hizi za kuingia kwenye Mtandao wa Ethereum zinaitwa bootnodes. Wateja kawaida kuwa na orodha ya bootnodes hardcoded ndani yao. Hizi bootnodes ni kawaida kukimbia na Ethereum Msingi +ya devops timu au timu mteja wenyewe. Kumbuka kwamba bootnodes si sawa na nodi tuli. Nodi tuli huitwa tena na tena, ambapo bootnodes ni tu kuitwa juu kama hakuna wenzao kutosha kuungana na nodi mahitaji ya bootstrap baadhi ya uhusiano mpya. + +## Ungana na bootnode {#connect-to-a-bootnode} + +Wateja wengi kuwa na orodha ya bootnodes kujengwa katika, lakini unaweza pia wanataka kuendesha bootnode yako mwenyewe, au kutumia moja ambayo si sehemu ya orodha ya wateja hardcoded. Katika kesi hii, unaweza kutaja yao wakati wa kuanza mteja wako, kama ifuatavyo (mfano ni kwa ajili ya Geth, tafadhali angalia nyaraka mteja wako): + +``` +geth --bootnodes "enode://@:" +``` + +## Endesha bootnode {#run-a-bootnode} + +Bootnodes ni nodi kamili ambazo haziko nyuma ya NAT ([Tafsiri ya Anwani ya Mtandao](https://www.geeksforgeeks.org/network-address-translation-nat/)). Kila nodi kamili inaweza kutenda kama bootnode muda mrefu kama ni inapatikana kwa umma. + +Unapoanzisha nodi, inapaswa kurekodi [enode](/developers/docs/networking-layer/network-addresses/#enode) yako, ambayo ni kitambulisho cha umma ambacho wengine wanaweza kutumia kuungana na nodi yako. + +Enodi ni kawaida kuzaliwa upya juu ya kila kuanzisha upya, hivyo kuwa na uhakika wa kuangalia nyaraka mteja wako juu ya jinsi ya kuzalisha enode kudumu kwa bootnode yako. + +Ili kuwa nzuri bootnode ni wazo nzuri ya kuongeza idadi ya juu ya wenzao ambayo inaweza kuungana na hayo. Kukimbia bootnode na wenzao wengi itaongeza mahitaji bandwidth kwa kiasi kikubwa. + +## Bootnodes zinazopatikana {#available-bootnodes} + +Orodha ya bootnodes zilizojengewa ndani ya go-ethereum inaweza kupatikana [hapa](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go#L23). Hizi bootnodes ni kudumishwa na Ethereum Msingi na go-ethereum timu. + +Kuna orodha nyingine ya bootnodes kudumishwa na kujitolea inapatikana. Tafadhali kuhakikisha daima ni pamoja na angalau moja rasmi bootnode, vinginevyo unaweza kuwa kupatwa na kushambuliwa. diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/client-diversity/index.md new file mode 100644 index 00000000000..9d008685c6e --- /dev/null +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/client-diversity/index.md @@ -0,0 +1,132 @@ +--- +title: Utofauti wa wateja +description: Ufafanuzi wa kiwango cha juu wa umuhimu wa utofauti wa wateja wa Ethereum. +lang: sw +sidebarDepth: 2 +--- + +Mwenendo wa nodi ya Ethereum unadhibitiwa na programu ya mteja inayoendesha. Kuna wateja kadhaa wa Ethereum wa kiwango cha uzalishaji, kila mmoja akitengenezwa na kudumishwa kwa lugha tofauti na timu tofauti. Wateja wameundwa kwa vipimo vya kawaida vinavyohakikisha wateja wanawasiliana bila mshono na wana utendakazi sawa na kutoa hali ya utumiaji sawa kwa mtumiaji. Hata hivyo, kwa sasa usambazaji wa wateja kwenye nodi hauko sawa vya kutosha ili kuimarisha mtandao huu kwa uwezo wake kamili. Kimsingi, watumiaji wanapaswa kugawanywa takribani kwa usawa kati ya wateja mbalimbali ili kuleta utofauti wa wateja iwezekanavyo kwenye mtandao. + +## Mahitaji ya awali {#prerequisites} + +Ikiwa bado huelewi nodi na wateja ni nini, angalia [nodi na wateja](/developers/docs/nodes-and-clients/). Safu za [Utekelezaji](/glossary/#execution-layer) na [makubaliano](/glossary/#consensus-layer) zimefafanuliwa katika faharasa. + +## Kwa nini kuna wateja wengi? {#why-multiple-clients} + +Wateja wengi, waliotengenezwa na kudumishwa kwa uhuru, wapo kwa sababu utofauti wa wateja hufanya mtandao kuwa thabiti zaidi dhidi ya mashambulizi na hitilafu. Kuwa na wateja wengi ni nguvu ya kipekee kwa Ethereum - minyororo mingine ya bloku hutegemea kutokukosea kwa mteja mmoja. Hata hivyo, haitoshi tu kuwa na wateja wengi wanaopatikana, lazima wakubaliwe na jumuiya na jumla ya nodi zinazotumika zigawiwe kwa usawa kati yao. + +## Kwa nini utofauti wa wateja ni muhimu? {#client-diversity-importance} + +Kuwa na wateja wengi waliotengenezwa na kudumishwa kwa uhuru ni muhimu kwa afya ya mtandao uliogatuliwa. Hebu tuchunguze sababu zake. + +### Hitilafu {#bugs} + +Hitilafu katika mteja mmoja ni hatari ndogo kwa mtandao inapowakilisha idadi ndogo ya nodi za Ethereum. Kwa usambazaji sawa wa nodi kwa wateja wengi, uwezekano wa wateja wengi kupata tatizo la pamoja ni mdogo, na matokeo yake, mtandao unakuwa imara zaidi. + +### Ustahimilivu dhidi ya mashambulizi {#resilience} + +Utofauti wa wateja pia hutoa ustahimilivu dhidi ya mashambulizi. Kwa mfano, shambulio [linalodanganya mteja fulani](https://twitter.com/vdWijden/status/1437712249926393858) kwenye tawi fulani la mnyororo haliwezekani kufanikiwa kwa sababu wateja wengine hawawezi kunyonywa kwa njia ile ile na mnyororo mkuu unabaki bila kuharibiwa. Utofauti mdogo wa wateja huongeza hatari inayohusishwa na udukuzi kwa mteja mkuu. Utofauti wa wateja tayari umethibitisha kuwa ulinzi muhimu dhidi ya mashambulizi hasidi kwenye mtandao, kwa mfano shambulio la Shanghai la kukataliwa kwa huduma mwaka 2016 liliwezekana kwa sababu washambuliaji waliweza kumdanganya mteja mkuu (Geth) kutekeleza operesheni ya polepole ya i/o ya diski makumi ya maelfu ya mara kwa kila bloku. Kwa sababu wateja mbadala walikuwa pia mtandaoni ambao hawakuwa na udhaifu huo, Ethereum iliweza kupinga shambulio hilo na kuendelea kufanya kazi huku udhaifu katika Geth ukirekebishwa. + +### Mwisho wa uthibitisho wa hisa {#finality} + +Hitilafu katika mteja wa makubaliano aliye na zaidi ya 33% ya nodi za Ethereum inaweza kuzuia safu ya makubaliano kukamilika, ikimaanisha watumiaji wasingeweza kuamini kwamba miamala haitarejeshwa au kubadilishwa wakati fulani. Hili lingekuwa tatizo kubwa kwa programu nyingi zilizojengwa juu ya Ethereum, hasa DeFi. + + Mbaya zaidi, hitilafu kubwa katika mteja aliye na theluthi mbili ya walio wengi inaweza kusababisha mnyororo kugawanyika na kukamilika kimakosa, na kusababisha kundi kubwa la wathibitishaji kukwama kwenye mnyororo batili. Ikiwa wanataka kujiunga tena na mnyororo sahihi, wathibitishaji hawa hukabiliwa na adhabu ya kupunguzwa kwa hisa au kujiondoa polepole na kwa gharama nafuu na kuanzisha upya. Ukubwa wa adhabu ya kupunguzwa kwa hisa huongezeka kulingana na idadi ya nodi zenye hatia, huku theluthi mbili ya walio wengi wakipunguzwa kwa kiwango cha juu (ETH 32). + +Ingawa hizi ni hali zisizowezekana, mfumo-ikolojia wa Ethereum unaweza kupunguza hatari yake kwa kusawazisha usambazaji wa wateja kwenye nodi zinazotumika. Kimsingi, hakuna mteja wa makubaliano anayepaswa kufikia hisa ya 33% ya jumla ya nodi. + +### Wajibu wa pamoja {#responsibility} + +Pia kuna gharama ya kibinadamu ya kuwa na wateja walio wengi. Huweka mkazo na jukumu kubwa kwa timu ndogo ya maendeleo. Kadiri utofauti wa wateja unavyopungua, ndivyo mzigo wa jukumu kwa wasanidi programu wanaodumisha mteja aliye na wengi unavyoongezeka. Kusambaza jukumu hili kwa timu nyingi ni nzuri kwa afya ya mtandao wa nodi za Ethereum na mtandao wake wa watu. + +## Utofauti wa sasa wa wateja {#current-client-diversity} + +### Wateja wa Utekelezaji {#execution-clients-breakdown} + + + +### Wateja wa Makubaliano {#consensus-clients-breakdown} + + + +Mchoro huu unaweza kuwa umepitwa na wakati — nenda [ethernodes.org](https://ethernodes.org) na [clientdiversity.org](https://clientdiversity.org) kwa taarifa za kisasa. + +Chati mbili za pai hapo juu zinaonyesha picha za utofauti wa sasa wa wateja kwa safu za utekelezaji na makubaliano (wakati wa kuandika mnamo Oktoba 2025). Utofauti wa wateja umeimarika kwa miaka mingi, na safu ya utekelezaji imeona kupungua kwa utawala wa [Geth](https://geth.ethereum.org/), huku [Nethermind](https://www.nethermind.io/nethermind-client) ikiwa ya pili kwa ukaribu, [Besu](https://besu.hyperledger.org/) ya tatu na [Erigon](https://github.com/ledgerwatch/erigon) ya nne, huku wateja wengine wakijumuisha chini ya 3% ya mtandao. Mteja anayetumiwa zaidi kwenye safu ya makubaliano—[Lighthouse](https://lighthouse.sigmaprime.io/)—yuko karibu sana na wa pili anayetumiwa zaidi. [Prysm](https://prysmaticlabs.com/#projects) na [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) zinachukua ~31% na ~14% mtawalia, na wateja wengine hutumiwa mara chache. + +Data ya safu ya utekelezaji ilipatikana kutoka [supermajority.info](https://supermajority.info/) mnamo 26-Okt-2025. Data ya wateja wa makubaliano ilipatikana kutoka kwa [Michael Sproul](https://github.com/sigp/blockprint). Data ya wateja wa makubaliano ni ngumu zaidi kupata kwa sababu wateja wa safu ya makubaliano huwa hawana alama zisizo na utata ambazo zinaweza kutumika kuzitambua. Data ilitengenezwa kwa kutumia algoriti ya uainishaji ambayo wakati mwingine huchanganya baadhi ya wateja wachache (tazama [hapa](https://twitter.com/sproulM_/status/1440512518242197516) kwa maelezo zaidi). Katika mchoro ulio hapo juu, uainishaji huu usio na utata hushughulikiwa na lebo ya ama/au (k.m. Nimbus/Teku). Hata hivyo, ni wazi kwamba mtandao mwingi unaendesha Prysm. Licha ya kuwa picha za muda tu, thamani katika mchoro hutoa hisia nzuri ya jumla ya hali ya sasa ya utofauti wa wateja. + +Data ya kisasa ya utofauti wa wateja kwa safu ya makubaliano sasa inapatikana katika [clientdiversity.org](https://clientdiversity.org/). + +## Safu ya utekelezaji {#execution-layer} + +Hadi sasa, mazungumzo kuhusu utofauti wa wateja yamejikita zaidi kwenye safu ya makubaliano. Hata hivyo, mteja wa utekelezaji [Geth](https://geth.ethereum.org) kwa sasa anachangia karibu 85% ya nodi zote. Asilimia hii ni tatizo kwa sababu sawa na kwa wateja wa makubaliano. Kwa mfano, hitilafu katika Geth inayoathiri ushughulikiaji wa miamala au uundaji wa mizigo ya utekelezaji inaweza kusababisha wateja wa makubaliano kukamilisha miamala yenye matatizo au hitilafu. Kwa hivyo, Ethereum ingekuwa na afya bora kwa usambazaji sawa wa wateja wa utekelezaji, na ikiwezekana bila mteja yeyote anayewakilisha zaidi ya 33% ya mtandao. + +## Tumia mteja wa walio wachache {#use-minority-client} + +Kushughulikia utofauti wa wateja kunahitaji zaidi ya watumiaji binafsi kuchagua wateja wa walio wachache - inahitaji mabwawa ya wathibitishaji na taasisi kama vile mfumo mtawanyo wa kimamlaka makuu na masoko ya kubadilishana fedha kubadili wateja pia. Hata hivyo, watumiaji wote wanaweza kufanya sehemu yao katika kurekebisha usawa uliopo na kuhalalisha matumizi ya programu zote za Ethereum zinazopatikana. Baada ya Muungano, waendeshaji wote wa nodi watatakiwa kuendesha mteja wa utekelezaji na mteja wa makubaliano. Kuchagua mchanganyiko wa wateja waliopendekezwa hapa chini kutasaidia kuongeza utofauti wa wateja. + +### Wateja wa utekelezaji {#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/) +- [Reth](https://reth.rs/) + +### Wateja wa makubaliano {#consensus-clients} + +- [Nimbus](https://nimbus.team/) +- [Lighthouse](https://github.com/sigp/lighthouse) +- [Teku](https://consensys.io/teku) +- [Lodestar](https://github.com/ChainSafe/lodestar) +- [Prysm](https://prysm.offchainlabs.com/docs/) +- [Grandine](https://docs.grandine.io/) + +Watumiaji wa kiufundi wanaweza kusaidia kuharakisha mchakato huu kwa kuandika mafunzo na nyaraka zaidi kwa wateja wachache na kuwahimiza wenzao wanaoendesha nodi kuhama kutoka kwa wateja wakuu. Miongozo ya kubadili hadi kwa mteja wa makubaliano wa walio wachache inapatikana kwenye [clientdiversity.org](https://clientdiversity.org/). + +## Dashibodi za utofauti wa wateja {#client-diversity-dashboards} + +Dashibodi kadhaa hutoa takwimu za wakati halisi za utofauti wa wateja kwa safu ya utekelezaji na makubaliano. + +**Safu ya makubaliano:** + +- [Rated.network](https://www.rated.network/) +- [clientdiversity.org](https://clientdiversity.org/) + +**Safu ya utekelezaji:** + +- [supermajority.info](https://supermajority.info//) +- [Ethernodes](https://ethernodes.org/) + +## Masomo zaidi {#further-reading} + +- [Utofauti wa wateja kwenye safu ya makubaliano ya Ethereum](https://mirror.xyz/jmcook.eth/S7ONEka_0RgtKTZ3-dakPmAHQNPvuj15nh0YGKPFriA) +- [Muungano wa Ethereum: Endesha mteja wa walio wengi kwa hatari yako mwenyewe!](https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html) – _Dankrad Fiest, Machi 24 2022_ +- [Umuhimu wa utofauti wa wateja](https://our.status.im/the-importance-of-client-diversity/) +- [Orodha ya huduma za nodi za Ethereum](https://ethereumnodes.com/) +- [Maswali "Matano ya Kwa Nini" ya tatizo la utofauti wa wateja](https://notes.ethereum.org/@afhGjrKfTKmksTOtqhB9RQ/BJGj7uh08) +- [Utofauti wa Ethereum na Jinsi ya Kuutatua (YouTube)](https://www.youtube.com/watch?v=1hZgCaiqwfU) +- [clientdiversity.org](https://clientdiversity.org/) + +## Mada zinazohusiana {#related-topics} + +- [Endesha nodi ya Ethereum](/run-a-node/) +- [Nodi na wateja](/developers/docs/nodes-and-clients/) diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/index.md new file mode 100644 index 00000000000..1259c9282ee --- /dev/null +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/index.md @@ -0,0 +1,319 @@ +--- +title: Nodi na wateja +description: Muhtasari wa nodi za Ethereum na programu ya mteja, pamoja na jinsi ya kuanzisha nodi na kwa nini unapaswa kuifanya. +lang: sw +sidebarDepth: 2 +--- + +Ethereum ni mtandao unaosambazwa wa kompyuta (unaojulikana kama nodi) zinazoendesha programu ambazo zinaweza kuthibitisha vizuizi na data ya muamala. Programu lazima iendeshwe kwenye kompyuta yako ili kuigeuza kuwa nodi ya Ethereum. Kuna vipande viwili tofauti vya programu (vinavyojulikana kama 'wateja') vinavyohitajika kuunda nodi. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuelewa dhana ya mtandao wa rika-kwa-rika na [misingi ya EVM](/developers/docs/evm/) kabla ya kuingia ndani zaidi na kuendesha mfano wako mwenyewe wa mteja wa Ethereum. Tazama [utangulizi wetu kwa Ethereum](/developers/docs/intro-to-ethereum/). + +Ikiwa wewe ni mgeni kwenye mada ya nodi, tunapendekeza kwanza uangalie utangulizi wetu unaofaa mtumiaji kuhusu [kuendesha nodi ya Ethereum](/run-a-node). + +## Nodi na wateja ni nini? {#what-are-nodes-and-clients} + +"Node" ni mfano wowote wa programu ya mteja wa Ethereum ambayo imeunganishwa kwa kompyuta nyingine pia inayoendesha programu ya Ethereum, kutengeneza mtandao. Mteja ni utekelezaji wa Ethereum ambao huthibitisha data dhidi ya kanuni za itifaki na kuweka mtandao salama. Nodi inabidi iendeshe wateja wawili: mteja wa makubaliano na mteja wa utekelezaji. + +- Mteja wa utekelezaji (pia anajulikana kama Injini ya Utekelezaji, mteja wa EL au aliyekuwa mteja wa Eth1) husikiliza shughuli mpya zinazotangazwa kwenye mtandao, kuzitekeleza katika EVM, na hushikilia hifadhidata ya hivi punde zaidi ya data yote ya sasa ya Ethereum. +- Mteja wa maafikiano (pia hujulikana kama Beacon node, mteja wa CL au aliyekuwa mteja wa Eth2) hutekeleza kanuni ya makubaliano ya uthibitisho wa dau, ambayo huwezesha mtandao kufikia makubaliano kulingana na data iliyoidhinishwa kutoka kwa mteja wa utekelezaji. Pia kuna kipande cha tatu cha programu, kinachojulikana kama 'kithibitishaji' ambacho kinaweza kuongezwa kwa mteja wa makubaliano, kuruhusu nodi kushiriki katika kulinda mtandao. + +Wateja hawa hufanya kazi pamoja ili kufuatilia kichwa cha mnyororo wa Ethereum na kuruhusu watumiaji kuingiliana na mtandao wa Ethereum. Muundo wa moduli wenye vipande vingi vya programu vinavyofanya kazi pamoja unaitwa [utata uliofungwa](https://vitalik.eth.limo/general/2022/02/28/complexity.html). Mbinu hii imerahisisha kutekeleza [The Merge](/roadmap/merge) bila mshono, hurahisisha kudumisha na kuendeleza programu ya mteja, na kuwezesha utumiaji tena wa wateja binafsi, kwa mfano, katika [mfumo ikolojia wa safu ya 2](/layer-2/). + +![Wateja wa utekelezaji na makubaliano waliounganishwa](./eth1eth2client.png) +Mchoro uliorahisishwa wa mteja wa utekelezaji na makubaliano uliounganishwa. + +### Utofauti wa wateja {#client-diversity} + +[Wateja wa utekelezaji](/developers/docs/nodes-and-clients/#execution-clients) na [wateja wa makubaliano](/developers/docs/nodes-and-clients/#consensus-clients) hupatikana katika lugha mbalimbali za programu zilizotengenezwa na timu tofauti. + +Utekelezaji wa wateja wengi unaweza kufanya mtandao kuwa na nguvu zaidi kwa kupunguza utegemezi wake kwenye msingi mmoja wa msimbo. Lengo bora ni kufikia utofauti bila mteja yeyote kutawala mtandao, na hivyo kuondoa uwezekano wa kutofaulu. +Lugha mbalimbali pia hualika jumuiya pana ya wasanidi programu na kuwaruhusu kuunda miunganisho katika lugha wanayopendelea. + +Jifunze zaidi kuhusu [anuwai ya wateja](/developers/docs/nodes-and-clients/client-diversity/). + +Kitu ambacho utekelezaji huu unafanana ni kwamba zote hufuata vipimo maalum kimoja. Vipimo maalum huamua jinsi mtandao wa Ethereum na mnyororo wa bloku hufanya kazi. Kila maelezo ya kiufundi yamefafanuliwa na vipimo maalum vinaweza kupatikana kama: + +- Hapo awali, [Karatasi ya Njano ya Ethereum](https://ethereum.github.io/yellowpaper/paper.pdf) +- [Vipimo maalum vya utekelezaji](https://github.com/ethereum/execution-specs/) +- [Vipimo maalum vya makubaliano](https://github.com/ethereum/consensus-specs) +- [EIPs](https://eips.ethereum.org/) zilizotekelezwa katika [maboresho mbalimbali ya mtandao](/ethereum-forks/) + +### Kufuatilia nodi kwenye mtandao {#network-overview} + +Vifuatiliaji vingi hutoa muhtasari wa wakati halisi wa nodi katika mtandao wa Ethereum. Kumbuka kuwa kutokana na hali ya mitandao iliyotawanywa, watafutaji hawa wanaweza tu kutoa mwonekano mdogo wa mtandao na wanaweza kuripoti matokeo tofauti. + +- [Ramani ya nodi](https://etherscan.io/nodetracker) na Etherscan +- [Ethernodes](https://ethernodes.org/) na Bitfly +- [Nodewatch](https://www.nodewatch.io/) na Chainsafe, inayotambaa kwenye nodi za makubaliano +- [Monitoreth](https://monitoreth.io/) - na MigaLabs, Zana ya ufuatiliaji wa mtandao uliosambazwa +- [Ripoti za Afya za Mtandao za Kila Wiki](https://probelab.io) - na ProbeLab, Inatumia [kitambaaji cha Nebula](https://github.com/dennis-tra/nebula) na zana zingine + +## Aina za nodi {#node-types} + +Ikiwa unataka [kuendesha nodi yako mwenyewe](/developers/docs/nodes-and-clients/run-a-node/), unapaswa kuelewa kuwa kuna aina tofauti za nodi zinazotumia data kwa njia tofauti. Kwa hakika, wateja wanaweza kuendesha aina tatu tofauti za nodi: nyepesi, kamili na kumbukumbu. Pia kuna chaguo za mikakati tofauti ya usawazishaji ambayo huwezesha muda wa usawazishaji wa haraka zaidi. Uunganishaji unarejelea jinsi inavyoweza kupata taarifa za hivi punde kuhusu jimbo la Ethereum kwa haraka. + +### Nodi kamili {#full-node} + +Nodi kamili hufanya uthibitishaji wa kizuizi kwa kizuizi cha kiambajengo, ikiwa ni pamoja na kupakua na kuthibitisha kiini cha kizuia na data ya serikali kwa kila kizuizi. Kuna aina tofauti za nodi kamili - zingine huanza kutoka kwa kizuizi cha mwanzo na kuthibitisha kila kizuizi kimoja katika historia nzima ya kiambajengo. Wengine huanza uthibitishaji wao kwenye bloku ya hivi karibuni zaidi wanayoiamini kuwa halali (k.m., 'usawazishaji wa snap' wa Geth). Bila kujali mahali ambapo uthibitishaji unaanzia, nodi kamili huweka tu nakala ya ndani ya data ya hivi karibuni (kawaida vizuizi 128 vya hivi karibuni), ikiruhusu data ya zamani kufutwa ili kuhifadhi nafasi ya diski. Data za zamani zinaweza kutengenezwa upya zinapohitajika. + +- Huhifadhi data kamili ya mnyororo wa bloku (ingawa hii hupunguzwa mara kwa mara kwa hivyo nodi kamili haihifadhi data zote za hali hadi mwanzo) +- Hushiriki katika uthibitishaji wa bloku, huthibitisha bloku na hali zote. +- Majimbo yote yanaweza kupatikana kutoka kwa hifadhi ya ndani au kutolewa upya kutoka kwa 'picha za kumbukumbu' kwa nodi kamili. +- Huhudumia mtandao na hutoa data kwa ombi. + +### Nodi ya kumbukumbu {#archive-node} + +Nodi za kumbukumbu ni nodi kamili ambazo huthibitisha kila kizuizi kutoka kwa mwanzo na kamwe kufuta data yoyote iliyopakuliwa. + +- Huhifadhi kila kitu kilichohifadhiwa kwenye nodi kamili na hujenga kumbukumbu ya hali za kihistoria. Inahitajika ikiwa ungependa kuuliza swali kama salio la akaunti kwenye kizuizi #4,000,000, au jaribu kwa urahisi na kwa uhakika miamala yako uliyoweka bila kuithibitisha kwa kutumia ufuatiliaji. +- Data hii inawakilisha vitengo vya terabaiti, ambayo hufanya nodi za kumbukumbu zisiwe na mvuto kwa watumiaji wastani lakini inaweza kutumika kwa huduma kama vile vivinjari, wachuuzi wa mkoba na uchanganuzi wa minyororo. + +Kusawazisha wateja katika hali yoyote isipokuwa kumbukumbu kutasababisha data ya mnyororo wa bloku iliyopunguzwa. Hii ina maana, hakuna kumbukumbu ya majimbo yote ya kihistoria lakini nodi kamili inaweza kujenga yao juu ya mahitaji. + +Jifunze zaidi kuhusu [Nodi za kumbukumbu](/developers/docs/nodes-and-clients/archive-nodes). + +### Nodi nyepesi {#light-node} + +Badala ya kupakua kila bloku, nodi nyepesi hupakua tu vichwa vya bloku. Vichwa hivi vina maelezo ya muhtasari kuhusu yaliyomo kwenye bloku. Taarifa nyingine yoyote ambayo nodi nyepesi inahitaji huombwa kutoka kwa nodi kamili. Nodi ya nyepesi inaweza kuthibitisha kwa kujitegemea data wanayopokea dhidi ya mizizi ya majimbo kwenye vichwa vya kuzuia. Node za mwanga huwawezesha watumiaji kushiriki katika mtandao wa Ethereum bila vifaa vyenye nguvu au kipimo cha juu kinachohitajika ili kuendesha nodi kamili. Hatimaye, nodi nyepesi zinaweza kuendeshwa kwenye simu za mkononi au vifaa vilivyopachikwa. Nodi nyepesi hazishiriki katika makubaliano (yaani, haziwezi kuwa wathibitishaji), lakini zinaweza kufikia mnyororo wa bloku wa Ethereum na utendaji sawa na dhamana za usalama kama nodi kamili. + +Wateja wa mwanga ni eneo la maendeleo ya kazi kwa Ethereum na tunatarajia kuona wateja wapya wa mwanga kwa safu ya makubaliano na safu ya utekelezaji hivi karibuni. +Pia kuna njia zinazowezekana za kutoa data ya mteja nyepesi kupitia [mtandao wa gossip](https://www.ethportal.net/). Hii ni faida kwa sababu mtandao wa porojo unaweza kusaidia mtandao wa nodi nyepesi bila kuhitaji nodi kamili ili kuwasilisha maombi. + +Ethereum haiungi mkono idadi kubwa ya nodi za mwanga bado, lakini usaidizi wa nodi za mwanga ni eneo linalotarajiwa kuendeleza haraka katika siku za usoni. Hasa, wateja kama [Nimbus](https://nimbus.team/), [Helios](https://github.com/a16z/helios), na [LodeStar](https://lodestar.chainsafe.io/) kwa sasa wamejikita sana kwenye nodi nyepesi. + +## Kwa nini niendeshe nodi ya Ethereum? {#why-should-i-run-an-ethereum-node} + +Kuendesha nodi hukuruhusu kutumia Ethereum moja kwa moja, bila uaminifu na kwa faragha huku ukiunga mkono mtandao kwa kuuweka imara zaidi na kutawanywa. + +### Faida kwako {#benefits-to-you} + +Kuendesha nodi yako mwenyewe hukuwezesha kutumia Ethereum kwa njia ya faragha, ya kujitegemea na isiyoaminika. Huna haja ya kuamini mtandao kwa sababu unaweza kuthibitisha data mwenyewe na mteja wako. "Usiamini, thibitisha" ni kauli mbiu maarufu ya mnyororo wa bloku. + +- Nodi yako huthibitisha miamala na bloku zote dhidi ya sheria za makubaliano yenyewe. Hii inamaanisha si lazima utegemee nodi zingine zozote kwenye mtandao au kuziamini kikamilifu. +- Unaweza kutumia mkoba wa Ethereum na nodi yako mwenyewe. Unaweza kutumia dapps kwa usalama zaidi na kwa faragha kwa sababu hutalazimika kuvujisha anwani na salio zako kwa wapatanishi. Kila kitu kinaweza kukaguliwa na mteja wako mwenyewe. [MetaMask](https://metamask.io), [Frame](https://frame.sh/), na [mikoba mingine mingi](/wallets/find-wallet/) hutoa uagizaji wa RPC, kuwaruhusu kutumia nodi yako. +- Unaweza kuendesha na kujihifadhi huduma zingine ambazo hutegemea data kutoka Ethereum. Kwa mfano, hii inaweza kuwa kithibitishaji cha mnyororo wa Beacon, programu kama vile safu ya 2, miundombinu, wachunguzi wa kuzuia, wachakataji malipo, n. k. +- Unaweza kutoa [ncha zako maalum za RPC](/developers/docs/apis/json-rpc/). Unaweza hata kutoa viunganishi hivi hadharani kwa jamii ili kuwasaidia kuepuka watoa huduma wakuu wa kimamlaka. +- Unaweza kuunganisha kwenye nodi yako kwa kutumia **Mawasiliano ya Mchakato wa Kati (IPC)** au uandike upya nodi ili kupakia programu yako kama programu-jalizi. Hii inatoa muda wa kusubiri wa chini, ambayo husaidia sana, k.m., wakati wa kuchakata data nyingi kwa kutumia maktaba za web3 au unapohitaji kubadilisha miamala yako haraka iwezekanavyo (yaani, kukimbia mbele). +- Unaweza kuweka hisa ETH moja kwa moja ili kulinda mtandao na kupata zawadi. Angalia [uwekaji hisa pekee](/staking/solo/) ili kuanza. + +![Jinsi unavyofikia Ethereum kupitia mfumo wako na nodi](./nodes.png) + +### Faida za mtandao {#network-benefits} + +Seti mbalimbali za nodi ni muhimu kwa afya, usalama na ustahimilivu wa kiutendaji wa Ethereum. + +- Nodi kamili hutekeleza sheria za maafikiano ili wasiweze kudanganywa ili wakubali vizuizi ambavyo havifuati. Hii hutoa usalama wa ziada kwenye mtandao kwa sababu ikiwa nodi zote zingekuwa nodi nyepesi, ambazo hazifanyi uthibitishaji kamili, viidhinishi vinaweza kushambulia mtandao. +- Katika kisa cha shambulio ambalo hushinda ulinzi wa kiuchumi wa kripto wa [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/#what-is-pos), urejeshaji wa kijamii unaweza kufanywa na nodi kamili zinazochagua kufuata mnyororo mnyofu. +- Nodi nyingi zaidi kwenye mtandao husababisha mtandao tofauti na thabiti, lengo kuu la utawanyaji, ambalo huwezesha mfumo unaostahimili udhibiti na unaotegemewa. +- Nodi kamili hutoa ufikiaji wa data ya mnyororo wa bloku kwa wateja wepesi wanaotegemea. Nodi nyepesi hazihifadhi mnyororo mzima wa bloku, badala yake huthibitisha data kupitia [mizizi ya hali katika vichwa vya bloku](/developers/docs/blocks/#block-anatomy). Wanaweza kuomba maelezo zaidi kutoka kwa nodi kamili ikiwa wanahitaji. + +Ikiwa unatumia nodi kamili, mtandao wote wa Ethereum unafaidika nayo, hata ikiwa hutumii kithibitishaji. + +## Kuendesha nodi yako mwenyewe {#running-your-own-node} + +Unavutiwa na kuendesha mteja wako mwenyewe wa Ethereum? + +Kwa utangulizi unaofaa kwa wanaoanza tembelea ukurasa wetu wa [endesha nodi](/run-a-node) ili kujifunza zaidi. + +Ikiwa wewe ni mtumiaji wa kiufundi zaidi, ingia katika maelezo na chaguo zaidi kuhusu jinsi ya [kuanzisha nodi yako mwenyewe](/developers/docs/nodes-and-clients/run-a-node/). + +## Njia mbadala {#alternatives} + +Kuandaa nodi yako mwenyewe kunaweza kukugharimu wakati na rasilimali lakini huhitaji kila wakati kuendesha mfano wako mwenyewe. Katika kesi hii, unaweza kutumia mtoa huduma wa API wa wahusika wengine. Kwa muhtasari wa kutumia huduma hizi, angalia [nodi kama huduma](/developers/docs/nodes-and-clients/nodes-as-a-service/). + +Iwapo mtu anaendesha nodi ya Ethereum iliyo na API ya umma katika jumuiya yako, unaweza kuelekeza mikoba yako kwenye nodi ya jumuiya kupitia Custom RPC na upate faragha zaidi kuliko na mtu mwingine anayeaminika bila mpangilio. + +Kwa upande mwingine, ikiwa unaendesha mteja, unaweza kuishiriki na marafiki zako wanaoweza kuihitaji. + +## Wateja wa utekelezaji {#execution-clients} + +Jumuiya ya Ethereum hudumisha wateja wengi wa utekelezaji wa programu huria (hapo awali walijulikana kama 'Wateja wa Eth1', au 'wateja wa Ethereum' pekee), iliyotengenezwa na timu tofauti zinazotumia lugha tofauti za programu. Hii hufanya mtandao kuwa imara zaidi na [wenye anuwai zaidi](/developers/docs/nodes-and-clients/client-diversity/). Lengo bora ni kufikia utofauti bila mteja yeyote kutawala ili kupunguza uwezekano wowote wa kushindwa. + +Jedwali hili linatoa muhtasari wa wateja tofauti. Wote hupita [majaribio ya wateja](https://github.com/ethereum/tests) na hudumishwa kikamilifu ili kusasishwa na maboresho ya mtandao. + +| Mteja | Lugha | Mifumo ya uendeshaji | Mitandao | Mikakati ya Usawazishaji | Upunguzaji wa hali | +| ------------------------------------------------------------------------------------------- | ------------------------ | --------------------- | ---------------------------- | ------------------------------------------------------------------------------------ | ------------------------- | +| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Mtandao Mkuu, Sepolia, Hoodi | [Snap](#snap-sync), [Kamili](#full-sync) | Kumbukumbu, Iliyopunguzwa | +| [Nethermind](https://www.nethermind.io/) | C#, .NET | Linux, Windows, macOS | Mtandao Mkuu, Sepolia, Hoodi | [Snap](#snap-sync) (bila kuhudumia), Haraka, [Kamili](#full-sync) | Kumbukumbu, Iliyopunguzwa | +| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mtandao Mkuu, Sepolia, Hoodi | [Snap](#snap-sync), [Haraka](#fast-sync), [Kamili](#full-sync) | Kumbukumbu, Iliyopunguzwa | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mtandao Mkuu, Sepolia, Hoodi | [Kamili](#full-sync) | Kumbukumbu, Iliyopunguzwa | +| [Reth](https://reth.rs/) | Rust | Linux, Windows, macOS | Mtandao Mkuu, Sepolia, Hoodi | [Kamili](#full-sync) | Kumbukumbu, Iliyopunguzwa | +| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo) _(beta)_ | TypeScript | Linux, Windows, macOS | Sepolia, Hoodi | [Kamili](#full-sync) | Iliyopunguzwa | + +Kwa zaidi kuhusu mitandao inayotumika, soma kuhusu [mitandao ya Ethereum](/developers/docs/networks/). + +Kila mteja ana matumizi na faida za kipekee, kwa hivyo unapaswa kuchagua mmoja kulingana na mapendeleo yako mwenyewe. Anuwai inaruhusu utekelezaji kulenga vipengele tofauti na hadhira ya watumiaji. Unaweza kutaka kuchagua mteja kulingana na vipengele, usaidizi, lugha ya programu, au leseni. + +### Besu {#besu} + +Hyperledger Besu ni mteja wa Ethereum wa kiwango cha biashara kwa mitandao ya umma na yenye ruhusa. Inaendesha vipengele vyote vya Mtandao Mkuu wa Ethereum, kutoka ufuatiliaji hadi GraphQL, ina ufuatiliaji wa kina na inasaidiwa na ConsenSys, katika njia za wazi za jamii na kupitia SLAs za kibiashara kwa biashara. Imeandikwa kwa Java na ina leseni ya Apache 2.0. + +[Nyaraka](https://besu.hyperledger.org/en/stable/) za kina za Besu zitakuongoza kupitia maelezo yote kuhusu vipengele na usanidi wake. + +### Erigon {#erigon} + +Erigon, ambaye awali alijulikana kama Turbo-Geth, ilianza kama uma wa Go Ethereum inayoelekezwa kwa kasi na ufanisi wa nafasi ya diski. Erigon ni usanifu upya kabisa wa utekelezaji wa Ethereum, ulioandikwa kwa sasa katika Go lakini ukiwa na utekelezaji katika lugha nyingine zinazoendelea. Lengo la Erigon ni kutoa utekelezaji wa haraka, wa moduli zaidi, na ulioboreshwa zaidi wa Ethereum. Inaweza kufanya usawazishaji kamili wa nodi ya kumbukumbu kwa kutumia takriban 2TB ya nafasi ya diski, chini ya siku 3. + +### Go Ethereum {#geth} + +Go Ethereum (Geth kwa ufupi) ni moja ya utekelezaji wa asili wa itifaki ya Ethereum. Hivi sasa, ndiye mteja aliyeenea zaidi na msingi mkubwa zaidi wa watumiaji na zana anuwai kwa watumiaji na wasanifu. Imeandikwa kwa Go, chanzo wazi kikamilifu na ina leseni chini ya GNU LGPL v3. + +Jifunze zaidi kuhusu Geth katika [nyaraka](https://geth.ethereum.org/docs/) zake. + +### Nethermind {#nethermind} + +Nethermind ni utekelezaji wa Ethereum ulioundwa kwa mkusanyiko wa teknolojia ya C# .NET, iliyopewa leseni na LGPL-3.0, inayoendeshwa kwenye mifumo yote mikuu ikijumuisha ARM. Inatoa utendaji mzuri na: + +- mashine halisi iliyoboreshwa +- ufikiaji wa hali +- mitandao na vipengele vingi kama vile dashibodi za Prometheus/Grafana, msaada wa uandikishaji wa seq, ufuatiliaji wa JSON-RPC na programu jalizi za uchanganuzi. + +Nethermind pia ina [nyaraka za kina](https://docs.nethermind.io), usaidizi mkubwa wa wasanidi, jumuiya ya mtandaoni na usaidizi wa 24/7 unaopatikana kwa watumiaji wa malipo. + +### Reth {#reth} + +Reth (ufupi wa Rust Ethereum) ni utekelezaji wa nodi kamili ya Ethereum unaolenga kuwa rafiki kwa mtumiaji, unaoweza kubadilishwa kwa urahisi, haraka na wenye ufanisi. Reth awali ilijengwa na kuendeshwa mbele na Paradigm, na ina leseni chini ya leseni za Apache na MIT. + +Reth iko tayari kwa uzalishaji, na inafaa kwa matumizi katika mazingira muhimu ya dhamira kama vile huduma za kasi au za muda wa juu. Hufanya kazi vyema katika hali za utumiaji ambapo utendaji wa juu wenye ukingo mkubwa unahitajika kama vile RPC, MEV kuorodhesha, kuiga mienendo, na shighuli za P2P. + +Jifunze zaidi kwa kuangalia [Kitabu cha Reth](https://reth.rs/), au [repo ya Reth ya GitHub](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth). + +### Inayoendelezwa {#execution-in-development} + +Wateja hawa bado wako katika hatua za awali za maendeleo na bado hawajapendekezwa kwa matumizi ya uzalishaji. + +#### EthereumJS {#ethereumjs} + +Mteja wa Utekelezaji wa EthereumJS (EthereumJS) imeandikwa katika TypeScript na inaundwa na idadi ya vifurushi, ikiwa ni pamoja na vipengele vya msingi vya Ethereum zinazowakilishwa na kizuizi, Transaction, na Merkle-Patricia Trie na vipengele vya msingi vya mteja ikiwa ni pamoja na utekelezaji wa Ethereum Virtual Machine (EVM), mtandao wa kiambajengo cha 2P, na mfuko wa mitandao wa DevP2P. + +Jifunze zaidi kuihusu kwa kusoma [nyaraka](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master) zake + +## Wateja wa makubaliano {#consensus-clients} + +Kuna wateja wengi wa makubaliano (hapo awali walijulikana kama wateja wa 'Eth2') ili kusaidia [maboresho ya makubaliano](/roadmap/beacon-chain/). Wanawajibika kwa mantiki yote inayohusiana na makubaliano ikiwa ni pamoja na algoriti ya kuchagua uma, kuchakata uthibitisho na kusimamia zawadi na adhabu za [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos). + +| Mteja | Lugha | Mifumo ya uendeshaji | Mitandao | +| ------------------------------------------------------------- | ---------- | --------------------- | ----------------------------------------------------------- | +| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Mnyororo Kioleza, Hoodi, Pyrmont, Sepolia, na zaidi | +| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Mnyororo Kioleza, Hoodi, Sepolia, na zaidi | +| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Mnyororo Kioleza, Hoodi, Sepolia, na zaidi | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Mnyororo Kioleza, Gnosis, Hoodi, Pyrmont, Sepolia, na zaidi | +| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Mnyororo Kioleza, Gnosis, Hoodi, Sepolia, na zaidi | +| [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | Mnyororo Kioleza, Hoodi, Sepolia, na zaidi | + +### Lighthouse {#lighthouse} + +Lighthouse ni utekelezaji wa mteja wa makubaliano ulioandikwa kwa Rust chini ya leseni ya Apache-2.0. Inatunzwa na Sigma Prime na imekuwa thabiti na tayari kwa uzalishaji tangu mwanzo wa mnyororo wa Beacon. Inategemewa na biashara mbalimbali, mabwawa ya uwekaji hisa na watu binafsi. Inalenga kuwa salama, utendaji na kushirikiana katika mazingira mbalimbali, kutoka kwa Kompyuta za mezani hadi uwekaji wa kiotomatiki wa hali ya juu. + +Nyaraka zinaweza kupatikana katika [Kitabu cha Lighthouse](https://lighthouse-book.sigmaprime.io/) + +### Lodestar {#lodestar} + +Lodestar ni utekelezaji wa makubaliano ya mteja ulio tayari kwa uzalishaji ulioandikwa katika Typescript chini ya leseni ya LGPL-3.0. Inasimamiwa na ChainSafe Systems na ndiyo wateja wapya zaidi wa makubaliano kwa washikadau pekee, watengenezaji na watafiti. Lodestar inajumuisha nodi ya beacon na mteja wa uthibitishaji unaoendeshwa na utekelezaji wa JavaScript wa itifaki za Ethereum. Lodestar inalenga kuboresha urahisi wa matumizi ya Ethereum kwa kutumia wateja wepesi, kupanua upatikanaji kwa kundi kubwa zaidi la watengenezaji, na kuchangia zaidi katika utofauti wa mfumo wa ikolojia. + +Maelezo zaidi yanaweza kupatikana kwenye [tovuti ya Lodestar](https://lodestar.chainsafe.io/) + +### Nimbus {#nimbus} + +Nimbus ni utekelezaji wa mteja wa makubaliano ulioandikwa kwa Nim chini ya leseni ya Apache-2.0. Ni mteja aliye tayari kwa uzalishaji anayetumiwa na waweka hisa pekee na mabwawa ya uwekaji hisa. Nimbus imeundwa kwa ajili ya ufanisi wa rasilimali, na kuifanya iwe rahisi kutumia vifaa vyenye vikwazo vya rasilimali na miundombinu ya biashara kwa urahisi sawa, bila kuathiri uthabiti au utendakazi wa zawadi. Alama ya rasilimali nyepesi inamaanisha kuwa mteja ana ukingo mkubwa wa usalama wakati mtandao uko chini ya msongo. + +Jifunze zaidi katika [hati za Nimbus](https://nimbus.guide/) + +### Prysm {#prysm} + +Prysm ni mteja wa makubaliano wa chanzo wazi wenye vipengele kamili, ulioandikwa kwa Go chini ya leseni ya GPL-3.0. Ina kipengele cha hiari cha UI ya wavuti na inatanguliza uzoefu wa mtumiaji, nyaraka, na urekebishwaji kwa watumiaji wa nyumbani na wale wa taasisi. + +Tembelea [hati za Prysm](https://prysm.offchainlabs.com/docs/) ili kujifunza zaidi. + +### Teku {#teku} + +Teku ni mmoja wa wateja wa asili wa mwanzo wa Mnyororo Kioleza. Pamoja na malengo ya kawaida (usalama, uimara, uthabiti, utumiaji, utendaji), Teku inalenga hasa kuzingatia kikamilifu viwango vyote mbalimbali vya wateja wa makubaliano. + +Teku inatoa chaguo rahisi sana za upelekaji. Nodi ya mnyororo kioleza na mteja wa mthibitishaji vinaweza kuendeshwa pamoja kama mchakato mmoja, ambayo ni rahisi sana kwa waweka hisa pekee, au nodi zinaweza kuendeshwa kando kwa shughuli za uwekaji hisa za hali ya juu. Kwa kuongeza, Teku inaingiliana kikamilifu na [Web3Signer](https://github.com/ConsenSys/web3signer/) kwa usalama wa ufunguo wa kutia saini na ulinzi wa kupunguzwa. + +Teku imeandikwa kwa Java na ina leseni ya Apache 2.0. Inatengenezwa na timu ya Itifaki huko ConsenSys ambayo pia inawajibika kwa Besu na Web3Signer. Jifunze zaidi katika [hati za Teku](https://docs.teku.consensys.net/en/latest/). + +### Grandine {#grandine} + +Grandine ni utekelezaji wa mteja wa makubaliano, ulioandikwa kwa Rust chini ya leseni ya GPL-3.0. Inadumishwa na Timu ya Msingi ya Grandine na ni ya haraka, yenye utendaji wa juu na nyepesi. Inafaa kwa waweka hisa anuwai kutoka kwa waweka hisa pekee wanaoendesha vifaa vyenye rasilimali ndogo kama vile Raspberry Pi hadi waweka hisa wakubwa wa kitaasisi wanaoendesha makumi ya maelfu ya wathibitishaji. + +Nyaraka zinaweza kupatikana katika [Kitabu cha Grandine](https://docs.grandine.io/) + +## Njia za usawazishaji {#sync-modes} + +Ili kufuata na kuthibitisha data ya sasa kwenye mtandao, mteja wa Ethereum anahitaji kusawazisha na hali ya hivi karibuni ya mtandao. Hii inafanywa kwa kupakua data kutoka kwa rika, kuthibitisha uadilifu wao kwa kriptografia, na kujenga hifadhidata ya mnyororo wa bloku ya ndani. + +Njia za usawazishaji zinawakilisha mbinu tofauti za mchakato huu na maelewano mbalimbali. Wateja pia hutofautiana katika utekelezaji wao wa algoriti za usawazishaji. Daima rejelea nyaraka rasmi za mteja uliyemchagua kwa maelezo maalum juu ya utekelezaji. + +### Njia za usawazishaji za safu ya utekelezaji {#execution-layer-sync-modes} + +Safu ya utekelezaji inaweza kuendeshwa katika njia tofauti ili kukidhi matumizi tofauti, kutoka kutekeleza tena hali ya ulimwengu ya mnyororo wa bloku hadi kusawazisha tu na ncha ya mnyororo kutoka kwa kituo cha ukaguzi kinachoaminika. + +#### Usawazishaji kamili {#full-sync} + +Usawazishaji kamili hupakua bloku zote (ikiwa ni pamoja na vichwa na miili ya bloku) na hutengeneza upya hali ya mnyororo wa bloku kwa kuongeza kwa kutekeleza kila bloku kutoka mwanzo. + +- Hupunguza uaminifu na hutoa usalama wa juu zaidi kwa kuthibitisha kila muamala. +- Kwa kuongezeka kwa idadi ya miamala, inaweza kuchukua siku hadi wiki kuchakata miamala yote. + +[Nodi za kumbukumbu](#archive-node) hufanya usawazishaji kamili ili kujenga (na kuhifadhi) historia kamili ya mabadiliko ya hali yaliyofanywa na kila muamala katika kila bloku. + +#### Usawazishaji wa haraka {#fast-sync} + +Kama usawazishaji kamili, usawazishaji wa haraka hupakua bloku zote (ikiwa ni pamoja na vichwa, miamala, na risiti). Hata hivyo, badala ya kuchakata upya miamala ya nyuma, uunganishaji wa haraka hutegemea stakabadhi hadi kufikia kichwa cha hivi majuzi, inapobadilika na kuingiza na kuchakata vitalu ili kutoa nodi kamili. + +- Mkakati wa usawazishaji wa haraka. +- Hupunguza mahitaji ya uchakataji kwa kupendelea matumizi ya kipimo data. + +#### Usawazishaji wa Snap {#snap-sync} + +Usawazishaji wa Snap pia huthibitisha mnyororo bloku kwa bloku. Hata hivyo, badala ya kuanza kwenye kizuizi cha mwanzo, uunganishaji wa haraka huanza katika sehemu ya hivi karibuni ya ukaguzi 'inayoaminika' ambayo inajulikana kuwa sehemu ya kiambajengo ya halisi. Nodi huhifadhi vituo vya ukaguzi vya mara kwa mara huku ikifuta data ya zamani zaidi ya umri fulani. Picha hizi za haraka hutumiwa kutengeneza upya data ya hali inavyohitajika, badala ya kuihifadhi milele. + +- Mkakati wa haraka zaidi wa usawazishaji, kwa sasa ni chaguomsingi katika Mtandao Mkuu wa Ethereum. +- Huokoa matumizi mengi ya diski na kipimo data cha mtandao bila kuathiri usalama. + +[Zaidi kuhusu usawazishaji wa snap](https://github.com/ethereum/devp2p/blob/master/caps/snap.md). + +#### Usawazishaji mwepesi {#light-sync} + +Njia ya mteja mwepesi hupakua vichwa vyote vya bloku, data ya bloku, na huthibitisha baadhi kwa nasibu. Husawazisha tu ncha ya mnyororo kutoka kwa kituo cha ukaguzi kinachoaminika. + +- Hupata tu hali ya hivi karibuni huku ikitegemea uaminifu kwa wasanidi programu na utaratibu wa makubaliano. +- Mteja tayari kutumika na hali ya sasa ya mtandao ndani ya dakika chache. + +**NB** Usawazishaji mwepesi bado haufanyi kazi na uthibitisho wa hisa wa Ethereum - matoleo mapya ya usawazishaji mwepesi yanapaswa kutolewa hivi karibuni! + +[Zaidi kuhusu wateja wepesi](/developers/docs/nodes-and-clients/light-clients/) + +### Njia za usawazishaji za safu ya makubaliano {#consensus-layer-sync-modes} + +#### Usawazishaji wa matumaini {#optimistic-sync} + +Optimistic syn ni mkakati wa ulandanishi wa baada ya kuunganisha iliyoundwa kuingia na inyooana na matoleo ya zamani, kuruhusu nodi za utekelezaji kuunganisha kupitia mbinu zilizowekwa. Injini ya utekelezaji inaweza kuingiza bloku za mnyororo kioleza _kwa matumaini_ bila kuzithibitisha kikamilifu, kupata kichwa cha hivi karibuni, na kisha kuanza kusawazisha mnyororo na mbinu zilizo hapo juu. Kisha, baada ya mteja wa utekelezaji kukamata, itajulisha mteja wa makubaliano ya uhalali wa miamala katika Mnyororo wa Beacon. + +[Zaidi kuhusu usawazishaji wa matumaini](https://github.com/ethereum/consensus-specs/blob/dev/sync/optimistic.md) + +#### Usawazishaji wa kituo cha ukaguzi {#checkpoint-sync} + +Uunganishaji wa sehemu ya ukaguzi, unaojulikana pia kama uunganishaji dhaifu wa ubinafsi, hutengeneza hali bora ya mtumiaji ya kuunganisha Nodi ya Beacon. Inategemea dhana za [udhaifu wa kibinafsi](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/) ambayo huwezesha kusawazisha Mnyororo Kioleza kutoka kwa kituo cha ukaguzi cha hivi karibuni cha udhaifu wa kibinafsi badala ya mwanzo. Usawazishaji wa kituo cha ukaguzi hufanya muda wa awali wa usawazishaji kuwa haraka zaidi na dhana sawa za uaminifu kama kusawazisha kutoka [mwanzo](/glossary/#genesis-block). + +Kwa mazoezi, hii inamaanisha kuwa nodi yako inaunganishwa na huduma ya mbali ili kupakua majimbo yaliyokamilishwa hivi karibuni na kuendelea kuthibitisha data kutoka kwa hatua hiyo. Mhusika wa tatu anayetoa data anaaminika na anapaswa kuchaguliwa kwa uangalifu. + +Zaidi kuhusu [usawazishaji wa kituo cha ukaguzi](https://notes.ethereum.org/@djrtwo/ws-sync-in-practice) + +## Masomo zaidi {#further-reading} + +- [Ethereum 101 - Sehemu ya 2 - Kuelewa Nodi](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes, 13 Februari 2019_ +- [Kuendesha Nodi Kamili za Ethereum: Mwongozo kwa Wenye Ari Kidogo](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 Novemba 2019_ + +## Mada zinazohusiana {#related-topics} + +- [Bloku](/developers/docs/blocks/) +- [Mitandao](/developers/docs/networks/) + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Geuza Raspberry Pi 4 yako kuwa nodi ya mthibitishaji kwa kuwasha tu kadi ya MicroSD – Mwongozo wa usakinishaji](/developers/tutorials/run-node-raspberry-pi/) _– Washa Raspberry Pi 4 yako, chomeka kebo ya ethaneti, unganisha diski ya SSD na uwashe kifaa ili kugeuza Raspberry Pi 4 kuwa nodi kamili ya Ethereum inayoendesha safu ya utekelezaji (Mtandao Mkuu) na/au safu ya makubaliano (Mnyororo Kioleza / mthibitishaji)._ diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/light-clients/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/light-clients/index.md new file mode 100644 index 00000000000..f42490a1e26 --- /dev/null +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/light-clients/index.md @@ -0,0 +1,61 @@ +--- +title: Wateja wepesi +description: Utangulizi wa wateja wepesi wa Ethereum. +lang: sw +--- + +Kuendesha nodi kamili ndiyo njia isiyo na uaminifu zaidi, ya faragha, iliyogatuliwa na sugu ya udhibiti ya kuingiliana na Ethereum. Ukiwa na nodi kamili unahifadhi nakala yako mwenyewe ya mnyororo wa bloku ambayo unaweza kuiuliza papo hapo na unapata ufikiaji wa moja kwa moja kwa mtandao rika-kwa-rika wa Ethereum. Hata hivyo, kuendesha nodi kamili kunahitaji kiasi kikubwa cha kumbukumbu, ghala na CPU. Hii inamaanisha haiwezekani kwa kila mtu kuendesha nodi yake mwenyewe. Kuna suluhisho kadhaa kwa hili kwenye ramani ya barabara ya Ethereum, ikiwa ni pamoja na statelessness, lakini ziko miaka kadhaa kabla ya kutekelezwa. Jibu la muda mfupi ni kubadilishana baadhi ya faida za kuendesha nodi kamili kwa maboresho makubwa ya utendaji ambayo huruhusu nodi kufanya kazi na mahitaji ya chini sana ya maunzi. Nodi zinazofanya biashara hii zinajulikana kama nodi nyepesi. + +## Mteja mwepesi ni nini {#what-is-a-light-client} + +Nodi nyepesi ni nodi inayoendesha programu ya mteja mwepesi. Badala ya kuhifadhi nakala za ndani za data ya mnyororo wa bloku na kuthibitisha mabadiliko yote kwa kujitegemea, huomba data muhimu kutoka kwa mtoa huduma fulani badala yake. Mtoa huduma anaweza kuwa muunganisho wa moja kwa moja kwa nodi kamili au kupitia seva fulani ya RPC iliyowekwa katikati. Data kisha inathibitishwa na nodi nyepesi, ikiruhusu kwenda sambamba na kichwa cha mnyororo. Nodi nyepesi huchakata tu vichwa vya bloku, ikipakua mara chache tu yaliyomo halisi ya bloku. Nodi zinaweza kutofautiana katika wepesi wao, kulingana na mchanganyiko wa programu za mteja mwepesi na kamili wanazoendesha. Kwa mfano, usanidi mwepesi zaidi itakuwa ni kuendesha mteja mwepesi wa utekelezaji na mteja mwepesi wa makubaliano. Pia kuna uwezekano kwamba nodi nyingi zitachagua kuendesha wateja wepesi wa makubaliano na wateja kamili wa utekelezaji, au kinyume chake. + +## Wateja wepesi hufanyaje kazi? {#how-do-light-clients-work} + +Wakati Ethereum ilipoanza kutumia utaratibu wa makubaliano unaotegemea uthibitisho wa hisa, miundombinu mipya ilianzishwa mahususi kusaidia wateja wepesi. Njia inavyofanya kazi ni kwa kuchagua bila mpangilio kikundi kidogo cha wathibitishaji 512 kila baada ya siku 1.1 kufanya kazi kama **kamati ya kusawazisha**. Kamati ya kusawazisha hutia saini kichwa cha bloku za hivi karibuni. Kila kichwa cha bloku kina saini iliyokusanywa ya wathibitishaji katika kamati ya kusawazisha na "bitfield" inayoonyesha ni wathibitishaji gani waliotia saini na ni wapi hawakutia saini. Kila kichwa pia kinajumuisha orodha ya wathibitishaji wanaotarajiwa kushiriki katika kutia saini bloku inayofuata. Hii inamaanisha mteja mwepesi anaweza kuona haraka kwamba kamati ya kusawazisha imetia saini data wanayopokea, na pia wanaweza kuangalia kuwa kamati ya kusawazisha ni ya kweli kwa kulinganisha ile wanayopokea na ile waliyoambiwa kutarajia katika bloku iliyotangulia. Kwa njia hii, mteja mwepesi anaweza kuendelea kusasisha maarifa yake ya bloku ya hivi karibuni ya Ethereum bila kupakua bloku yenyewe, bali kichwa tu ambacho kina habari za muhtasari. + +Kwenye safu ya utekelezaji hakuna maelezo mahususi kwa mteja mwepesi wa utekelezaji. Wigo wa mteja mwepesi wa utekelezaji unaweza kutofautiana kutoka "hali nyepesi" ya mteja kamili wa utekelezaji ambayo ina utendakazi wote wa EVM na mtandao wa nodi kamili lakini inathibitisha tu vichwa vya bloku, bila kupakua data inayohusiana, au inaweza kuwa mteja aliyepunguzwa zaidi ambaye anategemea sana kupeleka maombi kwa mtoa huduma wa RPC ili kuingiliana na Ethereum. + +## Kwa nini wateja wepesi ni muhimu? {#why-are-light-clients-important} + +Wateja wepesi ni muhimu kwa sababu wanawaruhusu watumiaji kuthibitisha data inayoingia badala ya kuamini kwa upofu kwamba mtoa data wao ni sahihi na mwaminifu, huku wakitumia sehemu ndogo tu ya rasilimali za kikokotozi ya nodi kamili. Data wanayopokea wateja wepesi inaweza kukaguliwa dhidi ya vichwa vya bloku ambavyo wanajua vimetiwa saini na angalau 2/3 ya seti nasibu ya wathibitishaji 512 wa Ethereum. Huu ni ushahidi dhabiti sana kwamba data ni sahihi. + +Mteja mwepesi hutumia tu kiasi kidogo sana cha nguvu ya kompyuta, kumbukumbu na ghala kwa hivyo inaweza kuendeshwa kwenye simu ya mkononi, iliyopachikwa kwenye programu au kama sehemu ya kivinjari. Wateja wepesi ni njia ya kufanya ufikiaji uliopunguzwa uaminifu kwa Ethereum kuwa rahisi kama vile kumwamini mtoa huduma wa tatu. + +Hebu tuchukue mfano rahisi. Fikiria unataka kuangalia salio la akaunti yako. Ili kufanya hivi inabidi utume ombi kwa nodi ya Ethereum. Nodi hiyo itaangalia nakala yake ya ndani ya hali ya Ethereum kwa salio lako na kukurejeshea. Ikiwa huna ufikiaji wa moja kwa moja kwa nodi, kuna waendeshaji wa kati wanaotoa data hii kama huduma. Unaweza kuwatumia ombi, wanaangalia nodi yao, na kukutumia matokeo. Tatizo la hili ni kwamba inabidi umwamini mtoa huduma kukupa taarifa sahihi. Huwezi kujua kweli habari ni sahihi ikiwa huwezi kujithibitishia mwenyewe. + +Mteja mwepesi hushughulikia suala hili. Bado unaomba data kutoka kwa mtoa huduma wa nje, lakini unapopokea data inakuja na uthibitisho ambao nodi yako nyepesi inaweza kuangalia dhidi ya habari iliyopokea kwenye kichwa cha bloku. Hii inamaanisha Ethereum inathibitisha usahihi wa data yako badala ya mwendeshaji fulani anayeaminika. + +## Ni ubunifu gani ambao wateja wepesi huwezesha? {#what-innovations-do-light-clients-enable} + +Faida kuu ya wateja wepesi ni kuwezesha watu wengi zaidi kufikia Ethereum kwa kujitegemea na mahitaji madogo ya maunzi na utegemezi mdogo kwa wahusika wengine. Hii ni nzuri kwa watumiaji kwa sababu wanaweza kuthibitisha data zao wenyewe na ni nzuri kwa mtandao kwa sababu inaongeza idadi na utofauti wa nodi zinazothibitisha mnyororo. + +Uwezo wa kuendesha nodi za Ethereum kwenye vifaa vyenye ghala, kumbukumbu na nguvu ndogo sana za usindikaji ni moja ya maeneo makuu ya uvumbuzi yaliyofunguliwa na wateja wepesi. Ambapo leo nodi za Ethereum zinahitaji rasilimali nyingi za kompyuta, wateja wepesi wanaweza kupachikwa kwenye vivinjari, kuendeshwa kwenye simu za mkononi na labda hata vifaa vidogo zaidi kama vile saa janja. Hii inamaanisha mikoba ya Ethereum yenye wateja waliopachikwa inaweza kufanya kazi kwenye simu ya mkononi. Hii inamaanisha mikoba ya simu inaweza kugatuliwa zaidi kwani haitalazimika kuamini watoa huduma wa data wa kati kwa data zao. + +Upanuzi wa hii ni kuwezesha vifaa vya **intaneti ya vitu (IoT)**. Mteja mwepesi anaweza kutumika kuthibitisha haraka umiliki wa salio la tokeni au NFT, na dhamana zote za usalama zinazotolewa na kamati za kusawazisha, na hivyo kusababisha hatua fulani kwenye mtandao wa IoT. Fikiria [huduma ya kukodisha baiskeli](https://youtu.be/ZHNrAXf3RDE?t=929) inayotumia programu iliyo na mteja mwepesi aliyejengewa ndani ili kuthibitisha haraka kwamba unamiliki NFT ya huduma ya kukodisha na ikithibitika, inafungua baiskeli ili uondoke nayo! + +Unda-mpya za Ethereum pia zitanufaika na wateja wepesi. Moja ya matatizo makubwa kwa unda-mpya imekuwa ni udukuzi unaolenga madaraja yanayoruhusu fedha kuhamishwa kutoka Mtandao Mkuu wa Ethereum hadi kwenye unda-mpya. Udhaifu mmoja ni oracles ambazo unda-mpya hutumia kugundua kwamba mtumiaji ameweka amana kwenye daraja. Ikiwa oracle inatoa data mbaya, inaweza kuidanganya unda-mpya kufikiria kulikuwa na amana kwenye daraja na kutoa fedha kimakosa. Mteja mwepesi aliyepachikwa kwenye unda-mpya anaweza kutumika kulinda dhidi ya oracles zilizoharibiwa kwa sababu amana kwenye daraja inaweza kuja na uthibitisho unaoweza kuthibitishwa na unda-mpya kabla ya kutoa tokeni zozote. Dhana hiyo hiyo inaweza pia kutumika kwa madaraja mengine ya kati ya minyororo. + +Wateja wepesi wanaweza pia kutumika kusasisha mikoba ya Ethereum. Badala ya kuamini data inayotolewa na mtoa huduma wa RPC, mkoba wako unaweza kuthibitisha moja kwa moja data unayopewa kwa kutumia mteja mwepesi aliyejengewa ndani. Hii itaongeza usalama kwenye mkoba wako. Ikiwa mtoa huduma wako wa RPC hakuwa mwaminifu na akakupa data isiyo sahihi, mteja mwepesi aliyejengewa ndani anaweza kukuambia! + +## Hali ya sasa ni ipi ya maendeleo ya wateja wepesi? {#current-state-of-development} + +Kuna wateja kadhaa wepesi wanaoendelezwa, ikiwa ni pamoja na wateja wepesi wa utekelezaji, makubaliano na mchanganyiko wa wateja wepesi wa utekelezaji/makubaliano. Hizi ni tekelezo za wateja wepesi tunazozijua wakati wa kuandika ukurasa huu: + +- [Lodestar](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client): mteja mwepesi wa makubaliano katika TypeScript +- [Helios](https://github.com/a16z/helios): mteja mwepesi wa mchanganyiko wa utekelezaji na makubaliano katika Rust +- [Geth](https://github.com/ethereum/go-ethereum/tree/master/beacon/light): hali nyepesi ya mteja wa utekelezaji (katika maendeleo) katika Go +- [Nimbus](https://nimbus.guide/el-light-client.html): mteja mwepesi wa makubaliano katika Nim + +Kwa ufahamu wetu hakuna kati ya hizi inayoonekana kuwa tayari kwa uzalishaji bado. + +Pia kuna kazi nyingi inayofanywa kuboresha njia ambazo wateja wepesi wanaweza kufikia data ya Ethereum. Hivi sasa, wateja wepesi wanategemea maombi ya RPC kwa nodi kamili kwa kutumia mtindo wa mteja/seva, lakini katika siku zijazo data inaweza kuombwa kwa njia iliyogatuliwa zaidi kwa kutumia mtandao maalum kama vile [Mtandao wa Portal](https://www.ethportal.net/) ambao unaweza kutoa data kwa wateja wepesi kwa kutumia itifaki ya uvumi rika-kwa-rika. + +Vipengele vingine vya [ramani ya barabara](/roadmap/) kama vile [miti ya Verkle](/roadmap/verkle-trees/) na [statelessness](/roadmap/statelessness/) hatimaye vitaleta dhamana za usalama za wateja wepesi kuwa sawa na zile za wateja kamili. + +## Masomo zaidi {#further-reading} + +- [Zsolt Felfodhi kuhusu wateja wepesi wa Geth](https://www.youtube.com/watch?v=EPZeFXau-RE) +- [Etan Kissling kuhusu mtandao wa wateja wepesi](https://www.youtube.com/watch?v=85MeiMA4dD8) +- [Etan Kissling kuhusu wateja wepesi baada ya Muungano](https://www.youtube.com/watch?v=ZHNrAXf3RDE) +- [Piper Merriam: Barabara ndefu kuelekea wateja wepesi wanaofanya kazi](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/) diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/node-architecture/index.md new file mode 100644 index 00000000000..641080db105 --- /dev/null +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/node-architecture/index.md @@ -0,0 +1,59 @@ +--- +title: Muundo wa Nodi +description: Utangulizi wa jinsi nodi za Ethereum zinavyopangwa. +lang: sw +--- + +Nodi ya Ethereum imeundwa na programu mbili: [programu ya utekelezaji](/developers/docs/nodes-and-clients/#execution-clients) na [programu ya makubaliano](/developers/docs/nodes-and-clients/#consensus-clients). Ili nodi iweze kupendekeza bloku mpya, ni lazima pia iendeshe [programu ya mthibitishaji](#validators). + +Wakati Ethereum ilikuwa ikitumia [uthibitishaji-wa-kazi](/developers/docs/consensus-mechanisms/pow/), programu ya utekelezaji ilitosha kuendesha nodi kamili ya Ethereum. Hata hivyo, tangu kutekelezwa kwa [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pow/), programu ya utekelezaji lazima itumike pamoja na programu nyingine inayoitwa [programu ya makubaliano](/developers/docs/nodes-and-clients/#consensus-clients). + +Mchoro ulio hapa chini unaonyesha uhusiano kati ya programu mbili za Ethereum. Programu hizi mbili huunganishwa kwenye mitandao yao husika ya rika-kwa-rika (P2P). Mitandao tofauti ya P2P inahitajika kwani programu za utekelezaji husambaza miamala kupitia mtandao wao wa P2P, na kuziruhusu kudhibiti hifadhi zao za ndani za miamala, wakati programu za makubaliano husambaza bloku kupitia mtandao wao wa P2P, na kuwezesha makubaliano na ukuaji wa mnyororo. + +![](node-architecture-text-background.png) + +_Kuna chaguo kadhaa za programu ya utekelezaji ikiwa ni pamoja na Erigon, Nethermind, na Besu_. + +Ili muundo huu wa programu mbili ufanye kazi, programu za makubaliano lazima zipitishe mafungu ya miamala kwa programu ya utekelezaji. Programu ya utekelezaji hutekeleza miamala ndani ya mfumo ili kuhakiki kwamba miamala haikiuki sheria zozote za Ethereum na kwamba sasisho lililopendekezwa kwa hali ya Ethereum ni sahihi. Wakati nodi inapochaguliwa kuwa mzalishaji wa bloku, kielelezo chake cha programu ya makubaliano huomba mafungu ya miamala kutoka kwa programu ya utekelezaji ili kujumuisha katika bloku mpya na kuzitekeleza ili kusasisha hali ya kimataifa. Programu ya makubaliano huendesha programu ya utekelezaji kupitia muunganisho wa RPC wa ndani kwa kutumia [API ya Injini](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md). + +## Programu ya utekelezaji hufanya nini? {#execution-client} + +Programu ya utekelezaji inawajibika kwa uhakiki wa miamala, utunzaji, na usambazaji, pamoja na usimamizi wa hali na kusaidia Mashine Halisi ya Ethereum ([EVM](/developers/docs/evm/)). Haiwajibiki **kwa** ujenzi wa bloku, usambazaji wa bloku au kushughulikia mantiki ya makubaliano. Haya yako chini ya mamlaka ya programu ya makubaliano. + +Programu ya utekelezaji huunda mizigo ya utekelezaji - orodha ya miamala, trie ya hali iliyosasishwa, na data nyingine zinazohusiana na utekelezaji. Programu za makubaliano hujumuisha mzigo wa utekelezaji katika kila bloku. Programu ya utekelezaji pia inawajibika kwa kutekeleza tena miamala katika bloku mpya ili kuhakikisha kuwa ni halali. Utekelezaji wa miamala hufanywa kwenye kompyuta iliyopachikwa ya programu ya utekelezaji, inayojulikana kama [Mashine Halisi ya Ethereum (EVM)](/developers/docs/evm). + +Programu ya utekelezaji pia hutoa kiolesura cha mtumiaji kwa Ethereum kupitia [mbinu za RPC](/developers/docs/apis/json-rpc) zinazowawezesha watumiaji kuuliza mnyororo wa bloku wa Ethereum, kuwasilisha miamala na kupeleka mikataba-erevu. Ni kawaida kwa simu za RPC kushughulikiwa na maktaba kama vile [Web3js](https://docs.web3js.org/), [Web3py](https://web3py.readthedocs.io/en/v5/), au kwa kiolesura cha mtumiaji kama vile mkoba wa kivinjari. + +Kwa muhtasari, programu ya utekelezaji ni: + +- lango la mtumiaji kuelekea Ethereum +- mahali pa Mashine Halisi ya Ethereum, hali ya Ethereum na hifadhi ya miamala. + +## Programu ya makubaliano hufanya nini? {#consensus-client} + +Programu ya makubaliano inashughulikia mantiki yote inayowezesha nodi kusalia ikisawazishwa na mtandao wa Ethereum. Hii ni pamoja na kupokea bloku kutoka kwa rika na kuendesha algoriti ya kuchagua uma ili kuhakikisha nodi inafuata kila wakati mnyororo wenye mkusanyiko mkubwa zaidi wa uthibitisho (unaopimwa kwa salio faafu za mthibitishaji). Sawa na programu ya utekelezaji, programu za makubaliano zina mtandao wao wenyewe wa P2P ambapo hushiriki bloku na uthibitisho. + +Programu ya makubaliano haishiriki katika kuidhinisha au kupendekeza bloku - hii inafanywa na mthibitishaji, programu jalizi ya hiari kwa programu ya makubaliano. Programu ya makubaliano isiyo na mthibitishaji hufuata tu kichwa cha mnyororo, ikiruhusu nodi kusalia imesawazishwa. Hii humwezesha mtumiaji kufanya miamala na Ethereum kwa kutumia programu yake ya utekelezaji, akiwa na uhakika kwamba yuko kwenye mnyororo sahihi. + +## Wathibitishaji {#validators} + +Kusimamisha hisa na kuendesha programu ya mthibitishaji hufanya nodi istahili kuchaguliwa kupendekeza bloku mpya. Waendeshaji wa nodi wanaweza kuongeza mthibitishaji kwenye programu zao za makubaliano kwa kuweka ETH 32 kwenye mkataba wa amana. Programu ya mthibitishaji huja ikiwa imefungwa pamoja na programu ya makubaliano na inaweza kuongezwa kwenye nodi wakati wowote. Mthibitishaji hushughulikia uthibitisho na mapendekezo ya bloku. Pia huwezesha nodi kukusanya zawadi au kupoteza ETH kupitia adhabu au 'slashing'. + +[Zaidi kuhusu kusimamisha hisa](/staking/). + +## Ulinganisho wa vijenzi vya nodi {#node-comparison} + +| Programu ya Utekelezaji | Programu ya Makubaliano | Mthibitishaji | +| ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | +| Husambaza miamala kupitia mtandao wake wa P2P | Husambaza bloku na uthibitisho kupitia mtandao wake wa P2P | Hupendekeza bloku | +| Hutekeleza/hutekeleza upya miamala | Huendesha algoriti ya kuchagua uma | Hukusanya zawadi/adhabu | +| Huhakiki mabadiliko ya hali yanayoingia | Hufuatilia kichwa cha mnyororo | Hufanya uthibitisho | +| Husimamia hali na trie za risiti | Husimamia hali ya Beacon (ina taarifa za makubaliano na utekelezaji) | Inahitaji ETH 32 kusimamishwa | +| Huunda mzigo wa utekelezaji | Hufuatilia nasibu iliyokusanywa katika RANDAO (algoriti inayotoa nasibu inayoweza kuthibitishwa kwa ajili ya uteuzi wa mthibitishaji na shughuli nyingine za makubaliano) | Inaweza kupata 'slashing' | +| Hufichua API ya JSON-RPC kwa ajili ya kuingiliana na Ethereum | Hufuatilia uhalalishaji na ukamilishaji | | + +## Masomo zaidi {#further-reading} + +- [Uthibitisho wa Hisa](/developers/docs/consensus-mechanisms/pos) +- [Pendekezo la bloku](/developers/docs/consensus-mechanisms/pos/block-proposal) +- [Zawadi na adhabu za mthibitishaji](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/nodes-as-a-service/index.md new file mode 100644 index 00000000000..713db3477f5 --- /dev/null +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -0,0 +1,418 @@ +--- +title: Nodi kama huduma +description: Muhtasari wa kiwango cha msingi wa huduma za nodi, faida na hasara, na watoa huduma maarufu. +lang: sw +sidebarDepth: 2 +--- + +## Utangulizi {#Introduction} + +Kuendesha [nodi yako mwenyewe ya Ethereum](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) kunaweza kuwa na changamoto, hasa unapoanza au unapoongezeka kwa kasi. Kuna [idadi ya huduma](#popular-node-services) zinazoendesha miundombinu ya nodi iliyoboreshwa kwa ajili yako, ili uweze kuzingatia kuendeleza programu au bidhaa yako badala yake. Tutaeleza jinsi huduma za nodi zinavyofanya kazi, faida na hasara za kuzitumia na kuorodhesha watoa huduma ikiwa ungependa kuanza. + +## Mahitaji ya awali {#prerequisites} + +Ikiwa bado huna uelewa wa nodi na wateja ni nini, angalia [Nodi na wateja](/developers/docs/nodes-and-clients/). + +## Waweka-dau {#stakoooooooooooooors} + +Waweka-dau wa pekee lazima waendeshe miundombinu yao wenyewe badala ya kutegemea watoa huduma wengine. Hii inamaanisha kuendesha programu ya utekelezaji pamoja na programu ya makubaliano. Kabla ya [Muungano](/roadmap/merge), iliwezekana kuendesha programu ya makubaliano pekee na kutumia mtoa huduma wa kati kwa data ya utekelezaji; hii haiwezekani tena - mweka-dau wa pekee lazima aendeshe programu zote mbili. Hata hivyo, kuna huduma zinazopatikana ili kurahisisha mchakato huu. + +[Soma zaidi kuhusu kuendesha nodi](/developers/docs/nodes-and-clients/run-a-node/). + +Huduma zilizoelezwa kwenye ukurasa huu ni za nodi zisizoweka dau. + +## Huduma za nodi hufanyaje kazi? {#how-do-node-services-work} + +Watoa huduma za nodi huendesha programu za wateja wa nodi zilizosambazwa kwa ajili yako, kwa hivyo huna haja ya kufanya hivyo. + +Huduma hizi kwa kawaida hutoa ufunguo wa API unaoweza kutumia kuandika na kusoma kutoka kwenye mnyororo wa bloku. Mara nyingi hujumuisha ufikiaji wa [testnets za Ethereum](/developers/docs/networks/#ethereum-testnets) pamoja na Mtandao Mkuu. + +Baadhi ya huduma hukupa nodi yako ya kipekee ambayo wanakuendeshea, huku zingine zikitumia visawazisha vya mzigo kusambaza shughuli kwenye nodi. + +Takriban huduma zote za nodi ni rahisi sana kuunganisha nazo, ikihusisha mabadiliko ya mstari mmoja katika msimbo wako ili kubadilisha nodi yako unayojiendeshea, au hata kubadilisha kati ya huduma zenyewe. + +Mara nyingi huduma za nodi zitaendesha aina mbalimbali za [programu za wateja wa nodi](/developers/docs/nodes-and-clients/#execution-clients) na [aina](/developers/docs/nodes-and-clients/#node-types), huku zikikuruhusu kufikia nodi kamili na za kumbukumbu pamoja na mbinu maalum za mteja katika API moja. + +Ni muhimu kutambua kwamba huduma za nodi hazihifadhi na hazipaswi kuhifadhi funguo zako binafsi au taarifa. + +## Je, ni faida gani za kutumia huduma ya nodi? {#benefits-of-using-a-node-service} + +Faida kuu ya kutumia huduma ya nodi ni kutolazimika kutumia muda wa uhandisi kutunza na kusimamia nodi wewe mwenyewe. Hii inakuruhusu kuzingatia kujenga bidhaa yako badala ya kuwa na wasiwasi juu ya matengenezo ya miundombinu. + +Kuendesha nodi zako mwenyewe kunaweza kuwa ghali sana kuanzia uhifadhi, kipimo data hadi muda muhimu wa uhandisi. Mambo kama vile kuanzisha nodi zaidi wakati wa uongezwaji, kuboresha nodi hadi matoleo ya hivi karibuni, na kuhakikisha uthabiti wa hali, yanaweza kukukengeusha kutoka kwa ujenzi na matumizi ya rasilimali kwenye bidhaa yako ya web3 unayoitaka. + +## Je, ni hasara gani za kutumia Huduma ya Nodi? {#cons-of-using-a-node-service} + +Kwa kutumia huduma ya nodi unakusanya kipengele cha miundombinu ya bidhaa yako. Kwa sababu hii, miradi inayoshikilia ugatuzi kuwa muhimu sana inaweza kupendelea kujiendeshea nodi badala ya kutoa huduma kwa mhusika mwingine. + +Soma zaidi kuhusu [faida za kuendesha nodi yako mwenyewe](/developers/docs/nodes-and-clients/#benefits-to-you). + +## Huduma maarufu za nodi {#popular-node-services} + +Hii ni orodha ya baadhi ya watoa huduma maarufu wa nodi za Ethereum, jisikie huru kuongeza zozote zinazokosekana! Kila huduma ya nodi hutoa manufaa na vipengele tofauti pamoja na viwango vya bure au vya kulipia, unapaswa kuchunguza ni vipi vinavyofaa zaidi mahitaji yako kabla ya kufanya uamuzi. + +- [**Alchemy**](https://alchemy.com/) + - [Hati](https://www.alchemy.com/docs/) + - Vipengele + - Kiwango kikubwa cha bure na vitengo vya kukokotoa milioni 300 kwa mwezi (~maombi milioni 30 ya getLatestBlock) + - Usaidizi wa minyororo mingi kwa Polygon, Starknet, Optimism, Arbitrum + - Inawezesha ~70% ya mfumo mtawanyo wa kimamlaka mkubwa zaidi wa Ethereum na ujazo wa miamala wa DeFi + - Arifa za webhook za wakati halisi kupitia Alchemy Notify + - Usaidizi bora na utegemezi / uthabiti + - API ya NFT ya Alchemy + - Dashibodi yenye Kigunduzi cha Maombi, Mfuatiliaji wa Mempool, na Mtunzi + - Ufikiaji jumuishi wa bomba la testnet + - Jumuiya ya wajenzi hai ya Discord yenye watumiaji 18k + +- [**Allnodes**](https://www.allnodes.com/) + - [Hati](https://docs.allnodes.com/) + - Vipengele + - Hakuna vikomo vya viwango na tokeni ya PublicNode iliyoundwa kwenye ukurasa wa kwingineko ya Allnodes. + - Ncha za RPC za bure zinazozingatia faragha (minyororo ya bloku 100+) kwenye [PublicNode](https://www.publicnode.com) + - Nodi za kipekee bila vikomo vya viwango kwa minyororo ya bloku 90+ + - Nodi za kumbukumbu za kipekee kwa minyororo ya bloku 30+ + - Inapatikana katika maeneo 3 (Marekani, EU, Asia) + - Picha za muda kwa minyororo ya bloku 100+ kwenye [PublicNode](https://www.publicnode.com/snapshots) + - Usaidizi wa kiufundi wa 24/7 na SLA ya muda wa kufanya kazi ya 99.90%-99.98% (inategemea mpango). + - Bei ya kulipa kwa saa + - Lipa kwa Kadi ya Mkopo, PayPal au Kripto + +- [**All That Node**](https://allthatnode.com/) + - [Hati](https://docs.allthatnode.com/) + - Vipengele + - Maombi 50,000 kwa siku na kiwango cha bure + - Usaidizi kwa zaidi ya itifaki 40 + - API za JSON-RPC (EVM, Tendermint), REST, na Websocket zinasaidiwa + - Ufikiaji usio na kikomo wa data ya kumbukumbu + - Usaidizi wa kiufundi 24/7 na zaidi ya 99.9% ya muda wa kufanya kazi + - Bomba linapatikana kwenye minyororo mingi + - Ufikiaji usio na kikomo wa ncha na idadi isiyo na kikomo ya funguo za API + - API ya Kufuatilia/Kurekebisha hitilafu inasaidiwa + - Sasisho za kiotomatiki + +- [**Amazon Managed Blockchain**](https://aws.amazon.com/managed-blockchain/) + - [Hati](https://aws.amazon.com/managed-blockchain/resources/) + - Vipengele + - Nodi za Ethereum zinazosimamiwa kikamilifu + - Inapatikana katika maeneo sita + - JSON-RPC kupitia HTTP na WebSockets salama + - Inasaidia minyororo 3 + - SLA, Usaidizi wa AWS 24/7 + - Go-ethereum na Lighthouse + +- [**Ankr**](https://www.ankr.com/) + - [Hati](https://docs.ankr.com/) + - Vipengele + - Itifaki ya Ankr - ufikiaji wazi kwa ncha za umma za API za RPC kwa minyororo 8+ + - Usawazishaji wa mzigo na ufuatiliaji wa afya ya nodi kwa lango la haraka na la kutegemewa kwa nodi iliyo karibu zaidi + - Kiwango cha juu kinachowezesha ncha ya WSS na kikomo cha kiwango kisicho na ukomo + - Uwekaji wa nodi kamili na nodi ya mthibitishaji kwa mbofyo mmoja kwa minyororo 40+ + - Ongeza kadri unavyoendelea + - Zana za uchanganuzi + - Dashibodi + - Ncha za RPC, HTTPS na WSS + - Usaidizi wa moja kwa moja + +- [**Blast**](https://blastapi.io/) + - [Hati](https://docs.blastapi.io/) + - Vipengele + - Usaidizi wa RPC na WSS + - Uenyeji wa nodi wa maeneo mengi + - Miundombinu iliyogatuliwa + - API ya Umma + - Mpango wa Bure wa Kipekee + - Usaidizi wa minyororo mingi (minyororo ya bloku 17+) + - Nodi za Kumbukumbu + - Usaidizi wa Discord 24/7 + - Ufuatiliaji na arifa 24/7 + - SLA ya jumla ya 99.9% + - Lipa kwa kripto + +- [**BlockDaemon**](https://blockdaemon.com/) + - [Hati](https://ubiquity.docs.blockdaemon.com/) + - Faida + - Dashibodi + - Kwa msingi wa nodi + - Uchanganuzi + +- [**BlockPI**](https://blockpi.io/) + - [Hati](https://docs.blockpi.io/) + - Vipengele + - Muundo thabiti na uliosambazwa wa nodi + - Hadi ncha 40 za HTTPS na WSS + - Kifurushi cha kujisajili cha bure na kifurushi cha kila mwezi + - Mbinu ya kufuatilia + Usaidizi wa data ya kumbukumbu + - Vifurushi vyenye uhalali wa hadi siku 90 + - Mpango maalum na malipo ya kadri unavyotumia + - Lipa kwa kripto + - Usaidizi wa moja kwa moja & Usaidizi wa kiufundi + +- [**Chainbase**](https://www.chainbase.com/) + - [Hati](https://docs.chainbase.com) + - Vipengele + - Huduma ya RPC inayopatikana sana, haraka, na inayoweza kuongezwa + - Usaidizi wa minyororo mingi + - Ushuru wa bure + - Dashibodi rahisi kutumia + - Hutoa huduma za data za mnyororo wa bloku zaidi ya RPC + +- [**Chainstack**](https://chainstack.com/) + - [Hati](https://docs.chainstack.com/) + - Vipengele + - Nodi za pamoja za bure + - Nodi za kumbukumbu za pamoja + - Usaidizi wa GraphQL + - Ncha za RPC na WSS + - Nodi kamili na za kumbukumbu za kipekee + - Muda wa haraka wa kusawazisha kwa uwekaji wa kipekee + - Leta cloud yako + - Bei ya kulipa kwa saa + - Usaidizi wa moja kwa moja 24/7 + +- [**dRPC**](https://drpc.org/) + - [Hati](https://drpc.org/docs) + - NodeCloud: Miundombinu ya RPC ya plug-n-play kuanzia $10 (USD)—kasi kamili, hakuna vikomo + - Vipengele vya NodeCloud: + - Usaidizi wa API kwa mitandao 185 + - Pool iliyosambazwa ya watoa huduma 40+ + - Ufikiaji wa kimataifa na makundi tisa (9) ya kijiografia + - Mfumo wa kusawazisha mzigo unaoendeshwa na AI + - Bei bapa ya malipo ya kadri unavyotumia—hakuna ongezeko, hakuna kuisha muda, hakuna kufungia + - Funguo zisizo na kikomo, marekebisho madogo ya funguo, majukumu ya timu, ulinzi wa mbele + - Kiwango bapa cha mbinu kwa vitengo 20 vya kukokotoa (CUs) kwa kila mbinu + - [Orodha ya ncha za umma](https://drpc.org/chainlist) + - [Kikokotoo cha bei](https://drpc.org/pricing#calculator) + - NodeCore: mrundiko wa chanzo-wazi kwa mashirika yanayotaka udhibiti kamili + +- [**GetBlock**](https://getblock.io/) + - [Hati](https://getblock.io/docs/get-started/authentication-with-api-key/) + - Vipengele + - Ufikiaji wa nodi za mnyororo wa bloku 40+ + - Maombi 40K ya bure kila siku + - Idadi isiyo na kikomo ya funguo za API + - Kasi ya juu ya muunganisho wa 1GB/sekunde + - Fuatilia+Hifadhi + - Uchanganuzi wa hali ya juu + - Sasisho za kiotomatiki + - Usaidizi wa kiufundi + +- [**InfStones**](https://infstones.com/) + - Vipengele + - Chaguo la kiwango cha bure + - Ongeza kadri unavyoendelea + - Uchanganuzi + - Dashibodi + - Ncha za kipekee za API + - Nodi kamili za kipekee + - Muda wa haraka wa kusawazisha kwa uwekaji wa kipekee + - Usaidizi wa moja kwa moja 24/7 + - Ufikiaji wa nodi za mnyororo wa bloku 50+ + +- [**Infura**](https://infura.io/) + - [Hati](https://infura.io/docs) + - Vipengele + - Chaguo la kiwango cha bure + - Ongeza kadri unavyoendelea + - Data ya kumbukumbu ya kulipia + - Usaidizi wa Moja kwa Moja + - Dashibodi + +- [**Kaleido**](https://kaleido.io/) + - [Hati](https://docs.kaleido.io/) + - Vipengele + - Kiwango cha kuanza cha bure + - Uwekaji wa nodi ya Ethereum kwa mbofyo mmoja + - Wateja na algoriti zinazoweza kubinafsishwa (Geth, Quorum & Besu || PoA, IBFT & Raft) + - API 500+ za usimamizi na huduma + - Kiolesura cha RESTful kwa uwasilishaji wa miamala ya Ethereum (kinachoungwa mkono na Apache Kafka) + - Mitiririko ya kutoka kwa uwasilishaji wa matukio (inayoungwa mkono na Apache Kafka) + - Mkusanyiko wa kina wa huduma za "offchain" na saidizi (k.m., usafirishaji wa ujumbe uliosimbwa kwa pande mbili) + - Uingiaji rahisi wa mtandao na utawala na udhibiti wa ufikiaji unaotegemea majukumu + - Usimamizi wa hali ya juu wa watumiaji kwa wasimamizi na watumiaji wa mwisho + - Miundombinu inayoweza kuongezwa sana, imara, na ya kiwango cha biashara + - Usimamizi wa ufunguo binafsi wa Cloud HSM + - Ufunganisho wa Mtandao Mkuu wa Ethereum + - Vyeti vya ISO 27k na SOC 2, Aina ya 2 + - Usanidi wa runtime unaobadilika (k.m., kuongeza ujumuishaji wa cloud, kubadilisha uingiaji wa nodi, n.k.) + - Usaidizi kwa uratibu wa uwekaji wa cloud nyingi, maeneo mengi na mseto + - Bei rahisi ya kila saa inayotegemea SaaS + - SLA na usaidizi wa 24x7 + +- [**Lava Network**](https://www.lavanet.xyz/) + - [Hati](https://docs.lavanet.xyz/) + - Vipengele + - Matumizi ya Testnet ya Bure + - Upungufu Uliogatuliwa kwa Muda wa Juu wa Kufanya Kazi + - Chanzo-wazi + - SDK Iliyogatuliwa Kikamilifu + - Ujumuishaji wa Ethers.js + - Kiolesura cha Usimamizi wa Mradi chenye Uelewa wa Haraka + - Uadilifu wa Data unaotegemea Makubaliano + - Usaidizi wa Minyororo Mingi + +- [**Moralis**](https://moralis.io/) + - [Hati](https://docs.moralis.io/) + - Vipengele + - Nodi za pamoja za bure + - Nodi za kumbukumbu za pamoja za bure + - Inayozingatia faragha (sera ya kutokuweka kumbukumbu) + - Usaidizi wa minyororo-tofauti + - Ongeza kadri unavyoendelea + - Dashibodi + - SDK ya kipekee ya Ethereum + - Ncha za kipekee za API + - Usaidizi wa moja kwa moja, wa kiufundi + +- [**NodeReal MegaNode**](https://nodereal.io/) + - [Hati](https://docs.nodereal.io/docs/introduction) + - Vipengele + - Huduma za API za RPC za kuaminika, za haraka na zinazoweza kuongezwa + - API iliyoboreshwa kwa wasanidi programu wa web3 + - Usaidizi wa minyororo mingi + - Anza bure + +- [**NOWNodes**](https://nownodes.io/) + - [Hati](https://documenter.getpostman.com/view/13630829/TVmFkLwy) + - Vipengele + - Ufikiaji wa nodi za mnyororo wa bloku 50+ + - Ufunguo wa API wa Bure + - Vichunguzi vya Bloku + - Muda wa Majibu ya API ⩽ sekunde 1 + - Timu ya Usaidizi 24/7 + - Msimamizi wa Akaunti ya Kibinafsi + - Nodi za pamoja, za kumbukumbu, za nakala na za kipekee + +- [**Pocket Network**](https://www.pokt.network/) + - [Hati](https://docs.pokt.network/home/) + - Vipengele + - Itifaki ya RPC na Soko lililogatuliwa + - Maombi Milioni 1 kwa Siku Kiwango cha Bure (kwa kila ncha, upeo 2) + - [Ncha za Umma](https://docs.pokt.network/developers/public-endpoints) + - Programu ya Pre-Stake+ (ikiwa unahitaji zaidi ya maombi milioni 1 kwa siku) + - Minyororo ya Bloku 15+ Inasaidiwa + - Nodi 6400+ zinazopata POKT kwa kuhudumia programu + - Usaidizi wa Nodi ya Kumbukumbu, Nodi ya Kumbukumbu yenye Ufuatiliaji, & Nodi ya Testnet + - Utofauti wa Mteja wa Nodi ya Mtandao Mkuu wa Ethereum + - Hakuna Sehemu Moja ya Kushindwa + - Muda Sifuri wa Kutofanya Kazi + - Tokenomiki za Gharama nafuu Karibu na Sifuri (weka dau la POKT mara moja kwa kipimo data cha mtandao) + - Hakuna gharama za mwezi zilizopotea, geuza miundombinu yako kuwa rasilimali + - Usawazishaji wa Mzigo uliojengwa ndani ya Itifaki + - Ongeza bila kikomo idadi ya maombi kwa siku na nodi kwa saa kadri unavyoendelea + - Chaguo la faragha zaidi, linalostahimili udhibiti + - Usaidizi wa vitendo kwa msanidi programu + - Dashibodi na uchanganuzi wa [Pocket Portal](https://bit.ly/ETHorg_POKTportal) + +- [**QuickNode**](https://www.quicknode.com) + - [Hati](https://www.quicknode.com/docs/) + - Vipengele + - Usaidizi wa kiufundi 24/7 & jumuiya ya wasanidi wa Discord + - Mtandao wenye usawaziko wa kijiografia, cloud/metal nyingi, na muda mdogo wa kusubiri + - Usaidizi wa minyororo mingi (Optimism, Arbitrum, Polygon + 11 zingine) + - Safu za kati kwa kasi & uthabiti (uelekezaji wa simu, kache, uorodheshaji) + - Ufuatiliaji wa Mkataba-Smart kupitia Webhooks + - Dashibodi yenye uelewa wa haraka, seti ya uchanganuzi, mtunzi wa RPC + - Vipengele vya usalama vya hali ya juu (JWT, ufichaji, uorodheshaji mweupe) + - API ya data na uchanganuzi wa NFT + - [Iliyothibitishwa na SOC2](https://www.quicknode.com/security) + - Inafaa kwa Wasanidi programu hadi Biashara + +- [**Rivet**](https://rivet.cloud/) + - [Hati](https://rivet.readthedocs.io/en/latest/) + - Vipengele + - Chaguo la kiwango cha bure + - Ongeza kadri unavyoendelea + +- [**SenseiNode**](https://senseinode.com) + - [Hati](https://docs.senseinode.com/) + - Vipengele + - Nodi za kipekee na za Pamoja + - Dashibodi + - Uenyeji nje ya AWS kwa watoa huduma wengi wa uenyeji katika maeneo tofauti Amerika ya Kusini + - Wateja wa Prysm na Lighthouse + +- [**SettleMint**](https://console.settlemint.com/) + - [Hati](https://docs.settlemint.com/) + - Vipengele + - Jaribio la bure + - Ongeza kadri unavyoendelea + - Usaidizi wa GraphQL + - Ncha za RPC na WSS + - Nodi kamili za kipekee + - Leta cloud yako + - Zana za uchanganuzi + - Dashibodi + - Bei ya kulipa kwa saa + - Usaidizi wa moja kwa moja + +- [**Tenderly**](https://tenderly.co/web3-gateway) + - [Hati](https://docs.tenderly.co/web3-gateway/web3-gateway) + - Vipengele + - Kiwango cha bure kinachojumuisha Vitengo milioni 25 vya Tenderly kwa mwezi + - Ufikiaji wa bure wa data ya kihistoria + - Hadi 8x kasi zaidi kwa mizigo ya kazi ya kusoma sana + - 100% ufikiaji thabiti wa kusoma + - Ncha za JSON-RPC + - Mjenzi wa ombi la RPC anayetegemea UI na onyesho la kukagua ombi + - Imeunganishwa kwa karibu na zana za maendeleo, utatuzi wa hitilafu, na majaribio za Tenderly + - Uigaji wa miamala + - Uchanganuzi wa matumizi na uchujaji + - Usimamizi rahisi wa ufunguo wa ufikiaji + - Usaidizi maalum wa uhandisi kupitia soga, barua pepe, na Discord + +- [**Tokenview**](https://services.tokenview.io/) + - [Hati](https://services.tokenview.io/docs?type=nodeService) + - Vipengele + - Usaidizi wa kiufundi 24/7 & Jumuiya ya Wasanidi wa Telegram + - Usaidizi wa minyororo mingi (Bitcoin, Ethereum, Tron, BNB Smart Chain, Ethereum Classic) + - Ncha zote za RPC na WSS ziko wazi kutumika + - Ufikiaji usio na kikomo wa API ya data ya kumbukumbu + - Dashibodi yenye Kigunduzi cha Maombi na Mfuatiliaji wa Mempool + - API ya data ya NFT na arifa za Webhook + - Lipa kwa Kripto + - Usaidizi wa nje kwa mahitaji ya ziada ya tabia + +- [**Watchdata**](https://watchdata.io/) + - [Hati](https://docs.watchdata.io/) + - Vipengele + - Utegemezi wa data + - Muunganisho usiokatizwa bila muda wa kutofanya kazi + - Uendeshaji wa kiotomatiki wa mchakato + - Ushuru wa bure + - Vikomo vya juu vinavyomfaa mtumiaji yeyote + - Usaidizi kwa nodi mbalimbali + - Uongezaji wa rasilimali + - Kasi ya juu ya uchakataji + +- [**ZMOK**](https://zmok.io/) + - [Hati](https://docs.zmok.io/) + - Vipengele + - Uendeshaji-wa-mbele kama huduma + - Mempool ya miamala ya kimataifa yenye mbinu za utafutaji/uchujaji + - Ada isiyo na kikomo ya TX na Gesi isiyo na kikomo kwa kutuma miamala + - Upataji wa haraka zaidi wa bloku mpya na usomaji wa mnyororo wa bloku + - Dhamana ya bei bora kwa kila simu ya API + +- [**Zeeve**](https://www.zeeve.io/) + - [Hati](https://www.zeeve.io/docs/) + - Vipengele + - Jukwaa la kiwango cha biashara la uendeshaji wa kiotomatiki bila msimbo linalotoa uwekaji, ufuatiliaji na usimamizi wa nodi na mitandao ya Mnyororo wa Bloku + - Itifaki na Ujumuishaji 30+ Zinazosaidiwa, na kuongeza zaidi + - Huduma za miundombinu ya web3 zilizoongezwa thamani kama uhifadhi uliogatuliwa, utambulisho uliogatuliwa na API za data za Leja ya Mnyororo wa Bloku kwa matumizi ya ulimwengu halisi + - Usaidizi wa 24/7 na ufuatiliaji makini huhakikisha afya ya nodi wakati wote. + - Ncha za RPC hutoa ufikiaji uliothibitishwa kwa API, usimamizi usio na usumbufu na dashibodi yenye uelewa wa haraka na uchanganuzi. + - Hutoa chaguo za cloud zinazosimamiwa na leta cloud yako mwenyewe za kuchagua na inasaidia watoa huduma wote wakuu wa cloud kama AWS, Azure, Google Cloud, Digital Ocean na kwenye majengo. + - Tunatumia uelekezaji wa akili kufikia nodi iliyo karibu zaidi na mtumiaji wako kila wakati + +## Masomo zaidi {#further-reading} + +- [Orodha ya huduma za nodi za Ethereum](https://ethereumnodes.com/) + +## Mada zinazohusiana {#related-topics} + +- [Nodi na wateja](/developers/docs/nodes-and-clients/) + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Kuanza na maendeleo ya Ethereum kwa kutumia Alchemy](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) +- [Mwongozo wa kutuma miamala kwa kutumia web3 na Alchemy](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/run-a-node/index.md new file mode 100644 index 00000000000..a9cac9c7e8f --- /dev/null +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/run-a-node/index.md @@ -0,0 +1,484 @@ +--- +title: Anzisha nodi yako mwenyewe ya Ethereum +description: Utangulizi wa jumla wa kuendesha mfano wako wa mteja wa Ethereum. +lang: sw +sidebarDepth: 2 +--- + +Kuendesha nodi yako hukupa faida mbalimbali, hufungua uwezekano mpya, na husaidia mfumo wa ikolojia. Ukurasa huu utakusaidia kuanzisha nodi yako na kushiriki katika kuthibitisha miamala ya Ethereum. + +Kumbuka kuwa baada ya [Muungano](/roadmap/merge), wateja wawili wanahitajika kuendesha nodi ya Ethereum; mteja wa **safu ya utekelezaji (EL)** na mteja wa **safu ya makubaliano (CL)**. Ukurasa huu utaonesha jinsi ya kusakinisha, kusanidi na kuunganisha wateja hawa wawili ili kuendesha nodi ya Ethereum. + +## Mahitaji ya awali {#prerequisites} + +Unatakiwa kuelewa nodi ya Ethereum ni nini na kwanini utatakiwa kuendesha mteja. Hili limeelezwa katika [Nodi na wateja](/developers/docs/nodes-and-clients/). + +Kama wewe ni mgeni katika mada ya kuendesha nodi, au unatafuta njia isiyo ya kiufundi sana, tunapendekeza kwanza uangalie utangulizi wetu rahisi kwa mtumiaji kuhusu [kuendesha nodi ya Ethereum](/run-a-node). + +## Kuchagua mbinu {#choosing-approach} + +Hatua ya kwanza kwenye kuendesha nodi yako ni kuchagua mbinu yako. Kulingana na mahitaji na uwezekano mbalimbali, unatakiwa uchague utekelezaji wa mteja (wa wateja wa utekelezaji na makubaliano), mazingira (vifaa, mfumo), na vigezo vya mipangilio ya mteja. + +Ukurasa huu utakusaidia katika kufanya maamuzi na kukusaidia kupata njia inayofaa zaidi ya kuendesha tukio lako la Ethereum. + +Ili kuchagua kutoka kwa utekelezaji wa wateja, angalia wote [wateja wa utekelezaji](/developers/docs/nodes-and-clients/#execution-clients) walio tayari kwa Mtandao Mkuu, [wateja wa makubaliano](/developers/docs/nodes-and-clients/#consensus-clients) na ujifunze kuhusu [utofauti wa wateja](/developers/docs/nodes-and-clients/client-diversity). + +Amua ikiwa utaendesha programu kwenye [maunzi yako mwenyewe au kwenye wingu](#local-vs-cloud), ukizingatia [mahitaji](#requirements) ya wateja. + +Baada ya kuandaa mazingira, sakinisha wateja waliochaguliwa ama kwa [kiolesura rahisi kwa wanaoanza](#automatized-setup) au [kwa mikono](#manual-setup) ukitumia terminal yenye chaguo za hali ya juu. + +Wakati nodi inaendeshwa na kusawazisha, uko tayari [kuitumia](#using-the-node), lakini hakikisha unafuatilia [utunzaji](#operating-the-node) wake. + +![Usanidi wa mteja](./diagram.png) + +### Mazingira na maunzi {#environment-and-hardware} + +#### Kwenye kifaa au kwenye wingu {#local-vs-cloud} + +Wateja wa Ethereum wanaweza kuendeshwa kwenye kompyuta za kawaida za watumiaji na hawahitaji vifaa maalumu, kama mashine za kuchimba madini mfano. Kwa hivyo, una machaguo mbalimbali ya kuendesha nodi kulingana na mahitaji yako. +Ili kurahisisha, tufikirie kuhusu kuendesha nodi kwenye kifaa chako binafsi na kwenye seva ya mtandaoni: + +- Wingu + - Watoa huduma hutoa muda mrefu wa upatikanaji wa seva na anwani za IP zisizobadilika + - Kupata seva maalumu au seva ya mtandaoni inaweza kuwa rahisi zaidi kuliko kujenga yako + - Hasara ni kutaabika kwa mtu wa tatu - mtoa huduma wa seva + - Kwa sababu ya kiasi kinachohitajika cha nodi nzima, bei ya seva iliyokodishwa inaweza ikawa kubwa +- Miliki vifaa + - Njia ya kujiamini kidogo na uhuru zaidi + - Uwekezaji wa mara moja + - Chaguo la kununua mashine zilizosanifiwa tayari + - Unatakiwa uandae, utunze, na kutatua matatizo ya mashine na mtandao + +Machaguo yote mawili yana faida tofauti zilizoelezwa kwa ufupi hapo juu. Kama unatafuta suluhisho la wingu, pamoja na watoa huduma wa kompyuta za wingu, kuna pia huduma zinazolenga kuendesha nodi. Angalia [nodi kama huduma](/developers/docs/nodes-and-clients/nodes-as-a-service/) kwa chaguo zaidi kuhusu nodi zilizopangishwa. + +#### Vifaa {#hardware} + +Hata hivyo, mtandao usioweza kudhibitiwa na ulioenea hautakiwi kutegemea watoa huduma wa wingu. Badala yake, kuendesha nodi yako kwenye vifaa vyako binafsi ni bora zaidi kwa mfumo wa ikolojia. [Makadirio](https://www.ethernodes.org/networkType/cl/Hosting) yanaonyesha sehemu kubwa ya nodi huendeshwa kwenye wingu, jambo ambalo linaweza kuwa chanzo kimoja cha hitilafu. + +Wateja wa Ethereum wanaweza kuendeshwa kwenye kompyuta, kompyuta ya mkononi, seva au hata kompyuta ya bodi moja. Ingawa inawezekana kuendesha wateja kwenye kompyuta yako binafsi, kuwa na mashine maalumu kwa ajili ya nodi yako tu inaweza kuongeza utendaji na usalama wake kwa kiasi kikubwa huku ikipunguza athari kwenye kompyuta yako kuu. + +Kutumia vifaa vyako inaweza kuwa rahisi zaidi. Kuna machaguo mengi rahisi na pia kuna machaguo ya juu kwa ajili ya watu wa kiufundi zaidi. Hivyo basi tuangalie mahitaji na njia za kuendesha wateja wa Ethereum kwenye mashine yako. + +#### Mahitaji {#requirements} + +Mahitaji ya vifaa hutofautiana kulingana na mteja lakini kwa kawaida hayako juu sana kwani nodi zinahitaji tu kuwa zimesawazishwa. Usiichanganye na kuchimba madini, ambayo inahitaji nguvu kubwa zaidi ya kompyuta. Muda wa kusawazisha na utendaji huboreshwa zaidi na vifaa vyenye nguvu zaidi. + +Kabla ya kusakinisha mteja yeyote, tafadhali hakikisha kompyuta yako ina uwezo wa kutosha kuiendesha. Unaweza kupata mahitaji ya chini na yaliyopendekezwa hapa chini. + +Kizuizi kikubwa cha kifaa chako mara nyingi ni nafasi ya diski. Kusawazisha blockchain ya Ethereum kunahitaji input/output ya kiwango cha juu na nafasi kubwa ya hifadhi. Ni bora kuwa na **hifadhi ya hali dhabiti (SSD)** yenye mamia ya GB za nafasi ya ziada hata baada ya usawazishaji. + +Ukubwa wa hifadhidata na kasi ya usawazishaji wa awali hutegemea mteja aliyechaguliwa, usanidi wake na [mkakati wa kusawazisha](/developers/docs/nodes-and-clients/#sync-modes). + +Pia hakikisha muunganisho wako wa intaneti hauna [kikomo cha kipimo data](https://wikipedia.org/wiki/Data_cap). Inashauriwa kutumia muunganisho usio na kikomo kwa kuwa usawazishaji wa awali na data inayotumwa kwenye mtandao inaweza kuzidi kikomo chako. + +##### Mfumo wa uendeshaji + +Wateja wote wanaunga mkono mifumo mikuu ya uendeshaji - Linux MacOS, Windows. Hii inamaanisha kuwa unaweza kuendesha nodi kwenye kompyuta ya kawaida au mashine ya seva kwa kutumia mfumo wa uendeshaji (OS) unaokufaa sana. Hakikisha mfumo wako wa uendeshaji umesasishwa ili kuepuka matatizo yanayoweza kutokea na udhaifu wa kiusalama. + +##### Vigezo vya chini + +- CPU yenye angalau cores 2 na zaidi +- RAM yenye GB 8 +- SSD yenye 2TB +- Kipimo data cha angalau 10 MBit/s + +##### Maelezo yaliyopendekezwa + +- CPU ya haraka yenye angalau core 4 na zaidi +- RAM yenye GB 16 na zaidi +- SSD ya haraka yenye 2 TB na zaidi +- Kipimo data cha 25+ MBit/s + +Hali ya usawazishaji na mteja utakayochagua itaathiri mahitaji ya nafasi, lakini tumekadiria nafasi ya diski utakayohitaji kwa kila mteja hapa chini. + +| Mteja | Ukubwa wa diski (usawazishaji wa haraka) | Ukubwa wa diski (kumbukumbu kamili) | +| ---------- | ----------------------------------------------------------- | ------------------------------------------------------ | +| Besu | 800GB+ | 12TB+ | +| Erigon | N/A | 2.5TB+ | +| Geth | 500GB+ | 12TB+ | +| Nethermind | 500GB+ | 12TB+ | +| Reth | N/A | 2.2TB+ | + +- Kumbuka: Erigon na Reth hawatoi usawazishaji wa haraka, lakini Full Prunning inawezekana (~2TB kwa Erigon, ~1.2TB kwa Reth) + +Kwa wateja wa makubaliano, hitaji la nafasi pia linategemea utekelezaji wa mteja na vipengele vilivyowezeshwa (k.m., kikataji cha mthibitishaji) lakini kwa ujumla hesabia GB 200 nyingine inayohitajika kwa data ya beacon. Kwa namba kubwa ya wahalalishaji, kipimo data kinakuwa kikubwa pia. Unaweza kupata [maelezo kuhusu mahitaji ya mteja wa makubaliano katika uchambuzi huu](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc). + +#### Suluhisho za chomeka-na-cheza {#plug-and-play} + +Chaguo rahisi la kuendesha nodi kwa vifaa vyako binafsi ni kutumia masanduku ya plug-and-play. Mashine zilizosanifiwa tayari kutoka kwa wauzaji hutoa uzoefu rahisi zaidi: oda, unganisha, endesha. Kila kitu kimesanifiwa tayari na kinaendeshwa kiotomatiki kwa kutumia mwongozo wa kirahisi na dashibodi ya kufuatilia na kudhibiti programu. + +- [DappNode](https://dappnode.io/) +- [Avado](https://ava.do/) + +#### Ethereum kwenye kompyuta ya bodi moja {#ethereum-on-a-single-board-computer} + +Njia rahisi na ya bei nafuu ya kuendesha nodi ya Ethereum ni kutumia kompyuta yenye bodi moja, hata yenye usanifu wa ARM kama Raspberry Pi. [Ethereum kwenye ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) hutoa picha rahisi kuendesha za wateja wengi wa utekelezaji na makubaliano kwa ajili ya Raspberry Pi na bodi zingine za ARM. + +Vifaa vidogo, vya bei nafuu na vyenye ufanisi kama hivi ni bora kwa kuendesha modi nyumbani lakini kumbuka utendaji wao mdogo. + +## Kuanzisha nodi {#spinning-up-node} + +Usanidi halisi wa mteja unaweza kufanywa ama kwa kutumia zana za kuanzisha kiotomatiki au kwa mikono, ukisanidi programu ya mteja moja kwa moja. + +Kwa watumiaji wasio wa kitaalamu sana, njia inayopendekezwa ni kutumia kizindua, programu inayokuongoza kwenye usanikishaji na kuotomatisha mchakato wa usanidi wa mteja. Hata hivyo, kama una uzoefu wowote wa kutumia terminal, hatua za usanidi kwa mikono zinapaswa kuwa rahisi kufuatwa. + +### Usanidi wa kuongozwa {#automatized-setup} + +Miradi mbalimbali rahisi kwa watumiaji inalenga kuboresha uzoefu wa kuanzisha mteja. Zana hizi za kuanzisha zinatoa usakinishaji na usanidi wa mteja kiotomatiki, na baadhi hata hutoa kiolesura cha picha kwa ajili ya usanidi uliopangwa na ufuatiliaji wa wateja. + +Hapa chini kuna miradi michache inayoweza kukusaidia kusakinisha na kudhibiti wateja kwa mibofyo michache: + +- [DappNode](https://docs.dappnode.io/docs/user/getting-started/choose-your-path) - DappNode haiji tu na mashine kutoka kwa mchuuzi. Programu, kizindua halisi cha nodi na kituo cha kudhibiti chenye vipengele vingi inaweza kutumika kwenye vifaa vyovyote. +- [EthPillar](https://www.coincashew.com/coins/overview-eth/ethpillar) - Njia ya haraka na rahisi zaidi ya kusanidi nodi kamili. Zana ya usanidi kwa mstari mmoja na TUI ya usimamizi wa nodi. Huru. Chanzo cha wazi. Bidhaa za umma za Ethereum zinazotolewa na wadau binafsi. Inasaidia ARM64 na AMD64. +- [eth-docker](https://eth-docker.net/) - Usanidi wa kiotomatiki unaotumia Docker unaolenga kusimamisha kwa urahisi na usalama, unahitaji maarifa ya msingi ya terminal na Docker, unapendekezwa kwa watumiaji walio na uzoefu zaidi. +- [Stereum](https://stereum-dev.github.io/ethereum-node-web-docs) - Kizinduzi cha kusakinisha wateja kwenye seva ya mbali kupitia muunganisho wa SSH na mwongozo wa usanidi wa GUI, kituo cha udhibiti, na vipengele vingine vingi. +- [NiceNode](https://www.nicenode.xyz/) - Kizinduzi chenye uzoefu rahisi wa mtumiaji ili kuendesha nodi kwenye kompyuta yako. Chagua tu wateja na uwanzishe kwa kubofya mara chache. Bado inaendelezwa. +- [Sedge](https://docs.sedge.nethermind.io/docs/intro) - Zana ya usanidi wa nodi inayotengeneza kiotomatiki usanidi wa Docker kwa kutumia kichawi cha CLI. Imeandikwa kwa Go na Nethermind. + +### Usanidi wa wateja kwa mikono {#manual-setup} + +Chaguo jingine ni kupakua, kuthibitisha, na kusanidi programu ya mteja kwa mikono. Hata kama baadhi ya wateja wanatoa kiolesura cha picha, usanidi wa mikono bado unahitaji ujuzi wa msingi na terminal lakini unatoa wepesi mwingi zaidi. + +Kama ilivyoelezwa hapo awali, kusanidi nodi yako ya Ethereum kutahitaji kuendesha jozi ya wateja wa makubaliano na wateja wa utekelezaji. Baadhi ya wateja wanaweza kujumuisha mteja mwepesi wa aina nyingine na kusawazisha bila kuhitaji programu nyingine yoyote. Hata hivyo, uthibitisho kamili usio na uaminifu unahitaji utekelezaji wote miwili. + +#### Kupata programu ya mteja {#getting-the-client} + +Kwanza, unahitaji kupata programu unayopendelea ya [mteja wa utekelezaji](/developers/docs/nodes-and-clients/#execution-clients) na [mteja wa makubaliano](/developers/docs/nodes-and-clients/#consensus-clients). + +Unaweza kupakua tu programu inayoweza kuendeshwa au kifurushi cha usakinishaji kinachofaa mfumo wako wa uendeshaji na usanifu. Thibitisha saini na jumla ya ukaguzi ya vifurushi vilivyopakuliwa kila wakati. Baadhi ya wateja pia hutoa hazina au picha za Docker kwa usakinishaji na masasisho rahisi. Wateja wote ni chanzo-wazi, kwa hivyo unaweza pia kuwajenga kutoka kwa chanzo. Hii ni njia ya hali ya juu zaidi, lakini katika hali zingine, inaweza kuhitajika. + +Maagizo ya kusakinisha kila mteja yametolewa katika nyaraka zilizounganishwa kwenye orodha za wateja hapo juu. + +Hizi ni kurasa za matoleo ya wateja ambapo unaweza kupata faili zao za binary zilizojengwa awali au maagizo ya usakinishaji: + +##### Programu za utelekezji + +- [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) + +Inafaa pia kuzingatia kuwa utofauti wa wateja ni [suala kwenye safu ya utekelezaji](/developers/docs/nodes-and-clients/client-diversity/#execution-layer). Inapendekezwa wasomaji wafikirie kuendesha mteja wa utekelezaji wa wachache. + +##### Programu ya makubaliano + +- [Lighthouse](https://github.com/sigp/lighthouse/releases/latest) +- [Lodestar](https://chainsafe.github.io/lodestar/run/getting-started/installation#build-from-source/) (Haitoi faili ya binary iliyojengwa awali, bali picha ya Docker tu au ya kujengwa kutoka kwa chanzo) +- [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) + +[Utofauti wa wateja](/developers/docs/nodes-and-clients/client-diversity/) ni muhimu kwa nodi za makubaliano zinazoendesha wathibitishaji. Ikiwa wathibitishaji wengi wanaendesha utekelezaji wa mteja mmoja, usalama wa mtandao uko hatarini. Kwa hivyo inapendekezwa kufikiria kuchagua mteja wa wachache. + +[Angalia matumizi ya hivi karibuni ya wateja wa mtandao](https://clientdiversity.org/) na jifunze zaidi kuhusu [utofauti wa wateja](/developers/docs/nodes-and-clients/client-diversity). + +##### Kuthibitisha programu + +Unapopakua programu kutoka kwenye intaneti, inapendekezwa kuthibitisha uadilifu wake. Hatua hii ni ya hiari lakini hasa kwa sehemu muhimu ya miundombinu kama mteja wa Ethereum, ni muhimu kufahamu vekta za mashambulizi zinazowezekana na kuziepuka. Ikiwa umepakua faili ya binary iliyojengwa awali, unahitaji kuiamini na kuhatarisha kwamba mshambuliaji anaweza kubadilisha faili inayoweza kuendeshwa na moja hasidi. + +Wasanidi programu hutia saini faili za binary zilizotolewa kwa funguo zao za PGP ili uweze kuthibitisha kwa njia ya kriptografia kuwa unaendesha hasa programu waliyoiunda. Unahitaji tu kupata funguo za umma zinazotumiwa na wasanidi programu, ambazo zinaweza kupatikana kwenye kurasa za matoleo ya mteja au kwenye nyaraka. Baada ya kupakua toleo la mteja na saini yake, unaweza kutumia utekelezaji wa PGP, k.m., [GnuPG](https://gnupg.org/download/index.html) ili kuzithibitisha kwa urahisi. Angalia mafunzo ya jinsi ya kuthibitisha programu chanzo-wazi kwa kutumia `gpg` kwenye [linux](https://www.tecmint.com/verify-pgp-signature-downloaded-software/) au [Windows/MacOS](https://freedom.press/training/verifying-open-source-software/). + +Aina nyingine ya uthibitisho ni kuhakikisha kuwa hashi, alama ya kipekee ya kriptografia, ya programu uliyoipakua inalingana na ile iliyotolewa na wasanidi programu. Hii ni rahisi zaidi kuliko kutumia PGP, na baadhi ya wateja hutoa chaguo hili pekee. Endesha tu chaguo la kukokotoa la hashi kwenye programu iliyopakuliwa na uilinganishe na ile kutoka kwa ukurasa wa toleo. Kwa mfano: + +```sh +sha256sum teku-22.6.1.tar.gz + +9b2f8c1f8d4dab0404ce70ea314ff4b3c77e9d27aff9d1e4c1933a5439767dde +``` + +#### Usanidi wa mteja {#client-setup} + +Baada ya kusakinisha, kupakua, au kukusanya programu ya mteja, uko tayari kuiendesha. Hii inamaanisha tu kwamba inapaswa kutekelezwa na usanidi unaofaa. Wateja hutoa chaguo nyingi za usanidi, ambazo zinaweza kuwezesha vipengele mbalimbali. + +Tuanze na chaguo ambazo zinaweza kuathiri sana utendaji wa mteja na matumizi ya data. [Njia za usawazishaji](/developers/docs/nodes-and-clients/#sync-modes) zinawakilisha mbinu tofauti za kupakua na kuthibitisha data ya mnyororo wa bloku. Kabla ya kuanzisha nodi, unapaswa kuamua ni mtandao gani na njia gani ya kusawazisha utumie. Mambo muhimu zaidi ya kuzingatia ni nafasi ya diski, na muda wa kusawazisha ambao mteja atahitaji. Zingatia nyaraka za mteja ili kubaini ni njia gani ya kusawazisha ndiyo chaguo-msingi. Ikiwa hiyo haikufai, chagua nyingine kulingana na kiwango cha usalama, data inayopatikana, na gharama. Mbali na algoriti ya usawazishaji, unaweza pia kuweka upunguzaji wa aina tofauti za data ya zamani. Upunguzaji huwezesha kufuta data iliyopitwa na wakati, yaani, kuondoa nodi za state trie ambazo hazifikiwi kutoka kwa bloku za hivi karibuni. + +Chaguo zingine za msingi za usanidi ni, k.m., kuchagua mtandao - Mtandao Mkuu au testnet, kuwezesha sehemu ya mwisho ya HTTP kwa RPC au WebSockets, n.k. Unaweza kupata vipengele na chaguo zote katika nyaraka za mteja. Usanidi mbalimbali wa mteja unaweza kuwekwa kwa kutekeleza mteja na bendera zinazolingana moja kwa moja kwenye CLI au faili ya usanidi. Kila mteja ni tofauti kidogo; tafadhali rejelea daima nyaraka zake rasmi au ukurasa wa usaidizi kwa maelezo juu ya chaguo za usanidi. + +Kwa madhumuni ya majaribio, unaweza kupendelea kuendesha mteja kwenye mojawapo ya mitandao ya testnet. [Angalia muhtasari wa mitandao inayotumika](/developers/docs/nodes-and-clients/#execution-clients). + +Mifano ya kuendesha wateja wa utekelezaji na usanidi wa msingi inaweza kupatikana katika sehemu inayofuata. + +#### Kuanzisha mteja wa utekelezaji {#starting-the-execution-client} + +Kabla ya kuanzisha programu ya mteja wa Ethereum, fanya ukaguzi wa mwisho ili kuhakikisha mazingira yako yako tayari. Kwa mfano, hakikisha: + +- Kuna nafasi ya kutosha ya diski ukizingatia mtandao uliochaguliwa na hali ya usawazishaji. +- Kumbukumbu na CPU hazijasimamishwa na programu zingine. +- Mfumo wa uendeshaji umesasishwa kwa toleo la hivi karibuni. +- Mfumo una saa na tarehe sahihi. +- Router na firewall yako vinakubali miunganisho kwenye bandari za kusikiliza. Kwa chaguo-msingi wateja wa Ethereum hutumia bandari ya msikilizaji (TCP) na bandari ya ugunduzi (UDP), zote mbili kwenye 30303 kwa chaguo-msingi. + +Endesha mteja wako kwenye testnet kwanza ili kusaidia kuhakikisha kila kitu kinafanya kazi ipasavyo. + +Unahitaji kutangaza mipangilio yoyote ya mteja ambayo si chaguomsingi mwanzoni. Unaweza kutumia bendera au faili ya usanidi kutangaza usanidi unaopendelea. Seti ya vipengele na sintaksia ya usanidi ya kila mteja hutofautiana. Angalia nyaraka za mteja wako kwa maelezo maalum. + +Wateja wa utekelezaji na makubaliano huwasiliana kupitia sehemu ya mwisho iliyothibitishwa iliyoainishwa katika [Engine API](https://github.com/ethereum/execution-apis/tree/main/src/engine). Ili kuunganisha na mteja wa makubaliano, mteja wa utekelezaji lazima atengeneze [`jwtsecret`](https://jwt.io/) kwenye njia inayojulikana. Kwa sababu za usalama na uthabiti, wateja wanapaswa kufanya kazi kwenye mashine moja, na wateja wote wawili lazima wajue njia hii kwani inatumiwa kuthibitisha muunganisho wa RPC wa ndani kati yao. Mteja wa utekelezaji lazima pia aainishe bandari ya kusikiliza kwa API zilizothibitishwa. + +Tokeni hii hutolewa kiotomatiki na programu ya mteja, lakini katika hali zingine, unaweza kuhitaji kuifanya mwenyewe. Unaweza kuitengeneza kwa kutumia [OpenSSL](https://www.openssl.org/): + +```sh +openssl rand -hex 32 > jwtsecret +``` + +#### Kuendesha mteja wa utekelezaji {#running-an-execution-client} + +Sehemu hii itakuongoza katika kuanzisha wateja wa utekelezaji. Inatumika tu kama mfano wa usanidi wa msingi, ambao utaanzisha mteja na mipangilio hii: + +- Inaainisha mtandao wa kuunganisha, Mtandao Mkuu katika mifano yetu + - Badala yake unaweza kuchagua [mojawapo ya testnet](/developers/docs/networks/) kwa majaribio ya awali ya usanidi wako +- Inafafanua saraka ya data, ambapo data zote zikiwemo za mnyororo wa bloku zitahifadhiwa + - Hakikisha unabadilisha njia na moja halisi, k.m., inayoelekeza kwenye hifadhi yako ya nje +- Huwezesha violessura vya mawasiliano na mteja + - Ikiwa ni pamoja na JSON-RPC na Engine API kwa mawasiliano na mteja wa makubaliano +- Inafafanua njia ya `jwtsecret` kwa API iliyothibitishwa + - Hakikisha unabadilisha njia ya mfano na moja halisi inayoweza kufikiwa na wateja, k.m., `/tmp/jwtsecret` + +Tafadhali kumbuka kuwa huu ni mfano wa msingi tu, mipangilio mingine yote itawekwa kwa chaguomsingi. Zingatia nyaraka za kila mteja ili kujifunza kuhusu maadili chaguomsingi, mipangilio, na vipengele. Kwa vipengele zaidi, kwa mfano kwa kuendesha wathibitishaji, ufuatiliaji, n.k., tafadhali rejelea nyaraka za mteja mahususi. + +> Kumbuka kuwa backslash `\` katika mifano ni kwa madhumuni ya uumbizaji tu; bendera za usanidi zinaweza kufafanuliwa katika mstari mmoja. + +##### Inaendesha Besu + +Mfano huu unaanzisha Besu kwenye Mtandao Mkuu, huhifadhi data ya mnyororo wa bloku katika umbizo la chaguomsingi kwenye `/data/ethereum`, huwezesha JSON-RPC na Engine RPC kwa kuunganisha mteja wa makubaliano. Engine API inathibitishwa na tokeni `jwtsecret` na miito kutoka `localhost` pekee ndiyo inaruhusiwa. + +```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 pia huja na chaguo la kizinduzi ambalo litauliza mfululizo wa maswali na kutengeneza faili ya usanidi. Endesha kizinduzi shirikishi kwa kutumia: + +```sh +besu --Xlauncher +``` + +[Nyaraka za Besu](https://besu.hyperledger.org/public-networks/get-started/start-node/) zina chaguo za ziada na maelezo ya usanidi. + +##### Inaendesha Erigon + +Mfano huu unaanzisha Erigon kwenye Mtandao Mkuu, huhifadhi data ya mnyororo wa bloku kwenye `/data/ethereum`, huwezesha JSON-RPC, hufafanua ni nafasi zipi za majina zinaruhusiwa na huwezesha uthibitishaji wa kuunganisha mteja wa makubaliano ambao umefafanuliwa na njia ya `jwtsecret`. + +```sh +erigon --chain mainnet \ + --datadir /data/ethereum \ + --http --http.api=engine,eth,web3,net \ + --authrpc.jwtsecret=/path/to/jwtsecret +``` + +Kwa chaguomsingi Erigon hufanya usawazishaji kamili na HDD ya 8GB ambayo itasababisha zaidi ya 2TB ya data ya kumbukumbu. Hakikisha `datadir` inaelekeza kwenye diski yenye nafasi ya kutosha au angalia bendera ya `--prune` ambayo inaweza kupunguza aina tofauti za data. Angalia `--help` ya Erigon ili kujifunza zaidi. + +##### Inaendesha Geth + +Mfano huu unaanzisha Geth kwenye Mtandao Mkuu, huhifadhi data ya mnyororo wa bloku kwenye `/data/ethereum`, huwezesha JSON-RPC na hufafanua ni nafasi zipi za majina zinaruhusiwa. Pia huwezesha uthibitishaji wa kuunganisha mteja wa makubaliano ambao unahitaji njia ya `jwtsecret` na pia chaguo linalofafanua ni miunganisho ipi inaruhusiwa, katika mfano wetu ni kutoka `localhost` pekee. + +```sh +geth --mainnet \ + --datadir "/data/ethereum" \ + --http --authrpc.addr localhost \ + --authrpc.vhosts="localhost" \ + --authrpc.port 8551 + --authrpc.jwtsecret=/path/to/jwtsecret +``` + +Angalia [nyaraka za chaguo zote za usanidi](https://geth.ethereum.org/docs/fundamentals/command-line-options) na ujifunze zaidi kuhusu [kuendesha Geth na mteja wa makubaliano](https://geth.ethereum.org/docs/getting-started/consensus-clients). + +##### Inaendesha Nethermind + +Nethermind hutoa [chaguo mbalimbali za usakinishaji](https://docs.nethermind.io/get-started/installing-nethermind). Kifurushi huja na faili mbalimbali za binary, ikiwa ni pamoja na Kizinduzi chenye usanidi wa kuongozwa, ambacho kitakusaidia kuunda usanidi kwa njia shirikishi. Vinginevyo, utapata Runner ambayo ni faili yenyewe inayoweza kuendeshwa na unaweza kuiendesha tu na bendera za usanidi. JSON-RPC huwashwa kwa chaguo-msingi. + +```sh +Nethermind.Runner --config mainnet \ + --datadir /data/ethereum \ + --JsonRpc.JwtSecretFile=/path/to/jwtsecret +``` + +Nyaraka za Nethermind hutoa [mwongozo kamili](https://docs.nethermind.io/get-started/running-node/) juu ya kuendesha Nethermind na mteja wa makubaliano. + +Mteja wa utekelezaji atanzisha kazi zake za msingi, sehemu za mwisho zilizochaguliwa, na kuanza kutafuta rika. Baada ya kugundua rika kwa mafanikio, mteja huanza usawazishaji. Mteja wa utekelezaji atasubiri muunganisho kutoka kwa mteja wa makubaliano. Data ya sasa ya mnyororo wa bloku itapatikana mara tu mteja atakaposawazishwa kwa mafanikio na hali ya sasa. + +##### Inaendesha Reth + +Mfano huu unaanzisha Reth kwenye Mtandao Mkuu, ukitumia eneo la data la chaguo-msingi. Huwezesha JSON-RPC na uthibitishaji wa Engine RPC kwa kuunganisha mteja wa makubaliano ambao umefafanuliwa na njia ya `jwtsecret`, na miito kutoka `localhost` pekee ndiyo inaruhusiwa. + +```sh +reth node \ + --authrpc.jwtsecret /path/to/jwtsecret \ + --authrpc.addr 127.0.0.1 \ + --authrpc.port 8551 +``` + +Angalia [Kusanidi Reth](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) ili kujifunza zaidi kuhusu saraka za data za chaguo-msingi. [Nyaraka za Reth](https://reth.rs/run/mainnet.html) zina chaguo za ziada na maelezo ya usanidi. + +#### Kuanzisha mteja wa makubaliano {#starting-the-consensus-client} + +Mteja wa makubaliano lazima aanzishwe na usanidi sahihi wa bandari ili kuanzisha muunganisho wa RPC wa ndani na mteja wa utekelezaji. Wateja wa makubaliano wanapaswa kuendeshwa na bandari ya mteja wa utekelezaji iliyo wazi kama hoja ya usanidi. + +Mteja wa makubaliano pia anahitaji njia ya `jwt-secret` ya mteja wa utekelezaji ili kuthibitisha muunganisho wa RPC kati yao. Sawa na mifano ya utekelezaji hapo juu, kila mteja wa makubaliano ana bendera ya usanidi ambayo inachukua njia ya faili ya tokeni ya jwt kama hoja. Hii lazima iendane na njia ya `jwtsecret` iliyotolewa kwa mteja wa utekelezaji. + +Ikiwa unapanga kuendesha mthibitishaji, hakikisha unaongeza bendera ya usanidi inayobainisha anwani ya Ethereum ya mpokeaji ada. Hapa ndipo zawadi za ether za mthibitishaji wako zinakusanywa. Kila mteja wa makubaliano ana chaguo, k.m., `--suggested-fee-recipient=0xabcd1`, ambalo huchukua anwani ya Ethereum kama hoja. + +Unapoanzisha Nodi ya Beacon kwenye testnet, unaweza kuokoa muda mwingi wa kusawazisha kwa kutumia sehemu ya mwisho ya umma kwa [Checkpoint sync](https://notes.ethereum.org/@launchpad/checkpoint-sync). + +#### Kuendesha mteja wa makubaliano {#running-a-consensus-client} + +##### Inaendesha Lighthouse + +Kabla ya kuendesha Lighthouse, jifunze zaidi jinsi ya kuisakinisha na kuisanidi katika [Lighthouse Book](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 +``` + +##### Inaendesha Lodestar + +Sakinisha programu ya Lodestar kwa kuikusanya au kupakua picha ya Docker. Jifunze zaidi katika [nyaraka](https://chainsafe.github.io/lodestar/) na [mwongozo kamili zaidi wa usanidi](https://hackmd.io/@philknows/rk5cDvKmK). + +```sh +lodestar beacon \ + --dataDir="/data/ethereum" \ + --network=mainnet \ + --eth1.enabled=true \ + --execution.urls="http://127.0.0.1:8551" \ + --jwt-secret="/path/to/jwtsecret" +``` + +##### Inaendesha Nimbus + +Nimbus huja na wateja wa makubaliano na wa utekelezaji. Inaweza kuendeshwa kwenye vifaa mbalimbali hata vyenye nguvu ndogo sana ya kompyuta. +Baada ya [kusakinisha vitegemezi na Nimbus yenyewe](https://nimbus.guide/quick-start.html), unaweza kuendesha mteja wake wa makubaliano: + +```sh +nimbus_beacon_node \ + --network=mainnet \ + --web3-url=http://127.0.0.1:8551 \ + --rest \ + --jwt-secret="/path/to/jwtsecret" +``` + +##### Inaendesha Prysm + +Prysm huja na hati ambayo inaruhusu usakinishaji rahisi wa kiotomatiki. Maelezo zaidi yanaweza kupatikana katika [nyaraka za Prysm](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). + +```sh +./prysm.sh beacon-chain \ + --mainnet \ + --datadir /data/ethereum \ + --execution-endpoint=http://localhost:8551 \ + --jwt-secret=/path/to/jwtsecret +``` + +##### Inaendesha Teku + +```sh +teku --network mainnet \ + --data-path "/data/ethereum" \ + --ee-endpoint http://localhost:8551 \ + --ee-jwt-secret-file "/path/to/jwtsecret" +``` + +Wakati mteja wa makubaliano anapounganisha na mteja wa utekelezaji kusoma mkataba wa amana na kutambua wathibitishaji, pia huunganisha na rika zingine za Nodi ya Beacon na kuanza kusawazisha nafasi za makubaliano kutoka mwanzo. Mara Nodi ya Beacon inapofikia epoch ya sasa, API ya Beacon inakuwa tayari kutumika kwa wathibitishaji wako. Jifunze zaidi kuhusu [API za Nodi ya Beacon](https://eth2docs.vercel.app/). + +### Kuongeza Wathibitishaji {#adding-validators} + +Mteja wa makubaliano hutumika kama Nodi ya Beacon kwa wathibitishaji kuunganisha. Kila mteja wa makubaliano ana programu yake ya mthibitishaji iliyoelezwa kwa undani katika nyaraka zake husika. + +Kuendesha mthibitishaji wako mwenyewe kunaruhusu [kusimamisha peke yako](/staking/solo/), njia yenye athari zaidi na isiyo na uaminifu ya kusaidia mtandao wa Ethereum. Hata hivyo, hii inahitaji amana ya ETH 32. Ili kuendesha mthibitishaji kwenye nodi yako mwenyewe kwa kiasi kidogo, bwawa la ugatuzi na waendeshaji wa nodi wasio na ruhusa, kama vile [Rocket Pool](https://rocketpool.net/node-operators), linaweza kukuvutia. + +Njia rahisi zaidi ya kuanza na kusimamisha na uzalishaji wa ufunguo wa mthibitishaji ni kutumia [Jukwaa la Uzinduzi la Kusimamisha la Hoodi Testnet](https://hoodi.launchpad.ethereum.org/), ambalo linakuruhusu kupima usanidi wako kwa [kuendesha nodi kwenye Hoodi](https://notes.ethereum.org/@launchpad/hoodi). Unapokuwa tayari kwa Mtandao Mkuu, unaweza kurudia hatua hizi ukitumia [Jukwaa la Uzinduzi la Kusimamisha la Mtandao Mkuu](https://launchpad.ethereum.org/). + +Angalia [ukurasa wa kusimamisha](/staking) kwa muhtasari kuhusu chaguo za kusimamisha. + +### Kutumia nodi {#using-the-node} + +Wateja wa utekelezaji hutoa [sehemu za mwisho za API za RPC](/developers/docs/apis/json-rpc/) ambazo unaweza kutumia kuwasilisha miamala, kuingiliana na au kupeleka mikataba-erevu kwenye mtandao wa Ethereum kwa njia mbalimbali: + +- Kuzipiga simu kwa mikono na itifaki inayofaa (k.m., kwa kutumia `curl`) +- Kuambatanisha koni iliyotolewa (k.m., `geth attach`) +- Kuzitekeleza katika programu kwa kutumia maktaba za web3, k.m., [web3.py](https://web3py.readthedocs.io/en/stable/overview.html#overview), [ethers](https://github.com/ethers-io/ethers.js/) + +Wateja tofauti wana utekelezaji tofauti wa sehemu za mwisho za RPC. Lakini kuna JSON-RPC ya kawaida ambayo unaweza kutumia na kila mteja. Kwa muhtasari [soma nyaraka za JSON-RPC](/developers/docs/apis/json-rpc/). Programu zinazohitaji habari kutoka kwa mtandao wa Ethereum zinaweza kutumia RPC hii. Kwa mfano, mkoba maarufu wa MetaMask unakuwezesha [kuunganisha kwenye sehemu yako ya mwisho ya RPC](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node) ambayo ina manufaa makubwa ya faragha na usalama. + +Wateja wote wa makubaliano huonyesha [API ya Beacon](https://ethereum.github.io/beacon-APIs) ambayo inaweza kutumika kuangalia hali ya mteja wa makubaliano au kupakua bloku na data ya makubaliano kwa kutuma maombi kwa kutumia zana kama vile [Curl](https://curl.se). Taarifa zaidi juu ya hili inaweza kupatikana katika nyaraka za kila mteja wa makubaliano. + +#### Kufikia RPC {#reaching-rpc} + +Bandari ya chaguo-msingi ya JSON-RPC ya mteja wa utekelezaji ni `8545` lakini unaweza kurekebisha bandari za sehemu za mwisho za ndani katika usanidi. Kwa chaguomsingi, kiolesura cha RPC kinapatikana tu kwenye localhost ya kompyuta yako. Ili kuifanya ipatikane kwa mbali, unaweza kutaka kuifungua kwa umma kwa kubadilisha anwani kuwa `0.0.0.0`. Hii itafanya ifikiwe kupitia mtandao wa ndani na anwani za IP za umma. Katika hali nyingi utahitaji pia kusanidi usambazaji wa bandari kwenye router yako. + +Fikia kufungua bandari kwa mtandao kwa tahadhari kwani hii itamruhusu mtu yeyote kwenye mtandao kudhibiti nodi yako. Wahusika hasidi wanaweza kufikia nodi yako ili kuharibu mfumo wako au kuiba fedha zako ikiwa unatumia mteja wako kama mkoba. + +Njia ya kuzunguka hii ni kuzuia mbinu hatari za RPC kurekebishwa. Kwa mfano, na Geth, unaweza kutangaza mbinu zinazoweza kurekebishwa na bendera: `--http.api web3,eth,txpool`. + +Ufikiaji wa kiolesura cha RPC unaweza kupanuliwa kupitia ukuzaji wa API za safu ya pembeni au programu za seva za wavuti, kama Nginx, na kuziunganisha na anwani na bandari ya ndani ya mteja wako. Kutumia safu ya kati kunaweza pia kuwapa wasanidi programu uwezo wa kusanidi cheti cha miunganisho salama ya `https` kwenye kiolesura cha RPC. + +Kuanzisha seva ya wavuti, proksi, au API ya nje ya Rest sio njia pekee ya kutoa ufikiaji wa sehemu ya mwisho ya RPC ya nodi yako. Njia nyingine ya kuhifadhi faragha ya kuanzisha sehemu ya mwisho inayopatikana hadharani ni kupangisha nodi kwenye huduma yako mwenyewe ya [Tor](https://www.torproject.org/) onion. Hii itakuwezesha kufikia RPC nje ya mtandao wako wa ndani bila anwani ya IP ya umma tuli au bandari zilizofunguliwa. Hata hivyo, kutumia usanidi huu kunaweza kuruhusu tu sehemu ya mwisho ya RPC kupatikana kupitia mtandao wa Tor ambao hauhimiliwi na programu zote na inaweza kusababisha matatizo ya muunganisho. + +Ili kufanya hivi, unapaswa kuunda [huduma yako ya onion](https://community.torproject.org/onion-services/). Angalia [nyaraka](https://community.torproject.org/onion-services/setup/) juu ya usanidi wa huduma ya onion ili upate yako mwenyewe. Unaweza kuielekeza kwenye seva ya wavuti na proksi kwenye bandari ya RPC au moja kwa moja kwenye RPC. + +Mwisho, na mojawapo ya njia maarufu zaidi za kutoa ufikiaji wa mitandao ya ndani ni kupitia muunganisho wa VPN. Kulingana na matumizi yako na idadi ya watumiaji wanaohitaji ufikiaji wa nodi yako, muunganisho salama wa VPN unaweza kuwa chaguo. [OpenVPN](https://openvpn.net/) ni SSL VPN yenye vipengele kamili inayotekeleza upanuzi salama wa mtandao wa safu ya OSI 2 au 3 kwa kutumia itifaki ya SSL/TLS ya kiwango cha tasnia, inasaidia mbinu rahisi za uthibitishaji wa mteja kulingana na vyeti, kadi janja, na/au vitambulisho vya jina la mtumiaji/nenosiri, na inaruhusu sera za udhibiti wa ufikiaji maalum za mtumiaji au kikundi kwa kutumia sheria za firewall zinazotumika kwenye kiolesura cha mtandao cha VPN. + +### Kuendesha nodi {#operating-the-node} + +Unapaswa kufuatilia nodi yako mara kwa mara ili kuhakikisha inafanya kazi ipasavyo. Unaweza kuhitaji kufanya matengenezo ya mara kwa mara. + +#### Kuweka nodi mtandaoni {#keeping-node-online} + +Nodi yako haihitaji kuwa mtandaoni kila wakati, lakini unapaswa kuiweka mtandaoni iwezekanavyo ili iendelee kusawazisha na mtandao. Unaweza kuizima ili kuiwasha upya, lakini kumbuka kwamba: + +- Kuzima kunaweza kuchukua dakika chache ikiwa hali ya hivi karibuni bado inaandikwa kwenye diski. +- Kuzima kwa lazima kunaweza kuharibu hifadhidata na kukuhitaji usawazishe upya nodi nzima. +- Mteja wako atatoka kwenye usawazishaji na mtandao na atahitaji kusawazisha upya unapoiwasha tena. Wakati nodi inaweza kuanza kusawazisha kutoka pale ilipozimwa mara ya mwisho, mchakato unaweza kuchukua muda kulingana na muda ambao imekuwa nje ya mtandao. + +_Hii haihusu nodi za wathibitishaji wa safu ya makubaliano._ Kuzima nodi yako kutaathiri huduma zote zinazoitegemea. Ikiwa unaendesha nodi kwa madhumuni ya _kusimamisha_ unapaswa kujaribu kupunguza muda wa kutofanya kazi iwezekanavyo. + +#### Kuunda huduma za mteja {#creating-client-services} + +Fikiria kuunda huduma ili kuendesha wateja wako kiotomatiki wakati wa kuanza. Kwa mfano, kwenye seva za Linux, ni vizuri kuunda huduma, k.m., na `systemd`, ambayo inatekeleza mteja na usanidi unaofaa, chini ya mtumiaji mwenye marupurupu machache na kuanza upya kiotomatiki. + +#### Kusasisha wateja {#updating-clients} + +Unahitaji kuweka programu yako ya mteja ikiwa imesasishwa na viraka vya hivi karibuni vya usalama, vipengele, na [EIPs](/eips/). Hasa kabla ya [uma ngumu](/ethereum-forks/), hakikisha unaendesha matoleo sahihi ya mteja. + +> Kabla ya masasisho muhimu ya mtandao, EF huchapisha chapisho kwenye [blogu](https://blog.ethereum.org) yake. Unaweza [kujisajili kwa matangazo haya](https://blog.ethereum.org/category/protocol#subscribe) ili kupata arifa kwenye barua pepe yako wakati nodi yako inahitaji sasisho. + +Kusasisha wateja ni rahisi sana. Kila mteja ana maagizo maalum katika nyaraka zake, lakini mchakato kwa ujumla ni kupakua toleo la hivi karibuni na kuanzisha upya mteja na faili mpya inayoweza kuendeshwa. Mteja anapaswa kuendelea kutoka pale alipoishia, lakini na masasisho yaliyotumika. + +Kila utekelezaji wa mteja una mfuatano wa toleo unaoweza kusomwa na binadamu unaotumika katika itifaki ya rika-kwa-rika lakini pia unapatikana kutoka kwa mstari wa amri. Mfuatano huu wa toleo unawawezesha watumiaji kuangalia kama wanaendesha toleo sahihi na huruhusu wachunguzi wa bloku na zana zingine za uchanganuzi zinazopenda kupima usambazaji wa wateja maalum kwenye mtandao. Tafadhali rejelea nyaraka za mteja binafsi kwa habari zaidi kuhusu mfuatano wa matoleo. + +#### Kuendesha huduma za ziada {#running-additional-services} + +Kuendesha nodi yako mwenyewe kunakuwezesha kutumia huduma zinazohitaji ufikiaji wa moja kwa moja kwenye RPC ya mteja wa Ethereum. Hizi ni huduma zilizojengwa juu ya Ethereum kama [suluhisho za safu ya 2](/developers/docs/scaling/#layer-2-scaling), backend kwa mikoba, wachunguzi wa bloku, zana za wasanidi programu na miundombinu mingine ya Ethereum. + +#### Kufuatilia nodi {#monitoring-the-node} + +Ili kufuatilia vizuri nodi yako, fikiria kukusanya vipimo. Wateja hutoa sehemu za mwisho za vipimo ili uweze kupata data kamili kuhusu nodi yako. Tumia zana kama vile [InfluxDB](https://www.influxdata.com/get-influxdb/) au [Prometheus](https://prometheus.io/) kuunda hifadhidata ambazo unaweza kuzigeuza kuwa taswira na chati katika programu kama [Grafana](https://grafana.com/). Kuna usanidi mwingi wa kutumia programu hii na dashibodi tofauti za Grafana kwako kuona nodi yako na mtandao kwa ujumla. Kwa mfano, angalia [mafunzo ya jinsi ya kufuatilia Geth](/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/). + +Kama sehemu ya ufuatiliaji wako, hakikisha unaangalia utendaji wa mashine yako. Wakati wa usawazishaji wa awali wa nodi yako, programu ya mteja inaweza kuwa nzito sana kwenye CPU na RAM. Mbali na Grafana, unaweza kutumia zana ambazo OS yako inatoa kama `htop` au `uptime` kufanya hivi. + +## Masomo zaidi {#further-reading} + +- [Miongozo ya Kusimamisha ya Ethereum](https://github.com/SomerEsat/ethereum-staking-guides) - _Somer Esat, husasishwa mara kwa mara_ +- [Mwongozo | Jinsi ya kusanidi mthibitishaji kwa ajili ya kusimamisha Ethereum kwenye mtandao mkuu](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet) _– CoinCashew, husasishwa mara kwa mara_ +- [Miongozo ya ETHStaker juu ya kuendesha wathibitishaji kwenye testnet](https://github.com/remyroy/ethstaker#guides) – _ETHStaker, husasishwa mara kwa mara_ +- [Sampuli ya programu ya AWS Blockchain Node Runner kwa Nodi za Ethereum](https://aws-samples.github.io/aws-blockchain-node-runners/docs/Blueprints/Ethereum) - _AWS, husasishwa mara kwa mara_ +- [Maswali Yanayoulizwa Mara kwa Mara ya Muungano kwa waendeshaji wa nodi](https://notes.ethereum.org/@launchpad/node-faq-merge) - _Julai 2022_ +- [Kuchambua mahitaji ya maunzi ili kuwa nodi kamili iliyothibitishwa ya Ethereum](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– Albert Palau, 24 Septemba 2018_ +- [Kuendesha Nodi Kamili za Ethereum: Mwongozo kwa Wenye Ari Kidogo](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, 7 Novemba 2019_ +- [Kuendesha Nodi ya Hyperledger Besu kwenye Mtandao Mkuu wa Ethereum: Faida, Mahitaji, na Usanidi](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/) _– Felipe Faraggi, 7 Mei 2020_ +- [Kupeleka Mteja wa Nethermind Ethereum na Mrundikano wa Ufuatiliaji](https://medium.com/nethermind-eth/deploying-nethermind-ethereum-client-with-monitoring-stack-55ce1622edbd) _– Nethermind.eth, 8 Julai 2020_ + +## Mada zinazohusiana {#related-topics} + +- [Nodi na wateja](/developers/docs/nodes-and-clients/) +- [Bloku](/developers/docs/blocks/) +- [Mitandao](/developers/docs/networks/) diff --git a/public/content/translations/sw/developers/docs/oracles/index.md b/public/content/translations/sw/developers/docs/oracles/index.md new file mode 100644 index 00000000000..2697357eaab --- /dev/null +++ b/public/content/translations/sw/developers/docs/oracles/index.md @@ -0,0 +1,433 @@ +--- +title: Maneno +description: Vyanzo vya data vya nje hutoa mikataba mahiri ya Ethereum na ufikiaji wa data ya ulimwengu halisi, kufungua kesi nyingi za utumiaji na thamani kubwa kwa watumiaji. +lang: sw +--- + +Chabzo cha nje cha data ni programu zinazozalisha milisho ya data ambayo hufanya vyanzo vya data vya offchain kupatikana kwa blockchain kwa mikataba mahiri. Hii ni muhimu kwa sababu mikataba mahiri ya msingi wa Ethereum haiwezi, kwa chaguomsingi, kufikia maelezo yaliyohifadhiwa nje ya mtandao wa kiambajengo. + +Kutoa kandarasi mahiri uwezo wa kutekeleza kwa kutumia data ya nje ya mnyororo huongeza matumizi na thamani ya programu zilizotawanywa. Kwa mfano, masoko ya utabiri wa ndani ya mnyororo hutegemea maneno ili kutoa taarifa kuhusu matokeo ambayo hutumia kuthibitisha utabiri wa mtumiaji. Tuseme Alice anabeti ETH 20 juu ya nani atakuwa U.S. ajaye. Rais. Katika hali hiyo, dapp ya soko la ubashiri inahitaji maandishi ili kuthibitisha matokeo ya uchaguzi na kubaini kama Alice anastahiki malipo. + +## Mahitaji ya awali {#prerequisites} + +Ukurasa huu unadhani msomaji anafahamu misingi ya Ethereum, ikiwa ni pamoja na [nodi](/developers/docs/nodes-and-clients/), [mbinu za makubaliano](/developers/docs/consensus-mechanisms/), na [EVM](/developers/docs/evm/). Unapaswa pia kuwa na ufahamu mzuri wa [mikataba mahiri](/developers/docs/smart-contracts/) na [muundo wa mikataba mahiri](/developers/docs/smart-contracts/anatomy/), hasa [matukio](/glossary/#events). + +## Oracle ya mnyororo wa bloku ni nini? {#what-is-a-blockchain-oracle} + +Oracles ni programu zinazotoa, kuthibitisha, na kusambaza taarifa za nje (yaani, taarifa zilizohifadhiwa nje ya mnyororo) kwa mikataba mahiri inayoendeshwa kwenye mnyororo wa bloku. Kando na "kuvuta" data ya nje ya mnyororo na kuitangaza kwenye Ethereum, chanzo cha data cha nje pia kinaweza "kusukuma" habari kutoka kwa blockchain hadi mifumo ya nje, kwa mfano, kufungua kufuli mahiri mara tu mtumiaji anapotuma ada kupitia shughuli ya Ethereum. + +Bila oracle, mkataba mahiri ungekuwa na data ya kwenye mnyororo pekee. + +Maneno hutofautiana kulingana na chanzo cha data (chanzo kimoja au vingi), miundo ya uaminifu (iliyowekwa kati au iliyogatuliwa), na usanifu wa mfumo (kusoma mara moja, kuchapisha-kujisajili na kujibu ombi). Tunaweza pia kutofautisha kati ya hotuba kulingana na ikiwa zinapata data ya nje kwa ajili ya matumizi ya kandarasi za ndani ya mnyororo(neno za pembejeo), kutuma taarifa kutoka kwa kiambajengo hadi kwa programu za nje ya mnyororo (neno za pato), au kutekeleza majukumu ya kimahesabu nje ya mnyororo (neno za tarakilishi). + +## Kwa nini mikataba mahiri inahitaji oracles? {#why-do-smart-contracts-need-oracles} + +Wasanidi programu wengi huona mikataba mahiri kama msimbo unaoendeshwa kwenye anwani maalum kwenye mnyororo wa bloku. Hata hivyo, mtazamo [mpana zaidi wa mikataba mahiri](/smart-contracts/) ni kwamba ni programu za kompyuta zinazojitekeleza zenye uwezo wa kutekeleza makubaliano kati ya pande mbalimbali pindi masharti maalum yanapotimizwa - ndiyo maana ya neno “mikataba mahiri.” + +Lakini kutumia mikataba mahiri kutekeleza makubaliano kati ya watu si jambo la moja kwa moja, ikizingatiwa kwamba Ethereum ni ya kuamua. [Mfumo wa kubainisha](https://en.wikipedia.org/wiki/Deterministic_algorithm) ni ule ambao daima hutoa matokeo sawa kwa kupewa hali ya awali na ingizo fulani, ikimaanisha hakuna nasibu au tofauti katika mchakato wa kukokotoa matokeo kutoka kwa ingizo. + +Ili kufikia utekelezaji wa kubainisha, mnyororo wa bloku huweka kikomo nodi kufikia makubaliano juu ya maswali rahisi ya binary (kweli/sivyo) kwa kutumia data _pekee_ iliyohifadhiwa kwenye mnyororo wa bloku wenyewe. Mifano ya maswali kama hayo ni pamoja na: + +- "Je, mmiliki wa akaunti (aliyetambuliwa kwa ufunguo wa umma) alitia saini shughuli hii kwa ufunguo wa faragha uliooanishwa?" +- “Je, akaunti hii ina fedha za kutosha kulipia muamala?” +- “Je, muamala huu ni halali katika muktadha wa mkataba huu mahiri?”, n.k. + +Ikiwa mnyororo wa bloku ungepokea taarifa kutoka vyanzo vya nje (yaani, kutoka ulimwengu halisi), uamuzi haungewezekana kufikiwa, na kuzuia nodi kukubaliana juu ya uhalali wa mabadiliko kwenye hali ya mnyororo wa bloku. Chukua kwa mfano mkataba mahiri ambao hutekeleza shughuli kulingana na kiwango cha ubadilishaji cha ETH-USD kilichopatikana kutoka kwa API ya bei ya kawaida. Idadi hii ina uwezekano wa kubadilika mara kwa mara (bila kutaja kuwa API inaweza kuacha kutumika au kudukuliwa), ikimaanisha kwamba nodi zinazotekeleza msimbo sawa wa mkataba zinaweza kufikia matokeo tofauti. + +Kwa kiambajeng cha umma kama Ethereum, iliyo na maelfu ya nodi kote ulimwenguni kuchakata miamala, uamuzi ni muhimu. Bila mamlaka kuu inayotumika kama chanzo cha ukweli, nodi zinahitaji mbinu za kuwasili katika hali sawa baada ya kutumia shughuli sawa. Kesi ambapo nodi A hutekeleza msimbo wa mkataba mahiri na kupata "3" kama matokeo, huku nodi B ikipata "7" baada ya kufanya shughuli hiyo hiyo inaweza kusababisha makubaliano kuvunjika na kuondoa thamani ya Ethereum kama jukwaa la kompyuta lililotawanywa. + +Hali hii pia inaangazia tatizo la kubuni viambajengo ili kuvuta taarifa kutoka kwa vyanzo vya nje. Chanzo cha data cha nje, hata hivyo, hutatua tatizo hili kwa kuchukua maelezo kutoka kwa vyanzo vya offchain na kuyahifadhi kwenye kiambajengo ili mkataba mahiri zitumike. Kwa kuwa maelezo yaliyohifadhiwa kwenye mnyororo hayabadiliki na yanapatikana kwa umma, nodi za Ethereum zinaweza kutumia kwa usalama data ya chumba kilicholetwa nje ya mnyororo ili kukokotoa mabadiliko ya hali bila kuvunja makubaliano. + +Ili kufanya hivyo, chumba cha ndani kwa kawaida huundwa na kandarasi mahiri inayoendesha mnyororo na baadhi ya vipengele vya nje ya mnyororo. Mkataba wa ndani ya mnyororo hupokea maombi ya data kutoka kwa mikataba mingine mahiri, ambayo hupitishwa kwa sehemu ya nje ya mnyororo(inayoitwa nodi ya chanzo cha nje). Nodi hii ya chumba cha ndani inaweza kuuliza vyanzo vya data kwa kutumia violesura vya utayarishaji wa programu (API), kwa mfano na kutuma miamala ili kuhifadhi data iliyoombwa kwenye hifadhi ya mkataba mahiri. + +Kimsingi, chumba cha ndani cha blockchain hufunga pengo la habari kati ya kiamabjengo na mazingira ya nje, na kuunda "mkataba wa mahiri wa mseto". Mkataba wa mahiri wa mseto ni ule unaofanya kazi kulingana na mseto wa msimbo wa mkataba wa onchain na miundombinu ya ndani ya mnyororo. Masoko ya utabiri yaliyogatuliwa ni mfano bora wa mikataba mahiri ya mseto. Mifano mingine inaweza kujumuisha mikataba mahiri ya bima ya mazao ambayo hulipa wakati seti ya maneno hubaini kuwa matukio fulani ya hali ya hewa yamefanyika. + +## Tatizo la oracle ni nini? {#the-oracle-problem} + +Oracles hutatua tatizo muhimu, lakini pia huleta matatizo fulani, k.m.,: + +- Je, tunawezaje kuthibitisha kuwa maelezo yaliyodungwa yalitolewa kutoka kwa chanzo sahihi au hayajachezewa? + +- Tunahakikishaje kuwa data hii inapatikana kila wakati na inasasishwa mara kwa mara? + +Kinachojulikana kama "tatizo la ombi" linaonyesha maswala ambayo huja kwa kutumia maneno ya kiambajengo kutuma maoni kwa mkataba mahiri. Data kutoka kwa oracle lazima iwe sahihi ili mkataba mahiri utekelezwe ipasavyo. Zaidi ya hayo, kulazimika ‘kuamini’ waendeshaji mazungumzo kutoa taarifa sahihi kunadhoofisha kipengele cha 'kutoaminika' cha mikataba mahiri. + +Nadharia tofauti hutoa suluhu tofauti kwa tatizo la oracle, ambayo tutachunguza baadaye. Oracles kwa kawaida hutathminiwa kulingana na jinsi wanavyoweza kushughulikia changamoto zifuatazo: + +1. **Usahihi**: Oracle haipaswi kusababisha mikataba mahiri kuanzisha mabadiliko ya hali kulingana na data batili ya nje ya mnyororo. Oracle lazima ihakikishe _uhalisi_ na _uadilifu_ wa data. Uhalisi unamaanisha data ilipatikana kutoka chanzo sahihi, huku uadilifu ukimaanisha data ilibaki bila kubadilika (yaani, haikubadilishwa) kabla ya kutumwa kwenye mnyororo. + +2. **Upatikanaji**: Oracle haipaswi kuchelewesha au kuzuia mikataba mahiri kutekeleza vitendo na kuanzisha mabadiliko ya hali. Hii inamaanisha kuwa data kutoka kwa oracle lazima _ipatikane unapoomba_ bila kukatizwa. + +3. **Utangamano wa motisha**: Oracle inapaswa kuhamasisha watoa data wa nje ya mnyororo kuwasilisha taarifa sahihi kwa mikataba mahiri. Utangamano wa motisha unahusisha _uwezo wa kuhusishwa_ na _uwajibikaji_. Uwezo wa kuhusishwa huruhusu kuunganisha sehemu ya taarifa ya nje na mtoa huduma wake, ilhali uwajibikaji huwaunganisha watoa huduma wa data na taarifa wanazotoa, ili waweze kuzawadiwa au kuadhibiwa kulingana na ubora wa taarifa inayotolewa. + +## Huduma ya oracle ya mnyororo wa bloku hufanyaje kazi? {#how-does-a-blockchain-oracle-service-work} + +### Watumiaji {#users} + +Watumiaji ni vyombo (yaani, mikataba mahiri) vinavyohitaji taarifa za nje ya mnyororo wa bloku ili kukamilisha vitendo maalum. Mtiririko wa kazi wa msingi wa huduma ya oracle huanza na mtumiaji kutuma ombi la data kwa mkataba wa oracle. Maombi ya data kwa kawaida yatajibu baadhi au maswali yote yafuatayo: + +1. Ni vyanzo gani ambavyo nodi za nje ya mnyororo zinaweza kushauriana kwa taarifa zilizoombwa? + +2. Jinsi gani waandishi wa habari huchakata taarifa kutoka vyanzo vya data na kutoa pointi za data muhimu? + +3. Ni nodi ngapi za oracle zinaweza kushiriki katika kupata data? + +4. Tofauti katika ripoti za oracle zishughulikiwe vipi? + +5. Ni mbinu gani inapaswa kutekelezwa katika kuchuja mawasilisho na kujumlisha ripoti katika thamani moja? + +### Mkataba wa Oracle {#oracle-contract} + +Mkataba wa oracle ni sehemu ya kwenye mnyororo kwa ajili ya huduma ya oracle. Husikiliza maombi ya data kutoka kwa mikataba mingine, hupeleka maswali ya data kwa nodi za oracle, na kutangaza data iliyorejeshwa kwa mikataba ya mteja. Mkataba huu unaweza pia kufanya hesabu fulani kwenye pointi za data zilizorejeshwa ili kutoa thamani ya jumla ya kutuma kwa mkataba unaoomba. + +Mkataba wa oracle hufichua baadhi ya vipengele ambavyo mikataba ya mteja huita wakati wa kutuma ombi la data. Baada ya kupokea swali jipya, mkataba mahiri utatoa [tukio la kumbukumbu](/developers/docs/smart-contracts/anatomy/#events-and-logs) na maelezo ya ombi la data. Hii huarifu nodi za nje ya mnyororo zilizojisajili kwenye kumbukumbu (kawaida kwa kutumia kitu kama amri ya JSON-RPC `eth_subscribe`), ambao huendelea kupata data iliyobainishwa katika tukio la kumbukumbu. + +Hapo chini kuna [mfano wa mkataba wa oracle](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) na Pedro Costa. Hii ni huduma rahisi ya oracle ambayo inaweza kuuliza API za nje ya mnyororo kwa ombi la mikataba mingine mahiri na kuhifadhi taarifa zilizoombwa kwenye mnyororo wa bloku: + +```solidity +pragma solidity >=0.4.21 <0.6.0; + +contract Oracle { + Request[] requests; // orodha ya maombi yaliyotumwa kwa mkataba + uint currentId = 0; // kuongeza kitambulisho cha ombi + uint minQuorum = 2; // idadi ya chini ya majibu ya kupokea kabla ya kutangaza matokeo ya mwisho + uint totalOracleCount = 3; // Hesabu ya oracle iliyosimbikwa + + // inafafanua ombi la jumla la api + struct Request { + uint id; // kitambulisho cha ombi + string urlToQuery; // URL ya API + string attributeToFetch; // sifa ya json (ufunguo) ya kupata katika jibu + string agreedValue; // thamani kutoka kwa ufunguo + mapping(uint => string) answers; // majibu yaliyotolewa na oracles + mapping(address => uint) quorum; // oracles ambazo zitauliza jibu (1=oracle haijapiga kura, 2=oracle imepiga kura) + } + + // tukio linaloanzisha oracle nje ya mnyororo wa bloku + event NewRequest ( + uint id, + string urlToQuery, + string attributeToFetch + ); + + // huanzishwa kunapokuwa na makubaliano juu ya matokeo ya mwisho + 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]; + + // Anwani za oracles zilizosimbikwa + r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1; + r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1; + r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1; + + // anzisha tukio litakalogunduliwa na oracle nje ya mnyororo wa bloku + emit NewRequest ( + currentId, + _urlToQuery, + _attributeToFetch + ); + + // ongeza kitambulisho cha ombi + currentId++; + } + + // huitwa na oracle kurekodi jibu lake + function updateRequest ( + uint _id, + string memory _valueRetrieved + ) public { + + Request storage currRequest = requests[_id]; + + // angalia kama oracle iko kwenye orodha ya oracles zinazoaminika + // na kama oracle haijapiga kura bado + if(currRequest.quorum[address(msg.sender)] == 1){ + + // kuashiria kuwa anwani hii imepiga kura + currRequest.quorum[msg.sender] = 2; + + // pitia "safu" ya majibu hadi nafasi iwe huru na uhifadhi thamani iliyopatikana + uint tmpI = 0; + bool found = false; + while(!found) { + // tafuta nafasi ya kwanza tupu + if(bytes(currRequest.answers[tmpI]).length == 0){ + found = true; + currRequest.answers[tmpI] = _valueRetrieved; + } + tmpI++; + } + + uint currentQuorum = 0; + + // pitia orodha ya oracle na uangalie ikiwa oracles za kutosha (akidi ya chini) + // wamepiga kura jibu sawa na la sasa + 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 + ); + } + } + } + } + } +} +``` + +### Nodi za Oracle {#oracle-nodes} + +Nodi ya oracle ni sehemu ya nje ya mnyororo ya huduma ya oracle. Hutoa taarifa kutoka vyanzo vya nje, kama vile API zilizopangishwa kwenye seva za watu wengine, na kuiweka kwenye mnyororo kwa matumizi ya mikataba mahiri. Nodi za Oracle husikiliza matukio kutoka kwa mkataba wa oracle wa kwenye mnyororo na kuendelea kukamilisha kazi iliyoelezwa kwenye kumbukumbu. + +Kazi ya kawaida kwa nodi za oracle ni kutuma ombi la [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp) kwa huduma ya API, kuchanganua jibu ili kutoa data husika, kuiweka katika umbizo linaloweza kusomeka na blockchain, na kuituma kwenye mnyororo kwa kuijumuisha katika muamala kwa mkataba wa oracle. Nodi ya oracle inaweza pia kuhitajika kuthibitisha uhalali na uadilifu wa taarifa iliyowasilishwa kwa kutumia “uthibitisho wa uhalisi”, ambao tutauchunguza baadaye. + +Oracles za kukokotoa pia hutegemea nodi za nje ya mnyororo kutekeleza kazi za kukokotoa ambazo hazingewezekana kutekeleza kwenye mnyororo, kutokana na gharama za gesi na vikomo vya ukubwa wa bloku. Kwa mfano, nodi ya chumba cha ndani inaweza kuwa na jukumu la kuzalisha takwimu isiyo ya kawaida (k.m., kwa michezo ya kiambajengo). + +## Miundo ya usanifu wa Oracle {#oracle-design-patterns} + +Oracles huja katika aina tofauti, ikiwa ni pamoja na _usomaji-wa-papo-hapo_, _uchapishaji-usajili_, na _ombi-jibu_, huku mbili za mwisho zikiwa maarufu zaidi miongoni mwa mikataba mahiri ya Ethereum. Hapa tunaelezea kwa ufupi mifumo ya uchapishaji-usajili na ombi-jibu. + +### Oracles za uchapishaji-usajili {#publish-subscribe-oracles} + +Aina hii ya ora hufichua "mlisho wa data" ambao mikataba mingine inaweza kusoma mara kwa mara ili kupata taarifa. Data katika kesi hii inatarajiwa kubadilika mara kwa mara, kwa hivyo ni lazima mikataba ya mteja isikilize masasisho ya data iliyo kwenye hifadhi ya chumba cha ndani. Mfano ni oracle inayotoa taarifa za hivi punde za bei ya ETH-USD kwa watumiaji. + +### Oracles za ombi-jibu {#request-response-oracles} + +Usanidi wa jibu la ombi huruhusu kandarasi ya mteja kuomba data kiholela isipokuwa ile iliyotolewa na ombi la uchapishaji wa kujisajili. Maagizo ya majibu ya ombi ni bora wakati mkusanyiko wa data ni mkubwa mno kuhifadhiwa kwenye hifadhi ya mkataba mahiri, na/au watumiaji watahitaji tu sehemu ndogo ya data wakati wowote. + +Ingawa ni ngumu zaidi kuliko miundo ya kujiandikisha kwa uchapishaji, maneno ya ombi majibu kimsingi ndiyo tuliyoelezea katika sehemu iliyotangulia. Chanzo cha data cha nje itakuwa na sehemu ya ndani ya mnyororo ambayo inapokea ombi la data na kuipitisha kwa nodi ya nje ya mnyororo kwa usindikaji. + +Watumiaji wanaoanzisha hoja za data lazima walipe gharama ya kurejesha maelezo kutoka kwa chanzo cha nje ya mnyororo. Watumiaji wanaoanzisha hoja za data lazima walipe gharama ya kurejesha maelezo kutoka kwa chanzo cha nje ya mnyororo. + +## Oracles za kati dhidi ya zilizogatuliwa {#types-of-oracles} + +### Oracles za kati {#centralized-oracles} + +Sehemu kuu ya ndani inadhibitiwa na huluki moja inayohusika na kukusanya maelezo ya nje ya mnyororo na kusasisha data ya mkataba wa chumba cha ndani kama ilivyoombwa. Oracles za kati ni bora kwa vile zinategemea chanzo kimoja cha ukweli. Zinaweza kufanya kazi vyema zaidi katika hali ambapo hifadhidata za wamiliki zinachapishwa moja kwa moja na mmiliki kwa saini inayokubaliwa na wengi. Hata hivyo, huleta hasara pia: + +#### Dhamana za chini za usahihi {#low-correctness-guarantees} + +Ukiwa na oracles za kati, hakuna njia ya kuthibitisha ikiwa taarifa iliyotolewa ni sahihi au la. Hata watoa huduma "wanaoaminika" wanaweza kuharibika au kudukuliwa. Ikiwa oracle itaharibika, mikataba mahiri itatekelezwa kulingana na data mbovu. + +#### Upatikanaji duni {#poor-availability} + +Maneno ya kati hayana hakikisho ya kufanya data ya nje ya mtandao ipatikane kwa mikataba mingine mahiri kila wakati. Iwapo mtoa huduma ataamua kuzima huduma au mdukuzi anateka sehemu ya chanzo cha nje ya mnyororo, mkataba wako mahiri uko katika hatari ya shambulio la kunyimwa huduma (DoS). + +#### Utangamano duni wa motisha {#poor-incentive-compatibility} + +Maandishi ya kati mara nyingi huwa na vivutio vilivyoundwa vibaya au kutokuwepo kwa mtoa data kutuma taarifa sahihi/ambayo haijabadilishwa. Kulipa oracle kwa usahihi hakuhakikishi uaminifu. Tatizo hili linakuwa kubwa zaidi kadiri kiasi cha thamani kinachodhibitiwa na mikataba mahiri kinavyoongezeka. + +### Oracles zilizogatuliwa {#decentralized-oracles} + +Maneno yaliyogatuliwa yameundwa ili kushinda mapungufu ya hotuba kuu kwa kuondoa alama moja za kutofaulu. Huduma ya hotuba iliyogatuliwa hujumuisha washiriki wengi katika mtandao wa kati-ka-rika ambao huunda makubaliano kuhusu data ya offchain kabla ya kuituma kwa mkataba mahiri. + +Sehemu ya hotuba iliyogatuliwa inapaswa (ikiwezekana) kuwa isiyo na ruhusa, isiyoaminika, na isiyo na usimamizi wa chama kikuu; kwa kweli, ugatuaji kati ya hotuba ni juu ya wigo. Kuna mitandao ya siri iliyogatuliwa ambapo mtu yeyote anaweza kushiriki, lakini akiwa na "mmiliki" anayeidhinisha na kuondoa nodi kulingana na utendakazi wa kihistoria. Mitandao ya siri iliyotawanywa kikamilifu pia ipo: kwa kawaida hii huendeshwa kama misururu ya pekee na imefafanua mbinu za maafikiano za kuratibu nodi na kuadhibu tabia mbaya. + +Kutumia oracles zilizogatuliwa huja na manufaa yafuatayo: + +### Dhamana za juu za usahihi {#high-correctness-guarantees} + +Oracles zilizogatuliwa hujaribu kufikia usahihi wa data kwa kutumia mbinu tofauti. Hii ni pamoja na kutumia uthibitisho unaothibitisha uhalisi na uadilifu wa taarifa iliyorejeshwa na kuhitaji huluki nyingi kukubaliana kwa pamoja juu ya uhalali wa data ya nje ya mnyororo. + +#### Uthibitisho wa uhalisi {#authenticity-proofs} + +Uthibitisho wa uhalisi ni mbinu za kriptografia ambazo huwezesha uthibitishaji huru wa maelezo yaliyopatikana kutoka kwa vyanzo vya nje. Uthibitisho huu unaweza kuthibitisha chanzo cha habari na kugundua mabadiliko yanayoweza kutokea kwa data baada ya kurejesha. + +Mifano ya uthibitisho wa uhalisi ni pamoja na: + +**Uthibitisho wa Usalama wa Tabaka la Usafiri (TLS)**: Nodi za Oracle mara nyingi hupata data kutoka vyanzo vya nje kwa kutumia muunganisho salama wa HTTP kulingana na itifaki ya Usalama wa Tabaka la Usafiri (TLS). Baadhi ya hotuba zilizogatuliwa hutumia uthibitisho wa uhalisi ili kuthibitisha vipindi vya TLS (yaani, kuthibitisha ubadilishanaji wa taarifa kati ya nodi na seva mahususi) na kuthibitisha kuwa maudhui ya kipindi hayakubadilishwa. + +**Uthibitisho wa Mazingira ya Utekelezaji Yanayoaminika (TEE)**: [Mazingira ya utekelezaji yanayoaminika](https://en.wikipedia.org/wiki/Trusted_execution_environment) (TEE) ni mazingira ya ukokotoaji yaliyowekwa kwenye sandbox ambayo yametengwa na michakato ya uendeshaji ya mfumo wake mkuu. TEE huhakikisha kwamba msimbo wowote wa programu au data iliyohifadhiwa/inayotumiwa katika mazingira ya ukokotoaji huhifadhi uadilifu, usiri, na kutobadilika. Watumiaji wanaweza pia kutoa uthibitisho ili kuthibitisha kuwa kielelezo cha programu kinaendeshwa ndani ya mazingira ya utekelezaji yanayoaminika. + +Aina fulani za oracles zilizogatuliwa zinahitaji waendeshaji wa nodi za oracle kutoa uthibitisho wa TEE. Hii inathibitisha kwa mtumiaji kwamba mwendeshaji wa nodi anaendesha kielelezo cha mteja wa oracle katika mazingira ya utekelezaji yanayoaminika. TEE huzuia michakato ya nje kubadilisha au kusoma msimbo na data ya programu, kwa hiyo, uthibitisho huo unathibitisha kwamba nodi ya oracle imehifadhi taarifa hizo bila kubadilika na kwa siri. + +#### Uthibitishaji wa taarifa kulingana na makubaliano {#consensus-based-validation-of-information} + +Oracles za kati hutegemea chanzo kimoja cha ukweli wakati wa kutoa data kwa mikataba mahiri, jambo ambalo huleta uwezekano wa kuchapisha taarifa zisizo sahihi. Oracles zilizogatuliwa hutatua tatizo hili kwa kutegemea nodi nyingi za oracle kuuliza taarifa za nje ya mnyororo. Kwa kulinganisha data kutoka vyanzo vingi, oracles zilizogatuliwa hupunguza hatari ya kupitisha taarifa batili kwa mikataba ya kwenye mnyororo. + +Hata hivyo, oracles zilizogatuliwa lazima zishughulikie tofauti katika taarifa zilizopatikana kutoka vyanzo vingi vya nje ya mnyororo. Ili kupunguza tofauti katika taarifa na kuhakikisha data inayopitishwa kwa mkataba wa oracle inaonyesha maoni ya pamoja ya nodi za oracle, oracles zilizogatuliwa hutumia mifumo ifuatayo: + +##### Upigaji kura/uwekaji hisa juu ya usahihi wa data + +Baadhi ya mitandao ya oracle iliyogatuliwa inahitaji washiriki kupiga kura au kuweka hisa juu ya usahihi wa majibu kwa maswali ya data (k.m., "Nani alishinda uchaguzi wa Marekani wa 2020?") kwa kutumia tokeni asili ya mtandao. Itifaki ya ujumlishaji kisha hujumlisha kura na hisa na kuchukua jibu linaloungwa mkono na walio wengi kama lile halali. + +Nodi ambazo majibu yake yanatofautiana na jibu la wengi huadhibiwa kwa kugawiwa tokeni zao kwa wengine wanaotoa thamani sahihi zaidi. Kulazimisha nodi kutoa dhamana kabla ya kutoa data huhamasisha majibu ya uaminifu kwani wanachukuliwa kuwa watendaji wa kiuchumi wenye busara wanaokusudia kuongeza mapato. + +Uwekaji hisa/upigaji kura pia hulinda oracles zilizogatuliwa dhidi ya [mashambulizi ya Sybil](/glossary/#sybil-attack) ambapo watendaji hasidi huunda vitambulisho vingi ili kudanganya mfumo wa makubaliano. Hata hivyo, uwekaji hisa hauwezi kuzuia “utegaji” (nodi za oracle kunakili taarifa kutoka kwa wengine) na “uthibitishaji wa uvivu” (nodi za oracle kufuata walio wengi bila kuthibitisha taarifa wenyewe). + +##### Mifumo ya Schelling point + +[Schelling point](https://en.wikipedia.org/wiki/Focal_point_\(game_theory\)) ni dhana ya nadharia ya mchezo inayodhani kuwa vyombo vingi daima vitachagua suluhisho la kawaida kwa tatizo bila mawasiliano yoyote. Mifumo ya Schelling-point mara nyingi hutumiwa katika mitandao ya oracle iliyogatuliwa ili kuwezesha nodi kufikia makubaliano juu ya majibu kwa maombi ya data. + +Wazo la mapema kwa hili lilikuwa [SchellingCoin](https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/), mlisho wa data uliopendekezwa ambapo washiriki huwasilisha majibu kwa maswali ya "scalar" (maswali ambayo majibu yake yanaelezewa na ukubwa, k.m., "bei ya ETH ni nini?"), pamoja na amana. Watumiaji wanaotoa thamani kati ya [percentile](https://en.wikipedia.org/wiki/Percentile) ya 25 na 75 wanazawadiwa, huku wale ambao thamani zao zinatofautiana sana na thamani ya wastani wanaadhibiwa. + +Ingawa SchellingCoin haipo leo, idadi ya oracles zilizogatuliwa—hasa [Oracles za Maker Protocol](https://docs.makerdao.com/smart-contract-modules/oracle-module)—hutumia mfumo wa schelling-point ili kuboresha usahihi wa data ya oracle. Kila Oracle ya Maker ina mtandao wa P2P wa nje ya mnyororo wa nodi ("relayers" na "feeds") ambao huwasilisha bei za soko kwa mali za dhamana na mkataba wa kwenye mnyororo wa “Medianizer” unaokokotoa wastani wa thamani zote zilizotolewa. Mara tu kipindi maalum cha kucheleweshwa kinapoisha, thamani hii ya wastani inakuwa bei mpya ya kumbukumbu ya mali inayohusishwa. + +Mifano mingine ya oracles zinazotumia mifumo ya Schelling point ni pamoja na [Chainlink Offchain Reporting](https://docs.chain.link/architecture-overview/off-chain-reporting) na [Witnet](https://witnet.io/). Katika mifumo yote miwili, majibu kutoka kwa nodi za oracle katika mtandao wa rika-kwa-rika hujumlishwa kuwa thamani moja ya jumla, kama vile wastani au wastani. Nodi hutuzwa au kuadhibiwa kulingana na kiwango ambacho majibu yao yanalingana au kupotoka kutoka kwa jumla ya thamani. + +Taratibu za sehemu za Schelling zinavutia kwa sababu zinapunguza alama ya onchain (muamala mmoja tu ndio unahitaji kutumwa) huku ukihakikisha utawanyaji. La mwisho linawezekana kwa sababu nodi lazima ziondoke kwenye orodha ya majibu yaliyowasilishwa kabla ya kulishwa kwenye algoriti inayotoa thamani ya wastani/wastani. + +### Upatikanaji {#availability} + +Huduma za oracle zilizogatuliwa huhakikisha upatikanaji wa juu wa data ya nje ya mnyororo kwa mikataba mahiri. Hili linaafikiwa kwa kugawanya vyanzo vyote viwili vya maelezo ya nje ya mnyororo na nodi zinazohusika na kuhamisha taarifa kwenye mnyororo. + +Hii inahakikisha uvumilivu wa hitilafu kwa kuwa mkataba wa chumba cha ndani unaweza kutegemea nodi nyingi (ambazo pia hutegemea vyanzo vingi vya data) kutekeleza hoja kutoka kwa mikataba mingine. Ugatuzi katika chanzo _na_ kiwango cha mwendeshaji-nodi ni muhimu—mtandao wa nodi za oracle unaotoa taarifa zilizopatikana kutoka chanzo kimoja utakumbana na tatizo sawa na oracle ya kati. + +Inawezekana pia kwa maneno yanayotegemea hisa kufyeka waendeshaji wa nodi ambao wanashindwa kujibu maombi ya data haraka. Hii inatia motisha kwa kiasi kikubwa nodi za oracle kuwekeza katika miundombinu inayostahimili hitilafu na kutoa data kwa wakati ufaao. + +### Utangamano mzuri wa motisha {#good-incentive-compatibility} + +Oracles zilizogatuliwa hutekeleza miundo mbalimbali ya motisha ili kuzuia tabia ya [Byzantine](https://en.wikipedia.org/wiki/Byzantine_fault) miongoni mwa nodi za oracle. Hasa, wanafanikisha _uwezo wa kuhusishwa_ na _uwajibikaji_: + +1. Nodi za chanzo cha data cha nje kilichotawanywa mara nyingi huhitajika kutia sahihi data wanazotoa kujibu maombi ya data. Maelezo haya husaidia kutathmini utendakazi wa kihistoria wa nodi za oracle, ili watumiaji waweze kuchuja nodi za siri zisizotegemewa wanapotuma maombi ya data. Mfano ni [Mfumo wa Sifa za Algorithmic](https://docs.witnet.io/intro/about/architecture#algorithmic-reputation-system) wa Witnet. + +2. Maandishi yaliyotawanywa kama ilivyoelezwa hapo awali huenda ikahitaji nodi kuweka hisa kwenye imani yao katika ukweli wa data wanayowasilisha. Ikiwa dai litathibitishwa, hisa hii inaweza kurejeshwa pamoja na zawadi kwa huduma ya uaminifu. Lakini pia inaweza kupunguzwa ikiwa habari si sahihi, ambayo hutoa kipimo fulani cha uwajibikaji. + +## Matumizi ya oracles katika mikataba mahiri {#applications-of-oracles-in-smart-contracts} + +Yafuatayo ni matumizi ya kawaida ya oracles katika Ethereum: + +### Kupata data ya kifedha {#retrieving-financial-data} + +Programu za [fedha zilizogatuliwa](/defi/) (DeFi) huruhusu ukopeshaji, ukopaji, na biashara ya mali baina ya watu. Hii mara nyingi huhitaji kupata taarifa tofauti za kifedha, ikiwa ni pamoja na data ya kiwango cha ubadilishaji (kwa kukokotoa thamani ya fiat ya sarafu za siri au kulinganisha bei za tokeni) na data ya masoko ya mitaji (kwa kukokotoa thamani ya mali iliyowekewa alama, kama vile dhahabu au dola ya Marekani). + +Itifaki ya ukopeshaji wa DeFi, kwa mfano, inahitaji kuuliza bei za sasa za soko za mali (k.m., ETH) zilizowekwa kama dhamana. Hii huruhusu mkataba kubainisha thamani ya mali ya dhamana na kubainisha ni kiasi gani kinaweza kukopa kutoka kwa mfumo. + +"Oracles za bei" maarufu (kama zinavyoitwa mara nyingi) katika DeFi ni pamoja na Chainlink Price Feeds, [Open Price Feed](https://compound.finance/docs/prices) ya Compound Protocol, [Time-Weighted Average Prices (TWAPs)](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles) za Uniswap, na [Maker Oracles](https://docs.makerdao.com/smart-contract-modules/oracle-module). + +Wajenzi wanapaswa kuelewa tahadhari zinazokuja na maneno haya ya bei kabla ya kujumuisha katika mradi wao. [Makala](https://blog.openzeppelin.com/secure-smart-contract-guidelines-the-dangers-of-price-oracles/) hii inatoa uchambuzi wa kina wa nini cha kuzingatia unapopanga kutumia mojawapo ya oracles za bei zilizotajwa. + +Ufuatao ni mfano wa jinsi unavyoweza kurejesha bei ya hivi punde ya ETH katika mkataba wako mahiri kwa kutumia mlisho wa bei wa Chainlink: + +```solidity +pragma solidity ^0.6.7; + +import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; + +contract PriceConsumerV3 { + + AggregatorV3Interface internal priceFeed; + + /** + * Mtandao: Kovan + * Mjumlishi: ETH/USD + * Anwani: 0x9326BFA02ADD2366b30bacB125260Af641031331 + */ + constructor() public { + priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331); + } + + /** + * Hurejesha bei ya hivi punde + */ + function getLatestPrice() public view returns (int) { + ( + uint80 roundID, + int price, + uint startedAt, + uint timeStamp, + uint80 answeredInRound + ) = priceFeed.latestRoundData(); + return price; + } +} +``` + +### Kuzalisha unasibu unaoweza kuthibitishwa {#generating-verifiable-randomness} + +Baadhi ya programu za blockchain, kama vile michezo ya kiambajengo au miradi ya bahati nasibu, zinahitaji kiwango cha juu cha kutotabirika na nasibu ili kufanya kazi kwa ufanisi. Hata hivyo, utekelezaji wa kubainisha wa blockchains huondoa unasibu. + +Mbinu ya awali ilikuwa kutumia vitendaji vya kriptografia vya pseudorandom, kama vile `blockhash`, lakini hizi zinaweza [kudanganywa na wachimbaji](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.) kutatua algoriti ya uthibitisho-wa-kazi. Pia, [mabadiliko ya Ethereum kwenda uthibitisho-wa-hisa](/roadmap/merge/) inamaanisha wasanidi programu hawawezi tena kutegemea `blockhash` kwa unasibu wa kwenye mnyororo. Mfumo wa [RANDAO](https://eth2book.info/altair/part2/building_blocks/randomness) wa Beacon Chain hutoa chanzo mbadala cha unasibu badala yake. + +Inawezekana kutoa thamani nasibu nje ya mnyororo na kuituma kwenye mnyororo, lakini kufanya hivyo huweka mahitaji ya juu ya uaminifu kwa watumiaji. Ni lazima waamini kwamba thamani ilitolewa kupitia njia zisizotabirika na haikubadilishwa katika usafiri. + +Maandishi yaliyoundwa kwa ajili ya kukokotoa nje ya mnyororo hutatua tatizo hili kwa kutoa matokeo nasibu nje ya mnyororo kwa usalama ambayo hutangaza kwenye msururu pamoja na uthibitisho wa kriptografia unaothibitisha kutotabirika kwa mchakato huo. Mfano ni [Chainlink VRF](https://docs.chain.link/docs/chainlink-vrf/) (Verifiable Random Function), ambayo ni jenereta ya nambari nasibu (RNG) inayoweza kuthibitishwa kuwa ya haki na isiyoweza kuchezewa, muhimu kwa ajili ya kujenga mikataba mahiri ya kuaminika kwa programu zinazotegemea matokeo yasiyotabirika. + +### Kupata matokeo ya matukio {#getting-outcomes-for-events} + +Ukiwa na oracles, kuunda mikataba mahiri inayojibu matukio ya ulimwengu halisi ni rahisi. Huduma za chanzo cha data cha nje hurahisisha hili kwa kuruhusu kandarasi kuunganishwa kwa API za nje kupitia vipengele vya offchain na kutumia taarifa kutoka kwa vyanzo hivyo vya data. Kwa mfano, utabiri wa dapp uliotajwa hapo awali unaweza kuomba hotuba ya kurudisha matokeo ya uchaguzi kutoka kwa chanzo kinachoaminika (k.m., Associated Press). + +Kutumia hotuba kupata data kulingana na matokeo ya ulimwengu halisi huwezesha visa vingine vya utumiaji wa riwaya; kwa mfano, bidhaa ya bima iliyogatuliwa inahitaji taarifa sahihi kuhusu hali ya hewa, majanga, n. k. ili kufanya kazi kwa ufanisi. + +### Kufanya mikataba mahiri ijiendeshe yenyewe {#automating-smart-contracts} + +Mikataba mahiri haiendeshwi kiotomatiki; badala yake, akaunti inayomilikiwa na nje (EOA), au akaunti nyingine ya mkataba, lazima ianzishe kazi zinazofaa ili kutekeleza msimbo wa mkataba. Mara nyingi, sehemu kubwa ya kazi za mkataba ni za umma na zinaweza kutumiwa na EOAs na mikataba mingine. + +Lakini pia kuna _vitendaji vya faragha_ ndani ya mkataba ambavyo havifikiki kwa wengine;, lakini ni muhimu kwa utendakazi wa jumla wa dapp. Mifano ni pamoja na kitendaji cha `mintERC721Token()` ambacho mara kwa mara huchapisha NFTs mpya kwa watumiaji, kitendaji cha kutoa malipo katika soko la utabiri, au kitendaji cha kufungua tokeni zilizowekwa hisa katika DEX. + +Wasanidi programu watahitaji kuanzisha vitendaji hivyo kwa vipindi ili kuweka programu iendeshe vizuri. Hata hivyo, hii inaweza kusababisha kupoteza masaa mengi zaidi kwenye kazi za kawaida kwa wasanidi programu, ndiyo maana kufanya utekelezaji wa mikataba mahiri ujiendeshe wenyewe kunavutia. + +Baadhi ya mitandao ya oracle iliyogatuliwa hutoa huduma za kujiendesha, ambazo huruhusu nodi za oracle za nje ya mnyororo kuanzisha vitendaji vya mkataba mahiri kulingana na vigezo vilivyobainishwa na mtumiaji. Kwa kawaida, hii inahitaji “kusajili” mkataba lengwa na huduma ya oracle, kutoa fedha za kumlipa mwendeshaji wa oracle, na kubainisha masharti au nyakati za kuanzisha mkataba. + +[Mtandao wa Keeper](https://chain.link/keepers) wa Chainlink hutoa chaguo kwa mikataba mahiri kutoa kazi za matengenezo ya mara kwa mara kwa njia ya kupunguza uaminifu na iliyogatuliwa. Soma [nyaraka](https://docs.chain.link/docs/chainlink-keepers/introduction/) rasmi za Keeper kwa taarifa juu ya kufanya mkataba wako uendane na Keeper na kutumia huduma ya Upkeep. + +## Jinsi ya kutumia oracles za mnyororo wa bloku {#use-blockchain-oracles} + +Kuna programu nyingi za oracle unazoweza kuunganisha kwenye dapp yako ya Ethereum: + +**[Chainlink](https://chain.link/)** - _Mitandao ya oracle iliyogatuliwa ya Chainlink hutoa ingizo, matokeo, na hesabu zisizoweza kuchezewa ili kusaidia mikataba mahiri ya hali ya juu kwenye mnyororo wowote wa bloku._ + +**[RedStone Oracles](https://redstone.finance/)** - _RedStone ni oracle ya msimu iliyogatuliwa inayotoa milisho ya data iliyoboreshwa kwa gesi. Inajihusisha na kutoa milisho ya bei kwa mali zinazoibuka, kama vile tokeni za uwekaji hisa kioevu (LSTs), tokeni za uwekaji hisa kioevu (LRTs), na derivatives za uwekaji hisa za Bitcoin._ + +**[Chronicle](https://chroniclelabs.org/)** - _Chronicle inashinda vikwazo vya sasa vya kuhamisha data kwenye mnyororo kwa kuendeleza oracles zinazoweza kuongezeka, za gharama nafuu, zilizogatuliwa, na zinazoweza kuthibitishwa._ + +**[Witnet](https://witnet.io/)** - _Witnet ni oracle isiyo na ruhusa, iliyogatuliwa, na inayostahimili udhibiti inayosaidia mikataba mahiri kujibu matukio ya ulimwengu halisi na dhamana dhabiti za kiuchumi-kripto._ + +**[UMA Oracle](https://uma.xyz)** - _Oracle ya matumaini ya UMA inaruhusu mikataba mahiri kupokea haraka na aina yoyote ya data kwa programu tofauti, ikiwa ni pamoja na bima, derivatives za kifedha, na masoko ya utabiri._ + +**[Tellor](https://tellor.io/)** - _Tellor ni itifaki ya oracle ya uwazi na isiyo na ruhusa kwa mkataba wako mahiri kupata data yoyote kwa urahisi wakati wowote inapohitaji._ + +**[Band Protocol](https://bandprotocol.com/)** - _Band Protocol ni jukwaa la oracle la data la mnyororo-tofauti ambalo hujumlisha na kuunganisha data ya ulimwengu halisi na API kwa mikataba mahiri._ + +**[Pyth Network](https://pyth.network/)** - _Mtandao wa Pyth ni mtandao wa oracle wa kifedha wa wahusika wa kwanza ulioundwa kuchapisha data endelevu ya ulimwengu halisi kwenye mnyororo katika mazingira yasiyoweza kuchezewa, yaliyogatuliwa, na yanayojitegemea._ + +**[API3 DAO](https://www.api3.org/)** - _API3 DAO inatoa suluhisho za oracle za wahusika wa kwanza ambazo hutoa uwazi zaidi wa chanzo, usalama na uwezo wa kuongezeka katika suluhisho lililogatuliwa kwa mikataba mahiri_ + +**[Supra](https://supra.com/)** - Zana iliyounganishwa kiwima ya suluhisho za mnyororo-tofauti zinazounganisha blockchains zote, za umma (L1s na L2s) au za kibinafsi (biashara), ikitoa milisho ya bei ya oracle iliyogatuliwa ambayo inaweza kutumika kwa matumizi ya kwenye mnyororo na nje ya mnyororo. + +**[Gas Network](https://gas.network/)** - Jukwaa la oracle lililosambazwa linalotoa data ya bei ya gesi ya wakati halisi kote kwenye mnyororo wa bloku. Kwa kuleta data kutoka kwa watoa huduma wakuu wa data ya bei ya gesi kwenye mnyororo, Gas Network inasaidia kuendesha ushirikiano. Gas Network inasaidia data kwa minyororo zaidi ya 35, ikiwa ni pamoja na Ethereum Mainnet na L2 nyingi zinazoongoza. + +## Masomo zaidi {#further-reading} + +**Makala** + +- [Oracle ya Mnyororo wa Bloku ni Nini?](https://chain.link/education/blockchain-oracles) — _Chainlink_ +- [Oracle ya Mnyororo wa Bloku ni Nini?](https://medium.com/better-programming/what-is-a-blockchain-oracle-f5ccab8dbd72) — _Patrick Collins_ +- [Oracles Zilizogatuliwa: muhtasari wa kina](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) — _Julien Thevenard_ +- [Kutekeleza Oracle ya Mnyororo wa Bloku kwenye Ethereum](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) – _Pedro Costa_ +- [Kwa nini mikataba mahiri haiwezi kupiga simu za API?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) — _StackExchange_ +- [Kwa hiyo unataka kutumia oracle ya bei](https://samczsun.com/so-you-want-to-use-a-price-oracle/) — _samczsun_ + +**Video** + +- [Oracles na Upanuzi wa Matumizi ya Mnyororo wa Bloku](https://youtu.be/BVUZpWa8vpw) — _Real Vision Finance_ + +**Mafunzo** + +- [Jinsi ya Kupata Bei ya Sasa ya Ethereum katika Solidity](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) — _Chainlink_ +- [Kutumia Data ya Oracle](https://docs.chroniclelabs.org/Developers/tutorials/Remix) — _Chronicle_ + +**Mifano ya kazi** + +- [Mradi kamili wa kuanzia wa Chainlink kwa Ethereum katika Solidity](https://github.com/hackbg/chainlink-fullstack) — _HackBG_ diff --git a/public/content/translations/sw/developers/docs/programming-languages/dart/index.md b/public/content/translations/sw/developers/docs/programming-languages/dart/index.md new file mode 100644 index 00000000000..44425b1a953 --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/dart/index.md @@ -0,0 +1,32 @@ +--- +title: Ethereum kwa wasanidi programu wa Dart +description: Jifunze jinsi ya kuendeleza Ethereum kwa kutumia lugha ya Dart +lang: sw +incomplete: true +--- + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-solidity} + +## Mafunzo {#tutorials} + +- [Flutter na Mnyororo wa bloku – Hello World Dapp](https://www.geeksforgeeks.org/flutter-and-blockchain-hello-world-dapp/) inakupitisha katika hatua zote za kuanza: + 1. Kuandika mkataba-erevu katika [Solidity](https://soliditylang.org/) + 2. Kuandika kiolesura cha mtumiaji katika Dart +- [Kuunda dapp ya Simu na Flutter](https://medium.com/dash-community/building-a-mobile-dapp-with-flutter-be945c80315a) ni fupi zaidi, ambayo inaweza kuwa bora + ikiwa tayari unajua mambo ya msingi +- Ikiwa unapendelea kujifunza kwa kutazama video, unaweza kutazama [Jenga Programu yako ya Kwanza ya Blockchain ya Flutter](https://www.youtube.com/watch?v=3Eeh3pJ6PeA), ambayo ina urefu wa takriban saa moja +- Ikiwa huna subira, unaweza kupendelea [Kuunda Programu-iliyogatuliwa ya Blockchain na Flutter na Dart kwenye Ethereum](https://www.youtube.com/watch?v=jaMFEOCq_1s), ambayo ni takriban dakika ishirini tu +- [Kuunganisha MetaMask katika programu ya Flutter na Web3Modal kutoka WalletConnect](https://www.youtube.com/watch?v=v_M2buHCpc4) - video hii fupi inakupitisha katika hatua za kuunganisha MetaMask kwenye programu zako za Flutter na maktaba ya [Web3Modal](https://pub.dev/packages/web3modal_flutter) kutoka WalletConnect +- [Kozi ya Bootcamp ya Msanidi Programu wa Blockchain ya Simu na Solidity & Flutter](https://youtube.com/playlist?list=PL4V4Unlk5luhQ266ERO6hWEbcUwHDSSmVH) - orodha ya kucheza ya kozi kamili ya msanidi programu wa blockchain ya simu + +## Kufanya kazi na wateja wa Ethereum {#working-with-ethereum-clients} + +Unaweza kutumia Ethereum kuunda mifumo iliyotawanywa (au "mfumo mtawanyo wa kimamlaka") zinazotumia manufaa ya sarafu ya kidigitali na teknolojia ya mnyororo wa bloku. +Kuna angalau maktaba mbili zinazodumishwa sasa kwa Dart kutumia +[JSON-RPC API](/developers/docs/apis/json-rpc/) ya Ethereum. + +1. [Web3dart kutoka pwa.ir](https://pub.dev/packages/web3dart) +2. [Ethereum 5.0.0 kutoka darticulate.com](https://pub.dev/packages/ethereum) + +Pia kuna maktaba za ziada zinazokuruhusu kudhibiti anwani maalum za Ethereum, au zinazokuruhusu kupata bei za sarafu mbalimbali za kidigitali. +[Unaweza kuona orodha kamili hapa](https://pub.dev/dart/packages?q=ethereum). diff --git a/public/content/translations/sw/developers/docs/programming-languages/delphi/index.md b/public/content/translations/sw/developers/docs/programming-languages/delphi/index.md new file mode 100644 index 00000000000..bc866db0781 --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/delphi/index.md @@ -0,0 +1,56 @@ +--- +title: Ethereum kwa wajenzi wa Delphi +description: Jifunze jinsi ya kuendeleza Ethereum kwa kutumia lugha ya programu ya Delphi +lang: sw +incomplete: true +--- + + + +Jifunze jinsi ya kuendeleza Ethereum kwa kutumia lugha ya programu ya Delphi + + + +Tumia Ethereum kuunda programu zilizogatuliwa (au "dapps") zinazotumia manufaa ya sarafu fiche na teknolojia ya kiambajengo. Dapp hizi zinaweza kuaminika, kumaanisha kwamba pindi tu zitakapotumwa Ethereum, zitatumika kila mara jinsi zilivyoratibiwa. Wanaweza kudhibiti vipengee vya dijitali ili kuunda aina mpya za programu za kifedha. Zinaweza kugatuliwa, kumaanisha kuwa hakuna huluki moja au mtu anayezidhibiti na karibu haiwezekani kuzidhibiti. + +Unda programu zilizogatuliwa juu ya Ethereum na uwasiliane na mikataba mahiri kwa kutumia lugha ya programu ya Delphi! + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-the-solidity-language} + +**Chukua hatua zako za kwanza ili kuunganisha Delphi na Ethereum** + +Je, unahitaji primer ya msingi zaidi kwanza? Angalia [ethereum.org/learn](/learn/) au [ethereum.org/developers](/developers/). + +- [Mnyororo wa bloku Umefafanuliwa](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Kuelewa Mikataba-erevu](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Andika Mkataba-erevu wako wa Kwanza](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Jifunze Jinsi ya Kuandaa na Kupeleka Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Marejeleo na viungo kwa wanaoanza {#beginner-references-and-links} + +**Kuanzisha maktaba ya Delphereum** + +- [Delphereum ni nini?](https://github.com/svanas/delphereum/blob/master/README.md) +- [Kuunganisha Delphi na mnyororo wa bloku wa karibu (kwenye kumbukumbu)](https://medium.com/@svanas/connecting-delphi-to-a-local-in-memory-blockchain-9a1512d6c5b0) +- [Kuunganisha Delphi na Mtandao Mkuu wa Ethereum](https://medium.com/@svanas/connecting-delphi-to-the-ethereum-main-net-5faf1feffd83) +- [Kuunganisha Delphi na Mikataba-erevu](https://medium.com/@svanas/connecting-delphi-to-smart-contracts-3146b12803a1) + +**Je, unataka kuruka usanidi kwa sasa, na urukie moja kwa moja kwenye sampuli?** + +- [Mkataba-erevu wa dakika 3 na Delphi - Sehemu ya 1](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-61d998571d) +- [Mkataba-erevu wa dakika 3 na Delphi - Sehemu ya 2](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-part-2-446925faa47b) + +## Makala za wastani {#intermediate-articles} + +- [Kuzalisha sahihi ya ujumbe uliosainiwa na Ethereum katika Delphi](https://medium.com/@svanas/generating-an-ethereum-signed-message-signature-in-delphi-75661ce5031b) +- [Kuhamisha ether kwa kutumia Delphi](https://medium.com/@svanas/transferring-ether-with-delphi-b5f24b1a98a4) +- [Kuhamisha tokeni za ERC-20 kwa kutumia Delphi](https://medium.com/@svanas/transferring-erc-20-tokens-with-delphi-bb44c05b295d) + +## Mifumo ya juu ya matumizi {#advanced-use-patterns} + +- [Delphi na Huduma ya Majina ya Ethereum (ENS)](https://medium.com/@svanas/delphi-and-ethereum-name-service-ens-4443cd278af7) +- [QuikNode, Ethereum na Delphi](https://medium.com/@svanas/quiknode-ethereum-and-delphi-f7bfc9671c23) +- [Delphi na Msitu Giza wa Ethereum](https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93) +- [Badilisha tokeni moja na nyingine katika Delphi](https://svanas.medium.com/swap-one-token-for-another-in-delphi-bcb999c47f7) + +Je, unatafuta rasilimali zaidi? Angalia [ethereum.org/developers](/developers/). diff --git a/public/content/translations/sw/developers/docs/programming-languages/dot-net/index.md b/public/content/translations/sw/developers/docs/programming-languages/dot-net/index.md new file mode 100644 index 00000000000..0a50b6b1466 --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/dot-net/index.md @@ -0,0 +1,86 @@ +--- +title: Ethereum kwa wasanidi programu wa .NET +description: Jifunze jinsi ya kuendeleza Ethereum kwa kutumia miradi inayotegemea .NET na zana +lang: sw +incomplete: true +--- + +Jifunze jinsi ya kuendeleza Ethereum kwa kutumia miradi inayotegemea .NET na zana + +Tumia Ethereum kuunda programu zilizogatuliwa (au "dapps") zinazotumia manufaa ya sarafu fiche na teknolojia ya kiambajengo. Dapp hizi zinaweza kuaminika, kumaanisha kwamba pindi tu zitakapotumwa Ethereum, zitatumika kila mara jinsi zilivyoratibiwa. Wanaweza kudhibiti vipengee vya dijitali ili kuunda aina mpya za programu za kifedha. Zinaweza kugatuliwa, kumaanisha kuwa hakuna huluki moja au mtu anayezidhibiti na karibu haiwezekani kuzidhibiti. + +Tengeneza mifumo iliyotawanywa juu ya Ethereum na uingiliane na mikataba-erevu kwa kutumia zana na lugha kutoka kwenye mrundikano wa teknolojia ya Microsoft - Inayotumika na C#, # Visual Basic .NET, F#, kwenye zana kama vile VSCode na Visual Studio, kwenye .NET Framework/.NET Core/.NET Standard. Sambaza mnyororo wa bloku wa Ethereum kwenye Azure kwa kutumia Microsoft Azure Blockchain ndani ya dakika. Leta upendo wa .NET kwa Ethereum! + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-the-solidity-language} + +**Chukua hatua zako za kwanza za kuunganisha .NET na Ethereum** + +Je, unahitaji primer ya msingi zaidi kwanza? Angalia [ethereum.org/learn](/learn/) au [ethereum.org/developers](/developers/). + +- [Mnyororo wa bloku Umefafanuliwa](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Kuelewa Mikataba-erevu](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Andika Mkataba-erevu wako wa Kwanza](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Jifunze Jinsi ya Kuandaa na Kupeleka Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Marejeleo na viungo kwa wanaoanza {#beginner-references-and-links} + +**Utangulizi wa maktaba ya Nethereum na VS Code Solidity** + +- [Nethereum, Kuanza](https://docs.nethereum.com/en/latest/getting-started/) +- [Kusakinisha VS Code Solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) +- [Mtiririko wa Kazi wa Msanidi Programu wa .NET kwa ajili ya Kuunda na Kuita Mikataba-erevu ya Ethereum](https://medium.com/coinmonks/a-net-developers-workflow-for-creating-and-calling-ethereum-smart-contracts-44714f191db2) +- [Ujumuishaji wa mikataba-erevu na Nethereum](https://kauri.io/#collections/Getting%20Started/smart-contracts-integration-with-nethereum/#smart-contracts-integration-with-nethereumm) +- [Kuunganisha .NET na Mikataba-erevu ya Mnyororo wa Bloku wa Ethereum na Nethereum](https://medium.com/my-blockchain-development-daily-journey/interfacing-net-and-ethereum-blockchain-smart-contracts-with-nethereum-2fa3729ac933), pia katika [中文版](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 - Maktaba ya chanzo-wazi ya ujumuishaji wa .NET kwa ajili ya mnyororo wa bloku](https://kauri.io/#collections/a%20hackathon%20survival%20guide/nethereum-an-open-source-.net-integration-library/) +- [Kuandika Miamala ya Ethereum kwenye Hifadhidata ya SQL kwa kutumia Nethereum](https://medium.com/coinmonks/writing-ethereum-transactions-to-sql-database-using-nethereum-fd94e0e4fa36) +- [Angalia jinsi ya kusambaza kwa urahisi mikataba-erevu ya Ethereum kwa kutumia C# na VisualStudio](https://koukia.ca/deploy-ethereum-smart-contracts-using-c-and-visualstudio-5be188ae928c) + +**Je, unataka kuruka usanidi kwa sasa, na urukie moja kwa moja kwenye sampuli?** + +- [Playground](http://playground.nethereum.com/) - Ingiliana na Ethereum na jifunze jinsi ya kutumia Nethereum kupitia kivinjari. + - Hoja Salio la Akaunti [C#](http://playground.nethereum.com/csharp/id/1001) [VB.NET](http://playground.nethereum.com/vb/id/2001) + - Hoja Salio la Mkataba-erevu wa ERC20 [C#](http://playground.nethereum.com/csharp/id/1005) [VB.NET](http://playground.nethereum.com/vb/id/2004) + - Hamisha ether kwenye Akaunti [C#](http://playground.nethereum.com/csharp/id/1003) [VB.NET](http://playground.nethereum.com/vb/id/2003) + - ... Na zaidi! + +## Makala za wastani {#intermediate-articles} + +- [Kitabu cha Kazi/Orodha ya Sampuli ya Nethereum](http://docs.nethereum.com/en/latest/Nethereum.Workbooks/docs/) +- [Sambaza Testchains zako za Maendeleo](https://github.com/Nethereum/Testchains) +- [Programu-jalizi ya Codegen ya VSCode kwa ajili ya Solidity](https://docs.nethereum.com/en/latest/nethereum-codegen-vscodesolidity/) +- [Unity na Ethereum: Kwa nini na Jinsi gani](https://www.raywenderlich.com/5509-unity-and-ethereum-why-and-how) +- [Unda API ya Wavuti ya ASP.NET Core kwa ajili ya mfumo mtawanyo wa kimamlaka ya Ethereum](https://tech-mint.com/blockchain/create-asp-net-core-web-api-for-ethereum-dapps/) +- [Kutumia Nethereum Web3 kutekeleza Mfumo wa Ufuatiliaji wa Mnyororo wa Ugavi](http://blog.pomiager.com/post/using-nethereum-web3-to-implement-a-supply-chain-traking-system4) +- [Uchakataji wa Bloku za Nethereum](https://nethereum.readthedocs.io/en/latest/nethereum-block-processing-detail/), na [sampuli ya Playground ya C#](http://playground.nethereum.com/csharp/id/1025) +- [Utiririshaji wa Websocket wa Nethereum](https://nethereum.readthedocs.io/en/latest/nethereum-subscriptions-streaming/) +- [Kaleido na Nethereum](https://kaleido.io/kaleido-and-nethereum/) +- [Quorum na Nethereum](https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Quorum/README.md) + +## Mifumo ya juu ya matumizi {#advanced-use-patterns} + +- [Azure Key Vault na Nethereum](https://github.com/Azure-Samples/bc-community-samples/tree/master/akv-nethereum) +- [Nethereum.DappHybrid](https://github.com/Nethereum/Nethereum.DappHybrid) +- [Usanifu wa marejeleo wa backend ya Ujo Nethereum](https://docs.nethereum.com/en/latest/nethereum-ujo-backend-sample/) + +## Miradi ya .NET, zana na mambo mengine ya kufurahisha {#dot-net-projects-tools-and-other-fun-stuff} + +- [Nethereum Playground](http://playground.nethereum.com/) - _Kusanya, unda, na endesha vijisehemu vya msimbo vya Nethereum kwenye kivinjari_ +- [Nethereum Codegen Blazor](https://github.com/Nethereum/Nethereum.CodeGen.Blazor) - _Nethereum codegen na UI katika Blazor_ +- [Nethereum Blazor](https://github.com/Nethereum/NethereumBlazor) - _Kichunguzi chepesi cha mnyororo wa bloku cha .NET Wasm SPA na mkoba rahisi_ +- [Injini ya Kanuni za Biashara ya Wonka](https://docs.nethereum.com/en/latest/wonka/) - _Injini ya kanuni za biashara (kwa jukwaa la .NET na jukwaa la Ethereum) ambayo inaendeshwa na metadata_ +- [Nethermind](https://github.com/NethermindEth/nethermind) - _Mteja wa Ethereum wa .NET Core kwa ajili ya Linux, Windows, MacOS_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _kazi za matumizi kwa ajili ya kufanya kazi na misimbo-msingi inayohusiana na Ethereum_ +- [TestChains](https://github.com/Nethereum/TestChains) - _.NET devchains zilizosanidiwa awali kwa ajili ya majibu ya haraka (PoA)_ + +Je, unatafuta rasilimali zaidi? Angalia [ethereum.org/developers](/developers/). + +## Wachangiaji wa jumuiya ya .NET {#dot-net-community-contributors} + +Katika Nethereum, mara nyingi huwa tunabarizi kwenye [Gitter](https://gitter.im/Nethereum/Nethereum) ambapo kila mtu anakaribishwa kuuliza/kujibu maswali, kupata usaidizi, au kupumzika tu. Jisikie huru kufanya PR au kufungua suala kwenye [hazina ya GitHub ya Nethereum](https://github.com/Nethereum), au vinjari tu miradi mingi ya kando/sampuli tuliyo nayo. Unaweza pia kutupata kwenye [Discord](https://discord.gg/jQPrR58FxX)! + +Ikiwa wewe ni mgeni kwenye Nethermind na unahitaji usaidizi ili kuanza, jiunge na [Discord](http://discord.gg/PaCMRFdvWT) yetu. Wasanidi wetu wako tayari kujibu maswali yako. Usisite kufungua PR au kuibua masuala yoyote kwenye [hazina ya GitHub ya Nethermind](https://github.com/NethermindEth/nethermind). + +## Orodha zingine zilizokusanywa {#other-aggregated-lists} + +[Tovuti Rasmi ya Nethereum](https://nethereum.com/) +[Tovuti Rasmi ya Nethermind](https://nethermind.io/) diff --git a/public/content/translations/sw/developers/docs/programming-languages/elixir/index.md b/public/content/translations/sw/developers/docs/programming-languages/elixir/index.md new file mode 100644 index 00000000000..8e3b254ea50 --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/elixir/index.md @@ -0,0 +1,55 @@ +--- +title: Ethereum kwa Wasanidi wa Elixir +description: Jifunze jinsi ya kusanidi kwa Ethereum ukitumia miradi na zana zinazotumia Elixir. +lang: sw +incomplete: false +--- + +Jifunze jinsi ya kusanidi kwa Ethereum ukitumia miradi na zana zinazotumia Elixir. + +Tumia Ethereum kuunda programu zilizogatuliwa (au "dapps") zinazotumia manufaa ya sarafu fiche na teknolojia ya kiambajengo. Hizi mfumo mtawanyo wa kimamlaka zinaweza kuwa za bila kuaminiana, ikimaanisha kwamba pindi tu zinapowekwa kwenye Ethereum, zitaendeshwa daima kama zilivyopangwa. Wanaweza kudhibiti mali za kidijitali ili kuunda aina mpya za programu za kifedha. Zinaweza kugatuliwa, kumaanisha kuwa hakuna huluki moja au mtu anayezidhibiti na karibu haiwezekani kuzidhibiti. + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Chukua hatua zako za kwanza za kuunganisha Elixir na Ethereum** + +Je, unahitaji primer ya msingi zaidi kwanza? Angalia [ethereum.org/learn](/learn/) au [ethereum.org/developers](/developers/). + +- [Mnyororo wa bloku Umefafanuliwa](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Kuelewa Mikataba-erevu](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Andika Mkataba-erevu wako wa Kwanza](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Jifunze Jinsi ya Kuandaa na Kupeleka Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Makala za wanaoanza {#beginner-articles} + +- [Hatimaye kuelewa akaunti za Ethereum](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [Ethers — Maktaba ya kiwango cha juu ya Ethereum Web3 kwa Elixir](https://medium.com/@alisinabh/announcing-ethers-a-first-class-ethereum-web3-library-for-elixir-1d64e9409122) + +## Makala za wastani {#intermediate-articles} + +- [Jinsi ya kutia saini miamala ghafi ya mkataba wa Ethereum kwa kutumia Elixir](https://kohlerjp.medium.com/how-to-sign-raw-ethereum-contract-transactions-with-elixir-f8822bcc813b) +- [Mikataba-erevu ya Ethereum na Elixir](https://medium.com/agile-alpha/ethereum-smart-contracts-and-elixir-c7c4b239ddb4) + +## Miradi na zana za Elixir {#elixir-projects-and-tools} + +### Inayotumika {#active} + +- [block_keys](https://github.com/ExWeb3/block_keys) - _Utekelezaji wa BIP32 & BIP44 katika Elixir (Madaraja ya Akaunti Nyingi kwa ajili ya Mikoba ya Kudumu)_ +- [ethereumex](https://github.com/mana-ethereum/ethereumex) - _Mteja wa Elixir JSON-RPC kwa blockchain ya Ethereum_ +- [ethers](https://github.com/ExWeb3/elixir_ethers) - _Maktaba kina ya Web3 kwa ajili ya kuingiliana na mikataba-erevu kwenye Ethereum kwa kutumia Elixir_ +- [ethers_kms](https://github.com/ExWeb3/elixir_ethers_kms) - _Maktaba ya kutia saini ya KMS kwa Ethers (tia saini miamala kwa AWS KMS)_ +- [ex_abi](https://github.com/poanetwork/ex_abi) - _Utekelezaji wa kichanganuzi/kisimbuzi/kisimbaji wa Ethereum ABI katika Elixir_ +- [ex_keccak](https://github.com/ExWeb3/ex_keccak) - _Maktaba ya Elixir ya kukokotoa hashi za Keccak SHA3-256 kwa kutumia kreti ya Rust ya tiny-keccak iliyoundwa na NIF_ +- [ex_rlp](https://github.com/mana-ethereum/ex_rlp) - _Utekelezaji wa Elixir wa usimbaji wa RLP (Kiambishi awali cha Urefu wa Kujirudia) wa Ethereum_ + +### Imehifadhiwa kwenye kumbukumbu / Haitunzwi tena {#archived--no-longer-maintained} + +- [eth](https://hex.pm/packages/eth) - _Huduma za Ethereum kwa Elixir_ +- [exw3](https://github.com/hswick/exw3) - _Mteja wa RPC wa Ethereum wa kiwango cha juu kwa Elixir_ +- [mana](https://github.com/mana-ethereum/mana) - _Utekelezaji kamili wa nodi ya Ethereum ulioandikwa katika Elixir_ + +Je, unatafuta rasilimali zaidi? Angalia [nyumbani kwa Wasanidi wetu](/developers/). + +## Wachangiaji wa jumuiya ya Elixir {#elixir-community-contributors} + +[Chaneli ya #ethereum ya Slack ya Elixir](https://elixir-lang.slack.com/archives/C5RPZ3RJL) ni mwenyeji wa jumuiya inayokua kwa kasi na ni rasilimali maalum kwa majadiliano kuhusu miradi yoyote iliyo hapo juu na mada zinazohusiana. diff --git a/public/content/translations/sw/developers/docs/programming-languages/golang/index.md b/public/content/translations/sw/developers/docs/programming-languages/golang/index.md new file mode 100644 index 00000000000..a693af19218 --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/golang/index.md @@ -0,0 +1,84 @@ +--- +title: Ethereum kwa watengenezaji wa Go +description: Jifunze jinsi ya kutengeneza kwa ajili ya Ethereum kwa kutumia miradi inayotegemea Go na zana +lang: sw +incomplete: true +--- + +Jifunze jinsi ya kutengeneza kwa ajili ya Ethereum kwa kutumia miradi inayotegemea Go na zana + +Tumia Ethereum kuunda mifumo iliyotawanywa (au "mfumo mtawanyo wa kimamlaka"). Dapp hizi zinaweza kuaminika, kumaanisha kwamba pindi tu zitakapotumwa Ethereum, zitatumika kila mara jinsi zilivyoratibiwa. Zimegatuliwa, kumaanisha kwamba zinaendeshwa kwenye mtandao wa rika-kwa-rika na hakuna sehemu moja ya kushindwa. Hakuna huluki moja au mtu anayezidhibiti na ni karibu haiwezekani kuzidhibiti. Wanaweza kudhibiti mali za kidijitali ili kuunda aina mpya za programu. + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Chukua hatua zako za kwanza za kuunganisha Go na Ethereum** + +Je, unahitaji primer ya msingi zaidi kwanza? Angalia [ethereum.org/learn](/learn/) au [ethereum.org/developers](/developers/). + +- [Mnyororo wa bloku Umefafanuliwa](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Kuelewa Mikataba-erevu](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Andika Mkataba-erevu wako wa Kwanza](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Jifunze Jinsi ya Kuandaa na Kupeleka Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [Mafunzo ya Mkataba](https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial) + +## Makala na vitabu vya wanaoanza {#beginner-articles-and-books} + +- [Kuanza na Geth](https://medium.com/@tzhenghao/getting-started-with-geth-c1a30b8d6458) +- [Tumia Golang Kuunganisha na Ethereum](https://www.youtube.com/watch?v=-7uChuO_VzM) +- [Sambaza Mikataba-erevu ya Ethereum kwa kutumia Golang](https://www.youtube.com/watch?v=pytGqQmDslE) +- [Mwongozo wa Hatua kwa Hatua wa Kujaribu na Kusambaza Mikataba-erevu ya Ethereum katika Go](https://hackernoon.com/a-step-by-step-guide-to-testing-and-deploying-ethereum-smart-contracts-in-go-9fc34b178d78) +- [Kitabu cha Kielektroniki: Utengenezaji wa Ethereum kwa kutumia Go](https://goethereumbook.org/) - _Tengeneza programu za Ethereum kwa kutumia Go_ + +## Makala na nyaraka za kati {#intermediate-articles-and-docs} + +- [Nyaraka za Go Ethereum](https://geth.ethereum.org/docs/) - _Nyaraka za Golang rasmi ya Ethereum_ +- [Mwongozo wa Mtayarishaji Programu wa Erigon](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Mwongozo wenye picha unaojumuisha mti wa hali, uthibitisho-anuwai, na uchakataji wa miamala_ +- [Erigon na Ethereum Isiyo na Hali](https://youtu.be/3-Mn7OckSus?t=394) - _Mkutano wa Jumuiya ya Ethereum wa 2020 (EthCC 3)_ +- [Erigon: kuboresha wateja wa Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) +- [Kuunda mfumo mtawanyo wa kimamlaka katika Go na Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) +- [Fanya kazi na Mtandao wa Kibinafsi wa Ethereum kwa kutumia Golang na Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) +- [Kujaribu vipimo vya mikataba ya Solidity kwenye Ethereum kwa kutumia Go](https://medium.com/coinmonks/unit-testing-solidity-contracts-on-ethereum-with-go-3cc924091281) +- [Rejea ya haraka ya kutumia Geth kama maktaba](https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e) + +## Mifumo ya juu ya matumizi {#advanced-use-patterns} + +- [Mwisho wa Nyuma Ulioigwa wa GETH](https://kauri.io/#collections/An%20ethereum%20test%20toolkit%20in%20Go/the-geth-simulated-backend/#_top) +- [Programu za Mnyororo-wa-bloku-kama-Huduma Zinazotumia Ethereum na Quorum](https://blockchain.dcwebmakers.com/blockchain-as-a-service-apps-using-ethereum-and-quorum.html) +- [Hifadhi Iliyosambazwa ya IPFS na Swarm katika Programu za Mnyororo wa bloku wa Ethereum](https://blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html) +- [Wateja wa Simu: Maktaba na Nodi za Inproc za Ethereum](https://github.com/ethereum/go-ethereum/wiki/Mobile-Clients:-Libraries-and-Inproc-Ethereum-Nodes) +- [mfumo mtawanyo wa kimamlaka Asilia: viunganishi vya Go kwa mikataba ya Ethereum](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) + +## Miradi na zana za Go {#go-projects-and-tools} + +- [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Utekelezaji rasmi wa Go wa itifaki ya Ethereum_ +- [Uchambuzi wa Msimbo wa Go Ethereum](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Mapitio na uchambuzi wa msimbo chanzo wa Go Ethereum_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Toleo la haraka zaidi la Go Ethereum, lenye mwelekeo kwenye nodi za kumbukumbu_ +- [Golem](https://github.com/golemfactory/golem) - _Golem inaunda soko la kimataifa la nguvu za kompyuta_ +- [Quorum](https://github.com/jpmorganchase/quorum) - _Utekelezaji wenye ruhusa wa Ethereum unaosaidia faragha ya data_ +- [Prysm](https://github.com/prysmaticlabs/prysm) - _Utekelezaji wa Go wa Ethereum 'Serenity' 2.0_ +- [Eth Tweet](https://github.com/yep/eth-tweet) - _Twitter Iliyogatuliwa: Huduma ya uandishi wa blogu ndogo inayoendeshwa kwenye mnyororo wa bloku wa Ethereum_ +- [Plasma MVP Golang](https://github.com/kyokan/plasma) — _Utekelezaji na upanuzi wa Golang wa vipimo vya Njozi Inayowezekana Kiwango cha Chini_ +- [Bwawa la Uchimbaji la Open Ethereum](https://github.com/sammy007/open-ethereum-pool) - _Bwawa la uchimbaji la Ethereum la chanzo huria_ +- [Mkoba wa Ethereum HD](https://github.com/miguelmota/go-ethereum-hdwallet) - _Matoleo ya Mkoba wa Ethereum HD katika Go_ +- [Multi Geth](https://github.com/multi-geth/multi-geth) - _Usaidizi kwa aina nyingi za mitandao ya Ethereum_ +- [Mteja Mwepesi wa Geth](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _Utekelezaji wa Geth wa Itifaki Ndogo ya Ethereum Nyepesi_ +- [SDK ya Ethereum Golang](https://github.com/everFinance/goether) - _Utekelezaji rahisi wa mkoba wa Ethereum na huduma katika Golang_ +- [SDK ya Covalent Golang](https://github.com/covalenthq/covalent-api-sdk-go) - _Ufikiaji bora wa data ya mnyororo wa bloku kupitia SDK ya Go kwa minyororo ya bloku 200+_ + +Je, unatafuta rasilimali zaidi? Angalia [ethereum.org/developers](/developers/) + +## Wachangiaji wa jumuiya ya 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/) - [kituo cha #ethereum](https://gophers.slack.com/messages/C9HP1S9V2) +- [StackExchange - Ethereum](https://ethereum.stackexchange.com/) +- [Multi Geth Gitter](https://gitter.im/ethoxy/multi-geth) +- [Ethereum Gitter](https://gitter.im/ethereum/home) +- [Mteja Mwepesi wa Geth Gitter](https://gitter.im/ethereum/light-client) + +## Orodha zingine zilizokusanywa {#other-aggregated-lists} + +- [Awesome Ethereum](https://github.com/btomashvili/awesome-ethereum) +- [Consensys: Orodha Kamili ya Zana za Wasanidi Programu wa Ethereum](https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974) | [Chanzo cha GitHub](https://github.com/ConsenSys/ethereum-developer-tools-list) diff --git a/public/content/translations/sw/developers/docs/programming-languages/index.md b/public/content/translations/sw/developers/docs/programming-languages/index.md new file mode 100644 index 00000000000..3e8cb5c27ae --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/index.md @@ -0,0 +1,33 @@ +--- +title: Lugha za programu +description: Gundua rasilimali za usanidi wa Ethereum kwa lugha mbalimbali za programu ikiwa ni pamoja na JavaScript, Python, Go, Rust, na zaidi. +lang: sw +--- + +Dhana potofu ya kawaida ni kwamba wasanidi programu lazima waandike [mikataba-erevu](/developers/docs/smart-contracts/) ili kujenga kwenye Ethereum. Huu ni uongo. +Moja ya mambo mazuri kuhusu mtandao na jumuiya ya Ethereum ni kwamba unaweza [kushiriki](/community/) katika takriban lugha yoyote ya programu. + +Ethereum na jumuiya yake wanakumbatia chanzo huria. Unaweza kupata miradi ya jumuiya - utekelezaji wa mteja, API, mifumo ya maendeleo, zana za majaribio - katika anuwai ya lugha. + +## Chagua lugha yako {#data} + +Chagua lugha yako ya upangaji ya chaguo ili kupata miradi, rasilimali na jumuiya ya kufikirika: + +- [Ethereum kwa wasanidi programu wa Dart](/developers/docs/programming-languages/dart/) +- [Ethereum kwa wasanidi programu wa Delphi](/developers/docs/programming-languages/delphi/) +- [Ethereum kwa wasanidi programu wa .NET](/developers/docs/programming-languages/dot-net/) +- [Ethereum kwa wasanidi programu wa Elixir](/developers/docs/programming-languages/elixir/) +- [Ethereum kwa wasanidi programu wa Go](/developers/docs/programming-languages/golang/) +- [Ethereum kwa wasanidi programu wa Java](/developers/docs/programming-languages/java/) +- [Ethereum kwa wasanidi programu wa JavaScript](/developers/docs/programming-languages/javascript/) +- [Ethereum kwa wasanidi programu wa Python](/developers/docs/programming-languages/python/) +- [Ethereum kwa wasanidi programu wa Ruby](/developers/docs/programming-languages/ruby/) +- [Ethereum kwa wasanidi programu wa Rust](/developers/docs/programming-languages/rust/) + +### Vipi ikiwa lugha yangu haitumiki {#other-lang} + +Ikiwa unataka kuunganisha kwa rasilimali au kuelekeza kwenye jumuiya pepe kwa lugha ya ziada ya programu unaweza kuomba ukurasa mpya kwa [kufungua suala](https://github.com/ethereum/ethereum-org-website/issues/new/choose). + +Ikiwa unataka tu kuandika msimbo ili kuingiliana na mnyororo wa bloku kwa kutumia lugha ambayo haitumiki kwa sasa +unaweza kutumia [kiolesura cha JSON-RPC](/developers/docs/apis/json-rpc/) kuunganisha na mtandao wa Ethereum. Upangaji wowote +lugha inayoweza kutumia TCP/IP inaweza kutumia kiolesura hiki. diff --git a/public/content/translations/sw/developers/docs/programming-languages/java/index.md b/public/content/translations/sw/developers/docs/programming-languages/java/index.md new file mode 100644 index 00000000000..ff8ef56147d --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/java/index.md @@ -0,0 +1,64 @@ +--- +title: Ethereum kwa wajenzi wa Java +description: Jifunze jinsi ya kutengeneza Ethereum kwa kutumia miradi na zana zinazotegemea Java +lang: sw +incomplete: true +--- + +Jifunze jinsi ya kutengeneza Ethereum kwa kutumia miradi na zana zinazotegemea Java + +Tumia Ethereum kuunda programu zilizogatuliwa (au "dapps") zinazotumia manufaa ya sarafu fiche na teknolojia ya kiambajengo. Dapp hizi zinaweza kuaminika, kumaanisha kwamba pindi tu zitakapotumwa Ethereum, zitatumika kila mara jinsi zilivyoratibiwa. Wanaweza kudhibiti vipengee vya dijitali ili kuunda aina mpya za programu za kifedha. Zinaweza kugatuliwa, kumaanisha kuwa hakuna huluki moja au mtu anayezidhibiti na karibu haiwezekani kuzidhibiti. + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Chukua hatua zako za kwanza za kuunganisha Java na Ethereum** + +Je, unahitaji primer ya msingi zaidi kwanza? Angalia [ethereum.org/learn](/learn/) au [ethereum.org/developers.](/developers/) + +- [Mnyororo wa bloku Umefafanuliwa](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Kuelewa Mikataba-erevu](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Andika Mkataba-erevu wako wa Kwanza](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Jifunze Jinsi ya Kuandaa na Kupeleka Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Kufanya kazi na wateja wa Ethereum {#working-with-ethereum-clients} + +Jifunze jinsi ya kutumia [Web3J](https://github.com/web3j/web3j) na Hyperledger Besu, Wateja wawili wakuu wa Java Ethereum + +- [Kuunganisha kwa mteja wa Ethereum kwa kutumia Java, Eclipse, na Web3J](https://kauri.io/article/b9eb647c47a546bc95693acc0be72546/connecting-to-an-ethereum-client-with-java-eclipse-and-web3j) +- [Dhibiti akaunti ya Ethereum kwa kutumia Java na Web3j](https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3j) +- [Tengeneza Wrapper ya Java kutoka kwa Mkataba-erevu wako](https://kauri.io/article/84475132317d4d6a84a2c42eb9348e4b/generate-a-java-wrapper-from-your-smart-contract) +- [Kuwasiliana na Mkataba-erevu wa Ethereum](https://kauri.io/article/14dc434d11ef4ee18bf7d57f079e246e/interacting-with-an-ethereum-smart-contract-in-java) +- [Kusikiliza Matukio ya Mkataba-erevu wa Ethereum](https://kauri.io/article/760f495423db42f988d17b8c145b0874/listening-for-ethereum-smart-contract-events-in-java) +- [Kutumia Besu (Pantheon), Mteja wa Java Ethereum na Linux](https://kauri.io/article/276dd27f1458443295eea58403fd6965/using-pantheon-the-java-ethereum-client-with-linux) +- [Kuendesha Nodi ya Hyperledger Besu (Pantheon) katika Majaribio ya Ujumuishaji wa Java](https://kauri.io/article/7dc3ecc391e54f7b8cbf4e5fa0caf780/running-a-pantheon-node-in-java-integration-tests) +- [Karatasi ya Muhtasari wa Web3j](https://kauri.io/web3j-cheat-sheet-\(java-ethereum\)/5dfa1ea941ac3d0001ce1d90/c) + +Jifunze jinsi ya kutumia [ethers-kt](https://github.com/Kr1ptal/ethers-kt), maktaba ya async ya Kotlin yenye utendaji wa juu ya kuingiliana na minyororo ya bloku inayotegemea EVM. Kulenga JVM na majukwaa ya Android. + +- [Hamisha tokeni za ERC20](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/abi/TransferERC20.kt) +- [Ubadilishaji wa UniswapV2 na usikilizaji wa matukio](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/tokenswapwitheventlistening/TokenSwapWithEventListening.kt) +- [Kifuatiliaji cha salio la ETH / ERC20](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/balancetracker/BalanceTracker.kt) + +## Makala za wastani {#intermediate-articles} + +- [Kudhibiti hifadhi katika programu ya Java kwa kutumia IPFS](https://kauri.io/article/3e8494f4f56f48c4bb77f1f925c6d926/managing-storage-in-a-java-application-with-ipfs) +- [Dhibiti tokeni za ERC20 katika Java kwa kutumia Web3j](https://kauri.io/article/d13e911bbf624108b1d5718175a5e0a0/manage-erc20-tokens-in-java-with-web3j) +- [Wasimamizi wa Miamala wa Web3j](https://kauri.io/article/4cb780bb4d0846438d11885a25b6d7e7/web3j-transaction-managers) + +## Mifumo ya juu ya matumizi {#advanced-use-patterns} + +- [Kutumia Eventeum kujenga kache ya data ya mkataba-erevu wa Java](https://kauri.io/article/fe81ee9612eb4e5a9ab72790ef24283d/using-eventeum-to-build-a-java-smart-contract-data-cache) + +## Miradi na zana za Java {#java-projects-and-tools} + +- [Web3J (Maktaba ya Kuingiliana na Wateja wa Ethereum)](https://github.com/web3j/web3j) +- [ethers-kt (Maktaba ya async ya Kotlin/Java/Android yenye utendaji wa juu kwa minyororo ya bloku inayotegemea EVM.)](https://github.com/Kr1ptal/ethers-kt) +- [Eventeum (Msikilizaji wa Matukio)](https://github.com/ConsenSys/eventeum) +- [Mahuta (Zana za Wasanidi Programu za IPFS)](https://github.com/ConsenSys/mahuta) + +Je, unatafuta rasilimali zaidi? Angalia [ethereum.org/developers.](/developers/) + +## Wachangiaji wa jumuiya ya Java {#java-community-contributors} + +- [IO Builders](https://io.builders) +- [Kauri](https://kauri.io) diff --git a/public/content/translations/sw/developers/docs/programming-languages/javascript/index.md b/public/content/translations/sw/developers/docs/programming-languages/javascript/index.md new file mode 100644 index 00000000000..4ebbf4092bd --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/javascript/index.md @@ -0,0 +1,72 @@ +--- +title: Ethereum kwa wajenzi wa JavaScript +description: Jifunze jinsi ya kutengeneza Ethereum kwa kutumia miradi na zana zinazotegemea JavaScript. +lang: sw +--- + +JavaScript ni kati ya lugha maarufu katika mfumo ikolojia wa Ethereum. Kwa hakika, kuna [timu](https://github.com/ethereumjs) iliyojitolea kuleta kiasi kikubwa cha Ethereum kwenye JavaScript iwezekanavyo. + +Kuna fursa za kuandika JavaScript (au kitu cha karibu) katika [viwango vyote vya mrundikano](/developers/docs/ethereum-stack/). + +## Wasiliana na Ethereum {#interact-with-ethereum} + +### Maktaba za API za JavaScript {#javascript-api-libraries} + +Ikiwa ungependa kuandika JavaScript ili kuuliza maswali kwenye blockchain, kutuma miamala na zaidi, njia rahisi zaidi ya kufanya hivyo ni kutumia [maktaba ya API ya JavaScript](/developers/docs/apis/javascript/). API hizi huruhusu wasanidi programu kuwasiliana kwa urahisi na [nodi katika mtandao wa Ethereum](/developers/docs/nodes-and-clients/). + +Unaweza kutumia maktaba hizi kuingiliana na mikataba mahiri kwenye Ethereum ili uweze kutengeneza dapp ambapo unatumia JavaScript kuingiliana na mikataba iliyokuwepo awali. + +**Angalia** + +- [Web3.js](https://web3js.readthedocs.io) +- [Ethers.js](https://ethers.org) – _inajumuisha utekelezaji wa mkoba wa Ethereum na huduma katika JavaScript na TypeScript._ +- [viem](https://viem.sh) – _Kiolesura cha TypeScript cha Ethereum ambacho hutoa viambajengo vya hali ya chini visivyo na hali kwa ajili ya kuwasiliana na Ethereum._ +- [Drift](https://ryangoree.github.io/drift/) – _maktaba-meta ya TypeScript yenye kache iliyojengewa ndani, ndoano, na dhihaka za majaribio kwa ajili ya usanidi rahisi wa Ethereum katika maktaba za web3._ + +### Mikataba-erevu {#smart-contracts} + +Ikiwa wewe ni msanidi programu wa JavaScript na unataka kuandika mkataba wako mahiri, unaweza kutaka kufahamiana na [Solidity](https://solidity.readthedocs.io). Hii ndiyo lugha mahiri ya mkataba maarufu na inafanana kisintaksia na JavaScript, ambayo inaweza kurahisisha kujifunza. + +Zaidi kuhusu [mikataba mahiri](/developers/docs/smart-contracts/). + +## Elewa itifaki {#understand-the-protocol} + +### Mashine halisi ya Ethereum {#the-ethereum-virtual-machine} + +Kuna utekelezaji wa JavaScript wa [mashine halisi ya Ethereum](/developers/docs/evm/). Inaauni sheria za hivi punde za uma. Sheria za uma hurejelea mabadiliko yaliyofanywa kwa EVM kama matokeo ya uboreshaji uliopangwa. + +Imegawanywa katika vifurushi anuwai vya JavaScript ambavyo unaweza kuangalia ili kuelewa vyema: + +- Akaunti +- Vipande +- Kiambajengo chenyewe +- Miamala +- Na zaidi... + +Hii itakusaidia kuelewa mambo kama vile "muundo wa data wa akaunti ni upi?". + +Ikiwa ungependa kusoma msimbo, JavaScript hii inaweza kuwa njia mbadala nzuri ya kusoma kupitia hati zetu. + +**Angalia EVM** +[`@ethereumjs/evm`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/evm) + +### Nodi na wateja {#nodes-and-clients} + +Mteja wa Ethereumjs yuko katika maendeleo amilifu ambayo hukuwezesha kuchunguza jinsi wateja wa Ethereum hufanya kazi katika lugha unayoelewa; JavaScript! + +**Angalia mteja** +[`@ethereumjs/client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client) + +## Miradi mingine {#other-projects} + +Pia kuna mambo mengine mengi yanayoendelea katika ulimwengu wa JavaScript ya Ethereum, ikiwa ni pamoja na: + +- maktaba za huduma za mkoba. +- zana za kuzalisha, kuingiza, na kuhamisha funguo za Ethereum. +- utekelezaji wa `merkle-patricia-tree` – muundo wa data ulioainishwa katika karatasi ya njano ya Ethereum. + +Chunguza chochote kinachokuvutia zaidi kwenye [repo ya EthereumJS](https://github.com/ethereumjs) + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/programming-languages/python/index.md b/public/content/translations/sw/developers/docs/programming-languages/python/index.md new file mode 100644 index 00000000000..21d9413eb03 --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/python/index.md @@ -0,0 +1,99 @@ +--- +title: Ethereum kwa wajenzi wa Python +description: Jifunze jinsi ya kuendeleza Ethereum kwa kutumia miradi ya msingi ya python na zana +lang: sw +incomplete: true +--- + +Jifunze jinsi ya kuendeleza Ethereum kwa kutumia miradi ya msingi wa Python na zana + +Tumia Ethereum kuunda programu zilizogatuliwa (au "dapps") zinazotumia manufaa ya sarafu fiche na teknolojia ya kiambajengo. Dapp hizi zinaweza kuaminika, kumaanisha kwamba pindi tu zitakapotumwa Ethereum, zitatumika kila mara jinsi zilivyoratibiwa. Wanaweza kudhibiti vipengee vya dijitali ili kuunda aina mpya za programu za kifedha. Zinaweza kugatuliwa, kumaanisha kuwa hakuna huluki moja au mtu anayezidhibiti na karibu haiwezekani kuzidhibiti. + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Chukua hatua zako za kwanza za kuunganisha Python na Ethereum** + +Je, unahitaji primer ya msingi zaidi kwanza? Angalia [ethereum.org/learn](/learn/) au [ethereum.org/developers](/developers/). + +- [Mnyororo wa bloku Umefafanuliwa](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Kuelewa Mikataba-erevu](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Andika Mkataba-erevu wako wa Kwanza](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Jifunze Jinsi ya Kuandaa na Kupeleka Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [Ripoti ya hali ya Python katika mnyororo wa bloku 2023](https://tradingstrategy.ai/blog/the-state-of-python-in-blockchain-in-2023) + +## Makala za wanaoanza {#beginner-articles} + +- [Muhtasari wa web3.py](https://web3py.readthedocs.io/en/latest/overview.html) +- [Ziara ya Mfumo Ikolojia wa Python wa Ethereum](https://snakecharmers.ethereum.org/python-ecosystem/) +- [Mwongozo wa Msanidi Programu (wa Python) wa Ethereum](https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/) +- [Yenye Kustahili Tuzo: Mwongozo wa Hackathon ya Python ya Ethereum](https://snakecharmers.ethereum.org/prize-worthy/) +- [Utangulizi wa Mikataba-erevu kwa kutumia Vyper](https://kauri.io/#collections/Getting%20Started/an-introduction-to-smart-contracts-with-vyper/) +- [Jinsi ya kuendeleza mkataba wa Ethereum kwa kutumia Python Flask?](https://medium.com/coinmonks/how-to-develop-ethereum-contract-using-python-flask-9758fe65976e) +- [Utangulizi wa Web3.py · Ethereum kwa Wasanidi Programu wa Python](https://www.dappuniversity.com/articles/web3-py-intro) +- [Jinsi ya kuita kazi ya Mkataba-erevu kwa kutumia Python na web3.py](https://stackoverflow.com/questions/57580702/how-to-call-a-smart-contract-function-using-python-and-web3-py) + +## Makala za wastani {#intermediate-articles} + +- [Marafiki wa web3.py: Utangulizi wa Ape](https://snakecharmers.ethereum.org/intro-to-ape/) +- [Uendelezaji wa mfumo mtawanyo wa kimamlaka kwa Wasanidi Programu wa Python](https://levelup.gitconnected.com/dapps-development-for-python-developers-f52b32b54f28) +- [Kuunda Kiolesura cha Python cha Ethereum: Sehemu ya 1](https://hackernoon.com/creating-a-python-ethereum-interface-part-1-4d2e47ea0f4d) +- [Mikataba-erevu ya Ethereum katika Python: mwongozo wa kina (kwa kiasi)](https://hackernoon.com/ethereum-smart-contracts-in-python-a-comprehensive-ish-guide-771b03990988) + +## Mifumo ya juu ya matumizi {#advanced-use-patterns} + +- [Mifumo ya web3.py: Usajili wa Matukio ya Wakati Halisi](https://snakecharmers.ethereum.org/subscriptions/) +- [Mifumo ya web3.py: WebSocketProvider](https://snakecharmers.ethereum.org/websocketprovider/) +- [Kuandaa, kupeleka na kuita mkataba-erevu wa Ethereum kwa kutumia Python](https://yohanes.gultom.id/2018/11/28/compiling-deploying-and-calling-ethereum-smartcontract-using-python/) +- [Changanua Mikataba-erevu ya Solidity kwa kutumia Slither](https://kauri.io/#collections/DevOps/analyze-solidity-smart-contracts-with-slither/#analyze-solidity-smart-contracts-with-slither) +- [Mafunzo ya Fintech ya Mnyororo wa bloku: Kukopesha na Kukopa kwa Kutumia Python](https://blog.chain.link/blockchain-fintech-defi-tutorial-lending-borrowing-python/) + +## Makala yaliyohifadhiwa + +- [Peleka Tokeni yako mwenyewe ya ERC20 kwa kutumia Python na Brownie](https://betterprogramming.pub/python-blockchain-token-deployment-tutorial-create-an-erc20-77a5fd2e1a58) +- [Kutumia Brownie na Python kupeleka Mikataba-erevu](https://dev.to/patrickalphac/using-brownie-for-to-deploy-smart-contracts-1kkp) +- [Kuunda NFT kwenye OpenSea kwa kutumia Brownie](https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/) + +## Miradi na zana za Python {#python-projects-and-tools} + +### Inayotumika: {#active} + +- [Web3.py](https://github.com/ethereum/web3.py) - _Maktaba ya Python ya kuingiliana na Ethereum_ +- [Vyper](https://github.com/ethereum/vyper/) - _Lugha ya Mkataba-erevu ya Kipthoni kwa ajili ya EVM_ +- [Ape](https://github.com/ApeWorX/ape) - _Zana ya kuendeleza mikataba-erevu kwa Wapythoni, Wanasayansi wa Data, na Wataalamu wa Usalama_ +- [py-evm](https://github.com/ethereum/py-evm) - _utekelezaji wa Mashine ya Mtandaoni ya Ethereum_ +- [eth-tester](https://github.com/ethereum/eth-tester) - _zana za kujaribu programu-tumizi za msingi wa Ethereum_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _kazi za matumizi kwa ajili ya kufanya kazi na misimbo-msingi inayohusiana na Ethereum_ +- [py-solc-x](https://pypi.org/project/py-solc-x/) - _Kifuniko cha Python kuzunguka kikusanyaji cha solc cha solidity chenye usaidizi wa 0.5.x_ +- [pymaker](https://github.com/makerdao/pymaker) - _API ya Python kwa mikataba ya Maker_ +- [siwe](https://github.com/signinwithethereum/siwe-py) - _Ingia na Ethereum (siwe) kwa Python_ +- [Web3 DeFi kwa miunganisho ya Ethereum](https://github.com/tradingstrategy-ai/web3-ethereum-defi) - _Kifurushi cha Python kilicho na miunganisho tayari kwa ERC-20, Uniswap na miradi mingine maarufu_ +- [Wake](https://getwake.io) - _Mfumo mmoja wa Python kwa ajili ya majaribio ya mikataba, fuzzing, upelekaji, uchunguzi wa udhaifu na urambazaji wa msimbo (seva ya lugha - [Zana za Solidity](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity))_ + +### Imehifadhiwa / Haihudumiwi tena: {#archived--no-longer-maintained} + +- [Trinity](https://github.com/ethereum/trinity) - _Mteja wa Python wa Ethereum_ +- [Mamba](https://github.com/arjunaskykok/mamba) - _mfumo wa kuandika, kuandaa, na kupeleka mikataba-erevu iliyoandikwa kwa lugha ya Vyper_ +- [Brownie](https://github.com/eth-brownie/brownie) - _Mfumo wa Python wa kupeleka, kujaribu na kuingiliana na mikataba-erevu ya Ethereum_ +- [pydevp2p](https://github.com/ethereum/pydevp2p) - _utekelezaji wa safu ya P2P ya Ethereum_ +- [py-wasm](https://github.com/ethereum/py-wasm) - _utekelezaji wa Python wa mkalimani wa web assembly_ + +Je, unatafuta rasilimali zaidi? Angalia [ethereum.org/developers](/developers/). + +## Miradi inayotumia zana za Python {#projects-using-python-tooling} + +Miradi ifuatayo ya msingi wa Ethereum hutumia zana zilizotajwa kwenye ukurasa huu. Hifadhi za chanzo-wazi zinazohusiana hutumika kama marejeleo mazuri kwa mfano msimbo na mbinu bora. + +- [Yearn Finance](https://yearn.finance/) na [hazina ya Mikataba ya Vault ya Yearn](https://github.com/yearn/yearn-vaults) +- [Curve](https://www.curve.finance/) na [hazina ya mikataba-erevu ya Curve](https://github.com/curvefi/curve-contract) +- [BadgerDAO](https://badger.com/) na [mikataba-erevu inayotumia msururu wa zana za Brownie](https://github.com/Badger-Finance/badger-system) +- [Sushi](https://sushi.com/) hutumia [Python katika kusimamia na kupeleka mikataba yao ya ugawaji](https://github.com/sushiswap/sushi-vesting-protocols) +- [Alpha Finance](https://alphafinance.io/), inayofahamika kwa Alpha Homora, hutumia [Brownie kujaribu na kupeleka mikataba-erevu](https://github.com/AlphaFinanceLab/alpha-staking-contract) + +## Majadiliano ya Jumuiya ya Python {#python-community-contributors} + +- [Discord ya Jumuiya ya Python ya Ethereum](https://discord.gg/9zk7snTfWe) kwa majadiliano ya Web3.py na mifumo mingine ya Python +- [Discord ya Vyper](https://discord.gg/SdvKC79cJk) kwa majadiliano ya programu za mkataba-erevu wa Vyper + +## Orodha zingine zilizokusanywa {#other-aggregated-lists} + +Wiki ya Vyper ina [orodha ya ajabu ya rasilimali za Vyper](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) \ No newline at end of file diff --git a/public/content/translations/sw/developers/docs/programming-languages/ruby/index.md b/public/content/translations/sw/developers/docs/programming-languages/ruby/index.md new file mode 100644 index 00000000000..1bb92656e49 --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/ruby/index.md @@ -0,0 +1,60 @@ +--- +title: Ethereum kwa Wasanidi wa Ruby +description: Jifunze jinsi ya kusanidi kwa Ethereum ukitumia miradi na zana zinazotumia Ruby. +lang: sw +incomplete: false +--- + +Jifunze jinsi ya kusanidi kwa Ethereum ukitumia miradi na zana zinazotumia Ruby. + +Tumia Ethereum kuunda programu zilizogatuliwa (au "dapps") zinazotumia manufaa ya sarafu fiche na teknolojia ya kiambajengo. Hizi mfumo mtawanyo wa kimamlaka zinaweza kuwa za bila kuaminiana, ikimaanisha kwamba pindi tu zinapowekwa kwenye Ethereum, zitaendeshwa daima kama zilivyopangwa. Wanaweza kudhibiti mali za kidijitali ili kuunda aina mpya za programu za kifedha. Zinaweza kugatuliwa, kumaanisha kuwa hakuna huluki moja au mtu anayezidhibiti na karibu haiwezekani kuzidhibiti. + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Chukua hatua zako za kwanza za kuunganisha Ruby na Ethereum** + +Je, unahitaji primer ya msingi zaidi kwanza? Angalia [ethereum.org/learn](/learn/) au [ethereum.org/developers](/developers/). + +- [Mnyororo wa bloku Umefafanuliwa](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Kuelewa Mikataba-erevu](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Andika Mkataba-erevu wako wa Kwanza](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Jifunze Jinsi ya Kuandaa na Kupeleka Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Makala za wanaoanza {#beginner-articles} + +- [Hatimaye kuelewa akaunti za Ethereum](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [Hatimaye Uthibitishaji wa Watumiaji wa Rails na MetaMask](https://dev.to/q9/finally-authenticating-rails-users-with-metamask-3fj) +- [Jinsi ya kuunganisha kwenye mtandao wa Ethereum kwa kutumia Ruby](https://www.quicknode.com/guides/web3-sdks/how-to-connect-to-the-ethereum-network-using-ruby) +- [Jinsi ya kuzalisha anwani mpya ya Ethereum katika Ruby](https://www.quicknode.com/guides/web3-sdks/how-to-generate-a-new-ethereum-address-in-ruby) + +## Makala za wastani {#intermediate-articles} + +- [Programu ya Blockchain na Ruby](https://www.nopio.com/blog/blockchain-app-ruby/) +- [Tumia Ruby, iliyounganishwa na Ethereum, kutekeleza Mkataba Mahiri](https://titanwolf.org/Network/Articles/Article?AID=87285822-9b25-49d5-ba2a-7ad95fff7ef9) + +## Miradi na zana za Ruby {#ruby-projects-and-tools} + +### Inayotumika {#active} + +- [eth.rb](https://github.com/q9f/eth.rb) - _Maktaba ya Ruby na mteja wa RPC wa kushughulikia akaunti za Ethereum, ujumbe na miamala_ +- [keccak.rb](https://github.com/q9f/keccak.rb) - _Hashi ya Keccak (SHA3) inayotumiwa na Ethereum_ +- [siwe-ruby](https://github.com/signinwithethereum/siwe-ruby) - _Utekelezaji wa Ruby wa Ingia na Ethereum_ +- [siwe-rails](https://github.com/signinwithethereum/siwe-rails) - _Gem ya Rails inaoongeza njia za kuingia za SIWE_ +- [siwe-rails-examples](https://github.com/signinwithethereum/siwe-rails-examples) - _Mfano wa SIWE unaotumia Ruby on Rails na kidhibiti maalum_ +- [omniauth-siwe](https://github.com/signinwithethereum/omniauth-siwe) - _Mkakati wa OmniAuth kwa ajili ya Ingia na Ethereum (SIWE)_ +- [omniauth-nft](https://github.com/valthon/omniauth-nft) - _Mkakati wa OmniAuth wa kuthibitisha kupitia umiliki wa NFT_ +- [ethereum-on-rails](https://github.com/q9f/ethereum-on-rails) - _Kiolezo cha Ethereum on Rails kinachoruhusu kuunganisha MetaMask kwenye Ruby on Rails_ + +### Imehifadhiwa kwenye kumbukumbu / Haitunzwi tena {#archived--no-longer-maintained} + +- [web3-eth](https://github.com/spikewilliams/vtada-ethereum) - _Kuita mbinu za RPC za nodi ya Ethereum na Ruby_ +- [ethereum_tree](https://github.com/longhoangwkm/ethereum_tree) - _Maktaba ya Ruby ya kuzalisha anwani za ETH kutoka kwa mkoba wa Hierarchical Deterministic kulingana na kiwango cha BIP32_ +- [etherlite](https://github.com/budacom/etherlite) - _Uunganishaji wa Ethereum kwa Ruby on Rails_ +- [ethereum.rb](https://github.com/EthWorks/ethereum.rb) - _Mteja wa Ruby Ethereum anayetumia kiolesura cha JSON-RPC kutuma miamala, kuunda na kuingiliana na mikataba pamoja na zana muhimu ya kufanya kazi na nodi ya Ethereum_ +- [omniauth-ethereum.rb](https://github.com/q9f/omniauth-ethereum.rb) - _Hutekeleza mkakati wa mtoaji wa Ethereum kwa OmniAuth_ + +Je, unatafuta rasilimali zaidi? Angalia [nyumbani kwa Wasanidi wetu](/developers/). + +## Wachangiaji wa jumuiya ya Ruby {#ruby-community-contributors} + +[Kundi la Telegram la Ethereum Ruby](https://t.me/ruby_eth) ni mwenyeji wa jumuiya inayokua kwa kasi na ni rasilimali maalum kwa majadiliano juu ya miradi yoyote hapo juu na mada zinazohusiana. diff --git a/public/content/translations/sw/developers/docs/programming-languages/rust/index.md b/public/content/translations/sw/developers/docs/programming-languages/rust/index.md new file mode 100644 index 00000000000..0890c47562e --- /dev/null +++ b/public/content/translations/sw/developers/docs/programming-languages/rust/index.md @@ -0,0 +1,65 @@ +--- +title: Ethereum kwa watengenezaji wa rust +description: Jifunze jinsi ya kuendeleza Ethereum kwa kutumia miradi inayotegemea Rust na zana +lang: sw +incomplete: true +--- + +Jifunze jinsi ya kutengeneza kwa ajili ya Ethereum kwa kutumia miradi na zana zinazotokana na Rust + +Tumia Ethereum kuunda programu zilizogatuliwa (au "dapps") zinazotumia manufaa ya sarafu fiche na teknolojia ya kiambajengo. Dapp hizi zinaweza kuaminika, kumaanisha kwamba pindi tu zitakapotumwa Ethereum, zitatumika kila mara jinsi zilivyoratibiwa. Wanaweza kudhibiti vipengee vya dijitali ili kuunda aina mpya za programu za kifedha. Zinaweza kugatuliwa, kumaanisha kuwa hakuna huluki moja au mtu anayezidhibiti na karibu haiwezekani kuzidhibiti. + +## Kuanza na mikataba-erevu na lugha ya Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Chukua hatua zako za kwanza za kuunganisha Rust na Ethereum** + +Je, unahitaji primer ya msingi zaidi kwanza? Angalia [ethereum.org/learn](/learn/) au [ethereum.org/developers](/developers/). + +- [Mnyororo wa bloku Umefafanuliwa](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Kuelewa Mikataba-erevu](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Andika Mkataba-erevu wako wa Kwanza](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Jifunze Jinsi ya Kuandaa na Kupeleka Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Makala za wanaoanza {#beginner-articles} + +- [Mteja wa Rust Ethereum](https://openethereum.github.io/) \* **Kumbuka kuwa OpenEthereum [imesitishwa](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) na haitunzwi tena.** Itumie kwa tahadhari na inapendekezwa ubadilishe hadi kwa utekelezaji mwingine wa mteja. +- [Kutuma Muamala kwa Ethereum kwa Kutumia Rust](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/) +- [Mafunzo ya hatua kwa hatua kuhusu jinsi ya kuandika mikataba katika rust Wasm kwa ajili ya Kovan](https://github.com/paritytech/pwasm-tutorial) + +## Makala za wastani {#intermediate-articles} + +## Mifumo ya juu ya matumizi {#advanced-use-patterns} + +- [Maktaba ya pwasm_ethereum externs ya kuingiliana na mtandao unaofanana na Ethereum](https://github.com/openethereum/pwasm-ethereum) + +- [Unda Soga Iliyogatuliwa kwa kutumia JavaScript na Rust](https://medium.com/perlin-network/build-a-decentralized-chat-using-javascript-rust-webassembly-c775f8484b52) + +- [Unda Programu ya Mambo ya Kufanya Iliyogatuliwa kwa kutumia Vue.js & Rust](https://medium.com/@jjmace01/build-a-decentralized-todo-app-using-vue-js-rust-webassembly-5381a1895beb) + +- [Unda mnyororo wa bloku katika Rust](https://blog.logrocket.com/how-to-build-a-blockchain-in-rust/) + +## Miradi na zana za Rust {#rust-projects-and-tools} + +- [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _Mkusanyiko wa externs ili kuingiliana na mtandao unaofanana na Ethereum_ +- [Lighthouse](https://github.com/sigp/lighthouse) - _Mteja wa haraka wa safu ya makubaliano ya Ethereum_ +- [Ethereum WebAssembly](https://ewasm.readthedocs.io/en/mkdocs/) - _Muundo mpya uliopendekezwa wa safu ya utekelezaji ya mkataba-erevu wa Ethereum kwa kutumia seti ndogo maalum ya WebAssembly_ +- [oasis_std](https://docs.rs/oasis-std/latest/oasis_std/index.html) - _Rejeleo la API la OASIS_ +- [Solaris](https://github.com/paritytech/sol-rs) - _Mfumo wa majaribio ya kitengo kwa Mikataba-Erevu ya Solidity kwa kutumia EVM asili ya Mteja wa Parity._ +- [SputnikVM](https://github.com/rust-blockchain/evm) - _Utekelezaji wa Rust wa Mashine Halisi ya Ethereum_ +- [Wavelet](https://wavelet.perlin.net/docs/smart-contracts) - _Mkataba-erevu wa Wavelet katika Rust_ +- [Foundry](https://github.com/foundry-rs/foundry) - _Seti ya zana za uundaji wa programu za Ethereum_ +- [Alloy](https://alloy.rs) - _Maktaba za utendaji wa hali ya juu, zilizojaribiwa vizuri na zilizoandikwa kwa ajili ya kuingiliana na Ethereum na minyororo mingine inayotegemea EVM._ +- [Ethers_rs](https://github.com/gakonst/ethers-rs) - _Utekelezaji wa maktaba na mkoba wa Ethereum_ +- [SewUp](https://github.com/second-state/SewUp) - _Maktaba ya kukusaidia kuunda mkataba wako wa webassembly wa Ethereum ukitumia Rust kama vile unavyotengeneza kwenye sehemu ya nyuma ya kawaida_ +- [Substreams](https://github.com/streamingfast/substreams) - _Teknolojia ya kuorodhesha data ya mnyororo wa bloku kwa usambamba_ +- [Reth](https://github.com/paradigmxyz/reth) Reth (kifupi cha Rust Ethereum) ni utekelezaji mpya wa node kamili ya Ethereum +- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _Mkusanyiko ulioratibiwa wa miradi katika mfumo ikolojia wa Ethereum iliyoandikwa kwa Rust_ + +Je, unatafuta rasilimali zaidi? Angalia [ethereum.org/developers.](/developers/) + +## Wachangiaji wa jumuiya ya 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/sw/developers/docs/scaling/index.md b/public/content/translations/sw/developers/docs/scaling/index.md new file mode 100644 index 00000000000..937ecb73d80 --- /dev/null +++ b/public/content/translations/sw/developers/docs/scaling/index.md @@ -0,0 +1,113 @@ +--- +title: Uongezwaji +description: Utangulizi wa chaguzi tofauti za kuongeza viwango zinazoendelezwa sasa na jumuiya ya Ethereum. +lang: sw +sidebarDepth: 3 +--- + +## Muhtasari wa uongezwaji {#scaling-overview} + +Kwa kuwa idadi ya watu wanaotumia Ethereum imeongezeka, blockchain imefikia mapungufu fulani ya uwezo. Hii imeongeza gharama ya kutumia mtandao, na kujenga hitaji la "suluhisho za kuongeza kiwango." Kuna masuluhisho mengi yanayofanyiwa utafiti, kujaribiwa na kutekelezwa ambayo huchukua mbinu tofauti kufikia malengo sawa. + +Lengo kuu la uwezo wa kuongezeka ni kuongeza kasi ya muamala (mwisho wa haraka) na upitishaji wa miamala (idadi kubwa ya miamala kwa sekunde) bila kuathiri ugatuzi au usalama. Kwenye mnyororo wa bloku wa safu ya 1 ya Ethereum, mahitaji makubwa husababisha miamala ya polepole na [bei za gesi](/developers/docs/gas/) zisizowezekana. Kuongeza uwezo wa mtandao kwa suala la kasi na upitishaji ni msingi wa kupitishwa kwa maana na kwa wingi kwa Ethereum. + +Ingawa kasi na matokeo ni muhimu, ni muhimu kwamba masuluhisho ya kuongeza viwango yanayowezesha malengo haya yabaki yakiwa yamegawanywa na salama. Kuweka kizuizi cha kuingia kwa waendeshaji wa nodi kuwa chini ni muhimu katika kuzuia maendeleo kuelekea nguvu ya kompyuta ya kati na isiyo salama. + +Kimsingi, kwanza tunaainisha uongezwaji kama uongezwaji wa onchain au uongezwaji wa offchain. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa na uelewa mzuri wa mada zote za msingi. Utekelezaji wa suluhisho za uongezwaji ni wa hali ya juu kwani teknolojia haijajaribiwa sana, na inaendelea kutafitiwa na kuendelezwa. + +## Uongezwaji wa Onchain {#onchain-scaling} + +Uongezwaji wa Onchain unahitaji mabadiliko kwenye itifaki ya Ethereum (safu ya 1 ya [Mtandao Mkuu](/glossary/#mainnet)). Kwa muda mrefu, ugawanyaji wa mnyororo wa bloku ulitarajiwa kuongeza Ethereum. Hii ingehusisha kugawanya mnyororo wa bloku katika vipande tofauti (shards) ili kuthibitishwa na vikundi vidogo vya wathibitishaji. Hata hivyo, uongezwaji kwa kutumia unda-mpya za safu-2 umechukua nafasi kama mbinu ya msingi ya uongezwaji. Hili linaungwa mkono na nyongeza ya aina mpya ya data ya bei nafuu iliyoambatishwa kwenye bloku za Ethereum ambayo imeundwa mahususi kufanya unda-mpya ziwe nafuu kwa watumiaji. + +### Ugawanyaji {#sharding} + +Ugawanyaji ni mchakato wa kugawanya hifadhidata. Vikundi vidogo vya wathibitishaji vingewajibika kwa shardi binafsi badala ya kufuatilia Ethereum yote. Ugawanyaji ulikuwa kwenye [ramani ya maendeleo](/roadmap/) ya Ethereum kwa muda mrefu, na hapo awali ulikusudiwa kutolewa kabla ya Muungano kuelekea uthibitisho-wa-hisa. Hata hivyo, maendeleo ya haraka ya [unda-mpya za safu 2](#layer-2-scaling) na uvumbuzi wa [Danksharding](/roadmap/danksharding) (kuongeza matone ya data ya unda-mpya kwenye bloku za Ethereum ambazo zinaweza kuthibitishwa kwa ufanisi sana na wathibitishaji) umesababisha jumuiya ya Ethereum kupendelea uongezwaji unaozingatia unda-mpya badala ya uongezwaji kwa ugawanyaji. Hii pia itasaidia kuweka mantiki ya makubaliano ya Ethereum kuwa rahisi. + +## Uongezwaji wa Offchain {#offchain-scaling} + +Suluhisho za Offchain zinatekelezwa kando na Mtandao Mkuu wa safu ya 1 - hazihitaji mabadiliko yoyote kwenye itifaki iliyopo ya Ethereum. Baadhi ya suluhisho, zinazojulikana kama suluhisho za "safu ya 2", hupata usalama wao moja kwa moja kutoka kwa makubaliano ya safu ya 1 ya Ethereum, kama vile [optimistic rollups](/developers/docs/scaling/optimistic-rollups/), [zero-knowledge rollups](/developers/docs/scaling/zk-rollups/) au [chaneli za hali](/developers/docs/scaling/state-channels/). Suluhisho zingine zinahusisha uundaji wa minyororo mipya katika aina mbalimbali ambazo hupata usalama wao kando na Mtandao Mkuu, kama vile [sidechains](#sidechains), [validiums](#validium), au [minyororo ya njozi](#plasma). Suluhisho hizi huwasiliana na Mtandao Mkuu lakini hupata usalama wao kwa njia tofauti ili kufikia malengo mbalimbali. + +### Uongezwaji wa safu ya 2 {#layer-2-scaling} + +Aina hii ya suluhisho za offchain hupata usalama wake kutoka kwa Mtandao Mkuu wa Ethereum. + +Safu ya 2 ni neno la pamoja la suluhisho zilizoundwa kusaidia kuongeza programu yako kwa kushughulikia miamala nje ya Mtandao Mkuu wa Ethereum (safu ya 1) huku ukichukua fursa ya mfumo imara wa usalama wa ugatuzi wa Mtandao Mkuu. Kasi ya muamala hupungua mtandao unapokuwa na shughuli nyingi, na kufanya uzoefu wa mtumiaji kuwa duni kwa aina fulani za dapps. Na mtandao unapozidi kuwa na shughuli nyingi, bei za gesi huongezeka kadri watumaji wa miamala wanavyolenga kushindana kwa bei. Hii inaweza kufanya utumiaji wa Ethereum kuwa ghali sana. + +Suluhisho nyingi za safu ya 2 huzingatia seva au nguzo ya seva, ambapo kila moja inaweza kujulikana kama nodi, mthibitishaji, mwendeshaji, mratibu wa mfuatano, mtayarishaji wa bloku, au neno linalofanana. Kulingana na utekelezaji, nodi hizi za safu ya 2 zinaweza kuendeshwa na watu binafsi, biashara au mashirika yanayozitumia, au na mwendeshaji wa tatu, au na kundi kubwa la watu binafsi (sawa na Mtandao Mkuu). Kwa ujumla, miamala huwasilishwa kwa nodi hizi za safu ya 2 badala ya kuwasilishwa moja kwa moja kwa safu ya 1 (Mtandao Mkuu). Kwa baadhi ya suluhisho, kisa cha safu ya 2 kisha huviweka katika makundi kabla ya kuvitia nanga kwenye safu ya 1, na baada ya hapo hulindwa na safu ya 1 na haviwezi kubadilishwa. Maelezo ya jinsi hii inafanywa hutofautiana sana kati ya teknolojia na utekelezaji tofauti wa safu ya 2. + +Kisa maalum cha safu ya 2 kinaweza kuwa wazi na kushirikiwa na programu nyingi, au kinaweza kupelekwa na mradi mmoja na kujitolea kusaidia programu yao pekee. + +#### Kwa nini safu ya 2 inahitajika? {#why-is-layer-2-needed} + +- Kuongezeka kwa miamala kwa sekunde kunaboresha sana uzoefu wa mtumiaji, na kupunguza msongamano wa mtandao kwenye Mtandao Mkuu wa Ethereum. +- Miamala hukusanywa katika muamala mmoja kwenye Mtandao Mkuu wa Ethereum, na kupunguza ada za gesi kwa watumiaji na kuifanya Ethereum kuwa jumuishi zaidi na kupatikana kwa watu kila mahali. +- Sasisho zozote za uwezo wa kuongezeka hazipaswi kuwa kwa gharama ya ugatuzi au usalama – safu ya 2 inajengwa juu ya Ethereum. +- Kuna mitandao ya safu ya 2 maalum kwa programu ambayo huleta seti zao za ufanisi wakati wa kufanya kazi na mali kwa kiwango kikubwa. + +[Zaidi kuhusu safu ya 2](/layer-2/). + +#### Unda-mpya {#rollups} + +Unda-mpya hutekeleza miamala nje ya safu ya 1 na kisha data huwekwa kwenye safu ya 1 ambapo makubaliano hufikiwa. Kwa vile data ya muamala imejumuishwa katika bloku za safu ya 1, hii inaruhusu unda-mpya kulindwa na usalama asili wa Ethereum. + +Kuna aina mbili za unda-mpya zenye miundo tofauti ya usalama: + +- **Optimistic rollups**: huchukulia miamala kuwa halali kwa chaguo-msingi na huendesha hesabu tu, kupitia [**uthibitisho wa ulaghai**](/glossary/#fraud-proof), endapo kuna changamoto. [Zaidi kuhusu Optimistic rollups](/developers/docs/scaling/optimistic-rollups/). +- **Zero-knowledge rollups**: huendesha hesabu offchain na huwasilisha [**uthibitisho wa uhalali**](/glossary/#validity-proof) kwenye mnyororo. [Zaidi kuhusu zero-knowledge rollups](/developers/docs/scaling/zk-rollups/). + +#### Chaneli za hali {#channels} + +Chaneli za hali hutumia mikataba ya multisig kuwezesha washiriki kufanya miamala haraka na kwa uhuru offchain, kisha kukamilisha mwisho na Mtandao Mkuu. Hii inapunguza msongamano wa mtandao, ada, na ucheleweshaji. Aina mbili za chaneli kwa sasa ni chaneli za hali na chaneli za malipo. + +Jifunze zaidi kuhusu [chaneli za hali](/developers/docs/scaling/state-channels/). + +### Sidechains {#sidechains} + +Sidechain ni blockchain huru inayolingana na EVM ambayo inaendeshwa sambamba na Mainnet. Hizi zinapatana na Ethereum kupitia madaraja ya njia mbili na huendeshwa chini ya sheria zao walizochagua za makubaliano na vigezo vya kuzuia. + +Jifunze zaidi kuhusu [Sidechains](/developers/docs/scaling/sidechains/). + +### Njozi {#plasma} + +Mnyororo wa njozi ni mnyororo wa bloku tofauti ambao umetiwa nanga kwenye mnyororo mkuu wa Ethereum na hutumia uthibitisho wa ulaghai (kama [optimistic rollups](/developers/docs/scaling/optimistic-rollups/)) kusuluhisha mizozo. + +Jifunze zaidi kuhusu [Njozi](/developers/docs/scaling/plasma/). + +### Validium {#validium} + +Mnyororo wa Validium hutumia uthibitisho wa uhalali kama zero-knowledge rollups lakini data haihifadhiwi kwenye mnyororo mkuu wa safu ya 1 ya Ethereum. Hii inaweza kusababisha miamala 10k kwa sekunde kwa kila mnyororo wa Validium na minyororo mingi inaweza kuendeshwa sambamba. + +Jifunze zaidi kuhusu [Validium](/developers/docs/scaling/validium/). + +## Kwa nini suluhisho nyingi za uongezwaji zinahitajika? {#why-do-we-need-these} + +- Suluhisho nyingi zinaweza kusaidia kupunguza msongamano wa jumla kwenye sehemu yoyote ya mtandao na pia kuzuia sehemu moja ya kushindwa. +- Jumla ni kubwa kuliko jumla ya sehemu zake. Suluhisho tofauti zinaweza kuwepo na kufanya kazi kwa pamoja, kuruhusu athari ya kielelezo kwenye kasi ya muamala ya baadaye na upitishaji. +- Sio suluhisho zote zinahitaji kutumia kanuni ya makubaliano ya Ethereum moja kwa moja, na mbadala zinaweza kutoa manufaa ambayo vinginevyo yangekuwa magumu kupata. + +## Wewe ni mwanafunzi wa kuona zaidi? {#visual-learner} + + + +_Kumbuka maelezo katika video yanatumia neno "Safu ya 2" kurejelea suluhisho zote za uongezwaji za offchain, wakati sisi tunatofautisha "Safu ya 2" kama suluhisho la offchain ambalo hupata usalama wake kupitia makubaliano ya Mtandao Mkuu wa safu ya 1._ + + + +## Masomo zaidi {#further-reading} + +- [Ramani ya maendeleo ya Ethereum inayozingatia unda-mpya](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) _Vitalik Buterin_ +- [Uchanganuzi wa kisasa kuhusu suluhisho za uongezwaji za Safu ya 2 kwa Ethereum](https://www.l2beat.com/) +- [Kutathmini Suluhisho za Uongezwaji za safu ya 2 za Ethereum: Mfumo wa Kulinganisha](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) +- [Mwongozo Usio Kamili wa Unda-mpya](https://vitalik.eth.limo/general/2021/01/05/rollup.html) +- [ZK-Rollups zinazoendeshwa na Ethereum: Washindi wa Dunia](https://hackmd.io/@canti/rkUT0BD8K) +- [Optimistic Rollups dhidi ya ZK Rollups](https://limechain.tech/blog/optimistic-rollups-vs-zk-rollups/) +- [Kwa nini unda-mpya + vipande vya data ndio suluhisho pekee endelevu kwa uwezo mkubwa wa kuongezeka](https://polynya.medium.com/why-rollups-data-shards-are-the-only-sustainable-solution-for-high-scalability-c9aabd6fbb48) +- [Ni aina gani za Safu za 3 zina mantiki?](https://vitalik.eth.limo/general/2022/09/17/layer_3.html) +- [Upatikanaji wa Data au: Jinsi Unda-mpya zilivyojifunza Kuacha Kuhangaika na Kuipenda Ethereum](https://web.archive.org/web/20250515194659/https://web.archive.org/web/20241108192208/https://research.2077.xyz/data-availability-or-how-rollups-learned-to-stop-worrying-and-love-ethereum) +- [Mwongozo wa Vitendo kwa Unda-mpya za Ethereum](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/scaling/optimistic-rollups/index.md b/public/content/translations/sw/developers/docs/scaling/optimistic-rollups/index.md new file mode 100644 index 00000000000..c96f247fe9a --- /dev/null +++ b/public/content/translations/sw/developers/docs/scaling/optimistic-rollups/index.md @@ -0,0 +1,265 @@ +--- +title: Optimistic rollups +description: Utangulizi wa optimistic rollups—suluhisho la kuongeza ukubwa linalotumiwa na jamii ya Ethereum. +lang: sw +--- + +Optimistic rollups ni itifaki za safu ya 2 (L2) zilizoundwa kuongeza kasi ya usindikaji wa safu ya msingi ya Ethereum. Hupunguza hesabu kwenye mnyororo mkuu wa Ethereum kwa kushughulikia miamala nje ya mnyororo, na hivyo kutoa maboresho makubwa katika kasi za usindikaji. Tofauti na suluhisho zingine za kuongeza ukubwa, kama vile [sidechains](/developers/docs/scaling/sidechains/), optimistic rollups hupata usalama kutoka kwa Mtandao Mkuu kwa kuchapisha matokeo ya muamala kwenye mnyororo, au [minyororo ya plasma](/developers/docs/scaling/plasma/), ambayo pia huthibitisha miamala kwenye Ethereum kwa kutumia thibitisho za ulaghai, lakini huhifadhi data ya muamala mahali pengine. + +Kwa kuwa hesabu ni sehemu ya polepole na ya gharama kubwa ya kutumia Ethereum, optimistic rollups zinaweza kutoa maboresho ya hadi mara 10-100 katika kuongeza ukubwa. Optimistic rollups pia huandika miamala kwa Ethereum kama `calldata` au katika [blobs](/roadmap/danksharding/), na hivyo kupunguza gharama za gesi kwa watumiaji. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa umesoma na kuelewa kurasa zetu kuhusu [Uongezwaji wa Ethereum](/developers/docs/scaling/) na [safu ya 2](/layer-2/). + +## Optimistic rollup ni nini? {#what-is-an-optimistic-rollup} + +Optimistic rollup ni mbinu ya kuongeza ukubwa wa Ethereum ambayo inahusisha kuhamisha hesabu na hifadhi ya hali nje ya mnyororo. Optimistic rollups hutekeleza miamala nje ya Ethereum, lakini hutuma data ya muamala kwa Mtandao Mkuu kama `calldata` au katika [blobs](/roadmap/danksharding/). + +Waendeshaji wa optimistic rollup hukusanya miamala mingi ya nje ya mnyororo pamoja katika makundi makubwa kabla ya kuiwasilisha kwa Ethereum. Mbinu hii huwezesha kueneza gharama zisizobadilika kwa miamala mingi katika kila kundi, na hivyo kupunguza ada kwa watumiaji wa mwisho. Optimistic rollups pia hutumia mbinu za ukandamizaji ili kupunguza kiasi cha data inayotumwa kwenye Ethereum. + +Uboreshaji wa matumaini unachukuliwa kuwa "wenye matumaini" kwa sababu wanadhania kwamba miamala ya nje ya mtandao ni halali na haichapishi uthibitisho wa uhalali wa bechi za miamala zilizochapishwa kwenye mnyororo. Hii hutenganisha optimistic rollups na [zero-knowledge rollups](/developers/docs/scaling/zk-rollups) ambazo huchapisha [thibitisho za uhalali](/glossary/#validity-proof) za kriptografia kwa miamala ya nje ya mnyororo. + +Badala yake, optimistic rollups hutegemea mpango wa kuthibitisha ulaghai ili kugundua visa ambapo miamala haijahesabiwa kwa usahihi. Baada ya kundi la rollup kuwasilishwa kwenye Ethereum, kuna muda maalum (unaoitwa kipindi cha changamoto) ambapo mtu yeyote anaweza kupinga matokeo ya muamala wa rollup kwa kukokotoa [thibitisho la ulaghai](/glossary/#fraud-proof). + +Ikiwa thibitisho la ulaghai litafaulu, itifaki ya rollup hutekeleza tena muamala (miamala) na kusasisha hali ya rollup ipasavyo. Athari nyingine ya uthibitisho wa ulaghai uliofaulu ni kwamba mfuataji wa mpangilio anayehusika na kujumuisha muamala uliotekelezwa vibaya kwenye kizuizi hupokea adhabu. + +Ikiwa kundi la makusanyoa litasalia bila kupingwa (yaani, miamala yote itatekelezwa ipasavyo) baada ya kipindi cha changamoto kuisha, itachukuliwa kuwa halali na kukubaliwa kwenye Ethereum. Wengine wanaweza kuendelea kujenga juu ya kizuizi ambacho hakijathibitishwa, lakini kwa tahadhari: matokeo ya muamala yatatenguliwa ikiwa kulingana na muamala usio sahihi uliochapishwa hapo awali. + +## Je, optimistic rollups huingilianaje na Ethereum? {#optimistic-rollups-and-Ethereum} + +Optimistic rollups ni [suluhisho za kuongeza ukubwa nje ya mnyororo](/developers/docs/scaling/#offchain-scaling) zilizoundwa ili kufanya kazi juu ya Ethereum. Kila optimistic rollup husimamiwa na seti ya mikataba-erevu iliyotumwa kwenye mtandao wa Ethereum. Usambazaji wenye matumaini huchakata miamala kutoka kwa mnyororo mkuu wa Ethereum, lakini miamala ya baada ya nje ya mnyororo (kwa makundi) hadi kwenye mkataba wa kukuza mtandao wa mnyororo. Kama mnyororo wa bloku wa Ethereum, rekodi hii ya muamala haibadiliki na huunda "mnyororo wa optimistic rollup." + +Muundo wa optimistic rollup unajumuisha sehemu zifuatazo: + +**Mikataba ya kwenye mnyororo**: Uendeshaji wa optimistic rollup unadhibitiwa na mikataba-erevu inayoendeshwa kwenye Ethereum. Hii inajumuisha mikataba inayohifadhi bloku za rollup, kufuatilia sasisho za hali kwenye rollup, na kufuatilia amana za watumiaji. Kwa maana hii, Ethereum hutumika kama safu ya msingi au "safu ya 1" kwa optimistic rollups. + +**Mashine halisi ya nje ya mnyororo (VM)**: Ingawa mikataba inayosimamia itifaki ya optimistic rollup inaendeshwa kwenye Ethereum, itifaki ya rollup hufanya hesabu na hifadhi ya hali kwenye mashine nyingine halisi tofauti na [Mashine Halisi ya Ethereum](/developers/docs/evm/). Nje ya mnyrooro VM ni mahali ambapo maombi mubashara na mabadiliko ya hali yanatekelezwa; hutumika kama safu ya juu au "safu ya 2" kwa safu ya matumaini. + +Kwa vile makusanyo ya matumaini yameundwa ili kuendesha programu ama zilizoandikwa au kukusanywa kwa ajili ya EVM, VM ya nje ya mnyororo hujumuisha vipimo vingi vya muundo wa EVM. Zaidi ya hayo, thibitisho za ulaghai zilizokokotwa kwenye mnyororo huuruhusu mtandao wa Ethereum kutekeleza uhalali wa mabadiliko ya hali yaliyokokotwa kwenye VM ya nje ya mnyororo. + +Mipangilio yenye matumaini inafafanuliwa kuwa 'suluhisho mseto za kuongeza uwezu wa mtandao ' kwa sababu, ingawa zipo kama itifaki tofauti, sifa zao za usalama zinatokana na Ethereum. Miongoni mwa mambo mengine, Ethereum inahakikisha usahihi wa hesabu ya nje ya mnyororo ya makusanyo na upatikanaji wa data nyuma ya hesabu. Hii inafanya optimistic rollups kuwa salama zaidi kuliko itifaki za uongezaji za nje ya mnyororo (k.m., [sidechains](/developers/docs/scaling/sidechains/)) ambazo hazitegemei Ethereum kwa usalama. + +Optimistic rollups hutegemea itifaki kuu ya Ethereum kwa yafuatayo: + +### Upatikanaji wa data {#data-availability} + +Kama ilivyoelezwa, optimistic rollups huchapisha data ya muamala kwenye Ethereum kama `calldata` au [blobs](/roadmap/danksharding/). Kwa kuwa utekelezaji wa mnyororo wa rollup unategemea miamala iliyowasilishwa, mtu yeyote anaweza kutumia taarifa hii—iliyotiwa nanga kwenye safu ya msingi ya Ethereum—kutekeleza hali ya rollup na kuthibitisha usahihi wa mabadiliko ya hali. + +Upatikanaji wa data ni muhimu sana kwa sababu bila ufikiaji wa data ya hali, wapinzani hawawezi kuunda thibitisho za ulaghai ili kupinga utendakazi batili wa rollup. Huku Ethereum ikitoa upatikanaji wa data, hatari ya waendeshaji orodha kuepuka vitendo viovu (k.m., kuwasilisha vizuizi batili) hupunguzwa. + +### Ukinzani dhidi ya udhibiti {#censorship-resistance} + +Optimistic rollups pia hutegemea Ethereum kwa ajili ya ukinzani dhidi ya udhibiti. Katika optimistic rollup, huluki ya kati (opereta) inawajibika kwa kuchakata miamala na kuwasilisha bloku za rollup kwa Ethereum. Hii ina baadhi ya athari: + +- Waendeshaji wa rollup wanaweza kudhibiti watumiaji kwa kutokuwa mtandaoni kabisa, au kwa kukataa kutoa bloku zinazojumuisha miamala fulani ndani yake. + +- Waendeshaji wa makusanyo wanaweza kuzuia watumiaji kutoa pesa zilizowekwa katika mkataba wa uwasilishaji kwa kushikilia data ya majimbo muhimu kwa uthibitisho wa umiliki wa Merkle. Data ya jimbo iliyozuiliwa inaweza pia kuficha hali ya uwasilishaji kutoka kwa watumiaji na kuwazuia kuingiliana na ukusanyaji. + +Mkusanyo yenye matumaini hutatua tatizo hili kwa kuwalazimisha waendeshaji kuchapisha data inayohusiana na maboresho ya jimbo kwenye Ethereum. Kuchapisha data ya rollup kwenye mnyororo kuna faida zifuatazo: + +- Ikiwa opereta wa optimistic rollup ataenda nje ya mtandao au ataacha kutoa makundi ya miamala, nodi nyingine inaweza kutumia data inayopatikana ili kuzalisha upya hali ya mwisho ya rollup na kuendelea na uzalishaji wa bloku. + +- Watumiaji wanaweza kutumia data ya muamala kuunda thibitisho za Merkle zinazothibitisha umiliki wa fedha na kutoa mali zao kutoka kwenye rollup. + +- Watumiaji wanaweza pia kuwasilisha miamala yao kwenye L1 badala ya kwa mratibu wa mfuatano, ambapo mratibu wa mfuatano atalazimika kujumuisha muamala huo ndani ya muda maalum ili kuendelea kutoa bloku halali. + +### Marekebisho {#settlement} + +Jukumu lingine ambalo Ethereum inacheza katika muktadha wa optimistic rollups ni lile la safu ya suluhu. Safu ya suluhu hutia nanga mfumo mzima wa mnyororo wa bloku, huanzisha usalama, na hutoa umalizikaji wenye lengo ikiwa mzozo utatokea kwenye mnyororo mwingine (optimistic rollups katika kesi hii) unaohitaji usuluhishi. + +Mtandao Mkuu wa Ethereum hutoa kitovu kwa optimistic rollups kuthibitisha thibitisho za ulaghai na kutatua mizozo. Zaidi ya hayo, miamala inayofanywa kwenye rollup inakuwa ya mwisho _baada ya_ bloku ya rollup kukubaliwa kwenye Ethereum. Mara tu muamala wa rollup unapowekwa kwenye safu ya msingi ya Ethereum, hauwezi kurejeshwa nyuma (isipokuwa katika kisa kisichowezekana kabisa cha upangaji upya wa mnyororo). + +## Je, optimistic rollups hufanyaje kazi? {#how-optimistic-rollups-work} + +### Utekelezaji na mkusanyiko wa miamala {#transaction-execution-and-aggregation} + +Watumiaji huwasilisha miamala kwa “waendeshaji”, ambao ni nodi zinazohusika na kuchakata miamala kwenye optimistic rollup. Pia anajulikana kama “mthibitishaji” au “mkusanyaji”, mwendeshaji hukusanya miamala, hubana data ya msingi, na kuchapisha bloku kwenye Ethereum. + +Ingawa mtu yeyote anaweza kuwa mthibitishaji, wathibitishaji wa optimistic rollup lazima watoe dhamana kabla ya kutoa bloku, sawa na [mfumo wa uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/). Dhamana hii inaweza kupunguzwa ikiwa mthibitishaji atachapisha bloku batili au kujenga juu ya bloku ya zamani lakini batili (hata kama bloku yake ni halali). Kwa njia hii optimistic rollups hutumia motisha za kiuchumi za kripto kuhakikisha wathibitishaji wanatenda kwa uaminifu. + +Wathibitishaji wengine kwenye mnyororo wa optimistic rollup wanatarajiwa kutekeleza miamala iliyowasilishwa kwa kutumia nakala yao ya hali ya rollup. Ikiwa hali ya mwisho ya mthibitishaji ni tofauti na hali iliyopendekezwa na opereta, wanaweza kuanzisha changamoto na kukokotoa ushahidi wa ulaghai. + +Baadhi ya ukusanyaji wenye matumaini yanaweza kuacha mfumo wa kiidhinishaji usio na ruhusa na kutumia "kifuatiliaji" kimoja kutekeleza mnyororo. Kama vile kihalalishaji, kiratibu huchakata miamala, hutengeneza vizuizi, na kuwasilisha miamala ya kusambaza kwa mnyororo wa L1 (Ethereum). + +Mfuatano ni tofauti na mwendeshaji wa kawaida wa kusambaza kwa sababu wana udhibiti mkubwa zaidi wa upangaji wa miamala. Pia, mfuatano wa mpangilio una ufikiaji wa kipaumbele kwa mnyororo wa kusambaza na ndiyo huluki pekee iliyoidhinishwa kuwasilisha miamala kwa mkataba wa ndani ya mnyororo. Miamala kutoka kwa nodi zisizo za mpangilio au watumiaji wa kawaida hupangwa tu kwenye kisanduku pokezi tofauti hadi kipanga mpangilio kijumuishe kwenye kundi jipya. + +#### Kuwasilisha bloku za rollup kwa Ethereum {#submitting-blocks-to-ethereum} + +Kama ilivyotajwa, mwendeshaji wa kusanyo la matumaini hukusanya miamala ya nje ya mnyororo kwenye kundi na kuituma kwa Ethereum kwa uthibitishaji. Mchakato huu unahusisha kubana data inayohusiana na muamala na kuichapisha kwenye Ethereum kama `calldata` au kwa blobs. + +`calldata` ni eneo lisiloweza kurekebishwa, lisilo la kudumu katika mkataba-erevu ambalo hufanya kazi kwa kiasi kikubwa kama [kumbukumbu](/developers/docs/smart-contracts/anatomy/#memory). Wakati `calldata` hudumu kwenye mnyororo kama sehemu ya [kumbukumbu za historia](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs) za mnyororo wa bloku, haihifadhiwi kama sehemu ya hali ya Ethereum. Kwa sababu `calldata` haigusi sehemu yoyote ya hali ya Ethereum, ni nafuu zaidi kuliko hali kwa kuhifadhi data kwenye mnyororo. + +Neno msingi `calldata` pia hutumiwa katika Solidity kupitisha hoja kwa kazi ya mkataba-erevu wakati wa utekelezaji. `calldata` hubainisha kazi inayoitwa wakati wa muamala na hushikilia ingizo kwa kazi hiyo katika mfumo wa mfuatano holela wa baiti. + +Katika muktadha wa optimistic rollups, `calldata` hutumiwa kutuma data ya muamala iliyobanwa kwa mkataba wa kwenye mnyororo. Mtoa huduma wa kusambaza huongeza awamu mpya kwa kuita kitendaji kazi kinachohitajika katika mkataba wa kusambaza na kupitisha data iliyobanwa kama hoja za utendaji kazi. Kutumia `calldata` hupunguza ada za mtumiaji kwa kuwa gharama nyingi ambazo rollups huingia hutokana na kuhifadhi data kwenye mnyororo. + +Huu ni [mfano](https://eth.blockscout.com/tx/0x9102bfce17c58b5fc1c974c24b6bb7a924fb5fbd7c4cd2f675911c27422a5591) wa uwasilishaji wa kundi la rollup kuonyesha jinsi dhana hii inavyofanya kazi. Mratibu wa mfuatano alianzisha mbinu ya `appendSequencerBatch()` na kupitisha data ya muamala iliyobanwa kama ingizo kwa kutumia `calldata`. + +Baadhi ya rollups sasa hutumia blobs kuchapisha makundi ya miamala kwenye Ethereum. + +Blobs hazirekebishiki na si za kudumu (kama vile `calldata`) lakini hupunguzwa kutoka kwenye historia baada ya takriban siku 18. Kwa maelezo zaidi kuhusu blobs, angalia [Danksharding](/roadmap/danksharding). + +### Ahadi za hali {#state-commitments} + +Wakati wowote, hali ya optimistic rollup (akaunti, salio, msimbo wa mkataba, n.k.) hupangwa kama [Mti wa Merkle](/whitepaper/#merkle-trees) unaoitwa “mti wa hali”. Mzizi wa mti huu wa Merkle (mzizi wa jimbo), ambao unarejelea hali ya hivi punde ya upandaji, huharakishwa na kuhifadhiwa katika mkataba wa kuorodhesha. Kila mpito wa jimbo kwenye mnyoro huzalisha hali mpya ya kusambaza, ambayo mtoa huduma hujitolea kwa kukokotoa mzizi wa jimbo jipya. + +Opereta anahitajika kuwasilisha mizizi ya zamani ya hali na mizizi mipya ya hali anapochapisha makundi. Ikiwa mzizi wa hali ya zamani unalingana na mzizi wa jimbo uliopo katika mkataba wa ndani ya mnyororo, mwisho hutupwa na kubadilishwa na mzizi wa jimbo jipya. + +Opereta wa rollup pia anahitajika kuweka mzizi wa Merkle kwa kundi la muamala lenyewe. Hii inaruhusu mtu yeyote kuthibitisha ujumuishwaji wa muamala katika kundi (kwenye L1) kwa kuwasilisha [uthibitisho wa Merkle](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). + +Ahadi za hali, hasa mizizi ya hali, ni muhimu kwa kuthibitisha usahihi wa mabadiliko ya hali katika optimistic rollup. Mkataba wa ugawaji hukubali mizizi ya jimbo jipya kutoka kwa waendeshaji mara tu baada ya kuchapishwa, lakini inaweza baadaye kufuta mizizi batili ya hali ili kurejesha uwasilishaji katika hali yake sahihi. + +### Uthibitishaji wa ulaghai {#fraud-proving} + +Kama ilivyoelezwa, optimistic rollups huruhusu mtu yeyote kuchapisha bloku bila kutoa thibitisho za uhalali. Hata hivyo, ili kuhakikisha kuwa mnyoror unasalia kuwa salama, uwasilishaji wa matumaini hubainisha muda ambao mtu yeyote anaweza kupinga mabadiliko ya jimbo. Hivyo, bloku za rollup huitwa “madai” kwani mtu yeyote anaweza kupinga uhalali wake. + +Ikiwa mtu atapinga dai, basi itifaki ya rollup itaanzisha ukokotoaji wa ushahidi wa ulaghai. Kila aina ya ushahidi wa ulaghai ni wa mwingiliano—mtu lazima achapishe dai kabla ya mtu mwingine kulipinga. Tofauti iko katika raundi ngapi za mwingiliano zinahitajika ili kukokotoa ushahidi wa ulaghai. + +Mifumo ya uthibitishaji wa mwingiliano wa raundi moja hurudia miamala iliyopingwa kwenye L1 ili kugundua madai batili. Itifaki ya ujumuishaji huiga utekelezaji upya wa miamala iliyobishaniwa kwenye L1 (Ethereum) kwa kutumia mkataba wa kithibitishaji, huku hali iliyokokotwa ikibainisha ni nani atashinda shindano hilo. Ikiwa dai la mpinzani kuhusu hali sahihi ya uwasilishaji ni sahihi, mwendeshaji ataadhibiwa kwa kukatwa dhamana yake. + +Hata hivyo, kutekeleza tena miamala kwenye L1 ili kugundua ulaghai kunahitaji uchapishaji wa ahadi za jimbo kwa miamala ya mtu binafsi na kuongeza orodha za data lazima zichapishwe kwenye mnyororo. Kurudia miamala pia husababisha gharama kubwa za gesi. Kwa sababu hizi, uboreshaji wa matumaini unabadilika hadi uthibitishaji wa mwingiliano wa pande nyingi, ambao unafikia lengo sawa (yaani, kugundua utendakazi batili) kwa ufanisi zaidi. + +#### Uthibitishaji wa mwingiliano wa raundi nyingi {#multi-round-interactive-proving} + +Uthibitishaji wa mwingiliano wa pande nyingi unahusisha itifaki ya kurudi na kwenda kati ya mdai na mpinzani inayosimamiwa na mkataba wa kithibitishaji cha L1, ambao hatimaye huamua mhusika mwongo. Baada ya nodi ya L2 kupinga dai, mdai anahitajika kugawanya dai lililopingwa katika nusu mbili sawa. Kila dai la kibinafsi katika kesi hii litakuwa na hatua nyingi za ukokotoaji kama lile lingine. + +Mpinzani atachagua dai gani anataka kupinga. Mchakato wa kugawanya (unaoitwa “itifaki ya sehemu mbili”) unaendelea hadi pande zote mbili zinapinga dai kuhusu hatua _moja_ ya utekelezaji. Katika hatua hii, mkataba wa L1 utatatua mzozo kwa kutathmini maagizo (na matokeo yake) ili kumkamata mhusika mdanganyifu. + +Mdai anahitajika kutoa “uthibitisho wa hatua moja” unaothibitisha uhalali wa ukokotoaji wa hatua moja uliopingwa. Ikiwa mdai atashindwa kutoa uthibitisho wa hatua moja, au mthibitishaji wa L1 akiona uthibitisho huo ni batili, wanapoteza changamoto. + +Baadhi ya dokezo kuhusu aina hii ya ushahidi wa ulaghai: + +1. Uthibitishaji wa ulaghai wa mwingiliano wa raundi nyingi unachukuliwa kuwa na ufanisi kwa sababu unapunguza kazi ambayo mnyororo wa L1 lazima ufanye katika usuluhishi wa mizozo. Badala ya kurudia muamala mzima, mnyororo wa L1 unahitaji tu kutekeleza tena hatua moja katika utekelezaji wa rollup. + +2. Itifaki za sehemu mbili hupunguza kiasi cha data iliyochapishwa kwenye mnyororo (hakuna haja ya kuchapisha ahadi za hali kwa kila muamala). Pia, miamala ya optimistic rollup haibanwi na kikomo cha gesi cha Ethereum. Kinyume chake, optimistic rollups zinazotekeleza tena miamala lazima zihakikishe muamala wa L2 una kikomo cha chini cha gesi ili kuiga utekelezaji wake ndani ya muamala mmoja wa Ethereum. + +3. Sehemu ya dhamana ya mdai mwenye nia mbaya hupewa mpinzani, huku sehemu nyingine ikichomwa. Uchomaji huo huzuia kula njama miongoni mwa wathibitishaji; ikiwa wathibitishaji wawili watakula njama kuanzisha changamoto za uwongo, bado watapoteza sehemu kubwa ya hisa yote. + +4. Uthibitishaji wa mwingiliano wa raundi nyingi huhitaji pande zote mbili (mdai na mpinzani) kuchukua hatua ndani ya muda maalum. Kushindwa kuchukua hatua kabla ya muda uliopangwa kuisha husababisha mhusika aliyeshindwa kupoteza changamoto. + +#### Kwa nini thibitisho za ulaghai ni muhimu kwa optimistic rollups {#fraud-proof-benefits} + +Thibitisho za ulaghai ni muhimu kwa sababu huwezesha _umalizikaji usio na uaminifu_ katika optimistic rollups. Umalizikaji usio na uaminifu ni ubora wa optimistic rollups unaohakikisha kwamba muamala—mradi tu ni halali—hatimaye utathibitishwa. + +Nodi zenye nia mbaya zinaweza kujaribu kuchelewesha uthibitisho wa bloku halali ya rollup kwa kuanzisha changamoto za uwongo. Hata hivyo, thibitisho za ulaghai hatimaye zitathibitisha uhalali wa bloku ya rollup na kusababisha ithibitishwe. + +Hii pia inahusiana na sifa nyingine ya usalama ya optimistic rollups: uhalali wa mnyororo unategemea kuwepo kwa nodi _moja_ ya uaminifu. Nodi ya uaminifu inaweza kuendeleza mnyororo kwa usahihi kwa kuchapisha madai halali au kupinga madai batili. Vyovyote iwavyo, nodi zenye nia mbaya zinazoingia kwenye mizozo na nodi ya uaminifu zitapoteza hisa zao wakati wa mchakato wa uthibitishaji wa ulaghai. + +### Uwezo wa kushirikiana wa L1/L2 {#l1-l2-interoperability} + +Ukusanyaji wenye matumaini imeundwa kwa ajili ya ushirikiano na Ethereum Mtandao mkuu na kuruhusu watumiaji kupitisha ujumbe na data kiholela kati ya L1 na L2. Pia zinaoana na EVM, kwa hivyo unaweza kuhamisha [mfumo mtawanyo wa kimamlaka](/developers/docs/dapps/) zilizopo kwenda optimistic rollups au kuunda mfumo mtawanyo wa kimamlaka mpya kwa kutumia zana za maendeleo za Ethereum. + +#### 1. Uhamisho wa mali {#asset-movement} + +##### Kuingia kwenye rollup + +Ili kutumia optimistic rollup, watumiaji huweka ETH, tokeni za ERC-20, na mali zingine zinazokubalika katika mkataba wa [daraja](/developers/docs/bridges/) la rollup kwenye L1. Mkataba wa daraja utarejesha muamala hadi L2, ambapo kiasi sawa cha vipengele hutungwa na kutumwa kwa anwani iliyochaguliwa na mtumiaji kwenye orodha ya matumaini. + +Miamala inayotokana na mtumiaji (kama vile amana ya L1 > L2) kwa kawaida huwekwa kwenye foleni hadi mratibu wa mfuatano atakapoziwasilisha tena kwenye mkataba wa rollup. Hata hivyo, ili kuhifadhi upinzani wa udhibiti, uwasilishaji wenye matumaini huruhusu watumiaji kuwasilisha muamala moja kwa moja kwa mkataba wa uongezaji wa mtandao ikiwa umecheleweshwa kupita muda wa juu unaoruhusiwa. + +Baadhi ya optimistic rollups huchukua mbinu ya moja kwa moja zaidi kuzuia waratibu wa mfuatano kudhibiti watumiaji. Hapa, kizuizi kinafafanuliwa na miamala yote iliyowasilishwa kwa mkataba wa L1 tangu kizuizi cha awali (k.m., amana) pamoja na miamala iliyochakatwa kwenye mnyororo wa usambazaji. Ikiwa mfuatano utapuuza shughuli ya L1, itachapisha (inawezekana) mzizi wa hali mbaya; kwa hivyo, wafuataji ufuatano hawawezi kuchelewesha jumbe zinazozalishwa na mtumiaji mara tu zitakapowekwa kwenye L1. + +##### Kutoka kwenye rollup + +Kutoa pesa kutoka kwa optimistic rollup kwenda Ethereum ni ngumu zaidi kutokana na mpango wa uthibitishaji wa ulaghai. Ikiwa mtumiaji ataanzisha muamala wa L2 > L1 ili kutoa fedha zilizowekwa kwenye L1, lazima asubiri hadi kipindi cha changamoto—kinachodumu takriban siku saba—kiishe. Hata hivyo, mchakato wa kutoa pesa wenyewe ni rahisi. + +Baada ya ombi la uondoaji kuanzishwa kwenye utayarishaji wa L2, muamala hujumuishwa kwenye kundi linalofuata, huku mali za mtumiaji kwenye uwekaji zikiteketezwa. Pindi kundi linapochapishwa kwenye Ethereum, mtumiaji anaweza kukokotoa uthibitisho wa Merkle unaothibitisha kujumuishwa kwa muamala wao wa kuondoka kwenye kizuizi. Kisha ni suala la kusubiri kupitia kipindi cha kuchelewa ili kukamilisha shughuli kwenye L1 na kutoa fedha kwa Mtandao mkuu. + +Ili kuepuka kusubiri wiki moja kabla ya kutoa fedha kwenda Ethereum, watumiaji wa optimistic rollup wanaweza kutumia **mtoa huduma wa ukwasi** (LP). Mtoa huduma wa ukwasi huchukua umiliki wa uondoaji unaosubiri wa L2 na humlipa mtumiaji kwenye L1 (kwa kubadilishana na ada). + +Watoa huduma za ukwasi wanaweza kuangalia uhalali wa ombi la mtumiaji la kujiondoa (kwa kutekeleza mnyororo wenyewe) kabla ya kutoa pesa. Kwa njia hii wanakuwa na uhakika kwamba muamala utathibitishwa hatimaye (yaani, umalizikaji usio na uaminifu). + +#### 2. Upatanifu wa EVM {#evm-compatibility} + +Kwa wasanidi programu, faida ya optimistic rollups ni utangamano wao—au, bora zaidi, usawa—na [Mashine Halisi ya Ethereum (EVM)](/developers/docs/evm/). Rollups zinazoendana na EVM zinatii masharti katika [Karatasi ya Njano ya Ethereum](https://ethereum.github.io/yellowpaper/paper.pdf) na kuunga mkono EVM katika kiwango cha bytecode. + +Utangamano wa EVM katika optimistic rollups una faida zifuatazo: + +i. Wasanifu programu wanaweza kuhamisha mkataba mahiri zilizopo kwenye Ethereum hadi kwa minyororo ya kusambaza yenye matumaini bila kulazimika kurekebisha misingi ya msimbo kwa upana. Hii inaweza kuokoa muda wa timu za maendeleo wakati wa kupeleka mikataba-erevu ya Ethereum kwenye L2. + +ii. Wasanidi programu na timu za mradi zinazotumia optimistic rollups wanaweza kutumia miundombinu ya Ethereum. Hii inajumuisha lugha za programu, maktaba za msimbo, zana za majaribio, programu za wateja, miundombinu ya upelekaji, na kadhalika. + +Kutumia zana zilizopo ni muhimu kwa sababu zana hizi zimekaguliwa kwa kina, zimerekebishwa, na kuboreshwa kwa miaka mingi. Pia huondoa hitaji la wasanidi wa Ethereum kujifunza jinsi ya kujenga na rundo jipya kabisa la maendeleo. + +#### 3. Wito wa mkataba wa minyororo-tofauti {#cross-chain-contract-calls} + +Watumiaji (akaunti zinazomilikiwa na kampuni ya nje) huingiliana na mikataba ya L2 kwa kuwasilisha muamala kwa mkataba wa kusajili au kuwa na mfuatano au kithibitishaji kuwafanyia hivyo. Machapisho yenye matumaini pia huruhusu akaunti za mikataba kwenye Ethereum kuingiliana na mikataba ya L2 kwa kutumia mikataba ya kuweka madaraja kutuma ujumbe na kupitisha data kati ya L1 na L2. Hii inamaanisha kuwa unaweza kupanga mkataba wa L1 kwenye Ethereum mtandao mkuu ili kuomba utendaji kazi wa mikataba kwenye uwasilishaji wa matumaini wa L2. + +Wito wa mkataba wa minyororo-tofauti hufanyika bila mpangilio maalum—ikimaanisha wito huanzishwa kwanza, kisha hutekelezwa baadaye. Hii ni tofauti na wito kati ya mikataba miwili kwenye Ethereum, ambapo wito hutoa matokeo mara moja. + +Mfano wa wito wa mkataba wa minyororo-tofauti ni uwekaji wa tokeni ulioelezewa hapo awali. Mkataba kwenye L1 huondoa tokeni za mtumiaji na kutuma ujumbe kwa mkataba wa L2 uliooanishwa ili kutengeneza kiasi sawa cha tokeni kwenye ukusanyaji. + +Kwa vile wito wa ujumbe wa minyororo-tofauti husababisha utekelezaji wa mkataba, mtumaji kwa kawaida huhitajika kulipia [gharama za gesi](/developers/docs/gas/) kwa ajili ya ukokotoaji. Inashauriwa kuweka kikomo cha juu cha gesi ili kuzuia muamala ushindwe kwenye mnyororo lengwa. Hali ya kuweka daraja la ishara ni mfano mzuri; ikiwa upande wa L1 wa shughuli (kuweka ishara) hufanya kazi, lakini upande wa L2 (kutengeneza ishara mpya) hushindwa kutokana na gharama ya muamala ya chini, amana inakuwa isiyoweza kurejeshwa. + +Hatimaye, tunapaswa kutambua kwamba wito wa ujumbe wa L2 > L1 kati ya mikataba unahitaji kuzingatia ucheleweshaji (wito wa L1 > L2 kwa kawaida hutekelezwa baada ya dakika chache). Hii ni kwa sababu ujumbe uliotumwa kwa Mtandao Mkuu kutoka kwa optimistic rollup hauwezi kutekelezwa hadi dirisha la changamoto liishe. + +## Ada za optimistic rollup hufanyaje kazi? {#how-do-optimistic-rollup-fees-work} + +Optimistic rollups hutumia mpango wa ada ya gesi, sawa na Ethereum, kuashiria ni kiasi gani watumiaji hulipa kwa kila muamala. Ada zinazotozwa kwenye optimistic rollups hutegemea vipengele vifuatavyo: + +1. **Uandishi wa hali**: Optimistic rollups huchapisha data ya muamala na vichwa vya bloku (vinavyojumuisha hashi ya kichwa cha bloku iliyopita, mzizi wa hali, mzizi wa kundi) kwa Ethereum kama `blob`, au "binary large object". [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) ilianzisha suluhisho la gharama nafuu la kujumuisha data kwenye mnyororo. `blob` ni sehemu mpya ya muamala ambayo inaruhusu rollups kuchapisha data ya mabadiliko ya hali iliyobanwa kwa Ethereum L1. Tofauti na `calldata`, ambayo hubaki kwenye mnyororo kabisa, blobs ni za muda mfupi na zinaweza kupunguzwa kutoka kwa wateja baada ya [epochs 4096](https://github.com/ethereum/consensus-specs/blob/81f3ea8322aff6b9fb15132d050f8f98b16bdba4/configs/mainnet.yaml#L147) (takriban siku 18). Kwa kutumia blobs kuchapisha makundi ya miamala iliyobanwa, optimistic rollups zinaweza kupunguza kwa kiasi kikubwa gharama ya kuandika miamala kwenye L1. + +2. **Gesi ya blob iliyotumika**: Miamala inayobeba blob hutumia utaratibu wa ada unaobadilika sawa na ule ulioletwa na [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559). Ada ya gesi kwa miamala ya aina-3 inazingatia ada ya msingi ya blobs, ambayo huamuliwa na mtandao kulingana na mahitaji ya nafasi ya blob na matumizi ya nafasi ya blob ya muamala unaotumwa. + +3. **Ada za opereta wa L2**: Hiki ni kiasi kinacholipwa kwa nodi za rollup kama fidia kwa gharama za ukokotoaji zinazotumika katika kuchakata miamala, sawa na ada za gesi kwenye Ethereum. Nodi za rollup hutoza ada za chini za muamala kwa kuwa L2s zina uwezo wa juu wa uchakataji na hazikabiliwi na msongamano wa mtandao unaowalazimisha wathibitishaji kwenye Ethereum kutoa kipaumbele kwa miamala yenye ada za juu. + +Optimistic rollups hutumia mifumo kadhaa kupunguza ada kwa watumiaji, ikiwa ni pamoja na kuweka miamala katika makundi na kubana `calldata` ili kupunguza gharama za uchapishaji wa data. Unaweza kuangalia [kifuatiliaji cha ada za L2](https://l2fees.info/) kwa muhtasari wa wakati halisi wa gharama ya kutumia optimistic rollups zinazotegemea Ethereum. + +## Je, optimistic rollups huongezaje ukubwa wa Ethereum? {#scaling-ethereum-with-optimistic-rollups} + +Kama ilivyoelezwa, optimistic rollups huchapisha data ya muamala iliyobanwa kwenye Ethereum ili kuhakikisha upatikanaji wa data. Uwezo wa kubana data iliyochapishwa kwenye mnyororo ni muhimu ili kuongeza upitishaji kwenye Ethereum kwa kutumia optimistic rollups. + +Mnyororo mkuu wa Ethereum huweka vikomo vya kiasi cha data ambacho bloku zinaweza kushikilia, kinachopimwa kwa vitengo vya gesi ([ukubwa wa wastani wa bloku](/developers/docs/blocks/#block-size) ni gesi milioni 15). Ingawa hii inazuia kiasi cha gesi ambacho kila muamala unaweza kutumia, inamaanisha pia tunaweza kuongeza miamala inayochakatwa kwa kila bloku kwa kupunguza data inayohusiana na muamala—na hivyo kuboresha moja kwa moja uongezaji. + +Optimistic rollups hutumia mbinu kadhaa kufikia ubanaji wa data ya muamala na kuboresha viwango vya TPS. Kwa mfano, [makala](https://vitalik.eth.limo/general/2021/01/05/rollup.html) hii inalinganisha data ambayo muamala wa msingi wa mtumiaji (kutuma ether) huzalisha kwenye Mtandao Mkuu dhidi ya kiasi cha data ambacho muamala huo huo huzalisha kwenye rollup: + +| Kigezo | Ethereum (L1) | Rollup (L2) | +| ----------- | ---------------------------------------------------- | ------------------------------------ | +| Nonce | ~3 | 0 | +| Bei ya gesi | ~8 | 0-0.5 | +| Gesi | 3 | 0-0.5 | +| Kwa | 21 | 4 | +| Thamani | 9 | ~3 | +| Sahihi | ~68 (2 + 33 + 33) | ~0.5 | +| Kutoka | 0 (imerejeshwa kutoka kwa sig) | 4 | +| **Jumla** | **~baiti 112** | **~baiti 12** | + +Kufanya hesabu zisizo sahihi kwenye takwimu hizi kunaweza kusaidia kuonyesha uboreshaji wa uwezo wa kupanuka unaotolewa na uwasilishaji wa matumaini: + +1. Ukubwa unaolengwa kwa kila bloku ni gesi milioni 15 na inagharimu gesi 16 kuthibitisha baiti moja ya data. Kugawa ukubwa wa wastani wa bloku kwa gesi 16 (15,000,000/16) kunaonyesha kuwa bloku ya wastani inaweza kushikilia **baiti 937,500 za data**. +2. Ikiwa muamala wa msingi wa rollup unatumia baiti 12, basi bloku ya wastani ya Ethereum inaweza kuchakata **miamala 78,125 ya rollup** (937,500/12) au **makundi 39 ya rollup** (ikiwa kila kundi lina wastani wa miamala 2,000). +3. Ikiwa bloku mpya inazalishwa kwenye Ethereum kila sekunde 15, basi kasi ya uchakataji ya rollup ingekuwa takriban **miamala 5,208 kwa sekunde**. Hii inafanywa kwa kugawa idadi ya miamala ya msingi ya rollup ambayo bloku ya Ethereum inaweza kushikilia (**78,125**) kwa wastani wa muda wa bloku (**sekunde 15**). + +Huu ni makadirio ya matumaini, kwa kuzingatia kwamba miamala ya optimistic rollup haiwezi kujumuisha bloku nzima kwenye Ethereum. Hata hivyo, inaweza kutoa wazo potofu la ni kiasi gani cha faida za scalability ambazo matoleo yenye matumaini yanaweza kumudu watumiaji wa Ethereum (utekelezaji wa sasa unatoa hadi TPS 2,000). + +Kuanzishwa kwa [ugawanyaji wa data](/roadmap/danksharding/) kwenye Ethereum kunatarajiwa kuboresha uongezaji katika optimistic rollups. Kwa sababu miamala ya rollup lazima ishiriki nafasi ya bloku na miamala mingine isiyo ya rollup, uwezo wao wa uchakataji umewekewa mipaka na upitishaji wa data kwenye mnyororo mkuu wa Ethereum. Danksharding itaongeza nafasi inayopatikana kwa minyororo ya L2 kuchapisha data kwa kila bloku, kwa kutumia hifadhi ya "blob" ya bei nafuu, isiyo ya kudumu badala ya `CALLDATA` ya gharama kubwa, ya kudumu. + +### Faida na hasara za optimistic rollups {#optimistic-rollups-pros-and-cons} + +| Faida | Hasara | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Hutoa maboresho makubwa katika uongezaji bila kuathiri usalama au hali ya kutokuwa na uaminifu. | Ucheleweshaji katika umalizikaji wa muamala kutokana na changamoto zinazowezekana za ulaghai. | +| Data ya muamala huhifadhiwa kwenye mnyororo wa safu ya 1, na kuboresha uwazi, usalama, ukinzani dhidi ya udhibiti, na ugatuzi. | Waendeshaji wa rollup wa kati (waratibu wa mfuatano) wanaweza kuathiri mpangilio wa miamala. | +| Uthibitishaji wa ulaghai huhakikisha umalizikaji usio na uaminifu na huruhusu walio wachache waaminifu kulinda mnyororo. | Ikiwa hakuna nodi za uaminifu, opereta mwenye nia mbaya anaweza kuiba fedha kwa kuchapisha bloku batili na ahadi za hali. | +| Kukokotoa thibitisho za ulaghai kuko wazi kwa nodi ya kawaida ya L2, tofauti na thibitisho za uhalali (zinazotumika katika ZK-rollups) ambazo zinahitaji vifaa maalum. | Mfumo wa usalama unategemea angalau nodi moja ya uaminifu inayotekeleza miamala ya rollup na kuwasilisha thibitisho za ulaghai ili kupinga mabadiliko batili ya hali. | +| Rollups hunufaika na "uhai usio na uaminifu" (mtu yeyote anaweza kulazimisha mnyororo kuendelea kwa kutekeleza miamala na kuchapisha madai) | Watumiaji lazima wasubiri kipindi cha changamoto cha wiki moja kiishe kabla ya kutoa fedha kurudi Ethereum. | +| Optimistic rollups hutegemea motisha za kiuchumi za kripto zilizoundwa vizuri ili kuongeza usalama kwenye mnyororo. | Rollups lazima zichapishe data zote za muamala kwenye mnyororo, jambo ambalo linaweza kuongeza gharama. | +| Utangamano na EVM na Solidity huruhusu wasanidi programu kuhamisha mikataba-erevu asilia ya Ethereum kwenda kwa rollups au kutumia zana zilizopo kuunda mfumo mtawanyo wa kimamlaka mpya. | | + +### Maelezo ya kuona ya optimistic rollups {#optimistic-video} + +Wewe ni mwanafunzi wa kuona zaidi? Tazama Finematics ikielezea optimistic rollups: + + + +## Masomo zaidi kuhusu optimistic rollups + +- [Jinsi optimistic rollups zinavyofanya kazi (Mwongozo Kamili)](https://www.alchemy.com/overviews/optimistic-rollups) +- [Rollup ya Mnyororo wa Bloku ni Nini? Utangulizi wa Kiufundi](https://www.ethereum-ecosystem.com/blog/what-is-a-blockchain-rollup-a-technical-introduction) +- [Mwongozo Muhimu wa Arbitrum](https://www.bankless.com/the-essential-guide-to-arbitrum) +- [Mwongozo wa Vitendo wa Rollups za Ethereum](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) +- [Hali ya Thibitisho za Ulaghai katika L2s za Ethereum](https://web.archive.org/web/20241124154627/https://research.2077.xyz/the-state-of-fraud-proofs-in-ethereum-l2s) +- [Je, Rollup ya Optimism inafanyaje kazi kweli?](https://www.paradigm.xyz/2021/01/how-does-optimism-s-rollup-really-work) +- [Uchambuzi wa Kina wa OVM](https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52) +- [Mashine Halisi ya Matumaini ni Nini?](https://www.alchemy.com/overviews/optimistic-virtual-machine) diff --git a/public/content/translations/sw/developers/docs/scaling/plasma/index.md b/public/content/translations/sw/developers/docs/scaling/plasma/index.md new file mode 100644 index 00000000000..6623a9e0113 --- /dev/null +++ b/public/content/translations/sw/developers/docs/scaling/plasma/index.md @@ -0,0 +1,176 @@ +--- +title: Minyororo ya njozi +description: Utangulizi wa minyororo ya njozi kama suluhisho la uongezwaji linalotumiwa sasa na jumuiya ya Ethereum. +lang: sw +incomplete: true +sidebarDepth: 3 +--- + +Mnyororo wa Njozi ni mnyororo wa bloku tofauti unaofungwa kwenye Mtandao Mkuu wa Ethereum lakini hufanya miamala offchain kwa utaratibu wake wa uthibitishaji wa bloku. Minyororo ya njozi wakati mwingine hujulikana kama minyororo ya "mtoto", kimsingi nakala ndogo za Mtandao Mkuu wa Ethereum. Minyororo ya njozi hutumia [ushahidi wa ulaghai](/glossary/#fraud-proof) (kama [optimistic rollups](/developers/docs/scaling/optimistic-rollups/)) kusuluhisha mizozo. + +Miti ya Merkle huwezesha uundaji wa rundo lisilo na mwisho la minyororo hii ambayo inaweza kufanya kazi ili kupunguza kipimo data kutoka kwa minyororo ya wazazi (ikiwa ni pamoja na Mtandao Mkuu wa Ethereum). Hata hivyo, ingawa minyororo hii hupata usalama kutoka kwa Ethereum (kupitia ushahidi wa ulaghai), usalama na ufanisi wao huathiriwa na mapungufu kadhaa ya kimuundo. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa na ufahamu mzuri wa mada zote za msingi na uelewa wa hali ya juu wa [uongezwaji wa Ethereum](/developers/docs/scaling/). + +## Njozi ni nini? + +Njozi ni mfumo wa kuboresha uwezo wa kuongezeka kwa minyororo ya bloku ya umma kama Ethereum. Kama ilivyoelezwa katika [karatasi nyeupe ya Njozi](http://plasma.io/plasma.pdf) ya awali, minyororo ya Njozi hujengwa juu ya mnyororo mwingine wa bloku (unaoitwa "mnyororo mkuu"). Kila "mnyororo wa mtoto" hupanuka kutoka kwa mnyororo mkuu na kwa ujumla hudhibitiwa na mkataba-erevu uliotumwa kwenye mnyororo wa mzazi. + +Mkataba wa Njozi hufanya kazi, miongoni mwa mambo mengine, kama [daraja](/developers/docs/bridges/) linalowaruhusu watumiaji kuhamisha mali kati ya Mtandao Mkuu wa Ethereum na mnyororo wa njozi. Ingawa hii inazifanya kuwa sawa na [sidechains](/developers/docs/scaling/sidechains/), minyororo ya njozi hunufaika—angalau, kwa kiasi fulani—kutokana na usalama wa Mtandao Mkuu wa Ethereum. Hii ni tofauti na sidechains ambazo zinawajibika kikamilifu kwa usalama wao. + +## Njozi inafanyaje kazi? + +Vipengele vya msingi vya mfumo wa Njozi ni: + +### Ukokotoaji wa Offchain {#offchain-computation} + +Kasi ya sasa ya uchakataji ya Ethereum imepunguzwa hadi miamala ~15-20 kwa sekunde, na hivyo kupunguza uwezekano wa muda mfupi wa uongezwaji ili kushughulikia watumiaji wengi zaidi. Tatizo hili lipo hasa kwa sababu [utaratibu wa makubaliano](/developers/docs/consensus-mechanisms/) wa Ethereum unahitaji nodi nyingi za mtandao wa rika-kwa-rika ili kuthibitisha kila sasisho la hali ya mnyororo wa bloku. + +Ingawa utaratibu wa makubaliano wa Ethereum ni muhimu kwa usalama, huenda usitumike kwa kila hali ya utumiaji. Kwa mfano, Alice anaweza asihitaji malipo yake ya kila siku kwa Bob kwa ajili ya kikombe cha kahawa kuthibitishwa na mtandao mzima wa Ethereum kwa kuwa kuna uaminifu fulani kati ya pande zote mbili. + +Njozi inadhania kuwa Mtandao Mkuu wa Ethereum hauhitaji kuthibitisha miamala yote. Badala yake, tunaweza kuchakata miamala nje ya Mtandao Mkuu, na kuondoa nodi kutoka kwa kulazimika kuthibitisha kila muamala. + +Ukokotoaji wa offchain ni muhimu kwa kuwa minyororo ya Njozi inaweza kuboresha kasi na gharama. Kwa mfano, mnyororo wa Njozi unaweza—na mara nyingi hufanya—kutumia "opereta" mmoja kusimamia mpangilio na utekelezaji wa miamala. Kwa chombo kimoja tu kinachothibitisha miamala, muda wa uchakataji kwenye mnyororo wa njozi ni wa haraka kuliko Mtandao Mkuu wa Ethereum. + +### Ahadi za hali {#state-commitments} + +Ingawa Njozi hutekeleza miamala offchain, hukamilishwa kwenye safu kuu ya utekelezaji ya Ethereum—vinginevyo, minyororo ya Njozi haiwezi kufaidika na dhamana za usalama za Ethereum. Lakini kukamilisha miamala ya offchain bila kujua hali ya mnyororo wa njozi kungevunja mtindo wa usalama na kuruhusu kuenea kwa miamala batili. Hii ndiyo sababu opereta, chombo kinachohusika na utengenezaji wa bloku kwenye mnyororo wa njozi, anahitajika kuchapisha "ahadi za hali" kwenye Ethereum mara kwa mara. + +[Mpango wa ahadi](https://en.wikipedia.org/wiki/Commitment_scheme) ni mbinu ya kriptografia ya kujitolea kwa thamani au taarifa bila kuifichua kwa mhusika mwingine. Ahadi ni za "lazima" kwa maana kwamba huwezi kubadilisha thamani au taarifa mara tu unapojitolea kwayo. Ahadi za hali katika Njozi huchukua fomu ya "mizizi ya Merkle" (inayotokana na [mti wa Merkle](/whitepaper/#merkle-trees)) ambayo opereta hutuma kwa vipindi kwa mkataba wa Njozi kwenye mnyororo wa Ethereum. + +Mizizi ya Merkle ni misingi ya kriptografia inayowezesha kubana kiasi kikubwa cha habari. Mzizi wa Merkle (pia huitwa "mzizi wa bloku" katika hali hii) unaweza kuwakilisha miamala yote katika bloku. Mizizi ya Merkle pia hurahisisha kuthibitisha kuwa kipande kidogo cha data ni sehemu ya mkusanyiko mkubwa wa data. Kwa mfano, mtumiaji anaweza kutoa [uthibitisho wa Merkle](/developers/tutorials/merkle-proofs-for-offline-data-integrity/#main-content) ili kuthibitisha ujumuishaji wa muamala katika bloku maalum. + +Mizizi ya Merkle ni muhimu kwa kutoa habari kuhusu hali ya offchain kwa Ethereum. Unaweza kufikiria mizizi ya Merkle kama "sehemu za kuhifadhi": opereta anasema, "Hii ndiyo hali ya mnyororo wa Njozi kwa wakati x, na huu ni mzizi wa Merkle kama uthibitisho." Opereta anajitolea kwa _hali ya sasa_ ya mnyororo wa njozi na mzizi wa Merkle, ndiyo sababu inaitwa "ahadi ya hali". + +### Kuingia na kutoka {#entries-and-exits} + +Ili watumiaji wa Ethereum wanufaike na Njozi, kunahitaji kuwa na utaratibu wa kuhamisha fedha kati ya Mtandao Mkuu na minyororo ya njozi. Hatuwezi kutuma ether kiholela kwa anwani kwenye mnyororo wa njozi, ingawa—minyororo hii haiendani, kwa hivyo muamala unaweza kushindwa au kusababisha upotevu wa fedha. + +Njozi hutumia mkataba mkuu unaoendeshwa kwenye Ethereum ili kuchakata maingizo na matokeo ya watumiaji. Mkataba huu mkuu pia unawajibika kwa kufuatilia ahadi za hali (zilizoelezwa mapema) na kuadhibu tabia isiyo ya uaminifu kupitia ushahidi wa ulaghai (zaidi juu ya hili baadaye). + +#### Kuingia kwenye mnyororo wa njozi {#entering-the-plasma-chain} + +Ili kuingia kwenye mnyororo wa njozi, Alice (mtumiaji) atalazimika kuweka ETH au tokeni yoyote ya ERC-20 kwenye mkataba wa njozi. Opereta wa njozi, anayefuatilia amana za mkataba, huunda tena kiasi kinacholingana na amana ya awali ya Alice na kuitoa kwa anwani yake kwenye mnyororo wa njozi. Alice anahitajika kuthibitisha kupokea fedha kwenye mnyororo wa mtoto na kisha anaweza kutumia fedha hizi kwa miamala. + +#### Kutoka kwenye mnyororo wa njozi {#exiting-the-plasma-chain} + +Kutoka kwenye mnyororo wa njozi ni ngumu zaidi kuliko kuingia kwa sababu kadhaa. Kubwa zaidi ni kwamba, ingawa Ethereum ina habari kuhusu hali ya mnyororo wa njozi, haiwezi kuthibitisha ikiwa habari hiyo ni ya kweli au la. Mtumiaji mwenye nia mbaya anaweza kutoa madai yasiyo sahihi ("Nina ETH 1000") na akafanikiwa kutoa uthibitisho wa uongo ili kuunga mkono madai hayo. + +Ili kuzuia utoaji wenye nia mbaya, "kipindi cha changamoto" kimeanzishwa. Katika kipindi cha changamoto (kawaida wiki moja), yeyote anaweza kupinga ombi la kutoa pesa kwa kutumia uthibitisho wa ulaghai. Ikiwa changamoto itafaulu, basi ombi la kutoa pesa linakataliwa. + +Hata hivyo, kwa kawaida watumiaji ni waaminifu na hutoa madai sahihi kuhusu fedha wanazomiliki. Katika hali hii, Alice ataanzisha ombi la kutoa pesa kwenye mnyororo mkuu (Ethereum) kwa kuwasilisha muamala kwa mkataba wa njozi. + +Lazima pia atoe uthibitisho wa Merkle unaothibitisha kuwa muamala uliounda fedha zake kwenye mnyororo wa Njozi ulijumuishwa kwenye bloku. Hii ni muhimu kwa marudio ya Njozi, kama vile [Njozi MVP](https://www.learnplasma.org/en/learn/mvp.html), ambayo hutumia mtindo wa [Matokeo ya Muamala Usiotumika (UTXO)](https://en.wikipedia.org/wiki/Unspent_transaction_output). + +Nyingine, kama [Njozi Cash](https://www.learnplasma.org/en/learn/cash.html), huwakilisha fedha kama [tokeni zisizoweza kubadilishwa](/developers/docs/standards/tokens/erc-721/) badala ya UTXO. Kutoa pesa, katika kesi hii, kunahitaji uthibitisho wa umiliki wa tokeni kwenye mnyororo wa Njozi. Hili hufanywa kwa kuwasilisha miamala miwili ya hivi karibuni inayohusisha tokeni na kutoa uthibitisho wa Merkle unaothibitisha ujumuishaji wa miamala hiyo kwenye bloku. + +Mtumiaji lazima pia aongeze dhamana kwenye ombi la kutoa pesa kama hakikisho la tabia ya uaminifu. Ikiwa mpinzani atathibitisha ombi la Alice la kutoa pesa ni batili, dhamana yake hupunguzwa, na baadhi yake huenda kwa mpinzani kama zawadi. + +Ikiwa kipindi cha changamoto kitapita bila mtu yeyote kutoa uthibitisho wa ulaghai, ombi la Alice la kutoa pesa linachukuliwa kuwa halali, na kumruhusu kupata amana kutoka kwa mkataba wa Njozi kwenye Ethereum. + +### Usuluhishi wa mizozo {#dispute-arbitration} + +Kama mnyororo wowote wa bloku, minyororo ya njozi inahitaji utaratibu wa kutekeleza uadilifu wa miamala iwapo washiriki watatenda kwa nia mbaya (k.m., kutumia fedha mara mbili). Kwa ajili hii, minyororo ya njozi hutumia ushahidi wa ulaghai kusuluhisha mizozo kuhusu uhalali wa mabadiliko ya hali na kuadhibu tabia mbaya. Ushahidi wa ulaghai hutumika kama utaratibu ambapo mnyororo wa mtoto wa Njozi huwasilisha malalamiko kwa mnyororo wake mkuu au kwa mnyororo mzizi. + +Ushahidi wa ulaghai ni dai tu kwamba mpito fulani wa hali si halali. Mfano ni ikiwa mtumiaji (Alice) anajaribu kutumia fedha zilezile mara mbili. Labda alitumia UTXO katika muamala na Bob na anataka kutumia UTXO ileile (ambayo sasa ni ya Bob) katika muamala mwingine. + +Ili kuzuia utoaji, Bob ataunda uthibitisho wa ulaghai kwa kutoa ushahidi wa Alice kutumia UTXO hiyo katika muamala uliopita na uthibitisho wa Merkle wa ujumuishaji wa muamala huo kwenye bloku. Mchakato uleule hufanya kazi katika Njozi Cash—Bob angehitaji kutoa uthibitisho kwamba Alice alihamisha tokeni anazojaribu kutoa mapema. + +Ikiwa changamoto ya Bob itafaulu, ombi la Alice la kutoa pesa linafutwa. Hata hivyo, mbinu hii inategemea uwezo wa Bob kufuatilia mnyororo kwa maombi ya kutoa pesa. Ikiwa Bob hayuko mtandaoni, basi Alice anaweza kuchakata utoaji wenye nia mbaya mara tu kipindi cha changamoto kinapokwisha. + +## Tatizo la kutoka kwa wingi katika njozi {#the-mass-exit-problem-in-plasma} + +Tatizo la kutoka kwa wingi hutokea wakati idadi kubwa ya watumiaji wanajaribu kutoa pesa kutoka kwa mnyororo wa njozi kwa wakati mmoja. Kwa nini tatizo hili lipo linahusiana na mojawapo ya matatizo makubwa ya Njozi: **kutopatikana kwa data**. + +Upatikanaji wa data ni uwezo wa kuthibitisha kuwa habari ya bloku iliyopendekezwa ilichapishwa kweli kwenye mtandao wa mnyororo wa bloku. Bloku "haipatikani" ikiwa mzalishaji anachapisha bloku yenyewe lakini anazuia data iliyotumika kuunda bloku hiyo. + +Bloku lazima zipatikane ikiwa nodi zitakuwa na uwezo wa kupakua bloku na kuthibitisha uhalali wa miamala. Minyororo ya bloku huhakikisha upatikanaji wa data kwa kulazimisha wazalishaji wa bloku kuchapisha data zote za miamala onchain. + +Upatikanaji wa data pia husaidia katika kupata itifaki za uongezwaji za offchain zinazojengwa kwenye safu ya msingi ya Ethereum. Kwa kulazimisha waendeshaji kwenye minyororo hii kuchapisha data za miamala kwenye Ethereum, mtu yeyote anaweza kupinga bloku batili kwa kuunda ushahidi wa ulaghai unaorejelea hali sahihi ya mnyororo. + +Minyororo ya njozi kimsingi huhifadhi data za miamala na opereta na **haichapishi data yoyote kwenye Mtandao Mkuu** (yaani, kando na ahadi za hali za mara kwa mara). Hii inamaanisha watumiaji lazima wategemee opereta kutoa data ya bloku ikiwa wanahitaji kuunda ushahidi wa ulaghai unaopinga miamala batili. Ikiwa mfumo huu utafanya kazi, basi watumiaji wanaweza kutumia ushahidi wa ulaghai kila wakati ili kulinda fedha zao. + +Tatizo huanza pale opereta, na si mtumiaji yeyote tu, ndiye mhusika anayetenda kwa nia mbaya. Kwa sababu opereta ndiye anayedhibiti mnyororo wa bloku peke yake, wana motisha zaidi ya kuendeleza mabadiliko batili ya hali kwa kiwango kikubwa, kama vile kuiba fedha za watumiaji kwenye mnyororo wa njozi. + +Katika hali hii, kutumia mfumo wa kawaida wa uthibitisho wa ulaghai haufanyi kazi. Opereta anaweza kwa urahisi kufanya muamala batili wa kuhamisha fedha za Alice na Bob kwenye pochi yake na kuficha data muhimu kwa ajili ya kuunda uthibitisho wa ulaghai. Hili linawezekana kwa sababu opereta hahitajiki kufanya data ipatikane kwa watumiaji au Mtandao Mkuu. + +Kwa hivyo, suluhisho la matumaini zaidi ni kujaribu "kutoka kwa wingi" kwa watumiaji kutoka kwenye mnyororo wa njozi. Kutoka kwa wingi kunapunguza kasi ya mpango wa opereta mwenye nia mbaya wa kuiba fedha na kunatoa kiwango fulani cha ulinzi kwa watumiaji. Maombi ya kutoa pesa hupangwa kulingana na wakati kila UTXO (au tokeni) ilipoundwa, na kuzuia waendeshaji wenye nia mbaya kuwatangulia watumiaji waaminifu. + +Hata hivyo, bado tunahitaji njia ya kuthibitisha uhalali wa maombi ya kutoa pesa wakati wa kutoka kwa wingi—ili kuzuia watu wenye fursa kutumia fujo kuchakata matokeo batili. Suluhisho ni rahisi: wahitaji watumiaji kuchapisha **hali halali ya mwisho ya mnyororo** ili kutoa pesa zao. + +Lakini mbinu hii bado ina matatizo. Kwa mfano, ikiwa watumiaji wote kwenye mnyororo wa njozi wanahitaji kutoka (ambalo linawezekana katika kesi ya opereta mwenye nia mbaya), basi hali nzima halali ya mnyororo wa njozi lazima itupwe kwenye safu ya msingi ya Ethereum mara moja. Kwa ukubwa wa kiholela wa minyororo ya njozi (throughput ya juu = data zaidi) na vikwazo vya kasi ya uchakataji wa Ethereum, hili si suluhisho bora. + +Ingawa michezo ya kutoka inasikika vizuri kinadharia, kutoka kwa wingi katika maisha halisi kunaweza kusababisha msongamano wa mtandao mzima kwenye Ethereum yenyewe. Kando na kudhuru utendaji kazi wa Ethereum, kutoka kwa wingi bila uratibu mzuri kunamaanisha kuwa watumiaji wanaweza wasiweze kutoa fedha kabla ya opereta kumaliza kila akaunti kwenye mnyororo wa njozi. + +## Faida na hasara za njozi {#pros-and-cons-of-plasma} + +| Faida | Hasara | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Inatoa throughput ya juu na gharama ya chini kwa kila muamala. | Haiungi mkono ukokotoaji wa jumla (haiwezi kuendesha mikataba-erevu). Uhamisho wa msingi tu wa tokeni, ubadilishanaji, na aina nyingine chache za miamala ndizo zinazotumika kupitia mantiki ya kiarifu. | +| Nzuri kwa miamala kati ya watumiaji wa kiholela (hakuna gharama za ziada kwa kila jozi ya watumiaji ikiwa wote wameanzishwa kwenye mnyororo wa njozi) | Unahitaji kufuatilia mtandao mara kwa mara (mahitaji ya uhai) au kukabidhi jukumu hili kwa mtu mwingine ili kuhakikisha usalama wa fedha zako. | +| Minyororo ya njozi inaweza kurekebishwa kwa matumizi maalum ambayo hayahusiani na mnyororo mkuu. Mtu yeyote, ikiwa ni pamoja na biashara, anaweza kubinafsisha mikataba-erevu ya Njozi ili kutoa miundombinu inayoweza kuongezwa inayofanya kazi katika mazingira tofauti. | Inategemea waendeshaji mmoja au zaidi kuhifadhi data na kuitoa inapohitajika. | +| Hupunguza mzigo kwenye Mtandao Mkuu wa Ethereum kwa kuhamisha ukokotoaji na ghala offchain. | Utoaji hucheleweshwa kwa siku kadhaa ili kuruhusu changamoto. Kwa mali zinazoweza kubadilishwa, hii inaweza kupunguzwa na watoa huduma za ukwasi, lakini kuna gharama ya mtaji inayohusishwa. | +| | Ikiwa watumiaji wengi sana watajaribu kutoka kwa wakati mmoja, Mtandao Mkuu wa Ethereum unaweza kupata msongamano. | + +## Njozi dhidi ya itifaki za uongezwaji za safu 2 {#plasma-vs-layer-2} + +Ingawa Njozi iliwahi kuchukuliwa kuwa suluhisho muhimu la uongezwaji kwa Ethereum, tangu wakati huo imeachwa kwa kupendelea [itifaki za uongezwaji za safu 2 (L2)](/layer-2/). Suluhisho za uongezwaji za L2 hurekebisha matatizo kadhaa ya Njozi: + +### Ufanisi {#efficiency} + +[Zero-Knowledge rollups](/developers/docs/scaling/zk-rollups) huzalisha ithibati za kriptografia za uhalali wa kila kundi la miamala inayochakatwa offchain. Hii huwazuia watumiaji (na waendeshaji) kuendeleza mabadiliko batili ya hali, na kuondoa hitaji la vipindi vya changamoto na michezo ya kutoka. Pia inamaanisha watumiaji hawana haja ya kufuatilia mnyororo mara kwa mara ili kulinda fedha zao. + +### Usaidizi kwa mikataba-erevu {#support-for-smart-contracts} + +Tatizo lingine la mfumo wa njozi lilikuwa [kutokuwa na uwezo wa kusaidia utekelezaji wa mikataba-erevu ya Ethereum](https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598/4). Kwa sababu hiyo, utekelezaji mwingi wa Njozi ulijengwa hasa kwa ajili ya malipo rahisi au ubadilishanaji wa tokeni za ERC-20. + +Kinyume chake, optimistic rollups, zinaendana na [Mashine ya Mtandaoni ya Ethereum](/developers/docs/evm/) na zinaweza kuendesha [mikataba-erevu](/developers/docs/smart-contracts/) asilia ya Ethereum, na kuzifanya kuwa suluhisho muhimu na _salama_ la kuongeza [programu zilizogatuliwa](/developers/docs/dapps/). Vile vile, mipango inaendelea ya [kuunda utekelezaji wa zero-knowledge wa EVM (zkEVM)](https://ethresear.ch/t/a-zk-evm-specification/11549) ambayo itaruhusu ZK-rollups kuchakata mantiki ya kiholela na kutekeleza mikataba-erevu. + +### Kutopatikana kwa data {#data-unavailability} + +Kama ilivyoelezwa awali, njozi inakabiliwa na tatizo la upatikanaji wa data. Ikiwa opereta mwenye nia mbaya angeendeleza mpito batili kwenye mnyororo wa njozi, watumiaji wasingeweza kuupinga kwa kuwa opereta anaweza kuzuia data inayohitajika kuunda uthibitisho wa ulaghai. Unda-mpya hutatua tatizo hili kwa kulazimisha waendeshaji kuchapisha data za miamala kwenye Ethereum, na kumruhusu yeyote kuthibitisha hali ya mnyororo na kuunda ushahidi wa ulaghai ikibidi. + +### Tatizo la kutoka kwa wingi {#mass-exit-problem} + +ZK-rollups na optimistic rollups zote zinatatua tatizo la Njozi la kutoka kwa wingi kwa njia mbalimbali. Kwa mfano, ZK-rollup inategemea mifumo ya kriptografia inayohakikisha waendeshaji hawawezi kuiba fedha za watumiaji katika hali yoyote. + +Vile vile, optimistic rollups huweka kipindi cha kuchelewesha utoaji ambapo mtu yeyote anaweza kuanzisha changamoto na kuzuia maombi ya utoaji yenye nia mbaya. Ingawa hii ni sawa na Njozi, tofauti ni kwamba wathibitishaji wanapata data inayohitajika kuunda ushahidi wa ulaghai. Hivyo, hakuna haja kwa watumiaji wa unda-mpya kujihusisha na uhamiaji wa haraka, wa "wa kwanza kutoka" kwenda Mtandao Mkuu wa Ethereum. + +## Njozi inatofautianaje na sidechains na ugawanyaji? {#plasma-sidechains-sharding} + +Njozi, sidechains, na ugawanyaji ni sawa kabisa kwa sababu zote zinaunganishwa na Mtandao Mkuu wa Ethereum kwa njia fulani. Hata hivyo, kiwango na nguvu ya miunganisho hii hutofautiana, jambo ambalo huathiri sifa za usalama za kila suluhisho la uongezwaji. + +### Njozi dhidi ya sidechains {#plasma-vs-sidechains} + +[Sidechain](/developers/docs/scaling/sidechains/) ni mnyororo wa bloku unaoendeshwa kwa kujitegemea na umeunganishwa na Mtandao Mkuu wa Ethereum kupitia daraja la pande mbili. [Madaraja](/bridges/) huwaruhusu watumiaji kubadilishana tokeni kati ya minyororo miwili ya bloku ili kufanya miamala kwenye sidechain, na hivyo kupunguza msongamano kwenye Mtandao Mkuu wa Ethereum na kuboresha uongezwaji. +Sidechains hutumia utaratibu tofauti wa makubaliano na kwa kawaida ni ndogo zaidi kuliko Mtandao Mkuu wa Ethereum. Matokeo yake, kuunganisha mali kwenye minyororo hii kunahusisha hatari iliyoongezeka; kutokana na ukosefu wa dhamana za usalama zilizorithiwa kutoka Mtandao Mkuu wa Ethereum katika mtindo wa sidechain, watumiaji wako katika hatari ya kupoteza fedha katika shambulio kwenye sidechain. + +Kinyume chake, minyororo ya njozi hupata usalama wao kutoka kwa Mtandao Mkuu. Hii inazifanya kuwa salama zaidi kwa kipimo kuliko sidechains. Sidechains na minyororo ya njozi zote zinaweza kuwa na itifaki tofauti za makubaliano, lakini tofauti ni kwamba minyororo ya njozi huchapisha mizizi ya Merkle kwa kila bloku kwenye Mtandao Mkuu wa Ethereum. Mizizi ya bloku ni vipande vidogo vya habari tunavyoweza kutumia kuthibitisha habari kuhusu miamala inayotokea kwenye mnyororo wa njozi. Ikiwa shambulio litatokea kwenye mnyororo wa njozi, watumiaji wanaweza kutoa fedha zao kwa usalama na kuzirudisha kwenye Mtandao Mkuu kwa kutumia uthibitisho unaofaa. + +### Njozi dhidi ya ugawanyaji {#plasma-vs-sharding} + +Minyororo ya njozi na minyororo ya kugawanyisha huchapisha ithibati za kriptografia mara kwa mara kwenye Mtandao Mkuu wa Ethereum. Hata hivyo, zote mbili zina sifa tofauti za usalama. + +Minyororo ya kugawanyisha huwasilisha "vichwa vya mkusanyo" kwa Mtandao Mkuu vikiwa na taarifa za kina kuhusu kila kigae cha data. Nodi kwenye Mtandao Mkuu huthibitisha na kutekeleza uhalali wa vigae vya data, na hivyo kupunguza uwezekano wa mabadiliko batili ya vigae na kulinda mtandao dhidi ya shughuli mbaya. + +Njozi ni tofauti kwa sababu Mtandao Mkuu hupokea tu habari ndogo kuhusu hali ya minyororo ya watoto. Hii inamaanisha Mtandao Mkuu hauwezi kuthibitisha kwa ufanisi miamala inayofanywa kwenye minyororo ya watoto, na kuifanya kuwa salama kidogo. + +**Kumbuka** kwamba ugawanyaji wa mnyororo wa bloku wa Ethereum haupo tena kwenye ramani. Imebadilishwa na uongezwaji kupitia unda-mpya na [Danksharding](/roadmap/danksharding). + +### Tumia Njozi {#use-plasma} + +Miradi mingi hutoa utekelezaji wa Njozi ambao unaweza kuunganisha kwenye dApps zako: + +- [Polygon](https://polygon.technology/) (hapo awali Mtandao wa Matic) + +## Masomo zaidi {#further-reading} + +- [Jifunze Njozi](https://www.learnplasma.org/en/) +- [Kikumbusho cha haraka cha maana ya "usalama wa pamoja" na kwa nini ni muhimu sana](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) +- [Sidechains dhidi ya Njozi dhidi ya Ugawanyaji](https://vitalik.eth.limo/general/2019/06/12/plasma_vs_sharding.html) +- [Kuelewa Njozi, Sehemu ya 1: Misingi](https://www.theblockcrypto.com/amp/post/10793/understanding-plasma-part-1-the-basics) +- [Maisha na Kifo cha Njozi](https://medium.com/dragonfly-research/the-life-and-death-of-plasma-b72c6a59c5ad#) + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/scaling/sidechains/index.md b/public/content/translations/sw/developers/docs/scaling/sidechains/index.md new file mode 100644 index 00000000000..539078b2cce --- /dev/null +++ b/public/content/translations/sw/developers/docs/scaling/sidechains/index.md @@ -0,0 +1,73 @@ +--- +title: Minyororo ya pembeni +description: Utangulizi wa sidechains kama suluhisho la kuongeza ukubwa linalotumiwa sasa na jumuiya ya Ethereum. +lang: sw +sidebarDepth: 3 +--- + +Sidechain ni mnyororo wa bloku tofauti unaofanya kazi bila kutegemea Ethereum na umeunganishwa na Mtandao Mkuu wa Ethereum kwa daraja la njia mbili. Sidechains zinaweza kuwa na vigezo tofauti vya bloku na [algoriti za makubaliano](/developers/docs/consensus-mechanisms/), ambazo mara nyingi zimeundwa kwa ajili ya uchakataji bora wa miamala. Hata hivyo, kutumia sidechain kuna hasara zake, kwa kuwa hairithi sifa za usalama za Ethereum. Tofauti na [suluhu za kuongeza ukubwa za safu ya 2](/layer-2/), sidechains hazichapishi mabadiliko ya hali na data ya miamala kwenye Mtandao Mkuu wa Ethereum. + +Sidechains pia huacha baadhi ya vipimo vya ugatuaji au usalama ili kufikia uwezo wa juu wa kuchakata ([scalability trilemma](https://vitalik.eth.limo/general/2021/05/23/scaling.html)). Hata hivyo, Ethereum imejitolea kuongeza ukubwa bila kuathiri ugatuaji na usalama. + +## Sidechains hufanyaje kazi? {#how-do-sidechains-work} + +Sidechains ni minyororo ya bloku huru, yenye historia tofauti, ramani za maendeleo, na mazingatio ya usanifu. Ingawa sidechain inaweza kuwa na mfanano wa juu juu na Ethereum, ina sifa kadhaa za kipekee. + +### Algoriti za makubaliano {#consensus-algorithms} + +Moja ya sifa zinazofanya sidechains kuwa za kipekee (yaani, tofauti na Ethereum) ni algoriti ya makubaliano inayotumika. Sidechains hazitegemei Ethereum kwa makubaliano na zinaweza kuchagua itifaki mbadala za makubaliano zinazokidhi mahitaji yao. Baadhi ya mifano ya algoriti za makubaliano zinazotumiwa kwenye sidechains ni pamoja na: + +- [Uthibitisho wa Mamlaka](/developers/docs/consensus-mechanisms/poa/) +- [Uthibitisho wa hisa uliokabidhiwa](https://en.bitcoin.it/wiki/Delegated_proof_of_stake) +- [Ustahimilivu wa kosa la Byzantine](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained). + +Kama Ethereum, sidechains zina nodi za kuthibitisha ambazo huhakiki na kuchakata miamala, huzalisha bloku, na huhifadhi hali ya mnyororo wa bloku. Wathibitishaji pia wanawajibika kwa kudumisha makubaliano kwenye mtandao na kuulinda dhidi ya mashambulizi hasidi. + +#### Vigezo vya bloku {#block-parameters} + +Ethereum inaweka vikomo kwenye [muda wa bloku](/developers/docs/blocks/#block-time) (yaani, muda unaochukua kuzalisha bloku mpya) na [ukubwa wa bloku](/developers/docs/blocks/#block-size) (yaani, kiasi cha data kilichomo kwenye kila bloku kinachopimwa kwa gesi). Kinyume chake, sidechains mara nyingi hutumia vigezo tofauti, kama vile muda mfupi wa bloku na vikomo vya juu vya gesi, ili kufikia uwezo wa juu wa kuchakata, miamala ya haraka, na ada za chini. + +Ingawa hii ina faida fulani, ina athari muhimu kwa ugatuaji na usalama wa mtandao. Vigezo vya bloku, kama vile muda mfupi wa bloku na ukubwa mkubwa wa bloku, huongeza ugumu wa kuendesha nodi kamili—na kuacha "supernodes" chache zikiwajibika kwa kuulinda mnyororo. Katika hali kama hiyo, uwezekano wa wathibitishaji kula njama au uchukuaji hasidi wa mnyororo huongezeka. + +Ili minyororo ya bloku iongeze ukubwa bila kudhuru ugatuaji, uendeshaji wa nodi lazima uwe wazi kwa kila mtu—sio lazima wahusika wenye maunzi maalum. Hii ndiyo sababu jitihada zinaendelea ili kuhakikisha kila mtu anaweza [kuendesha nodi kamili](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node) kwenye mtandao wa Ethereum. + +### Upatanifu wa EVM {#evm-compatibility} + +Baadhi ya sidechains zinapatana na EVM na zinaweza kutekeleza mikataba iliyotengenezwa kwa ajili ya [Mashine ya Mtandaoni ya Ethereum (EVM)](/developers/docs/evm/). Sidechains zinazopatana na EVM zinaauni mikataba-erevu [iliyoandikwa kwa Solidity](/developers/docs/smart-contracts/languages/), pamoja na lugha nyingine za mikataba-erevu za EVM, ambayo ina maana kwamba mikataba-erevu iliyoandikwa kwa ajili ya Mtandao Mkuu wa Ethereum pia itafanya kazi kwenye sidechains zinazopatana na EVM. + +Hii ina maana kwamba ikiwa unataka kutumia [mfumo mtawanyo wa kimamlaka](/developers/docs/dapps/) yako kwenye sidechain, ni suala la kusambaza [mkataba-erevu](/developers/docs/smart-contracts/) wako kwenye sidechain hii. Inaonekana, inahisika, na inafanya kazi kama Mtandao Mkuu—unaandika mikataba kwa Solidity, na kuingiliana na mnyororo kupitia RPC za sidechains. + +Kwa sababu sidechains zinapatana na EVM, zinachukuliwa kuwa [suluhisho muhimu la kuongeza ukubwa](/developers/docs/scaling/) kwa mfumo mtawanyo wa kimamlaka asilia za Ethereum. Ukiwa na mfumo mtawanyo wa kimamlaka wako kwenye sidechain, watumiaji wanaweza kufurahia ada za chini za gesi na miamala ya haraka, hasa ikiwa Mtandao Mkuu una msongamano. + +Hata hivyo, kama ilivyoelezwa hapo awali, kutumia sidechain kuna hasara kubwa. Kila sidechain inawajibika kwa usalama wake na hairithi sifa za usalama za Ethereum. Hii huongeza uwezekano wa tabia hasidi ambayo inaweza kuathiri watumiaji wako au kuweka fedha zao hatarini. + +### Uhamisho wa mali {#asset-movement} + +Ili mnyororo wa bloku tofauti uwe sidechain ya Mtandao Mkuu wa Ethereum, unahitaji uwezo wa kuwezesha uhamishaji wa mali kutoka na kwenda kwenye Mtandao Mkuu wa Ethereum. Uwezo huu wa kuingiliana na Ethereum unafikiwa kwa kutumia daraja la mnyororo wa bloku. [Madaraja](/bridges/) hutumia mikataba-erevu iliyosambazwa kwenye Mtandao Mkuu wa Ethereum na sidechain ili kudhibiti uunganishaji wa fedha kati yao. + +Ingawa madaraja huwasaidia watumiaji kuhamisha fedha kati ya Ethereum na sidechain, mali haihamishiwi kimwili kati ya minyororo hiyo miwili. Badala yake, taratibu zinazohusisha kawaida utengenezaji na uchomaji hutumiwa kwa ajili ya kuhamisha thamani kati ya minyororo. Zaidi kuhusu [jinsi madaraja yanavyofanya kazi](/developers/docs/bridges/#how-do-bridges-work). + +## Faida na hasara za sidechains {#pros-and-cons-of-sidechains} + +| Faida | Hasara | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Teknolojia inayosimamia sidechains imeimarika na inanufaika kutokana na utafiti mpana na maboresho katika usanifu. | Sidechains huacha baadhi ya vipimo vya ugatuaji na ukosefu wa kuaminiana kwa ajili ya kuongeza ukubwa. | +| Sidechains zinaauni ukokotoaji wa jumla na zinatoa upatanifu wa EVM (zinaweza kuendesha mfumo mtawanyo wa kimamlaka asilia za Ethereum). | Sidechain hutumia utaratibu tofauti wa makubaliano na hainufaiki na dhamana za usalama za Ethereum. | +| Sidechains hutumia mifumo tofauti ya makubaliano ili kuchakata miamala kwa ufanisi na kupunguza ada za miamala kwa watumiaji. | Sidechains zinahitaji dhana za juu za uaminifu (k.m., akidi ya wathibitishaji hasidi wa sidechain inaweza kufanya ulaghai). | +| Sidechains zinazopatana na EVM huruhusu mfumo mtawanyo wa kimamlaka kupanua mfumo wao wa ikolojia. | | + +### Tumia Sidechains {#use-sidechains} + +Miradi mingi hutoa utekelezaji wa sidechains ambazo unaweza kuunganisha kwenye mfumo mtawanyo wa kimamlaka zako: + +- [Polygon PoS](https://polygon.technology/solutions/polygon-pos) +- [Skale](https://skale.network/) +- [Gnosis Chain (zamani xDai)](https://www.gnosischain.com/) +- [Loom Network](https://loomx.io/) +- [Metis Andromeda](https://www.metis.io/) + +## Masomo zaidi {#further-reading} + +- [Kuongeza ukubwa wa mfumo mtawanyo wa kimamlaka za Ethereum kupitia Sidechains](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _Feb 8, 2018 - Georgios Konstantopoulos_ + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/scaling/state-channels/index.md b/public/content/translations/sw/developers/docs/scaling/state-channels/index.md new file mode 100644 index 00000000000..9663978d722 --- /dev/null +++ b/public/content/translations/sw/developers/docs/scaling/state-channels/index.md @@ -0,0 +1,261 @@ +--- +title: Njia za Hali +description: Utangulizi wa njia za hali na njia za malipo kama suluhisho la uongezwaji linalotumiwa sasa na jumuiya ya Ethereum. +lang: sw +sidebarDepth: 3 +--- + +Njia za hali huruhusu washiriki kufanya miamala kwa usalama nje ya mnyororo huku wakiweka maingiliano na Mtandao Mkuu wa Ethereum kwa kiwango cha chini kabisa. Rika wa njia wanaweza kufanya idadi yoyote ya miamala ya nje ya mnyororo huku wakiwasilisha miamala miwili tu kwenye mnyororo ili kufungua na kufunga njia. Hii inaruhusu upitishaji wa juu sana wa miamala na husababisha gharama za chini kwa watumiaji. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa umesoma na kuelewa kurasa zetu kuhusu [Uongezwaji wa Ethereum](/developers/docs/scaling/) na [safu ya 2](/layer-2/). + +## Njia ni nini? {#what-are-channels} + +Minyororo ya bloku ya umma, kama vile Ethereum, hukumbana na changamoto za uongezwaji kutokana na usanifu wake uliosambazwa: miamala ya kwenye mnyororo lazima itekelezwe na nodi zote. Nodi zinapaswa kuwa na uwezo wa kushughulikia idadi ya miamala katika bloku kwa kutumia vifaa vya kawaida, na kuweka kikomo kwenye upitishaji wa miamala ili kuweka mtandao uliogatuliwa. Njia za mnyororo wa bloku hutatua tatizo hili kwa kuruhusu watumiaji kuingiliana nje ya mnyororo huku wakitegemea usalama wa mnyororo mkuu kwa suluhu ya mwisho. + +Njia ni itifaki rahisi za rika-kwa-rika zinazoruhusu pande mbili kufanya miamala mingi kati yao na kisha kutuma tu matokeo ya mwisho kwenye mnyororo wa bloku. Njia hutumia kriptografia kuonyesha kuwa data ya muhtasari wanayotengeneza ni matokeo ya kweli ya seti halali ya miamala ya kati. Mkataba-erevu wa ["multisig"](/developers/docs/smart-contracts/#multisig) huhakikisha kuwa miamala inatiwa saini na pande sahihi. + +Kwa kutumia njia, mabadiliko ya hali hutekelezwa na kuthibitishwa na pande zinazohusika, na hivyo kupunguza hesabu kwenye safu ya utekelezaji ya Ethereum. Hii hupunguza msongamano kwenye Ethereum na pia huongeza kasi ya uchakataji wa miamala kwa watumiaji. + +Kila njia inasimamiwa na [mkataba-erevu wa multisig](/developers/docs/smart-contracts/#multisig) inayofanya kazi kwenye Ethereum. Ili kufungua njia, washiriki hupeleka mkataba wa njia kwenye mnyororo na kuweka fedha ndani yake. Pande zote mbili kwa pamoja hutia saini sasisho la hali ili kuanzisha hali ya njia, baada ya hapo wanaweza kufanya miamala haraka na kwa uhuru nje ya mnyororo. + +Ili kufunga njia, washiriki huwasilisha hali ya mwisho iliyokubaliwa ya njia kwenye mnyororo. Baadaye, mkataba-erevu hugawanya fedha zilizofungwa kulingana na salio la kila mshiriki katika hali ya mwisho ya njia. + +Njia za rika-kwa-rika ni muhimu sana kwa hali ambapo baadhi ya washiriki waliobainishwa mapema wanataka kufanya miamala kwa marudio ya juu bila kupata gharama za ziada zinazoonekana. Njia za mnyororo wa bloku ziko chini ya kategoria mbili: **njia za malipo** na **njia za hali**. + +## Njia za malipo {#payment-channels} + +Njia ya malipo inaelezewa vyema kama "leja ya pande mbili" inayodumishwa kwa pamoja na watumiaji wawili. Salio la awali la leja ni jumla ya amana zilizofungwa katika mkataba wa kwenye mnyororo wakati wa awamu ya ufunguzi wa njia. Uhamisho wa njia ya malipo unaweza kufanywa papo hapo na bila kuhusisha mnyororo halisi wa bloku, isipokuwa kwa uundaji wa awali wa mara moja kwenye mnyororo na hatimaye kufungwa kwa njia. + +Masasisho ya salio la leja (yaani, hali ya njia ya malipo) yanahitaji idhini ya pande zote katika njia. Sasisho la njia, lililotiwa saini na washiriki wote wa njia, linachukuliwa kuwa la mwisho, kama vile muamala kwenye Ethereum. + +Njia za malipo zilikuwa miongoni mwa suluhisho za awali za kuongeza ukubwa zilizoundwa ili kupunguza shughuli za gharama kubwa za kwenye mnyororo za maingiliano rahisi ya watumiaji (k.m., uhamisho wa ETH, ubadilishanaji wa atomiki, malipo madogo). Washiriki wa njia wanaweza kufanya idadi isiyo na kikomo ya miamala ya papo hapo, isiyo na ada kati yao mradi tu jumla ya uhamisho wao haizidi tokeni zilizowekwa. + +## Njia za hali {#state-channels} + +Mbali na kusaidia malipo ya nje ya mnyororo, njia za malipo hazijathibitishwa kuwa muhimu kwa kushughulikia mantiki ya jumla ya mpito wa hali. Njia za hali ziliundwa kutatua tatizo hili na kufanya njia ziwe muhimu kwa ajili ya kuongeza ukubwa wa hesabu za madhumuni ya jumla. + +Njia za hali bado zina mambo mengi yanayofanana na njia za malipo. Kwa mfano, watumiaji huingiliana kwa kubadilishana ujumbe uliotiwa saini kwa njia ya kriptografia (miamala), ambao washiriki wengine wa njia lazima pia watie saini. Ikiwa sasisho la hali lililopendekezwa halijatiwa saini na washiriki wote, linachukuliwa kuwa batili. + +Hata hivyo, pamoja na kushikilia salio la watumiaji, njia pia hufuatilia hali ya sasa ya ghala la mkataba (yaani, thamani za vigezo vya mkataba). + +Hii inafanya iwezekane kutekeleza mkataba-erevu nje ya mnyororo kati ya watumiaji wawili. Katika hali hii, masasisho ya hali ya ndani ya mkataba-erevu yanahitaji tu idhini ya rika walioanzisha njia. + +Ingawa hii inatatua tatizo la uongezaji ukubwa lililoelezwa awali, ina athari kwa usalama. Kwenye Ethereum, uhalali wa mabadiliko ya hali unatekelezwa na itifaki ya makubaliano ya mtandao. Hii inafanya iwezekane kupendekeza sasisho batili kwa hali ya mkataba-erevu au kubadilisha utekelezaji wa mkataba-erevu. + +Njia za hali hazina hakikisho sawa la usalama. Kwa kiasi fulani, njia ya hali ni toleo dogo la Mtandao Mkuu. Kwa seti ndogo ya washiriki wanaotekeleza sheria, uwezekano wa tabia hasidi (k.m., kupendekeza masasisho ya hali batili) huongezeka. Njia za hali hupata usalama wao kutoka kwa mfumo wa usuluhishi wa mizozo unaotegemea [ushahidi wa ulaghai](/glossary/#fraud-proof). + +## Jinsi njia za hali zinavyofanya kazi {#how-state-channels-work} + +Kimsingi, shughuli katika njia ya hali ni kipindi cha maingiliano yanayohusisha watumiaji na mfumo wa mnyororo wa bloku. Watumiaji huwasiliana zaidi nje ya mnyororo na huingiliana tu na mnyororo wa bloku uliopo chini ili kufungua njia, kufunga njia, au kusuluhisha mizozo inayoweza kutokea kati ya washiriki. + +Sehemu ifuatayo inaelezea mtiririko wa kazi wa msingi wa njia ya hali: + +### Kufungua njia {#opening-the-channel} + +Kufungua njia kunahitaji washiriki kuweka fedha kwenye mkataba-erevu kwenye Mtandao Mkuu. Amana pia hufanya kazi kama kichupo halisi, kwa hivyo washiriki wanaoshiriki wanaweza kufanya miamala kwa uhuru bila kuhitaji kulipia malipo mara moja. Ni pale tu njia inapokamilishwa kwenye mnyororo ndipo pande zote hulipana na kutoa kile kilichobaki kwenye kichupo chao. + +Amana hii pia hutumika kama dhamana ya kuhakikisha tabia ya uaminifu kutoka kwa kila mshiriki. Ikiwa wawekaji amana watapatikana na hatia ya vitendo hasidi wakati wa awamu ya utatuzi wa mizozo, mkataba huchukua amana zao. + +Rika wa njia lazima watie saini hali ya awali, ambayo wote wanakubaliana nayo. Hii hutumika kama chanzo cha njia ya hali, baada ya hapo watumiaji wanaweza kuanza kufanya miamala. + +### Kutumia njia {#using-the-channel} + +Baada ya kuanzisha hali ya njia, rika huingiliana kwa kutia saini miamala na kuituma kwa wengine kwa idhini. Washiriki huanzisha masasisho ya hali na miamala hii na kutia saini masasisho ya hali kutoka kwa wengine. Kila muamala unajumuisha yafuatayo: + +- **Nonce**, ambayo hufanya kazi kama kitambulisho cha kipekee kwa miamala na kuzuia mashambulizi ya kurudia. Pia inabainisha mpangilio ambao masasisho ya hali yalitokea (ambayo ni muhimu kwa utatuzi wa mizozo) + +- Hali ya zamani ya njia + +- Hali mpya ya njia + +- Muamala unaosababisha mpito wa hali (k.m., Alice anamtumia Bob ETH 5) + +Masasisho ya hali katika njia hayatangazwi kwenye mnyororo kama ilivyo kawaida wakati watumiaji wanapoingiliana kwenye Mtandao Mkuu, jambo ambalo linaendana na lengo la njia za hali la kupunguza alama ya kwenye mnyororo. Muda wote washiriki wanapokubaliana juu ya masasisho ya hali, huwa ya mwisho kama muamala wa Ethereum. Washiriki wanahitaji tu kutegemea makubaliano ya Mtandao Mkuu ikiwa mzozo utatokea. + +### Kufunga njia {#closing-the-channel} + +Kufunga njia ya hali kunahitaji kuwasilisha hali ya mwisho, iliyokubaliwa ya njia kwenye mkataba-erevu wa kwenye mnyororo. Maelezo yaliyorejelewa katika sasisho la hali ni pamoja na idadi ya hatua za kila mshiriki na orodha ya miamala iliyoidhinishwa. + +Baada ya kuthibitisha kuwa sasisho la hali ni halali (yaani, limetiwa saini na pande zote), mkataba-erevu hukamilisha njia na kugawanya fedha zilizofungwa kulingana na matokeo ya njia. Malipo yaliyofanywa nje ya mnyororo yanatumika kwa hali ya Ethereum na kila mshiriki anapokea sehemu yake iliyobaki ya fedha zilizofungwa. + +Hali iliyoelezwa hapo juu inawakilisha kile kinachotokea katika kisa cha furaha. Wakati mwingine, watumiaji wanaweza kushindwa kufikia makubaliano na kukamilisha njia (kisa cha huzuni). Yoyote kati ya yafuatayo yanaweza kuwa kweli kuhusu hali hiyo: + +- Washiriki wanatoka mtandaoni na kushindwa kupendekeza mabadiliko ya hali + +- Washiriki wanakataa kutia saini pamoja masasisho halali ya hali + +- Washiriki wanajaribu kukamilisha njia kwa kupendekeza sasisho la hali ya zamani kwenye mkataba wa kwenye mnyororo + +- Washiriki wanapendekeza mabadiliko batili ya hali kwa wengine kutia saini + +Wakati wowote makubaliano yanapovunjika kati ya washiriki katika njia, chaguo la mwisho ni kutegemea makubaliano ya Mtandao Mkuu ili kutekeleza hali ya mwisho, halali ya njia. Katika kesi hii, kufunga njia ya hali kunahitaji kutatua mizozo kwenye mnyororo. + +### Kutatua mizozo {#settling-disputes} + +Kwa kawaida, pande zote katika njia hukubaliana kufunga njia mapema na kutia saini pamoja mpito wa hali ya mwisho, ambao wanauwasilisha kwenye mkataba-erevu. Mara tu sasisho linapoidhinishwa kwenye mnyororo, utekelezaji wa mkataba-erevu wa nje ya mnyororo unaisha na washiriki wanatoka kwenye njia na pesa zao. + +Hata hivyo, upande mmoja unaweza kuwasilisha ombi kwenye mnyororo ili kumaliza utekelezaji wa mkataba-erevu na kukamilisha njia—bila kusubiri idhini ya mwenzake. Ikiwa hali yoyote ya kuvunja makubaliano iliyoelezwa awali itatokea, upande wowote unaweza kuanzisha mkataba wa kwenye mnyororo ili kufunga njia na kugawanya fedha. Hii hutoa **kutokuaminiana**, kuhakikisha kuwa pande zaaminifu zinaweza kutoa amana zao wakati wowote, bila kujali matendo ya upande mwingine. + +Ili kushughulikia utokaji wa njia, mtumiaji lazima awasilishe sasisho la mwisho la hali halali ya mfumo uliotawanywa kwenye mkataba wa kwenye mnyororo. Ikiwa hii itakaguliwa (yaani, ina saini ya pande zote), basi fedha zinagawanywa tena kwa niaba yao. + +Kuna, hata hivyo, ucheleweshaji katika kutekeleza maombi ya kutoka kwa mtumiaji mmoja. Ikiwa ombi la kuhitimisha njia liliidhinishwa kwa kauli moja, basi muamala wa kutoka kwenye mnyororo unatekelezwa mara moja. + +Ucheleweshaji hutokea katika utokaji wa mtumiaji mmoja kutokana na uwezekano wa vitendo vya ulaghai. Kwa mfano, mshiriki wa njia anaweza kujaribu kukamilisha njia kwenye Ethereum kwa kuwasilisha sasisho la hali la zamani kwenye mnyororo. + +Kama hatua ya kukabiliana, njia za hali huruhusu watumiaji waaminifu kupinga masasisho batili ya hali kwa kuwasilisha hali ya hivi karibuni, halali ya njia kwenye mnyororo. Njia za hali zimeundwa kiasi kwamba masasisho mapya zaidi, yaliyokubaliwa ya hali hupita masasisho ya hali ya zamani. + +Mara tu rika anapoanzisha mfumo wa utatuzi wa mizozo kwenye mnyororo, upande mwingine unahitajika kujibu ndani ya muda uliopangwa (unaoitwa dirisha la changamoto). Hii inaruhusu watumiaji kupinga muamala wa kutoka, hasa ikiwa upande mwingine unatumia sasisho la zamani. + +Vyovyote iwavyo, watumiaji wa njia daima wana hakikisho thabiti la mwisho: ikiwa mpito wa hali walio nao ulitiwa saini na wanachama wote na ndio sasisho la hivi karibuni zaidi, basi lina mwisho sawa na muamala wa kawaida wa kwenye mnyororo. Bado wanapaswa kumpinga mpinzani mwingine kwenye mnyororo, lakini matokeo pekee yanayowezekana ni kukamilisha hali ya mwisho halali, ambayo wanayo. + +### Njia za hali huingilianaje na Ethereum? {#how-do-state-channels-interact-with-ethereum} + +Ingawa zipo kama itifaki za nje ya mnyororo, njia za hali zina sehemu ya kwenye mnyororo: mkataba-erevu uliowekwa kwenye Ethereum wakati wa kufungua njia. Mkataba huu unadhibiti mali zilizowekwa kwenye njia, unathibitisha masasisho ya hali, na unasuluhisha mizozo kati ya washiriki. + +Njia za hali hazichapishi data ya muamala au ahadi za hali kwenye Mtandao Mkuu, tofauti na suluhisho za kuongeza ukubwa za [safu ya 2](/layer-2/). Hata hivyo, zimeunganishwa zaidi na Mtandao Mkuu kuliko, tuseme, [sidechains](/developers/docs/scaling/sidechains/), na kuzifanya kuwa salama kwa kiasi fulani. + +Njia za hali zinategemea itifaki kuu ya Ethereum kwa yafuatayo: + +#### 1. Uhai {#liveness} + +Mkataba wa kwenye mnyororo unaotumika wakati wa kufungua njia unahusika na utendaji wa njia. Ikiwa mkataba unafanya kazi kwenye Ethereum, basi njia inapatikana kila wakati kwa matumizi. Kinyume chake, sidechain inaweza kushindwa kufanya kazi wakati wowote, hata kama Mtandao Mkuu unafanya kazi, na kuweka fedha za mtumiaji hatarini. + +#### 2. Usalama {#security} + +Kwa kiasi fulani, njia za hali hutegemea Ethereum kutoa usalama na kuwalinda watumiaji dhidi ya rika hasidi. Kama ilivyojadiliwa katika sehemu za baadaye, njia hutumia utaratibu wa ushahidi wa ulaghai unaoruhusu watumiaji kupinga majaribio ya kukamilisha njia na sasisho batili au la zamani. + +Katika kesi hii, upande mwaminifu hutoa hali ya hivi karibuni halali ya njia kama ushahidi wa ulaghai kwa mkataba wa kwenye mnyororo kwa ajili ya uthibitisho. Ushahidi wa ulaghai huwezesha pande zisizoaminiana kufanya miamala nje ya mnyororo bila kuhatarisha fedha zao katika mchakato huo. + +#### 3. Mwisho {#finality} + +Masasisho ya hali yaliyotiwa saini kwa pamoja na watumiaji wa njia yanachukuliwa kuwa mazuri kama miamala ya kwenye mnyororo. Bado, shughuli zote za ndani ya njia hufikia tu mwisho wa kweli wakati njia inapofungwa kwenye Ethereum. + +Katika kesi ya matumaini, pande zote mbili zinaweza kushirikiana na kutia saini sasisho la hali ya mwisho na kuwasilisha kwenye mnyororo ili kufunga njia, baada ya hapo fedha zinagawanywa kulingana na hali ya mwisho ya njia. Katika kisa cha kukata tamaa, ambapo mtu anajaribu kudanganya kwa kuchapisha sasisho la hali lisilo sahihi kwenye mnyororo, muamala wao haukamilishwi hadi dirisha la changamoto litakapopita. + +## Njia za hali halisi {#virtual-state-channels} + +Utekelezaji wa kimsingi wa njia ya hali itakuwa ni kupeleka mkataba mpya wakati watumiaji wawili wanataka kutekeleza mfumo uliotawanywa nje ya mnyororo. Hii sio tu haiwezekani, lakini pia inabatilisha ufanisi wa gharama wa njia za hali (gharama za muamala wa kwenye mnyororo zinaweza kuongezeka haraka). + +Ili kutatua tatizo hili, "njia halisi" ziliundwa. Tofauti na njia za kawaida zinazohitaji miamala ya kwenye mnyororo ili kufungua na kumaliza, njia halisi inaweza kufunguliwa, kutekelezwa, na kukamilishwa bila kuingiliana na mnyororo mkuu. Inawezekana hata kutatua mizozo nje ya mnyororo kwa kutumia njia hii. + +Mfumo huu unategemea kuwepo kwa kinachoitwa "njia za leja", ambazo zimewekewa fedha kwenye mnyororo. Njia halisi kati ya pande mbili zinaweza kujengwa juu ya njia ya leja iliyopo, huku mmiliki (wamiliki) wa njia ya leja wakitumika kama mpatanishi. + +Watumiaji katika kila njia halisi huingiliana kupitia mfano mpya wa mkataba, huku njia ya leja ikiwa na uwezo wa kusaidia mifano mingi ya mkataba. Hali ya njia ya leja pia ina zaidi ya hali moja ya ghala la mkataba, na kuruhusu utekelezaji sambamba wa mifumo iliyotawanywa tofauti nje ya mnyororo kati ya watumiaji tofauti. + +Kama tu njia za kawaida, watumiaji hubadilishana masasisho ya hali ili kuendeleza mashine ya hali. Isipokuwa mzozo utatokea, mpatanishi anahitaji tu kuwasiliana naye wakati wa kufungua au kumaliza njia. + +### Njia halisi za malipo {#virtual-payment-channels} + +Njia halisi za malipo hufanya kazi kwa wazo sawa na njia halisi za hali: washiriki waliounganishwa kwenye mtandao mmoja wanaweza kupitisha ujumbe bila kuhitaji kufungua njia mpya kwenye mnyororo. Katika njia halisi za malipo, uhamisho wa thamani huelekezwa kupitia mpatanishi mmoja au zaidi, na hakikisho kwamba ni mpokeaji aliyekusudiwa pekee anayeweza kupokea fedha zilizohamishwa. + +## Matumizi ya njia za hali {#applications-of-state-channels} + +### Malipo {#payments} + +Njia za awali za mnyororo wa bloku zilikuwa itifaki rahisi zilizoruhusu washiriki wawili kufanya uhamisho wa haraka, wa ada ya chini nje ya mnyororo bila kulipa ada za juu za muamala kwenye Mtandao Mkuu. Leo, njia za malipo bado ni muhimu kwa mifumo iliyotawanywa iliyoundwa kwa ajili ya kubadilishana na kuweka ether na tokeni. + +Malipo yanayotegemea njia yana faida zifuatazo: + +1. **Upitishaji**: Kiasi cha miamala ya nje ya mnyororo kwa kila njia hakihusiani na upitishaji wa Ethereum, ambao huathiriwa na mambo mbalimbali, hasa ukubwa wa bloku na muda wa bloku. Kwa kutekeleza miamala nje ya mnyororo, njia za mnyororo wa bloku zinaweza kufikia upitishaji wa juu zaidi. + +2. **Faragha**: Kwa sababu njia zipo nje ya mnyororo, maelezo ya maingiliano kati ya washiriki hayarekodiwi kwenye mnyororo wa bloku wa umma wa Ethereum. Watumiaji wa njia wanahitaji tu kuingiliana kwenye mnyororo wakati wa kuweka fedha na kufunga njia au kutatua mizozo. Hivyo, njia ni muhimu kwa watu wanaotaka miamala ya faragha zaidi. + +3. **Ucheleweshaji**: Miamala ya nje ya mnyororo inayofanywa kati ya washiriki wa njia inaweza kusuluhishwa papo hapo, ikiwa pande zote mbili zitashirikiana, na hivyo kupunguza ucheleweshaji. Kinyume chake, kutuma muamala kwenye Mtandao Mkuu kunahitaji kusubiri nodi zichakate muamala, zitoe bloku mpya na muamala, na kufikia makubaliano. Watumiaji wanaweza pia kuhitaji kusubiri uthibitisho zaidi wa bloku kabla ya kuzingatia muamala kuwa wa mwisho. + +4. **Gharama**: Njia za hali ni muhimu sana katika hali ambapo seti ya washiriki watabadilishana masasisho mengi ya hali kwa kipindi kirefu. Gharama pekee zinazotozwa ni kufungua na kufunga mkataba-erevu wa njia ya hali; kila mabadiliko ya hali kati ya kufungua na kufunga njia yatakuwa ya bei nafuu kuliko ya mwisho kwani gharama ya suluhu inasambazwa ipasavyo. + +Kutekeleza njia za hali kwenye suluhisho za safu ya 2, kama vile [unda-mpya](/developers/docs/scaling/#rollups), kunaweza kuzifanya zivutie zaidi kwa malipo. Ingawa njia hutoa malipo ya bei nafuu, gharama za kuanzisha mkataba wa kwenye mnyororo kwenye Mtandao Mkuu wakati wa awamu ya ufunguzi zinaweza kuwa ghali—hasa wakati ada za gesi zinapopanda. Unda-mpya zinazotegemea Ethereum hutoa [ada za chini za muamala](https://l2fees.info/) na zinaweza kupunguza gharama za ziada kwa washiriki wa njia kwa kupunguza ada za usanidi. + +### Miamala midogo {#microtransactions} + +Miamala midogo ni malipo ya thamani ya chini (k.m., chini ya sehemu ya dola) ambayo biashara haziwezi kushughulikia bila kupata hasara. Vyombo hivi lazima vilipe watoa huduma za malipo, jambo ambalo hawawezi kufanya ikiwa faida kwenye malipo ya wateja ni ndogo sana kupata faida. + +Njia za malipo hutatua tatizo hili kwa kupunguza gharama za ziada zinazohusiana na miamala midogo. Kwa mfano, Mtoa Huduma za Mtandao (ISP) anaweza kufungua njia ya malipo na mteja, na kuwaruhusu kutiririsha malipo madogo kila wanapotumia huduma. + +Zaidi ya gharama ya kufungua na kufunga njia, washiriki hawapati gharama zaidi kwenye miamala midogo (hakuna ada za gesi). Hii ni hali ya kushinda-kushinda kwani wateja wana unyumbufu zaidi katika jinsi wanavyolipia huduma na biashara hazipotezi miamala midogo yenye faida. + +### Mifumo iliyotawanywa {#decentralized-applications} + +Kama njia za malipo, njia za hali zinaweza kufanya malipo ya masharti kulingana na hali za mwisho za mashine ya hali. Njia za hali zinaweza pia kusaidia mantiki ya mpito ya hali holela, na kuzifanya kuwa muhimu kwa kutekeleza programu za jumla nje ya mnyororo. + +Njia za hali mara nyingi huwekewa mipaka kwa programu rahisi za zamu, kwani hii inafanya iwe rahisi kudhibiti fedha zilizowekwa kwenye mkataba wa kwenye mnyororo. Pia, kwa idadi ndogo ya pande zinazosasisha hali ya mfumo uliotawanywa wa nje ya mnyororo kwa vipindi, kuadhibu tabia isiyo ya uaminifu ni rahisi kiasi. + +Ufanisi wa mfumo uliotawanywa wa njia ya hali pia unategemea muundo wake. Kwa mfano, msanidi programu anaweza kupeleka mkataba wa njia ya programu kwenye mnyororo mara moja na kuruhusu wachezaji wengine kutumia tena programu bila kulazimika kwenda kwenye mnyororo. Katika kesi hii, njia ya awali ya programu hutumika kama njia ya leja inayosaidia njia nyingi halisi, kila moja ikiendesha mfano mpya wa mkataba-erevu wa programu nje ya mnyororo. + +Kesi inayowezekana ya matumizi ya mifumo iliyotawanywa ya njia za hali ni michezo rahisi ya wachezaji wawili, ambapo fedha zinagawanywa kulingana na matokeo ya mchezo. Faida hapa ni kwamba wachezaji hawana haja ya kuaminiana (kutokuaminiana) na mkataba wa kwenye mnyororo, sio wachezaji, ndio unaodhibiti ugawaji wa fedha na utatuzi wa mizozo (ugatuaji). + +Kesi zingine zinazowezekana za matumizi ya programu za njia za hali ni pamoja na umiliki wa jina la ENS, leja za NFT, na mengi zaidi. + +### Uhamisho wa atomiki {#atomic-transfers} + +Njia za malipo za awali ziliwekewa mipaka kwa uhamisho kati ya pande mbili, na hivyo kupunguza utumiaji wao. Hata hivyo, kuanzishwa kwa njia halisi kuliruhusu watu binafsi kuelekeza uhamisho kupitia wapatanishi (yaani, njia nyingi za p2p) bila kulazimika kufungua njia mpya kwenye mnyororo. + +Yanayoelezewa kwa kawaida kama "uhamisho wa hatua nyingi", malipo yaliyoelekezwa ni ya atomiki (yaani, sehemu zote za muamala hufaulu au inashindwa kabisa). Uhamisho wa atomiki hutumia [Mikataba ya Kufunga Muda kwa Hashi (HTLCs)](https://en.bitcoin.it/wiki/Hash_Time_Locked_Contracts) kuhakikisha malipo yanatolewa tu ikiwa masharti fulani yametimizwa, na hivyo kupunguza hatari ya upande mwingine. + +## Hasara za kutumia njia za hali {#drawbacks-of-state-channels} + +### Dhana za uhai {#liveness-assumptions} + +Ili kuhakikisha ufanisi, njia za hali huweka mipaka ya muda juu ya uwezo wa washiriki wa njia kujibu mizozo. Sheria hii inadhani kuwa rika watakuwa mtandaoni kila wakati ili kufuatilia shughuli za njia na kupinga changamoto inapobidi. + +Kwa kweli, watumiaji wanaweza kutoka mtandaoni kwa sababu zisizo za hiari yao (k.m., muunganisho duni wa intaneti, hitilafu ya kiufundi, n.k.). Ikiwa mtumiaji mwaminifu atatoka mtandaoni, rika hasidi anaweza kutumia hali hiyo kwa kuwasilisha hali za zamani za kati kwenye mkataba wa msuluhishi na kuiba fedha zilizowekwa. + +Baadhi ya njia hutumia "walinzi wa mnara"—vyombo vinavyohusika na kutazama matukio ya mizozo ya kwenye mnyororo kwa niaba ya wengine na kuchukua hatua muhimu, kama vile kuwatahadharisha wahusika. Hata hivyo, hii inaweza kuongeza gharama za kutumia njia ya hali. + +### Kutopatikana kwa data {#data-unavailability} + +Kama ilivyoelezwa awali, kupinga mzozo batili kunahitaji kuwasilisha hali ya hivi karibuni, halali ya njia ya hali. Hii ni sheria nyingine inayotegemea dhana—kwamba watumiaji wana ufikiaji wa hali ya hivi karibuni ya njia. + +Ingawa kutarajia watumiaji wa njia kuhifadhi nakala za hali ya mfumo uliotawanywa wa nje ya mnyororo ni jambo la busara, data hii inaweza kupotea kutokana na kosa au hitilafu ya kiufundi. Ikiwa mtumiaji hana nakala ya data, anaweza tu kutumaini kwamba upande mwingine hautakamilisha ombi batili la kutoka kwa kutumia mabadiliko ya hali ya zamani yaliyo mikononi mwake. + +Watumiaji wa Ethereum hawana haja ya kukabiliana na tatizo hili kwani mtandao unatekeleza sheria za upatikanaji wa data. Data ya muamala huhifadhiwa na kusambazwa na nodi zote na inapatikana kwa watumiaji kupakua ikiwa na inapobidi. + +### Masuala ya ukwasi {#liquidity-issues} + +Ili kuanzisha njia ya mnyororo wa bloku, washiriki wanahitaji kufunga fedha katika mkataba-erevu wa kwenye mnyororo kwa ajili ya mzunguko wa maisha wa njia. Hii inapunguza ukwasi wa watumiaji wa njia na pia inazuia njia kwa wale tu wanaoweza kumudu kuweka fedha zilizofungwa kwenye Mtandao Mkuu. + +Hata hivyo, njia za leja—zinazoendeshwa na mtoa huduma wa nje ya mnyororo (OSP)—zinaweza kupunguza masuala ya ukwasi kwa watumiaji. Rika wawili waliounganishwa na njia ya leja wanaweza kuunda njia halisi, ambayo wanaweza kuifungua na kuikamilisha kabisa nje ya mnyororo, wakati wowote wanapotaka. + +Watoa huduma wa nje ya mnyororo wanaweza pia kufungua njia na rika wengi, na kuwafanya kuwa muhimu kwa kuelekeza malipo. Bila shaka, watumiaji lazima walipe ada kwa OSP kwa huduma zao, jambo ambalo linaweza kuwa lisilopendeza kwa wengine. + +### Mashambulizi ya kukera {#griefing-attacks} + +Mashambulizi ya kukera ni kipengele cha kawaida cha mifumo inayotegemea ushahidi wa ulaghai. Shambulio la kukera halimnufaishi moja kwa moja mshambuliaji lakini linasababisha kero (yaani, madhara) kwa mwathiriwa, ndiyo maana ya jina hilo. + +Uthibitishaji wa ulaghai huathiriwa na mashambulizi ya kukera kwa sababu upande mwaminifu lazima ujibu kila mzozo, hata yale batili, au kuhatarisha kupoteza fedha zao. Mshiriki hasidi anaweza kuamua kurudia kuchapisha mabadiliko ya hali ya zamani kwenye mnyororo, na kumlazimisha upande mwaminifu kujibu na hali halali. Gharama za miamala hiyo ya kwenye mnyororo inaweza kuongezeka haraka, na kusababisha pande zaaminifu kupoteza katika mchakato huo. + +### Seti za washiriki zilizobainishwa mapema {#predefined-participant-sets} + +Kwa muundo, idadi ya washiriki wanaounda njia ya hali hubaki sawa katika maisha yake yote. Hii ni kwa sababu kusasisha seti ya washiriki kungechanganya utendaji wa njia, hasa wakati wa kuweka fedha kwenye njia, au kutatua mizozo. Kuongeza au kuondoa washiriki pia kungehitaji shughuli za ziada kwenye mnyororo, jambo ambalo huongeza gharama za ziada kwa watumiaji. + +Ingawa hii inafanya njia za hali kuwa rahisi kufikiria, inapunguza manufaa ya miundo ya njia kwa wasanidi programu. Hii inaelezea kwa kiasi kwa nini njia za hali zimeachwa na kupendelewa suluhisho zingine za kuongeza ukubwa, kama vile unda-mpya. + +### Uchakataji wa miamala sambamba {#parallel-transaction-processing} + +Washiriki katika njia ya hali hutuma masasisho ya hali kwa zamu, ndiyo maana zinafanya kazi vizuri zaidi kwa "mifumo iliyotawanywa ya zamu" (k.m., mchezo wa chess wa wachezaji wawili). Hii huondoa hitaji la kushughulikia masasisho ya hali ya wakati mmoja na inapunguza kazi ambayo mkataba wa kwenye mnyororo unapaswa kufanya ili kuwaadhibu wachapishaji wa sasisho la zamani. Hata hivyo, athari ya upande ya muundo huu ni kwamba miamala inategemeana, na kuongeza ucheleweshaji na kupunguza uzoefu wa jumla wa mtumiaji. + +Baadhi ya njia za hali hutatua tatizo hili kwa kutumia muundo wa "duplex kamili" unaogawanya hali ya nje ya mnyororo katika hali mbili za "simplex" za mwelekeo mmoja, na kuruhusu masasisho ya hali ya wakati mmoja. Miundo kama hiyo inaboresha upitishaji wa nje ya mnyororo na inapunguza ucheleweshaji wa miamala. + +## Tumia njia za hali {#use-state-channels} + +Miradi mingi hutoa utekelezaji wa njia za hali ambazo unaweza kuunganisha kwenye mifumo yako mtawanyo ya kimamlaka: + +- [Connext](https://connext.network/) +- [Kchannels](https://www.kchannels.io/) +- [Perun](https://perun.network/) +- [Raiden](https://raiden.network/) +- [Statechannels.org](https://statechannels.org/) + +## Masomo zaidi {#further-reading} + +**Ugavi na Utoaji wa Eth {#eth-supply-and-issuance}** + +- [Kuelewa Masuluhisho ya Uongezwaji ya Safu ya 2 ya Ethereum: Njia za Hali, Plasma, na Truebit](https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4) _– Josh Stark, Feb 12 2018_ +- [Njia za Hali - maelezo](https://www.jeffcoleman.ca/state-channels/) _Nov 6, 2015 - Jeff Coleman_ +- [Misingi ya Njia za Hali](https://education.district0x.io/general-topics/understanding-ethereum/basics-state-channels/) _District0x_ +- [Njia za Hali za Mnyororo wa Bloku: Hali ya Sanaa](https://ieeexplore.ieee.org/document/9627997) + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/scaling/validium/index.md b/public/content/translations/sw/developers/docs/scaling/validium/index.md new file mode 100644 index 00000000000..9294a329594 --- /dev/null +++ b/public/content/translations/sw/developers/docs/scaling/validium/index.md @@ -0,0 +1,166 @@ +--- +title: Validium +description: Utangulizi wa Validium kama suluhisho la kuongeza ukubwa linalotumika sasa na jumuiya ya Ethereum. +lang: sw +sidebarDepth: 3 +--- + +Validium ni [suluhisho la kuongeza ukubwa](/developers/docs/scaling/) ambalo hutekeleza uadilifu wa miamala kwa kutumia ithibati za uhalali kama vile [ZK-rollups](/developers/docs/scaling/zk-rollups/), lakini haihifadhi data ya miamala kwenye Mtandao Mkuu wa Ethereum. Ingawa upatikanaji wa data nje ya mnyororo una changamoto zake, unaweza kusababisha maboresho makubwa katika kuongeza ukubwa (validiums zinaweza kuchakata [miamala ~9,000, au zaidi, kwa sekunde](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)). + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa umesoma na kuelewa ukurasa wetu kuhusu [kuongeza ukubwa wa Ethereum](/developers/docs/scaling/) na [safu ya 2](/layer-2). + +## Validium ni nini? {#what-is-validium} + +Validiums ni suluhu za kuongeza ukubwa zinazotumia upatikanaji wa data na ukokotoaji nje ya mnyororo zilizoundwa kuboresha upitishaji kwa kuchakata miamala nje ya Mtandao Mkuu wa Ethereum. Kama vile zero-knowledge rollups (ZK-rollups), validiums huchapisha [ithibati za zero-knowledge](/glossary/#zk-proof) ili kuthibitisha miamala ya nje ya mnyororo kwenye Ethereum. Hii huzuia mabadiliko ya hali batili na huongeza dhamana ya usalama ya mnyororo wa validium. + +"Ithibati hizi za uhalali" zinaweza kuja kwa njia ya ZK-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) au ZK-STARKs (Zero-Knowledge Scalable Transparent ARgument of Knowledge). Zaidi kuhusu [ithibati za zero-knowledge](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/). + +Fedha za watumiaji wa validium zinadhibitiwa na mkataba-erevu kwenye Ethereum. Validiums hutoa uondoaji wa pesa karibu na papo hapo, kama vile ZK-rollups; mara tu ithibati ya uhalali kwa ombi la uondoaji imethibitishwa kwenye Mtandao Mkuu, watumiaji wanaweza kutoa fedha kwa kutoa [ithibati za Merkle](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). Ithibati ya Merkle huthibitisha ujumuishwaji wa muamala wa uondoaji wa mtumiaji katika kundi la miamala lililothibitishwa, ikiruhusu mkataba wa kwenye mnyororo kuchakata uondoaji huo. + +Hata hivyo, watumiaji wa validium wanaweza kugandishiwa fedha zao na uondoaji kuzuiwa. Hii inaweza kutokea ikiwa wasimamizi wa upatikanaji wa data kwenye mnyororo wa validium watawazuilia watumiaji data ya hali ya nje ya mnyororo. Bila ufikiaji wa data ya miamala, watumiaji hawawezi kukokotoa ithibati ya Merkle inayohitajika kuthibitisha umiliki wa fedha na kutekeleza uondoaji. + +Huu ndio tofauti kuu kati ya validiums na ZK-rollups—msimamo wao kwenye wigo wa upatikanaji wa data. Suluhisho zote mbili zinashughulikia uhifadhi wa data kwa njia tofauti, jambo ambalo lina athari kwa usalama na kutohitaji uaminifu. + +## Je, validiums huingiliana vipi na Ethereum? {#how-do-validiums-interact-with-ethereum} + +Validiums ni itifaki za kuongeza ukubwa zilizojengwa juu ya mnyororo uliopo wa Ethereum. Ingawa hutekeleza miamala nje ya mnyororo, mnyororo wa validium unasimamiwa na mkusanyiko wa mikataba-erevu iliyotumwa kwenye Mtandao Mkuu ikijumuisha: + +1. **Mkataba wa kuthibitisha**: Mkataba wa kuthibitisha huthibitisha uhalali wa ithibati zilizowasilishwa na mwendeshaji wa validium wakati wa kufanya masasisho ya hali. Hii inajumuisha ithibati za uhalali zinazothibitisha usahihi wa miamala ya nje ya mnyororo na ithibati za upatikanaji wa data zinazothibitisha uwepo wa data ya miamala ya nje ya mnyororo. + +2. **Mkataba mkuu**: Mkataba mkuu huhifadhi ahadi za hali (mizizi ya Merkle) zilizowasilishwa na wazalishaji wa bloku na husasisha hali ya validium mara tu ithibati ya uhalali inapothibitishwa kwenye mnyororo. Mkataba huu pia huchakata amana na uondoaji kutoka kwa mnyororo wa validium. + +Validiums pia hutegemea mnyororo mkuu wa Ethereum kwa yafuatayo: + +### Marekebisho {#settlement} + +Miamala inayotekelezwa kwenye validium haiwezi kuthibitishwa kikamilifu hadi mnyororo mkuu utakapothibitisha uhalali wake. Shughuli zote zinazofanywa kwenye validium lazima hatimaye zirekebishwe kwenye Mtandao Mkuu. Mnyororo wa bloku wa Ethereum pia hutoa "dhamana za marekebisho" kwa watumiaji wa validium, ikimaanisha miamala ya nje ya mnyororo haiwezi kubadilishwa au kurekebishwa mara tu inapowekwa kwenye mnyororo. + +### Usalama {#security} + +Ethereum, ikifanya kazi kama safu ya marekebisho, pia inahakikisha uhalali wa mabadiliko ya hali kwenye validium. Miamala ya nje ya mnyororo inayotekelezwa kwenye mnyororo wa validium huthibitishwa kupitia mkataba-erevu kwenye safu ya msingi ya Ethereum. + +Ikiwa mkataba wa kuthibitisha kwenye mnyororo utaona ithibati ni batili, miamala hukataliwa. Hii inamaanisha waendeshaji lazima watimize masharti ya uhalali yanayotekelezwa na itifaki ya Ethereum kabla ya kusasisha hali ya validium. + +## Je, validium inafanyaje kazi? {#how-does-validium-work} + +### Miamala {#transactions} + +Watumiaji huwasilisha miamala kwa mwendeshaji, nodi inayohusika na kutekeleza miamala kwenye mnyororo wa validium. Baadhi ya validiums zinaweza kutumia mwendeshaji mmoja kutekeleza mnyororo au kutegemea utaratibu wa [uthibitisho wa hisa (PoS)](/developers/docs/consensus-mechanisms/pos/) kwa waendeshaji wanaozunguka. + +Mwendeshaji hukusanya miamala katika kundi na kuituma kwenye sakiti ya kuthibitisha kwa ajili ya uthibitisho. Sakiti ya kuthibitisha inakubali kundi la miamala (na data nyingine muhimu) kama pembejeo na hutoa ithibati ya uhalali inayothibitisha kuwa shughuli zilifanywa kwa usahihi. + +### Ahadi za hali {#state-commitments} + +Hali ya validium huwekwa hashi kama mti wa Merkle na mzizi huhifadhiwa kwenye mkataba mkuu kwenye Ethereum. Mzizi wa Merkle, unaojulikana pia kama mzizi wa hali, hufanya kazi kama ahadi ya kriptografia kwa hali ya sasa ya akaunti na salio kwenye validium. + +Ili kufanya sasisho la hali, mwendeshaji lazima akokotoe mzizi mpya wa hali (baada ya kutekeleza miamala) na kuiwasilisha kwa mkataba wa kwenye mnyororo. Ikiwa ithibati ya uhalali itakaguliwa, hali iliyopendekezwa inakubaliwa na validium hubadilika na kuwa mzizi mpya wa hali. + +### Amana na uondoaji {#deposits-and-withdrawals} + +Watumiaji huhamisha fedha kutoka Ethereum hadi validium kwa kuweka ETH (au tokeni yoyote inayoendana na ERC) kwenye mkataba wa kwenye mnyororo. Mkataba hupeleka tukio la amana kwa validium nje ya mnyororo, ambapo anwani ya mtumiaji hupewa kiasi sawa na amana yake. Mwendeshaji pia hujumuisha muamala huu wa amana katika kundi jipya. + +Ili kurudisha fedha kwenye Mtandao Mkuu, mtumiaji wa validium huanzisha muamala wa uondoaji na kuwasilisha kwa mwendeshaji ambaye huthibitisha ombi la uondoaji na kulijumuisha kwenye kundi. Mali za mtumiaji kwenye mnyororo wa validium pia huharibiwa kabla ya kuweza kutoka kwenye mfumo. Mara tu ithibati ya uhalali inayohusishwa na kundi inapothibitishwa, mtumiaji anaweza kupiga simu mkataba mkuu ili kuondoa salio la amana yake ya awali. + +Kama utaratibu wa kuzuia udhibiti, itifaki ya validium inaruhusu watumiaji kuondoa moja kwa moja kutoka kwa mkataba wa validium bila kupitia kwa mwendeshaji. Katika kesi hii, watumiaji wanahitaji kutoa ithibati ya Merkle kwa mkataba wa kuthibitisha ikionyesha ujumuishwaji wa akaunti katika mzizi wa hali. Ikiwa ithibati itakubaliwa, mtumiaji anaweza kupiga simu kazi ya uondoaji ya mkataba mkuu ili kutoa fedha zake kutoka kwa validium. + +### Uwasilishaji wa kundi {#batch-submission} + +Baada ya kutekeleza kundi la miamala, mwendeshaji huwasilisha ithibati ya uhalali inayohusiana na mkataba wa kuthibitisha na kupendekeza mzizi mpya wa hali kwa mkataba mkuu. Ikiwa ithibati ni halali, mkataba mkuu husasisha hali ya validium na kukamilisha matokeo ya miamala katika kundi. + +Tofauti na ZK-rollup, wazalishaji wa bloku kwenye validium hawahitajiki kuchapisha data ya miamala kwa makundi ya miamala (vichwa vya bloku pekee). Hii inafanya validium kuwa itifaki ya kuongeza ukubwa ya nje ya mnyororo tu, kinyume na itifaki za kuongeza ukubwa "mseto" (yaani, [safu ya 2](/layer-2/)) ambazo huchapisha data ya hali kwenye mnyororo mkuu wa Ethereum kwa kutumia data ya blob, `calldata`, au mchanganyiko wa zote mbili. + +### Upatikanaji wa data {#data-availability} + +Kama ilivyotajwa, validiums hutumia mtindo wa upatikanaji wa data nje ya mnyororo, ambapo waendeshaji huhifadhi data yote ya miamala nje ya Mtandao Mkuu wa Ethereum. Nyayo ya chini ya data kwenye mnyororo ya Validium inaboresha kuongeza ukubwa (upitishaji hauzuiwi na uwezo wa Ethereum wa kuchakata data) na inapunguza ada za watumiaji (gharama ya kuchapisha data kwenye mnyororo ni ya chini). + +Hata hivyo, upatikanaji wa data nje ya mnyororo huleta tatizo: data muhimu kwa ajili ya kuunda au kuthibitisha ithibati za Merkle inaweza isipatikane. Hii inamaanisha watumiaji wanaweza wasiweze kutoa fedha kutoka kwa mkataba wa kwenye mnyororo ikiwa waendeshaji watafanya vitendo vya hasidi. + +Suluhisho mbalimbali za validium zinajaribu kutatua tatizo hili kwa kugatua uhifadhi wa data ya hali. Hii inahusisha kuwalazimisha wazalishaji wa bloku kutuma data ya msingi kwa "wasimamizi wa upatikanaji wa data" wanaohusika na kuhifadhi data ya nje ya mnyororo na kuifanya ipatikane kwa watumiaji wanapoiomba. + +Wasimamizi wa upatikanaji wa data katika validium huthibitisha upatikanaji wa data kwa miamala ya nje ya mnyororo kwa kutia saini kila kundi la validium. Sahihi hizi huunda aina ya "ithibati ya upatikanaji" ambayo mkataba wa kuthibitisha kwenye mnyororo huikagua kabla ya kuidhinisha masasisho ya hali. + +Validiums hutofautiana katika mbinu zao za usimamizi wa upatikanaji wa data. Baadhi hutegemea wahusika wanaoaminika kuhifadhi data ya hali, wakati wengine hutumia wathibitishaji waliopewa nasibu kwa kazi hiyo. + +#### Kamati ya upatikanaji wa data (DAC) {#data-availability-committee} + +Ili kuhakikisha upatikanaji wa data ya nje ya mnyororo, baadhi ya suluhu za validium huteua kundi la vyombo vinavyoaminika, vinavyojulikana kwa pamoja kama kamati ya upatikanaji wa data (DAC), ili kuhifadhi nakala za hali na kutoa uthibitisho wa upatikanaji wa data. Kamati za DAC ni rahisi kutekeleza na zinahitaji uratibu mdogo kwa kuwa uanachama ni mdogo. + +Hata hivyo, watumiaji lazima waamini DAC ili kufanya data ipatikane inapohitajika (k.m., kwa ajili ya kuzalisha ithibati za Merkle). Kuna uwezekano wa wanachama wa kamati za upatikanaji wa data [kuathiriwa na mhusika hasidi](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) ambaye anaweza kuzuia data ya nje ya mnyororo. + +[Zaidi kuhusu kamati za upatikanaji wa data katika validiums](https://medium.com/starkware/data-availability-e5564c416424). + +#### Upatikanaji wa data uliodhaminiwa {#bonded-data-availability} + +Validiums nyingine zinahitaji washiriki wanaohusika na kuhifadhi data ya nje ya mtandao kuweka hisa (yaani, kufungia) tokeni katika mkataba-erevu kabla ya kuchukua majukumu yao. Hisa hii hutumika kama "dhamana" ili kuhakikisha tabia ya uaminifu miongoni mwa wasimamizi wa upatikanaji wa data na inapunguza dhana za uaminifu. Ikiwa washiriki hawa watashindwa kuthibitisha upatikanaji wa data, dhamana hupunguzwa. + +Katika mpango wa upatikanaji wa data uliodhaminiwa, mtu yeyote anaweza kupewa jukumu la kushikilia data ya nje ya mnyororo mara tu anapotoa hisa inayohitajika. Hii huongeza bwawa la wasimamizi wa upatikanaji wa data wanaostahili, na kupunguza ugatuzi unaoathiri kamati za upatikanaji wa data (DACs). Muhimu zaidi, mbinu hii inategemea motisha za kiuchumi za kripto kuzuia shughuli hasidi, ambayo ni salama zaidi kuliko kuteua wahusika wanaoaminika ili kulinda data ya nje ya mtandao katika validium. + +[Zaidi kuhusu upatikanaji wa data uliodhaminiwa katika validiums](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf). + +## Volitions na validium {#volitions-and-validium} + +Validiums hutoa faida nyingi lakini huja na changamoto (hasa, upatikanaji wa data). Lakini, kama ilivyo kwa suluhu nyingi za kuongeza ukubwa, validiums zinafaa kwa matumizi maalum—ndiyo maana volitions ziliundwa. + +Volitions huchanganya ZK-rollup na mnyororo wa validium na huruhusu watumiaji kubadili kati ya suluhu mbili za kuongeza ukubwa. Kwa kutumia volitions, watumiaji wanaweza kunufaika na upatikanaji wa data nje ya mnyororo wa validium kwa miamala fulani, huku wakibaki na uhuru wa kubadili hadi suluhisho la upatikanaji wa data kwenye mnyororo (ZK-rollup) ikihitajika. Hii kimsingi huwapa watumiaji uhuru wa kuchagua changamoto kulingana na mazingira yao ya kipekee. + +Exchange isiyogatuliwa (DEX) inaweza kupendelea kutumia miundombinu inayoweza kuongezeka na ya faragha ya validium kwa biashara za thamani ya juu. Inaweza pia kutumia ZK-rollup kwa watumiaji wanaotaka dhamana za juu za usalama na kutohitaji uaminifu za ZK-rollup. + +## Upatanifu wa Validiums na EVM {#validiums-and-evm-compatibility} + +Kama ZK-rollups, validiums zinafaa zaidi kwa programu rahisi, kama vile ubadilishanaji wa tokeni na malipo. Kusaidia ukokotoaji wa jumla na utekelezaji wa mikataba-erevu miongoni mwa validiums ni vigumu kutekeleza, kutokana na gharama kubwa ya kuthibitisha maagizo ya [EVM](/developers/docs/evm/) katika sakiti ya ithibati ya zero-knowledge. + +Baadhi ya miradi ya validium hujaribu kukwepa tatizo hili kwa kuandaa lugha zinazoendana na EVM (k.m., Solidity, Vyper) ili kuunda bytecode maalum iliyoboreshwa kwa uthibitisho mzuri. Upungufu wa mbinu hii ni kwamba VM mpya zinazofaa kwa ithibati za zero-knowledge zinaweza zisiunge mkono opcodes muhimu za EVM, na wasanidi programu wanapaswa kuandika moja kwa moja katika lugha ya kiwango cha juu kwa uzoefu bora. Hii inaleta matatizo zaidi: inawalazimisha wasanidi programu kujenga mfumo mtawanyo wa kimamlaka na rundo jipya kabisa la usanidi na inavunja upatanifu na miundombinu ya sasa ya Ethereum. + +Hata hivyo, baadhi ya timu zinajaribu kuboresha opcodes zilizopo za EVM kwa ajili ya sakiti za uthibitisho wa ZK. Hii itasababisha uundaji wa Mashine Halisi ya Ethereum ya Zero-Knowledge (zkEVM), VM inayoendana na EVM ambayo hutoa ithibati ili kuthibitisha usahihi wa utekelezaji wa programu. Kwa zkEVM, minyororo ya validium inaweza kutekeleza mikataba-erevu nje ya mnyororo na kuwasilisha ithibati za uhalali ili kuthibitisha ukokotoaji wa nje ya mnyororo (bila kulazimika kuitekeleza tena) kwenye Ethereum. + +[Zaidi kuhusu zkEVMs](https://www.alchemy.com/overviews/zkevm). + +## Je, validiums huongezaje ukubwa wa Ethereum? {#scaling-ethereum-with-validiums} + +### 1. Uhifadhi wa data nje ya mnyororo {#offchain-data-storage} + +Miradi ya kuongeza ukubwa ya Safu ya 2, kama vile optimistic rollups na ZK-rollups, hubadilisha uongezaji usio na kikomo wa itifaki za kuongeza ukubwa za nje ya mnyororo (k.m., [Njozi](/developers/docs/scaling/plasma/)) kwa usalama kwa kuchapisha baadhi ya data za miamala kwenye L1. Lakini hii inamaanisha sifa za kuongeza ukubwa za rollups zimezuiwa na kipimo data kwenye Mtandao Mkuu wa Ethereum ([ugawanyaji wa data](/roadmap/danksharding/) unapendekeza kuboresha uwezo wa uhifadhi wa data wa Ethereum kwa sababu hii). + +Validiums hufikia kuongeza ukubwa kwa kuweka data yote ya miamala nje ya mnyororo na huweka tu ahadi za hali (na ithibati za uhalali) wakati wa kupeleka masasisho ya hali kwenye mnyororo mkuu wa Ethereum. Hata hivyo, uwepo wa ithibati za uhalali huipa validiums dhamana za juu za usalama kuliko suluhu nyingine za kuongeza ukubwa za nje ya mnyororo, ikiwa ni pamoja na Njozi na [sidechains](/developers/docs/scaling/sidechains/). Kwa kupunguza kiasi cha data ambacho Ethereum inapaswa kuchakata kabla ya kuthibitisha miamala ya nje ya mnyororo, miundo ya validium huongeza sana upitishaji kwenye Mtandao Mkuu. + +### 2. Ithibati za kujirudia {#recursive-proofs} + +Ithibati ya kujirudia ni ithibati ya uhalali inayothibitisha uhalali wa ithibati nyingine. "Ithibati hizi za ithibati" huzalishwa kwa kukusanya ithibati nyingi kwa kujirudia hadi ithibati moja ya mwisho inayothibitisha ithibati zote za awali itengenezwe. Ithibati za kujirudia huongeza kasi ya usindikaji wa mnyororo wa bloku kwa kuongeza idadi ya miamala inayoweza kuthibitishwa kwa kila ithibati ya uhalali. + +Kwa kawaida, kila ithibati ya uhalali ambayo mwendeshaji wa validium huiwasilisha kwa Ethereum kwa uthibitisho huthibitisha uadilifu wa bloku moja. Wakati ithibati moja ya kujirudia inaweza kutumika kuthibitisha uhalali wa bloku kadhaa za validium kwa wakati mmoja—hii inawezekana kwani sakiti ya kuthibitisha inaweza kukusanya ithibati kadhaa za bloku kwa kujirudia na kuwa ithibati moja ya mwisho. Ikiwa mkataba wa kuthibitisha kwenye mnyororo utakubali ithibati ya kujirudia, bloku zote za msingi hukamilishwa mara moja. + +## Faida na hasara za validium {#pros-and-cons-of-validium} + +| Faida | Hasara | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Ithibati za uhalali hutekeleza uadilifu wa miamala ya nje ya mnyororo na kuzuia waendeshaji kukamilisha masasisho ya hali batili. | Uzalishaji wa ithibati za uhalali unahitaji maunzi maalum, jambo linaloleta hatari ya ugatuzi. | +| Huongeza ufanisi wa mtaji kwa watumiaji (hakuna ucheleweshaji wa kutoa fedha kurudi Ethereum) | Usaidizi mdogo kwa ukokotoaji wa jumla/mikataba-erevu; lugha maalum zinahitajika kwa usanidi. | +| Haiathiriwi na mashambulizi fulani ya kiuchumi yanayokabili mifumo inayotegemea uthibitisho wa ulaghai katika matumizi ya thamani ya juu. | Nguvu kubwa ya ukokotoaji inahitajika kuzalisha ithibati za ZK; haina gharama nafuu kwa programu za upitishaji wa chini. | +| Hupunguza ada za gesi kwa watumiaji kwa kutoweka calldata kwenye Mtandao Mkuu wa Ethereum. | Muda wa polepole wa ukamilisho wa kihisia (dakika 10-30 kuzalisha ithibati ya ZK) lakini haraka zaidi kufikia ukamilisho kamili kwa sababu hakuna ucheleweshaji wa muda wa mzozo. | +| Inafaa kwa matumizi maalum, kama vile biashara au michezo ya mnyororo wa bloku inayotanguliza faragha ya miamala na kuongeza ukubwa. | Watumiaji wanaweza kuzuiwa kutoa fedha kwa kuwa uzalishaji wa ithibati za umiliki za Merkle unahitaji data ya nje ya mnyororo kupatikana wakati wote. | +| Upatikanaji wa data nje ya mnyororo hutoa viwango vya juu vya upitishaji na huongeza kuongezeka kwa ukubwa. | Mtindo wa usalama unategemea dhana za uaminifu na motisha za kiuchumi za kripto, tofauti na ZK-rollups, ambazo hutegemea tu mifumo ya usalama ya kriptografia. | + +### Tumia Validium/Volitions {#use-validium-and-volitions} + +Miradi mingi hutoa utekelezaji wa Validium na volitions ambayo unaweza kuiunganisha katika mfumo mtawanyo wa kimamlaka wako: + +**StarkWare StarkEx** - _StarkEx ni suluhisho la kuongeza ukubwa la Safu ya 2 (L2) ya Ethereum ambalo linategemea ithibati za uhalali. Inaweza kufanya kazi katika modi za upatikanaji wa data za ZK-Rollup au Validium._ + +- [Nyaraka](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes#validium) +- [Tovuti](https://starkware.co/starkex/) + +**Matter Labs zkPorter**- _zkPorter ni itifaki ya kuongeza ukubwa ya Safu ya 2 inayoshughulikia upatikanaji wa data kwa mbinu mseto inayochanganya mawazo ya zkRollup na ugawanyaji. Inaweza kusaidia idadi yoyote ya shards, kila moja ikiwa na sera yake ya upatikanaji wa data._ + +- [Blogu](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [Nyaraka](https://docs.zksync.io/zksync-protocol/rollup/data-availability) +- [Tovuti](https://zksync.io/) + +## Masomo zaidi {#further-reading} + +- [Validium na Safu ya 2 Mbili-kwa-Mbili — Toleo Na. 99](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) +- [ZK-rollups dhidi ya Validium](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) +- [Volition na Wigo Unaoibuka wa Upatikanaji wa Data](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) +- [Rollups, Validiums, na Volitions: Jifunze Kuhusu Suluhu Moto Zaidi za Kuongeza Ukubwa za Ethereum](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) +- [Mwongozo wa Vitendo kwa Unda-mpya za Ethereum](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) diff --git a/public/content/translations/sw/developers/docs/scaling/zk-rollups/index.md b/public/content/translations/sw/developers/docs/scaling/zk-rollups/index.md new file mode 100644 index 00000000000..96becf537fe --- /dev/null +++ b/public/content/translations/sw/developers/docs/scaling/zk-rollups/index.md @@ -0,0 +1,257 @@ +--- +title: Rollups za Maarifa Sifuri +description: Utangulizi wa unda-mpya za zero-knowledge—suluhisho la uongezwaji linalotumiwa na jamii ya Ethereum. +lang: sw +--- + +Unda-mpya za zero-knowledge (ZK-rollups) ni [suluhisho za uongezwaji](/developers/docs/scaling/) za safu ya 2 ambazo huongeza uwezo wa usindikaji kwenye Mtandao Mkuu wa Ethereum kwa kuhamisha ukokotoaji na hifadhi ya hali nje ya mnyororo. Unda-mpya za ZK zinaweza kushughulikia maelfu ya miamala katika kundi moja na kisha kuchapisha tu data ndogo ya muhtasari kwenye Mtandao Mkuu. Data hii ya muhtasari inabainisha mabadiliko ambayo yanapaswa kufanywa kwenye hali ya Ethereum na baadhi ya uthibitisho wa kiroptografia kwamba mabadiliko hayo ni sahihi. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa umesoma na kuelewa ukurasa wetu kuhusu [kuongeza ukubwa wa Ethereum](/developers/docs/scaling/) na [safu ya 2](/layer-2). + +## Unda-mpya za zero-knowledge ni nini? {#what-are-zk-rollups} + +**Unda-mpya za zero-knowledge (ZK-rollups)** huunganisha (au 'kukunja') miamala kuwa makundi ambayo hutekelezwa nje ya mnyororo. Ukokotoaji wa nje ya mnyororo hupunguza kiasi cha data kinachopaswa kuchapishwa kwenye mnyororo wa bloku. Waendeshaji wa unda-mpya wa ZK huwasilisha muhtasari wa mabadiliko yanayohitajika kuwakilisha miamala yote katika kundi badala ya kutuma kila muamala kivyake. Pia huzalisha [uthibitisho wa uhalali](/glossary/#validity-proof) ili kuthibitisha usahihi wa mabadiliko yao. + +Hali ya unda-mpya ya ZK inadumishwa na mkataba-erevu uliotumwa kwenye mtandao wa Ethereum. Ili kusasisha hali hii, nodi za unda-mpya za ZK lazima ziwakilishe uthibitisho wa uhalali kwa ajili ya uthibitishaji. Kama ilivyotajwa, uthibitisho wa uhalali ni hakikisho la kiroptografia kwamba mabadiliko ya hali yaliyopendekezwa na unda-mpya ni kweli matokeo ya kutekeleza kundi husika la miamala. Hii inamaanisha kwamba unda-mpya za ZK zinahitaji tu kutoa uthibitisho wa uhalali ili kukamilisha miamala kwenye Ethereum badala ya kuchapisha data yote ya miamala kwenye mnyororo kama [optimistic rollups](/developers/docs/scaling/optimistic-rollups/). + +Hakuna ucheleweshaji wakati wa kuhamisha fedha kutoka kwa unda-mpya ya ZK kwenda Ethereum kwa sababu miamala ya kutoka hutekelezwa mara tu mkataba wa unda-mpya wa ZK unapothibitisha uthibitisho wa uhalali. Kinyume chake, kutoa fedha kutoka kwa optimistic rollups kuna ucheleweshaji ili kumruhusu yeyote kupinga muamala wa kutoka kwa kutumia [uthibitisho wa ulaghai](/glossary/#fraud-proof). + +Unda-mpya za ZK huandika miamala kwa Ethereum kama `calldata`. `calldata` ni mahali ambapo data inayojumuishwa katika miito ya nje kwa vitendaji vya mkataba-erevu huhifadhiwa. Taarifa katika `calldata` huchapishwa kwenye mnyororo wa bloku, na kumruhusu yeyote kuunda upya hali ya unda-mpya kwa kujitegemea. Unda-mpya za ZK hutumia mbinu za kubana data ili kupunguza data ya muamala—kwa mfano, akaunti zinawakilishwa na faharasa badala ya anwani, ambayo huokoa baiti 28 za data. Uchapishaji wa data kwenye mnyororo ni gharama kubwa kwa unda-mpya, hivyo kubana data kunaweza kupunguza ada kwa watumiaji. + +## Unda-mpya za ZK huingilianaje na Ethereum? {#zk-rollups-and-ethereum} + +Mnyororo wa unda-mpya wa ZK ni itifaki ya nje ya mnyororo inayofanya kazi juu ya mnyororo wa bloku wa Ethereum na inasimamiwa na mikataba-erevu ya Ethereum iliyo kwenye mnyororo. Unda-mpya za ZK hutekeleza miamala nje ya Mtandao Mkuu, lakini mara kwa mara huwasilisha makundi ya miamala ya nje ya mnyororo kwa mkataba wa unda-mpya ulio kwenye mnyororo. Rekodi hii ya muamala haibadiliki, kama vile mnyororo wa bloku wa Ethereum, na huunda mnyororo wa unda-mpya wa ZK. + +Usanifu mkuu wa unda-mpya wa ZK umeundwa na vipengele vifuatavyo: + +1. **Mikataba iliyo kwenye mnyororo**: Kama ilivyotajwa, itifaki ya unda-mpya ya ZK inadhibitiwa na mikataba-erevu inayoendeshwa kwenye Ethereum. Hii inajumuisha mkataba mkuu unaohifadhi bloku za unda-mpya, kufuatilia amana, na kufuatilia masasisho ya hali. Mkataba mwingine ulio kwenye mnyororo (mkataba wa kuthibitisha) huthibitisha uthibitisho wa zero-knowledge uliowasilishwa na wazalishaji wa bloku. Hivyo, Ethereum hutumika kama safu ya msingi au "safu ya 1" kwa unda-mpya ya ZK. + +2. **Mashine halisi ya nje ya mnyororo (VM)**: Ingawa itifaki ya unda-mpya ya ZK iko kwenye Ethereum, utekelezaji wa miamala na hifadhi ya hali hufanyika kwenye mashine halisi tofauti isiyotegemea [EVM](/developers/docs/evm/). VM hii ya nje ya mnyororo ni mazingira ya utekelezaji wa miamala kwenye unda-mpya ya ZK na hutumika kama safu ya pili au "safu ya 2" kwa itifaki ya unda-mpya ya ZK. Uthibitisho wa uhalali unaothibitishwa kwenye Mtandao Mkuu wa Ethereum huhakikisha usahihi wa mabadiliko ya hali katika VM ya nje ya mnyororo. + +Unda-mpya za ZK ni "suluhisho za uongezwaji za mseto"—itifaki za nje ya mnyororo zinazofanya kazi kwa kujitegemea lakini zinapata usalama kutoka kwa Ethereum. Hasa, mtandao wa Ethereum hutekeleza uhalali wa masasisho ya hali kwenye unda-mpya ya ZK na huhakikisha upatikanaji wa data nyuma ya kila sasisho la hali ya unda-mpya. Matokeo yake, unda-mpya za ZK ni salama zaidi kuliko suluhisho za uongezwaji za nje ya mnyororo, kama vile [sidechains](/developers/docs/scaling/sidechains/), ambazo zinawajibika kwa sifa zao za usalama, au [validiums](/developers/docs/scaling/validium/), ambazo pia huthibitisha miamala kwenye Ethereum kwa kutumia uthibitisho wa uhalali, lakini huhifadhi data ya muamala mahali pengine. + +Unda-mpya za ZK hutegemea itifaki kuu ya Ethereum kwa yafuatayo: + +### Upatikanaji wa data {#data-availability} + +Unda-mpya za ZK huchapisha data ya hali kwa kila muamala unaochakatwa nje ya mnyororo kwenda Ethereum. Kwa data hii, inawezekana kwa watu binafsi au biashara kuiga hali ya unda-mpya na kuhalalisha mnyororo wenyewe. Ethereum hufanya data hii ipatikane kwa washiriki wote wa mtandao kama `calldata`. + +Unda-mpya za ZK hazihitaji kuchapisha data nyingi ya miamala kwenye mnyororo kwa sababu uthibitisho wa uhalali tayari unathibitisha uhalisi wa mabadiliko ya hali. Hata hivyo, kuhifadhi data kwenye mnyororo bado ni muhimu kwa sababu inaruhusu uthibitishaji usio na ruhusa, wa kujitegemea wa hali ya mnyororo wa L2 ambao kwa upande wake unaruhusu mtu yeyote kuwasilisha makundi ya miamala, na kuzuia waendeshaji wenye dhamira mbaya kudhibiti au kufungia mnyororo. + +Kwenye mnyororo inahitajika ili watumiaji waingiliane na unda-mpya. Bila ufikiaji wa data ya hali, watumiaji hawawezi kuuliza salio la akaunti zao au kuanzisha miamala (k.m., uondoaji) inayotegemea taarifa ya hali. + +### Umisho wa muamala {#transaction-finality} + +Ethereum hufanya kazi kama safu ya malipo kwa unda-mpya za ZK: miamala ya L2 hukamilishwa tu ikiwa mkataba wa L1 unakubali uthibitisho wa uhalali. Hii huondoa hatari ya waendeshaji wenye dhamira mbaya kuharibu mnyororo (k.m., kuiba fedha za unda-mpya) kwani kila muamala lazima uidhinishwe kwenye Mtandao Mkuu. Pia, Ethereum huhakikisha kwamba operesheni za watumiaji haziwezi kugeuzwa mara tu zinapokamilishwa kwenye L1. + +### Ukinzani dhidi ya udhibiti {#censorship-resistance} + +Unda-mpya nyingi za ZK hutumia "supernode" (mwendeshaji) kutekeleza miamala, kuzalisha makundi, na kuwasilisha bloku kwa L1. Ingawa hii inahakikisha ufanisi, inaongeza hatari ya udhibiti: waendeshaji wa unda-mpya wa ZK wenye dhamira mbaya wanaweza kudhibiti watumiaji kwa kukataa kujumuisha miamala yao katika makundi. + +Kama hatua ya usalama, unda-mpya za ZK huruhusu watumiaji kuwasilisha miamala moja kwa moja kwa mkataba wa unda-mpya kwenye Mtandao Mkuu ikiwa wanafikiri wanadhibitiwa na mwendeshaji. Hii inaruhusu watumiaji kulazimisha kutoka kwa unda-mpya ya ZK kwenda Ethereum bila kutegemea ruhusa ya mwendeshaji. + +## Unda-mpya za ZK hufanyaje kazi? {#how-do-zk-rollups-work} + +### Miamala {#transactions} + +Watumiaji katika unda-mpya ya ZK husaini miamala na kuiwasilisha kwa waendeshaji wa L2 kwa ajili ya usindikaji na ujumuishaji katika kundi linalofuata. Katika baadhi ya matukio, mwendeshaji ni huluki ya kati, inayoitwa mratibu wa mfuatano, ambaye hutekeleza miamala, kuiunganisha kuwa makundi, na kuiwasilisha kwa L1. Mratibu wa mfuatano katika mfumo huu ndiye huluki pekee inayoruhusiwa kuzalisha bloku za L2 na kuongeza miamala ya unda-mpya kwenye mkataba wa unda-mpya wa ZK. + +Unda-mpya zingine za ZK zinaweza kubadilisha jukumu la mwendeshaji kwa kutumia seti ya wathibitishaji wa [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/). Waendeshaji watarajiwa huweka fedha katika mkataba wa unda-mpya, ambapo ukubwa wa kila hisa huathiri nafasi ya mweka hisa kuchaguliwa kuzalisha kundi linalofuata la unda-mpya. Hisa ya mwendeshaji inaweza kupunguzwa ikiwa atatenda kwa dhamira mbaya, jambo ambalo huwahamasisha kuchapisha bloku halali. + +#### Jinsi unda-mpya za ZK zinavyochapisha data ya muamala kwenye Ethereum {#how-zk-rollups-publish-transaction-data-on-ethereum} + +Kama ilivyoelezwa, data ya muamala huchapishwa kwenye Ethereum kama `calldata`. `calldata` ni eneo la data katika mkataba-erevu linalotumiwa kupitisha hoja kwa kitendaji na hufanya kazi sawa na [kumbukumbu](/developers/docs/smart-contracts/anatomy/#memory). `calldata` haihifadhiwi kama sehemu ya hali ya Ethereum, inadumu kwenye mnyororo kama sehemu ya [kumbukumbu za historia](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs) za mnyororo wa Ethereum. `calldata` haiathiri hali ya Ethereum, na kuifanya kuwa njia ya bei rahisi ya kuhifadhi data kwenye mnyororo. + +Neno kuu `calldata` mara nyingi hutambulisha mbinu ya mkataba-erevu inayoitwa na muamala na huhifadhi viingizio vya mbinu hiyo katika mfumo wa mfuatano wowote wa baiti. Unda-mpya za ZK hutumia `calldata` kuchapisha data ya muamala iliyobanwa kwenye mnyororo; mwendeshaji wa unda-mpya huongeza tu kundi jipya kwa kuita kitendaji kinachohitajika katika mkataba wa unda-mpya na kupitisha data iliyobanwa kama hoja za kitendaji. Hii husaidia kupunguza gharama kwa watumiaji kwani sehemu kubwa ya ada za unda-mpya huelekezwa kwenye kuhifadhi data ya muamala kwenye mnyororo. + +### Ahadi za hali {#state-commitments} + +Hali ya unda-mpya ya ZK, ambayo inajumuisha akaunti na salio za L2, inawakilishwa kama [mti wa Merkle](/whitepaper/#merkle-trees). Hashi ya kiroptografia ya mzizi wa mti wa Merkle (mzizi wa Merkle) huhifadhiwa katika mkataba wa kwenye mnyororo, kuruhusu itifaki ya unda-mpya kufuatilia mabadiliko katika hali ya unda-mpya ya ZK. + +Unda-mpya hubadilika na kuwa hali mpya baada ya utekelezaji wa seti mpya ya miamala. Mwendeshaji aliyeanzisha mabadiliko ya hali anahitajika kukokotoa mzizi mpya wa hali na kuwasilisha kwa mkataba wa kwenye mnyororo. Ikiwa uthibitisho wa uhalali unaohusishwa na kundi umethibitishwa na mkataba wa kuthibitisha, mzizi mpya wa Merkle unakuwa mzizi wa hali rasmi wa unda-mpya ya ZK. + +Mbali na kukokotoa mizizi ya hali, mwendeshaji wa unda-mpya wa ZK pia huunda mzizi wa kundi—mzizi wa mti wa Merkle unaojumuisha miamala yote katika kundi. Wakati kundi jipya linawasilishwa, mkataba wa unda-mpya huhifadhi mzizi wa kundi, kuruhusu watumiaji kuthibitisha muamala (k.m., ombi la kutoa pesa) ulijumuishwa katika kundi. Watumiaji watalazimika kutoa maelezo ya muamala, mzizi wa kundi, na [uthibitisho wa Merkle](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) unaoonyesha njia ya ujumuishaji. + +### Uthibitisho wa uhalali {#validity-proofs} + +Mzizi mpya wa hali ambao mwendeshaji wa unda-mpya wa ZK anawasilisha kwa mkataba wa L1 ni matokeo ya masasisho kwenye hali ya unda-mpya. Sema Alice anamtumia Bob ishara 10, mwendeshaji anapunguza tu salio la Alice kwa 10 na kuongeza salio la Bob kwa 10. Kisha mwendeshaji huhasi data ya akaunti iliyosasishwa, anaunda upya mti wa Merkle wa unda-mpya, na anawasilisha mzizi mpya wa Merkle kwa mkataba wa kwenye mnyororo. + +Lakini mkataba wa unda-mpya hautakubali kiotomatiki ahadi ya hali iliyopendekezwa hadi mwendeshaji athibitishe kuwa mzizi mpya wa Merkle ulitokana na masasisho sahihi kwenye hali ya unda-mpya. Mwendeshaji wa unda-mpya wa ZK hufanya hivi kwa kutoa uthibitisho wa uhalali, ahadi fupi ya kiroptografia inayothibitisha usahihi wa miamala iliyowekwa kwenye makundi. + +Uthibitisho wa uhalali huruhusu pande kuthibitisha usahihi wa taarifa bila kufichua taarifa yenyewe—hivyo, pia huitwa uthibitisho wa zero-knowledge. Unda-mpya za ZK hutumia uthibitisho wa uhalali kuthibitisha usahihi wa mabadiliko ya hali ya nje ya mnyororo bila kulazimika kutekeleza upya miamala kwenye Ethereum. Uthibitisho huu unaweza kuja katika mfumo wa [ZK-SNARK](https://arxiv.org/abs/2202.06877) (Hoja Fupi Isiyoingiliana ya Ujuzi ya Zero-Knowledge) au [ZK-STARK](https://eprint.iacr.org/2018/046) (Hoja Inayoweza Kuongezwa Uwazi ya Ujuzi ya Zero-Knowledge). + +SNARKs na STARKs zote husaidia kuthibitisha uadilifu wa ukokotoaji wa nje ya mnyororo katika unda-mpya za ZK, ingawa kila aina ya uthibitisho ina sifa za kipekee. + +**ZK-SNARKs** + +Ili itifaki ya ZK-SNARK ifanye kazi, kuunda Mfuatano wa Rejea ya Pamoja (CRS) ni muhimu: CRS hutoa vigezo vya umma vya kuthibitisha na kuthibitisha uthibitisho wa uhalali. Usalama wa mfumo wa uthibitisho unategemea usanidi wa CRS; ikiwa taarifa iliyotumika kuunda vigezo vya umma itaangukia mikononi mwa wahusika wenye dhamira mbaya, wanaweza kuwa na uwezo wa kutoa uthibitisho wa uhalali wa uongo. + +Baadhi ya unda-mpya za ZK hujaribu kutatua tatizo hili kwa kutumia [sherehe ya ukokotoaji wa pande nyingi (MPC)](https://zkproof.org/2021/06/30/setup-ceremonies/amp/), inayohusisha watu wanaoaminika, ili kuzalisha vigezo vya umma kwa ajili ya mzunguko wa ZK-SNARK. Kila upande huchangia bahati nasibu (inayoitwa "taka sumu") katika ujenzi wa CRS, ambayo lazima waiharibu mara moja. + +Usanidi unaoaminika hutumiwa kwa sababu huongeza usalama wa usanidi wa CRS. Muda wote mshiriki mmoja mkweli anapoharibu ingizo lake, usalama wa mfumo wa ZK-SNARK unahakikishwa. Bado, mbinu hii inahitaji kuwaamini wale waliohusika kufuta bahati nasibu yao iliyochukuliwa na si kudhoofisha dhamana za usalama za mfumo. + +Mbali na dhana za uaminifu, ZK-SNARKs ni maarufu kwa ukubwa wao mdogo wa uthibitisho na uthibitishaji wa wakati usiobadilika. Kwa kuwa uthibitishaji wa uthibitisho kwenye L1 unajumuisha gharama kubwa zaidi ya kuendesha unda-mpya ya ZK, L2s hutumia ZK-SNARKs kuzalisha uthibitisho unaoweza kuthibitishwa haraka na kwa bei nafuu kwenye Mtandao Mkuu. + +**ZK-STARKs** + +Kama ZK-SNARKs, ZK-STARKs huthibitisha uhalali wa ukokotoaji wa nje ya mnyororo bila kufichua viingizi. Hata hivyo, ZK-STARKs huchukuliwa kama uboreshaji wa ZK-SNARKs kwa sababu ya uwezo wao wa kuongezeka na uwazi. + +ZK-STARKs ni 'wazi', kwani zinaweza kufanya kazi bila usanidi unaoaminika wa Mfuatano wa Rejea ya Pamoja (CRS). Badala yake, ZK-STARKs hutegemea bahati nasibu inayoweza kuthibitishwa na umma ili kuweka vigezo vya kuzalisha na kuthibitisha uthibitisho. + +ZK-STARKs pia hutoa uwezo mkubwa zaidi wa kuongezeka kwa sababu muda unaohitajika kuthibitisha na kuthibitisha uthibitisho wa uhalali huongezeka _karibu-linearly_ kulingana na ugumu wa ukokotoaji wa msingi. Kwa ZK-SNARKs, nyakati za kuthibitisha na kuthibitisha huongezeka _linearly_ kulingana na ukubwa wa ukokotoaji wa msingi. Hii inamaanisha ZK-STARKs zinahitaji muda mfupi kuliko ZK-SNARKs kwa kuthibitisha na kuthibitisha wakati seti kubwa za data zinahusika, na kuzifanya kuwa muhimu kwa matumizi ya kiwango kikubwa. + +ZK-STARKs pia ni salama dhidi ya kompyuta za quantum, wakati Kiroptografia ya Mviringo wa Elliptic (ECC) inayotumiwa katika ZK-SNARKs inaaminika kuwa rahisi kushambuliwa na mashambulizi ya kompyuta ya quantum. Upungufu wa ZK-STARKs ni kwamba huzalisha ukubwa mkubwa zaidi wa uthibitisho, ambao ni ghali zaidi kuthibitisha kwenye Ethereum. + +#### Uthibitisho wa uhalali hufanyaje kazi katika unda-mpya za ZK? {#validity-proofs-in-zk-rollups} + +##### Uzalishaji wa uthibitisho + +Kabla ya kukubali miamala, mwendeshaji atafanya ukaguzi wa kawaida. Hii inajumuisha kuthibitisha kwamba: + +- Akaunti za mtumaji na mpokeaji ni sehemu ya mti wa hali. +- Mtumaji ana fedha za kutosha kushughulikia muamala. +- Muamala ni sahihi na unalingana na ufunguo wa umma wa mtumaji kwenye unda-mpya. +- Nonce ya mtumaji ni sahihi, n.k. + +Mara tu nodi ya unda-mpya ya ZK inapokuwa na miamala ya kutosha, inaziunganisha kuwa kundi na kuandaa viingizi kwa ajili ya mzunguko wa kuthibitisha ili kuandaa uthibitisho mfupi wa ZK. Hii inajumuisha: + +- Mzizi wa mti wa Merkle unaojumuisha miamala yote katika kundi. +- Uthibitisho wa Merkle kwa miamala ili kuthibitisha ujumuishaji katika kundi. +- Uthibitisho wa Merkle kwa kila jozi ya mtumaji-mpokeaji katika miamala ili kuthibitisha akaunti hizo ni sehemu ya mti wa hali wa unda-mpya. +- Seti ya mizizi ya hali ya kati, inayotokana na kusasisha mzizi wa hali baada ya kutumia masasisho ya hali kwa kila muamala (yaani, kupunguza akaunti za watumaji na kuongeza akaunti za wapokeaji). + +Mzunguko wa kuthibitisha hukokotoa uthibitisho wa uhalali kwa "kupitia" kila muamala na kufanya ukaguzi uleule ambao mwendeshaji alikamilisha kabla ya kushughulikia muamala. Kwanza, inathibitisha kuwa akaunti ya mtumaji ni sehemu ya mzizi uliopo wa hali kwa kutumia uthibitisho wa Merkle uliotolewa. Kisha inapunguza salio la mtumaji, inaongeza nonce yao, inahasi data ya akaunti iliyosasishwa na kuiunganisha na uthibitisho wa Merkle ili kutoa mzizi mpya wa Merkle. + +Mzizi huu wa Merkle unaonyesha mabadiliko pekee katika hali ya unda-mpya ya ZK: mabadiliko katika salio na nonce ya mtumaji. Hii inawezekana kwa sababu uthibitisho wa Merkle uliotumiwa kuthibitisha uwepo wa akaunti hutumiwa kupata mzizi mpya wa hali. + +Mzunguko wa kuthibitisha hufanya mchakato uleule kwenye akaunti ya mpokeaji. Inakagua ikiwa akaunti ya mpokeaji ipo chini ya mzizi wa hali ya kati (kwa kutumia uthibitisho wa Merkle), inaongeza salio lao, inahasi upya data ya akaunti na kuiunganisha na uthibitisho wa Merkle ili kutoa mzizi mpya wa hali. + +Mchakato unarudiwa kwa kila muamala; kila "mzunguko" huunda mzizi mpya wa hali kutokana na kusasisha akaunti ya mtumaji na mzizi mpya unaofuata kutokana na kusasisha akaunti ya mpokeaji. Kama ilivyoelezwa, kila sasisho la mzizi wa hali linawakilisha sehemu moja ya mti wa hali wa unda-mpya inayobadilika. + +Mzunguko wa kuthibitisha wa ZK hupitia kundi zima la miamala, ukithibitisha mfuatano wa masasisho ambayo husababisha mzizi wa mwisho wa hali baada ya muamala wa mwisho kutekelezwa. Mzizi wa mwisho wa Merkle uliokokotolewa unakuwa mzizi mpya zaidi wa hali rasmi wa unda-mpya ya ZK. + +##### Uthibitishaji wa uthibitisho + +Baada ya mzunguko wa kuthibitisha kuthibitisha usahihi wa masasisho ya hali, mwendeshaji wa L2 huwasilisha uthibitisho wa uhalali uliokokotolewa kwa mkataba wa kuthibitisha kwenye L1. Mzunguko wa uthibitishaji wa mkataba huthibitisha uhalali wa uthibitisho na pia hukagua viingizi vya umma ambavyo ni sehemu ya uthibitisho: + +- **Mzizi wa kabla ya hali**: Mzizi wa zamani wa hali wa unda-mpya ya ZK (yaani, kabla ya miamala iliyowekwa kwenye makundi kutekelezwa), unaoakisi hali ya mwisho inayojulikana kuwa halali ya mnyororo wa L2. + +- **Mzizi wa baada ya hali**: Mzizi mpya wa hali wa unda-mpya ya ZK (yaani, baada ya utekelezaji wa miamala iliyowekwa kwenye makundi), unaoakisi hali mpya zaidi ya mnyororo wa L2. Mzizi wa baada ya hali ni mzizi wa mwisho unaopatikana baada ya kutumia masasisho ya hali katika mzunguko wa kuthibitisha. + +- **Mzizi wa kundi**: Mzizi wa Merkle wa kundi, unaopatikana kwa _kuweka kwenye mti wa Merkle_ miamala katika kundi na kuhasi mzizi wa mti. + +- **Viingizi vya muamala**: Data inayohusishwa na miamala iliyotekelezwa kama sehemu ya kundi lililowasilishwa. + +Ikiwa uthibitisho unakidhi mzunguko (yaani, ni halali), inamaanisha kuwa kuna mfuatano wa miamala halali ambayo hubadilisha unda-mpya kutoka hali ya awali (iliyotiwa alama ya kidole kiroptografia na mzizi wa kabla ya hali) hadi hali mpya (iliyotiwa alama ya kidole kiroptografia na mzizi wa baada ya hali). Ikiwa mzizi wa kabla ya hali unalingana na mzizi uliohifadhiwa katika mkataba wa unda-mpya, na uthibitisho ni halali, mkataba wa unda-mpya huchukua mzizi wa baada ya hali kutoka kwenye uthibitisho na kusasisha mti wake wa hali ili kuakisi hali iliyobadilika ya unda-mpya. + +### Kuingia na kutoka {#entries-and-exits} + +Watumiaji huingia kwenye unda-mpya ya ZK kwa kuweka ishara katika mkataba wa unda-mpya uliotumwa kwenye mnyororo wa L1. Muamala huu unawekwa kwenye foleni kwani waendeshaji pekee ndio wanaoweza kuwasilisha miamala kwa mkataba wa unda-mpya. + +Ikiwa foleni ya amana inayosubiri itaanza kujaa, mwendeshaji wa unda-mpya wa ZK atachukua miamala ya amana na kuiwasilisha kwa mkataba wa unda-mpya. Mara tu fedha za mtumiaji zinapokuwa kwenye unda-mpya, anaweza kuanza kufanya miamala kwa kutuma miamala kwa mwendeshaji ili ichakatwe. Watumiaji wanaweza kuthibitisha salio kwenye unda-mpya kwa kuhasi data ya akaunti yao, kutuma hashi kwa mkataba wa unda-mpya, na kutoa uthibitisho wa Merkle ili kuthibitisha dhidi ya mzizi wa sasa wa hali. + +Kutoa fedha kutoka kwa unda-mpya ya ZK kwenda L1 ni rahisi. Mtumiaji huanzisha muamala wa kutoka kwa kutuma mali zake kwenye unda-mpya kwa akaunti maalum kwa ajili ya kuchomwa. Ikiwa mwendeshaji atajumuisha muamala katika kundi linalofuata, mtumiaji anaweza kuwasilisha ombi la kutoa pesa kwa mkataba wa kwenye mnyororo. Ombi hili la kutoa pesa litajumuisha yafuatayo: + +- Uthibitisho wa Merkle unaothibitisha ujumuishaji wa muamala wa mtumiaji kwenye akaunti ya kuchoma katika kundi la miamala + +- Data ya muamala + +- Mzizi wa kundi + +- Anwani ya L1 ya kupokea fedha zilizowekwa + +Mkataba wa unda-mpya huhasi data ya muamala, hukagua ikiwa mzizi wa kundi upo, na hutumia uthibitisho wa Merkle kuangalia ikiwa hashi ya muamala ni sehemu ya mzizi wa kundi. Baada ya hapo, mkataba hutekeleza muamala wa kutoka na kutuma fedha kwa anwani iliyochaguliwa na mtumiaji kwenye L1. + +## Unda-mpya za ZK na uoanifu wa EVM {#zk-rollups-and-evm-compatibility} + +Tofauti na optimistic rollups, unda-mpya za ZK haziendani kwa urahisi na [Mashine Halisi ya Ethereum (EVM)](/developers/docs/evm/). Kuthibitisha ukokotoaji wa jumla wa EVM katika mizunguko ni ngumu zaidi na kunahitaji rasilimali nyingi kuliko kuthibitisha ukokotoaji rahisi (kama uhamisho wa ishara ulioelezwa hapo awali). + +Hata hivyo, [maendeleo katika teknolojia ya zero-knowledge](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now) yanachochea upya nia ya kufunika ukokotoaji wa EVM katika uthibitisho wa zero-knowledge. Juhudi hizi zinalenga kuunda utekelezaji wa zero-knowledge EVM (zkEVM) unaoweza kuthibitisha kwa ufanisi usahihi wa utekelezaji wa programu. ZkEVM huunda upya misimbo ya uendeshaji iliyopo ya EVM kwa ajili ya kuthibitisha/kuthibitisha katika mizunguko, kuruhusu kutekeleza mikataba-erevu. + +Kama EVM, zkEVM hubadilika kati ya hali baada ya ukokotoaji kufanywa kwenye baadhi ya viingizi. Tofauti ni kwamba zkEVM pia huunda uthibitisho wa zero-knowledge ili kuthibitisha usahihi wa kila hatua katika utekelezaji wa programu. Uthibitisho wa uhalali unaweza kuthibitisha usahihi wa operesheni zinazogusa hali ya VM (kumbukumbu, mrundikano, ghala) na ukokotoaji wenyewe (yaani, je, operesheni iliita misimbo sahihi ya uendeshaji na kuitekeleza kwa usahihi?). + +Kuanzishwa kwa unda-mpya za ZK zinazoendana na EVM kunatarajiwa kusaidia wasanidi programu kutumia uwezo wa kuongezeka na dhamana za usalama za uthibitisho wa zero-knowledge. Muhimu zaidi, uoanifu na miundombinu asilia ya Ethereum inamaanisha wasanidi programu wanaweza kuunda mfumo mtawanyo wa kimamlaka unaofaa kwa ZK kwa kutumia zana na lugha zinazojulikana (na zilizojaribiwa). + +## Ada za unda-mpya za ZK hufanyaje kazi? {#how-do-zk-rollup-fees-work} + +Kiasi ambacho watumiaji hulipa kwa miamala kwenye unda-mpya za ZK kinategemea ada ya gesi, kama tu kwenye Mtandao Mkuu wa Ethereum. Hata hivyo, ada za gesi hufanya kazi tofauti kwenye L2 na huathiriwa na gharama zifuatazo: + +1. **Uandishi wa hali**: Kuna gharama isiyobadilika ya kuandika kwenye hali ya Ethereum (yaani, kuwasilisha muamala kwenye mnyororo wa bloku wa Ethereum). Unda-mpya za ZK hupunguza gharama hii kwa kuweka miamala kwenye makundi na kugawanya gharama zisizobadilika kwa watumiaji wengi. + +2. **Uchapishaji wa data**: Unda-mpya za ZK huchapisha data ya hali kwa kila muamala kwenda Ethereum kama `calldata`. Gharama za `calldata` kwa sasa zinasimamiwa na [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559), ambayo inabainisha gharama ya gesi 16 kwa baiti zisizo sifuri na gesi 4 kwa baiti sifuri za `calldata`, mtawalia. Gharama inayolipwa kwa kila muamala huathiriwa na kiasi gani cha `calldata` kinachohitaji kuchapishwa kwenye mnyororo kwa ajili yake. + +3. **Ada za mwendeshaji wa L2**: Hiki ni kiasi kinacholipwa kwa mwendeshaji wa unda-mpya kama fidia kwa gharama za ukokotoaji zilizotumika katika kuchakata miamala, sawa na ["ada za kipaumbele za muamala (vidokezo)"](/developers/docs/gas/#how-are-gas-fees-calculated) kwenye Mtandao Mkuu wa Ethereum. + +4. **Uzalishaji na uthibitishaji wa uthibitisho**: Waendeshaji wa unda-mpya wa ZK lazima wazalishe uthibitisho wa uhalali kwa makundi ya miamala, jambo ambalo linahitaji rasilimali nyingi. Kuthibitisha uthibitisho wa zero-knowledge kwenye Mtandao Mkuu pia hugharimu gesi (~ gesi 500,000). + +Mbali na kuweka miamala kwenye makundi, unda-mpya za ZK hupunguza ada kwa watumiaji kwa kubana data ya muamala. Unaweza [kuona muhtasari wa wakati halisi](https://l2fees.info/) wa gharama za kutumia unda-mpya za ZK za Ethereum. + +## Unda-mpya za ZK huongezaje ukubwa wa Ethereum? {#scaling-ethereum-with-zk-rollups} + +### Ubanaji wa data ya muamala {#transaction-data-compression} + +Unda-mpya za ZK huongeza uwezo wa usindikaji kwenye safu ya msingi ya Ethereum kwa kupeleka ukokotoaji nje ya mnyororo, lakini msukumo halisi wa kuongeza ukubwa hutokana na kubana data ya muamala. [Ukubwa wa bloku](/developers/docs/blocks/#block-size) wa Ethereum huweka kikomo cha data ambayo kila bloku inaweza kushikilia na, kwa hivyo, idadi ya miamala inayochakatwa kwa kila bloku. Kwa kubana data inayohusiana na miamala, unda-mpya za ZK huongeza kwa kiasi kikubwa idadi ya miamala inayochakatwa kwa kila bloku. + +Unda-mpya za ZK zinaweza kubana data ya muamala bora kuliko optimistic rollups kwa kuwa hazihitaji kuchapisha data yote inayohitajika kuhalalisha kila muamala. Zinahitaji tu kuchapisha data ndogo inayohitajika ili kuunda upya hali ya hivi karibuni ya akaunti na salio kwenye unda-mpya. + +### Ithibati za kujirudia {#recursive-proofs} + +Faida ya uthibitisho wa zero-knowledge ni kwamba uthibitisho unaweza kuthibitisha uthibitisho mwingine. Kwa mfano, ZK-SNARK moja inaweza kuthibitisha ZK-SNARKs zingine. "Uthibitisho wa uthibitisho" kama huo huitwa uthibitisho wa kurudia na huongeza kwa kiasi kikubwa uwezo wa usindikaji kwenye unda-mpya za ZK. + +Hivi sasa, uthibitisho wa uhalali hutolewa kwa msingi wa bloku kwa bloku na huwasilishwa kwa mkataba wa L1 kwa ajili ya uthibitishaji. Hata hivyo, kuthibitisha uthibitisho wa bloku moja huweka kikomo cha uwezo wa usindikaji ambao unda-mpya za ZK zinaweza kufikia kwani bloku moja tu inaweza kukamilishwa wakati mwendeshaji anawasilisha uthibitisho. + +Uthibitisho wa kurudia, hata hivyo, hufanya iwezekanavyo kukamilisha bloku kadhaa kwa uthibitisho mmoja wa uhalali. Hii ni kwa sababu mzunguko wa kuthibitisha huunganisha kwa kurudia uthibitisho wa bloku nyingi hadi uthibitisho mmoja wa mwisho utakapoundwa. Mwendeshaji wa L2 huwasilisha uthibitisho huu wa kurudia, na ikiwa mkataba utaukubali, bloku zote husika zitakamilishwa mara moja. Kwa uthibitisho wa kurudia, idadi ya miamala ya unda-mpya ya ZK inayoweza kukamilishwa kwenye Ethereum kwa vipindi huongezeka. + +### Faida na hasara za unda-mpya za ZK {#zk-rollups-pros-and-cons} + +| Faida | Hasara | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Uthibitisho wa uhalali huhakikisha usahihi wa miamala ya nje ya mnyororo na kuzuia waendeshaji kutekeleza mabadiliko batili ya hali. | Gharama inayohusishwa na kukokotoa na kuthibitisha uthibitisho wa uhalali ni kubwa na inaweza kuongeza ada kwa watumiaji wa unda-mpya. | +| Hutoa umisho wa haraka wa muamala kwani masasisho ya hali yanaidhinishwa mara tu uthibitisho wa uhalali unapothibitishwa kwenye L1. | Kujenga unda-mpya za ZK zinazoendana na EVM ni ngumu kutokana na ugumu wa teknolojia ya zero-knowledge. | +| Hutegemea mifumo ya kiroptografia isiyo na uaminifu kwa usalama, si uaminifu wa wahusika waliohamasishwa kama ilivyo kwa [optimistic rollups](/developers/docs/scaling/optimistic-rollups/#optimistic-pros-and-cons). | Kuzalisha uthibitisho wa uhalali kunahitaji vifaa maalum, jambo ambalo linaweza kuhimiza udhibiti wa kati wa mnyororo na pande chache. | +| Huhifadhi data inayohitajika kurejesha hali ya nje ya mnyororo kwenye L1, ambayo inahakikisha usalama, upinzani dhidi ya udhibiti, na ugatuaji. | Waendeshaji wa kati (waratibu wa mfuatano) wanaweza kuathiri mpangilio wa miamala. | +| Watumiaji hunufaika na ufanisi mkubwa wa mtaji na wanaweza kutoa fedha kutoka L2 bila ucheleweshaji. | Mahitaji ya vifaa yanaweza kupunguza idadi ya washiriki wanaoweza kulazimisha mnyororo kufanya maendeleo, na kuongeza hatari ya waendeshaji wenye dhamira mbaya kufungia hali ya unda-mpya na kudhibiti watumiaji. | +| Haitegemei dhana za uhai na watumiaji hawahitaji kuhalalisha mnyororo ili kulinda fedha zao. | Baadhi ya mifumo ya uthibitisho (k.m., ZK-SNARK) inahitaji usanidi unaoaminika ambao, ukitumiwa vibaya, unaweza kuhatarisha muundo wa usalama wa unda-mpya ya ZK. | +| Ubanaji bora wa data unaweza kusaidia kupunguza gharama za kuchapisha `calldata` kwenye Ethereum na kupunguza ada za unda-mpya kwa watumiaji. | | + +### Maelezo ya kuona ya unda-mpya za ZK {#zk-video} + +Tazama Finematics ikielezea unda-mpya za ZK: + + + +## Nani anafanyia kazi zkEVM? {#zkevm-projects} + +Miradi inayofanyia kazi zkEVMs ni pamoja na: + +- **[zkEVM](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _zkEVM ni mradi unaofadhiliwa na Msingi wa Ethereum kuendeleza unda-mpya ya ZK inayooana na EVM na utaratibu wa kuzalisha uthibitisho wa uhalali kwa bloku za Ethereum._ + +- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _ni unda-mpya ya ZK iliyogatuliwa kwenye mtandao mkuu wa Ethereum inayofanyia kazi Mashine Halisi ya Ethereum ya zero-knowledge (zkEVM) inayotekeleza miamala ya Ethereum kwa njia ya uwazi, ikijumuisha mikataba-erevu na uthibitisho wa zero-knowledge._ + +- **[Scroll](https://scroll.io/blog/zkEVM)** - _Scroll ni kampuni inayoendeshwa na teknolojia inayofanyia kazi ujenzi wa Suluhisho la asili la Safu ya 2 la zkEVM kwa Ethereum._ + +- **[Taiko](https://taiko.xyz)** - _Taiko ni unda-mpya ya ZK iliyogatuliwa, sawa na Ethereum (aina ya [Type 1 ZK-EVM](https://vitalik.eth.limo/general/2022/08/04/zkevm.html))._ + +- **[ZKsync](https://docs.zksync.io/)** - _ZKsync Era ni unda-mpya ya ZK inayooana na EVM iliyojengwa na Matter Labs, inayotumia zkEVM yake yenyewe._ + +- **[Starknet](https://starkware.co/starknet/)** - _StarkNet ni suluhisho la uongezwaji la safu ya 2 linalooana na EVM lililojengwa na StarkWare._ + +- **[Morph](https://www.morphl2.io/)** - _Morph ni suluhisho la uongezwaji la unda-mpya la mseto linalotumia uthibitisho wa zk kushughulikia suala la changamoto ya hali ya Safu ya 2._ + +- **[Linea](https://linea.build)** - _Linea ni Safu ya 2 ya zkEVM sawa na Ethereum iliyojengwa na Consensys, inayolingana kikamilifu na mfumo wa ikolojia wa Ethereum._ + +## Masomo zaidi kuhusu unda-mpya za ZK {#further-reading-on-zk-rollups} + +- [Unda-mpya za Zero-Knowledge ni Nini?](https://coinmarketcap.com/alexandria/glossary/zero-knowledge-rollups) +- [Unda-mpya za zero-knowledge ni nini?](https://alchemy.com/blog/zero-knowledge-rollups) +- [Mwongozo wa Vitendo wa Rollups za Ethereum](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) +- [STARKs dhidi ya SNARKs](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) +- [zkEVM ni nini?](https://www.alchemy.com/overviews/zkevm) +- [Aina za ZK-EVM: Sawa na Ethereum, sawa na EVM, Aina 1, Aina 4, na maneno mengine ya siri](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4) +- [Utangulizi wa zkEVM](https://hackmd.io/@yezhang/S1_KMMbGt) +- [ZK-EVM L2s ni nini?](https://linea.mirror.xyz/qD18IaQ4BROn_Y40EBMTUTdJHYghUtdECscSWyMvm8M) +- [Rasilimali za kushangaza za zkEVM](https://github.com/LuozhuZhang/awesome-zkevm) +- [ZK-SNARKS chini ya kofia](https://vitalik.eth.limo/general/2017/02/01/zk_snarks.html) +- [SNARKs zinawezekanaje?](https://vitalik.eth.limo/general/2021/01/26/snarks.html) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/anatomy/index.md b/public/content/translations/sw/developers/docs/smart-contracts/anatomy/index.md new file mode 100644 index 00000000000..0a245047a0c --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/anatomy/index.md @@ -0,0 +1,658 @@ +--- +title: Anatomy ya mikataba smart +description: Uchunguzi wa kina wa anatomia ya mwasiliani mahiri - kazi, data na vigeu. +lang: sw +--- + +Mkataba mzuri ni mpango unaoendeshwa kwenye anwani kwenye Ethereum. Zinajumuisha data na vipengele vinavyoweza kutekeleza unapopokea muamala. Huu hapa ni muhtasari wa kile kinachounda mkataba mzuri. + +## Mahitaji ya awali {#prerequisites} + +Hakikisha umesoma kuhusu [mikataba-erevu](/developers/docs/smart-contracts/) kwanza. Hati hii inadhania kuwa tayari unajua lugha za programu kama vile JavaScript au Python. + +## Data {#data} + +Data yoyote ya mkataba lazima ipewe eneo: ama kwa `storage` au `memory`. Ni gharama kubwa kurekebisha hifadhi katika mkataba mahiri kwa hivyo unahitaji kuzingatia mahali data yako inapaswa kuishi. + +### Ghala {#storage} + +Data endelevu inajulikana kama hifadhi na inawakilishwa na vigeu vya hali. Thamani hizi huhifadhiwa kabisa kwenye Kiambajengo. Unahitaji kutangaza aina ili mkataba uweze kufuatilia ni kiasi gani cha hifadhi kwenye Kiambajengo inahitaji wakati inapoundwa. + +```solidity +// Mfano wa Solidity +contract SimpleStorage { + uint storedData; // Kigezo cha Hali + // ... +} +``` + +```python +# Mfano wa Vyper +storedData: int128 +``` + +Ikiwa tayari umepanga lugha zinazoelekezwa kwa kitu, kuna uwezekano kwamba utafahamu aina nyingi. Hata hivyo, `address` inapaswa kuwa mpya kwako ikiwa wewe ni mgeni katika uendelezaji wa Ethereum. + +Aina ya `address` inaweza kushikilia anwani ya Ethereum ambayo ni sawa na baiti 20 au biti 160. Inarudi katika nukuu ya hexadecimal na 0x inayoongoza. + +Aina zingine ni pamoja na: + +- boolean +- nambari kamili +- nambari za uhakika +- safu za baiti za ukubwa usiobadilika +- safu za baiti zenye ukubwa unaobadilika +- maandishi halisi ya kimantiki na nambari kamili +- maandishi halisi ya string +- maandishi halisi ya heksadesimali +- enums + +Kwa maelezo zaidi, angalia hati: + +- [Tazama aina za Vyper](https://docs.vyperlang.org/en/v0.1.0-beta.6/types.html#value-types) +- [Tazama aina za Solidity](https://docs.soliditylang.org/en/latest/types.html#value-types) + +### Kumbukumbu {#memory} + +Thamani ambazo huhifadhiwa kwa muda wote wa utendakazi wa kazi ya mkataba huitwa vigeu vya kumbukumbu. Kwa kuwa hizi hazihifadhiwa kwa kudumu kwenye Kiambajengo, ni nafuu sana kutumia. + +Jifunze zaidi kuhusu jinsi EVM inavyohifadhi data (Hifadhi, Kumbukumbu, na Stack) katika [nyaraka za Solidity](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#storage-memory-and-the-stack). + +### Vigezo vya mazingira {#environment-variables} + +Mbali na vigezo unavyobainisha kwenye mkataba wako, kuna baadhi ya vigezo maalum vya kimataifa.". Zinatumika kimsingi kutoa habari kuhusu blockchain au shughuli ya sasa. + +Mifano: + +| **Sifa** | **Kigezo cha Hali** | **Maelezo** | +| ----------------- | ------------------- | --------------------------------------------------- | +| `block.timestamp` | uint256 | Muhuri wa wakati wa kipindi cha kizuizi cha sasa | +| `msg.sender` | anuani | Mtumaji wa ujumbe (simu ya sasa) | + +## Kazi {#functions} + +Kwa maneno rahisi zaidi, chaguo za kukokotoa zinaweza kupata taarifa au kuweka taarifa kujibu miamala inayoingia. + +Kuna aina mbili za simu za kazi: + +- `internal` – hizi hazitengenezi simu ya EVM + - Kazi za ndani na vigezo vya hali vinaweza kufikiwa tu ndani (yaani, kutoka ndani ya mkataba wa sasa au mikataba inayotokana nayo) +- `external` – hizi hutengeneza simu ya EVM + - Kazi za nje ni sehemu ya kiolesura cha mkataba, ambayo ina maana kwamba zinaweza kuitwa kutoka kwa mikataba mingine na kupitia miamala. Kazi ya nje `f` haiwezi kuitwa ndani (yaani, `f()` haifanyi kazi, lakini `this.f()` inafanya kazi). + +Pia zinaweza kuwa za `umma` au `faragha` + +- `kazi za umma` zinaweza kuitwa ndani kutoka ndani ya mkataba au nje kupitia ujumbe +- `kazi za faragha` zinaonekana tu kwa mkataba ambapo zimefafanuliwa na si katika mikataba inayotokana + +Vipengele vyote viwili vya kukokotoa na vigeZO Hali vinaweza kuwekwa hadharani au kwa faragha + +Hapa kuna kazi ya kubadilisha utofauti wa hali kwenye mkataba: + +```solidity +// Mfano wa Solidity +function update_name(string value) public { + dapp_name = value; +} +``` + +- Kigezo `value` cha aina ya `string` kinapitishwa kwenye kazi: `update_name` +- Imetangazwa kuwa ya `umma`, ikimaanisha mtu yeyote anaweza kuifikia +- Haijatangazwa `view`, hivyo inaweza kurekebisha hali ya mkataba + +### Kazi za kutazama {#view-functions} + +Kazi hizi zinaahidi kutorekebisha hali ya data ya mkataba. Mifano ya kawaida ni vitendaji vya "pata" - unaweza kutumia hii kupokea salio la mtumiaji kwa mfano. + +```solidity +// Mfano wa Solidity +function balanceOf(address _owner) public view returns (uint256 _balance) { + return ownerPizzaCount[_owner]; +} +``` + +```python +dappName: public(string) + +@view +@public +def readName() -> string: + return dappName +``` + +Ni nini kinachozingatiwa hali ya kurekebisha: + +1. Kuandika vigezo kwa hali. +2. [Kutoa matukio](https://docs.soliditylang.org/en/v0.7.0/contracts.html#events). +3. [Kuunda mikataba mingine](https://docs.soliditylang.org/en/v0.7.0/control-structures.html#creating-contracts). +4. Kutumia `selfdestruct`. +5. Inatuma etha kupitia simu. +6. Kuita kazi yoyote ambayo haijawekwa alama ya `view` au `pure`. +7. Kupigia simu chaguo za kukokotoa ambazo hazijawekwa alama tazama au safi. +8. Kutumia mkusanyiko wa ndani ambao una opcodes fulani. + +### Kazi za kiunda {#constructor-functions} + +`kazi za kiunda` hutekelezwa mara moja tu wakati mkataba unapelekwa kwa mara ya kwanza. Kama `constructor` katika lugha nyingi za programu za msingi wa darasa, kazi hizi mara nyingi huanzisha vigezo vya hali kwa thamani zake zilizoainishwa. + +```solidity +// Mfano wa Solidity +// Huanzisha data ya mkataba, ikiweka `owner` +// kwa anwani ya muundaji wa mkataba. +constructor() public { + // Mikataba-erevu yote hutegemea miamala ya nje ili kuanzisha kazi zake. + // `msg` ni kigezo cha kimataifa ambacho kinajumuisha data husika kwenye muamala uliopewa, + // kama vile anwani ya mtumaji na thamani ya ETH iliyojumuishwa kwenye muamala. + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties + owner = msg.sender; +} +``` + +```python +# Mfano wa Vyper + +@external +def __init__(_beneficiary: address, _bidding_time: uint256): + self.beneficiary = _beneficiary + self.auctionStart = block.timestamp + self.auctionEnd = self.auctionStart + _bidding_time +``` + +### Kazi zilizojengewa ndani {#built-in-functions} + +Kando na vigezo na chaguo za kukokotoa unazofafanua kwenye mkataba wako, kuna vitendaji maalum vilivyojumuishwa. Mfano dhahiri zaidi ni: + +- `address.send()` – Solidity +- `send(address)` – Vyper + +Hizi huruhusu kandarasi kutuma ETH kwa akaunti zingine. + +## Kuandika kazi {#writing-functions} + +Utendaji wako unahitaji: + +- kutofautisha kwa paramu na aina (ikiwa inakubali vigezo) +- tamko la ndani/nje +- tamko la mtazamo safi/unaoweza kulipwa +- inarudisha aina (ikiwa inarudisha thamani) + +```solidity +pragma solidity >=0.4.0 <=0.6.0; + +contract ExampleDapp { + string dapp_name; // kigezo cha hali + + // Inaitwa wakati mkataba unapelekwa na kuanzisha thamani + constructor() public { + dapp_name = "Mfumo wangu mtawanyo wa kimamlaka wa mfano"; + } + + // Kazi ya Kupata + function read_name() public view returns(string) { + return dapp_name; + } + + // Kazi ya Kuweka + function update_name(string value) public { + dapp_name = value; + } +} +``` + +Mkataba kamili unaweza kuonekana kama hii. Hapa kazi ya `constructor` inatoa thamani ya awali kwa kigezo cha `dapp_name`. + +## Matukio na kumbukumbu {#events-and-logs} + +Matukio huwezesha mkataba wako mahiri kuwasiliana na eneo lako la mbele au programu zingine za kujisajili. Baada ya muamala kuthibitishwa na kuongezwa kwenye kizuizi, mikataba mahiri inaweza kutoa matukio na kuweka taarifa, ambayo sehemu ya mbele inaweza kuchakata na kutumia. + +## Mifano yenye maelezo {#annotated-examples} + +Hii ni baadhi ya mifano iliyoandikwa katika umoja. Ikiwa ungependa kucheza na msimbo, unaweza kuingiliana nao katika [Remix](http://remix.ethereum.org). + +### Habari dunia {#hello-world} + +```solidity +// Inabainisha toleo la Solidity, kwa kutumia matoleo ya kimantiki. +// Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity ^0.5.10; + +// Inafafanua mkataba unaoitwa `HelloWorld`. +// Mkataba ni mkusanyiko wa kazi na data (hali yake). +// Baada ya kupelekwa, mkataba hukaa kwenye anwani maalum kwenye mnyororo wa bloku wa Ethereum. +// Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + // Inatangaza kigezo cha hali `message` cha aina ya `string`. + // Vigezo vya hali ni vigezo ambavyo thamani zake huhifadhiwa kabisa katika hifadhi ya mkataba. + // Neno muhimu `public` hufanya vigezo viweze kufikiwa kutoka nje ya mkataba + // na huunda kazi ambayo mikataba mingine au wateja wanaweza kuita ili kufikia thamani. + string public message; + + // Sawa na lugha nyingi za programu za kuelekeza-vitu zenye msingi wa darasa, kiunda ni + // kazi maalum ambayo inatekelezwa tu wakati wa uundaji wa mkataba. + // Viunda hutumika kuanzisha data ya mkataba. + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) public { + // Inakubali hoja ya string `initMessage` na kuweka thamani + // kwenye kigezo cha hifadhi cha `message` cha mkataba). + message = initMessage; + } + + // Kazi ya umma inayokubali hoja ya string + // na inasasisha kigezo cha hifadhi cha `message`. + function update(string memory newMessage) public { + message = newMessage; + } +} +``` + +### Token {#token} + +```solidity +pragma solidity ^0.5.10; + +contract Token { + // `Anwani` inalinganishwa na anwani ya barua pepe - inatumika kutambua akaunti kwenye Ethereum. + // Anwani zinaweza kuwakilisha mkataba-erevu au akaunti za nje (mtumiaji). + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/types.html#address + address public owner; + + // `mapping` kimsingi ni muundo wa data wa jedwali la hashi. + // `mapping` hii inapeana nambari kamili isiyo na alama (salio la tokeni) kwa anwani (mmiliki wa tokeni). + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/types.html#mapping-types + mapping (address => uint) public balances; + + // Matukio huruhusu uwekaji kumbukumbu wa shughuli kwenye mnyororo wa bloku. + // Wateja wa Ethereum wanaweza kusikiliza matukio ili kujibu mabadiliko ya hali ya mkataba. + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#events + event Transfer(address from, address to, uint amount); + + // Huanzisha data ya mkataba, ikiweka `owner` + // kwa anwani ya muundaji wa mkataba. + constructor() public { + // Mikataba-erevu yote hutegemea miamala ya nje ili kuanzisha kazi zake. + // `msg` ni kigezo cha kimataifa ambacho kinajumuisha data husika kwenye muamala uliopewa, + // kama vile anwani ya mtumaji na thamani ya ETH iliyojumuishwa kwenye muamala. + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties + owner = msg.sender; + } + + // Huunda kiasi cha tokeni mpya na kuzituma kwa anwani. + function mint(address receiver, uint amount) public { + // `require` ni muundo wa udhibiti unaotumika kutekeleza masharti fulani. + // Ikiwa taarifa ya `require` itatathminiwa kuwa `false`, ubaguzi husababishwa, + // ambayo hubatilisha mabadiliko yote yaliyofanywa kwa hali wakati wa wito wa sasa. + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions + + // Mmiliki wa mkataba pekee ndiye anayeweza kuita kazi hii + require(msg.sender == owner, "Wewe si mmiliki."); + + // Inatekeleza kiasi cha juu cha tokeni + require(amount < 1e60, "Utoaji wa juu umezidi"); + + // Huongeza salio la `receiver` kwa `amount` + balances[receiver] += amount; + } + + // Hutuma kiasi cha tokeni zilizopo kutoka kwa mpigaji simu yeyote kwenda kwa anwani. + function transfer(address receiver, uint amount) public { + // Mtumaji lazima awe na tokeni za kutosha kutuma + require(amount <= balances[msg.sender], "Salio halitoshi."); + + // Hurekebisha salio la tokeni za anwani mbili + balances[msg.sender] -= amount; + balances[receiver] += amount; + + // Hutoa tukio lililofafanuliwa mapema + emit Transfer(msg.sender, receiver, amount); + } +} +``` + +### Mali ya kipekee ya kidijitali {#unique-digital-asset} + +```solidity +pragma solidity ^0.5.10; + +// Huingiza alama kutoka faili zingine kwenye mkataba wa sasa. +// Katika kesi hii, mfululizo wa mikataba msaidizi kutoka OpenZeppelin. +// Jifunze zaidi: 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"; + +// Neno muhimu `is` hutumika kurithi kazi na maneno muhimu kutoka kwa mikataba ya nje. +// Katika kesi hii, `CryptoPizza` inarithi kutoka kwa mikataba ya `IERC721` na `ERC165`. +// Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#inheritance +contract CryptoPizza is IERC721, ERC165 { + // Hutumia maktaba ya SafeMath ya OpenZeppelin kufanya shughuli za hesabu kwa usalama. + // Jifunze zaidi: https://docs.openzeppelin.com/contracts/2.x/api/math#SafeMath + using SafeMath for uint256; + + // Vigezo vya hali vya kudumu katika Solidity ni sawa na lugha zingine + // lakini lazima upeane kutoka kwa usemi ambao ni wa kudumu wakati wa kukusanya. + // Jifunze zaidi: 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; + + // Aina za muundo hukuruhusu kufafanua aina yako mwenyewe + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/types.html#structs + struct Pizza { + string name; + uint256 dna; + } + + // Huunda safu tupu ya miundo ya Pizza + Pizza[] public pizzas; + + // Upangaji kutoka ID ya pizza hadi anwani ya mmiliki wake + mapping(uint256 => address) public pizzaToOwner; + + // Upangaji kutoka anwani ya mmiliki hadi idadi ya tokeni inayomilikiwa + mapping(address => uint256) public ownerPizzaCount; + + // Upangaji kutoka ID ya tokeni hadi anwani iliyoidhinishwa + mapping(uint256 => address) pizzaApprovals; + + // Unaweza kuweka upangaji, mfano huu unapanga mmiliki kwa idhini za mendeshaji + mapping(address => mapping(address => bool)) private operatorApprovals; + + // Kazi ya ndani ya kuunda Pizza nasibu kutoka kwa string (jina) na DNA + function _createPizza(string memory _name, uint256 _dna) + // Neno muhimu `internal` linamaanisha kazi hii inaonekana tu + // ndani ya mkataba huu na mikataba inayotokana na mkataba huu + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#visibility-and-getters + internal + // `isUnique` ni kirekebishaji cha kazi kinachokagua ikiwa pizza tayari ipo + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html#function-modifiers + isUnique(_name, _dna) + { + // Huongeza Pizza kwenye safu ya Piza na kupata id + uint256 id = SafeMath.sub(pizzas.push(Pizza(_name, _dna)), 1); + + // Hukagua kwamba mmiliki wa Pizza ni sawa na mtumiaji wa sasa + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions + + // kumbuka kuwa address(0) ni anwani sifuri, + // ikionyesha kuwa pizza[id] bado haijatengewa mtumiaji fulani. + + assert(pizzaToOwner[id] == address(0)); + + // Inapanga Pizza kwa mmiliki + pizzaToOwner[id] = msg.sender; + ownerPizzaCount[msg.sender] = SafeMath.add( + ownerPizzaCount[msg.sender], + 1 + ); + } + + // Huunda Pizza nasibu kutoka kwa string (jina) + function createRandomPizza(string memory _name) public { + uint256 randDna = generateRandomDna(_name, msg.sender); + _createPizza(_name, randDna); + } + + // Huzalisha DNA nasibu kutoka kwa string (jina) na anwani ya mmiliki (muundaji) + function generateRandomDna(string memory _str, address _owner) + public + // Kazi zilizo na alama ya `pure` huahidi kutosoma au kurekebisha hali + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#pure-functions + pure + returns (uint256) + { + // Huzalisha uint nasibu kutoka kwa string (jina) + anwani (mmiliki) + uint256 rand = uint256(keccak256(abi.encodePacked(_str))) + + uint256(_owner); + rand = rand % dnaModulus; + return rand; + } + + // Hurudisha safu ya Piza zilizopatikana na mmiliki + function getPizzasByOwner(address _owner) + public + // Kazi zilizo na alama ya `view` huahidi kurekebisha hali + // Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#view-functions + view + returns (uint256[] memory) + { + // Hutumia eneo la hifadhi la `memory` kuhifadhi thamani tu kwa + // mzunguko wa maisha wa wito huu wa kazi. + // Jifunze zaidi: 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; + } + + // Huhamisha Pizza na umiliki kwa anwani nyingine + function transferFrom(address _from, address _to, uint256 _pizzaId) public { + require(_from != address(0) && _to != address(0), "Anwani batili."); + require(_exists(_pizzaId), "Pizza haipo."); + require(_from != _to, "Haiwezi kuhamisha kwa anwani ileile."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Anwani haijaidhinishwa."); + + ownerPizzaCount[_to] = SafeMath.add(ownerPizzaCount[_to], 1); + ownerPizzaCount[_from] = SafeMath.sub(ownerPizzaCount[_from], 1); + pizzaToOwner[_pizzaId] = _to; + + // Hutoa tukio lililofafanuliwa katika mkataba wa IERC721 ulioingizwa + emit Transfer(_from, _to, _pizzaId); + _clearApproval(_to, _pizzaId); + } + + /** + * Huhamisha umiliki wa ID ya tokeni fulani kwa usalama kwenda kwa anwani nyingine + * Ikiwa anwani lengwa ni mkataba, lazima itekeleze `onERC721Received`, + * ambayo inaitwa wakati wa uhamisho salama, na kurudisha thamani ya kichawi + * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; + * vinginevyo, uhamisho unabatilishwa. + */ + function safeTransferFrom(address from, address to, uint256 pizzaId) + public + { + // solium-disable-next-line arg-overflow + this.safeTransferFrom(from, to, pizzaId, ""); + } + + /** + * Huhamisha umiliki wa ID ya tokeni fulani kwa usalama kwenda kwa anwani nyingine + * Ikiwa anwani lengwa ni mkataba, lazima itekeleze `onERC721Received`, + * ambayo inaitwa wakati wa uhamisho salama, na kurudisha thamani ya kichawi + * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; + * vinginevyo, uhamisho unabatilishwa. + */ + function safeTransferFrom( + address from, + address to, + uint256 pizzaId, + bytes memory _data + ) public { + this.transferFrom(from, to, pizzaId); + require(_checkOnERC721Received(from, to, pizzaId, _data), "Lazima utekeleze onERC721Received."); + } + + /** + * Kazi ya ndani ya kuita `onERC721Received` kwenye anwani lengwa + * Wito hautekelezwi ikiwa anwani lengwa si mkataba + */ + 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); + } + + // Huchoma Pizza - huharibu Tokeni kabisa + // Kirekebishaji cha kazi cha `external` kinamaanisha kazi hii ni + // sehemu ya kiolesura cha mkataba na mikataba mingine inaweza kuiita + function burn(uint256 _pizzaId) external { + require(msg.sender != address(0), "Anwani batili."); + require(_exists(_pizzaId), "Pizza haipo."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Anwani haijaidhinishwa."); + + ownerPizzaCount[msg.sender] = SafeMath.sub( + ownerPizzaCount[msg.sender], + 1 + ); + pizzaToOwner[_pizzaId] = address(0); + } + + // Hurudisha hesabu ya Piza kwa anwani + function balanceOf(address _owner) public view returns (uint256 _balance) { + return ownerPizzaCount[_owner]; + } + + // Hurudisha mmiliki wa Pizza iliyopatikana kwa id + function ownerOf(uint256 _pizzaId) public view returns (address _owner) { + address owner = pizzaToOwner[_pizzaId]; + require(owner != address(0), "ID ya Pizza batili."); + return owner; + } + + // Huidhinisha anwani nyingine kuhamisha umiliki wa Pizza + function approve(address _to, uint256 _pizzaId) public { + require(msg.sender == pizzaToOwner[_pizzaId], "Lazima uwe mmiliki wa Pizza."); + pizzaApprovals[_pizzaId] = _to; + emit Approval(msg.sender, _to, _pizzaId); + } + + // Hurudisha anwani iliyoidhinishwa kwa Pizza maalum + function getApproved(uint256 _pizzaId) + public + view + returns (address operator) + { + require(_exists(_pizzaId), "Pizza haipo."); + return pizzaApprovals[_pizzaId]; + } + + /** + * Kazi ya faragha ya kufuta idhini ya sasa ya ID ya tokeni fulani + * Hubatilisha ikiwa anwani iliyotolewa si kweli mmiliki wa tokeni + */ + function _clearApproval(address owner, uint256 _pizzaId) private { + require(pizzaToOwner[_pizzaId] == owner, "Lazima uwe mmiliki wa pizza."); + require(_exists(_pizzaId), "Pizza haipo."); + if (pizzaApprovals[_pizzaId] != address(0)) { + pizzaApprovals[_pizzaId] = address(0); + } + } + + /* + * Huweka au huondoa idhini ya mendeshaji fulani + * Mendeshaji anaruhusiwa kuhamisha tokeni zote za mtumaji kwa niaba yake + */ + function setApprovalForAll(address to, bool approved) public { + require(to != msg.sender, "Haiwezi kuidhinisha anwani mwenyewe"); + operatorApprovals[msg.sender][to] = approved; + emit ApprovalForAll(msg.sender, to, approved); + } + + // Husema ikiwa mendeshaji ameidhinishwa na mmiliki fulani + function isApprovedForAll(address owner, address operator) + public + view + returns (bool) + { + return operatorApprovals[owner][operator]; + } + + // Huchukua umiliki wa Pizza - kwa watumiaji walioidhinishwa pekee + function takeOwnership(uint256 _pizzaId) public { + require(_isApprovedOrOwner(msg.sender, _pizzaId), "Anwani haijaidhinishwa."); + address owner = this.ownerOf(_pizzaId); + this.transferFrom(owner, msg.sender, _pizzaId); + } + + // Hukagua ikiwa Pizza ipo + function _exists(uint256 pizzaId) internal view returns (bool) { + address owner = pizzaToOwner[pizzaId]; + return owner != address(0); + } + + // Hukagua ikiwa anwani ni mmiliki au imeidhinishwa kuhamisha Pizza + function _isApprovedOrOwner(address spender, uint256 pizzaId) + internal + view + returns (bool) + { + address owner = pizzaToOwner[pizzaId]; + // Lemaza ukaguzi wa solium kwa sababu ya + // https://github.com/duaraghav8/Solium/issues/175 + // solium-disable-next-line operator-whitespace + return (spender == owner || + this.getApproved(pizzaId) == spender || + this.isApprovedForAll(owner, spender)); + } + + // Kagua ikiwa Pizza ni ya kipekee na bado haipo + 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 yenye jina kama hilo tayari ipo."); + _; + } + + // Hurudisha ikiwa anwani lengwa ni mkataba + function isContract(address account) internal view returns (bool) { + uint256 size; + // Kwa sasa hakuna njia bora ya kuangalia kama kuna mkataba katika anwani + // kuliko kuangalia ukubwa wa msimbo kwenye anwani hiyo. + // Tazama https://ethereum.stackexchange.com/a/14016/36603 + // kwa maelezo zaidi kuhusu jinsi hii inavyofanya kazi. + // TODO Kagua hili tena kabla ya toleo la Serenity, kwa sababu anwani zote zitakuwa + // mikataba basi. + // solium-disable-next-line security/no-inline-assembly + assembly { + size := extcodesize(account) + } + return size > 0; + } +} +``` + +## Masomo zaidi {#further-reading} + +Angalia nyaraka za Solidity na Vyper kwa muhtasari kamili zaidi wa mikataba mahiri: + +- [Solidity](https://docs.soliditylang.org/) +- [Vyper](https://docs.vyperlang.org/en/stable/) + +## Mada zinazohusiana {#related-topics} + +- [Mikataba-erevu](/developers/docs/smart-contracts/) +- [Mashine Halisi ya Ethereum](/developers/docs/evm/) + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Kupunguza mikataba ili kupambana na kikomo cha ukubwa wa mkataba](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _– Baadhi ya vidokezo vya vitendo vya kupunguza ukubwa wa mkataba wako mahiri._ +- [Kuweka kumbukumbu ya data kutoka kwa mikataba mahiri na matukio](/developers/tutorials/logging-events-smart-contracts/) _– Utangulizi wa matukio ya mkataba mahiri na jinsi unavyoweza kuyatumia kuweka kumbukumbu ya data._ +- [Kuingiliana na mikataba mingine kutoka Solidity](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– Jinsi ya kupeleka mkataba mahiri kutoka kwa mkataba uliopo na kuingiliana nao._ diff --git a/public/content/translations/sw/developers/docs/smart-contracts/compiling/index.md b/public/content/translations/sw/developers/docs/smart-contracts/compiling/index.md new file mode 100644 index 00000000000..5d1a725a4ec --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/compiling/index.md @@ -0,0 +1,282 @@ +--- +title: Kuandaa smart contracts +description: Ufafanuzi wa kwa nini unahitaji kuandaa mikataba-erevu na kile ambacho uandaaji hufanya. +lang: sw +incomplete: true +--- + +Unahitaji kuandaa mkataba wako ili programu yako ya wavuti na Mashine ya mtandaoni ya Ethereum (EVM) iweze kuuelewa. + +## Mahitaji ya awali {#prerequisites} + +Huenda ikawa na manufaa kwako kuwa umesoma utangulizi wetu wa [mikataba-erevu](/developers/docs/smart-contracts/) na [Mashine ya mtandaoni ya Ethereum](/developers/docs/evm/) kabla ya kusoma kuhusu uandaaji. + +## EVM {#the-evm} + +Ili [EVM](/developers/docs/evm/) iweze kutekeleza mkataba wako, inahitaji kuwa katika **bytecode**. Uandaaji hubadilisha hii: + +```solidity +pragma solidity 0.4.24; + +contract Greeter { + + function greet() public view returns (string memory) { + return "Hello"; + } + +} +``` + +**na kuwa hii** + +``` +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 +``` + +Hizi huitwa **opcodes**. Opcodes za EVM ni maelekezo ya kiwango cha chini ambayo Mashine ya mtandaoni ya Ethereum (EVM) inaweza kutekeleza. Kila opcode inawakilisha operesheni maalum, kama vile operesheni za hesabu, operesheni za kimantiki, upotoshaji wa data, mtiririko wa udhibiti, n.k. + +[Zaidi kuhusu opcodes](/developers/docs/evm/opcodes/) + +## Programu za wavuti {#web-applications} + +Kiandaaji pia kitatoa **Kiolesura cha Binary cha Programu (ABI)** ambacho unahitaji ili programu yako ielewe mkataba na kuita utendaji wa mkataba. + +ABI ni faili ya JSON inayoelezea mkataba uliotumwa na utendaji wake wa mkataba-erevu. Hii husaidia kuziba pengo kati ya web2 na web3 + +[Library ya wateja ya JavaScript](/developers/docs/apis/javascript/) itasoma **ABI** ili uweze kuita mkataba-erevu wako katika kiolesura cha programu yako ya wavuti. + +Ifuatayo ni ABI ya mkataba wa tokeni ya ERC-20. ERC-20 ni tokeni ambayo unaweza kufanya biashara nayo kwenye Ethereum. + +```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" + } +] +``` + +## Masomo zaidi {#further-reading} + +- [Maelezo ya ABI](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _– Solidity_ + +## Mada zinazohusiana {#related-topics} + +- [Libraries za wateja za JavaScript](/developers/docs/apis/javascript/) +- [Mashine ya mtandaoni ya Ethereum](/developers/docs/evm/) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/composability/index.md b/public/content/translations/sw/developers/docs/smart-contracts/composability/index.md new file mode 100644 index 00000000000..3b274258256 --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/composability/index.md @@ -0,0 +1,76 @@ +--- +title: Uundikaji wa mkataba-erevu +description: Jifunze jinsi mikataba-erevu inavyoweza kuunganishwa kama bloku za Lego ili kuunda dapps changamano kwa kutumia tena vijenzi vilivyopo. +lang: sw +incomplete: true +--- + +## Utangulizi mfupi {#a-brief-introduction} + +Mikataba-erevu ni ya umma kwenye Ethereum na inaweza kufikiriwa kama API zilizo wazi. Huhitaji kuandika mkataba-erevu wako mwenyewe ili kuwa msanidi programu wa dapp, unahitaji tu kujua jinsi ya kuingiliana nao. Kwa mfano, unaweza kutumia mikataba-erevu iliyopo ya [Uniswap](https://uniswap.exchange/swap), exchange ya ugatuzi, kushughulikia mantiki yote ya ubadilishaji wa tokeni katika programu yako – huhitaji kuanza kutoka mwanzo. Angalia baadhi ya mikataba yao ya [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) na [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts). + +## Uundikaji ni nini? {#what-is-composability} + +Uundikaji ni kuunganisha vijenzi tofauti ili kuunda mifumo au matokeo mapya. Katika usanidi wa programu, uundikaji unamaanisha wasanidi programu wanaweza kutumia tena vijenzi vya programu vilivyopo ili kuunda programu mpya. Njia nzuri ya kuelewa uundikaji ni kufikiria vijenzi vinavyoundika kama bloku za Lego. Kila Lego inaweza kuunganishwa na nyingine, kukuruhusu kujenga miundo tata kwa kuunganisha Lego tofauti. + +Katika Ethereum, kila mkataba-erevu ni kama Lego—unaweza kutumia mikataba-erevu kutoka kwa miradi mingine kama bloku za ujenzi za mradi wako. Hii inamaanisha si lazima utumie muda kugundua upya gurudumu au kujenga kutoka mwanzo. + +## Uundikaji hufanyaje kazi? {#how-does-composability-work} + +Mikataba-erevu ya Ethereum ni kama API za umma, kwa hivyo mtu yeyote anaweza kuingiliana na mkataba au kuijumuisha kwenye dapps kwa utendakazi ulioongezwa. Uundikaji wa mkataba-erevu kwa ujumla hufanya kazi kwa kanuni tatu: umodula, uhuru, na ugundulikaji: + +\*\*1. **Umodula**: Huu ni uwezo wa vijenzi binafsi kutekeleza kazi maalum. Katika Ethereum, kila mkataba-erevu una kesi maalum ya utumiaji (kama inavyoonyeshwa kwenye mfano wa Uniswap). + +\*\*2. **Uhuru**: Vijenzi vinavyoundika lazima viweze kufanya kazi kwa kujitegemea. Kila mkataba-erevu katika Ethereum unajitekeleza na unaweza kufanya kazi bila kutegemea sehemu zingine za mfumo. + +\*\*3. **Ugundulikaji**: Wasanidi programu hawawezi kuita mikataba ya nje au kuunganisha maktaba za programu katika programu ikiwa hazipatikani kwa umma. Kwa muundo, mikataba-erevu ni chanzo-wazi; mtu yeyote anaweza kuita mkataba-erevu au kufanya mgawanyiko wa msimbo. + +## Faida za uundikaji {#benefits-of-composability} + +### Mzunguko mfupi wa usanidi {#shorter-development-cycle} + +Uundikaji hupunguza kazi ambayo wasanidi programu wanapaswa kufanya wakati wa kuunda [dapps](/apps/#what-are-dapps). [Kama anavyosema Naval Ravikant:](https://twitter.com/naval/status/1444366754650656770) "Chanzo-wazi inamaanisha kila tatizo linapaswa kutatuliwa mara moja." + +Ikiwa kuna mkataba-erevu unaotatua tatizo moja, wasanidi programu wengine wanaweza kuutumia tena, kwa hivyo si lazima watatue tatizo lile lile. Kwa njia hii, wasanidi programu wanaweza kuchukua maktaba zilizopo za programu na kuongeza utendakazi wa ziada ili kuunda dapps mpya. + +### Ubunifu mkuu {#greater-innovation} + +Uundikaji unahimiza uvumbuzi na majaribio kwa sababu wasanidi programu wako huru kutumia tena, kurekebisha, kunakili, au kuunganisha msimbo wa chanzo-wazi ili kuunda matokeo yanayohitajika. Matokeo yake, timu za usanidi hutumia muda mchache kwenye utendakazi wa msingi na zinaweza kutenga muda zaidi kujaribu vipengele vipya. + +### Uzoefu bora wa mtumiaji {#better-user-experience} + +Utangamano kati ya vijenzi vya mfumo ikolojia wa Ethereum huboresha uzoefu wa mtumiaji. Watumiaji wanaweza kufikia utendakazi mkuu wakati dapps zinapounganisha mikataba-erevu ya nje kuliko katika mfumo ikolojia uliogawanyika ambapo programu haziwezi kuwasiliana. + +Tutatumia mfano kutoka kwa biashara ya arbitraji ili kuonyesha manufaa ya utangamano: + +Ikiwa tokeni inauzwa kwa bei ya juu kwenye `exchange A` kuliko `exchange B`, unaweza kutumia tofauti ya bei kupata faida. Hata hivyo, unaweza kufanya hivyo tu ikiwa una mtaji wa kutosha kufadhili muamala (yaani, kununua tokeni kutoka `exchange B` na kuiuza kwenye `exchange A`). + +Katika hali ambapo huna fedha za kutosha kulipia biashara, mkopo wa haraka unaweza kuwa bora. [Mikopo ya haraka](/defi/#flash-loans) ni ya kiufundi sana, lakini wazo la msingi ni kwamba unaweza kukopa mali (bila dhamana) na kuirejesha ndani ya muamala _mmoja_. + +Tukirejea kwenye mfano wetu wa awali, mfanyabiashara wa arbitraji anaweza kuchukua mkopo mkubwa wa haraka, kununua tokeni kutoka `exchange B`, kuziuza kwenye `exchange A`, kulipa mtaji + riba, na kubaki na faida, yote ndani ya muamala mmoja. Mantiki hii changamano inahitaji kuchanganya wito kwa mikataba mingi, jambo ambalo lisingewezekana kama mikataba-erevu ingekosa utangamano. + +## Mifano ya uundikaji katika Ethereum {#composability-in-ethereum} + +### Kubadilisha tokeni {#token-swaps} + +Ukitengeneza dapp inayohitaji miamala kulipwa kwa ETH, unaweza kuwaruhusu watumiaji kulipa kwa tokeni zingine za ERC-20 kwa kuunganisha mantiki ya ubadilishaji wa tokeni. Msimbo utabadilisha kiotomatiki tokeni ya mtumiaji kuwa ETH kabla ya mkataba kutekeleza kitendakazi kilichoitwa. + +### Utawala {#governance} + +Kujenga mifumo ya utawala maalum kwa [DAO](/dao/) kunaweza kuwa ghali na kuchukua muda. Badala yake, unaweza kutumia zana ya utawala ya chanzo-wazi, kama vile [Aragon Client](https://client.aragon.org/), ili kuanzisha DAO yako na kuunda haraka mfumo wa utawala. + +### Usimamizi wa utambulisho {#identity-management} + +Badala ya kuunda mfumo maalum wa uthibitishaji au kutegemea watoa huduma wa kati, unaweza kuunganisha zana za utambulisho uliogatuliwa (DID) ili kudhibiti uthibitishaji kwa watumiaji. Mfano ni [SpruceID](https://www.spruceid.com/), zana ya chanzo-wazi ambayo inatoa utendakazi wa "Ingia na Ethereum" unaowaruhusu watumiaji kuthibitisha utambulisho na pochi ya Ethereum. + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Anzisha usanidi wako wa frontend wa dapp na create-eth-app](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _– Muhtasari wa jinsi ya kutumia create-eth-app kuunda programu zenye mikataba-erevu maarufu tayari kwa matumizi._ + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +- [Uundikaji ni Ubunifu](https://a16zcrypto.com/posts/article/how-composability-unlocks-crypto-and-everything-else/) +- [Kwa Nini Uundikaji ni Muhimu kwa Web3](https://hackernoon.com/why-composability-matters-for-web3) +- [Uundikaji ni Nini?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/deploying/index.md b/public/content/translations/sw/developers/docs/smart-contracts/deploying/index.md new file mode 100644 index 00000000000..4b5300886e1 --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/deploying/index.md @@ -0,0 +1,81 @@ +--- +title: Kupeleka mikataba erevu +description: Jifunze jinsi ya kupeleka mikataba-erevu kwenye mitandao ya Ethereum, ikiwa ni pamoja na mahitaji ya lazima, zana, na hatua za upelekaji. +lang: sw +--- + +Unahitaji kupeleka mkataba wako-erevu ili uweze kupatikana kwa watumiaji wa mtandao wa Ethereum. + +Ili kupeleka mkataba-erevu, unahitaji tu kutuma muamala wa Ethereum wenye msimbo ulioandaliwa wa mkataba-erevu bila kubainisha mpokeaji yeyote. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuelewa [mitandao ya Ethereum](/developers/docs/networks/), [miamala](/developers/docs/transactions/) na [muundo wa mikataba-erevu](/developers/docs/smart-contracts/anatomy/) kabla ya kupeleka mikataba-erevu. + +Kupeleka mkataba pia hugharimu ether (ETH) kwa kuwa huhifadhiwa kwenye mnyororo wa bloku, kwa hivyo unapaswa kufahamu [gesi na ada](/developers/docs/gas/) kwenye Ethereum. + +Mwisho, utahitaji kuandaa mkataba wako kabla ya kuuwasilisha, kwa hiyo hakikisha umesoma kuhusu [kuandaa mikataba-erevu](/developers/docs/smart-contracts/compiling/). + +## Jinsi ya kupeleka mkataba-erevu {#how-to-deploy-a-smart-contract} + +### Vitu utakavyohitaji {#what-youll-need} + +- Bytecode ya mkataba wako – hii hutengenezwa kupitia [uandaaji](/developers/docs/smart-contracts/compiling/) +- ETH ya gesi – utaweka kikomo chako cha gesi kama miamala mingine kwa hiyo fahamu kwamba upelekaji wa mkataba unahitaji gesi nyingi zaidi kuliko uhamisho rahisi wa ETH +- hati ya upelekaji au programu-jalizi +- ufikiaji wa [nodi ya Ethereum](/developers/docs/nodes-and-clients/), ama kwa kuendesha yako mwenyewe, kuunganisha kwenye nodi ya umma, au kupitia ufunguo wa API kwa kutumia [huduma ya nodi](/developers/docs/nodes-and-clients/nodes-as-a-service/) + +### Hatua za kupeleka mkataba-erevu {#steps-to-deploy} + +Hatua mahususi zinazohusika zitatategemea mfumo wa usanidi unaohusika. Kwa mfano, unaweza kuangalia [nyaraka za Hardhat kuhusu kupeleka mikataba yako](https://hardhat.org/docs/tutorial/deploying) au [nyaraka za Foundry kuhusu kupeleka na kuthibitisha mkataba-erevu](https://book.getfoundry.sh/forge/deploying). Mara tu utakapowasilishwa, mkataba wako utakuwa na anwani ya Ethereum kama [akaunti](/developers/docs/accounts/) zingine na unaweza kuthibitishwa kwa kutumia [zana za uthibitishaji wa msimbo chanzo](/developers/docs/smart-contracts/verifying/#source-code-verification-tools). + +## Zana zinazohusiana {#related-tools} + +**Remix - _Remix IDE huruhusu kusanidi, kupeleka na kusimamia mikataba-erevu kwa minyororo ya bloku kama Ethereum_** + +- [Remix](https://remix.ethereum.org) + +**Tenderly - _Jukwaa la usanidi la Web3 ambalo hutoa utatuzi, uangalizi, na vizuizi vya ujenzi wa miundombinu kwa ajili ya kusanidi, kujaribu, kufuatilia na kuendesha mikataba-erevu_** + +- [tenderly.co](https://tenderly.co/) +- [Nyaraka](https://docs.tenderly.co/) +- [GitHub](https://github.com/Tenderly) +- [Discord](https://discord.gg/eCWjuvt) + +**Hardhat - _Mazingira ya usanidi ya kuandaa, kupeleka, kujaribu na kutatua programu yako ya Ethereum_** + +- [hardhat.org](https://hardhat.org/getting-started/) +- [Nyaraka kuhusu kupeleka mikataba yako](https://hardhat.org/docs/tutorial/deploying) +- [GitHub](https://github.com/nomiclabs/hardhat) +- [Discord](https://discord.com/invite/TETZs2KK4k) + +**thirdweb - _Peleka mkataba wowote kwa urahisi kwenye mnyororo wowote unaoendana na EVM, kwa kutumia amri moja_** + +- [Nyaraka](https://portal.thirdweb.com/deploy/) + +**Crossmint - _Jukwaa la usanidi la web3 la kiwango cha biashara la kupeleka mikataba-erevu, kuwezesha malipo ya kadi za mkopo na mnyororo-mbali, na kutumia API kuunda, kusambaza, kuuza, kuhifadhi na kuhariri NFTs._** + +- [crossmint.com](https://www.crossmint.com) +- [Nyaraka](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) +- [Blog](https://blog.crossmint.com) + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Kupeleka mkataba wako wa kwanza-erevu](/developers/tutorials/deploying-your-first-smart-contract/) _– Utangulizi wa kupeleka mkataba wako wa kwanza-erevu kwenye mtandao wa majaribio wa Ethereum._ +- [Hello World | mafunzo ya mkataba-erevu](/developers/tutorials/hello-world-smart-contract/) _– Mafunzo rahisi kufuata ya kuunda na kupeleka mkataba-erevu wa msingi kwenye Ethereum._ +- [Kuingiliana na mikataba mingine kutoka Solidity](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– Jinsi ya kupeleka mkataba mahiri kutoka kwa mkataba uliopo na kuingiliana nao._ +- [Jinsi ya kupunguza ukubwa wa mkataba wako](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _- Jinsi ya kupunguza ukubwa wa mkataba wako ili ukae chini ya kikomo na kuokoa kwenye gesi_ + +## Masomo zaidi {#further-reading} + +- [https://docs.openzeppelin.com/learn/deploying-and-interacting](https://docs.openzeppelin.com/learn/deploying-and-interacting) - _OpenZeppelin_ +- [Kupeleka mikataba yako na Hardhat](https://hardhat.org/docs/tutorial/deploying) - _Nomic Labs_ + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Mifumo ya uundaji](/developers/docs/frameworks/) +- [Endesha nodi ya Ethereum](/developers/docs/nodes-and-clients/run-a-node/) +- [Nodi-kama-huduma](/developers/docs/nodes-and-clients/nodes-as-a-service) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/formal-verification/index.md b/public/content/translations/sw/developers/docs/smart-contracts/formal-verification/index.md new file mode 100644 index 00000000000..eb68cb4b8b8 --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/formal-verification/index.md @@ -0,0 +1,284 @@ +--- +title: Uthibitishaji rasmi wa mikataba-erevu +description: Muhtasari wa uthibitishaji rasmi wa mikataba-erevu ya Ethereum +lang: sw +--- + +[Mikataba-erevu](/developers/docs/smart-contracts/) inafanya iwezekane kuunda programu zilizogatuliwa, zisizo za kuaminika, na imara ambazo zinaleta visa-matumizi vipya na kufungua thamani kwa watumiaji. Kwa sababu mikataba mahiri hushughulikia kiasi kikubwa cha thamani, usalama ni jambo muhimu sana kwa wasanifu programu. + +Uthibitishaji rasmi ni moja ya mbinu zinazopendekezwa za kuboresha [usalama wa mkataba-erevu](/developers/docs/smart-contracts/security/). Uthibitishaji rasmi, ambao unatumia [mbinu rasmi](https://www.brookings.edu/techstream/formal-methods-as-a-path-toward-better-cybersecurity/) za kubainisha, kubuni, na kuthibitisha programu, umetumika kwa miaka mingi kuhakikisha usahihi wa mifumo muhimu ya maunzi na programu. + +Inapotekelezwa katika mikataba mahiri, uthibitishaji rasmi unaweza kuthibitisha kuwa mantiki ya biashara ya mkataba inakidhi vipimo vilivyobainishwa awali. Ikilinganishwa na mbinu nyingine za kutathmini usahihi wa msimbo wa mkataba, kama vile kupima, uthibitishaji rasmi hutoa uhakikisho mkubwa zaidi kwamba mkataba mahiri ni sahihi kiutendaji. + +## Uthibitishaji rasmi ni nini? {#what-is-formal-verification} + +Uthibitishaji rasmi unarejelea mchakato wa kutathmini usahihi wa mfumo kuhusiana na vipimo rasmi. Kwa maneno rahisi, uthibitishaji rasmi huturuhusu kuangalia ikiwa tabia ya mfumo inakidhi mahitaji fulani (yaani, inafanya tunachotaka). + +Tabia zinazotarajiwa za mfumo (mkataba mahiri katika kesi hii) hufafanuliwa kwa kutumia uundaji rasmi, huku lugha za ubainishi huwezesha uundaji wa sifa rasmi. Mbinu rasmi za uthibitishaji zinaweza kuthibitisha kwamba utekelezaji wa mkataba unatii vipimo vyake na kupata uthibitisho wa kihisabati wa usahihi wa mkataba wa awali. Wakati mkataba unakidhi maelezo yake, unafafanuliwa kuwa sahihi kiutendaji, sahihi kwa muundo, au "sahihi kwa ujenzi. + +### Mfumo rasmi ni nini? {#what-is-a-formal-model} + +Katika sayansi ya kompyuta, [mfumo rasmi](https://en.wikipedia.org/wiki/Model_of_computation) ni maelezo ya kihisabati ya mchakato wa kikokotozi. Vipindi vinatolewa katika vitendea kazi vya hisabati (milinganyo), huku kielelezo kikieleza jinsi matokeo ya utendaji kazi yanavyokokotolewa kutokana na ingizo. + +Miundo rasmi hutoa kiwango cha ufupisho ambacho uchanganuzi wa tabia ya programu unaweza kutathminiwa. Uwepo wa mifumo rasmi unaruhusu uundaji wa _ainisho rasmi_, ambayo inaelezea sifa zinazohitajika za mfumo husika. + +Mbinu tofauti hutumika kuiga mikataba-erevu kwa ajili ya uthibitishaji rasmi. Kwa mfano, baadhi ya mifumo hutumiwa kujadili kuhusu tabia ya kiwango cha juu ya mkataba-erevu. Mbinu hizi za mfano hutumia mwonekano wa kisanduku cheusi kwa mikataba mahiri, na kuziona kama mifumo inayokubali ingizo na kutekeleza hesabu kulingana na ingizo hizo. + +Miundo ya kiwango cha juu huzingatia uhusiano kati ya mikataba mahiri na mawakala wa nje, kama vile akaunti zinazomilikiwa za nje (EOAs), akaunti za mikataba na mazingira ya kiambajengo. Miundo kama hii ni muhimu kwa kufafanua sifa zinazobainisha jinsi mkataba unapaswa kutenda kulingana na mwingiliano fulani wa watumiaji. + +Kinyume chake, mifumo mingine rasmi hulenga tabia ya kiwango cha chini cha mkataba-erevu. Ingawa miundo ya kiwango cha juu inaweza kusaidia katika hoja kuhusu utendaji kazi wa mkataba, inaweza kushindwa kupata maelezo kuhusu utendakazi wa ndani wa utekelezaji. Mifumo ya kiwango cha chini hutumia mtazamo wa 'sanduku-jeupe' kwa uchanganuzi wa programu na hutegemea uwakilishi wa kiwango cha chini wa programu za mkataba-erevu, kama vile mfuatilio wa programu na [grafu za mtiririko wa udhibiti](https://en.wikipedia.org/wiki/Control-flow_graph), ili kutoa hoja kuhusu sifa zinazohusiana na utekelezaji wa mkataba. + +Mifumo ya kiwango cha chini inachukuliwa kuwa bora kwani inawakilisha utekelezaji halisi wa mkataba-erevu katika mazingira ya utekelezaji ya Ethereum (yaani, [EVM](/developers/docs/evm/)). Mbinu za uundaji wa kiwango cha chini ni muhimu sana katika kuanzisha sifa muhimu za usalama katika mikataba mahiri na kugundua udhaifu unaowezekana. + +### Ainisho rasmi ni nini? {#what-is-a-formal-specification} + +Ainisho ni hitaji la kiufundi tu ambalo mfumo fulani lazima utimize. Katika upangaji, vipimo vinawakilisha mawazo ya jumla kuhusu utekelezaji wa programu (yaani, kile ambacho programu inapaswa kufanya). + +Katika muktadha wa mikataba-erevu, mainisho rasmi hurejelea _sifa_—maelezo rasmi ya mahitaji ambayo mkataba lazima utimize. Sifa kama hizo zinafafanuliwa kama "zisizobadilika" na zinawakilisha madai ya kimantiki kuhusu utekelezaji wa mkataba ambayo lazima yabaki kuwa kweli chini ya kila hali iwezekanayo, bila ubaguzi wowote. + +Kwa hivyo, tunaweza kufikiria ubainifu rasmi kama mkusanyo wa taarifa zilizoandikwa katika lugha rasmi inayoelezea utekelezaji uliokusudiwa wa mkataba mahiri. Maelezo yanahusu mali ya mkataba na kufafanua jinsi mkataba unapaswa kutenda katika hali tofauti. Madhumuni ya uthibitishaji rasmi ni kubaini ikiwa mkataba mahiri unamiliki sifa hizi (zisizobadilika) na kwamba sifa hizi hazijakiukwa wakati wa utekelezaji. + +Mainisho rasmi ni muhimu katika kuunda utekelezaji salama wa mikataba-erevu. Mikataba ambayo inashindwa kubadilika au mali zao kukiukwa wakati wa utekelezaji huathiriwa na udhaifu unaoweza kudhuru utendakazi au kusababisha matumizi mabaya. + +## Aina za mainisho rasmi kwa mikataba-erevu {#formal-specifications-for-smart-contracts} + +Mainisho rasmi huwezesha utoaji hoja za kihisabati kuhusu usahihi wa utekelezaji wa programu. Kama ilivyo kwa miundo rasmi, vipimo rasmi vinaweza kunasa sifa za kiwango cha juu au tabia ya kiwango cha chini cha utekelezaji wa mkataba. + +Mainisho rasmi hutokana na matumizi ya vipengele vya [mantiki ya programu](https://en.wikipedia.org/wiki/Logic_programming), ambavyo huruhusu utoaji hoja rasmi kuhusu sifa za programu. Mantiki ya programu ina sheria rasmi zinazoeleza (katika lugha ya hisabati) tabia inayotarajiwa ya programu. Mantiki mbalimbali za programu hutumika katika kuunda mainisho rasmi, ikiwa ni pamoja na [mantiki ya ufikivu](https://en.wikipedia.org/wiki/Reachability_problem), [mantiki ya muda](https://en.wikipedia.org/wiki/Temporal_logic), na [mantiki ya Hoare](https://en.wikipedia.org/wiki/Hoare_logic). + +Mainisho rasmi kwa mikataba-erevu yanaweza kuainishwa kwa upana kama mainisho ya **kiwango cha juu** au **kiwango cha chini**. Bila kujali aina ya vipimo ni vya aina gani, lazima ielezee vya kutosha na bila utata mali ya mfumo unaochambuliwa. + +### Mainisho ya kiwango cha juu {#high-level-specifications} + +Kama jina linavyopendekeza, vipimo vya kiwango cha juu (pia huitwa vielelezo vyenye mwelekeo wa modeli) hufafanua tabia ya kiwango cha juu cha programu. Mainisho ya kiwango cha juu huiga mkataba-erevu kama [mashine ya hali ya kikomo](https://en.wikipedia.org/wiki/Finite-state_machine) (FSM), ambayo inaweza kubadilika kati ya hali kwa kutekeleza operesheni, huku mantiki ya muda ikitumika kufafanua sifa rasmi za mfumo wa FSM. + +[Mantiki za muda](https://en.wikipedia.org/wiki/Temporal_logic) ni "kanuni za kutoa hoja kuhusu mapendekezo yaliyohitimu kulingana na wakati (k.m., "Nina njaa _kila wakati_" au "_Hatimaye_ nitakuwa na njaa")." Inapotumika kwa uthibitishaji rasmi, mantiki ya muda hutumiwa kutaja madai kuhusu tabia sahihi ya mifumo iliyoigwa kama mashine za majimbo. Hasa, mantiki ya muda inaelezea hali za baadaye ambazo mkataba mahiri unaweza kuwa ndani na jinsi unavyobadilika kati ya majimbo. + +Mainisho ya kiwango cha juu kwa ujumla hunasa sifa mbili muhimu za muda kwa mikataba-erevu: **usalama** na **uhai**. Sifa za usalama huwakilisha wazo kwamba "hakuna chochote kibaya kinachowahi kutokea" na kwa kawaida huonyesha kutofautiana. Sifa ya usalama inaweza kubainisha mahitaji ya jumla ya programu, kama vile uhuru kutoka kwa [mkwamo](https://www.techtarget.com/whatis/definition/deadlock), au kuelezea sifa maalum za kikoa kwa mikataba (k.m., visivyobadilika kwenye udhibiti wa ufikiaji wa vitendaji, thamani zinazokubalika za vigeu vya hali, au masharti ya uhamishaji wa tokeni). + +Chukua kwa mfano hitaji hili la usalama ambalo linashughulikia masharti ya kutumia `transfer()` au `transferFrom()` katika mikataba ya tokeni ya ERC-20: _“Salio la mtumaji kamwe haliwi chini ya kiasi kilichoombwa cha tokeni za kutumwa.”_. Maelezo haya ya lugha asilia ya kipingamizi cha mkataba yanaweza kutafsiriwa katika ubainifu rasmi (wa hisabati), ambao unaweza kuangaliwa kwa umakini ili kubaini uhalali. + +Sifa za maisha zinadai kwamba "jambo zuri hatimaye hufanyika" na linahusu uwezo wa mkataba kuendelea kupitia majimbo tofauti. Mfano wa mali hai ni "ukwasi", ambayo inarejelea uwezo wa mkataba wa kuhamisha salio zake kwa watumiaji kwa ombi. Ikiwa sifa hii itakiukwa, watumiaji hawatakuwa na uwezo wa kutoa rasilimali zilizohifadhiwa kwenye mkataba, kama ilivyotokea na [tukio la mkoba wa Parity](https://www.cnbc.com/2017/11/08/accidental-bug-may-have-frozen-280-worth-of-ether-on-parity-wallet.html). + +### Mainisho ya kiwango cha chini {#low-level-specifications} + +Vipimo vya kiwango cha juu huchukua kama kianzio kielelezo cha hali ya kikomo cha mkataba na kufafanua sifa zinazohitajika za muundo huu. Kinyume chake, vipimo vya kiwango cha chini (pia huitwa "vielelezo vinavyolenga mali") mara nyingi huiga programu (mikataba mahiri) kama mifumo inayojumuisha mkusanyiko wa utendakazi wa hisabati na kuelezea tabia sahihi ya mifumo hiyo. + +Kwa maneno rahisi, mainisho ya kiwango cha chini huchanganua _mfuatilio wa programu_ na kujaribu kufafanua sifa za mkataba-erevu juu ya mfuatilio huu. Ufuatiliaji hurejelea mfuatano wa utendakazi ambao hubadilisha hali ya mkataba mahiri; kwa hivyo, vipimo vya kiwango cha chini husaidia kubainisha mahitaji ya utekelezaji wa ndani wa mkataba. + +Vipimo rasmi vya kiwango cha chini vinaweza kutolewa kama sifa za mtindo wa Hoare au vibadala kwenye njia za utekelezaji. + +### Sifa za mtindo wa Hoare {#hoare-style-properties} + +[Mantiki ya Hoare](https://en.wikipedia.org/wiki/Hoare_logic) hutoa seti ya sheria rasmi za kutoa hoja kuhusu usahihi wa programu, ikiwa ni pamoja na mikataba-erevu. Sifa ya mtindo wa Hoare inawakilishwa na utatu wa Hoare `{P}c{Q}`, ambapo `c` ni programu na `P` na `Q` ni viarifu juu ya hali ya `c` (yaani, programu), vinavyoelezewa rasmi kama _masharti-awali_ na _masharti-baada_, mtawalia. + +Sharti ni kihusishi kinachoeleza masharti yanayohitajika kwa ajili ya utekelezaji sahihi wa chaguo la kukokotoa; watumiaji wanaoingia kwenye mkataba lazima watimize mahitaji haya. Hali ya baada ni kihusishi kinachoelezea hali ambayo chaguo za kukokotoa huweka ikiwa imetekelezwa kwa usahihi; watumiaji wanaweza kutarajia hali hii kuwa kweli baada ya kupiga simu kwenye chaguo la kukokotoa. _Kisichobadilika_ katika mantiki ya Hoare ni kiarifu ambacho huhifadhiwa na utekelezaji wa kitendaji (yaani, hakibadiliki). + +Mainisho ya mtindo wa Hoare yanaweza kuhakikisha ama _usahihi kiasi_ au _usahihi kamili_. Utekelezaji wa kazi ya mkataba ni "sahihi kiasi" ikiwa sharti ni la kweli kabla ya kazi kutekelezwa, na ikiwa utekelezaji utakatizwa, sharti la posta pia ni kweli. Uthibitisho wa usahihi kamili hupatikana ikiwa sharti la awali ni la kweli kabla ya chaguo la kukokotoa kutekelezwa, utekelezaji umehakikishiwa kusitishwa na ukifanya hivyo, sharti la baada litakuwa kweli. + +Kupata uthibitisho wa usahihi kamili ni vigumu kwa kuwa baadhi ya utekelezaji unaweza kuchelewa kabla ya kusitishwa, au kamwe kusitisha kabisa. Hiyo ilisema, swali la ikiwa utekelezaji utakoma ni jambo lisilowezekana kwa kuwa utaratibu wa gharama ya muamala wa Ethereum huzuia minyororo isiyo na kikomo ya programu (utekelezaji hukatiza kwa mafanikio au kumalizika kwa sababu ya kosa la 'nje ya gharama ya muamala'). + +Vipimo vya mikataba mahiri vilivyoundwa kwa kutumia mantiki ya Hoare vitakuwa na masharti, masharti ya baadae na vibadala vilivyobainishwa kwa ajili ya utekelezaji wa majukumu na minyoro katika mkataba. Masharti ya awali mara nyingi hujumuisha uwezekano wa ingizo zenye makosa kwa chaguo za kukokotoa, pamoja na masharti ya baadae yanayoelezea jibu linalotarajiwa kwa ingizo kama hizo (k.m., kutoa ubaguzi maalum). Kwa njia hii sifa za mtindo wa Hoare zinafaa kwa kuhakikisha usahihi wa utekelezaji wa mkataba. + +Miundo mingi ya uthibitishaji rasmi hutumia vipimo vya mtindo wa Hoare ili kuthibitisha usahihi wa kisemantiki wa vitendea kazi. Inawezekana pia kuongeza sifa za mtindo wa Hoare (kama madai) moja kwa moja kwenye msimbo wa mkataba kwa kutumia kauli za `require` na `assert` katika Solidity. + +Kauli za `require` huelezea sharti-awali au kisichobadilika na mara nyingi hutumika kuhalalisha ingizo la mtumiaji, huku `assert` ikinasa sharti-baada linalohitajika kwa usalama. Kwa mfano, udhibiti sahihi wa ufikiaji kwa vitendaji (mfano wa sifa ya usalama) unaweza kupatikana kwa kutumia `require` kama ukaguzi wa sharti-awali juu ya utambulisho wa akaunti inayopiga simu. Vilevile, kisichobadilika kwenye thamani zinazoruhusiwa za vigeu vya hali katika mkataba (k.m., jumla ya idadi ya tokeni zinazosambazwa) kinaweza kulindwa dhidi ya ukiukaji kwa kutumia `assert` ili kuthibitisha hali ya mkataba baada ya utekelezaji wa kitendaji. + +### Sifa za kiwango cha mfuatilio {#trace-level-properties} + +Vipimo vinavyotokana na ufuatiliaji hufafanua miamala inayobadilisha mkataba kati ya mataifa tofauti na uhusiano kati ya shughuli hizi. Kama ilivyoelezwa hapo awali, athari ni mfuatano wa shughuli ambazo hubadilisha hali ya mkataba kwa njia fulani. + +Mbinu hii inategemea muundo wa mikataba mahiri kama mifumo ya mpito ya serikali iliyo na baadhi ya majimbo yaliyobainishwa awali (yaliyofafanuliwa na vigeu vya hali) pamoja na seti ya mabadiliko yaliyobainishwa mapema (yanayofafanuliwa na utendakazi wa mkataba). Zaidi ya hayo, [grafu ya mtiririko wa udhibiti](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/) (CFG), ambayo ni uwakilishi wa kielelezo wa mtiririko wa utekelezaji wa programu, mara nyingi hutumika kuelezea semantiki za uendeshaji wa mkataba. Hapa, kila mfuatilio unawakilishwa kama njia kwenye grafu ya mtiririko wa udhibiti. + +Kimsingi, vipimo vya kiwango cha ufuatiliaji hutumiwa kwasababu kuhusu mifumo ya utekelezaji wa ndani katika mikataba mahiri. Kwa kuunda vipimo vya kiwango cha ufuatiliaji, tunasisitiza njia zinazokubalika za utekelezaji (yaani, mabadiliko ya hali) kwa mkataba mahiri. Kwa kutumia mbinu, kama vile utekelezaji wa kiishara, tunaweza kuthibitisha rasmi kwamba utekelezaji haufuati kamwe njia ambayo haijafafanuliwa katika muundo rasmi. + +Hebu tutumie mfano wa mkataba wa [DAO](/dao/) ambao una baadhi ya vitendaji vinavyopatikana kwa umma ili kuelezea sifa za kiwango cha mfuatilio. Hapa, tunachukulia kwamba mkataba wa DAO unaruhusu watumiaji kutekeleza operesheni zifuatazo: + +- Weka fedha + +- Piga kura kwenye pendekezo baada ya kuweka fedha + +- Dai marejesho kama hawapigi kura kwenye pendekezo + +Mfano wa sifa za kiwango cha mfuatilio unaweza kuwa _"watumiaji ambao hawaweki fedha hawawezi kupiga kura kwenye pendekezo"_ au _"watumiaji ambao hawapigi kura kwenye pendekezo wanapaswa daima kuwa na uwezo wa kudai marejesho"_. Sifa zote mbili zinathibitisha mifuatano inayopendelewa ya utekelezaji (upigaji kura hauwezi kutokea _kabla_ ya kuweka fedha na kudai marejesho hakuwezi kutokea _baada_ ya kupiga kura kwenye pendekezo). + +## Mbinu za uthibitishaji rasmi wa mikataba-erevu {#formal-verification-techniques} + +### Uhakiki wa mfumo {#model-checking} + +Kukagua muundo ni mbinu rasmi ya uthibitishaji ambapo algoriti hukagua muundo rasmi wa mkataba mahiri dhidi ya ubainifu wake. Katika modeli za kukagua mikataba mahiri mara nyingi huwakilishwa kama mifumo ya mipito ya serikali, ilhali sifa kwenye hali za mkataba zinazoruhusiwa hufafanuliwa kwa kutumia mantiki ya muda. + +Uhakiki wa mfumo unahitaji kuunda uwakilishi dhahania wa kihisabati wa mfumo (yaani, mkataba) na kuelezea sifa za mfumo huu kwa kutumia fomula zinazotokana na [mantiki ya mapendekezo](https://www.baeldung.com/cs/propositional-logic). Hii hurahisisha kazi ya algoriti ya kukagua modeli, yaani kuthibitisha kwamba muundo wa hisabati unakidhi fomula fulani ya kimantiki. + +Ukaguaji wa kielelezo katika uthibitishaji rasmi hutumiwa kimsingi kutathmini sifa za muda zinazoelezea tabia ya mkataba baada ya muda. Sifa za muda za mikataba-erevu ni pamoja na _usalama_ na _uhai_, ambazo tulizielezea awali. + +Kwa mfano, sifa ya usalama inayohusiana na udhibiti wa ufikiaji (k.m., _Mmiliki wa mkataba pekee ndiye anayeweza kuita `selfdestruct`_) inaweza kuandikwa katika mantiki rasmi. Kwa mfano, usalama unaohusiana na udhibiti wa sifa (k. m., Mmiliki wa mkataba pekee ndiye anayeweza kupiga simu selfdestruct) inaweza kuandikwa kwa mantiki. + +Kukagua muundo hutumia uchunguzi wa nafasi ya majimbo, unaojumuisha kuunda hali zote zinazowezekana za mkataba mzuri na kujaribu kupata hali zinazoweza kufikiwa ambazo husababisha ukiukaji wa mali. Hata hivyo, hii inaweza kusababisha idadi isiyo na kikomo ya majimbo (inayojulikana kama "tatizo la mlipuko wa serikali"), kwa hivyo wakaguzi wa miundo hutegemea mbinu za uondoaji ili kufanya uchanganuzi mzuri wa kandarasi mahiri iwezekanavyo. + +### Uthibitishaji wa nadharia {#theorem-proving} + +Uthibitishaji wa nadharia ni mbinu ya kisababu kihisabati kuhusu usahihi wa programu, ikijumuisha mikataba mahiri. Inahusisha kubadilisha muundo wa mfumo wa mkataba na vipimo vyake kuwa fomula za hisabati (kauli za mantiki). + +Lengo la uthibitishaji wa nadharia ni kuthibitisha usawa wa kimantiki kati ya kauli hizi. “Usawa wa kimantiki” (pia huitwa “bi-implication ya kimantiki”) ni aina ya uhusiano kati ya kauli mbili ambapo kauli ya kwanza ni ya kweli _ikiwa na tu ikiwa_ kauli ya pili ni ya kweli. + +Uhusiano unaohitajika (usawa wa kimantiki) kati ya taarifa kuhusu muundo wa mkataba na mali yake umeundwa kama taarifa inayoweza kuthibitishwa (inayoitwa nadharia). Kwa kutumia mfumo rasmi wa makisio, kithibitishi cha nadharia cha kiotomatiki kinaweza kuthibitisha uhalali wa nadharia hiyo. Kwa maneno mengine, mthibitishaji wa nadharia inaweza kuthibitisha kwa uthabiti muundo wa mkataba mahiri unalingana na vipimo vyake. + +Wakati modeli za kukagua kandarasi kama mifumo ya mpito yenye hali zenye ukomo, uthibitisho wa nadharia unaweza kushughulikia uchanganuzi wa mifumo ya serikali isiyo na kikomo. Hata hivyo, hii inamaanisha kuwa mtaalamu wa nadharia ya kiotomatiki hawezi kujua kila wakati ikiwa tatizo la mantiki "linaweza kuamuliwa" au la. + +Kwa hiyo, msaada wa kibinadamu mara nyingi unahitajika ili kumuongoza mthibitishaji wa nadharia katika kupata uthibitisho wa usahihi. Utumiaji wa juhudi za kibinadamu katika uthibitishaji wa nadharia hufanya iwe ghali zaidi kutumia kuliko ukaguzi wa mfano, ambao umejiendesha kikamilifu. + +### Utekelezaji wa kiishara {#symbolic-execution} + +Utekelezaji wa kiishara ni mbinu ya kuchanganua mkataba-erevu kwa kutekeleza vitendaji kwa kutumia _thamani za kiishara_ (k.m., `x > 5`) badala ya _thamani halisi_ (k.m., `x == 5`). Kama mbinu rasmi ya uthibitishaji, utekelezaji wa kiishara hutumiwa kusababu rasmi kuhusu kufuatilia sifa za kiwango katika msimbo wa mkataba. + +Utekelezaji wa kiishara unawakilisha mfuatilio wa utekelezaji kama fomula ya kihisabati juu ya thamani za ingizo za kiishara, vinginevyo huitwa _kiarifu cha njia_. [Kitatuzi cha SMT](https://en.wikipedia.org/wiki/Satisfiability_modulo_theories) hutumika kuangalia kama kiarifu cha njia "kinatosheleza" (yaani, kuna thamani inayoweza kutosheleza fomula). Iwapo njia iliyo katika mazingira magumu inatosheleza, kisuluhishi cha SMT kitatoa thamani madhubuti ambayo itachochea utekelezaji wa waendeshaji kuelekea njia hiyo. + +Tuseme kitendaji cha mkataba-erevu kinachukua thamani ya `uint` (`x`) kama ingizo na hurejea nyuma wakati `x` ni kubwa kuliko `5` na pia ndogo kuliko `10`. Kupata thamani ya `x` inayosababisha hitilafu kwa kutumia utaratibu wa kawaida wa majaribio kungehitaji kupitia visa vingi vya majaribio (au zaidi) bila uhakikisho wa kupata ingizo linalosababisha hitilafu. + +Kinyume chake, zana ya utekelezaji wa kiishara ingetekeleza kitendaji ikiwa na thamani ya kiishara: `X > 5 ∧ X < 10` (yaani, `x` ni kubwa kuliko 5 NA `x` ni ndogo kuliko 10). Kiarifu cha njia kinachohusiana `x = X > 5 ∧ X < 10` kingepelekwa kwa kitatuzi cha SMT ili kitatuliwe. Ikiwa thamani fulani itatosheleza fomula `x = X > 5 ∧ X < 10`, kitatuzi cha SMT kitaikokotoa—kwa mfano, kitatuzi kinaweza kutoa `7` kama thamani ya `x`. + +Kwa sababu utekelezaji wa kiishara unategemea ingizo la programu, na seti ya ingizo ili kuchunguza hali zote zinazoweza kufikiwa kuna uwezekano usio na kikomo, bado ni aina ya majaribio. Hata hivyo, kama inavyoonyeshwa katika mfano, utekelezaji wa kiishara ni mzuri zaidi kuliko majaribio ya mara kwa mara ya kutafuta michango ambayo husababisha ukiukaji wa mali. + +Zaidi ya hayo, utekelezaji wa kiishara hutoa chanya chache za uwongo kuliko mbinu zingine zinazotegemea mali (k.m., fuzzing) ambazo hutokeza maingizo kwa chaguo maalum kwa nasibu. Ikiwa hali ya kosa imeanzishwa wakati wa utekelezaji wa ishara, basi inawezekana kutoa thamani halisi ambayo inasababisha kosa na kuzalisha suala hilo tena. + +Utekelezaji wa kiishara pia unaweza kutoa kiwango fulani cha uthibitisho wa kihisabati wa usahihi. Fikiria mfano ufuatao wa kitendaji cha mkataba chenye ulinzi wa 'overflow': + +``` +function safe_add(uint x, uint y) returns(uint z){ + + z = x + y; + require(z>=x); + require(z>=y); + + return z; +} +``` + +Mfuatilio wa utekelezaji unaosababisha integer overflow utahitaji kutosheleza fomula: `z = x + y AND (z >= x) AND (z >= y) AND (z < x OR z < y)` Fomula kama hiyo haiwezekani kutatuliwa, kwa hivyo inatumika kama uthibitisho wa kihisabati kwamba kitendaji cha `safe_add` hakipati overflow kamwe. + +### Kwa nini utumie uthibitishaji rasmi kwa mikataba-erevu? {#benefits-of-formal-verification} + +#### Haja ya uaminifu {#need-for-reliability} + +Uthibitishaji rasmi hutumiwa kutathmini usahihi wa mifumo muhimu zaidi ya usalama ambayo kutofaulu kunaweza kusababisha matokeo mabaya, kama vile kifo, majeraha au uharibifu wa kifedha. Mikataba-erevu ni programu za thamani ya juu zinazodhibiti kiasi kikubwa cha thamani, na makosa rahisi katika usanifu yanaweza kusababisha [hasara isiyoweza kurejeshwa kwa watumiaji](https://www.freecodecamp.org/news/a-hacker-stole-31m-of-ether-how-it-happened-and-what-it-means-for-ethereum-9e5dc29e33ce/amp/). Kuthibitisha rasmi mkataba kabla ya kupelekwa, hata hivyo, kunaweza kuongeza hakikisho kwamba itafanya kazi inavyotarajiwa mara tu itakapoendeshwa kwenye kiambajengo. + +Kutegemewa ni ubora unaohitajika sana katika mkataba wowote mahiri, hasa kwa sababu msimbo unaotumwa kwenye Mashine ya Mtandaoni ya Ethereum (EVM) kwa kawaida hauwezi kubadilika. Kwa kuwa maboresho ya baada ya uzinduzi hayapatikani kwa urahisi, hitaji la kuhakikisha utegemezi wa mikataba hufanya uthibitishaji rasmi uwe muhimu. Uthibitishaji rasmi unaweza kugundua masuala magumu, kama vile utiririshaji wa kutosha na kufurika, kuingia tena, na uboreshaji duni wa gharama ya muamala, ambayo inaweza kuwakumba wakaguzi na wajaribu waliopita. + +#### Thibitisha usahihi wa kiutendaji {#prove-functional-correctness} + +Majaribio ya programu ndiyo njia ya kawaida zaidi ya kuthibitisha kwamba mkataba mahiri unakidhi baadhi ya mahitaji. Hii inahusisha kutekeleza mkataba na sampuli ya data inayotarajiwa kushughulikia na kuchanganua tabia yake. Iwapo mkataba utarejesha matokeo yanayotarajiwa kwa data ya sampuli, basi wasanidi programu wana uthibitisho halisi wa usahihi wake. + +Hata hivyo, mbinu hii haiwezi kuthibitisha utekelezaji sahihi kwa thamani za pembejeo ambazo si sehemu ya sampuli. Kwa hivyo, kupima mkataba kunaweza kusaidia kugundua hitilafu (yaani, ikiwa baadhi ya njia za msimbo zitashindwa kurudisha matokeo yanayotarajiwa wakati wa utekelezaji), lakini **haiwezi kuthibitisha kwa ukamilifu kutokuwepo kwa hitilafu**. + +Kinyume chake, uthibitishaji rasmi unaweza kuthibitisha rasmi kwamba mkataba-erevu unakidhi mahitaji kwa anuwai isiyo na kikomo ya utekelezaji _bila_ kuendesha mkataba hata kidogo. Hili linahitaji kuunda ubainifu rasmi ambao unafafanua kwa usahihi tabia sahihi za mkataba na kuunda muundo rasmi (wa hisabati) wa mfumo wa mkataba. Kisha tunaweza kufuata utaratibu rasmi wa uthibitisho ili kuangalia uthabiti kati ya muundo wa mkataba na maelezo yake. + +Kwa uthibitishaji rasmi, swali la kuthibitisha ikiwa mantiki ya biashara ya mkataba inakidhi mahitaji ni pendekezo la hisabati ambalo linaweza kuthibitishwa au kukataliwa. Kwa kuthibitisha pendekezo rasmi, tunaweza kuthibitisha idadi isiyo na kikomo ya kesi za majaribio kwa idadi isiyo na kikomo ya hatua. Kwa namna hii uthibitishaji rasmi una matarajio bora zaidi ya kuthibitisha kuwa mkataba ni sahihi kiutendaji kuhusiana na vipimo. + +#### Malengo bora ya uthibitishaji {#ideal-verification-targets} + +Lengo la uthibitishaji linaelezea mfumo utakaothibitishwa rasmi. Uthibitishaji rasmi hutumiwa vyema katika "mifumo iliyopachikwa" (vipande vidogo, rahisi vya programu ambavyo vinaunda sehemu ya mfumo mkubwa). Pia ni bora kwa vikoa maalum ambavyo vina sheria chache, kwa kuwa hii hurahisisha kurekebisha zana za kuthibitisha sifa mahususi za kikoa. + +Mikataba-erevu—angalau, kwa kiasi fulani—inatimiza mahitaji yote mawili. Kwa mfano, ukubwa mdogo wa mikataba ya Ethereum huifanya iweze kufanyiwa uthibitishaji rasmi. Pia ni bora kwa vikosa maalum vina sheria chache, kwa kuwa hii hurahisisha kurekebisha zana za kuthibitisha sifa mahususi za kikoa. + +### Mzunguko wa uundaji wa haraka {#faster-development-cycle} + +Mbinu rasmi za uthibitishaji, kama vile ukaguzi wa kielelezo na utekelezaji wa kiishara, kwa ujumla ni bora zaidi kuliko uchanganuzi wa kawaida wa msimbo mahiri wa mkataba (unaotekelezwa wakati wa majaribio au ukaguzi). Hii ni kwa sababu uthibitishaji rasmi unategemea thamani za kiishara kupima madai ("vipi ikiwa mtumiaji atajaribu kutoa ether _n_?") tofauti na upimaji ambao hutumia thamani halisi ("vipi ikiwa mtumiaji atajaribu kutoa ether 5?"). + +Vigezo vya ishara vinaweza kufunika aina nyingi za thamani halisi, kwa hivyo mbinu rasmi za uthibitishaji huahidi ufunikaji zaidi wa msimbo katika muda mfupi zaidi. Inapotumiwa ipasavyo, uthibitishaji rasmi unaweza kuharakisha mzunguko wa maendeleo kwa wasanidi programu. + +Uthibitishaji rasmi pia huboresha mchakato wa kuunda programu zilizotawanywa (dapps) kwa kupunguza hitilafu za muundo wa gharama kubwa. Kuboresha mikataba (inapowezekana) ili kurekebisha udhaifu kunahitaji uandishi wa kina wa misingi ya kanuni na juhudi zaidi zinazotumika katika utayarishaji. Uthibitishaji rasmi unaweza kugundua makosa mengi katika utekelezaji wa mkataba ambao unaweza kuwaacha wakaguzi na wakaguzi wa zamani na kutoa fursa ya kutosha ya kurekebisha masuala hayo kabla ya kupeleka mkataba. + +## Hasara za uthibitishaji rasmi {#drawbacks-of-formal-verification} + +### Gharama ya kazi ya mikono {#cost-of-manual-labor} + +Uthibitishaji rasmi, hasa uthibitishaji wa nusu kiotomatiki ambapo binadamu humwongoza mthibitishaji kupata uthibitisho wa usahihi, huhitaji kazi kubwa ya mikono. Zaidi ya hayo, kuunda ainisho rasmi ni shughuli ngumu inayohitaji kiwango cha juu cha ujuzi. + +Mambo haya (juhudi na ustadi) hufanya uthibitishaji rasmi kuwa wa mahitaji zaidi na ghali ikilinganishwa na mbinu za kawaida za kutathmini usahihi katika kandarasi, kama vile majaribio na ukaguzi. Hata hivyo, kulipa gharama ya ukaguzi kamili wa uthibitishaji ni vitendo, kwa kuzingatia gharama ya makosa katika utekelezaji wa mikataba mahiri. + +### Hasi za uongo {#false-negatives} + +Uthibitishaji rasmi unaweza tu kuangalia ikiwa utekelezaji wa mkataba mahiri unalingana na vipimo rasmi. Kwa hivyo, ni muhimu kuhakikisha kuwa vipimo vinaelezea vizuri tabia zinazotarajiwa za mkataba mzuri. + +Ikiwa maelezo hayajaandikwa vyema, ukiukaji wa mali—ambao unaelekeza kwenye unyongaji hatari—hauwezi kutambuliwa na ukaguzi rasmi wa uthibitishaji. Katika kesi hii, msanidi programu anaweza kudhani kimakosa kuwa mkataba hauna hitilafu. + +### Masuala ya utendaji {#performance-issues} + +Uthibitishaji rasmi hukumbana na masuala kadhaa ya utendaji. Kwa mfano, matatizo ya hali na njia ya mlipuko yanayotokea wakati wa kukagua kielelezo na ukaguzi wa kiishara, kwa mtiririko huo unaweza kuathiri taratibu za uthibitishaji. Pia, zana rasmi za uthibitishaji mara nyingi hutumia vitatuzi vya SMT na vitatuzi vingine vya vikwazo katika safu yao ya msingi, na vitatuzi hivi hutegemea taratibu za kimahesabu. + +Pia, si mara zote inawezekana kwa wathibitishaji wa programu kubaini kama sifa (inayoelezewa kama fomula ya kimantiki) inaweza kutoshelezwa au la ("[tatizo la uamuzi](https://en.wikipedia.org/wiki/Decision_problem)") kwa sababu programu inaweza isikome kamwe. Kwa hivyo, inaweza kuwa vigumu kuthibitisha baadhi ya sifa za mkataba hata kama umebainishwa vizuri. + +## Zana za uthibitishaji rasmi za mikataba-erevu ya Ethereum {#formal-verification-tools} + +### Lugha za uainishaji za kuunda mainisho rasmi {#specification-languages} + +**Act**: __Act inaruhusu uainishaji wa masasisho ya hifadhi, masharti-awali/baada na visivyobadilika vya mkataba. Seti yake ya zana pia ina sehemu za nyuma za uthibitisho zinazoweza kuthibitisha sifa nyingi kupitia Coq, vitatuzi vya SMT, au hevm.__ + +- [GitHub](https://github.com/ethereum/act) +- [Nyaraka](https://github.com/argotorg/act) + +**Scribble** - __Scribble hubadilisha ufafanuzi wa msimbo katika lugha ya uainishaji ya Scribble kuwa madai halisi yanayokagua uainishaji.__ + +- [Nyaraka](https://docs.scribble.codes/) + +**Dafny** - __Dafny ni lugha ya upangaji tayari kwa uthibitishaji ambayo inategemea ufafanuzi wa kiwango cha juu ili kutoa hoja na kuthibitisha usahihi wa msimbo.__ + +- [GitHub](https://github.com/dafny-lang/dafny) + +### Wathibitishaji wa programu za kuangalia usahihi {#program-verifiers} + +**Certora Prover** - _Certora Prover ni zana ya kiotomatiki ya uthibitishaji rasmi kwa ajili ya kuangalia usahihi wa msimbo katika mikataba-erevu. Vipimo vimeandikwa katika CVL (Lugha ya Uthibitishaji wa Certora), na ukiukaji wa mali umegunduliwa kwa kutumia mchanganyiko wa uchanganuzi tuli na utatuzi wa vikwazo._ + +- [Tovuti](https://www.certora.com/) +- [Nyaraka](https://docs.certora.com/en/latest/index.html) + +**Solidity SMTChecker** - __SMTChecker ya Solidity ni kikagua mfumo kilichojengewa ndani kinachotegemea SMT (Satisfiability Modulo Theories) na utatuzi wa Horn. Inathibitisha ikiwa msimbo wa chanzo wa mkataba unalingana na vipimo wakati wa utungaji na hukagua kwa takwimu kwa ukiukaji wa sifa za usalama.__ + +- [GitHub](https://github.com/ethereum/solidity) + +**solc-verify** - __solc-verify ni toleo lililopanuliwa la mkusanyaji wa Solidity ambalo linaweza kufanya uthibitishaji rasmi wa kiotomatiki kwenye msimbo wa Solidity kwa kutumia ufafanuzi na uthibitishaji wa programu wa moduli.__ + +- [GitHub](https://github.com/SRI-CSL/solidity) + +**KEVM** - __KEVM ni semantiki rasmi ya Mashine ya Mtandaoni ya Ethereum (EVM) iliyoandikwa katika mfumo wa K. KEVM inaweza kutekelezwa na inaweza kuthibitisha madai fulani yanayohusiana na sifa kwa kutumia mantiki ya ufikivu.__ + +- [GitHub](https://github.com/runtimeverification/evm-semantics) +- [Nyaraka](https://jellopaper.org/) + +### Mifumo ya kimantiki ya uthibitishaji wa nadharia {#theorem-provers} + +**Isabelle** - _Isabelle/HOL ni msaidizi wa uthibitisho unaoruhusu fomula za kihisabati kuelezwa katika lugha rasmi na hutoa zana za kuthibitisha fomula hizo. Maombi makuu ni kurasimisha uthibitisho wa hisabati na hasa uthibitishaji rasmi, unaojumuisha kuthibitisha usahihi wa vigezo vya kompyuta au programu na kuthibitisha sifa za lugha na itifaki za kompyuta._ + +- [GitHub](https://github.com/isabelle-prover) +- [Nyaraka](https://isabelle.in.tum.de/documentation.html) + +**Rocq** - _Rocq ni kithibitishi cha nadharia shirikishi ambacho hukuruhusu kufafanua programu kwa kutumia nadharia na kutoa uthibitisho wa usahihi uliokaguliwa na mashine._ + +- [GitHub](https://github.com/rocq-prover/rocq) +- [Nyaraka](https://rocq-prover.org/docs) + +### Zana zinazotegemea utekelezaji wa kiishara za kugundua ruwaza zilizo hatarini katika mikataba-erevu {#symbolic-execution-tools} + +**Manticore** - __Zana ya kuchanganua bytecode ya EVM inayotegemea utekelezaji wa kiishara.__ + +- [GitHub](https://github.com/trailofbits/manticore) +- [Nyaraka](https://github.com/trailofbits/manticore/wiki) + +**hevm** - __hevm ni injini ya utekelezaji wa kiishara na kikagua usawa cha bytecode ya EVM.__ + +- [GitHub](https://github.com/dapphub/dapptools/tree/master/src/hevm) + +**Mythril** - _Zana ya utekelezaji wa kiishara ya kugundua udhaifu katika mikataba-erevu ya Ethereum_ + +- [GitHub](https://github.com/ConsenSys/mythril-classic) +- [Nyaraka](https://mythril-classic.readthedocs.io/en/develop/) + +## Masomo zaidi {#further-reading} + +- [Jinsi Uthibitishaji Rasmi wa Mikataba-erevu Unavyofanya Kazi](https://runtimeverification.com/blog/how-formal-verification-of-smart-contracts-works/) +- [Jinsi Uthibitishaji Rasmi Unavyoweza Kuhakikisha Mikataba-erevu Isiyo na Kasoro](https://media.consensys.net/how-formal-verification-can-ensure-flawless-smart-contracts-cbda8ad99bd1) +- [Muhtasari wa Miradi ya Uthibitishaji Rasmi katika Mfumo Ikolojia wa Ethereum](https://github.com/leonardoalt/ethereum_formal_verification_overview) +- [Uthibitishaji Rasmi wa Mwanzo hadi Mwisho wa Mkataba-erevu wa Amana wa Ethereum 2.0](https://runtimeverification.com/blog/end-to-end-formal-verification-of-ethereum-2-0-deposit-smart-contract/) +- [Kuthibitisha Rasmi Mkataba-erevu Maarufu Zaidi Duniani](https://www.zellic.io/blog/formal-verification-weth) +- [SMTChecker na Uthibitishaji Rasmi](https://docs.soliditylang.org/en/v0.8.15/smtchecker.html) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/index.md b/public/content/translations/sw/developers/docs/smart-contracts/index.md new file mode 100644 index 00000000000..5e33d0a714a --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/index.md @@ -0,0 +1,112 @@ +--- +title: "''Utangulizi wa maktaba ya akili.''" +description: Muhtasari wa mikataba-erevu, unaozingatia sifa na mapungufu yake ya kipekee. +lang: sw +--- + +## Mkataba-erevu ni nini? {#what-is-a-smart-contract} + +"Mkataba-erevu" ni programu tu inayoendeshwa kwenye mnyororo wa bloku wa Ethereum. Ni mkusanyiko wa msimbo (kazi zake) na data (hali yake) unaokaa kwenye anwani maalum kwenye mnyororo wa bloku wa Ethereum. + +Mikataba-erevu ni aina ya [akaunti ya Ethereum](/developers/docs/accounts/). Hii inamaanisha zina salio na zinaweza kulengwa na miamala. Hata hivyo, hazidhibitiwi na mtumiaji, badala yake hupelekwa kwenye mtandao na huendeshwa kama zilivyopangwa. Akaunti za watumiaji zinaweza kisha kuingiliana na mkataba-erevu kwa kuwasilisha miamala inayotekeleza kazi iliyobainishwa kwenye mkataba-erevu. Mikataba-erevu inaweza kufafanua sheria, kama mkataba wa kawaida, na kuzitekeleza kiotomatiki kupitia msimbo. Mikataba-erevu haiwezi kufutwa kwa chaguo-msingi, na mwingiliano nayo hauwezi kubatilishwa. + +## Mahitaji ya awali {#prerequisites} + +Ikiwa unaanza sasa hivi au unatafuta utangulizi usio wa kiufundi sana, tunapendekeza [utangulizi wetu wa mikataba-erevu](/smart-contracts/). + +Hakikisha umesoma kuhusu [akaunti](/developers/docs/accounts/), [miamala](/developers/docs/transactions/) na [mashine halisi ya Ethereum](/developers/docs/evm/) kabla ya kuingia katika ulimwengu wa mikataba-erevu. + +## Mashine ya kuuza ya kidijitali {#a-digital-vending-machine} + +Labda sitiari bora kwa mkataba-erevu ni mashine ya kuuza, kama ilivyoelezwa na [Nick Szabo](https://unenumerated.blogspot.com/). Ukiweka pembejeo sahihi, matokeo fulani yamehakikishwa. + +Ili kupata vitafunio kutoka kwa mashine ya kuuza: + +``` +pesa + uteuzi wa vitafunio = vitafunio vimetolewa +``` + +Mantiki hii imepangwa ndani ya mashine ya kuuza. + +Mkataba-erevu, kama mashine ya kuuza, una mantiki iliyopangwa ndani yake. Huu hapa ni mfano rahisi wa jinsi mashine hii ya kuuza ingeonekana kama ingekuwa mkataba-erevu ulioandikwa kwa Solidity: + +```solidity +pragma solidity 0.8.7; + +contract VendingMachine { + + // Tangaza vigezo vya hali ya mkataba + address public owner; + mapping (address => uint) public cupcakeBalances; + + // Wakati mkataba wa 'VendingMachine' unaposambazwa: + // 1. weka anwani ya usambazaji kama mmiliki wa mkataba + // 2. weka salio la cupcake la mkataba-erevu uliosambazwa kuwa 100 + constructor() { + owner = msg.sender; + cupcakeBalances[address(this)] = 100; + } + + // Ruhusu mmiliki aongeze salio la cupcake la mkataba-erevu + function refill(uint amount) public { + require(msg.sender == owner, "Ni mmiliki pekee anayeweza kujaza tena."); + cupcakeBalances[address(this)] += amount; + } + + // Ruhusu mtu yeyote anunue cupcakes + function purchase(uint amount) public payable { + require(msg.value >= amount * 1 ether, "Lazima ulipe angalau ETH 1 kwa kila cupcake"); + require(cupcakeBalances[address(this)] >= amount, "Hakuna cupcakes za kutosha kwenye hifadhi ili kukamilisha ununuzi huu"); + cupcakeBalances[address(this)] -= amount; + cupcakeBalances[msg.sender] += amount; + } +} +``` + +Kama vile mashine ya kuuza inavyoondoa hitaji la mfanyakazi muuzaji, mikataba-erevu inaweza kuchukua nafasi ya wasuluhishi katika tasnia nyingi. + +## Bila ruhusa {#permissionless} + +Mtu yeyote anaweza kuandika mkataba-erevu na kuusambaza kwenye mtandao. Unahitaji tu kujifunza jinsi ya kuandika msimbo katika [lugha ya mkataba-erevu](/developers/docs/smart-contracts/languages/), na kuwa na ETH ya kutosha kusambaza mkataba wako. Kusambaza mkataba-erevu kimsingi ni muamala, kwa hivyo unahitaji kulipa [gesi](/developers/docs/gas/) kwa njia ile ile unayohitaji kulipa gesi kwa uhamisho rahisi wa ETH. Hata hivyo, gharama za gesi kwa usambazaji wa mkataba ni kubwa zaidi. + +Ethereum ina lugha zinazofaa kwa wasanidi programu za kuandikia mikataba-erevu: + +- Uimara +- Vyper + +[Zaidi kuhusu lugha](/developers/docs/smart-contracts/languages/) + +Hata hivyo, ni lazima zikusanywe kabla ya kusambazwa ili mashine halisi ya Ethereum iweze kutafsiri na kuhifadhi mkataba. [Zaidi kuhusu ukusanyaji](/developers/docs/smart-contracts/compiling/) + +## Uwezo wa kuunganisha {#composability} + +Mikataba-erevu ni ya umma kwenye Ethereum na inaweza kufikiriwa kama API zilizo wazi. Hii inamaanisha unaweza kuita mikataba-erevu mingine ndani ya mkataba wako mwenyewe ili kupanua pakubwa kile kinachowezekana. Mikataba inaweza hata kusambaza mikataba mingine. + +Jifunze zaidi kuhusu [uwezo wa kuunganisha wa mikataba-erevu](/developers/docs/smart-contracts/composability/). + +## Vizuizi {#limitations} + +Mikataba-erevu peke yake haiwezi kupata taarifa kuhusu matukio ya "ulimwengu halisi" kwa sababu haiwezi kupata data kutoka kwa vyanzo vya nje ya mnyororo. Hii inamaanisha haziwezi kujibu matukio katika ulimwengu halisi. Hii ni kwa makusudi. Kutegemea taarifa za nje kunaweza kuhatarisha makubaliano, ambayo ni muhimu kwa usalama na ugatuaji. + +Hata hivyo, ni muhimu kwa mifumo ya mnyororo wa bloku kuweza kutumia data ya nje ya mnyororo. Suluhisho ni [oracles](/developers/docs/oracles/) ambazo ni zana zinazokusanya data ya nje ya mnyororo na kuifanya ipatikane kwa mikataba-erevu. + +Kikomo kingine cha mikataba-erevu ni saizi ya juu ya mkataba. Mkataba-erevu unaweza kuwa na upeo wa 24KB la sivyo utaishiwa na gesi. Hili linaweza kuepukwa kwa kutumia [The Diamond Pattern](https://eips.ethereum.org/EIPS/eip-2535). + +## Mikataba ya Multisig {#multisig} + +Mikataba ya Multisig (saini-nyingi) ni akaunti za mkataba-erevu zinazohitaji saini nyingi halali ili kutekeleza muamala. Hii ni muhimu sana kwa kuepuka sehemu moja ya kutofaulu kwa mikataba inayoshikilia kiasi kikubwa cha ether au tokeni zingine. Multisigs pia hugawanya jukumu la utekelezaji wa mkataba na usimamizi wa ufunguo kati ya pande nyingi na kuzuia upotezaji wa ufunguo mmoja binafsi unaosababisha upotezaji usioweza kurekebishwa wa fedha. Kwa sababu hizi, mikataba ya multisig inaweza kutumika kwa utawala rahisi wa DAO. Multisigs huhitaji saini N kati ya M saini zinazokubalika (ambapo N ≤ M, na M > 1) ili kutekeleza. `N = 3, M = 5` na `N = 4, M = 7` hutumika sana. Multisig ya 4/7 inahitaji saini nne kati ya saini saba halali zinazowezekana. Hii inamaanisha fedha bado zinaweza kupatikana hata kama saini tatu zimepotea. Katika kesi hii, inamaanisha pia kwamba wamiliki wengi wa funguo lazima wakubaliane na kusaini ili mkataba utekelezwe. + +## Rasilimali za mkataba-erevu {#smart-contract-resources} + +**Mikataba ya OpenZeppelin -** **_Maktaba ya uundaji salama wa mikataba-erevu._** + +- [openzeppelin.com/contracts/](https://openzeppelin.com/contracts/) +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-contracts) +- [Jukwaa la Jumuiya](https://forum.openzeppelin.com/c/general/16) + +## Masomo zaidi {#further-reading} + +- [Coinbase: Mkataba-erevu ni nini?](https://www.coinbase.com/learn/crypto-basics/what-is-a-smart-contract) +- [Chainlink: Mkataba-erevu ni nini?](https://chain.link/education/smart-contracts) +- [Video: Imefafanuliwa Kirahisi - Mikataba-Erevu](https://youtu.be/ZE2HxTmxfrI) +- [Cyfrin Updraft: Jukwaa la kujifunza na kukagua Web3](https://updraft.cyfrin.io) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md b/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md new file mode 100644 index 00000000000..0cfdddbdfa1 --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md @@ -0,0 +1,325 @@ +--- +title: Lugha za mikataba mahiri +description: Muhtasari na ulinganisho wa lugha mbili kuu za mikataba-erevu – Solidity na Vyper. +lang: sw +--- + +Kipengele kikuu kuhusu Ethereum ni kwamba mikataba-erevu inaweza kupangwa kwa kutumia lugha ambazo ni rahisi kwa wasanidi programu. Ikiwa una uzoefu na Python au [lugha yoyote ya mabano](https://wikipedia.org/wiki/List_of_programming_languages_by_type#Curly-bracket_languages), unaweza kupata lugha yenye sintaksia unayoifahamu. + +Lugha mbili zinazotumika zaidi na kudumishwa ni: + +- Uimara +- Vyper + +Remix IDE hutoa mazingira kamili ya uendelezaji kwa ajili ya kuunda na kujaribu mikataba katika Solidity na Vyper. [Jaribu Remix IDE ya kwenye kivinjari](https://remix.ethereum.org) ili kuanza kuandika msimbo. + +Wasanidi programu wenye uzoefu zaidi wanaweza pia kutaka kutumia Yul, lugha ya kati ya [Mashine ya mtandaoni ya Ethereum](/developers/docs/evm/), au Yul+, kiendelezi cha Yul. + +Ikiwa una hamu ya kujua na unapenda kusaidia kujaribu lugha mpya ambazo bado zinatengenezwa sana, unaweza kujaribu Fe, lugha mpya ya mkataba-erevu ambayo bado iko katika hatua za mwanzo. + +## Mahitaji ya awali {#prerequisites} + +Ujuzi wa awali wa lugha za programu, hasa JavaScript au Python, unaweza kukusaidia kuelewa tofauti katika lugha za mkataba-erevu. Pia tunapendekeza uelewe mikataba-erevu kama dhana kabla ya kuzama sana katika ulinganisho wa lugha. [Utangulizi wa mikataba-erevu](/developers/docs/smart-contracts/). + +## Solidity {#solidity} + +- Lugha ya kiwango cha juu, inayolenga vitu kwa ajili ya kutekeleza mikataba-erevu. +- Lugha ya mabano ambayo imeathiriwa pakubwa na C++. +- Aina tuli (aina ya kigezo hujulikana wakati wa kuandaliwa). +- Inasaidia: + - Urithi (unaweza kupanua mikataba mingine). + - Maktaba (unaweza kuunda msimbo unaoweza kutumika tena ambao unaweza kuuita kutoka kwa mikataba tofauti - kama vile vitendaji tuli katika darasa tuli katika lugha zingine za programu zinazolenga vitu). + - Aina changamano zilizofafanuliwa na mtumiaji. + +### Viungo muhimu {#important-links} + +- [Nyaraka](https://docs.soliditylang.org/en/latest/) +- [Tovuti ya Lugha ya Solidity](https://soliditylang.org/) +- [Solidity kwa Mfano](https://docs.soliditylang.org/en/latest/solidity-by-example.html) +- [GitHub](https://github.com/ethereum/solidity/) +- [Chumba cha Gumzo cha Solidity Gitter](https://gitter.im/ethereum/solidity) kimeunganishwa na [Chumba cha Gumzo cha Solidity Matrix](https://matrix.to/#/#ethereum_solidity:gitter.im) +- [Karatasi ya Kudokezea](https://reference.auditless.com/cheatsheet) +- [Blogu ya Solidity](https://blog.soliditylang.org/) +- [Twitter ya Solidity](https://twitter.com/solidity_lang) + +### Mfano wa mkataba {#example-contract} + +```solidity +// SPDX-Kitambulisho-Leseni: GPL-3.0 +pragma solidity >= 0.7.0; + +contract Coin { + // Neno kuu "public" hufanya vigezo + // kupatikana kutoka kwa mikataba mingine + address public minter; + mapping (address => uint) public balances; + + // Matukio huruhusu wateja kujibu mabadiliko maalum + // ya mkataba unaotangaza + event Sent(address from, address to, uint amount); + + // Msimbo wa kiunda huendeshwa tu wakati mkataba + // unapoundwa + constructor() { + minter = msg.sender; + } + + // Hutuma kiasi cha sarafu mpya zilizoundwa kwa anwani + // Inaweza kuitwa tu na muundaji wa mkataba + function mint(address receiver, uint amount) public { + require(msg.sender == minter); + require(amount < 1e60); + balances[receiver] += amount; + } + + // Hutuma kiasi cha sarafu zilizopo + // kutoka kwa mpigaji simu yeyote hadi anwani + function send(address receiver, uint amount) public { + require(amount <= balances[msg.sender], "Salio halitoshi."); + balances[msg.sender] -= amount; + balances[receiver] += amount; + emit Sent(msg.sender, receiver, amount); + } +} +``` + +Mfano huu unapaswa kukupa hisia ya jinsi sintaksia ya mkataba wa Solidity ilivyo. Kwa maelezo ya kina zaidi ya vitendaji na vigezo, [angalia nyaraka](https://docs.soliditylang.org/en/latest/contracts.html). + +## Vyper {#vyper} + +- Lugha ya programu ya Pythonic +- Uchapaji imara +- Msimbo mdogo na unaoeleweka wa mkusanyaji +- Uundaji bora wa bytecode +- Kwa makusudi ina vipengele vichache kuliko Solidity kwa lengo la kufanya mikataba iwe salama zaidi na rahisi kukagua. Vyper haiungi mkono: + - Virekebishaji + - Urithi + - Mkusanyiko wa ndani + - Upakiaji mwingi wa kitendaji + - Upakiaji mwingi wa kiendeshaji + - Wito unaojirudia + - Mizunguko ya urefu usio na kikomo + - Nukta zisizobadilika za mfumo wa namba mbili + +Kwa maelezo zaidi, [soma mantiki ya Vyper](https://vyper.readthedocs.io/en/latest/index.html). + +### Viungo muhimu {#important-links-1} + +- [Nyaraka](https://vyper.readthedocs.io) +- [Vyper kwa Mfano](https://vyper.readthedocs.io/en/latest/vyper-by-example.html) +- [Vyper Zaidi kwa Mfano](https://vyper-by-example.org/) +- [GitHub](https://github.com/vyperlang/vyper) +- [Gumzo la jumuiya ya Vyper Discord](https://discord.gg/SdvKC79cJk) +- [Karatasi ya Kudokezea](https://reference.auditless.com/cheatsheet) +- [Mifumo na zana za ukuzaji wa mkataba-erevu kwa Vyper](/developers/docs/programming-languages/python/) +- [VyperPunk - jifunze kulinda na kudukua mikataba-erevu ya Vyper](https://github.com/SupremacyTeam/VyperPunk) +- [Kitovu cha Vyper kwa ajili ya maendeleo](https://github.com/zcor/vyper-dev) +- [Mifano bora zaidi ya mikataba-erevu ya Vyper](https://github.com/pynchmeister/vyper-greatest-hits/tree/main/contracts) +- [Rasilimali zilizoratibiwa za Awesome Vyper](https://github.com/spadebuilders/awesome-vyper) + +### Mfano {#example} + +```python +# Mnada Wazi + +# Vigezo vya mnada +# Mpokeaji hupokea pesa kutoka kwa mzabuni wa juu zaidi +beneficiary: public(address) +auctionStart: public(uint256) +auctionEnd: public(uint256) + +# Hali ya sasa ya mnada +highestBidder: public(address) +highestBid: public(uint256) + +# Imewekwa kuwa kweli mwishoni, inazuia mabadiliko yoyote +ended: public(bool) + +# Fuatilia zabuni zilizorejeshwa ili tuweze kufuata mtindo wa kutoa pesa +pendingReturns: public(HashMap[address, uint256]) + +# Unda mnada rahisi na `_bidding_time` +# muda wa sekunde za zabuni kwa niaba ya +# anwani ya mpokeaji `_beneficiary`. +@external +def __init__(_beneficiary: address, _bidding_time: uint256): + self.beneficiary = _beneficiary + self.auctionStart = block.timestamp + self.auctionEnd = self.auctionStart + _bidding_time + +# Zabuni kwenye mnada na thamani iliyotumwa +# pamoja na muamala huu. +# Thamani itarejeshwa tu ikiwa +# mnada haujashindwa. +@external +@payable +def bid(): + # Angalia kama muda wa zabuni umeisha. + assert block.timestamp < self.auctionEnd + # Angalia kama zabuni ni ya juu vya kutosha + assert msg.value > self.highestBid + # Fuatilia urejeshaji wa pesa kwa mzabuni wa awali wa juu + self.pendingReturns[self.highestBidder] += self.highestBid + # Fuatilia zabuni mpya ya juu + self.highestBidder = msg.sender + self.highestBid = msg.value + +# Toa zabuni iliyorejeshwa hapo awali. Mtindo wa kutoa pesa ni +# hutumika hapa kuepuka suala la usalama. Kama urejeshaji fedha ungekuwa moja kwa moja +# zilizotumwa kama sehemu ya bid(), mkataba hasidi wa zabuni ungeweza kuzuia +# urejeshaji huo na hivyo kuzuia zabuni mpya za juu kuingia. +@external +def withdraw(): + pending_amount: uint256 = self.pendingReturns[msg.sender] + self.pendingReturns[msg.sender] = 0 + send(msg.sender, pending_amount) + +# Maliza mnada na tuma zabuni ya juu zaidi +# kwa mpokeaji. +@external +def endAuction(): + # Ni mwongozo mzuri wa kupanga vitendaji vinavyoingiliana + # na mikataba mingine (yaani, huita vitendaji au hutuma ether) + # katika awamu tatu: + # 1. kuangalia masharti + # 2. kufanya vitendo (vinavyoweza kubadilisha masharti) + # 3. kuingiliana na mikataba mingine + # Ikiwa awamu hizi zimechanganywa, mkataba mwingine unaweza kuita + # tena katika mkataba wa sasa na kurekebisha hali au kusababisha + # athari (malipo ya ether) kufanywa mara nyingi. + # Ikiwa vitendaji vinavyoitwa ndani ni pamoja na mwingiliano na nje + # mikataba, pia inapaswa kuzingatiwa mwingiliano na + # mikataba ya nje. + + # 1. Masharti + # Angalia kama muda wa mwisho wa mnada umefikiwa + assert block.timestamp >= self.auctionEnd + # Angalia kama kitendaji hiki tayari kimeitwa + assert not self.ended + + # 2. Athari + self.ended = True + + # 3. Mwingiliano + send(self.beneficiary, self.highestBid) +``` + +Mfano huu unapaswa kukupa hisia ya jinsi sintaksia ya mkataba wa Vyper ilivyo. Kwa maelezo ya kina zaidi ya vitendaji na vigezo, [angalia nyaraka](https://vyper.readthedocs.io/en/latest/vyper-by-example.html#simple-open-auction). + +## Yul na Yul+ {#yul} + +Ikiwa wewe ni mgeni kwa Ethereum na bado hujafanya uandishi wowote wa msimbo na lugha za mkataba-erevu, tunapendekeza uanze na Solidity au Vyper. Angalia Yul au Yul+ mara tu unapofahamu mbinu bora za usalama wa mkataba-erevu na maelezo mahususi ya kufanya kazi na EVM. + +**Yul** + +- Lugha ya kati kwa Ethereum. +- Inasaidia [EVM](/developers/docs/evm) na [Ewasm](https://github.com/ewasm), Mkusanyiko wa Wavuti wenye ladha ya Ethereum, na imeundwa kuwa kigawanyiko cha kawaida kinachoweza kutumika cha majukwaa yote mawili. +- Lengo zuri kwa hatua za uboreshaji wa kiwango cha juu ambazo zinaweza kufaidi majukwaa ya EVM na Ewasm kwa usawa. + +**Yul+** + +- Kiendelezi cha kiwango cha chini, chenye ufanisi mkubwa kwa Yul. +- Hapo awali iliyoundwa kwa ajili ya mkataba wa [optimistic rollup](/developers/docs/scaling/optimistic-rollups/). +- Yul+ inaweza kutazamwa kama pendekezo la majaribio la sasisho kwa Yul, na kuongeza vipengele vipya kwake. + +### Viungo muhimu {#important-links-2} + +- [Nyaraka za Yul](https://docs.soliditylang.org/en/latest/yul.html) +- [Nyaraka za Yul+](https://github.com/fuellabs/yulp) +- [Chapisho la Utangulizi la Yul+](https://medium.com/@fuellabs/introducing-yul-a-new-low-level-language-for-ethereum-aa64ce89512f) + +### Mfano wa mkataba {#example-contract-2} + +Mfano rahisi ufuatao unatekeleza kitendaji cha nguvu. Inaweza kuandaliwa kwa kutumia `solc --strict-assembly --bin input.yul`. Mfano unapaswa +kuhifadhiwa katika faili ya 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) +} +``` + +Ikiwa tayari una uzoefu mzuri na mikataba-erevu, utekelezaji kamili wa ERC20 katika Yul unaweza kupatikana [hapa](https://solidity.readthedocs.io/en/latest/yul.html#complete-erc20-example). + +## Fe {#fe} + +- Lugha ya aina tuli kwa ajili ya Mashine ya mtandaoni ya Ethereum (EVM). +- Imehamasishwa na Python na Rust. +- Inalenga kuwa rahisi kujifunza -- hata kwa wasanidi programu ambao ni wapya kwenye mfumo ikolojia wa Ethereum. +- Uendelezaji wa Fe bado uko katika hatua za mwanzo, lugha hiyo ilikuwa na toleo lake la alpha mnamo Januari 2021. + +### Viungo muhimu {#important-links-3} + +- [GitHub](https://github.com/ethereum/fe) +- [Tangazo la Fe](https://snakecharmers.ethereum.org/fe-a-new-language-for-the-ethereum-ecosystem/) +- [Ramani ya Fe 2021](https://notes.ethereum.org/LVhaTF30SJOpkbG1iVw1jg) +- [Gumzo la Fe Discord](https://discord.com/invite/ywpkAXFjZH) +- [Twitter ya Fe](https://twitter.com/official_fe) + +### Mfano wa mkataba {#example-contract-3} + +Ufuatao ni mkataba rahisi uliotekelezwa katika 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() + +``` + +## Jinsi ya kuchagua {#how-to-choose} + +Kama ilivyo kwa lugha nyingine yoyote ya programu, mara nyingi ni kuhusu kuchagua zana inayofaa kwa kazi inayofaa na pia mapendeleo ya kibinafsi. + +Hapa kuna mambo machache ya kuzingatia ikiwa bado hujajaribu lugha yoyote: + +### Ni nini kizuri kuhusu Solidity? {#solidity-advantages} + +- Ikiwa wewe ni mwanzilishi, kuna mafunzo na zana nyingi za kujifunza. Angalia zaidi kuhusu hilo katika sehemu ya [Jifunze kwa Kuandika Msimbo](/developers/learning-tools/). +- Zana nzuri za msanidi programu zinapatikana. +- Solidity ina jumuiya kubwa ya wasanidi programu, ambayo inamaanisha kuna uwezekano mkubwa utapata majibu ya maswali yako haraka sana. + +### Ni nini kizuri kuhusu Vyper? {#vyper-advatages} + +- Njia nzuri ya kuanza kwa wasanidi wa Python wanaotaka kuandika mikataba-erevu. +- Vyper ina idadi ndogo ya vipengele vinavyoifanya kuwa nzuri kwa ajili ya kuunda mifano ya haraka ya mawazo. +- Vyper inalenga kuwa rahisi kukagua na kusomeka kwa urahisi iwezekanavyo kwa binadamu. + +### Ni nini kizuri kuhusu Yul na Yul+? {#yul-advantages} + +- Lugha rahisi na inayofanya kazi ya kiwango cha chini. +- Inaruhusu kusogea karibu zaidi na EVM mbichi, ambayo inaweza kusaidia kuboresha matumizi ya gesi ya mikataba yako. + +## Ulinganisho wa lugha {#language-comparisons} + +Kwa ulinganisho wa sintaksia ya msingi, mzunguko wa maisha ya mkataba, violesura, viendeshaji, miundo ya data, vitendaji, mtiririko wa udhibiti, na zaidi angalia [karatasi hii ya kudokezea ya Auditless](https://reference.auditless.com/cheatsheet/) + +## Masomo zaidi {#further-reading} + +- [Maktaba ya Mikataba ya Solidity na OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/) +- [Solidity kwa Mfano](https://solidity-by-example.org) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/libraries/index.md b/public/content/translations/sw/developers/docs/smart-contracts/libraries/index.md new file mode 100644 index 00000000000..bf6c537f8a5 --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/libraries/index.md @@ -0,0 +1,117 @@ +--- +title: Maktaba za mikataba mahiri +description: Gundua maktaba za mikataba-erevu zinazoweza kutumika tena na vizuizi vya ujenzi ili kuharakisha miradi yako ya maendeleo ya Ethereum. +lang: sw +--- + +Huhitaji kuandika kila mkataba mahiri katika mradi wako kuanzia mwanzo. Kuna maktaba nyingi za mikataba mahiri za programu huria zinazopatikana ambazo hutoa vizuizi vya ujenzi vinavyoweza kutumika tena kwa mradi wako ambavyo vinaweza kukuepusha na kulazimika kuunda tena gurudumu. + +## Mahitaji ya awali {#prerequisites} + +Kabla ya kurukia maktaba mahiri za mikataba, ni wazo nzuri kuwa na ufahamu mzuri wa muundo wa mkataba mahiri. Nenda kwenye [muundo wa mkataba-erevu](/developers/docs/smart-contracts/anatomy/) ikiwa bado hujafanya hivyo. + +## Kuna nini ndani ya maktaba {#whats-in-a-library} + +Kwa kawaida unaweza kupata aina mbili za vizuizi vya ujenzi katika maktaba mahiri za mikataba: tabia zinazoweza kutumika tena unazoweza kuongeza kwenye kandarasi zako, na utekelezaji wa viwango mbalimbali. + +### Mienendo {#behaviors} + +Unapoandika mikataba-erevu, kuna uwezekano mkubwa utajikuta ukiandika mifumo inayofanana mara kwa mara, kama vile kugawa anwani ya _admin_ ili kutekeleza shughuli zilizolindwa katika mkataba, au kuongeza kitufe cha dharura cha _pause_ iwapo kutatokea suala lisilotarajiwa. + +Maktaba za mikataba-erevu kwa kawaida hutoa utekelezaji unaoweza kutumika tena wa mienendo hii kama [maktaba](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries) au kupitia [urithi](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#inheritance) katika Solidity. + +Kwa mfano, ifuatayo ni toleo lililorahisishwa la [mkataba wa `Ownable`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/access/Ownable.sol) kutoka [maktaba ya Mikataba ya OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts), ambayo huteua anwani kama mmiliki wa mkataba, na hutoa kirekebishaji cha kuzuia ufikiaji wa mbinu kwa mmiliki huyo pekee. + +```solidity +contract Ownable { + address public owner; + + constructor() internal { + owner = msg.sender; + } + + modifier onlyOwner() { + require(owner == msg.sender, "Ownable: anayepiga simu si mmiliki"); + _; + } +} +``` + +Ili kutumia jengo kama hili katika mkataba wako, utahitaji kwanza kuagiza, na kisha kupanua kutoka humo katika mikataba yako mwenyewe. Hii itakuruhusu kutumia kirekebishaji kilichotolewa na mkataba msingi wa `Ownable` ili kulinda utendakazi wako mwenyewe. + +```solidity +import ".../Ownable.sol"; // Njia ya kuelekea maktaba iliyoingizwa + +contract MyContract is Ownable { + // Utendakazi ufuatao unaweza kuitwa tu na mmiliki + function secured() onlyOwner public { + msg.sender.transfer(1 ether); + } +} +``` + +Mfano mwingine maarufu ni [SafeMath](https://docs.openzeppelin.com/contracts/3.x/utilities#math) au [DsMath](https://dappsys.readthedocs.io/en/latest/ds_math.html). Hizi ni maktaba (kinyume na kandarasi za msingi) ambazo hutoa utendakazi wa hesabu na ukaguzi wa ziada, ambao haujatolewa na lugha. Ni utaratibu mzuri kutumia mojawapo ya maktaba hizi badala ya shughuli za hesabu asilia ili kulinda mkataba wako dhidi ya mafuriko, ambayo yanaweza kuwa na matokeo mabaya! + +### Viwango {#standards} + +Ili kuwezesha [utunzi na ushirikiano](/developers/docs/smart-contracts/composability/), jumuiya ya Ethereum imefafanua viwango kadhaa katika mfumo wa **ERCs**. Unaweza kusoma zaidi kuzihusu katika sehemu ya [viwango](/developers/docs/standards/). + +Unapojumuisha ERC kama sehemu ya kandarasi zako, ni vyema utafute utekelezaji wa kawaida badala ya kujaribu kuzindua yako. Maktaba nyingi za mikataba mahiri hujumuisha utekelezaji wa ERC maarufu zaidi. Kwa mfano, [kiwango cha tokeni inayoweza kubadilishwa cha ERC20](/developers/tutorials/understand-the-erc-20-token-smart-contract/) kinachopatikana kila mahali kinaweza kupatikana katika [HQ20](https://github.com/HQ20/contracts/blob/master/contracts/token/README.md), [DappSys](https://github.com/dapphub/ds-token/) na [OpenZeppelin](https://docs.openzeppelin.com/contracts/3.x/erc20). Zaidi ya hayo, baadhi ya ERC pia hutoa utekelezaji wa kisheria kama sehemu ya ERC yenyewe. + +Inafaa kutaja kwamba baadhi ya ERCs hazijitegemei, lakini ni nyongeza kwa ERC zingine. Kwa mfano, [ERC2612](https://eips.ethereum.org/EIPS/eip-2612) inaongeza kiendelezi kwa ERC20 ili kuboresha utumiaji wake. + +## Jinsi ya kuongeza maktaba {#how-to} + +Daima rejelea hati za maktaba unayojumuisha kwa maagizo maalum ya jinsi ya kuijumuisha kwenye mradi wako. Maktaba kadhaa za mikataba ya Solidity zimefungashwa kwa kutumia `npm`, kwa hivyo unaweza kuzisakinisha kwa `npm install`. Zana nyingi za [kukusanya](/developers/docs/smart-contracts/compiling/) mikataba zitaangalia ndani ya `node_modules` yako kwa maktaba za mikataba-erevu, kwa hivyo unaweza kufanya yafuatayo: + +```solidity +// Hii itapakia maktaba ya @openzeppelin/contracts kutoka kwa node_modules zako +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + +contract MyNFT is ERC721 { + constructor() ERC721("MyNFT", "MNFT") public { } +} +``` + +Bila kujali mbinu unayotumia, unapojumuisha maktaba, daima angalia toleo la [lugha](/developers/docs/smart-contracts/languages/). Kwa mfano, huwezi kutumia maktaba kwa Solidity 0.6 ikiwa unaandika mikataba yako katika Solidity 0.5. + +## Wakati wa kutumia {#when-to-use} + +Kutumia maktaba ya mkataba mahiri kwa mradi wako kuna manufaa kadhaa. Kwanza kabisa, inakuokoa wakati kwa kukupa vizuizi vya ujenzi ambavyo tayari kutumia unaweza kujumuisha kwenye mfumo wako, badala ya kulazimika kuziandika mwenyewe. + +Usalama pia ni nyongeza kuu. Maktaba huria za mikataba mahiri pia mara nyingi huchunguzwa sana. Ikizingatiwa miradi mingi inaitegemea, kuna motisha kubwa kutoka kwa jamii ya kuiweka chini ya ukaguzi wa kila wakati. Ni kawaida zaidi kupata makosa katika nambari ya maombi kuliko katika maktaba za mkataba zinazoweza kutumika tena. Baadhi ya maktaba pia hupitia [ukaguzi wa nje](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/audits) kwa ajili ya usalama wa ziada. + +Hata hivyo, kutumia maktaba za mikataba mahiri kuna hatari ya kujumuisha msimbo usioufahamu katika mradi wako. Inajaribu kuagiza mkataba na kuujumuisha moja kwa moja kwenye mradi wako, lakini bila kuelewa vizuri mkataba huo hufanya nini, unaweza kuwa unaanzisha suala katika mfumo wako bila kukusudia kutokana na tabia isiyotarajiwa. Daima hakikisha umesoma hati za msimbo unaoingiza, na kisha uhakiki msimbo wenyewe kabla ya kuufanya kuwa sehemu ya mradi wako! + +Mwisho, unapoamua kujumuisha maktaba, zingatia matumizi yake kwa jumla. Ile iliyopitishwa na wengi ina manufaa ya kuwa na jumuiya kubwa na macho zaidi kuiangalia kwa masuala. Usalama unapaswa kuwa lengo lako la msingi wakati wa kujenga na mikataba smart! + +## Zana zinazohusiana {#related-tools} + +**OpenZeppelin Contracts -** **_Maktaba maarufu zaidi kwa maendeleo salama ya mikataba-erevu._** + +- [Nyaraka](https://docs.openzeppelin.com/contracts/) +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-contracts) +- [Jukwaa la Jumuiya](https://forum.openzeppelin.com/c/general/16) + +**DappSys -** **_Vizuizi salama, rahisi na vinavyoweza kunyumbulika vya mikataba-erevu._** + +- [Nyaraka](https://dappsys.readthedocs.io/) +- [GitHub](https://github.com/dapphub/dappsys) + +**HQ20 -** **_Mradi wa Solidity wenye mikataba, maktaba na mifano ya kukusaidia kujenga programu-tumizi zilizotawanywa zilizo na vipengele kamili kwa ajili ya ulimwengu halisi._** + +- [GitHub](https://github.com/HQ20/contracts) + +**thirdweb Solidity SDK -** **_Hutoa zana zinazohitajika ili kujenga mikataba-erevu maalum kwa ufanisi_** + +- [Nyaraka](https://portal.thirdweb.com/contracts/build/overview) +- [GitHub](https://github.com/thirdweb-dev/contracts) + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Mazingatio ya usalama kwa wasanidi programu wa Ethereum](/developers/docs/smart-contracts/security/) _– Mafunzo kuhusu mazingatio ya usalama wakati wa kujenga mikataba-erevu, ikijumuisha matumizi ya maktaba._ +- [Elewa mkataba-erevu wa tokeni ya ERC-20](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _-Mafunzo kuhusu kiwango cha ERC20, yanayotolewa na maktaba nyingi._ + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/smart-contracts/naming/index.md b/public/content/translations/sw/developers/docs/smart-contracts/naming/index.md new file mode 100644 index 00000000000..dd3b9635901 --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/naming/index.md @@ -0,0 +1,101 @@ +--- +title: Kutaja mikataba-erevu +description: Mbinu bora za kutaja mikataba-erevu ya Ethereum kwa kutumia ENS +lang: sw +--- + +Mikataba-erevu ni msingi wa miundombinu iliyogatuliwa ya Ethereum, inayowezesha programu na itifaki zinazojiendesha. Lakini hata uwezo wa mikataba unavyoendelea kubadilika, watumiaji na wasanidi programu bado wanategemea anwani ghafi za heksadesimali kutambua na kurejelea mikataba hii. + +Kutaja mikataba-erevu kwa kutumia [Huduma ya Majina ya Ethereum (ENS)](https://ens.domains/) inaboresha hali ya utumiaji kwa kuondoa anwani za mkataba za heksadesimali na kupunguza hatari kutokana na mashambulizi kama vile sumu ya anwani na mashambulizi ya udanganyifu. Mwongozo huu unaeleza kwa nini kutaja mikataba-erevu ni muhimu, jinsi inaweza kutekelezwa, na zana zinazopatikana kama vile [Enscribe](https://www.enscribe.xyz) ili kurahisisha mchakato na kusaidia wasanidi programu kufuata utaratibu huu. + +## Kwa nini tutaje mikataba-erevu? {#why-name-contracts} + +### Vitambulisho vinavyoweza kusomwa na binadamu {#human-readable-identifiers} + +Badala ya kuingiliana na anwani za mkataba zisizoeleweka kama `0x8f8e...f9e3`, wasanidi programu na watumiaji wanaweza kutumia majina yanayoweza kusomwa na binadamu kama `v2.myapp.eth`. Hii hurahisisha mwingiliano wa mikataba-erevu. + +Hii inawezekana kutokana na [Huduma ya Majina ya Ethereum](https://ens.domains/) ambayo hutoa huduma ya majina iliyogatuliwa kwa anwani za Ethereum. Hii ni sawa na jinsi Huduma ya Majina ya Vikoa (DNS) inavyowezesha watumiaji wa intaneti kufikia anwani za mtandao kwa kutumia jina kama vile ethereum.org badala ya anwani ya IP kama vile `104.18.176.152`. + +### Usalama na uaminifu ulioboreshwa {#improved-security-and-trust} + +Mikataba iliyotajwa husaidia kupunguza miamala ya kimakosa kwenda kwenye anwani isiyo sahihi. Pia husaidia watumiaji kutambua mikataba inayohusishwa na programu au chapa maalum. Hii inaongeza safu ya uaminifu wa sifa, hasa wakati majina yameunganishwa na vikoa vikuu vinavyojulikana kama `uniswap.eth`. + +Kutokana na urefu wa herufi 42 za anwani ya Ethereum, ni vigumu sana kwa watumiaji kutambua mabadiliko madogo katika anwani, ambapo herufi chache zimebadilishwa. Kwa mfano, anwani kama `0x58068646C148E313CB414E85d2Fe89dDc3426870` kwa kawaida ingefupishwa hadi `0x580...870` na programu zinazotumiwa na watumiaji kama vile mikoba. Mtumiaji hawezi kugundua kwa urahisi anwani yenye nia mbaya ambapo herufi chache zimebadilishwa. + +Aina hii ya mbinu hutumiwa na mashambulizi ya udanganyifu wa anwani na sumu ambapo watumiaji huongozwa kuamini kuwa wanashirikiana na au kutuma fedha kwenye anwani sahihi, wakati kwa kweli anwani hiyo inafanana tu na anwani sahihi, lakini si sawa. + +Majina ya ENS kwa mikoba na mikataba hulinda dhidi ya aina hizi za mashambulizi. Kama mashambulizi ya udanganyifu wa DNS, mashambulizi ya udanganyifu wa ENS yanaweza pia kutokea, hata hivyo, mtumiaji ana uwezekano mkubwa wa kugundua makosa ya tahajia katika jina la ENS kuliko mabadiliko madogo kwenye anwani ya heksadesimali. + +### UX bora kwa mikoba na wachunguzi {#better-ux} + +Wakati mkataba-erevu umesanidiwa na jina la ENS, inawezekana kwa programu kama vile mikoba na wachunguzi wa mnyororo wa bloku kuonyesha majina ya ENS kwa mikataba-erevu, badala ya anwani za heksadesimali. Hii inatoa uboreshaji mkubwa wa hali ya utumiaji (UX) kwa watumiaji. + +Kwa mfano, wakati wa kuingiliana na programu kama vile Uniswap, watumiaji kwa kawaida wataona kuwa programu wanayoingiliana nayo inapatikana kwenye tovuti `uniswap.org`, lakini wangeonyeshwa anwani ya mkataba ya heksadesimali ikiwa Uniswap haijataja mikataba-erevu yake kwa kutumia ENS. Ikiwa mkataba umetajwa, badala yake wangeweza kuona `v4.contracts.uniswap.eth` ambayo ni muhimu zaidi. + +## Kutaja wakati wa upelekaji dhidi ya baada ya upelekaji {#when-to-name} + +Kuna alama mbili ambazo mikataba-erevu inaweza kutajwa: + +- **Wakati wa upelekaji**: kupeana jina la ENS kwa mkataba unapopelekwa. +- **Baada ya upelekaji**: kuoanisha anwani ya mkataba iliyopo na jina jipya la ENS. + +Njia zote mbili zinategemea kuwa na ufikiaji wa mmiliki au msimamizi wa kikoa cha ENS ili waweze kuunda na kuweka rekodi za ENS. + +## Jinsi utajaji wa ENS unavyofanya kazi kwa mikataba {#how-ens-naming-works} + +Majina ya ENS huhifadhiwa kwenye mnyororo na hutatuliwa kwa anwani za Ethereum kupitia visuluhishi vya ENS. Ili kutaja mkataba-erevu: + +1. Sajili au dhibiti kikoa kikuu cha ENS (k.m. `myapp.eth`) +2. Unda kikoa kidogo (k.m. `v1.myapp.eth`) +3. Weka rekodi ya `address` ya kikoa kidogo kwenye anwani ya mkataba +4. Weka rekodi ya nyuma ya mkataba kwenye ENS ili kuruhusu jina kupatikana kupitia anwani yake + +Majina ya ENS yana mpangilio wa daraja na yanasaidia majina madogo yasiyo na kikomo. Kuweka rekodi hizi kwa kawaida kunahusisha kuingiliana na sajili ya ENS na mikataba ya visuluhishi vya umma. + +## Zana za kutaja mikataba {#tools} + +Kuna njia mbili za kutaja mikataba-erevu. Ama kutumia [Programu ya ENS](https://app.ens.domains) na hatua kadhaa za mwongozo, au kutumia [Enscribe](https://www.enscribe.xyz). Hizi zimeainishwa hapa chini. + +### Usanidi wa mwongozo wa ENS {#manual-ens-setup} + +Kwa kutumia [Programu ya ENS](https://app.ens.domains/), wasanidi programu wanaweza kuunda majina madogo kwa mikono na kuweka rekodi za anwani za mbele. Hata hivyo, hawawezi kuweka jina la msingi kwa mkataba-erevu kwa kuweka rekodi ya nyuma ya jina kupitia programu ya ENS. Hatua za mwongozo lazima zichukuliwe ambazo zimeelezwa katika [nyaraka za ENS](https://docs.ens.domains/web/naming-contracts/). + +### Enscribe {#enscribe} + +[Enscribe](https://www.enscribe.xyz) hurahisisha utajaji wa mikataba-erevu kwa kutumia ENS, na huongeza imani ya mtumiaji katika mikataba-erevu. Inatoa: + +- **Upelekaji wa atomiki na utajaji**: Peana jina la ENS wakati wa kupeleka mkataba mpya +- **Utajaji baada ya upelekaji**: Ambatisha majina kwenye mikataba iliyokwishapelekwa +- **Usaidizi wa minyororo mingi**: Inafanya kazi katika mitandao ya Ethereum na L2 ambapo ENS inasaidiwa +- **Data ya uthibitishaji wa mkataba**: Inajumuisha data ya uthibitishaji wa mkataba inayotolewa kutoka vyanzo vingi ili kuongeza imani kwa watumiaji + +Enscribe inasaidia majina ya ENS yaliyotolewa na watumiaji, au vikoa vyake ikiwa mtumiaji hana jina la ENS. + +Unaweza kufikia [Programu ya Enscribe](https://app.enscribe.xyz) ili kuanza kutaja na kutazama mikataba-erevu. + +## Mbinu bora {#best-practices} + +- **Tumia majina wazi, yenye matoleo** kama `v1.myapp.eth` ili kufanya masasisho ya mkataba kuwa wazi +- **Weka rekodi za nyuma** ili kuunganisha mikataba na majina ya ENS kwa mwonekano katika programu kama vile mikoba na wachunguzi wa mnyororo wa bloku. +- **Fuatilia kwa karibu tarehe za mwisho wa matumizi** ikiwa unataka kuzuia mabadiliko ya umiliki kwa bahati mbaya +- **Thibitisha chanzo cha mkataba** ili watumiaji waweze kuamini kuwa mkataba uliotajwa unafanya kazi kama inavyotarajiwa + +## Hatari {#risks} + +Kutaja mikataba-erevu kunatoa manufaa makubwa kwa watumiaji wa Ethereum, hata hivyo, wamiliki wa vikoa vya ENS lazima wawe macho kuhusiana na usimamizi wao. Hatari zinazojulikana ni pamoja na: + +- **Kumalizika muda**: Kama vile majina ya DNS, usajili wa majina ya ENS una muda maalum. Kwa hivyo ni muhimu wamiliki wafuatilie tarehe za kumalizika kwa vikoa vyao na kuzifanya upya mapema kabla ya kumalizika. Programu ya ENS na Enscribe zote mbili hutoa viashiria vya kuona kwa wamiliki wa vikoa wakati tarehe ya kumalizika inapokaribia. +- **Mabadiliko katika umiliki**: Rekodi za ENS zinawakilishwa kama NFTs kwenye Ethereum, ambapo mmiliki wa kikoa maalum cha `.eth` anamiliki NFT inayohusiana. Kwa hivyo, ikiwa akaunti tofauti itachukua umiliki wa NFT hii, mmiliki mpya anaweza kurekebisha rekodi zozote za ENS atakavyoona inafaa. + +Ili kupunguza hatari kama hizo, akaunti ya mmiliki wa vikoa vya kiwango cha pili (2LD) vya `.eth` inapaswa kulindwa kupitia mkoba wa saini-nyingi huku vikoa vidogo vikiundwa ili kusimamia utajaji wa mikataba. Kwa njia hiyo, katika tukio la mabadiliko yoyote ya umiliki kwa bahati mbaya au yenye nia mbaya katika kiwango cha kikoa kidogo, yanaweza kubatilishwa na mmiliki wa 2LD. + +## Mustakabali wa utajaji wa mikataba {#future} + +Utajaji wa mikataba unakuwa mbinu bora kwa ajili ya uundaji wa mfumo mtawanyo wa kimamlaka, sawa na jinsi majina ya vikoa yalivyochukua nafasi ya anwani za IP kwenye wavuti. Kadiri miundombinu zaidi kama vile mikoba, wachunguzi na dashibodi zinavyojumuisha usuluhishi wa ENS kwa mikataba, mikataba iliyotajwa itaboresha usalama na kupunguza makosa katika mfumo mzima wa ikolojia. + +Kwa kufanya mikataba-erevu iwe rahisi kutambua na kuelewa, utajaji husaidia kuziba pengo kati ya watumiaji na programu kwenye Ethereum, kuboresha usalama na UX kwa watumiaji. + +## Masomo zaidi {#further-reading} + +- [Kutaja Mikataba-erevu kwa kutumia ENS](https://docs.ens.domains/web/naming-contracts/) +- [Kutaja Mikataba-erevu kwa kutumia Enscribe](https://www.enscribe.xyz/docs). diff --git a/public/content/translations/sw/developers/docs/smart-contracts/security/index.md b/public/content/translations/sw/developers/docs/smart-contracts/security/index.md new file mode 100644 index 00000000000..4e31a0a62fc --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/security/index.md @@ -0,0 +1,576 @@ +--- +title: Usalama wa mkataba erevu +description: Muhtasari wa miongozo ya kuunda mikataba-erevu salama ya Ethereum +lang: sw +--- + +Mikataba mahiri ni rahisi kubadilika, na ina uwezo wa kudhibiti kiwango kikubwa cha thamani na data, huku ikiendesha mantiki isiyobadilika kulingana na msimbo uliowekwa kwenye kiambajengo. Hii imeunda mfumo mzuri wa ikolojia wa programu zisizoaminika na zilizotawanywa ambazo hutoa faida nyingi juu ya mifumo ya urithi. Pia zinawakilisha fursa kwa washambuliaji wanaotafuta faida kwa kutumia udhaifu katika mikataba mahiri. + +Minyororo ya bloku ya umma, kama Ethereum, inazidisha ugumu wa suala la kulinda mikataba-erevu. Msimbo wa mkataba-erevu uliotumwa _kawaida_ hauwezi kubadilishwa ili kurekebisha dosari za usalama, ilhali mali zilizoibwa kutoka kwa mikataba-erevu ni ngumu sana kufuatilia na mara nyingi hazipatikani kwa sababu ya kutobadilika. + +Ingawa takwimu zinatofautiana, inakadiriwa kuwa jumla ya thamani iliyoibiwa au kupotea kutokana na kasoro za kiusalama katika mikataba mahiri ni zaidi ya $1 bilioni kwa urahisi. Hii inajumuisha matukio mashuhuri, kama vile [udukuzi wa DAO](https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/) (ETH milioni 3.6 ziliibwa, zenye thamani ya zaidi ya dola bilioni 1 kwa bei za leo), [udukuzi wa mkoba wa Parity wenye saini nyingi](https://www.coindesk.com/markets/2017/07/19/30-million-ether-reported-stolen-due-to-parity-wallet-breach) (dola milioni 30 zilipotea kwa wadukuzi), na [suala la mkoba ulioganda wa Parity](https://www.theguardian.com/technology/2017/nov/08/cryptocurrency-300m-dollars-stolen-bug-ether) (zaidi ya dola milioni 300 za ETH zimefungiwa milele). + +Masuala yaliyotajwa hapo juu yanafanya kuwa muhimu kwa wasanifu programu kuwekeza juhudi katika kujenga mkataba mahiri iliyo salama, thabiti na inayostahimili uthabiti. Usalama wa mkataba-erevu ni jambo zito, na kila msanidi programu atafanya vizuri kujifunza. Mwongozo huu utashughulikia masuala ya usalama kwa wasanifu wa Ethereum na kuchunguza nyenzo za kuboresha usalama wa mikataba mahiri. + +## Mahitaji ya awali {#prerequisites} + +Hakikisha unafahamu [misingi ya usanidi wa mkataba-erevu](/developers/docs/smart-contracts/) kabla ya kushughulikia usalama. + +## Miongozo ya kuunda mikataba-erevu salama ya Ethereum {#smart-contract-security-guidelines} + +### 1. Buni vidhibiti sahihi vya ufikiaji {#design-proper-access-controls} + +Katika mikataba-erevu, vitendaji vilivyowekwa alama ya `public` au `external` vinaweza kuitwa na akaunti zozote zinazomilikiwa na nje (EOAs) au akaunti za mkataba. Kubainisha mwonekano wa umma kwa vipengele ni muhimu ikiwa unataka wengine kuingiliana na mkataba wako. Hata hivyo, vitendaji vilivyowekwa alama ya `private` vinaweza tu kuitwa na vitendaji ndani ya mkataba-erevu, na si akaunti za nje. Kumpa kila mshiriki wa mtandao ufikiaji wa kazi za mkataba kunaweza kusababisha shida, haswa ikiwa inamaanisha kuwa mtu yeyote anaweza kufanya shughuli nyeti (k.m., kutengeneza tokeni mpya). + +Ili kuzuia matumizi yasiyoidhinishwa ya vitendaji vya mkataba-erevu, ni muhimu kutekeleza vidhibiti salama vya ufikiaji. Mbinu za udhibiti wa ufikiaji huzuia uwezo wa kutumia kazi fulani katika mkataba mahiri kwa vyombo vilivyoidhinishwa, kama vile akaunti zinazowajibika kudhibiti mkataba. Muundo wa **Ownable** na **udhibiti unaotegemea majukumu** ni miundo miwili muhimu kwa kutekeleza udhibiti wa ufikiaji katika mikataba-erevu: + +#### Muundo wa Ownable {#ownable-pattern} + +Katika muundo wa Kumiliki, anwani imewekwa kama "mmiliki" wa mkataba wakati wa mchakato wa kuunda mkataba. Vitendaji vilivyolindwa hupewa kirekebishaji cha `OnlyOwner`, ambacho huhakikisha mkataba unathibitisha utambulisho wa anwani inayopiga simu kabla ya kutekeleza kitendaji. Simu za utendajikazi zinazolindwa kutoka kwa anwani zingine kando na mmiliki wa mkataba hurejeshwa kila wakati, na hivyo kuzuia ufikiaji usiohitajika. + +#### Udhibiti wa ufikiaji unaotegemea majukumu {#role-based-access-control} + +Kusajili anwani moja kama `Owner` katika mkataba-erevu huleta hatari ya uwekaji kati na huwakilisha sehemu moja ya kushindwa. Ikiwa funguo za akaunti ya mmiliki zitaathiriwa, washambuliaji wanaweza kushambulia mkataba unaomilikiwa. Hii ndiyo sababu kutumia muundo wa udhibiti wa ufikiaji wenye msingi wa dhima na akaunti nyingi za usimamizi inaweza kuwa chaguo bora. + +Katika udhibiti wa ufikiaji unaotegemea jukumu, ufikiaji wa vipengele nyeti husambazwa kati ya seti ya washiriki wanaoaminika. Kwa mfano, akaunti moja inaweza kuwa na jukumu la kutengeneza tokeni, huku akaunti nyingine ikifanya marekebisho au kusitisha mkataba. Kutawanya udhibiti wa ufikiaji kwa njia hii huondoa alama moja ya kutofaulu na kupunguza mawazo ya kuaminiana kwa watumiaji. + +##### Kutumia mikoba ya saini nyingi + +Njia nyingine ya kutekeleza udhibiti salama wa ufikiaji ni kutumia [akaunti ya saini nyingi](/developers/docs/smart-contracts/#multisig) kudhibiti mkataba. Tofauti na EOA ya kawaida, akaunti zenye sahihi ni nyingi zinamilikiwa na mamlaka nyingi na zinahitaji sahihi kutoka kwa idadi ya chini ya akaunti—sema 3-ya-5—ili kutekeleza miamala. + +Kutumia sahihi nyingi kwa udhibiti wa ufikiaji huleta safu ya ziada ya usalama kwani vitendo kwenye mkataba lengwa vinahitaji idhini kutoka kwa wahusika wengi. Hili ni muhimu hasa ikiwa ni muhimu kutumia muundo wa Kumiliki, kwa kuwa inafanya iwe vigumu zaidi kwa mshambulizi au mtu wa ndani kulaghai utendaji kazi nyeti wa mkataba kwa madhumuni mabaya. + +### 2. Tumia kauli za require(), assert(), na revert() kulinda utendakazi wa mkataba {#use-require-assert-revert} + +Kama ilivyotajwa, mtu yeyote anaweza kupiga simu kazi za umma katika mkataba wako mahiri mara tu utakapowekwa kwenye kiambajengo. Kwa kuwa huwezi kujua mapema jinsi akaunti za nje zitakavyoingiliana na mkataba, ni vyema kutekeleza ulinzi wa ndani dhidi ya utendaji kazi wenye matatizo kabla ya kupeleka. Unaweza kutekeleza tabia sahihi katika mikataba-erevu kwa kutumia kauli za `require()`, `assert()`, na `revert()` ili kusababisha vighairi na kurudisha mabadiliko ya hali ikiwa utekelezaji utashindwa kukidhi mahitaji fulani. + +**`require()`**: `require` hufafanuliwa mwanzoni mwa vitendaji na huhakikisha masharti yaliyowekwa awali yanatimizwa kabla ya kitendaji kilichoitwa kutekelezwa. Kauli ya `require` inaweza kutumika kuthibitisha ingizo la mtumiaji, kuangalia vigezo vya hali, au kuthibitisha utambulisho wa akaunti inayopiga simu kabla ya kuendelea na kitendaji. + +**`assert()`**: `assert()` hutumika kugundua makosa ya ndani na kuangalia ukiukaji wa “kanuni zisizobadilika” katika msimbo wako. Tofauti ni madai ya kimantiki kuhusu hali ya mkataba ambayo inapaswa kuwa ya kweli kwa utekelezaji wote wa kazi. Mfano wa kanuni isiyobadilika ni jumla ya kiwango cha juu cha usambazaji au salio la mkataba wa tokeni. Kutumia `assert()` huhakikisha kuwa mkataba wako haufikii hali hatarishi, na ikitokea, mabadiliko yote kwenye vigezo vya hali yanarejeshwa nyuma. + +**`revert()`**: `revert()` inaweza kutumika katika kauli ya if-else ambayo husababisha kighairi ikiwa hali inayohitajika haijatimizwa. Mkataba wa sampuli hapa chini unatumia `revert()` kulinda utekelezaji wa vitendaji: + +``` +pragma solidity ^0.8.4; + +contract VendingMachine { + address owner; + error Unauthorized(); + function buy(uint amount) public payable { + if (amount > msg.value / 2 ether) + revert("Hakuna Ether ya kutosha iliyotolewa."); + // Tekeleza ununuzi. + } + function withdraw() public { + if (msg.sender != owner) + revert Unauthorized(); + + payable(msg.sender).transfer(address(this).balance); + } +} +``` + +### 3. Pima mikataba-erevu na thibitisha usahihi wa msimbo {#test-smart-contracts-and-verify-code-correctness} + +Kutobadilika kwa msimbo unaoendeshwa katika [Mashine Halisi ya Ethereum](/developers/docs/evm/) kunamaanisha mikataba-erevu inahitaji kiwango cha juu cha tathmini ya ubora wakati wa awamu ya usanidi. Kupima mkataba wako kwa kina na kuuangalia kwa matokeo yoyote yasiyotarajiwa kutaboresha usalama kwa kiasi kikubwa na kulinda watumiaji wako kwa muda mrefu. + +Njia ya kawaida ni kuandika majaribio madogo ya vitengo kwa kutumia data ya mfano ambayo mkataba unatarajiwa kupokea kutoka kwa watumiaji. [Upimaji wa vitengo](/developers/docs/smart-contracts/testing/#unit-testing) ni mzuri kwa kupima utendakazi wa vitendaji fulani na kuhakikisha mkataba-erevu unafanya kazi kama inavyotarajiwa. + +Kwa bahati mbaya, upimaji wa vitengo hauna ufanisi mdogo katika kuboresha usalama wa mkataba-erevu unapotumika peke yake. Jaribio la kitengo linaweza kuthibitisha kuwa kitendaji kinajitekeleza vizuri kwa data ya mfano, lakini majaribio ya kitengo yana ufanisi tu kama majaribio yaliyoandikwa. Hii inafanya iwe vigumu kugundua visa vya pembeni vilivyokosekana na udhaifu ambao unaweza kuvunja usalama wa mkataba wako-erevu. + +Njia bora ni kuchanganya upimaji wa vitengo na upimaji unaotegemea sifa unaofanywa kwa kutumia [uchanganuzi tuli na unaobadilika](/developers/docs/smart-contracts/testing/#static-dynamic-analysis). Uchanganuzi tuli hutegemea uwakilishi wa kiwango cha chini, kama vile [grafu za mtiririko wa udhibiti](https://en.wikipedia.org/wiki/Control-flow_graph) na [miti dhahania ya sintaksia](https://deepsource.io/glossary/ast/) ili kuchanganua hali za programu zinazoweza kufikiwa na njia za utekelezaji. Wakati huo huo, mbinu za uchanganuzi unaobadilika, kama vile [uchanganyaji wa mkataba-erevu](https://www.cyfrin.io/blog/smart-contract-fuzzing-and-invariants-testing-foundry), hutekeleza msimbo wa mkataba na thamani za ingizo nasibu ili kugundua operesheni zinazokiuka sifa za usalama. + +[Uthibitishaji rasmi](/developers/docs/smart-contracts/formal-verification) ni mbinu nyingine ya kuthibitisha sifa za usalama katika mikataba-erevu. Tofauti na upimaji wa kawaida, uthibitishaji rasmi unaweza kuthibitisha kwa uhakika kutokuwepo kwa makosa katika mkataba-erevu. Hii inafanikiwa kwa kuunda vipimo rasmi ambavyo vinanasa sifa za usalama zinazohitajika na kuthibitisha kuwa muundo rasmi wa kandarasi unafuata vipimo hivi. + +### 4. Omba mapitio huru ya msimbo wako {#get-independent-code-reviews} + +Baada ya kupima mkataba wako, ni vizuri kuwaomba wengine wakague msimbo chanzo kwa masuala yoyote ya usalama. Majaribio hayatafichua kila dosari katika mkataba mzuri, lakini kupata hakiki huru huongeza uwezekano wa kugundua udhaifu. + +#### Ukaguzi {#audits} + +Kuagiza ukaguzi wa mkataba-erevu ni njia moja ya kufanya mapitio huru ya msimbo. Wakaguzi wana jukumu muhimu katika kuhakikisha kuwa mikataba mahiri ni salama na haina kasoro za ubora na hitilafu za muundo. + +Hata hivyo, unapaswa kuepuka kuchukulia ukaguzi kama suluhisho la kila kitu. Ukaguzi mahiri wa mikataba hautashika kila hitilafu na mara nyingi umeundwa ili kutoa ukaguzi wa ziada, ambao unaweza kusaidia kugundua matatizo ambayo wasanidi programu hawakuyapata wakati wa utayarishaji na majaribio ya awali. Unapaswa pia kufuata mbinu bora za kufanya kazi na wakaguzi, kama vile kuandika msimbo ipasavyo na kuongeza maoni ya ndani, ili kuongeza manufaa ya ukaguzi wa mikataba mahiri. + +- [Vidokezo na mbinu za ukaguzi wa mkataba-erevu](https://twitter.com/tinchoabbate/status/1400170232904400897) - _@tinchoabbate_ +- [Tumia ukaguzi wako kikamilifu](https://inference.ag/blog/2023-08-14-tips/) - _Inference_ + +#### Zawadi za mdudu {#bug-bounties} + +Kuanzisha programu ya zawadi ya mdudu ni njia nyingine ya kutekeleza mapitio ya msimbo wa nje. Zawadi ya mdudu ni malipo ya kifedha yanayotolewa kwa watu binafsi (kawaida wadukuzi wa kofia nyeupe) wanaogundua udhaifu katika programu. + +Zikitumiwa ipasavyo, zawadi za mdudu huwapa wanachama wa jumuiya ya wadukuzi motisha wa kukagua msimbo wako kwa dosari muhimu. Mfano halisi ni "mdudu wa pesa usio na kikomo" ambao ungemruhusu mshambuliaji kuunda kiasi kisicho na kikomo cha ether kwenye [Optimism](https://www.optimism.io/), itifaki ya [Safu ya 2](/layer-2/) inayoendeshwa kwenye Ethereum. Kwa bahati nzuri, mdukuzi wa kofia nyeupe [aligundua dosari hiyo](https://www.saurik.com/optimism.html) na kuijulisha timu, [na kupata malipo makubwa katika mchakato huo](https://cryptoslate.com/critical-bug-in-ethereum-l2-optimism-2m-bounty-paid/). + +Mkakati muhimu ni kuweka malipo ya programu ya zawadi ya mdudu kulingana na kiasi cha fedha zilizo hatarini. Ikifafanuliwa kama "[zawadi ya mdudu ya kuongeza kiwango](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)", njia hii hutoa motisha wa kifedha kwa watu binafsi kufichua udhaifu kwa uwajibikaji badala ya kuutumia. + +### 5. Fuata mbinu bora wakati wa usanidi wa mkataba-erevu {#follow-smart-contract-development-best-practices} + +Uwepo wa ukaguzi na zawadi za mdudu haukuondolei jukumu lako la kuandika msimbo wa hali ya juu. Usalama mzuri wa mkataba-erevu huanza na kufuata michakato sahihi ya usanifu na usanidi: + +- Hifadhi msimbo wote katika mfumo wa kudhibiti matoleo, kama vile git + +- Fanya marekebisho yote ya msimbo kupitia maombi ya kuvuta + +- Hakikisha maombi ya kuvuta yana angalau mkaguzi mmoja huru ikiwa unafanya kazi peke yako kwenye mradi, zingatia kutafuta wasanifu programu wengine na ukaguzi wa nambari za biashara + +- Tumia [mazingira ya usanidi](/developers/docs/frameworks/) kwa kupima, kuandaa, na kutuma mikataba-erevu + +- Pitia msimbo wako kupitia zana za msingi za uchambuzi wa msimbo, kama vile [Cyfrin Aderyn](https://github.com/Cyfrin/aderyn), Mythril na Slither. Kimsingi, unapaswa kufanya hivi kabla ya kila ombi la kuvuta kuunganishwa na kulinganisha tofauti katika matokeo + +- Hakikisha msimbo wako unakusanywa bila makosa, na mkusanyaji wa Solidity hatoi maonyo yoyote + +- Andika nyaraka za msimbo wako ipasavyo (ukitumia [NatSpec](https://solidity.readthedocs.io/en/develop/natspec-format.html)) na ueleze maelezo kuhusu usanifu wa mkataba katika lugha rahisi kueleweka. Hii itarahisisha wengine kukagua na kupitia msimbo wako. + +### 6. Tekeleza mipango thabiti ya kukabiliana na maafa {#implement-disaster-recovery-plans} + +Kubuni vidhibiti salama vya ufikiaji, kutekeleza virekebishaji vya utendaji kazi na mapendekezo mengine kunaweza kuboresha usalama wa mikataba mahiri, lakini hakuwezi kuondoa uwezekano wa matumizi mabaya. Kuunda mikataba mahiri iliyo salama kunahitaji "kujitayarisha kwa kutofaulu" na kuwa na mpango mbadala wa kujibu mashambulizi kwa ufanisi. Mpango sahihi wa kukabiliana na maafa utajumuisha baadhi au yote ya vipengele vifuatavyo: + +#### Uboreshaji wa mkataba {#contract-upgrades} + +Ingawa mikataba mahiri ya Ethereum haiwezi kubadilika kwa chaguo msingi, inawezekana kufikia kiwango fulani cha kubadilika kwa kutumia mifumo ya uboreshaji. Kuboresha mikataba ni muhimu katika hali ambapo kosa kubwa hufanya mkataba wako wa zamani kutotumika na kupeleka mantiki mpya ndilo chaguo linalowezekana zaidi. + +Mbinu za uboreshaji wa mikataba hufanya kazi tofauti, lakini "mchoro wa seva mbadala" ni mojawapo ya mbinu maarufu zaidi za kuboresha mikataba mahiri. [Miundo ya proksi](https://www.cyfrin.io/blog/upgradeable-proxy-smart-contract-pattern) hugawanya hali na mantiki ya programu kati ya mikataba _miwili_. Mkataba wa kwanza (unaoitwa ‘mkataba wa wakala’) huhifadhi vigezo vya hali (k.m., salio la mtumiaji), huku mkataba wa pili (unaoitwa ‘mkataba wa mantiki’) unashikilia msimbo wa kutekeleza majukumu ya mkataba. + +Akaunti huingiliana na mkataba wa proksi, ambao hupeleka simu zote za vitendaji kwa mkataba wa mantiki kwa kutumia simu ya kiwango cha chini ya [`delegatecall()`](https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html?highlight=delegatecall#delegatecall-callcode-and-libraries). Tofauti na simu ya kawaida ya ujumbe, `delegatecall()` huhakikisha kuwa msimbo unaoendeshwa kwenye anwani ya mkataba wa mantiki unatekelezwa katika muktadha wa mkataba unaopiga simu. Hii inamaanisha kuwa mkataba wa mantiki utaandika kila wakati kwenye hifadhi ya proksi (badala ya hifadhi yake yenyewe) na thamani asili za `msg.sender` na `msg.value` huhifadhiwa. + +Kukabidhi simu kwa mkataba wa mantiki kunahitaji kuhifadhi anwani yake katika hifadhi ya mkataba wa wakala. Kwa hivyo, kuboresha mantiki ya mkataba ni suala la kupeleka mkataba mwingine wa kimantiki na kuhifadhi anwani mpya katika mkataba wa wakala. Simu zinazofuata kwa mkataba wa wakala zinapoelekezwa kiotomatiki hadi kwa mkataba mpya wa kimantiki, ungekuwa "umeboresha" mkataba bila kurekebisha msimbo. + +[Zaidi kuhusu uboreshaji wa mikataba](/developers/docs/smart-contracts/upgrading/). + +#### Vituo vya dharura {#emergency-stops} + +Kama ilivyoelezwa, ukaguzi na upimaji wa kina hauwezi kugundua mende zote kwenye mkataba-erevu. Athari ikitokea kwenye msimbo wako baada ya kutumwa, haiwezekani kuweka alama kwa kuwa huwezi kubadilisha msimbo unaotumika kwenye anwani ya mkataba. Pia, mbinu za uboreshaji (k.m., ruwaza za seva mbadala) zinaweza kuchukua muda kutekelezwa (mara nyingi zinahitaji idhini kutoka kwa wahusika tofauti), ambayo huwapa washambuliaji muda zaidi wa kusababisha uharibifu zaidi. + +Chaguo la nyuklia ni kutekeleza chaguo la kukokotoa la "kusimamisha dharura" ambalo huzuia simu kwa kazi zinazoweza kuathiriwa katika mkataba. Vituo vya dharura kwa kawaida hujumuisha vipengele vifuatavyo: + +1. Kigezo cha Boolean cha kimataifa kinachoonyesha ikiwa mkataba-erevu uko katika hali ya kusimamishwa au la. Kigezo hiki huwekwa kuwa `false` wakati wa kusanidi mkataba, lakini kitarudi kuwa `true` mara mkataba utakapositishwa. + +2. Vitendaji vinavyorejelea kigezo cha Boolean katika utekelezaji wao. Vipengele kama hivyo vinaweza kufikiwa wakati mkataba mahiri haujasimamishwa, na hutoweza kufikiwa wakati kipengele cha kusimamisha dharura kinapoanzishwa. + +3. Hulka yenye ufikiaji wa kitendaji cha kusimamisha dharura, ambacho huweka kigezo cha Boolean kuwa `true`. Ili kuzuia vitendo viovu, simu kwa chaguo hili la kazi zinaweza kuzuiwa kwa anwani inayoaminika (k.m., mmiliki wa mkataba). + +Mara tu mkataba unapowasha kituo cha dharura, vitendaji fulani havitaitika. Hii inafanikiwa kwa kufunga vitendaji teule katika kirekebishaji kinachorejelea kigezo cha kimataifa. Hapo chini ni [mfano](https://github.com/fravoll/solidity-patterns/blob/master/EmergencyStop/EmergencyStop.sol) unaoelezea utekelezaji wa muundo huu katika mikataba: + +```solidity +// Msimbo huu haujakaguliwa kitaalamu na hautoi ahadi yoyote kuhusu usalama au usahihi. Tumia kwa hatari yako mwenyewe. + +contract EmergencyStop { + + bool isStopped = false; + + modifier stoppedInEmergency { + require(!isStopped); + _; + } + + modifier onlyWhenStopped { + require(isStopped); + _; + } + + modifier onlyAuthorized { + // Angalia uidhinishaji wa msg.sender hapa + _; + } + + function stopContract() public onlyAuthorized { + isStopped = true; + } + + function resumeContract() public onlyAuthorized { + isStopped = false; + } + + function deposit() public payable stoppedInEmergency { + // Mantiki ya kuweka amana inatokea hapa + } + + function emergencyWithdraw() public onlyWhenStopped { + // Utoaji wa dharura unatokea hapa + } +} +``` + +Mfano huu unaonyesha sifa za msingi za vituo vya dharura: + +- `isStopped` ni Boolean inayotathminiwa kuwa `false` mwanzoni na `true` wakati mkataba unapoingia katika hali ya dharura. + +- Virekebishaji vya vitendaji `onlyWhenStopped` na `stoppedInEmergency` hukagua kigezo cha `isStopped`. `stoppedInEmergency` hutumika kudhibiti vitendaji ambavyo havipaswi kufikiwa wakati mkataba uko hatarini (k.m., `deposit()`). Simu kwa vitendaji hivi zitarudi nyuma tu. + +`onlyWhenStopped` hutumika kwa vitendaji ambavyo vinapaswa kuitika wakati wa dharura (k.m., `emergencyWithdraw()`). Kazi kama hizo zinaweza kusaidia kutatua hali hiyo, kwa hivyo kutengwa kwao kutoka kwa orodha ya "kazi zilizozuiliwa". + +Kutumia utendaji kazi wa kusimamisha dharura kunatoa mwanya mzuri wa kushughulika na udhaifu mkubwa katika mkataba wako mahiri. Hata hivyo, huongeza hitaji la watumiaji kuamini wasanidi programu kutoiwasha kwa sababu za kibinafsi. Kufikia hili, kugatua udhibiti wa kituo cha dharura ama kwa kukiweka chini ya utaratibu wa upigaji kura wa mtandaoni, kufunga saa, au uidhinishaji kutoka kwa mikoba ya sahihi nyingni suluhisho zinazowezekana. + +#### Ufuatiliaji wa matukio {#event-monitoring} + +[Matukio](https://docs.soliditylang.org/en/v0.8.15/contracts.html#events) hukuruhusu kufuatilia simu kwa vitendaji vya mkataba-erevu na kufuatilia mabadiliko kwenye vigezo vya hali. Ni vyema kupanga mkataba wako mahiri ili kutangaza tukio wakati wowote mhusika anachukua hatua muhimu ya usalama (k.m., kutoa pesa). + +Kuweka matukio na kuyafuatilia nje ya mnyororo hutoa maarifa juu ya utendakazi wa mikataba na kusaidia ugunduzi wa haraka wa vitendo viovu. Hii inamaanisha kuwa timu yako inaweza kukabiliana haraka na udukuzi na kuchukua hatua ili kupunguza athari kwa watumiaji, kama vile kusitisha utendakazi au kufanya uboreshaji. + +Unaweza pia kuchagua zana ya ufuatiliaji ya nje ya rafu ambayo inasambaza arifa kiotomatiki wakati wowote mtu anapoingiliana na mikataba yako. Zana hizi zitakuruhusu kuunda arifa maalum kulingana na vichochezi tofauti, kama vile kiasi cha muamala, marudio ya simu za utendakazi, au vipengele maalum vinavyohusika. Kwa mfano, unaweza kupanga arifa inayokuja wakati kiasi kilichotolewa katika muamala mmoja kinavuka kiwango fulani. + +### 7. Buni mifumo salama ya utawala {#design-secure-governance-systems} + +Unaweza kutaka kugawa ombi lako kwa kugeuza udhibiti wa kandarasi za msingi kwa wanajamii. Katika hali hii, mfumo mahiri wa kandarasi utajumuisha moduli ya utawala utaratibu unaoruhusu wanajamii kuidhinisha vitendo vya usimamizi kupitia mfumo wa utawala wa mnyororo. Kwa mfano, pendekezo la kuboresha mkataba wa wakala hadi utekelezaji mpya linaweza kupigiwa kura na wenye tokeni. + +Utawala uliogawanyika unaweza kuwa wa manufaa, hasa kwa sababu unapatanisha maslahi ya wasanifu programu na watumiaji wa mwisho. Hata hivyo, mbinu mahiri za usimamizi wa mikataba zinaweza kuleta hatari mpya zikitekelezwa kimakosa. Hali inayowezekana ni ikiwa mshambuliaji anapata nguvu kubwa ya kupiga kura (inayopimwa kwa idadi ya tokeni zilizoshikiliwa) kwa kuchukua [mkopo wa ghafla](/defi/#flash-loans) na kusukuma pendekezo ovu. + +Njia moja ya kuzuia matatizo yanayohusiana na utawala kwenye mnyororo ni [kutumia kufuli ya muda](https://blog.openzeppelin.com/protect-your-users-with-smart-contract-timelocks/). Kufunga muda huzuia mkataba mahiri kutekeleza vitendo fulani hadi muda mahususi upite. Mikakati mingine ni pamoja na kugawa "uzito wa kupiga kura" kwa kila tokeni kulingana na muda ambao imekuwa imefungwa, au kupima uwezo wa kupiga kura wa anwani katika kipindi cha kihistoria (kwa mfano, vitalu 2-3 hapo awali) badala ya kizuizi cha sasa. Njia zote mbili hupunguza uwezekano wa kukusanya haraka nguvu ya kupiga kura ili kubadilisha kura kwenye mnyororo. + +Zaidi kuhusu [kubuni mifumo salama ya utawala](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/), [mifumo tofauti ya upigaji kura katika DAO](https://hackernoon.com/governance-is-the-holy-grail-for-daos), na [vejeta za kawaida za mashambulizi ya DAO zinazotumia DeFi](https://dacian.me/dao-governance-defi-attacks) katika viungo vilivyoshirikiwa. + +### 8. Punguza utata katika msimbo kwa kiwango cha chini {#reduce-code-complexity} + +Wasanidi programu wa jadi wanafahamu kanuni ya KISS (“weka rahisi, mjinga”), ambayo inashauri dhidi ya kuleta utata usio wa lazima katika usanifu wa programu. Hii inafuata fikra ya muda mrefu kwamba “mifumo tata hushindwa kwa njia tata” na iko katika hatari zaidi ya makosa ya gharama kubwa. + +Kuweka mambo rahisi ni muhimu sana wakati wa kuandika mikataba mahiri, ikizingatiwa kwamba mikataba mahiri inaweza kudhibiti kiwango kikubwa cha thamani. Kidokezo cha kufikia urahisi unapoandika mikataba-erevu ni kutumia tena maktaba zilizopo, kama vile [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/5.x/), inapowezekana. Kwa sababu maktaba hizi zimekaguliwa sana na kujaribiwa na wasanifu programu, kuzitumia hupunguza uwezekano wa kuibua makosa kwa kuandika utendaji kazi mpya kuanzia mwanzo. + +Ushauri mwingine wa kawaida ni kuandika kazi ndogo ndogo na kuweka mikataba ya kawaida kwa kugawanya mantiki ya biashara katika mikataba mingi. Sio tu kwamba kuandika msimbo rahisi hupunguza eneo la mashambulizi katika mkataba mahiri, pia hurahisisha kufikiria juu ya usahihi wa mfumo mzima na kugundua makosa yanayoweza kutokea ya muundo mapema. + +### 9. Jilinde dhidi ya udhaifu wa kawaida wa mkataba-erevu {#mitigate-common-smart-contract-vulnerabilities} + +#### Uingiaji upya {#reentrancy} + +EVM hairuhusu upatanishi, kumaanisha kuwa mikataba miwili inayohusika katika simu ya ujumbe haiwezi kutekelezwa kwa wakati mmoja. Simu ya nje inasitisha utekelezaji wa mkataba wa kupiga simu na kumbukumbu hadi simu irudi, wakati ambapo utekelezaji unaendelea kama kawaida. Mchakato huu unaweza kuelezewa rasmi kama kuhamisha [mtiririko wa udhibiti](https://www.computerhope.com/jargon/c/contflow.htm) kwenda kwa mkataba mwingine. + +Ingawa mara nyingi haina madhara, kuhamisha mtiririko wa udhibiti kwa mikataba isiyoaminika inaweza kusababisha matatizo, kama vile kurejea tena. Shambulio la kurejesha tena hutokea wakati mkataba mbovu unaporejesha kwenye mkataba unaoweza kuathiriwa kabla ya ombi la awali la utendaji kazi kukamilika. Aina hii ya shambulio inaelezewa vizuri zaidi kwa mfano. + +Fikiria mkataba-erevu rahisi ('Mhanga') unaomruhusu yeyote kuweka na kutoa ether: + +```solidity +// Mkataba huu una udhaifu. Usitumie katika uzalishaji + +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; + } +} +``` + +Mkataba huu unafichua kitendaji cha `withdraw()` ili kuruhusu watumiaji kutoa ETH iliyowekwa awali kwenye mkataba. Wakati wa kuchakata utoaji, mkataba hufanya operesheni zifuatazo: + +1. Hukagua salio la ETH la mtumiaji +2. Hutuma fedha kwa anwani inayopiga simu +3. Huweka upya salio lao kuwa 0, kuzuia utoaji wa ziada kutoka kwa mtumiaji + +Kitendaji cha `withdraw()` katika mkataba wa `Victim` hufuata muundo wa “ukaguzi-maingiliano-athari”. _Hukagua_ ikiwa masharti muhimu kwa utekelezaji yanatimizwa (yaani, mtumiaji ana salio chanya la ETH) na hufanya _maingiliano_ kwa kutuma ETH kwa anwani ya mpigaji, kabla ya kutumia _athari_ za muamala (yaani, kupunguza salio la mtumiaji). + +Ikiwa `withdraw()` inaitwa kutoka kwa akaunti inayomilikiwa na nje (EOA), kitendaji hutekelezwa kama inavyotarajiwa: `msg.sender.call.value()` hutuma ETH kwa mpigaji. Hata hivyo, ikiwa `msg.sender` ni akaunti ya mkataba-erevu inayoita `withdraw()`, kutuma fedha kwa kutumia `msg.sender.call.value()` pia kutasababisha msimbo uliohifadhiwa kwenye anwani hiyo kuendeshwa. + +Fikiria huu ndio msimbo uliotumwa kwenye anwani ya mkataba: + +```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(); + } + } +} +``` + +Mkataba huu umebuniwa kufanya mambo matatu: + +1. Kubali amana kutoka kwa akaunti nyingine (labda EOA ya mshambuliaji) +2. Weka ETH 1 kwenye mkataba wa Mhanga +3. Toa ETH 1 iliyohifadhiwa kwenye mkataba-erevu + +Hakuna tatizo hapa, isipokuwa `Attacker` ana kitendaji kingine kinachoita `withdraw()` katika `Victim` tena ikiwa gesi iliyobaki kutoka kwa `msg.sender.call.value` inayoingia ni zaidi ya 40,000. Hii inampa `Attacker` uwezo wa kuingia tena `Victim` na kutoa fedha zaidi _kabla_ ya wito wa kwanza wa `withdraw` kukamilika. Mzunguko unaonekana hivi: + +```solidity +- EOA ya Mshambuliaji inaita `Attacker.beginAttack()` na ETH 1 +- `Attacker.beginAttack()` inaweka ETH 1 kwenye `Victim` +- `Attacker` inaita `withdraw()` katika `Victim` +- `Victim` inakagua salio la `Attacker` (ETH 1) +- `Victim` inatuma ETH 1 kwa `Attacker` (ambayo inasababisha kitendaji cha chaguo-msingi) +- `Attacker` inaita `Victim.withdraw()` tena (kumbuka kwamba `Victim` haijapunguza salio la `Attacker` kutoka kwa utoaji wa kwanza) +- `Victim` inakagua salio la `Attacker` (ambalo bado ni ETH 1 kwa sababu haijatumia athari za simu ya kwanza) +- `Victim` inatuma ETH 1 kwa `Attacker` (ambayo inasababisha kitendaji cha chaguo-msingi na kumruhusu `Attacker` kuingia tena kwenye kitendaji cha `withdraw`) +- Mchakato unarudiwa hadi `Attacker` aishiwe na gesi, ambapo `msg.sender.call.value` inarudi bila kusababisha utoaji wa ziada +- `Victim` hatimaye inatumia matokeo ya muamala wa kwanza (na zinazofuata) kwenye hali yake, hivyo salio la `Attacker` linawekwa kuwa 0 +``` + +Muhtasari ni kwamba kwa sababu salio la mpigaji simu halijawekwa kuwa 0 hadi utekelezaji wa chaguo la kazi ukamilike, maombi yatakayofuata yatafaulu na kumruhusu mpigaji simu kuondoa salio lake mara nyingi. Aina hii ya shambulio inaweza kutumika kumaliza fedha za mkataba-erevu, kama ilivyotokea katika [udukuzi wa DAO wa 2016](https://www.coindesk.com/learn/understanding-the-dao-attack). Mashambulio ya uingiaji upya bado ni suala muhimu kwa mikataba-erevu leo kama [orodha za umma za unyonyaji wa uingiaji upya](https://github.com/pcaversaccio/reentrancy-attacks) zinavyoonyesha. + +##### Jinsi ya kuzuia mashambulio ya uingiaji upya + +Njia moja ya kushughulikia uingiaji upya ni kufuata [muundo wa ukaguzi-athari-maingiliano](https://docs.soliditylang.org/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern). Mchoro huu huamuru utekelezaji wa chaguo za kukokotoa kwa njia ambayo msimbo unaofanya ukaguzi unaohitajika kabla ya kuendelea na utekelezaji huja kwanza, ikifuatiwa na msimbo unaodhibiti hali ya mkataba, na msimbo unaoingiliana na mikataba mingine au EOA zinazofika mwisho. + +Muundo wa ukaguzi-athari-maingiliano unatumika katika toleo lililorekebishwa la mkataba wa `Victim` ulioonyeshwa hapa chini: + +```solidity +contract NoLongerAVictim { + function withdraw() external { + uint256 amount = balances[msg.sender]; + balances[msg.sender] = 0; + (bool success, ) = msg.sender.call.value(amount)(""); + require(success); + } +} +``` + +Mkataba huu hufanya _ukaguzi_ kwenye salio la mtumiaji, hutumia _athari_ za kitendaji cha `withdraw()` (kwa kuweka upya salio la mtumiaji kuwa 0), na huendelea kufanya _maingiliano_ (kutuma ETH kwa anwani ya mtumiaji). Hii inahakikisha kwamba mkataba unasasisha hifadhi yake kabla ya simu ya nje, kuondoa hali ya kuingia tena iliyowezesha shambulio la kwanza. Mkataba wa `Attacker` bado ungeweza kurudi nyuma kwenye `NoLongerAVictim`, lakini kwa kuwa `balances[msg.sender]` imewekwa kuwa 0, utoaji wa ziada utatupa kosa. + +Chaguo jingine ni kutumia kufuli ya kujumuisha (inayojulikana kama "mutex") ambayo hufunga sehemu ya hali ya mkataba hadi ombi la kukokotoa likamilike. Hii inatekelezwa kwa kutumia kigezo cha Boolean ambacho huwekwa kuwa `true` kabla ya kitendaji kutekelezwa na kurudi kuwa `false` baada ya wito kukamilika. Kama inavyoonekana katika mfano ulio hapa chini, kutumia mwito hulinda chaguo za kukokotoa dhidi ya simu zinazorudiwa wakati ombi la asili likiendelea kuchakatwa, hivyo basi kusimamisha kwa njia sahihi kurejesha. + +```solidity +pragma solidity ^0.7.0; + +contract MutexPattern { + bool locked = false; + mapping(address => uint256) public balances; + + modifier noReentrancy() { + require(!locked, "Umezuiliwa kuingia upya."); + locked = true; + _; + locked = false; + } + // Kitendaji hiki kinalindwa na mutex, kwa hivyo simu za kuingia upya kutoka ndani ya `msg.sender.call` haziwezi kuita `withdraw` tena. + // Kauli ya `return` inatathminiwa kuwa `true` lakini bado inatathmini kauli ya `locked = false` katika kirekebishaji + function withdraw(uint _amount) public payable noReentrancy returns(bool) { + require(balances[msg.sender] >= _amount, "Hakuna salio la kutoa."); + + balances[msg.sender] -= _amount; + (bool success, ) = msg.sender.call{value: _amount}(""); + require(success); + + return true; + } +} +``` + +Unaweza pia kutumia mfumo wa [malipo ya kuvuta](https://docs.openzeppelin.com/contracts/5.x/api/security#PullPayment) unaohitaji watumiaji kutoa fedha kutoka kwa mikataba-erevu, badala ya mfumo wa "malipo ya kusukuma" unaotuma fedha kwenye akaunti. Hii huondoa uwezekano wa kuanzisha msimbo bila kukusudia katika anwani zisizojulikana (na pia inaweza kuzuia mashambulizi fulani ya kunyimwa huduma). + +#### Kupungua na kufurika kwa nambari kamili {#integer-underflows-and-overflows} + +Kuongezeka kamili hutokea wakati matokeo ya utendaji kazi wa hesabu yanapotoka nje ya anuwai ya thamani zinazokubalika, na kusababisha "kupinduka" hadi thamani ya chini kabisa inayoweza kuwakilishwa. Kwa mfano, `uint8` inaweza tu kuhifadhi thamani hadi 2^8-1=255. Operesheni za hesabu zinazosababisha thamani za juu kuliko `255` zitafurika na kuweka upya `uint` kuwa `0`, sawa na jinsi odomita kwenye gari inavyowekwa upya kuwa 0 mara inapofikia maili ya juu zaidi (999999). + +Kupungua kupita kiasi kwa namba kamili chini ya thamanini inayoweza kuwakilishwa hutokea kwa sababu sawa: matokeo ya utekelezaji ya hesabu huanguka chini ya masafa yanayokubalika. Sema ulijaribu kupunguza `0` katika `uint8`, matokeo yangevuka tu hadi thamani ya juu inayoweza kuwakilishwa (`255`). + +Kujaza kamili na kupunguka kunaweza kusababisha mabadiliko yasiyotarajiwa kwa vigezo vya hali ya mkataba na kusababisha utekelezaji usiopangwa. Ufuatao ni mfano unaoonyesha jinsi mshambulizi anavyoweza kutumia wingi wa hesabu katika mikataba mahiri ili kutekeleza utekelezaji usio sahihi: + +``` +pragma solidity ^0.7.6; + +// Mkataba huu umebuniwa kufanya kazi kama hifadhi ya muda. +// Mtumiaji anaweza kuweka amana kwenye mkataba huu lakini hawezi kutoa kwa angalau wiki moja. +// Mtumiaji anaweza pia kuongeza muda wa kusubiri zaidi ya kipindi cha kusubiri cha wiki 1. + +/* +1. Tumia TimeLock +2. Tumia Attack na anwani ya TimeLock +3. Ita Attack.attack ukituma ether 1. Utaweza mara moja + kutoa ether yako. + +Nini kilitokea? +Attack ilisababisha TimeLock.lockTime kufurika na iliweza kutoa +kabla ya kipindi cha kusubiri cha wiki 1. +*/ + +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, "Fedha haitoshi"); + require(block.timestamp > lockTime[msg.sender], "Muda wa kufunga haujaisha"); + + uint amount = balances[msg.sender]; + balances[msg.sender] = 0; + + (bool sent, ) = msg.sender.call{value: amount}(""); + require(sent, "Imeshindwa kutuma Ether"); + } +} + +contract Attack { + TimeLock timeLock; + + constructor(TimeLock _timeLock) { + timeLock = TimeLock(_timeLock); + } + + fallback() external payable {} + + function attack() public payable { + timeLock.deposit{value: msg.value}(); + /* + kama t = muda wa sasa wa kufunga basi tunahitaji kupata x kiasi kwamba + x + t = 2**256 = 0 + hivyo x = -t + 2**256 = type(uint).max + 1 + hivyo x = type(uint).max + 1 - t + */ + timeLock.increaseLockTime( + type(uint).max + 1 - timeLock.lockTime(address(this)) + ); + timeLock.withdraw(); + } +} +``` + +##### Jinsi ya kuzuia kupungua na kufurika kwa nambari kamili + +Kuanzia toleo la 0.8.0, mkusanyaji wa Solidity hukataa msimbo unaosababisha kupungua na kufurika kwa nambari kamili. Hata hivyo, mikataba iliyokusanywa na toleo la chini la mkusanyaji inapaswa kufanya ukaguzi kwenye vitendaji vinavyohusisha operesheni za hesabu au kutumia maktaba (k.m., [SafeMath](https://docs.openzeppelin.com/contracts/2.x/api/math)) inayokagua kupungua/kufurika. + +#### Udanganyifu wa Oracle {#oracle-manipulation} + +[Maneno](/developers/docs/oracles/) hupata taarifa nje ya mnyororo na kuituma kwenye mnyororo ili mikataba-erevu itumie. Ukiwa na maneno, unaweza kubuni mikataba mahiri ambayo inashirikiana na mifumo ya nje ya mnyororo, kama vile masoko ya mitaji, na kupanua matumizi yao kwa kiasi kikubwa. + +Lakini ikiwa chumba cha ndani kimeharibika na kutuma taarifa zisizo sahihi kwenye mnyororo, mikataba mahiri itatekelezwa kulingana na maingizo yenye makosa, ambayo yanaweza kusababisha matatizo. Huu ndio msingi wa "tatizo la chanzo cha data cha nje", ambalo linahusu kazi ya kuhakikisha habari kutoka kwa chumba cha kuzuia kiambajengo ni sahihi, ya kisasa na ya wakati. + +Hoja inayohusiana na usalama ni kutumia oracle ya onchain, kama vile ubadilishanaji wa madaraka, ili kupata bei halisi ya mali. Mifumo ya ukopeshaji katika tasnia ya [fedha zilizogatuliwa (DeFi)](/defi/) mara nyingi hufanya hivi ili kubaini thamani ya dhamana ya mtumiaji ili kubaini ni kiasi gani wanaweza kukopa. + +Bei za DEX mara nyingi huwa sahihi, hasa kutokana na wasuluhishi kurejesha usawa katika masoko. Hata hivyo, zinaweza kubadilishwa, hasa ikiwa chumba cha ndani cha mnyororo hukokotoa bei za vipengee kulingana na mifumo ya kihistoria ya biashara (kama kawaida). + +Kwa mfano, mshambulizi anaweza kusukuma bei ya bidhaa kwa njia isiyo halali kwa kuchukua mkopo wa haraka kabla ya kuingiliana na mkataba wako wa ukopeshaji. Kuuliza DEX kwa bei ya kipengee kunaweza kurudisha thamani ya juu kuliko ya kawaida (kutokana na hitaji kubwa la mvamizi la "kununua" la kipengee), na kuwaruhusu kukopa zaidi ya inavyopaswa. "Mashambulizi ya mkopo wa flash" kama hayo yametumiwa kutumia utegemezi wa maneno ya bei kati ya programu za DeFi, na kugharimu itifaki za mamilioni ya pesa zilizopotea. + +##### Jinsi ya kuzuia udanganyifu wa oracle + +Sharti la chini kabisa la [kuepuka udanganyifu wa oracle](https://www.cyfrin.io/blog/price-oracle-manipultion-attacks-with-examples) ni kutumia mtandao wa oracle uliogatuliwa unaouliza taarifa kutoka vyanzo vingi ili kuepuka sehemu moja ya kushindwa. Mara nyingi, chanzo cha data cha nje kilichotawanywa huwa na motisha za kiuchumi za kikriptomito ili kuhimiza nodi za oracle kuripoti habari sahihi, na kuzifanya kuwa salama zaidi kuliko chanzo cha data cha kati. + +Ikiwa unapanga kuuliza chanzo cha data cha ndani ya mnyororo kwa bei za mali, zingatia kutumia ile inayotekeleza utaratibu wa wastani wa bei uliopimwa kwa wakati (TWAP). Oracle ya [TWAP](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles) huuliza bei ya mali kwa nyakati mbili tofauti (ambazo unaweza kurekebisha) na kukokotoa bei ya papo hapo kulingana na wastani uliopatikana. Kuchagua muda mrefu hulinda itifaki yako dhidi ya udanganyifu wa bei kwa kuwa maagizo makubwa yaliyotekelezwa hivi majuzi hayawezi kuathiri bei za mali. + +## Rasilimali za usalama wa mkataba-erevu kwa wasanidi programu {#smart-contract-security-resources-for-developers} + +### Zana za kuchambua mikataba-erevu na kuthibitisha usahihi wa msimbo {#code-analysis-tools} + +- **[Zana na maktaba za upimaji](/developers/docs/smart-contracts/testing/#testing-tools-and-libraries)** - _Mkusanyiko wa zana na maktaba za kiwango cha tasnia za kufanya majaribio ya kitengo, uchambuzi tuli, na uchambuzi unaobadilika kwenye mikataba-erevu._ + +- **[Zana za uthibitishaji rasmi](/developers/docs/smart-contracts/formal-verification/#formal-verification-tools)** - _Zana za kuthibitisha usahihi wa utendaji katika mikataba-erevu na kuangalia kanuni zisizobadilika._ + +- **[Huduma za ukaguzi wa mkataba-erevu](/developers/docs/smart-contracts/testing/#smart-contract-auditing-services)** - _Orodha ya mashirika yanayotoa huduma za ukaguzi wa mkataba-erevu kwa miradi ya maendeleo ya Ethereum._ + +- **[Mifumo ya zawadi za mdudu](/developers/docs/smart-contracts/testing/#bug-bounty-platforms)** - _Mifumo ya kuratibu zawadi za mdudu na kuthawabisha ufichuzi wa kuwajibika wa udhaifu muhimu katika mikataba-erevu._ + +- **[Kikagua Uma](https://forkchecker.hashex.org/)** - _Zana ya mtandaoni isiyolipishwa ya kuangalia taarifa zote zinazopatikana kuhusu mkataba uliogawanywa._ + +- **[Kisimbaji cha ABI](https://abi.hashex.org/)** - _Huduma ya mtandaoni isiyolipishwa ya kusimba vitendaji vya mkataba wako wa Solidity na hoja za ujenzi._ + +- **[Aderyn](https://github.com/Cyfrin/aderyn)** - _Kichanganuzi Tuli cha Solidity, kinachopitia Miti ya Sintaksia Dhahania (AST) ili kubainisha udhaifu unaoshukiwa na kuchapisha masuala katika umbizo la markdown linalotumika kwa urahisi._ + +### Zana za ufuatiliaji wa mikataba-erevu {#smart-contract-monitoring-tools} + +- **[Arifa za Wakati Halisi za Tenderly](https://tenderly.co/monitoring)** - _Zana ya kupata arifa za wakati halisi wakati matukio yasiyo ya kawaida au yasiyotarajiwa yanapotokea kwenye mikataba yako erevu au mikoba._ + +### Zana za usimamizi salama wa mikataba-erevu {#smart-contract-administration-tools} + +- **[Safe](https://safe.global/)** - _Mkoba wa mkataba-erevu unaoendeshwa kwenye Ethereum unaohitaji idadi ya chini ya watu kuidhinisha muamala kabla haujatokea (M-of-N)._ + +- **[OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/5.x/)** - _Maktaba za mikataba za kutekeleza vipengele vya kiutawala, ikiwa ni pamoja na umiliki wa mkataba, uboreshaji, vidhibiti vya ufikiaji, utawala, uwezo wa kusitishwa, na zaidi._ + +### Huduma za ukaguzi wa mkataba-erevu {#smart-contract-auditing-services} + +- **[ConsenSys Diligence](https://diligence.consensys.io/)** - _Huduma ya ukaguzi wa mkataba-erevu inayosaidia miradi katika mfumo mzima wa mnyororo wa bloku kuhakikisha itifaki zao ziko tayari kwa uzinduzi na zimejengwa ili kuwalinda watumiaji._ + +- **[CertiK](https://www.certik.com/)** - _Kampuni ya usalama ya mnyororo wa bloku inayoanzisha matumizi ya teknolojia ya kisasa ya Uthibitishaji rasmi kwenye mikataba-erevu na mitandao ya mnyororo wa bloku._ + +- **[Trail of Bits](https://www.trailofbits.com/)** - _Kampuni ya usalama wa mtandao inayochanganya utafiti wa usalama na mtazamo wa mshambuliaji ili kupunguza hatari na kuimarisha msimbo._ + +- **[PeckShield](https://peckshield.com/)** - _Kampuni ya usalama ya mnyororo wa bloku inayotoa bidhaa na huduma kwa ajili ya usalama, faragha, na utumiaji wa mfumo mzima wa mnyororo wa bloku._ + +- **[QuantStamp](https://quantstamp.com/)** - _Huduma ya ukaguzi inayowezesha upitishaji mkuu wa teknolojia ya mnyororo wa bloku kupitia huduma za usalama na tathmini ya hatari._ + +- **[OpenZeppelin](https://www.openzeppelin.com/security-audits)** - _Kampuni ya usalama wa mkataba-erevu inayotoa ukaguzi wa usalama kwa mifumo iliyogatuliwa._ + +- **[Runtime Verification](https://runtimeverification.com/)** - _Kampuni ya usalama inayobobea katika uundaji rasmi na uthibitishaji wa mikataba-erevu._ + +- **[Hacken](https://hacken.io)** - _Mkaguzi wa usalama wa mtandao wa Web3 anayeleta mbinu ya 360-degree kwa usalama wa mnyororo wa bloku._ + +- **[Nethermind](https://www.nethermind.io/smart-contract-audits)** - _Huduma za ukaguzi za Solidity na Cairo, zinazohakikisha uadilifu wa mikataba-erevu na usalama wa watumiaji kote Ethereum na Starknet._ + +- **[HashEx](https://hashex.org/)** - _HashEx inazingatia ukaguzi wa mnyororo wa bloku na mkataba-erevu ili kuhakikisha usalama wa sarafu za kidigitali, ikitoa huduma kama vile maendeleo ya mkataba-erevu, upimaji wa kupenya, ushauri wa mnyororo wa bloku._ + +- **[Code4rena](https://code4rena.com/)** - _Jukwaa la ukaguzi shindani linalowapa motisha wataalam wa usalama wa mkataba-erevu kutafuta udhaifu na kusaidia kufanya web3 iwe salama zaidi._ + +- **[CodeHawks](https://codehawks.com/)** - _Jukwaa la ukaguzi shindani linaloandaa mashindano ya ukaguzi wa mikataba-erevu kwa watafiti wa usalama._ + +- **[Cyfrin](https://cyfrin.io)** - _Nguvu ya usalama ya Web3, inayokuza usalama wa crypto kupitia bidhaa na huduma za ukaguzi wa mkataba-erevu._ + +- **[ImmuneBytes](https://immunebytes.com/smart-contract-audit/)** - _Kampuni ya usalama ya Web3 inayotoa ukaguzi wa usalama kwa mifumo ya mnyororo wa bloku kupitia timu ya wakaguzi wenye uzoefu na zana bora zaidi._ + +- **[Oxorio](https://oxor.io/)** - _Ukaguzi wa mikataba-erevu na huduma za usalama za mnyororo wa bloku zenye utaalamu katika EVM, Solidity, ZK, teknolojia ya minyororo-tofauti kwa kampuni za crypto na miradi ya DeFi._ + +- **[Inference](https://inference.ag/)** - _Kampuni ya ukaguzi wa usalama, iliyobobea katika ukaguzi wa mkataba-erevu kwa minyororo ya bloku inayotegemea EVM. Shukrani kwa wakaguzi wake waliobobea, wanatambua matatizo yanayoweza kutokea na kupendekeza njia zinazoweza kuchukuliwa ili kuyasuluhisha kabla ya kutumwa._ + +### Mifumo ya zawadi za mdudu {#bug-bounty-platforms} + +- **[Immunefi](https://immunefi.com/)** - _Jukwaa la zawadi za mdudu kwa mikataba-erevu na miradi ya DeFi, ambapo watafiti wa usalama hupitia msimbo, hufichua udhaifu, hulipwa, na kufanya crypto iwe salama zaidi._ + +- **[HackerOne](https://www.hackerone.com/)** - _Jukwaa la uratibu wa udhaifu na zawadi za mdudu linalounganisha biashara na wapimaji wa kupenya na watafiti wa usalama wa mtandao._ + +- **[HackenProof](https://hackenproof.com/)** - _Jukwaa la kitaalamu la zawadi za mdudu kwa miradi ya crypto (DeFi, Mikataba-erevu, Mikoba, CEX na zaidi), ambapo wataalamu wa usalama hutoa huduma za uchunguzi na watafiti hulipwa kwa ripoti za mdudu zinazofaa na zilizothibitishwa._ + +- **[Sherlock](https://www.sherlock.xyz/)** - _Mtoa dhamana katika Web3 kwa usalama wa mkataba-erevu, na malipo kwa wakaguzi yanasimamiwa kupitia mikataba-erevu ili kuhakikisha kwamba mende husika zinalipwa kwa haki._ + +- **[CodeHawks](https://www.codehawks.com/)** - _Jukwaa la ushindani la zawadi za mdudu ambapo wakaguzi hushiriki katika mashindano na changamoto za usalama, na (hivi karibuni) katika ukaguzi wao wa kibinafsi._ + +### Machapisho ya udhaifu na unyonyaji unaojulikana wa mkataba-erevu {#common-smart-contract-vulnerabilities-and-exploits} + +- **[ConsenSys: Mashambulizi Yanayojulikana ya Mkataba-erevu](https://consensysdiligence.github.io/smart-contract-best-practices/attacks/)** - _Maelezo rahisi kwa wanaoanza kuhusu udhaifu muhimu zaidi wa mkataba, na msimbo wa sampuli kwa visa vingi._ + +- **[Rejesta ya SWC](https://swcregistry.io/)** - _Orodha iliyoratibiwa ya vitu vya Uorodheshaji wa Udhaifu wa Kawaida (CWE) vinavyotumika kwa mikataba-erevu ya Ethereum._ + +- **[Rekt](https://rekt.news/)** - _Chapisho linalosasishwa mara kwa mara la udukuzi na unyonyaji wa hali ya juu wa crypto, pamoja na ripoti za kina za baada ya tukio._ + +### Changamoto za kujifunza usalama wa mkataba-erevu {#challenges-for-learning-smart-contract-security} + +- **[Awesome BlockSec CTF](https://github.com/blockthreat/blocksec-ctfs)** - _Orodha iliyoratibiwa ya michezo ya vita ya usalama wa mnyororo wa bloku, changamoto, na mashindano ya [Kamata Bendera](https://www.webopedia.com/definitions/ctf-event/amp/) na maelezo ya suluhisho._ + +- **[Damn Vulnerable DeFi](https://www.damnvulnerabledefi.xyz/)** - _Mchezo wa vita wa kujifunza usalama wa mashambulizi wa mikataba-erevu ya DeFi na kujenga ujuzi katika uwindaji wa mende na ukaguzi wa usalama._ + +- **[Ethernaut](https://ethernaut.openzeppelin.com/)** - _Mchezo wa vita unaotegemea Web3/Solidity ambapo kila ngazi ni mkataba-erevu unaohitaji 'kudukuliwa'._ + +- **[HackenProof x HackTheBox](https://app.hackthebox.com/tracks/HackenProof-Track)** - _Changamoto ya udukuzi wa mkataba-erevu, iliyowekwa katika matukio ya njozi. Kukamilisha changamoto kwa mafanikio pia kunatoa ufikiaji kwa programu ya kibinafsi ya zawadi za mdudu._ + +### Mbinu bora za kulinda mikataba-erevu {#smart-contract-security-best-practices} + +- **[ConsenSys: Mbinu Bora za Usalama wa Mkataba-erevu wa Ethereum](https://consensys.github.io/smart-contract-best-practices/)** - _Orodha pana ya miongozo ya kulinda mikataba-erevu ya Ethereum._ + +- **[Nascent: Zana Rahisi ya Usalama](https://github.com/nascentxyz/simple-security-toolkit)** - _Mkusanyiko wa miongozo na orodha za ukaguzi zinazozingatia usalama kwa maendeleo ya mkataba-erevu._ + +- **[Miundo ya Solidity](https://fravoll.github.io/solidity-patterns/)** - _Mkusanyiko muhimu wa miundo salama na mbinu bora za lugha ya programu ya mkataba-erevu Solidity._ + +- **[Nyaraka za Solidity: Mambo ya Kuzingatia ya Usalama](https://docs.soliditylang.org/en/v0.8.16/security-considerations.html)** - _Miongozo ya kuandika mikataba-erevu salama na Solidity._ + +- **[Kiwango cha Uthibitishaji wa Usalama wa Mkataba-erevu](https://github.com/securing/SCSVS)** - _Orodha ya ukaguzi ya sehemu kumi na nne iliyoundwa ili kusawazisha usalama wa mikataba-erevu kwa wasanidi programu, wasanifu, wakaguzi wa usalama na wachuuzi._ + +- **[Jifunze Usalama na Ukaguzi wa Mkataba-erevu](https://updraft.cyfrin.io/courses/security)** - _Kozi ya mwisho ya usalama na ukaguzi wa mkataba-erevu, iliyoundwa kwa wasanidi programu wa mikataba-erevu wanaotaka kuboresha mbinu zao bora za usalama na kuwa watafiti wa usalama._ + +### Mafunzo kuhusu usalama wa mkataba-erevu {#tutorials-on-smart-contract-security} + +- [Jinsi ya kuandika mikataba-erevu salama](/developers/tutorials/secure-development-workflow/) + +- [Jinsi ya kutumia Slither kupata mende za mkataba-erevu](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) + +- [Jinsi ya kutumia Manticore kupata mende za mkataba-erevu](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) + +- [Miongozo ya usalama wa mkataba-erevu](/developers/tutorials/smart-contract-security-guidelines/) + +- [Jinsi ya kuunganisha kwa usalama mkataba wako wa tokeni na tokeni holela](/developers/tutorials/token-integration-checklist/) + +- [Cyfrin Updraft - Kozi kamili ya usalama na ukaguzi wa mikataba-erevu](https://updraft.cyfrin.io/courses/security) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/testing/index.md b/public/content/translations/sw/developers/docs/smart-contracts/testing/index.md new file mode 100644 index 00000000000..784519a0c52 --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/testing/index.md @@ -0,0 +1,310 @@ +--- +title: Kujaribu mikataba ya mahiri +description: Muhtasari wa mbinu na mazingatio ya kupima mikataba-erevu ya Ethereum. +lang: sw +--- + +Minyororo ya kiambajengo cha umma kama vile Ethereum hakiwezi kubadilika, hivyo kufanya iwe vigumu kubadilisha msimbo wa mikataba mahiri baada ya kutumwa. [Mifumo ya kuboresha mikataba](/developers/docs/smart-contracts/upgrading/) kwa ajili ya kufanya "maboresho ya mtandaoni" ipo, lakini hii ni vigumu kuitekeleza na inahitaji makubaliano ya kijamii. Zaidi ya hayo, sasisho linaweza kurekebisha hitilafu _baada_ ya kugunduliwa—ikiwa mshambulizi atagundua udhaifu kwanza, mkataba wako-erevu uko katika hatari ya kutumiwa vibaya. + +Kwa sababu hizi, kupima mikataba-erevu kabla ya [kupeleka](/developers/docs/smart-contracts/deploying/) kwenye Mtandao Mkuu ni sharti la chini kabisa kwa [usalama](/developers/docs/smart-contracts/security/). Kuna mbinu nyingi za kupima mikataba na kutathmini usahihi wa kanuni, unachochagua kunategemea mahitaji yako. Hata hivyo kundi la majaribio linaloundwa na zana na mbinu tofauti ni bora kwa kupata dosari ndogo na kuu za usalama katika msimbo wa mkataba. + +## Mahitaji ya awali {#prerequisites} + +Ukurasa huu unaelezea jinsi ya kupima mikataba-erevu kabla ya kuipeleka kwenye mtandao wa Ethereum. Inachukulia kuwa unafahamu [mikataba-erevu](/developers/docs/smart-contracts/). + +## Upimaji wa mkataba-erevu ni nini? {#what-is-smart-contract-testing} + +Majaribio ya mkataba mahiri ni mchakato wa kuthibitisha kuwa msimbo wa mkataba mahiri hufanya kazi inavyotarajiwa. Majaribio ni muhimu kwa kuthibitisha kama mkataba mahiri unakidhi mahitaji ya kutegemewa, utumiaji na usalama. + +Ingawa mbinu hutofautiana, mbinu nyingi za majaribio zinahitaji kutekeleza mkataba mahiri na sampuli ndogo ya data inayotarajiwa kushughulikia. Ikiwa mkataba utatoa matokeo sahihi kwa data ya sampuli, inachukuliwa kuwa unafanya kazi ipasavyo. Zana nyingi za upimaji hutoa rasilimali za kuandika na kutekeleza [kesi za majaribio](https://en.m.wikipedia.org/wiki/Test_case) ili kuangalia kama utekelezaji wa mikataba unalingana na matokeo yanayotarajiwa. + +### Kwa nini ni muhimu kupima mikataba-erevu? {#importance-of-testing-smart-contracts} + +Kwa kuwa mikataba-erevu mara nyingi hudhibiti mali za kifedha za thamani ya juu, makosa madogo ya programu yanaweza na mara nyingi husababisha [hasara kubwa kwa watumiaji](https://rekt.news/leaderboard/). Majaribio thabiti yanaweza, hata hivyo, kukusaidia kugundua kasoro na matatizo katika msimbo mahiri wa mkataba na kuyarekebisha kabla ya kuzindua kwenye Mainnet. + +Ingawa inawezekana kuboresha mkataba ikiwa hitilafu itagunduliwa, maboresho ni magumu na yanaweza [kusababisha makosa](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/) ikiwa hayatashughulikiwa ipasavyo. Kuboresha mkataba kunakanusha zaidi kanuni ya kutobadilika na kubebea watumiaji mawazo ya ziada ya uaminifu. Kinyume chake, mpango wa kina wa kupima mkataba wako hupunguza hatari za usalama wa mkataba na kupunguza hitaji la kufanya maboresho changamano baada ya kupeleka. + +## Mbinu za kupima mikataba-erevu {#methods-for-testing-smart-contracts} + +Mbinu za kupima mikataba-erevu ya Ethereum ziko chini ya kategoria mbili pana: **upimaji wa kiotomatiki** na **upimaji wa mikono**. Majaribio ya kiotomatiki na majaribio ya mikono hutoa manufaa ya kipekee na usuluhishi, lakini unaweza kuchanganya zote mbili ili kuunda mpango thabiti wa kuchanganua mikataba yako. + +### Upimaji wa kiotomatiki {#automated-testing} + +Jaribio la kiotomatiki hutumia zana zinazokagua kiotomatiki msimbo mahiri wa mikataba kwa hitilafu katika utekelezaji. Faida ya upimaji wa kiotomatiki hutokana na kutumia [skripti](https://www.techtarget.com/whatis/definition/script?amp=1) kuongoza tathmini ya utendakazi wa mkataba. Majaribio ya hati yanaweza kuratibiwa kufanya kazi mara kwa mara bila uingiliaji kati wa binadamu, hivyo kufanya majaribio ya kiotomatiki kuwa na ufanisi zaidi kuliko mbinu za mikono za majaribio. + +Jaribio la kiotomatiki ni muhimu sana wakati majaribio yanarudiwa na kuchukua muda; ngumu kutekeleza kwa mikono; hushambuliwa na makosa ya kibinadamu; au kuhusisha kutathmini kazi muhimu za mkataba. Lakini zana za kupima za kiotomatiki zinaweza kuwa na hasara—zinaweza kukosa hitilafu fulani na kutoa [chanya za uwongo](https://www.contrastsecurity.com/glossary/false-positive) nyingi. Hivyo, kuoanisha upimaji wa kiotomatiki na upimaji wa mikono kwa mikataba-erevu ni bora. + +### Upimaji wa mikono {#manual-testing} + +Uthibitishaji wa mikono linasaidiwa na binadamu na linahusisha kutekeleza kila kesi ya jaribio katika kundi lako la majaribio moja baada ya jingine wakati wa kuchanganua usahihi wa mikataba mahiri. Hii ni tofauti na majaribio ya kiotomatiki ambapo unaweza kufanya majaribio mengi ya pekee kwenye mkataba kwa wakati mmoja na kupata ripoti inayoonyesha majaribio yote yaliyofeli na kufaulu. + +Jaribio la kibinafsi linaweza kufanywa na mtu mmoja kufuatia mpango wa jaribio ulioandikwa ambao unashughulikia hali tofauti za majaribio. Unaweza pia kuwa na watu au vikundi vingi kushirikiana na mkataba mzuri katika kipindi fulani kama sehemu ya majaribio ya mikono. Wanaojaribu watalinganisha tabia halisi ya mkataba dhidi ya tabia inayotarajiwa, kuashiria tofauti yoyote kama kosa. + +Upimaji wa mwongozo unaofaa unahitaji rasilimali nyingi (ustadi, muda, pesa, na juhudi), na inawezekana—kutokana na makosa ya kibinadamu—kukosa makosa fulani wakati wa kufanya majaribio. Lakini uthibitishaji kwa mkono kunaweza pia kuwa na manufaa—kwa mfano, mtu anayejaribu (k.m., mkaguzi) anaweza kutumia angavu kutambua matukio makali ambayo chombo cha kupima kiotomatiki kinaweza kukosa. + +## Upimaji wa kiotomatiki kwa mikataba-erevu {#automated-testing-for-smart-contracts} + +### Upimaji wa vitengo {#unit-testing-for-smart-contracts} + +Upimaji wa kitengo hutathmini utendaji kazi wa mkataba kando na hukagua kuwa kila sehemu inafanya kazi kwa usahihi. Majaribio mazuri ya vipimo yanapaswa kuwa rahisi, ya haraka na kutoa wazo wazi la nini kilienda vibaya ikiwa majaribio hayatafaulu. + +Majaribio ya vipimo ni muhimu kwa kuangalia kuwa chaguo za kukokotoa hurejesha thamani zinazotarajiwa na kwamba hifadhi ya mkataba inaboreshashwa ipasavyo baada ya kutekeleza utendaji kazi. Zaidi ya hayo, kufanya majaribio ya kitengo baada ya kufanya mabadiliko kwa msingi wa mikataba huhakikisha kuongeza mantiki mpya hakuleti makosa. Hapa chini kuna miongozo ya kufanya upimaji wa vitengo kwa ufanisi: + +#### Miongozo ya upimaji wa vitengo vya mikataba-erevu {#unit-testing-guidelines} + +##### 1. Elewa mantiki ya biashara na mtiririko wa kazi wa mikataba yako + +Kabla ya kuandika uthibitishaji wa vipimo, inasaidia kujua ni utendaji gani ambao mkataba mahiri hutoa na jinsi watumiaji watakavyofikia na kutumia vipengele hivyo. Hii ni muhimu hasa kwa kufanya [majaribio ya njia ya furaha](https://en.m.wikipedia.org/wiki/Happy_path) ambayo huamua kama utendakazi katika mkataba hurejesha matokeo sahihi kwa ingizo halali za watumiaji. Tutaeleza dhana hii kwa kutumia mfano huu (uliofupishwa) wa [mkataba wa mnada](https://docs.soliditylang.org/en/v0.8.17/solidity-by-example.html?highlight=Auction%20contract#simple-open-auction) + +```solidity +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); + } +} +``` + +Huu ni mkataba rahisi wa mnada ulioundwa kupokea zabuni wakati wa kipindi cha kutoa zabuni. Ikiwa `highestBid` itaongezeka, mzabuni wa awali aliyetoa zabuni ya juu zaidi hupokea pesa zake; mara tu kipindi cha zabuni kinapoisha, `beneficiary` huita mkataba ili kupata pesa zake. + +Upimaji wa vitengo kwa mkataba kama huu ungejumuisha utendakazi tofauti ambao mtumiaji anaweza kuita anapoingiliana na mkataba. Mfano ungekuwa upimaji wa kitengo unaoangalia ikiwa mtumiaji anaweza kuweka zabuni wakati mnada unaendelea (yaani, wito kwa `bid()` hufaulu) au unaoangalia ikiwa mtumiaji anaweza kuweka zabuni ya juu kuliko `highestBid` ya sasa. + +Kuelewa mtiririko wa kazi wa utendaji wa mkataba pia husaidia katika kuandika upimaji wa vitengo unaoangalia ikiwa utekelezaji unakidhi mahitaji. Kwa mfano, mkataba wa mnada unabainisha kuwa watumiaji hawawezi kuweka zabuni wakati mnada umeisha (yaani, wakati `auctionEndTime` ni chini kuliko `block.timestamp`). Kwa hivyo, msanidi programu anaweza kufanya upimaji wa kitengo unaoangalia ikiwa wito kwa utendakazi wa `bid()` hufaulu au hushindwa wakati mnada umeisha (yaani, wakati `auctionEndTime` > `block.timestamp`). + +##### 2. Tathmini dhana zote zinazohusiana na utekelezaji wa mkataba + +Ni muhimu kuweka kumbukumbu ya dhana zozote kuhusu utekelezaji wa mkataba na kuandika upimaji wa vitengo ili kuthibitisha uhalali wa dhana hizo. Mbali na kutoa ulinzi dhidi ya utekelezaji usiotarajiwa, madai ya upimaji yanakulazimisha kufikiria juu ya shughuli ambazo zinaweza kuvunja mfumo wa usalama wa mkataba-erevu. Kidokezo muhimu ni kwenda mbali zaidi ya "majaribio ya mtumiaji mwenye furaha" na kuandika majaribio hasi yanayoangalia ikiwa utendakazi unashindwa kwa ingizo zisizo sahihi. + +Mifumo mingi ya upimaji wa vitengo inakuruhusu kuunda madai—kauli rahisi zinazoeleza kile mkataba unaweza na hauwezi kufanya—na kufanya majaribio kuona ikiwa madai hayo yanadumu chini ya utekelezaji. Msanidi programu anayeshughulikia mkataba wa mnada ulioelezwa hapo awali anaweza kutoa madai yafuatayo kuhusu tabia yake kabla ya kufanya majaribio hasi: + +- Watumiaji hawawezi kuweka zabuni wakati mnada umeisha au haujaanza. + +- Mkataba wa mnada hurejea nyuma ikiwa zabuni iko chini ya kiwango kinachokubalika. + +- Watumiaji wanaoshindwa kushinda zabuni hurejeshewa fedha zao + +**Kumbuka**: Njia nyingine ya kupima dhana ni kuandika majaribio yanayoanzisha [virekebishaji vya utendakazi](https://docs.soliditylang.org/en/v0.8.16/contracts.html#function-modifiers) katika mkataba, hasa kauli za `require`, `assert`, na `if…else`. + +##### 3. Pima ufikiaji wa msimbo + +[Ufikiaji wa msimbo](https://en.m.wikipedia.org/wiki/Code_coverage) ni kipimo cha upimaji kinachofuatilia idadi ya matawi, mistari, na kauli katika msimbo wako zilizotekelezwa wakati wa majaribio. Majaribio yanapaswa kuwa na ufikiaji mzuri wa msimbo ili kupunguza hatari ya udhaifu ambao haujapimwa. Bila ufikiaji wa kutosha, unaweza kudhani kimakosa kuwa mkataba wako ni salama kwa sababu majaribio yote yamefaulu, wakati udhaifu bado upo katika njia za msimbo ambazo hazijapimwa. Hata hivyo, kurekodi ufikiaji wa juu wa msimbo kunatoa uhakikisho kwamba kauli/utendakazi wote katika mkataba-erevu vilipimwa vya kutosha kwa usahihi. + +##### 4. Tumia mifumo ya upimaji iliyoendelezwa vizuri + +Ubora wa zana zinazotumika katika kufanya upimaji wa vitengo kwa mikataba-erevu yako ni muhimu sana. Mfumo bora wa upimaji ni ule unaotunzwa mara kwa mara; hutoa vipengele muhimu (k.m., uwezo wa kukata kumbukumbu na kutoa ripoti); na lazima uwe umetumiwa sana na kuchunguzwa na wasanidi programu wengine. + +Mifumo ya upimaji wa vitengo kwa mikataba-erevu ya Solidity huja katika lugha tofauti (zaidi JavaScript, Python, na Rust). Angalia baadhi ya miongozo hapa chini kwa taarifa juu ya jinsi ya kuanza kufanya upimaji wa vitengo na mifumo tofauti ya upimaji: + +- **[Kufanya upimaji wa vitengo na Brownie](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** +- **[Kufanya upimaji wa vitengo na Foundry](https://book.getfoundry.sh/forge/writing-tests)** +- **[Kufanya upimaji wa vitengo na Waffle](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)** +- **[Kufanya upimaji wa vitengo na Remix](https://remix-ide.readthedocs.io/en/latest/unittesting.html#write-tests)** +- **[Kufanya upimaji wa vitengo na Ape](https://docs.apeworx.io/ape/stable/userguides/testing.html)** +- **[Kufanya upimaji wa vitengo na Hardhat](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** +- **[Kufanya upimaji wa vitengo na Wake](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** + +### Upimaji wa ujumuishaji {#integration-testing-for-smart-contracts} + +Wakati uthibitishaji wa vipimo hutatua kazi za mkataba kwa kutengwa, majaribio ya ujumuishaji hutathmini vipengele vya mkataba mahiri kwa ujumla. Jaribio la ujumuishaji linaweza kugundua matatizo yanayotokana na simu za mkataba mtambuka au mwingiliano kati ya utendakazi tofauti katika mkataba huo mahiri. Kwa mfano, majaribio ya ujumuishaji yanaweza kusaidia kuangalia kama mambo kama [urithi](https://docs.soliditylang.org/en/v0.8.12/contracts.html#inheritance) na sindano ya utegemezi hufanya kazi ipasavyo. + +Jaribio la ujumuishaji ni muhimu ikiwa mkataba wako utakubali usanifu wa kawaida au miingiliano na mikataba mingine ya onchain wakati wa utekelezaji. Njia moja ya kufanya majaribio ya ujumuishaji ni [kufanya uma mnyororo wa bloku](/glossary/#fork) katika urefu maalum (kwa kutumia zana kama [Forge](https://book.getfoundry.sh/forge/fork-testing) au [Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks) na kuiga mwingiliano kati ya mkataba wako na mikataba iliyopelekwa. + +Kiambajengo kiliyogawanyika itafanya kazi sawa na Mainnet na kuwa na akaunti na majimbo na salio zinazohusiana. Lakini inafanya kazi tu kama mazingira ya maendeleo ya ndani yaliyowekwa mchanga, kumaanisha kuwa hutahitaji ETH halisi kwa shughuli, kwa mfano, wala mabadiliko yako hayataathiri itifaki halisi ya Ethereum. + +### Upimaji unaozingatia sifa {#property-based-testing-for-smart-contracts} + +Upimaji kulingana na mali ni mchakato wa kuangalia kama mkataba mzuri unakidhi baadhi ya mali iliyobainishwa. Sifa huthibitisha ukweli kuhusu tabia ya mkataba ambao unatarajiwa kubaki kuwa kweli katika hali tofauti-mfano wa mali mahiri ya mkataba unaweza kuwa "Shughuli za hesabu katika mkataba kamwe hazifuriki au hazifukiwi." + +**Uchambuzi tuli** na **uchambuzi wa nguvu** ni mbinu mbili za kawaida za kutekeleza upimaji unaozingatia sifa, na zote mbili zinaweza kuthibitisha kuwa msimbo wa programu (mkataba-erevu katika kesi hii) unakidhi sifa fulani iliyoainishwa awali. Baadhi ya zana za kupima kulingana na mali huja na sheria zilizobainishwa mapema kuhusu sifa za mkataba zinazotarajiwa na kuangalia msimbo dhidi ya sheria hizo, huku zingine hukuruhusu kuunda sifa maalum kwa mkataba mzuri. + +#### Uchambuzi tuli {#static-analysis} + +Kichanganuzi tuli huchukua msimbo wa chanzo wa mkataba mahiri kama ingizo na matokeo ya matokeo yanayotangaza kama mkataba unakidhi mali au la. Tofauti na uchanganuzi unaobadilika, uchanganuzi tuli haujumuishi kutekeleza mkataba ili kuuchanganua kwa usahihi. Uchanganuzi thabiti badala yake unasababu kuhusu njia zote zinazowezekana ambazo mkataba mahiri unaweza kuchukua wakati wa utekelezaji (yaani, kwa kuchunguza muundo wa msimbo wa chanzo ili kubaini kitakachomaanisha kwa utendakazi wa mikataba wakati wa utekelezaji). + +[Linting](https://www.perforce.com/blog/qac/what-is-linting) na [upimaji tuli](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis) ni mbinu za kawaida za kufanya uchambuzi tuli kwenye mikataba. Zote zinahitaji kuchanganua uwakilishi wa kiwango cha chini wa utekelezaji wa mikataba kama vile [miti ya sintaksia dhahania](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree) na [grafu za mtiririko wa udhibiti](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/) zinazotolewa na mkusanyaji. + +Katika hali nyingi, uchanganuzi tuli ni muhimu kwa kugundua maswala ya usalama kama vile matumizi ya miundo isiyo salama, hitilafu za sintaksia, au ukiukaji wa viwango vya usimbaji katika msimbo wa mikataba. Hata hivyo, vichanganuzi tuli vinajulikana kwa ujumla kutokuwa sawa katika kugundua udhaifu mkubwa zaidi, na vinaweza kutoa chanya nyingi za uwongo. + +#### Uchambuzi wa nguvu {#dynamic-analysis} + +Uchambuzi wa nguvu hutoa ingizo za ishara (k.m., katika [utekelezaji wa ishara](https://en.m.wikipedia.org/wiki/Symbolic_execution)) au ingizo halisi (k.m., katika [fuzzing](https://owasp.org/www-community/Fuzzing)) kwa utendakazi wa mikataba-erevu ili kuona kama ufuatiliaji wowote wa utekelezaji unakiuka sifa maalum. Aina hii ya majaribio kulingana na mali hutofautiana na majaribio ya kitengo kwa kuwa kesi za majaribio hushughulikia hali nyingi na mpango hushughulikia uzalishaji wa kesi za majaribio. + +[Fuzzing](https://www.halborn.com/blog/post/what-is-fuzz-testing-fuzzing) ni mfano wa mbinu ya uchambuzi wa nguvu ya kuthibitisha sifa za kiholela katika mikataba-erevu. Fuzzer huomba utendakazi katika mkataba lengwa na tofauti za nasibu au zisizo na hitilafu za thamani iliyobainishwa ya ingizo. Iwapo mkataba mahiri utaingia katika hali ya hitilafu (k.m., ambapo madai hayatafaulu), tatizo hualamishwa na michango ambayo husababisha utekelezaji kuelekea njia hatarishi hutolewa katika ripoti. + +Fuzzing ni muhimu kwa kutathmini utaratibu mzuri wa uthibitishaji wa pembejeo za mikataba kwa kuwa utunzaji usiofaa wa pembejeo zisizotarajiwa kunaweza kusababisha utekelezaji usiotarajiwa na kutoa athari hatari. Aina hii ya upimaji unaozingatia sifa inaweza kuwa bora kwa sababu nyingi: + +1. **Kuandika kesi za majaribio kufunika hali nyingi ni ngumu.** Jaribio la sifa linahitaji tu uainishe tabia na anuwai ya data ili kujaribu tabia hiyo—programu huunda kesi za majaribio kiotomatiki kulingana na sifa iliyoainishwa. + +2. **Seti yako ya majaribio haiwezi kufunika vya kutosha njia zote zinazowezekana ndani ya programu.** Hata kwa ufikiaji wa 100%, inawezekana kukosa kesi za pembezoni. + +3. **Upimaji wa vitengo huthibitisha kuwa mkataba unatekelezwa kwa usahihi kwa data ya sampuli, lakini kama mkataba utatekelezwa kwa usahihi kwa ingizo nje ya sampuli bado haijulikani.** Majaribio ya sifa hutekeleza mkataba lengwa na tofauti nyingi za thamani ya ingizo ili kupata athari za utekelezaji zinazosababisha kushindwa kwa madai. Kwa hivyo, jaribio la mali hutoa hakikisho zaidi kwamba mkataba hutekelezwa kwa usahihi kwa darasa pana la data ya ingizo. + +### Miongozo ya kufanya upimaji unaozingatia sifa kwa mikataba-erevu {#running-property-based-tests} + +Kufanya upimaji unaozingatia sifa kwa kawaida huanza kwa kufafanua sifa (k.m., kutokuwepo kwa [mafuriko ya nambari kamili](https://github.com/ConsenSys/mythril/wiki/Integer-Overflow)) au mkusanyiko wa sifa ambazo unataka kuthibitisha katika mkataba-erevu. Unaweza pia kuhitaji kufafanua safu ya thamani ambazo programu inaweza kutoa data ya pembejeo za miamala wakati wa kuandika majaribio ya mali. + +Baada ya kupangwa ipasavyo, zana ya kupima mali itatekeleza utendakazi wako wa mikataba mahiri kwa ingizo zinazozalishwa bila mpangilio. Iwapo kuna ukiukaji wowote wa madai, unapaswa kupata ripoti iliyo na data thabiti ya ingizo ambayo inakiuka mali inayotathminiwa. Tazama baadhi ya miongozo hapa chini ili kuanza na kuendesha majaribio ya msingi wa mali kwa zana tofauti: + +- **[Uchambuzi tuli wa mikataba-erevu na Slither](https://github.com/crytic/slither)** +- **[Uchambuzi tuli wa mikataba-erevu na Wake](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** +- **[Upimaji unaozingatia sifa na Brownie](https://eth-brownie.readthedocs.io/en/stable/tests-hypothesis-property.html)** +- **[Kufanya fuzzing kwenye mikataba na Foundry](https://book.getfoundry.sh/forge/fuzz-testing)** +- **[Kufanya fuzzing kwenye mikataba na Echidna](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna#echidna-tutorial)** +- **[Kufanya fuzzing kwenye mikataba na Wake](https://ackeeblockchain.com/wake/docs/latest/testing-framework/fuzzing/)** +- **[Utekelezaji wa ishara wa mikataba-erevu na Manticore](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore#manticore-tutorial)** +- **[Utekelezaji wa ishara wa mikataba-erevu na Mythril](https://mythril-classic.readthedocs.io/en/master/tutorial.html)** + +## Upimaji wa mikono kwa mikataba-erevu {#manual-testing-for-smart-contracts} + +Upimaji wa mikono wa mikataba-erevu mara nyingi huja baadaye katika mzunguko wa maendeleo baada ya kufanya majaribio ya kiotomatiki. Aina hii ya upimaji hutathmini mkataba-erevu kama bidhaa moja iliyojumuishwa kikamilifu ili kuona ikiwa inafanya kazi kama ilivyoainishwa katika mahitaji ya kiufundi. + +### Kupima mikataba kwenye mnyororo wa bloku wa ndani {#testing-on-local-blockchain} + +Ingawa upimaji wa kiotomatiki unaofanywa katika mazingira ya maendeleo ya ndani unaweza kutoa taarifa muhimu za utatuzi, utataka kujua jinsi mkataba-erevu wako unavyofanya kazi katika mazingira ya uzalishaji. Hata hivyo, kupeleka kwenye mnyororo mkuu wa Ethereum kunasababisha ada za gesi—bila kusahau kwamba wewe au watumiaji wako mnaweza kupoteza pesa halisi ikiwa mkataba-erevu wako bado una hitilafu. + +Kupima mkataba wako kwenye mnyororo wa bloku wa ndani (pia unajulikana kama [mtandao wa maendeleo](/developers/docs/development-networks/)) ni mbadala unaopendekezwa badala ya kupima kwenye Mtandao Mkuu. Mnyororo wa bloku wa ndani ni nakala ya mnyororo wa bloku wa Ethereum unaoendeshwa ndani ya kompyuta yako ambao unaiga tabia ya safu ya utekelezaji ya Ethereum. Kwa hivyo, unaweza kupanga miamala ili kuingiliana na mkataba bila kupata gharama kubwa. + +Kuendesha mikataba kwenye mnyororo wa bloku wa ndani kunaweza kuwa muhimu kama aina ya upimaji wa ujumuishaji wa mikono. [Mikataba-erevu inaweza kutungwa kwa urahisi sana](/developers/docs/smart-contracts/composability/), ikikuruhusu kujumuika na itifaki zilizopo—lakini bado utahitaji kuhakikisha kuwa mwingiliano huo changamano wa kwenye mnyororo unatoa matokeo sahihi. + +[Zaidi kuhusu mitandao ya maendeleo.](/developers/docs/development-networks/) + +### Kupima mikataba kwenye testnet {#testing-contracts-on-testnets} + +Mtandao wa majaribio au testnet hufanya kazi sawa kabisa na Mtandao Mkuu wa Ethereum, isipokuwa kwamba hutumia ether (ETH) isiyo na thamani ya ulimwengu halisi. Kupeleka mkataba wako kwenye [testnet](/developers/docs/networks/#ethereum-testnets) kunamaanisha mtu yeyote anaweza kuingiliana nao (k.m., kupitia sehemu ya mbele ya mfumo mtawanyo wa kimamlaka) bila kuweka fedha hatarini. + +Aina hii ya upimaji wa mikono ni muhimu kwa kutathmini mtiririko wa mwisho-hadi-mwisho wa programu yako kutoka kwa mtazamo wa mtumiaji. Hapa, wajaribu wa beta wanaweza pia kufanya majaribio na kuripoti masuala yoyote na mantiki ya biashara ya mkataba na utendakazi wa jumla. + +Kupeleka kwenye testnet baada ya kupima kwenye mnyororo wa bloku wa ndani ni bora kwani ya kwanza iko karibu zaidi na tabia ya mashine halisi ya ethereum. Kwa hivyo, ni kawaida kwa miradi mingi ya asili ya Ethereum kupeleka mfumo mtawanyo wa kimamlaka kwenye testnet kutathmini utendaji wa mkataba-erevu chini ya hali za ulimwengu halisi. + +[Zaidi kuhusu testnet za Ethereum.](/developers/docs/development-networks/#public-beacon-testchains) + +## Upimaji dhidi ya uthibitishaji rasmi {#testing-vs-formal-verification} + +Ingawa upimaji husaidia kuthibitisha kuwa mkataba unarudisha matokeo yanayotarajiwa kwa baadhi ya ingizo za data, hauwezi kuthibitisha kwa uhakika vivyo hivyo kwa ingizo ambazo hazikutumika wakati wa majaribio. Kupima mkataba-erevu, kwa hivyo, hakuwezi kuhakikisha "usahihi wa kiutendaji" (yaani, hakuwezi kuonyesha kwamba programu inafanya kazi kama inavyotakiwa kwa seti _zote_ za thamani za ingizo). + +Uthibitishaji rasmi ni mbinu ya kutathmini usahihi wa programu kwa kuangalia kama mfumo rasmi wa programu unalingana na vipimo rasmi. Mfumo rasmi ni uwakilishi dhahania wa kihisabati wa programu, wakati vipimo rasmi vinafafanua sifa za programu (yaani, madai ya kimantiki kuhusu utekelezaji wa programu). + +Kwa sababu sifa zimeandikwa kwa maneno ya kihisabati, inawezekana kuthibitisha kuwa mfumo rasmi (wa kihisabati) wa mfumo unakidhi vipimo kwa kutumia kanuni za kimantiki za kuhitimisha. Kwa hivyo, zana za uthibitishaji rasmi zinasemekana kutoa 'uthibitisho wa kihisabati' wa usahihi wa mfumo. + +Tofauti na upimaji, uthibitishaji rasmi unaweza kutumika kuthibitisha utekelezaji wa mkataba-erevu unakidhi vipimo rasmi kwa utekelezaji _wote_ (yaani, hauna hitilafu) bila kuhitaji kuutekeleza kwa data ya sampuli. Hii haipunguzi tu muda unaotumika kufanya majaribio kadhaa ya vitengo, lakini pia ni bora zaidi katika kugundua udhaifu uliofichwa. Hata hivyo, mbinu za uthibitishaji rasmi ziko kwenye wigo kulingana na ugumu wao wa utekelezaji na manufaa. + +[Zaidi kuhusu uthibitishaji rasmi wa mikataba-erevu.](/developers/docs/smart-contracts/formal-verification) + +## Upimaji dhidi ya ukaguzi na zawadi za hitilafu {#testing-vs-audits-bug-bounties} + +Kama ilivyoelezwa, upimaji mkali mara chache unaweza kuhakikisha kutokuwepo kwa hitilafu katika mkataba; mbinu za uthibitishaji rasmi zinaweza kutoa uhakikisho wenye nguvu zaidi wa usahihi lakini kwa sasa ni ngumu kutumia na zinahusisha gharama kubwa. + +Bado, unaweza kuongeza zaidi uwezekano wa kugundua udhaifu wa mkataba kwa kupata ukaguzi huru wa msimbo. [Ukaguzi wa mikataba-erevu](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/) na [zawadi za hitilafu](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7) ni njia mbili za kuwafanya wengine wachanganue mikataba yako. + +Ukaguzi hufanywa na wakaguzi wenye uzoefu katika kutafuta kesi za dosari za usalama na mazoea duni ya maendeleo katika kandarasi mahiri. Ukaguzi kwa kawaida utajumuisha majaribio (na ikiwezekana uthibitishaji rasmi) pamoja na uhakiki wa mwongozo wa msingi wote wa msimbo. + +Kinyume chake, programu ya zawadi ya hitilafu kwa kawaida huhusisha kutoa zawadi ya kifedha kwa mtu binafsi (anayejulikana kama [wadukuzi wa kofia nyeupe](https://en.wikipedia.org/wiki/White_hat_\(computer_security\))) anayegundua udhaifu katika mkataba-erevu na kuufichua kwa wasanidi programu. Fadhila za kosa ni sawa na ukaguzi kwa vile unahusisha kuwauliza wengine kusaidia kupata kasoro katika mikataba mahiri. + +Tofauti kuu ni kwamba programu za fadhila za kosa ziko wazi kwa jumuiya pana ya wasanifu/wadukuzi na kuvutia tabaka pana la wavamizi wa maadili na wataalamu huru wa usalama walio na ujuzi na uzoefu wa kipekee. Hii inaweza kuwa faida zaidi ya ukaguzi mzuri wa mikataba ambayo inategemea sana timu ambazo zinaweza kuwa na utaalamu mdogo au finyu. + +## Zana na maktaba za upimaji {#testing-tools-and-libraries} + +### Zana za upimaji wa vitengo {#unit-testing-tools} + +- **[solidity-coverage](https://github.com/sc-forks/solidity-coverage)** - _Zana ya kufunika msimbo kwa mikataba-erevu iliyoandikwa katika Solidity._ + +- **[Waffle](https://ethereum-waffle.readthedocs.io/en/latest/)** - _Mfumo wa maendeleo ya hali ya juu ya mkataba-erevu na upimaji (kwa kuzingatia ethers.js)_. + +- **[Remix Tests](https://github.com/ethereum/remix-project/tree/master/libs/remix-tests)** - _Zana ya kupima mikataba-erevu ya Solidity. Hufanya kazi chini ya programu-jalizi ya Remix IDE "Solidity Unit Testing" ambayo hutumika kuandika na kuendesha kesi za majaribio kwa mkataba._ + +- **[OpenZeppelin Test Helpers](https://github.com/OpenZeppelin/openzeppelin-test-helpers)** - _Maktaba ya madai kwa ajili ya upimaji wa mkataba-erevu wa Ethereum. Hakikisha mikataba yako inafanya kazi kama inavyotarajiwa!_ + +- **[Mfumo wa upimaji wa kitengo wa Brownie](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** - _Brownie hutumia Pytest, mfumo wa majaribio wenye vipengele vingi unaokuruhusu kuandika majaribio madogo na msimbo mdogo, unaongezeka vizuri kwa miradi mikubwa, na unaweza kupanuliwa sana._ + +- **[Majaribio ya Foundry](https://github.com/foundry-rs/foundry/tree/master/crates/forge)** - _Foundry inatoa Forge, mfumo wa upimaji wa haraka na rahisi wa Ethereum unaoweza kutekeleza upimaji rahisi wa vitengo, ukaguzi wa uboreshaji wa gesi, na ufanyaji wa fuzzing kwenye mikataba._ + +- **[Majaribio ya Hardhat](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** - _Mfumo wa kupima mikataba-erevu unaozingatia ethers.js, Mocha, na Chai._ + +- **[ApeWorx](https://docs.apeworx.io/ape/stable/userguides/testing.html)** - _Mfumo wa maendeleo na upimaji unaotegemea Python kwa mikataba-erevu unaolenga mashine halisi ya ethereum._ + +- **[Wake](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** - _Mfumo unaotegemea Python kwa upimaji wa vitengo na fuzzing na uwezo mkubwa wa utatuzi na usaidizi wa upimaji wa minyororo mbalimbali, ukitumia pytest na Anvil kwa uzoefu bora wa mtumiaji na utendakazi._ + +### Zana za upimaji unaozingatia sifa {#property-based-testing-tools} + +#### Zana za uchambuzi tuli {#static-analysis-tools} + +- **[Slither](https://github.com/crytic/slither)** - _Mfumo wa uchambuzi tuli wa Solidity unaotegemea Python wa kupata udhaifu, kuboresha uelewa wa msimbo, na kuandika uchambuzi maalum wa mikataba-erevu._ + +- **[Ethlint](https://ethlint.readthedocs.io/en/latest/)** - _Linter ya kutekeleza mtindo na mbinu bora za usalama kwa lugha ya programu ya mkataba-erevu ya Solidity._ + +- **[Cyfrin Aderyn](https://cyfrin.io/tools/aderyn)** - _Kichanganuzi tuli chenye msingi wa Rust kilichoundwa mahsusi kwa usalama na maendeleo ya mkataba-erevu wa Web3._ + +- **[Wake](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** - _Mfumo wa uchambuzi tuli unaotegemea Python na vigunduzi vya udhaifu na ubora wa msimbo, vichapishi vya kutoa taarifa muhimu kutoka kwa msimbo na usaidizi wa kuandika moduli ndogo maalum._ + +- **[Slippy](https://github.com/fvictorio/slippy)** - _Linter rahisi na yenye nguvu kwa Solidity._ + +#### Zana za uchambuzi wa nguvu {#dynamic-analysis-tools} + +- **[Echidna](https://github.com/crytic/echidna/)** - _Fuzzer ya mikataba ya haraka ya kugundua udhaifu katika mikataba-erevu kupitia upimaji unaozingatia sifa._ + +- **[Diligence Fuzzing](https://consensys.net/diligence/fuzzing/)** - _Zana ya kiotomatiki ya fuzzing inayofaa kugundua ukiukaji wa sifa katika msimbo wa mkataba-erevu._ + +- **[Manticore](https://manticore.readthedocs.io/en/latest/index.html)** - _Mfumo wa utekelezaji wa ishara wa nguvu wa kuchambua bytecode ya EVM._ + +- **[Mythril](https://github.com/ConsenSys/mythril-classic)** - _Zana ya tathmini ya bytecode ya EVM ya kugundua udhaifu wa mkataba kwa kutumia uchambuzi wa doa, uchambuzi wa concolic, na ukaguzi wa mtiririko wa udhibiti._ + +- **[Diligence Scribble](https://consensys.net/diligence/scribble/)** - _Scribble ni lugha ya vipimo na zana ya uthibitishaji wakati wa utekelezaji inayokuruhusu kufafanua mikataba-erevu na sifa zinazokuwezesha kupima mikataba kiotomatiki na zana kama vile Diligence Fuzzing au MythX._ + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Muhtasari na ulinganisho wa bidhaa tofauti za upimaji](/developers/tutorials/guide-to-smart-contract-security-tools/) \_ +- [Jinsi ya kutumia Echidna kupima mikataba-erevu](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/) +- [Jinsi ya kutumia Manticore kupata mende za mkataba-erevu](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) +- [Jinsi ya kutumia Slither kupata mende za mkataba-erevu](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) +- [Jinsi ya kuiga mikataba ya Solidity kwa ajili ya upimaji](/developers/tutorials/how-to-mock-solidity-contracts-for-testing/) +- [Jinsi ya kufanya upimaji wa vitengo katika Solidity kwa kutumia Foundry](https://www.rareskills.io/post/foundry-testing-solidity) + +## Masomo zaidi {#further-reading} + +- [Mwongozo wa kina wa kupima mikataba-erevu ya Ethereum](https://iamdefinitelyahuman.medium.com/an-in-depth-guide-to-testing-ethereum-smart-contracts-2e41b2770297) +- [Jinsi ya kupima mikataba-erevu ya Ethereum](https://betterprogramming.pub/how-to-test-ethereum-smart-contracts-35abc8fa199d) +- [Mwongozo wa MolochDAO wa upimaji wa vitengo kwa wasanidi programu](https://github.com/MolochVentures/moloch/tree/4e786db8a4aa3158287e0935dcbc7b1e43416e38/test#moloch-testing-guide) +- [Jinsi ya kupima mikataba-erevu kama nyota wa rock](https://forum.openzeppelin.com/t/test-smart-contracts-like-a-rockstar/1001) diff --git a/public/content/translations/sw/developers/docs/smart-contracts/upgrading/index.md b/public/content/translations/sw/developers/docs/smart-contracts/upgrading/index.md new file mode 100644 index 00000000000..15ca5501197 --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/upgrading/index.md @@ -0,0 +1,165 @@ +--- +title: Kuboresha mikataba erevu +description: Muhtasari wa mifumo ya usasishaji kwa mikataba-erevu ya Ethereum +lang: sw +--- + +Mikataba-erevu kwenye Ethereum ni programu zinazojitekeleza zinazoendeshwa kwenye mashine halisi ya ethereum (EVM). Programu hizi hazibadiliki kimuundo, jambo ambalo huzuia masasisho yoyote kwa mantiki ya kibiashara mara tu mkataba unapopelekwa. + +Ingawa kutobadilika ni muhimu kwa kutokuwa na haja ya kuaminiana, ugatuzi, na usalama wa mikataba-erevu, inaweza kuwa hasara katika hali fulani. Kwa mfano, msimbo usiobadilika unaweza kufanya iwe vigumu kwa wasanidi programu kurekebisha mikataba iliyo hatarini. + +Hata hivyo, utafiti ulioongezeka katika kuboresha mikataba-erevu umesababisha kuanzishwa kwa mifumo kadhaa ya usasishaji. Mifumo hii ya usasishaji huwawezesha wasanidi programu kusasisha mikataba-erevu (huku wakihifadhi kutobadilika) kwa kuweka mantiki ya biashara katika mikataba tofauti. + +## Mahitaji ya awali {#prerequisites} + +Unapaswa kuwa na uelewa mzuri wa [mikataba-erevu](/developers/docs/smart-contracts/), [muundo wa mkataba-erevu](/developers/docs/smart-contracts/anatomy/), na [mashine halisi ya ethereum (EVM)](/developers/docs/evm/). Mwongozo huu pia unachukulia kuwa wasomaji wana uelewa wa kupanga programu za mikataba-erevu. + +## Usasishaji wa mkataba-erevu ni nini? {#what-is-a-smart-contract-upgrade} + +Usasishaji wa mkataba-erevu unahusisha kubadilisha mantiki ya biashara ya mkataba-erevu huku ukihifadhi hali ya mkataba. Ni muhimu kufafanua kwamba uwezo wa kusasishwa na uwezo wa kubadilika si kitu kimoja, hasa katika muktadha wa mikataba-erevu. + +Bado huwezi kubadilisha programu iliyotumwa kwenye anwani katika mtandao wa Ethereum. Lakini unaweza kubadilisha msimbo unaotekelezwa watumiaji wanapoingiliana na mkataba-erevu. + +Hili linaweza kufanywa kupitia njia zifuatazo: + +1. Kuunda matoleo mengi ya mkataba-erevu na kuhamisha hali (yaani, data) kutoka kwa mkataba wa zamani hadi nakala mpya ya mkataba. + +2. Kuunda mikataba tofauti ya kuhifadhi mantiki ya biashara na hali. + +3. Kutumia mifumo ya proksi ili kukasimu miito ya chaguo za kukokotoa kutoka kwa mkataba wa proksi usiobadilika hadi mkataba wa kimantiki unaoweza kurekebishwa. + +4. Kuunda mkataba mkuu usiobadilika unaounganishwa na kutegemea mikataba rahisi ya setilaiti ili kutekeleza chaguo za kukokotoa mahususi. + +5. Kutumia mfumo wa almasi ili kukasimu miito ya chaguo za kukokotoa kutoka kwa mkataba wa proksi hadi kwa mikataba ya kimantiki. + +### Utaratibu wa usasishaji #1: Uhamishaji wa mkataba {#contract-migration} + +Uhamishaji wa mkataba unategemea uwekaji matoleo—wazo la kuunda na kudhibiti hali za kipekee za programu moja. Uhamishaji wa mkataba unahusisha kupeleka nakala mpya ya mkataba-erevu uliopo na kuhamisha ghala na salio kwenye mkataba mpya. + +Mkataba mpya uliotumwa utakuwa na ghala tupu, inayokuruhusu kupata data kutoka kwa mkataba wa zamani na kuiandika kwenye utekelezaji mpya. Baadaye, utahitaji kusasisha mikataba yote iliyoingiliana na mkataba wa zamani ili kuonyesha anwani mpya. + +Hatua ya mwisho katika uhamishaji wa mkataba ni kuwashawishi watumiaji wabadili na kutumia mkataba mpya. Toleo jipya la mkataba litahifadhi salio na anwani za watumiaji, jambo ambalo huhifadhi kutobadilika. Ikiwa ni mkataba unaotegemea tokeni, utahitaji pia kuwasiliana na mabadilishano ili kuachana na mkataba wa zamani na kutumia mkataba mpya. + +Uhamishaji wa mkataba ni hatua rahisi na salama kwa kusasisha mikataba-erevu bila kuvunja mwingiliano wa watumiaji. Hata hivyo, kuhamisha ghala na salio za mtumiaji kwa mkono hadi kwa mkataba mpya kunachukua muda mwingi na kunaweza kusababisha gharama kubwa za gesi. + +[Zaidi kuhusu uhamishaji wa mkataba.](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) + +### Utaratibu wa usasishaji #2: Utengano wa data {#data-separation} + +Njia nyingine ya kusasisha mikataba-erevu ni kutenganisha mantiki ya biashara na ghala la data katika mikataba tofauti. Hii inamaanisha watumiaji huingiliana na mkataba wa kimantiki, huku data ikihifadhiwa kwenye mkataba wa ghala. + +Mkataba wa kimantiki una msimbo unaotekelezwa wakati watumiaji wanapoingiliana na programu. Pia unashikilia anwani ya mkataba wa ghala na huingiliana nao ili kupata na kuweka data. + +Wakati huo huo, mkataba wa ghala unashikilia hali inayohusishwa na mkataba-erevu, kama vile salio na anwani za watumiaji. Kumbuka kuwa mkataba wa ghala unamilikiwa na mkataba wa kimantiki na umesanidiwa na anwani ya mkataba huo wa kimantiki wakati wa kupelekwa. Hii inazuia mikataba isiyoidhinishwa kuita mkataba wa ghala au kusasisha data yake. + +Kwa chaguo-msingi, mkataba wa ghala haubadiliki—lakini unaweza kubadilisha mkataba wa kimantiki unaoelekeza na utekelezaji mpya. Hii itabadilisha msimbo unaoendeshwa katika EVM, huku ukiweka ghala na salio bila kubadilika. + +Kutumia njia hii ya usasishaji kunahitaji kusasisha anwani ya mkataba wa kimantiki katika mkataba wa ghala. Ni lazima pia usanidi mkataba mpya wa kimantiki na anwani ya mkataba wa ghala kwa sababu zilizoelezwa hapo awali. + +Mfumo wa utengano wa data bila shaka ni rahisi kutekeleza ikilinganishwa na uhamishaji wa mkataba. Hata hivyo, itabidi udhibiti mikataba mingi na utekeleze mifumo changamano ya uidhinishaji ili kulinda mikataba-erevu dhidi ya masasisho dhalimu. + +### Utaratibu wa usasishaji #3: Mifumo ya proksi {#proxy-patterns} + +Mfumo wa proksi pia hutumia utengano wa data ili kuweka mantiki ya biashara na data katika mikataba tofauti. Hata hivyo, katika mfumo wa proksi, mkataba wa ghala (unaoitwa proksi) huita mkataba wa kimantiki wakati wa utekelezaji wa msimbo. Hii ni kinyume cha njia ya kutenganisha data, ambapo mkataba wa kimantiki huita mkataba wa ghala. + +Hivi ndivyo hutokea katika mfumo wa proksi: + +1. Watumiaji huingiliana na mkataba wa proksi, ambao huhifadhi data, lakini haushikilii mantiki ya biashara. + +2. Mkataba wa proksi huhifadhi anwani ya mkataba wa kimantiki na hukasimu miito yote ya chaguo za kukokotoa kwa mkataba wa kimantiki (unaoshikilia mantiki ya biashara) kwa kutumia chaguo za kukokotoa la `delegatecall`. + +3. Baada ya wito kupelekwa kwa mkataba wa kimantiki, data iliyorejeshwa kutoka kwa mkataba wa kimantiki inapatikana na kurejeshwa kwa mtumiaji. + +Kutumia mifumo ya proksi kunahitaji uelewa wa chaguo za kukokotoa la **delegatecall**. Kimsingi, `delegatecall` ni opcode inayoruhusu mkataba kuita mkataba mwingine, wakati utekelezaji halisi wa msimbo unafanyika katika muktadha wa mkataba unaopiga simu. Athari ya kutumia `delegatecall` katika mifumo ya proksi ni kwamba mkataba wa proksi husoma na kuandika kwenye ghala lake na kutekeleza mantiki iliyohifadhiwa kwenye mkataba wa kimantiki kana kwamba inaita chaguo za kukokotoa la ndani. + +Kutoka [nyaraka za Solidity](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries): + +> _Kuna lahaja maalum ya wito wa ujumbe, inayoitwa **delegatecall** ambayo ni sawa na wito wa ujumbe isipokuwa ukweli kwamba msimbo katika anwani lengwa unatekelezwa katika muktadha (yaani, katika anwani) ya mkataba unaoita na `msg.sender` na `msg.value` hazibadilishi thamani zao._ _Hii ina maana kwamba mkataba unaweza kupakia msimbo kutoka kwa anwani tofauti kwa nguvu wakati wa uendeshaji. Ghala, anwani ya sasa na salio bado zinarejelea mkataba unaopiga simu, ni msimbo tu unachukuliwa kutoka kwa anwani inayoitwa._ + +Mkataba wa proksi unajua kuomba `delegatecall` wakati wowote mtumiaji anapoita chaguo za kukokotoa kwa sababu una chaguo za kukokotoa la `fallback` lililojengwa ndani yake. Katika programu ya Solidity, [chaguo za kukokotoa mbadala](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function) hutekelezwa wakati wito wa chaguo za kukokotoa hailingani na chaguo za kukokotoa zilizobainishwa katika mkataba. + +Kufanya mfumo wa proksi ufanye kazi kunahitaji kuandika chaguo za kukokotoa mbadala maalum ambalo hubainisha jinsi mkataba wa proksi unapaswa kushughulikia miito ya chaguo za kukokotoa usiyounga mkono. Katika hali hii, chaguo za kukokotoa mbadala la proksi limepangwa kuanzisha delegatecall na kuelekeza ombi la mtumiaji kwa utekelezaji wa sasa wa mkataba wa kimantiki. + +Mkataba wa proksi haubadiliki kwa chaguo-msingi, lakini mikataba mipya ya kimantiki yenye mantiki ya biashara iliyosasishwa inaweza kuundwa. Kufanya usasishaji basi ni suala la kubadilisha anwani ya mkataba wa kimantiki unaorejelewa katika mkataba wa proksi. + +Kwa kuelekeza mkataba wa proksi kwenye mkataba mpya wa kimantiki, msimbo unaotekelezwa watumiaji wanapoita chaguo za kukokotoa la mkataba wa proksi hubadilika. Hii inatuwezesha kusasisha mantiki ya mkataba bila kuwauliza watumiaji kuingiliana na mkataba mpya. + +Mifumo ya proksi ni njia maarufu ya kusasisha mikataba-erevu kwa sababu huondoa ugumu unaohusishwa na uhamishaji wa mkataba. Hata hivyo, mifumo ya proksi ni ngumu zaidi kutumia na inaweza kuleta dosari kubwa, kama vile [migongano ya viteuzi vya chaguo za kukokotoa](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357), ikitumiwa isivyofaa. + +[Zaidi kuhusu mifumo ya proksi](https://blog.openzeppelin.com/proxy-patterns/). + +### Utaratibu wa usasishaji #4: Mfumo wa mkakati {#strategy-pattern} + +Mbinu hii inaathiriwa na [mfumo wa mkakati](https://en.wikipedia.org/wiki/Strategy_pattern), ambayo inahimiza kuunda programu za kompyuta zinazoungana na programu nyingine ili kutekeleza vipengele maalum. Kutumia mfumo wa mkakati kwenye usanidi wa Ethereum kutamaanisha kujenga mkataba-erevu unaoita chaguo za kukokotoa kutoka kwa mikataba mingine. + +Mkataba mkuu katika kesi hii una mantiki ya msingi ya biashara, lakini unaunganishwa na mikataba-erevu mingine ("mikataba ya setilaiti") ili kutekeleza chaguo za kukokotoa fulani. Mkataba huu mkuu pia huhifadhi anwani ya kila mkataba wa setilaiti na unaweza kubadili kati ya utekelezaji tofauti wa mkataba wa setilaiti. + +Unaweza kujenga mkataba mpya wa setilaiti na kusanidi mkataba mkuu na anwani mpya. Hii hukuruhusu kubadilisha _mikakati_ (yaani, kutekeleza mantiki mpya) kwa mkataba-erevu. + +Ingawa inafanana na mfumo wa proksi uliojadiliwa hapo awali, mfumo wa mkakati ni tofauti kwa sababu mkataba mkuu, ambao watumiaji huingiliana nao, unashikilia mantiki ya biashara. Kutumia mfumo huu kunakupa fursa ya kuleta mabadiliko machache kwenye mkataba-erevu bila kuathiri miundombinu ya msingi. + +Hasara kuu ni kwamba mfumo huu unafaa zaidi kwa kutoa masasisho madogo. Pia, ikiwa mkataba mkuu utadukuliwa (k.m., kupitia udukuzi), huwezi kutumia njia hii ya usasishaji. + +### Utaratibu wa usasishaji #5: Mfumo wa almasi {#diamond-pattern} + +Mfumo wa almasi unaweza kuchukuliwa kama uboreshaji wa mfumo wa proksi. Mifumo ya almasi hutofautiana na mifumo ya proksi kwa sababu mkataba wa proksi wa almasi unaweza kukasimu miito ya chaguo za kukokotoa kwa zaidi ya mkataba mmoja wa kimantiki. + +Mikataba ya kimantiki katika mfumo wa almasi inajulikana kama _facets_. Ili kufanya mfumo wa almasi ufanye kazi, unahitaji kuunda ramani katika mkataba wa proksi ambayo inaunganisha [viteuzi vya chaguo za kukokotoa](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector) kwenye anwani tofauti za facet. + +Mtumiaji anapofanya wito wa chaguo za kukokotoa, mkataba wa proksi hukagua ramani ili kupata facet inayohusika na kutekeleza chaguo hilo la kukokotoa. Kisha inaomba `delegatecall` (kwa kutumia chaguo za kukokotoa mbadala) na kuelekeza wito kwa mkataba wa kimantiki unaofaa. + +Mfumo wa usasishaji wa almasi una faida fulani kuliko mifumo ya jadi ya usasishaji wa proksi: + +1. Inakuruhusu kusasisha sehemu ndogo ya mkataba bila kubadilisha msimbo wote. Kutumia mfumo wa proksi kwa masasisho kunahitaji kuunda mkataba mpya kabisa wa kimantiki, hata kwa masasisho madogo. + +2. Mikataba yote erevu (ikiwa ni pamoja na mikataba ya kimantiki inayotumika katika mifumo ya proksi) ina kikomo cha ukubwa wa KB 24, ambacho kinaweza kuwa kikwazo—hasa kwa mikataba tata inayohitaji chaguo za kukokotoa zaidi. Mfumo wa almasi hurahisisha kutatua tatizo hili kwa kugawanya chaguo za kukokotoa katika mikataba mingi ya kimantiki. + +3. Mifumo ya proksi huchukua mbinu ya kujumlisha kwa udhibiti wa ufikiaji. Huluki yenye ufikiaji wa chaguo za kukokotoa za kusasisha inaweza kubadilisha mkataba _mzima_. Lakini mfumo wa almasi huwezesha mbinu ya ruhusa za mifumo, ambapo unaweza kuzuia huluki kusasisha chaguo za kukokotoa fulani ndani ya mkataba-erevu. + +[Zaidi kuhusu mfumo wa almasi](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w). + +## Faida na hasara za kusasisha mikataba-erevu {#pros-and-cons-of-upgrading-smart-contracts} + +| Faida | Hasara | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Usasishaji wa mkataba-erevu unaweza kurahisisha kurekebisha udhaifu uliogunduliwa katika awamu ya baada ya kupelekwa. | Kusasisha mikataba-erevu kunapingana na wazo la kutobadilika kwa msimbo, jambo ambalo lina athari kwa ugatuzi na usalama. | +| Wasanidi programu wanaweza kutumia masasisho ya kimantiki kuongeza vipengele vipya kwenye mifumo iliyotawanywa. | Watumiaji lazima wawaamini wasanidi programu wasibadilishe mikataba-erevu kiholela. | +| Masasisho ya mikataba-erevu yanaweza kuboresha usalama kwa watumiaji wa mwisho kwani hitilafu zinaweza kurekebishwa haraka. | Kupanga programu ya utendaji wa usasishaji katika mikataba-erevu huongeza safu nyingine ya utata na huongeza uwezekano wa dosari kubwa. | +| Masasisho ya mkataba huwapa wasanidi programu nafasi zaidi ya kujaribu vipengele tofauti na kuboresha mifumo mtawanyo ya kimamlaka kadri muda unavyopita. | Fursa ya kusasisha mikataba-erevu inaweza kuwahimiza wasanidi programu kuzindua miradi haraka bila kufanya uchunguzi wa kina wakati wa awamu ya usanidi. | +| | Udhibiti wa ufikiaji usio salama au uwekaji kati katika mikataba-erevu unaweza kurahisisha wahusika dhalimu kufanya masasisho yasiyoidhinishwa. | + +## Mambo ya kuzingatia katika kusasisha mikataba-erevu {#considerations-for-upgrading-smart-contracts} + +1. Tumia mifumo salama ya udhibiti wa ufikiaji/uidhinishaji ili kuzuia masasisho yasiyoidhinishwa ya mikataba-erevu, hasa ikiwa unatumia mifumo ya proksi, mifumo ya mikakati, au utengano wa data. Mfano ni kuzuia ufikiaji wa chaguo za kukokotoa la usasishaji, ili mmiliki wa mkataba pekee ndiye anayeweza kuiita. + +2. Kusasisha mikataba-erevu ni shughuli tata na inahitaji kiwango cha juu cha bidii ili kuzuia kuanzishwa kwa udhaifu. + +3. Punguza dhana za uaminifu kwa kugatua mchakato wa kutekeleza masasisho. Mikakati inayowezekana ni pamoja na kutumia [mkataba wa mkoba wa saini-nyingi](/developers/docs/smart-contracts/#multisig) kudhibiti masasisho, au kuwataka [wanachama wa DAO](/dao/) kupiga kura kuidhinisha usasishaji. + +4. Jihadharini na gharama zinazohusika katika kusasisha mikataba. Kwa mfano, kunakili hali (k.m., salio za mtumiaji) kutoka kwa mkataba wa zamani hadi mkataba mpya wakati wa uhamishaji wa mkataba kunaweza kuhitaji zaidi ya muamala mmoja, ikimaanisha ada zaidi za gesi. + +5. Fikiria kutekeleza **kufuli za muda** ili kuwalinda watumiaji. Kufuli ya muda hurejelea ucheleweshaji unaotekelezwa kwenye mabadiliko ya mfumo. Kufuli za muda zinaweza kuunganishwa na mfumo wa utawala wa saini-nyingi ili kudhibiti masasisho: ikiwa hatua iliyopendekezwa itafikia kizingiti cha idhini kinachohitajika, haitekelezwi hadi kipindi cha ucheleweshaji kilichobainishwa awali kiishe. + +Kufuli za muda huwapa watumiaji muda wa kujiondoa kwenye mfumo ikiwa hawakubaliani na mabadiliko yaliyopendekezwa (k.m., usasishaji wa kimantiki au mifumo mipya ya ada). Bila kufuli za muda, watumiaji wanahitaji kuwaamini wasanidi programu wasitekeleze mabadiliko ya kiholela katika mkataba-erevu bila taarifa ya awali. Hasara hapa ni kwamba kufuli za muda huzuia uwezo wa kurekebisha udhaifu haraka. + +## Rasilimali {#resources} + +**Vidirisha vya Masasisho vya OpenZeppelin - _Mkusanyiko wa zana za kupeleka na kulinda mikataba-erevu inayoweza kusasishwa._** + +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-upgrades) +- [Nyaraka](https://docs.openzeppelin.com/upgrades) + +## Mafunzo {#tutorials} + +- [Kusasisha Mikataba-erevu Yako | Mafunzo ya YouTube](https://www.youtube.com/watch?v=bdXJmWajZRY) na Patrick Collins +- [Mafunzo ya Uhamishaji wa Mkataba-erevu wa Ethereum](https://medium.com/coinmonks/ethereum-smart-contract-migration-13f6f12539bd) na Austin Griffith +- [Kutumia mfumo wa proksi wa UUPS kusasisha mikataba-erevu](https://blog.logrocket.com/author/praneshas/) na Pranesh A.S +- [Mafunzo ya Web3: Andika mkataba-erevu unaoweza kusasishwa (proksi) kwa kutumia OpenZeppelin](https://dev.to/yakult/tutorial-write-upgradeable-smart-contract-proxy-contract-with-openzeppelin-1916) na fangjun.eth + +## Masomo zaidi {#further-reading} + +- [Hali ya Masasisho ya Mikataba-erevu](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/) na Santiago Palladino +- [Njia nyingi za kusasisha mkataba-erevu wa Solidity](https://cryptomarketpool.com/multiple-ways-to-upgrade-a-solidity-smart-contract/) - Blogu ya Crypto Market Pool +- [Jifunze: Kusasisha Mikataba-erevu](https://docs.openzeppelin.com/learn/upgrading-smart-contracts) - Nyaraka za OpenZeppelin +- [Mifumo ya Proksi kwa Uwezo wa Kusasishwa wa Mikataba ya Solidity: Proksi za Wazi dhidi ya Proksi za UUPS](https://mirror.xyz/0xB38709B8198d147cc9Ff9C133838a044d78B064B/M7oTptQkBGXxox-tk9VJjL66E1V8BUF0GF79MMK4YG0) na Naveen Sahu +- [Jinsi Masasisho ya Almasi Yanavyofanya Kazi](https://dev.to/mudgen/how-diamond-upgrades-work-417j) na Nick Mudge diff --git a/public/content/translations/sw/developers/docs/smart-contracts/verifying/index.md b/public/content/translations/sw/developers/docs/smart-contracts/verifying/index.md new file mode 100644 index 00000000000..16d3f2209af --- /dev/null +++ b/public/content/translations/sw/developers/docs/smart-contracts/verifying/index.md @@ -0,0 +1,113 @@ +--- +title: Kuhakiki mikataba erevu +description: Muhtasari wa uthibitishaji wa msimbo chanzo kwa mikataba-erevu ya Ethereum +lang: sw +--- + +[Mikataba-erevu](/developers/docs/smart-contracts/) imeundwa kuwa ya "bila kuaminiana", kumaanisha watumiaji hawapaswi kuamini washirika wengine (k.m., wasanidi programu na kampuni) kabla ya kuingiliana na mkataba. Kama sharti la kutokuwa na haja ya kuaminiana, watumiaji na wasanidi programu wengine lazima waweze kuthibitisha msimbo chanzo wa mkataba-erevu. Uthibitishaji wa msimbo chanzo huwahakikishia watumiaji na wasanidi programu kwamba msimbo wa mkataba uliochapishwa ni msimbo uleule unaoendeshwa kwenye anwani ya mkataba kwenye mnyororo wa bloku wa Ethereum. + +Ni muhimu kutofautisha kati ya "uthibitishaji wa msimbo chanzo" na "[uthibitishaji rasmi](/developers/docs/smart-contracts/formal-verification/)". Uthibitishaji wa msimbo chanzo, ambao utaelezwa kwa undani hapa chini, unarejelea kuthibitisha kwamba msimbo chanzo uliotolewa wa mkataba-erevu katika lugha ya kiwango cha juu (k.m., Solidity) huandaliwa kuwa msimbo wa baiti uleule utakaotekelezwa kwenye anwani ya mkataba. Hata hivyo, uthibitishaji rasmi unaelezea kuthibitisha usahihi wa mkataba-erevu, ikimaanisha kuwa mkataba unafanya kazi kama inavyotarajiwa. Ingawa inategemea muktadha, uthibitishaji wa mkataba kwa kawaida hurejelea uthibitishaji wa msimbo chanzo. + +## Uthibitishaji wa msimbo chanzo ni nini? {#what-is-source-code-verification} + +Kabla ya kupeleka mkataba-erevu katika [Mashine ya mtandaoni ya Ethereum (EVM)](/developers/docs/evm/), wasanidi programu [huandaa](/developers/docs/smart-contracts/compiling/) msimbo chanzo wa mkataba—maagizo [yaliyoandikwa katika Solidity](/developers/docs/smart-contracts/languages/) au lugha nyingine ya programu ya kiwango cha juu— kuwa msimbo wa baiti. Kwa kuwa EVM haiwezi kutafsiri maagizo ya kiwango cha juu, kuandaa msimbo chanzo kuwa msimbo wa baiti (yaani, maagizo ya kiwango cha chini, ya mashine) ni muhimu kwa ajili ya kutekeleza mantiki ya mkataba katika EVM. + +Uthibitishaji wa msimbo chanzo ni kulinganisha msimbo chanzo wa mkataba-erevu na msimbo wa baiti ulioandaliwa uliotumika wakati wa uundaji wa mkataba ili kugundua tofauti zozote. Kuthibitisha mikataba-erevu ni muhimu kwa sababu msimbo wa mkataba uliotangazwa unaweza kuwa tofauti na ule unaoendeshwa kwenye mnyororo wa bloku. + +Uthibitishaji wa mkataba-erevu huwezesha kuchunguza kile mkataba hufanya kupitia lugha ya kiwango cha juu iliyoandikwa, bila kulazimika kusoma msimbo wa mashine. Majukumu, thamani, na kwa kawaida majina ya vigezo na maoni hubaki sawa na msimbo chanzo asilia ambao umeandaliwa na kupelekwa. Hii hurahisisha kusoma msimbo. Uthibitishaji wa chanzo pia hutoa nafasi ya nyaraka za msimbo, ili watumiaji wa mwisho wajue kile ambacho mkataba-erevu umeundwa kufanya. + +### Uthibitishaji kamili ni nini? {#full-verification} + +Kuna baadhi ya sehemu za msimbo chanzo ambazo haziathiri msimbo wa baiti ulioandaliwa kama vile maoni au majina ya vigezo. Hiyo inamaanisha misimbo miwili chanzo yenye majina tofauti ya vigezo na maoni tofauti yote yangeweza kuthibitisha mkataba mmoja. Kwa hiyo, mhusika mwenye nia mbaya anaweza kuongeza maoni ya udanganyifu au kutoa majina ya vigezo yanayopotosha ndani ya msimbo chanzo na kufanya mkataba uthibitishwe na msimbo chanzo tofauti na msimbo chanzo asilia. + +Inawezekana kuepuka hili kwa kuongeza data ya ziada kwenye msimbo wa baiti ili kutumika kama _dhamana ya kriptografia_ ya usahihi wa msimbo chanzo, na kama _alama ya vidole_ ya taarifa za uandaaji. Taarifa muhimu hupatikana katika [metadata ya mkataba wa Solidity](https://docs.soliditylang.org/en/v0.8.15/metadata.html), na hashi ya faili hili huongezwa kwenye msimbo wa baiti wa mkataba. Unaweza kuiona ikifanya kazi katika [uwanja wa michezo wa metadata](https://playground.sourcify.dev) + +Faili la metadata lina taarifa kuhusu uandaaji wa mkataba ikiwa ni pamoja na faili chanzo na hashi zao. Ikimaanisha, ikiwa mipangilio yoyote ya uandaaji au hata baiti moja katika faili chanzo itabadilika, faili la metadata hubadilika. Kwa hivyo, hashi ya faili la metadata, ambayo huongezwa kwenye msimbo wa baiti, pia hubadilika. Hiyo inamaanisha ikiwa msimbo wa baiti wa mkataba + hashi ya metadata iliyoongezwa vinalingana na msimbo chanzo uliotolewa na mipangilio ya uandaaji, tunaweza kuwa na uhakika huu ndio msimbo chanzo uleule uliotumika katika uandaaji asilia, hakuna hata baiti moja tofauti. + +Aina hii ya uthibitishaji inayotumia hashi ya metadata inajulikana kama **"[uthibitishaji kamili](https://docs.sourcify.dev/docs/full-vs-partial-match/)"** (pia "uthibitishaji kamilifu"). Ikiwa hashi za metadata hazilingani au hazizingatiwi katika uthibitishaji itakuwa "ulinganifu wa sehemu", ambayo kwa sasa ndiyo njia ya kawaida zaidi ya kuthibitisha mikataba. Inawezekana [kuingiza msimbo wenye nia mbaya](https://samczsun.com/hiding-in-plain-sight/) ambao hauonekani katika msimbo chanzo uliothibitishwa bila uthibitishaji kamili. Wasanidi programu wengi hawafahamu kuhusu uthibitishaji kamili na hawatunzi faili la metadata la uandaaji wao, kwa hivyo uthibitishaji wa sehemu umekuwa ndiyo njia halisi ya kuthibitisha mikataba hadi sasa. + +## Kwa nini uthibitishaji wa msimbo chanzo ni muhimu? {#importance-of-source-code-verification} + +### Hali ya Kutohitaji Uaminifu {#trustlessness} + +Hali ya kutohitaji uaminifu bila shaka ndiyo msingi mkuu wa mikataba-erevu na [mfumo uliotawanywa (dapps)](/developers/docs/dapps/). Mikataba-erevu "haibadiliki" na haiwezi kubadilishwa; mkataba utatekeleza tu mantiki ya biashara iliyofafanuliwa katika msimbo wakati wa kupelekwa. Hii inamaanisha wasanidi programu na makampuni hawawezi kuchezea msimbo wa mkataba baada ya kuupeleka kwenye Ethereum. + +Ili mkataba-erevu usiwe wa kuhitaji uaminifu, msimbo wa mkataba unapaswa kupatikana kwa ajili ya uthibitishaji huru. Ingawa msimbo wa baiti ulioandaliwa kwa kila mkataba-erevu unapatikana hadharani kwenye mnyororo wa bloku, lugha ya kiwango cha chini ni ngumu kuelewa—kwa wasanidi programu na watumiaji. + +Miradi hupunguza dhana za uaminifu kwa kuchapisha msimbo chanzo wa mikataba yao. Lakini hii inasababisha tatizo lingine: ni vigumu kuthibitisha kwamba msimbo chanzo uliochapishwa unalingana na msimbo wa baiti wa mkataba. Katika hali hii, thamani ya kutokuwa na haja ya kuaminiana inapotea kwa sababu watumiaji wanapaswa kuwaamini wasanidi programu wasibadili mantiki ya biashara ya mkataba (yaani, kwa kubadilisha msimbo wa baiti) kabla ya kuupeleka kwenye mnyororo wa bloku. + +Zana za uthibitishaji wa msimbo chanzo hutoa dhamana kwamba faili za msimbo chanzo za mkataba-erevu zinalingana na msimbo wa kusanyiko. Matokeo yake ni mfumo ikolojia usiohitaji uaminifu, ambapo watumiaji hawaamini wahusika wengine bila kufikiria na badala yake huthibitisha msimbo kabla ya kuweka fedha kwenye mkataba. + +### Usalama wa Mtumiaji {#user-safety} + +Kwa mikataba-erevu, kwa kawaida kuna pesa nyingi hatarini. Hii inahitaji dhamana ya juu ya usalama na uthibitishaji wa mantiki ya mkataba-erevu kabla ya kuutumia. Tatizo ni kwamba wasanidi programu wasio waaminifu wanaweza kuwadanganya watumiaji kwa kuingiza msimbo wenye nia mbaya katika mkataba-erevu. Bila uthibitishaji, mikataba-erevu yenye nia mbaya inaweza kuwa na [milango ya nyuma](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), mifumo yenye utata ya udhibiti wa ufikiaji, udhaifu unaoweza kutumiwa, na mambo mengine yanayohatarisha usalama wa mtumiaji ambayo yangebaki bila kugunduliwa. + +Kuchapisha faili za msimbo chanzo za mkataba-erevu hurahisisha wale wanaopendezwa, kama vile wakaguzi, kutathmini mkataba kwa ajili ya mianya inayoweza kushambuliwa. Pamoja na pande nyingi kuthibitisha mkataba-erevu kwa uhuru, watumiaji wanapata dhamana imara zaidi ya usalama wake. + +## Jinsi ya kuthibitisha msimbo chanzo kwa mikataba-erevu ya Ethereum {#source-code-verification-for-ethereum-smart-contracts} + +[Kupeleka mkataba-erevu kwenye Ethereum](/developers/docs/smart-contracts/deploying/) kunahitaji kutuma muamala wenye shehena ya data (msimbo wa baiti ulioandaliwa) kwenye anwani maalum. Shehena ya data inatengenezwa kwa kuandaa msimbo chanzo, pamoja na [hoja za kiunda](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor) za mfano wa mkataba zilizoongezwa kwenye shehena ya data katika muamala. Uandaaji ni wa kubainika, ikimaanisha daima hutoa matokeo sawa (yaani, msimbo wa baiti wa mkataba) ikiwa faili chanzo zilezile, na mipangilio ya uandaaji (k.m., toleo la kiandaaji, kiboreshaji) inatumiwa. + +![Mchoro unaoonyesha uthibitishaji wa msimbo chanzo wa mkataba-erevu](./source-code-verification.png) + +Kuthibitisha mkataba-erevu kimsingi kunahusisha hatua zifuatazo: + +1. Weka faili chanzo na mipangilio ya uandaaji kwenye kiandaaji. + +2. Kiandaaji hutoa msimbo wa baiti wa mkataba + +3. Pata msimbo wa baiti wa mkataba uliopelekwa katika anwani fulani + +4. Linganisha msimbo wa baiti uliopelekwa na msimbo wa baiti ulioandaliwa upya. Ikiwa misimbo inalingana, mkataba unathibitishwa na msimbo chanzo uliotolewa na mipangilio ya uandaaji. + +5. Zaidi ya hayo, ikiwa hashi za metadata mwishoni mwa msimbo wa baiti zinalingana, itakuwa ulinganifu kamili. + +Kumbuka kwamba hili ni maelezo rahisi ya uthibitishaji na kuna vighairi vingi ambavyo havifanyi kazi na hili kama vile kuwa na [vigezo visivyobadilika](https://docs.sourcify.dev/docs/immutables/). + +## Zana za uthibitishaji wa msimbo chanzo {#source-code-verification-tools} + +Mchakato wa jadi wa kuthibitisha mikataba unaweza kuwa mgumu. Hii ndiyo sababu tuna zana za kuthibitisha msimbo chanzo kwa mikataba-erevu iliyopelekwa kwenye Ethereum. Zana hizi hubinafsisha sehemu kubwa za uthibitishaji wa msimbo chanzo na pia huratibu mikataba iliyothibitishwa kwa manufaa ya watumiaji. + +### Etherscan {#etherscan} + +Ingawa inajulikana zaidi kama [kichunguzi cha mnyororo wa bloku wa Ethereum](/developers/docs/data-and-analytics/block-explorers/), Etherscan pia inatoa [huduma ya uthibitishaji wa msimbo chanzo](https://etherscan.io/verifyContract) kwa wasanidi programu wa mikataba-erevu na watumiaji. + +Etherscan hukuruhusu kuandaa upya msimbo wa baiti wa mkataba kutoka kwa shehena ya data asilia (msimbo chanzo, anwani ya maktaba, mipangilio ya kiandaaji, anwani ya mkataba, n.k.) Ikiwa msimbo wa baiti ulioandaliwa upya unahusishwa na msimbo wa baiti (na vigezo vya kiunda) vya mkataba ulio kwenye mnyororo, basi [mkataba unathibitishwa](https://info.etherscan.com/types-of-contract-verification/). + +Baada ya kuthibitishwa, msimbo chanzo wa mkataba wako hupokea lebo ya "Imethibitishwa" na huchapishwa kwenye Etherscan ili wengine wakague. Pia huongezwa kwenye sehemu ya [Mikataba Iliyothibitishwa](https://etherscan.io/contractsVerified/)—hifadhi ya mikataba-erevu yenye misimbo chanzo iliyothibitishwa. + +Etherscan ndiyo zana inayotumika zaidi kwa kuthibitisha mikataba. Hata hivyo, uthibitishaji wa mkataba wa Etherscan una dosari: unashindwa kulinganisha **hashi ya metadata** ya msimbo wa baiti ulio kwenye mnyororo na msimbo wa baiti ulioandaliwa upya. Kwa hivyo, ulinganifu katika Etherscan ni ulinganifu wa sehemu. + +[Zaidi kuhusu kuthibitisha mikataba kwenye Etherscan](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327). + +### Blockscout {#blockscout} + +[Blockscout](https://blockscout.com/) ni kichunguzi huria cha mnyororo wa bloku ambacho pia hutoa [huduma ya uthibitishaji wa mkataba](https://eth.blockscout.com/contract-verification) kwa wasanidi programu na watumiaji wa mikataba-erevu. Kama njia mbadala ya chanzo huria, Blockscout inatoa uwazi katika jinsi uthibitishaji unavyofanywa na huwezesha michango ya jamii kuboresha mchakato wa uthibitishaji. + +Sawa na huduma zingine za uthibitishaji, Blockscout hukuruhusu kuthibitisha msimbo chanzo wa mkataba wako kwa kuandaa upya msimbo wa baiti na kuulinganisha na mkataba uliopelekwa. Baada ya kuthibitishwa, mkataba wako hupokea hali ya uthibitishaji na msimbo chanzo unakuwa wazi kwa umma kwa ajili ya ukaguzi na mwingiliano. Mikataba iliyothibitishwa pia imeorodheshwa katika [hifadhi ya mikataba iliyothibitishwa](https://eth.blockscout.com/verified-contracts) ya Blockscout kwa kuvinjari na ugunduzi rahisi. + +### Sourcify {#sourcify} + +[Sourcify](https://sourcify.dev/#/verifier) ni zana nyingine ya kuthibitisha mikataba ambayo ni ya chanzo-wazi na iliyogatuliwa. Siyo kichunguzi cha bloku na inathibitisha tu mikataba kwenye [mitandao tofauti inayotumia EVM](https://docs.sourcify.dev/docs/chains). Inafanya kazi kama miundombinu ya umma kwa zana zingine kujenga juu yake, na inalenga kuwezesha mwingiliano wa mikataba unaoeleweka zaidi na binadamu kwa kutumia maoni ya [ABI](/developers/docs/smart-contracts/compiling/#web-applications) na [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) yanayopatikana kwenye faili la metadata. + +Tofauti na Etherscan, Sourcify inasaidia ulinganifu kamili na hashi ya metadata. Mikataba iliyothibitishwa hutolewa katika [hifadhi yake ya umma](https://docs.sourcify.dev/docs/repository/) kwenye HTTP na [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs), ambayo ni ghala iliyogatuliwa, ya [kushughulikiwa na maudhui](https://docs.storacha.network/concepts/content-addressing/). Hii inaruhusu kupata faili la metadata la mkataba kupitia IPFS kwa kuwa hashi ya metadata iliyoongezwa ni hashi ya IPFS. + +Zaidi ya hayo, mtu anaweza pia kupata faili za msimbo chanzo kupitia IPFS, kwa kuwa hashi za IPFS za faili hizi pia hupatikana kwenye metadata. Mkataba unaweza kuthibitishwa kwa kutoa faili la metadata na faili chanzo kupitia API yake au [UI](https://sourcify.dev/#/verifier), au kwa kutumia programu-jalizi. Zana ya ufuatiliaji ya Sourcify pia husikiliza uundaji wa mikataba kwenye bloku mpya na hujaribu kuthibitisha mikataba ikiwa metadata na faili zao chanzo zimechapishwa kwenye IPFS. + +[Zaidi kuhusu kuthibitisha mikataba kwenye Sourcify](https://soliditylang.org/blog/2020/06/25/sourcify-faq/). + +### Tenderly {#tenderly} + +[Jukwaa la Tenderly](https://tenderly.co/) huwawezesha wasanidi programu wa Web3 kujenga, kupima, kufuatilia, na kuendesha mikataba-erevu. Kwa kuchanganya zana za utatuzi na uonekanaji na vizuizi vya ujenzi wa miundombinu, Tenderly husaidia wasanidi programu kuharakisha uundaji wa mkataba-erevu. Ili kuwezesha kikamilifu vipengele vya Tenderly, wasanidi programu wanahitaji [kufanya uthibitishaji wa msimbo chanzo](https://docs.tenderly.co/monitoring/contract-verification) kwa kutumia mbinu kadhaa. + +Inawezekana kuthibitisha mkataba kwa faragha au hadharani. Ikithibitishwa kwa faragha, mkataba-erevu unaonekana kwako pekee (na wanachama wengine katika mradi wako). Kuthibitisha mkataba hadharani kunaufanya uonekane kwa kila mtu anayetumia jukwaa la Tenderly. + +Unaweza kuthibitisha mikataba yako kwa kutumia [Dashibodi](https://docs.tenderly.co/contract-verification), [programu-jalizi ya Tenderly Hardhat](https://docs.tenderly.co/contract-verification/hardhat), au [CLI](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-cli). + +Wakati wa kuthibitisha mikataba kupitia Dashibodi, unahitaji kuingiza faili chanzo au faili la metadata lililotengenezwa na kiandaaji cha Solidity, anwani/mtandao, na mipangilio ya kiandaaji. + +Kutumia programu-jalizi ya Tenderly Hardhat kunaruhusu udhibiti zaidi juu ya mchakato wa uthibitishaji kwa juhudi kidogo, kukuwezesha kuchagua kati ya uthibitishaji wa kiotomatiki (bila-msimbo) na wa mwongozo (unaotegemea-msimbo). + +## Masomo zaidi {#further-reading} + +- [Kuthibitisha msimbo chanzo wa mkataba](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) diff --git a/public/content/translations/sw/developers/docs/standards/index.md b/public/content/translations/sw/developers/docs/standards/index.md new file mode 100644 index 00000000000..ab8f35b6e17 --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/index.md @@ -0,0 +1,59 @@ +--- +title: Viwango vya Maendeleo ya Ethereum +description: Kujifunza kuhusu viwango vya Ethereum ikiwa ni pamoja na EIPs, viwango vya ishara kama ERC-20 na ERC-721, na mikataba ya maendeleo. +lang: sw +incomplete: true +--- + +## Muhtasari wa viwango {#standards-overview} + +Jumuiya ya Ethereum imepitisha viwango vingi vinavyosaidia miradi (kama vile [wateja wa Ethereum](/developers/docs/nodes-and-clients/) na mikoba) iweze kuingiliana katika utekelezaji mbalimbali, na kuhakikisha kuwa mikataba mahiri na mfumo mtawanyo wa kimamlaka unabaki kuwa na utungo. + +Kwa kawaida viwango huletwa kama [Mapendekezo ya Uboreshaji ya Ethereum](/eips/) (EIPs), ambazo hujadiliwa na wanajumuiya kupitia [mchakato wa kawaida](https://eips.ethereum.org/EIPS/eip-1). + +- [Utangulizi wa EIPs](/eips/) +- [Orodha ya EIPs](https://eips.ethereum.org/) +- [Hazina ya GitHub ya EIP](https://github.com/ethereum/EIPs) +- [Jukwaa la majadiliano la EIP](https://ethereum-magicians.org/c/eips) +- [Utangulizi wa Utawala wa Ethereum](/governance/) +- [Muhtasari wa Utawala wa Ethereum](https://web.archive.org/web/20201107234050/https://blog.bmannconsulting.com/ethereum-governance/) _Machi 31, 2019 - Boris Mann_ +- [Utawala wa Maendeleo ya Itifaki ya Ethereum na Uratibu wa Uboreshaji wa Mtandao](https://hudsonjameson.com/posts/2020-03-23-ethereum-protocol-development-governance-and-network-upgrade-coordination/) _Machi 23, 2020 - Hudson Jameson_ +- [Orodha ya kucheza ya Mikutano yote ya Wasanidi Wakuu wa Ethereum](https://www.youtube.com/@EthereumProtocol) _(Orodha ya kucheza ya YouTube)_ + +## Aina za viwango {#types-of-standards} + +Kuna aina 3 za EIPs: + +- Viwango nyayo: kueleza mabadiliko yoyote ambayo kuathiri zaidi au utekelezaji wote Ethereum +- [Njia ya Meta](https://eips.ethereum.org/meta): inaelezea mchakato unaohusu Ethereum au inapendekeza mabadiliko kwenye mchakato +- [Njia ya Habari](https://eips.ethereum.org/informational): inaelezea suala la usanifu wa Ethereum au inatoa miongozo ya jumla au taarifa kwa jumuiya ya Ethereum + +Zaidi ya hayo, kiwango nyayo kugawa katika makundi 4: + +- [Msingi](https://eips.ethereum.org/core): maboresho yanayohitaji uma wa makubaliano +- [Mtandao](https://eips.ethereum.org/networking): maboresho yanayohusu devp2p na Itifaki Ndogo ya Light Ethereum, pamoja na maboresho yaliyopendekezwa kwa vipimo vya itifaki ya mtandao ya whisper na swarm. +- [Kiolesura](https://eips.ethereum.org/interface): maboresho kuhusu vipimo na viwango vya API/RPC vya mteja, na viwango fulani vya lugha kama vile majina ya mbinu na ABI za mkataba. +- [ERC](https://eips.ethereum.org/erc): viwango na kanuni za kiwango cha programu + +Maelezo zaidi kuhusu aina na kategoria hizi tofauti yanaweza kupatikana katika [EIP-1](https://eips.ethereum.org/EIPS/eip-1#eip-types) + +### Viwango vya tokeni {#token-standards} + +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - Kiolesura cha kawaida cha tokeni zinazoweza kubadilishwa (interchangeable), kama vile tokeni za kupiga kura, tokeni za kuweka hisa au sarafu pepe. + - [ERC-223](/developers/docs/standards/tokens/erc-223/) - Kiwango cha tokeni zinazoweza kubadilishwa ambacho hufanya tokeni kuwa na tabia sawa na ether na inasaidia ushughulikiaji wa uhamisho wa tokeni kwa upande wa mpokeaji. + - [ERC-1363](/developers/docs/standards/tokens/erc-1363/) - Kiolesura cha kiendelezi cha tokeni za ERC-20 kinachosaidia utekelezaji wa simurejeshi kwenye mikataba ya mpokeaji katika muamala mmoja. +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - Kiolesura cha kawaida cha tokeni zisizoweza kubadilishwa, kama hati miliki ya mchoro au wimbo. + - [ERC-2309](https://eips.ethereum.org/EIPS/eip-2309) - Tukio la kawaida linalotolewa wakati wa kuunda/kuhamisha tokeni moja, au nyingi zisizoweza kubadilishwa kwa kutumia vitambulisho vya tokeni vinavyofuatana. + - [ERC-4400](https://eips.ethereum.org/EIPS/eip-4400) - Kiendelezi cha kiolesura cha jukumu la mtumiaji wa EIP-721. + - [ERC-4907](https://eips.ethereum.org/EIPS/eip-4907) - Huongeza jukumu la muda mfupi na ruhusa zilizozuiliwa kwa tokeni za ERC-721. +- [ERC-777](/developers/docs/standards/tokens/erc-777/) - **(HAIPENDEKEZWI)** Kiwango cha tokeni kinachoboresha ERC-20. +- [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - Kiwango cha tokeni ambacho kinaweza kuwa na mali zinazoweza kubadilishwa na zisizoweza kubadilishwa. +- [ERC-4626](/developers/docs/standards/tokens/erc-4626/) - Kiwango cha kuba la tokeni iliyoundwa ili kuboresha na kuunganisha vigezo vya kiufundi vya kuba zinazotoa mavuno. + +Jifunze zaidi kuhusu [viwango vya tokeni](/developers/docs/standards/tokens/). + +## Masomo zaidi {#further-reading} + +- [Mapendekezo ya Uboreshaji ya Ethereum (EIPs)](/eips/) + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-1155/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-1155/index.md new file mode 100644 index 00000000000..d371221b996 --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-1155/index.md @@ -0,0 +1,146 @@ +--- +title: ERC-1155 Mengi-ishara Kiwango +description: Jifunze kuhusu ERC-1155, kiwango cha tokeni-nyingi ambacho kinachanganya tokeni zinazoweza kubadilishana na zisizoweza kubadilishana katika mkataba mmoja. +lang: sw +--- + +## Utangulizi {#introduction} + +Kiwango Mtandao kwa ajili ya mikataba ambayo kusimamia aina nyingi ishara. Mkataba mmoja uliotumwa unaweza kuwa na mchanganyiko wowote wa tokeni zinazoweza kubadilishana, tokeni zisizoweza kubadilishana au usanidi mwingine (k.m., tokeni nusu-badilishani). + +**Nini maana ya mengi-ishara kiwango?** + +Wazo ni rahisi na inataka kujenga erevu mkataba ni Mtandao ambayo inaweza kuwakilisha na kudhibiti idadi yoyote ya badilishwa na zisizo badilishwa aina ishara. Kwa njia hii, tokeni ya ERC-1155 inaweza kufanya kazi sawa na tokeni ya [ERC-20](/developers/docs/standards/tokens/erc-20/) na [ERC-721](/developers/docs/standards/tokens/erc-721/), na hata zote mbili kwa wakati mmoja. Wezesha utendaji wa viwango vya ERC-20 na ERC-721, na kuifanya iwe na ufanisi zaidi na kurekebisha makosa dhahiri ya utekelezaji. + +Tokeni ya ERC-1155 imeelezewa kikamilifu katika [EIP-1155](https://eips.ethereum.org/EIPS/eip-1155). + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri, tunapendekeza kwanza usome kuhusu [viwango vya tokeni](/developers/docs/standards/tokens/), [ERC-20](/developers/docs/standards/tokens/erc-20/), na [ERC-721](/developers/docs/standards/tokens/erc-721/). + +## Kazi na Vipengele vya ERC-1155: {#body} + +- [Uhamisho wa Kundi](#batch_transfers): Hamisha rasilimali nyingi kwa wito mmoja. +- [Salio la Kundi](#batch_balance): Pata salio za rasilimali nyingi kwa wito mmoja. +- [Idhini ya Kundi](#batch_approval): Idhinisha tokeni zote kwa anwani. +- [Hook](#receive_hook): Hook ya kupokea tokeni. +- [Usaidizi wa NFT](#nft_support): Ikiwa usambazaji ni 1 pekee, ichukulie kama NFT. +- [Kanuni za Uhamisho Salama](#safe_transfer_rule): Seti ya kanuni za uhamisho salama. + +### Uhamisho wa Kundi {#batch-transfers} + +Uhamisho wa kundi hufanya kazi sawa na uhamisho wa kawaida wa ERC-20. Hebu tuangalie kazi ya kawaida ya `transferFrom` ya ERC-20: + +```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; +``` + +Tofauti tu katika ERC-1155 ni kwamba sisi kupita maadili kama safu na sisi pia kupita safu ya kitambulisho. Kwa mfano, ukipewa `ids=[3, 6, 13]` na `values=[100, 200, 5]`, uhamisho utakaotokea utakuwa + +1. Hamisha tokeni 100 zenye id 3 kutoka `_from` kwenda `_to`. +2. Hamisha tokeni 200 zenye id 6 kutoka `_from` kwenda `_to`. +3. Hamisha tokeni 5 zenye id 13 kutoka `_from` kwenda `_to`. + +Katika ERC-1155 tuna `transferFrom` pekee, hakuna `transfer`. Ili kuitumia kama `transfer` ya kawaida, weka tu anwani ya kutoka iwe anwani inayoita kazi. + +### Salio la Kundi {#batch-balance} + +Wito husika wa `balanceOf` wa ERC-20 kadhalika una kazi yake mshirika yenye usaidizi wa kundi. Kama ukumbusho, hii ni ERC-20 toleo: + +```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); +``` + +Hata rahisi kwa usawa wito, tunaweza kupata mizani nyingi katika wito moja. Sisi kupita safu ya wenyeji, kufuatia na safu ya kitambulisho ishara. + +Kwa mfano ukipewa `_ids=[3, 6, 13]` na `_owners=[0xbeef..., 0x1337..., 0x1111...]`, thamani ya kurudi itakuwa + +```solidity +[ + balanceOf(0xbeef...), + balanceOf(0x1337...), + balanceOf(0x1111...) +] +``` + +### Idhini ya Kundi {#batch-approval} + +```solidity +// ERC-1155 +function setApprovalForAll( + address _operator, + bool _approved +) external; + +function isApprovedForAll( + address _owner, + address _operator +) external view returns (bool); +``` + +Idhini ni tofauti kidogo kuliko ERC-20. Badala ya kuidhinisha kiasi maalum, unaweka opereta kuwa ameidhinishwa au hajaidhinishwa kupitia `setApprovalForAll`. + +Kusoma hali ya sasa kunaweza kufanywa kupitia `isApprovedForAll`. Kama una tazama, ni operesheni ya yote au hakuna. Huwezi kufafanua jinsi ishara nyingi kupitisha au hata ambayo ishara ya darasa. + +Hii ni makusudi iliyoundwa na unyenyekevu katika akili. Unaweza tu kupitisha kila kitu kwa anwani moja. + +### Hook ya Kupokea {#receive-hook} + +```solidity +function onERC1155BatchReceived( + address _operator, + address _from, + uint256[] calldata _ids, + uint256[] calldata _values, + bytes calldata _data +) external returns(bytes4); +``` + +Kwa usaidizi wa [EIP-165](https://eips.ethereum.org/EIPS/eip-165), ERC-1155 inasaidia hook za kupokea kwa mikataba-erevu pekee. Kulabu kazi lazima kurudi uchawi kabla ya faini baiti4 thamani ambayo ni kutokana na: + +```solidity +bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) +``` + +Wakati mkataba kupokea anarudi thamani hii, kuchukuliwa mkataba anakubali uhamisho na anajua jinsi ya kushughulikia ERC-1155 ishara. Kubwa, hakuna zaidi kukwama ishara katika mkataba! + +### Usaidizi wa NFT {#nft-support} + +Wakati ugavi ni moja tu, ishara ni kimsingi ishara zisizo badilishwa (NFT). Na kama ni kiwango kwa ERC-721, unaweza kufafanua URL habari. URL inaweza kusomwa na kubadilishwa na wateja, angalia [hapa](https://eips.ethereum.org/EIPS/eip-1155#metadata). + +### Kanuni ya Uhamisho Salama {#safe-transfer-rule} + +Tumekuwa kuguswa juu ya utawala chache salama uhamisho tayari katika maelezo ya awali. Lakini hebu tazama utawala muhimu zaidi: + +1. Mtoa wito lazima aidhinishwe kutumia tokeni za anwani ya `_from` au mtoa wito lazima awe sawa na `_from`. +2. Wito uhamisho lazima kurudi kama + 1. Anwani ya `_to` ni 0. + 2. urefu wa `_ids` si sawa na urefu wa `_values`. + 3. salio lolote la mmiliki kwa ajili ya tokeni katika `_ids` ni dogo kuliko kiasi husika katika `_values` kilichotumwa kwa mpokeaji. + 4. kosa lolote lingine hutokea. + +_Kumbuka_: Kazi zote za kundi, ikiwemo hook, pia zinapatikana kama matoleo yasiyo na kundi. Hii ni kufanyika kwa ajili ya ufanisi wa gesi, kuzingatia kuhamisha tu mali moja pengine bado kuwa njia ya kawaida kutumika. Wacha nje kwa uwazi katika maelezo, ikiwa ni pamoja na utawala za uhamisho salama. Majina ni sawa, tu kuondoa 'Kikundi'. + +## Masomo zaidi {#further-reading} + +- [EIP-1155: Kiwango cha Tokeni Nyingi](https://eips.ethereum.org/EIPS/eip-1155) +- [ERC-1155: Nyaraka za OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/erc1155) +- [ERC-1155: Repo ya GitHub](https://github.com/enjin/erc-1155) +- [API ya NFT ya Alchemy](https://www.alchemy.com/docs/reference/nft-api-quickstart) diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-1363/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-1363/index.md new file mode 100644 index 00000000000..cc37444cb58 --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-1363/index.md @@ -0,0 +1,213 @@ +--- +title: Kiwango cha Tokeni ya Kulipwa cha ERC-1363 +description: ERC-1363 ni kiolesura cha upanuzi kwa tokeni za ERC-20 ambacho kinawezesha utekelezaji wa mantiki maalum kwenye mkataba wa mpokeaji baada ya uhamisho, au kwenye mkataba wa mtumiaji baada ya idhini, yote ndani ya muamala mmoja. +lang: sw +--- + +## Utangulizi {#introduction} + +### ERC-1363 ni nini? {#what-is-erc1363} + +ERC-1363 ni kiolesura cha upanuzi kwa tokeni za ERC-20 ambacho kinawezesha utekelezaji wa mantiki maalum kwenye mkataba wa mpokeaji baada ya uhamisho, au kwenye mkataba wa mtumiaji baada ya idhini, yote ndani ya muamala mmoja. + +### Tofauti kutoka ERC-20 {#erc20-differences} + +Operesheni za kawaida za ERC-20 kama `transfer`, `transferFrom` na `approve`, haziruhusu utekelezaji wa msimbo kwenye mkataba wa mpokeaji au mtumiaji bila muamala tofauti. +Hii inaleta ugumu katika uundaji wa UI na kikwazo katika utumiaji kwa sababu watumiaji lazima wasubiri muamala wa kwanza utekelezwe na kisha wawasilishe wa pili. +Lazima pia walipe GAS mara mbili. + +ERC-1363 inafanya tokeni zinazoweza kubadilishwa kuwa na uwezo wa kutekeleza vitendo kwa urahisi zaidi na kufanya kazi bila kutumia msikilizaji yeyote wa nje ya mnyororo. +Inaruhusu kufanya mwitikio kwenye mkataba wa mpokeaji au mtumiaji, baada ya uhamisho au idhini, katika muamala mmoja. + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri zaidi, tunapendekeza usome kwanza kuhusu: + +- [Viwango vya tokeni](/developers/docs/standards/tokens/) +- [ERC-20](/developers/docs/standards/tokens/erc-20/) + +## Mwili{#body} + +ERC-1363 inaleta API ya kawaida kwa tokeni za ERC-20 ili kuingiliana na mikataba-erevu baada ya `transfer`, `transferFrom` au `approve`. + +Kiwango hiki kinatoa utendaji wa msingi wa kuhamisha tokeni, pamoja na kuruhusu tokeni kuidhinishwa ili ziweze kutumiwa na mhusika mwingine wa tatu kwenye mnyororo, na kisha kufanya mwitikio kwenye mkataba wa mpokeaji au mtumiaji. + +Kuna matumizi mengi yaliyopendekezwa ya mikataba-erevu ambayo inaweza kukubali mwitikio wa ERC-20. + +Mifano inaweza kuwa: + +- **Crowdsales**: tokeni zilizotumwa huchochea ugawaji wa zawadi papo hapo. +- **Huduma**: malipo huwasha ufikiaji wa huduma kwa hatua moja. +- **Ankara**: tokeni hulipa ankara kiotomatiki. +- **Usajili**: kuidhinisha kiwango cha mwaka huwasha usajili ndani ya malipo ya mwezi wa kwanza. + +Kwa sababu hizi hapo awali iliitwa **"Tokeni ya Kulipwa"**. + +Tabia ya mwitikio hupanua zaidi manufaa yake, na kuwezesha mwingiliano usio na mshono kama vile: + +- **Kusimamisha**: tokeni zilizohamishwa huchochea kufungwa kiotomatiki katika mkataba wa kusimamisha. +- **Kupiga kura**: tokeni zilizopokewa husajili kura katika mfumo wa utawala. +- **Kubadilisha**: idhini za tokeni huwasha mantiki ya kubadilisha kwa hatua moja. + +Tokeni za ERC-1363 zinaweza kutumika kwa manufaa maalum katika visa vyote vinavyohitaji mwitikio kutekelezwa baada ya uhamisho au idhini kupokewa. +ERC-1363 pia ni muhimu kwa kuepuka upotevu wa tokeni au kufungiwa kwa tokeni katika mikataba-erevu kwa kuthibitisha uwezo wa mpokeaji kushughulikia tokeni. + +Tofauti na mapendekezo mengine ya upanuzi wa ERC-20, ERC-1363 haibatilishi mbinu za ERC-20 `transfer` na `transferFrom` na inafafanua Vitambulisho vya violesura vitakavyotekelezwa huku ikidumisha uoanifu nyuma na ERC-20. + +Kutoka [EIP-1363](https://eips.ethereum.org/EIPS/eip-1363): + +### Mbinu {#methods} + +Mikataba-erevu inayotekeleza kiwango cha ERC-1363 **LAZIMA** itekeleze kazi zote katika kiolesura cha `ERC1363`, pamoja na violesura vya `ERC20` na `ERC165`. + +```solidity +pragma solidity ^0.8.0; + +/** + * @title ERC1363 + * @dev Kiolesura cha upanuzi kwa tokeni za ERC-20 ambacho kinawezesha utekelezaji wa msimbo kwenye mkataba wa mpokeaji + * baada ya `transfer` au `transferFrom`, au msimbo kwenye mkataba wa mtumiaji baada ya `approve`, katika muamala mmoja. + */ +interface ERC1363 is ERC20, ERC165 { + /* + * KUMBUKA: kitambulisho cha ERC-165 kwa kiolesura hiki ni 0xb0202a11. + * 0xb0202a11 === + * bytes4(keccak256('transferAndCall(address,uint256)')) ^ + * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ + * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ + * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^ + * bytes4(keccak256('approveAndCall(address,uint256)')) ^ + * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) + */ + + /** + * @dev Huhamisha kiasi cha `value` cha tokeni kutoka kwa akaunti ya mwitaji hadi `to` + * kisha huita `ERC1363Receiver::onTransferReceived` kwenye `to`. + * @param to Anwani ambayo tokeni zinahamishiwa. + * @param value Kiasi cha tokeni kitakachohamishwa. + * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu. + */ + function transferAndCall(address to, uint256 value) external returns (bool); + + /** + * @dev Huhamisha kiasi cha `value` cha tokeni kutoka kwa akaunti ya mwitaji hadi `to` + * kisha huita `ERC1363Receiver::onTransferReceived` kwenye `to`. + * @param to Anwani ambayo tokeni zinahamishiwa. + * @param value Kiasi cha tokeni kitakachohamishwa. + * @param data Data ya ziada isiyo na umbizo maalum, iliyotumwa katika wito kwa `to`. + * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu. + */ + function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool); + + /** + * @dev Huhamisha kiasi cha `value` cha tokeni kutoka `from` kwenda `to` kwa kutumia utaratibu wa posho + * kisha huita `ERC1363Receiver::onTransferReceived` kwenye `to`. + * @param from Anwani ambayo tokeni zinatumwa kutoka. + * @param to Anwani ambayo tokeni zinahamishiwa. + * @param value Kiasi cha tokeni kitakachohamishwa. + * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu. + */ + function transferFromAndCall(address from, address to, uint256 value) external returns (bool); + + /** + * @dev Huhamisha kiasi cha `value` cha tokeni kutoka `from` kwenda `to` kwa kutumia utaratibu wa posho + * kisha huita `ERC1363Receiver::onTransferReceived` kwenye `to`. + * @param from Anwani ambayo tokeni zinatumwa kutoka. + * @param to Anwani ambayo tokeni zinahamishiwa. + * @param value Kiasi cha tokeni kitakachohamishwa. + * @param data Data ya ziada isiyo na umbizo maalum, iliyotumwa katika wito kwa `to`. + * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu. + */ + function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool); + + /** + * @dev Huweka kiasi cha `value` cha tokeni kama posho ya `spender` juu ya tokeni za mwitaji + * kisha huita `ERC1363Spender::onApprovalReceived` kwenye `spender`. + * @param spender Anwani itakayotumia fedha. + * @param value Kiasi cha tokeni kitakachotumiwa. + * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu. + */ + function approveAndCall(address spender, uint256 value) external returns (bool); + + /** + * @dev Huweka kiasi cha `value` cha tokeni kama posho ya `spender` juu ya tokeni za mwitaji + * kisha huita `ERC1363Spender::onApprovalReceived` kwenye `spender`. + * @param spender Anwani itakayotumia fedha. + * @param value Kiasi cha tokeni kitakachotumiwa. + * @param data Data ya ziada isiyo na umbizo maalum, iliyotumwa katika wito kwa `spender`. + * @return Thamani ya boolean inayoonyesha operesheni ilifanikiwa isipokuwa kama kuna hitilafu. + */ + function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); +} + +interface ERC20 { + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + function transfer(address to, uint256 value) external returns (bool); + function transferFrom(address from, address to, uint256 value) external returns (bool); + function approve(address spender, uint256 value) external returns (bool); + function totalSupply() external view returns (uint256); + function balanceOf(address account) external view returns (uint256); + function allowance(address owner, address spender) external view returns (uint256); +} + +interface ERC165 { + function supportsInterface(bytes4 interfaceId) external view returns (bool); +} +``` + +Mkataba-erevu unaotaka kukubali tokeni za ERC-1363 kupitia `transferAndCall` au `transferFromAndCall` **LAZIMA** utekeleze kiolesura cha `ERC1363Receiver`: + +```solidity +/** + * @title ERC1363Receiver + * @dev Kiolesura cha mkataba wowote unaotaka kusaidia `transferAndCall` au `transferFromAndCall` kutoka kwa mikataba ya tokeni ya ERC-1363. + */ +interface ERC1363Receiver { + /** + * @dev Wakati wowote tokeni za ERC-1363 zinapohamishiwa kwenye mkataba huu kupitia `ERC1363::transferAndCall` au `ERC1363::transferFromAndCall` + * na `operator` kutoka `from`, kazi hii inaitwa. + * + * KUMBUKA: Ili kukubali uhamisho, ni lazima hii irudishe + * `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` + * (yaani 0x88a7ca5c, au kiteuzi chake cha kazi). + * + * @param operator Anwani iliyoita kazi ya `transferAndCall` au `transferFromAndCall`. + * @param from Anwani ambayo tokeni zinahamishwa kutoka. + * @param value Kiasi cha tokeni zilizohamishwa. + * @param data Data ya ziada isiyo na umbizo maalum. + * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` ikiwa uhamisho unaruhusiwa isipokuwa kama kuna hitilafu. + */ + function onTransferReceived(address operator, address from, uint256 value, bytes calldata data) external returns (bytes4); +} +``` + +Mkataba-erevu unaotaka kukubali tokeni za ERC-1363 kupitia `approveAndCall` **LAZIMA** utekeleze kiolesura cha `ERC1363Spender`: + +```solidity +/** + * @title ERC1363Spender + * @dev Kiolesura cha mkataba wowote unaotaka kusaidia `approveAndCall` kutoka kwa mikataba ya tokeni ya ERC-1363. + */ +interface ERC1363Spender { + /** + * @dev Wakati wowote `mmiliki` wa tokeni za ERC-1363 anapoidhinisha mkataba huu kupitia `ERC1363::approveAndCall` + * kutumia tokeni zao, kazi hii inaitwa. + * + * KUMBUKA: Ili kukubali idhini, hii lazima irudishe + * `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` + * (yaani 0x7b04a2d0, au kiteuzi chake cha kazi). + * + * @param owner Anwani iliyoita kazi ya `approveAndCall` na iliyomiliki tokeni hapo awali. + * @param value Kiasi cha tokeni kitakachotumiwa. + * @param data Data ya ziada isiyo na umbizo maalum. + * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` ikiwa idhini inaruhusiwa isipokuwa kama kuna hitilafu. + */ + function onApprovalReceived(address owner, uint256 value, bytes calldata data) external returns (bytes4); +} +``` + +## Masomo zaidi {#further-reading} + +- [ERC-1363: Kiwango cha Tokeni ya Kulipwa](https://eips.ethereum.org/EIPS/eip-1363) +- [ERC-1363: Repo ya GitHub](https://github.com/vittominacori/erc1363-payable-token) diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md new file mode 100644 index 00000000000..800d3821df4 --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md @@ -0,0 +1,192 @@ +--- +title: ERC-20 ishara kiwango +description: Kujifunza kuhusu ERC-20, kiwango kwa ishara kubadilisha juu ya Ethereum kwamba kuwezesha maombi ishara kuingiliana. +lang: sw +--- + +## Utangulizi {#introduction} + +**Ishara Ni Nini?** + +Ishara inaweza kuwakilisha kitu chochote katika Ethereum: + +- sifa hatua katika jukwaa Mtandao +- ujuzi wa tabia katika mchezo +- mali ya kifedha kama sehemu katika kampuni +- sarafu ya fedha kama USD +- pauni moja ya dhahabu +- na zaidi... + +Kama kipengele nguvu ya Ethereum lazima kuangaliwa na kiwango imara, haki? Hiyo ni hasa +ambapo ERC-20 ina jukumu yake! Kiwango hiki kuruhusu watengenezaji kujenga maombi ishara kwamba ni kulingana na bidhaa nyingine na huduma. Kiwango cha ERC-20 pia hutumiwa kutoa utendaji zaidi kwa [ether](/glossary/#ether). + +**ERC-20 ni nini?** + +Ya ERC-20 utangulizi kiwango kwa badilishwa ishara, kwa maneno mengine, wana mali ambayo kueneza kila ishara kuwa hasa +sawa (katika aina na thamani) kama ishara nyingine. Kwa mfano, ERC-20 ishara vitendo tu kama ETH, maana yake ni kwamba 1 ishara +ni na siku zote itakuwa sawa na ishara nyingine zote. + +## Mahitaji ya awali {#prerequisites} + +- Hifadhi ya fedha (/developers/docs/accounts) +- [Mkataba erevu](/developers/docs/smart-contracts/) +- [Viwango vya tokeni](/developers/docs/standards/tokens/) + +## Mwili{#body} + +ERC-20 (Ethereum Ombi la Maoni 20), kupendekeza na Fabian Vogelsteller mnamo Novemba 2015, ni Kiwango cha ishara ambacho +kutekeleza API kwa ishara ndani ya Mikataba erevu. + +Mfano utendaji ERC-20 hutoa: + +- kuhamisha ishara kutoka hifadhi ya fedha moja hadi nyingine +- kupata usawa wa sasa ishara ya hifadhi ya fedha +- kupata ugavi jumla ya ishara inapatikana kwenye Mtandao +- kupitisha kama kiasi cha ishara kutoka hifadhi ya fedha inaweza kutumika kwa hifadhi ya mtu wa tatu + +Kama erevu mkataba kutekeleza mbinu kufuatia na matukio inaweza kuitwa ERC-20 ishara ya mkataba na, mara moja kupelekwa, ni +itakuwa na jukumu la kufuatilia ishara iliyoundwa kwenye Ethereum. + +Kutoka [EIP-20](https://eips.ethereum.org/EIPS/eip-20): + +### Mbinu {#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) +``` + +### Matukio {#events} + +```solidity +event Transfer(address indexed _from, address indexed _to, uint256 _value) +event Approval(address indexed _owner, address indexed _spender, uint256 _value) +``` + +### Mifano {#web3py-example} + +Hebu angalia jinsi kiwango ni muhimu sana kufanya jambo rahisi kwa ajili yetu ya kukagua yoyote ERC-20 ishara ya mkataba juu ya Ethereum. +Sisi tu haja ya Mkataba wa Maombi jozi Mtandao (ABI) kujenga Mtandao kwa yoyote ERC-20 ishara. Ama unaweza +Tazama chini kutumia ABI rahisi, kuifanya mfano wa msuguano mdogo. + +#### Mfano wa Web3.py {#web3py-example} + +Kwanza, hakikisha umesakinisha maktaba ya Python ya [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation): + +``` +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" # Ether iliyofungwa (WETH) + +acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 2 + +# Huu ni Kiolesura Kilichorahisishwa cha Programu ya Mkataba (ABI) ya Mkataba wa Tokeni wa ERC-20. +# Itaonyesha tu mbinu: balanceOf(address), decimals(), symbol() na 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) +``` + +## Masuala yanayojulikana {#erc20-issues} + +### Suala la upokeaji wa tokeni ya ERC-20 {#reception-issue} + +**Kufikia 06/20/2024, angalau tokeni za ERC-20 zenye thamani ya $83,656,418 zilipotea kutokana na suala hili. Kumbuka kwamba utekelezaji halisi wa ERC-20 unakabiliwa na tatizo hili isipokuwa utekeleze seti ya vikwazo vya ziada juu ya kiwango kama ilivyoorodheshwa hapa chini.** + +Wakati ishara za ERC-20 kutumwa kwa mkataba mzuri ambao hakuna iliyoundwa kushughulikia ishara za ERC-20, ishara hizo zinaweza kupotea kabisa. Hii hutokea kwa sababu ya kupokea mkataba hana utendaji wa kutambua au kujibu ishara inayoingia, na hakuna utaratibu katika ERC-20 kiwango kuwajulisha kupokea mkataba kuhusu ishara inayoingia. Njia kuu suala hili inachukua sura ni kupitia: + +1. Ishara uhamisho utaratibu + +- ERC-20 ishara ni kuhamisha kwa kutumia uhamisho au uhamisho kutoka kazi + - Wakati mtumiaji tuma ishara kwa anwani ya mkataba kwa kutumia kazi hizi, ishara ni kuhamisha bila kujali kama mkataba kupokea ni iliyoundwa kushughulikia yao + +2. Ukosefu wa taarifa + - Mkataba kupokea haina kupokea taarifa au wito nyuma kwamba ishara wamekuwa alituma yake + - Kama mkataba kupokea haina utaratibu wa kushughulikia ishara (kwa mfano, kazi ya kurudi au kazi ya kujitolea kusimamia mapokezi ishara), ishara ni ufanisi kukwama katika anwani ya mkataba +3. Hakuna kujengwa katika utunzaji + - Kiwango ERC-20 haina ni pamoja na kazi ya lazima kwa ajili ya kupokea mikataba ya kutekeleza, na kusababisha hali ambapo mikataba mengi ni hawawezi kusimamia ishara inayokuja vizuri + +**Suluhisho inawezekana** + +Wakati haiwezekani kuzuia suala hili na ERC-20 kabisa kuna mbinu ambayo kuruhusu kwa kiasi kikubwa kupunguza uwezekano wa kupoteza ishara kwa mtumiaji wa mwisho: + +- Tatizo la kawaida zaidi ni wakati mtumiaji anapotuma tokeni kwenye anwani ya mkataba wa tokeni yenyewe (k.m., USDT imewekwa kwenye anwani ya mkataba wa tokeni ya USDT). Inapendekezwa kuzuia kazi ya `transfer(..)` ili kurudisha majaribio kama hayo ya uhamisho. Fikiria kuongeza uhakiki wa `require(_to != address(this));` ndani ya utekelezaji wa kazi ya `transfer(..)`. +- Kazi ya `transfer(..)` kwa ujumla haikuundwa kwa ajili ya kuweka tokeni kwenye mikataba. `kukubali(..) Mfumo wa `& transferFrom(..)`hutumika kuweka tokeni za ERC-20 kwenye mikataba badala yake. Inawezekana kuzuia kazi ya uhamisho ili kutoruhusu kuweka tokeni kwenye mikataba yoyote nayo, hata hivyo inaweza kuvunja uoanifu na mikataba ambayo inachukulia kuwa tokeni zinaweza kuwekwa kwenye mikataba kwa kutumia kazi ya`trasnfer(..)\` (k.m., mabwawa ya ukwasi ya Uniswap). +- Njia kudhani kwamba ERC-20 ishara inaweza kumaliza katika mkataba wako hata kama mkataba huo si lazima milele kupokea yoyote. Hakuna njia ya kuzuia au kukataa amana ya bahati mbaya juu ya mwisho wa wapokeaji. Kushauriwa kutekeleza kazi ambayo kuruhusu kuchimba ishara za ERC-20 zilizowekwa kwa bahati mbaya. +- Fikiria kutumia viwango vya ishara mabadala. + +Baadhi ya viwango mbadala vimetokana na suala hili kama vile [ERC-223](/developers/docs/standards/tokens/erc-223) au [ERC-1363](/developers/docs/standards/tokens/erc-1363). + +## Masomo zaidi {#further-reading} + +- [EIP-20: ERC-20 ishara kiwango](https://eips.ethereum.org/EIPS/eip-20) +- [OpenZeppelin - Tokeni](https://docs.openzeppelin.com/contracts/3.x/tokens#ERC20) +- [OpenZeppelin - Utekelezaji wa ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) +- [Alchemy - Mwongozo wa Tokeni za Solidity ERC20](https://www.alchemy.com/overviews/erc20-solidity) + +## Viwango vingine vya tokeni vinavyoweza kubadilishwa {#fungible-token-standards} + +- [ERC-223](/developers/docs/standards/tokens/erc-223) +- [ERC-1363](/developers/docs/standards/tokens/erc-1363) +- [ERC-777](/developers/docs/standards/tokens/erc-777) +- [ERC-4626 - Hifadhi za tokeni](/developers/docs/standards/tokens/erc-4626) diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md new file mode 100644 index 00000000000..2d65c97ce0f --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md @@ -0,0 +1,200 @@ +--- +title: ERC-223 ishara kiwango +description: Maelezo ya jumla ya ERC-223 badilishwa ishara ya kiwango, jinsi kufanya kazi, na linganisha na ERC-20. +lang: sw +--- + +## Utangulizi {#introduction} + +### ERC-223 ni nini? {#what-is-erc223} + +ERC-223 ni kiwango kwa ishara badilisha, sawa na kiwango ERC-20. Tofauti kuu ni kwamba ERC-223 hufafanua si tu ishara API lakini pia hoja kwa ajili ya kuhamisha ishara kutoka wa tuma kwa mpokeaji. Anzisha mfano wa mawasiliano ambayo kuruhusu uhamisho wa ishara shughulika kwa upande wa mpokeaji. + +### Tofauti kutoka ERC-20 {#erc20-differences} + +ERC-223 shughulika baadhi ya mapungufu ya ERC-20 na kuanzisha njia mpya ya mwingiliano kati ya mkataba ishara na mkataba ambayo inaweza kupokea ishara. Kuna jambo machache ambayo inawezekana na ERC-223 lakini si na ERC-20: + +- Usimamizi wa uhamisho wa ishara kwa upande wa mpokeaji: Wapokeaji wanaweza kugundua kuwa ishara ya ERC-223 imewekwa. +- Kukataliwa kwa ishara vibaya walio tuma: Ikiwa mtumiaji tuma ishara za ERC-223 kwa mkataba ambao hakuna kupokea ishara, mkataba unaweza kukataa shughuli hiyo, kuzuia kupoteza wa ishara. +- Metadata katika uhamisho: ERC-223 ishara inaweza ni pamoja na metadata, kuruhusu taarifa arbitrary kuwa masharti ya ishara shughuli. + +## Mahitaji ya awali {#prerequisites} + +- Hifadhi ya fedha (/developers/docs/accounts) +- [Mkataba erevu](/developers/docs/smart-contracts/) +- [Viwango vya tokeni](/developers/docs/standards/tokens/) +- [ERC-20](/developers/docs/standards/tokens/erc-20/) + +## Mwili{#body} + +ERC-223 ni ishara ya kiwango ambacho kutekeleza API kwa ishara ndani ya mikataba erevu. Pia kutangaza API kwa ajili ya mikataba ambayo kuhitaji kupokea ERC-223 ishara. Mikataba ambayo haina msaada ERC-223 mpokeaji API haiwezi kupokea ERC-223 ishara, kuzuia makosa ya mtumiaji. + +Kama mkataba erevu kutekeleza mbinu kufuatia na matukio inaweza kuitwa ERC-223 sambamba ishara mkataba. Mara kupelekwa, ni +itakuwa na jukumu la kufuatilia ishara iliyoundwa kwenye Ethereum. + +Mkataba si wajibu wa kuwa na kazi hizi tu na muumba unaweza kuongeza kipengele kingine chochote kutoka viwango vya ishara tofauti na mkataba huu. Kwa mfano, `kubali ` na `kuhamisha Kutoka ` kazi si sehemu ya kiwango ERC-223 lakini kazi hizi inaweza kutekelezwa kama ni lazima. + +Kutoka [EIP-223](https://eips.ethereum.org/EIPS/eip-223): + +### Mbinu {#methods} + +ERC-223 ishara lazima kutekeleza mbinu kufuatia: + +```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) +``` + +Mkataba ambayo inadhaniwa kupokea ERC-223 ishara lazima kutekeleza mbinu kufuatia: + +```solidity +function tokenReceived(address _from, uint _value, bytes calldata _data) +``` + +Kama ERC-223 ishara ni alimtuma kwa mkataba kwamba haina kutekeleza `ishara pokewa(..) ` kazi basi uhamisho lazima kushindwa na ishara lazima si kuhamisha kutoka usawa wa alio tuma. + +### Matukio {#events} + +```solidity +event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes calldata _data) +``` + +### Mfano {#examples} + +API ya ERC-223 ishara ni sawa na ile ya ERC-20, hivyo kutoka UI maendeleo mtazamo hakuna tofauti. Tofauti pekee hapa ni kwamba ERC-223 ishara haiwezi kuwa na 'kubali' + 'uhamisho kutoka' kazi kama haya ni hiari kwa ajili ya kiwango hiki. + +#### Mifano ya Solidity {#solidity-example} + +Mfano ufuatao unaonyesha jinsi ya msingi ERC-223 ishara mkataba kazi: + +```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; + } +} +``` + +Sasa tunataka mkataba mwingine kukubali amana ya ishara ya A kwa kudhani kwamba ishara ya A ni ishara ya ERC-223. Mkataba lazima kukubali tu ishara A na kukataa ishara nyingine yoyote. Wakati mkataba anapata ishara A ni lazima kutoa tukio la 'amana()' na kuongeza thamani ya ndani 'amana' kutofautiana. + +Hapa ni nambari: + +```solidity +contract RecipientContract is IERC223Recipient { + event Deposit(address whoSentTheTokens); + uint256 deposits = 0; + address tokenA; // Tokeni pekee tunayotaka kukubali. + function tokenReceived(address _from, uint _value, bytes memory _data) public override + { + // Ni muhimu kuelewa kwamba ndani ya utendakazi huu + // msg.sender ni anwani ya tokeni inayopokewa, + // msg.value daima ni 0 kwa vile mkataba wa tokeni haumiliki wala kutuma ether katika hali nyingi, + // _from ni mtumaji wa uhamishaji wa tokeni, + // _value ni kiasi cha tokeni kilichowekwa. + require(msg.sender == tokenA); + deposits += _value; + emit Deposit(_from); + } +} +``` + +## Maswali yanayoulizwa mara kwa mara {#faq} + +### Nini kutokea kama sisi tuma baadhi ya ishara B kwa mkataba? {#sending-tokens} + +Mkataba utashindwa, na uhamisho wa ishara hakuna kutokea. Ishara kurudi kwenye anwani ya aliye tuma. + +### Tunaweza aje kuweka amana kwa mkataba huu? {#contract-deposits} + +Wito `uhamisho (anwani,uint256) ` au `uhamisho (anwani,uint256,bytes) ` kazi ya ERC-223 ishara, kutaja anwani ya `Mpokeaji Mkataba`. + +### Nini kutokea kama sisi kuhamisha ERC-20 ishara ya mkataba huu? {#erc-20-transfers} + +Kama ishara ERC-20 ni alimtuma kwa `Mpokeaji mkataba`, ishara itakuwa na uhamisho, lakini uhamisho itakuwa si kujulikana (hakuna `amana() ` tukio itakuwa ya kutolewa, na amana thamani hakuna badiliko). Hakuna kwenye ERC-20 amana haiwezi kuchuja au kuzuia. + +### Nini kama tunataka kutekeleza baadhi ya kazi baada ya amana ishara ni kukamilika? {#function-execution} + +Kuna njia nyingi za kufanya hivyo. Katika mfano huu kufuata njia ambayo kufanya ERC-223 uhamisho sawa na uhamisho Ether: + +```solidity +contract RecipientContract is IERC223Recipient { + event Foo(); + event Bar(uint256 someNumber); + address tokenA; // Tokeni pekee tunayotaka kukubali. + function tokenReceived(address _from, uint _value, bytes memory _data) public override + { + require(msg.sender == tokenA); + address(this).call(_data); // Shikilia muamala unaoingia na ufanye wito wa utendakazi unaofuata. + } + function foo() public + { + emit Foo(); + } + function bar(uint256 _someNumber) public + { + emit Bar(_someNumber); + } +} +``` + +Wakati `Mpokeaji Mkataba` atapokea ERC-223 ishara ya mkataba elekez kazi mwandiko wa fumbo kama `_takwimu`kigezo ya shughuli ishara, sawa na jinsi shughuli Ether kanuni wito kazi kama shughuli `takwimu`. Soma [sehemu ya data](/developers/docs/transactions/#the-data-field) kwa habari zaidi. + +Katika mfano hapo juu ERC-223 ishara lazima uhamisho kwa anwani ya `Mpokeaji Mkataba` na `uhamisho(anwani,uin256,bytes wito takwimu _takwimu) ` kazi. Kama takwimu kigezo itakuwa `0xc2985578` (saini ya `foo() ` kazi) basi kazi foo() itaitwa baada ya amana ishara ni kupokea na tukio Foo() itakuwa kuacha. + +Vigezo inaweza mwandiko wa fumbo katika `takwimu ` ya uhamisho ishara kama, kwa mfano tunaweza wito bar () kazi na 12345 thamani kwa `_baadhi Idadi `. Katika kesi hii `takwimu` lazima +`0x0423a13200000000000000000000000000000000000000000000000000000000000004d2' ambapo '0x0423a132` ni saini ya kazi ya `bar(uint256) ` na `00000000000000000000000000000000000000000000000000000000000004d2` ni 12345 kama uint256. + +## Vizuizi {#limitations} + +Wakati ERC-223 kushughulikia suala kadhaa kupatikana katika kiwango ERC-20, ni si bila mapungufu yake mwenyewe: + +- Kupitishwa na tangamano: ERC-223 bado haijatumiwa sana, ambayo inaweza kupunguza tangamano wao na zana na majukwaa yaliyomo. +- Nyuma tangamano: ERC-223 si nyuma sambamba na ERC-20, maana yake ni kwamba kuwa ERC-20 mikataba na zana si kazi na ERC-223 ishara bila marekebisho. +- Gharama za gesi: ukaguzi wa ziada na utendaji katika uhamisho wa ERC-223 unaweza kusababisha gharama za juu za gesi ikilinganishwa na shughuli za ERC-20. + +## Masomo zaidi {#further-reading} + +- [EIP-223: ERC-223 ishara kiwango](https://eips.ethereum.org/EIPS/eip-223) +- [Pendekezo la awali ERC-223] + (https://github.com/ethereum/eips/issues/223) diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-4626/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-4626/index.md new file mode 100644 index 00000000000..aa4b8b0ec78 --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-4626/index.md @@ -0,0 +1,227 @@ +--- +title: Kiwango cha Vault ya Tokeni cha ERC-4626 +description: Kiwango cha vault zinazozalisha faida. +lang: sw +--- + +## Utangulizi {#introduction} + +ERC-4626 ni kiwango cha kuboresha na kuunganisha vigezo vya kiufundi vya vault zinazozalisha faida. Inatoa API ya kawaida kwa vault za tokeni zinazozalisha faida ambazo zinawakilisha hisa za tokeni moja ya msingi ya ERC-20. ERC-4626 pia inaelezea kiendelezi cha hiari kwa vault za tokeni zinazotumia ERC-20, ikitoa utendakazi wa msingi wa kuweka, kutoa tokeni na kusoma salio. + +**Jukumu la ERC-4626 katika vault zinazozalisha faida** + +Masoko ya kukopesha, vikusanyaji, na tokeni zenye riba asilia husaidia watumiaji kupata faida bora kwenye tokeni zao za crypto kwa kutekeleza mikakati tofauti. Mikakati hii inafanywa kwa tofauti kidogo, ambayo inaweza kuwa rahisi kukosea au kupoteza rasilimali za maendeleo. + +ERC-4626 katika vault zinazozalisha faida itapunguza juhudi za ujumuishaji na kufungua ufikiaji wa faida katika programu mbalimbali kwa juhudi ndogo maalum kutoka kwa wasanidi programu kwa kuunda mifumo ya utekelezaji thabiti na imara zaidi. + +Tokeni ya ERC-4626 imeelezewa kikamilifu katika [EIP-4626](https://eips.ethereum.org/EIPS/eip-4626). + +**Kiendelezi cha vault kisichosawazishwa (ERC-7540)** + +ERC-4626 imeboreshwa kwa uwekaji na ukombozi wa atomiki hadi kufikia kikomo. Ikiwa kikomo kimefikiwa, hakuna uwekaji au ukombozi mpya unaoweza kuwasilishwa. Kikomo hiki hakifanyi kazi vizuri kwa mfumo wowote wa mkataba-erevu wenye vitendo visivyosawazishwa au ucheleweshaji kama sharti la awali la kuingiliana na Vault (k.m., itifaki za mali za ulimwengu halisi, itifaki za ukopeshaji zisizo na dhamana ya kutosha, itifaki za ukopeshaji za mnyororo-tofauti, tokeni za liquid staking, au moduli za usalama wa bima). + +ERC-7540 hupanua matumizi ya Vault za ERC-4626 kwa matumizi yasiyosawazishwa. Kiolesura kilichopo cha Vault (`deposit`/`withdraw`/`mint`/`redeem`) kinatumika kikamilifu kudai Maombi yasiyosawazishwa. + +Kiendelezi cha ERC-7540 kimeelezewa kikamilifu katika [ERC-7540](https://eips.ethereum.org/EIPS/eip-7540). + +**Kiendelezi cha vault ya mali nyingi (ERC-7575)** + +Kisa kimoja cha matumizi kinachokosekana ambacho hakitumiki na ERC-4626 ni Vault ambazo zina mali nyingi au sehemu za kuingilia kama vile Tokeni za mtoaji ukwasi (LP). Hizi kwa ujumla ni ngumu kutumia au hazikidhi matakwa kwa sababu ya hitaji la ERC-4626 lenyewe kuwa ERC-20. + +ERC-7575 inaongeza usaidizi kwa Vault zenye mali nyingi kwa kutoa nje utekelezaji wa tokeni ya ERC-20 kutoka kwa utekelezaji wa ERC-4626. + +Kiendelezi cha ERC-7575 kimeelezewa kikamilifu katika [ERC-7575](https://eips.ethereum.org/EIPS/eip-7575). + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa ukurasa huu vizuri zaidi, tunapendekeza usome kwanza kuhusu [viwango vya tokeni](/developers/docs/standards/tokens/) na [ERC-20](/developers/docs/standards/tokens/erc-20/). + +## Kazi na Vipengele vya ERC-4626: {#body} + +### Mbinu {#methods} + +#### mali {#asset} + +```solidity +function asset() public view returns (address assetTokenAddress) +``` + +Kazi hii inarudisha anwani ya tokeni ya msingi inayotumika kwa vault kwa uhasibu, kuweka na kutoa. + +#### totalAssets {#totalassets} + +```solidity +function totalAssets() public view returns (uint256) +``` + +Kazi hii inarudisha jumla ya mali ya msingi inayoshikiliwa na vault. + +#### convertToShares {#convertoshares} + +```solidity +function convertToShares(uint256 assets) public view returns (uint256 shares) +``` + +Kazi hii inarudisha kiasi cha `hisa` kitakachobadilishwa na vault kwa kiasi cha `mali` kilichotolewa. + +#### convertToAssets {#convertoassets} + +```solidity +function convertToAssets(uint256 shares) public view returns (uint256 assets) +``` + +Kazi hii inarudisha kiasi cha `mali` kitakachobadilishwa na vault kwa kiasi cha `hisa` kilichotolewa. + +#### maxDeposit {#maxdeposit} + +```solidity +function maxDeposit(address receiver) public view returns (uint256 maxAssets) +``` + +Kazi hii inarudisha kiasi cha juu zaidi cha mali ya msingi kinachoweza kuwekwa katika wito mmoja wa [`deposit`](#deposit), pamoja na hisa zilizotengenezwa kwa ajili ya `mpokeaji`. + +#### previewDeposit {#previewdeposit} + +```solidity +function previewDeposit(uint256 assets) public view returns (uint256 shares) +``` + +Kazi hii inaruhusu watumiaji kuiga athari za uwekaji wao katika bloku ya sasa. + +#### deposit {#deposit} + +```solidity +function deposit(uint256 assets, address receiver) public returns (uint256 shares) +``` + +Kazi hii huweka `mali` ya tokeni za msingi ndani ya vault na inatoa umiliki wa `hisa` kwa `mpokeaji`. + +#### maxMint {#maxmint} + +```solidity +function maxMint(address receiver) public view returns (uint256 maxShares) +``` + +Kazi hii inarudisha kiasi cha juu zaidi cha hisa kinachoweza kutengenezwa katika wito mmoja wa [`mint`](#mint), pamoja na hisa zilizotengenezwa kwa ajili ya `mpokeaji`. + +#### previewMint {#previewmint} + +```solidity +function previewMint(uint256 shares) public view returns (uint256 assets) +``` + +Kazi hii inaruhusu watumiaji kuiga athari za utengenezaji wao katika bloku ya sasa. + +#### mint {#mint} + +```solidity +function mint(uint256 shares, address receiver) public returns (uint256 assets) +``` + +Kazi hii hutengeneza hasa hisa `hisa` za vault kwa `mpokeaji` kwa kuweka `mali` ya tokeni za msingi. + +#### maxWithdraw {#maxwithdraw} + +```solidity +function maxWithdraw(address owner) public view returns (uint256 maxAssets) +``` + +Kazi hii inarudisha kiasi cha juu zaidi cha mali ya msingi kinachoweza kutolewa kutoka kwa salio la `mmiliki` kwa wito mmoja wa [`withdraw`](#withdraw). + +#### previewWithdraw {#previewwithdraw} + +```solidity +function previewWithdraw(uint256 assets) public view returns (uint256 shares) +``` + +Kazi hii inaruhusu watumiaji kuiga athari za utoaji wao katika bloku ya sasa. + +#### withdraw {#withdraw} + +```solidity +function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares) +``` + +Kazi hii huchoma `hisa` kutoka kwa `mmiliki` na kutuma hasa tokeni za `mali` kutoka kwa vault kwenda kwa `mpokeaji`. + +#### maxRedeem {#maxredeem} + +```solidity +function maxRedeem(address owner) public view returns (uint256 maxShares) +``` + +Kazi hii inarudisha kiasi cha juu zaidi cha hisa zinazoweza kukombolewa kutoka kwa salio la `mmiliki` kupitia wito wa [`redeem`](#redeem). + +#### previewRedeem {#previewredeem} + +```solidity +function previewRedeem(uint256 shares) public view returns (uint256 assets) +``` + +Kazi hii inaruhusu watumiaji kuiga athari za ukombozi wao katika bloku ya sasa. + +#### redeem {#redeem} + +```solidity +function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets) +``` + +Kazi hii hukomboa idadi maalum ya `hisa` kutoka kwa `mmiliki` na kutuma `mali` ya tokeni ya msingi kutoka kwa vault kwenda kwa `mpokeaji`. + +#### totalSupply {#totalsupply} + +```solidity +function totalSupply() public view returns (uint256) +``` + +Inarudisha jumla ya idadi ya hisa za vault ambazo hazijakombolewa katika mzunguko. + +#### balanceOf {#balanceof} + +```solidity +function balanceOf(address owner) public view returns (uint256) +``` + +Inarudisha jumla ya hisa za vault ambazo `mmiliki` anazo kwa sasa. + +### Ramani ya kiolesura {#mapOfTheInterface} + +![Ramani ya kiolesura cha ERC-4626](./map-of-erc-4626.png) + +### Matukio {#events} + +#### Tukio la Kuweka + +**LAZIMA** itolewe wakati tokeni zinawekwa ndani ya vault kupitia njia za [`mint`](#mint) na [`deposit`](#deposit). + +```solidity +event Deposit( + address indexed sender, + address indexed owner, + uint256 assets, + uint256 shares +) +``` + +Ambapo `mtumaji` ni mtumiaji ambaye alibadilisha `mali` kwa `hisa`, na akahamisha `hisa` hizo kwa `mmiliki`. + +#### Tukio la Kutoa + +**LAZIMA** itolewe wakati hisa zinatolewa kutoka kwa vault na mwekaji katika njia za [`redeem`](#redeem) au [`withdraw`](#withdraw). + +```solidity +event Withdraw( + address indexed sender, + address indexed receiver, + address indexed owner, + uint256 assets, + uint256 shares +) +``` + +Ambapo `mtumaji` ni mtumiaji aliyeanzisha utoaji na akabadilisha `hisa`, zinazomilikiwa na `mmiliki`, kwa `mali`. `mpokeaji` ni mtumiaji aliyepokea `mali` zilizotolewa. + +## Masomo zaidi {#further-reading} + +- [EIP-4626: Kiwango cha Vault ya Tokeni](https://eips.ethereum.org/EIPS/eip-4626) +- [ERC-4626: Repo ya GitHub](https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC4626.sol) diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-721/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-721/index.md new file mode 100644 index 00000000000..677f2ad7671 --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-721/index.md @@ -0,0 +1,248 @@ +--- +title: Kiwango cha Tokeni isiyoweza kubadilishwa cha ERC-721 +description: Jifunze kuhusu ERC-721, kiwango cha tokeni zisizoweza kubadilishwa (NFTs) zinazowakilisha mali za kipekee za kidijitali kwenye Ethereum. +lang: sw +--- + +## Utangulizi {#introduction} + +**Tokeni isiyoweza kubadilishwa ni nini?** + +Tokeni isiyoweza kubadilishwa (NFT) hutumika kutambua kitu au mtu kwa njia ya kipekee. Aina hii ya Tokeni inafaa sana kutumika kwenye majukwaa yanayotoa vitu vya kukusanywa, funguo za ufikiaji, tiketi za bahati nasibu, viti vilivyo na nambari kwa ajili ya matamasha na mechi za michezo, n.k. Aina hii maalum ya Tokeni ina uwezekano wa ajabu kwa hivyo inastahili Kiwango kinachofaa, ERC-721 ilikuja kutatua hilo! + +**ERC-721 ni nini?** + +ERC-721 inaleta kiwango cha NFT, kwa maneno mengine, aina hii ya Tokeni ni ya kipekee na inaweza kuwa na thamani tofauti kuliko Tokeni nyingine kutoka kwa Mkataba-erevu uleule, labda kutokana na umri wake, uhaba wake au hata kitu kingine kama mwonekano wake. +Subiri, mwonekano? + +Ndiyo! NFT zote zina kigezo cha `uint256` kinachoitwa `tokenId`, kwa hivyo kwa Mkataba wowote wa ERC-721, jozi ya `anwani ya mkataba, uint256 tokenId` lazima iwe ya kipekee duniani kote. Kwa kusema hivyo, mfumo mtawanyo wa kimamlaka unaweza kuwa na "kigeuzi" kinachotumia `tokenId` kama ingizo na kutoa picha ya kitu kizuri, kama mazombi, silaha, ujuzi au paka wa ajabu! + +## Mahitaji ya awali {#prerequisites} + +- Hifadhi ya fedha (/developers/docs/accounts/) +- [Mkataba erevu](/developers/docs/smart-contracts/) +- [Viwango vya tokeni](/developers/docs/standards/tokens/) + +## Mwili{#body} + +ERC-721 (Ombi la Maoni la Ethereum 721), iliyopendekezwa na William Entriken, Dieter Shirley, Jacob Evans, Nastassia Sachs mnamo Januari 2018, ni Kiwango cha Tokeni isiyoweza kubadilishwa kinachotekeleza API ya tokeni ndani ya Mikataba-erevu. + +Hutoa utendaji kama vile kuhamisha tokeni kutoka akaunti moja hadi nyingine, kupata salio la sasa la tokeni la akaunti, kupata mmiliki wa tokeni maalum na pia jumla ya usambazaji wa tokeni inayopatikana kwenye mtandao. +Kando na hizi, pia ina utendaji mwingine kama kuidhinisha kwamba kiasi cha tokeni kutoka kwa akaunti kinaweza kuhamishwa na akaunti ya wahusika wengine. + +Ikiwa Mkataba-erevu unatekeleza mbinu na matukio yafuatayo unaweza kuitwa Mkataba wa Tokeni isiyoweza kubadilishwa wa ERC-721 na, mara tu utakapowekwa, utakuwa na jukumu la kufuatilia tokeni zilizoundwa kwenye Ethereum. + +Kutoka [EIP-721](https://eips.ethereum.org/EIPS/eip-721): + +### Mbinu {#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); +``` + +### Matukio {#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); +``` + +### Mifano {#web3py-example} + +Hebu tuone jinsi Kiwango kilivyo muhimu sana kurahisisha mambo kwetu kukagua Mkataba wowote wa Tokeni wa ERC-721 kwenye Ethereum. +Tunahitaji tu Kiolesura cha Binary cha Programu ya Mkataba (ABI) ili kuunda kiolesura cha Tokeni yoyote ya ERC-721. Ama unaweza +Tazama chini kutumia ABI rahisi, kuifanya mfano wa msuguano mdogo. + +#### Mfano wa Web3.py {#web3py-example} + +Kwanza, hakikisha umesakinisha maktaba ya Python ya [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation): + +``` +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" # Mkataba wa CryptoKitties + +acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # Mnada wa Mauzo wa CryptoKitties + +# Hiki ni Kiolesura cha Binary cha Programu ya Mkataba (ABI) kilichorahisishwa cha Mkataba wa NFT wa ERC-721. +# Kitaonyesha tu mbinu: 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}") + +# Kutumia ABI ya Tukio la Uhamisho kupata maelezo kuhusu Paka waliohamishwa. +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' +} + +# Tunahitaji saini ya tukio ili kuchuja kumbukumbu +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] +}) + +# Kumbuka: +# - Ongeza idadi ya bloku kutoka 120 ikiwa hakuna tukio la Uhamisho linalorejeshwa. +# - Ikiwa haukupata tukio lolote la Uhamisho unaweza pia kujaribu kupata tokenId kwenye: +# https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#events +# Bofya ili kupanua kumbukumbu za tukio na kunakili hoja yake ya "tokenId" +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'] # Bandika "tokenId" hapa kutoka kwa kiungo hapo juu + is_pregnant = ck_contract.functions.isPregnant(kitty_id).call() + print(f"{name} [{symbol}] NFTs {kitty_id} is pregnant: {is_pregnant}") +``` + +Mkataba wa CryptoKitties una Matukio kadhaa ya kuvutia zaidi ya yale ya Kiwango. + +Hebu tuangalie mawili kati yao, `Pregnant` na `Birth`. + +```python +# Kutumia ABI ya Matukio ya Pregnant na Birth kupata maelezo kuhusu Paka wapya. +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' + }] + +# Tunahitaji saini ya tukio ili kuchuja kumbukumbu +ck_event_signatures = [ + w3.keccak(text="Pregnant(address,uint256,uint256,uint256)").hex(), + w3.keccak(text="Birth(address,uint256,uint256,uint256,uint256)").hex(), +] + +# Hili ni Tukio la Pregnant: +# - 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] + +# Hili ni Tukio la Birth: +# - 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] +``` + +## NFT maarufu {#popular-nfts} + +- [Kifuatiliaji cha NFT cha Etherscan](https://etherscan.io/nft-top-contracts) huorodhesha NFT maarufu kwenye Ethereum kwa ujazo wa uhamisho. +- [CryptoKitties](https://www.cryptokitties.co/) ni mchezo unaohusu viumbe wanaoweza kuzalishwa, kukusanywa, na wa kupendeza sana tunaowaita CryptoKitties. +- [Sorare](https://sorare.com/) ni mchezo wa kimataifa wa soka ya njozi ambapo unaweza kukusanya vitu vya toleo pungufu vya kukusanya, kusimamia timu zako na kushindana ili kujishindia zawadi. +- [Huduma ya Majina ya Ethereum (ENS)](https://ens.domains/) hutoa njia salama na iliyogatuliwa ya kuweka anwani kwa rasilimali ndani na nje ya mnyororo wa bloku kwa kutumia majina rahisi, yanayosomeka na binadamu. +- [POAP](https://poap.xyz) huwasilisha NFT za bure kwa watu wanaohudhuria matukio au kukamilisha vitendo maalum. POAP ni za bure kuunda na kusambaza. +- [Unstoppable Domains](https://unstoppabledomains.com/) ni kampuni iliyoko San Francisco inayounda vikoa kwenye minyororo wa bloku. Vikoa vya mnyororo wa bloku hubadilisha anwani za sarafu ya kidigitali na majina yanayosomeka na binadamu na vinaweza kutumika kuwezesha tovuti zinazostahimili udhibiti. +- [Gods Unchained Cards](https://godsunchained.com/) ni TCG kwenye mnyororo wa bloku wa Ethereum inayotumia NFT kuleta umiliki halisi kwa mali za ndani ya mchezo. +- [Bored Ape Yacht Club](https://boredapeyachtclub.com) ni mkusanyiko wa NFT 10,000 za kipekee, ambazo, pamoja na kuwa kazi ya sanaa adimu inayoweza kuthibitishwa, hufanya kazi kama tokeni ya uanachama wa klabu, ikitoa marupurupu na manufaa kwa wanachama yanayoongezeka kadri muda unavyopita kutokana na juhudi za jumuiya. + +## Masomo zaidi {#further-reading} + +- [EIP-721: Kiwango cha Tokeni isiyoweza kubadilishwa cha ERC-721](https://eips.ethereum.org/EIPS/eip-721) +- [OpenZeppelin - Hati za ERC-721](https://docs.openzeppelin.com/contracts/3.x/erc721) +- [OpenZeppelin - Utekelezaji wa ERC-721](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol) +- [API ya NFT ya Alchemy](https://www.alchemy.com/docs/reference/nft-api-quickstart) diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-777/index.md new file mode 100644 index 00000000000..e96a1c09ca3 --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-777/index.md @@ -0,0 +1,47 @@ +--- +title: ERC-777 Ishara kiwango +description: Kujifunza kuhusu ERC-777, kueneza badilishwa ishara kiwango na ndoano, ingawa ERC-20 ni kupendekeza kwa ajili ya usalama. +lang: sw +--- + +## Onyo {#warning} + +\*\* ERC-777 ni vigumu kutekeleza vizuri, kutokana na yake [usumbufu kwa aina mbalimbali za mashambulizi](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2620). Kushauriwa kutumia [ERC-20] +(/developers/docs/standards/tokens/erc-20/) badala yake.\*\* Ukurasa huu kubaki kuwa hifadhi ya kihistoria. + +## Utangulizi? {#introduction} + +ERC-777 ni badilishwa ishara kiwango kueneza zipo [ERC-20] +(/developers/docs/standards/tokens/erc-20/) kiwango. + +## Mahitaji ya awali {#prerequisites} + +Ili kuelewa vizuri ukurasa huu, kupendekeza wewe kwanza kusoma kuhusu [ERC-20](/developers/docs/standards/tokens/erc-20/). + +## Ni uenezaji gani ERC-777 kupendekeza juu ya ERC-20? {#-erc-777-vs-erc-20} + +ERC-777 hutoa uenezaji yafuatayo juu ya ERC-20. + +### Vidokezo {#hooks} + +Vidokezo ni kazi ilivyoelezwa katika kanuni ya mkataba erevu. Vidokezo kupata kuitwa wakati ishara ni kutumwa au kupokea kwa njia ya mkataba. Hii kuruhusu mkataba erevu kuguswa kwa ishara kuingia au zinazotoka. + +Vidokezo ni rekodi na gunduliwa kutumia [ERC-1820](https://eips.ethereum.org/EIPS/eip-1820)kiwango. + +#### Kwa nini ndoano ni nzuri? {#why-are-hooks-great} + +1. Hooki huruhusu kutuma tokeni kwa mkataba na kuuarifu mkataba huo katika muamala mmoja, tofauti na [ERC-20](https://eips.ethereum.org/EIPS/eip-20), ambayo inahitaji simu mbili (`idhinisha`/`hamishaKutoka`) ili kufanikisha hili. +2. Mikataba ambayo haijasajili hooki haiendani na ERC-777. Mkataba unaotuma utaghairi muamala wakati mkataba unaopokea haujasajili hooki. Hii inazuia uhamishaji wa bahati mbaya kwa mikataba-erevu isiyo ya ERC-777. +3. Hooki zinaweza kukataa miamala. + +### Nukta desimali {#decimals} + +Kiwango hiki pia kinatatua mkanganyiko kuhusu `decimals` uliosababishwa katika ERC-20. Uwazi huu unaboresha uzoefu wa msanidi programu. + +### Upatanifu wa nyuma na ERC-20 {#backwards-compatibility-with-erc-20} + +Mikataba ya ERC-777 inaweza kuingiliana nayo kana kwamba ni mikataba ya ERC-20. + +## Masomo zaidi {#further-reading} + +[EIP-777: Kiwango cha Tokeni](https://eips.ethereum.org/EIPS/eip-777) diff --git a/public/content/translations/sw/developers/docs/standards/tokens/index.md b/public/content/translations/sw/developers/docs/standards/tokens/index.md new file mode 100644 index 00000000000..b89ec6c48fd --- /dev/null +++ b/public/content/translations/sw/developers/docs/standards/tokens/index.md @@ -0,0 +1,41 @@ +--- +title: Ishara kiwango +description: Kuchunguza Ethereum ishara viwango ikiwa ni pamoja na ERC-20, ERC-721, na ERC-1155 kwa ishara badilishwa na yasiyo ya badilishwa. +lang: sw +incomplete: true +--- + +## Utangulizi {#introduction} + +Viwango vingi vya maendeleo ya Ethereum kuzingatia kunganishi vya ishara. Viwango hivi husaidia kuhakikisha mikataba-erevu inasalia na uwezo wa kuunganishwa, kwa hivyo mradi mpya unapotoa tokeni, inasalia kuwa sambamba na exchange na programu zilizopo zilizogatuliwa. + +Viwango vya tokeni hufafanua jinsi tokeni hutenda na kuingiliana katika mfumo-ikolojia wote wa Ethereum. Hurahisisha wasanidi programu kujenga bila kugundua upya gurudumu, na kuhakikisha kuwa tokeni zinafanya kazi bila matatizo na mikoba, exchange, na mifumo ya DeFi. Iwe katika michezo, utawala, au matumizi mengine, viwango hivi hutoa uthabiti na kuifanya Ethereum iunganishwe zaidi. + +## Mahitaji ya awali {#prerequisites} + +- [Viwango vya usanidi vya Ethereum](/developers/docs/standards/) +- [Mikataba-erevu](/developers/docs/smart-contracts/) + +## Viwango vya tokeni {#token-standards} + +Hapa ni baadhi ya viwango vya ishara maarufu zaidi juu ya Ethereum: + +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - Kiolesura cha kawaida cha tokeni zinazoweza kubadilishwa (interchangeable), kama vile tokeni za kupiga kura, tokeni za kuweka hisa au sarafu pepe. + +### Viwango vya NFT {#nft-standards} + +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - Kiolesura cha kawaida cha tokeni zisizoweza kubadilishwa, kama hati miliki ya mchoro au wimbo. +- [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - ERC-1155 huruhusu biashara zenye ufanisi zaidi na kuunganisha miamala – hivyo basi huokoa gharama. Hii ishara ya kiwango kuruhusu kwa ajili ya kujenga wote ishara ya huduma (kama $BNB ama $BAT) na hakuna badilishwa kama kriptopunks. + +Orodha kamili ya mapendekezo ya [ERC](https://eips.ethereum.org/erc). + +## Masomo zaidi {#further-reading} + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mafunzo yanayohusiana {#related-tutorials} + +- [Orodha hakiki ya muunganisho wa tokeni](/developers/tutorials/token-integration-checklist/) _– Orodha ya mambo ya kuzingatia unapoingiliana na tokeni._ +- [Elewa mkataba-erevu wa tokeni ya ERC20](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _– Utangulizi wa kupeleka mkataba-erevu wako wa kwanza kwenye testnet ya Ethereum._ +- [Uhamisho na uidhinishaji wa tokeni za ERC20 kutoka kwa mkataba-erevu wa Solidity](/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/) _– Jinsi ya kutumia mkataba-erevu kuingiliana na tokeni kwa kutumia lugha ya Solidity._ +- [Kutekeleza soko la ERC721 [mwongozo wa jinsi ya]](/developers/tutorials/how-to-implement-an-erc721-market/) _– Jinsi ya kuweka bidhaa zilizofanywa tokeni kwa ajili ya kuuza kwenye ubao wa matangazo uliogatuliwa._ diff --git a/public/content/translations/sw/developers/docs/storage/index.md b/public/content/translations/sw/developers/docs/storage/index.md new file mode 100644 index 00000000000..ea5717e4a25 --- /dev/null +++ b/public/content/translations/sw/developers/docs/storage/index.md @@ -0,0 +1,216 @@ +--- +title: Hifadhi Iliyogatuliwa +description: Muhtasari wa hifadhi iliyogatuliwa ni nini na zana zinazopatikana za kuiunganisha katika mfumo mtawanyo wa kimamlaka. +lang: sw +--- + +Tofauti na seva ya kati inayoendeshwa na kampuni au shirika moja, mifumo ya hifadhi iliyogatuliwa inajumuisha mtandao wa rika-kwa-rika wa watumiaji-waendeshaji ambao wanashikilia sehemu ya data kwa ujumla, na kuunda mfumo thabiti wa kushiriki hifadhi ya faili. Hizi zinaweza kuwa katika programu inayotegemea mnyororo wa bloku au mtandao wowote unaotegemea rika-kwa-rika. + +Ethereum yenyewe inaweza kutumika kama mfumo wa hifadhi iliyogatuliwa, na ndivyo ilivyo linapokuja suala la uhifadhi wa msimbo katika mikataba yote mahiri. Hata hivyo, inapofikia kiasi kikubwa cha data, hiyo siyo ilivyoundwa kwa ajili ya Ethereum. Mnyororo unakua kwa kasi, lakini wakati wa kuandika, mnyororo wa Ethereum una takriban GB 500 - 1TB ([kulingana na mteja](https://etherscan.io/chartsync/chaindefault)), na kila nodi kwenye mtandao inahitaji kuwa na uwezo wa kuhifadhi data zote. Ikiwa mnyororo ungepanuka hadi kiasi kikubwa cha data (tuseme 5TB) haingewezekana kwa nodi zote kuendelea kufanya kazi. Pia, gharama ya kupeleka data nyingi hivi kwenye Mtandao Mkuu itakuwa ghali mno kutokana na ada za [gesi](/developers/docs/gas). + +Kwa sababu ya vikwazo hivi, tunahitaji mnyororo au mbinu tofauti ya kuhifadhi kiasi kikubwa cha data kwa njia iliyogatuliwa. + +Unapoangalia chaguo za hifadhi iliyogatuliwa (dStorage), kuna mambo machache ambayo mtumiaji anapaswa kuzingatia. + +- Utaratibu wa kudumu / muundo wa motisha +- Utekelezaji wa uhifadhi wa data +- Ugatuaji +- Makubaliano + +## Utaratibu wa kudumu / muundo wa motisha {#persistence-mechanism} + +### Kulingana na mnyororo wa bloku {#blockchain-based} + +Ili kipande cha data kiendelee kuwepo milele, tunahitaji kutumia utaratibu wa kudumu. Kwa mfano, kwenye Ethereum, utaratibu wa kudumu ni kwamba mnyororo mzima unahitaji kuzingatiwa wakati wa kuendesha nodi. Vipande vipya vya data vinaunganishwa kwenye mwisho wa mnyororo, na unaendelea kukua - ukihitaji kila nodi kuiga data yote iliyopachikwa. + +Hii inajulikana kama uendelevu **unaotegemea mnyororo wa bloku**. + +Tatizo la uendelevu unaotegemea mnyororo wa bloku ni kwamba mnyororo unaweza kuwa mkubwa sana kuweza kudumishwa na kuhifadhi data zote kwa njia inayowezekana (k.m., [vyanzo vingi](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/) vinakadiria kuwa Mtandao unahitaji zaidi ya Zetabaiti 40 za uwezo wa hifadhi). + +Mnyororo wa bloku lazima pia uwe na aina fulani ya muundo wa motisha. Kwa uendelevu unaotegemea mnyororo wa bloku, kuna malipo yanayofanywa kwa mthibitishaji. Wakati data inaongezwa kwenye mnyororo, wathibitishaji hulipwa ili kuongeza data hiyo. + +Majukwaa yenye uendelevu unaotegemea mnyororo wa bloku: + +- Ethereum +- [Arweave](https://www.arweave.org/) + +### Kulingana na mkataba {#contract-based} + +Uendelevu **unaotegemea mkataba** una dhana kwamba data haiwezi kuigwa na kila nodi na kuhifadhiwa milele, na badala yake lazima idumishwe kwa makubaliano ya kimkataba. Haya ni makubaliano yaliyofanywa na nodi nyingi ambazo zimeahidi kushikilia kipande cha data kwa kipindi fulani cha muda. Ni lazima zirejeshewe fedha au zifanywe upya kila zinapoisha ili kuweka data iendelee kuwepo. + +Katika hali nyingi, badala ya kuhifadhi data zote kwenye mnyororo, hashi ya mahali data inapatikana kwenye mnyororo ndiyo huhifadhiwa. Kwa njia hii, mnyororo mzima hauhitaji kupanuka ili kuhifadhi data zote. + +Majukwaa yenye uendelevu unaotegemea mkataba: + +- [Filecoin](https://docs.filecoin.io/basics/what-is-filecoin) +- [Skynet](https://sia.tech/) +- [Storj](https://storj.io/) +- [Züs](https://zus.network/) +- [Crust Network](https://crust.network) +- [Swarm](https://www.ethswarm.org/) +- [4EVERLAND](https://www.4everland.org/) + +### Mawazo ya ziada {#additional-consideration} + +IPFS ni mfumo uliosambazwa wa kuhifadhi na kupata faili, tovuti, programu, na data. Haina mpango wa motisha uliojengewa ndani, lakini badala yake inaweza kutumika na suluhisho zozote za motisha zinazotegemea mkataba hapo juu kwa uendelevu wa muda mrefu. Njia nyingine ya kuendeleza data kwenye IPFS ni kufanya kazi na huduma ya kubandika, ambayo "itabandika" data yako kwa ajili yako. Unaweza hata kuendesha nodi yako mwenyewe ya IPFS na kuchangia kwenye mtandao ili kudumisha data yako na/au ya wengine bure! + +- [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/) +- [Pinata](https://www.pinata.cloud/) _(huduma ya kubandika ya IPFS)_ +- [web3.storage](https://web3.storage/) _(Huduma ya kubandika ya IPFS/Filecoin)_ +- [Infura](https://infura.io/product/ipfs) _(huduma ya kubandika ya IPFS)_ +- [IPFS Scan](https://ipfs-scan.io) _(kichunguzi cha kubandika cha IPFS)_ +- [4EVERLAND](https://www.4everland.org/)_(huduma ya kubandika ya IPFS)_ +- [Filebase](https://filebase.com) _(Huduma ya Kubandika ya IPFS)_ +- [Spheron Network](https://spheron.network/) _(huduma ya kubandika ya IPFS/Filecoin)_ + +SWARM ni teknolojia ya ugatuaji wa hifadhi na usambazaji wa data yenye mfumo wa motisha wa hifadhi na oracle ya bei ya kukodisha hifadhi. + +## Uhifadhi wa data {#data-retention} + +Ili kuhifadhi data, mifumo lazima iwe na aina fulani ya utaratibu wa kuhakikisha data inahifadhiwa. + +### Utaratibu wa changamoto {#challenge-mechanism} + +Mojawapo ya njia maarufu zaidi za kuhakikisha data inahifadhiwa, ni kutumia aina fulani ya changamoto ya kriptografia ambayo hutolewa kwa nodi ili kuhakikisha bado zina data. Mfano rahisi ni kuangalia uthibitisho wa ufikiaji wa Arweave. Wanatoa changamoto kwa nodi ili kuona kama wana data katika bloku ya hivi karibuni zaidi na bloku ya nasibu katika siku za nyuma. Ikiwa nodi haiwezi kupata jibu, inaadhibiwa. + +Aina za dStorage zenye utaratibu wa changamoto: + +- Züs +- Skynet +- Arweave +- Filecoin +- Crust Network +- 4EVERLAND + +### Ugatuaji {#decentrality} + +Hakuna zana bora za kupima kiwango cha ugatuaji wa majukwaa, lakini kwa ujumla, utataka kutumia zana ambazo hazina aina fulani ya KYC ili kutoa ushahidi kuwa hazijawekwa kati. + +Zana zilizogatuliwa bila KYC: + +- Skynet +- Arweave +- Filecoin +- IPFS +- Ethereum +- Crust Network +- 4EVERLAND + +### Makubaliano + +Zana nyingi hizi zina toleo lao la [utaratibu wa makubaliano](/developers/docs/consensus-mechanisms/) lakini kwa ujumla zinatokana na [**Uthibitishaji-wa-kazi (PoW)**](/developers/docs/consensus-mechanisms/pow/) au [**Uthibitisho-wa-hisa (PoS)**](/developers/docs/consensus-mechanisms/pos/). + +Uthibitisho-wa-kazi msingi: + +- Skynet +- Arweave + +Uthibitisho-wa-stake: + +- Ethereum +- Filecoin +- Züs +- Crust Network + +## Zana zinazohusiana {#related-tools} + +**IPFS - _Mfumo wa Faili wa K baina ya Sayari ni mfumo uliogatuliwa wa hifadhi na urejeleaji wa faili kwa ajili ya Ethereum._** + +- [Ipfs.io](https://ipfs.io/) +- [Nyaraka](https://docs.ipfs.io/) +- [GitHub](https://github.com/ipfs/ipfs) + +**Storj DCS - _Hifadhi ya vitu vya wingu iliyogatuliwa, salama, ya faragha, na inayooana na S3 kwa wasanidi programu._** + +- [Storj.io](https://storj.io/) +- [Nyaraka](https://docs.storj.io/) +- [GitHub](https://github.com/storj/storj) + +**Sia - _Hutumia kriptografia kuunda soko la hifadhi ya wingu lisilohitaji uaminifu, kuruhusu wanunuzi na wauzaji kufanya miamala moja kwa moja._** + +- [Skynet.net](https://sia.tech/) +- [Nyaraka](https://docs.sia.tech/) +- [GitHub](https://github.com/SiaFoundation/) + +**Filecoin - _Filecoin iliundwa na timu ile ile iliyo nyuma ya IPFS. Ni safu ya motisha juu ya maadili ya IPFS._** + +- [Filecoin.io](https://filecoin.io/) +- [Nyaraka](https://docs.filecoin.io/) +- [GitHub](https://github.com/filecoin-project/) + +**Arweave - _Arweave ni jukwaa la dStorage la kuhifadhi data._** + +- [Arweave.org](https://www.arweave.org/) +- [Nyaraka](https://docs.arweave.org/info/) +- [Arweave](https://github.com/ArweaveTeam/arweave/) + +**Züs - _Züs ni jukwaa la dStorage la uthibitisho-wa-hisa lenye ugawanyaji na blobbers._** + +- [zus.network](https://zus.network/) +- [Nyaraka](https://docs.zus.network/zus-docs/) +- [GitHub](https://github.com/0chain/) + +**Crust Network - _Crust ni jukwaa la dStorage juu ya IPFS._** + +- [Crust.network](https://crust.network) +- [Nyaraka](https://wiki.crust.network) +- [GitHub](https://github.com/crustio) + +**Swarm - _Jukwaa la hifadhi iliyosambazwa na huduma ya usambazaji wa maudhui kwa ajili ya rundo la web3 la Ethereum._** + +- [EthSwarm.org](https://www.ethswarm.org/) +- [Nyaraka](https://docs.ethswarm.org/) +- [GitHub](https://github.com/ethersphere/) + +**OrbitDB - _Hifadhidata iliyogatuliwa ya rika-kwa-rika juu ya IPFS._** + +- [OrbitDB.org](https://orbitdb.org/) +- [Nyaraka](https://github.com/orbitdb/field-manual/) +- [GitHub](https://github.com/orbitdb/orbit-db/) + +**Aleph.im - _Mradi wa wingu uliogatuliwa (hifadhidata, hifadhi ya faili, kompyuta na DID). Mchanganyiko wa kipekee wa teknolojia ya rika-kwa-rika ya nje ya mnyororo na ndani ya mnyororo. Upatanifu wa IPFS na minyororo mingi._** + +- [Aleph.im](https://aleph.cloud/) +- [Nyaraka](https://docs.aleph.cloud/) +- [GitHub](https://github.com/aleph-im/) + +**Ceramic - _Hifadhi ya hifadhidata ya IPFS inayodhibitiwa na mtumiaji kwa ajili ya programu zenye data nyingi na zinazovutia._** + +- [Ceramic.network](https://ceramic.network/) +- [Nyaraka](https://developers.ceramic.network/) +- [GitHub](https://github.com/ceramicnetwork/js-ceramic/) + +**Filebase - _Hifadhi iliyogatuliwa inayooana na S3 na huduma ya kubandika ya IPFS yenye nakala za ziada za kijiografia. Faili zote zilizopakiwa kwenye IPFS kupitia Filebase hubandikwa kiotomatiki kwenye miundombinu ya Filebase na nakala 3x kote ulimwenguni._** + +- [Filebase.com](https://filebase.com/) +- [Nyaraka](https://docs.filebase.com/) +- [GitHub](https://github.com/filebase) + +**4EVERLAND - _Jukwaa la kompyuta ya wingu la Web 3.0 linalounganisha uwezo mkuu wa hifadhi, kompyuta na mtandao, linaoana na S3 na hutoa hifadhi ya data inayolandana kwenye mitandao ya hifadhi iliyogatuliwa kama vile IPFS na Arweave._** + +- [4everland.org](https://www.4everland.org/) +- [Nyaraka](https://docs.4everland.org/) +- [GitHub](https://github.com/4everland) + +**Kaleido - _Jukwaa la mnyororo-kama-huduma lenye Nodi za IPFS za kubofya kitufe_** + +- [Kaleido](https://kaleido.io/) +- [Nyaraka](https://docs.kaleido.io/kaleido-services/ipfs/) +- [GitHub](https://github.com/kaleido-io) + +**Spheron Network - _Spheron ni jukwaa-kama-huduma (PaaS) iliyoundwa kwa ajili ya mifumo mtawanyo wa kimamlaka inayotafuta kuzindua programu zao kwenye miundombinu iliyogatuliwa yenye utendaji bora. Hutoa kompyuta, hifadhi iliyogatuliwa, CDN na upangishaji wa wavuti bila kuhitaji usanidi._** + +- [spheron.network](https://spheron.network/) +- [Nyaraka](https://docs.spheron.network/) +- [GitHub](https://github.com/spheronFdn) + +## Masomo zaidi {#further-reading} + +- [Hifadhi Iliyogatuliwa ni Nini?](https://coinmarketcap.com/academy/article/what-is-decentralized-storage-a-deep-dive-by-filecoin) - _CoinMarketCap_ +- [Kuondoa Hadithi Tano za Kawaida kuhusu Hifadhi Iliyogatuliwa](https://www.storj.io/blog/busting-five-common-myths-about-decentralized-storage) - _Storj_ + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- [Mifumo ya uundaji](/developers/docs/frameworks/) diff --git a/public/content/translations/sw/developers/docs/transactions/index.md b/public/content/translations/sw/developers/docs/transactions/index.md new file mode 100644 index 00000000000..1ce6320bc29 --- /dev/null +++ b/public/content/translations/sw/developers/docs/transactions/index.md @@ -0,0 +1,231 @@ +--- +title: Miamala +description: Muhtasari wa miamala ya Ethereum - jinsi inavyofanya kazi, muundo wao wa data, na jinsi ya kuzituma kupitia mfumo. +lang: sw +--- + +Miamala ni maagizo yaliyosainiwa kwa njia fiche kutoka kwa akaunti. Akaunti itaanzisha muamala ili kusasisha hali ya mtandao wa Ethereum. Muamala rahisi zaidi ni kuhamisha ETH kutoka akaunti moja hadi nyingine. + +## Mahitaji ya awali {#prerequisites} + +Ili kukusaidia kuelewa ukurasa huu vizuri, tunapendekeza usome kwanza [Akaunti](/developers/docs/accounts/) na [utangulizi wetu wa Ethereum](/developers/docs/intro-to-ethereum/). + +## Muamala ni nini? {#whats-a-transaction} + +Muamala wa Ethereum unamaanisha kitendo kilichoanzishwa na akaunti inayomilikiwa na mtu wa nje, kwa maneno mengine akaunti inayosimamiwa na binadamu, sio mkataba. Kwa mfano, kama Bob atatuma ETH 1 kwa Alice, akaunti ya Bob lazima ipunguzwe na ya Alice ni lazima iongezwe. Kitendo hiki cha kubadilisha hali hufanyika ndani ya muamala. + +![Mchoro unaoonyesha muamala unaosababisha mabadiliko ya hali](./tx.png) +_Mchoro umechukuliwa kutoka [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +Miamala, ambayo hubadilisha hali ya EVM, yanahitaji kutangazwa kwa mtandao mzima. Nodi yoyote inaweza kutangaza ombi la muamala kutekelezwa kwenye EVM; baada ya hili kutokea, mthibitishaji atatekeleza muamala na kueneza mabadiliko ya hali yaliyotokana kwa sehemu iliyobaki ya mtandao. + +Miamala inahitaji ada na lazima ijumuishwe kwenye bloku iliyothibitishwa. Ili kurahisisha muhtasari huu, tutaangazia ada za gesi na uthibitishaji mahali pengine. + +Muamala uliowasilishwa unajumuisha taarifa zifuatazo: + +- `from` – anwani ya mtumaji, ambayo itatia saini kwenye muamala. Hii itakuwa akaunti inayomilikiwa na mtu wa nje kwa kuwa akaunti za mkataba haziwezi kutuma miamala +- `to` – anwani ya mpokeaji (ikiwa ni akaunti inayomilikiwa na mtu wa nje, muamala utahamisha thamani. Ikiwa ni akaunti ya mkataba, muamala utatekeleza msimbo wa mkataba) +- `sahihi` – kitambulisho cha mtumaji. Hii inatengenezwa wakati ufunguo binafsi wa mtumaji unapotia saini muamala na kuthibitisha kuwa mtumaji ameidhinisha muamala huu +- `nonce` - kaunta inayoongezeka kwa mfuatano ambayo inaonyesha nambari ya muamala kutoka kwa akaunti +- `value` – kiasi cha ETH cha kuhamishwa kutoka kwa mtumaji hadi kwa mpokeaji (kimetajwa kwa WEI, ambapo 1ETH ni sawa na 1e+18wei) +- `input data` – sehemu ya hiari ya kujumuisha data yoyote +- `gasLimit` – kiwango cha juu cha vitengo vya gesi ambavyo vinaweza kutumiwa na muamala. [EVM](/developers/docs/evm/opcodes) inabainisha vitengo vya gesi vinavyohitajika kwa kila hatua ya kukokotoa +- `maxPriorityFeePerGas` - bei ya juu zaidi ya gesi iliyotumika kujumuishwa kama zawadi kwa mthibitishaji +- `maxFeePerGas` - ada ya juu zaidi kwa kila kitengo cha gesi ambayo mtu yuko tayari kulipia muamala (inajumuisha `baseFeePerGas` na `maxPriorityFeePerGas`) + +Gesi ni rejeleo la hesabu inayohitajika kuchakata muamala na mthibitishaji. Watumiaji wanapaswa kulipa ada kwa ajili ya hesabu hii. `gasLimit`, na `maxPriorityFeePerGas` huamua ada ya juu zaidi ya muamala inayolipwa kwa mthibitishaji. [Zaidi kuhusu Gesi](/developers/docs/gas/). + +Kitu cha muamala kitaonekana kama hivi: + +```js +{ + from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", + to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a", + gasLimit: "21000", + maxFeePerGas: "300", + maxPriorityFeePerGas: "10", + nonce: "0", + value: "10000000000" +} +``` + +Lakini kitu cha muamala kinahitaji kutiwa saini kwa kutumia ufunguo binafsi wa mtumaji. Hii inathibitisha kuwa muamala ungeweza tu kutoka kwa mtumaji na haukutumwa kwa njia ya ulaghai. + +Mteja wa Ethereum kama Geth atashughulikia mchakato huu wa kutia saini. + +Mfano wa wito wa [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" + } + ] +} +``` + +Mfano wa jibu: + +```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` ni muamala uliotiwa saini katika mfumo uliosimbwa kwa [Kiambishi awali cha Urefu Kinachojirudia (RLP)](/developers/docs/data-structures-and-encoding/rlp) +- `tx` ni muamala uliotiwa saini katika mfumo wa JSON + +Kwa kutumia hashi ya saini, muamala unaweza kuthibitishwa kwa njia fiche kwamba ulitoka kwa mtumaji na uliwasilishwa kwenye mtandao. + +### Sehemu ya data {#the-data-field} + +Idadi kubwa ya miamala hufikia mkataba kutoka kwa akaunti inayomilikiwa na mtu wa nje. +Mikataba mingi imeandikwa kwa lugha ya Solidity na inatafsiri sehemu yake ya data kulingana na [kiolesura cha programu ya binary (ABI)](/glossary/#abi). + +Baiti nne za kwanza hubainisha ni kazi ipi ya kuitwa, kwa kutumia hashi ya jina la kazi na hoja zake. +Wakati mwingine unaweza kutambua kazi kutoka kwa kiteuzi kwa kutumia [hifadhidata hii](https://www.4byte.directory/signatures/). + +Sehemu iliyobaki ya calldata ni hoja, [zilizosimbwa kama ilivyobainishwa katika maelezo ya ABI](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding). + +Kwa mfano, hebu tuangalie [muamala huu](https://etherscan.io/tx/0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1). +Tumia **Bofya ili kuona Zaidi** ili kuona calldata. + +Kiteuzi cha kazi ni `0xa9059cbb`. Kuna [kazi kadhaa zinazojulikana na saini hii](https://www.4byte.directory/signatures/?bytes4_signature=0xa9059cbb). +Katika kesi hii [msimbo chanzo wa mkataba](https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48#code) umepakiwa kwenye Etherscan, kwa hivyo tunajua kazi ni `transfer(address,uint256)`. + +Data iliyobaki ni: + +``` +0000000000000000000000004f6742badb049791cd9a37ea913f2bac38d01279 +000000000000000000000000000000000000000000000000000000003b0559f4 +``` + +Kulingana na maelezo ya ABI, thamani za nambari kamili (kama vile anwani, ambazo ni nambari kamili za baiti-20) huonekana katika ABI kama maneno ya baiti-32, yaliyojazwa na sufuri mbele. +Kwa hivyo tunajua anwani ya `to` ni [`4f6742badb049791cd9a37ea913f2bac38d01279`](https://etherscan.io/address/0x4f6742badb049791cd9a37ea913f2bac38d01279). +`value` ni 0x3b0559f4 = 990206452. + +## Aina za miamala {#types-of-transactions} + +Kwenye Ethereum kuna aina chache tofauti za miamala: + +- Miamala ya kawaida: muamala kutoka akaunti moja kwenda nyingine. +- Miamala ya kupeleka mkataba: muamala bila anwani ya 'to', ambapo sehemu ya data hutumika kwa msimbo wa mkataba. +- Utekelezaji wa mkataba: muamala unaoingiliana na mkataba-erevu uliowekwa. Katika kesi hii, anwani ya 'to' ni anwani ya mkataba-erevu. + +### Kuhusu gesi {#on-gas} + +Kama ilivyotajwa, miamala inagharimu [gesi](/developers/docs/gas/) kutekeleza. Miamala rahisi ya uhamishaji inahitaji vitengo 21,000 vya Gesi. + +Kwa hiyo Bob kumtumia Alice 1 ETH kwa `baseFeePerGas` ya 190 gwei na `maxPriorityFeePerGas` ya 10 gwei, Bob atahitaji kulipa ada ifuatayo: + +``` +(190 + 10) * 21000 = 4,200,000 gwei +--au-- +0.0042 ETH +``` + +Akaunti ya Bob itapunguzwa **-1.0042 ETH** (ETH 1 kwa Alice + ETH 0.0042 katika ada za gesi) + +Akaunti ya Alice itaongezwa **+1.0 ETH** + +Ada ya msingi itachomwa **-0.00399 ETH** + +Mthibitishaji huweka zawadi **+0.000210 ETH** + +![Mchoro unaonyesha jinsi gesi isiyotumika inavyorejeshwa](./gas-tx.png) +_Mchoro umechukuliwa kutoka [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_ + +Gesi yoyote isiyotumika katika muamala hurejeshwa kwenye akaunti ya mtumiaji. + +### Mwingiliano wa mkataba-erevu {#smart-contract-interactions} + +Gesi inahitajika kwa muamala wowote unaohusisha mkataba-erevu. + +Mikataba-erevu pia inaweza kuwa na kazi zinazojulikana kama kazi za [`view`](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) au [`pure`](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions), ambazo hazibadilishi hali ya mkataba. Kwa hivyo, kuita kazi hizi kutoka kwa EOA hakutahitaji gesi yoyote. Wito wa msingi wa RPC kwa hali hii ni [`eth_call`](/developers/docs/apis/json-rpc#eth_call). + +Tofauti na inapofikiwa kwa kutumia `eth_call`, kazi hizi za `view` au `pure` pia huitwa kwa kawaida ndani (yaani, kutoka kwa mkataba wenyewe au kutoka kwa mkataba mwingine) ambazo hugharimu gesi. + +## Mzunguko wa maisha ya muamala {#transaction-lifecycle} + +Mara tu muamala unapowasilishwa, yafuatayo hutokea: + +1. Hashi ya muamala inatolewa kwa njia fiche: + `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` +2. Kisha muamala hutangazwa kwenye mtandao na kuongezwa kwenye dimbwi la miamala linalojumuisha miamala mingine yote ya mtandao inayosubiri. +3. Mthibitishaji lazima achague muamala wako na kuujumuisha kwenye bloku ili kuthibitisha muamala na kuuchukulia kama "uliyefanikiwa". +4. Kadiri muda unavyopita, bloku iliyo na muamala wako itasasishwa kuwa "iliyohalalishwa" kisha "iliyokamilishwa". Maboresho haya hufanya iwe na uhakika zaidi kwamba muamala wako ulifanikiwa na hautawahi kubadilishwa. Mara tu bloku "inapokamilishwa", inaweza tu kubadilishwa na shambulio la kiwango cha mtandao ambalo lingegharimu mabilioni mengi ya dola. + +## Onyesho la picha {#a-visual-demo} + +Tazama Austin akikuelekeza kupitia miamala, gesi, na uchimbaji madini. + + + +## Bahasha ya Muamala Uliochapwa {#typed-transaction-envelope} + +Ethereum hapo awali ilikuwa na muundo mmoja wa miamala. Kila muamala ulikuwa na nonce, bei ya gesi, kikomo cha gesi, anwani ya mpokeaji, thamani, data, v, r, na s. Sehemu hizi [zimesimbwa kwa RLP](/developers/docs/data-structures-and-encoding/rlp/), ili kuonekana kama hivi: + +`RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` + +Ethereum imebadilika ili kusaidia aina nyingi za miamala ili kuruhusu vipengele vipya kama vile orodha za ufikiaji na [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) kutekelezwa bila kuathiri miundo ya miamala ya zamani. + +[EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) ndicho kinachoruhusu tabia hii. Miamala inatafsiriwa kama: + +`TransactionType || TransactionPayload` + +Ambapo sehemu zimefafanuliwa kama: + +- `TransactionType` - nambari kati ya 0 na 0x7f, kwa jumla ya aina 128 zinazowezekana za miamala. +- `TransactionPayload` - safu ya baiti isiyo ya mpangilio iliyofafanuliwa na aina ya muamala. + +Kulingana na thamani ya `TransactionType`, muamala unaweza kuainishwa kama: + +1. **Aina ya 0 (Urithi) Miamala:** Muundo asili wa muamala uliotumika tangu uzinduzi wa Ethereum. Hazijumuishi vipengele kutoka [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) kama vile hesabu za ada za gesi zinazobadilika au orodha za ufikiaji za mikataba-erevu. Miamala ya urithi haina kiambishi awali maalum kinachoonyesha aina yake katika mfumo wake wa mfululizo, ikianza na baiti `0xf8` wakati wa kutumia usimbaji wa [Kiambishi awali cha Urefu Kinachojirudia (RLP)](/developers/docs/data-structures-and-encoding/rlp). Thamani ya TransactionType kwa miamala hii ni `0x0`. + +2. **Miamala ya Aina 1:** Ilianzishwa katika [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) kama sehemu ya [Sasisho la Berlin la](/ethereum-forks/#berlin) Ethereum, miamala hii inajumuisha kigezo cha `accessList`. Orodha hii inabainisha anwani na funguo za hifadhi ambazo muamala unatarajia kufikia, ikisaidia kupunguza gharama za [gesi](/developers/docs/gas/) kwa miamala tata inayohusisha mikataba-erevu. Mabadiliko ya soko la ada la EIP-1559 hayajumuishwi katika miamala ya Aina 1. Miamala ya Aina 1 pia inajumuisha kigezo cha `yParity`, ambacho kinaweza kuwa `0x0` au `0x1`, kikionyesha usawa wa thamani ya y ya saini ya secp256k1. Zinatambuliwa kwa kuanza na baiti `0x01`, na thamani yao ya TransactionType ni `0x1`. + +3. **Miamala ya Aina 2**, inayojulikana kama miamala ya EIP-1559, ni miamala iliyoanzishwa katika [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559), katika [Sasisho la London la](/ethereum-forks/#london) Ethereum. Zimekuwa aina ya kawaida ya muamala kwenye mtandao wa Ethereum. Miamala hii inaleta utaratibu mpya wa soko la ada ambao unaboresha utabiri kwa kutenganisha ada ya muamala kuwa ada ya msingi na ada ya kipaumbele. Zinaanza na baiti `0x02` na zinajumuisha sehemu kama vile `maxPriorityFeePerGas` na `maxFeePerGas`. Miamala ya Aina 2 sasa ndiyo chaguo-msingi kutokana na unyumbufu na ufanisi wake, hasa inapendelewa wakati wa msongamano mkubwa wa mtandao kwa uwezo wake wa kusaidia watumiaji kudhibiti ada za miamala kwa utabiri zaidi. Thamani ya TransactionType kwa miamala hii ni `0x2`. + +4. **Miamala ya Aina 3 (Blob)** ilianzishwa katika [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) kama sehemu ya [Sasisho la Dencun la](/ethereum-forks/#dencun) Ethereum. Miamala hii imeundwa kushughulikia data ya "blob" (Vitu Vikubwa vya Binary) kwa ufanisi zaidi, hasa ikinufaisha unda-mpya wa Safu 2 kwa kutoa njia ya kutuma data kwenye mtandao wa Ethereum kwa gharama ya chini. Miamala ya blob inajumuisha sehemu za ziada kama vile `blobVersionedHashes`, `maxFeePerBlobGas`, na `blobGasPrice`. Zinaanza na baiti `0x03`, na thamani yao ya TransactionType ni `0x3`. Miamala ya blob inawakilisha uboreshaji mkubwa katika upatikanaji wa data wa Ethereum na uwezo wa kuongezeka. + +5. **Miamala ya Aina 4** ilianzishwa katika [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) kama sehemu ya [Sasisho la Pectra la](/roadmap/pectra/) Ethereum. Miamala hii imeundwa kuwa na uoanifu wa mbele na uondoaji wa akaunti. Zinaruhusu EOA kutenda kwa muda kama akaunti za mkataba-erevu bila kuathiri utendaji wao wa asili. Zinajumuisha kigezo cha `authorization_list`, ambacho kinabainisha mkataba-erevu ambao EOA inakabidhi mamlaka yake. Baada ya muamala, sehemu ya msimbo ya EOA itakuwa na anwani ya mkataba-erevu uliokabidhiwa. + +## Masomo zaidi {#further-reading} + +- [EIP-2718: Bahasha ya Muamala Yenye Aina](https://eips.ethereum.org/EIPS/eip-2718) + +_Unajua rasilimali ya jamii iliyokusaidia?_ Hariri ukurasa huu na uiongeze!_ + +## Mada zinazohusiana {#related-topics} + +- Hifadhi ya fedha (/developers/docs/accounts/) +- [Mashine Halisi ya Ethereum (EVM)](/developers/docs/evm/) +- [Gesi](/developers/docs/gas/) diff --git a/public/content/translations/sw/developers/docs/web2-vs-web3/index.md b/public/content/translations/sw/developers/docs/web2-vs-web3/index.md new file mode 100644 index 00000000000..9f9c23fd659 --- /dev/null +++ b/public/content/translations/sw/developers/docs/web2-vs-web3/index.md @@ -0,0 +1,62 @@ +--- +title: Wavuti-2 dhidi ya Wavuti-3 +description: Linganisha huduma za Web2 zilizowekwa kati na programu zilizogatuliwa za Web3 zilizojengwa kwenye teknolojia ya mnyororo wa bloku wa Ethereum. +lang: sw +--- + +Web2 inarejelea toleo la intaneti ambalo wengi wetu tunalijua leo. Intaneti inayotawaliwa na makampuni ambayo hutoa huduma kwa kubadilishana na data yako ya kibinafsi. Web3, katika muktadha wa Ethereum, inarejelea programu zilizogatuliwa zinazoendeshwa kwenye mnyororo wa bloku. Hizi ni programu zinazomruhusu mtu yeyote kushiriki bila kuchuma mapato kutokana na data yake ya kibinafsi. + +Unatafuta rasilimali inayofaa zaidi kwa wanaoanza? Tazama [utangulizi wetu wa web3](/web3/). + +## Faida za Web3 {#web3-benefits} + +Wasanidi programu wengi wa Web3 wamechagua kujenga mifumo mtawanyo ya kimamlaka kwa sababu ya ugatuaji asili wa Ethereum: + +- Mtu yeyote aliye kwenye mtandao ana ruhusa ya kutumia huduma – au kwa maneno mengine, ruhusa haihitajiki. +- Hakuna anayeweza kukuzuia au kukukatalia ufikiaji wa huduma. +- Malipo yamejengewa ndani kupitia tokeni asili, ether (ETH). +- Ethereum ni turing-complete, ikimaanisha unaweza kupanga programu karibu kila kitu. + +## Ulinganisho wa vitendo {#practical-comparisons} + +| Web2 | Wavuti3 | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- | +| Twitter inaweza kudhibiti akaunti au tweet yoyote | Tweet za Web3 haziwezi kudhibitiwa kwa sababu udhibiti umegatuliwa | +| Huduma ya malipo inaweza kuamua kutoruhusu malipo kwa aina fulani za kazi | Programu za malipo za Web3 hazihitaji data ya kibinafsi na haziwezi kuzuia malipo | +| Seva za programu za uchumi wa gig zinaweza kuacha kufanya kazi na kuathiri mapato ya wafanyakazi | Seva za Web3 haziwezi kuacha kufanya kazi – zinatumia Ethereum, mtandao uliogatuliwa wa maelfu ya kompyuta kama backend yao | + +Hii haimaanishi kwamba huduma zote zinahitaji kugeuzwa kuwa mfumo mtawanyo wa kimamlaka. Mifano hii inaonyesha tofauti kuu kati ya huduma za web2 na web3. + +## Mapungufu ya Web3 {#web3-limitations} + +Web3 ina mapungufu kadhaa kwa sasa: + +- Uwezo wa kuongezeka – miamala ni ya polepole zaidi kwenye web3 kwa sababu imegatuliwa. Mabadiliko ya hali, kama vile malipo, yanahitaji kuchakatwa na nodi na kuenezwa kwenye mtandao mzima. +- UX – kuingiliana na programu za web3 kunaweza kuhitaji hatua za ziada, programu, na elimu. Hii inaweza kuwa kikwazo kwa kukubalika. +- Ufikiaji – ukosefu wa muunganisho katika vivinjari vya kisasa hufanya web3 isifikiwe kwa urahisi na watumiaji wengi. +- Gharama – mifumo mtawanyo ya kimamlaka iliyofanikiwa zaidi huweka sehemu ndogo sana ya msimbo wao kwenye mnyororo wa bloku kwa kuwa ni ghali. + +## Uwekaji kati dhidi ya ugatuaji {#centralization-vs-decentralization} + +Katika jedwali lililo hapa chini, tumeorodhesha baadhi ya faida na hasara kwa ujumla za mitandao ya kidijitali iliyowekwa kati na iliyogatuliwa. + +| Mifumo Iliyowekwa Kati | Mifumo Iliyogatuliwa | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Kipenyo cha chini cha mtandao (washiriki wote wameunganishwa na mamlaka kuu); habari huenea haraka, kwani ueneaji hushughulikiwa na mamlaka kuu yenye rasilimali nyingi za kukokotoa. | Washiriki walio mbali zaidi kwenye mtandao wanaweza kuwa kingo nyingi mbali kutoka kwa kila mmoja. Habari inayotangazwa kutoka upande mmoja wa mtandao inaweza kuchukua muda mrefu kufikia upande mwingine. | +| Kawaida utendaji wa juu (upitishaji wa juu, rasilimali chache za kukokotoa zinazotumika) na rahisi kutekeleza. | Kawaida utendaji wa chini (upitishaji wa chini, rasilimali nyingi zaidi za kukokotoa zinazotumika) na ngumu zaidi kutekeleza. | +| Katika tukio la data zinazokinzana, utatuzi ni wazi na rahisi: chanzo kikuu cha ukweli ni mamlaka kuu. | Itifaki (mara nyingi ngumu) inahitajika kwa utatuzi wa mizozo, ikiwa rika hutoa madai yanayokinzana kuhusu hali ya data ambayo washiriki wanapaswa kusawazishwa kwayo. | +| Sehemu moja ya kutofaulu: wahusika hasidi wanaweza kuuangusha mtandao kwa kulenga mamlaka kuu. | Hakuna sehemu moja ya kutofaulu: mtandao bado unaweza kufanya kazi hata kama sehemu kubwa ya washiriki watashambuliwa/kuondolewa. | +| Uratibu kati ya washiriki wa mtandao ni rahisi zaidi, na hushughulikiwa na mamlaka kuu. Mamlaka kuu inaweza kulazimisha washiriki wa mtandao kupitisha maboresho, masasisho ya itifaki, n.k., bila shida nyingi. | Uratibu mara nyingi ni mgumu, kwani hakuna wakala mmoja aliye na kauli ya mwisho katika maamuzi ya kiwango cha mtandao, maboresho ya itifaki, n.k. Katika hali mbaya zaidi, mtandao uko katika hatari ya kugawanyika kunapokuwa na kutokubaliana kuhusu mabadiliko ya itifaki. | +| Mamlaka kuu inaweza kudhibiti data, na hivyo kuweza kukata sehemu za mtandao zisishirikiane na sehemu iliyobaki ya mtandao. | Udhibiti ni mgumu zaidi, kwani habari ina njia nyingi za kuenea katika mtandao. | +| Ushiriki katika mtandao unadhibitiwa na mamlaka kuu. | Mtu yeyote anaweza kushiriki katika mtandao; hakuna “walinzi wa lango.” Kimsingi, gharama ya ushiriki ni ya chini sana. | + +Kumbuka kuwa hizi ni ruwaza za jumla ambazo huenda zisiwe za kweli katika kila mtandao. Zaidi ya hayo, katika uhalisia kiwango ambacho mtandao umewekwa kati/umegatuliwa kipo kwenye wigo; hakuna mtandao uliowekwa kati kabisa au uliogatuliwa kabisa. + +## Masomo zaidi {#further-reading} + +- [Web3 ni nini?](/web3/) - _ethereum.org_ +- [Usanifu wa programu ya Web 3.0](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_ +- [Maana ya Ugatuaji](https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274) _Feb 6, 2017 - Vitalik Buterin_ +- [Kwa Nini Ugatuaji ni Muhimu](https://onezero.medium.com/why-decentralization-matters-5e3f79f7638e) _Feb 18, 2018 - Chris Dixon_ +- [Web 3.0 ni Nini na Kwa Nini ni Muhimu](https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b) _Dec 31, 2019 - Max Mersch and Richard Muirhead_ +- [Kwa Nini Tunahitaji Web 3.0](https://gavofyork.medium.com/why-we-need-web-3-0-5da4f2bf95ab) _Sep 12, 2018 - Gavin Wood_ diff --git a/public/content/translations/sw/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/public/content/translations/sw/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md new file mode 100644 index 00000000000..acddd519041 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -0,0 +1,300 @@ +--- +title: Utangulizi wa msanidi programu wa Python kwa Ethereum, sehemu ya 1 +description: Utangulizi wa uundaji wa Ethereum, muhimu hasa kwa wale wenye ujuzi wa lugha ya programu ya Python +author: Marc Garreau +lang: sw +tags: [ "python", "web3.py" ] +skill: beginner +published: 2020-09-08 +source: Snake charmers +sourceUrl: https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/ +--- + +Kwa hivyo, umesikia kuhusu jambo hili la Ethereum na uko tayari kuanza safari ya kulichunguza kwa kina? Chapisho hili litaelezea kwa haraka misingi fulani ya mnyororo wa bloku, kisha kukuwezesha kuingiliana na nodi ya Ethereum iliyoigwa – kusoma data ya bloku, kuangalia salio la akaunti, na kutuma miamala. Wakati huo huo, tutaangazia tofauti kati ya njia za jadi za kuunda programu na dhana hii mpya ya ugatuzi. + +## Mahitaji (yasiyo ya lazima) {#soft-prerequisites} + +Chapisho hili linalenga kufikiwa na wasanidi programu mbalimbali. [Zana za Python](/developers/docs/programming-languages/python/) zitatumika, lakini ni kama chombo tu cha kuwasilisha mawazo – hakuna shida kama wewe si msanidi programu wa Python. Hata hivyo, nitakuwa na mawazo machache kuhusu kile ambacho tayari unakijua, ili tuweze kuendelea haraka na sehemu mahususi za Ethereum. + +Mawazo: + +- Unaweza kutumia terminal, +- Umeandika mistari michache ya msimbo wa Python, +- Toleo la Python 3.6 au la juu zaidi limesakinishwa kwenye kompyuta yako (matumizi ya [mazingira ya mtandaoni](https://realpython.com/effective-python-environment/#virtual-environments) yanapendekezwa sana), na +- umetumia `pip`, kisakinishi cha vifurushi cha Python. + Tena, ikiwa yoyote kati ya haya si kweli, au huna mpango wa kuiga msimbo katika makala hii, bado unaweza kufuatilia vizuri tu. + +## Minyororo ya bloku, kwa ufupi {#blockchains-briefly} + +Kuna njia nyingi za kuelezea Ethereum, lakini kiini chake ni mnyororo wa bloku. Minyororo ya bloku huundwa na mfululizo wa bloku, kwa hivyo tuanzie hapo. Kwa maneno rahisi, kila bloku kwenye mnyororo wa bloku wa Ethereum ni metadata fulani na orodha ya miamala. Katika umbizo la JSON, inaonekana kama hivi: + +```json +{ + "number": 1234567, + "hash": "0xabc123...", + "parentHash": "0xdef456...", + ..., + "transactions": [...] +} +``` + +Kila [bloku](/developers/docs/blocks/) ina rejeleo la bloku iliyotangulia; `parentHash` ni hashi tu ya bloku iliyopita. + +Kumbuka: Ethereum hutumia mara kwa mara kazi za hashi kutoa thamani za ukubwa usiobadilika ("hashi"). Hashi zina jukumu muhimu katika Ethereum, lakini kwa sasa unaweza kuzichukulia kama vitambulisho vya kipekee. + +![Mchoro unaoonyesha mnyororo wa bloku pamoja na data ndani ya kila bloku](./blockchain-diagram.png) + +_Mnyororo wa bloku kimsingi ni orodha iliyounganishwa; kila bloku ina rejeleo la bloku iliyopita._ + +Muundo huu wa data si jambo jipya, lakini sheria (yaani, itifaki za rika-kwa-rika) zinazoongoza mtandao ndizo zilizo mpya. Hakuna mamlaka kuu; mtandao wa marika lazima ushirikiane ili kuendeleza mtandao, na kushindana kuamua ni miamala ipi itakayojumuishwa katika bloku inayofuata. Kwa hivyo, unapotaka kumtumia rafiki pesa, utahitaji kutangaza muamala huo kwa mtandao, kisha subiri ujumuishwe katika bloku ijayo. + +Njia pekee ya mnyororo wa bloku kuthibitisha kuwa pesa zilitumwa kweli kutoka kwa mtumiaji mmoja hadi mwingine ni kutumia sarafu asili ya (yaani, iliyoundwa na kusimamiwa na) mnyororo huo wa bloku. Katika Ethereum, sarafu hii inaitwa ether, na mnyororo wa bloku wa Ethereum una rekodi rasmi pekee ya salio za akaunti. + +## Dhana mpya {#a-new-paradigm} + +Rundo hili jipya la teknolojia ya ugatuzi limechochea zana mpya za wasanidi programu. Zana kama hizo zipo katika lugha nyingi za programu, lakini tutakuwa tukiangalia kupitia lenzi ya Python. Kukariri: hata kama Python si lugha unayoipendelea, haipaswi kuwa shida sana kufuatilia. + +Wasanidi programu wa Python wanaotaka kuingiliana na Ethereum huenda wakatumia [Web3.py](https://web3py.readthedocs.io/). Web3.py ni maktaba inayorahisisha sana jinsi unavyounganisha kwenye nodi ya Ethereum, kisha kutuma na kupokea data kutoka kwayo. + +Kumbuka: "Nodi ya Ethereum" na "Mteja wa Ethereum" hutumika kwa kubadilishana. Katika hali zote mbili, inarejelea programu ambayo mshiriki katika mtandao wa Ethereum anatumia. Programu hii inaweza kusoma data ya bloku, kupokea sasisho wakati bloku mpya zinaongezwa kwenye mnyororo, kutangaza miamala mipya, na zaidi. Kitaalamu, mteja ni programu, nodi ni kompyuta inayoendesha programu hiyo. + +[Wateja wa Ethereum](/developers/docs/nodes-and-clients/) wanaweza kusanidiwa kufikiwa na [IPC](https://wikipedia.org/wiki/Inter-process_communication), HTTP, au Websockets, kwa hivyo Web3.py itahitaji kuiga usanidi huu. Web3.py inarejelea chaguo hizi za muunganisho kama **watoa huduma**. Utataka kuchagua mmoja wa watoa huduma watatu ili kuunganisha tukio la Web3.py na nodi yako. + +![Mchoro unaoonyesha jinsi web3.py inavyotumia IPC kuunganisha programu yako na nodi ya Ethereum](./web3py-and-nodes.png) + +_Sanidi nodi ya Ethereum na Web3.py ili kuwasiliana kupitia itifaki ileile, k.m., IPC katika mchoro huu._ + +Mara tu Web3.py itakaposanidiwa vizuri, unaweza kuanza kuingiliana na mnyororo wa bloku. Hapa kuna mifano michache ya matumizi ya Web3.py kama onyesho la kile kitakachofuata: + +```python +# soma data ya bloku: +w3.eth.get_block('latest') + +# tuma muamala: +w3.eth.send_transaction({'from': ..., 'to': ..., 'value': ...}) +``` + +## Usakinishaji {#installation} + +Katika mwongozo huu, tutakuwa tukifanya kazi ndani ya mkalimani wa Python tu. Hatutakuwa tukitengeneza saraka, faili, madarasa au kazi zozote. + +Kumbuka: Katika mifano iliyo hapa chini, amri zinazoanza na `$` zimekusudiwa kuendeshwa kwenye terminal. (Usiandike `$`, inaashiria tu mwanzo wa mstari.) + +Kwanza, sakinisha [IPython](https://ipython.org/) kwa mazingira rahisi ya mtumiaji ya kuchunguza. IPython inatoa ukamilishaji wa kichupo, miongoni mwa vipengele vingine, na kuifanya iwe rahisi zaidi kuona kinachowezekana ndani ya Web3.py. + +```bash +pip install ipython +``` + +Web3.py imechapishwa chini ya jina `web3`. Isakinishe kama ifuatavyo: + +```bash +pip install web3 +``` + +Jambo moja zaidi – tutaiga mnyororo wa bloku baadaye, jambo ambalo linahitaji vitegemezi vingine vichache. Unaweza kuzisakinisha kupitia: + +```bash +pip install 'web3[tester]' +``` + +Uko tayari kuanza! + +Kumbuka: Kifurushi cha `web3[tester]` hufanya kazi hadi Python 3.10.xx + +## Anzisha sanduku la mchanga {#spin-up-a-sandbox} + +Fungua mazingira mapya ya Python kwa kuendesha `ipython` kwenye terminal yako. Hii inalinganishwa na kuendesha `python`, lakini inakuja na mambo mengi zaidi. + +```bash +ipython +``` + +Hii itachapisha habari fulani kuhusu matoleo ya Python na IPython unayotumia, kisha unapaswa kuona kidokezo kinachosubiri uingizaji: + +```python +In [1]: +``` + +Sasa unaangalia ganda la maingiliano la Python. Kimsingi, ni sanduku la mchanga la kuchezea. Ikiwa umefika hapa, ni wakati wa kuingiza Web3.py: + +```python +In [1]: from web3 import Web3 +``` + +## Kutambulisha moduli ya Web3 {#introducing-the-web3-module} + +Licha ya kuwa lango la Ethereum, moduli ya [Web3](https://web3py.readthedocs.io/en/stable/overview.html#base-api) hutoa kazi chache za urahisi. Hebu tuchunguze kadhaa. + +Katika programu ya Ethereum, kwa kawaida utahitaji kubadilisha madhehebu ya sarafu. Moduli ya Web3 hutoa mbinu kadhaa za usaidizi kwa ajili ya hili tu: [from_wei](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.from_wei) na [to_wei](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.to_wei). + + +Kumbuka: Kompyuta ni mbaya sana katika kushughulikia hesabu za desimali. Ili kuepuka hili, wasanidi programu mara nyingi huhifadhi kiasi cha dola katika senti. Kwa mfano, bidhaa yenye bei ya $5.99 inaweza kuhifadhiwa kwenye hifadhidata kama 599. + +Mfumo kama huo hutumiwa wakati wa kushughulikia miamala katika ether. Hata hivyo, badala ya nukta mbili za desimali, ether ina 18! Dhehebu dogo zaidi la ether linaitwa wei, kwa hivyo hiyo ndiyo thamani iliyobainishwa wakati wa kutuma miamala. + +ether 1 = wei 1000000000000000000 + +wei 1 = ether 0.000000000000000001 + + + +Jaribu kubadilisha baadhi ya thamani kwenda na kutoka wei. Kumbuka kwamba [kuna majina kwa madhehebu mengi](https://web3py.readthedocs.io/en/stable/troubleshooting.html#how-do-i-convert-currency-denominations) kati ya ether na wei. Mojawapo ya inayojulikana zaidi kati yao ni **gwei**, kwani mara nyingi ndivyo ada za muamala zinavyowakilishwa. + +```python +In [2]: Web3.to_wei(1, 'ether') +Out[2]: 1000000000000000000 + +In [3]: Web3.from_wei(500000000, 'gwei') +Out[3]: Decimal('0.5') +``` + +Mbinu zingine za matumizi kwenye moduli ya Web3 ni pamoja na vibadilishaji umbizo la data (k.m., [`toHex`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.toHex)), wasaidizi wa anwani (k.m., [`isAddress`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.isAddress)), na kazi za hashi (k.m., [`keccak`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.keccak)). Mengi ya haya yatajadiliwa baadaye katika mfululizo huu. Ili kuona mbinu na sifa zote zinazopatikana, tumia ukamilishaji kiotomatiki wa IPython kwa kuandika `Web3`. na kugonga kitufe cha kichupo mara mbili baada ya kipindi. + +## Zungumza na mnyororo {#talk-to-the-chain} + +Mbinu za urahisi ni nzuri, lakini hebu tuendelee kwenye mnyororo wa bloku. Hatua inayofuata ni kusanidi Web3.py ili kuwasiliana na nodi ya Ethereum. Hapa tuna chaguo la kutumia watoa huduma wa IPC, HTTP, au Websocket. + +Hatutapitia njia hii, lakini mfano wa mtiririko kamili wa kazi kwa kutumia Mtoa huduma wa HTTP unaweza kuonekana kama hivi: + +- Pakua nodi ya Ethereum, k.m., [Geth](https://geth.ethereum.org/). +- Anzisha Geth katika dirisha moja la terminal na usubiri isawazishe mtandao. Lango la msingi la HTTP ni `8545`, lakini linaweza kusanidiwa. +- Iambie Web3.py iunganishe kwenye nodi kupitia HTTP, kwenye `localhost:8545`. + `w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))` +- Tumia tukio la `w3` ili kuingiliana na nodi. + +Ingawa hii ni njia moja "halisi" ya kufanya hivyo, mchakato wa kusawazisha huchukua masaa na si lazima ikiwa unataka tu mazingira ya usanidi. Web3.py inaonyesha mtoa huduma wa nne kwa madhumuni haya, **EthereumTesterProvider**. Mtoa huduma huyu wa majaribio anaunganisha kwenye nodi ya Ethereum iliyoigwa yenye ruhusa zilizolegezwa na sarafu bandia ya kuchezea. + +![Mchoro unaoonyesha EthereumTesterProvider ikiunganisha programu yako ya web3.py na nodi ya Ethereum iliyoigwa](./ethereumtesterprovider.png) + +_EthereumTesterProvider huunganisha kwenye nodi iliyoigwa na ni muhimu kwa mazingira ya usanidi wa haraka._ + +Nodi hiyo iliyoigwa inaitwa [eth-tester](https://github.com/ethereum/eth-tester) na tuliisakikisha kama sehemu ya amri ya `pip install web3[tester]`. Kusanidi Web3.py kutumia mtoa huduma huyu wa majaribio ni rahisi kama: + +```python +In [4]: w3 = Web3(Web3.EthereumTesterProvider()) +``` + +Sasa uko tayari kutembelea mnyororo! Hilo si jambo ambalo watu husema. Nimebuni tu. Hebu tufanye ziara ya haraka. + +## Ziara ya haraka {#the-quick-tour} + +Kwanza kabisa, ukaguzi wa haraka: + +```python +In [5]: w3.is_connected() +Out[5]: True +``` + +Kwa kuwa tunatumia mtoa huduma wa majaribio, hili si jaribio la thamani sana, lakini likishindikana, kuna uwezekano uliandika kitu kimakosa ulipokuwa ukianzisha kigezo cha `w3`. Hakikisha mara mbili kuwa umejumuisha mabano ya ndani, yaani, `Web3.EthereumTesterProvider()`. + +## Kituo cha ziara #1: [akaunti](/developers/docs/accounts/) {#tour-stop-1-accounts} + +Ili kurahisisha, mtoa huduma wa majaribio alitengeneza akaunti na kuziwekea ether ya majaribio. + +Kwanza, hebu tuone orodha ya akaunti hizo: + +```python +In [6]: w3.eth.accounts +Out[6]: ['0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf', + '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF', + '0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69', ...] +``` + +Ukitekeleza amri hii, unapaswa kuona orodha ya nyuzi kumi zinazoanza na `0x`. Kila moja ni **anwani ya umma** na kwa namna fulani, inafanana na nambari ya akaunti kwenye akaunti ya hundi. Ungetoa anwani hii kwa mtu anayetaka kukutumia ether. + +Kama ilivyotajwa, mtoa huduma wa majaribio ameweka ether ya majaribio katika kila akaunti hizi. Hebu tujue ni kiasi gani kiko kwenye akaunti ya kwanza: + +```python +In [7]: w3.eth.get_balance(w3.eth.accounts[0]) +Out[7]: 1000000000000000000000000 +``` + +Hizo ni sufuri nyingi sana! Kabla ya kucheka hadi benki bandia, kumbuka somo kuhusu madhehebu ya sarafu la awali. Thamani za Ether huwakilishwa katika dhehebu dogo zaidi, wei. Badilisha hiyo iwe ether: + +```python +In [8]: w3.from_wei(1000000000000000000000000, 'ether') +Out[8]: Decimal('1000000') +``` + +Ether milioni moja za majaribio — bado si haba. + +## Kituo cha ziara #2: data ya bloku {#tour-stop-2-block-data} + +Hebu tuangalie hali ya mnyororo huu wa bloku ulioigwa: + +```python +In [9]: w3.eth.get_block('latest') +Out[9]: AttributeDict({ + 'number': 0, + 'hash': HexBytes('0x9469878...'), + 'parentHash': HexBytes('0x0000000...'), + ... + 'transactions': [] +}) +``` + +Habari nyingi hurudishwa kuhusu bloku, lakini kuna mambo kadhaa ya kuonyesha hapa: + +- Nambari ya bloku ni sifuri — haijalishi ni muda gani umepita tangu usanidi mtoa huduma wa majaribio. Tofauti na mtandao halisi wa Ethereum, ambao huongeza bloku mpya kila sekunde 12, uigaji huu utasubiri hadi uupe kazi ya kufanya. +- `transactions` ni orodha tupu, kwa sababu ileile: bado hatujafanya chochote. Bloku hii ya kwanza ni **bloku tupu**, ili tu kuanzisha mnyororo. +- Angalia kwamba `parentHash` ni kundi tu la baiti tupu. Hii inaashiria kuwa ni bloku ya kwanza kwenye mnyororo, pia inajulikana kama **bloku ya mwanzo**. + +## Kituo cha ziara #3: [miamala](/developers/docs/transactions/) {#tour-stop-3-transactions} + +Tumenaswa kwenye bloku sifuri hadi kuwe na muamala unaosubiri, kwa hivyo hebu tuupe mmoja. Tuma ether chache za majaribio kutoka akaunti moja hadi nyingine: + +```python +In [10]: tx_hash = w3.eth.send_transaction({ + 'from': w3.eth.accounts[0], + 'to': w3.eth.accounts[1], + 'value': w3.to_wei(3, 'ether'), + 'gas': 21000 +}) +``` + +Kwa kawaida hapa ndipo mahali ambapo ungesubiri kwa sekunde kadhaa ili muamala wako ujumuishwe katika bloku mpya. Mchakato mzima unaenda kama hivi: + +1. Wasilisha muamala na ushikilie hashi ya muamala. Hadi bloku iliyo na muamala itakapoundwa na kutangazwa, muamala huo "unasubiri." + `tx_hash = w3.eth.send_transaction({ … })` +2. Subiri muamala ujumuishwe katika bloku: + `w3.eth.wait_for_transaction_receipt(tx_hash)` +3. Endelea na mantiki ya programu. Ili kuona muamala uliofanikiwa: + `w3.eth.get_transaction(tx_hash)` + +Mazingira yetu yaliyoigwa yataongeza muamala katika bloku mpya mara moja, kwa hivyo tunaweza kuona muamala mara moja: + +```python +In [11]: w3.eth.get_transaction(tx_hash) +Out[11]: AttributeDict({ + 'hash': HexBytes('0x15e9fb95dc39...'), + 'blockNumber': 1, + 'transactionIndex': 0, + 'from': '0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf', + 'to': '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF', + 'value': 3000000000000000000, + ... +}) +``` + +Utaona maelezo ya kawaida hapa: sehemu za `from`, `to`, na `value` zinapaswa kufanana na viingizo vya wito wetu wa `send_transaction`. Jambo lingine la kutia moyo ni kwamba muamala huu ulijumuishwa kama muamala wa kwanza (`'transactionIndex': 0`) ndani ya bloku nambari 1. + +Tunaweza pia kuthibitisha kwa urahisi mafanikio ya muamala huu kwa kuangalia salio la akaunti mbili zinazohusika. Ether tatu zinapaswa kuwa zimehamishwa kutoka moja hadi nyingine. + +```python +In [12]: w3.eth.get_balance(w3.eth.accounts[0]) +Out[12]: 999996999979000000000000 + +In [13]: w3.eth.get_balance(w3.eth.accounts[1]) +Out[13]: 1000003000000000000000000 +``` + +Ya mwisho inaonekana vizuri! Salio liliongezeka kutoka ether 1,000,000 hadi 1,000,003. Lakini nini kilitokea kwa akaunti ya kwanza? Inaonekana imepoteza ether zaidi kidogo ya tatu. Ole, hakuna kitu maishani bure, na kutumia mtandao wa umma wa Ethereum kunahitaji uwalipe wenzako kwa jukumu lao la kusaidia. Ada ndogo ya muamala ilikatwa kutoka kwenye akaunti iliyowasilisha muamala - ada hii ni kiasi cha gesi iliyotumika (vitengo 21000 vya gesi kwa uhamisho wa ETH) kilichozidishwa na ada ya msingi ambayo hutofautiana kulingana na shughuli za mtandao pamoja na bakshishi inayokwenda kwa mthibitishaji anayejumuisha muamala katika bloku. + +Zaidi kuhusu [gesi](/developers/docs/gas/#post-london) + +Kumbuka: Kwenye mtandao wa umma, ada za muamala hubadilika kulingana na mahitaji ya mtandao na jinsi unavyotaka muamala uchakatwe haraka. Ikiwa una nia ya uchanganuzi wa jinsi ada zinavyokokotolewa, angalia chapisho langu la awali kuhusu jinsi miamala inavyojumuishwa katika bloku. + +## Na pumua {#and-breathe} + +Tumekuwa tukifanya hivi kwa muda, kwa hivyo hapa panaonekana kuwa mahali pazuri pa kupumzika. Safari ya uchunguzi wa kina inaendelea, na tutaendelea kuchunguza katika sehemu ya pili ya mfululizo huu. Baadhi ya dhana zijazo: kuunganisha kwenye nodi halisi, mikataba-erevu, na tokeni. Una maswali ya kufuatilia? Nijulishe! Maoni yako yataathiri wapi tutaelekea kutoka hapa. Maombi yanakaribishwa kupitia [Twitter](https://twitter.com/wolovim). diff --git a/public/content/translations/sw/developers/tutorials/all-you-can-cache/index.md b/public/content/translations/sw/developers/tutorials/all-you-can-cache/index.md new file mode 100644 index 00000000000..e91e437ecaf --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/all-you-can-cache/index.md @@ -0,0 +1,867 @@ +--- +title: "Yote unayoweza kuhifadhi kwenye kache" +description: Jifunze jinsi ya kuunda na kutumia mkataba wa kuhifadhi kache kwa ajili ya miamala ya bei nafuu ya unda-mpya +author: Ori Pomerantz +tags: [ "safu ya 2", "kuhifadhi kache", "ghala" ] +skill: intermediate +published: 2022-09-15 +lang: sw +--- + +Unapotumia unda-mpya, gharama ya baiti katika muamala ni ghali zaidi kuliko gharama ya sehemu ya ghala. Kwa hiyo, ni jambo la busara kuhifadhi taarifa nyingi iwezekanavyo kwenye kache kwenye chain. + +Katika makala haya utajifunza jinsi ya kuunda na kutumia mkataba wa kuhifadhi kache kwa njia ambayo thamani yoyote ya kigezo ambayo ina uwezekano wa kutumika mara nyingi itahifadhiwa kwenye kache na kupatikana kwa matumizi (baada ya mara ya kwanza) na idadi ndogo zaidi ya baiti, na jinsi ya kuandika msimbo wa offchain unaotumia kache hii. + +Ikiwa unataka kuruka makala na kuona msimbo chanzo, [upo hapa](https://github.com/qbzzt/20220915-all-you-can-cache). Safu ya uundaji ni [Foundry](https://getfoundry.sh/introduction/installation/). + +## Muundo wa jumla {#overall-design} + +Kwa ajili ya kurahisisha, tutachukulia vigezo vyote vya muamala ni `uint256`, urefu wa baiti 32. Tunapopokea muamala, tutachanganua kila kigezo kama hivi: + +1. Ikiwa baiti ya kwanza ni `0xFF`, chukua baiti 32 zinazofuata kama thamani ya kigezo na uiandike kwenye kache. + +2. Ikiwa baiti ya kwanza ni `0xFE`, chukua baiti 32 zinazofuata kama thamani ya kigezo lakini _usi_iandike kwenye kache. + +3. Kwa thamani nyingine yoyote, chukua biti nne za juu kama idadi ya baiti za ziada, na biti nne za chini kama biti muhimu zaidi za ufunguo wa kache. Hapa kuna baadhi ya mifano: + + | Baiti katika calldata | Ufunguo wa kache | + | :-------------------- | ---------------: | + | 0x0F | 0x0F | + | 0x10,0x10 | 0x10 | + | 0x12,0xAC | 0x02AC | + | 0x2D,0xEA, 0xD6 | 0x0DEAD6 | + +## Udhibiti wa kache {#cache-manipulation} + +Kache inatekelezwa katika [`Cache.sol`](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol). Wacha tuipitie mstari kwa mstari. + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + + +contract Cache { + + bytes1 public constant INTO_CACHE = 0xFF; + bytes1 public constant DONT_CACHE = 0xFE; +``` + +Vigezo hivi vya kudumu hutumiwa kutafsiri visa maalum ambapo tunatoa taarifa zote na ama tunataka iandikwe kwenye kache au la. Kuandika kwenye kache kunahitaji operesheni mbili za [`SSTORE`](https://www.evm.codes/#55) katika sehemu za ghala ambazo hazijatumika hapo awali kwa gharama ya gesi 22100 kila moja, kwa hivyo tunafanya iwe hiari. + +```solidity + + mapping(uint => uint) public val2key; +``` + +[Uhusiano](https://www.geeksforgeeks.org/solidity/solidity-mappings/) kati ya thamani na funguo zake. Taarifa hii ni muhimu ili kusimba thamani kabla ya kutuma muamala. + +```solidity + // Mahali n pana thamani ya ufunguo n+1, kwa sababu tunahitaji kuhifadhi + // sufuri kama "sio kwenye kache". + uint[] public key2val; +``` + +Tunaweza kutumia safu kwa ajili ya uhusiano kutoka kwa funguo hadi thamani kwa sababu tunakabidhi funguo, na kwa kurahisisha tunafanya hivyo kwa mfuatano. + +```solidity + function cacheRead(uint _key) public view returns (uint) { + require(_key <= key2val.length, "Inasoma ingizo la kache lisiloanzishwa"); + return key2val[_key-1]; + } // somaKache +``` + +Soma thamani kutoka kwenye kache. + +```solidity + // Andika thamani kwenye kache ikiwa bado haipo + // Ni ya umma tu ili kuwezesha jaribio kufanya kazi + function cacheWrite(uint _value) public returns (uint) { + // Ikiwa thamani tayari iko kwenye kache, rudisha ufunguo wa sasa + if (val2key[_value] != 0) { + return val2key[_value]; + } +``` + +Hakuna maana ya kuweka thamani ile ile kwenye kache zaidi ya mara moja. Ikiwa thamani tayari ipo, rudisha tu ufunguo uliopo. + +```solidity + // Kwa kuwa 0xFE ni kisa maalum, ufunguo mkubwa zaidi ambao kache inaweza + // kushikilia ni 0x0D ikifuatiwa na 0xFF mara 15. Ikiwa urefu wa kache tayari ni + // mkubwa kiasi hicho, shindwa. + // 1 2 3 4 5 6 7 8 9 A B C D E F + require(key2val.length+1 < 0x0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, + "mfuriko wa kache"); +``` + +Sidhani kama tutawahi kupata kache kubwa kiasi hicho (takriban maingizo 1.8\*1037, ambayo yangehitaji takriban 1027 TB kuhifadhi). Hata hivyo, nina umri wa kutosha kukumbuka ["640kB zingekuwa za kutosha daima"](https://quoteinvestigator.com/2011/09/08/640k-enough/). Jaribio hili ni la bei nafuu sana. + +```solidity + // Andika thamani ukitumia ufunguo unaofuata + val2key[_value] = key2val.length+1; +``` + +Ongeza utafutaji wa kinyume (kutoka thamani hadi ufunguo). + +```solidity + key2val.push(_value); +``` + +Ongeza utafutaji wa mbele (kutoka ufunguo hadi thamani). Kwa sababu tunakabidhi thamani kwa mfuatano, tunaweza tu kuiongeza baada ya thamani ya mwisho ya safu. + +```solidity + return key2val.length; + } // andikaKache +``` + +Rudisha urefu mpya wa `key2val`, ambao ni seli ambapo thamani mpya imehifadhiwa. + +```solidity + function _calldataVal(uint startByte, uint length) + private pure returns (uint) +``` + +Kazi hii inasoma thamani kutoka kwa calldata yenye urefu wowote (hadi baiti 32, ukubwa wa neno). + +```solidity + { + uint _retVal; + + require(length < 0x21, + "kikomo cha urefu wa _calldataVal ni baiti 32"); + require(length + startByte <= msg.data.length, + " _calldataVal inajaribu kusoma zaidi ya ukubwa wa calldata"); +``` + +Kazi hii ni ya ndani, kwa hivyo ikiwa msimbo uliobaki umeandikwa kwa usahihi, majaribio haya hayahitajiki. Hata hivyo, hayana gharama kubwa kwa hivyo tunaweza kuwa nayo. + +```solidity + assembly { + _retVal := calldataload(startByte) + } +``` + +Msimbo huu uko katika [Yul](https://docs.soliditylang.org/en/v0.8.16/yul.html). Inasoma thamani ya baiti 32 kutoka kwa calldata. Hii inafanya kazi hata kama calldata itaacha kabla ya `startByte+32` kwa sababu nafasi isiyoanzishwa katika EVM inachukuliwa kuwa sufuri. + +```solidity + _retVal = _retVal >> (256-length*8); +``` + +Hatuhitaji lazima thamani ya baiti 32. Hii huondoa baiti za ziada. + +```solidity + return _retVal; + } // _thamaniCalldata + + + // Soma kigezo kimoja kutoka kwa calldata, kuanzia _fromByte + function _readParam(uint _fromByte) internal + returns (uint _nextByte, uint _parameterValue) + { +``` + +Soma kigezo kimoja kutoka kwa calldata. Kumbuka kwamba tunahitaji kurudisha sio tu thamani tunayosoma, bali pia eneo la baiti inayofuata kwa sababu vigezo vinaweza kuwa na urefu kutoka baiti 1 hadi baiti 33. + +```solidity + // Baiti ya kwanza inatuambia jinsi ya kutafsiri iliyobaki + uint8 _firstByte; + + _firstByte = uint8(_calldataVal(_fromByte, 1)); +``` + +Solidity inajaribu kupunguza idadi ya hitilafu kwa kuzuia [ubadilishaji wa aina unaoweza kuwa hatari](https://docs.soliditylang.org/en/v0.8.16/types.html#implicit-conversions). Upungufu, kwa mfano kutoka biti 256 hadi biti 8, unahitaji kuwa wazi. + +```solidity + + // Soma thamani, lakini usiiandike kwenye kache + if (_firstByte == uint8(DONT_CACHE)) + return(_fromByte+33, _calldataVal(_fromByte+1, 32)); + + // Soma thamani, na uiandike kwenye kache + if (_firstByte == uint8(INTO_CACHE)) { + uint _param = _calldataVal(_fromByte+1, 32); + cacheWrite(_param); + return(_fromByte+33, _param); + } + + // Ikiwa tumefika hapa inamaanisha tunahitaji kusoma kutoka kwa kache + + // Idadi ya baiti za ziada za kusoma + uint8 _extraBytes = _firstByte / 16; +``` + +Chukua [nibble](https://en.wikipedia.org/wiki/Nibble) ya chini na uichanganye na baiti zingine ili kusoma thamani kutoka kwa kache. + +```solidity + uint _key = (uint256(_firstByte & 0x0F) << (8*_extraBytes)) + + _calldataVal(_fromByte+1, _extraBytes); + + return (_fromByte+_extraBytes+1, cacheRead(_key)); + + } // _somaKigezo + + + // Soma vigezo n (kazi zinajua ni vigezo vingapi wanavyotarajia) + function _readParams(uint _paramNum) internal returns (uint[] memory) { +``` + +Tungeweza kupata idadi ya vigezo tulivyo navyo kutoka kwa calldata yenyewe, lakini kazi zinazotuita zinajua ni vigezo vingapi wanavyotarajia. Ni rahisi kuwaacha watuambie. + +```solidity + // Vigezo tunavyosoma + uint[] memory params = new uint[](_paramNum); + + // Vigezo vinaanza kwenye baiti 4, kabla ya hapo ni saini ya kazi + uint _atByte = 4; + + for(uint i=0; i<_paramNum; i++) { + (_atByte, params[i]) = _readParam(_atByte); + } +``` + +Soma vigezo hadi upate nambari unayohitaji. Ikiwa tutapita mwisho wa calldata, `_readParams` itabatilisha wito. + +```solidity + + return(params); + } // somaVigezo + + // Kwa kujaribu _readParams, jaribu kusoma vigezo vinne + function fourParam() public + returns (uint256,uint256,uint256,uint256) + { + uint[] memory params; + params = _readParams(4); + return (params[0], params[1], params[2], params[3]); + } // kigezoNne +``` + +Faida moja kubwa ya Foundry ni kwamba inaruhusu majaribio kuandikwa katika Solidity ([angalia Kujaribu kache hapa chini](#testing-the-cache)). Hii inafanya majaribio ya kitengo kuwa rahisi zaidi. Hii ni kazi ambayo inasoma vigezo vinne na kuvirudisha ili jaribio liweze kuthibitisha kuwa vilikuwa sahihi. + +```solidity + // Pata thamani, rudisha baiti ambazo zitaisimba (kwa kutumia kache ikiwezekana) + function encodeVal(uint _val) public view returns(bytes memory) { +``` + +`encodeVal` ni kazi ambayo msimbo wa offchain huita ili kusaidia kuunda calldata inayotumia kache. Inapokea thamani moja na kurudisha baiti zinazoisimba. Kazi hii ni `view`, kwa hivyo haihitaji muamala na inapoitwa kutoka nje haina gharama yoyote ya gesi. + +```solidity + uint _key = val2key[_val]; + + // Thamani bado haiko kwenye kache, iongeze + if (_key == 0) + return bytes.concat(INTO_CACHE, bytes32(_val)); +``` + +Katika [EVM](/developers/docs/evm/) ghala zote ambazo hazijaanzishwa huchukuliwa kuwa sufuri. Kwa hivyo, ikiwa tutatafuta ufunguo wa thamani ambayo haipo, tunapata sufuri. Katika hali hiyo baiti zinazoisimba ni `INTO_CACHE` (kwa hivyo itahifadhiwa kwenye kache wakati ujao), ikifuatiwa na thamani halisi. + +```solidity + // Ikiwa ufunguo ni <0x10, rudisha kama baiti moja + if (_key < 0x10) + return bytes.concat(bytes1(uint8(_key))); +``` + +Baiti moja ndiyo rahisi zaidi. Tunatumia tu [`bytes.concat`](https://docs.soliditylang.org/en/v0.8.16/types.html#the-functions-bytes-concat-and-string-concat) kubadilisha aina ya `bytes` kuwa safu ya baiti ambayo inaweza kuwa na urefu wowote. Licha ya jina, inafanya kazi vizuri inapotolewa na hoja moja tu. + +```solidity + // Thamani ya baiti mbili, imesimbwa kama 0x1vvv + if (_key < 0x1000) + return bytes.concat(bytes2(uint16(_key) | 0x1000)); +``` + +Tunapokuwa na ufunguo ambao ni chini ya 163, tunaweza kuuelezea kwa baiti mbili. Kwanza tunabadilisha `_key`, ambayo ni thamani ya biti 256, kuwa thamani ya biti 16 na kutumia OR ya kimantiki kuongeza idadi ya baiti za ziada kwenye baiti ya kwanza. Kisha tunaibadilisha kuwa thamani ya `bytes2`, ambayo inaweza kubadilishwa kuwa `bytes`. + +```solidity + // Labda kuna njia ya kijanja ya kufanya mistari ifuatayo kama kitanzi, + // lakini ni kazi ya kutazama kwa hivyo ninaboresha muda wa mtayarishaji programu na + // urahisi. + + if (_key < 16*256**2) + return bytes.concat(bytes3(uint24(_key) | (0x2 * 16 * 256**2))); + if (_key < 16*256**3) + return bytes.concat(bytes4(uint32(_key) | (0x3 * 16 * 256**3))); + . + . + . + if (_key < 16*256**14) + return bytes.concat(bytes15(uint120(_key) | (0xE * 16 * 256**14))); + if (_key < 16*256**15) + return bytes.concat(bytes16(uint128(_key) | (0xF * 16 * 256**15))); +``` + +Thamani zingine (baiti 3, baiti 4, n.k.) zinashughulikiwa kwa njia ile ile, ila tu na saizi tofauti za uga. + +```solidity + // Ikiwa tutafika hapa, kuna kitu kibaya. + revert("Hitilafu katika encodeVal, haipaswi kutokea"); +``` + +Ikiwa tutafika hapa inamaanisha tumepata ufunguo ambao si chini ya 16\*25615. Lakini `cacheWrite` inaweka kikomo kwa funguo kwa hivyo hatuwezi hata kufikia 14\*25616 (ambayo ingekuwa na baiti ya kwanza ya 0xFE, kwa hivyo ingeonekana kama `DONT_CACHE`). Lakini haitugharimu sana kuongeza jaribio endapo mtayarishaji programu wa siku zijazo ataleta hitilafu. + +```solidity + } // simbaThamani + +} // Kache +``` + +### Kujaribu kache {#testing-the-cache} + +Moja ya faida za Foundry ni kwamba [inakuwezesha kuandika majaribio katika Solidity](https://getfoundry.sh/forge/tests/overview/), ambayo inafanya iwe rahisi kuandika majaribio ya kitengo. Majaribio ya darasa la `Cache` yapo [hapa](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/Cache.t.sol). Kwa sababu msimbo wa majaribio unajirudia, kama majaribio yanavyokuwa, makala haya yanaelezea sehemu za kuvutia tu. + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; + + +// Inahitaji kuendesha `forge test -vv` kwa konsoli. +import "forge-std/console.sol"; +``` + +Huu ni msimbo wa kiolezo tu ambao ni muhimu kutumia kifurushi cha majaribio na `console.log`. + +```solidity +import "src/Cache.sol"; +``` + +Tunahitaji kujua mkataba tunaoujaribu. + +```solidity +contract CacheTest is Test { + Cache cache; + + function setUp() public { + cache = new Cache(); + } +``` + +Kazi ya `setUp` inaitwa kabla ya kila jaribio. Katika kesi hii tunaunda kache mpya, ili majaribio yetu yasiathiriane. + +```solidity + function testCaching() public { +``` + +Majaribio ni kazi ambazo majina yake huanza na `test`. Kazi hii inakagua utendaji wa msingi wa kache, kuandika thamani na kuzisoma tena. + +```solidity + for(uint i=1; i<5000; i++) { + cache.cacheWrite(i*i); + } + + for(uint i=1; i<5000; i++) { + assertEq(cache.cacheRead(i), i*i); +``` + +Hivi ndivyo unavyofanya majaribio halisi, ukitumia [kazi za `assert...`](https://getfoundry.sh/reference/forge-std/std-assertions/). Katika kesi hii, tunakagua kuwa thamani tuliyoandika ndiyo tunayoisoma. Tunaweza kupuuza matokeo ya `cache.cacheWrite` kwa sababu tunajua kwamba funguo za kache zinakabidhiwa kwa mpangilio. + +```solidity + } + } // jaribuKache + + + // Hifadhi thamani ile ile mara nyingi kwenye kache, hakikisha ufunguo unabaki + // vile vile + function testRepeatCaching() public { + for(uint i=1; i<100; i++) { + uint _key1 = cache.cacheWrite(i); + uint _key2 = cache.cacheWrite(i); + assertEq(_key1, _key2); + } +``` + +Kwanza tunaandika kila thamani mara mbili kwenye kache na kuhakikisha funguo ni sawa (ikimaanisha uandishi wa pili haukutokea kweli). + +```solidity + for(uint i=1; i<100; i+=3) { + uint _key = cache.cacheWrite(i); + assertEq(_key, i); + } + } // jaribuKacheInayorudiwa +``` + +Kwa nadharia kunaweza kuwa na hitilafu ambayo haiathiri uandishi wa kache unaofuatana. Kwa hivyo hapa tunafanya maandishi kadhaa ambayo hayafuatani na tunaona thamani bado haziandikwi upya. + +```solidity + // Soma uint kutoka kwenye bafa ya kumbukumbu (kuhakikisha tunapata vigezo + // tulivyotuma) + function toUint256(bytes memory _bytes, uint256 _start) internal pure + returns (uint256) +``` + +Soma neno la biti 256 kutoka kwenye bafa ya `bytes memory`. Kazi hii ya matumizi inatuwezesha kuthibitisha kwamba tunapokea matokeo sahihi tunapoendesha wito wa kazi unaotumia kache. + +```solidity + { + require(_bytes.length >= _start + 32, "toUint256_njeYaMipaka"); + uint256 tempUint; + + assembly { + tempUint := mload(add(add(_bytes, 0x20), _start)) + } +``` + +Yul haitumii miundo ya data zaidi ya `uint256`, kwa hivyo unapoelekeza kwenye muundo wa data wa hali ya juu zaidi, kama vile bafa ya kumbukumbu `_bytes`, unapata anwani ya muundo huo. Solidity huhifadhi thamani za `bytes memory` kama neno la baiti 32 ambalo lina urefu, ikifuatiwa na baiti halisi, kwa hivyo ili kupata baiti namba `_start` tunahitaji kukokotoa `_bytes+32+_start`. + +```solidity + + return tempUint; + } // kwaUint256 + + // Saini ya kazi kwa fourParams(), kwa hisani ya + // https://www.4byte.directory/signatures/?bytes4_signature=0x3edc1e6d + bytes4 constant FOUR_PARAMS = 0x3edc1e6d; + + // Thamani za kudumu tu ili kuona tunapata thamani sahihi + uint256 constant VAL_A = 0xDEAD60A7; + uint256 constant VAL_B = 0xBEEF; + uint256 constant VAL_C = 0x600D; + uint256 constant VAL_D = 0x600D60A7; +``` + +Baadhi ya thamani za kudumu tunazohitaji kwa majaribio. + +```solidity + function testReadParam() public { +``` + +Ita `fourParams()`, kazi inayotumia `readParams`, ili kujaribu kama tunaweza kusoma vigezo kwa usahihi. + +```solidity + address _cacheAddr = address(cache); + bool _success; + bytes memory _callInput; + bytes memory _callOutput; +``` + +Hatuwezi kutumia utaratibu wa kawaida wa ABI kuita kazi kwa kutumia kache, kwa hivyo tunahitaji kutumia utaratibu wa kiwango cha chini cha [`
.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html#members-of-addresses). Utaratibu huo unachukua `bytes memory` kama ingizo, na kuirudisha (pamoja na thamani ya Boolean) kama towe. + +```solidity + // Wito wa kwanza, kache haina kitu + _callInput = bytes.concat( + FOUR_PARAMS, +``` + +Ni muhimu kwa mkataba ule ule kuunga mkono kazi zote mbili za kache (kwa wito kutoka kwa miamala moja kwa moja) na kazi zisizo za kache (kwa wito kutoka kwa mikataba-erevu mingine). Ili kufanya hivyo tunahitaji kuendelea kutegemea utaratibu wa Solidity kuita kazi sahihi, badala ya kuweka kila kitu katika [kazi ya `fallback`](https://docs.soliditylang.org/en/v0.8.16/contracts.html#fallback-function). Kufanya hivi hurahisisha sana utangamano. Baiti moja ingetosheleza kutambua kazi katika visa vingi, kwa hivyo tunapoteza baiti tatu (gesi 16\*3=48). Hata hivyo, ninapoandika haya, gesi hizo 48 zinagharimu senti 0.07, ambayo ni gharama nzuri kwa msimbo rahisi na usio na hitilafu nyingi. + +```solidity + // Thamani ya kwanza, iongeze kwenye kache + cache.INTO_CACHE(), + bytes32(VAL_A), +``` + +Thamani ya kwanza: Bendera inayosema ni thamani kamili inayohitaji kuandikwa kwenye kache, ikifuatiwa na baiti 32 za thamani hiyo. Thamani tatu zingine ni sawa, isipokuwa `VAL_B` haiandikwi kwenye kache na `VAL_C` ni kigezo cha tatu na cha nne. + +```solidity + . + . + . + ); + (_success, _callOutput) = _cacheAddr.call(_callInput); +``` + +Hapa ndipo tunapoita mkataba wa `Cache`. + +```solidity + assertEq(_success, true); +``` + +Tunatarajia wito ufanikiwe. + +```solidity + assertEq(cache.cacheRead(1), VAL_A); + assertEq(cache.cacheRead(2), VAL_C); +``` + +Tunaanza na kache tupu na kisha tunaongeza `VAL_A` ikifuatiwa na `VAL_C`. Tungetarajia ya kwanza kuwa na ufunguo 1, na ya pili kuwa na 2. + +``` + assertEq(toUint256(_callOutput,0), VAL_A); + assertEq(toUint256(_callOutput,32), VAL_B); + assertEq(toUint256(_callOutput,64), VAL_C); + assertEq(toUint256(_callOutput,96), VAL_C); +``` + +Towe ni vigezo vinne. Hapa tunathibitisha kuwa ni sahihi. + +```solidity + // Wito wa pili, tunaweza kutumia kache + _callInput = bytes.concat( + FOUR_PARAMS, + + // Thamani ya kwanza kwenye Kache + bytes1(0x01), +``` + +Funguo za kache chini ya 16 ni baiti moja tu. + +```solidity + // Thamani ya pili, usiiongeze kwenye kache + cache.DONT_CACHE(), + bytes32(VAL_B), + + // Thamani ya tatu na ya nne, thamani sawa + bytes1(0x02), + bytes1(0x02) + ); + . + . + . + } // jaribuSomaKigezo +``` + +Majaribio baada ya wito ni sawa na yale ya baada ya wito wa kwanza. + +```solidity + function testEncodeVal() public { +``` + +Kazi hii ni sawa na `testReadParam`, isipokuwa badala ya kuandika vigezo kwa uwazi tunatumia `encodeVal()`. + +```solidity + . + . + . + _callInput = bytes.concat( + FOUR_PARAMS, + cache.encodeVal(VAL_A), + cache.encodeVal(VAL_B), + cache.encodeVal(VAL_C), + cache.encodeVal(VAL_D) + ); + . + . + . + assertEq(_callInput.length, 4+1*4); + } // jaribuSimbaThamani +``` + +Jaribio pekee la ziada katika `testEncodeVal()` ni kuthibitisha kuwa urefu wa `_callInput` ni sahihi. Kwa wito wa kwanza ni 4+33\*4. Kwa wa pili, ambapo kila thamani tayari iko kwenye kache, ni 4+1\*4. + +```solidity + // Jaribu encodeVal wakati ufunguo una zaidi ya baiti moja + // Upeo wa baiti tatu kwa sababu kujaza kache hadi baiti nne huchukua + // muda mrefu sana. + function testEncodeValBig() public { + // Weka idadi ya thamani kwenye kache. + // Ili kurahisisha mambo, tumia ufunguo n kwa thamani n. + for(uint i=1; i<0x1FFF; i++) { + cache.cacheWrite(i); + } +``` + +Kazi ya `testEncodeVal` hapo juu inaandika thamani nne tu kwenye kache, kwa hivyo [sehemu ya kazi inayoshughulikia thamani za baiti nyingi](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol#L144-L171) haikaguliwi. Lakini msimbo huo ni mgumu na rahisi kupata hitilafu. + +Sehemu ya kwanza ya kazi hii ni kitanzi kinachoandika thamani zote kutoka 1 hadi 0x1FFF kwenye kache kwa mpangilio, ili tuweze kusimba thamani hizo na kujua zinakokwenda. + +```solidity + . + . + . + + _callInput = bytes.concat( + FOUR_PARAMS, + cache.encodeVal(0x000F), // Baiti moja 0x0F + cache.encodeVal(0x0010), // Baiti mbili 0x1010 + cache.encodeVal(0x0100), // Baiti mbili 0x1100 + cache.encodeVal(0x1000) // Baiti tatu 0x201000 + ); +``` + +Jaribu thamani za baiti moja, baiti mbili, na baiti tatu. Hatujaribu zaidi ya hapo kwa sababu itachukua muda mrefu sana kuandika maingizo ya kutosha ya steki (angalau 0x10000000, takriban robo bilioni). + +```solidity + . + . + . + . + } // jaribuSimbaThamaniKubwa + + + // Jaribu kinachotokea na bafa ndogo sana tunapata urejeshaji + function testShortCalldata() public { +``` + +Jaribu kinachotokea katika hali isiyo ya kawaida ambapo hakuna vigezo vya kutosha. + +```solidity + . + . + . + (_success, _callOutput) = _cacheAddr.call(_callInput); + assertEq(_success, false); + } // jaribuCalldataFupi +``` + +Kwa kuwa inarejesha, matokeo tunayopaswa kupata ni `false`. + +``` + // Ita kwa funguo za kache ambazo hazipo + function testNoCacheKey() public { + . + . + . + _callInput = bytes.concat( + FOUR_PARAMS, + + // Thamani ya kwanza, iongeze kwenye kache + cache.INTO_CACHE(), + bytes32(VAL_A), + + // Thamani ya pili + bytes1(0x0F), + bytes2(0x1234), + bytes11(0xA10102030405060708090A) + ); +``` + +Kazi hii inapata vigezo vinne halali kabisa, isipokuwa kwamba kache haina kitu kwa hivyo hakuna thamani za kusoma. + +```solidity + . + . + . + // Jaribu kinachotokea na bafa ndefu sana, kila kitu kinafanya kazi vizuri + function testLongCalldata() public { + address _cacheAddr = address(cache); + bool _success; + bytes memory _callInput; + bytes memory _callOutput; + + // Wito wa kwanza, kache haina kitu + _callInput = bytes.concat( + FOUR_PARAMS, + + // Thamani ya kwanza, iongeze kwenye kache + cache.INTO_CACHE(), bytes32(VAL_A), + + // Thamani ya pili, iongeze kwenye kache + cache.INTO_CACHE(), bytes32(VAL_B), + + // Thamani ya tatu, iongeze kwenye kache + cache.INTO_CACHE(), bytes32(VAL_C), + + // Thamani ya nne, iongeze kwenye kache + cache.INTO_CACHE(), bytes32(VAL_D), + + // Na thamani nyingine kwa "bahati njema" + bytes4(0x31112233) + ); +``` + +Kazi hii inatuma thamani tano. Tunajua kwamba thamani ya tano inapuzwa kwa sababu si ingizo halali la kache, ambalo lingesababisha urejeshaji kama lisingejumuishwa. + +```solidity + (_success, _callOutput) = _cacheAddr.call(_callInput); + assertEq(_success, true); + . + . + . + } // jaribuCalldataNdefu + +} // JaribuKache + +``` + +## Programu ya mfano {#a-sample-app} + +Kuandika majaribio katika Solidity ni vizuri sana, lakini mwisho wa siku mfumo mtawanyo wa kimamlaka (dapp) unahitaji kuweza kushughulikia maombi kutoka nje ya chaini ili kuwa na manufaa. Makala haya yanaonyesha jinsi ya kutumia uhifadhi wa kache katika mfumo mtawanyo wa kimamlaka (dapp) na `WORM`, ambayo inasimama kwa "Andika Mara Moja, Soma Mara Nyingi". Ikiwa ufunguo bado haujaandikwa, unaweza kuandika thamani kwake. Ikiwa ufunguo tayari umeandikwa, unapata urejeshaji. + +### Mkataba {#the-contract} + +[Huu ndio mkataba](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/WORM.sol). Mara nyingi inarudia kile ambacho tayari tumefanya na `Cache` na `CacheTest`, kwa hivyo tunashughulikia tu sehemu za kuvutia. + +```solidity +import "./Cache.sol"; + +contract WORM is Cache { +``` + +Njia rahisi zaidi ya kutumia `Cache` ni kuirithi katika mkataba wetu wenyewe. + +```solidity + function writeEntryCached() external { + uint[] memory params = _readParams(2); + writeEntry(params[0], params[1]); + } // andikaIngizoLaKache +``` + +Kazi hii ni sawa na `fourParam` katika `CacheTest` hapo juu. Kwa sababu hatufuati vipimo vya ABI, ni bora kutotangaza vigezo vyovyote kwenye kazi. + +```solidity + // Fanya iwe rahisi kutuita + // Saini ya kazi kwa writeEntryCached(), kwa hisani ya + // https://www.4byte.directory/signatures/?bytes4_signature=0xe4e4f2d3 + bytes4 constant public WRITE_ENTRY_CACHED = 0xe4e4f2d3; +``` + +Msimbo wa nje unaoita `writeEntryCached` utahitaji kujenga calldata mwenyewe, badala ya kutumia `worm.writeEntryCached`, kwa sababu hatufuati vipimo vya ABI. Kuwa na thamani hii ya kudumu hufanya iwe rahisi kuiandika. + +Kumbuka kwamba ingawa tunafafanua `WRITE_ENTRY_CACHED` kama kigezo cha hali, ili kuisoma kutoka nje ni muhimu kutumia kazi ya kupata, `worm.WRITE_ENTRY_CACHED()`. + +```solidity + function readEntry(uint key) public view + returns (uint _value, address _writtenBy, uint _writtenAtBlock) +``` + +Kazi ya kusoma ni `view`, kwa hivyo haihitaji muamala na haina gharama ya gesi. Kwa hivyo, hakuna faida ya kutumia kache kwa kigezo. Kwa kazi za kutazama ni bora kutumia utaratibu wa kawaida ambao ni rahisi zaidi. + +### Msimbo wa majaribio {#the-testing-code} + +[Huu ni msimbo wa majaribio wa mkataba](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/WORM.t.sol). Tena, hebu tuangalie tu yale ya kuvutia. + +```solidity + function testWReadWrite() public { + worm.writeEntry(0xDEAD, 0x60A7); + + vm.expectRevert(bytes("ingizo tayari limeandikwa")); + worm.writeEntry(0xDEAD, 0xBEEF); +``` + +[Hivi (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert) ndivyo tunavyobainisha katika jaribio la Foundry kwamba wito unaofuata unapaswa kushindwa, na sababu iliyoripotiwa ya kushindwa. Hii inatumika tunapotumia sintaksia `.`()` badala ya kujenga calldata na kuita mkataba kwa kutumia kiolesura cha kiwango cha chini (`.call()\`, n.k.). + +```solidity + function testReadWriteCached() public { + uint cacheGoat = worm.cacheWrite(0x60A7); +``` + +Hapa tunatumia ukweli kwamba `cacheWrite` inarudisha ufunguo wa kache. Hiki si kitu tunachotarajia kutumia katika uzalishaji, kwa sababu `cacheWrite` inabadilisha hali, na kwa hivyo inaweza kuitwa tu wakati wa muamala. Miamala haina thamani za kurudisha, ikiwa ina matokeo, matokeo hayo yanapaswa kutolewa kama matukio. Kwa hivyo, thamani ya kurudisha ya `cacheWrite` inapatikana tu kutoka kwa msimbo wa onchain, na msimbo wa onchain hauhitaji uhifadhi wa kache wa vigezo. + +```solidity + (_success,) = address(worm).call(_callInput); +``` + +Hivi ndivyo tunavyoiambia Solidity kwamba ingawa `.call()` ina thamani mbili za kurudisha, tunajali tu ya kwanza. + +```solidity + (_success,) = address(worm).call(_callInput); + assertEq(_success, false); +``` + +Kwa kuwa tunatumia kazi ya kiwango cha chini `
.call()`, hatuwezi kutumia `vm.expectRevert()` na tunapaswa kuangalia thamani ya mafanikio ya boolean tunayopata kutoka kwa wito. + +```solidity + event EntryWritten(uint indexed key, uint indexed value); + + . + . + . + + _callInput = bytes.concat( + worm.WRITE_ENTRY_CACHED(), worm.encodeVal(a), worm.encodeVal(b)); + vm.expectEmit(true, true, false, false); + emit EntryWritten(a, b); + (_success,) = address(worm).call(_callInput); +``` + +Hii ndiyo njia tunayotumia kuthibitisha kwamba msimbo [unatoa tukio kwa usahihi](https://getfoundry.sh/reference/cheatcodes/expect-emit/) katika Foundry. + +### Mteja {#the-client} + +Jambo moja usilopata na majaribio ya Solidity ni msimbo wa JavaScript unaoweza kunakili na kubandika kwenye programu yako mwenyewe. Ili kuandika msimbo huo, nilipeleka WORM kwenye [Optimism Goerli](https://community.optimism.io/docs/useful-tools/networks/#optimism-goerli), testnet mpya ya [Optimism](https://www.optimism.io/). Inapatikana kwenye anwani [`0xd34335b1d818cee54e3323d3246bd31d94e6a78a`](https://goerli-optimism.etherscan.io/address/0xd34335b1d818cee54e3323d3246bd31d94e6a78a). + +[Unaweza kuona msimbo wa JavaScript wa mteja hapa](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/javascript/index.js). Ili kuitumia: + +1. Fanya nakala ya hifadhi ya git: + + ```sh + git clone https://github.com/qbzzt/20220915-all-you-can-cache.git + ``` + +2. Sakinisha vifurushi vinavyohitajika: + + ```sh + cd javascript + yarn + ``` + +3. Nakili faili ya usanidi: + + ```sh + cp .env.example .env + ``` + +4. Hariri `.env` kwa usanidi wako: + + | Kigezo | Thamani | + | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | MNEMONIC | Neno la siri la akaunti ambayo ina ETH ya kutosha kulipia muamala. [Unaweza kupata ETH ya bure kwa mtandao wa Optimism Goerli hapa](https://optimismfaucet.xyz/). | + | OPTIMISM_GOERLI_URL | URL ya Optimism Goerli. Sehemu ya umma, `https://goerli.optimism.io`, ina kikomo cha viwango lakini inatosha kwa tunachohitaji hapa | + +5. Endesha `index.js`. + + ```sh + node index.js + ``` + + Programu hii ya mfano kwanza inaandika ingizo kwa WORM, ikionyesha calldata na kiungo cha muamala kwenye Etherscan. Kisha inasoma tena ingizo hilo, na kuonyesha ufunguo inaotumia na thamani katika ingizo (thamani, nambari ya bloku, na mwandishi). + +Sehemu kubwa ya mteja ni JavaScript ya kawaida ya Dapp. Kwa hivyo tena tutapitia tu sehemu za kuvutia. + +```javascript +. +. +. +const main = async () => { + const func = await worm.WRITE_ENTRY_CACHED() + + // Unahitaji ufunguo mpya kila wakati + const key = await worm.encodeVal(Number(new Date())) +``` + +Sehemu fulani inaweza kuandikwa mara moja tu, kwa hivyo tunatumia muhuri wa muda kuhakikisha haturudii kutumia sehemu. + +```javascript +const val = await worm.encodeVal("0x600D") + +// Andika ingizo +const calldata = func + key.slice(2) + val.slice(2) +``` + +Ethers inatarajia data ya wito iwe mfuatano wa heksi, `0x` ikifuatiwa na idadi shufwa ya tarakimu za heksadesimali. Kwa kuwa `key` na `val` zote zinaanza na `0x`, tunahitaji kuondoa vichwa hivyo. + +```javascript +const tx = await worm.populateTransaction.writeEntryCached() +tx.data = calldata + +sentTx = await wallet.sendTransaction(tx) +``` + +Kama ilivyo kwa msimbo wa majaribio wa Solidity, hatuwezi kuita kazi iliyohifadhiwa kwenye kache kawaida. Badala yake, tunahitaji kutumia utaratibu wa kiwango cha chini. + +```javascript + . + . + . + // Soma ingizo lililoandikwa sasa hivi + const realKey = '0x' + key.slice(4) // ondoa bendera ya FF + const entryRead = await worm.readEntry(realKey) + . + . + . +``` + +Kwa kusoma maingizo tunaweza kutumia utaratibu wa kawaida. Hakuna haja ya kutumia uhifadhi wa kache wa vigezo na kazi za `view`. + +## Hitimisho {#conclusion} + +Msimbo katika makala haya ni uthibitisho wa dhana, lengo ni kurahisisha wazo kueleweka. Kwa mfumo ulio tayari kwa uzalishaji unaweza kutaka kutekeleza utendaji fulani wa ziada: + +- Shughulikia thamani ambazo si `uint256`. Kwa mfano, mifuatano. +- Badala ya kache ya kimataifa, labda uwe na uhusiano kati ya watumiaji na kache. Watumiaji tofauti hutumia thamani tofauti. +- Thamani zinazotumiwa kwa anwani ni tofauti na zile zinazotumiwa kwa madhumuni mengine. Inaweza kuwa na maana kuwa na kache tofauti kwa ajili ya anwani tu. +- Hivi sasa, funguo za kache ziko kwenye algorithm ya "wa kwanza kuja, ufunguo mdogo zaidi". Thamani kumi na sita za kwanza zinaweza kutumwa kama baiti moja. Thamani 4080 zinazofuata zinaweza kutumwa kama baiti mbili. Thamani takriban milioni zinazofuata ni baiti tatu, n.k. Mfumo wa uzalishaji unapaswa kuweka vihesabu vya matumizi kwenye maingizo ya kache na kuzipanga upya ili thamani kumi na sita _za kawaida zaidi_ ziwe baiti moja, thamani 4080 zinazofuata za kawaida zaidi ziwe baiti mbili, n.k. + + Hata hivyo, hiyo ni operesheni inayoweza kuwa hatari. Fikiria mfuatano ufuatao wa matukio: + + 1. Noam Naive anaita `encodeVal` ili kusimba anwani anayotaka kutuma tokeni. Anwani hiyo ni mojawapo ya za kwanza kutumika kwenye programu, kwa hivyo thamani iliyosimbwa ni 0x06. Hii ni kazi ya `view`, si muamala, kwa hivyo ni kati ya Noam na nodi anayoitumia, na hakuna mwingine anayejua kuihusu + + 2. Owen Mmiliki anaendesha operesheni ya kupanga upya kache. Watu wachache sana hutumia anwani hiyo, kwa hivyo sasa imesimbwa kama 0x201122. Thamani tofauti, 1018, imekabidhiwa 0x06. + + 3. Noam Naive anatuma tokeni zake kwa 0x06. Zinakwenda kwenye anwani `0x0000000000000000000000000de0b6b3a7640000`, na kwa kuwa hakuna anayejua ufunguo binafsi wa anwani hiyo, zimekwama tu hapo. Noam _hana furaha_. + + Kuna njia za kutatua tatizo hili, na tatizo linalohusiana na miamala ambayo iko kwenye mempool wakati wa kupanga upya kache, lakini ni lazima ufahamu. + +Nilionyesha uhifadhi wa kache hapa na Optimism, kwa sababu mimi ni mfanyakazi wa Optimism na hii ndiyo unda-mpya ninaifahamu vizuri zaidi. Lakini inapaswa kufanya kazi na unda-mpya yoyote inayotoza gharama ndogo kwa usindikaji wa ndani, ili kwa kulinganisha uandishi wa data ya muamala kwa L1 uwe gharama kuu. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). + diff --git a/public/content/translations/sw/developers/tutorials/app-plasma/index.md b/public/content/translations/sw/developers/tutorials/app-plasma/index.md new file mode 100644 index 00000000000..a29d9db6fda --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/app-plasma/index.md @@ -0,0 +1,1255 @@ +--- +title: Andika Njozi maalum ya programu ambayo inahifadhi faragha +description: Katika mafunzo haya, tunaunda benki ya nusu-siri kwa ajili ya amana. Benki ni sehemu ya kati; inajua salio la kila mtumiaji. Hata hivyo, taarifa hii haihifadhiwi kwenye mnyororo. Badala yake, benki hutuma hashi ya hali. Kila mara muamala unapofanyika, benki hutuma hashi mpya, pamoja na uthibitisho wa zero-knowledge kwamba ina muamala uliosainiwa ambao hubadilisha hali ya hashi kuwa mpya. Baada ya kusoma mafunzo haya, utaelewa sio tu jinsi ya kutumia ithibati za zero-knowledge, lakini pia kwa nini unazitumia na jinsi ya kufanya hivyo kwa usalama. +author: Ori Pomerantz +tags: [ "zero-knowledge", "seva", "offchain", "faragha" ] +skill: advanced +lang: sw +published: 2025-10-15 +--- + +## Utangulizi {#introduction} + +Tofauti na [unda-mpya](/developers/docs/scaling/zk-rollups/), [njozi](/developers/docs/scaling/plasma) hutumia Mtandao Mkuu wa Ethereum kwa uadilifu, lakini si upatikanaji. Katika makala haya, tunaandika programu inayofanya kazi kama njozi, huku Ethereum ikihakikisha uadilifu (hakuna mabadiliko yasiyoidhinishwa) lakini si upatikanaji (sehemu ya kati inaweza kushuka na kuzima mfumo mzima). + +Programu tunayoandika hapa ni benki inayohifadhi faragha. Anwani tofauti zina akaunti zenye salio, na zinaweza kutuma pesa (ETH) kwa akaunti zingine. Benki hutuma hashi za hali (akaunti na salio zake) na miamala, lakini huweka salio halisi nje ya mnyororo ambapo zinaweza kubaki za faragha. + +## Ubunifu {#design} + +Huu si mfumo ulio tayari kwa uzalishaji, bali ni zana ya kufundishia. Kwa hivyo, imeandikwa kwa mawazo kadhaa ya kurahisisha. + +- Dimbwi la akaunti zisizobadilika. Kuna idadi maalum ya akaunti, na kila akaunti ni ya anwani iliyoamuliwa mapema. Hii hufanya mfumo kuwa rahisi zaidi kwa sababu ni vigumu kushughulikia miundo ya data ya ukubwa tofauti katika ithibati za zero-knowledge. Kwa mfumo ulio tayari kwa uzalishaji, tunaweza kutumia [mzizi wa Merkle](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) kama hashi ya hali na kutoa ithibati za Merkle kwa salio zinazohitajika. + +- Hifadhi ya kumbukumbu. Kwenye mfumo wa uzalishaji, tunahitaji kuandika salio zote za akaunti kwenye diski ili kuzihifadhi iwapo kutakuwa na uanzishaji upya. Hapa, ni sawa ikiwa habari itapotea tu. + +- Uhamisho pekee. Mfumo wa uzalishaji utahitaji njia ya kuweka mali kwenye benki na kuzitoa. Lakini madhumuni hapa ni kuonyesha tu dhana, kwa hivyo benki hii imepunguzwa kwa uhamisho. + +### Ithibati za zero-knowledge {#zero-knowledge-proofs} + +Katika kiwango cha msingi, uthibitisho wa zero-knowledge unaonyesha kwamba mthibitishaji anajua data fulani, _Dataprivate_ kiasi kwamba kuna uhusiano _Relationship_ kati ya data fulani ya umma, _Datapublic_, na _Dataprivate_. Mthibitishaji anajua _Uhusiano_ na _Dataumma_. + +Ili kuhifadhi faragha, tunahitaji hali na miamala iwe ya faragha. Lakini ili kuhakikisha uadilifu, tunahitaji [hashi ya kriptografia](https://en.wikipedia.org/wiki/Cryptographic_hash_function) ya hali iwe ya umma. Ili kuthibitisha kwa watu wanaowasilisha miamala kwamba miamala hiyo ilifanyika kweli, tunahitaji pia kuchapisha hashi za miamala. + +Katika hali nyingi, _Dataprivate_ ni ingizo kwa programu ya uthibitisho wa zero-knowledge, na _Datapublic_ ni tokeo. + +Sehemu hizi katika _Dataprivate_: + +- _Halin_, hali ya zamani +- _Halin+1_, hali mpya +- _Muamala_, muamala unaobadilika kutoka hali ya zamani hadi hali mpya. Muamala huu unahitaji kujumuisha sehemu hizi: + - _Anwani lengwa_ inayopokea uhamisho + - _Kiasi_ kinachohamishwa + - _Nonce_ ili kuhakikisha kila muamala unaweza kuchakatwa mara moja tu. + Anwani ya chanzo haihitaji kuwa katika muamala, kwa sababu inaweza kupatikana kutoka kwa saini. +- _Sahihi_, sahihi iliyoidhinishwa kutekeleza muamala. Katika kesi yetu, anwani pekee iliyoidhinishwa kutekeleza muamala ni anwani ya chanzo. Kwa sababu mfumo wetu wa zero-knowledge hufanya kazi jinsi unavyofanya, tunahitaji pia ufunguo wa umma wa akaunti, pamoja na saini ya Ethereum. + +Hizi ni sehemu katika _Datapublic_: + +- _Hashi(Halin)_ hashi ya hali ya zamani +- _Hashi(Halin+1)_ hashi ya hali mpya +- _Hashi(Muamala)_ hashi ya muamala unaobadilisha hali kutoka _Halin_ hadi _Halin+1_. + +Uhusiano huangalia hali kadhaa: + +- Hashi za umma ni hashi sahihi za sehemu za faragha. +- Muamala, unapotumika kwa hali ya zamani, husababisha hali mpya. +- Sahihi hutoka kwa anwani chanzo ya muamala. + +Kwa sababu ya sifa za vipengele vya hashi ya kriptografia, kuthibitisha masharti haya kunatosha kuhakikisha uadilifu. + +### Miundo ya data {#data-structures} + +Muundo mkuu wa data ni hali inayoshikiliwa na seva. Kwa kila akaunti, seva hufuatilia salio la akaunti na [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce), inayotumika kuzuia [mashambulizi ya kurudia](https://en.wikipedia.org/wiki/Replay_attack). + +### Vipengele {#components} + +Mfumo huu unahitaji vipengele viwili: + +- _Seva_ inayopokea miamala, kuichakata, na kuchapisha hashi kwenye mnyororo pamoja na ithibati za zero-knowledge. +- _Mkataba-erevu_ unaohifadhi hashi na kuthibitisha ithibati za zero-knowledge ili kuhakikisha mabadiliko ya hali ni halali. + +### Mtiririko wa data na udhibiti {#flows} + +Hizi ni njia ambazo vipengele mbalimbali huwasiliana ili kuhamisha kutoka akaunti moja hadi nyingine. + +1. Kivinjari cha wavuti huwasilisha muamala uliosainiwa unaoomba uhamisho kutoka kwa akaunti ya mtia sahihi hadi akaunti tofauti. + +2. Seva inathibitisha kuwa muamala ni halali: + + - Mtia sahihi ana akaunti katika benki yenye salio la kutosha. + - Mpokeaji ana akaunti katika benki. + +3. Seva hukokotoa hali mpya kwa kutoa kiasi kilichohamishwa kutoka kwa salio la mtia sahihi na kukiongeza kwenye salio la mpokeaji. + +4. Seva hukokotoa uthibitisho wa zero-knowledge kwamba mabadiliko ya hali ni halali. + +5. Seva huwasilisha muamala kwa Ethereum unaojumuisha: + + - Hashi mpya ya hali + - Hashi ya muamala (ili mtumaji wa muamala aweze kujua kuwa imechakatwa) + - Uthibitisho wa zero-knowledge unaothibitisha mpito kwa hali mpya ni halali + +6. Mkataba-erevu huthibitisha uthibitisho wa zero-knowledge. + +7. Ikiwa uthibitisho wa zero-knowledge umekubaliwa, mkataba-erevu hufanya vitendo hivi: + - Sasisha hashi ya hali ya sasa hadi hashi mpya ya hali + - Toa ingizo la kumbukumbu na hashi mpya ya hali na hashi ya muamala + +### Zana {#tools} + +Kwa msimbo wa upande wa mteja, tutatumia [Vite](https://vite.dev/), [React](https://react.dev/), [Viem](https://viem.sh/), na [Wagmi](https://wagmi.sh/). Hizi ni zana za kawaida za tasnia; ikiwa huzifahamu, unaweza kutumia [mafunzo haya](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/). + +Sehemu kubwa ya seva imeandikwa kwa JavaScript kwa kutumia [Nodi](https://nodejs.org/en). Sehemu ya zero-knowledge imeandikwa katika [Noir](https://noir-lang.org/). Tunahitaji toleo la `1.0.0-beta.10`, kwa hivyo baada ya [kusakinisha Noir kama ilivyoelekezwa](https://noir-lang.org/docs/getting_started/quick_start), endesha: + +``` +noirup -v 1.0.0-beta.10 +``` + +Mnyororo wa bloku tunaotumia ni `anvil`, mnyororo wa bloku wa majaribio wa ndani ambao ni sehemu ya [Foundry](https://getfoundry.sh/introduction/installation). + +## Utekelezaji {#implementation} + +Kwa sababu huu ni mfumo changamano, tutautekeleza kwa hatua. + +### Hatua ya 1 - Zero knowledge ya mikono {#stage-1} + +Kwa hatua ya kwanza, tutasaini muamala katika kivinjari na kisha kutoa habari kwa mikono kwa uthibitisho wa zero-knowledge. Msimbo wa zero-knowledge unatarajia kupata taarifa hiyo katika `server/noir/Prover.toml` (imeandikwa [hapa](https://noir-lang.org/docs/getting_started/project_breakdown#provertoml-1)). + +Ili kuiona ikifanya kazi: + +1. Hakikisha umesakinisha [Nodi](https://nodejs.org/en/download) na [Noir](https://noir-lang.org/install). Ikiwezekana, zisakishe kwenye mfumo wa UNIX kama vile macOS, Linux, au [WSL](https://learn.microsoft.com/en-us/windows/wsl/install). + +2. Pakua msimbo wa hatua ya 1 na uanze seva ya wavuti ili kuhudumia msimbo wa mteja. + + ```sh + git clone https://github.com/qbzzt/250911-zk-bank.git -b 01-manual-zk + cd 250911-zk-bank + cd client + npm install + npm run dev + ``` + + Sababu unahitaji seva ya wavuti hapa ni kwamba, ili kuzuia aina fulani za ulaghai, mikoba mingi (kama vile MetaMask) haikubali faili zinazotolewa moja kwa moja kutoka kwenye diski + +3. Fungua kivinjari na mkoba. + +4. Katika mkoba, weka nenosiri jipya. Kumbuka kuwa hii itafuta nenosiri lako lililopo, kwa hivyo _hakikisha una nakala rudufu_. + + Nenosiri ni `test test test test test test test test test test test junk`, nenosiri chaguo-msingi la majaribio la anvil. + +5. Vinjari [msimbo wa upande wa mteja](http://localhost:5173/). + +6. Unganisha kwenye mkoba na uchague akaunti yako lengwa na kiasi. + +7. Bofya **Saini** na utie sahihi kwenye muamala. + +8. Chini ya kichwa cha **Prover.toml**, utapata maandishi. Badilisha `server/noir/Prover.toml` na maandishi hayo. + +9. Tekeleza uthibitisho wa zero-knowledge. + + ```sh + cd ../server/noir + nargo execute + ``` + + Tokeo linapaswa kuwa sawa na + + ``` + ori@CryptoDocGuy:~/noir/250911-zk-bank/server/noir$ nargo execute + + [zkBank] Circuit witness successfully solved + [zkBank] Witness saved to target/zkBank.gz + [zkBank] Circuit output: (0x199aa62af8c1d562a6ec96e66347bf3240ab2afb5d022c895e6bf6a5e617167b, 0x0cfc0a67cb7308e4e9b254026b54204e34f6c8b041be207e64c5db77d95dd82d, 0x450cf9da6e180d6159290554ae3d8787, 0x6d8bc5a15b9037e52fb59b6b98722a85) + ``` + +10. Linganisha thamani mbili za mwisho na hashi unayoona kwenye kivinjari cha wavuti ili kuona ikiwa ujumbe umehashiwa ipasavyo. + +#### `server/noir/Prover.toml` {#server-noir-prover-toml} + +[Faili hii](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Prover.toml) inaonyesha umbizo la maelezo linalotarajiwa na Noir. + +```toml +message="send 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 500 finney (milliEth) 0 " +``` + +Ujumbe uko katika umbizo la maandishi, ambalo hurahisisha mtumiaji kuelewa (jambo ambalo ni muhimu wakati wa kusaini) na kwa msimbo wa Noir kuchanganua. Kiasi hicho kimetajwa katika finneys ili kuwezesha uhamisho wa sehemu kwa upande mmoja, na kusomeka kwa urahisi kwa upande mwingine. Nambari ya mwisho ni [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce). + +Kamba ina urefu wa herufi 100. Ithibati za zero-knowledge hazishughulikii vizuri data ya ukubwa unaobadilika, kwa hivyo mara nyingi ni muhimu kuongeza data. + +```toml +pubKeyX=["0x83",...,"0x75"] +pubKeyY=["0x35",...,"0xa5"] +signature=["0xb1",...,"0x0d"] +``` + +Vigezo hivi vitatu ni safu za baiti za ukubwa usiobadilika. + +```toml +[[accounts]] +address="0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" +balance=100_000 +nonce=0 + +[[accounts]] +address="0x70997970C51812dc3A010C7d01b50e0d17dc79C8" +balance=100_000 +nonce=0 +``` + +Hii ndiyo njia ya kubainisha safu ya miundo. Kwa kila ingizo, tunabainisha anwani, salio (katika milliETH a.k.a. [finney](https://cryptovalleyjournal.com/glossary/finney/)), na thamani inayofuata ya nonce. + +#### `client/src/Transfer.tsx` {#client-src-transfer-tsx} + +[Faili hii](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/client/src/Transfer.tsx) hutekeleza uchakataji wa upande wa mteja na kutoa faili ya `server/noir/Prover.toml` (ile inayojumuisha vigezo vya zero-knowledge). + +Hapa kuna maelezo ya sehemu za kuvutia zaidi. + +```tsx +export default attrs => { +``` + +Kazi hii huunda kijenzi cha React cha `Transfer`, ambacho faili zingine zinaweza kuagiza. + +```tsx + const accounts = [ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", + "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", + ] +``` + +Hizi ni anwani za akaunti, anwani zilizoundwa na `test ... test junk` passphrase. Ikiwa unataka kutumia anwani zako mwenyewe, rekebisha tu ufafanuzi huu. + +```tsx + const account = useAccount() + const wallet = createWalletClient({ + transport: custom(window.ethereum!) + }) +``` + +[Kulabu hizi za Wagmi](https://wagmi.sh/react/api/hooks) hutuwezesha kufikia maktaba ya [viem](https://viem.sh/) na mkoba. + +```tsx + const message = `send ${toAccount} ${ethAmount*1000} finney (milliEth) ${nonce}`.padEnd(100, " ") +``` + +Huu ni ujumbe, uliowekwa nafasi. Kila wakati moja ya vigezo vya [`useState`](https://react.dev/reference/react/useState) inapobadilika, kijenzi huchorwa upya na `message` husasishwa. + +```tsx + const sign = async () => { +``` + +Kazi hii inaitwa mtumiaji anapobofya kitufe cha **Saini**. Ujumbe husasishwa kiotomatiki, lakini saini inahitaji idhini ya mtumiaji katika mkoba, na hatutaki kuiomba isipokuwa inahitajika. + +```tsx + const signature = await wallet.signMessage({ + account: fromAccount, + message, + }) +``` + +Uliza mkoba [kusaini ujumbe](https://viem.sh/docs/accounts/local/signMessage). + +```tsx + const hash = hashMessage(message) +``` + +Pata hashi ya ujumbe. Inasaidia kumpa mtumiaji kwa ajili ya utatuzi (wa msimbo wa Noir). + +```tsx + const pubKey = await recoverPublicKey({ + hash, + signature + }) +``` + +[Pata ufunguo wa umma](https://viem.sh/docs/utilities/recoverPublicKey). Hii inahitajika kwa kazi ya [Noir `ecrecover`](https://github.com/colinnielsen/ecrecover-noir). + +```tsx + setSignature(signature) + setHash(hash) + setPubKey(pubKey) +``` + +Weka vigezo vya hali. Kufanya hivi huchora upya kijenzi (baada ya kazi ya `sign` kuondoka) na huonyesha mtumiaji thamani zilizosasishwa. + +```tsx + let proverToml = ` +``` + +Maandishi ya `Prover.toml`. + +```tsx +message="${message}" + +pubKeyX=${hexToArray(pubKey.slice(4,4+2*32))} +pubKeyY=${hexToArray(pubKey.slice(4+2*32))} +``` + +Viem inatupatia ufunguo wa umma kama kamba ya heksadesimali ya baiti 65. Baiti ya kwanza ni `0x04`, alama ya toleo. Hii inafuatiwa na baiti 32 za `x` ya ufunguo wa umma na kisha baiti 32 za `y` ya ufunguo wa umma. + +Hata hivyo, Noir inatarajia kupata taarifa hii kama safu mbili za baiti, moja kwa `x` na moja kwa `y`. Ni rahisi zaidi kuichanganua hapa kwa mteja kuliko kama sehemu ya uthibitisho wa zero-knowledge. + +Kumbuka kuwa hii ni mazoezi mazuri katika zero-knowledge kwa ujumla. Msimbo ndani ya uthibitisho wa zero-knowledge ni ghali, kwa hivyo uchakataji wowote unaoweza kufanywa nje ya uthibitisho wa zero-knowledge _unapaswa_ kufanywa nje ya uthibitisho wa zero-knowledge. + +```tsx +signature=${hexToArray(signature.slice(2,-2))} +``` + +Sahihi pia hutolewa kama kamba ya heksadesimali ya baiti 65. Hata hivyo, baiti ya mwisho ni muhimu tu ili kupata ufunguo wa umma. Kwa kuwa ufunguo wa umma utakuwa tayari umetolewa kwa msimbo wa Noir, hatuitaji ili kuthibitisha saini, na msimbo wa Noir hauihitaji. + +```tsx +${accounts.map(accountInProverToml).reduce((a,b) => a+b, "")} +` +``` + +Toa akaunti. + +```tsx + setProverToml(proverToml) + } + + return ( + <> +

Uhamisho

+``` + +Hii ni umbizo la HTML (kwa usahihi zaidi, [JSX](https://react.dev/learn/writing-markup-with-jsx)) la kijenzi. + +#### `server/noir/src/main.nr` {#server-noir-src-main-nr} + +[Faili hii](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/src/main.nr) ni msimbo halisi wa zero-knowledge. + +``` +use std::hash::pedersen_hash; +``` + +[Hashi ya Pedersen](https://rya-sge.github.io/access-denied/2024/05/07/pedersen-hash-function/) hutolewa na [maktaba ya kawaida ya Noir](https://noir-lang.org/docs/noir/standard_library/cryptographic_primitives/hashes#pedersen_hash). Ithibati za zero-knowledge mara nyingi hutumia kipengele hiki cha hashi. Ni rahisi zaidi kukokotoa ndani ya [mizunguko ya hesabu](https://rareskills.io/post/arithmetic-circuit) ikilinganishwa na vipengele vya kawaida vya hashi. + +``` +use keccak256::keccak256; +use dep::ecrecover; +``` + +Kazi hizi mbili ni maktaba za nje, zilizofafanuliwa katika [`Nargo.toml`](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Nargo.toml). Ni hasa kile wanachoitwa, kazi ambayo inakokotoa [hashi ya keccak256](https://emn178.github.io/online-tools/keccak_256.html) na kazi ambayo inathibitisha saini za Ethereum na kurejesha anwani ya Ethereum ya mtia saini. + +``` +global ACCOUNT_NUMBER : u32 = 5; +``` + +Noir imechochewa na [Rust](https://www.rust-lang.org/). Vigezo, kwa chaguo-msingi, ni vidumu. Hivi ndivyo tunavyofafanua vidumu vya usanidi wa kimataifa. Hasa, `ACCOUNT_NUMBER` ni idadi ya akaunti tunazohifadhi. + +Aina za data zilizoitwa `u` ni idadi hiyo ya biti, zisizo na saini. Aina pekee zinazotumika ni `u8`, `u16`, `u32`, `u64`, na `u128`. + +``` +global FLAT_ACCOUNT_FIELDS : u32 = 2; +``` + +Kigezo hiki kinatumika kwa hashi ya Pedersen ya akaunti, kama ilivyoelezwa hapo chini. + +``` +global MESSAGE_LENGTH : u32 = 100; +``` + +Kama ilivyoelezwa hapo juu, urefu wa ujumbe umewekwa. Imebainishwa hapa. + +``` +global ASCII_MESSAGE_LENGTH : [u8; 3] = [0x31, 0x30, 0x30]; +global HASH_BUFFER_SIZE : u32 = 26+3+MESSAGE_LENGTH; +``` + +[Sahihi za EIP-191](https://eips.ethereum.org/EIPS/eip-191) zinahitaji bafa yenye kiambishi awali cha baiti 26, ikifuatiwa na urefu wa ujumbe katika ASCII, na hatimaye ujumbe wenyewe. + +``` +struct Account { + balance: u128, + address: Field, + nonce: u32, +} +``` + +Taarifa tunayohifadhi kuhusu akaunti. [`Field`](https://noir-lang.org/docs/noir/concepts/data_types/fields) ni nambari, kwa kawaida hadi biti 253, ambayo inaweza kutumika moja kwa moja katika [mzunguko wa hesabu](https://rareskills.io/post/arithmetic-circuit) unaotekeleza uthibitisho wa zero-knowledge. Hapa tunatumia `Field` kuhifadhi anwani ya Ethereum ya biti 160. + +``` +struct TransferTxn { + from: Field, + to: Field, + amount: u128, + nonce: u32 +} +``` + +Taarifa tunayohifadhi kwa muamala wa uhamisho. + +``` +fn flatten_account(account: Account) -> [Field; FLAT_ACCOUNT_FIELDS] { +``` + +Ufafanuzi wa kazi. Kigezo ni habari ya `Account`. Matokeo ni safu ya vigezo vya `Field`, ambavyo urefu wake ni `FLAT_ACCOUNT_FIELDS` + +``` + let flat = [ + account.address, + ((account.balance << 32) + account.nonce.into()).into(), + ]; +``` + +Thamani ya kwanza katika safu ni anwani ya akaunti. Ya pili inajumuisha salio na nonce. Miito ya `.into()` hubadilisha nambari kuwa aina ya data inayohitajika. `account.nonce` ni thamani ya `u32`, lakini ili kuiongeza kwa `account.balance << 32`, thamani ya `u128`, inahitaji kuwa `u128`. Hiyo ndiyo `.into()` ya kwanza. Ya pili inabadilisha matokeo ya `u128` kuwa `Sehemu` ili itoshee kwenye safu. + +``` + flat +} +``` + +Katika Noir, kazi zinaweza kurudisha thamani mwishoni tu (hakuna kurudi mapema). Ili kubainisha thamani ya kurudi, unaitathmini kabla tu ya mabano ya kufunga ya kazi. + +``` +fn flatten_accounts(accounts: [Account; ACCOUNT_NUMBER]) -> [Field; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER] { +``` + +Kazi hii hugeuza safu ya akaunti kuwa safu ya `Sehemu`, ambayo inaweza kutumika kama ingizo kwa Hashi ya Petersen. + +``` + let mut flat: [Field; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER] = [0; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER]; +``` + +Hivi ndivyo unavyobainisha kigezo kinachoweza kubadilishwa, yaani, _sio_ kidumu. Vigezo katika Noir lazima viwe na thamani kila wakati, kwa hivyo tunaanzisha kigezo hiki kwa sifuri zote. + +``` + for i in 0..ACCOUNT_NUMBER { +``` + +Hii ni kitanzi cha `for`. Kumbuka kuwa mipaka ni vidumu. Vitanzi vya Noir lazima mipaka yao ijulikane wakati wa kukusanya. Sababu ni kwamba mizunguko ya hesabu haitumii udhibiti wa mtiririko. Wakati wa kuchakata kitanzi cha `for`, mkusanyaji huweka tu msimbo ndani yake mara nyingi, moja kwa kila mzunguko. + +``` + let fields = flatten_account(accounts[i]); + for j in 0..FLAT_ACCOUNT_FIELDS { + flat[i*FLAT_ACCOUNT_FIELDS + j] = fields[j]; + } + } + + flat +} + +fn hash_accounts(accounts: [Account; ACCOUNT_NUMBER]) -> Field { + pedersen_hash(flatten_accounts(accounts)) +} +``` + +Mwishowe, tumefika kwenye kazi ambayo inahashi safu ya akaunti. + +``` +fn find_account(accounts: [Account; ACCOUNT_NUMBER], address: Field) -> u32 { + let mut account : u32 = ACCOUNT_NUMBER; + + for i in 0..ACCOUNT_NUMBER { + if accounts[i].address == address { + account = i; + } + } +``` + +Kazi hii hupata akaunti yenye anwani maalum. Kazi hii haingekuwa na ufanisi katika msimbo wa kawaida kwa sababu inarudia akaunti zote, hata baada ya kupata anwani. + +Hata hivyo, katika ithibati za zero-knowledge, hakuna udhibiti wa mtiririko. Ikiwa tutahitaji kuangalia hali, lazima tuiangalie kila wakati. + +Jambo kama hilo hufanyika kwa taarifa za `if`. Taarifa ya `if` katika kitanzi hapo juu inatafsiriwa kuwa taarifa hizi za hisabati. + +_conditionresult = accounts[i].address == address_ // moja ikiwa ni sawa, sifuri vinginevyo + +_accountnew = conditionresult\*i + (1-conditionresult)\*accountold_ + +```rust + assert (account < ACCOUNT_NUMBER, f"{address} does not have an account"); + + account +} +``` + +Kazi ya [`assert`](https://noir-lang.org/docs/dev/noir/concepts/assert) husababisha uthibitisho wa zero-knowledge kuharibika ikiwa madai ni ya uongo. Katika kesi hii, ikiwa hatuwezi kupata akaunti yenye anwani husika. Ili kuripoti anwani, tunatumia [kamba ya umbizo](https://noir-lang.org/docs/noir/concepts/data_types/strings#format-strings). + +```rust +fn apply_transfer_txn(accounts: [Account; ACCOUNT_NUMBER], txn: TransferTxn) -> [Account; ACCOUNT_NUMBER] { +``` + +Kazi hii hutumia muamala wa uhamisho na kurudisha safu mpya ya akaunti. + +```rust + let from = find_account(accounts, txn.from); + let to = find_account(accounts, txn.to); + + let (txnFrom, txnAmount, txnNonce, accountNonce) = + (txn.from, txn.amount, txn.nonce, accounts[from].nonce); +``` + +Hatuwezi kufikia vipengele vya muundo ndani ya kamba ya umbizo katika Noir, kwa hivyo tunaunda nakala inayoweza kutumika. + +```rust + assert (accounts[from].balance >= txn.amount, + f"{txnFrom} does not have {txnAmount} finney"); + + assert (accounts[from].nonce == txn.nonce, + f"Transaction has nonce {txnNonce}, but the account is expected to use {accountNonce}"); +``` + +Hizi ni hali mbili ambazo zinaweza kufanya muamala kuwa batili. + +```rust + let mut newAccounts = accounts; + + newAccounts[from].balance -= txn.amount; + newAccounts[from].nonce += 1; + newAccounts[to].balance += txn.amount; + + newAccounts +} +``` + +Unda safu mpya ya akaunti na kisha uirudishe. + +```rust +fn readAddress(messageBytes: [u8; MESSAGE_LENGTH]) -> Field +``` + +Kazi hii inasoma anwani kutoka kwa ujumbe. + +```rust +{ + let mut result : Field = 0; + + for i in 7..47 { +``` + +Anwani daima ni baiti 20 (a.k.a. Tarakimu 40 za heksadesimali) kwa urefu, na huanza kwa herufi #7. + +```rust + result *= 0x10; + if messageBytes[i] >= 48 & messageBytes[i] <= 57 { // 0-9 + result += (messageBytes[i]-48).into(); + } + if messageBytes[i] >= 65 & messageBytes[i] <= 70 { // A-F + result += (messageBytes[i]-65+10).into() + } + if messageBytes[i] >= 97 & messageBytes[i] <= 102 { // a-f + result += (messageBytes[i]-97+10).into() + } + } + + result +} + +fn readAmountAndNonce(messageBytes: [u8; MESSAGE_LENGTH]) -> (u128, u32) +``` + +Soma kiasi na nonce kutoka kwa ujumbe. + +```rust +{ + let mut amount : u128 = 0; + let mut nonce: u32 = 0; + let mut stillReadingAmount: bool = true; + let mut lookingForNonce: bool = false; + let mut stillReadingNonce: bool = false; +``` + +Katika ujumbe, nambari ya kwanza baada ya anwani ni kiasi cha finney (a.k.a. elfu ya ETH) ya kuhamisha. Nambari ya pili ni nonce. Maandishi yoyote kati yao yanapuuzwa. + +```rust + for i in 48..MESSAGE_LENGTH { + if messageBytes[i] >= 48 & messageBytes[i] <= 57 { // 0-9 + let digit = (messageBytes[i]-48); + + if stillReadingAmount { + amount = amount*10 + digit.into(); + } + + if lookingForNonce { // We just found it + stillReadingNonce = true; + lookingForNonce = false; + } + + if stillReadingNonce { + nonce = nonce*10 + digit.into(); + } + } else { + if stillReadingAmount { + stillReadingAmount = false; + lookingForNonce = true; + } + if stillReadingNonce { + stillReadingNonce = false; + } + } + } + + (amount, nonce) +} +``` + +Kurudisha [tuple](https://noir-lang.org/docs/noir/concepts/data_types/tuples) ni njia ya Noir ya kurudisha thamani nyingi kutoka kwa kazi. + +```rust +fn readTransferTxn(message: str) -> TransferTxn +{ + let mut txn: TransferTxn = TransferTxn { from: 0, to: 0, amount:0, nonce:0 }; + let messageBytes = message.as_bytes(); + + txn.to = readAddress(messageBytes); + let (amount, nonce) = readAmountAndNonce(messageBytes); + txn.amount = amount; + txn.nonce = nonce; + + txn +} +``` + +Kazi hii hubadilisha ujumbe kuwa baiti, kisha hubadilisha kiasi kuwa `TransferTxn`. + +```rust +// The equivalent to Viem's hashMessage +// https://viem.sh/docs/utilities/hashMessage#hashmessage +fn hashMessage(message: str) -> [u8;32] { +``` + +Tuliweza kutumia Hashi ya Pedersen kwa akaunti kwa sababu zimehashiwa tu ndani ya uthibitisho wa zero-knowledge. Hata hivyo, katika msimbo huu tunahitaji kuangalia saini ya ujumbe, ambayo hutolewa na kivinjari. Kwa hilo, tunahitaji kufuata umbizo la kusaini la Ethereum katika [EIP 191](https://eips.ethereum.org/EIPS/eip-191). Hii ina maana tunahitaji kuunda bafa iliyounganishwa yenye kiambishi awali cha kawaida, urefu wa ujumbe katika ASCII, na ujumbe wenyewe, na kutumia keccak256 ya kawaida ya Ethereum kuihashi. + +```rust + // ASCII prefix + let prefix_bytes = [ + 0x19, // \x19 + 0x45, // 'E' + 0x74, // 't' + 0x68, // 'h' + 0x65, // 'e' + 0x72, // 'r' + 0x65, // 'e' + 0x75, // 'u' + 0x6D, // 'm' + 0x20, // ' ' + 0x53, // 'S' + 0x69, // 'i' + 0x67, // 'g' + 0x6E, // 'n' + 0x65, // 'e' + 0x64, // 'd' + 0x20, // ' ' + 0x4D, // 'M' + 0x65, // 'e' + 0x73, // 's' + 0x73, // 's' + 0x61, // 'a' + 0x67, // 'g' + 0x65, // 'e' + 0x3A, // ':' + 0x0A // '\n' + ]; +``` + +Ili kuepuka hali ambapo programu inamwomba mtumiaji kusaini ujumbe ambao unaweza kutumika kama muamala au kwa madhumuni mengine, EIP 191 inabainisha kuwa ujumbe wote uliosainiwa huanza na herufi 0x19 (sio herufi halali ya ASCII) ikifuatiwa na `Ethereum Signed Message:` na mstari mpya. + +```rust + let mut buffer: [u8; HASH_BUFFER_SIZE] = [0u8; HASH_BUFFER_SIZE]; + for i in 0..26 { + buffer[i] = prefix_bytes[i]; + } + + let messageBytes : [u8; MESSAGE_LENGTH] = message.as_bytes(); + + if MESSAGE_LENGTH <= 9 { + for i in 0..1 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+1] = messageBytes[i]; + } + } + + if MESSAGE_LENGTH >= 10 & MESSAGE_LENGTH <= 99 { + for i in 0..2 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+2] = messageBytes[i]; + } + } + + if MESSAGE_LENGTH >= 100 { + for i in 0..3 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+3] = messageBytes[i]; + } + } + + assert(MESSAGE_LENGTH < 1000, "Messages whose length is over three digits are not supported"); +``` + +Shughulikia urefu wa ujumbe hadi 999 na ushindwe ikiwa ni mkubwa zaidi. Niliongeza msimbo huu, ingawa urefu wa ujumbe ni wa kudumu, kwa sababu inafanya iwe rahisi kuubadilisha. Kwenye mfumo wa uzalishaji, labda ungechukulia tu `MESSAGE_LENGTH` haibadiliki kwa ajili ya utendaji bora. + +```rust + keccak256::keccak256(buffer, HASH_BUFFER_SIZE) +} +``` + +Tumia kazi ya kawaida ya Ethereum `keccak256`. + +```rust +fn signatureToAddressAndHash( + message: str, + pubKeyX: [u8; 32], + pubKeyY: [u8; 32], + signature: [u8; 64] + ) -> (Field, Field, Field) // address, first 16 bytes of hash, last 16 bytes of hash +{ +``` + +Kazi hii inathibitisha saini, ambayo inahitaji hashi ya ujumbe. Kisha inatupatia anwani iliyoisaini na hashi ya ujumbe. Hashi ya ujumbe hutolewa katika thamani mbili za `Sehemu` kwa sababu hizo ni rahisi kutumia katika programu iliyobaki kuliko safu ya baiti. + +Tunahitaji kutumia thamani mbili za `Sehemu` kwa sababu hesabu za sehemu hufanywa [modulo](https://en.wikipedia.org/wiki/Modulo) nambari kubwa, lakini nambari hiyo kwa kawaida ni chini ya biti 256 (vinginevyo ingekuwa vigumu kufanya hesabu hizo katika EVM). + +```rust + let hash = hashMessage(message); + + let mut (hash1, hash2) = (0,0); + + for i in 0..16 { + hash1 = hash1*256 + hash[31-i].into(); + hash2 = hash2*256 + hash[15-i].into(); + } +``` + +Bainisha `hash1` na `hash2` kama vigezo vinavyoweza kubadilishwa, na andika hashi ndani yao baiti kwa baiti. + +```rust + ( + ecrecover::ecrecover(pubKeyX, pubKeyY, signature, hash), +``` + +Hii ni sawa na [`ecrecover` ya Solidity](https://docs.soliditylang.org/en/v0.8.30/cheatsheet.html#mathematical-and-cryptographic-functions), na tofauti mbili muhimu: + +- Ikiwa saini si halali, simu inashindwa `kudai` na programu inasitishwa. +- Ingawa ufunguo wa umma unaweza kupatikana kutoka kwa saini na hashi, huu ni uchakataji unaoweza kufanywa nje na, kwa hivyo, haifai kufanya ndani ya uthibitisho wa zero-knowledge. Mtu akijaribu kutudanganya hapa, uthibitishaji wa saini utashindwa. + +```rust + hash1, + hash2 + ) +} + +fn main( + accounts: [Account; ACCOUNT_NUMBER], + message: str, + pubKeyX: [u8; 32], + pubKeyY: [u8; 32], + signature: [u8; 64], + ) -> pub ( + Field, // Hash of old accounts array + Field, // Hash of new accounts array + Field, // First 16 bytes of message hash + Field, // Last 16 bytes of message hash + ) +``` + +Mwishowe, tunafikia kazi ya `main`. Tunahitaji kuthibitisha kwamba tuna muamala unaobadilisha kihalali hashi ya akaunti kutoka thamani ya zamani hadi mpya. Tunahitaji pia kuthibitisha kwamba ina hashi hii maalum ya muamala ili mtu aliyeituma ajue muamala wake umeshachakatwa. + +```rust +{ + let mut txn = readTransferTxn(message); +``` + +Tunahitaji `txn` iweze kubadilika kwa sababu hatusomi anwani ya kutoka kwenye ujumbe, tunaisoma kutoka kwenye saini. + +```rust + let (fromAddress, txnHash1, txnHash2) = signatureToAddressAndHash( + message, + pubKeyX, + pubKeyY, + signature); + + txn.from = fromAddress; + + let newAccounts = apply_transfer_txn(accounts, txn); + + ( + hash_accounts(accounts), + hash_accounts(newAccounts), + txnHash1, + txnHash2 + ) +} +``` + +### Hatua ya 2 - Kuongeza seva {#stage-2} + +Katika hatua ya pili, tunaongeza seva inayopokea na kutekeleza miamala ya uhamisho kutoka kwa kivinjari. + +Ili kuiona ikifanya kazi: + +1. Simamisha Vite ikiwa inaendeshwa. + +2. Pakua tawi linalojumuisha seva na uhakikishe una moduli zote muhimu. + + ```sh + git checkout 02-add-server + cd client + npm install + cd ../server + npm install + ``` + + Hakuna haja ya kukusanya msimbo wa Noir, ni msimbo uleule uliotumia kwa hatua ya 1. + +3. Anzisha seva. + + ```sh + npm run start + ``` + +4. Katika dirisha tofauti la mstari wa amri, endesha Vite ili kuhudumia msimbo wa kivinjari. + + ```sh + cd client + npm run dev + ``` + +5. Vinjari msimbo wa mteja kwenye [http://localhost:5173](http://localhost:5173) + +6. Kabla ya kutoa muamala, unahitaji kujua nonce, pamoja na kiasi unachoweza kutuma. Ili kupata habari hii, bofya **Sasisha data ya akaunti** na utie sahihi kwenye ujumbe. + + Tuna mtanziko hapa. Kwa upande mmoja, hatutaki kusaini ujumbe unaoweza kutumiwa tena ([shambulio la kurudia](https://en.wikipedia.org/wiki/Replay_attack)), ndiyo sababu tunataka nonce kwanza. Hata hivyo, bado hatuna nonce. Suluhisho ni kuchagua nonce ambayo inaweza kutumika mara moja tu na ambayo tayari tunayo pande zote mbili, kama vile wakati wa sasa. + + Tatizo na suluhisho hili ni kwamba wakati huenda usisawazishwe kikamilifu. Kwa hivyo badala yake, tunasaini thamani inayobadilika kila dakika. Hii inamaanisha kuwa dirisha letu la hatari kwa mashambulizi ya kurudia ni dakika moja tu. Kwa kuzingatia kwamba katika uzalishaji ombi lililosainiwa litalindwa na TLS, na kwamba upande mwingine wa handaki---seva---inaweza tayari kufichua salio na nonce (inabidi iwajue ili kufanya kazi), hii ni hatari inayokubalika. + +7. Mara kivinjari kinapopata salio na nonce, kinaonyesha fomu ya uhamisho. Chagua anwani lengwa na kiasi na ubofye **Hamisha**. Saini ombi hili. + +8. Ili kuona uhamisho, ama **Sasisha data ya akaunti** au angalia kwenye dirisha ambapo unaendesha seva. Seva huweka kumbukumbu ya hali kila inapobadilika. + + ``` + ori@CryptoDocGuy:~/x/250911-zk-bank/server$ npm run start + + > server@1.0.0 start + > node --experimental-json-modules index.mjs + + Listening on port 3000 + Txn send 0x90F79bf6EB2c4f870365E785982E1f101E93b906 36000 finney (milliEth) 0 processed + New state: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 has 64000 (1) + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 has 100000 (0) + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC has 100000 (0) + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 has 136000 (0) + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 has 100000 (0) + Txn send 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 7200 finney (milliEth) 1 processed + New state: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 has 56800 (2) + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 has 107200 (0) + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC has 100000 (0) + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 has 136000 (0) + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 has 100000 (0) + Txn send 0x90F79bf6EB2c4f870365E785982E1f101E93b906 3000 finney (milliEth) 2 processed + New state: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 has 53800 (3) + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 has 107200 (0) + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC has 100000 (0) + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 has 139000 (0) + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 has 100000 (0) + ``` + +#### `server/index.mjs` {#server-index-mjs-1} + +[Faili hii](https://github.com/qbzzt/250911-zk-bank/blob/02-add-server/server/index.mjs) ina mchakato wa seva, na inaingiliana na msimbo wa Noir kwenye [`main.nr`](https://github.com/qbzzt/250911-zk-bank/blob/02-add-server/server/noir/src/main.nr). Hapa kuna maelezo ya sehemu za kuvutia. + +```js +import { Noir } from '@noir-lang/noir_js' +``` + +Maktaba ya [noir.js](https://www.npmjs.com/package/@noir-lang/noir_js) inaunganisha kati ya msimbo wa JavaScript na msimbo wa Noir. + +```js +const circuit = JSON.parse(await fs.readFile("./noir/target/zkBank.json")) +const noir = new Noir(circuit) +``` + +Pakia mzunguko wa hesabu---programu ya Noir iliyokusanywa tuliyoiumba katika hatua ya awali---na andaa kuitekeleza. + +```js +// We only provide account information in return to a signed request +const accountInformation = async signature => { + const fromAddress = await recoverAddress({ + hash: hashMessage("Get account data " + Math.floor((new Date().getTime())/60000)), + signature + }) +``` + +Ili kutoa maelezo ya akaunti, tunahitaji tu saini. Sababu ni kwamba tayari tunajua ujumbe utakuwa nini, na kwa hiyo hashi ya ujumbe. + +```js +const processMessage = async (message, signature) => { +``` + +Chakata ujumbe na utekeleze muamala unaouweka. + +```js + // Get the public key + const pubKey = await recoverPublicKey({ + hash, + signature + }) +``` + +Sasa kwa kuwa tunaendesha JavaScript kwenye seva, tunaweza kupata ufunguo wa umma hapo badala ya kwa mteja. + +```js + let noirResult + try { + noirResult = await noir.execute({ + message, + signature: signature.slice(2,-2).match(/.{2}/g).map(x => `0x${x}`), + pubKeyX, + pubKeyY, + accounts: Accounts + }) +``` + +`noir.execute` huendesha programu ya Noir. Vigezo ni sawa na vile vilivyotolewa katika [`Prover.toml`](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Prover.toml). Kumbuka kuwa thamani ndefu hutolewa kama safu ya kamba za heksadesimali (`["0x60", "0xA7"]`), sio kama thamani moja ya heksadesimali (`0x60A7`), jinsi Viem inavyofanya. + +```js + } catch (err) { + console.log(`Noir error: ${err}`) + throw Error("Invalid transaction, not processed") + } +``` + +Ikiwa kuna hitilafu, ikamate na kisha upeleke toleo lililorahisishwa kwa mteja. + +```js + Accounts[fromAccountNumber].nonce++ + Accounts[fromAccountNumber].balance -= amount + Accounts[toAccountNumber].balance += amount +``` + +Tekeleza muamala. Tayari tulifanya hivyo katika msimbo wa Noir, lakini ni rahisi kuifanya tena hapa badala ya kutoa matokeo kutoka hapo. + +```js +let Accounts = [ + { + address: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + balance: 5000, + nonce: 0, + }, +``` + +Muundo wa awali wa `Akaunti`. + +### Hatua ya 3 - Mikataba-erevu ya Ethereum {#stage-3} + +1. Simamisha michakato ya seva na mteja. + +2. Pakua tawi lenye mikataba-erevu na uhakikishe una moduli zote muhimu. + + ```sh + git checkout 03-smart-contracts + cd client + npm install + cd ../server + npm install + ``` + +3. Endesha `anvil` katika dirisha tofauti la mstari wa amri. + +4. Tengeneza ufunguo wa uthibitishaji na kithibitishaji cha solidity, kisha nakili msimbo wa kithibitishaji kwenye mradi wa Solidity. + + ```sh + cd noir + bb write_vk -b ./target/zkBank.json -o ./target --oracle_hash keccak + bb write_solidity_verifier -k ./target/vk -o ./target/Verifier.sol + cp target/Verifier.sol ../../smart-contracts/src + ``` + +5. Nenda kwenye mikataba-erevu na weka vigezo vya mazingira ili kutumia mnyororo wa bloku wa `anvil`. + + ```sh + cd ../../smart-contracts + export ETH_RPC_URL=http://localhost:8545 + ETH_PRIVATE_KEY=ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + ``` + +6. Pakia `Verifier.sol` na uhifadhi anwani katika kigezo cha mazingira. + + ```sh + VERIFIER_ADDRESS=`forge create src/Verifier.sol:HonkVerifier --private-key $ETH_PRIVATE_KEY --optimize --broadcast | awk '/Deployed to:/ {print $3}'` + echo $VERIFIER_ADDRESS + ``` + +7. Pakia mkataba wa `ZkBank`. + + ```sh + ZKBANK_ADDRESS=`forge create ZkBank --private-key $ETH_PRIVATE_KEY --broadcast --constructor-args $VERIFIER_ADDRESS 0x199aa62af8c1d562a6ec96e66347bf3240ab2afb5d022c895e6bf6a5e617167b | awk '/Deployed to:/ {print $3}'` + echo $ZKBANK_ADDRESS + ``` + + Thamani ya `0x199..67b` ni hashi ya Pederson ya hali ya awali ya `Accounts`. Ukirekebisha hali hii ya awali katika `server/index.mjs`, unaweza kuendesha muamala ili kuona hashi ya awali iliyoripotiwa na uthibitisho wa zero-knowledge. + +8. Endesha seva. + + ```sh + cd ../server + npm run start + ``` + +9. Endesha mteja katika dirisha tofauti la mstari wa amri. + + ```sh + cd client + npm run dev + ``` + +10. Endesha miamala kadhaa. + +11. Ili kuthibitisha kuwa hali imebadilika kwenye mnyororo, anzisha upya mchakato wa seva. Angalia kuwa `ZkBank` haikubali tena miamala, kwa sababu thamani ya asili ya hashi katika miamala inatofautiana na thamani ya hashi iliyohifadhiwa kwenye mnyororo. + + Hili ni aina ya hitilafu inayotarajiwa. + + ``` + ori@CryptoDocGuy:~/x/250911-zk-bank/server$ npm run start + + > server@1.0.0 start + > node --experimental-json-modules index.mjs + + Listening on port 3000 + Verification error: ContractFunctionExecutionError: The contract function "processTransaction" reverted with the following reason: + Wrong old state hash + + Contract Call: + address: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 + function: processTransaction(bytes _proof, bytes32[] _publicInputs) + args: (0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf00000000000000000000000000000000000000000000000b75c020998797da7800000000000000000000000000000000000000000000000 + ``` + +#### `server/index.mjs` {#server-index-mjs-2} + +Mabadiliko katika faili hili yanahusiana zaidi na kuunda uthibitisho halisi na kuiwasilisha kwenye mnyororo. + +```js +import { exec } from 'child_process' +import util from 'util' + +const execPromise = util.promisify(exec) +``` + +Tunahitaji kutumia [kifurushi cha Barretenberg](https://github.com/AztecProtocol/aztec-packages/tree/next/barretenberg) ili kuunda uthibitisho halisi wa kutuma kwenye mnyororo. Tunaweza kutumia kifurushi hiki ama kwa kuendesha kiolesura cha mstari wa amri (`bb`) au kwa kutumia [maktaba ya JavaScript, `bb.js`](https://www.npmjs.com/package/@aztec/bb.js). Maktaba ya JavaScript ni polepole zaidi kuliko kuendesha msimbo asilia, kwa hivyo tunatumia [`exec`](https://nodejs.org/api/child_process.html#child_processexeccommand-options-callback) hapa kutumia mstari wa amri. + +Kumbuka kwamba ukiamua kutumia `bb.js`, unahitaji kutumia toleo linaloendana na toleo la Noir unalotumia. Wakati wa kuandika, toleo la sasa la Noir (1.0.0-beta.11) linatumia toleo la `bb.js` 0.87. + +```js +const zkBankAddress = process.env.ZKBANK_ADDRESS || "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" +``` + +Anwani hapa ni ile unayopata unapoanza na `anvil` safi na kufuata maelekezo hapo juu. + +```js +const walletClient = createWalletClient({ + chain: anvil, + transport: http(), + account: privateKeyToAccount("0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6") +}) +``` + +Ufunguo huu wa faragha ni mojawapo ya akaunti chaguo-msingi zilizofadhiliwa awali katika `anvil`. + +```js +const generateProof = async (witness, fileID) => { +``` + +Tengeneza uthibitisho kwa kutumia `bb` inayoweza kutekelezwa. + +```js + const fname = `witness-${fileID}.gz` + await fs.writeFile(fname, witness) +``` + +Andika shahidi kwenye faili. + +```js + await execPromise(`bb prove -b ./noir/target/zkBank.json -w ${fname} -o ${fileID} --oracle_hash keccak --output_format fields`) +``` + +Unda uthibitisho halisi. Hatua hii pia huunda faili na vigezo vya umma, lakini hatuhitaji hiyo. Tayari tulipata vigezo hivyo kutoka kwa `noir.execute`. + +```js + const proof = "0x" + JSON.parse(await fs.readFile(`./${fileID}/proof_fields.json`)).reduce((a,b) => a+b, "").replace(/0x/g, "") +``` + +Uthibitisho ni safu ya JSON ya thamani za `Sehemu`, kila moja ikiwakilishwa na thamani ya heksadesimali. Hata hivyo, tunahitaji kuituma katika muamala kama thamani moja ya `baiti`, ambayo Viem inaiwakilisha kwa kamba kubwa ya heksadesimali. Hapa tunabadilisha umbizo kwa kuunganisha thamani zote, kuondoa `0x` zote, na kisha kuongeza moja mwishoni. + +```js + await execPromise(`rm -r ${fname} ${fileID}`) + + return proof +} +``` + +Safisha na urudishe uthibitisho. + +```js +const processMessage = async (message, signature) => { + . + . + . + + const publicFields = noirResult.returnValue.map(x=>'0x' + x.slice(2).padStart(64, "0")) +``` + +Sehemu za umma zinahitaji kuwa safu ya thamani za baiti 32. Hata hivyo, kwa kuwa tulihitaji kugawanya hashi ya muamala kati ya thamani mbili za `Sehemu`, inaonekana kama thamani ya baiti 16. Hapa tunaongeza sifuri ili Viem ielewe kuwa ni baiti 32 kweli. + +```js + const proof = await generateProof(noirResult.witness, `${fromAddress}-${nonce}`) +``` + +Kila anwani hutumia kila nonce mara moja tu ili tuweze kutumia mchanganyiko wa `fromAddress` na `nonce` kama kitambulisho cha kipekee kwa faili ya shahidi na saraka ya tokeo. + +```js + try { + await zkBank.write.processTransaction([ + proof, publicFields]) + } catch (err) { + console.log(`Verification error: ${err}`) + throw Error("Can't verify the transaction onchain") + } + . + . + . +} +``` + +Tuma muamala kwenye mnyororo. + +#### `smart-contracts/src/ZkBank.sol` {#smart-contracts-src-zkbank-sol} + +Huu ni msimbo wa kwenye mnyororo unaopokea muamala. + +```solidity +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.21; + +import {HonkVerifier} from "./Verifier.sol"; + +contract ZkBank { + HonkVerifier immutable myVerifier; + bytes32 currentStateHash; + + constructor(address _verifierAddress, bytes32 _initialStateHash) { + currentStateHash = _initialStateHash; + myVerifier = HonkVerifier(_verifierAddress); + } +``` + +Msimbo wa kwenye mnyororo unahitaji kufuatilia vigezo viwili: kithibitishaji (mkataba tofauti ulioundwa na `nargo`) na hashi ya hali ya sasa. + +```solidity + event TransactionProcessed( + bytes32 indexed transactionHash, + bytes32 oldStateHash, + bytes32 newStateHash + ); +``` + +Kila hali inapobadilika, tunatoa tukio la `TransactionProcessed`. + +```solidity + function processTransaction( + bytes calldata _proof, + bytes32[] calldata _publicFields + ) public { +``` + +Kazi hii inachakata miamala. Inapata uthibitisho (kama `baiti`) na pembejeo za umma (kama safu ya `bytes32`), katika umbizo ambalo kithibitishaji kinahitaji (ili kupunguza uchakataji wa kwenye mnyororo na hivyo gharama za gesi). + +```solidity + require(_publicInputs[0] == currentStateHash, + "Wrong old state hash"); +``` + +Uthibitisho wa zero-knowledge unahitaji kuwa muamala unabadilika kutoka kwa hashi yetu ya sasa hadi mpya. + +```solidity + myVerifier.verify(_proof, _publicFields); +``` + +Ita mkataba wa kithibitishaji ili kuthibitisha uthibitisho wa zero-knowledge. Hatua hii inarudisha nyuma muamala ikiwa uthibitisho wa zero-knowledge si sahihi. + +```solidity + currentStateHash = _publicFields[1]; + + emit TransactionProcessed( + _publicFields[2]<<128 | _publicFields[3], + _publicFields[0], + _publicFields[1] + ); + } +} +``` + +Ikiwa kila kitu kiko sawa, sasisha hashi ya hali kwa thamani mpya na utoe tukio la `TransactionProcessed`. + +## Matumizi mabaya na sehemu ya kati {#abuses} + +Usalama wa habari una sifa tatu: + +- _Usiri_, watumiaji hawawezi kusoma habari wasizoruhusiwa kusoma. +- _Uadilifu_, habari haiwezi kubadilishwa isipokuwa na watumiaji walioidhinishwa kwa njia iliyoidhinishwa. +- _Upatikanaji_, watumiaji walioidhinishwa wanaweza kutumia mfumo. + +Kwenye mfumo huu, uadilifu hutolewa kupitia ithibati za zero-knowledge. Upatikanaji ni vigumu zaidi kuhakikisha, na usiri hauwezekani, kwa sababu benki inapaswa kujua salio la kila akaunti na miamala yote. Hakuna njia ya kuzuia chombo ambacho kina habari kushiriki habari hiyo. + +Inaweza kuwezekana kuunda benki ya siri kweli kwa kutumia [anwani za siri](https://vitalik.eth.limo/general/2023/01/20/stealth.html), lakini hilo liko nje ya upeo wa makala haya. + +### Taarifa za uongo {#false-info} + +Njia moja ambayo seva inaweza kukiuka uadilifu ni kutoa habari za uongo wakati [data inapoombwa](https://github.com/qbzzt/250911-zk-bank/blob/03-smart-contracts/server/index.mjs#L278-L291). + +Ili kutatua hili, tunaweza kuandika programu ya pili ya Noir inayopokea akaunti kama pembejeo la faragha na anwani ambayo habari inaombwa kama pembejeo la umma. Tokeo ni salio na nonce ya anwani hiyo, na hashi ya akaunti. + +Bila shaka, uthibitisho huu hauwezi kuthibitishwa kwenye mnyororo, kwa sababu hatutaki kuchapisha nonces na salio kwenye mnyororo. Hata hivyo, inaweza kuthibitishwa na msimbo wa mteja unaoendeshwa kwenye kivinjari. + +### Miamala ya kulazimishwa {#forced-txns} + +Utaratibu wa kawaida wa kuhakikisha upatikanaji na kuzuia udhibiti kwenye L2 ni [miamala ya kulazimishwa](https://docs.optimism.io/stack/transactions/forced-transaction). Lakini miamala ya kulazimishwa haichanganyiki na ithibati za zero-knowledge. Seva ndicho chombo pekee kinachoweza kuthibitisha miamala. + +Tunaweza kurekebisha `smart-contracts/src/ZkBank.sol` ili kukubali miamala ya kulazimishwa na kuzuia seva kubadilisha hali hadi itakapochakatwa. Hata hivyo, hii inatuweka wazi kwa shambulio rahisi la kunyimwa huduma. Je, ikiwa muamala wa kulazimishwa si halali na kwa hivyo hauwezekani kuchakatwa? + +Suluhisho ni kuwa na uthibitisho wa zero-knowledge kwamba muamala wa kulazimishwa si halali. Hii inatoa seva chaguzi tatu: + +- Chakata muamala wa kulazimishwa, ukitoa uthibitisho wa zero-knowledge kwamba umeshachakatwa na hashi mpya ya hali. +- Kataa muamala wa kulazimishwa, na utoe uthibitisho wa zero-knowledge kwa mkataba kwamba muamala si halali (anwani isiyojulikana, nonce mbaya, au salio lisilotosha). +- Puuza muamala wa kulazimishwa. Hakuna njia ya kulazimisha seva kuchakata muamala, lakini inamaanisha mfumo mzima haupatikani. + +#### Dhamana za upatikanaji {#avail-bonds} + +Katika utekelezaji wa maisha halisi, labda kungekuwa na aina fulani ya motisha ya faida kwa kuweka seva ikiendeshwa. Tunaweza kuimarisha motisha huu kwa kuwa na seva inayoweka dhamana ya upatikanaji ambayo mtu yeyote anaweza kuichoma ikiwa muamala wa kulazimishwa hauchakatwi ndani ya kipindi fulani. + +### Msimbo mbaya wa Noir {#bad-noir-code} + +Kwa kawaida, ili kuwafanya watu waamini mkataba-erevu tunapakia msimbo chanzo kwenye [kichunguzi cha bloku](https://eth.blockscout.com/address/0x7D16d2c4e96BCFC8f815E15b771aC847EcbDB48b?tab=contract). Hata hivyo, katika kesi ya ithibati za zero-knowledge, hiyo haitoshi. + +`Verifier.sol` ina ufunguo wa uthibitishaji, ambao ni kazi ya programu ya Noir. Hata hivyo, ufunguo huo hautuambii programu ya Noir ilikuwa nini. Ili kuwa na suluhisho la kuaminika, unahitaji kupakia programu ya Noir (na toleo lililoiumba). Vinginevyo, ithibati za zero-knowledge zinaweza kuakisi programu tofauti, moja yenye mlango wa nyuma. + +Hadi wachunguzi wa bloku waanze kuturuhusu kupakia na kuthibitisha programu za Noir, unapaswa kufanya hivyo mwenyewe (ikiwezekana kwa [IPFS](/developers/tutorials/ipfs-decentralized-ui/)). Kisha watumiaji wa hali ya juu wataweza kupakua msimbo chanzo, kuukusanya wenyewe, kuunda `Verifier.sol`, na kuthibitisha kuwa inafanana na ile iliyo kwenye mnyororo. + +## Hitimisho {#conclusion} + +Programu za aina ya Njozi zinahitaji sehemu ya kati kama hifadhi ya habari. Hii inafungua udhaifu unaowezekana lakini, kwa kurudi, inaturuhusu kuhifadhi faragha kwa njia zisizopatikana kwenye mnyororo wa bloku wenyewe. Kwa ithibati za zero-knowledge tunaweza kuhakikisha uadilifu na ikiwezekana kuifanya iwe na faida kiuchumi kwa yeyote anayeendesha sehemu ya kati ili kudumisha upatikanaji. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). + +## Shukrani {#acknowledgements} + +- Josh Crites alisoma rasimu ya makala haya na kunisaidia na suala gumu la Noir. + +Makosa yoyote yaliyobaki ni jukumu langu. diff --git a/public/content/translations/sw/developers/tutorials/calling-a-smart-contract-from-javascript/index.md b/public/content/translations/sw/developers/tutorials/calling-a-smart-contract-from-javascript/index.md new file mode 100644 index 00000000000..55f5744a5a5 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/calling-a-smart-contract-from-javascript/index.md @@ -0,0 +1,131 @@ +--- +title: Kuita mkataba-erevu kutoka kwa JavaScript +description: Jinsi ya kuita utendakazi wa mkataba-erevu kutoka kwa JavaScript kwa kutumia mfano wa tokeni ya Dai +author: jdourlens +tags: [ "miamala", "frontend", "JavaScript", "web3.js" ] +skill: beginner +lang: sw +published: 2020-04-19 +source: EthereumDev +sourceUrl: https://ethereumdev.io/calling-a-smart-contract-from-javascript/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +Katika mafunzo haya tutaona jinsi ya kuita utendakazi wa [mkataba-erevu](/developers/docs/smart-contracts/) kutoka kwa JavaScript. Kwanza ni kusoma hali ya mkataba-erevu (k.m., salio la mwenye ERC20), kisha tutarekebisha hali ya mnyororo wa bloku kwa kufanya uhamisho wa tokeni. Unapaswa kuwa tayari unafahamu kuhusu [kuweka mazingira ya JS ili kuingiliana na mnyororo wa bloku](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/). + +Kwa mfano huu tutacheza na tokeni ya DAI, kwa madhumuni ya majaribio tutagawa mnyororo wa bloku kwa kutumia ganache-cli na kufungua anwani ambayo tayari ina DAI nyingi: + +```bash +ganache-cli -f https://mainnet.infura.io/v3/[UFUNGUO WAKO WA INFURA] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81 +``` + +Ili kuingiliana na mkataba-erevu tutahitaji anwani yake na ABI: + +```js +const ERC20TransferABI = [ + { + 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: "balanceOf", + outputs: [ + { + name: "balance", + type: "uint256", + }, + ], + payable: false, + stateMutability: "view", + type: "function", + }, +] + +const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f" +``` + +Kwa mradi huu, tuliondoa ABI kamili ya ERC20 ili kuweka tu utendakazi wa `balanceOf` na `transfer` lakini unaweza kupata [ABI kamili ya ERC20 hapa](https://ethereumdev.io/abi-for-erc20-contract-on-ethereum/). + +Kisha tunahitaji kuanzisha mkataba wetu-erevu: + +```js +const web3 = new Web3("http://localhost:8545") + +const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS) +``` + +Pia tutaweka anwani mbili: + +- anayepokea uhamisho na +- ambayo tayari tumeifungua ambayo itatuma: + +```js +const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81" +const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +``` + +Katika sehemu inayofuata tutaita utendakazi wa `balanceOf` ili kupata kiasi cha sasa cha tokeni ambazo anwani zote mbili zinashikilia. + +## Wito: Kusoma thamani kutoka kwa mkataba-erevu {#call-reading-value-from-a-smart-contract} + +Mfano wa kwanza utaita mbinu ya "kudumu" na kutekeleza mbinu yake ya mkataba-erevu katika EVM bila kutuma muamala wowote. Kwa hili tutasoma salio la ERC20 la anwani. [Soma makala yetu kuhusu tokeni za ERC20](/developers/tutorials/understand-the-erc-20-token-smart-contract/). + +Unaweza kufikia mbinu za mkataba-erevu ulioanzishwa ambao umetoa ABI yake kama ifuatavyo: `yourContract.methods.methodname`. Kwa kutumia utendakazi wa `call` utapokea matokeo ya kutekeleza utendakazi. + +```js +daiToken.methods.balanceOf(senderAddress).call(function (err, res) { + if (err) { + console.log("Kosa limetokea", err) + return + } + console.log("Salio ni: ", res) +}) +``` + +Kumbuka kuwa DAI ERC20 ina desimali 18, kumaanisha unahitaji kuondoa sufuri 18 ili kupata kiasi sahihi. `uint256` hurejeshwa kama mifuatano kwa kuwa JavaScript haishughulikii thamani kubwa za nambari. Ikiwa huna uhakika [jinsi ya kushughulikia nambari kubwa katika JS angalia mafunzo yetu kuhusu bignumber.js](https://ethereumdev.io/how-to-deal-with-big-numbers-in-javascript/). + +## Tuma: Kutuma muamala kwa utendakazi wa mkataba-erevu {#send-sending-a-transaction-to-a-smart-contract-function} + +Kwa mfano wa pili tutaita utendakazi wa uhamisho wa mkataba-erevu wa DAI ili kutuma DAI 10 kwa anwani yetu ya pili. Utendakazi wa uhamisho unakubali vigezo viwili: anwani ya mpokeaji na kiasi cha tokeni za kuhamisha: + +```js +daiToken.methods + .transfer(receiverAddress, "100000000000000000000") + .send({ from: senderAddress }, function (err, res) { + if (err) { + console.log("Kosa limetokea", err) + return + } + console.log("Hashi ya muamala: " + res) + }) +``` + +Utendakazi wa `call` hurejesha hashi ya muamala ambayo itachimbwa kwenye mnyororo wa bloku. Kwenye Ethereum, hashi za miamala zinatabirika - hivyo ndivyo tunavyoweza kupata hashi ya muamala kabla haujatekelezwa ([jifunze jinsi hashi zinavyokokotolewa hapa](https://ethereum.stackexchange.com/questions/45648/how-to-calculate-the-assigned-txhash-of-a-transaction)). + +Kwa kuwa utendakazi huwasilisha tu muamala kwenye mnyororo wa bloku, hatuwezi kuona matokeo hadi tujue ni lini utachimbwa na kujumuishwa kwenye mnyororo wa bloku. Katika mafunzo yanayofuata tutajifunza [jinsi ya kusubiri muamala utekelezwe kwenye mnyororo wa bloku kwa kujua hashi yake](https://ethereumdev.io/waiting-for-a-transaction-to-be-mined-on-ethereum-with-js/). diff --git a/public/content/translations/sw/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md b/public/content/translations/sw/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md new file mode 100644 index 00000000000..fc8b8e08519 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md @@ -0,0 +1,585 @@ +--- +title: "Kutengeneza kiolesura cha mtumiaji kwa ajili ya mkataba wako" +description: Kwa kutumia vipengele vya kisasa kama vile TypeScript, React, Vite, na Wagmi, tutapitia kiolesura cha kisasa, lakini kidogo, cha mtumiaji na kujifunza jinsi ya kuunganisha mkoba kwenye kiolesura cha mtumiaji, kupiga simu mkataba-erevu ili kusoma habari, kutuma muamala kwenye mkataba-erevu, na kufuatilia matukio kutoka kwenye mkataba-erevu ili kubaini mabadiliko. +author: Ori Pomerantz +tags: [ "typescript", "react", "vite", "wagmi", "frontend" ] +skill: beginner +published: 2023-11-01 +lang: sw +sidebarDepth: 3 +--- + +Umepata kipengele tunachohitaji katika mfumo ikolojia wa Ethereum. Uliandika mikataba-erevu ili kuitekeleza, na labda hata msimbo fulani unaohusiana unaoendeshwa nje ya mnyororo. Hii ni nzuri! Kwa bahati mbaya, bila kiolesura cha mtumiaji hutapata watumiaji wowote, na mara ya mwisho ulipoandika tovuti watu walitumia modemu za kupiga simu na JavaScript ilikuwa mpya. + +Makala hii ni kwa ajili yako. Nadhani unajua programu, na labda kidogo ya JavaScript na HTML, lakini ujuzi wako wa kiolesura cha mtumiaji umeshuka na umepitwa na wakati. Kwa pamoja tutapitia programu rahisi ya kisasa ili uone jinsi inavyofanywa siku hizi. + +## Kwa nini hii ni muhimu {#why-important} + +Kinadharia, unaweza tu kuwa na watu wanaotumia [Etherscan](https://holesky.etherscan.io/address/0x432d810484add7454ddb3b5311f0ac2e95cecea8#writeContract) au [Blockscout](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=write_contract) kuingiliana na mikataba yako. Hiyo itakuwa nzuri kwa WanaEthereum wenye uzoefu. Lakini tunajaribu kuwahudumia [watu wengine bilioni moja](https://blog.ethereum.org/2021/05/07/ethereum-for-the-next-billion). Hili halitatokea bila uzoefu mzuri wa mtumiaji, na kiolesura rafiki cha mtumiaji ni sehemu kubwa ya hiyo. + +## Programu ya Greeter {#greeter-app} + +Kuna nadharia nyingi nyuma ya jinsi UI ya kisasa inavyofanya kazi, na [tovuti nyingi nzuri](https://react.dev/learn/thinking-in-react) [zinazoelezea](https://wagmi.sh/core/getting-started). Badala ya kurudia kazi nzuri iliyofanywa na tovuti hizo, nitachukulia unapendelea kujifunza kwa kufanya na kuanza na programu unayoweza kucheza nayo. Bado unahitaji nadharia ili kufanikisha mambo, na tutaifikia - tutapitia faili chanzo kwa faili chanzo, na kujadili mambo tunapoyafikia. + +### Usakinishaji {#installation} + +1. Ikibidi, ongeza [blockchain ya Holesky](https://chainlist.org/?search=holesky&testnets=true) kwenye mkoba wako na [pata ETH ya majaribio](https://www.holeskyfaucet.io/). + +2. Fanya clone ya hazina ya github. + + ```sh + git clone https://github.com/qbzzt/20230801-modern-ui.git + ``` + +3. Sakinisha vifurushi vinavyohitajika. + + ```sh + cd 20230801-modern-ui + pnpm install + ``` + +4. Anzisha programu. + + ```sh + pnpm dev + ``` + +5. Vinjari hadi kwenye URL inayoonyeshwa na programu. Katika hali nyingi, hiyo ni [http://localhost:5173/](http://localhost:5173/). + +6. Unaweza kuona msimbo chanzo wa mkataba, toleo lililobadilishwa kidogo la Greeter ya Hardhat, [kwenye kichunguzi cha blockchain](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=contract). + +### Mapitio ya faili {#file-walk-through} + +#### `index.html` {#index-html} + +Faili hii ni kiolezo cha kawaida cha HTML isipokuwa kwa mstari huu, unaoingiza faili ya hati. + +```html + +``` + +#### `src/main.tsx` {#main-tsx} + +Kiendelezi cha faili kinatuambia kuwa faili hii ni [kipengele cha React](https://www.w3schools.com/react/react_components.asp) kilichoandikwa kwa [TypeScript](https://www.typescriptlang.org/), kiendelezi cha JavaScript kinachosaidia [ukaguzi wa aina](https://en.wikipedia.org/wiki/Type_system#Type_checking). TypeScript inakusanywa kuwa JavaScript, kwa hivyo tunaweza kuitumia kwa utekelezaji upande wa mteja. + +```tsx +import '@rainbow-me/rainbowkit/styles.css' +import { RainbowKitProvider } from '@rainbow-me/rainbowkit' +import * as React from 'react' +import * as ReactDOM from 'react-dom/client' +import { WagmiConfig } from 'wagmi' +import { chains, config } from './wagmi' +``` + +Ingiza msimbo wa maktaba tunaouhitaji. + +```tsx +import { App } from './App' +``` + +Ingiza kipengele cha React kinachotekeleza programu (tazama hapa chini). + +```tsx +ReactDOM.createRoot(document.getElementById('root')!).render( +``` + +Tengeneza kipengele cha msingi cha React. Kigezo cha `render` ni [JSX](https://www.w3schools.com/react/react_jsx.asp), lugha ya kiendelezi inayotumia HTML na JavaScript/TypeScript. Alama ya mshangao hapa inakiambia kipengele cha TypeScript: "hujui kama `document.getElementById('root')` itakuwa kigezo halali kwa `ReactDOM.createRoot`, lakini usijali - mimi ni msanidi programu na ninakuambia itakuwa hivyo". + +```tsx + +``` + +Programu inaingia ndani ya [kipengele cha `React.StrictMode`](https://react.dev/reference/react/StrictMode). Kipengele hiki kinaambia maktaba ya React kuingiza ukaguzi wa ziada wa utatuzi, ambao ni muhimu wakati wa usanidi. + +```tsx + +``` + +Programu pia iko ndani ya [kipengele cha `WagmiConfig`](https://wagmi.sh/react/api/WagmiProvider). [Maktaba ya wagmi (we are going to make it)](https://wagmi.sh/) inaunganisha ufafanuzi wa UI wa React na [maktaba ya viem](https://viem.sh/) kwa ajili ya kuandika mfumo uliotawanywa wa Ethereum. + +```tsx + +``` + +Na mwishowe, [kipengele cha `RainbowKitProvider`](https://www.rainbowkit.com/). Kipengele hiki hushughulikia kuingia na mawasiliano kati ya mkoba na programu. + +```tsx + +``` + +Sasa tunaweza kuwa na kipengele cha programu, ambacho kinatengeneza UI. Ile `/>` mwishoni mwa kipengele inaiambia React kwamba kipengele hiki hakina ufafanuzi wowote ndani yake, kulingana na kiwango cha XML. + +```tsx + + + , +) +``` + +Bila shaka, tunapaswa kufunga vipengele vingine. + +#### `src/App.tsx` {#app-tsx} + +```tsx +import { ConnectButton } from '@rainbow-me/rainbowkit' +import { useAccount } from 'wagmi' +import { Greeter } from './components/Greeter' + +export function App() { +``` + +Hii ndiyo njia ya kawaida ya kuunda kipengele cha React - fafanua chaguo la kukokotoa ambalo huitwa kila wakati linapohitaji kutolewa. Chaguo hili la kukokotoa kwa kawaida huwa na msimbo fulani wa TypeScript au JavaScript juu, ikifuatiwa na taarifa ya `return` inayorejesha msimbo wa JSX. + +```tsx + const { isConnected } = useAccount() +``` + +Hapa tunatumia [`useAccount`](https://wagmi.sh/react/api/hooks/useAccount) kuangalia kama tumeunganishwa kwenye blockchain kupitia mkoba au la. + +Kwa kimkataba, katika chaguo za kukokotoa za React zinazoitwa `use...` ni [hooks](https://www.w3schools.com/react/react_hooks.asp) zinazorejesha aina fulani ya data. Unapotumia ndoano kama hizo, si tu kwamba kipengele chako kinapata data, lakini data hiyo inapobadilika kipengele hutolewa upya na maelezo yaliyosasishwa. + +```tsx + return ( + <> +``` + +JSX ya kipengele cha React _lazima_ irudishe kipengele kimoja. Tunapokuwa na vipengele vingi na hatuna chochote kinachomaliza "kawaida" tunatumia kipengele tupu (`<> ...` ) ili kuzifanya kuwa sehemu moja. + +```tsx +

Greeter

+ +``` + +Tunapata [kipengele cha `ConnectButton`](https://www.rainbowkit.com/docs/connect-button) kutoka kwa RainbowKit. Wakati hatujaunganishwa, inatupa kitufe cha `Connect Wallet` ambacho hufungua modali inayoelezea pochi na kukuruhusu kuchagua ni ipi unayotumia. Tunapounganishwa, inaonyesha blockchain tunayotumia, anwani ya akaunti yetu, na salio letu la ETH. Tunaweza kutumia maonyesho haya kubadili mtandao au kukata muunganisho. + +```tsx + {isConnected && ( +``` + +Tunapohitaji kuingiza JavaScript halisi (au TypeScript ambayo itakusanywa kwa JavaScript) kwenye JSX, tunatumia mabano (`{}`). + +Sintaksia `a && b` ni fupi kwa [`a ? b : a`](https://www.w3schools.com/react/react_es6_ternary.asp). Yaani, ikiwa `a` ni kweli inatathmini kuwa `b` na vinginevyo inatathmini `a` (ambayo inaweza kuwa `false`, `0`, n.k). Hii ni njia rahisi ya kuiambia React kwamba kipengele kinapaswa kuonyeshwa tu ikiwa sharti fulani limetimizwa. + +Katika hali hii, tunataka tu kumwonyesha mtumiaji `Greeter` ikiwa mtumiaji ameunganishwa kwenye blockchain. + +```tsx + + )} + + ) +} +``` + +#### `src/components/Greeter.tsx` {#greeter-tsx} + +Faili hii ina utendakazi mwingi wa UI. Inajumuisha ufafanuzi ambao kwa kawaida ungekuwa katika faili nyingi, lakini kwa kuwa hii ni mafunzo, programu imeboreshwa ili iwe rahisi kuelewa kwa mara ya kwanza, badala ya utendakazi au urahisi wa matengenezo. + +```tsx +import { useState, ChangeEventHandler } from 'react' +import { useNetwork, + useReadContract, + usePrepareContractWrite, + useContractWrite, + useContractEvent + } from 'wagmi' +``` + +Tunatumia vitendaji hivi vya maktaba. Tena, zimeelezwa hapa chini zinapotumiwa. + +```tsx +import { AddressType } from 'abitype' +``` + +[Maktaba ya `abitype`](https://abitype.dev/) inatupa ufafanuzi wa TypeScript kwa aina mbalimbali za data za Ethereum, kama vile [`AddressType`](https://abitype.dev/config#addresstype). + +```tsx +let greeterABI = [ + . + . + . +] as const // greeterABI +``` + +ABI kwa mkataba wa `Greeter`. +Ikiwa unasanidi mikataba na UI kwa wakati mmoja, kwa kawaida unaweza kuziweka katika hazina moja na kutumia ABI iliyotolewa na mkusanyaji wa Solidity kama faili katika programu yako. Hata hivyo, hii si lazima hapa kwa sababu mkataba tayari umesanidiwa na hautabadilika. + +```tsx +type AddressPerBlockchainType = { + [key: number]: AddressType +} +``` + +TypeScript imeandikwa kwa nguvu. Tunatumia ufafanuzi huu kubainisha anwani ambamo mkataba wa `Greeter` umetumwa kwenye minyororo tofauti. Ufunguo ni nambari (chainId), na thamani ni `AddressType` (anwani). + +```tsx +const contractAddrs: AddressPerBlockchainType = { + // Holesky + 17000: '0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8', + + // Sepolia + 11155111: '0x7143d5c190F048C8d19fe325b748b081903E3BF0' +} +``` + +Anwani ya mkataba kwenye mitandao miwili inayotumika: [Holesky](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=contact_code) na [Sepolia](https://eth-sepolia.blockscout.com/address/0x7143d5c190F048C8d19fe325b748b081903E3BF0?tab=contact_code). + +Kumbuka: Kwa kweli kuna ufafanuzi wa tatu, kwa Redstone Holesky, utaelezwa hapa chini. + +```tsx +type ShowObjectAttrsType = { + name: string, + object: any +} +``` + +Aina hii hutumiwa kama kigezo kwa sehemu ya `ShowObject` (iliyoelezwa baadaye). Inajumuisha jina la kitu na thamani yake, ambayo huonyeshwa kwa madhumuni ya utatuzi. + +```tsx +type ShowGreetingAttrsType = { + greeting: string | undefined +} +``` + +Wakati wowote tunaweza kujua salamu ni nini (kwa sababu tuliisoma kutoka kwa blockchain) au hatujui (kwa sababu bado hatujaipokea). Kwa hivyo ni muhimu kuwa na aina ambayo inaweza kuwa mfuatano au chochote. + +##### Kipengele cha `Greeter` {#greeter-component} + +```tsx +const Greeter = () => { +``` + +Hatimaye, tunapata kufafanua kipengele. + +```tsx + const { chain } = useNetwork() +``` + +Taarifa kuhusu msururu tunaotumia, kwa hisani ya [wagmi](https://wagmi.sh/react/hooks/useNetwork). +Kwa sababu hii ni ndoano (`use...`), kila wakati habari hii inapobadilika sehemu hiyo huchorwa upya. + +```tsx + const greeterAddr = chain && contractAddrs[chain.id] +``` + +Anwani ya mkataba wa Greeter, ambayo hutofautiana kulingana na mnyororo (na ambayo ni `undefined` ikiwa hatuna maelezo ya mnyororo au tuko kwenye mnyororo bila mkataba huo). + +```tsx + const readResults = useReadContract({ + address: greeterAddr, + abi: greeterABI, + functionName: "greet" , // No arguments + watch: true + }) +``` + +[Ndoano ya `useReadContract`](https://wagmi.sh/react/api/hooks/useReadContract) inasoma habari kutoka kwa mkataba. Unaweza kuona hasa ni taarifa gani inarejesha panua `readResults` katika UI. Katika kesi hii tunataka iendelee kutafuta ili tujulishwe salamu itakapobadilika. + +**Kumbuka:** Tunaweza kusikiliza [matukio ya `setGreeting`](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=logs) ili kujua salamu inapobadilika na kusasisha kwa njia hiyo. Hata hivyo, ingawa inaweza kuwa na ufanisi zaidi, haitatumika katika hali zote. Mtumiaji anapobadilisha hadi msururu tofauti, salamu pia hubadilika, lakini mabadiliko hayo hayaambatani na tukio. Tunaweza kuwa na sehemu moja ya msimbo inayosikiliza matukio na nyingine ya kutambua mabadiliko ya msururu, lakini hilo lingekuwa gumu zaidi kuliko kuweka tu [kigezo cha `watch`](https://wagmi.sh/react/api/hooks/useReadContract#watch-optional). + +```tsx + const [ newGreeting, setNewGreeting ] = useState("") +``` + +[Ndoano ya `useState` ya React](https://www.w3schools.com/react/react_usestate.asp) inaturuhusu kubainisha tofauti ya hali, ambayo thamani yake hudumu kutoka uwasilishaji mmoja wa sehemu hadi nyingine. Thamani ya awali ni kigezo, katika kesi hii mfuatano tupu. + +Ndoano ya `useState` inarudisha orodha yenye thamani mbili: + +1. Thamani ya sasa ya tofauti ya hali. +2. Chaguo la kukokotoa la kurekebisha tofauti ya hali inapohitajika. Kwa kuwa hii ni ndoano, kila wakati inapoitwa sehemu hutolewa tena. + +Katika kesi hii, tunatumia tofauti ya hali kwa salamu mpya ambayo mtumiaji anataka kuweka. + +```tsx + const greetingChange : ChangeEventHandler = (evt) => + setNewGreeting(evt.target.value) +``` + +Hiki ndicho kishughulikia tukio wakati sehemu mpya ya kuingiza salamu inapobadilika. Aina, [`ChangeEventHandler`](https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/forms_and_events/), inabainisha kuwa huyu ni mshughulikiaji wa mabadiliko ya thamani ya kipengele cha ingizo cha HTML. Sehemu ya `` inatumika kwa sababu hii ni [aina ya jumla](https://www.w3schools.com/typescript/typescript_basic_generics.php). + +```tsx + const preparedTx = usePrepareContractWrite({ + address: greeterAddr, + abi: greeterABI, + functionName: 'setGreeting', + args: [ newGreeting ] + }) + const workingTx = useContractWrite(preparedTx.config) +``` + +Huu ndio mchakato wa kuwasilisha muamala wa blockchain kutoka kwa mtazamo wa mteja: + +1. Tuma muamala kwa nodi katika blockchain kwa kutumia [`eth_estimateGas`](https://docs.alchemy.com/reference/eth-estimategas). +2. Subiri jibu kutoka kwa nodi. +3. Jibu linapopokewa, mwombe mtumiaji asaini muamala kupitia mkoba. Hatua hii _lazima_ itokee baada ya jibu la nodi kupokelewa kwa sababu mtumiaji anaonyeshwa gharama ya gesi ya muamala kabla ya kuusaini. +4. Subiri mtumiaji akubali. +5. Tuma muamala tena, wakati huu ukitumia [`eth_sendRawTransaction`](https://docs.alchemy.com/reference/eth-sendrawtransaction). + +Hatua ya 2 inaweza kuchukua muda unaoonekana, ambapo watumiaji wangeshangaa kama amri yao ilipokelewa na kiolesura cha mtumiaji na kwa nini hawaombwi kutia saini muamala tayari. Hiyo inafanya uzoefu mbaya wa mtumiaji (UX). + +Suluhisho ni kutumia [ndoano za kuandaa](https://wagmi.sh/react/prepare-hooks). Kila wakati kigezo kinapobadilika, tuma ombi la `eth_estimateGas` kwa nodi mara moja. Kisha, mtumiaji anapotaka kutuma muamala (katika kesi hii kwa kubonyeza **Sasisha salamu**), gharama ya gesi inajulikana na mtumiaji anaweza kuona ukurasa wa mkoba mara moja. + +```tsx + return ( +``` + +Sasa hatimaye tunaweza kuunda HTML halisi ya kurudisha. + +```tsx + <> +

Greeter

+ { + !readResults.isError && !readResults.isLoading && + + } +
+``` + +Unda sehemu ya `ShowGreeting` (iliyoelezwa hapa chini), lakini tu ikiwa salamu ilisomwa kwa mafanikio kutoka kwa blockchain. + +```tsx + +``` + +Hiki ndicho sehemu ya maandishi ya kuingiza ambapo mtumiaji anaweza kuweka salamu mpya. Kila wakati mtumiaji anapobonyeza kitufe, tunaita `greetingChange` ambayo huita `setNewGreeting`. Kwa vile `setNewGreeting` inatoka kwa `useState` ndoano, inasababisha `Greeter` sehemu kutolewa tena. Hii inamaanisha kuwa: + +- Tunahitaji kubainisha `value` ili kuweka thamani ya salamu mpya, kwa sababu vinginevyo ingerejea kuwa chaguo-msingi, mfuatano tupu. +- `usePrepareContractWrite` inaitwa kila wakati `newGreeting` inapobadilika, ambayo ina maana kwamba daima itakuwa na `newGreeting` ya hivi karibuni zaidi katika muamala ulioandaliwa. + +```tsx + +``` + +Ikiwa hakuna `workingTx.write` basi bado tunasubiri maelezo muhimu kwa kutuma sasisho la salamu, kwa hivyo kitufe kimezimwa. Ikiwa kuna thamani ya `workingTx.write` basi hiyo ndiyo kazi ya kuita ili kutuma muamala. + +```tsx +
+ + + + + ) +} +``` + +Mwishowe, kukusaidia kuona tunachofanya, onyesha vitu vitatu tunavyotumia: + +- `readResults` +- `preparedTx` +- `workingTx` + +##### Kipengele cha `ShowGreeting` {#showgreeting-component} + +Sehemu hii inaonyesha + +```tsx +const ShowGreeting = (attrs : ShowGreetingAttrsType) => { +``` + +Chaguo la kukokotoa la sehemu hupokea kigezo chenye sifa zote za sehemu. + +```tsx + return {attrs.greeting} +} +``` + +##### Kipengele cha `ShowObject` {#showobject-component} + +Kwa madhumuni ya habari, tunatumia `ShowObject` sehemu kuonyesha vitu muhimu (`readResults` kwa kusoma salamu na `preparedTx` na `workingTx` kwa miamala tunayounda). + +```tsx +const ShowObject = (attrs: ShowObjectAttrsType ) => { + const keys = Object.keys(attrs.object) + const funs = keys.filter(k => typeof attrs.object[k] == "function") + return <> +
+``` + +Hatutaki kubandika UI na habari zote, kwa hivyo ili iwezekane kuzitazama au kuzifunga, tunatumia lebo ya [`details`](https://www.w3schools.com/tags/tag_details.asp). + +```tsx + {attrs.name} +
+        {JSON.stringify(attrs.object, null, 2)}
+```
+
+Sehemu nyingi huonyeshwa kwa kutumia [`JSON.stringify`](https://www.w3schools.com/js/js_json_stringify.asp).
+
+```tsx
+      
+ { funs.length > 0 && + <> + Functions: +
    +``` + +Isipokuwa ni vitendaji, ambavyo si sehemu ya [kiwango cha JSON](https://www.json.org/json-en.html), kwa hivyo lazima zionyeshwe kando. + +```tsx + {funs.map((f, i) => +``` + +Ndani ya JSX, msimbo ndani ya `{` mabano ya curly `}` hutafsiriwa kama JavaScript. Kisha, msimbo ndani ya `(` mabano ya kawaida `)`, hutafsiriwa tena kama JSX. + +```tsx + (
  • {f}
  • ) + )} +``` + +React inahitaji lebo katika [DOM Tree](https://www.w3schools.com/js/js_htmldom.asp) ili kuwa na vitambulisho tofauti. Hii inamaanisha kuwa watoto wa lebo moja (katika kesi hii, [orodha isiyopangwa](https://www.w3schools.com/tags/tag_ul.asp)), wanahitaji sifa tofauti za `key`. + +```tsx +
+ + } +
+ +} +``` + +Maliza lebo mbalimbali za HTML. + +##### Uuzaji wa mwisho {#the-final-export} + +```tsx +export { Greeter } +``` + +Kipengele cha `Greeter` ndicho tunachohitaji kuhamisha kwa ajili ya programu. + +#### `src/wagmi.ts` {#wagmi-ts} + +Hatimaye, ufafanuzi mbalimbali unaohusiana na WAGMI uko katika `src/wagmi.ts`. Sitaeleza kila kitu hapa, kwa sababu sehemu kubwa yake ni kiolezo ambacho huenda huhitaji kubadilisha. + +Msimbo hapa si sawa kabisa na [kwenye github](https://github.com/qbzzt/20230801-modern-ui/blob/main/src/wagmi.ts) kwa sababu baadaye katika makala tunaongeza mnyororo mwingine ([Redstone Holesky](https://redstone.xyz/docs/network-info)). + +```ts +import { getDefaultWallets } from '@rainbow-me/rainbowkit' +import { configureChains, createConfig } from 'wagmi' +import { holesky, sepolia } from 'wagmi/chains' +``` + +Ingiza blockchains ambazo programu inasaidia. Unaweza kuona orodha ya minyororo inayotumika [kwenye github ya viem](https://github.com/wagmi-dev/viem/tree/main/src/chains/definitions). + +```ts +import { publicProvider } from 'wagmi/providers/public' + +const walletConnectProjectId = 'c96e690bb92b6311e8e9b2a6a22df575' +``` + +Ili uweze kutumia [WalletConnect](https://walletconnect.com/) unahitaji kitambulisho cha mradi kwa ajili ya programu yako. Unaweza kuipata [kwenye cloud.walletconnect.com](https://cloud.walletconnect.com/sign-in). + +```ts +const { chains, publicClient, webSocketPublicClient } = configureChains( + [ holesky, sepolia ], + [ + publicProvider(), + ], +) + +const { connectors } = getDefaultWallets({ + appName: 'My wagmi + RainbowKit App', + chains, + projectId: walletConnectProjectId, +}) + +export const config = createConfig({ + autoConnect: true, + connectors, + publicClient, + webSocketPublicClient, +}) + +export { chains } +``` + +### Kuongeza blockchain nyingine {#add-blockchain} + +Siku hizi kuna suluhisho nyingi za [uongezaji wa L2](/layer-2/), na unaweza kutaka kusaidia baadhi ambazo viem bado haizisaidii. Ili kuifanya, unarekebisha `src/wagmi.ts`. Maagizo haya yanaelezea jinsi ya kuongeza [Redstone Holesky](https://redstone.xyz/docs/network-info). + +1. Ingiza aina ya `defineChain` kutoka kwa viem. + + ```ts + import { defineChain } from 'viem' + ``` + +2. Ongeza ufafanuzi wa mtandao. + + ```ts + const redstoneHolesky = defineChain({ + id: 17_001, + name: 'Redstone Holesky', + network: 'redstone-holesky', + nativeCurrency: { + decimals: 18, + name: 'Ether', + symbol: 'ETH', + }, + rpcUrls: { + default: { + http: ['https://rpc.holesky.redstone.xyz'], + webSocket: ['wss://rpc.holesky.redstone.xyz/ws'], + }, + public: { + http: ['https://rpc.holesky.redstone.xyz'], + webSocket: ['wss://rpc.holesky.redstone.xyz/ws'], + }, + }, + blockExplorers: { + default: { name: 'Explorer', url: 'https://explorer.holesky.redstone.xyz' }, + }, + }) + ``` + +3. Ongeza mnyororo mpya kwenye simu ya `configureChains`. + + ```ts + const { chains, publicClient, webSocketPublicClient } = configureChains( + [ holesky, sepolia, redstoneHolesky ], + [ publicProvider(), ], + ) + ``` + +4. Hakikisha kwamba programu inajua anwani ya mikataba yako kwenye mtandao mpya. Katika kesi hii, tunarekebisha `src/components/Greeter.tsx`: + + ```ts + const contractAddrs : AddressPerBlockchainType = { + // Holesky + 17000: '0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8', + + // Redstone Holesky + 17001: '0x4919517f82a1B89a32392E1BF72ec827ba9986D3', + + // Sepolia + 11155111: '0x7143d5c190F048C8d19fe325b748b081903E3BF0' + } + ``` + +## Hitimisho {#conclusion} + +Bila shaka, hujali sana kuhusu kutoa kiolesura cha mtumiaji kwa ajili ya `Greeter`. Unataka kuunda kiolesura cha mtumiaji kwa mikataba yako mwenyewe. Ili kuunda programu yako mwenyewe, fuata hatua hizi: + +1. Bainisha kuunda programu ya wagmi. + + ```sh copy + pnpm create wagmi + ``` + +2. Taja jina la programu. + +3. Chagua mfumo wa **React**. + +4. Chagua lahaja ya **Vite**. + +5. Unaweza [kuongeza kit cha Rainbow](https://www.rainbowkit.com/docs/installation#manual-setup). + +Sasa nenda ukafanye mikataba yako itumike kwa ulimwengu wote. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). + diff --git a/public/content/translations/sw/developers/tutorials/deploying-your-first-smart-contract/index.md b/public/content/translations/sw/developers/tutorials/deploying-your-first-smart-contract/index.md new file mode 100644 index 00000000000..d7f62249cb7 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/deploying-your-first-smart-contract/index.md @@ -0,0 +1,95 @@ +--- +title: Kupeleka mkataba-erevu wako wa kwanza +description: Utangulizi wa kupeleka mkataba-erevu wako wa kwanza kwenye mtandao wa majaribio wa Ethereum +author: "jdourlens" +tags: [ "mikataba erevu", "remix", "uimara", "upelekaji" ] +skill: beginner +lang: sw +published: 2020-04-03 +source: EthereumDev +sourceUrl: https://ethereumdev.io/deploying-your-first-smart-contract/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +Nadhani una msisimko kama sisi [kupeleka](/developers/docs/smart-contracts/deploying/) na kuingiliana na [mkataba-erevu](/developers/docs/smart-contracts/) wako wa kwanza kwenye mnyororo wa bloku wa Ethereum. + +Usijali, kwa kuwa ni mkataba-erevu wetu wa kwanza, tutaupeleka kwenye [mtandao wa majaribio wa ndani](/developers/docs/networks/) kwa hivyo haitakugharimu chochote kupeleka na kucheza nao kadri upendavyo. + +## Kuandika mkataba wetu {#writing-our-contract} + +Hatua ya kwanza ni [kutembelea Remix](https://remix.ethereum.org/) na kuunda faili mpya. Kwenye sehemu ya juu kushoto ya kiolesura cha Remix ongeza faili mpya na uweke jina la faili unalotaka. + +![Kuongeza faili mpya katika kiolesura cha Remix](./remix.png) + +Katika faili mpya, tutabandika msimbo ufuatao. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >=0.5.17; + +contract Counter { + + // Kigezo cha umma cha aina ya nambari kamili isiyo na alama ili kuweka idadi ya hesabu + uint256 public count = 0; + + // Kitendakazi kinachoongeza kaunta yetu + function increment() public { + count += 1; + } + + // Kipataji kisicho lazima cha kupata thamani ya hesabu + function getCount() public view returns (uint256) { + return count; + } + +} +``` + +Ikiwa umezoea programu unaweza kukisia kwa urahisi kile programu hii inafanya. Hapa kuna maelezo mstari kwa mstari: + +- Mstari wa 4: Tunafafanua mkataba wenye jina la `Counter`. +- Mstari wa 7: Mkataba wetu unahifadhi nambari kamili moja isiyo na alama inayoitwa `count` inayoanzia 0. +- Mstari wa 10: Kitendakazi cha kwanza kitabadilisha hali ya mkataba na kuongeza kigezo chetu cha `count`. +- Mstari wa 15: Kitendakazi cha pili ni kipataji tu ili kuweza kusoma thamani ya kigezo cha `count` nje ya mkataba-erevu. Kumbuka kwamba, kwa vile tulifafanua kigezo chetu cha `count` kama cha umma hii si lazima lakini inaonyeshwa kama mfano. + +Hayo ndiyo yote kwa mkataba-erevu wetu wa kwanza rahisi. Kama unavyoweza kujua, inaonekana kama darasa kutoka kwa lugha za OOP (Upangaji Unaolenga Kitu) kama Java au C++. Sasa ni wakati wa kucheza na mkataba wetu. + +## Kupeleka mkataba wetu {#deploying-our-contract} + +Kwa vile tumeandika mkataba-erevu wetu wa kwanza kabisa, sasa tutaupeleka kwenye mnyororo wa bloku ili tuweze kucheza nao. + +[Kupeleka mkataba-erevu kwenye mnyororo wa bloku](/developers/docs/smart-contracts/deploying/) ni kutuma tu muamala wenye msimbo wa mkataba-erevu ulioandaliwa bila kubainisha wapokeaji wowote. + +Kwanza [tutaandaa mkataba](/developers/docs/smart-contracts/compiling/) kwa kubofya aikoni ya kuandaa iliyo upande wa kushoto: + +![Aikoni ya kuandaa katika upau wa vidhibiti wa Remix](./remix-compile-button.png) + +Kisha bofya kwenye kitufe cha kuandaa: + +![Kitufe cha kuandaa katika kiandaaji cha Remix solidity](./remix-compile.png) + +Unaweza kuchagua chaguo la “Kuandaa Kiotomatiki” ili mkataba uwe unaandaliwa kila wakati unapohifadhi maudhui kwenye kihariri cha maandishi. + +Kisha nenda kwenye skrini ya "peleka na endesha miamala": + +![Aikoni ya kupeleka katika upau wa vidhibiti wa Remix](./remix-deploy.png) + +Ukishakuwa kwenye skrini ya "peleka na endesha miamala", hakikisha mara mbili kwamba jina la mkataba wako linaonekana na ubofye Peleka. Kama unavyoona juu ya ukurasa, mazingira ya sasa ni “JavaScript VM” hii inamaanisha kuwa tutapeleka na kuingiliana na mkataba-erevu wetu kwenye mnyororo wa bloku wa majaribio wa ndani ili kuweza kupima haraka zaidi na bila ada zozote. + +![Kitufe cha kupeleka katika kiandaaji cha Remix solidity](./remix-deploy-button.png) + +Mara tu unapobofya kitufe cha “Peleka”, utaona mkataba wako ukionekana chini. Bofya mshale ulio upande wa kushoto ili kuipanua ili tuone maudhui ya mkataba wetu. Hiki ni kigezo chetu cha `counter`, kitendakazi chetu cha `increment()` na kipataji cha `getCounter()`. + +Ukibofya kitufe cha `count` au `getCount`, kwa kweli kitachukua maudhui ya kigezo cha `count` cha mkataba na kuyaonyesha. Kwa kuwa bado hatujaita kitendakazi cha `increment`, inapaswa kuonyesha 0. + +![Kitufe cha kitendakazi katika kiandaaji cha Remix solidity](./remix-function-button.png) + +Sasa hebu tuite kitendakazi cha `increment` kwa kubofya kitufe. Utaona kumbukumbu za miamala inayofanywa zikionekana chini ya dirisha. Utaona kuwa kumbukumbu ni tofauti unapobonyeza kitufe cha kuchukua data badala ya kitufe cha `increment`. Ni kwa sababu kusoma data kwenye mnyororo wa bloku hakuhitaji miamala yoyote (kuandika) au ada. Kwa sababu kurekebisha tu hali ya mnyororo wa bloku ndiko kunahitaji kufanya muamala: + +![Kumbukumbu ya miamala](./transaction-log.png) + +Baada ya kubonyeza kitufe cha increment ambacho kitazalisha muamala wa kuita kitendakazi chetu cha `increment()`, tukibofya tena vitufe vya count au getCount tutasoma hali mpya iliyosasishwa ya mkataba-erevu wetu huku kigezo cha count kikiwa kikubwa kuliko 0. + +![Hali mpya iliyosasishwa ya mkataba-erevu](./updated-state.png) + +Katika mafunzo yajayo, tutaangazia [jinsi unavyoweza kuongeza matukio kwenye mikataba-erevu yako](/developers/tutorials/logging-events-smart-contracts/). Kurekodi matukio ni njia rahisi ya kutatua mkataba-erevu wako na kuelewa kinachoendelea unapoita kitendakazi. diff --git a/public/content/translations/sw/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md b/public/content/translations/sw/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md new file mode 100644 index 00000000000..62f134fcc91 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md @@ -0,0 +1,372 @@ +--- +title: Jinsi ya kuendeleza na kujaribu dApp kwenye testnet ya ndani, yenye wateja wengi +description: Mwongozo huu kwanza utakuelekeza jinsi ya kuanzisha na kusanidi testnet ya ndani ya Ethereum yenye wateja wengi kabla ya kutumia testnet kupeleka na kujaribu dApp. +author: "Tedi Mitiku" +tags: + [ + "wateja", + "nodi", + "mikataba erevu", + "utunzi", + "safu ya makubaliano", + "safu ya utekelezaji", + "majaribio" + ] +skill: intermediate +lang: sw +published: 2023-04-11 +--- + +## Utangulizi {#introduction} + +Mwongozo huu unakuelekeza katika mchakato wa kuanzisha testnet ya Ethereum ya ndani inayoweza kusanidiwa, kupeleka mkataba-erevu kwayo, na kutumia testnet kufanya majaribio dhidi ya dApp yako. Mwongozo huu umeundwa kwa ajili ya wasanidi programu wa dApp wanaotaka kuendeleza na kujaribu dApps zao ndani dhidi ya usanidi tofauti wa mtandao kabla ya kupeleka kwenye testnet hai au Mtandao Mkuu. + +Katika mwongozo huu, utaweza: + +- Anzisha testnet ya Ethereum ya ndani na [`eth-network-package`](https://github.com/kurtosis-tech/eth-network-package) ukitumia [Kurtosis](https://www.kurtosis.com/), +- Unganisha mazingira yako ya uendelezaji wa dApp ya Hardhat kwenye testnet ya ndani ili kuandaa, kupeleka, na kujaribu dApp, na +- Sanidi testnet ya ndani, ikijumuisha vigezo kama idadi ya nodi na jozi maalum za mteja wa EL/CL, ili kuwezesha mtiririko wa kazi wa uendelezaji na upimaji dhidi ya usanidi mbalimbali wa mtandao. + +### Kurtosis ni nini? {#what-is-kurtosis} + +[Kurtosis](https://www.kurtosis.com/) ni mfumo wa ujenzi unaoweza kuunganishwa ulioundwa kwa ajili ya kusanidi mazingira ya majaribio ya makontena mengi. Inawawezesha wasanidi programu kuunda mazingira yanayoweza kurudiwa ambayo yanahitaji mantiki ya usanidi inayobadilika, kama vile testnets za mnyororo wa bloku. + +Katika mwongozo huu, kifurushi cha eth-network cha Kurtosis kinawasha testnet ya ndani ya Ethereum inayotumia mteja wa Safu ya Utekelezaji (EL) wa [`geth`](https://geth.ethereum.org/), pamoja na wateja wa Safu ya Makubaliano (CL) wa [`teku`](https://consensys.io/teku), [`lighthouse`](https://lighthouse.sigmaprime.io/), na [`lodestar`](https://lodestar.chainsafe.io/). Kifurushi hiki kinatumika kama mbadala unaoweza kusanidiwa na kuunganishwa kwa mitandao katika mifumo kama vile Mtandao wa Hardhat, Ganache, na Anvil. Kurtosis huwapa wasanidi programu udhibiti na wepesi zaidi juu ya testnets wanazotumia, ambayo ni sababu kubwa kwa nini [Msingi wa Ethereum ulitumia Kurtosis kupima Muungano](https://www.kurtosis.com/blog/testing-the-ethereum-merge) na unaendelea kuitumia kwa kupima masasisho ya mtandao. + +## Kusanidi Kurtosis {#setting-up-kurtosis} + +Kabla ya kuendelea, hakikisha una: + +- [Umesakinisha na kuanzisha injini ya Docker](https://docs.kurtosis.com/install/#i-install--start-docker) kwenye mashine yako ya ndani +- [Umesakinisha Kurtosis CLI](https://docs.kurtosis.com/install#ii-install-the-cli) (au umeisasisha hadi toleo jipya zaidi, ikiwa tayari una CLI iliyosakinishwa) +- Umesakinisha [Node.js](https://nodejs.org/en), [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable), na [npx](https://www.npmjs.com/package/npx) (kwa mazingira yako ya dApp) + +## Kuanzisha testnet ya Ethereum ya ndani {#instantiate-testnet} + +Ili kuwasha testnet ya Ethereum ya ndani, endesha: + +```python +kurtosis --enclave local-eth-testnet run github.com/kurtosis-tech/eth-network-package +``` + +Kumbuka: Amri hii inaupa mtandao wako jina: \"local-eth-testnet\" kwa kutumia kiashiria cha `--enclave`. + +Kurtosis itachapisha hatua inazochukua chinichini inapofanya kazi ya kufasiri, kuhakiki, na kisha kutekeleza maagizo. Mwishowe, unapaswa kuona matokeo yanayofanana na yafuatayo: + +```python +INFO[2023-04-04T18:09:44-04:00] ====================================================== +INFO[2023-04-04T18:09:44-04:00] || Created enclave: local-eth-testnet || +INFO[2023-04-04T18:09:44-04:00] ====================================================== +Name: local-eth-testnet +UUID: 39372d756ae8 +Status: RUNNING +Creation Time: Tue, 04 Apr 2023 18:09:03 EDT + +========================================= Files Artifacts ========================================= +UUID Name +d4085a064230 cl-genesis-data +1c62cb792e4c el-genesis-data +bd60489b73a7 genesis-generation-config-cl +b2e593fe5228 genesis-generation-config-el +d552a54acf78 geth-prefunded-keys +5f7e661eb838 prysm-password +054e7338bb59 validator-keystore-0 + +========================================== User Services ========================================== +UUID Name Ports Status +e20f129ee0c5 cl-client-0-beacon http: 4000/tcp -> RUNNING + metrics: 5054/tcp -> + tcp-discovery: 9000/tcp -> 127.0.0.1:54263 + udp-discovery: 9000/udp -> 127.0.0.1:60470 +a8b6c926cdb4 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:54267 RUNNING + metrics: 5064/tcp -> +d7b802f623e8 el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:54253 RUNNING + rpc: 8545/tcp -> 127.0.0.1:54251 + tcp-discovery: 30303/tcp -> 127.0.0.1:54254 + udp-discovery: 30303/udp -> 127.0.0.1:53834 + ws: 8546/tcp -> 127.0.0.1:54252 +514a829c0a84 prelaunch-data-generator-1680646157905431468 STOPPED +62bd62d0aa7a prelaunch-data-generator-1680646157915424301 STOPPED +05e9619e0e90 prelaunch-data-generator-1680646157922872635 STOPPED + +``` + +Hongera! Ulitumia Kurtosis kuanzisha testnet ya Ethereum ya ndani, na mteja wa CL (`lighthouse`) na EL (`geth`), juu ya Docker. + +### Mapitio {#review-instantiate-testnet} + +Katika sehemu hii, ulitekeleza amri iliyoelekeza Kurtosis kutumia [`eth-network-package` iliyohifadhiwa mbali kwenye GitHub](https://github.com/kurtosis-tech/eth-network-package) kuwasha testnet ya Ethereum ya ndani ndani ya [Enclave](https://docs.kurtosis.com/advanced-concepts/enclaves/) ya Kurtosis. Ndani ya enclave yako, utapata "file artifacts" na "user services". + +[Vifaa vya Faili](https://docs.kurtosis.com/advanced-concepts/files-artifacts/) katika enclave yako vinajumuisha data zote zilizozalishwa na kutumika kuanzisha wateja wa EL na CL. Data iliundwa kwa kutumia huduma ya `prelaunch-data-generator` iliyojengwa kutoka kwa [picha hii ya Docker](https://github.com/ethpandaops/ethereum-genesis-generator) + +Huduma za mtumiaji huonyesha huduma zote zilizowekwa kwenye kontena zinazofanya kazi katika enclave yako. Utaona kwamba nodi moja, yenye mteja wa EL na mteja wa CL, imeundwa. + +## Unganisha mazingira yako ya uendelezaji wa dApp kwenye testnet ya Ethereum ya ndani {#connect-your-dapp} + +### Sanidi mazingira ya uendelezaji wa dApp {#set-up-dapp-env} + +Sasa kwa kuwa una testnet ya ndani inayofanya kazi, unaweza kuunganisha mazingira yako ya uendelezaji wa dApp ili kutumia testnet yako ya ndani. Mfumo wa Hardhat utatumika katika mwongozo huu kupeleka dApp ya blackjack kwenye testnet yako ya ndani. + +Ili kusanidi mazingira yako ya uendelezaji wa dApp, nakili hazina iliyo na sampuli yetu ya dApp na usakinishe vitegemezi vyake, endesha: + +```python +git clone https://github.com/kurtosis-tech/awesome-kurtosis.git && cd awesome-kurtosis/smart-contract-example && yarn +``` + +Folda ya [smart-contract-example](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example) inayotumiwa hapa ina usanidi wa kawaida kwa msanidi programu wa dApp anayetumia mfumo wa [Hardhat](https://hardhat.org/): + +- [`contracts/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/contracts) ina mikataba-erevu michache rahisi kwa ajili ya dApp ya Blackjack +- [`scripts/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/scripts) ina hati ya kupeleka mkataba wa tokeni kwenye mtandao wako wa ndani wa Ethereum +- [`test/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/test) ina jaribio rahisi la .js kwa mkataba wako wa tokeni ili kuthibitisha kila mchezaji katika dApp yetu ya Blackjack ametengenezewa 1000 +- [`hardhat.config.ts`](https://github.com/kurtosis-tech/awesome-kurtosis/blob/main/smart-contract-example/hardhat.config.ts) inasanidi usanidi wako wa Hardhat + +### Sanidi Hardhat ili itumie testnet ya ndani {#configure-hardhat} + +Pamoja na mazingira yako ya uendelezaji wa dApp yakiwa yamesanidiwa, sasa utaunganisha Hardhat ili itumie testnet ya Ethereum ya ndani iliyoundwa kwa kutumia Kurtosis. Ili kufanikisha hili, badilisha `<$YOUR_PORT>` katika muundo wa `localnet` katika faili yako ya usanidi ya `hardhat.config.ts` na bandari ya matokeo ya rpc uri kutoka huduma yoyote ya `el-client-`. Katika kisa hiki cha sampuli, bandari itakuwa `64248`. Bandari yako itakuwa tofauti. + +Mfano katika `hardhat.config.ts`: + +```js +localnet: { +url: 'http://127.0.0.1:<$YOUR_PORT>',// TODO: BADILISHA $YOUR_PORT NA BANDARI YA URI YA NODI ILIYOTOLEWA NA KIFURUSHI CHA MTANDAO WA ETH CHA KURTOSIS + +// Hizi ni funguo za faragha zinazohusiana na akaunti za majaribio zilizofadhiliwa awali zilizoundwa na kifurushi cha eth-network +// +accounts: [ + "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2", + "48fcc39ae27a0e8bf0274021ae6ebd8fe4a0e12623d61464c498900b28feb567", + "7988b3a148716ff800414935b305436493e1f25237a2a03e5eebc343735e2f31", + "b3c409b6b0b3aa5e65ab2dc1930534608239a478106acf6f3d9178e9f9b00b35", + "df9bb6de5d3dc59595bcaa676397d837ff49441d211878c024eabda2cd067c9f", + "7da08f856b5956d40a72968f93396f6acff17193f013e8053f6fbb6c08c194d6", + ], +}, +``` + +Mara tu unapohifadhi faili yako, mazingira yako ya uendelezaji wa dApp ya Hardhat sasa yameunganishwa na testnet yako ya Ethereum ya ndani! Unaweza kuthibitisha kwamba testnet yako inafanya kazi kwa kuendesha: + +```python +npx hardhat balances --network localnet +``` + +Matokeo yanapaswa kuonekana kama hivi: + +```python +0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 10000000000000000000000000 +0x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 10000000000000000000000000 +0xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 10000000000000000000000000 +0x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 10000000000000000000000000 +0x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 10000000000000000000000000 +0x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000 +``` + +Hii inathibitisha kuwa Hardhat inatumia testnet yako ya ndani na inagundua akaunti zilizofadhiliwa awali zilizoundwa na `eth-network-package`. + +### Peleka na ujaribu dApp yako ndani {#deploy-and-test-dapp} + +Wakati mazingira ya uendelezaji wa dApp yameunganishwa kikamilifu kwenye testnet ya Ethereum ya ndani, sasa unaweza kuendesha mtiririko wa kazi wa uendelezaji na upimaji dhidi ya dApp yako ukitumia testnet ya ndani. + +Ili kuandaa na kupeleka mkataba-erevu wa `ChipToken.sol` kwa ajili ya uundaji wa mfano wa ndani na uendelezaji, endesha: + +```python +npx hardhat compile +npx hardhat run scripts/deploy.ts --network localnet +``` + +Matokeo yanapaswa kuonekana kama: + +```python +ChipToken imepelekwa kwa: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d +``` + +Sasa jaribu kuendesha jaribio la `simple.js` dhidi ya dApp yako ya ndani ili kuthibitisha kila mchezaji katika dApp yetu ya Blackjack ametengenezewa 1000: + +Matokeo yanapaswa kuonekana kama hivi: + +```python +npx hardhat test --network localnet +``` + +Matokeo yanapaswa kuonekana kama hivi: + +```python +ChipToken + tengeneza + ✔ inapaswa kutengeneza chipu 1000 kwa MCHEZAJI MMOJA + + 1 imepita (654ms) +``` + +### Mapitio {#review-dapp-workflows} + +Kufikia hapa, sasa umesanidi mazingira ya uendelezaji wa dApp, umeiunganisha kwenye mtandao wa Ethereum wa ndani ulioundwa na Kurtosis, na umeandaa, umepeleka, na umeendesha jaribio rahisi dhidi ya dApp yako. + +Sasa hebu tuchunguze jinsi unavyoweza kusanidi mtandao wa msingi kwa ajili ya kupima dApps zetu chini ya usanidi mbalimbali wa mtandao. + +## Kusanidi testnet ya Ethereum ya ndani {#configure-testnet} + +### Kubadilisha usanidi wa mteja na idadi ya nodi {#configure-client-config-and-num-nodes} + +Testnet yako ya Ethereum ya ndani inaweza kusanidiwa kutumia jozi tofauti za wateja wa EL na CL, pamoja na idadi tofauti ya nodi, kulingana na hali na usanidi maalum wa mtandao unaotaka kuendeleza au kupima. Hii inamaanisha kuwa, mara tu itakaposanidiwa, unaweza kuwasha testnet ya ndani iliyobinafsishwa na kuitumia kuendesha mtiririko sawa wa kazi (upelekaji, majaribio, n.k.) chini ya usanidi mbalimbali wa mtandao ili kuhakikisha kila kitu kinafanya kazi kama inavyotarajiwa. Ili kujifunza zaidi kuhusu vigezo vingine unavyoweza kurekebisha, tembelea kiungo hiki. + +Jaribu! Unaweza kupitisha chaguo mbalimbali za usanidi kwa `eth-network-package` kupitia faili ya JSON. Faili hii ya JSON ya vigezo vya mtandao hutoa usanidi maalum ambao Kurtosis utatumia kusanidi mtandao wa ndani wa Ethereum. + +Chukua faili chaguo-msingi ya usanidi na uihariri ili kuwasha nodi mbili zenye jozi tofauti za EL/CL: + +- Nodi ya 1 na `geth`/`lighthouse` +- Nodi ya 2 na `geth`/`lodestar` +- Nodi ya 3 na `geth`/`teku` + +Usanidi huu unaunda mtandao wenye utekelezaji mchanganyiko wa nodi za Ethereum kwa ajili ya kupima dApp yako. Faili yako ya usanidi sasa inapaswa kuonekana hivi: + +```yaml +{ + "participants": + [ + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "lodestar", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "teku", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + ], + "network_params": + { + "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete", + "num_validator_keys_per_node": 64, + "network_id": "3151908", + "deposit_contract_address": "0x4242424242424242424242424242424242424242", + "seconds_per_slot": 12, + "genesis_delay": 120, + "capella_fork_epoch": 5, + }, +} +``` + +Kila muundo wa `participants` unahusiana na nodi moja katika mtandao, kwa hivyo miundo 3 ya `participants` itaiambia Kurtosis iwashe nodi 3 kwenye mtandao wako. Kila muundo wa `participants` utakuruhusu kubainisha jozi ya EL na CL inayotumika kwa nodi hiyo maalum. + +Muundo wa `network_params` unasanidi mipangilio ya mtandao inayotumika kuunda faili za genesis kwa kila nodi pamoja na mipangilio mingine kama sekunde kwa kila slot ya mtandao. + +Hifadhi faili yako ya vigezo iliyohaririwa katika saraka yoyote unayotaka (katika mfano hapa chini, imehifadhiwa kwenye eneo-kazi) na kisha itumie kuendesha kifurushi chako cha Kurtosis kwa kuendesha: + +```python +kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/kurtosis-tech/eth-network-package \"$(cat ~/eth-network-params.json)\" +``` + +Kumbuka: amri ya `kurtosis clean -a` inatumika hapa kuielekeza Kurtosis kuharibu testnet ya zamani na yaliyomo kabla ya kuanzisha mpya. + +Tena, Kurtosis itafanya kazi kwa muda mfupi na kuchapisha hatua za kibinafsi zinazofanyika. Hatimaye, matokeo yanapaswa kuonekana kama: + +```python +Starlark code successfully run. No output was returned. +INFO[2023-04-07T11:43:16-04:00] ========================================================== +INFO[2023-04-07T11:43:16-04:00] || Created enclave: local-eth-testnet || +INFO[2023-04-07T11:43:16-04:00] ========================================================== +Name: local-eth-testnet +UUID: bef8c192008e +Status: RUNNING +Creation Time: Fri, 07 Apr 2023 11:41:58 EDT + +========================================= Files Artifacts ========================================= +UUID Name +cc495a8e364a cl-genesis-data +7033fcdb5471 el-genesis-data +a3aef43fc738 genesis-generation-config-cl +8e968005fc9d genesis-generation-config-el +3182cca9d3cd geth-prefunded-keys +8421166e234f prysm-password +d9e6e8d44d99 validator-keystore-0 +23f5ba517394 validator-keystore-1 +4d28dea40b5c validator-keystore-2 + +========================================== User Services ========================================== +UUID Name Ports Status +485e6fde55ae cl-client-0-beacon http: 4000/tcp -> http://127.0.0.1:65010 RUNNING + metrics: 5054/tcp -> http://127.0.0.1:65011 + tcp-discovery: 9000/tcp -> 127.0.0.1:65012 + udp-discovery: 9000/udp -> 127.0.0.1:54455 +73739bd158b2 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:65016 RUNNING + metrics: 5064/tcp -> http://127.0.0.1:65017 +1b0a233cd011 cl-client-1-beacon http: 4000/tcp -> 127.0.0.1:65021 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65023 + tcp-discovery: 9000/tcp -> 127.0.0.1:65024 + udp-discovery: 9000/udp -> 127.0.0.1:56031 + validator-metrics: 5064/tcp -> 127.0.0.1:65022 +949b8220cd53 cl-client-1-validator http: 4000/tcp -> 127.0.0.1:65028 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65030 + tcp-discovery: 9000/tcp -> 127.0.0.1:65031 + udp-discovery: 9000/udp -> 127.0.0.1:60784 + validator-metrics: 5064/tcp -> 127.0.0.1:65029 +c34417bea5fa cl-client-2 http: 4000/tcp -> 127.0.0.1:65037 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65035 + tcp-discovery: 9000/tcp -> 127.0.0.1:65036 + udp-discovery: 9000/udp -> 127.0.0.1:63581 +e19738e6329d el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:64986 RUNNING + rpc: 8545/tcp -> 127.0.0.1:64988 + tcp-discovery: 30303/tcp -> 127.0.0.1:64987 + udp-discovery: 30303/udp -> 127.0.0.1:55706 + ws: 8546/tcp -> 127.0.0.1:64989 +e904687449d9 el-client-1 engine-rpc: 8551/tcp -> 127.0.0.1:64993 RUNNING + rpc: 8545/tcp -> 127.0.0.1:64995 + tcp-discovery: 30303/tcp -> 127.0.0.1:64994 + udp-discovery: 30303/udp -> 127.0.0.1:58096 + ws: 8546/tcp -> 127.0.0.1:64996 +ad6f401126fa el-client-2 engine-rpc: 8551/tcp -> 127.0.0.1:65003 RUNNING + rpc: 8545/tcp -> 127.0.0.1:65001 + tcp-discovery: 30303/tcp -> 127.0.0.1:65000 + udp-discovery: 30303/udp -> 127.0.0.1:57269 + ws: 8546/tcp -> 127.0.0.1:65002 +12d04a9dbb69 prelaunch-data-generator-1680882122181135513 STOPPED +5b45f9c0504b prelaunch-data-generator-1680882122192182847 STOPPED +3d4aaa75e218 prelaunch-data-generator-1680882122201668972 STOPPED +``` + +Hongera! Umefanikiwa kusanidi testnet yako ya ndani iwe na nodi 3 badala ya 1. Ili kuendesha mtiririko sawa wa kazi uliofanya hapo awali dhidi ya dApp yako (kupeleka na kupima), fanya shughuli zilezile tulizofanya hapo awali kwa kubadilisha `<$YOUR_PORT>` katika muundo wa `localnet` katika faili yako ya usanidi ya `hardhat.config.ts` na bandari ya matokeo ya rpc uri kutoka huduma yoyote ya `el-client-` katika testnet yako mpya ya ndani yenye nodi 3. + +## Hitimisho {#conclusion} + +Na ndivyo hivyo! Ili kufupisha mwongozo huu mfupi, wewe: + +- Uliunda testnet ya Ethereum ya ndani juu ya Docker ukitumia Kurtosis +- Uliunganisha mazingira yako ya uendelezaji wa dApp ya ndani kwenye mtandao wa Ethereum wa ndani +- Ulipeleka dApp na kuendesha jaribio rahisi dhidi yake kwenye mtandao wa Ethereum wa ndani +- Ulisanidi mtandao wa msingi wa Ethereum uwe na nodi 3 + +Tungependa kusikia kutoka kwako juu ya kile kilichokwenda vizuri kwako, kile kinachoweza kuboreshwa, au kujibu maswali yako yoyote. Usisite kuwasiliana kupitia [GitHub](https://github.com/kurtosis-tech/kurtosis/issues/new/choose) au [tutumie barua pepe](mailto:feedback@kurtosistech.com)! + +### Mifano na miongozo mingine {#other-examples-guides} + +Tunakuhimiza uangalie [mwongozo wetu wa haraka](https://docs.kurtosis.com/quickstart) (ambapo utajenga hifadhidata ya Postgres na API juu yake) na mifano yetu mingine katika [hazina yetu ya awesome-kurtosis](https://github.com/kurtosis-tech/awesome-kurtosis) ambapo utapata mifano mizuri, ikijumuisha vifurushi vya: + +- [Kuwasha testnet ileile ya ndani ya Ethereum](https://github.com/kurtosis-tech/eth2-package), lakini na huduma za ziada zilizounganishwa kama vile mtumaji taka wa miamala (kuiga miamala), kifuatiliaji cha uma, na nakala iliyounganishwa ya Grafana na Prometheus +- Kufanya [jaribio la mtandao-ndogo](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/ethereum-network-partition-test) dhidi ya mtandao uleule wa ndani wa Ethereum diff --git a/public/content/translations/sw/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md b/public/content/translations/sw/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md new file mode 100644 index 00000000000..ee7b7abb423 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md @@ -0,0 +1,144 @@ +--- +title: "Kupunguza ukubwa wa mikataba ili kupambana na kikomo cha ukubwa wa mkataba" +description: Unaweza kufanya nini kuzuia mikataba-erevu yako isiwe mikubwa sana? +author: Markus Waas +lang: sw +tags: [ "uimara", "mikataba erevu", "ghala" ] +skill: intermediate +published: 2020-06-26 +source: soliditydeveloper.com +sourceUrl: https://soliditydeveloper.com/max-contract-size +--- + +## Kwa nini kuna kikomo? {#why-is-there-a-limit} + +Mnamo [Novemba 22, 2016](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon/) uma mgumu wa Spurious Dragon ulianzisha [EIP-170](https://eips.ethereum.org/EIPS/eip-170) ambao uliongeza kikomo cha ukubwa wa mkataba-erevu cha kb 24.576. Kwa wewe kama msanidi programu wa Solidity hii inamaanisha unapoongeza utendaji zaidi na zaidi kwenye mkataba wako, wakati fulani utafikia kikomo na wakati wa kupeleka utaona hitilafu: + +`Onyo: Ukubwa wa msimbo wa Mkataba umezidi baiti 24576 (kikomo kilichoanzishwa katika Spurious Dragon).` Mkataba huu huenda usiweze kupelekwa kwenye Mtandao Mkuu. `Fikiria kuwezesha kiboreshaji (na thamani ndogo ya "runs"!), kuzima jumbe za urejeshaji, au kutumia maktaba.` + +Kikomo hiki kilianzishwa ili kuzuia mashambulizi ya kunyimwa huduma (DOS). Wito wowote kwa mkataba una gharama nafuu kiasi kwa upande wa gesi. Hata hivyo, athari za wito wa mkataba kwa nodi za Ethereum huongezeka isivyo sawia kulingana na ukubwa wa msimbo wa mkataba unaoitwa (kusoma msimbo kutoka kwenye diski, kuchakata msimbo awali, kuongeza data kwenye uthibitisho wa Merkle). Wakati wowote unapokuwa na hali kama hiyo ambapo mshambuliaji anahitaji rasilimali chache kusababisha kazi nyingi kwa wengine, unapata uwezekano wa mashambulizi ya DOS. + +Hapo awali hili halikuwa tatizo kubwa kwa sababu kikomo kimoja cha asili cha ukubwa wa mkataba ni kikomo cha gesi cha bloku. Ni wazi, mkataba lazima upelekwe ndani ya muamala unaoshikilia msimbo baiti wote wa mkataba. Ikiwa utajumuisha muamala huo mmoja tu kwenye bloku, unaweza kutumia gesi yote hiyo, lakini si isiyo na kikomo. Tangu [Sasisho la London](/ethereum-forks/#london), kikomo cha gesi cha bloku kimeweza kubadilika kati ya vitengo milioni 15 na milioni 30 kulingana na mahitaji ya mtandao. + +Katika yafuatayo tutaangalia baadhi ya mbinu zilizopangwa kulingana na athari zake zinazowezekana. Fikiria kuhusu hilo kwa mtazamo wa kupunguza uzito. Mkakati bora kwa mtu kufikia uzito anaolenga (katika hali yetu 24kb) ni kuzingatia mbinu zenye athari kubwa kwanza. Katika visa vingi kurekebisha lishe yako tu kutakufikisha hapo, lakini wakati mwingine unahitaji zaidi kidogo. Kisha unaweza kuongeza mazoezi (athari ya kati) au hata virutubisho (athari ndogo). + +## Athari kubwa {#big-impact} + +### Tenganisha mikataba yako {#separate-your-contracts} + +Hii inapaswa kuwa mbinu yako ya kwanza kila wakati. Unawezaje kutenganisha mkataba katika mikataba midogo mingi? Kwa ujumla inakulazimisha kubuni usanifu mzuri kwa mikataba yako. Mikataba midogo inapendekezwa kila wakati kutoka kwa mtazamo wa usomaji wa msimbo. Kwa ajili ya kugawanya mikataba, jiulize: + +- Ni vitendaji vipi vinavyohusiana? Kila seti ya vitendaji inaweza kuwa bora katika mkataba wake. +- Ni vitendaji vipi ambavyo havihitaji kusoma hali ya mkataba au sehemu ndogo tu ya hali hiyo? +- Unaweza kutenganisha ghala na utendaji? + +### Maktaba {#libraries} + +Njia moja rahisi ya kuhamisha msimbo wa utendaji mbali na ghala ni kutumia [maktaba](https://solidity.readthedocs.io/en/v0.6.10/contracts.html#libraries). Usitangaze vitendaji vya maktaba kama vya ndani kwani vitaongezwa moja kwa moja [kwenye mkataba](https://ethereum.stackexchange.com/questions/12975/are-internal-functions-in-libraries-not-covered-by-linking) wakati wa ukusanyaji. Lakini ukitumia vitendaji vya umma, basi vitakuwa katika mkataba tofauti wa maktaba. Fikiria [kutumia kwa](https://solidity.readthedocs.io/en/v0.6.10/contracts.html#using-for) ili kufanya matumizi ya maktaba yawe rahisi zaidi. + +### Proksi {#proxies} + +Mkakati wa hali ya juu zaidi ungekuwa mfumo wa proksi. Maktaba hutumia `DELEGATECALL` kwa nyuma, ambayo hutekeleza kitendaji cha mkataba mwingine kwa kutumia hali ya mkataba unaoita. Angalia [chapisho hili la blogu](https://hackernoon.com/how-to-make-smart-contracts-upgradable-2612e771d5a2) ili kujifunza zaidi kuhusu mifumo ya proksi. Hukupa utendaji zaidi, k.m., huwezesha uwezo wa kusasishwa, lakini pia huongeza utata mwingi. Singeongeza hizo ili tu kupunguza ukubwa wa mkataba isipokuwa ndiyo chaguo lako pekee kwa sababu yoyote ile. + +## Athari ya kati {#medium-impact} + +### Ondoa vitendaji {#remove-functions} + +Hili linapaswa kuwa dhahiri. Vitendaji huongeza ukubwa wa mkataba kwa kiasi kikubwa. + +- **Nje**: Mara nyingi tunaongeza vitendaji vingi vya kuona kwa sababu za kurahisisha. Hiyo ni sawa kabisa mpaka ufikie kikomo cha ukubwa. Kisha unaweza kutaka kufikiria kweli kuondoa vyote isipokuwa vile vya muhimu kabisa. +- **Ndani**: Unaweza pia kuondoa vitendaji vya ndani/binafsi na kuingiza msimbo moja kwa moja mradi tu kitendaji kinaitwa mara moja tu. + +### Epuka vigezo vya ziada {#avoid-additional-variables} + +```solidity +function get(uint id) returns (address,address) { + MyStruct memory myStruct = myStructs[id]; + return (myStruct.addr1, myStruct.addr2); +} +``` + +```solidity +function get(uint id) returns (address,address) { + return (myStructs[id].addr1, myStructs[id].addr2); +} +``` + +Mabadiliko rahisi kama haya hufanya tofauti ya **0.28kb**. Kuna uwezekano unaweza kupata hali nyingi sawa katika mikataba yako na hizo zinaweza kujumlisha na kuwa kiasi kikubwa. + +### Fupisha ujumbe wa hitilafu {#shorten-error-message} + +Jumbe ndefu za urejeshaji na hasa jumbe nyingi tofauti za urejeshaji zinaweza kufanya mkataba uwe mkubwa. Badala yake tumia misimbo mifupi ya hitilafu na uisimbue katika mkataba wako. Ujumbe mrefu unaweza kuwa mfupi zaidi: + +```solidity +require(msg.sender == owner, "Ni mmiliki wa mkataba huu pekee anayeweza kuita kitendaji hiki"); +``` + +```solidity +require(msg.sender == owner, "OW1"); +``` + +### Tumia hitilafu maalum badala ya jumbe za hitilafu + +Hitilafu maalum zilianzishwa katika [Solidity 0.8.4](https://blog.soliditylang.org/2021/04/21/custom-errors/). Ni njia nzuri ya kupunguza ukubwa wa mikataba yako, kwa sababu zimesimbwa kwa ABI kama viteuzi (kama vile vitendaji vilivyo). + +```solidity +error Unauthorized(); + +if (msg.sender != owner) { + revert Unauthorized(); +} +``` + +### Fikiria thamani ya chini ya 'run' kwenye kiboreshaji {#consider-a-low-run-value-in-the-optimizer} + +Unaweza pia kubadilisha mipangilio ya kiboreshaji. Thamani chaguo-msingi ya 200 inamaanisha kwamba inajaribu kuboresha msimbo baiti kana kwamba kitendaji kinaitwa mara 200. Ukiibadilisha kuwa 1, kimsingi unakiambia kiboreshaji kiboreshe kwa ajili ya hali ya kuendesha kila kitendaji mara moja tu. Kitendaji kilichoboreshwa kwa ajili ya kuendeshwa mara moja tu kinamaanisha kimeboreshwa kwa ajili ya upelekaji wenyewe. Fahamu kwamba **hii huongeza [gharama za gesi](/developers/docs/gas/) za kuendesha vitendaji**, kwa hivyo unaweza usitake kufanya hivyo. + +## Athari ndogo {#small-impact} + +### Epuka kupitisha miundo kwa vitendaji {#avoid-passing-structs-to-functions} + +Ikiwa unatumia [ABIEncoderV2](https://solidity.readthedocs.io/en/v0.6.10/layout-of-source-files.html#abiencoderv2), inaweza kusaidia kutopitisha miundo kwa kitendaji. Badala ya kupitisha kigezo kama muundo, pitisha vigezo vinavyohitajika moja kwa moja. Katika mfano huu tumeokoa **0.1kb** nyingine. + +```solidity +function get(uint id) returns (address,address) { + return _get(myStruct); +} + +function _get(MyStruct memory myStruct) private view returns(address,address) { + return (myStruct.addr1, myStruct.addr2); +} +``` + +```solidity +function get(uint id) returns(address,address) { + return _get(myStructs[id].addr1, myStructs[id].addr2); +} + +function _get(address addr1, address addr2) private view returns(address,address) { + return (addr1, addr2); +} +``` + +### Tangaza mwonekano sahihi kwa vitendaji na vigezo {#declare-correct-visibility-for-functions-and-variables} + +- Vitendaji au vigezo vinavyoitwa kutoka nje tu? Vitangaze kama `external` badala ya `public`. +- Vitendaji au vigezo vinavyoitwa kutoka ndani ya mkataba tu? Vitangaze kama `private` au `internal` badala ya `public`. + +### Ondoa virekebishaji {#remove-modifiers} + +Virekebishaji, hasa vinapotumiwa sana, vinaweza kuwa na athari kubwa kwenye ukubwa wa mkataba. Fikiria kuviondoa na badala yake utumie vitendaji. + +```solidity +modifier checkStuff() {} + +function doSomething() checkStuff {} +``` + +```solidity +function checkStuff() private {} + +function doSomething() { checkStuff(); } +``` + +Dokezo hizo zinapaswa kukusaidia kupunguza kwa kiasi kikubwa ukubwa wa mkataba. Kwa mara nyingine tena, siwezi kusisitiza vya kutosha, daima zingatia kugawanya mikataba ikiwezekana kwa athari kubwa zaidi. diff --git a/public/content/translations/sw/developers/tutorials/eip-1271-smart-contract-signatures/index.md b/public/content/translations/sw/developers/tutorials/eip-1271-smart-contract-signatures/index.md new file mode 100644 index 00000000000..305fb3b04f2 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/eip-1271-smart-contract-signatures/index.md @@ -0,0 +1,129 @@ +--- +title: "EIP-1271: Kusaini na Kuthibitisha Sahihi za Mkataba-erevu" +description: Muhtasari wa uundaji na uthibitishaji wa sahihi za mkataba-erevu kwa kutumia EIP-1271. Pia tunapitia utekelezaji wa EIP-1271 unaotumika katika Safe (awali Gnosis Safe) ili kutoa mfano halisi kwa wasanidi programu wa mkataba-erevu kuutumia kama msingi. +author: Nathan H. Leung +lang: sw +tags: + [ + "eip-1271", + "mikataba erevu", + "kuthibitisha", + "kusaini" + ] +skill: intermediate +published: 2023-01-12 +--- + +Kiwango cha [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) huruhusu mikataba-erevu kuthibitisha sahihi. + +Katika mafunzo haya, tunatoa muhtasari wa sahihi za dijitali, historia ya EIP-1271, na utekelezaji mahususi wa EIP-1271 unaotumiwa na [Safe](https://safe.global/) (awali Gnosis Safe). Kwa pamoja, hii inaweza kutumika kama sehemu ya kuanzia kwa ajili ya kutekeleza EIP-1271 katika mikataba yako mwenyewe. + +## Sahihi ni nini? + +Katika muktadha huu, sahihi (kwa usahihi zaidi, "sahihi ya dijitali") ni ujumbe pamoja na aina fulani ya uthibitisho kwamba ujumbe umetoka kwa mtu/mtumaji/anwani maalum. + +Kwa mfano, sahihi ya dijitali inaweza kuonekana hivi: + +1. Ujumbe: “Nataka kuingia katika tovuti hii kwa kutumia mkoba wangu wa Ethereum.” +2. Msaini: Anwani yangu ni `0x000…` +3. Uthibitisho: Huu ni uthibitisho kwamba mimi, `0x000…`, ndiye niliyeunda ujumbe huu wote (kwa kawaida hii ni kitu cha kroptografia). + +Ni muhimu kuzingatia kwamba sahihi ya dijitali inajumuisha "ujumbe" na "sahihi". + +Kwa nini? Kwa mfano, kama ungenipa mkataba wa kusaini, kisha nikakata ukurasa wa sahihi na kukurejeshea sahihi zangu pekee bila sehemu nyingine ya mkataba, mkataba huo haungekuwa halali. + +Vivyo hivyo, sahihi ya dijitali haina maana yoyote bila ujumbe unaohusiana nayo! + +## Kwa nini EIP-1271 ipo? + +Ili kuunda sahihi ya dijitali kwa matumizi katika blockchain zinazotumia Ethereum, kwa ujumla unahitaji ufunguo binafsi wa siri ambao hakuna mtu mwingine anayejua. Hiki ndicho kinachofanya sahihi yako kuwa yako (hakuna mtu mwingine anayeweza kuunda sahihi sawa bila kujua ufunguo wa siri). + +Akaunti yako ya Ethereum (yaani, akaunti yako inayomilikiwa nje/EOA) ina ufunguo binafsi unaohusishwa nayo, na huu ndio ufunguo binafsi unaotumiwa kwa kawaida wakati tovuti au mfumo mtawanyo wa kimamlaka inakuomba sahihi (k.m., kwa ajili ya “Ingia na Ethereum”). + +Programu inaweza [kuthibitisha sahihi](https://www.alchemy.com/docs/how-to-verify-a-message-signature-on-ethereum) unayounda kwa kutumia maktaba ya wahusika wengine kama ethers.js [bila kujua ufunguo wako binafsi](https://en.wikipedia.org/wiki/Public-key_cryptography) na kuwa na uhakika kwamba _wewe_ ndiye uliyeunda sahihi hiyo. + +> Kwa hakika, kwa sababu sahihi za dijitali za EOA hutumia kroptografia ya ufunguo wa umma, zinaweza kuundwa na kuthibitishwa **nje ya mnyororo**! Hivi ndivyo upigaji kura wa DAO bila gesi unavyofanya kazi — badala ya kuwasilisha kura kwenye mnyororo, sahihi za dijitali zinaweza kuundwa na kuthibitishwa nje ya mnyororo kwa kutumia maktaba za kroptografia. + +Ingawa akaunti za EOA zina ufunguo binafsi, akaunti za mkataba-erevu hazina aina yoyote ya ufunguo binafsi au wa siri (hivyo "Ingia na Ethereum", n.k. haziwezi kufanya kazi moja kwa moja na akaunti za mkataba-erevu). + +Tatizo ambalo EIP-1271 inalenga kutatua: tunawezaje kujua kuwa sahihi ya mkataba-erevu ni halali ikiwa mkataba-erevu hauna “siri” inayoweza kujumuishwa katika sahihi? + +## EIP-1271 inafanyaje kazi? + +Mikataba-erevu haina funguo binafsi zinazoweza kutumika kusaini jumbe. Basi tunawezaje kujua ikiwa sahihi ni halisi? + +Naam, wazo moja ni kwamba tunaweza tu _kuuliza_ mkataba-erevu ikiwa sahihi ni halisi! + +Anachofanya EIP-1271 ni kusawazisha wazo hili la “kuuliza” mkataba-erevu ikiwa sahihi fulani ni halali. + +Mkataba unaotekeleza EIP-1271 lazima uwe na kitendakazi kiitwacho `isValidSignature` ambacho huchukua ujumbe na sahihi. Mkataba unaweza kisha kuendesha mantiki fulani ya uthibitishaji (vipimo havishurutishi kitu chochote maalum hapa) kisha kurudisha thamani inayoonyesha kama sahihi ni halali au la. + +Ikiwa `isValidSignature` inarudisha matokeo halali, hiyo ni sawa na mkataba kusema “ndiyo, naidhinisha sahihi + ujumbe huu!” + +### Kiolesura + +Huu hapa ni muundo kamili katika vipimo vya EIP-1271 (tutazungumzia kigezo cha `_hash` hapo chini, lakini kwa sasa, fikiria kama ni ujumbe unaothibitishwa): + +```jsx +pragma solidity ^0.5.0; + +contract ERC1271 { + + // bytes4(keccak256("isValidSignature(bytes32,bytes)") + bytes4 constant internal MAGICVALUE = 0x1626ba7e; + + /** + * @dev Inapaswa kurudisha iwapo sahihi iliyotolewa ni halali kwa hashi iliyotolewa + * @param _hash Hashi ya data itakayosainiwa + * @param _signature Safu ya baiti za Sahihi inayohusishwa na _hash + * + * LAZIMA irudishe thamani ya uchawi ya bytes4 0x1626ba7e wakati kitendakazi kinafaulu. + * LAZIMA ISIBADILISHE hali (kwa kutumia STATICCALL kwa solc < 0.5, kirekebishaji cha mwonekano kwa solc > 0.5) + * LAZIMA iruhusu wito wa nje + */ + function isValidSignature( + bytes32 _hash, + bytes memory _signature) + public + view + returns (bytes4 magicValue); +} +``` + +## Mfano wa Utekelezaji wa EIP-1271: Safe + +Mikataba inaweza kutekeleza `isValidSignature` kwa njia nyingi — vipimo havisemi mengi kuhusu utekelezaji kamili. + +Mkataba mmoja mashuhuri unaotekeleza EIP-1271 ni Safe (awali Gnosis Safe). + +Katika msimbo wa Safe, `isValidSignature` [imetekelezwa](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol) ili sahihi ziweze kuundwa na kuthibitishwa kwa [njia mbili](https://ethereum.stackexchange.com/questions/122635/signing-messages-as-a-gnosis-safe-eip1271-support): + +1. Ujumbe wa kwenye mnyororo + 1. Uundaji: mmiliki wa safe huunda muamala mpya wa safe ili “kusaini” ujumbe, akipitisha ujumbe kama data kwenye muamala. Mara tu wamiliki wa kutosha wanaposaini muamala kufikia kizingiti cha multisig, muamala hutangazwa na kuendeshwa. Katika muamala, kuna kitendakazi cha safe kiitwacho (`signMessage(bytes calldata _data)`) ambacho huongeza ujumbe kwenye orodha ya jumbe “zilizoidhinishwa”. + 2. Uthibitishaji: ita `isValidSignature` kwenye mkataba wa Safe, na kupitisha ujumbe wa kuthibitisha kama kigezo cha ujumbe na [thamani tupu kwa kigezo cha sahihi](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol#L32) (yaani, `0x`). Safe itaona kuwa kigezo cha sahihi ni tupu na badala ya kuthibitisha sahihi kwa njia ya kroptografia, itajua kuendelea na kuangalia ikiwa ujumbe upo kwenye orodha ya jumbe “zilizoidhinishwa”. +2. Jumbe za nje ya mnyororo: + 1. Uundaji: mmiliki wa safe huunda ujumbe nje ya mnyororo, kisha anawapata wamiliki wengine wa safe kusaini ujumbe huo kila mmoja kivyake hadi kuwe na sahihi za kutosha kuvuka kizingiti cha idhini ya multisig. + 2. Uthibitishaji: ita `isValidSignature`. Katika kigezo cha ujumbe, pitisha ujumbe wa kuthibitishwa. Katika kigezo cha sahihi, pitisha sahihi za kila mmiliki wa safe zikiwa zimeunganishwa pamoja, moja baada ya nyingine. Safe itaangalia kuwa kuna sahihi za kutosha kufikia kizingiti **na** kwamba kila sahihi ni halali. Ikiwa ndivyo, itarudisha thamani inayoonyesha uthibitishaji uliofaulu wa sahihi. + +## Kigezo cha `_hash` ni nini hasa? Kwa nini usipitishe ujumbe wote? + +Huenda umegundua kwamba kitendakazi cha `isValidSignature` katika [muundo wa EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) hakichukui ujumbe wenyewe, bali kigezo cha `_hash`. Hii inamaanisha kuwa badala ya kupitisha ujumbe kamili wa urefu wowote kwa `isValidSignature`, badala yake tunapitisha hashi ya baiti 32 ya ujumbe (kwa ujumla keccak256). + +Kila baiti ya calldata — yaani, data ya kigezo cha kitendakazi inayopitishwa kwa kitendakazi cha mkataba-erevu — [hugharimu gesi 16 (gesi 4 ikiwa ni baiti ya sifuri)](https://eips.ethereum.org/EIPS/eip-2028), hivyo hii inaweza kuokoa gesi nyingi ikiwa ujumbe ni mrefu. + +### Vipimo vya Awali vya EIP-1271 + +Kuna vipimo vya EIP-1271 vinavyotumika ambavyo vina kitendakazi cha `isValidSignature` chenye kigezo cha kwanza cha aina ya `bytes` (urefu wowote, badala ya urefu usiobadilika wa `bytes32`) na jina la kigezo `message`. Hili ni [toleo la zamani](https://github.com/safe-global/safe-contracts/issues/391#issuecomment-1075427206) la kiwango cha EIP-1271. + +## EIP-1271 inapaswa kutekelezwa vipi katika mikataba yangu mwenyewe? + +Vipimo havina masharti mengi hapa. Utekelezaji wa Safe una mawazo mazuri: + +- Unaweza kuzingatia sahihi za EOA kutoka kwa "mmiliki" wa mkataba kuwa halali. +- Unaweza kuhifadhi orodha ya jumbe zilizoidhinishwa na kuzingatia hizo tu kuwa halali. + +Mwishowe, ni juu yako kama msanidi programu wa mkataba! + +## Hitimisho + +[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) ni kiwango chenye matumizi mengi kinachoruhusu mikataba-erevu kuthibitisha sahihi. Inafungua mlango kwa mikataba-erevu kufanya kazi zaidi kama EOA — kwa mfano kutoa njia ya "Ingia na Ethereum" kufanya kazi na mikataba-erevu — na inaweza kutekelezwa kwa njia nyingi (Safe ikiwa na utekelezaji usio rahisi na wa kuvutia kuzingatia). diff --git a/public/content/translations/sw/developers/tutorials/erc-721-vyper-annotated-code/index.md b/public/content/translations/sw/developers/tutorials/erc-721-vyper-annotated-code/index.md new file mode 100644 index 00000000000..097336dd829 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/erc-721-vyper-annotated-code/index.md @@ -0,0 +1,715 @@ +--- +title: "Mwongozo wa Mkataba wa ERC-721 wa Vyper" +description: Mkataba wa ERC-721 wa Ryuya Nakamura na jinsi unavyofanya kazi +author: Ori Pomerantz +lang: sw +tags: [ "vyper", "erc-721", "python" ] +skill: beginner +published: 2021-04-01 +--- + +## Utangulizi {#introduction} + +Kiwango cha [ERC-721](/developers/docs/standards/tokens/erc-721/) kinatumika kushikilia umiliki wa Tokeni Zisizobadilishika (NFT). +Tokeni za [ERC-20](/developers/docs/standards/tokens/erc-20/) hufanya kazi kama bidhaa, kwa sababu hakuna tofauti kati ya tokeni binafsi. +Tofauti na hiyo, tokeni za ERC-721 zimeundwa kwa ajili ya mali zinazofanana lakini si sawa, kama vile katuni +za paka tofauti +au hati miliki za vipande tofauti vya mali isiyohamishika. + +Katika makala haya tutachambua [mkataba wa ERC-721 wa Ryuya Nakamura](https://github.com/vyperlang/vyper/blob/master/examples/tokens/ERC721.vy). +Mkataba huu umeandikwa kwa [Vyper](https://vyper.readthedocs.io/en/latest/index.html), lugha ya mkataba inayofanana na Python iliyoundwa ili iwe +vigumu zaidi kuandika msimbo usio salama kuliko ilivyo katika Solidity. + +## Mkataba {#contract} + +```python +# @dev Utekelezaji wa kiwango cha tokeni isiyobadilishika ya ERC-721. +# @author Ryuya Nakamura (@nrryuya) +# Imebadilishwa kutoka: https://github.com/vyperlang/vyper/blob/de74722bf2d8718cca46902be165f9fe0e3641dd/examples/tokens/ERC721.vy +``` + +Maoni katika Vyper, kama ilivyo katika Python, huanza na alama ya reli (`#`) na kuendelea hadi mwisho wa mstari. Maoni yanayojumuisha +`@` hutumiwa na [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) kuzalisha nyaraka +zinazoweza kusomwa na binadamu. + +```python +from vyper.interfaces import ERC721 + +implements: ERC721 +``` + +Kiolesura cha ERC-721 kimejengewa ndani ya lugha ya Vyper. +[Unaweza kuona ufafanuzi wa msimbo hapa](https://github.com/vyperlang/vyper/blob/master/vyper/builtin_interfaces/ERC721.py). +Ufafanuzi wa kiolesura umeandikwa kwa Python, badala ya Vyper, kwa sababu violesura hutumika si tu ndani ya +mnyororo wa bloku, bali pia wakati wa kutuma muamala kwenye mnyororo wa bloku kutoka kwa wateja wa nje, ambao unaweza kuandikwa kwa +Python. + +Mstari wa kwanza huingiza kiolesura, na wa pili unabainisha kuwa tunakitekeleza hapa. + +### Kiolesura cha ERC721Receiver {#receiver-interface} + +```python +# Kiolesura cha mkataba unaoitwa na safeTransferFrom() +interface ERC721Receiver: + def onERC721Received( +``` + +ERC-721 inasaidia aina mbili za uhamishaji: + +- `transferFrom`, ambayo inamruhusu mtumaji kubainisha anwani yoyote ya marudio na kuweka jukumu + la uhamishaji kwa mtumaji. Hii ina maana kwamba unaweza kuhamisha kwenda anwani batili, ambapo + NFT inapotea kabisa. +- `safeTransferFrom`, ambayo huangalia kama anwani ya marudio ni mkataba. Ikiwa ndivyo, mkataba wa ERC-721 + huuliza mkataba mpokeaji kama unataka kupokea NFT. + +Ili kujibu maombi ya `safeTransferFrom`, mkataba mpokeaji unapaswa kutekeleza `ERC721Receiver`. + +```python + _operator: address, + _from: address, +``` + +Anwani ya `_from` ni mmiliki wa sasa wa tokeni. Anwani ya `_operator` ndiyo +iliyoitisha uhamishaji (hizi mbili zinaweza zisiwe sawa, kwa sababu ya posho). + +```python + _tokenId: uint256, +``` + +Vitambulisho vya tokeni za ERC-721 vina biti 256. Kwa kawaida huundwa kwa kuhashi maelezo ya chochote +kinachowakilishwa na tokeni. + +```python + _data: Bytes[1024] +``` + +Ombi linaweza kuwa na baiti hadi 1024 za data ya mtumiaji. + +```python + ) -> bytes32: view +``` + +Ili kuzuia visa ambapo mkataba unakubali uhamishaji kimakosa, thamani ya kurejesha si ya Boolean, +bali ni biti 256 zenye thamani maalum. + +Kazi hii ni `view`, ambayo ina maana inaweza kusoma hali ya mnyororo wa bloku, lakini si kuibadilisha. + +### Matukio {#events} + +[Matukio](https://media.consensys.net/technical-introduction-to-events-and-logs-in-ethereum-a074d65dd61e) +hutolewa ili kuwajulisha watumiaji na seva zilizo nje ya mnyororo wa bloku kuhusu matukio. Kumbuka kwamba maudhui ya matukio +hayapatikani kwa mikataba kwenye mnyororo wa bloku. + +```python +# @dev Hutoa wakati umiliki wa NFT yoyote unapobadilika kwa utaratibu wowote. Tukio hili hutolewa wakati NFTs +# zinapoundwa (`from` == 0) na kuharibiwa (`to` == 0). Isipokuwa: wakati wa uundaji wa mkataba, idadi +# yoyote ya NFT inaweza kuundwa na kugawiwa bila kutoa Transfer. Wakati wa uhamishaji +# wowote, anwani iliyoidhinishwa kwa NFT hiyo (ikiwa ipo) huwekwa upya kuwa hakuna. +# @param _from Mtumaji wa NFT (kama anwani ni anwani sifuri inaashiria uundaji wa tokeni). +# @param _to Mpokeaji wa NFT (kama anwani ni anwani sifuri inaashiria uharibifu wa tokeni). +# @param _tokenId NFT iliyohamishwa. +event Transfer: + sender: indexed(address) + receiver: indexed(address) + tokenId: indexed(uint256) +``` + +Hili ni sawa na tukio la Uhamishaji wa ERC-20, isipokuwa kwamba tunaripoti `tokenId` badala ya kiasi. +Hakuna anayemiliki anwani sifuri, kwa hivyo kwa kawaida tunaitumia kuripoti uundaji na uharibifu wa tokeni. + +```python +# @dev Hii hutolewa wakati anwani iliyoidhinishwa kwa NFT inapobadilishwa au kuthibitishwa tena. Anwani sifuri +# inaonyesha hakuna anwani iliyoidhinishwa. Tukio la Uhamishaji linapotolewa, hii pia +# inaonyesha kwamba anwani iliyoidhinishwa kwa NFT hiyo (ikiwa ipo) huwekwa upya kuwa hakuna. +# @param _owner Mmiliki wa NFT. +# @param _approved Anwani tunayoidhinisha. +# @param _tokenId NFT tunayoidhinisha. +event Approval: + owner: indexed(address) + approved: indexed(address) + tokenId: indexed(uint256) +``` + +Idhini ya ERC-721 inafanana na posho ya ERC-20. Anwani maalum inaruhusiwa kuhamisha tokeni +maalum. Hii inatoa utaratibu kwa mikataba kujibu wanapokubali tokeni. Mikataba haiwezi +kusikiliza matukio, kwa hivyo ukihamisha tokeni kwao tu "hawajui" kuihusu. Kwa njia hii, +mmiliki kwanza huwasilisha idhini kisha hutuma ombi kwa mkataba: "Nimekuidhinisha uhamishe tokeni +X, tafadhali fanya ...". + +Hii ni chaguo la muundo ili kufanya kiwango cha ERC-721 kifanane na kiwango cha ERC-20. Kwa sababu +tokeni za ERC-721 hazibadiliki, mkataba unaweza pia kutambua kuwa umepata tokeni maalum kwa +kuangalia umiliki wa tokeni. + +```python +# @dev Hii hutolewa wakati mwendeshaji anapowezeshwa au kuzimwa kwa mmiliki. Mwendeshaji anaweza kusimamia +# NFT zote za mmiliki. +# @param _owner Mmiliki wa NFT. +# @param _operator Anwani ambayo tunaweka haki za mwendeshaji. +# @param _approved Hali ya haki za mwendeshaji (kweli ikiwa haki za mwendeshaji zimetolewa na uongo ikiwa +# zimefutwa). +event ApprovalForAll: + owner: indexed(address) + operator: indexed(address) + approved: bool +``` + +Wakati mwingine ni muhimu kuwa na _operator_ anayeweza kusimamia tokeni zote za akaunti za aina fulani (zile zinazosimamiwa na +mkataba maalum), sawa na mamlaka ya uwakili. Kwa mfano, ninaweza kutaka kutoa mamlaka kama hayo kwa mkataba unaoangalia ikiwa +sijauwasiliana nao kwa miezi sita, na ikiwa ni hivyo unagawanya mali zangu kwa warithi wangu (kama mmoja wao ataomba, mikataba +haiwezi kufanya chochote bila kuitwa na muamala). Katika ERC-20 tunaweza kutoa posho kubwa kwa mkataba wa urithi, +lakini hilo halifanyi kazi kwa ERC-721 kwa sababu tokeni hazibadiliki. Hii ni sawa na hiyo. + +Thamani ya `approved` inatuambia kama tukio ni la idhini, au uondoaji wa idhini. + +### Vigezo vya Hali {#state-vars} + +Vigezo hivi vina hali ya sasa ya tokeni: ni zipi zinapatikana na nani anazimiliki. Nyingi za hizi +ni vitu vya `HashMap`, [ramani za mwelekeo mmoja ambazo zipo kati ya aina mbili](https://vyper.readthedocs.io/en/latest/types.html#mappings). + +```python +# @dev Ramani kutoka kitambulisho cha NFT kwenda kwenye anwani inayomiliki. +idToOwner: HashMap[uint256, address] + +# @dev Ramani kutoka kitambulisho cha NFT kwenda kwenye anwani iliyoidhinishwa. +idToApprovals: HashMap[uint256, address] +``` + +Utambulisho wa watumiaji na mikataba katika Ethereum unawakilishwa na anwani za biti 160. Vigezo hivi viwili vinapanga ramani +kutoka vitambulisho vya tokeni kwenda kwa wamiliki wao na wale walioidhinishwa kuzihamisha (kwa kiwango cha juu cha mmoja kwa kila moja). Katika Ethereum, +data ambayo haijaanziwa huwa ni sifuri, kwa hivyo kama hakuna mmiliki au mhamishaji aliyeidhinishwa, thamani ya tokeni hiyo +ni sifuri. + +```python +# @dev Ramani kutoka anwani ya mmiliki kwenda kwenye hesabu ya tokeni zake. +ownerToNFTokenCount: HashMap[address, uint256] +``` + +Kigezo hiki kinashikilia hesabu ya tokeni kwa kila mmiliki. Hakuna ramani kutoka kwa wamiliki kwenda kwenye tokeni, kwa hivyo +njia pekee ya kutambua tokeni ambazo mmiliki maalum anamiliki ni kuangalia nyuma katika historia ya matukio ya mnyororo wa bloku +na kuona matukio sahihi ya `Transfer`. Tunaweza kutumia kigezo hiki kujua wakati tuna NFT zote na hatuhitaji +kuangalia mbele zaidi kwa wakati. + +Kumbuka kuwa kanuni hii inafanya kazi tu kwa violesura vya mtumiaji na seva za nje. Msimbo unaoendeshwa kwenye mnyororo wa bloku +wenyewe hauwezi kusoma matukio yaliyopita. + +```python +# @dev Ramani kutoka anwani ya mmiliki kwenda kwenye ramani ya anwani za waendeshaji. +ownerToOperators: HashMap[address, HashMap[address, bool]] +``` + +Akaunti inaweza kuwa na mwendeshaji zaidi ya mmoja. `HashMap` rahisi haitoshi +kufuatilia, kwa sababu kila ufunguo unaelekea kwenye thamani moja. Badala yake, unaweza kutumia +`HashMap[address, bool]` kama thamani. Kwa chaguo-msingi, thamani kwa kila anwani ni `Uongo`, ambayo ina maana +si mwendeshaji. Unaweza kuweka thamani kuwa `Kweli` inapohitajika. + +```python +# @dev Anwani ya mchapaji, anayeweza kuchapa tokeni +minter: address +``` + +Tokeni mpya zinapaswa kuundwa kwa namna fulani. Katika mkataba huu kuna huluki moja tu inayoruhusiwa kufanya hivyo, yaani +`minter`. Hii inawezekana kutosha kwa mchezo, kwa mfano. Kwa madhumuni mengine, inaweza kuwa muhimu +kuunda mantiki ya biashara ngumu zaidi. + +```python +# @dev Ramani ya kitambulisho cha kiolesura kwenda kwa bool kuhusu kama inasaidiwa au la +supportedInterfaces: HashMap[bytes32, bool] + +# @dev Kitambulisho cha kiolesura cha ERC165 cha ERC165 +ERC165_INTERFACE_ID: constant(bytes32) = 0x0000000000000000000000000000000000000000000000000000000001ffc9a7 + +# @dev Kitambulisho cha kiolesura cha ERC165 cha ERC721 +ERC721_INTERFACE_ID: constant(bytes32) = 0x0000000000000000000000000000000000000000000000000000000080ac58cd +``` + +[ERC-165](https://eips.ethereum.org/EIPS/eip-165) inabainisha utaratibu kwa mkataba kufichua jinsi programu +zinavyoweza kuwasiliana nayo, na ni ERC zipi inazoendana nazo. Katika kesi hii, mkataba unaendana na ERC-165 na ERC-721. + +### Kazi {#functions} + +Hizi ni kazi zinazotekeleza ERC-721. + +#### Kiunda {#constructor} + +```python +@external +def __init__(): +``` + +Katika Vyper, kama ilivyo katika Python, kazi ya kiunda inaitwa `__init__`. + +```python + """ + @dev Kiunda cha mkataba. + """ +``` + +Katika Python, na katika Vyper, unaweza pia kuunda maoni kwa kubainisha mfuatano wa mistari mingi (unaoanza na kumalizika +kwa `"""`), na usiutumie kwa njia yoyote. Maoni haya pia yanaweza kujumuisha +[NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html). + +```python + self.supportedInterfaces[ERC165_INTERFACE_ID] = True + self.supportedInterfaces[ERC721_INTERFACE_ID] = True + self.minter = msg.sender +``` + +Ili kufikia vigezo vya hali unatumia `self.` (tena, sawa na katika Python). + +#### Kazi za Kuangalia {#views} + +Hizi ni kazi ambazo hazibadilishi hali ya mnyororo wa bloku, na kwa hivyo zinaweza kutekelezwa +bure zikiitwa kutoka nje. Ikiwa kazi za kuangalia zinaitwa na mkataba, bado zinapaswa kutekelezwa kwenye +kila nodi na kwa hivyo hugharimu gesi. + +```python +@view +@external +``` + +Maneno haya muhimu kabla ya ufafanuzi wa kazi ambayo huanza na ishara ya at (`@`) huitwa _mapambo_. Zinabainisha +hali ambazo kazi inaweza kuitwa. + +- `@view` inabainisha kuwa kazi hii ni ya kuangalia. +- `@external` inabainisha kuwa kazi hii maalum inaweza kuitwa na miamala na kwa mikataba mingine. + +```python +def supportsInterface(_interfaceID: bytes32) -> bool: +``` + +Tofauti na Python, Vyper ni [lugha ya aina tuli](https://wikipedia.org/wiki/Type_system#Static_type_checking). +Huwezi kutangaza kigezo, au kigezo cha kazi, bila kutambua [aina ya data](https://vyper.readthedocs.io/en/latest/types.html). Katika kesi hii, kigezo cha kuingiza ni `bytes32`, thamani ya biti 256 +(biti 256 ndio ukubwa wa neno la asili la [Mashine Halisi ya Ethereum](/developers/docs/evm/)). Toleo ni thamani ya +boolean. Kwa kawaida, majina ya vigezo vya kazi huanza na alama ya chini (`_`). + +```python + """ + @dev Utambulisho wa kiolesura umebainishwa katika ERC-165. + @param _interfaceID Kitambulisho cha kiolesura + """ + return self.supportedInterfaces[_interfaceID] +``` + +Rejesha thamani kutoka kwenye HashMap ya `self.supportedInterfaces`, ambayo imewekwa katika kiunda (`__init__`). + +```python +### KAZI ZA KUANGALIA ### +``` + +Hizi ni kazi za kuangalia ambazo hufanya habari kuhusu tokeni zipatikane kwa watumiaji na mikataba mingine. + +```python +@view +@external +def balanceOf(_owner: address) -> uint256: + """ + @dev Inarejesha idadi ya NFT zinazomilikiwa na `_owner`. + Hutoa kosa ikiwa `_owner` ni anwani sifuri. NFT zilizogawiwa kwa anwani sifuri huchukuliwa kuwa batili. + @param _owner Anwani ambayo itauliziwa salio. + """ + assert _owner != ZERO_ADDRESS +``` + +Mstari huu [unathibitisha](https://vyper.readthedocs.io/en/latest/statements.html#assert) kuwa `_owner` si +sifuri. Ikiwa ni hivyo, kuna kosa na operesheni inarejeshwa nyuma. + +```python + return self.ownerToNFTokenCount[_owner] + +@view +@external +def ownerOf(_tokenId: uint256) -> address: + """ + @dev Inarejesha anwani ya mmiliki wa NFT. + Hutoa kosa ikiwa `_tokenId` si NFT halali. + @param _tokenId Kitambulisho cha NFT. + """ + owner: address = self.idToOwner[_tokenId] + # Hutoa kosa ikiwa `_tokenId` si NFT halali + assert owner != ZERO_ADDRESS + return owner +``` + +Katika Mashine Halisi ya Ethereum (evm) hifadhi yoyote ambayo haina thamani iliyohifadhiwa ndani yake ni sifuri. +Ikiwa hakuna tokeni kwenye `_tokenId` basi thamani ya `self.idToOwner[_tokenId]` ni sifuri. Katika kesi +hiyo, kazi inarejeshwa nyuma. + +```python +@view +@external +def getApproved(_tokenId: uint256) -> address: + """ + @dev Pata anwani iliyoidhinishwa kwa NFT moja. + Hutoa kosa ikiwa `_tokenId` si NFT halali. + @param _tokenId Kitambulisho cha NFT cha kuulizia idhini yake. + """ + # Hutoa kosa ikiwa `_tokenId` si NFT halali + assert self.idToOwner[_tokenId] != ZERO_ADDRESS + return self.idToApprovals[_tokenId] +``` + +Kumbuka kuwa `getApproved` _inaweza_ kurejesha sifuri. Ikiwa tokeni ni halali, inarejesha `self.idToApprovals[_tokenId]`. +Ikiwa hakuna muidhinishaji, thamani hiyo ni sifuri. + +```python +@view +@external +def isApprovedForAll(_owner: address, _operator: address) -> bool: + """ + @dev Inaangalia kama `_operator` ni mwendeshaji aliyeidhinishwa kwa `_owner`. + @param _owner Anwani inayomiliki NFT. + @param _operator Anwani inayofanya kazi kwa niaba ya mmiliki. + """ + return (self.ownerToOperators[_owner])[_operator] +``` + +Kazi hii inaangalia kama `_operator` anaruhusiwa kusimamia tokeni zote za `_owner` katika mkataba huu. +Kwa sababu kunaweza kuwa na waendeshaji wengi, hii ni HashMap ya viwango viwili. + +#### Kazi Saidizi za Uhamishaji {#transfer-helpers} + +Kazi hizi zinatekeleza operesheni ambazo ni sehemu ya kuhamisha au kusimamia tokeni. + +```python + +### KAZI SAIDIZI ZA KAZI ZA UHAMISHAJI ### + +@view +@internal +``` + +Mapambo haya, `@internal`, inamaanisha kuwa kazi inapatikana tu kutoka kwa kazi zingine ndani ya +mkataba uleule. Kwa kawaida, majina ya kazi hizi pia huanza na alama ya chini (`_`). + +```python +def _isApprovedOrOwner(_spender: address, _tokenId: uint256) -> bool: + """ + @dev Inarejesha kama mtumiaji aliyetajwa anaweza kuhamisha kitambulisho cha tokeni kilichotajwa + @param spender anwani ya mtumiaji wa kuulizia + @param tokenId kitambulisho cha uint256 cha tokeni ya kuhamishwa + @return bool kama msg.sender ameidhinishwa kwa kitambulisho cha tokeni kilichotajwa, + ni mwendeshaji wa mmiliki, au ni mmiliki wa tokeni + """ + owner: address = self.idToOwner[_tokenId] + spenderIsOwner: bool = owner == _spender + spenderIsApproved: bool = _spender == self.idToApprovals[_tokenId] + spenderIsApprovedForAll: bool = (self.ownerToOperators[owner])[_spender] + return (spenderIsOwner or spenderIsApproved) or spenderIsApprovedForAll +``` + +Kuna njia tatu ambazo anwani inaweza kuruhusiwa kuhamisha tokeni: + +1. Anwani ni mmiliki wa tokeni +2. Anwani imehidhinishwa kutumia tokeni hiyo +3. Anwani ni mwendeshaji wa mmiliki wa tokeni + +Kazi iliyo hapo juu inaweza kuwa ya kuangalia kwa sababu haibadilishi hali. Ili kupunguza gharama za uendeshaji, kazi +yoyote ambayo _inaweza_ kuwa ya kuangalia _inapaswa_ kuwa ya kuangalia. + +```python +@internal +def _addTokenTo(_to: address, _tokenId: uint256): + """ + @dev Ongeza NFT kwenye anwani iliyotajwa + Hutoa kosa ikiwa `_tokenId` inamilikiwa na mtu. + """ + # Hutoa kosa ikiwa `_tokenId` inamilikiwa na mtu + assert self.idToOwner[_tokenId] == ZERO_ADDRESS + # Badilisha mmiliki + self.idToOwner[_tokenId] = _to + # Badilisha ufuatiliaji wa hesabu + self.ownerToNFTokenCount[_to] += 1 + + +@internal +def _removeTokenFrom(_from: address, _tokenId: uint256): + """ + @dev Ondoa NFT kutoka kwa anwani iliyotajwa + Hutoa kosa ikiwa `_from` si mmiliki wa sasa. + """ + # Hutoa kosa ikiwa `_from` si mmiliki wa sasa + assert self.idToOwner[_tokenId] == _from + # Badilisha mmiliki + self.idToOwner[_tokenId] = ZERO_ADDRESS + # Badilisha ufuatiliaji wa hesabu + self.ownerToNFTokenCount[_from] -= 1 +``` + +Kunapokuwa na tatizo na uhamishaji, tunarejesha wito nyuma. + +```python +@internal +def _clearApproval(_owner: address, _tokenId: uint256): + """ + @dev Futa idhini ya anwani iliyotajwa + Hutoa kosa ikiwa `_owner` si mmiliki wa sasa. + """ + # Hutoa kosa ikiwa `_owner` si mmiliki wa sasa + assert self.idToOwner[_tokenId] == _owner + if self.idToApprovals[_tokenId] != ZERO_ADDRESS: + # Weka upya idhini + self.idToApprovals[_tokenId] = ZERO_ADDRESS +``` + +Badilisha tu thamani ikiwa ni lazima. Vigezo vya hali huishi kwenye hifadhi. Kuandika kwenye hifadhi ni +mojawapo ya operesheni ghali zaidi ambayo EVM (Mashine Halisi ya Ethereum) hufanya (kwa upande wa +[gesi](/developers/docs/gas/)). Kwa hivyo, ni wazo zuri kuipunguza, hata kuandika +thamani iliyopo kuna gharama kubwa. + +```python +@internal +def _transferFrom(_from: address, _to: address, _tokenId: uint256, _sender: address): + """ + @dev Tekeleza uhamishaji wa NFT. + Hutoa kosa isipokuwa `msg.sender` ni mmiliki wa sasa, mwendeshaji aliyeidhinishwa, au anwani + iliyoidhinishwa kwa NFT hii. (KUMBUKA: `msg.sender` hairuhusiwi katika kazi ya faragha kwa hivyo pitisha `_sender`.) + Hutoa kosa ikiwa `_to` ni anwani sifuri. + Hutoa kosa ikiwa `_from` si mmiliki wa sasa. + Hutoa kosa ikiwa `_tokenId` si NFT halali. + """ +``` + +Tuna kazi hii ya ndani kwa sababu kuna njia mbili za kuhamisha tokeni (kawaida na salama), lakini +tunataka eneo moja tu katika msimbo ambapo tunafanya hivyo ili kurahisisha ukaguzi. + +```python + # Angalia mahitaji + assert self._isApprovedOrOwner(_sender, _tokenId) + # Hutoa kosa ikiwa `_to` ni anwani sifuri + assert _to != ZERO_ADDRESS + # Futa idhini. Hutoa kosa ikiwa `_from` si mmiliki wa sasa + self._clearApproval(_from, _tokenId) + # Ondoa NFT. Hutoa kosa ikiwa `_tokenId` si NFT halali + self._removeTokenFrom(_from, _tokenId) + # Ongeza NFT + self._addTokenTo(_to, _tokenId) + # Ingiza uhamishaji kwenye kumbukumbu + log Transfer(_from, _to, _tokenId) +``` + +Ili kutoa tukio katika Vyper unatumia taarifa ya `log` ([ona hapa kwa maelezo zaidi](https://vyper.readthedocs.io/en/latest/event-logging.html#event-logging)). + +#### Kazi za Uhamishaji {#transfer-funs} + +```python + +### KAZI ZA UHAMISHAJI ### + +@external +def transferFrom(_from: address, _to: address, _tokenId: uint256): + """ + @dev Hutoa kosa isipokuwa `msg.sender` ni mmiliki wa sasa, mwendeshaji aliyeidhinishwa, au anwani + iliyoidhinishwa kwa NFT hii. + Hutoa kosa ikiwa `_from` si mmiliki wa sasa. + Hutoa kosa ikiwa `_to` ni anwani sifuri. + Hutoa kosa ikiwa `_tokenId` si NFT halali. + @notice Mwitaji anawajibika kuthibitisha kuwa `_to` ina uwezo wa kupokea NFT, vinginevyo + zinaweza kupotea kabisa. + @param _from Mmiliki wa sasa wa NFT. + @param _to Mmiliki mpya. + @param _tokenId NFT ya kuhamisha. + """ + self._transferFrom(_from, _to, _tokenId, msg.sender) +``` + +Kazi hii inakuwezesha kuhamisha kwenda kwenye anwani yoyote. Isipokuwa anwani ni ya mtumiaji, au mkataba ambao +unajua jinsi ya kuhamisha tokeni, tokeni yoyote utakayohamisha itakwama kwenye anwani hiyo na kuwa isiyofaa. + +```python +@external +def safeTransferFrom( + _from: address, + _to: address, + _tokenId: uint256, + _data: Bytes[1024]=b"" + ): + """ + @dev Huhamisha umiliki wa NFT kutoka anwani moja kwenda nyingine. + Hutoa kosa isipokuwa `msg.sender` ni mmiliki wa sasa, mwendeshaji aliyeidhinishwa, au anwani + iliyoidhinishwa kwa NFT hii. + Hutoa kosa ikiwa `_from` si mmiliki wa sasa. + Hutoa kosa ikiwa `_to` ni anwani sifuri. + Hutoa kosa ikiwa `_tokenId` si NFT halali. + Ikiwa `_to` ni mkataba-erevu, inaita `onERC721Received` kwenye `_to` na hutoa kosa ikiwa + thamani ya kurejesha si `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. + KUMBUKA: bytes4 inawakilishwa na bytes32 na padding + @param _from Mmiliki wa sasa wa NFT. + @param _to Mmiliki mpya. + @param _tokenId NFT ya kuhamisha. + @param _data Data ya ziada bila umbizo maalum, iliyotumwa kwenye wito kwa `_to`. + """ + self._transferFrom(_from, _to, _tokenId, msg.sender) +``` + +Ni sawa kufanya uhamishaji kwanza kwa sababu ikiwa kuna tatizo tutarejesha nyuma hata hivyo, +kwa hivyo kila kitu kilichofanywa kwenye wito kitaghairishwa. + +```python + if _to.is_contract: # angalia kama `_to` ni anwani ya mkataba +``` + +Kwanza angalia kuona kama anwani ni mkataba (kama ina msimbo). Kama sivyo, chukulia ni anwani ya +mtumiaji na mtumiaji ataweza kutumia tokeni au kuihamisha. Lakini usiruhusu ikudanganye +katika hisia za uongo za usalama. Unaweza kupoteza tokeni, hata kwa `safeTransferFrom`, ukizihamisha +kwenda anwani ambayo hakuna anayejua ufunguo wake binafsi. + +```python + returnValue: bytes32 = ERC721Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) +``` + +Piga simu mkataba lengwa kuona kama unaweza kupokea tokeni za ERC-721. + +```python + # Hutoa kosa ikiwa marudio ya uhamishaji ni mkataba ambao hautekelezi 'onERC721Received' + assert returnValue == method_id("onERC721Received(address,address,uint256,bytes)", output_type=bytes32) +``` + +Ikiwa marudio ni mkataba, lakini ambao haukubali tokeni za ERC-721 (au ambao umeamua kutokubali uhamishaji huu +maalum), rejeshwa nyuma. + +```python +@external +def approve(_approved: address, _tokenId: uint256): + """ + @dev Weka au thibitisha tena anwani iliyoidhinishwa kwa NFT. Anwani sifuri inaonyesha hakuna anwani iliyoidhinishwa. + Hutoa kosa isipokuwa `msg.sender` ni mmiliki wa sasa wa NFT, au mwendeshaji aliyeidhinishwa wa mmiliki wa sasa. + Hutoa kosa ikiwa `_tokenId` si NFT halali. (KUMBUKA: Hii haijaandikwa kwenye EIP) + Hutoa kosa ikiwa `_approved` ni mmiliki wa sasa. (KUMBUKA: Hii haijaandikwa kwenye EIP) + @param _approved Anwani ya kuidhinishwa kwa kitambulisho cha NFT kilichotajwa. + @param _tokenId Kitambulisho cha tokeni ya kuidhinishwa. + """ + owner: address = self.idToOwner[_tokenId] + # Hutoa kosa ikiwa `_tokenId` si NFT halali + assert owner != ZERO_ADDRESS + # Hutoa kosa ikiwa `_approved` ni mmiliki wa sasa + assert _approved != owner +``` + +Kwa kawaida, ikiwa hutaki kuwa na muidhinishaji, unateua anwani sifuri, si wewe mwenyewe. + +```python + # Angalia mahitaji + senderIsOwner: bool = self.idToOwner[_tokenId] == msg.sender + senderIsApprovedForAll: bool = (self.ownerToOperators[owner])[msg.sender] + assert (senderIsOwner or senderIsApprovedForAll) +``` + +Ili kuweka idhini unaweza kuwa mmiliki, au mwendeshaji aliyeidhinishwa na mmiliki. + +```python + # Weka idhini + self.idToApprovals[_tokenId] = _approved + log Approval(owner, _approved, _tokenId) + + +@external +def setApprovalForAll(_operator: address, _approved: bool): + """ + @dev Inawezesha au inalemaza idhini kwa mhusika wa tatu ("mwendeshaji") kusimamia mali zote za + `msg.sender`. Pia hutoa tukio la ApprovalForAll. + Hutoa kosa ikiwa `_operator` ni `msg.sender`. (KUMBUKA: Hii haijaandikwa kwenye EIP) + @notice Hii inafanya kazi hata kama mtumaji hamiliki tokeni zozote kwa wakati huo. + @param _operator Anwani ya kuongeza kwenye seti ya waendeshaji walioidhinishwa. + @param _approved Kweli kama waendeshaji wameidhinishwa, uongo kufuta idhini. + """ + # Hutoa kosa ikiwa `_operator` ni `msg.sender` + assert _operator != msg.sender + self.ownerToOperators[msg.sender][_operator] = _approved + log ApprovalForAll(msg.sender, _operator, _approved) +``` + +#### Chapa Tokeni Mpya na Uharibu Zilizopo {#mint-burn} + +Akaunti iliyounda mkataba ndiye `minter`, mtumiaji mkuu aliyeidhinishwa kuchapa +NFT mpya. Hata hivyo, hairuhusiwi kuchoma tokeni zilizopo. Ni mmiliki tu, au huluki +iliyoihdinishwa na mmiliki, ndiyo inayoweza kufanya hivyo. + +```python +### KAZI ZA KUCHAPA NA KUCHOMA ### + +@external +def mint(_to: address, _tokenId: uint256) -> bool: +``` + +Kazi hii daima inarejesha `Kweli`, kwa sababu ikiwa operesheni itashindwa, inarejeshwa nyuma. + +```python + """ + @dev Kazi ya kuchapa tokeni + Hutoa kosa ikiwa `msg.sender` si mchapaji. + Hutoa kosa ikiwa `_to` ni anwani sifuri. + Hutoa kosa ikiwa `_tokenId` inamilikiwa na mtu. + @param _to Anwani itakayopokea tokeni zilizochapwa. + @param _tokenId Kitambulisho cha tokeni cha kuchapa. + @return Boolean inayoonyesha kama operesheni ilifanikiwa. + """ + # Hutoa kosa ikiwa `msg.sender` si mchapaji + assert msg.sender == self.minter +``` + +Ni mchapaji tu (akaunti iliyounda mkataba wa ERC-721) anayeweza kuchapa tokeni mpya. Hili linaweza kuwa +tatizo siku zijazo ikiwa tunataka kubadilisha utambulisho wa mchapaji. Katika +mkataba wa uzalishaji, labda utataka kazi inayoruhusu mchapaji kuhamisha +marupurupu ya mchapaji kwa mtu mwingine. + +```python + # Hutoa kosa ikiwa `_to` ni anwani sifuri + assert _to != ZERO_ADDRESS + # Ongeza NFT. Hutoa kosa ikiwa `_tokenId` inamilikiwa na mtu + self._addTokenTo(_to, _tokenId) + log Transfer(ZERO_ADDRESS, _to, _tokenId) + return True +``` + +Kwa kawaida, uchapaji wa tokeni mpya huhesabiwa kama uhamishaji kutoka kwa anwani sifuri. + +```python + +@external +def burn(_tokenId: uint256): + """ + @dev Inachoma tokeni maalum ya ERC721. + Hutoa kosa isipokuwa `msg.sender` ni mmiliki wa sasa, mwendeshaji aliyeidhinishwa, au anwani + iliyoidhinishwa kwa NFT hii. + Hutoa kosa ikiwa `_tokenId` si NFT halali. + @param _tokenId kitambulisho cha uint256 cha tokeni ya ERC721 itakayochomwa. + """ + # Angalia mahitaji + assert self._isApprovedOrOwner(msg.sender, _tokenId) + owner: address = self.idToOwner[_tokenId] + # Hutoa kosa ikiwa `_tokenId` si NFT halali + assert owner != ZERO_ADDRESS + self._clearApproval(owner, _tokenId) + self._removeTokenFrom(owner, _tokenId) + log Transfer(owner, ZERO_ADDRESS, _tokenId) +``` + +Mtu yeyote anayeruhusiwa kuhamisha tokeni anaruhusiwa kuichoma. Wakati uchomaji unaonekana sawa na +uhamishaji kwenda kwa anwani sifuri, anwani sifuri haipokei tokeni hiyo. Hii inaturuhusu +kuachilia hifadhi yote iliyotumika kwa tokeni, ambayo inaweza kupunguza gharama ya gesi ya muamala. + +## Kutumia Mkataba Huu {#using-contract} + +Tofauti na Solidity, Vyper haina urithi. Hili ni chaguo la muundo la makusudi ili kufanya +msimbo uwe wazi zaidi na kwa hivyo iwe rahisi kuulinda. Kwa hivyo, ili kuunda mkataba wako wa Vyper ERC-721, unachukua mkataba +huu na kuubadilisha +ili kutekeleza mantiki ya biashara unayotaka. + +## Hitimisho {#conclusion} + +Kwa mapitio, haya ni baadhi ya mawazo muhimu zaidi katika mkataba huu: + +- Ili kupokea tokeni za ERC-721 kwa uhamishaji salama, mikataba inapaswa kutekeleza kiolesura cha `ERC721Receiver`. +- Hata ukitumia uhamishaji salama, tokeni bado zinaweza kukwama ukizituma kwa anwani ambayo ufunguo wake binafsi + haujulikani. +- Kunapokuwa na tatizo na operesheni, ni wazo zuri `kurejesha nyuma` wito, badala ya kurejesha tu + thamani ya kushindwa. +- Tokeni za ERC-721 zipo zinapokuwa na mmiliki. +- Kuna njia tatu za kuidhinishwa kuhamisha NFT. Unaweza kuwa mmiliki, kuidhinishwa kwa tokeni maalum, + au kuwa mwendeshaji wa tokeni zote za mmiliki. +- Matukio yaliyopita yanaonekana tu nje ya mnyororo wa bloku. Msimbo unaoendeshwa ndani ya mnyororo wa bloku hauwezi kuyaona. + +Sasa nenda na utekeleze mikataba salama ya Vyper. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). + diff --git a/public/content/translations/sw/developers/tutorials/erc20-annotated-code/index.md b/public/content/translations/sw/developers/tutorials/erc20-annotated-code/index.md new file mode 100644 index 00000000000..a86fe49a79d --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/erc20-annotated-code/index.md @@ -0,0 +1,930 @@ +--- +title: "Mkataba wa ERC-20: Maelezo ya Kina" +description: Kuna nini katika mkataba wa OpenZeppelin ERC-20 na kwa nini kipo hapo? +author: Ori Pomerantz +lang: sw +tags: [ "uimara", "erc-20" ] +skill: beginner +published: 2021-03-09 +--- + +## Utangulizi {#introduction} + +Moja ya matumizi yanayojulikana sana ya Ethereum ni pale kikundi cha watu kinapotengeneza tokeni inayoweza kuuzwa, kwa maana nyingine, sarafu yao wenyewe. Tokeni hizi kwa kawaida hufuata kiwango, +[ERC-20](/developers/docs/standards/tokens/erc-20/). Kiwango hiki hufanya iwezekanavyo kuandika zana, kama vile vidimbwi vya ukwasi na mikoba, ambavyo hufanya kazi na tokeni zote za ERC-20. Katika makala haya tutachambua +utekelezaji wa [OpenZeppelin Solidity ERC20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol), pamoja na +[ufafanuzi wa kiolesura](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol). + +Hii ni msimbo chanzo uliotiwa maelezo. Ikiwa unataka kutekeleza ERC-20, +[soma mafunzo haya](https://docs.openzeppelin.com/contracts/2.x/erc20-supply). + +## Kiolesura {#the-interface} + +Madhumuni ya kiwango kama ERC-20 ni kuruhusu utekelezaji wa tokeni nyingi ambazo zinaweza kufanya kazi katika mifumo mbalimbali, kama vile mikoba na exchange zilizogatuliwa. Ili kufanikisha hilo, tunatengeneza +[kiolesura](https://www.geeksforgeeks.org/solidity/solidity-basics-of-interface/). Msimbo wowote unaohitaji kutumia mkataba wa tokeni +unaweza kutumia ufafanuzi uleule katika kiolesura na uendane na mikataba yote ya tokeni inayoutumia, iwe ni mkoba kama +MetaMask, mfumo uliotawanywa kama etherscan.io, au mkataba tofauti kama vile kidimbwi cha ukwasi. + +![Kielelezo cha kiolesura cha ERC-20](erc20_interface.png) + +Ikiwa wewe ni mtayarishaji programu mwenye uzoefu, huenda unakumbuka kuona miundo inayofanana katika [Java](https://www.w3schools.com/java/java_interface.asp) +au hata katika [faili za vichwa vya C](https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html). + +Huu ni ufafanuzi wa [Kiolesura cha ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) +kutoka OpenZeppelin. Ni tafsiri ya [kiwango kinachosomeka na binadamu](https://eips.ethereum.org/EIPS/eip-20) kuwa msimbo wa Solidity. Bila shaka, +kiolesura chenyewe hakifafanui _jinsi_ ya kufanya chochote. Hilo limeelezwa katika msimbo chanzo wa mkataba hapo chini. + +  + +```solidity +// SPDX-License-Identifier: MIT +``` + +Faili za Solidity zinapaswa kujumuisha kitambulisho cha leseni. [Unaweza kuona orodha ya leseni hapa](https://spdx.org/licenses/). Ikiwa unahitaji leseni +tofauti, lieleze tu kwenye maoni. + +  + +```solidity +pragma solidity >=0.6.0 <0.8.0; +``` + +Lugha ya Solidity bado inabadilika haraka, na matoleo mapya huenda yasiendane na msimbo wa zamani +([tazama hapa](https://docs.soliditylang.org/en/v0.7.0/070-breaking-changes.html)). Kwa hivyo, ni wazo zuri kubainisha si tu toleo la chini +kabisa la lugha, bali pia toleo la juu zaidi, la hivi karibuni ambalo ulifanyia majaribio msimbo. + +  + +```solidity +/** + * @dev Kiolesura cha kiwango cha ERC20 kama kilivyofafanuliwa katika EIP. + */ +``` + +`@dev` katika maoni ni sehemu ya [umbizo la NatSpec](https://docs.soliditylang.org/en/develop/natspec-format.html), linalotumika kutoa +nyaraka kutoka kwa msimbo chanzo. + +  + +```solidity +interface IERC20 { +``` + +Kwa kimapokeo, majina ya kiolesura huanza na `I`. + +  + +```solidity + /** + * @dev Hurejesha kiasi cha tokeni zilizopo. + */ + function totalSupply() external view returns (uint256); +``` + +Kazi hii ni ya `nje`, ikimaanisha [inaweza tu kuitwa kutoka nje ya mkataba](https://docs.soliditylang.org/en/v0.7.0/cheatsheet.html#index-2). +Hurejesha jumla ya tokeni zilizo katika mkataba. Thamani hii inarejeshwa kwa kutumia aina ya kawaida zaidi katika Ethereum, biti 256 zisizo na ishara (biti 256 ni +ukubwa asilia wa neno wa EVM). Kazi hii pia ni ya `kuangalia`, ambayo ina maana kwamba haibadilishi hali, hivyo inaweza kutekelezwa kwenye nodi moja badala ya kila nodi +katika mnyororo wa bloku kuitekeleza. Aina hii ya kazi haitengenezi muamala na haigharimu [gesi](/developers/docs/gas/). + +**Kumbuka:** Kinadharia inaweza kuonekana kuwa muundaji wa mkataba anaweza kudanganya kwa kurudisha jumla ndogo kuliko thamani halisi, na kufanya kila tokeni ionekane +kuwa ya thamani zaidi kuliko ilivyo. Hata hivyo, hofu hiyo inapuuza asili halisi ya mnyororo wa bloku. Kila kitu kinachotokea kwenye mnyororo wa bloku kinaweza kuthibitishwa na +kila nodi. Ili kufanikisha hili, msimbo wa lugha ya mashine na hifadhi ya kila mkataba hupatikana kwenye kila nodi. Ingawa hauhitajiki kuchapisha msimbo wa Solidity +kwa mkataba wako, hakuna mtu atakayekuchukulia kwa uzito isipokuwa uchapishe msimbo chanzo na toleo la Solidity ambalo lilitumiwa kuukusanya, ili uweze +kuthibitishwa dhidi ya msimbo wa lugha ya mashine ulioutoa. +Kwa mfano, angalia [mkataba huu](https://eth.blockscout.com/address/0xa530F85085C6FE2f866E7FdB716849714a89f4CD?tab=contract). + +  + +```solidity + /** + * @dev Hurejesha kiasi cha tokeni zinazomilikiwa na `akaunti`. + */ + function balanceOf(address account) external view returns (uint256); +``` + +Kama jina linavyosema, `balanceOf` inarejesha salio la akaunti. Akaunti za Ethereum zinatambuliwa katika Solidity kwa kutumia aina ya `anwani`, ambayo inashikilia biti 160. +Pia ni ya `nje` na ya `kuangalia`. + +  + +```solidity + /** + * @dev Huhamisha `kiasi` cha tokeni kutoka kwa akaunti ya mpigaji simu hadi kwa `mpokeaji`. + * + * Hurudisha thamani ya boolean inayoonyesha kama operesheni imefanikiwa. + * + * Hutoa tukio la {Uhamisho}. + */ + function transfer(address recipient, uint256 amount) external returns (bool); +``` + +Kazi ya `kuhamisha` huhamisha tokeni kutoka kwa mpigaji simu hadi anwani tofauti. Hii inahusisha mabadiliko ya hali, kwa hivyo si ya `kuangalia`. +Mtumiaji anapoita kazi hii huunda muamala na kugharimu gesi. Pia hutoa tukio, `Uhamisho`, ili kuwajulisha wote kwenye +mnyororo wa bloku kuhusu tukio hilo. + +Kazi hii ina aina mbili za matokeo kwa aina mbili tofauti za wapigaji simu: + +- Watumiaji wanaoita kazi moja kwa moja kutoka kwa kiolesura cha mtumiaji. Kwa kawaida mtumiaji huwasilisha muamala + na hasubiri jibu, ambalo linaweza kuchukua muda usiojulikana. Mtumiaji anaweza kuona kilichotokea + kwa kutafuta risiti ya muamala (ambayo inatambuliwa na hashi ya muamala) au kwa kutafuta + tukio la `Uhamisho`. +- Mikataba mingine, ambayo huita kazi kama sehemu ya muamala mkuu. Mikataba hiyo hupata matokeo mara moja, + kwa sababu huendeshwa katika muamala mmoja, kwa hivyo wanaweza kutumia thamani ya urejeshaji wa kazi. + +Aina sawa ya matokeo huundwa na kazi zingine zinazobadilisha hali ya mkataba. + +  + +Posho huruhusu akaunti kutumia baadhi ya tokeni za mmiliki mwingine. +Hii ni muhimu, kwa mfano, kwa mikataba inayofanya kazi kama wauzaji. Mikataba haiwezi +kufuatilia matukio, kwa hivyo ikiwa mnunuzi angehamisha tokeni kwa mkataba wa muuzaji +moja kwa moja mkataba huo haungejua umelipwa. Badala yake, mnunuzi huruhusu +mkataba wa muuzaji kutumia kiasi fulani, na muuzaji huhamisha kiasi hicho. +Hii inafanywa kupitia kazi ambayo mkataba wa muuzaji huita, ili mkataba wa muuzaji +uweze kujua kama imefanikiwa. + +```solidity + /** + * @dev Hurejesha idadi iliyobaki ya tokeni ambazo `mtumiaji` atakuwa + * anaruhusiwa kutumia kwa niaba ya `mmiliki` kupitia {transferFrom}. Hii ni + * sifuri kwa chaguo-msingi. + * + * Thamani hii hubadilika wakati {approve} au {transferFrom} zinapoitwa. + */ + function allowance(address owner, address spender) external view returns (uint256); +``` + +Kazi ya `posho` inaruhusu mtu yeyote kuuliza ili kuona ni posho gani anwani +moja (`mmiliki`) inaruhusu anwani nyingine (`mtumiaji`) kutumia. + +  + +```solidity + /** + * @dev Huweka `kiasi` kama posho ya `mtumiaji` juu ya tokeni za mpigaji simu. + * + * Hurudisha thamani ya boolean inayoonyesha kama operesheni imefanikiwa. + * + * MUHIMU: Jihadharini kwamba kubadilisha posho kwa njia hii huleta hatari + * kwamba mtu anaweza kutumia posho ya zamani na mpya kwa bahati mbaya + * ya mpangilio wa muamala. Suluhisho moja linalowezekana la kupunguza hali hii ya mbio + * ni kwanza kupunguza posho ya mtumiaji hadi 0 na kuweka + * thamani inayotakiwa baadaye: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Hutoa tukio la {Uidhinishaji}. + */ + function approve(address spender, uint256 amount) external returns (bool); +``` + +Kazi ya `kuidhinisha` huunda posho. Hakikisha unasoma ujumbe kuhusu +jinsi inaweza kutumiwa vibaya. Katika Ethereum unadhibiti mpangilio wa miamala yako mwenyewe, +lakini huwezi kudhibiti mpangilio ambao miamala ya watu wengine +itatekelezwa, isipokuwa usipowasilisha muamala wako mwenyewe hadi uone +muamala wa upande mwingine umetokea. + +  + +```solidity + /** + * @dev Huhamisha tokeni za `kiasi` kutoka kwa `mtumaji` hadi kwa `mpokeaji` kwa kutumia + * mfumo wa posho. `kiasi` kisha kinakatwa kutoka kwa posho ya mpigaji simu + * . + * + * Hurudisha thamani ya boolean inayoonyesha kama operesheni imefanikiwa. + * + * Hutoa tukio la {Uhamisho}. + */ + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); +``` + +Mwishowe, `transferFrom` hutumiwa na mtumiaji kutumia posho halisi. + +  + +```solidity + + /** + * @dev Hutolewa wakati tokeni za `thamani` zinapohamishwa kutoka akaunti moja (`kutoka`) kwenda + * nyingine (`kwenda`). + * + * Kumbuka kuwa `thamani` inaweza kuwa sifuri. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Hutolewa wakati posho ya `mtumiaji` kwa `mmiliki` imewekwa na + * wito kwa {approve}. `thamani` ni posho mpya. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); +} +``` + +Matukio haya hutolewa wakati hali ya mkataba wa ERC-20 inapobadilika. + +## Mkataba Halisi {#the-actual-contract} + +Huu ndio mkataba halisi unaotekeleza kiwango cha ERC-20, +[umechukuliwa kutoka hapa](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol). +Haikusudiwi kutumiwa kama ilivyo, lakini unaweza +[kurithi](https://www.tutorialspoint.com/solidity/solidity_inheritance.htm) kutoka kwayo ili kuipanua iwe kitu kinachoweza kutumika. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >=0.6.0 <0.8.0; +``` + +  + +### Taarifa za Kuingiza {#import-statements} + +Mbali na ufafanuzi wa kiolesura hapo juu, ufafanuzi wa mkataba unaingiza faili zingine mbili: + +```solidity + +import "../../GSN/Context.sol"; +import "./IERC20.sol"; +import "../../math/SafeMath.sol"; +``` + +- `GSN/Context.sol` ni ufafanuzi unaohitajika kutumia [OpenGSN](https://www.opengsn.org/), mfumo unaowaruhusu watumiaji wasio na ether + kutumia mnyororo wa bloku. Kumbuka kuwa hili ni toleo la zamani, ikiwa unataka kuunganisha na OpenGSN + [tumia mafunzo haya](https://docs.opengsn.org/javascript-client/tutorial.html). +- [Maktaba ya SafeMath](https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/), ambayo inazuia + kufurika/kupungua kwa hesabu kwa matoleo ya Solidity **<0.8.0**. Katika Solidity ≥0.8.0, operesheni za hesabu hurejea kiotomatiki + kwenye kufurika/kupungua, na kufanya SafeMath isiwe ya lazima. Mkataba huu unatumia SafeMath kwa uoanifu wa nyuma na + matoleo ya zamani ya mkusanyaji. + +  + +Maoni haya yanaelezea madhumuni ya mkataba. + +```solidity +/** + * @dev Utekelezaji wa kiolesura cha {IERC20}. + * + * Utekelezaji huu haujali jinsi tokeni zinavyoundwa. Hii inamaanisha + * kwamba mfumo wa usambazaji unapaswa kuongezwa katika mkataba uliochukuliwa kwa kutumia {_mint}. + * Kwa mfumo wa jumla tazama {ERC20PresetMinterPauser}. + * + * DONDOO: Kwa maandishi ya kina tazama mwongozo wetu + * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[Jinsi + * ya kutekeleza mifumo ya usambazaji]. + * + * Tumefuata miongozo ya jumla ya OpenZeppelin: kazi hurudisha badala + * ya kurudisha `false` kwenye kutofaulu. Tabia hii hata hivyo ni ya kawaida + * na haipingani na matarajio ya mifumo ya ERC20. + * + * Zaidi ya hayo, tukio la {Uidhinishaji} hutolewa kwenye wito kwa {transferFrom}. + * Hii inaruhusu mifumo kujenga upya posho kwa akaunti zote tu + * kwa kusikiliza matukio yaliyosemwa. Utekelezaji mwingine wa EIP hauwezi kutoa + * matukio haya, kwani haihitajiki na vipimo. + * + * Mwishowe, kazi zisizo za kawaida za {decreaseAllowance} na {increaseAllowance} + * zimeongezwa ili kupunguza maswala yanayojulikana karibu na kuweka + * posho. Tazama {IERC20-approve}. + */ +``` + +### Ufafanuzi wa Mkataba {#contract-definition} + +```solidity +contract ERC20 is Context, IERC20 { +``` + +Mstari huu unabainisha urithi, katika kesi hii kutoka `IERC20` kutoka juu na `Context`, kwa OpenGSN. + +  + +```solidity + + using SafeMath for uint256; + +``` + +Mstari huu unaunganisha maktaba ya `SafeMath` na aina ya `uint256`. Unaweza kupata maktaba hii +[hapa](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol). + +### Ufafanuzi wa Vigezo {#variable-definitions} + +Ufafanuzi huu unabainisha vigezo vya hali ya mkataba. Vigezo hivi vimetangazwa kuwa `vya faragha`, lakini +hiyo inamaanisha tu kwamba mikataba mingine kwenye mnyororo wa bloku haiwezi kuvisoma. _Hakuna +siri kwenye mnyororo wa bloku_, programu kwenye kila nodi ina hali ya kila mkataba +katika kila bloku. Kwa kimapokeo, vigezo vya hali vinaitwa `_`. + +Vigezo viwili vya kwanza ni [ramani](https://www.tutorialspoint.com/solidity/solidity_mappings.htm), +maana yake vina tabia sawa na [safu unganishi](https://wikipedia.org/wiki/Associative_array), +isipokuwa kwamba funguo ni thamani za nambari. Hifadhi inatengwa tu kwa maingizo ambayo yana thamani tofauti +na chaguo-msingi (sifuri). + +```solidity + mapping (address => uint256) private _balances; +``` + +Ramani ya kwanza, `_balances`, ni anwani na salio zao za tokeni hii. Ili kupata +salio, tumia sintaksia hii: `_balances[
]`. + +  + +```solidity + mapping (address => mapping (address => uint256)) private _allowances; +``` + +Kigezo hiki, `_allowances`, huhifadhi posho zilizoelezwa mapema. Faharasa ya kwanza ni mmiliki +wa tokeni, na ya pili ni mkataba wenye posho. Ili kupata kiasi ambacho anwani A inaweza +kutumia kutoka kwa akaunti ya anwani B, tumia `_allowances[B][A]`. + +  + +```solidity + uint256 private _totalSupply; +``` + +Kama jina linavyopendekeza, kigezo hiki hufuatilia jumla ya tokeni zote. + +  + +```solidity + string private _name; + string private _symbol; + uint8 private _decimals; +``` + +Vigezo hivi vitatu vinatumika kuboresha usomaji. Viwili vya kwanza vinajieleza, lakini `_decimals` +haieleweki. + +Kwa upande mmoja, Ethereum haina vigezo vya nambari za desimali au sehemu. Kwa upande mwingine, +binadamu wanapenda kuweza kugawanya tokeni. Sababu moja watu walitumia dhahabu kama sarafu ilikuwa ni +kwamba ilikuwa ngumu kutoa chenji wakati mtu alitaka kununua bata lenye thamani ya sehemu ya ng'ombe. + +Suluhisho ni kufuatilia nambari kamili, lakini kuhesabu badala ya tokeni halisi tokeni ya sehemu ambayo haina +karibu thamani yoyote. Katika kesi ya ether, tokeni ya sehemu inaitwa wei, na 10^18 wei ni sawa na moja +ETH. Wakati wa kuandika, 10,000,000,000,000 wei ni takriban senti moja ya Dola ya Marekani au Euro. + +Mifumo inahitaji kujua jinsi ya kuonyesha salio la tokeni. Ikiwa mtumiaji ana 3,141,000,000,000,000,000 wei, je, hiyo ni +3.14 ETH? 31.41 ETH? 3,141 ETH? Katika kesi ya ether imefafanuliwa kuwa 10^18 wei ni sawa na ETH, lakini kwa +tokeni yako unaweza kuchagua thamani tofauti. Ikiwa kugawanya tokeni hakuna maana, unaweza kutumia +thamani ya `_decimals` ya sifuri. Ikiwa unataka kutumia kiwango sawa na ETH, tumia thamani **18**. + +### Mjenzi {#the-constructor} + +```solidity + /** + * @dev Huweka thamani za {name} na {symbol}, na huanzisha {decimals} na + * thamani ya msingi ya 18. + * + * Ili kuchagua thamani tofauti kwa {decimals}, tumia {_setupDecimals}. + * + * Thamani hizi zote tatu hazibadiliki: zinaweza kuwekwa mara moja tu wakati + * wa ujenzi. + */ + constructor (string memory name_, string memory symbol_) public { + // Katika Solidity ≥0.7.0, 'public' ni dhahiri na inaweza kuachwa. + + _name = name_; + _symbol = symbol_; + _decimals = 18; + } +``` + +Mjenzi huitwa wakati mkataba unapoundwa kwa mara ya kwanza. Kwa kimapokeo, vigezo vya kazi huitwa `_`. + +### Kazi za Kiolesura cha Mtumiaji {#user-interface-functions} + +```solidity + /** + * @dev Hurejesha jina la tokeni. + */ + function name() public view returns (string memory) { + return _name; + } + + /** + * @dev Hurejesha alama ya tokeni, kawaida toleo fupi la + * jina. + */ + function symbol() public view returns (string memory) { + return _symbol; + } + + /** + * @dev Hurejesha idadi ya desimali zinazotumika kupata uwakilishi wake kwa mtumiaji. + * Kwa mfano, ikiwa `decimals` ni sawa na `2`, salio la tokeni `505` linapaswa + * kuonyeshwa kwa mtumiaji kama `5,05` (`505 / 10 ** 2`). + * + * Tokeni kawaida huchagua thamani ya 18, zikiiga uhusiano kati + * ya ether na wei. Hii ndiyo thamani ambayo {ERC20} hutumia, isipokuwa {_setupDecimals} + * ikiitwa. + * + * KUMBUKA: Habari hii inatumika tu kwa madhumuni ya _kuonyesha_: haiathiri + * kwa njia yoyote hesabu zozote za mkataba, ikiwa ni pamoja na + * {IERC20-balanceOf} na {IERC20-transfer}. + */ + function decimals() public view returns (uint8) { + return _decimals; + } +``` + +Kazi hizi, `name`, `symbol`, na `decimals` husaidia violesura vya mtumiaji kujua kuhusu mkataba wako ili waweze kuuonyesha vizuri. + +Aina ya urejeshaji ni `string memory`, ikimaanisha kurudisha mfuatano ambao umehifadhiwa kwenye kumbukumbu. Vigezo, kama vile +mifufulizo, vinaweza kuhifadhiwa katika maeneo matatu: + +| | Muda wa Maisha | Ufikiaji wa Mkataba | Gharama ya Gesi | +| ---------- | ----------------- | ------------------- | ---------------------------------------------------------------------- | +| Kumbukumbu | Wito wa kazi | Soma/Andika | Makumi au mamia (juu zaidi kwa maeneo ya juu zaidi) | +| Calldata | Wito wa kazi | Soma Pekee | Haiwezi kutumika kama aina ya urejeshaji, tu aina ya kigezo cha kazi | +| Ghala | Hadi kubadilishwa | Soma/Andika | Juu (800 kwa kusoma, 20k kwa kuandika) | + +Katika kesi hii, `memory` ni chaguo bora zaidi. + +### Soma Taarifa za Tokeni {#read-token-information} + +Hizi ni kazi zinazotoa habari kuhusu tokeni, ama jumla ya usambazaji au salio la +akaunti. + +```solidity + /** + * @dev Tazama {IERC20-totalSupply}. + */ + function totalSupply() public view override returns (uint256) { + return _totalSupply; + } +``` + +Kazi ya `totalSupply` inarejesha jumla ya usambazaji wa tokeni. + +  + +```solidity + /** + * @dev Tazama {IERC20-balanceOf}. + */ + function balanceOf(address account) public view override returns (uint256) { + return _balances[account]; + } +``` + +Soma salio la akaunti. Kumbuka kuwa mtu yeyote anaruhusiwa kupata salio la akaunti +ya mtu mwingine. Hakuna maana ya kujaribu kuficha habari hii, kwa sababu inapatikana kwenye kila +nodi hata hivyo. _Hakuna siri kwenye mnyororo wa bloku._ + +### Hamisha Tokeni {#transfer-tokens} + +```solidity + /** + * @dev Tazama {IERC20-transfer}. + * + * Mahitaji: + * + * - `mpokeaji` hawezi kuwa anwani ya sifuri. + * - mpigaji simu lazima awe na salio la angalau `kiasi`. + */ + function transfer(address recipient, uint256 amount) public virtual override returns (bool) { +``` + +Kazi ya `kuhamisha` inaitwa ili kuhamisha tokeni kutoka kwa akaunti ya mtumaji hadi kwa nyingine tofauti. Kumbuka +kwamba ingawa inarudisha thamani ya boolean, thamani hiyo daima ni **kweli**. Ikiwa uhamisho +utashindwa mkataba unarudisha wito. + +  + +```solidity + _transfer(_msgSender(), recipient, amount); + return true; + } +``` + +Kazi ya `_transfer` inafanya kazi halisi. Ni kazi ya faragha ambayo inaweza tu kuitwa na +kazi zingine za mkataba. Kwa kimapokeo kazi za faragha zinaitwa `_`, sawa na vigezo vya +hali. + +Kawaida katika Solidity tunatumia `msg.sender` kwa mtumaji wa ujumbe. Hata hivyo, hiyo inavunja +[OpenGSN](http://opengsn.org/). Ikiwa tunataka kuruhusu miamala isiyo na ether na tokeni yetu, tunahitaji +kutumia `_msgSender()`. Inarudisha `msg.sender` kwa miamala ya kawaida, lakini kwa isiyo na ether +hurudisha mtia saini asilia na sio mkataba uliopitisha ujumbe. + +### Kazi za Posho {#allowance-functions} + +Hizi ni kazi zinazotekeleza utendaji wa posho: `allowance`, `approve`, `transferFrom`, +na `_approve`. Zaidi ya hayo, utekelezaji wa OpenZeppelin unapita kiwango cha msingi kujumuisha baadhi ya vipengele vinavyoboresha +usalama: `increaseAllowance`, na `decreaseAllowance`. + +#### Kazi ya posho {#allowance} + +```solidity + /** + * @dev Tazama {IERC20-allowance}. + */ + function allowance(address owner, address spender) public view virtual override returns (uint256) { + return _allowances[owner][spender]; + } +``` + +Kazi ya `posho` inaruhusu kila mtu kuangalia posho yoyote. + +#### Kazi ya kuidhinisha {#approve} + +```solidity + /** + * @dev Tazama {IERC20-approve}. + * + * Mahitaji: + * + * - `mtumiaji` hawezi kuwa anwani ya sifuri. + */ + function approve(address spender, uint256 amount) public virtual override returns (bool) { +``` + +Kazi hii inaitwa ili kuunda posho. Inafanana na kazi ya `kuhamisha` hapo juu: + +- Kazi hii huita tu kazi ya ndani (katika kesi hii, `_approve`) ambayo inafanya kazi halisi. +- Kazi hii hurudisha `kweli` (ikiwa imefanikiwa) au hurudisha nyuma (ikiwa sivyo). + +  + +```solidity + _approve(_msgSender(), spender, amount); + return true; + } +``` + +Tunatumia kazi za ndani ili kupunguza idadi ya maeneo ambapo mabadiliko ya hali hutokea. Kazi _yoyote_ inayobadilisha +hali ni hatari inayowezekana ya usalama ambayo inahitaji kukaguliwa kwa usalama. Kwa njia hii tuna nafasi chache za kukosea. + +#### Kazi ya transferFrom {#transferFrom} + +Hii ni kazi ambayo mtumiaji huita ili kutumia posho. Hii inahitaji operesheni mbili: kuhamisha kiasi +kinachotumiwa na kupunguza posho kwa kiasi hicho. + +```solidity + /** + * @dev Tazama {IERC20-transferFrom}. + * + * Hutoa tukio la {Uidhinishaji} linaloonyesha posho iliyosasishwa. Hii haihitajiki + * na EIP. Tazama dokezo mwanzoni mwa {ERC20}. + * + * Mahitaji: + * + * - `mtumaji` na `mpokeaji` hawawezi kuwa anwani ya sifuri. + * - `mtumaji` lazima awe na salio la angalau `kiasi`. + * - mpigaji simu lazima awe na posho kwa tokeni za ``mtumaji`` za angalau + * `kiasi`. + */ + function transferFrom(address sender, address recipient, uint256 amount) public virtual + override returns (bool) { + _transfer(sender, recipient, amount); +``` + +  + +Wito wa kazi wa `a.sub(b, "ujumbe")` hufanya mambo mawili. Kwanza, inakokotoa `a-b`, ambayo ni posho mpya. +Pili, inahakikisha kuwa matokeo haya si hasi. Ikiwa ni hasi wito unarudishwa na ujumbe uliotolewa. Kumbuka kwamba wito unapobadilishwa uchakataji wowote uliofanywa awali wakati wa wito huo hupuuzwa kwa hivyo hatuhitaji +kubatilisha `_transfer`. + +```solidity + _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, + "ERC20: kiasi cha uhamisho kinazidi posho")); + return true; + } +``` + +#### Nyongeza za usalama za OpenZeppelin {#openzeppelin-safety-additions} + +Ni hatari kuweka posho isiyo ya sifuri kwa thamani nyingine isiyo ya sifuri, +kwa sababu unadhibiti tu mpangilio wa miamala yako, si ya mtu mwingine yeyote. Fikiria una +watumiaji wawili, Alice ambaye ni mnyofu na Bill ambaye si mwaminifu. Alice anataka huduma fulani kutoka kwa +Bill, ambayo anadhani inagharimu tokeni tano - kwa hivyo anampa Bill posho ya tokeni tano. + +Kisha kitu kinabadilika na bei ya Bill inapanda hadi tokeni kumi. Alice, ambaye bado anataka huduma hiyo, +hutuma muamala unaoweka posho ya Bill kuwa kumi. Papo hapo Bill anapoona muamala huu mpya +katika dimbwi la miamala hutuma muamala unaotumia tokeni tano za Alice na una bei ya juu zaidi +ya gesi ili ichimbwe haraka zaidi. Kwa njia hiyo Bill anaweza kutumia kwanza tokeni tano na kisha, +mara posho mpya ya Alice itakapochimbwa, kutumia kumi zaidi kwa bei ya jumla ya tokeni kumi na tano, zaidi ya +ambavyo Alice alikusudia kuidhinisha. Mbinu hii inaitwa +[Uendeshaji - wa mbele](https://consensysdiligence.github.io/smart-contract-best-practices/attacks/#front-running) + +| Muamala wa Alice | Nonce ya Alice | Muamala wa Bill | Nonce ya Bill | Posho ya Bill | Jumla ya Mapato ya Bill kutoka kwa Alice | +| ------------------------------------ | -------------- | ------------------------------------------------ | ------------- | ------------- | ---------------------------------------- | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | +| approve(Bill, 10) | 11 | | | 10 | 5 | +| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 15 | + +Ili kuepuka tatizo hili, kazi hizi mbili (`increaseAllowance` na `decreaseAllowance`) zinakuruhusu +kurekebisha posho kwa kiasi maalum. Kwa hiyo kama Bill tayari alikuwa ametumia tokeni tano, ataweza tu +kutumia tano zaidi. Kulingana na muda, kuna njia mbili hii inaweza kufanya kazi, zote mbili +zikimalizika na Bill kupata tokeni kumi tu: + +A: + +| Muamala wa Alice | Nonce ya Alice | Muamala wa Bill | Nonce ya Bill | Posho ya Bill | Jumla ya Mapato ya Bill kutoka kwa Alice | +| --------------------------------------------- | -------------: | ----------------------------------------------- | ------------: | ------------: | ---------------------------------------- | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | +| increaseAllowance(Bill, 5) | 11 | | | 0+5 = 5 | 5 | +| | | transferFrom(Alice, Bill, 5) | 10,124 | 0 | 10 | + +B: + +| Muamala wa Alice | Nonce ya Alice | Muamala wa Bill | Nonce ya Bill | Posho ya Bill | Jumla ya Mapato ya Bill kutoka kwa Alice | +| --------------------------------------------- | -------------: | ------------------------------------------------ | ------------: | ------------: | ---------------------------------------: | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| increaseAllowance(Bill, 5) | 11 | | | 5+5 = 10 | 0 | +| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 10 | + +```solidity + /** + * @dev Huongeza kiatomiki posho iliyotolewa kwa `mtumiaji` na mpigaji. + * + * Hii ni mbadala ya {approve} ambayo inaweza kutumika kama upunguzaji wa + * matatizo yaliyoelezwa katika {IERC20-approve}. + * + * Hutoa tukio la {Uidhinishaji} linaloonyesha posho iliyosasishwa. + * + * Mahitaji: + * + * - `mtumiaji` hawezi kuwa anwani ya sifuri. + */ + function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); + return true; + } +``` + +Kazi ya `a.add(b)` ni nyongeza salama. Katika kesi isiyowezekana kwamba `a`+`b`>=`2^256` haizunguki +kama nyongeza ya kawaida inavyofanya. + +```solidity + + /** + * @dev Hupunguza kiatomiki posho iliyotolewa kwa `mtumiaji` na mpigaji. + * + * Hii ni mbadala ya {approve} ambayo inaweza kutumika kama upunguzaji wa + * matatizo yaliyoelezwa katika {IERC20-approve}. + * + * Hutoa tukio la {Uidhinishaji} linaloonyesha posho iliyosasishwa. + * + * Mahitaji: + * + * - `mtumiaji` hawezi kuwa anwani ya sifuri. + * - `mtumiaji` lazima awe na posho kwa mpigaji wa angalau + * `subtractedValue`. + */ + function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, + "ERC20: posho iliyopunguzwa chini ya sifuri")); + return true; + } +``` + +### Kazi Zinazobadilisha Taarifa za Tokeni {#functions-that-modify-token-information} + +Hizi ni kazi nne zinazofanya kazi halisi: `_transfer`, `_mint`, `_burn`, na `_approve`. + +#### Kazi ya _transfer {#_transfer} + +```solidity + /** + * @dev Huhamisha tokeni `kiasi` kutoka `mtumaji` hadi `mpokeaji`. + * + * Hii ni kazi ya ndani inayofanana na {transfer}, na inaweza kutumika kwa + * k.m., kutekeleza ada za tokeni otomatiki, mifumo ya kupunguza, n.k. + * + * Hutoa tukio la {Uhamisho}. + * + * Mahitaji: + * + * - `mtumaji` hawezi kuwa anwani ya sifuri. + * - `mpokeaji` hawezi kuwa anwani ya sifuri. + * - `mtumaji` lazima awe na salio la angalau `kiasi`. + */ + function _transfer(address sender, address recipient, uint256 amount) internal virtual { +``` + +Kazi hii, `_transfer`, huhamisha tokeni kutoka akaunti moja hadi nyingine. Inaitwa na `transfer` (kwa uhamisho kutoka kwa akaunti ya mtumaji mwenyewe) na `transferFrom` (kwa kutumia posho +kwa uhamisho kutoka kwa akaunti ya mtu mwingine). + +  + +```solidity + require(sender != address(0), "ERC20: uhamisho kutoka kwa anwani ya sifuri"); + require(recipient != address(0), "ERC20: uhamisho kwenda kwa anwani ya sifuri"); +``` + +Hakuna mtu anayemiliki anwani sifuri katika Ethereum (yaani, hakuna mtu anayejua ufunguo binafsi ambao ufunguo wake wa umma unaofanana +unabadilishwa kuwa anwani ya sifuri). Watu wanapotumia anwani hiyo, kawaida huwa ni hitilafu ya programu - kwa hivyo tunashindwa +ikiwa anwani ya sifuri itatumika kama mtumaji au mpokeaji. + +  + +```solidity + _beforeTokenTransfer(sender, recipient, amount); + +``` + +Kuna njia mbili za kutumia mkataba huu: + +1. Itumie kama kiolezo cha msimbo wako mwenyewe +2. [Rithi kutoka kwayo](https://www.bitdegree.org/learn/solidity-inheritance), na ubadilishe tu kazi unazohitaji kurekebisha + +Njia ya pili ni bora zaidi kwa sababu msimbo wa OpenZeppelin ERC-20 tayari umekaguliwa na kuonyeshwa kuwa salama. Unapotumia urithi +ni wazi ni kazi gani unazorekebisha, na ili kuamini mkataba wako watu wanahitaji tu kukagua kazi hizo maalum. + +Mara nyingi ni muhimu kutekeleza kazi kila wakati tokeni zinapohamishwa. Hata hivyo, `_transfer` ni kazi muhimu sana na inawezekana +kuiandika bila usalama (tazama hapa chini), kwa hivyo ni bora si kuibadilisha. Suluhisho ni `_beforeTokenTransfer`, kazi ya +[ndoano](https://wikipedia.org/wiki/Hooking). Unaweza kubadilisha kazi hii, na itaitwa kwenye kila uhamisho. + +  + +```solidity + _balances[sender] = _balances[sender].sub(amount, "ERC20: kiasi cha uhamisho kinazidi salio"); + _balances[recipient] = _balances[recipient].add(amount); +``` + +Hizi ni mistari inayofanya uhamisho halisi. Kumbuka kuwa hakuna **kitu** kati yao, na kwamba tunapunguza +kiasi kilichohamishwa kutoka kwa mtumaji kabla ya kukiongeza kwa mpokeaji. Hii ni muhimu kwa sababu kama kungekuwa na +wito kwa mkataba tofauti katikati, ingeweza kutumiwa kudanganya mkataba huu. Kwa njia hii uhamisho +ni wa atomiki, hakuna kinachoweza kutokea katikati yake. + +  + +```solidity + emit Transfer(sender, recipient, amount); + } +``` + +Mwishowe, toa tukio la `Uhamisho`. Matukio hayapatikani kwa mikataba-erevu, lakini msimbo unaoendeshwa nje ya mnyororo wa bloku +unaweza kusikiliza matukio na kuyajibu. Kwa mfano, mkoba unaweza kufuatilia wakati mmiliki anapata tokeni zaidi. + +#### Kazi za _mint na _burn {#_mint-and-_burn} + +Kazi hizi mbili (`_mint` na `_burn`) hubadilisha jumla ya usambazaji wa tokeni. +Ziko ndani na hakuna kazi inayowaita katika mkataba huu, +kwa hivyo ni muhimu tu ikiwa utarithi kutoka kwa mkataba na kuongeza mantiki yako mwenyewe +kuamua chini ya hali gani kuzalisha tokeni mpya au kuchoma zilizopo. + +**KUMBUKA:** Kila tokeni ya ERC-20 ina mantiki yake ya biashara inayoelekeza usimamizi wa tokeni. +Kwa mfano, mkataba wa usambazaji uliowekwa unaweza kuita tu `_mint` +katika mjenzi na kamwe usiite `_burn`. Mkataba unaouza tokeni +utaite `_mint` unapolipwa, na pengine utaite `_burn` wakati fulani +ili kuepuka mfumuko wa bei usiodhibitiwa. + +```solidity + /** @dev Huunda tokeni za `kiasi` na kuzikabidhi kwa `akaunti`, akiongeza + * jumla ya usambazaji. + * + * Hutoa tukio la {Uhamisho} na `kutoka` ikiwa imewekwa kwenye anwani ya sifuri. + * + * Mahitaji: + * + * - `kwa` hawezi kuwa anwani ya sifuri. + */ + function _mint(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: zalisha kwa anwani ya sifuri"); + _beforeTokenTransfer(address(0), account, amount); + _totalSupply = _totalSupply.add(amount); + _balances[account] = _balances[account].add(amount); + emit Transfer(address(0), account, amount); + } +``` + +Hakikisha unasasisha `_totalSupply` wakati jumla ya idadi ya tokeni inapobadilika. + +  + +```solidity + /** + * @dev Huharibu tokeni za `kiasi` kutoka kwa `akaunti`, ikipunguza + * jumla ya usambazaji. + * + * Hutoa tukio la {Uhamisho} na `kwa` ikiwa imewekwa kwenye anwani ya sifuri. + * + * Mahitaji: + * + * - `akaunti` haiwezi kuwa anwani ya sifuri. + * - `akaunti` lazima iwe na angalau tokeni za `kiasi`. + */ + function _burn(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: choma kutoka kwa anwani ya sifuri"); + + _beforeTokenTransfer(account, address(0), amount); + + _balances[account] = _balances[account].sub(amount, "ERC20: kiasi cha kuchoma kinazidi salio"); + _totalSupply = _totalSupply.sub(amount); + emit Transfer(account, address(0), amount); + } +``` + +Kazi ya `_burn` inakaribia kufanana na `_mint`, isipokuwa inaenda kinyume chake. + +#### Kazi ya _approve {#_approve} + +Hii ni kazi inayobainisha posho. Kumbuka kuwa inaruhusu mmiliki kubainisha +posho ambayo ni ya juu kuliko salio la sasa la mmiliki. Hii ni sawa kwa sababu salio +huangaliwa wakati wa uhamisho, ambapo inaweza kuwa tofauti na salio wakati posho +inapoundwa. + +```solidity + /** + * @dev Huweka `kiasi` kama posho ya `mtumiaji` juu ya tokeni za `mmiliki`. + * + * Kazi hii ya ndani ni sawa na `approve`, na inaweza kutumika kwa + * k.m., kuweka posho za kiotomatiki kwa mifumo fulani, n.k. + * + * Hutoa tukio la {Uidhinishaji}. + * + * Mahitaji: + * + * - `mmiliki` hawezi kuwa anwani ya sifuri. + * - `mtumiaji` hawezi kuwa anwani ya sifuri. + */ + function _approve(address owner, address spender, uint256 amount) internal virtual { + require(owner != address(0), "ERC20: idhinisha kutoka kwa anwani ya sifuri"); + require(spender != address(0), "ERC20: idhinisha kwa anwani ya sifuri"); + + _allowances[owner][spender] = amount; +``` + +  + +Toa tukio la `Uidhinishaji`. Kulingana na jinsi mfumo unavyoandikwa, mkataba wa mtumiaji unaweza kuambiwa kuhusu +idhini ama na mmiliki au na seva inayosikiliza matukio haya. + +```solidity + emit Approval(owner, spender, amount); + } + +``` + +### Rekebisha Kigezo cha Desimali {#modify-the-decimals-variable} + +```solidity + + + /** + * @dev Huweka {decimals} kwa thamani tofauti na ile ya msingi ya 18. + * + * ONYO: Kazi hii inapaswa kuitwa tu kutoka kwa mjenzi. Mifumo mingi + * inayoingiliana na mikataba ya tokeni haitatarajia + * {decimals} kubadilika, na inaweza kufanya kazi kimakosa ikibadilika. + */ + function _setupDecimals(uint8 decimals_) internal { + _decimals = decimals_; + } +``` + +Kazi hii inarekebisha kigezo cha `_decimals` ambacho kinatumika kuwaambia violesura vya mtumiaji jinsi ya kutafsiri kiasi. +Unapaswa kuiita kutoka kwa mjenzi. Itakuwa si uaminifu kuiita wakati wowote unaofuata, na mifumo +haikuundwa kuishughulikia. + +### Vidokezo {#hooks} + +```solidity + + /** + * @dev Ndoano inayoitwa kabla ya uhamisho wowote wa tokeni. Hii inajumuisha + * kuzalisha na kuchoma. + * + * Masharti ya wito: + * + * - wakati `kutoka` na `kwa` zote si sifuri, `kiasi` cha tokeni za ``kutoka`` + * kitahamishiwa kwa `kwa`. + * - wakati `kutoka` ni sifuri, tokeni za `kiasi` zitazalishwa kwa `kwa`. + * - wakati `kwa` ni sifuri, `kiasi` cha tokeni za ``kutoka`` kitachomwa. + * - `kutoka` na `kwa` kamwe haviko zote sifuri. + * + * Ili kujifunza zaidi kuhusu ndoano, nenda kwa xref:ROOT:extending-contracts.adoc#using-hooks[Kutumia Ndoano]. + */ + function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } +} +``` + +Hii ni kazi ya ndoano ya kuitwa wakati wa uhamisho. Hapa ni tupu, lakini ukihitaji +iwe na kitu unaibadilisha tu. + +## Hitimisho {#conclusion} + +Kwa mapitio, hapa kuna baadhi ya mawazo muhimu zaidi katika mkataba huu (kwa maoni yangu, yako yanaweza kutofautiana): + +- _Hakuna siri kwenye mnyororo wa bloku_. Taarifa yoyote ambayo mkataba-erevu unaweza kuipata + inapatikana kwa ulimwengu wote. +- Unaweza kudhibiti mpangilio wa miamala yako mwenyewe, lakini si wakati miamala ya watu wengine + inatokea. Hii ndiyo sababu kubadilisha posho kunaweza kuwa hatari, kwa sababu kunamruhusu + mtumiaji kutumia jumla ya posho zote mbili. +- Thamani za aina ya `uint256` huzunguka. Kwa maneno mengine, _0-1=2^256-1_. Ikiwa hiyo si tabia inayotakiwa, + unapaswa kuiangalia (au kutumia maktaba ya SafeMath ambayo inakufanyia). Kumbuka kuwa hii ilibadilika katika + [Solidity 0.8.0](https://docs.soliditylang.org/en/breaking/080-breaking-changes.html). +- Fanya mabadiliko yote ya hali ya aina maalum katika sehemu maalum, kwa sababu inafanya ukaguzi kuwa rahisi. + Hii ndiyo sababu tuna, kwa mfano, `_approve`, ambayo inaitwa na `approve`, `transferFrom`, + `increaseAllowance`, na `decreaseAllowance` +- Mabadiliko ya hali yanapaswa kuwa ya atomiki, bila kitendo kingine chochote katikati yao (kama unavyoweza kuona + katika `_transfer`). Hii ni kwa sababu wakati wa mabadiliko ya hali una hali isiyolingana. Kwa mfano, + kati ya wakati unapopunguza kutoka kwa salio la mtumaji na wakati unapoongeza kwa salio la + mpokeaji kuna tokeni chache zilizopo kuliko inavyopaswa kuwa. Hii inaweza kutumiwa vibaya ikiwa kuna + operesheni kati yao, hasa wito kwa mkataba tofauti. + +Sasa kwa kuwa umeona jinsi mkataba wa OpenZeppelin ERC-20 unavyoandikwa, na hasa jinsi unavyofanywa +kuwa salama zaidi, nenda uandike mikataba na mifumo yako salama. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/erc20-with-safety-rails/index.md b/public/content/translations/sw/developers/tutorials/erc20-with-safety-rails/index.md new file mode 100644 index 00000000000..f4ea4aa30d1 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/erc20-with-safety-rails/index.md @@ -0,0 +1,217 @@ +--- +title: ERC-20 yenye Kinga za Usalama +description: Jinsi ya kuwasaidia watu kuepuka makosa ya kizembe +author: Ori Pomerantz +lang: sw +tags: [ "erc-20" ] +skill: beginner +published: 2022-08-15 +--- + +## Utangulizi {#introduction} + +Moja ya mambo makuu kuhusu Ethereum ni kwamba hakuna mamlaka kuu inayoweza kurekebisha au kutengua miamala yako. Moja ya matatizo makuu ya Ethereum ni kwamba hakuna mamlaka kuu yenye uwezo wa kutengua makosa ya mtumiaji au miamala haramu. Katika makala haya utajifunza kuhusu baadhi ya makosa ya kawaida ambayo watumiaji hufanya na tokeni za [ERC-20](/developers/docs/standards/tokens/erc-20/), pamoja na jinsi ya kuunda mikataba ya ERC-20 inayowasaidia watumiaji kuepuka makosa hayo, au inayopa mamlaka kuu nguvu fulani (kwa mfano kufungia akaunti). + +Kumbuka kwamba ingawa tutatumia mkataba wa tokeni wa [OpenZeppelin ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20), makala haya hayaielezei kwa undani sana. Unaweza kupata maelezo haya [hapa](/developers/tutorials/erc20-annotated-code). + +Ikiwa unataka kuona msimbo chanzo kamili: + +1. Fungua [Remix IDE](https://remix.ethereum.org/). +2. Bofya aikoni ya kuiga ya github (![aikoni ya kuiga ya github](icon-clone.png)). +3. Iga hifadhi ya github `https://github.com/qbzzt/20220815-erc20-safety-rails`. +4. Fungua **contracts > erc20-safety-rails.sol**. + +## Kuunda mkataba wa ERC-20 {#creating-an-erc-20-contract} + +Kabla hatujaongeza utendaji wa kinga za usalama, tunahitaji mkataba wa ERC-20. Katika makala haya tutatumia [Mchawi wa Mikataba ya OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/wizard). Ifungue katika kivinjari kingine na ufuate maagizo haya: + +1. Chagua **ERC20**. + +2. Weka mipangilio hii: + + | Kigezo | Thamani | + | -------------------- | ---------------- | + | Jina | SafetyRailsToken | + | Alama | SAFE | + | Premint | 1000 | + | Vipengele | Hakuna | + | Udhibiti wa Ufikiaji | Ownable | + | Uwezo wa Kuboresha | Hakuna | + +3. Sogeza juu na ubofye **Fungua kwenye Remix** (kwa Remix) au **Pakua** ili utumie mazingira tofauti. Nitachukulia kuwa unatumia Remix, ikiwa unatumia kitu kingine, fanya tu mabadiliko yanayofaa. + +4. Sasa tuna mkataba wa ERC-20 unaofanya kazi kikamilifu. Unaweza kupanua `.deps` > `npm` ili kuona msimbo ulioingizwa. + +5. Kusanya, sambaza, na cheza na mkataba ili kuona kuwa inafanya kazi kama mkataba wa ERC-20. Ikiwa unahitaji kujifunza jinsi ya kutumia Remix, [tumia mafunzo haya](https://remix.ethereum.org/?#activate=udapp,solidity,LearnEth). + +## Makosa ya kawaida {#common-mistakes} + +### Makosa {#the-mistakes} + +Wakati mwingine watumiaji hutuma tokeni kwenye anwani isiyo sahihi. Ingawa hatuwezi kusoma akili zao kujua walichokusudia kufanya, kuna aina mbili za makosa yanayotokea sana na ni rahisi kugundua: + +1. Kutuma tokeni kwenye anwani ya mkataba wenyewe. Kwa mfano, tokeni ya OP ya [Optimism](https://optimism.mirror.xyz/qvd0WfuLKnePm1Gxb9dpGchPf5uDz5NSMEFdgirDS4c) iliweza kukusanya [zaidi ya 120,000](https://optimism.blockscout.com/address/0x4200000000000000000000000000000000000042) tokeni za OP katika chini ya miezi miwili. Hii inawakilisha kiasi kikubwa cha mali ambayo inawezekana watu wameipoteza tu. + +2. Kutuma tokeni kwenye anwani tupu, ile ambayo haiendani na [akaunti inayomilikiwa nje](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) au [mkataba-erevu](/developers/docs/smart-contracts). Ingawa sina takwimu za mara ngapi hili hutokea, [tukio moja lingeweza kugharimu tokeni 20,000,000](https://gov.optimism.io/t/message-to-optimism-community-from-wintermute/2595). + +### Kuzuia uhamisho {#preventing-transfers} + +Mkataba wa OpenZeppelin ERC-20 unajumuisha [kiunganishi, `_beforeTokenTransfer`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol#L364-L368), ambacho huitwa kabla ya tokeni kuhamishwa. Kwa chaguo-msingi kiunganishi hiki hakifanyi chochote, lakini tunaweza kuweka utendaji wetu wenyewe juu yake, kama vile ukaguzi unaorejesha nyuma ikiwa kuna tatizo. + +Ili kutumia kiunganishi, ongeza chaguo hili la kukokotoa baada ya kiunda: + +```solidity + function _beforeTokenTransfer(address from, address to, uint256 amount) + internal virtual + override(ERC20) + { + super._beforeTokenTransfer(from, to, amount); + } +``` + +Baadhi ya sehemu za chaguo hili la kukokotoa zinaweza kuwa mpya ikiwa huna uzoefu sana na Solidity: + +```solidity + internal virtual +``` + +Neno kuu `virtual` linamaanisha kuwa kama vile tulivyorithi utendaji kutoka `ERC20` na kubatilisha chaguo hili la kukokotoa, mikataba mingine inaweza kurithi kutoka kwetu na kubatilisha chaguo hili la kukokotoa. + +```solidity + override(ERC20) +``` + +Lazima tubainishe waziwazi kwamba [tunabatilisha](https://docs.soliditylang.org/en/v0.8.15/contracts.html#function-overriding) ufafanuzi wa tokeni ya ERC20 wa `_beforeTokenTransfer`. Kwa ujumla, ufafanuzi wa wazi ni bora zaidi, kutoka kwa mtazamo wa usalama, kuliko zile zilizodokezwa - huwezi kusahau kwamba umefanya kitu ikiwa kiko mbele yako. Hiyo pia ndiyo sababu tunahitaji kubainisha `_beforeTokenTransfer` ya daraja gani kuu tunayobatilisha. + +```solidity + super._beforeTokenTransfer(from, to, amount); +``` + +Mstari huu unaita chaguo la kukokotoa la `_beforeTokenTransfer` la mkataba au mikataba tuliyorithi kutoka kwayo ambayo inayo. Katika kesi hii, hiyo ni `ERC20` tu, `Ownable` haina kiunganishi hiki. Ingawa kwa sasa `ERC20._beforeTokenTransfer` haifanyi chochote, tunaiita endapo utendaji utaongezwa katika siku zijazo (na kisha tunaamua kusambaza tena mkataba, kwa sababu mikataba haibadiliki baada ya usambazaji). + +### Kuweka msimbo wa mahitaji {#coding-the-requirements} + +Tunataka kuongeza mahitaji haya kwenye chaguo la kukokotoa: + +- Anwani ya `to` haiwezi kuwa sawa na `address(this)`, anwani ya mkataba wa ERC-20 wenyewe. +- Anwani ya `to` haiwezi kuwa tupu, lazima iwe ama: + - Akaunti inayomilikiwa nje (EOA). Hatuwezi kuangalia kama anwani ni EOA moja kwa moja, lakini tunaweza kuangalia salio la ETH la anwani. EOA karibu kila mara huwa na salio, hata kama hazitumiki tena - ni vigumu kuzisafisha hadi wei ya mwisho. + - Mkataba-erevu. Kupima kama anwani ni mkataba-erevu ni kugumu kidogo. Kuna opcode inayokagua urefu wa msimbo wa nje, inayoitwa [`EXTCODESIZE`](https://www.evm.codes/#3b), lakini haipatikani moja kwa moja katika Solidity. Lazima tutumie [Yul](https://docs.soliditylang.org/en/v0.8.15/yul.html), ambayo ni mkusanyiko wa EVM, kwa ajili yake. Kuna thamani zingine ambazo tunaweza kutumia kutoka Solidity ([`
.code` na `
.codehash`](https://docs.soliditylang.org/en/v0.8.15/units-and-global-variables.html#members-of-address-types)), lakini zinagharimu zaidi. + +Hebu tupitie msimbo mpya mstari kwa mstari: + +```solidity + require(to != address(this), "Haiwezi kutuma tokeni kwa anwani ya mkataba"); +``` + +Hili ndilo sharti la kwanza, angalia kuwa `to` na `this(address)` si kitu kimoja. + +```solidity + bool isToContract; + assembly { + isToContract := gt(extcodesize(to), 0) + } +``` + +Hivi ndivyo tunavyoangalia kama anwani ni mkataba. Hatuwezi kupokea matokeo moja kwa moja kutoka Yul, kwa hivyo badala yake tunafafanua kigezo cha kushikilia matokeo (`isToContract` katika kesi hii). Jinsi Yul inavyofanya kazi ni kwamba kila opcode inachukuliwa kama chaguo la kukokotoa. Kwa hivyo kwanza tunaita [`EXTCODESIZE`](https://www.evm.codes/#3b) ili kupata ukubwa wa mkataba, na kisha kutumia [`GT`](https://www.evm.codes/#11) kuangalia si sifuri (tunashughulika na nambari kamili zisizo na alama, kwa hivyo bila shaka haiwezi kuwa hasi). Kisha tunaandika matokeo kwa `isToContract`. + +```solidity + require(to.balance != 0 || isToContract, "Haiwezi kutuma tokeni kwa anwani tupu"); +``` + +Na hatimaye, tuna ukaguzi halisi wa anwani tupu. + +## Ufikiaji wa kiutawala {#admin-access} + +Wakati mwingine ni muhimu kuwa na msimamizi anaye weza kutengua makosa. Ili kupunguza uwezekano wa matumizi mabaya, msimamizi huyu anaweza kuwa [multisig](https://blog.logrocket.com/security-choices-multi-signature-wallets/) ili watu wengi wakubaliane juu ya hatua. Katika makala haya tutakuwa na vipengele viwili vya kiutawala: + +1. Kufungia na kufungua akaunti. Hii inaweza kuwa muhimu, kwa mfano, wakati akaunti inaweza kuathiriwa. +2. Usafishaji wa mali. + + Wakati mwingine walaghai hutuma tokeni za ulaghai kwa mkataba halisi wa tokeni ili kupata uhalali. Kwa mfano, [angalia hapa](https://optimism.blockscout.com/token/0x2348B1a1228DDCd2dB668c3d30207c3E1852fBbe?tab=holders). Mkataba halali wa ERC-20 ni [0x4200....0042](https://optimism.blockscout.com/token/0x4200000000000000000000000000000000000042). Ulaghai unaojifanya kuwa ni [0x234....bbe](https://optimism.blockscout.com/token/0x2348B1a1228DDCd2dB668c3d30207c3E1852fBbe). + + Inawezekana pia kwamba watu hutuma tokeni halali za ERC-20 kwenye mkataba wetu kwa makosa, ambayo ni sababu nyingine ya kutaka kuwa na njia ya kuzitoa. + +OpenZeppelin hutoa mifumo miwili ya kuwezesha ufikiaji wa kiutawala: + +- Mikataba ya [`Ownable`](https://docs.openzeppelin.com/contracts/5.x/access-control#ownership-and-ownable) ina mmiliki mmoja. Chaguo za kukokotoa zilizo na [kirekebishaji](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) cha `onlyOwner` zinaweza kuitwa tu na mmiliki huyo. Wamiliki wanaweza kuhamisha umiliki kwa mtu mwingine au kuukana kabisa. Haki za akaunti zingine zote kwa kawaida huwa sawa. +- Mikataba ya [`AccessControl`](https://docs.openzeppelin.com/contracts/5.x/access-control#role-based-access-control) ina [udhibiti wa ufikiaji unaotegemea jukumu (RBAC)](https://en.wikipedia.org/wiki/Role-based_access_control). + +Kwa urahisi, katika makala haya tunatumia `Ownable`. + +### Kufungia na kufungua mikataba {#freezing-and-thawing-contracts} + +Kufungia na kufungua mikataba kunahitaji mabadiliko kadhaa: + +- [Ramani](https://www.tutorialspoint.com/solidity/solidity_mappings.htm) kutoka kwa anwani hadi [boolean](https://en.wikipedia.org/wiki/Boolean_data_type) ili kufuatilia ni anwani gani zimefungiwa. Thamani zote awali ni sifuri, ambayo kwa thamani za boolean inatafsiriwa kama uongo. Hiki ndicho tunachotaka kwa sababu kwa chaguomsingi akaunti hazijafungiwa. + + ```solidity + mapping(address => bool) public frozenAccounts; + ``` + +- [Matukio](https://www.tutorialspoint.com/solidity/solidity_events.htm) ya kumjulisha yeyote anayevutiwa wakati akaunti imefungiwa au kufunguliwa. Kitaalamu, matukio hayahitajiki kwa vitendo hivi, lakini inasaidia msimbo wa offchain kuweza kusikiliza matukio haya na kujua kinachoendelea. Inachukuliwa kuwa ni adabu njema kwa mkataba-erevu kuzitoa wakati kitu kinachoweza kuwa muhimu kwa mtu mwingine kinapotokea. + + Matukio yameorodheshwa kwa hivyo itawezekana kutafuta kwa nyakati zote ambazo akaunti imefungiwa au kufunguliwa. + + ```solidity + // Wakati akaunti zimefungiwa au kufunguliwa + event AccountFrozen(address indexed _addr); + event AccountThawed(address indexed _addr); + ``` + +- Chaguo za kukokotoa za kufungia na kufungua akaunti. Chaguo hizi mbili za kukokotoa karibu zinafanana, kwa hivyo tutapitia tu chaguo la kukokotoa la kufungia. + + ```solidity + function freezeAccount(address addr) + public + onlyOwner + ``` + + Chaguo za kukokotoa zilizo na alama ya [`public`](https://www.tutorialspoint.com/solidity/solidity_contracts.htm) zinaweza kuitwa kutoka kwa mikataba-erevu mingine au moja kwa moja na muamala. + + ```solidity + { + require(!frozenAccounts[addr], "Akaunti tayari imefungiwa"); + frozenAccounts[addr] = true; + emit AccountFrozen(addr); + } // freezeAccount + ``` + + Ikiwa akaunti tayari imefungiwa, rejesha. Vinginevyo, ifungie na `toa` tukio. + +- Badilisha `_beforeTokenTransfer` ili kuzuia pesa zisihamishwe kutoka kwa akaunti iliyofungiwa. Kumbuka kuwa pesa bado zinaweza kuhamishiwa kwenye akaunti iliyofungiwa. + + ```solidity + require(!frozenAccounts[from], "Akaunti imefungiwa"); + ``` + +### Usafishaji wa mali {#asset-cleanup} + +Ili kutoa tokeni za ERC-20 zinazoshikiliwa na mkataba huu tunahitaji kuita chaguo la kukokotoa kwenye mkataba wa tokeni ambao zinahusika, ama [`transfer`](https://eips.ethereum.org/EIPS/eip-20#transfer) au [`approve`](https://eips.ethereum.org/EIPS/eip-20#approve). Hakuna maana ya kupoteza gesi katika kesi hii kwenye posho, tunaweza pia kuhamisha moja kwa moja. + +```solidity + function cleanupERC20( + address erc20, + address dest + ) + public + onlyOwner + { + IERC20 token = IERC20(erc20); +``` + +Hii ndiyo sintaksia ya kuunda kitu kwa ajili ya mkataba tunapopokea anwani. Tunaweza kufanya hivi kwa sababu tuna ufafanuzi wa tokeni za ERC20 kama sehemu ya msimbo chanzo (tazama mstari wa 4), na faili hiyo inajumuisha [ufafanuzi wa IERC20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol), kiolesura cha mkataba wa OpenZeppelin ERC-20. + +```solidity + uint balance = token.balanceOf(address(this)); + token.transfer(dest, balance); + } +``` + +Hili ni chaguo la kukokotoa la usafishaji, kwa hivyo inawezekana hatutaki kuacha tokeni zozote. Badala ya kupata salio kutoka kwa mtumiaji mwenyewe, tunaweza pia kufanya mchakato uwe wa kiotomatiki. + +## Hitimisho {#conclusion} + +Hili si suluhisho kamili - hakuna suluhisho kamili kwa tatizo la "mtumiaji amefanya kosa". Hata hivyo, kutumia aina hizi za ukaguzi kunaweza angalau kuzuia makosa kadhaa. Uwezo wa kufungia akaunti, ingawa ni hatari, unaweza kutumika kupunguza uharibifu wa udukuzi fulani kwa kumnyima mdukuzi fedha zilizoibwa. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/ethereum-for-web2-auth/index.md b/public/content/translations/sw/developers/tutorials/ethereum-for-web2-auth/index.md new file mode 100644 index 00000000000..d638ae97f0d --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/ethereum-for-web2-auth/index.md @@ -0,0 +1,886 @@ +--- +title: Kutumia Ethereum kwa uthibitishaji wa web2 +description: Baada ya kusoma mafunzo haya, msanidi programu ataweza kuunganisha kuingia kwa Ethereum (web3) na kuingia kwa SAML, kiwango kinachotumika katika web2 kutoa kuingia mara moja na huduma zingine zinazohusiana. Hii inaruhusu ufikiaji wa rasilimali za web2 kuthibitishwa kupitia saini za Ethereum, na sifa za mtumiaji zikitoka kwenye uthibitisho. +author: Ori Pomerantz +tags: [ "web2", "uthibitishaji", "eas" ] +skill: beginner +lang: sw +published: 2025-04-30 +--- + +## Utangulizi + +[SAML](https://www.onelogin.com/learn/saml) ni kiwango kinachotumika kwenye web2 kuruhusu [mtoa huduma wa kitambulisho (IdP)](https://en.wikipedia.org/wiki/Identity_provider#SAML_identity_provider) kutoa taarifa za mtumiaji kwa [watoa huduma (SP)](https://en.wikipedia.org/wiki/Service_provider_\(SAML\)). + +Katika mafunzo haya unajifunza jinsi ya kuunganisha saini za Ethereum na SAML ili kuwaruhusu watumiaji kutumia mikoba yao ya Ethereum kujithibitisha kwa huduma za web2 ambazo bado hazitumii Ethereum moja kwa moja. + +Kumbuka kwamba mafunzo haya yameandikwa kwa ajili ya hadhira mbili tofauti: + +- Watu wa Ethereum wanaoielewa Ethereum na wanahitaji kujifunza SAML +- Watu wa Web2 wanaoielewa SAML na uthibitishaji wa web2 na wanahitaji kujifunza Ethereum + +Kutokana na hilo, itaendana na kuwa na nyenzo nyingi za utangulizi ambazo tayari unazijua. Jisikie huru kuiruka. + +### SAML kwa watu wa Ethereum + +SAML ni itifaki ya kati. Mtoa huduma (SP) anakubali tu madai (kama vile "huyu ni mtumiaji wangu John, anapaswa kuwa na ruhusa za kufanya A, B, na C") kutoka kwa mtoa huduma wa kitambulisho (IdP) ikiwa ina uhusiano wa awali wa kuaminiana nayo, au na [mamlaka ya cheti](https://www.ssl.com/article/what-is-a-certificate-authority-ca/) iliyosaini cheti cha IdP hicho. + +Kwa mfano, SP inaweza kuwa wakala wa usafiri unaotoa huduma za usafiri kwa makampuni, na IdP inaweza kuwa tovuti ya ndani ya kampuni. Wakati wafanyakazi wanapohitaji kuweka nafasi ya safari za kibiashara, wakala wa usafiri huwatuma kwa ajili ya uthibitishaji na kampuni kabla ya kuwaruhusu kuweka nafasi ya safari. + +![Mchakato wa SAML hatua kwa hatua](./fig-01-saml.png) + +Hii ndiyo njia ambayo taasisi tatu, kivinjari, SP, na IdP, hujadiliana kwa ajili ya ufikiaji. SP haihitaji kujua chochote kuhusu mtumiaji anayetumia kivinjari mapema, ila tu kumwamini IdP. + +### Ethereum kwa watu wa SAML + +Ethereum ni mfumo uliotawanywa. + +![Kuingia kwa Ethereum](./fig-02-eth-logon.png) + +Watumiaji wana ufunguo binafsi (kwa kawaida huhifadhiwa kwenye kiendelezi cha kivinjari). Kutoka kwenye ufunguo binafsi unaweza kupata ufunguo wa umma, na kutoka hapo anwani ya baiti 20. Wakati watumiaji wanapohitaji kuingia kwenye mfumo, wanaombwa kusaini ujumbe wenye nonce (thamani ya matumizi moja). Seva inaweza kuthibitisha saini iliundwa na anwani hiyo. + +![Kupata data ya ziada kutoka kwa uthibitisho](./fig-03-eas-data.png) + +Saini inathibitisha tu anwani ya Ethereum. Ili kupata sifa zingine za mtumiaji, kwa kawaida unatumia [uthibitisho](https://attest.org/). Uthibitisho kwa kawaida huwa na nyanja hizi: + +- **Mthibitishaji**, anwani iliyofanya uthibitisho +- **Mpokeaji**, anwani ambayo uthibitisho unatumika kwake +- **Data**, data inayothibitishwa, kama vile jina, ruhusa, n.k. +- **Schema**, Kitambulisho cha schema inayotumika kutafsiri data. + +Kwa sababu ya asili ya mfumo uliotawanywa wa Ethereum, mtumiaji yeyote anaweza kufanya uthibitisho. Utambulisho wa mthibitishaji ni muhimu kutambua ni uthibitisho upi tunaouzingatia kuwa wa kuaminika. + +## Mpangilio + +Hatua ya kwanza ni kuwa na SAML SP na SAML IdP zinazowasiliana kati yao. + +1. Pakua programu. Programu ya mfano kwa makala hii iko [kwenye github](https://github.com/qbzzt/250420-saml-ethereum). Hatua tofauti huhifadhiwa katika matawi tofauti, kwa hatua hii unataka `saml-only` + + ```sh + git clone https://github.com/qbzzt/250420-saml-ethereum -b saml-only + cd 250420-saml-ethereum + pnpm install + ``` + +2. Unda funguo zenye vyeti vilivyosainiwa kibinafsi. Hii inamaanisha kuwa ufunguo ni mamlaka yake ya cheti, na inahitaji kuingizwa kwa mikono kwa mtoa huduma. Tazama [hati za OpenSSL](https://docs.openssl.org/master/man1/openssl-req/) kwa habari zaidi. + + ```sh + mkdir keys + cd keys + openssl req -new -x509 -days 365 -nodes -sha256 -out saml-sp.crt -keyout saml-sp.pem -subj /CN=sp/ + openssl req -new -x509 -days 365 -nodes -sha256 -out saml-idp.crt -keyout saml-idp.pem -subj /CN=idp/ + cd .. + ``` + +3. Anzisha seva (zote SP na IdP) + + ```sh + pnpm start + ``` + +4. Vinjari hadi kwa SP kwenye URL [http://localhost:3000/](http://localhost:3000/) na ubofye kitufe ili kuelekezwa kwa IdP (mlango 3001). + +5. Mpe IdP anwani yako ya barua pepe na ubofye **Ingia kwa mtoa huduma**. Tazama kuwa unaelekezwa tena kwa mtoa huduma (mlango 3000) na kwamba anakutambua kwa anwani yako ya barua pepe. + +### Maelezo ya kina + +Hivi ndivyo inavyotokea, hatua kwa hatua: + +![Kuingia kwa kawaida kwa SAML bila Ethereum](./fig-04-saml-no-eth.png) + +#### src/config.mts + +Faili hii ina usanidi kwa Mtoa Huduma wa Kitambulisho na Mtoa Huduma. Kwa kawaida hizi mbili zingekuwa taasisi tofauti, lakini hapa tunaweza kushiriki msimbo kwa urahisi. + +```typescript +const fs = await import("fs") + +const protocol="http" +``` + +Kwa sasa tunafanya majaribio tu, kwa hivyo ni sawa kutumia HTTP. + +```typescript +export const spCert = fs.readFileSync("keys/saml-sp.crt").toString() +export const idpCert = fs.readFileSync("keys/saml-idp.crt").toString() +``` + +Soma funguo za umma, ambazo kwa kawaida zinapatikana kwa vipengele vyote viwili (na aidha zinaaminika moja kwa moja, au zimesainiwa na mamlaka ya cheti inayoaminika). + +```typescript +export const spPort = 3000 +export const spHostname = "localhost" +export const spDir = "sp" + +export const idpPort = 3001 +export const idpHostname = "localhost" +export const idpDir = "idp" + +export const spUrl = `${protocol}://${spHostname}:${spPort}/${spDir}` +export const idpUrl = `${protocol}://${idpHostname}:${idpPort}/${idpDir}` +``` + +URL za vipengele vyote viwili. + +```typescript +export const spPublicData = { +``` + +Data ya umma kwa mtoa huduma. + +```typescript + entityID: `${spUrl}/metadata`, +``` + +Kwa kawaida, katika SAML `entityID` ni URL ambapo metadata ya taasisi inapatikana. Metadata hii inalingana na data ya umma hapa, isipokuwa iko katika fomu ya XML. + +```typescript + wantAssertionsSigned: true, + authnRequestsSigned: false, + signingCert: spCert, + allowCreate: true, + assertionConsumerService: [{ + Binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', + Location: `${spUrl}/assertion`, + }] + } +``` + +Ufafanuzi muhimu zaidi kwa madhumuni yetu ni `assertionConsumerServer`. Inamaanisha kuwa ili kudai kitu (kwa mfano, "mtumiaji anayekutumia habari hii ni somebody@example.com") kwa mtoa huduma tunahitaji kutumia [HTTP POST](https://www.w3schools.com/tags/ref_httpmethods.asp) kwa URL `http://localhost:3000/sp/assertion`. + +```typescript +export const idpPublicData = { + entityID: `${idpUrl}/metadata`, + signingCert: idpCert, + wantAuthnRequestsSigned: false, + singleSignOnService: [{ + Binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + Location: `${idpUrl}/login` + }], + singleLogoutService: [{ + Binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + Location: `${idpUrl}/logout` + }], + } +``` + +Data ya umma kwa mtoa huduma wa kitambulisho ni sawa. Inabainisha kuwa ili kumwingiza mtumiaji unatumia POST kwa `http://localhost:3001/idp/login` na kumtoa mtumiaji unatumia POST kwa `http://localhost:3001/idp/logout`. + +#### src/sp.mts + +Huu ndio msimbo unaotekeleza mtoa huduma. + +```typescript +import * as config from "./config.mts" +const fs = await import("fs") +const saml = await import("samlify") +``` + +Tunatumia maktaba ya [`samlify`](https://www.npmjs.com/package/samlify) kutekeleza SAML. + +```typescript +import * as validator from "@authenio/samlify-node-xmllint" +saml.setSchemaValidator(validator) +``` + +Maktaba ya `samlify` inatarajia kuwa na kifurushi kinachothibitisha kuwa XML ni sahihi, imesainiwa na ufunguo wa umma unaotarajiwa, n.k. Tunatumia [`@authenio/samlify-node-xmllint`](https://www.npmjs.com/package/@authenio/samlify-node-xmllint) kwa madhumuni haya. + +```typescript +const express = (await import("express")).default +const spRouter = express.Router() +const app = express() +``` + +[`Router`](https://expressjs.com/en/5x/api.html#router) ya [`express`](https://expressjs.com/) ni "tovuti ndogo" ambayo inaweza kuwekwa ndani ya tovuti. Katika kesi hii, tunaitumia kupanga ufafanuzi wote wa watoa huduma pamoja. + +```typescript +const spPrivateKey = fs.readFileSync("keys/saml-sp.pem").toString() + +const sp = saml.ServiceProvider({ + privateKey: spPrivateKey, + ...config.spPublicData +}) +``` + +Uwakilishi wa mtoa huduma wenyewe ni data yote ya umma, na ufunguo binafsi unaotumia kusaini habari. + +```typescript +const idp = saml.IdentityProvider(config.idpPublicData); +``` + +Data ya umma ina kila kitu ambacho mtoa huduma anahitaji kujua kuhusu mtoa huduma wa kitambulisho. + +```typescript +spRouter.get(`/metadata`, + (req, res) => res.header("Content-Type", "text/xml").send(sp.getMetadata()) +) +``` + +Ili kuwezesha ushirikiano na vipengele vingine vya SAML, watoa huduma na watoa huduma za utambulisho wanapaswa kuwa na data zao za umma (zinazoitwa metadata) zinazopatikana katika muundo wa XML katika `/metadata`. + +```typescript +spRouter.post(`/assertion`, +``` + +Hii ndiyo ukurasa unaofikiwa na kivinjari ili kujitambulisha. Madai hayo yanajumuisha kitambulisho cha mtumiaji (hapa tunatumia anwani ya barua pepe), na yanaweza kujumuisha sifa za ziada. Hiki ni kishikizi cha hatua ya 7 katika mchoro wa mfuatano hapo juu. + +```typescript + async (req, res) => { + // console.log(`SAML response:\n${Buffer.from(req.body.SAMLResponse, 'base64').toString('utf-8')}`) +``` + +Unaweza kutumia amri iliyotolewa maoni ili kuona data ya XML iliyotolewa katika madai. Ime[simbwa kwa base64](https://en.wikipedia.org/wiki/Base64). + +```typescript + try { + const loginResponse = await sp.parseLoginResponse(idp, 'post', req); +``` + +Changanua ombi la kuingia kutoka kwa seva ya utambulisho. + +```typescript + res.send(` + + +

Hello ${loginResponse.extract.nameID}

+ + + `) + res.send(); +``` + +Tuma jibu la HTML, ili tu kumwonyesha mtumiaji tulipata kuingia. + +```typescript + } catch (err) { + console.error('Error processing SAML response:', err); + res.status(400).send('SAML authentication failed'); + } + } +) +``` + +Mjulishe mtumiaji endapo kutakuwa na hitilafu. + +```typescript +spRouter.get('/login', +``` + +Unda ombi la kuingia wakati kivinjari kinapojaribu kupata ukurasa huu. Hiki ni kishikizi cha hatua ya 1 katika mchoro wa mfuatano hapo juu. + +```typescript + async (req, res) => { + const loginRequest = await sp.createLoginRequest(idp, "post") +``` + +Pata taarifa ya kutuma ombi la kuingia. + +```typescript + res.send(` + + + +``` + +Ukurasa huu unawasilisha fomu (tazama hapa chini) kiotomatiki. Kwa njia hii mtumiaji hahitaji kufanya chochote ili aelekezwe. Hii ni hatua ya 2 katika mchoro wa mfuatano hapo juu. + +```typescript +
+``` + +Tuma kwa `loginRequest.entityEndpoint` (URL ya mwisho wa mtoa huduma wa utambulisho). + +```typescript + +``` + +Jina la ingizo ni `loginRequest.type` (`SAMLRequest`). Maudhui ya uwanja huo ni `loginRequest.context`, ambayo tena ni XML iliyosimbwa kwa base64. + +```typescript +
+ + + `) + } +) + +app.use(express.urlencoded({extended: true})) +``` + +[Middleware hii](https://expressjs.com/en/5x/api.html#express.urlencoded) inasoma mwili wa [ombi la HTTP](https://www.tutorialspoint.com/http/http_requests.htm). Kwa chaguo-msingi, express inapuuzia, kwa sababu maombi mengi hayaihitaji. Tunaihitaji kwa sababu POST inatumia mwili. + +```typescript +app.use(`/${config.spDir}`, spRouter) +``` + +Pachika kipanga njia katika saraka ya mtoa huduma (`/sp`). + +```typescript +app.get("/", (req, res) => { + res.send(` + + + + + + `) +}) +``` + +Ikiwa kivinjari kitajaribu kupata saraka ya mizizi, kipe kiungo cha ukurasa wa kuingia. + +```typescript +app.listen(config.spPort, () => { + console.log(`service provider is running on http://${config.spHostname}:${config.spPort}`) +}) +``` + +Sikiliza `spPort` na programu hii ya express. + +#### src/idp.mts + +Huyu ndiye mtoa huduma wa kitambulisho. Ni sawa na mtoa huduma, maelezo yaliyo hapa chini ni ya sehemu ambazo ni tofauti. + +```typescript +const xmlParser = new (await import("fast-xml-parser")).XMLParser( + { + ignoreAttributes: false, // Preserve attributes + attributeNamePrefix: "@_", // Prefix for attributes + } +) +``` + +Tunahitaji kusoma na kuelewa ombi la XML tunalopokea kutoka kwa mtoa huduma. + +```typescript +const getLoginPage = requestId => ` +``` + +Kazi hii huunda ukurasa na fomu inayojituma yenyewe ambayo inarudishwa katika hatua ya 4 ya mchoro wa mfuatano hapo juu. + +```typescript + + + Login page + + +

Login page

+
+ + Email address: +
+ +``` + +Kuna nyanja mbili tunazotuma kwa mtoa huduma: + +1. `requestId` ambayo tunajibu. +2. Kitambulisho cha mtumiaji (tunatumia anwani ya barua pepe ambayo mtumiaji hutoa kwa sasa). + +```typescript +
+ + + +const idpRouter = express.Router() + +idpRouter.post("/loginSubmitted", async (req, res) => { + const loginResponse = await idp.createLoginResponse( +``` + +Hiki ni kishikizi cha hatua ya 5 katika mchoro wa mfuatano hapo juu. [`idp.createLoginResponse`](https://github.com/tngan/samlify/blob/master/src/entity-idp.ts#L73-L125) huunda jibu la kuingia. + +```typescript + sp, + { + authnContextClassRef: 'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport', + audience: sp.entityID, +``` + +Watazamaji ni watoa huduma. + +```typescript + extract: { + request: { + id: req.body.requestId + } + }, +``` + +Taarifa iliyotolewa kutoka kwa ombi. Kigezo kimoja tunachojali katika ombi ni requestId, ambayo inaruhusu mtoa huduma kulinganisha maombi na majibu yao. + +```typescript + signingKey: { privateKey: idpPrivateKey, publicKey: config.idpCert } // Ensure signing +``` + +Tunahitaji `signingKey` ili kuwa na data ya kusaini jibu. Mtoa huduma haamini maombi ambayo hayajasainiwa. + +```typescript + }, + "post", + { + email: req.body.email +``` + +Hili ni eneo lenye maelezo ya mtumiaji tunayorudisha kwa mtoa huduma. + +```typescript + } + ); + + res.send(` + + + + +
+ +
+ + + `) +}) +``` + +Tena, tumia fomu inayojituma yenyewe. Hii ni hatua ya 6 ya mchoro wa mfuatano hapo juu. + +```typescript + +// IdP endpoint for login requests +idpRouter.post(`/login`, +``` + +Hii ni sehemu ya mwisho inayopokea ombi la kuingia kutoka kwa mtoa huduma. Hii ni handler hatua ya 3 ya mchoro wa mfuatano hapo juu. + +```typescript + async (req, res) => { + try { + // Workaround because I couldn't get parseLoginRequest to work. + // const loginRequest = await idp.parseLoginRequest(sp, 'post', req) + const samlRequest = xmlParser.parse(Buffer.from(req.body.SAMLRequest, 'base64').toString('utf-8')) + res.send(getLoginPage(samlRequest["samlp:AuthnRequest"]["@_ID"])) +``` + +Tunapaswa kuwa na uwezo wa kutumia [`idp.parseLoginRequest`](https://github.com/tngan/samlify/blob/master/src/entity-idp.ts#L127-L144) kusoma kitambulisho cha ombi la uthibitishaji. Hata hivyo, sikuweza kuifanyia kazi na haikustahili kutumia muda mwingi juu yake kwa hivyo ninatumia tu [kichanganuzi cha XML cha jumla](https://www.npmjs.com/package/fast-xml-parser). Taarifa tunayohitaji ni sifa ya `ID` ndani ya lebo ya ``, ambayo iko katika kiwango cha juu cha XML. + +## Kutumia saini za Ethereum + +Sasa kwa kuwa tunaweza kutuma utambulisho wa mtumiaji kwa mtoa huduma, hatua inayofuata ni kupata utambulisho wa mtumiaji kwa njia inayoaminika. Viem inaturuhusu kuuliza tu mkoba kwa anwani ya mtumiaji, lakini hii inamaanisha kuuliza kivinjari kwa habari. Hatuidhibiti kivinjari, kwa hivyo hatuwezi kuamini moja kwa moja jibu tunalopata kutoka kwake. + +Badala yake, IdP itatuma kivinjari mfuatano wa kusaini. Ikiwa mkoba katika kivinjari unasaini mfuatano huu, inamaanisha kuwa kweli ni anwani hiyo (yaani, inajua ufunguo binafsi unaolingana na anwani). + +Ili kuona hili likitendeka, simamisha IdP na SP zilizopo na endesha amri hizi: + +```sh +git checkout eth-signatures +pnpm install +pnpm start +``` + +Kisha vinjari [kwa SP](http://localhost:3000) na ufuate maelekezo. + +Kumbuka kuwa kwa wakati huu hatujui jinsi ya kupata anwani ya barua pepe kutoka kwa anwani ya Ethereum, kwa hivyo badala yake tunaripoti `@bad.email.address` kwa SP. + +### Maelezo ya kina + +Mabadiliko yapo katika hatua 4-5 katika mchoro uliopita. + +![SAML na saini ya Ethereum](./fig-05-saml-w-signature.png) + +Faili pekee tuliyobadilisha ni `idp.mts`. Hapa kuna sehemu zilizobadilishwa. + +```typescript +import { v4 as uuidv4 } from 'uuid' +import { verifyMessage } from 'viem' +``` + +Tunahitaji maktaba hizi mbili za ziada. Tunatumia [`uuid`](https://www.npmjs.com/package/uuid) kuunda thamani ya [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce). Thamani yenyewe haijalishi, ni ukweli tu kwamba inatumika mara moja tu. + +Maktaba ya [`viem`](https://viem.sh/) inaturuhusu kutumia ufafanuzi wa Ethereum. Hapa tunaihitaji ili kuthibitisha kuwa saini ni halali. + +```typescript +const loginPrompt = "To access the service provider, sign this nonce: " +``` + +Mkoba unamwomba mtumiaji ruhusa ya kusaini ujumbe. Ujumbe ambao ni nonce tu unaweza kuwachanganya watumiaji, kwa hivyo tunajumuisha kidokezo hiki. + +```typescript +// Keep requestIDs here +let nonces = {} +``` + +Tunahitaji taarifa ya ombi ili tuweze kulijibu. Tunaweza kuituma na ombi (hatua ya 4), na kuipokea tena (hatua ya 5). Hata hivyo, hatuwezi kuamini taarifa tunazopata kutoka kwenye kivinjari, ambacho kiko chini ya udhibiti wa mtumiaji anayeweza kuwa na nia mbaya. Kwa hivyo ni bora kuihifadhi hapa, na nonce kama ufunguo. + +Kumbuka kuwa tunafanya hivi hapa kama kigezo kwa ajili ya urahisi. Hata hivyo, hii ina hasara kadhaa: + +- Tuko katika hatari ya shambulio la kunyimwa huduma. Mtumiaji hasidi anaweza kujaribu kuingia mara nyingi, akijaza kumbukumbu zetu. +- Ikiwa mchakato wa IdP unahitaji kuanzishwa upya, tunapoteza maadili yaliyopo. +- Hatuwezi kusawazisha mzigo katika michakato mingi, kwa sababu kila moja ingekuwa na kigezo chake. + +Katika mfumo wa uzalishaji tungetumia hifadhidata na kutekeleza aina fulani ya utaratibu wa kumalizika muda. + +```typescript +const getSignaturePage = requestId => { + const nonce = uuidv4() + nonces[nonce] = requestId +``` + +Unda nonce, na uhifadhi `requestId` kwa matumizi ya baadaye. + +```typescript + return ` + + + + + +

Please sign

+ +
+ + + +` +} +``` + +Sehemu iliyobaki ni HTML ya kawaida tu. + +```typescript +idpRouter.get("/signature/:nonce/:account/:signature", async (req, res) => { +``` + +Hiki ni kishikizi cha hatua ya 5 katika mchoro wa mfuatano. + +```typescript + const requestId = nonces[req.params.nonce] + if (requestId === undefined) { + res.send("Bad nonce") + return ; + } + + nonces[req.params.nonce] = undefined +``` + +Pata kitambulisho cha ombi, na ufute nonce kutoka kwa `nonces` ili kuhakikisha haiwezi kutumika tena. + +```typescript + try { +``` + +Kwa sababu kuna njia nyingi ambazo saini inaweza kuwa batili, tunafunga hii katika `try ...` kuzuia `catch` ili kunasa makosa yoyote yaliyorushwa. + +```typescript + const validSignature = await verifyMessage({ + address: req.params.account, + message: `${loginPrompt}${req.params.nonce}`, + signature: req.params.signature + }) +``` + +Tumia [`verifyMessage`](https://viem.sh/docs/actions/public/verifyMessage#verifymessage) kutekeleza hatua ya 5.5 katika mchoro wa mfuatano. + +```typescript + if (!validSignature) + throw("Bad signature") + } catch (err) { + res.send("Error:" + err) + return ; + } +``` + +Sehemu iliyobaki ya mshikaji ni sawa na kile tumefanya katika mshikaji wa `/loginSubmitted` hapo awali, isipokuwa kwa mabadiliko madogo. + +```typescript + const loginResponse = await idp.createLoginResponse( + . + . + . + { + email: req.params.account + "@bad.email.address" + } + ); +``` + +Hatuna anwani halisi ya barua pepe (tutaipata katika sehemu inayofuata), kwa hivyo kwa sasa tunarudisha anwani ya Ethereum na kuiweka alama wazi kuwa si anwani ya barua pepe. + +```typescript +// IdP endpoint for login requests +idpRouter.post(`/login`, + async (req, res) => { + try { + // Workaround because I couldn't get parseLoginRequest to work. + // const loginRequest = await idp.parseLoginRequest(sp, 'post', req) + const samlRequest = xmlParser.parse(Buffer.from(req.body.SAMLRequest, 'base64').toString('utf-8')) + res.send(getSignaturePage(samlRequest["samlp:AuthnRequest"]["@_ID"])) + } catch (err) { + console.error('Error processing SAML response:', err); + res.status(400).send('SAML authentication failed'); + } + } +) +``` + +Badala ya `getLoginPage`, sasa tumia `getSignaturePage` katika kishikilizi cha hatua ya 3. + +## Kupata anwani ya barua pepe + +Hatua inayofuata ni kupata anwani ya barua pepe, kitambulisho kinachoombwa na mtoa huduma. Ili kufanya hivyo, tunatumia [Huduma ya Uthibitisho ya Ethereum (EAS)](https://attest.org/). + +Njia rahisi zaidi ya kupata uthibitisho ni kutumia [GraphQL API](https://docs.attest.org/docs/developer-tools/api). Tunatumia swali hili: + +``` +query GetAttestationsByRecipient { + attestations( + where: { + recipient: { equals: "${getAddress(ethAddr)}" } + schemaId: { equals: "0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977" } + } + take: 1 + ) { + data + id + attester + } +} +``` + +[`schemaId`](https://optimism.easscan.org/schema/view/0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977) hii inajumuisha anwani ya barua pepe tu. Swali hili linauliza uthibitisho wa skimu hii. Mada ya uthibitisho inaitwa `recipient`. Daima ni anwani ya Ethereum. + +Onyo: Njia tunayopata uthibitisho hapa ina masuala mawili ya usalama. + +- Tunaenda kwenye eneo la mwisho la API, `https://optimism.easscan.org/graphql`, ambalo ni sehemu ya kati. Tunaweza kupata sifa ya `id` na kisha kufanya utafutaji wa mnyororo ili kuthibitisha kwamba uthibitisho ni halisi, lakini eneo la mwisho la API bado linaweza kudhibiti uthibitisho kwa kutotuambia kuhusu wao. + + Tatizo hili si gumu kulitatua, tunaweza kuendesha sehemu yetu ya GraphQL na kupata uthibitisho kutoka kwa kumbukumbu za mnyororo, lakini hiyo ni ya kupita kiasi kwa madhumuni yetu. + +- Hatuangalii utambulisho wa mthibitishaji. Mtu yeyote anaweza kutupa habari za uongo. Katika utekelezaji wa ulimwengu halisi tungekuwa na seti ya wathibitishaji wanaoaminika na kuangalia tu uthibitisho wao. + +Ili kuona hili likitendeka, simamisha IdP na SP zilizopo na endesha amri hizi: + +```sh +git checkout email-address +pnpm install +pnpm start +``` + +Kisha toa anwani yako ya barua pepe. Una njia mbili za kufanya hivyo: + +- Ingiza mkoba ukitumia ufunguo binafsi, na utumie ufunguo binafsi wa majaribio `0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80`. + +- Ongeza uthibitisho kwa anwani yako ya barua pepe: + + 1. Vinjari [skimu katika kivinjari cha uthibitisho](https://optimism.easscan.org/schema/view/0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977). + + 2. Bofya **Thibitisha na Schema**. + + 3. Ingiza anwani yako ya Ethereum kama mpokeaji, anwani yako ya barua pepe kama anwani ya barua pepe, na uchague **Onchain**. Kisha bofya **Fanya Uthibitisho**. + + 4. Idhinisha muamala kwenye mkoba wako. Utahitaji ETH kwenye [Mnyororo wa bloku wa Optimism](https://app.optimism.io/bridge/deposit) kulipia gesi. + +Vyovyote vile, baada ya kufanya hivi nenda kwenye [http://localhost:3000](http://localhost:3000) na ufuate maelekezo. Ikiwa umeingiza ufunguo binafsi wa majaribio, barua pepe unayopokea ni `test_addr_0@example.com`. Ikiwa umetumia anwani yako mwenyewe, inapaswa kuwa chochote ulichothibitisha. + +### Maelezo ya kina + +![Kupata kutoka anwani ya Ethereum hadi barua-pepe](./fig-06-saml-sig-n-email.png) + +Hatua mpya ni mawasiliano ya GraphQL, hatua 5.6 na 5.7. + +Tena, hapa kuna sehemu zilizobadilishwa za `idp.mts`. + +```typescript +import { GraphQLClient } from 'graphql-request' +import { SchemaEncoder } from '@ethereum-attestation-service/eas-sdk' +``` + +Ingiza maktaba tunazohitaji. + +```typescript +const graphqlEndpointUrl = "https://optimism.easscan.org/graphql" +``` + +Kuna [sehemu tofauti kwa kila mnyororo wa bloku](https://docs.attest.org/docs/developer-tools/api). + +```typescript +const graphqlClient = new GraphQLClient(graphqlEndpointUrl, { fetch }) +``` + +Unda mteja mpya wa `GraphQLClient` tunaoweza kutumia kuuliza maswali kwenye endpoint. + +```typescript +const graphqlSchema = 'string emailAddress' +const graphqlEncoder = new SchemaEncoder(graphqlSchema) +``` + +GraphQL inatupa tu kitu cha data kisichoeleweka na baiti. Ili kuielewa tunahitaji skimu. + +```typescript +const ethereumAddressToEmail = async ethAddr => { +``` + +Kazi ya kupata kutoka anwani ya Ethereum hadi anwani ya barua-pepe. + +```typescript + const query = ` + query GetAttestationsByRecipient { +``` + +Hili ni swali la GraphQL. + +```typescript + attestations( +``` + +Tunatafuta uthibitisho. + +```typescript + where: { + recipient: { equals: "${getAddress(ethAddr)}" } + schemaId: { equals: "0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977" } + } +``` + +Uthibitisho tunaotaka ni ule ulio katika skimu yetu, ambapo mpokeaji ni `getAddress(ethAddr)`. Kazi ya [`getAddress`](https://viem.sh/docs/utilities/getAddress#getaddress) inahakikisha anwani yetu ina [checksum](https://github.com/ethereum/ercs/blob/master/ERCS/erc-55.md) sahihi. Hii ni muhimu kuhusu GraphQL ni muhimu kwa herufi kubwa na ndogo. "0xBAD060A7", "0xBad060A7", na "0xbad060a7" ni maadili tofauti. + +```typescript + take: 1 +``` + +Bila kujali ni ithibati ngapi tunapata, tunataka tu ya kwanza. + +```typescript + ) { + data + id + attester + } + }` +``` + +Sehemu tunazotaka kupokea. + +- `attester`: Anwani iliyowasilisha uthibitisho. Kawaida hii hutumika kuamua kama kuamini uthibitisho au la. +- `id`: Kitambulisho cha uthibitisho. Unaweza kutumia thamani hii [kusoma uthibitisho onchain](https://optimism.blockscout.com/address/0x4200000000000000000000000000000000000021?tab=read_proxy&source_address=0x4E0275Ea5a89e7a3c1B58411379D1a0eDdc5b088#0xa3112a64) ili kuthibitisha kuwa taarifa kutoka kwa swali la GraphQL ni sahihi. +- `data`: Data ya skimu (katika kesi hii, anwani ya barua pepe). + +```typescript + const queryResult = await graphqlClient.request(query) + + if (queryResult.attestations.length == 0) + return "no_address@available.is" +``` + +Ikiwa hakuna uthibitisho, rudisha thamani ambayo ni wazi si sahihi, lakini ambayo itaonekana kuwa halali kwa mtoa huduma. + +```typescript + const attestationDataFields = graphqlEncoder.decodeData(queryResult.attestations[0].data) + return attestationDataFields[0].value.value +} +``` + +Ikiwa kuna thamani, tumia `decodeData` kusimbua data. Hatuhitaji metadata inayotoa, ni thamani yenyewe tu. + +```typescript + const loginResponse = await idp.createLoginResponse( + sp, + { + . + . + . + }, + "post", + { + email: await ethereumAddressToEmail(req.params.account) + } + ); +``` + +Tumia kazi mpya kupata anwani ya barua pepe. + +## Vipi kuhusu utawanyaji wa mamlaka? + +Katika usanidi huu watumiaji hawawezi kujifanya kuwa mtu mwingine, mradi tu tunategemea wathibitishaji wanaoaminika kwa ramani ya anwani ya Ethereum hadi barua pepe. Hata hivyo, mtoa huduma wetu wa kitambulisho bado ni sehemu ya kati. Yeyote aliye na ufunguo binafsi wa mtoa huduma wa kitambulisho anaweza kutuma habari za uongo kwa mtoa huduma. + +Kunaweza kuwa na suluhisho kwa kutumia [hesabu ya pande nyingi (MPC)](https://en.wikipedia.org/wiki/Secure_multi-party_computation). Natumai kuandika kuihusu katika mafunzo yajayo. + +## Hitimisho + +Kukubalika kwa kiwango cha kuingia, kama vile saini za Ethereum, kunakabiliwa na tatizo la kuku na yai. Watoa huduma wanataka kuvutia soko pana iwezekanavyo. Watumiaji wanataka kuwa na uwezo wa kufikia huduma bila kuwa na wasiwasi kuhusu kuunga mkono kiwango chao cha kuingia. +Kuunda adapta, kama vile Ethereum IdP, kunaweza kutusaidia kushinda kikwazo hiki. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md b/public/content/translations/sw/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md new file mode 100644 index 00000000000..a6aca8d3675 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md @@ -0,0 +1,156 @@ +--- +title: Kuanza na Uundaji wa Ethereum +description: "Huu ni mwongozo wa wanaoanza jinsi ya kuanza na uundaji wa Ethereum. Tutakuelekeza kutoka kuanzisha sehemu ya mwisho ya API, hadi kufanya ombi la mstari wa amri, hadi kuandika hati yako ya kwanza ya web3! Hakuna uzoefu wa uundaji wa blockchain unaohitajika!" +author: "Elan Halpern" +tags: + [ + "javascript", + "ethers.js", + "nodi", + "kuuliza", + "alchemy" + ] +skill: beginner +lang: sw +published: 2020-10-30 +source: Wastani +sourceUrl: https://medium.com/alchemy-api/getting-started-with-ethereum-development-using-alchemy-c3d6a45c567f +--- + +![Nembo za Ethereum na Alchemy](./ethereum-alchemy.png) + +Huu ni mwongozo wa wanaoanza jinsi ya kuanza na uundaji wa Ethereum. Kwa mafunzo haya tutakuwa tunatumia [Alchemy](https://alchemyapi.io/), jukwaa linaloongoza la wasanidi wa blockchain linalowezesha mamilioni ya watumiaji kutoka 70% ya programu za juu za blockchain, ikiwa ni pamoja na Maker, 0x, MyEtherWallet, Dharma, na Kyber. Alchemy itatupa ufikiaji wa sehemu ya mwisho ya API kwenye mnyororo wa Ethereum ili tuweze kusoma na kuandika miamala. + +Tutakuelekeza kutoka kujisajili na Alchemy hadi kuandika hati yako ya kwanza ya web3! Hakuna uzoefu wa uundaji wa blockchain unaohitajika! + +## 1. Jisajili kwa Akaunti ya Bure ya Alchemy {#sign-up-for-a-free-alchemy-account} + +Kufungua akaunti na Alchemy ni rahisi, [jisajili bure hapa](https://auth.alchemy.com/). + +## 2. Tengeneza Programu ya Alchemy {#create-an-alchemy-app} + +Ili kuwasiliana na mnyororo wa Ethereum na kutumia bidhaa za Alchemy, unahitaji ufunguo wa API ili kuthibitisha maombi yako. + +Unaweza [kutengeneza funguo za API kutoka kwenye dashibodi](https://dashboard.alchemy.com/). Ili kutengeneza ufunguo mpya, nenda kwa “Tengeneza Programu” kama inavyoonyeshwa hapa chini: + +Shukrani za pekee kwa [_ShapeShift_](https://shapeshift.com/) _kwa kuturuhusu kuonyesha dashibodi yao!_ + +![Dashibodi ya Alchemy](./alchemy-dashboard.png) + +Jaza maelezo chini ya “Tengeneza Programu” ili kupata ufunguo wako mpya. Unaweza pia kuona programu ulizotengeneza awali na zile zilizotengenezwa na timu yako hapa. Pata funguo zilizopo kwa kubofya “Angalia Ufunguo” kwa programu yoyote. + +![Picha ya skrini ya kutengeneza programu na Alchemy](./create-app.png) + +Unaweza pia kupata funguo za API zilizopo kwa kuelea juu ya “Programu” na kuchagua moja. Unaweza “Angalia Ufunguo” hapa, pamoja na “Hariri Programu” ili kuidhinisha vikoa maalum, kuona zana kadhaa za wasanidi, na kutazama takwimu. + +![Gif inayoonyesha mtumiaji jinsi ya kupata funguo za API](./pull-api-keys.gif) + +## 3. Fanya Ombi kutoka kwa Mstari wa Amri {#make-a-request-from-the-command-line} + +Wasiliana na blockchain ya Ethereum kupitia Alchemy ukitumia JSON-RPC na curl. + +Kwa maombi ya moja kwa moja, tunapendekeza kuwasiliana na `JSON-RPC` kupitia maombi ya `POST`. Peleka tu kichwa cha `Content-Type: application/json` na swali lako kama kiwiliwili cha `POST` na sehemu zifuatazo: + +- `jsonrpc`: Toleo la JSON-RPC—kwa sasa, ni `2.0` pekee inayotumika. +- `method`: Mbinu ya API ya ETH. [Angalia marejeleo ya API.](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc) +- `params`: Orodha ya vigezo vya kupitisha kwenye mbinu. +- `id`: Kitambulisho cha ombi lako. Itarejeshwa na jibu ili uweze kufuatilia ni ombi gani jibu linahusu. + +Huu ni mfano unaoweza kuendesha kutoka kwa mstari wa amri ili kupata bei ya sasa ya gesi: + +```bash +curl https://eth-mainnet.alchemyapi.io/v2/demo \ +-X POST \ +-H "Content-Type: application/json" \ +-d '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +``` + +_**KUMBUKA:** Badilisha [https://eth-mainnet.alchemyapi.io/v2/demo](https://eth-mainnet.alchemyapi.io/jsonrpc/demo) na ufunguo wako mwenyewe wa API `https://eth-mainnet.alchemyapi.io/v2/**your-api-key`._ + +**Matokeo:** + +```json +{ "id": 73,"jsonrpc": "2.0","result": "0x09184e72a000" // 10000000000000 } +``` + +## 4. Sanidi Mteja wako wa Web3 {#set-up-your-web3-client} + +**Ikiwa una mteja aliyepo,** badilisha URL ya mtoa huduma wako wa sasa wa nodi kuwa URL ya Alchemy na ufunguo wako wa API: `“https://eth-mainnet.alchemyapi.io/v2/your-api-key"` + +**_KUMBUKA:_** Hati zilizo hapa chini zinahitaji kuendeshwa katika **mazingira ya nodi** au **kuhifadhiwa kwenye faili**, sio kuendeshwa kutoka kwa mstari wa amri. Ikiwa bado hujasakinisha Node au npm, angalia [mwongozo huu wa haraka wa usanidi kwa macs](https://app.gitbook.com/@alchemyapi/s/alchemy/guides/alchemy-for-macs). + +Kuna maktaba nyingi za [Web3](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries) unazoweza kuunganisha na Alchemy, hata hivyo, tunapendekeza kutumia [Alchemy Web3](https://docs.alchemy.com/reference/api-overview), mbadala wa moja kwa moja wa web3.js, iliyoundwa na kusanidiwa kufanya kazi bila mshono na Alchemy. Hii inatoa faida nyingi kama vile majaribio ya kiotomatiki na usaidizi thabiti wa WebSocket. + +Ili kusakinisha AlchemyWeb3.js, **nenda kwenye saraka yako ya mradi** na endesha: + +**Kwa kutumia Yarn:** + +``` +yarn add @alch/alchemy-web3 +``` + +**Kwa kutumia NPM:** + +``` +npm install @alch/alchemy-web3 +``` + +Ili kuwasiliana na miundombinu ya nodi ya Alchemy, endesha katika NodeJS au ongeza hii kwenye faili ya JavaScript: + +```js +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3( + "https://eth-mainnet.alchemyapi.io/v2/your-api-key" +) +``` + +## 5. Andika Hati yako ya kwanza ya Web3! {#write-your-first-web3-script} + +Sasa ili tuanze kufanya kazi na programu ndogo ya web3, tutaandika hati rahisi inayochapisha nambari ya bloku ya hivi karibuni kutoka kwa Mtandao Mkuu wa Ethereum. + +**1. Ikiwa bado hujafanya hivyo, kwenye terminal yako tengeneza saraka mpya ya mradi na ingia ndani yake (cd):** + +``` +mkdir web3-example +cd web3-example +``` + +**2. Sakinisha tegemeo la Alchemy web3 (au web3 yoyote) kwenye mradi wako ikiwa bado hujafanya hivyo:** + +``` +npm install @alch/alchemy-web3 +``` + +**3. Tengeneza faili inayoitwa `index.js` na ongeza yaliyomo yafuatayo:** + +> Mwishowe unapaswa kubadilisha `demo` na ufunguo wako wa Alchemy HTTP API. + +```js +async function main() { + const { createAlchemyWeb3 } = require("@alch/alchemy-web3") + const web3 = createAlchemyWeb3("https://eth-mainnet.alchemyapi.io/v2/demo") + const blockNumber = await web3.eth.getBlockNumber() + console.log("Nambari ya bloku ya hivi karibuni ni " + blockNumber) +} +main() +``` + +Hufahamu mambo ya async? Angalia [chapisho hili la Medium](https://medium.com/better-programming/understanding-async-await-in-javascript-1d81bb079b2c). + +**4.** Endesha kwenye terminal yako ukitumia node\*\* + +``` +node index.js +``` + +**5.** Sasa unapaswa kuona tokeo la nambari ya bloku ya hivi karibuni kwenye konsoli yako!\*\* + +``` +Nambari ya bloku ya hivi karibuni ni 11043912 +``` + +**Shwari! Hongera! Umeandika hati yako ya kwanza ya web3 ukitumia Alchemy 🎉** + +Huna uhakika nini cha kufanya baadaye? Jaribu kuweka mkataba-erevu wako wa kwanza na uanze kufanya kazi na programu za Solidity kwenye [Mwongozo wetu wa Mkataba-erevu wa Hello World](https://www.alchemy.com/docs/hello-world-smart-contract), au jaribu ujuzi wako wa dashibodi na [Programu ya Demo ya Dashibodi](https://docs.alchemyapi.io/tutorials/demo-app)! + +_[Jisajili na Alchemy bure](https://auth.alchemy.com/), angalia [nyaraka](https://www.alchemy.com/docs/) zetu, na kwa habari za hivi karibuni, tufuate kwenye [Twitter](https://twitter.com/AlchemyPlatform)_. diff --git a/public/content/translations/sw/developers/tutorials/guide-to-smart-contract-security-tools/index.md b/public/content/translations/sw/developers/tutorials/guide-to-smart-contract-security-tools/index.md new file mode 100644 index 00000000000..0cd5df89b83 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/guide-to-smart-contract-security-tools/index.md @@ -0,0 +1,102 @@ +--- +title: Mwongozo wa zana za usalama za mkataba-erevu +description: Muhtasari wa mbinu tatu tofauti za upimaji na uchanganuzi wa programu +author: "Trailofbits" +lang: sw +tags: [ "uimara", "mikataba erevu", "usalama" ] +skill: intermediate +published: 2020-09-07 +source: Kujenga mikataba salama +sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis +--- + +Tutatumia mbinu tatu tofauti za upimaji na uchanganuzi wa programu: + +- **Uchanganuzi tuli kwa kutumia [Slither](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/).** Njia zote za programu hukadiriwa na kuchanganuliwa kwa wakati mmoja, kupitia uwasilishaji tofauti wa programu (k.m., control-flow-graph) +- **Fuzzing na [Echidna](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/).** Msimbo unatekelezwa kwa uzalishaji nasibu bandia wa miamala. Fuzzer itajaribu kupata mfuatano wa miamala ili kukiuka sifa fulani. +- **Utekelezaji wa kiishara na [Manticore](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/).** Mbinu rasmi ya uthibitishaji, ambayo hutafsiri kila njia ya utekelezaji kuwa fomula ya kihisabati, ambayo juu yake vikwazo vinaweza kukaguliwa. + +Kila mbinu ina faida na hasara, na itakuwa na manufaa katika [kesi maalum](#determining-security-properties): + +| Mbinu | Zana | Matumizi | Kasi | Hitilafu zilizokosekana | Kengele za Uongo | +| ----------------------- | --------- | ------------------------------------------- | ------- | ----------------------- | ---------------- | +| Uchanganuzi Tuli | Slither | CLI & hati | sekunde | wastani | chini | +| Fuzzing | Echidna | Sifa za Solidity | dakika | chini | hakuna | +| Utekelezaji wa Kiishara | Manticore | Sifa za Solidity & hati | saa | hakuna\* | hakuna | + +- ikiwa njia zote zimechunguzwa bila muda kuisha + +**Slither** huchanganua mikataba ndani ya sekunde, hata hivyo, uchanganuzi tuli unaweza kusababisha kengele za uongo na hautafaa sana kwa ukaguzi changamano (k.m., ukaguzi wa kihisabati). Tumia Slither kupitia API kwa ufikiaji wa kubofya kitufe kwa vigunduzi vilivyojengewa ndani au kupitia API kwa ukaguzi uliobainishwa na mtumiaji. + +**Echidna** inahitaji kufanya kazi kwa dakika kadhaa na itatoa matokeo chanya ya kweli pekee. Echidna hukagua sifa za usalama zinazotolewa na mtumiaji, zilizoandikwa katika Solidity. Inaweza kukosa hitilafu kwani inategemea uchunguzi nasibu. + +**Manticore** hufanya uchanganuzi wa "uzito mzito zaidi". Kama Echidna, Manticore inathibitisha sifa zinazotolewa na mtumiaji. Itahitaji muda zaidi kufanya kazi, lakini inaweza kuthibitisha uhalali wa sifa na haitatoa ripoti za kengele za uongo. + +## Mtiririko wa kazi unaopendekezwa {#suggested-workflow} + +Anza na vigunduzi vilivyojengewa ndani vya Slither ili kuhakikisha kuwa hakuna hitilafu rahisi zilizopo sasa au zitakazoletwa baadaye. Tumia Slither kukagua sifa zinazohusiana na urithi, utegemezi wa vigeu, na masuala ya kimuundo. Msimbo unavyokua, tumia Echidna kupima sifa changamano zaidi za mashine ya hali. Rejelea Slither ili kuunda ukaguzi maalum kwa ajili ya ulinzi usioupata kutoka kwa Solidity, kama vile kulinda dhidi ya kazi kubatilishwa. Mwishowe, tumia Manticore kufanya uthibitishaji unaolengwa wa sifa muhimu za usalama, k.m., shughuli za kihisabati. + +- Tumia CLI ya Slither kugundua masuala ya kawaida +- Tumia Echidna kupima sifa za usalama za kiwango cha juu za mkataba wako +- Tumia Slither kuandika ukaguzi maalum tuli +- Tumia Manticore mara tu unapotaka uhakikisho wa kina wa sifa muhimu za usalama + +**Dokezo kuhusu majaribio ya kitengo**. Majaribio ya kitengo ni muhimu ili kuunda programu ya ubora wa juu. Hata hivyo, mbinu hizi hazifai zaidi kupata dosari za usalama. Kwa kawaida hutumika kupima tabia chanya za msimbo (yaani, msimbo hufanya kazi kama inavyotarajiwa katika muktadha wa kawaida), huku dosari za usalama zikielekea kukaa katika hali za pembeni ambazo wasanidi programu hawakuzizingatia. Katika utafiti wetu wa hakiki nyingi za usalama za mkataba-erevu, [ufikiaji wa majaribio ya kitengo haukuwa na athari kwa idadi au ukali wa dosari za usalama](https://blog.trailofbits.com/2019/08/08/246-findings-from-our-smart-contract-audits-an-executive-summary/) tulizopata katika msimbo wa wateja wetu. + +## Kubainisha Sifa za Usalama {#determining-security-properties} + +Ili kupima na kuthibitisha msimbo wako kwa ufanisi, ni lazima utambue maeneo yanayohitaji uangalizi. Kwa kuwa rasilimali zako zinazotumika kwenye usalama ni chache, kupanga sehemu dhaifu au zenye thamani ya juu za msimbo wako ni muhimu ili kuboresha juhudi zako. Uundaji wa vitisho unaweza kusaidia. Fikiria kukagua: + +- [Tathmini za Haraka za Hatari](https://infosec.mozilla.org/guidelines/risk/rapid_risk_assessment.html) (mbinu tunayopendelea wakati ni mfupi) +- [Mwongozo wa Uundaji wa Vitisho vya Mfumo Unaozingatia Data](https://csrc.nist.gov/pubs/sp/800/154/ipd) (pia inajulikana kama NIST 800-154) +- [Uundaji wa vitisho wa Shostack](https://www.amazon.com/Threat-Modeling-Designing-Adam-Shostack/dp/1118809998) +- [STRIDE](https://wikipedia.org/wiki/STRIDE_\(security\)) / [DREAD](https://wikipedia.org/wiki/DREAD_\(risk_assessment_model\)) +- [PASTA](https://wikipedia.org/wiki/Threat_model#P.A.S.T.A.) +- [Matumizi ya Madai](https://blog.regehr.org/archives/1091) + +### Vipengele {#components} + +Kujua unachotaka kukagua pia kutakusaidia kuchagua zana sahihi. + +Maeneo mapana ambayo mara nyingi yanafaa kwa mikataba-erevu ni pamoja na: + +- **Mashine ya hali.** Mikataba mingi inaweza kuwakilishwa kama mashine ya hali. Fikiria kukagua kuwa (1) Hakuna hali batili inayoweza kufikiwa, (2) ikiwa hali ni halali inaweza kufikiwa, na (3) hakuna hali inayotega mkataba. + + - Echidna na Manticore ndizo zana za kupendelea kupima vipimo vya mashine ya hali. + +- **Vidhibiti vya ufikiaji.** Ikiwa mfumo wako una watumiaji waliopewa fursa (k.m., mmiliki, vidhibiti, ...) lazima uhakikishe kwamba (1) kila mtumiaji anaweza tu kutekeleza vitendo vilivyoidhinishwa na (2) hakuna mtumiaji anayeweza kuzuia vitendo kutoka kwa mtumiaji aliye na fursa zaidi. + + - Slither, Echidna na Manticore zinaweza kuangalia vidhibiti sahihi vya ufikiaji. Kwa mfano, Slither inaweza kuangalia kuwa kazi zilizoidhinishwa tu ndizo zinazokosa kirekebishaji cha onlyOwner. Echidna na Manticore ni muhimu kwa udhibiti changamano zaidi wa ufikiaji, kama vile ruhusa inayotolewa tu ikiwa mkataba utafikia hali fulani. + +- **Shughuli za kihisabati.** Kuangalia usahihi wa shughuli za kihisabati ni muhimu sana. Kutumia `SafeMath` kila mahali ni hatua nzuri ya kuzuia kufurika/kupungua (`overflow`/`underflow`), hata hivyo, bado lazima uzingatie dosari zingine za kihisabati, ikiwa ni pamoja na masuala ya kuzungusha na dosari zinazotega mkataba. + + - Manticore ndiyo chaguo bora zaidi hapa. Echidna inaweza kutumika ikiwa hesabu iko nje ya wigo wa SMT solver. + +- **Usahihi wa urithi.** Mikataba ya Solidity inategemea sana urithi mwingi. Makosa kama vile kazi ya kufunika inayokosa mwito wa `super` na mpangilio wa uunganishaji wa c3 uliotafsiriwa vibaya unaweza kuletwa kwa urahisi. + + - Slither ndiyo zana ya kuhakikisha ugunduzi wa masuala haya. + +- **Mwingiliano wa nje.** Mikataba huingiliana, na baadhi ya mikataba ya nje haipaswi kuaminiwa. Kwa mfano, ikiwa mkataba wako unategemea oracles za nje, je, utabaki salama ikiwa nusu ya oracles zinazopatikana zitahujumiwa? + + - Manticore na Echidna ndio chaguo bora zaidi kwa kupima mwingiliano wa nje na mikataba yako. Manticore ina utaratibu uliojengewa ndani wa kuweka vibadala vya mikataba ya nje. + +- **Upatanifu wa viwango.** Viwango vya Ethereum (k.m., ERC20) vina historia ya dosari katika muundo wao. Fahamu mapungufu ya kiwango unachojengea. + - Slither, Echidna, na Manticore zitakusaidia kugundua mkengeuko kutoka kwa kiwango fulani. + +### Karatasi ya kudokezea ya uteuzi wa zana {#tool-selection-cheatsheet} + +| Kipengele | Zana | Mifano | +| ---------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mashine ya hali | Echidna, Manticore | | +| Udhibiti wa ufikiaji | Slither, Echidna, Manticore | [Zoezi la 2 la Slither](https://github.com/crytic/slither/blob/7f54c8b948c34fb35e1d61adaa1bd568ca733253/docs/src/tutorials/exercise2.md), [Zoezi la 2 la Echidna](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/exercises/Exercise-2.md) | +| Shughuli za kihisabati | Manticore, Echidna | [Zoezi la 1 la Echidna](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/exercises/Exercise-1.md), [Mazoezi 1 - 3 ya Manticore](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore/exercises) | +| Usahihi wa urithi | Slither | [Zoezi la 1 la Slither](https://github.com/crytic/slither/blob/7f54c8b948c34fb35e1d61adaa1bd568ca733253/docs/src/tutorials/exercise1.md) | +| Mwingiliano wa nje | Manticore, Echidna | | +| Upatanifu wa viwango | Slither, Echidna, Manticore | [`slither-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) | + +Maeneo mengine yatahitaji kukaguliwa kulingana na malengo yako, lakini maeneo haya mapana ya kuzingatia ni mwanzo mzuri kwa mfumo wowote wa mkataba-erevu. + +Ukaguzi wetu wa umma una mifano ya sifa zilizothibitishwa au zilizopimwa. Fikiria kusoma sehemu za `Upimaji na Uthibitishaji wa Kiotomatiki` za ripoti zifuatazo ili kukagua sifa halisi za usalama: + +- [0x](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) +- [Balancer](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) diff --git a/public/content/translations/sw/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/public/content/translations/sw/developers/tutorials/hello-world-smart-contract-fullstack/index.md new file mode 100644 index 00000000000..8819e5d49ab --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -0,0 +1,1539 @@ +--- +title: Mkataba-erevu wa Hello World kwa Wanaoanza - Fullstack +description: Mafunzo ya utangulizi kuhusu kuandika na kusambaza mkataba-erevu rahisi kwenye Ethereum. +author: "nstrike2" +tags: + [ + "uimara", + "hardhat", + "alchemy", + "mikataba erevu", + "upelekaji", + "kichunguzi cha bloku", + "frontend", + "miamala" + ] +skill: beginner +lang: sw +published: 2021-10-25 +--- + +Mwongozo huu ni kwa ajili yako kama wewe ni mgeni katika utengenezaji wa mnyororo wa bloku na hujui pa kuanzia au jinsi ya kupeleka na kuingiliana na mikataba-erevu. Tutapitia hatua za kuunda na kupeleka mkataba-erevu rahisi kwenye testnet ya Goerli kwa kutumia [MetaMask](https://metamask.io), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org), na [Alchemy](https://alchemy.com/eth). + +Utahitaji akaunti ya Alchemy ili kukamilisha mafunzo haya. [Jisajili kwa akaunti ya bure](https://www.alchemy.com/). + +Ikiwa una maswali wakati wowote, jisikie huru kuuliza katika [Alchemy Discord](https://discord.gg/gWuC7zB)! + +## Sehemu ya 1 - Unda na Upeleke Mkataba-erevu wako kwa kutumia Hardhat {#part-1} + +### Unganisha kwenye mtandao wa Ethereum {#connect-to-the-ethereum-network} + +Kuna njia nyingi za kufanya maombi kwa mnyororo wa Ethereum. Kwa urahisi, tutatumia akaunti ya bure kwenye Alchemy, jukwaa la wasanidi programu wa mnyororo wa bloku na API inayoturuhusu kuwasiliana na mnyororo wa Ethereum bila kuendesha nodi wenyewe. Alchemy pia ina zana za wasanidi programu kwa ufuatiliaji na uchambuzi; tutatumia fursa hii katika mafunzo haya kuelewa kinachoendelea nyuma ya pazia katika upelekaji wa mkataba-erevu wetu. + +### Unda programu yako na ufunguo wa API {#create-your-app-and-api-key} + +Baada ya kuunda akaunti ya Alchemy, unaweza kutengeneza ufunguo wa API kwa kuunda programu. Hii itakuruhusu kufanya maombi kwenye testnet ya Goerli. Ikiwa hufahamu testnets unaweza [kusoma mwongozo wa Alchemy wa kuchagua mtandao](https://www.alchemy.com/docs/choosing-a-web3-network). + +Kwenye dashibodi ya Alchemy, tafuta menyu kunjuzi ya **Programu** kwenye upau wa urambazaji na ubofye **Unda Programu**. + +![Programu ya uundaji wa Hello world](./hello-world-create-app.png) + +Ipe programu yako jina '_Hello World_' na uandike maelezo mafupi. Chagua **Staging** kama mazingira yako na **Goerli** kama mtandao wako. + +![mwonekano wa programu ya kuunda hello world](./create-app-view-hello-world.png) + +_Kumbuka: hakikisha unachagua **Goerli**, la sivyo mafunzo haya hayatafanya kazi._ + +Bofya **Unda programu**. Programu yako itaonekana kwenye jedwali hapa chini. + +### Unda akaunti ya Ethereum {#create-an-ethereum-account} + +Unahitaji akaunti ya Ethereum ili kutuma na kupokea miamala. Tutatumia MetaMask, mkoba halisi kwenye kivinjari unaowawezesha watumiaji kudhibiti anwani ya akaunti yao ya Ethereum. + +Unaweza kupakua na kuunda akaunti ya MetaMask bure [hapa](https://metamask.io/download). Unapounda akaunti, au ikiwa tayari una akaunti, hakikisha umebadili na kuweka "Mtandao wa Majaribio wa Goerli" juu kulia (ili tusitumie pesa halisi). + +### Hatua ya 4: Ongeza ether kutoka kwa Bomba {#step-4-add-ether-from-a-faucet} + +Ili kupeleka mkataba-erevu wako kwenye mtandao wa majaribio, utahitaji ETH bandia. Ili kupata ETH kwenye mtandao wa Goerli, nenda kwenye bomba la Goerli na uweke anwani ya akaunti yako ya Goerli. Kumbuka kwamba mabomba ya Goerli yamekuwa hayategemewi sana hivi karibuni - angalia [ukurasa wa mitandao ya majaribio](/developers/docs/networks/#goerli) kwa orodha ya machaguo ya kujaribu: + +_Kumbuka: kutokana na msongamano wa mtandao, hii inaweza kuchukua muda._ +\`\` + +### Hatua ya 5: Angalia Salio lako {#step-5-check-your-balance} + +Ili kuhakikisha mara mbili kuwa ETH iko kwenye mkoba wako, hebu tufanye ombi la [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) kwa kutumia [zana ya mtunzi ya Alchemy](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Hii itarudisha kiasi cha ETH katika mkoba wetu. Ili kujifunza zaidi angalia [mafunzo mafupi ya Alchemy ya jinsi ya kutumia zana ya mtunzi](https://youtu.be/r6sjRxBZJuU). + +Weka anwani ya akaunti yako ya MetaMask na ubofye **Tuma Ombi**. Utaona jibu linalofanana na sehemu ya msimbo hapa chini. + +```json +{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" } +``` + +> _Kumbuka: Matokeo haya yako katika wei, sio ETH. Wei hutumika kama thamani ndogo zaidi ya ether._ + +Phew! Pesa zetu bandia zote zipo. + +### Hatua ya 6: Anzisha mradi wetu {#step-6-initialize-our-project} + +Kwanza, tutahitaji kuunda folda kwa ajili ya mradi wetu. Nenda kwenye mstari wako wa amri na uweke yafuatayo. + +``` +mkdir hello-world +cd hello-world +``` + +Sasa kwa kuwa tuko ndani ya folda ya mradi wetu, tutatumia `npm init` kuanzisha mradi. + +> Ikiwa bado hujasakinisha npm, fuata [maelekezo haya ili kusakinisha Node.js na npm](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm). + +Kwa madhumuni ya mafunzo haya, haijalishi jinsi unavyojibu maswali ya uanzishaji. Hivi ndivyo tulivyofanya kwa ajili ya marejeleo: + +``` +jina la kifurushi: (hello-world) +toleo: (1.0.0) +maelezo: mkataba-erevu wa hello world +mahali pa kuanzia: (index.js) +amri ya majaribio: +hazina ya git: +maneno muhimu: +mwandishi: +leseni: (ISC) + +Karibu kuandika kwa /Users/.../.../.../hello-world/package.json: + +{ + "name": "hello-world", + "version": "1.0.0", + "description": "mkataba-erevu wa hello world", + "main": "index.js", + "scripts": { + "test": "echo \"Kosa: hakuna jaribio lililobainishwa\" && exit 1" + }, + "author": "", + "license": "ISC" +} +``` + +Thibitisha package.json na tuko tayari kwenda! + +### Hatua ya 7: Pakua Hardhat {#step-7-download-hardhat} + +Hardhat ni mazingira ya usanidi wa kuandaa, kupeleka, kupima, na kutatua programu yako ya Ethereum. Inasaidia wasanidi programu wanapojenga mikataba-erevu na dApps ndani ya nchi kabla ya kupeleka kwenye mnyororo hai. + +Ndani ya mradi wetu wa `hello-world` endesha: + +``` +npm install --save-dev hardhat +``` + +Angalia ukurasa huu kwa maelezo zaidi kuhusu [maagizo ya usakinishaji](https://hardhat.org/getting-started/#overview). + +### Hatua ya 8: Unda mradi wa Hardhat {#step-8-create-hardhat-project} + +Ndani ya folda ya mradi wetu wa `hello-world`, endesha: + +``` +npx hardhat +``` + +Unapaswa kisha kuona ujumbe wa kukaribisha na chaguo la kuchagua unachotaka kufanya. Chagua “unda hardhat.config.js tupu”: + +``` +888 888 888 888 888 +888 888 888 888 888 +888 888 888 888 888 +8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 +888 888 "88b 888P" d88" 888 888 "88b "88b 888 +888 888 .d888888 888 888 888 888 888 .d888888 888 +888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. +888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 + +👷 Karibu kwenye Hardhat v2.0.11 👷‍ + +Unataka kufanya nini? ... +Unda mradi wa mfano +❯ Unda hardhat.config.js tupu +Acha +``` + +Hii itatengeneza faili ya `hardhat.config.js` katika mradi. Tutaitumia baadaye katika mafunzo haya kubainisha usanidi wa mradi wetu. + +### Hatua ya 9: Ongeza folda za mradi {#step-9-add-project-folders} + +Ili kuuweka mradi katika mpangilio, hebu tuunde folda mbili mpya. Katika mstari wa amri, nenda kwenye saraka kuu ya mradi wako wa `hello-world` na uandike: + +``` +mkdir contracts +mkdir scripts +``` + +- `contracts/` ni mahali ambapo tutaweka faili la msimbo wa mkataba-erevu wetu wa hello world +- `scripts/` ni mahali ambapo tutaweka hati za kusambaza na kuingiliana na mkataba wetu + +### Hatua ya 10: Andika mkataba wetu {#step-10-write-our-contract} + +Huenda unajiuliza, ni lini tutaandika msimbo? Muda umefika! + +Fungua mradi wa hello-world katika kihariri chako unachopenda. Mikataba-erevu mara nyingi huandikwa kwa Solidity, ambayo tutaitumia kuandika mkataba-erevu wetu.‌ + +1. Nenda kwenye folda ya `contracts` na uunde faili mpya iitwayo `HelloWorld.sol` +2. Hapa chini kuna sampuli ya mkataba-erevu wa Hello World ambao tutautumia kwa mafunzo haya. Nakili yaliyomo hapa chini kwenye faili ya `HelloWorld.sol`. + +_Kumbuka: Hakikisha unasoma maoni ili kuelewa mkataba huu unafanya nini._ + +``` +// Inabainisha toleo la Solidity, kwa kutumia matoleo ya kimantiki. +// Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity >=0.7.3; + +// Inafafanua mkataba unaoitwa `HelloWorld`. +// Mkataba ni mkusanyiko wa kazi na data (hali yake). Baada ya kupelekwa, mkataba hukaa kwenye anwani maalum kwenye mnyororo wa bloku wa Ethereum. Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + // Hutolewa wakati kazi ya sasisho inapoitwa + // Matukio ya mkataba-erevu ni njia ya mkataba wako kuwasiliana kwamba kitu kilitokea kwenye mnyororo wa bloku kwa programu yako ya mbele, ambayo inaweza kuwa 'inasikiliza' matukio fulani na kuchukua hatua yanapotokea. + event UpdatedMessages(string oldStr, string newStr); + + // Inatangaza kigezo cha hali `message` cha aina ya `string`. + // Vigezo vya hali ni vigezo ambavyo thamani zake huhifadhiwa kabisa katika hifadhi ya mkataba. Neno muhimu `public` hufanya vigezo kupatikana kutoka nje ya mkataba na huunda kazi ambayo mikataba mingine au wateja wanaweza kuita ili kupata thamani. + string public message; + + // Sawa na lugha nyingi za upangaji zinazotegemea darasa, konstruka ni kazi maalum ambayo hutekelezwa tu wakati wa uundaji wa mkataba. + // Konstruka hutumiwa kuanzisha data ya mkataba. Jifunze zaidi:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) { + + // Inakubali hoja ya mfuatano `initMessage` na kuweka thamani katika kigezo cha hifadhi cha mkataba `message`). + message = initMessage; + } + + // Kazi ya umma inayokubali hoja ya mfuatano na kusasisha kigezo cha hifadhi `message`. + function update(string memory newMessage) public { + string memory oldMsg = message; + message = newMessage; + emit UpdatedMessages(oldMsg, newMessage); + } +} +``` + +Huu ni mkataba-erevu wa msingi unaohifadhi ujumbe wakati wa uundaji. Inaweza kusasishwa kwa kuita kazi ya `update`. + +### Hatua ya 11: Unganisha MetaMask & Alchemy kwenye mradi wako {#step-11-connect-metamask-alchemy-to-your-project} + +Tumeunda pochi ya MetaMask, akaunti ya Alchemy, na kuandika mkataba-erevu wetu, sasa ni wakati wa kuunganisha vitu hivi vitatu. + +Kila muamala unaotumwa kutoka kwa mkoba wako unahitaji saini kwa kutumia ufunguo wako wa kipekee binafsi. Ili kuipa programu yetu ruhusa hii, tunaweza kuhifadhi ufunguo wetu binafsi kwa usalama katika faili ya mazingira. Pia tutahifadhi ufunguo wa API kwa Alchemy hapa. + +> Ili kujifunza zaidi kuhusu kutuma miamala, angalia [mafunzo haya](https://www.alchemy.com/docs/hello-world-smart-contract#step-11-connect-metamask--alchemy-to-your-project) kuhusu kutuma miamala kwa kutumia web3. + +Kwanza, sakinisha kifurushi cha dotenv katika saraka ya mradi wako: + +``` +npm install dotenv --save +``` + +Kisha, unda faili ya `.env` katika saraka kuu ya mradi. Ongeza ufunguo wako binafsi wa MetaMask na URL ya API ya HTTP ya Alchemy humo. + +Faili yako ya mazingira lazima iitwe `.env` la sivyo haitatambuliwa kama faili ya mazingira. + +Usiite `process.env` au `.env-custom` au jina lingine lolote. + +- Fuata [maelekezo haya](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) ili kuhamisha ufunguo wako binafsi +- Angalia hapa chini ili kupata URL ya API ya HTTP ya Alchemy + +![](./get-alchemy-api-key.gif) + +Faili lako la `.env` linapaswa kuonekana hivi: + +``` +API_URL = "https://eth-goerli.alchemyapi.io/v2/ufunguo-wako-wa-api" +PRIVATE_KEY = "ufunguo-wako-binafsi-wa-metamask" +``` + +Ili kuunganisha hivi kwenye msimbo wetu, tutarejelea vigezo hivi katika faili letu la `hardhat.config.js` kwenye hatua ya 13. + +### Hatua ya 12: Sakinisha Ethers.js {#step-12-install-ethersjs} + +Ethers.js ni maktaba inayorahisisha kuingiliana na kufanya maombi kwa Ethereum kwa kufunika [mbinu za kawaida za JSON-RPC](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc) na mbinu rahisi zaidi kwa mtumiaji. + +Hardhat inaturuhusu kuunganisha [plugins](https://hardhat.org/plugins/) kwa zana za ziada na utendaji uliopanuliwa. Tutatumia fursa ya [Ethers plugin](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) kwa upelekaji wa mkataba. + +Katika saraka yako ya mradi, andika: + +```bash +npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0" +``` + +### Hatua ya 13: Sasisha hardhat.config.js {#step-13-update-hardhat-configjs} + +Tumeongeza vitegemezi na programu-jalizi kadhaa hadi sasa, sasa tunahitaji kusasisha `hardhat.config.js` ili mradi wetu uvifahamu vyote. + +Sasisha `hardhat.config.js` yako ili ionekane hivi: + +```javascript +/** + * @type import('hardhat/config').HardhatUserConfig + */ + +require("dotenv").config() +require("@nomiclabs/hardhat-ethers") + +const { API_URL, PRIVATE_KEY } = process.env + +module.exports = { + solidity: "0.7.3", + defaultNetwork: "goerli", + networks: { + hardhat: {}, + goerli: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`], + }, + }, +} +``` + +### Hatua ya 14: Kusanya mkataba wetu {#step-14-compile-our-contract} + +Ili kuhakikisha kila kitu kinafanya kazi hadi sasa, hebu tuandae mkataba wetu. Jukumu la `compile` ni mojawapo ya majukumu yaliyojengewa ndani ya hardhat. + +Kutoka kwenye mstari wa amri, endesha: + +```bash +npx hardhat compile +``` + +Unaweza kupata onyo kuhusu `Kitambulisho cha leseni cha SPDX hakijatolewa kwenye faili ya chanzo`, lakini hakuna haja ya kuwa na wasiwasi kuhusu hilo - tunatumai kila kitu kingine kinaonekana vizuri! Ikiwa sivyo, unaweza kutuma ujumbe kila wakati katika [discord ya Alchemy](https://discord.gg/u72VCg3). + +### Hatua ya 15: Andika hati yetu ya kupeleka {#step-15-write-our-deploy-script} + +Sasa kwa kuwa mkataba wetu umeandikwa na faili yetu ya usanidi iko tayari, ni wakati wa kuandika hati ya kupeleka mkataba wetu. + +Nenda kwenye folda ya `scripts/` na uunde faili jipya liitwalo `deploy.js`, na uongeze yaliyomo yafuatayo ndani yake: + +```javascript +async function main() { + const HelloWorld = await ethers.getContractFactory("HelloWorld") + + // Anza upelekaji, ukirudisha ahadi inayotatuliwa kuwa kitu cha mkataba + const hello_world = await HelloWorld.deploy("Hello World!") + console.log("Mkataba umepelekwa kwenye anwani:", hello_world.address) +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) +``` + +Hardhat hufanya kazi nzuri ya kuelezea kile kila mstari wa msimbo huu unafanya katika [mafunzo yao ya Mikataba](https://hardhat.org/tutorial/testing-contracts.html#writing-tests), tumechukua maelezo yao hapa. + +```javascript +const HelloWorld = await ethers.getContractFactory("HelloWorld") +``` + +`ContractFactory` katika ethers.js ni dhana inayotumika kupeleka mikataba-erevu mpya, kwa hivyo `HelloWorld` hapa ni [kiwanda](https://en.wikipedia.org/wiki/Factory_\(object-oriented_programming\)) cha vielelezo vya mkataba wetu wa hello world. Wakati unatumia programu-jalizi ya `hardhat-ethers` `ContractFactory` na `Contract`, vielelezo huunganishwa na mtia saini wa kwanza (mmiliki) kwa chaguo-msingi. + +```javascript +const hello_world = await HelloWorld.deploy() +``` + +Kuita `deploy()` kwenye `ContractFactory` kutaanza upelekaji, na kurudisha `Promise` inayotatuliwa kuwa kitu cha `Contract`. Hiki ndicho kitu ambacho kina mbinu kwa kila moja ya kazi zetu za mkataba-erevu. + +### Hatua ya 16: Sambaza mkataba wetu {#step-16-deploy-our-contract} + +Hatimaye tuko tayari kupeleka mkataba-erevu wetu! Nenda kwenye mstari wa amri na uendeshe: + +```bash +npx hardhat run scripts/deploy.js --network goerli +``` + +Unapaswa kisha kuona kitu kama: + +```bash +Mkataba umesambazwa kwa anwani: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 +``` + +**Tafadhali hifadhi anwani hii**. Tutaitumia baadaye katika mafunzo. + +Tukienda kwenye [Goerli etherscan](https://goerli.etherscan.io) na kutafuta anwani yetu ya mkataba tunapaswa kuona kuwa imesambazwa kwa mafanikio. Muamala utaonekana kitu kama hiki: + +![](./etherscan-contract.png) + +Anwani ya `Kutoka` inapaswa kufanana na anwani ya akaunti yako ya MetaMask na anwani ya `Kwenda` itasema **Uundaji wa Mkataba**. Tukibofya kwenye muamala tutaona anwani yetu ya mkataba katika sehemu ya `Kwenda`. + +![](./etherscan-transaction.png) + +Hongera! Umepeleka mkataba-erevu kwenye testnet ya Ethereum. + +Ili kuelewa kinachoendelea nyuma ya pazia, hebu tuelekee kwenye kichupo cha Explorer katika [dashibodi yetu ya Alchemy](https://dashboard.alchemy.com/explorer). Ikiwa una programu nyingi za Alchemy hakikisha unachuja kwa programu na uchague **Hello World**. + +![](./hello-world-explorer.png) + +Hapa utaona mbinu chache za JSON-RPC ambazo Hardhat/Ethers zilitengeneza nyuma ya pazia tulipoiita kazi ya `.deploy()`. Mbinu mbili muhimu hapa ni [`eth_sendRawTransaction`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction), ambalo ni ombi la kuandika mkataba wetu kwenye mnyororo wa Goerli, na [`eth_getTransactionByHash`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_gettransactionbyhash), ambalo ni ombi la kusoma taarifa kuhusu muamala wetu kwa kutumia hashi. Ili kujifunza zaidi kuhusu kutuma miamala, angalia [mafunzo yetu ya kutuma miamala kwa kutumia Web3](/developers/tutorials/sending-transactions-using-web3-and-alchemy/). + +## Sehemu ya 2: Wasiliana na Mkataba wako Mahiri {#part-2-interact-with-your-smart-contract} + +Sasa kwa kuwa tumefanikiwa kupeleka mkataba-erevu kwenye mtandao wa Goerli, hebu tujifunze jinsi ya kuingiliana nao. + +### Unda faili ya interact.js {#create-a-interactjs-file} + +Hii ndiyo faili ambapo tutaandika hati yetu ya mwingiliano. Tutatumia maktaba ya Ethers.js uliyosakinisha hapo awali katika Sehemu ya 1. + +Ndani ya folda ya `scripts/`, unda faili mpya inayoitwa `interact.js` na uongeze msimbo ufuatao: + +```javascript +// interact.js + +const API_KEY = process.env.API_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY +const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS +``` + +### Sasisha faili yako ya .env {#update-your-env-file} + +Tutakuwa tukitumia vigezo vipya vya mazingira, kwa hivyo tunahitaji kuvifafanua katika faili ya `.env` ambayo [tuliiunda mapema](#step-11-connect-metamask-&-alchemy-to-your-project). + +Tutahitaji kuongeza ufafanuzi wa `API_KEY` yetu ya Alchemy na `CONTRACT_ADDRESS` ambapo mkataba wako mahiri ulitumwa. + +Faili yako ya `.env` inapaswa kuonekana kama hii: + +```bash +# .env + +API_URL = "https://eth-goerli.alchemyapi.io/v2/" +API_KEY = "" +PRIVATE_KEY = "" +CONTRACT_ADDRESS = "0x" +``` + +### Chukua ABI ya mkataba wako {#grab-your-contract-ABI} + +[ABI (Kiolesura cha Maombi cha Mfumo-mbili)](/glossary/#abi) ya mkataba wetu ni kiolesura cha kuingiliana na mkataba-erevu wetu. Hardhat hutengeneza ABI kiotomatiki na kuihifadhi katika `HelloWorld.json`. Ili kutumia ABI, tutahitaji kuchanganua yaliyomo kwa kuongeza mistari ifuatayo ya msimbo kwenye faili yetu ya `interact.js`: + +```javascript +// interact.js +const contract = require("../artifacts/contracts/HelloWorld.sol/HelloWorld.json") +``` + +Ikiwa unataka kuona ABI unaweza kuichapisha kwenye koni yako: + +```javascript +console.log(JSON.stringify(contract.abi)) +``` + +Ili kuona ABI yako ikichapishwa kwenye koni, nenda kwenye terminal yako na uendeshe: + +```bash +npx hardhat run scripts/interact.js +``` + +### Unda mfano wa mkataba wako {#create-an-instance-of-your-contract} + +Ili kuingiliana na mkataba wetu, tunahitaji kuunda mfano wa mkataba katika msimbo wetu. Ili kufanya hivyo na Ethers.js, tutahitaji kufanya kazi na dhana tatu: + +1. Mtoa huduma - mtoa huduma wa nodi anayekupa ufikiaji wa kusoma na kuandika kwenye mnyororo wa bloku +2. Mwenye saini - inawakilisha akaunti ya Ethereum inayoweza kusaini miamala +3. Mkataba - kitu cha Ethers.js kinachowakilisha mkataba maalum uliotumwa kwenye mnyororo + +Tutatumia ABI ya mkataba kutoka hatua ya awali ili kuunda mfano wetu wa mkataba: + +```javascript +// interact.js + +// Mtoa huduma +const alchemyProvider = new ethers.providers.AlchemyProvider( + (network = "goerli"), + API_KEY +) + +// Mwenye saini +const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider) + +// Mkataba +const helloWorldContract = new ethers.Contract( + CONTRACT_ADDRESS, + contract.abi, + signer +) +``` + +Jifunze zaidi kuhusu Watoa huduma, Wanaosaini, na Mikataba katika [nyaraka za ethers.js](https://docs.ethers.io/v5/). + +### Soma ujumbe wa kuanzisha {#read-the-init-message} + +Unakumbuka tuliposambaza mkataba wetu na `initMessage = "Hello world!"`? Sasa tutasoma ujumbe huo uliohifadhiwa katika mkataba-erevu wetu na kuuchapisha kwenye koni. + +Katika JavaScript, kazi za asinkroni hutumiwa wakati wa kuingiliana na mitandao. Ili kujifunza zaidi kuhusu kazi za asinkroni, [soma makala hii ya kati](https://blog.bitsrc.io/understanding-asynchronous-javascript-the-event-loop-74cd408419ff). + +Tumia msimbo ulio hapa chini kuita kazi ya `ujumbe` katika mkataba-erevu wetu na kusoma ujumbe wa kuanzisha: + +```javascript +// interact.js + +// ... + +async function main() { + const message = await helloWorldContract.message() + console.log("Ujumbe ni: " + message) +} +main() +``` + +Baada ya kuendesha faili kwa kutumia `npx hardhat run scripts/interact.js` kwenye terminal tunapaswa kuona jibu hili: + +``` +Ujumbe ni: Hello world! +``` + +Hongera! Umefanikiwa kusoma data ya mkataba-erevu kutoka kwa mnyororo wa bloku wa Ethereum, hongera sana! + +### Sasisha ujumbe {#update-the-message} + +Badala ya kusoma tu ujumbe, tunaweza pia kusasisha ujumbe uliohifadhiwa katika mkataba-erevu wetu kwa kutumia kazi ya `sasisho`! Inapendeza, sivyo? + +Ili kusasisha ujumbe, tunaweza kuita moja kwa moja kazi ya `sasisho` kwenye kitu chetu cha Mkataba kilichoundwa: + +```javascript +// interact.js + +// ... + +async function main() { + const message = await helloWorldContract.message() + console.log("Ujumbe ni: " + message) + + console.log("Inasasisha ujumbe...") + const tx = await helloWorldContract.update("Huu ndio ujumbe mpya.") + await tx.wait() +} +main() +``` + +Kumbuka kuwa kwenye mstari wa 11, tunafanya mwito kwa `.wait()` kwenye kitu cha muamala kilichorudishwa. Hii inahakikisha kwamba hati yetu inasubiri muamala uchimbwe kwenye mnyororo wa bloku kabla ya kutoka kwenye kazi. Ikiwa wito wa `.wait()` haujajumuishwa, hati inaweza isione thamani iliyosasishwa ya `ujumbe` katika mkataba. + +### Soma ujumbe mpya {#read-the-new-message} + +Unapaswa kuwa na uwezo wa kurudia [hatua ya awali](#read-the-init-message) ili kusoma thamani iliyosasishwa ya `ujumbe`. Chukua muda na uone ikiwa unaweza kufanya mabadiliko muhimu ili kuchapisha thamani hiyo mpya! + +Ikiwa unahitaji dokezo, hivi ndivyo faili yako ya `interact.js` inavyopaswa kuonekana kwa sasa: + +```javascript +// interact.js + +const API_KEY = process.env.API_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY +const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS + +const contract = require("../artifacts/contracts/HelloWorld.sol/HelloWorld.json") + +// mtoa huduma - Alchemy +const alchemyProvider = new ethers.providers.AlchemyProvider( + (network = "goerli"), + API_KEY +) + +// mtiaji saini - wewe +const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider) + +// mfano wa mkataba +const helloWorldContract = new ethers.Contract( + CONTRACT_ADDRESS, + contract.abi, + signer +) + +async function main() { + const message = await helloWorldContract.message() + console.log("Ujumbe ni: " + message) + + console.log("Inasasisha ujumbe...") + const tx = await helloWorldContract.update("huu ni ujumbe mpya") + await tx.wait() + + const newMessage = await helloWorldContract.message() + console.log("Ujumbe mpya ni: " + newMessage) +} + +main() +``` + +Sasa endesha tu hati na unapaswa kuona ujumbe wa zamani, hali ya kusasisha, na ujumbe mpya ukichapishwa kwenye terminal yako! + +`npx hardhat run scripts/interact.js --network goerli` + +``` +Ujumbe ni: Hello World! +Inasasisha ujumbe... +Ujumbe mpya ni: Huu ni ujumbe mpya. +``` + +Wakati unapoendesha hati hiyo, unaweza kugundua kuwa hatua ya `Inasasisha ujumbe...` inachukua muda kupakia kabla ya ujumbe mpya kupakiwa. Hiyo ni kutokana na mchakato wa uchimbaji; ikiwa una hamu ya kufuatilia miamala inapochimbwa, tembelea [Alchemy mempool](https://dashboard.alchemyapi.io/mempool) ili kuona hali ya muamala. Ikiwa muamala umeacha, inasaidia pia kuangalia [Goerli Etherscan](https://goerli.etherscan.io) na kutafuta hashi ya muamala wako. + +## Sehemu ya 3: Chapisha Mkataba-erevu wako kwenye Etherscan {#part-3-publish-your-smart-contract-to-etherscan} + +Umefanya kazi yote ngumu ya kuufanya mkataba-erevu wako kuwa hai; sasa ni wakati wa kuushiriki na ulimwengu! + +Kwa kuthibitisha mkataba-erevu wako kwenye Etherscan, mtu yeyote anaweza kuona msimbo wako chanzo na kuingiliana na mkataba-erevu wako. Tuanze! + +### Hatua ya 1: Tengeneza Ufunguo wa API kwenye akaunti yako ya Etherscan {#step-1-generate-an-api-key-on-your-etherscan-account} + +Ufunguo wa API wa Etherscan ni muhimu ili kuthibitisha kuwa wewe ndiye mmiliki wa mkataba-erevu unaojaribu kuchapisha. + +Ikiwa huna akaunti ya Etherscan tayari, [jisajili kwa akaunti](https://etherscan.io/register). + +Baada ya kuingia, tafuta jina lako la mtumiaji kwenye upau wa urambazaji, lielekeze juu yake na uchague kitufe cha **Wasifu wangu**. + +Kwenye ukurasa wako wa wasifu, unapaswa kuona upau wa urambazaji wa kando. Kutoka kwenye upau wa urambazaji wa kando, chagua **Vifunguo vya API**. Kisha, bonyeza kitufe cha "Ongeza" ili kuunda ufunguo mpya wa API, ipe jina programu yako **hello-world** na bonyeza kitufe cha **Unda Ufunguo Mpya wa API**. + +Ufunguo wako mpya wa API unapaswa kuonekana kwenye jedwali la ufunguo wa API. Nakili ufunguo wa API kwenye ubao wako wa kunakili. + +Kisha, tunahitaji kuongeza ufunguo wa API wa Etherscan kwenye faili yetu ya `.env`. + +Baada ya kuiongeza, faili yako ya `.env` inapaswa kuonekana hivi: + +```javascript +API_URL = "https://eth-goerli.alchemyapi.io/v2/ufunguo-wako-wa-api" +PUBLIC_KEY = "anwani-yako-ya-akaunti-ya-umma" +PRIVATE_KEY = "anwani-yako-ya-akaunti-binafsi" +CONTRACT_ADDRESS = "anwani-yako-ya-mkataba" +ETHERSCAN_API_KEY = "ufunguo-wako-wa-etherscan" +``` + +### Mikataba-erevu iliyotumwa na Hardhat {#hardhat-deployed-smart-contracts} + +#### Sakinisha hardhat-etherscan {#install-hardhat-etherscan} + +Kuchapisha mkataba wako kwa Etherscan kwa kutumia Hardhat ni rahisi. Kwanza utahitaji kusakinisha programu-jalizi ya `hardhat-etherscan` ili kuanza. `hardhat-etherscan` itathibitisha kiotomatiki msimbo chanzo wa mkataba-erevu na ABI kwenye Etherscan. Ili kuongeza hii, katika saraka ya `hello-world` endesha: + +```text +npm install --save-dev @nomiclabs/hardhat-etherscan +``` + +Baada ya kusakinishwa, jumuisha taarifa ifuatayo juu ya `hardhat.config.js` yako, na ongeza chaguzi za usanidi wa Etherscan: + +```javascript +// hardhat.config.js + +require("dotenv").config() +require("@nomiclabs/hardhat-ethers") +require("@nomiclabs/hardhat-etherscan") + +const { API_URL, PRIVATE_KEY, ETHERSCAN_API_KEY } = process.env + +module.exports = { + solidity: "0.7.3", + defaultNetwork: "goerli", + networks: { + hardhat: {}, + goerli: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`], + }, + }, + etherscan: { + // Ufunguo wako wa API kwa Etherscan + // Pata moja kwenye https://etherscan.io/ + apiKey: ETHERSCAN_API_KEY, + }, +} +``` + +#### Thibitisha mkataba-erevu wako kwenye Etherscan {#verify-your-smart-contract-on-etherscan} + +Hakikisha faili zote zimehifadhiwa na vigezo vyote vya `.env` vimesanidiwa ipasavyo. + +Endesha kazi ya `kuthibitisha`, ukipitisha anwani ya mkataba, na mtandao ambapo umewekwa: + +```text +npx hardhat verify --network goerli ANWANI_YA_MKATABA_ULIOPELEKWA 'Hello World!' +``` + +Hakikisha kwamba `ANWANI_YA_MKATABA_ULIOPELEKWA` ni anwani ya mkataba-erevu wako uliotumwa kwenye mtandao wa majaribio wa Goerli. Pia, hoja ya mwisho (`'Hello World!'`) lazima iwe thamani sawa ya mfuatano iliyotumiwa [wakati wa hatua ya kupeleka katika sehemu ya 1](#write-our-deploy-script). + +Ikiwa yote yatakwenda sawa, utaona ujumbe ufuatao kwenye terminal yako: + +```text +Msimbo chanzo umewasilishwa kwa mafanikio kwa mkataba +contracts/HelloWorld.sol:HelloWorld kwenye 0xdeployed-contract-address +kwa uthibitisho kwenye Etherscan. Inasubiri matokeo ya uthibitisho... + + +Mkataba wa HelloWorld umethibitishwa kwa mafanikio kwenye Etherscan. +https://goerli.etherscan.io/address/#contracts +``` + +Hongera! Msimbo wako wa mkataba-erevu uko kwenye Etherscan! + +### Angalia mkataba-erevu wako kwenye Etherscan! {#check-out-your-smart-contract-on-etherscan} + +Unapoelekea kwenye kiungo kilichotolewa kwenye terminal yako, unapaswa kuwa na uwezo wa kuona msimbo wako wa mkataba-erevu na ABI zilizochapishwa kwenye Etherscan! + +**Wahooo - umefanikiwa bingwa! Sasa mtu yeyote anaweza kuita au kuandika kwa mkataba-erevu wako! Tunatarajia kuona utakachojenga baadaye!** + +## Sehemu ya 4 - Kuunganisha mkataba-erevu wako na sehemu ya mbele {#part-4-integrating-your-smart-contract-with-the-frontend} + +Mwishoni mwa mafunzo haya, utajua jinsi ya: + +- Unganisha mkoba wa MetaMask kwenye mfumo mtawanyo wa kimamlaka wako +- Soma data kutoka kwa mkataba-erevu wako kwa kutumia API ya [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) +- Saini miamala ya Ethereum kwa kutumia MetaMask + +Kwa mfumo mtawanyo wa kimamlaka huu, tutatumia [React](https://react.dev/) kama mfumo wetu wa mbele; hata hivyo, ni muhimu kutambua kwamba hatutatumia muda mwingi kuchanganua misingi yake, kwani tutazingatia zaidi kuleta utendaji wa Web3 kwenye mradi wetu. + +Kama sharti, unapaswa kuwa na uelewa wa kiwango cha mwanzo cha React. Ikiwa sivyo, tunapendekeza ukamilishe [mafunzo rasmi ya Utangulizi wa React](https://react.dev/learn). + +### Nakili faili za kuanzia {#clone-the-starter-files} + +Kwanza, nenda kwenye [hazina ya GitHub ya hello-world-part-four](https://github.com/alchemyplatform/hello-world-part-four-tutorial) ili kupata faili za kuanzia za mradi huu na unakili hazina hii kwenye mashine yako ya ndani. + +Fungua hazina iliyonakiliwa ndani ya nchi. Angalia kuwa ina folda mbili: `starter-files` na `completed`. + +- `starter-files`- **tutafanya kazi katika saraka hii**, tutaunganisha UI na mkoba wako wa Ethereum na mkataba-erevu tuliouchapisha kwenye Etherscan katika [Sehemu ya 3](#part-3). +- `completed` ina mafunzo yote yaliyokamilika na inapaswa kutumika tu kama rejea ukikwama. + +Kisha, fungua nakala yako ya `starter-files` kwenye kihariri chako cha msimbo unachokipenda, na kisha nenda kwenye folda ya `src`. + +Msimbo wote tutakaouandika utakuwa chini ya folda ya `src`. Tutakuwa tukihariri kijenzi cha `HelloWorld.js` na faili za JavaScript za `util/interact.js` ili kuupa mradi wetu utendaji wa Web3. + +### Angalia faili za kuanzia {#check-out-the-starter-files} + +Kabla ya kuanza kuandika msimbo, hebu tuchunguze tulichopewa katika faili za kuanzia. + +#### Fanya mradi wako wa react uendeshwe {#get-your-react-project-running} + +Tuanze kwa kuendesha mradi wa React katika kivinjari chetu. Uzuri wa React ni kwamba mara tu mradi wetu unapokuwa ukifanya kazi katika kivinjari chetu, mabadiliko yoyote tunayohifadhi yatasasishwa moja kwa moja kwenye kivinjari chetu. + +Ili kuendesha mradi, nenda kwenye saraka kuu ya folda ya `starter-files`, na kisha endesha `npm install` kwenye terminal yako ili kusakinisha vitegemezi vya mradi: + +```bash +cd starter-files +npm install +``` + +Mara tu hizo zikimaliza kusakinisha, endesha `npm start` kwenye terminal yako: + +```bash +npm start +``` + +Kufanya hivyo kunapaswa kufungua [http://localhost:3000/](http://localhost:3000/) kwenye kivinjari chako, ambapo utaona sehemu ya mbele ya mradi wetu. Inapaswa kuwa na sehemu moja (mahali pa kusasisha ujumbe uliohifadhiwa katika mkataba-erevu wako), kitufe cha "Unganisha Mkoba", na kitufe cha "Sasisha". + +Ukijaribu kubofya kitufe chochote, utagundua kuwa havifanyi kazi—hiyo ni kwa sababu bado tunahitaji kupanga utendaji wao. + +#### Kijenzi cha `HelloWorld.js` {#the-helloworld-js-component} + +Hebu turudi kwenye folda ya `src` kwenye kihariri chetu na tufungue faili ya `HelloWorld.js`. Ni muhimu sana tuelewe kila kitu katika faili hii, kwani ndicho kijenzi kikuu cha React tutakachokuwa tukifanyia kazi. + +Juu ya faili hii, utaona tuna taarifa kadhaa za uingizaji ambazo ni muhimu ili mradi wetu uendeshwe, ikiwa ni pamoja na maktaba ya React, hook za useEffect na useState, baadhi ya vitu kutoka `./util/interact.js` (tutaelezea kwa undani zaidi hivi karibuni!), na nembo ya Alchemy. + +```javascript +// HelloWorld.js + +import React from "react" +import { useEffect, useState } from "react" +import { + helloWorldContract, + connectWallet, + updateMessage, + loadCurrentMessage, + getCurrentWalletConnected, +} from "./util/interact.js" + +import alchemylogo from "./alchemylogo.svg" +``` + +Kisha, tuna vigezo vyetu vya hali ambavyo tutasasisha baada ya matukio maalum. + +```javascript +// HelloWorld.js + +//Vigezo vya hali +const [walletAddress, setWallet] = useState("") +const [status, setStatus] = useState("") +const [message, setMessage] = useState("Hakuna muunganisho na mtandao.") +const [newMessage, setNewMessage] = useState("") +``` + +Hivi ndivyo kila kigezo kinavyowakilisha: + +- `walletAddress` - mfuatano unaohifadhi anwani ya pochi ya mtumiaji +- `status`- mfuatano unaohifadhi ujumbe muhimu unaomwongoza mtumiaji jinsi ya kuingiliana na mfumo mtawanyo wa kimamlaka +- `message` - mfuatano unaohifadhi ujumbe wa sasa katika mkataba-erevu +- `newMessage` - mfuatano unaohifadhi ujumbe mpya utakaondikwa kwenye mkataba-erevu + +Baada ya vigezo vya hali, utaona kazi tano ambazo hazijatekelezwa: `useEffect` ,`addSmartContractListener`, `addWalletListener` , `connectWalletPressed`, na `onUpdatePressed`. Tutaeleza wanachofanya hapa chini: + +```javascript +// HelloWorld.js + +//inayoitwa mara moja tu +useEffect(async () => { + //TODO: tekeleza +}, []) + +function addSmartContractListener() { + //TODO: tekeleza +} + +function addWalletListener() { + //TODO: tekeleza +} + +const connectWalletPressed = async () => { + //TODO: tekeleza +} + +const onUpdatePressed = async () => { + //TODO: tekeleza +} +``` + +- [`useEffect`](https://legacy.reactjs.org/docs/hooks-effect.html)- hii ni hook ya React inayoitwa baada ya kijenzi chako kutolewa. Kwa sababu ina propu ya safu tupu `[]` iliyopitishwa ndani yake (tazama mstari wa 4), itaitwa tu kwenye utoaji wa _kwanza_ wa kijenzi. Hapa tutapakia ujumbe wa sasa uliohifadhiwa katika mkataba-erevu wetu, tuite wasikilizaji wetu wa mkataba-erevu na mkoba, na tusasishe UI yetu ili kuonyesha ikiwa mkoba tayari umeunganishwa. +- `addSmartContractListener`- kazi hii inaweka msikilizaji ambaye atatazama tukio la `UpdatedMessages` la mkataba wetu wa HelloWorld na kusasisha UI yetu ujumbe unapobadilishwa katika mkataba-erevu wetu. +- `addWalletListener`- kazi hii inaweka msikilizaji anayegundua mabadiliko katika hali ya mkoba wa MetaMask wa mtumiaji, kama vile mtumiaji anapotenganisha mkoba wake au kubadilisha anwani. +- `connectWalletPressed`- kazi hii itaitwa ili kuunganisha mkoba wa MetaMask wa mtumiaji kwenye mfumo mtawanyo wa kimamlaka wetu. +- `onUpdatePressed` - kazi hii itaitwa wakati mtumiaji anataka kusasisha ujumbe uliohifadhiwa katika mkataba-erevu. + +Karibu na mwisho wa faili hii, tuna UI ya kijenzi chetu. + +```javascript +// HelloWorld.js + +//UI ya kijenzi chetu +return ( +
+ + + +

Ujumbe wa Sasa:

+

{message}

+ +

Ujumbe Mpya:

+ +
+ setNewMessage(e.target.value)} + value={newMessage} + /> +

{status}

+ + +
+
+) +``` + +Ukichunguza msimbo huu kwa makini, utaona wapi tunatumia vigezo vyetu mbalimbali vya hali katika UI yetu: + +- Kwenye mistari 6-12, ikiwa mkoba wa mtumiaji umeunganishwa (yaani, `walletAddress.length > 0`), tunaonyesha toleo lililofupishwa la `anwani ya mkoba` wa mtumiaji katika kitufe chenye ID "walletButton;" vinginevyo inasema tu "Unganisha Mkoba". +- Kwenye mstari wa 17, tunaonyesha ujumbe wa sasa uliohifadhiwa katika mkataba-erevu, ambao unanaswa katika mfuatano wa `ujumbe`. +- Kwenye mistari 23-26, tunatumia [kijenzi kinachodhibitiwa](https://legacy.reactjs.org/docs/forms.html#controlled-components) kusasisha kigezo chetu cha hali cha `newMessage` wakati ingizo katika sehemu ya maandishi linapobadilika. + +Mbali na vigezo vyetu vya hali, utaona pia kwamba kazi za `connectWalletPressed` na `onUpdatePressed` huitwa wakati vitufe vyenye ID `publishButton` na `walletButton` vinapobofywa mtawalia. + +Mwisho, hebu tushughulikie wapi kijenzi hiki cha `HelloWorld.js` kinaongezwa. + +Ukienda kwenye faili ya `App.js`, ambayo ni kijenzi kikuu katika React kinachofanya kazi kama chombo cha vijenzi vingine vyote, utaona kwamba kijenzi chetu cha `HelloWorld.js` kinaingizwa kwenye mstari wa 7. + +Mwisho lakini sio uchache, hebu tuangalie faili moja zaidi uliyopewa, faili ya `interact.js`. + +#### Faili ya `interact.js` {#the-interact-js-file} + +Kwa sababu tunataka kufuata dhana ya [M-V-C](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller), tutataka faili tofauti ambayo ina kazi zetu zote za kudhibiti mantiki, data, na sheria za mfumo mtawanyo wa kimamlaka wetu, na kisha tuweze kuhamisha kazi hizo kwenye sehemu yetu ya mbele (kijenzi chetu cha `HelloWorld.js`). + +👆🏽Hii ndiyo hasa madhumuni ya faili yetu ya `interact.js`! + +Nenda kwenye folda ya `util` katika saraka yako ya `src`, na utaona tumejumuisha faili inayoitwa `interact.js` ambayo itakuwa na kazi zetu zote za mwingiliano wa mkataba-erevu na mkoba na vigezo. + +```javascript +// interact.js + +//export const helloWorldContract; + +export const loadCurrentMessage = async () => {} + +export const connectWallet = async () => {} + +const getCurrentWalletConnected = async () => {} + +export const updateMessage = async (message) => {} +``` + +Utaona juu ya faili kwamba tumeacha maoni kwenye kitu cha `helloWorldContract`. Baadaye katika mafunzo haya, tutaondoa maoni kwenye kitu hiki na kuanzisha mkataba-erevu wetu katika kigezo hiki, ambacho kisha tutakihamisha kwenye kijenzi chetu cha `HelloWorld.js`. + +Kazi nne ambazo hazijatekelezwa baada ya kitu chetu cha `helloWorldContract` hufanya yafuatayo: + +- `loadCurrentMessage` - kazi hii inashughulikia mantiki ya kupakia ujumbe wa sasa uliohifadhiwa katika mkataba-erevu. Itafanya wito wa _kusoma_ kwa mkataba-erevu wa Hello World kwa kutumia [API ya Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3). +- `connectWallet` - kazi hii itaunganisha MetaMask ya mtumiaji kwenye mfumo mtawanyo wa kimamlaka wetu. +- `getCurrentWalletConnected` - kazi hii itaangalia ikiwa akaunti ya Ethereum tayari imeunganishwa na mfumo mtawanyo wa kimamlaka wetu wakati wa upakiaji wa ukurasa na kusasisha UI yetu ipasavyo. +- `updateMessage` - kazi hii itasasisha ujumbe uliohifadhiwa katika mkataba-erevu. Itafanya mwito wa _kuandika_ kwa mkataba-erevu wa Hello World, hivyo mkoba wa MetaMask wa mtumiaji utalazimika kusaini muamala wa Ethereum ili kusasisha ujumbe. + +Sasa kwa kuwa tunaelewa tunachofanya kazi nacho, hebu tujue jinsi ya kusoma kutoka kwa mkataba-erevu wetu! + +### Hatua ya 3: Soma kutoka kwa mkataba-erevu wako {#step-3-read-from-your-smart-contract} + +Ili kusoma kutoka kwa mkataba-erevu wako, utahitaji kusanidi kwa mafanikio: + +- Muunganisho wa API kwenye mnyororo wa Ethereum +- Mfano uliopakiwa wa mkataba-erevu wako +- Kazi ya kuita kazi ya mkataba-erevu wako +- Msikilizaji wa kutazama masasisho wakati data unayosoma kutoka kwa mkataba-erevu inapobadilika + +Hii inaweza kuonekana kama hatua nyingi, lakini usijali! Tutakuongoza jinsi ya kufanya kila moja hatua kwa hatua! :\) + +#### Anzisha muunganisho wa API kwenye mnyororo wa Ethereum {#establish-an-api-connection-to-the-ethereum-chain} + +Kwa hiyo unakumbuka jinsi katika Sehemu ya 2 ya mafunzo haya, tulitumia ufunguo wetu wa [Alchemy Web3 kusoma kutoka kwa mkataba-erevu wetu](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract/interacting-with-a-smart-contract#step-1-install-web3-library)? Utahitaji pia ufunguo wa Alchemy Web3 katika mfumo mtawanyo wa kimamlaka wako ili kusoma kutoka kwenye mnyororo. + +Ikiwa huna tayari, kwanza sakinisha [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) kwa kwenda kwenye saraka kuu ya `starter-files` yako na kuendesha yafuatayo kwenye terminal yako: + +```text +npm install @alch/alchemy-web3 +``` + +[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) ni kifuniko karibu na [Web3.js](https://docs.web3js.org/), inayotoa mbinu za API zilizoboreshwa na manufaa mengine muhimu ili kurahisisha maisha yako kama msanidi programu wa web3. Imeundwa kuhitaji usanidi mdogo ili uweze kuanza kuitumia katika programu yako mara moja! + +Kisha, sakinisha kifurushi cha [dotenv](https://www.npmjs.com/package/dotenv) katika saraka ya mradi wako, ili tuwe na mahali salama pa kuhifadhi ufunguo wetu wa API baada ya kuupata. + +```text +npm install dotenv --save +``` + +Kwa mfumo mtawanyo wa kimamlaka wetu, **tutatumia ufunguo wetu wa API wa Websockets** badala ya ufunguo wetu wa API wa HTTP, kwani utaturuhusu kuweka msikilizaji anayegundua wakati ujumbe uliohifadhiwa katika mkataba-erevu unapobadilika. + +Baada ya kupata ufunguo wako wa API, unda faili ya `.env` katika saraka yako kuu na uongeze url yako ya Websockets ya Alchemy. Baadaye, faili yako ya `.env` inapaswa kuonekana hivi: + +```javascript +REACT_APP_ALCHEMY_KEY = wss://eth-goerli.ws.alchemyapi.io/v2/ +``` + +Sasa, tuko tayari kusanidi kituo chetu cha Alchemy Web3 katika mfumo mtawanyo wa kimamlaka wetu! Hebu turudi kwenye `interact.js` yetu, ambayo iko ndani ya folda yetu ya `util` na tuongeze msimbo ufuatao juu ya faili: + +```javascript +// interact.js + +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) + +//export const helloWorldContract; +``` + +Hapo juu, kwanza tuliingiza ufunguo wa Alchemy kutoka kwa faili yetu ya `.env` na kisha tukapitisha `alchemyKey` yetu kwa `createAlchemyWeb3` ili kuanzisha kituo chetu cha Alchemy Web3. + +Na kituo hiki kikiwa tayari, ni wakati wa kupakia mkataba-erevu wetu! + +#### Inapakia mkataba-erevu wako wa Hello World {#loading-your-hello-world-smart-contract} + +Ili kupakia mkataba-erevu wako wa Hello World, utahitaji anwani yake ya mkataba na ABI, zote mbili zinaweza kupatikana kwenye Etherscan ikiwa ulikamilisha [Sehemu ya 3 ya mafunzo haya.](/developers/tutorials/hello-world-smart-contract-fullstack/#part-3-publish-your-smart-contract-to-etherscan-part-3-publish-your-smart-contract-to-etherscan) + +#### Jinsi ya kupata ABI ya mkataba wako kutoka Etherscan {#how-to-get-your-contract-abi-from-etherscan} + +Ikiwa uliruka Sehemu ya 3 ya mafunzo haya, unaweza kutumia mkataba wa HelloWorld na anwani [0x6f3f635A9762B47954229Ea479b4541eAF402A6A](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code). ABI yake inaweza kupatikana [hapa](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code). + +ABI ya mkataba ni muhimu kwa kubainisha ni kazi gani mkataba utaita na pia kuhakikisha kuwa kazi hiyo itarudisha data katika umbizo unalotarajia. Baada ya kunakili ABI yetu ya mkataba, hebu tuihifadhi kama faili ya JSON inayoitwa `contract-abi.json` katika saraka yako ya `src`. + +Faili yako ya contract-abi.json inapaswa kuhifadhiwa katika folda yako ya src. + +Tukiwa na anwani ya mkataba wetu, ABI, na kituo cha Alchemy Web3, tunaweza kutumia [mbinu ya mkataba](https://docs.web3js.org/api/web3-eth-contract/class/Contract) kupakia mfano wa mkataba-erevu wetu. Ingiza ABI ya mkataba wako kwenye faili ya `interact.js` na uongeze anwani ya mkataba wako. + +```javascript +// interact.js + +const contractABI = require("../contract-abi.json") +const contractAddress = "0x6f3f635A9762B47954229Ea479b4541eAF402A6A" +``` + +Sasa tunaweza hatimaye kuondoa maoni kwenye kigezo chetu cha `helloWorldContract`, na kupakia mkataba-erevu kwa kutumia kituo chetu cha AlchemyWeb3: + +```javascript +// interact.js +export const helloWorldContract = new web3.eth.Contract( + contractABI, + contractAddress +) +``` + +Kwa muhtasari, mistari 12 ya kwanza ya `interact.js` yako sasa inapaswa kuonekana hivi: + +```javascript +// interact.js + +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) + +const contractABI = require("../contract-abi.json") +const contractAddress = "0x6f3f635A9762B47954229Ea479b4541eAF402A6A" + +export const helloWorldContract = new web3.eth.Contract( + contractABI, + contractAddress +) +``` + +Sasa kwa kuwa mkataba wetu umepakiwa, tunaweza kutekeleza kazi yetu ya `loadCurrentMessage`! + +#### Kutekeleza `loadCurrentMessage` katika faili yako ya `interact.js` {#implementing-loadCurrentMessage-in-your-interact-js-file} + +Kazi hii ni rahisi sana. Tutafanya wito rahisi wa asinkroni wa web3 kusoma kutoka kwa mkataba wetu. Kazi yetu itarudisha ujumbe uliohifadhiwa katika mkataba-erevu: + +Sasisha `loadCurrentMessage` katika faili yako ya `interact.js` kuwa ifuatavyo: + +```javascript +// interact.js + +export const loadCurrentMessage = async () => { + const message = await helloWorldContract.methods.message().call() + return message +} +``` + +Kwa kuwa tunataka kuonyesha mkataba-erevu huu katika UI yetu, hebu tusasishe kazi ya `useEffect` katika kijenzi chetu cha `HelloWorld.js` kuwa ifuatavyo: + +```javascript +// HelloWorld.js + +//inayoitwa mara moja tu +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) +}, []) +``` + +Kumbuka, tunataka tu `loadCurrentMessage` iitwe mara moja wakati wa utoaji wa kwanza wa kijenzi. Hivi karibuni tutatekeleza `addSmartContractListener` ili kusasisha UI kiotomatiki baada ya ujumbe katika mkataba-erevu kubadilika. + +Kabla ya kuingia kwenye msikilizaji wetu, hebu tuangalie tulichonacho hadi sasa! Hifadhi faili zako za `HelloWorld.js` na `interact.js`, na kisha nenda kwenye [http://localhost:3000/](http://localhost:3000/) + +Utaona kwamba ujumbe wa sasa hausomi tena "Hakuna muunganisho na mtandao." Badala yake unaonyesha ujumbe uliohifadhiwa katika mkataba-erevu. Safi! + +#### UI yako sasa inapaswa kuonyesha ujumbe uliohifadhiwa katika mkataba-erevu {#your-UI-should-now-reflect-the-message-stored-in-the-smart-contract} + +Sasa tukizungumzia msikilizaji huyo... + +#### Tekeleza `addSmartContractListener` {#implement-addsmartcontractlistener} + +Ukikumbuka faili ya `HelloWorld.sol` tuliyoandika katika [Sehemu ya 1 ya mfululizo huu wa mafunzo](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract#step-10-write-our-contract), utakumbuka kuwa kuna tukio la mkataba-erevu linaloitwa `UpdatedMessages` ambalo hutolewa baada ya kazi ya `update` ya mkataba-erevu wetu kuitwa (tazama mistari 9 na 27): + +```javascript +// HelloWorld.sol + +// Inabainisha toleo la Solidity, kwa kutumia matoleo ya kimantiki. +// Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity ^0.7.3; + +// Inafafanua mkataba unaoitwa `HelloWorld`. +// Mkataba ni mkusanyiko wa kazi na data (hali yake). Baada ya kupelekwa, mkataba hukaa kwenye anwani maalum kwenye mnyororo wa bloku wa Ethereum. Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + // Hutolewa wakati kazi ya sasisho inapoitwa + // Matukio ya mkataba-erevu ni njia ya mkataba wako kuwasiliana kwamba kitu kilitokea kwenye mnyororo wa bloku kwa programu yako ya mbele, ambayo inaweza kuwa 'inasikiliza' matukio fulani na kuchukua hatua yanapotokea. + event UpdatedMessages(string oldStr, string newStr); + + // Inatangaza kigezo cha hali `message` cha aina ya `string`. + // Vigezo vya hali ni vigezo ambavyo thamani zake huhifadhiwa kabisa katika hifadhi ya mkataba. Neno muhimu `public` hufanya vigezo kupatikana kutoka nje ya mkataba na huunda kazi ambayo mikataba mingine au wateja wanaweza kuita ili kupata thamani. + string public message; + + // Sawa na lugha nyingi za upangaji zinazotegemea darasa, konstruka ni kazi maalum ambayo hutekelezwa tu wakati wa uundaji wa mkataba. + // Konstruka hutumiwa kuanzisha data ya mkataba. Jifunze zaidi:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) { + + // Inakubali hoja ya mfuatano `initMessage` na kuweka thamani katika kigezo cha hifadhi cha mkataba `message`). + message = initMessage; + } + + // Kazi ya umma inayokubali hoja ya mfuatano na kusasisha kigezo cha hifadhi `message`. + function update(string memory newMessage) public { + string memory oldMsg = message; + message = newMessage; + emit UpdatedMessages(oldMsg, newMessage); + } +} +``` + +Matukio ya mkataba-erevu ni njia ya mkataba wako kuwasiliana kwamba kitu kilitokea (yaani, kulikuwa na _tukio_) kwenye mnyororo wa bloku kwa programu yako ya mbele, ambayo inaweza kuwa 'inasikiliza' matukio maalum na kuchukua hatua yanapotokea. + +Kazi ya `addSmartContractListener` itasikiliza hasa tukio la `UpdatedMessages` la mkataba-erevu wetu wa Hello World, na kusasisha UI yetu ili kuonyesha ujumbe mpya. + +Badilisha `addSmartContractListener` kuwa ifuatavyo: + +```javascript +// HelloWorld.js + +function addSmartContractListener() { + helloWorldContract.events.UpdatedMessages({}, (error, data) => { + if (error) { + setStatus("😥 " + error.message) + } else { + setMessage(data.returnValues[1]) + setNewMessage("") + setStatus("🎉 Ujumbe wako umesasishwa!") + } + }) +} +``` + +Hebu tuchanganue kinachotokea wakati msikilizaji anapogundua tukio: + +- Ikiwa kosa litatokea wakati tukio linapotolewa, litaonyeshwa kwenye UI kupitia kigezo chetu cha hali cha `hali`. +- Vinginevyo, tutatumia kitu cha `data` kilichorudishwa. `data.returnValues` ni safu iliyopangwa kuanzia sifuri ambapo kipengele cha kwanza katika safu huhifadhi ujumbe wa awali na kipengele cha pili huhifadhi ule uliosasishwa. Kwa ujumla, kwenye tukio lililofanikiwa tutaweka mfuatano wetu wa `ujumbe` kuwa ujumbe uliosasishwa, tufute mfuatano wa `ujumbeMpya`, na tusasishe kigezo chetu cha hali cha `hali` ili kuonyesha kwamba ujumbe mpya umechapishwa kwenye mkataba-erevu wetu. + +Mwisho, hebu tuite msikilizaji wetu katika kazi yetu ya `useEffect` ili ianzishwe kwenye utoaji wa kwanza wa kijenzi cha `HelloWorld.js`. Kwa ujumla, kazi yako ya `useEffect` inapaswa kuonekana hivi: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() +}, []) +``` + +Sasa kwa kuwa tunaweza kusoma kutoka kwa mkataba-erevu wetu, ingekuwa vizuri kujua jinsi ya kuandika ndani yake pia! Hata hivyo, ili kuandika kwenye mfumo mtawanyo wa kimamlaka wetu, lazima kwanza tuwe na mkoba wa Ethereum uliounganishwa nao. + +Kwa hiyo, baadaye tutashughulikia kusanidi mkoba wetu wa Ethereum (MetaMask) na kisha kuunganisha na mfumo mtawanyo wa kimamlaka wetu! + +### Hatua ya 4: Sanidi mkoba wako wa Ethereum {#step-4-set-up-your-ethereum-wallet} + +Ili kuandika chochote kwenye mnyororo wa Ethereum, watumiaji lazima wasaini miamala kwa kutumia funguo zao za faragha za mkoba halisi. Kwa mafunzo haya, tutatumia [MetaMask](https://metamask.io/), mkoba halisi kwenye kivinjari unaotumiwa kudhibiti anwani ya akaunti yako ya Ethereum, kwani hurahisisha sana utiaji saini wa muamala huu kwa mtumiaji wa mwisho. + +Ikiwa unataka kuelewa zaidi jinsi miamala kwenye Ethereum inavyofanya kazi, angalia [ukurasa huu](/developers/docs/transactions/) kutoka kwa Msingi wa Ethereum. + +#### Pakua MetaMask {#download-metamask} + +Unaweza kupakua na kuunda akaunti ya MetaMask bure [hapa](https://metamask.io/download). Unapounda akaunti, au ikiwa tayari una akaunti, hakikisha umebadili na kuweka "Mtandao wa Majaribio wa Goerli" juu kulia (ili tusitumie pesa halisi). + +#### Ongeza ether kutoka kwa Bomba {#add-ether-from-a-faucet} + +Ili kusaini muamala kwenye mnyororo wa bloku wa Ethereum, tutahitaji Eth bandia. Ili kupata Eth unaweza kwenda kwenye [FaucETH](https://fauceth.komputing.org) na uweke anwani ya akaunti yako ya Goerli, bofya "Omba fedha", kisha uchague "Ethereum Testnet Goerli" katika menyu kunjuzi na hatimaye bofya kitufe cha "Omba fedha" tena. Unapaswa kuona Eth katika akaunti yako ya MetaMask muda mfupi baadaye! + +#### Angalia Salio lako {#check-your-balance} + +Ili kuhakikisha salio letu lipo, hebu tufanye ombi la [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) kwa kutumia [zana ya mtunzi ya Alchemy](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Hii itarudisha kiasi cha Eth katika pochi yetu. Baada ya kuweka anwani ya akaunti yako ya MetaMask na kubofya “Tuma Ombi”, unapaswa kuona jibu kama hili: + +```text +{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"} +``` + +**KUMBUKA:** Matokeo haya yako katika wei si eth. Wei hutumika kama denomina ndogo zaidi ya ether. Ubadilishaji kutoka wei hadi eth ni: 1 eth = 10¹⁸ wei. Kwa hivyo, tukibadilisha 0xde0b6b3a7640000 hadi desimali tunapata 1\*10¹⁸ ambayo ni sawa na eth 1. + +Phew! Pesa zetu bandia zote zipo! 🤑 + +### Hatua ya 5: Unganisha MetaMask na UI yako {#step-5-connect-metamask-to-your-UI} + +Sasa kwa kuwa pochi yetu ya MetaMask imesanidiwa, hebu tuunganishe mfumo wetu uliotawanywa nayo! + +#### Kazi ya `connectWallet` {#the-connectWallet-function} + +Katika faili yetu ya `interact.js`, hebu tutekeleze kazi ya `connectWallet`, ambayo tunaweza kuiita katika kijenzi chetu cha `HelloWorld.js`. + +Hebu tubadilishe `connectWallet` kuwa ifuatavyo: + +```javascript +// interact.js + +export const connectWallet = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_requestAccounts", + }) + const obj = { + status: "👆🏽 Andika ujumbe kwenye sehemu ya maandishi hapo juu.", + address: addressArray[0], + } + return obj + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + Lazima usakinishe MetaMask, mkoba halisi wa Ethereum, katika kivinjari chako. + +

+
+ ), + } + } +} +``` + +Kwa hiyo, je, kizuizi hiki kikubwa cha msimbo kinafanya nini hasa? + +Naam, kwanza, huangalia ikiwa `window.ethereum` imewezeshwa katika kivinjari chako. + +`window.ethereum` ni API ya kimataifa inayoingizwa na MetaMask na watoa huduma wengine wa pochi ambayo inaruhusu tovuti kuomba akaunti za Ethereum za watumiaji. Ikiwa imeidhinishwa, inaweza kusoma data kutoka kwa minyororo ya bloku ambayo mtumiaji ameunganishwa nayo, na kupendekeza mtumiaji asaini ujumbe na miamala. Angalia [hati za MetaMask](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) kwa maelezo zaidi! + +Ikiwa `window.ethereum` _haipo_, basi hiyo inamaanisha kuwa MetaMask haijasakinishwa. Hii inasababisha kurudishwa kwa kitu cha JSON, ambapo `anwani` iliyorudishwa ni mfuatano tupu, na kitu cha `status` cha JSX kinaeleza kuwa mtumiaji lazima asakinishe MetaMask. + +Sasa ikiwa `window.ethereum` _ipo_, hapo ndipo mambo yanapopendeza. + +Kwa kutumia kitanzi cha kujaribu/kukamatwa, tutajaribu kuunganisha kwenye MetaMask kwa kuita [`window.ethereum.request({ method: "eth_requestAccounts" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts). Kuita kazi hii kutafungua MetaMask kwenye kivinjari, ambapo mtumiaji ataombwa kuunganisha pochi yake kwenye mfumo wako uliotawanywa. + +- Ikiwa mtumiaji atachagua kuunganisha, `method: "eth_requestAccounts"` itarudisha safu iliyo na anwani zote za akaunti za mtumiaji zilizounganishwa na mfumo mtawanyo wa kimamlaka. Kwa pamoja, kazi yetu ya `connectWallet` itarudisha kitu cha JSON kilicho na `anwani` ya _kwanza_ katika safu hii (tazama mstari wa 9) na ujumbe wa `status` unaomwomba mtumiaji aandike ujumbe kwenye mkataba erevu. +- Ikiwa mtumiaji atakataa muunganisho, basi kitu cha JSON kitakuwa na mfuatano tupu kwa `anwani` iliyorudishwa na ujumbe wa `status` unaoonyesha kuwa mtumiaji alikataa muunganisho. + +Sasa kwa kuwa tumeandika kazi hii ya `connectWallet`, hatua inayofuata ni kuiita kwenye kijenzi chetu cha `HelloWorld.js`. + +#### Ongeza kazi ya `connectWallet` kwenye Kijenzi chako cha UI cha `HelloWorld.js` {#add-the-connectWallet-function-to-your-HelloWorld-js-ui-component} + +Nenda kwenye kazi ya `connectWalletPressed` katika `HelloWorld.js`, na uisasishe kuwa ifuatavyo: + +```javascript +// HelloWorld.js + +const connectWalletPressed = async () => { + const walletResponse = await connectWallet() + setStatus(walletResponse.status) + setWallet(walletResponse.address) +} +``` + +Je, unaona jinsi utendaji wetu mwingi umefichwa kutoka kwa kijenzi chetu cha `HelloWorld.js` kutoka kwa faili ya `interact.js`? Hii ni ili tuendane na dhana ya M-V-C! + +Katika `connectWalletPressed`, tunafanya tu wito wa kusubiri kwa kazi yetu iliyoingizwa ya `connectWallet`, na kwa kutumia jibu lake, tunasasisha vigezo vyetu vya `status` na `walletAddress` kupitia ndoana zao za hali. + +Sasa, hebu tuhifadhi faili zote mbili (`HelloWorld.js` na `interact.js`) na tujaribu UI yetu hadi sasa. + +Fungua kivinjari chako kwenye ukurasa wa [http://localhost:3000/](http://localhost:3000/), na ubonyeze kitufe cha "Unganisha Mkoba" juu kulia mwa ukurasa. + +Ikiwa umesakinisha MetaMask, unapaswa kuombwa kuunganisha pochi yako kwenye mfumo wako uliotawanywa. Kubali mwaliko wa kuunganisha. + +Unapaswa kuona kwamba kitufe cha mkoba sasa kinaonyesha kwamba anwani yako imeunganishwa! Yasssss 🔥 + +Kisha, jaribu kuonyesha upya ukurasa... hii ni ajabu. Kitufe chetu cha pochi kinatuomba tuunganishe MetaMask, ingawa tayari imeunganishwa... + +Hata hivyo, usiogope! Tunaweza kushughulikia hilo kwa urahisi (umeipata?) kwa kutekeleza `getCurrentWalletConnected`, ambayo itaangalia ikiwa anwani tayari imeunganishwa na mfumo mtawanyo wa kimamlaka wetu na kusasisha UI yetu ipasavyo! + +#### Kazi ya `getCurrentWalletConnected` {#the-getcurrentwalletconnected-function} + +Sasisha kazi yako ya `getCurrentWalletConnected` katika faili ya `interact.js` kuwa ifuatavyo: + +```javascript +// interact.js + +export const getCurrentWalletConnected = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_accounts", + }) + if (addressArray.length > 0) { + return { + address: addressArray[0], + status: "👆🏽 Andika ujumbe kwenye sehemu ya maandishi hapo juu.", + } + } else { + return { + address: "", + status: "🦊 Unganisha na MetaMask ukitumia kitufe cha juu kulia.", + } + } + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + Lazima usakinishe MetaMask, mkoba halisi wa Ethereum, katika kivinjari chako. + +

+
+ ), + } + } +} +``` + +Msimbo huu _unafanana sana_ na kazi ya `connectWallet` tuliyoandika katika hatua iliyopita. + +Tofauti kuu ni kwamba badala ya kuita mbinu ya `eth_requestAccounts`, ambayo inafungua MetaMask kwa mtumiaji kuunganisha pochi yake, hapa tunaita mbinu ya `eth_accounts`, ambayo inarudisha tu safu iliyo na anwani za MetaMask zilizounganishwa kwa sasa kwenye mfumo wetu uliotawanywa. + +Ili kuona kazi hii ikifanya kazi, hebu tuiite katika kazi yetu ya `useEffect` ya kijenzi chetu cha `HelloWorld.js`: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() + + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) +}, []) +``` + +Kumbuka, tunatumia jibu la wito wetu kwa `getCurrentWalletConnected` kusasisha vigezo vyetu vya hali vya `walletAddress` na `status`. + +Sasa kwa kuwa umeongeza msimbo huu, hebu tujaribu kuonyesha upya dirisha la kivinjari chetu. + +Safi sana! Kitufe kinapaswa kusema kuwa umeunganishwa, na kuonyesha hakikisho la anwani ya pochi yako iliyounganishwa - hata baada ya kuonyesha upya! + +#### Tekeleza `addWalletListener` {#implement-addwalletlistener} + +Hatua ya mwisho katika usanidi wa pochi ya mfumo wetu uliotawanywa ni kutekeleza msikilizaji wa pochi ili UI yetu isasishwe wakati hali ya pochi yetu inabadilika, kama vile mtumiaji anapokatisha muunganisho au kubadilisha akaunti. + +Katika faili yako ya `HelloWorld.js`, badilisha kazi yako ya `addWalletListener` kama ifuatavyo: + +```javascript +// HelloWorld.js + +function addWalletListener() { + if (window.ethereum) { + window.ethereum.on("accountsChanged", (accounts) => { + if (accounts.length > 0) { + setWallet(accounts[0]) + setStatus("👆🏽 Andika ujumbe kwenye sehemu ya maandishi hapo juu.") + } else { + setWallet("") + setStatus("🦊 Unganisha na MetaMask ukitumia kitufe cha juu kulia.") + } + }) + } else { + setStatus( +

+ {" "} + 🦊 + Lazima usakinishe MetaMask, mkoba halisi wa Ethereum, katika kivinjari chako. + +

+ ) + } +} +``` + +Nina hakika hauhitaji hata msaada wetu kuelewa kinachoendelea hapa kwa sasa, lakini kwa madhumuni ya ukamilifu, hebu tuchanganue haraka: + +- Kwanza, kazi yetu inakagua ikiwa `window.ethereum` imewezeshwa (yaani, MetaMask imesakinishwa). + - Ikiwa sivyo, tunaweka tu kigezo chetu cha hali cha `status` kuwa mfuatano wa JSX unaomwomba mtumiaji asakinishe MetaMask. + - Ikiwa imewezeshwa, tunaweka msikilizaji `window.ethereum.on("accountsChanged")` kwenye mstari wa 3 anayesikiliza mabadiliko ya hali katika pochi ya MetaMask, ambayo ni pamoja na wakati mtumiaji anapounganisha akaunti ya ziada kwenye mfumo uliotawanywa, anapobadilisha akaunti, au anapokatisha muunganisho wa akaunti. Ikiwa kuna angalau akaunti moja iliyounganishwa, kigezo cha hali cha `walletAddress` kinasasishwa kama akaunti ya kwanza katika safu ya `accounts` iliyorudishwa na msikilizaji. Vinginevyo, `walletAddress` huwekwa kama mfuatano tupu. + +Mwisho lakini sio uchache, lazima tuiite katika kazi yetu ya `useEffect`: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() + + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) + + addWalletListener() +}, []) +``` + +Na ndivyo hivyo! Tumefanikiwa kukamilisha upangaji wote wa utendaji wetu wa mkoba! Sasa kwenye kazi yetu ya mwisho: kusasisha ujumbe uliohifadhiwa katika mkataba-erevu wetu! + +### Hatua ya 6: Tekeleza kazi ya `updateMessage` {#step-6-implement-the-updateMessage-function} + +Sawa jamani, tumefika mwisho! Katika `updateMessage` ya faili yako ya `interact.js`, tutafanya yafuatayo: + +1. Hakikisha ujumbe tunaotaka kuchapisha katika mkataba wetu mahiri ni halali +2. Saini muamala wetu kwa kutumia MetaMask +3. Ita kazi hii kutoka kwa kijenzi chetu cha mbele cha `HelloWorld.js` + +Hii haitachukua muda mrefu; hebu tumalize mfumo mtawanyo wa kimamlaka huu! + +#### Ushughulikiaji wa hitilafu ya ingizo {#input-error-handling} + +Kwa kawaida, inaleta maana kuwa na aina fulani ya utunzaji wa makosa ya ingizo mwanzoni mwa kazi. + +Tutataka kazi yetu irudi mapema ikiwa hakuna kiendelezi cha MetaMask kilichosakinishwa, hakuna mkoba uliounganishwa (yaani, `anwani` iliyopitishwa ni mfuatano tupu), au `ujumbe` ni mfuatano tupu. Hebu tuongeze utunzaji wa makosa ufuatao kwenye `updateMessage`: + +```javascript +// interact.js + +export const updateMessage = async (address, message) => { + if (!window.ethereum || address === null) { + return { + status: + "💡 Unganisha mkoba wako wa MetaMask ili kusasisha ujumbe kwenye mnyororo wa bloku.", + } + } + + if (message.trim() === "") { + return { + status: "❌ Ujumbe wako hauwezi kuwa mfuatano tupu.", + } + } +} +``` + +Sasa kwa kuwa ina utunzaji sahihi wa makosa ya ingizo, ni wakati wa kusaini muamala kupitia MetaMask! + +#### Kusaini muamala wetu {#signing-our-transaction} + +Ikiwa tayari una uzoefu na miamala ya jadi ya web3 Ethereum, msimbo tutakaouandika baadaye utakuwa unafahamika sana. Chini ya msimbo wako wa kushughulikia makosa ya ingizo, ongeza yafuatayo kwenye `updateMessage`: + +```javascript +// interact.js + +//weka vigezo vya muamala +const transactionParameters = { + to: contractAddress, // Inahitajika isipokuwa wakati wa uchapishaji wa mkataba. + from: address, // lazima ifanane na anwani inayotumika ya mtumiaji. + data: helloWorldContract.methods.update(message).encodeABI(), +} + +//saini muamala +try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + status: ( + + ✅{" "} + + Tazama hali ya muamala wako kwenye Etherscan! + +
+ ℹ️ Mara tu muamala utakapothibitishwa na mtandao, ujumbe utasasishwa kiotomatiki. +
+ ), + } +} catch (error) { + return { + status: "😥 " + error.message, + } +} +``` + +Hebu tuchanganue kinachoendelea. Kwanza, tunaweka vigezo vyetu vya miamala, ambapo: + +- `to` inabainisha anwani ya mpokeaji (mkataba wetu erevu) +- `kutoka` inabainisha mtia saini wa muamala, kigezo cha `anwani` tulichopitisha kwenye kazi yetu +- `data` ina wito kwa mbinu ya `update` ya mkataba-erevu wetu wa Hello World, ikipokea kigezo chetu cha mfuatano wa `ujumbe` kama ingizo + +Kisha, tunafanya mwito wa kusubiri, `window.ethereum.request`, ambapo tunaiomba MetaMask kusaini muamala. Angalia, kwenye mistari 11 na 12, tunabainisha mbinu yetu ya eth, `eth_sendTransaction` na kupitisha `transactionParameters` zetu. + +Katika hatua hii, MetaMask itafunguka kwenye kivinjari, na kumwomba mtumiaji asaini au kukataa muamala. + +- Ikiwa muamala utafanikiwa, kazi itarudisha kitu cha JSON ambapo mfuatano wa `hali` wa JSX unamshawishi mtumiaji kuangalia Etherscan kwa taarifa zaidi kuhusu muamala wake. +- Ikiwa muamala utashindwa, kazi itarudisha kitu cha JSON ambapo mfuatano wa `hali` unapeleka ujumbe wa kosa. + +Kwa ujumla, kazi yetu ya `updateMessage` inapaswa kuonekana hivi: + +```javascript +// interact.js + +export const updateMessage = async (address, message) => { + //ushughulikiaji wa makosa ya ingizo + if (!window.ethereum || address === null) { + return { + status: + "💡 Unganisha mkoba wako wa MetaMask ili kusasisha ujumbe kwenye mnyororo wa bloku.", + } + } + + if (message.trim() === "") { + return { + status: "❌ Ujumbe wako hauwezi kuwa mfuatano tupu.", + } + } + + //weka vigezo vya muamala + const transactionParameters = { + to: contractAddress, // Inahitajika isipokuwa wakati wa uchapishaji wa mkataba. + from: address, // lazima ifanane na anwani inayotumika ya mtumiaji. + data: helloWorldContract.methods.update(message).encodeABI(), + } + + //saini muamala + try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + status: ( + + ✅{" "} + + Tazama hali ya muamala wako kwenye Etherscan! + +
+ ℹ️ Mara tu muamala utakapothibitishwa na mtandao, ujumbe utasasishwa kiotomatiki. +
+ ), + } + } catch (error) { + return { + status: "😥 " + error.message, + } + } +} +``` + +Mwisho lakini sio uchache, tunahitaji kuunganisha kazi yetu ya `updateMessage` na kijenzi chetu cha `HelloWorld.js`. + +#### Unganisha `updateMessage` na sehemu ya mbele ya `HelloWorld.js` {#connect-updatemessage-to-the-helloworld-js-frontend} + +Kazi yetu ya `onUpdatePressed` inapaswa kufanya mwito wa kusubiri kwa kazi iliyoingizwa ya `updateMessage` na kubadilisha kigezo cha hali cha `hali` ili kuonyesha ikiwa muamala wetu ulifanikiwa au ulishindwa: + +```javascript +// HelloWorld.js + +const onUpdatePressed = async () => { + const { status } = await updateMessage(walletAddress, newMessage) + setStatus(status) +} +``` + +Ni safi sana na rahisi. Na nadhani nini... MFUMO MTAWANYO WA KIMAMLAKA WAKO UMEKAMILIKA!!! + +Endelea na ujaribu kitufe cha **Sasisha**! + +### Tengeneza mfumo mtawanyo wa kimamlaka wako mwenyewe {#make-your-own-custom-dapp} + +Wooooo, umefika mwisho wa mafunzo! Kwa muhtasari, umejifunza jinsi ya: + +- Unganisha mkoba wa MetaMask na mradi wako wa mfumo mtawanyo wa kimamlaka +- Soma data kutoka kwa mkataba-erevu wako kwa kutumia API ya [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) +- Saini miamala ya Ethereum kwa kutumia MetaMask + +Sasa una vifaa kamili vya kutumia ujuzi kutoka kwa mafunzo haya ili kujenga mradi wako mwenyewe wa mfumo mtawanyo wa kimamlaka! Kama kawaida, ikiwa una maswali yoyote, usisite kuwasiliana nasi kwa msaada katika [Alchemy Discord](https://discord.gg/gWuC7zB). 🧙‍♂️ + +Baada ya kukamilisha mafunzo haya, tujulishe jinsi uzoefu wako ulivyokuwa au ikiwa una maoni yoyote kwa kututagi kwenye Twitter [@alchemyplatform](https://twitter.com/AlchemyPlatform)! diff --git a/public/content/translations/sw/developers/tutorials/hello-world-smart-contract/index.md b/public/content/translations/sw/developers/tutorials/hello-world-smart-contract/index.md new file mode 100644 index 00000000000..b7d85e58568 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/hello-world-smart-contract/index.md @@ -0,0 +1,367 @@ +--- +title: Mkataba-erevu wa Hello World kwa Wanaoanza +description: Mafunzo ya utangulizi kuhusu kuandika na kusambaza mkataba-erevu rahisi kwenye Ethereum. +author: "elanh" +tags: + [ + "uimara", + "hardhat", + "alchemy", + "mikataba erevu", + "upelekaji" + ] +skill: beginner +lang: sw +published: 2021-03-31 +--- + +Ikiwa wewe ni mgeni katika usanidi wa mnyororo wa bloku na hujui pa kuanzia, au ikiwa unataka tu kuelewa jinsi ya kusambaza na kuingiliana na mikataba-erevu, mwongozo huu ni kwa ajili yako. Tutapitia hatua za kuunda na kusambaza mkataba-erevu rahisi kwenye testnet ya Sepolia kwa kutumia pochi pepe [MetaMask](https://metamask.io/), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/), na [Alchemy](https://www.alchemy.com/eth) (usijali kama huelewi maana ya yoyote kati ya haya bado, tutaelezea). + +Katika [sehemu ya 2](https://docs.alchemy.com/docs/interacting-with-a-smart-contract) ya mafunzo haya tutapitia jinsi tunavyoweza kuingiliana na mkataba wetu-erevu mara tu utakapokuwa umesambazwa, na katika [sehemu ya 3](https://www.alchemy.com/docs/submitting-your-smart-contract-to-etherscan) tutaangazia jinsi ya kuuchapisha kwenye Etherscan. + +Ikiwa una maswali wakati wowote jisikie huru kuuliza kwenye [Alchemy Discord](https://discord.gg/gWuC7zB)! + +## Hatua ya 1: Unganisha na mtandao wa Ethereum {#step-1} + +Kuna njia nyingi za kufanya maombi kwa mnyororo wa Ethereum. Ili kurahisisha, tutatumia akaunti ya bure kwenye Alchemy, jukwaa la wasanidi programu wa mnyororo wa bloku na API ambayo inaturuhusu kuwasiliana na mnyororo wa Ethereum bila kulazimika kuendesha nodi zetu wenyewe. Jukwaa hilo pia lina zana za wasanidi programu kwa ajili ya ufuatiliaji na uchambuzi ambazo tutazitumia katika mafunzo haya ili kuelewa kinachoendelea nyuma ya pazia katika usambazaji wa mkataba-erevu wetu. Ikiwa bado huna akaunti ya Alchemy, [unaweza kujisajili bure hapa](https://dashboard.alchemy.com/signup). + +## Hatua ya 2: Unda programu yako (na ufunguo wa API) {#step-2} + +Mara tu unapounda akaunti ya Alchemy, unaweza kutengeneza ufunguo wa API kwa kuunda programu. Hii itaturuhusu kufanya maombi kwa mtandao wa majaribio wa Sepolia. Ikiwa hufahamu testnets, angalia [ukurasa huu](/developers/docs/networks/). + +1. Nenda kwenye ukurasa wa "Unda programu mpya" katika Dashibodi yako ya Alchemy kwa kuchagua "Chagua programu" kwenye upau wa uelekezaji na kubofya "Unda programu mpya" + +![Programu ya uundaji wa Hello world](./hello-world-create-app.png) + +2. Ipe programu yako jina “Hello World”, toa maelezo mafupi, na uchague kisa cha matumizi, k.m., "Miundombinu na Zana." Ifuatayo, tafuta "Ethereum" na uchague mtandao. + +![mwonekano wa programu ya kuunda hello world](./create-app-view-hello-world.png) + +3. Bofya "Inayofuata" ili kuendelea, kisha “Unda programu” na ndivyo hivyo! Programu yako inapaswa kuonekana kwenye menyu kunjuzi ya upau wa uelekezaji, na Ufunguo wa API ukiwa tayari kunakiliwa. + +## Hatua ya 3: Fungua akaunti ya Ethereum (anwani) {#step-3} + +Tunahitaji akaunti ya Ethereum ili kutuma na kupokea miamala. Kwa mafunzo haya, tutatumia MetaMask, mkoba wa mtandaoni katika kivinjari unaotumika kudhibiti anwani ya akaunti yako ya Ethereum. Zaidi kuhusu [miamala](/developers/docs/transactions/). + +Unaweza kupakua MetaMask na kufungua akaunti ya Ethereum bure [hapa](https://metamask.io/download). Unapofungua akaunti, au ikiwa tayari unayo akaunti, hakikisha umebadilisha kwenda kwenye testnet ya "Sepolia" kwa kutumia menyu kunjuzi ya mtandao (ili tusitumie pesa halisi). + +Ikiwa huoni Sepolia ikiwa imeorodheshwa, nenda kwenye menyu, kisha kwenye Kina na usogeze chini ili kuwasha "Onyesha testnets". Katika menyu ya uteuzi wa mtandao, chagua kichupo cha "Maalum" ili kupata orodha ya testnets na uchague "Sepolia." + +![mfano wa metamask sepolia](./metamask-sepolia-example.png) + +## Hatua ya 4: Ongeza ether kutoka kwenye bomba {#step-4} + +Ili kusambaza mkataba-erevu wetu kwenye testnet, tutahitaji ETH bandia. Ili kupata ETH ya Sepolia unaweza kwenda kwenye [maelezo ya mtandao wa Sepolia](/developers/docs/networks/#sepolia) ili kuona orodha ya mabomba mbalimbali. Ikiwa moja haifanyi kazi, jaribu nyingine kwani wakati mwingine zinaweza kuishiwa. Inaweza kuchukua muda kupokea ETH yako bandia kutokana na msongamano wa mtandao. Unapaswa kuona ETH katika akaunti yako ya Metamask muda mfupi baadaye! + +## Hatua ya 5: Angalia Salio lako {#step-5} + +Ili kuhakikisha mara mbili kuwa salio letu lipo, hebu tufanye ombi la [eth_getBalance](/developers/docs/apis/json-rpc/#eth_getbalance) kwa kutumia [zana ya mtunzi ya Alchemy](https://sandbox.alchemy.com/?network=ETH_SEPOLIA&method=eth_getBalance&body.id=1&body.jsonrpc=2.0&body.method=eth_getBalance&body.params%5B0%5D=&body.params%5B1%5D=latest). Hii itarudisha kiasi cha ETH katika mkoba wetu. Baada ya kuweka anwani ya akaunti yako ya MetaMask na kubofya “Tuma Ombi”, unapaswa kuona jibu kama hili: + +```json +{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" } +``` + +> **KUMBUKA:** Matokeo haya ni katika wei si ETH. Wei hutumika kama denomina ndogo zaidi ya ether. Ubadilishaji kutoka wei kwenda ETH ni: 1 eth = 1018 wei. Kwa hiyo tukibadilisha 0x2B5E3AF16B1880000 kwenda desimali tunapata 5\*10¹⁸ ambayo ni sawa na ETH 5. +> +> Phew! Pesa zetu bandia zote zipo . + +## Hatua ya 6: Anzisha mradi wetu {#step-6} + +Kwanza, tutahitaji kuunda folda kwa ajili ya mradi wetu. Nenda kwenye mstari wako wa amri na uandike: + +``` +mkdir hello-world +cd hello-world +``` + +Sasa kwa kuwa tuko ndani ya folda ya mradi wetu, tutatumia `npm init` kuanzisha mradi. Ikiwa bado hujasakinisha npm, fuata [maelekezo haya](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) (tutahitaji pia Node.js kwa hivyo pakua hiyo pia!). + +``` +npm init +``` + +Haijalishi sana jinsi unavyojibu maswali ya usakinishaji, hivi ndivyo tulivyofanya kwa marejeleo: + +``` +jina la kifurushi: (hello-world) +toleo: (1.0.0) +maelezo: mkataba-erevu wa hello world +sehemu ya kuingilia: (index.js) +amri ya jaribio: +hazina ya git: +maneno muhimu: +mwandishi: +leseni: (ISC) +Karibu kuandika kwenye /Users/.../.../.../hello-world/package.json: + +{ + "name": "hello-world", + "version": "1.0.0", + "description": "mkataba-erevu wa hello world", + "main": "index.js", + "scripts": { + "test": "echo \\"Error: no test specified\\" && exit 1" + }, + "author": "", + "license": "ISC" +} +``` + +Thibitisha package.json na tuko tayari kwenda! + +## Hatua ya 7: Pakua [Hardhat](https://hardhat.org/getting-started/#overview) {#step-7} + +Hardhat ni mazingira ya usanidi wa kuandaa, kupeleka, kupima, na kutatua programu yako ya Ethereum. Inasaidia wasanidi programu wanapojenga mikataba-erevu na dApps ndani ya nchi kabla ya kupeleka kwenye mnyororo hai. + +Ndani ya mradi wetu wa `hello-world` endesha: + +``` +npm install --save-dev hardhat +``` + +Angalia ukurasa huu kwa maelezo zaidi kuhusu [maagizo ya usakinishaji](https://hardhat.org/getting-started/#overview). + +## Hatua ya 8: Unda mradi wa Hardhat {#step-8} + +Ndani ya folda yetu ya mradi, endesha: + +``` +npx hardhat +``` + +Unapaswa kisha kuona ujumbe wa kukaribisha na chaguo la kuchagua unachotaka kufanya. Chagua “unda hardhat.config.js tupu”: + +``` +888 888 888 888 888 +888 888 888 888 888 +888 888 888 888 888 +8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 +888 888 "88b 888P" d88" 888 888 "88b "88b 888 +888 888 .d888888 888 888 888 888 888 .d888888 888 +888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. +888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 + +👷 Karibu kwenye Hardhat v2.0.11 👷‍? + +Unataka kufanya nini? … +Unda mradi wa mfano +❯ Unda hardhat.config.js tupu +Acha +``` + +Hii itatutengenezea faili la `hardhat.config.js` ambapo tutaainisha usanidi wote wa mradi wetu (katika hatua ya 13). + +## Hatua ya 9: Ongeza folda za mradi {#step-9} + +Ili kuweka mradi wetu ukiwa umepangwa tutaunda folda mbili mpya. Nenda kwenye saraka ya mizizi ya mradi wako katika mstari wako wa amri na uandike: + +``` +mkdir contracts +mkdir scripts +``` + +- `contracts/` ni mahali ambapo tutaweka faili la msimbo wa mkataba-erevu wetu wa hello world +- `scripts/` ni mahali ambapo tutaweka hati za kusambaza na kuingiliana na mkataba wetu + +## Hatua ya 10: Andika mkataba wetu {#step-10} + +Huenda unajiuliza, ni lini hasa tutaandika msimbo?? Naam, tumefika, hatua ya 10. + +Fungua mradi wa hello-world katika kihariri chako unachopenda (tunapenda [VSCode](https://code.visualstudio.com/)). Mikataba-erevu huandikwa kwa lugha iitwayo Solidity ambayo ndiyo tutakayotumia kuandika mkataba-erevu wetu wa HelloWorld.sol.‌ + +1. Nenda kwenye folda ya “contracts” na uunde faili mpya liitwalo HelloWorld.sol +2. Hapo chini kuna sampuli ya mkataba-erevu wa Hello World kutoka Msingi wa Ethereum ambao tutautumia kwa ajili ya mafunzo haya. Nakili na ubandike yaliyomo hapa chini kwenye faili lako la HelloWorld.sol, na uhakikishe unasoma maoni ili kuelewa mkataba huu unafanya nini: + +```solidity +// Hubainisha toleo la Solidity, kwa kutumia matoleo ya kimantiki. +// Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity ^0.7.0; + +// Hubainisha mkataba unaoitwa `HelloWorld`. +// Mkataba ni mkusanyiko wa vitendaji na data (hali yake). Mara tu unaposambazwa, mkataba hukaa kwenye anwani maalum kwenye mnyororo wa bloku wa Ethereum. Jifunze zaidi: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + // Hutangaza kigezo cha hali `message` cha aina ya `string`. + // Vigezo vya hali ni vigezo ambavyo thamani zake huhifadhiwa kabisa kwenye hifadhi ya mkataba. Neno kuu `public` hufanya vigezo viweze kufikiwa kutoka nje ya mkataba na huunda kitendaji ambacho mikataba mingine au wateja wanaweza kuita ili kufikia thamani. + string public message; + + // Sawa na lugha nyingi za upangaji programu zinazozingatia matabaka na vitu, kiunda ni kitendaji maalum ambacho hutekelezwa tu wakati wa uundaji wa mkataba. + // Viunda hutumika kuanzisha data ya mkataba. Jifunze zaidi:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) { + + // Hukubali hoja ya string `initMessage` na kuweka thamani kwenye kigezo cha hifadhi cha `message` cha mkataba). + message = initMessage; + } + + // Kitendaji cha umma kinachokubali hoja ya string na kusasisha kigezo cha hifadhi cha `message`. + function update(string memory newMessage) public { + message = newMessage; + } +} +``` + +Huu ni mkataba-erevu rahisi sana ambao huhifadhi ujumbe wakati wa uundaji na unaweza kusasishwa kwa kuita kitendaji cha `update`. + +## Hatua ya 11: Unganisha MetaMask na Alchemy kwenye mradi wako {#step-11} + +Tumeunda pochi ya MetaMask, akaunti ya Alchemy, na kuandika mkataba-erevu wetu, sasa ni wakati wa kuunganisha vitu hivi vitatu. + +Kila muamala unaotumwa kutoka kwa mkoba wako wa mtandaoni unahitaji sahihi kwa kutumia ufunguo wako binafsi wa kipekee. Ili kuipa programu yetu ruhusa hii, tunaweza kuhifadhi kwa usalama ufunguo wetu binafsi (na ufunguo wa API wa Alchemy) katika faili ya mazingira. + +> Ili kujifunza zaidi kuhusu kutuma miamala, angalia [mafunzo haya](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) kuhusu kutuma miamala kwa kutumia web3. + +Kwanza, sakinisha kifurushi cha dotenv katika saraka ya mradi wako: + +``` +npm install dotenv --save +``` + +Kisha, unda faili ya `.env` katika saraka ya mizizi ya mradi wetu, na uongeze ufunguo wako binafsi wa MetaMask na URL ya HTTP ya API ya Alchemy. + +- Fuata [maelekezo haya](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/) ili kuhamisha ufunguo wako binafsi +- Angalia hapa chini ili kupata URL ya API ya HTTP ya Alchemy + +![pata ufunguo wa api wa alchemy](./get-alchemy-api-key.png) + +Nakili URL ya API ya Alchemy + +Faili lako la `.env` linapaswa kuonekana hivi: + +``` +API_URL = "https://eth-sepolia.g.alchemy.com/v2/ufunguo-wako-wa-api" +PRIVATE_KEY = "ufunguo-wako-binafsi-wa-metamask" +``` + +Ili kuunganisha hivi kwenye msimbo wetu, tutarejelea vigezo hivi katika faili letu la `hardhat.config.js` kwenye hatua ya 13. + + + + +Usitume .env! Tafadhali hakikisha kamwe hushiriki au kufichua faili yako ya .env na mtu yeyote, kwani unahatarisha siri zako kwa kufanya hivyo. Ikiwa unatumia udhibiti wa toleo, ongeza .env yako kwenye faili ya gitignore. + + + + +## Hatua ya 12: Sakinisha Ethers.js {#step-12-install-ethersjs} + +Ethers.js ni maktaba inayorahisisha kuingiliana na kufanya maombi kwa Ethereum kwa kufunika [mbinu za kawaida za JSON-RPC](/developers/docs/apis/json-rpc/) kwa mbinu ambazo ni rahisi zaidi kwa mtumiaji. + +Hardhat hurahisisha sana kuunganisha [Plugins](https://hardhat.org/plugins/) kwa zana za ziada na utendakazi uliopanuliwa. Tutatumia fursa ya [programu-jalizi ya Ethers](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) kwa usambazaji wa mkataba ([Ethers.js](https://github.com/ethers-io/ethers.js/) ina mbinu safi sana za usambazaji wa mkataba). + +Katika saraka yako ya mradi, andika: + +``` +npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0" +``` + +Pia tutahitaji ethers katika `hardhat.config.js` yetu katika hatua inayofuata. + +## Hatua ya 13: Sasisha hardhat.config.js {#step-13-update-hardhatconfigjs} + +Tumeongeza vitegemezi na programu-jalizi kadhaa hadi sasa, sasa tunahitaji kusasisha `hardhat.config.js` ili mradi wetu uvifahamu vyote. + +Sasisha `hardhat.config.js` yako ili ionekane hivi: + +``` +require('dotenv').config(); + +require("@nomiclabs/hardhat-ethers"); +const { API_URL, PRIVATE_KEY } = process.env; + +/** +* @type import('hardhat/config').HardhatUserConfig +*/ +module.exports = { + solidity: "0.7.3", + defaultNetwork: "sepolia", + networks: { + hardhat: {}, + sepolia: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`] + } + }, +} +``` + +## Hatua ya 14: Kusanya mkataba wetu {#step-14-compile-our-contracts} + +Ili kuhakikisha kila kitu kinafanya kazi hadi sasa, hebu tuandae mkataba wetu. Jukumu la `compile` ni mojawapo ya majukumu yaliyojengewa ndani ya hardhat. + +Kutoka kwenye mstari wa amri, endesha: + +``` +npx hardhat compile +``` + +Unaweza kupata onyo kuhusu `kitambulisho cha leseni ya SPDX hakijatolewa kwenye faili chanzo`, lakini hakuna haja ya kuwa na wasiwasi kuhusu hilo — tunatumai kila kitu kingine kinaonekana vizuri! Ikiwa sivyo, unaweza kutuma ujumbe kila wakati katika [discord ya Alchemy](https://discord.gg/u72VCg3). + +## Hatua ya 15: Andika hati yetu ya usambazaji {#step-15-write-our-deploy-scripts} + +Sasa kwa kuwa mkataba wetu umeandikwa na faili yetu ya usanidi iko tayari, ni wakati wa kuandika hati ya kupeleka mkataba wetu. + +Nenda kwenye folda ya `scripts/` na uunde faili jipya liitwalo `deploy.js`, na uongeze yaliyomo yafuatayo ndani yake: + +``` +async function main() { + const HelloWorld = await ethers.getContractFactory("HelloWorld"); + + // Anza usambazaji, ukirejesha ahadi inayotatuliwa kuwa kitu cha mkataba + const hello_world = await HelloWorld.deploy("Hello World!"); + console.log("Mkataba umesambazwa kwa anwani:", hello_world.address);} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); +``` + +Hardhat hufanya kazi nzuri ya kuelezea kile kila mstari wa msimbo huu unafanya katika [mafunzo yao ya Mikataba](https://hardhat.org/tutorial/testing-contracts.html#writing-tests), tumechukua maelezo yao hapa. + +``` +const HelloWorld = await ethers.getContractFactory("HelloWorld"); +``` + +`ContractFactory` katika ethers.js ni dhana inayotumika kusambaza mikataba-erevu mipya, kwa hivyo `HelloWorld` hapa ni kiwanda cha vielelezo vya mkataba wetu wa hello world. Unapotumia programu-jalizi ya `hardhat-ethers`, vielelezo vya `ContractFactory` na `Contract` huunganishwa kwa mtia saini wa kwanza kwa chaguo-msingi. + +``` +const hello_world = await HelloWorld.deploy(); +``` + +Kuita `deploy()` kwenye `ContractFactory` kutaanzisha usambazaji, na kurudisha `Promise` inayotatuliwa kuwa `Contract`. Hiki ndicho kitu ambacho kina mbinu kwa kila moja ya kazi zetu za mkataba-erevu. + +## Hatua ya 16: Sambaza mkataba wetu {#step-16-deploy-our-contract} + +Hatimaye tuko tayari kupeleka mkataba-erevu wetu! Nenda kwenye mstari wa amri na uendeshe: + +``` +npx hardhat run scripts/deploy.js --network sepolia +``` + +Unapaswa kisha kuona kitu kama: + +``` +Mkataba umesambazwa kwa anwani: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 +``` + +Tukienda kwenye [Etherscan ya Sepolia](https://sepolia.etherscan.io/) na tutafute anwani ya mkataba wetu tunapaswa kuona kuwa umesambazwa kwa mafanikio. Muamala utaonekana kitu kama hiki: + +![mkataba wa etherscan](./etherscan-contract.png) + +Anwani ya `From` inapaswa kulingana na anwani ya akaunti yako ya MetaMask na anwani ya `To` itasema “Uundaji wa Mkataba” lakini tukibofya kwenye muamala tutaona anwani ya mkataba wetu katika sehemu ya `To`: + +![muamala wa etherscan](./etherscan-transaction.png) + +Hongera! Umesambaza mkataba-erevu kwenye mnyororo wa Ethereum 🎉 + +Ili kuelewa kinachoendelea chinichini, hebu tuende kwenye kichupo cha Mvumbuzi katika [dashibodi yetu ya Alchemy](https://dashboard.alchemyapi.io/explorer). Ikiwa una programu nyingi za Alchemy hakikisha unachuja kwa programu na uchague “Hello World”. +![kivinjari cha hello world](./hello-world-explorer.png) + +Hapa utaona miito michache ya JSON-RPC ambayo Hardhat/Ethers ilitufanyia nyuma ya pazia tulipoiita kitendaji cha `.deploy()`. Miito miwili muhimu ya kutaja hapa ni [`eth_sendRawTransaction`](https://www.alchemy.com/docs/node/abstract/abstract-api-endpoints/eth-send-raw-transaction), ambalo ni ombi la kuandika mkataba wetu kwenye mnyororo wa Sepolia, na [`eth_getTransactionByHash`](https://www.alchemy.com/docs/node/abstract/abstract-api-endpoints/eth-get-transaction-by-hash) ambalo ni ombi la kusoma taarifa kuhusu muamala wetu kutokana na hashi (muundo wa kawaida wakati wa +miamala). Ili kujifunza zaidi kuhusu kutuma miamala, angalia mafunzo haya kuhusu [kutuma miamala kwa kutumia Web3](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) + +Hayo ni yote kwa sehemu ya 1 ya mafunzo haya, katika sehemu ya 2 [tutaingiliana na mkataba-erevu wetu](https://www.alchemy.com/docs/interacting-with-a-smart-contract) kwa kusasisha ujumbe wetu wa awali, na katika sehemu ya 3 [tutachapisha mkataba-erevu wetu kwenye Etherscan](https://www.alchemy.com/docs/submitting-your-smart-contract-to-etherscan) ili kila mtu ajue jinsi ya kuingiliana nao. + +**Unataka kujifunza zaidi kuhusu Alchemy?** Angalia [tovuti](https://www.alchemy.com/eth) yetu. Hutaki kamwe kukosa sasisho? Jisajili kwa jarida letu [hapa](https://www.alchemy.com/newsletter)! Hakikisha pia unajiunga na [Discord](https://discord.gg/u72VCg3) yetu.\*\*. diff --git a/public/content/translations/sw/developers/tutorials/how-to-implement-an-erc721-market/index.md b/public/content/translations/sw/developers/tutorials/how-to-implement-an-erc721-market/index.md new file mode 100644 index 00000000000..f28a1900e7e --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-implement-an-erc721-market/index.md @@ -0,0 +1,145 @@ +--- +title: Jinsi ya kutekeleza soko la ERC-721 +description: Jinsi ya kuweka vitu vilivyowekwa kwenye tokeni kwa ajili ya kuuza kwenye ubao wa matangazo uliogatuliwa +author: "Alberto Cuesta Cañada" +tags: [ "mikataba erevu", "erc-721", "uimara", "tokeni" ] +skill: intermediate +lang: sw +published: 2020-03-19 +source: Hackernoon +sourceUrl: https://hackernoon.com/how-to-implement-an-erc721-market-1e1a32j9 +--- + +Katika makala hii, nitakuonyesha jinsi ya kutengeneza msimbo wa Craigslist kwa ajili ya mnyororo wa bloku wa Ethereum. + +Kabla ya Gumtree, Ebay na Craigslist, bao za matangazo zilitengenezwa zaidi kwa gome la mwaloni au karatasi. Kulikuwa na bao za matangazo kwenye korido za shule, magazeti, taa za barabarani, na sehemu za mbele za maduka. + +Yote hayo yalibadilika kwa ujio wa intaneti. Idadi ya watu walioweza kuona ubao maalum wa matangazo iliongezeka kwa viwango vingi sana. Kwa hayo, masoko wanayoyawakilisha yalikuwa na ufanisi zaidi na kupanuka hadi kufikia ukubwa wa kimataifa. Ebay ni biashara kubwa ambayo chimbuko lake ni kwenye hizi bao za matangazo halisi. + +Kupitia mnyororo wa bloku, masoko haya yako tayari kubadilika kwa mara nyingine, acha nikuonyeshe jinsi gani. + +## Uchumaji wa mapato {#monetization} + +Mfumo wa biashara wa ubao wa matangazo wa umma wa mnyororo wa bloku utahitaji kuwa tofauti na ule wa Ebay na kampuni nyinginezo. + +Kwanza, kuna [mtazamo wa ugatuzi](/developers/docs/web2-vs-web3/). Mifumo iliyopo inahitaji kudumisha seva zao wenyewe. Mfumo uliogatuliwa unadumishwa na watumiaji wake, hivyo gharama za kuendesha mfumo mkuu hushuka hadi sifuri kwa mmiliki wa mfumo. + +Halafu kuna sehemu ya mbele, tovuti au kiolesura kinachotoa ufikiaji kwenye mfumo. Hapa kuna chaguzi nyingi. Wamiliki wa mfumo wanaweza kuzuia ufikiaji na kulazimisha kila mtu atumie kiolesura chao, kwa kutoza ada. Wamiliki wa mfumo wanaweza pia kuamua kufungua ufikiaji (Nguvu kwa Watu!) na kumruhusu yeyote ajenge violesura vya kuingilia mfumo. Au wamiliki wanaweza kuamua njia yoyote iliyo katikati ya pande hizo mbili. + +_Viongozi wa biashara wenye maono zaidi kuliko mimi watajua jinsi ya kuchuma mapato kutokana na hili. Ninachokiona ni kwamba hii ni tofauti na hali ilivyo na pengine ina faida._ + +Zaidi ya hayo, kuna mtazamo wa otomatiki na malipo. Baadhi ya vitu vinaweza [kuwekwa kwenye tokeni kwa ufanisi mkubwa](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com) na kuuzwa kwenye ubao wa matangazo. Mali zilizowekwa kwenye tokeni huhamishwa kwa urahisi katika mnyororo wa bloku. Njia tata sana za malipo zinaweza kutekelezwa kwa urahisi katika mnyororo wa bloku. + +Nahisi kuna fursa ya biashara hapa. Ubao wa matangazo usio na gharama za uendeshaji unaweza kutekelezwa kwa urahisi, ukiwa na njia tata za malipo zilizojumuishwa katika kila muamala. Nina hakika mtu atakuja na wazo la jinsi ya kutumia hii. + +Ninafurahi tu kuijenga. Hebu tuangalie msimbo. + +## Utekelezaji {#implementation} + +Muda fulani uliopita tulianzisha [hazina ya chanzo huria](https://github.com/HQ20/contracts?ref=hackernoon.com) yenye mifano ya utekelezaji wa kesi za biashara na vitu vingine vizuri, tafadhali angalia. + +Msimbo wa [Ubao huu wa Matangazo wa Ethereum](https://github.com/HQ20/contracts/tree/master/contracts/classifieds?ref=hackernoon.com) upo hapo, tafadhali utumie upendavyo. Fahamu tu kwamba msimbo haujakaguliwa na unahitaji kufanya uchunguzi wako mwenyewe kabla ya kuweka pesa ndani yake. + +Misingi ya ubao si tata. Matangazo yote kwenye ubao yatakuwa tu muundo wenye sehemu chache: + +```solidity +struct Trade { + address poster; + uint256 item; + uint256 price; + bytes32 status; // Imefunguliwa, Imetekelezwa, Imeghairiwa +} +``` + +Kwa hiyo kuna mtu anayetangaza tangazo. Kitu cha kuuza. Bei ya kitu. Hali ya biashara ambayo inaweza kuwa imefunguliwa, imetekelezwa au imeghairiwa. + +Biashara hizi zote zitawekwa kwenye 'mapping'. Kwa sababu kila kitu katika Solidity kinaonekana kuwa 'mapping'. Pia kwa sababu ni rahisi. + +```solidity +mapping(uint256 => Trade) public trades; +``` + +Kutumia 'mapping' kunamaanisha tu kwamba lazima tupate kitambulisho kwa kila tangazo kabla ya kulichapisha, na tutahitaji kujua kitambulisho cha tangazo kabla hatujaweza kulifanyia kazi. Kuna njia nyingi za kushughulikia hili ama kwenye mkataba-erevu au kwenye sehemu ya mbele. Tafadhali uliza ikiwa unahitaji vidokezo. + +Kisha inakuja swali la vitu gani tunavyoshughulika navyo, na ni sarafu gani inayotumika kulipia muamala. + +Kwa upande wa vitu, tutaomba tu vitekeleze kiolesura cha [ERC-721](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol?ref=hackernoon.com), ambayo kwa kweli ni njia tu ya kuwakilisha vitu vya ulimwengu halisi katika mnyororo wa bloku, ingawa [inafanya kazi vizuri zaidi na mali za kidijitali](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com). Tutaainisha mkataba wetu wa ERC721 katika 'constructor', ikimaanisha kuwa mali zozote kwenye ubao wetu wa matangazo zinahitaji kuwa zimewekwa kwenye tokeni kabla. + +Kwa upande wa malipo, tutafanya kitu kinachofanana. Miradi mingi ya mnyororo wa bloku hufafanua sarafu yao ya kidigitali ya [ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol?ref=hackernoon.com). Wengine wanapendelea kutumia iliyo maarufu kama DAI. Katika ubao huu wa matangazo, unahitaji tu kuamua wakati wa kuunda sarafu yako itakuwa ipi. Rahisi. + +```solidity +constructor ( + address _currencyTokenAddress, address _itemTokenAddress +) public { + currencyToken = IERC20(_currencyTokenAddress); + itemToken = IERC721(_itemTokenAddress); + tradeCounter = 0; +} +``` + +Tunakaribia kufika. Tuna matangazo, vitu vya kubadilishana na sarafu ya malipo. Kutengeneza tangazo kunamaanisha kuweka kitu katika escrow ili kuonyesha kuwa unacho na kwamba haujakichapisha mara mbili, labda katika ubao tofauti. + +Msimbo ufuatao unafanya hivyo hasa. Unaweka kitu kwenye escrow, unatengeneza tangazo, unafanya usimamizi fulani. + +```solidity +function openTrade(uint256 _item, uint256 _price) + public +{ + itemToken.transferFrom(msg.sender, address(this), _item); + trades[tradeCounter] = Trade({ + poster: msg.sender, + item: _item, + price: _price, + status: "Open" + }); + tradeCounter += 1; + emit TradeStatusChange(tradeCounter - 1, "Open"); +} +``` + +Kukubali biashara kunamaanisha kuchagua tangazo (biashara), kulipa bei, na kupokea kitu. Msimbo ufuatao unapata biashara. Unakagua kama inapatikana. Unalipia kitu. Unapata kitu. Unasasisha tangazo. + +```solidity +function executeTrade(uint256 _trade) + public +{ + Trade memory trade = trades[_trade]; + require(trade.status == "Open", "Biashara haijafunguliwa."); + currencyToken.transferFrom(msg.sender, trade.poster, trade.price); + itemToken.transferFrom(address(this), msg.sender, trade.item); + trades[_trade].status = "Executed"; + emit TradeStatusChange(_trade, "Executed"); +} +``` + +Mwishowe, tuna chaguo kwa wauzaji kujiondoa kwenye biashara kabla mnunuzi hajakubali. Katika baadhi ya mifumo, matangazo badala yake yangekuwa hewani kwa kipindi fulani kabla ya muda wake kuisha. Ni chaguo lako, kulingana na muundo wa soko lako. + +Msimbo unafanana sana na ule unaotumika kutekeleza biashara, isipokuwa tu hakuna sarafu inayobadilisha mikono na kitu kinarudi kwa mchapishaji wa tangazo. + +```solidity +function cancelTrade(uint256 _trade) + public +{ + Trade memory trade = trades[_trade]; + require( + msg.sender == trade.poster, + "Biashara inaweza kughairiwa na mchapishaji pekee." + ); + require(trade.status == "Open", "Biashara haijafunguliwa."); + itemToken.transferFrom(address(this), trade.poster, trade.item); + trades[_trade].status = "Cancelled"; + emit TradeStatusChange(_trade, "Cancelled"); +} +``` + +Ni hayo tu. Umemaliza kufika mwisho wa utekelezaji. Inashangaza sana jinsi baadhi ya dhana za biashara zinavyokuwa fupi zinapoelezwa kwa msimbo, na hii ni moja ya kesi hizo. Angalia mkataba kamili [katika hazina yetu](https://github.com/HQ20/contracts/blob/master/contracts/classifieds/Classifieds.sol). + +## Hitimisho {#conclusion} + +Bao za matangazo ni muundo wa kawaida wa soko uliopanuka sana na intaneti, ukawa mfumo wa biashara maarufu sana ukiwa na washindi wachache wa ukiritimba. + +Bao za matangazo pia ni zana rahisi kuiga katika mazingira ya mnyororo wa bloku, zenye sifa maalum sana zitakazowezesha changamoto kwa makampuni makubwa yaliyopo. + +Katika makala hii, nimejaribu kuunganisha uhalisia wa biashara ya bodi ya matangazo na utekelezaji wa kiteknolojia. Ujuzi huu unapaswa kukusaidia kuunda maono na ramani ya utekelezaji ikiwa una ujuzi unaofaa. + +Kama kawaida, ikiwa unataka kujenga kitu chochote cha kufurahisha na ungependa ushauri, tafadhali [niandikie](https://albertocuesta.es/)! Daima ninafurahi kusaidia. diff --git a/public/content/translations/sw/developers/tutorials/how-to-mint-an-nft/index.md b/public/content/translations/sw/developers/tutorials/how-to-mint-an-nft/index.md new file mode 100644 index 00000000000..7f0882e2a55 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-mint-an-nft/index.md @@ -0,0 +1,329 @@ +--- +title: Jinsi ya Kutengeneza NFT (Sehemu ya 2/3 ya Mfululizo wa Mafunzo ya NFT) +description: Mafunzo haya yanaelezea jinsi ya kutengeneza NFT kwenye mnyororo wa bloku wa Ethereum kwa kutumia mkataba-erevu wetu na Web3. +author: "Sumi Mudgil" +tags: [ "ERC-721", "alchemy", "uimara", "mikataba erevu" ] +skill: beginner +lang: sw +published: 2021-04-22 +--- + +[Beeple](https://www.nytimes.com/2021/03/11/arts/design/nft-auction-christies-beeple.html): Dola Milioni 69 +[3LAU](https://www.forbes.com/sites/abrambrown/2021/03/03/3lau-nft-nonfungible-tokens-justin-blau/?sh=5f72ef64643b): Dola Milioni 11 +[Grimes](https://www.theguardian.com/music/2021/mar/02/grimes-sells-digital-art-collection-non-fungible-tokens): Dola Milioni 6 + +Wote walitengeneza NFT zao kwa kutumia API yenye nguvu ya Alchemy. Katika mafunzo haya, tutakufundisha jinsi ya kufanya vivyo hivyo kwa chini ya dakika 10. + +“Kutengeneza NFT” ni kitendo cha kuchapisha tokeni ya kipekee ya ERC-721 kwenye mnyororo wa bloku. Kwa kutumia mkataba-erevu wetu kutoka [Sehemu ya 1 ya mfululizo huu wa mafunzo ya NFT](/developers/tutorials/how-to-write-and-deploy-an-nft/), hebu tuonyeshe ujuzi wetu wa Web3 na tutengeneze NFT. Mwishoni mwa mafunzo haya, utaweza kutengeneza NFT nyingi kadri moyo wako (na mkoba) unavyotamani! + +Tuanze! + +## Hatua ya 1: Sakinisha Web3 {#install-web3} + +Ikiwa ulifuata mafunzo ya kwanza kuhusu kuunda mkataba-erevu wako wa NFT, tayari una uzoefu wa kutumia Ethers.js. Web3 inafanana na Ethers, kwani ni maktaba inayotumika kurahisisha kuunda maombi kwenye mnyororo wa bloku wa Ethereum. Katika mafunzo haya tutakuwa tunatumia [Alchemy Web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3), ambayo ni maktaba ya Web3 iliyoboreshwa inayotoa majaribio ya kurudia kiotomatiki na usaidizi thabiti wa WebSocket. + +Katika saraka kuu ya mradi wako, endesha: + +``` +npm install @alch/alchemy-web3 +``` + +## Hatua ya 2: Tengeneza faili la `mint-nft.js` {#create-mintnftjs} + +Ndani ya saraka yako ya maandishi, tengeneza faili la `mint-nft.js` na uongeze mistari ifuatayo ya msimbo: + +```js +require("dotenv").config() +const API_URL = process.env.API_URL +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(API_URL) +``` + +## Hatua ya 3: Pata ABI ya mkataba wako {#contract-abi} + +ABI ya mkataba wetu (Kiolesura cha Mfumo wa Nambari) ni kiolesura cha kuingiliana na mkataba-erevu wetu. Unaweza kujifunza zaidi kuhusu ABI za Mkataba [hapa](https://docs.alchemyapi.io/alchemy/guides/eth_getlogs#what-are-ab-is). Hardhat hutengeneza ABI kiotomatiki na kuihifadhi katika faili la `MyNFT.json`. Ili kutumia hili, tutahitaji kuchanganua yaliyomo kwa kuongeza mistari ifuatayo ya msimbo kwenye faili letu la `mint-nft.js`: + +```js +const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json") +``` + +Ikiwa unataka kuona ABI unaweza kuichapisha kwenye koni yako: + +```js +console.log(JSON.stringify(contract.abi)) +``` + +Ili kuendesha `mint-nft.js` na kuona ABI yako ikichapishwa kwenye koni, nenda kwenye terminal yako na uendeshe: + +```js +node scripts/mint-nft.js +``` + +## Hatua ya 4: Sanidi metadata ya NFT yako kwa kutumia IPFS {#config-meta} + +Ikiwa unakumbuka kutoka kwa mafunzo yetu katika Sehemu ya 1, chaguo la kukokotoa la mkataba-erevu wa `mintNFT` huchukua kigezo cha tokenURI ambacho kinapaswa kutatua kwa hati ya JSON inayoelezea metadata ya NFT— ambayo ndiyo huleta uhai kwa NFT, na kuiruhusu kuwa na sifa zinazoweza kusanidiwa, kama vile jina, maelezo, picha na sifa nyingine. + +> _Mfumo wa Faili baina ya Sayari (IPFS) ni itifaki iliyogatuliwa na mtandao wa rika-kwa-rika wa kuhifadhi na kushiriki data katika mfumo wa faili uliosambazwa._ + +Tutatumia Pinata, API na zana rahisi ya IPFS, kuhifadhi mali na metadata ya NFT yetu ili kuhakikisha kuwa NFT yetu imegatuliwa kikweli. Ikiwa huna akaunti ya Pinata, jisajili kwa akaunti ya bure [hapa](https://app.pinata.cloud) na ukamilishe hatua za kuthibitisha barua pepe yako. + +Mara tu unapomaliza kuunda akaunti: + +- Nenda kwenye ukurasa wa "Faili" na ubofye kitufe cha buluu cha "Pakia" kilicho juu kushoto mwa ukurasa. + +- Pakia picha kwenye Pinata - hii itakuwa mali ya picha kwa NFT yako. Jisikie huru kuiita mali jina lolote unalotaka + +- Baada ya kupakia, utaona maelezo ya faili katika jedwali kwenye ukurasa wa "Faili". Pia utaona safu ya CID. Unaweza kunakili CID kwa kubofya kitufe cha kunakili kilicho karibu nayo. Unaweza kutazama upakiaji wako kwenye: `https://gateway.pinata.cloud/ipfs/`. Unaweza kupata picha tuliyotumia kwenye IPFS [hapa](https://gateway.pinata.cloud/ipfs/QmZdd5KYdCFApWn7eTZJ1qgJu18urJrP9Yh1TZcZrZxxB5), kwa mfano. + +Kwa wanafunzi wanaoonekana zaidi, hatua zilizo hapo juu zimefupishwa hapa: + +![Jinsi ya kupakia picha yako kwenye Pinata](./instructionsPinata.gif) + +Sasa, tutataka kupakia hati moja zaidi kwenye Pinata. Lakini kabla ya kufanya hivyo, tunahitaji kuiunda! + +Katika saraka yako kuu, tengeneza faili jipya liitwalo `nft-metadata.json` na uongeze msimbo ufuatao wa json: + +```json +{ + "attributes": [ + { + "trait_type": "Aina", + "value": "Maltipoo" + }, + { + "trait_type": "Rangi ya macho", + "value": "Mocha" + } + ], + "description": "Mtoto wa mbwa anayevutia na nyeti zaidi ulimwenguni.", + "image": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb", + "name": "Ramses" +} +``` + +Jisikie huru kubadilisha data kwenye json. Unaweza kuondoa au kuongeza kwenye sehemu ya sifa. Muhimu zaidi, hakikisha sehemu ya picha inaelekeza kwenye eneo la picha yako ya IPFS - vinginevyo, NFT yako itajumuisha picha ya (mrembo sana!) mbwa. + +Ukishamaliza kuhariri faili la JSON, lihifadhi na ulipakie kwenye Pinata, ukifuata hatua zilezile tulizofanya kupakia picha. + +![Jinsi ya kupakia nft-metadata.json yako kwenye Pinata](./uploadPinata.gif) + +## Hatua ya 5: Unda kielelezo cha mkataba wako {#instance-contract} + +Sasa, ili kuingiliana na mkataba wetu, tunahitaji kuunda mfano wake katika msimbo wetu. Ili kufanya hivyo tutahitaji anwani yetu ya mkataba ambayo tunaweza kuipata kutoka kwa usambazaji au [Blockscout](https://eth-sepolia.blockscout.com/) kwa kuangalia anwani uliyotumia kupeleka mkataba. + +![Tazama anwani yako ya mkataba kwenye Etherscan](./view-contract-etherscan.png) + +Katika mfano ulio hapo juu, anwani ya mkataba wetu ni 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778. + +Ifuatayo tutatumia [mbinu ya mkataba](https://docs.web3js.org/api/web3-eth-contract/class/Contract) ya Web3 kuunda mkataba wetu kwa kutumia ABI na anwani. Katika faili lako la `mint-nft.js`, ongeza yafuatayo: + +```js +const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" + +const nftContract = new web3.eth.Contract(contract.abi, contractAddress) +``` + +## Hatua ya 6: Sasisha faili la `.env` {#update-env} + +Sasa, ili kuunda na kutuma miamala kwenye mnyororo wa Ethereum, tutatumia anwani ya akaunti yako ya umma ya Ethereum kupata nonce ya akaunti (tutaelezea hapo chini). + +Ongeza ufunguo wako wa umma kwenye faili lako la `.env` - ikiwa ulikamilisha sehemu ya 1 ya mafunzo, faili letu la `.env` linapaswa kuonekana hivi sasa: + +```js +API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key" +PRIVATE_KEY = "your-private-account-address" +PUBLIC_KEY = "your-public-account-address" +``` + +## Hatua ya 7: Tengeneza muamala wako {#create-txn} + +Kwanza, hebu tufafanue chaguo la kukokotoa liitwalo `mintNFT(tokenData)` na tutengeneze muamala wetu kwa kufanya yafuatayo: + +1. Pata _PRIVATE_KEY_ na _PUBLIC_KEY_ yako kutoka kwenye faili la `.env`. + +2. Ifuatayo, tutahitaji kufahamu nonce ya akaunti. Vipimo vya Nonce hutumiwa kufuatilia idadi ya miamala iliyotumwa kutoka kwa anwani yako - ambayo tunahitaji kwa madhumuni ya usalama na kuzuia [mashambulizi ya kurudia](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce). Ili kupata idadi ya miamala iliyotumwa kutoka kwa anwani yako, tunatumia [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount). + +3. Mwishowe tutaweka muamala wetu na maelezo yafuatayo: + +- `'from': PUBLIC_KEY` — Asili ya muamala wetu ni anwani yetu ya umma + +- `'to': contractAddress` — Mkataba tunaotaka kuingiliana nao na kutuma muamala + +- `'nonce': nonce` — Nonce ya akaunti na idadi ya miamala iliyotumwa kutoka kwa anwani yetu + +- `'gas': estimatedGas` — Gesi inayokadiriwa inayohitajika kukamilisha muamala + +- `'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()` — Kukokotoa tunayotaka kufanya katika muamala huu - ambayo katika hali hii ni kutengeneza NFT + +Faili lako la `mint-nft.js` linapaswa kuonekana hivi sasa: + +```js + require('dotenv').config(); + const API_URL = process.env.API_URL; + const PUBLIC_KEY = process.env.PUBLIC_KEY; + const PRIVATE_KEY = process.env.PRIVATE_KEY; + + const { createAlchemyWeb3 } = require("@alch/alchemy-web3"); + const web3 = createAlchemyWeb3(API_URL); + + const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json"); + const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"; + const nftContract = new web3.eth.Contract(contract.abi, contractAddress); + + async function mintNFT(tokenURI) { + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //pata nonce ya hivi karibuni + + //muamala + const tx = { + 'from': PUBLIC_KEY, + 'to': contractAddress, + 'nonce': nonce, + 'gas': 500000, + 'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI() + }; + }​ +``` + +## Hatua ya 8: Saini muamala {#sign-txn} + +Sasa kwa kuwa tumeunda muamala wetu, tunahitaji kuusaini ili kuutuma. Hapa ndipo tutatumia ufunguo wetu binafsi. + +`web3.eth.sendSignedTransaction` itatupatia hashi ya muamala, ambayo tunaweza kutumia kuhakikisha muamala wetu umechimbwa na haukuachwa na mtandao. Utagundua katika sehemu ya kusaini muamala, tumeongeza ukaguzi wa hitilafu ili tujue ikiwa muamala wetu umefaulu. + +```js +require("dotenv").config() +const API_URL = process.env.API_URL +const PUBLIC_KEY = process.env.PUBLIC_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY + +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(API_URL) + +const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json") +const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" +const nftContract = new web3.eth.Contract(contract.abi, contractAddress) + +async function mintNFT(tokenURI) { + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //pata nonce ya hivi karibuni + + //muamala + const tx = { + from: PUBLIC_KEY, + to: contractAddress, + nonce: nonce, + gas: 500000, + data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(), + } + + const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY) + signPromise + .then((signedTx) => { + web3.eth.sendSignedTransaction( + signedTx.rawTransaction, + function (err, hash) { + if (!err) { + console.log( + "Hashi ya muamala wako ni: ", + hash, + "\nAngalia Mempool ya Alchemy kutazama hali ya muamala wako!" + ) + } else { + console.log( + "Kuna kitu kilienda vibaya wakati wa kuwasilisha muamala wako:", + err + ) + } + } + ) + }) + .catch((err) => { + console.log(" Ahadi imeshindwa:", err) + }) +} +``` + +## Hatua ya 9: Ita `mintNFT` na endesha node `mint-nft.js` {#call-mintnft-fn} + +Unakumbuka `metadata.json` uliyopakia kwenye Pinata? Pata msimbo wake wa hashi kutoka Pinata na upitishe yafuatayo kama kigezo kwa chaguo la kukokotoa `mintNFT` `https://gateway.pinata.cloud/ipfs/` + +Hivi ndivyo jinsi ya kupata msimbo wa hashi: + +![Jinsi ya kupata msimbo wa hashi wa metadata ya nft yako kwenye Pinata](./metadataPinata.gif)_Jinsi ya kupata msimbo wa hashi wa metadata ya nft yako kwenye Pinata_ + +> Hakikisha mara mbili kwamba msimbo wa hashi ulionakili unaunganisha kwenye **metadata.json** yako kwa kupakia `https://gateway.pinata.cloud/ipfs/` kwenye dirisha tofauti. Ukurasa unapaswa kuonekana sawa na picha ya skrini hapa chini: + +![Ukurasa wako unapaswa kuonyesha metadata ya json](./metadataJSON.png)_Ukurasa wako unapaswa kuonyesha metadata ya json_ + +Kwa pamoja, msimbo wako unapaswa kuonekana kama hivi: + +```js +require("dotenv").config() +const API_URL = process.env.API_URL +const PUBLIC_KEY = process.env.PUBLIC_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY + +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(API_URL) + +const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json") +const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" +const nftContract = new web3.eth.Contract(contract.abi, contractAddress) + +async function mintNFT(tokenURI) { + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //pata nonce ya hivi karibuni + + //muamala + const tx = { + from: PUBLIC_KEY, + to: contractAddress, + nonce: nonce, + gas: 500000, + data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(), + } + + const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY) + signPromise + .then((signedTx) => { + web3.eth.sendSignedTransaction( + signedTx.rawTransaction, + function (err, hash) { + if (!err) { + console.log( + "Hashi ya muamala wako ni: ", + hash, + "\nAngalia Mempool ya Alchemy kutazama hali ya muamala wako!" + ) + } else { + console.log( + "Kuna kitu kilienda vibaya wakati wa kuwasilisha muamala wako:", + err + ) + } + } + ) + }) + .catch((err) => { + console.log("Ahadi imeshindwa:", err) + }) +} + +mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP") +``` + +Sasa, endesha `node scripts/mint-nft.js` ili kupeleka NFT yako. Baada ya sekunde chache, unapaswa kuona jibu kama hili kwenye terminal yako: + + ``` + Hashi ya muamala wako ni: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8 + + Angalia Mempool ya Alchemy kutazama hali ya muamala wako! + ``` + +Ifuatayo, tembelea [Mempool yako ya Alchemy](https://dashboard.alchemyapi.io/mempool) ili kuona hali ya muamala wako (kama unasubiri, umechimbwa, au umeshuka na mtandao). Ikiwa muamala wako umeshuka, inasaidia pia kuangalia [Blockscout](https://eth-sepolia.blockscout.com/) na utafute hashi ya muamala wako. + +![Tazama hashi ya muamala wako wa NFT kwenye Etherscan](./view-nft-etherscan.png)_Tazama hashi ya muamala wako wa NFT kwenye Etherscan_ + +Na ndivyo hivyo! Sasa umeshapeleka NA kutengeneza NFT kwenye mnyororo wa bloku wa Ethereum + +Kwa kutumia `mint-nft.js` unaweza kutengeneza NFT nyingi kadri moyo wako (na mkoba) unavyotamani! Hakikisha tu unapitia tokenURI mpya inayoelezea metadata ya NFT (vinginevyo, utaishia kutengeneza rundo la zinazofanana na vitambulisho tofauti). + +Bila shaka, ungependa kuonyesha NFT yako kwenye mkoba wako - kwa hivyo hakikisha unaangalia [Sehemu ya 3: Jinsi ya Kuona NFT Yako Kwenye Mkoba wako](/developers/tutorials/how-to-view-nft-in-metamask/)! diff --git a/public/content/translations/sw/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md b/public/content/translations/sw/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md new file mode 100644 index 00000000000..26660dab91c --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md @@ -0,0 +1,102 @@ +--- +title: Jinsi ya kuiga mikataba-erevu ya Solidity kwa ajili ya majaribio +description: Kwa nini unapaswa kufanyia mzaha mikataba yako unapofanya majaribio +author: Markus Waas +lang: sw +tags: [ "uimara", "mikataba erevu", "majaribio", "kuiga" ] +skill: intermediate +published: 2020-05-02 +source: soliditydeveloper.com +sourceUrl: https://soliditydeveloper.com/mocking-contracts +--- + +[Vitu vya kuiga](https://wikipedia.org/wiki/Mock_object) ni muundo wa kawaida wa usanifu katika upangaji programu unaolenga vitu. Likitokana na neno la zamani la Kifaransa 'mocquer' lenye maana ya 'kufanyia mzaha', lilibadilika na kuwa 'kuiga kitu halisi' ambacho ndicho hasa tunachofanya katika upangaji programu. Tafadhali fanyia mzaha tu mikataba yako erevu ikiwa unataka, lakini iige wakati wowote unapoweza. Inarahisisha maisha yako. + +## Majaribio ya kipengele cha mikataba kwa kutumia miigo {#unit-testing-contracts-with-mocks} + +Kuiga mkataba kimsingi kunamaanisha kutengeneza toleo la pili la mkataba huo ambalo linafanya kazi sawa na lile la awali, lakini kwa njia ambayo inaweza kudhibitiwa kwa urahisi na msanidi programu. Mara nyingi unajikuta na mikataba tata ambapo unataka tu [kufanya majaribio ya kipengele kwa sehemu ndogo za mkataba](/developers/docs/smart-contracts/testing/). Tatizo ni vipi ikiwa kujaribu sehemu hii ndogo kunahitaji hali maalum ya mkataba ambayo ni vigumu kuifikia? + +Unaweza kuandika mantiki tata ya usanidi wa majaribio kila wakati inayoweka mkataba katika hali inayohitajika au unaandika muigo. Kuiga mkataba ni rahisi kwa kutumia urithi. Tengeneza tu mkataba wa pili wa kuiga unaorithi kutoka kwa ule wa awali. Sasa unaweza kubatilisha utendakazi kwenye muigo wako. Hebu tuone kwa mfano. + +## Mfano: ERC20 ya Faragha {#example-private-erc20} + +Tunatumia mfano wa mkataba wa ERC-20 ambao una muda wa awali wa faragha. Mmiliki anaweza kudhibiti watumiaji wa faragha na ni wao tu ndio watakaoruhusiwa kupokea tokeni mwanzoni. Muda fulani ukishapita, kila mtu ataruhusiwa kutumia tokeni. Kama una hamu ya kujua, tunatumia hooki ya [`_beforeTokenTransfer`](https://docs.openzeppelin.com/contracts/5.x/extending-contracts#using-hooks) kutoka kwa mikataba mipya ya OpenZeppelin v3. + +```solidity +pragma solidity ^0.6.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract PrivateERC20 is ERC20, Ownable { + mapping (address => bool) public isPrivateUser; + uint256 private publicAfterTime; + + constructor(uint256 privateERC20timeInSec) ERC20("PrivateERC20", "PRIV") public { + publicAfterTime = now + privateERC20timeInSec; + } + + function addUser(address user) external onlyOwner { + isPrivateUser[user] = true; + } + + function isPublic() public view returns (bool) { + return now >= publicAfterTime; + } + + function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { + super._beforeTokenTransfer(from, to, amount); + + require(_validRecipient(to), "PrivateERC20: mpokeaji si sahihi"); + } + + function _validRecipient(address to) private view returns (bool) { + if (isPublic()) { + return true; + } + + return isPrivateUser[to]; + } +} +``` + +Na sasa hebu tuuige. + +```solidity +pragma solidity ^0.6.0; +import "../PrivateERC20.sol"; + +contract PrivateERC20Mock is PrivateERC20 { + bool isPublicConfig; + + constructor() public PrivateERC20(0) {} + + function setIsPublic(bool isPublic) external { + isPublicConfig = isPublic; + } + + function isPublic() public view returns (bool) { + return isPublicConfig; + } +} +``` + +Utapata moja ya ujumbe ufuatao wa hitilafu: + +- `PrivateERC20Mock.sol: TypeError: Overriding function is missing "override" specifier.` +- `PrivateERC20.sol: TypeError: Trying to override non-virtual function. Did you forget to add "virtual"?.` + +Kwa kuwa tunatumia toleo jipya la 0.6 la Solidity, tunapaswa kuongeza neno msingi la `virtual` kwa ajili ya utendakazi ambao unaweza kubatilishwa na `override` kwa ajili ya utendakazi unaobatilisha. Kwa hivyo, hebu tuongeze hayo kwenye utendakazi wote wa `isPublic`. + +Sasa katika majaribio yako ya kipengele, unaweza kutumia `PrivateERC20Mock` badala yake. Unapotaka kujaribu tabia wakati wa matumizi ya faragha, tumia `setIsPublic(false)` na vile vile `setIsPublic(true)` kwa ajili ya kujaribu muda wa matumizi ya umma. Bila shaka katika mfano wetu, tunaweza pia kutumia [visaidizi vya muda](https://docs.openzeppelin.com/test-helpers/0.5/api#increase) kubadilisha nyakati ipasavyo. Lakini wazo la kuiga linapaswa kuwa wazi sasa na unaweza kufikiria hali ambapo si rahisi kama kusongesha mbele muda tu. + +## Kuiga mikataba mingi {#mocking-many-contracts} + +Inaweza kuwa fujo ikiwa itabidi utengeneze mkataba mwingine kwa kila muigo mmoja. Ikiwa hili linakusumbua, unaweza kuangalia maktaba ya [MockContract](https://github.com/gnosis/mock-contract). Inakuruhusu kubatilisha na kubadilisha tabia za mikataba papo kwa papo. Hata hivyo, inafanya kazi tu kwa ajili ya kuiga miito kwa mkataba mwingine, kwa hivyo haitafanya kazi kwa mfano wetu. + +## Kuiga kunaweza kuwa na nguvu zaidi {#mocking-can-be-even-more-powerful} + +Nguvu za kuiga haziishii hapo. + +- Kuongeza utendakazi: Si tu kubatilisha utendakazi maalum ni muhimu, bali pia kuongeza tu utendakazi wa ziada. Mfano mzuri kwa tokeni ni kuwa na utendakazi wa ziada wa `mint` ili kuruhusu mtumiaji yeyote kupata tokeni mpya bure. +- Matumizi katika testnet: Unapotuma na kujaribu mikataba yako kwenye testnet pamoja na mfumo wako mtawanyo wa kimamlaka, zingatia kutumia toleo la kuiga. Epuka kubatilisha utendakazi isipokuwa kama ni lazima sana. Unataka kujaribu mantiki halisi hata hivyo. Lakini kuongeza kwa mfano utendakazi wa kuweka upya kunaweza kuwa na manufaa ambao unaweka upya hali ya mkataba hadi mwanzo, bila kuhitaji utumaji mpya. Ni wazi hautaki kuwa na hiyo katika mkataba wa Mtandao Mkuu. diff --git a/public/content/translations/sw/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md b/public/content/translations/sw/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md new file mode 100644 index 00000000000..112a378ed5a --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md @@ -0,0 +1,709 @@ +--- +title: Jinsi ya kutumia Echidna kujaribu mikataba-erevu +description: Jinsi ya kutumia Echidna kujaribu mikataba-erevu kiotomatiki +author: "Trailofbits" +lang: sw +tags: + [ + "uimara", + "mikataba erevu", + "usalama", + "majaribio", + "fuzzing" + ] +skill: advanced +published: 2020-04-10 +source: Kujenga mikataba salama +sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna +--- + +## Usakinishaji {#installation} + +Echidna inaweza kusakinishwa kupitia docker au kutumia binary iliyokusanywa awali. + +### Echidna kupitia docker {#echidna-through-docker} + +```bash +docker pull trailofbits/eth-security-toolbox +docker run -it -v "$PWD":/home/training trailofbits/eth-security-toolbox +``` + +_Amri ya mwisho huendesha eth-security-toolbox kwenye docker ambayo ina ufikiaji wa saraka yako ya sasa. Unaweza kubadilisha faili kutoka kwa mwenyeji wako, na uendeshe zana kwenye faili kutoka kwa docker_ + +Ndani ya docker, endesha : + +```bash +solc-select 0.5.11 +cd /home/training +``` + +### Binary {#binary} + +[https://github.com/crytic/echidna/releases/tag/v1.4.0.0](https://github.com/crytic/echidna/releases/tag/v1.4.0.0) + +## Utangulizi wa fuzzing kulingana na sifa {#introduction-to-property-based-fuzzing} + +Echidna ni fuzzer kulingana na sifa, tulielezea katika machapisho yetu ya awali ya blogu ([1](https://blog.trailofbits.com/2018/03/09/echidna-a-smart-fuzzer-for-ethereum/), [2](https://blog.trailofbits.com/2018/05/03/state-machine-testing-with-echidna/), [3](https://blog.trailofbits.com/2020/03/30/an-echidna-for-all-seasons/)). + +### Fuzzing {#fuzzing} + +[Fuzzing](https://wikipedia.org/wiki/Fuzzing) ni mbinu inayojulikana sana katika jumuiya ya usalama. Inajumuisha kuzalisha pembejeo ambazo ni nasibu kiasi ili kupata hitilafu katika programu. Fuzzers za programu za jadi (kama vile [AFL](http://lcamtuf.coredump.cx/afl/) au [LibFuzzer](https://llvm.org/docs/LibFuzzer.html)) zinajulikana kuwa zana bora za kupata hitilafu. + +Zaidi ya uzalishaji wa pembejeo nasibu kabisa, kuna mbinu na mikakati mingi ya kuzalisha pembejeo nzuri, ikiwemo: + +- Pata maoni kutoka kwa kila utekelezaji na uelekeze uzalishaji kwa kutumia maoni hayo. Kwa mfano, ikiwa pembejeo mpya iliyozalishwa itasababisha ugunduzi wa njia mpya, inaweza kuwa na maana kuzalisha pembejeo mpya zilizo karibu nayo. +- Kuzalisha pembejeo inayoheshimu kizuizi cha kimuundo. Kwa mfano, ikiwa pembejeo yako ina kichwa chenye checksum, itakuwa na maana kuiruhusu fuzzer kuzalisha pembejeo inayohakiki checksum. +- Kutumia pembejeo zinazojulikana kuzalisha pembejeo mpya: ikiwa una uwezo wa kufikia seti kubwa ya data ya pembejeo halali, fuzzer yako inaweza kuzalisha pembejeo mpya kutoka humo, badala ya kuanza uzalishaji wake kutoka mwanzo. Hizi kwa kawaida huitwa _mbegu_. + +### Fuzzing kulingana na sifa {#property-based-fuzzing} + +Echidna ni ya familia maalum ya fuzzer: fuzzing kulingana na sifa iliyohamasishwa sana na [QuickCheck](https://wikipedia.org/wiki/QuickCheck). Tofauti na fuzzer za kawaida ambazo zitajaribu kupata kuharibika, Echidna itajaribu kuvunja visivyobadilika vilivyobainishwa na mtumiaji. + +Katika mikataba-erevu, visivyobadilika ni chaguo za kukokotoa za Solidity, ambazo zinaweza kuwakilisha hali yoyote isiyo sahihi au batili ambayo mkataba unaweza kufikia, ikiwa ni pamoja na: + +- Udhibiti usio sahihi wa ufikiaji: mshambulizi alikua mmiliki wa mkataba. +- Mashine ya hali isiyo sahihi: tokeni zinaweza kuhamishwa wakati mkataba umesitishwa. +- Hesabu isiyo sahihi: mtumiaji anaweza kufanya 'underflow' salio lake na kupata tokeni za bure zisizo na kikomo. + +### Kujaribu sifa na Echidna {#testing-a-property-with-echidna} + +Tutaona jinsi ya kujaribu mkataba-erevu na Echidna. Lengo ni mkataba-erevu ufuatao [`token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol): + +```solidity +contract Token{ + mapping(address => uint) public balances; + function airdrop() public{ + balances[msg.sender] = 1000; + } + function consume() public{ + require(balances[msg.sender]>0); + balances[msg.sender] -= 1; + } + function backdoor() public{ + balances[msg.sender] += 1; + } +} +``` + +Tutafanya dhana kwamba tokeni hii lazima iwe na sifa zifuatazo: + +- Mtu yeyote anaweza kuwa na kiwango cha juu cha tokeni 1000 +- Tokeni haiwezi kuhamishwa (sio tokeni ya ERC20) + +### Andika sifa {#write-a-property} + +Sifa za Echidna ni chaguo za kukokotoa za Solidity. Sifa lazima: + +- Haina kigezo +- Rejesha `true` ikiwa imefanikiwa +- Jina lake kuanza na `echidna` + +Echidna ita: + +- Zalisha kiotomatiki miamala isiyo ya kawaida ili kujaribu sifa. +- Ripoti miamala yoyote inayoongoza sifa kurejesha `false` au kutupa hitilafu. +- Puuza athari za kando wakati wa kuita sifa (yaani, ikiwa sifa inabadilisha kigezo cha hali, inapotea baada ya jaribio) + +Sifa ifuatayo hukagua kwamba mhusika hana zaidi ya tokeni 1000: + +```solidity +function echidna_balance_under_1000() public view returns(bool){ + return balances[msg.sender] <= 1000; +} +``` + +Tumia urithi kutenganisha mkataba wako na sifa zako: + +```solidity +contract TestToken is Token{ + function echidna_balance_under_1000() public view returns(bool){ + return balances[msg.sender] <= 1000; + } + } +``` + +[`token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol) inatekeleza sifa na kurithi kutoka kwa tokeni. + +### Anzisha mkataba {#initiate-a-contract} + +Echidna inahitaji [kiunda](/developers/docs/smart-contracts/anatomy/#constructor-functions) bila kigezo. Ikiwa mkataba wako unahitaji uanzishaji maalum, unahitaji kuufanya katika kiunda. + +Kuna anwani maalum katika Echidna: + +- `0x00a329c0648769A73afAc7F9381E08FB43dBEA72` ambayo huita kiunda. +- `0x10000`, `0x20000`, na `0x00a329C0648769a73afAC7F9381e08fb43DBEA70` ambazo huita kiholela chaguo za kukokotoa zingine. + +Hatuhitaji uanzishaji wowote maalum katika mfano wetu wa sasa, kwa hivyo kiunda chetu hakina kitu. + +### Endesha Echidna {#run-echidna} + +Echidna inazinduliwa na: + +```bash +echidna-test contract.sol +``` + +Ikiwa contract.sol ina mikataba mingi, unaweza kubainisha lengo: + +```bash +echidna-test contract.sol --contract MyContract +``` + +### Muhtasari: Kujaribu sifa {#summary-testing-a-property} + +Yafuatayo ni muhtasari wa uendeshaji wa echidna kwenye mfano wetu: + +```solidity +contract TestToken is Token{ + constructor() public {} + function echidna_balance_under_1000() public view returns(bool){ + return balances[msg.sender] <= 1000; + } + } +``` + +```bash +echidna-test testtoken.sol --contract TestToken +... + +echidna_balance_under_1000: failed!💥 + Call sequence, shrinking (1205/5000): + airdrop() + backdoor() + +... +``` + +Echidna iligundua kuwa sifa inakiukwa ikiwa `backdoor` itaitwa. + +## Kuchuja chaguo za kukokotoa za kuita wakati wa kampeni ya fuzzing {#filtering-functions-to-call-during-a-fuzzing-campaign} + +Tutaona jinsi ya kuchuja chaguo za kukokotoa za kufanyiwa 'fuzz'. +Lengo ni mkataba-erevu ufuatao: + +```solidity +contract C { + bool state1 = false; + bool state2 = false; + bool state3 = false; + bool state4 = false; + + function f(uint x) public { + require(x == 12); + state1 = true; + } + + function g(uint x) public { + require(state1); + require(x == 8); + state2 = true; + } + + function h(uint x) public { + require(state2); + require(x == 42); + state3 = true; + } + + function i() public { + require(state3); + state4 = true; + } + + function reset1() public { + state1 = false; + state2 = false; + state3 = false; + return; + } + + function reset2() public { + state1 = false; + state2 = false; + state3 = false; + return; + } + + function echidna_state4() public returns (bool) { + return (!state4); + } +} +``` + +Mfano huu mdogo unalazimisha Echidna kupata mfuatano fulani wa miamala ili kubadilisha kigezo cha hali. +Hii ni ngumu kwa fuzzer (inapendekezwa kutumia zana ya utekelezaji wa ishara kama [Manticore](https://github.com/trailofbits/manticore)). +Tunaweza kuendesha Echidna ili kuthibitisha hili: + +```bash +echidna-test multi.sol +... +echidna_state4: passed! 🎉 +Seed: -3684648582249875403 +``` + +### Kuchuja chaguo za kukokotoa {#filtering-functions} + +Echidna ina shida kupata mfuatano sahihi wa kujaribu mkataba huu kwa sababu chaguo mbili za kukokotoa za kuweka upya (`reset1` na `reset2`) zitaweka vigezo vyote vya hali kuwa `false`. +Hata hivyo, tunaweza kutumia kipengele maalum cha Echidna ama kuweka kwenye orodha nyeusi chaguo za kukokotoa za kuweka upya au kuweka kwenye orodha nyeupe tu chaguo za kukokotoa za `f`, `g`, +`h` na `i`. + +Ili kuweka kwenye orodha nyeusi chaguo za kukokotoa, tunaweza kutumia faili hii ya usanidi: + +```yaml +filterBlacklist: true +filterFunctions: ["reset1", "reset2"] +``` + +Njia nyingine ya kuchuja chaguo za kukokotoa ni kuorodhesha chaguo za kukokotoa zilizoidhinishwa. Ili kufanya hivyo, tunaweza kutumia faili hii ya usanidi: + +```yaml +filterBlacklist: false +filterFunctions: ["f", "g", "h", "i"] +``` + +- `filterBlacklist` ni `true` kwa chaguo-msingi. +- Kuchuja kutafanywa kwa jina tu (bila vigezo). Ikiwa una `f()` na `f(uint256)`, kichujio cha `"f"` kitafanana na chaguo zote mbili za kukokotoa. + +### Endesha Echidna {#run-echidna-1} + +Ili kuendesha Echidna na faili ya usanidi `blacklist.yaml`: + +```bash +echidna-test multi.sol --config blacklist.yaml +... +echidna_state4: failed!💥 + Call sequence: + f(12) + g(8) + h(42) + i() +``` + +Echidna itapata mfuatano wa miamala ya kukanusha sifa karibu mara moja. + +### Muhtasari: Kuchuja chaguo za kukokotoa {#summary-filtering-functions} + +Echidna inaweza kuweka kwenye orodha nyeusi au orodha nyeupe chaguo za kukokotoa za kuita wakati wa kampeni ya fuzzing kwa kutumia: + +```yaml +filterBlacklist: true +filterFunctions: ["f1", "f2", "f3"] +``` + +```bash +echidna-test contract.sol --config config.yaml +... +``` + +Echidna huanza kampeni ya fuzzing ama kwa kuweka kwenye orodha nyeusi `f1`, `f2` na `f3` au kwa kuita hizi pekee, kulingana +na thamani ya boolean ya `filterBlacklist`. + +## Jinsi ya kujaribu assert ya Solidity na Echidna {#how-to-test-soliditys-assert-with-echidna} + +Katika mafunzo haya mafupi, tutaonyesha jinsi ya kutumia Echidna kujaribu ukaguzi wa dai katika mikataba. Tuseme tuna mkataba kama huu: + +```solidity +contract Incrementor { + uint private counter = 2**200; + + function inc(uint val) public returns (uint){ + uint tmp = counter; + counter += val; + // tmp <= counter + return (counter - tmp); + } +} +``` + +### Andika dai {#write-an-assertion} + +Tunataka kuhakikisha kuwa `tmp` ni ndogo au sawa na `counter` baada ya kurudisha tofauti yake. Tunaweza kuandika sifa ya Echidna, lakini tutahitaji kuhifadhi thamani ya `tmp` mahali fulani. Badala yake, tunaweza kutumia dai kama hili: + +```solidity +contract Incrementor { + uint private counter = 2**200; + + function inc(uint val) public returns (uint){ + uint tmp = counter; + counter += val; + assert (tmp <= counter); + return (counter - tmp); + } +} +``` + +### Endesha Echidna {#run-echidna-2} + +Ili kuwezesha upimaji wa kutofaulu kwa dai, tengeneza [faili ya usanidi wa Echidna](https://github.com/crytic/echidna/wiki/Config) `config.yaml`: + +```yaml +checkAsserts: true +``` + +Tunapoendesha mkataba huu katika Echidna, tunapata matokeo yanayotarajiwa: + +```bash +echidna-test assert.sol --config config.yaml +Analyzing contract: assert.sol:Incrementor +assertion in inc: failed!💥 + Call sequence, shrinking (2596/5000): + inc(217110167319967866419195559689128982722488122124807605757398297001483711807488) + inc(7237005577332262213973186563042994240829374041602535252466099000494570602496) + inc(86844066927987146567678238756515930889952488499230423029593188005934847229952) + +Seed: 1806480648350826486 +``` + +Kama unavyoona, Echidna inaripoti kushindwa kwa dai fulani katika chaguo la kukokotoa la `inc`. Kuongeza zaidi ya dai moja kwa kila chaguo la kukokotoa kunawezekana, lakini Echidna haiwezi kusema ni dai gani lililoshindwa. + +### Wakati gani na jinsi gani ya kutumia madai {#when-and-how-use-assertions} + +Madai yanaweza kutumika kama njia mbadala ya sifa dhahiri, haswa ikiwa masharti ya kukagua yanahusiana moja kwa moja na matumizi sahihi ya operesheni fulani `f`. Kuongeza madai baada ya msimbo fulani kutalazimisha ukaguzi ufanyike mara tu baada ya kutekelezwa: + +```solidity +function f(..) public { + // msimbo fulani tata + ... + assert (condition); + ... +} + +``` + +Kinyume chake, kutumia sifa ya wazi ya echidna kutatekeleza miamala kwa nasibu na hakuna njia rahisi ya kulazimisha ni lini hasa itakaguliwa. Bado inawezekana kufanya njia hii mbadala: + +```solidity +function echidna_assert_after_f() public returns (bool) { + f(..); + return(condition); +} +``` + +Hata hivyo, kuna baadhi ya masuala: + +- Inashindwa ikiwa `f` imetangazwa kama `internal` au `external`. +- Haijulikani ni vigezo vipi vinapaswa kutumika kuita `f`. +- Ikiwa `f` inabatilika, sifa itashindwa. + +Kwa ujumla, tunapendekeza kufuata [pendekezo la John Regehr](https://blog.regehr.org/archives/1091) kuhusu jinsi ya kutumia madai: + +- Usilazimishe athari yoyote ya kando wakati wa ukaguzi wa dai. Kwa mfano: `assert(ChangeStateAndReturn() == 1)` +- Usidai kauli zilizo wazi. Kwa mfano `assert(var >= 0)` ambapo `var` imetangazwa kama `uint`. + +Mwisho, tafadhali **usitumie** `require` badala ya `assert`, kwani Echidna haitaweza kuitambua (lakini mkataba utabatilika hata hivyo). + +### Muhtasari: Ukaguzi wa Madai {#summary-assertion-checking} + +Yafuatayo ni muhtasari wa uendeshaji wa echidna kwenye mfano wetu: + +```solidity +contract Incrementor { + uint private counter = 2**200; + + function inc(uint val) public returns (uint){ + uint tmp = counter; + counter += val; + assert (tmp <= counter); + return (counter - tmp); + } +} +``` + +```bash +echidna-test assert.sol --config config.yaml +Analyzing contract: assert.sol:Incrementor +assertion in inc: failed!💥 + Call sequence, shrinking (2596/5000): + inc(217110167319967866419195559689128982722488122124807605757398297001483711807488) + inc(7237005577332262213973186563042994240829374041602535252466099000494570602496) + inc(86844066927987146567678238756515930889952488499230423029593188005934847229952) + +Seed: 1806480648350826486 +``` + +Echidna iligundua kuwa dai katika `inc` linaweza kushindwa ikiwa chaguo hili la kukokotoa litaitwa mara nyingi na vigezo vikubwa. + +## Kukusanya na kurekebisha mkusanyiko wa Echidna {#collecting-and-modifying-an-echidna-corpus} + +Tutaona jinsi ya kukusanya na kutumia mkusanyiko wa miamala na Echidna. Lengo ni mkataba-erevu ufuatao [`magic.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/magic.sol): + +```solidity +contract C { + bool value_found = false; + function magic(uint magic_1, uint magic_2, uint magic_3, uint magic_4) public { + require(magic_1 == 42); + require(magic_2 == 129); + require(magic_3 == magic_4+333); + value_found = true; + return; + } + + function echidna_magic_values() public returns (bool) { + return !value_found; + } + +} +``` + +Mfano huu mdogo unalazimisha Echidna kupata thamani fulani ili kubadilisha kigezo cha hali. Hii ni ngumu kwa fuzzer +(inapendekezwa kutumia zana ya utekelezaji wa ishara kama [Manticore](https://github.com/trailofbits/manticore)). +Tunaweza kuendesha Echidna ili kuthibitisha hili: + +```bash +echidna-test magic.sol +... + +echidna_magic_values: passed! 🎉 + +Seed: 2221503356319272685 +``` + +Hata hivyo, bado tunaweza kutumia Echidna kukusanya mkusanyiko tunapoendesha kampeni hii ya 'fuzzing'. + +### Kukusanya mkusanyiko {#collecting-a-corpus} + +Ili kuwezesha ukusanyaji wa mkusanyiko, tengeneza saraka ya mkusanyiko: + +```bash +mkdir corpus-magic +``` + +Na [faili ya usanidi wa Echidna](https://github.com/crytic/echidna/wiki/Config) `config.yaml`: + +```yaml +coverage: true +corpusDir: "corpus-magic" +``` + +Sasa tunaweza kuendesha zana yetu na kuangalia mkusanyiko uliokusanywa: + +```bash +echidna-test magic.sol --config config.yaml +``` + +Echidna bado haiwezi kupata thamani sahihi za 'uchawi', lakini tunaweza kuangalia mkusanyiko iliokusanya. +Kwa mfano, moja ya faili hizi ilikuwa: + +```json +[ + { + "_gas'": "0xffffffff", + "_delay": ["0x13647", "0xccf6"], + "_src": "00a329c0648769a73afac7f9381e08fb43dbea70", + "_dst": "00a329c0648769a73afac7f9381e08fb43dbea72", + "_value": "0x0", + "_call": { + "tag": "SolCall", + "contents": [ + "magic", + [ + { + "contents": [ + 256, + "93723985220345906694500679277863898678726808528711107336895287282192244575836" + ], + "tag": "AbiUInt" + }, + { + "contents": [256, "334"], + "tag": "AbiUInt" + }, + { + "contents": [ + 256, + "68093943901352437066264791224433559271778087297543421781073458233697135179558" + ], + "tag": "AbiUInt" + }, + { + "tag": "AbiUInt", + "contents": [256, "332"] + } + ] + ] + }, + "_gasprice'": "0xa904461f1" + } +] +``` + +Ni wazi, pembejeo hii haitasababisha kutofaulu kwa sifa yetu. Hata hivyo, katika hatua inayofuata, tutaona jinsi ya kuirekebisha kwa ajili hiyo. + +### Kupanda mbegu kwenye mkusanyiko {#seeding-a-corpus} + +Echidna inahitaji msaada ili kushughulikia chaguo la kukokotoa la `magic`. Tutakili na kurekebisha pembejeo ili kutumia vigezo +vinavyofaa kwake: + +```bash +cp corpus/2712688662897926208.txt corpus/new.txt +``` + +Tutarekebisha `new.txt` ili iite `magic(42,129,333,0)`. Sasa, tunaweza kuendesha Echidna tena: + +```bash +echidna-test magic.sol --config config.yaml +... +echidna_magic_values: failed!💥 + Call sequence: + magic(42,129,333,0) + + +Unique instructions: 142 +Unique codehashes: 1 +Seed: -7293830866560616537 + +``` + +Wakati huu, iligundua kuwa sifa inakiukwa mara moja. + +## Kupata miamala yenye matumizi makubwa ya Gesi {#finding-transactions-with-high-gas-consumption} + +Tutaona jinsi ya kupata miamala yenye matumizi makubwa ya Gesi na Echidna. Lengo ni mkataba-erevu ufuatao: + +```solidity +contract C { + uint state; + + function expensive(uint8 times) internal { + for(uint8 i=0; i < times; i++) + state = state + i; + } + + function f(uint x, uint y, uint8 times) public { + if (x == 42 && y == 123) + expensive(times); + else + state = 0; + } + + function echidna_test() public returns (bool) { + return true; + } + +} +``` + +Hapa `expensive` inaweza kuwa na matumizi makubwa ya Gesi. + +Hivi sasa, Echidna daima inahitaji mali ya kujaribu: hapa `echidna_test` daima inarudi `true`. +Tunaweza kuendesha Echidna ili kuthibitisha hili: + +``` +echidna-test gas.sol +... +echidna_test: passed! 🎉 + +Seed: 2320549945714142710 +``` + +### Kupima Matumizi ya Gesi {#measuring-gas-consumption} + +Ili kuwezesha matumizi ya Gesi na Echidna, tengeneza faili ya usanidi `config.yaml`: + +```yaml +estimateGas: true +``` + +Katika mfano huu, tutapunguza pia ukubwa wa mfuatano wa manunuzi ili kufanya matokeo yawe rahisi kueleweka: + +```yaml +seqLen: 2 +estimateGas: true +``` + +### Endesha Echidna {#run-echidna-3} + +Mara tu tunapokuwa na faili ya usanidi iliyoundwa, tunaweza kuendesha Echidna kama hii: + +```bash +echidna-test gas.sol --config config.yaml +... +echidna_test: passed! 🎉 + +f used a maximum of 1333608 gas + Call sequence: + f(42,123,249) Gas price: 0x10d5733f0a Time delay: 0x495e5 Block delay: 0x88b2 + +Unique instructions: 157 +Unique codehashes: 1 +Seed: -325611019680165325 + +``` + +- Gesi inayoonyeshwa ni makadirio yaliyotolewa na [HEVM](https://github.com/dapphub/dapptools/tree/master/src/hevm#hevm-). + +### Kuchuja Simu zinazopunguza Gesi {#filtering-out-gas-reducing-calls} + +Mafunzo kuhusu **kuchuja chaguo za kukokotoa za kuita wakati wa kampeni ya fuzzing** hapo juu yanaonyesha jinsi ya +kuondoa baadhi ya chaguo za kukokotoa kutoka kwa majaribio yako. +Hii inaweza kuwa muhimu kwa kupata makadirio sahihi ya Gesi. +Fikiria mfano ufuatao: + +```solidity +contract C { + address [] addrs; + function push(address a) public { + addrs.push(a); + } + function pop() public { + addrs.pop(); + } + function clear() public{ + addrs.length = 0; + } + function check() public{ + for(uint256 i = 0; i < addrs.length; i++) + for(uint256 j = i+1; j < addrs.length; j++) + if (addrs[i] == addrs[j]) + addrs[j] = address(0x0); + } + function echidna_test() public returns (bool) { + return true; + } +} +``` + +Ikiwa Echidna inaweza kuita chaguo zote za kukokotoa, haitapata kwa urahisi miamala yenye gharama kubwa ya Gesi: + +``` +echidna-test pushpop.sol --config config.yaml +... +pop used a maximum of 10746 gas +... +check used a maximum of 23730 gas +... +clear used a maximum of 35916 gas +... +push used a maximum of 40839 gas +``` + +Hiyo ni kwa sababu gharama inategemea ukubwa wa `addrs` na simu za nasibu huelekea kuacha safu karibu tupu. +Kuorodhesha `pop` na `clear` nyeusi, hata hivyo, hutupa matokeo bora zaidi: + +```yaml +filterBlacklist: true +filterFunctions: ["pop", "clear"] +``` + +``` +echidna-test pushpop.sol --config config.yaml +... +push used a maximum of 40839 gas +... +check used a maximum of 1484472 gas +``` + +### Muhtasari: Kupata miamala yenye matumizi makubwa ya Gesi {#summary-finding-transactions-with-high-gas-consumption} + +Echidna inaweza kupata miamala yenye matumizi makubwa ya Gesi kwa kutumia chaguo la usanidi la `estimateGas`: + +```yaml +estimateGas: true +``` + +```bash +echidna-test contract.sol --config config.yaml +... +``` + +Echidna itaripoti mfuatano wenye matumizi ya juu zaidi ya Gesi kwa kila chaguo la kukokotoa, mara tu kampeni ya fuzzing itakapokamilika. diff --git a/public/content/translations/sw/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md b/public/content/translations/sw/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md new file mode 100644 index 00000000000..291b3bba0e7 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md @@ -0,0 +1,524 @@ +--- +title: Jinsi ya kutumia Manticore kupata hitilafu katika Mkataba-erevu +description: Jinsi ya kutumia Manticore kupata hitilafu kiotomatiki katika Mkataba-erevu +author: Trailofbits +lang: sw +tags: + [ + "uimara", + "mikataba erevu", + "usalama", + "majaribio", + "uthibitishaji rasmi" + ] +skill: advanced +published: 2020-01-13 +source: Kujenga mikataba salama +sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore +--- + +Lengo la mafunzo haya ni kuonyesha jinsi ya kutumia Manticore kupata hitilafu kiotomatiki katika Mkataba-erevu. + +## Usakinishaji {#installation} + +Manticore inahitaji >= python 3.6. Inaweza kusakinishwa kupitia pip au kwa kutumia docker. + +### Manticore kupitia docker {#manticore-through-docker} + +```bash +docker pull trailofbits/eth-security-toolbox +docker run -it -v "$PWD":/home/training trailofbits/eth-security-toolbox +``` + +_Amri ya mwisho huendesha eth-security-toolbox kwenye docker ambayo ina ufikiaji wa saraka yako ya sasa. Unaweza kubadilisha faili kutoka kwa mwenyeji wako, na uendeshe zana kwenye faili kutoka kwa docker_ + +Ndani ya docker, endesha: + +```bash +solc-select 0.5.11 +cd /home/trufflecon/ +``` + +### Manticore kupitia pip {#manticore-through-pip} + +```bash +pip3 install --user manticore +``` + +solc 0.5.11 inapendekezwa. + +### Kuendesha hati {#running-a-script} + +Ili kuendesha hati ya python na python 3: + +```bash +python3 script.py +``` + +## Utangulizi wa utekelezaji wa ishara wenye nguvu {#introduction-to-dynamic-symbolic-execution} + +### Utekelezaji wa Ishara Wenye Nguvu kwa Kifupi {#dynamic-symbolic-execution-in-a-nutshell} + +Utekelezaji wa ishara wenye nguvu (DSE) ni mbinu ya uchambuzi wa programu ambayo inachunguza nafasi ya hali na kiwango cha juu cha ufahamu wa kisemantiki. Mbinu hii inategemea ugunduzi wa "njia za programu", zinazowakilishwa kama kanuni za hisabati zinazoitwa `path predicates`. Kimsingi, mbinu hii hufanya kazi kwenye viarifu vya njia katika hatua mbili: + +1. Zinajengwa kwa kutumia vikwazo kwenye pembejeo ya programu. +2. Zinatumika kutengeneza pembejeo za programu ambazo zitasababisha njia zinazohusiana kutekelezwa. + +Mbinu hii haitoi chanya za uwongo kwa maana kwamba hali zote za programu zilizotambuliwa zinaweza kuanzishwa wakati wa utekelezaji halisi. Kwa mfano, ikiwa uchambuzi utapata kufurika kwa nambari, imehakikishwa kuwa inaweza kuzalishwa tena. + +### Mfano wa Kiarifu cha Njia {#path-predicate-example} + +Ili kupata maarifa ya jinsi DSE inavyofanya kazi, zingatia mfano ufuatao: + +```solidity +function f(uint a){ + + if (a == 65) { + // Kuna hitilafu + } + +} +``` + +Kwa vile `f()` ina njia mbili, DSE itaunda viarifu viwili tofauti vya njia: + +- Njia ya 1: `a == 65` +- Njia ya 2: `Si (a == 65)` + +Kila kiarifu cha njia ni fomula ya hisabati ambayo inaweza kupewa kile kinachoitwa [SMT solver](https://wikipedia.org/wiki/Satisfiability_modulo_theories), ambayo itajaribu kutatua mlingano. Kwa `Njia 1`, kisuluhishi kitasema kuwa njia inaweza kuchunguzwa na `a = 65`. Kwa `Njia 2`, kisuluhishi kinaweza kutoa `a` thamani yoyote isipokuwa 65, kwa mfano `a = 0`. + +### Kuthibitisha sifa {#verifying-properties} + +Manticore inaruhusu udhibiti kamili juu ya utekelezaji wote wa kila njia. Kwa hivyo, hukuruhusu kuongeza vikwazo vya kiholela kwa karibu kila kitu. Udhibiti huu unaruhusu uundaji wa sifa kwenye mkataba. + +Fikiria mfano ufuatao: + +```solidity +function unsafe_add(uint a, uint b) returns(uint c){ + c = a + b; // hakuna ulinzi wa kufurika + return c; +} +``` + +Hapa kuna njia moja tu ya kuchunguza katika kitendakazi: + +- Njia ya 1: `c = a + b` + +Ukitumia Manticore, unaweza kuangalia kufurika, na kuongeza vikwazo kwa kiarifu cha njia: + +- `c = a + b NA (c < a AU c < b)` + +Ikiwezekana kupata uthamini wa `a` na `b` ambapo kiarifu cha njia hapo juu kinawezekana, inamaanisha kuwa umepata kufurika. Kwa mfano, kisuluhishi kinaweza kutoa ingizo `a = 10, b = MAXUINT256`. + +Ukizingatia toleo lililorekebishwa: + +```solidity +function safe_add(uint a, uint b) returns(uint c){ + c = a + b; + require(c>=a); + require(c>=b); + return c; +} +``` + +Fomula inayohusishwa na ukaguzi wa kufurika itakuwa: + +- `c = a + b NA (c >= a) NA (c=>b) NA (c < a AU c < b)` + +Fomula hii haiwezi kutatuliwa; kwa maneno mengine huu ni **uthibitisho** kwamba katika `safe_add`, `c` itaongezeka kila wakati. + +Kwa hivyo DSE ni zana yenye nguvu, ambayo inaweza kuthibitisha vikwazo vya kiholela kwenye msimbo wako. + +## Inaendeshwa chini ya Manticore {#running-under-manticore} + +Tutaona jinsi ya kuchunguza Mkataba-erevu na API ya Manticore. Lengo ni Mkataba-erevu ufuatao [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): + +```solidity +pragma solidity >=0.4.24 <0.6.0; + +contract Simple { + function f(uint a) payable public{ + if (a == 65) { + revert(); + } + } +} +``` + +### Endesha uchunguzi wa pekee {#run-a-standalone-exploration} + +Unaweza kuendesha Manticore moja kwa moja kwenye Mkataba-erevu kwa amri ifuatayo (`project` inaweza kuwa Faili ya Solidity, au saraka ya mradi): + +```bash +$ manticore project +``` + +Utapata matokeo ya kesi za majaribio kama hii (mpangilio unaweza kubadilika): + +``` +... +... m.c.manticore:INFO: Generated testcase No. 0 - STOP +... m.c.manticore:INFO: Generated testcase No. 1 - REVERT +... m.c.manticore:INFO: Generated testcase No. 2 - RETURN +... m.c.manticore:INFO: Generated testcase No. 3 - REVERT +... m.c.manticore:INFO: Generated testcase No. 4 - STOP +... m.c.manticore:INFO: Generated testcase No. 5 - REVERT +... m.c.manticore:INFO: Generated testcase No. 6 - REVERT +... m.c.manticore:INFO: Results in /home/ethsec/workshops/Automated Smart Contracts Audit - TruffleCon 2018/manticore/examples/mcore_t6vi6ij3 +... +``` + +Bila maelezo ya ziada, Manticore itachunguza mkataba na miamala mipya ya ishara +hadi isichugunze njia mpya kwenye mkataba. Manticore haiendeshi miamala mipya baada ya ule ulioshindwa (k.m: baada ya kurudishwa). + +Manticore itatoa taarifa katika saraka ya `mcore_*`. Miongoni mwa mengine, utapata katika saraka hii: + +- `global.summary`: ufikiaji na maonyo ya mkusanyaji +- `test_XXXXX.summary`: ufikiaji, maagizo ya mwisho, salio za akaunti kwa kila kesi ya jaribio +- `test_XXXXX.tx`: orodha ya kina ya miamala kwa kila kesi ya jaribio + +Hapa Manticore ilipata kesi 7 za majaribio, ambazo zinalingana na (mpangilio wa jina la faili unaweza kubadilika): + +| | Muamala 0 | Muamala 1 | Muamala 2 | Matokeo | +| :-------------------------------------------------------: | :----------------: | :------------------------: | -------------------------- | :-----: | +| **test_00000000.tx** | Uundaji wa mkataba | f(!=65) | f(!=65) | STOP | +| **test_00000001.tx** | Uundaji wa mkataba | kitendaji cha kurudi nyuma | | REVERT | +| **test_00000002.tx** | Uundaji wa mkataba | | | RETURN | +| **test_00000003.tx** | Uundaji wa mkataba | f(65) | | REVERT | +| **test_00000004.tx** | Uundaji wa mkataba | f(!=65) | | STOP | +| **test_00000005.tx** | Uundaji wa mkataba | f(!=65) | f(65) | REVERT | +| **test_00000006.tx** | Uundaji wa mkataba | f(!=65) | kitendaji cha kurudi nyuma | REVERT | + +_Muhtasari wa uchunguzi f(!=65) unaashiria f kuitwa na thamani yoyote tofauti na 65._ + +Kama unavyoweza kuona, Manticore inazalisha kesi ya kipekee ya majaribio kwa kila muamala uliofaulu au uliorudishwa. + +Tumia alama ya `--quick-mode` ikiwa unataka uchunguzi wa haraka wa msimbo (huzima vitambua hitilafu, ukokotoaji wa gesi, ...) + +### Kudhibiti Mkataba-erevu kupitia API {#manipulate-a-smart-contract-through-the-api} + +Sehemu hii inaelezea kwa undani jinsi ya kudhibiti Mkataba-erevu kupitia API ya Python ya Manticore. Unaweza kuunda faili mpya yenye kiendelezi cha python `*.py` na uandike msimbo unaohitajika kwa kuongeza amri za API (misingi yake itaelezwa hapa chini) kwenye faili hii na kisha kuiendesha kwa amri ya `$ python3 *.py`. Pia unaweza kutekeleza amri zilizo hapa chini moja kwa moja kwenye konsoli ya python, ili kuendesha konsoli tumia amri ya `$ python3`. + +### Kuunda Akaunti {#creating-accounts} + +Jambo la kwanza unapaswa kufanya ni kuanzisha mnyororo wa bloku mpya na amri zifuatazo: + +```python +from manticore.ethereum import ManticoreEVM + +m = ManticoreEVM() +``` + +Akaunti isiyo ya mkataba inaundwa kwa kutumia [m.create_account](https://manticore.readthedocs.io/en/latest/evm.html?highlight=create_account#manticore.ethereum.ManticoreEVM.create_account): + +```python +user_account = m.create_account(balance=1000) +``` + +Mkataba wa Solidity unaweza kusambazwa kwa kutumia [m.solidity_create_contract](https://manticore.readthedocs.io/en/latest/evm.html?highlight=solidity_create#manticore.ethereum.ManticoreEVM.create_contract): + +```solidity +source_code = ''' +pragma solidity >=0.4.24 <0.6.0; +contract Simple { + function f(uint a) payable public{ + if (a == 65) { + revert(); + } + } +} +''' +# Anzisha mkataba +contract_account = m.solidity_create_contract(source_code, owner=user_account) +``` + +#### Muhtasari {#summary} + +- Unaweza kuunda akaunti za mtumiaji na akaunti za mkataba kwa kutumia [m.create_account](https://manticore.readthedocs.io/en/latest/evm.html?highlight=create_account#manticore.ethereum.ManticoreEVM.create_account) na [m.solidity_create_contract](https://manticore.readthedocs.io/en/latest/evm.html?highlight=solidity_create#manticore.ethereum.ManticoreEVM.create_contract). + +### Kutekeleza miamala {#executing-transactions} + +Manticore inasaidia aina mbili za miamala: + +- Muamala ghafi: vitendakazi vyote vinachunguzwa +- Muamala wenye jina: kitendakazi kimoja tu ndicho kinachunguzwa + +#### Muamala ghafi {#raw-transaction} + +Muamala ghafi unatekelezwa kwa kutumia [m.transaction](https://manticore.readthedocs.io/en/latest/evm.html?highlight=transaction#manticore.ethereum.ManticoreEVM.transaction): + +```python +m.transaction(caller=user_account, + address=contract_account, + data=data, + value=value) +``` + +Mpigaji simu, anwani, data, au thamani ya muamala inaweza kuwa halisi au ya kiishara: + +- [m.make_symbolic_value](https://manticore.readthedocs.io/en/latest/evm.html?highlight=make_symbolic_value#manticore.ethereum.ManticoreEVM.make_symbolic_value) huunda thamani ya kiishara. +- [m.make_symbolic_buffer(size)](https://manticore.readthedocs.io/en/latest/evm.html?highlight=make_symbolic_buffer#manticore.ethereum.ManticoreEVM.make_symbolic_buffer) huunda safu ya baiti ya kiishara. + +Kwa mfano: + +```python +symbolic_value = m.make_symbolic_value() +symbolic_data = m.make_symbolic_buffer(320) +m.transaction(caller=user_account, + address=contract_address, + data=symbolic_data, + value=symbolic_value) +``` + +Ikiwa data ni ya kiishara, Manticore itachunguza vitendakazi vyote vya mkataba wakati wa utekelezaji wa muamala. Itakuwa na msaada kuona maelezo ya Kitendaji cha Kurudi Nyuma katika makala ya [Hands on the Ethernaut CTF](https://blog.trailofbits.com/2017/11/06/hands-on-the-ethernaut-ctf/) kwa kuelewa jinsi uteuzi wa kitendakazi unavyofanya kazi. + +#### Muamala wenye jina {#named-transaction} + +Vitendakazi vinaweza kutekelezwa kupitia jina lao. +Ili kutekeleza `f(uint var)` na thamani ya kiishara, kutoka user_account, na ether 0, tumia: + +```python +symbolic_var = m.make_symbolic_value() +contract_account.f(symbolic_var, caller=user_account, value=0) +``` + +Ikiwa `thamani` ya muamala haijaainishwa, ni 0 kwa chaguo-msingi. + +#### Muhtasari {#summary-1} + +- Hoja za muamala zinaweza kuwa halisi au za kiishara +- Muamala ghafi utachunguza vitendakazi vyote +- Kitendakazi kinaweza kuitwa kwa jina lake + +### Eneo la kazi {#workspace} + +`m.workspace` ni saraka inayotumika kama saraka ya matokeo kwa faili zote zinazozalishwa: + +```python +print("Matokeo yako katika {}".format(m.workspace)) +``` + +### Sisha Uchunguzi {#terminate-the-exploration} + +Ili kusimamisha uchunguzi tumia [m.finalize()](https://manticore.readthedocs.io/en/latest/evm.html?highlight=finalize#manticore.ethereum.ManticoreEVM.finalize). Hakuna miamala zaidi inapaswa kutumwa mara tu mbinu hii inapoitwa na Manticore hutoa kesi za majaribio kwa kila njia iliyochunguzwa. + +### Muhtasari: Inaendeshwa chini ya Manticore {#summary-running-under-manticore} + +Kuweka hatua zote zilizopita pamoja, tunapata: + +```python +from manticore.ethereum import ManticoreEVM + +m = ManticoreEVM() + +with open('example.sol') as f: + source_code = f.read() + +user_account = m.create_account(balance=1000) +contract_account = m.solidity_create_contract(source_code, owner=user_account) + +symbolic_var = m.make_symbolic_value() +contract_account.f(symbolic_var) + +print("Matokeo yako katika {}".format(m.workspace)) +m.finalize() # simamisha uchunguzi +``` + +Msimbo wote hapo juu unaweza kuupata katika [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) + +## Kupata njia za kurusha {#getting-throwing-paths} + +Sasa tutatoa pembejeo maalum kwa njia zinazoibua ubaguzi katika `f()`. Lengo bado ni Mkataba-erevu ufuatao [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): + +```solidity +pragma solidity >=0.4.24 <0.6.0; +contract Simple { + function f(uint a) payable public{ + if (a == 65) { + revert(); + } + } +} +``` + +### Kutumia taarifa ya hali {#using-state-information} + +Kila njia inayotekelezwa ina hali yake ya mnyororo wa bloku. Hali iko tayari au inauawa, ikimaanisha kwamba inafikia maagizo ya KUTUPA au KURUDISHA: + +- [m.ready_states](https://manticore.readthedocs.io/en/latest/states.html#accessing): orodha ya hali ambazo ziko tayari (hazikutekeleza REVERT/INVALID) +- [m.killed_states](https://manticore.readthedocs.io/en/latest/states.html#accessings): orodha ya hali ambazo zimeuawa +- [m.all_states](https://manticore.readthedocs.io/en/latest/states.html#accessings): hali zote + +```python +for state in m.all_states: + # fanya kitu na hali +``` + +Unaweza kufikia maelezo ya hali. Kwa mfano: + +- `state.platform.get_balance(account.address)`: salio la akaunti +- `state.platform.transactions`: orodha ya miamala +- `state.platform.transactions[-1].return_data`: data iliyorejeshwa na muamala wa mwisho + +Data iliyorejeshwa na muamala wa mwisho ni safu, ambayo inaweza kubadilishwa kuwa thamani na ABI.deserialize, kwa mfano: + +```python +data = state.platform.transactions[0].return_data +data = ABI.deserialize("uint", data) +``` + +### Jinsi ya kuzalisha kesi ya majaribio {#how-to-generate-testcase} + +Tumia [m.generate_testcase(state, name)](https://manticore.readthedocs.io/en/latest/evm.html?highlight=generate_testcase#manticore.ethereum.ManticoreEVM.generate_testcase) kuzalisha kesi ya majaribio: + +```python +m.generate_testcase(state, 'BugFound') +``` + +### Muhtasari {#summary-2} + +- Unaweza kurudia hali kwa m.all_states +- `state.platform.get_balance(account.address)` inarudisha salio la akaunti +- `state.platform.transactions` inarudisha orodha ya miamala +- `transaction.return_data` ni data iliyorejeshwa +- `m.generate_testcase(state, name)` inazalisha pembejeo za hali + +### Muhtasari: Kupata Njia ya Kutupa {#summary-getting-throwing-path} + +```python +from manticore.ethereum import ManticoreEVM + +m = ManticoreEVM() + +with open('example.sol') as f: + source_code = f.read() + +user_account = m.create_account(balance=1000) +contract_account = m.solidity_create_contract(source_code, owner=user_account) + +symbolic_var = m.make_symbolic_value() +contract_account.f(symbolic_var) + +## Angalia ikiwa utekelezaji unaisha na REVERT au INVALID +for state in m.terminated_states: + last_tx = state.platform.transactions[-1] + if last_tx.result in ['REVERT', 'INVALID']: + print('Tupa imepatikana {}'.format(m.workspace)) + m.generate_testcase(state, 'ThrowFound') +``` + +Msimbo wote ulio hapo juu unaweza kuupata kwenye [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) + +_Kumbuka tungeweza kutoa hati rahisi zaidi, kwani hali zote zilizorejeshwa na terminated_state zina REVERT au INVALID katika matokeo yao: mfano huu ulikusudiwa tu kuonyesha jinsi ya kuendesha API._ + +## Kuongeza vikwazo {#adding-constraints} + +Tutaona jinsi ya kuzuia uchunguzi. Tutafanya dhana kwamba nyaraka +za `f()` inasema kwamba kitendakazi hakijaitwa kamwe na `a == 65`, kwa hivyo hitilafu yoyote na `a == 65` sio hitilafu halisi. Lengo bado ni Mkataba-erevu ufuatao [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol): + +```solidity +pragma solidity >=0.4.24 <0.6.0; +contract Simple { + function f(uint a) payable public{ + if (a == 65) { + revert(); + } + } +} +``` + +### Waendeshaji {#operators} + +Sehemu ya [Operators](https://github.com/trailofbits/manticore/blob/master/manticore/core/smtlib/operators.py) hurahisisha upotoshaji wa vikwazo, miongoni mwa vingine hutoa: + +- Operators.NA, +- Operators.AU, +- Operators.UGT (kubwa kuliko isiyo na alama), +- Operators.UGE (kubwa kuliko au sawa na isiyo na alama), +- Operators.ULT (chini kuliko isiyo na alama), +- Operators.ULE (chini kuliko au sawa na isiyo na alama). + +Ili kuingiza moduli tumia yafuatayo: + +```python +from manticore.core.smtlib import Operators +``` + +`Operators.CONCAT` hutumiwa kuunganisha safu kwa thamani. Kwa mfano, return_data ya muamala inahitaji kubadilishwa kuwa thamani ili kuangaliwa dhidi ya thamani nyingine: + +```python +last_return = Operators.CONCAT(256, *last_return) +``` + +### Vikwazo {#state-constraint} + +Unaweza kutumia vikwazo kimataifa au kwa hali maalum. + +#### Kikwazo cha kimataifa {#state-constraint} + +Tumia `m.constrain(constraint)` kuongeza kikwazo cha kimataifa. +Kwa mfano, unaweza kuita mkataba kutoka kwa anwani ya ishara, na kuzuia anwani hii kuwa na maadili maalum: + +```python +symbolic_address = m.make_symbolic_value() +m.constraint(Operators.OR(symbolic == 0x41, symbolic_address == 0x42)) +m.transaction(caller=user_account, + address=contract_account, + data=m.make_symbolic_buffer(320), + value=0) +``` + +#### Kikwazo cha hali {#state-constraint} + +Tumia [state.constrain(constraint)](https://manticore.readthedocs.io/en/latest/states.html?highlight=StateBase#manticore.core.state.StateBase.constrain) kuongeza kikwazo kwa hali maalum. +Inaweza kutumika kuzuia hali baada ya uchunguzi wake kuangalia mali fulani juu yake. + +### Kuangalia Kikwazo {#checking-constraint} + +Tumia `solver.check(state.constraints)` kujua kama kikwazo bado kinawezekana. +Kwa mfano, yafuatayo yatazuia symbolic_value kuwa tofauti na 65 na kuangalia kama hali bado inawezekana: + +```python +state.constrain(symbolic_var != 65) +if solver.check(state.constraints): + # hali inawezekana +``` + +### Muhtasari: Kuongeza Vikwazo {#summary-adding-constraints} + +Kuongeza kikwazo kwa msimbo uliopita, tunapata: + +```python +from manticore.ethereum import ManticoreEVM +from manticore.core.smtlib.solver import Z3Solver + +solver = Z3Solver.instance() + +m = ManticoreEVM() + +with open("example.sol") as f: + source_code = f.read() + +user_account = m.create_account(balance=1000) +contract_account = m.solidity_create_contract(source_code, owner=user_account) + +symbolic_var = m.make_symbolic_value() +contract_account.f(symbolic_var) + +no_bug_found = True + +## Angalia ikiwa utekelezaji unaisha na REVERT au INVALID +for state in m.terminated_states: + last_tx = state.platform.transactions[-1] + if last_tx.result in ['REVERT', 'INVALID']: + # hatuzingatii njia ambapo a == 65 + condition = symbolic_var != 65 + if m.generate_testcase(state, name="BugFound", only_if=condition): + print(f'Hitilafu imepatikana, matokeo yapo kwenye {m.workspace}') + no_bug_found = False + +if no_bug_found: + print(f'Hakuna hitilafu iliyopatikana') +``` + +Msimbo wote ulio hapo juu unaweza kuupata kwenye [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) diff --git a/public/content/translations/sw/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md b/public/content/translations/sw/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md new file mode 100644 index 00000000000..bedd5c86a8c --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md @@ -0,0 +1,233 @@ +--- +title: Jinsi ya kutumia Slither kupata hitilafu za mkataba-erevu +description: Jinsi ya kutumia Slither kupata hitilafu kiotomatiki katika mikataba-erevu +author: Trailofbits +lang: sw +tags: [ "uimara", "mikataba erevu", "usalama", "majaribio" ] +skill: advanced +published: 2020-06-09 +source: Kujenga mikataba salama +sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither +--- + +## Jinsi ya kutumia Slither {#how-to-use-slither} + +Lengo la mafunzo haya ni kuonyesha jinsi ya kutumia Slither kupata hitilafu kiotomatiki katika mikataba-erevu. + +- [Usakinishaji](#installation) +- [Matumizi ya mstari wa amri](#command-line) +- [Utangulizi wa uchambuzi tuli](#static-analysis): Utangulizi mfupi wa uchambuzi tuli +- [API](#api-basics): Maelezo ya API ya Python + +## Usakinishaji {#installation} + +Slither inahitaji Python >= 3.6. Inaweza kusakinishwa kupitia pip au kwa kutumia docker. + +Slither kupitia pip: + +```bash +pip3 install --user slither-analyzer +``` + +Slither kupitia docker: + +```bash +docker pull trailofbits/eth-security-toolbox +docker run -it -v "$PWD":/home/trufflecon trailofbits/eth-security-toolbox +``` + +_Amri ya mwisho huendesha eth-security-toolbox kwenye docker ambayo ina ufikiaji wa saraka yako ya sasa. Unaweza kubadilisha faili kutoka kwa mwenyeji wako, na uendeshe zana kwenye faili kutoka kwa docker_ + +Ndani ya docker, endesha: + +```bash +solc-select 0.5.11 +cd /home/trufflecon/ +``` + +### Kuendesha hati {#running-a-script} + +Ili kuendesha hati ya python na python 3: + +```bash +python3 script.py +``` + +### Mstari wa amri {#command-line} + +**Mstari wa amri dhidi ya hati zilizobainishwa na mtumiaji.** Slither inakuja na seti ya vitambuzi vilivyobainishwa awali vinavyopata hitilafu nyingi za kawaida. Kuita Slither kutoka kwa mstari wa amri kutaendesha vitambuzi vyote, hakuna ujuzi wa kina wa uchambuzi tuli unaohitajika: + +```bash +slither project_paths +``` + +Mbali na vitambuzi, Slither ina uwezo wa kukagua msimbo kupitia [printers](https://github.com/crytic/slither#printers) na [zana](https://github.com/crytic/slither#tools) zake. + +Tumia [crytic.io](https://github.com/crytic) ili kupata ufikiaji wa vitambuzi vya faragha na muunganisho wa GitHub. + +## Uchambuzi tuli {#static-analysis} + +Uwezo na muundo wa mfumo wa uchambuzi tuli wa Slither umeelezewa katika machapisho ya blogu ([1](https://blog.trailofbits.com/2018/10/19/slither-a-solidity-static-analysis-framework/), [2](https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/)) na [karatasi ya kitaaluma](https://github.com/trailofbits/publications/blob/master/papers/wetseb19.pdf). + +Uchambuzi tuli upo katika aina tofauti. Pengine unagundua kwamba vikompilaji kama [clang](https://clang-analyzer.llvm.org/) na [gcc](https://lwn.net/Articles/806099/) hutegemea mbinu hizi za utafiti, lakini pia inasaidia ([Infer](https://fbinfer.com/), [CodeClimate](https://codeclimate.com/), [FindBugs](http://findbugs.sourceforge.net/) na zana zinazotegemea mbinu rasmi kama vile [Frama-C](https://frama-c.com/) na [Polyspace](https://www.mathworks.com/products/polyspace.html). + +Hatutakuwa tukikagua kwa kina mbinu za uchambuzi tuli na watafiti hapa. Badala yake, tutazingatia kile kinachohitajika kuelewa jinsi Slither inavyofanya kazi ili uweze kuitumia kwa ufanisi zaidi kupata hitilafu na kuelewa msimbo. + +- [Uwakilishi wa msimbo](#code-representation) +- [Uchambuzi wa msimbo](#analysis) +- [Uwakilishi wa kati](#intermediate-representation) + +### Uwakilishi wa msimbo {#code-representation} + +Tofauti na uchambuzi wenye mabadiliko, unaozingatia njia moja ya utekelezaji, uchambuzi tuli huzingatia njia zote kwa wakati mmoja. Ili kufanya hivyo, inategemea uwakilishi tofauti wa msimbo. Mbili za kawaida zaidi ni mti wa sintaksia dhahania (AST) na grafu ya mtiririko wa udhibiti (CFG). + +### Miti ya Sintaksia Dhahania (AST) {#abstract-syntax-trees-ast} + +AST hutumika kila wakati kikompilaji kinapochanganua msimbo. Pengine ndiyo muundo wa msingi zaidi ambao uchambuzi tuli unaweza kufanywa. + +Kwa ufupi, AST ni mti uliopangiliwa ambapo, kwa kawaida, kila jani lina kigezo au thamani isiyobadilika na nodi za ndani ni viendeshaji au shughuli za mtiririko wa udhibiti. Zingatia msimbo ufuatao: + +```solidity +function safeAdd(uint a, uint b) pure internal returns(uint){ + if(a + b <= a){ + revert(); + } + return a + b; +} +``` + +AST inayolingana inaonyeshwa katika: + +![AST](./ast.png) + +Slither hutumia AST inayosafirishwa na solc. + +Ingawa ni rahisi kuunda, AST ni muundo uliowekwa ndani. Wakati mwingine, hii siyo njia rahisi zaidi ya kuchambua. Kwa mfano, ili kubaini shughuli zinazotumiwa na usemi `a + b <= a`, lazima kwanza uchanganue `<=` na kisha `+`. Njia ya kawaida ni kutumia kinachoitwa muundo wa mtembeleaji, ambao hupitia mti kwa kujirudia. Slither ina mtembeleaji wa jumla katika [`ExpressionVisitor`](https://github.com/crytic/slither/blob/master/slither/visitors/expression/expression.py). + +Msimbo ufuatao unatumia `ExpressionVisitor` kugundua kama usemi una nyongeza: + +```python +from slither.visitors.expression.expression import ExpressionVisitor +from slither.core.expressions.binary_operation import BinaryOperationType + +class HasAddition(ExpressionVisitor): + + def result(self): + return self._result + + def _post_binary_operation(self, expression): + if expression.type == BinaryOperationType.ADDITION: + self._result = True + +visitor = HasAddition(expression) # expression is the expression to be tested +print(f'The expression {expression} has a addition: {visitor.result()}') +``` + +### Grafu ya Mtiririko wa Udhibiti (CFG) {#control-flow-graph-cfg} + +Uwakilishi wa pili wa kawaida wa msimbo ni grafu ya mtiririko wa udhibiti (CFG). Kama jina lake linavyopendekeza, ni uwakilishi unaotegemea grafu unaoonyesha njia zote za utekelezaji. Kila nodi ina maagizo moja au zaidi. Pande katika grafu zinawakilisha shughuli za mtiririko wa udhibiti (kama/basi/vinginevyo, kitanzi, n.k). CFG ya mfano wetu uliopita ni: + +![CFG](./cfg.png) + +CFG ndio uwakilishi ambao juu yake uchambuzi mwingi hujengwa. + +Uwakilishi mwingine mwingi wa msimbo upo. Kila uwakilishi una faida na hasara kulingana na uchambuzi unaotaka kufanya. + +### Uchambuzi {#analysis} + +Aina rahisi zaidi ya uchambuzi unaweza kufanya na Slither ni uchambuzi wa sintaksia. + +### Uchambuzi wa sintaksia {#syntax-analysis} + +Slither inaweza kupitia vipengele tofauti vya msimbo na uwakilishi wao ili kupata kutofautiana na kasoro kwa kutumia mbinu inayofanana na ulinganishaji wa muundo. + +Kwa mfano, vitambuzi vifuatavyo hutafuta masuala yanayohusiana na sintaksia: + +- [Ufunikaji wa kigezo cha hali](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing): hupitia vigezo vyote vya hali na kuangalia kama kigezo chochote kinafunika kigezo kutoka kwa mkataba uliorithiwa ([state.py#L51-L62](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/shadowing/state.py#L51-L62)) + +- [Kiolesura cha ERC20 kisicho sahihi](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface): tafuta saini za chaguo la kukokotoa za ERC20 zisizo sahihi ([incorrect_erc20_interface.py#L34-L55](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/erc/incorrect_erc20_interface.py#L34-L55)) + +### Uchambuzi wa maana {#semantic-analysis} + +Tofauti na uchambuzi wa sintaksia, uchambuzi wa maana utaenda ndani zaidi na kuchambua "maana" ya msimbo. Familia hii inajumuisha aina pana za uchambuzi. Zinapelekea matokeo yenye nguvu zaidi na muhimu, lakini pia ni ngumu zaidi kuandika. + +Uchambuzi wa maana hutumika kwa utambuzi wa hali ya juu zaidi ya udhaifu. + +#### Uchambuzi wa utegemezi wa data {#fixed-point-computation} + +Kigezo `variable_a` kinasemekana kuwa kinategemea data ya `variable_b` ikiwa kuna njia ambayo thamani ya `variable_a` inaathiriwa na `variable_b`. + +Katika msimbo ufuatao, `variable_a` inategemea `variable_b`: + +```solidity +// ... +variable_a = variable_b + 1; +``` + +Slither inakuja na uwezo uliojengewa ndani wa [utegemezi wa data](https://github.com/crytic/slither/wiki/data-dependency), shukrani kwa uwakilishi wake wa kati (utakaoshughulikiwa katika sehemu ya baadaye). + +Mfano wa matumizi ya utegemezi wa data unaweza kupatikana katika [kitambuzi hatari cha usawa mkali](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities). Hapa Slither itatafuta ulinganisho wa usawa mkali na thamani hatari ([incorrect_strict_equality.py#L86-L87](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L86-L87)), na itamjulisha mtumiaji kwamba anapaswa kutumia `>=` au `<=` badala ya `==`, ili kumzuia mshambulizi asitege mkataba. Miongoni mwa mambo mengine, kitambuzi kitazingatia thamani ya kurejesha ya mwito kwa `balanceOf(address)` kuwa hatari ([incorrect_strict_equality.py#L63-L64](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L63-L64)), na itatumia injini ya utegemezi wa data kufuatilia matumizi yake. + +#### Hesabu ya nukta isiyobadilika {#fixed-point-computation} + +Ikiwa uchambuzi wako unapitia CFG na kufuata pande, kuna uwezekano wa kuona nodi ambazo tayari zimetembelewa. Kwa mfano, ikiwa kitanzi kinaonyeshwa kama ilivyo hapo chini: + +```solidity +for(uint i; i < range; ++){ + variable_a += 1 +} +``` + +Uchambuzi wako utahitaji kujua wakati wa kusimama. Kuna mikakati miwili mikuu hapa: (1) kurudia kwenye kila nodi idadi maalum ya mara, (2) kuhesabu kinachoitwa _nukta isiyobadilika_. Nukta isiyobadilika kimsingi inamaanisha kuwa kuchambua nodi hii hakutoi taarifa yoyote ya maana. + +Mfano wa nukta isiyobadilika iliyotumiwa unaweza kupatikana katika vitambuzi vya uingiaji tena: Slither inachunguza nodi, na kutafuta miito ya nje, kuandika na kusoma kwenye ghala. Mara tu inapofikia nukta isiyobadilika ([reentrancy.py#L125-L131](https://github.com/crytic/slither/blob/master/slither/detectors/reentrancy/reentrancy.py#L125-L131)), inasitisha uchunguzi, na kuchambua matokeo ili kuona kama kuna uingiaji tena, kupitia miundo tofauti ya uingiaji tena ([reentrancy_benign.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_benign.py), [reentrancy_read_before_write.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_read_before_write.py), [reentrancy_eth.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_eth.py)). + +Kuandika uchambuzi kwa kutumia hesabu ya nukta isiyobadilika inayofaa kunahitaji uelewa mzuri wa jinsi uchambuzi unavyoeneza taarifa zake. + +### Uwakilishi wa kati {#intermediate-representation} + +Uwakilishi wa kati (IR) ni lugha inayokusudiwa kuwa rahisi zaidi kwa uchambuzi tuli kuliko ile ya asili. Slither hutafsiri Solidity kuwa IR yake mwenyewe: [SlithIR](https://github.com/crytic/slither/wiki/SlithIR). + +Kuelewa SlithIR si lazima ikiwa unataka tu kuandika ukaguzi wa msingi. Hata hivyo, itakuwa muhimu ikiwa unapanga kuandika uchambuzi wa maana wa hali ya juu. Vichapishi vya [SlithIR](https://github.com/crytic/slither/wiki/Printer-documentation#slithir) na [SSA](https://github.com/crytic/slither/wiki/Printer-documentation#slithir-ssa) vitakusaidia kuelewa jinsi msimbo unavyotafsiriwa. + +## Misingi ya API {#api-basics} + +Slither ina API inayokuruhusu kuchunguza sifa za msingi za mkataba na chaguo zake za kukokotoa. + +Ili kupakia codebase: + +```python +from slither import Slither +slither = Slither('/path/to/project') + +``` + +### Kuchunguza mikataba na chaguo za kukokotoa {#exploring-contracts-and-functions} + +Kitu cha `Slither` kina: + +- `contracts (orodha(Mkataba)`: orodha ya mikataba +- `contracts_derived (orodha(Mkataba)`: orodha ya mikataba ambayo haijarithiwa na mkataba mwingine (sehemu ndogo ya mikataba) +- `get_contract_from_name (str)`: Rudisha mkataba kutoka kwa jina lake + +Kitu cha `Mkataba` kina: + +- `name (str)`: Jina la mkataba +- `functions (orodha(Chaguo la Kukokotoa))`: Orodha ya chaguo za kukokotoa +- `modifiers (orodha(Kibadilishi))`: Orodha ya vibadilishi +- `all_functions_called (orodha(Chaguo la Kukokotoa/Kibadilishi))`: Orodha ya chaguo zote za kukokotoa za ndani zinazoweza kufikiwa na mkataba +- `inheritance (orodha(Mkataba))`: Orodha ya mikataba iliyorithiwa +- `get_function_from_signature (str)`: Rudisha Chaguo la Kukokotoa kutoka kwa saini yake +- `get_modifier_from_signature (str)`: Rudisha Kibadilishi kutoka kwa saini yake +- `get_state_variable_from_name (str)`: Rudisha Kigezo cha Hali kutoka kwa jina lake + +Kitu cha `Chaguo la Kukokotoa` au `Kibadilishi` kina: + +- `name (str)`: Jina la chaguo la kukokotoa +- `contract (mkataba)`: mkataba ambapo chaguo la kukokotoa linatangazwa +- `nodes (orodha(Nodi))`: Orodha ya nodi zinazounda CFG ya chaguo la kukokotoa/kibadilishi +- `entry_point (Nodi)`: Sehemu ya kuingilia ya CFG +- `variables_read (orodha(Kigezo))`: Orodha ya vigezo vilivyosomwa +- `variables_written (orodha(Kigezo))`: Orodha ya vigezo vilivyoandikwa +- `state_variables_read (orodha(KigezoChaHali))`: Orodha ya vigezo vya hali vilivyosomwa (sehemu ndogo ya vigezo vilivyosomwa) +- `state_variables_written (orodha(KigezoChaHali))`: Orodha ya vigezo vya hali vilivyoandikwa (sehemu ndogo ya vigezo vilivyoandikwa) diff --git a/public/content/translations/sw/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md b/public/content/translations/sw/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md new file mode 100644 index 00000000000..0452385fd50 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md @@ -0,0 +1,81 @@ +--- +title: Jinsi ya Kusanidi Tellor kama Oracle yako +description: Mwongozo wa jinsi ya kuanza kuunganisha oracle ya Tellor kwenye itifaki yako +author: "Tellor" +lang: sw +tags: [ "uimara", "mikataba erevu", "oracles" ] +skill: beginner +published: 2021-06-29 +source: Tellor Docs +sourceUrl: https://docs.tellor.io/tellor/ +--- + +Swali la Ghafla: Itifaki yako iko karibu kukamilika, lakini inahitaji oracle ili kupata data ya offchain... Utafanya nini? + +## (Masharti Yasiyo ya Lazima) {#soft-prerequisites} + +Chapisho hili linalenga kufanya upatikanaji wa mlisho wa oracle uwe rahisi na wa moja kwa moja iwezekanavyo. Pamoja na hayo, tunadhania yafuatayo kuhusu kiwango cha ujuzi wako wa uandishi wa msimbo ili kuzingatia kipengele cha oracle. + +Mawazo: + +- unaweza kutumia terminal +- una npm iliyosakinishwa +- unajua jinsi ya kutumia npm kudhibiti vitegemezi + +Tellor ni oracle inayofanya kazi na ya chanzo-wazi ambayo iko tayari kwa utekelezaji. Mwongozo huu wa wanaoanza upo ili kuonyesha urahisi wa kuanza kutumia Tellor, na kuupa mradi wako oracle yenye ugatuaji kamili na isiyoweza kudhibitiwa. + +## Muhtasari {#overview} + +Tellor ni mfumo wa oracle ambapo pande zinaweza kuomba thamani ya nukta ya data ya offchain (k.m., BTC/USD) na waripoti hushindana kuongeza thamani hii kwenye benki ya data ya onchain, inayopatikana kwa mikataba-erevu yote ya Ethereum. Pembejeo za benki hii ya data zinalindwa na mtandao wa waripoti walioweka hisa. Tellor hutumia mifumo ya motisha ya kiuchumi ya crypto, ikiwatuza waripoti wanaowasilisha data kwa uaminifu na kuwaadhibu wahusika wabaya kupitia utoaji wa tokeni ya Tellor, Tributes (TRB), na utaratibu wa kutatua mizozo. + +Katika mafunzo haya tutapitia: + +- Kusanidi zana za awali utakazohitaji ili kuanza kutumia. +- Kupitia mfano rahisi. +- Orodhesha anwani za testnet za mitandao unayoweza kujaribu Tellor kwa sasa. + +## KutumiaTellor {#usingtellor} + +Jambo la kwanza utakalotaka kufanya ni kusakinisha zana za msingi zinazohitajika ili kutumia Tellor kama oracle yako. Tumia [kifurushi hiki](https://github.com/tellor-io/usingtellor) kusakinisha Mikataba ya Watumiaji wa Tellor: + +`npm install usingtellor` + +Baada ya kusakinishwa, hii itaruhusu mikataba yako kurithi kazi kutoka kwa mkataba wa 'UsingTellor'. + +Safi sana! Sasa kwa kuwa una zana tayari, hebu tupitie zoezi rahisi ambapo tunapata bei ya bitcoin: + +### Mfano wa BTC/USD {#btcusd-example} + +Rithi mkataba wa UsingTellor, ukipitisha anwani ya Tellor kama hoja ya mjenzi: + +Mfano huu hapa: + +```solidity +import "usingtellor/contracts/UsingTellor.sol"; + +contract PriceContract is UsingTellor { + uint256 public btcPrice; + + //Mkataba huu sasa una uwezo wa kufikia kazi zote katika UsingTellor + +constructor(address payable _tellorAddress) UsingTellor(_tellorAddress) public {} + +function setBtcPrice() public { + bytes memory _b = abi.encode("SpotPrice",abi.encode("btc","usd")); + bytes32 _queryId = keccak256(_b); + + uint256 _timestamp; + bytes _value; + + (_value, _timestamp) = getDataBefore(_queryId, block.timestamp - 15 minutes); + + btcPrice = abi.decode(_value,(uint256)); + } +} +``` + +Kwa orodha kamili ya anwani za mkataba rejelea [hapa](https://docs.tellor.io/tellor/the-basics/contracts-reference). + +Kwa urahisi wa matumizi, repo ya UsingTellor inakuja na toleo la mkataba wa [Tellor Playground](https://github.com/tellor-io/TellorPlayground) kwa uunganisho rahisi. Tazama [hapa](https://github.com/tellor-io/sampleUsingTellor#tellor-playground) kwa orodha ya kazi muhimu. + +Kwa utekelezaji thabiti zaidi wa oracle ya Tellor, angalia orodha kamili ya kazi zinazopatikana [hapa](https://github.com/tellor-io/usingtellor/blob/master/README.md). diff --git a/public/content/translations/sw/developers/tutorials/how-to-view-nft-in-metamask/index.md b/public/content/translations/sw/developers/tutorials/how-to-view-nft-in-metamask/index.md new file mode 100644 index 00000000000..8c4545620b7 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-view-nft-in-metamask/index.md @@ -0,0 +1,33 @@ +--- +title: Jinsi ya Kuona NFT Yako katika Pochi Yako (Sehemu ya 3/3 ya Mfululizo wa Mafunzo ya NFT) +description: Mafunzo haya yanaelezea jinsi ya kuona NFT iliyopo kwenye MetaMask! +author: "Sumi Mudgil" +tags: [ "ERC-721", "Alchemy", "Uimara" ] +skill: beginner +lang: sw +published: 2021-04-22 +--- + +Mafunzo haya ni Sehemu ya 3/3 katika mfululizo wa Mafunzo ya NFT, ambapo tunaona NFT yetu mpya iliyotengenezwa. Hata hivyo, unaweza kutumia mafunzo ya jumla kwa tokeni yoyote ya ERC-721 ukitumia MetaMask, ikiwemo kwenye Mtandao Mkuu au testnet yoyote. Ikiwa ungependa kujifunza jinsi ya kutengeneza NFT yako mwenyewe kwenye Ethereum, unapaswa kuangalia [Sehemu ya 1 kuhusu Jinsi ya Kuandika na Kupeleka mkataba-erevu wa NFT](/developers/tutorials/how-to-write-and-deploy-an-nft)! + +Hongera! Umefika kwenye sehemu fupi na rahisi zaidi ya mfululizo wetu wa mafunzo ya NFT — jinsi ya kuona NFT yako iliyotengenezwa hivi punde kwenye pochi pepe. Tutatumia MetaMask kwa mfano huu kwa kuwa ndiyo tuliyoitumia katika sehemu mbili zilizopita. + +Kama sharti, unapaswa kuwa tayari umesakinisha MetaMask kwenye simu ya mkononi, na inapaswa kujumuisha akaunti ambayo ulitengenezea NFT yako — unaweza kupata programu bila malipo kwenye [iOS](https://apps.apple.com/us/app/metamask-blockchain-wallet/id1438144202) au [Android](https://play.google.com/store/apps/details?id=io.metamask&hl=en_US&gl=US). + +## Hatua ya 1: Weka mtandao wako kuwa Sepolia {#set-network-to-sepolia} + +Juu ya programu, bonyeza kitufe cha “Pochi”, baada ya hapo utaambiwa uchague mtandao. Kwa kuwa NFT yetu ilitengenezwa kwenye mtandao wa Sepolia, utataka kuchagua Sepolia kama mtandao wako. + +![Jinsi ya kuweka Sepolia kama mtandao wako kwenye MetaMask Mobile](./goerliMetamask.gif) + +## Hatua ya 2: Ongeza mkusanyiko wako kwenye MetaMask {#add-nft-to-metamask} + +Ukishakuwa kwenye mtandao wa Sepolia, chagua kichupo cha “Vikusanywa” upande wa kulia na ongeza anwani ya mkataba-erevu wa NFT na ID ya tokeni ya ERC-721 ya NFT yako — ambayo unapaswa kuipata kwenye Etherscan kulingana na hashi ya muamala kutoka kwa NFT yako iliyopelekwa katika Sehemu ya II ya mafunzo yetu. + +![Jinsi ya kupata hashi ya muamala wako na ID ya tokeni ya ERC-721](./findNFTEtherscan.png) + +Huenda ukahitaji kuonyesha upya mara kadhaa ili kuona NFT yako — lakini itakuwepo ! + +![Jinsi ya kupakia NFT yako kwenye MetaMask](./findNFTMetamask.gif) + +Hongera! Umetengeneza NFT kwa mafanikio, na sasa unaweza kuiona! Tuna hamu ya kuona jinsi utakavyoutikisa ulimwengu wa NFT! diff --git a/public/content/translations/sw/developers/tutorials/how-to-write-and-deploy-an-nft/index.md b/public/content/translations/sw/developers/tutorials/how-to-write-and-deploy-an-nft/index.md new file mode 100644 index 00000000000..95a90d67b41 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/how-to-write-and-deploy-an-nft/index.md @@ -0,0 +1,380 @@ +--- +title: Jinsi ya Kuandika & Kupeleka NFT (Sehemu ya 1/3 ya Mfululizo wa Mafunzo ya NFT) +description: Mafunzo haya ni Sehemu ya 1 ya mfululizo kuhusu NFTs ambayo itakuongoza hatua kwa hatua jinsi ya kuandika na kupeleka mkataba-erevu wa Tokeni Isiyoweza Kugawanyika (tokeni ya ERC-721) kwa kutumia Ethereum na Mfumo wa Faili wa Inter Planetary (IPFS). +author: "Sumi Mudgil" +tags: [ "ERC-721", "Alchemy", "Uimara", "mikataba erevu" ] +skill: beginner +lang: sw +published: 2021-04-22 +--- + +Huku NFTs zikiweka mnyororo wa bloku mbele ya umma, sasa ni fursa nzuri ya kuelewa mwenyewe msisimko huu kwa kuchapisha mkataba wako wa NFT (Tokeni ya ERC-721) kwenye mnyororo wa bloku wa Ethereum! + +Alchemy inajivunia sana kuwezesha majina makubwa katika nafasi ya NFT, ikiwa ni pamoja na Makersplace (hivi karibuni iliweka rekodi ya mauzo ya sanaa ya kidijitali Christie's kwa Dola Milioni 69), Dapper Labs (watayarishi wa NBA Top Shot & Crypto Kitties), OpenSea (soko kubwa zaidi la NFT duniani), Zora, Super Rare, NFTfi, Foundation, Enjin, Origin Protocol, Immutable, na zaidi. + +Katika mafunzo haya, tutapitia hatua za kuunda na kupeleka mkataba-erevu wa ERC-721 kwenye mtandao wa majaribio wa Sepolia kwa kutumia [MetaMask](https://metamask.io/), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/), [Pinata](https://pinata.cloud/) na [Alchemy](https://alchemy.com/signup/eth) (usisumbuke ikiwa bado huelewi maana ya yoyote kati ya haya — tutayaelezea!). + +Katika Sehemu ya 2 ya mafunzo haya, tutapitia jinsi tunavyoweza kutumia mkataba-erevu wetu kutoa NFT, na katika Sehemu ya 3, tutaelezea jinsi ya kutazama NFT yako kwenye MetaMask. + +Na bila shaka, ikiwa una maswali wakati wowote, usisite kuwasiliana nasi katika [Alchemy Discord](https://discord.gg/gWuC7zB) au tembelea [hati za API za NFT za Alchemy](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api)! + +## Hatua ya 1: Unganisha na mtandao wa Ethereum {#connect-to-ethereum} + +Kuna njia nyingi za kufanya maombi kwa mnyororo wa bloku wa Ethereum, lakini ili kurahisisha mambo, tutatumia akaunti ya bure kwenye [Alchemy](https://alchemy.com/signup/eth), jukwaa la wasanidi wa mnyororo wa bloku na API inayotuwezesha kuwasiliana na mnyororo wa Ethereum bila kulazimika kuendesha nodi zetu wenyewe. + +Katika mafunzo haya, tutatumia pia zana za msanidi programu za Alchemy za ufuatiliaji na uchanganuzi ili kuelewa kinachoendelea chinichini katika upelekaji wa mkataba-erevu wetu. Ikiwa huna tayari akaunti ya Alchemy, unaweza kujisajili bure [hapa](https://alchemy.com/signup/eth). + +## Hatua ya 2: Unda programu yako (na ufunguo wa API) {#make-api-key} + +Mara tu unapounda akaunti ya Alchemy, unaweza kutengeneza ufunguo wa API kwa kuunda programu. Hii itaturuhusu kufanya maombi kwa mtandao wa majaribio wa Sepolia. Angalia [mwongozo huu](https://docs.alchemyapi.io/guides/choosing-a-network) ikiwa unataka kujifunza zaidi kuhusu mitandao ya majaribio. + +1. Nenda kwenye ukurasa wa “Unda Programu” katika Dashibodi yako ya Alchemy kwa kuelea juu ya “Programu” katika upau wa kusogeza na kubofya “Unda Programu” + +![Unda programu yako](./create-your-app.png) + +2. Ipe programu yako jina (tulichagua “NFT Yangu ya Kwanza!”), toa maelezo mafupi, chagua “Ethereum” kwa ajili ya Mnyororo, na chagua “Sepolia” kwa ajili ya mtandao wako. Tangu muungano, testnets nyingine zimeacha kutumika. + +![Sanidi na uchapishe programu yako](./alchemy-explorer-sepolia.png) + +3. Bofya “Unda programu” na ndivyo hivyo! Programu yako inapaswa kuonekana kwenye jedwali lililo hapa chini. + +## Hatua ya 3: Unda akaunti ya Ethereum (anwani) {#create-eth-address} + +Tunahitaji akaunti ya Ethereum ili kutuma na kupokea miamala. Kwa mafunzo haya, tutatumia MetaMask, mkoba wa mtandaoni katika kivinjari unaotumika kudhibiti anwani ya akaunti yako ya Ethereum. Ikiwa unataka kuelewa zaidi jinsi miamala kwenye Ethereum inavyofanya kazi, angalia [ukurasa huu](/developers/docs/transactions/) kutoka kwa Msingi wa Ethereum. + +Unaweza kupakua na kuunda akaunti ya MetaMask bure [hapa](https://metamask.io/download). Unapounda akaunti, au ikiwa tayari una akaunti, hakikisha umebadilisha hadi kwenye “Mtandao wa Majaribio wa Sepolia” upande wa juu kulia (ili tusishughulike na pesa halisi). + +![Weka Sepolia kama mtandao wako](./metamask-goerli.png) + +## Hatua ya 4: Ongeza ether kutoka kwa Bomba {#step-4-add-ether-from-a-faucet} + +Ili kupeleka mkataba-erevu wetu kwenye mtandao wa majaribio, tutahitaji ETH bandia. Ili kupata ETH unaweza kwenda kwenye [Bomba la Sepolia](https://sepoliafaucet.com/) linalosimamiwa na Alchemy, ingia na uweke anwani ya akaunti yako, kisha bofya “Nitumie ETH”. Unapaswa kuona ETH katika akaunti yako ya MetaMask punde tu! + +## Hatua ya 5: Angalia Salio lako {#check-balance} + +Ili kuhakikisha salio letu lipo, hebu tufanye ombi la [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) kwa kutumia [zana ya mtunzi ya Alchemy](https://composer.alchemyapi.io?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Hii itarudisha kiasi cha ETH katika mkoba wetu. Baada ya kuweka anwani ya akaunti yako ya MetaMask na kubofya “Tuma Ombi”, unapaswa kuona jibu kama hili: + + ``` + `{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"}` + ``` + +> **Kumbuka** Matokeo haya yako katika wei, sio ETH. Wei hutumika kama denomina ndogo zaidi ya ether. Ubadilishaji kutoka wei kwenda ETH ni 1 eth = 1018 wei. Kwa hivyo, tukibadilisha 0xde0b6b3a7640000 kuwa desimali tunapata wei 1\*1018, ambayo ni sawa na ETH 1. + +Phew! Pesa zetu bandia zote zipo. + +## Hatua ya 6: Anzisha mradi wetu {#initialize-project} + +Kwanza, tutahitaji kuunda folda kwa ajili ya mradi wetu. Nenda kwenye mstari wako wa amri na uandike: + + ``` + mkdir my-nft + cd my-nft + ``` + +Sasa kwa kuwa tuko ndani ya folda yetu ya mradi, tutatumia npm init kuanzisha mradi. Ikiwa huna tayari npm iliyosakinishwa, fuata [maagizo haya](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) (tutahitaji pia [Node.js](https://nodejs.org/en/download/), kwa hiyo pakua hiyo pia!). + + ``` + npm init + ``` + +Haijalishi sana jinsi unavyojibu maswali ya usakinishaji; hivi ndivyo tulivyofanya kwa ajili ya marejeleo: + +```json + jina la kifurushi: (my-nft) + toleo: (1.0.0) + maelezo: NFT yangu ya kwanza! + mahali pa kuingilia: (index.js) + amri ya majaribio: + hifadhi ya git: + maneno muhimu: + mwandishi: + leseni: (ISC) + Karibu kuandika kwa /Users/thesuperb1/Desktop/my-nft/package.json: + + { + "name": "my-nft", + "version": "1.0.0", + "description": "NFT yangu ya kwanza!", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" + } +``` + +Idhinisha package.json, na tuko tayari kwenda! + +## Hatua ya 7: Sakinisha [Hardhat](https://hardhat.org/getting-started/#overview) {#install-hardhat} + +Hardhat ni mazingira ya usanidi wa kuandaa, kupeleka, kupima, na kutatua programu yako ya Ethereum. Inasaidia wasanidi programu wanapojenga mikataba-erevu na dApps ndani ya nchi kabla ya kupeleka kwenye mnyororo hai. + +Ndani ya mradi wetu wa my-nft, endesha: + + ``` + npm install --save-dev hardhat + ``` + +Angalia ukurasa huu kwa maelezo zaidi kuhusu [maagizo ya usakinishaji](https://hardhat.org/getting-started/#overview). + +## Hatua ya 8: Unda mradi wa Hardhat {#create-hardhat-project} + +Ndani ya folda yetu ya mradi, endesha: + + ``` + npx hardhat + ``` + +Unapaswa kisha kuona ujumbe wa kukaribisha na chaguo la kuchagua unachotaka kufanya. Chagua “unda hardhat.config.js tupu”: + + ``` + 888 888 888 888 888 + 888 888 888 888 888 + 888 888 888 888 888 + 8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 + 888 888 "88b 888P" d88" 888 888 "88b "88b 888 + 888 888 .d888888 888 888 888 888 888 .d888888 888 + 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. + 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 + 👷 Karibu Hardhat v2.0.11 👷‍ + ? Unataka kufanya nini? … + Unda mradi wa sampuli + ❯ Unda hardhat.config.js tupu + Acha + ``` + +Hii itatutengenezea faili ya hardhat.config.js ambapo tutabainisha mipangilio yote ya mradi wetu (katika hatua ya 13). + +## Hatua ya 9: Ongeza folda za mradi {#add-project-folders} + +Ili kuweka mradi wetu ukiwa umepangiliwa, tutaunda folda mbili mpya. Nenda kwenye saraka ya mizizi ya mradi wako katika mstari wako wa amri na uandike: + + ``` + mkdir contracts + mkdir scripts + ``` + +- mikataba/ ni mahali ambapo tutaweka msimbo wetu wa mkataba-erevu wa NFT + +- scripts/ ni mahali ambapo tutaweka hati za kupeleka na kuingiliana na mkataba-erevu wetu + +## Hatua ya 10: Andika mkataba wetu {#write-contract} + +Sasa kwa kuwa mazingira yetu yamewekwa, tuendelee na mambo ya kusisimua zaidi: _kuandika msimbo wetu wa mkataba-erevu!_ + +Fungua mradi wa my-nft katika kihariri chako unachopenda (tunapenda [VSCode](https://code.visualstudio.com/)). Mikataba-erevu huandikwa kwa lugha inayoitwa Solidity ambayo ndiyo tutakayotumia kuandika mkataba-erevu wetu wa MyNFT.sol.‌ + +1. Nenda kwenye folda ya `contracts` na uunde faili mpya inayoitwa MyNFT.sol + +2. Hapa chini kuna msimbo wetu wa mkataba-erevu wa NFT, ambao tumeutegemea kwenye utekelezaji wa ERC-721 wa maktaba ya [OpenZeppelin](https://docs.openzeppelin.com/contracts/3.x/erc721). Nakili na ubandike yaliyomo hapa chini kwenye faili yako ya MyNFT.sol. + + ```solidity + //Mkataba unategemea [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721) + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.0; + + import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + import "@openzeppelin/contracts/utils/Counters.sol"; + import "@openzeppelin/contracts/access/Ownable.sol"; + import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; + + contract MyNFT is ERC721URIStorage, Ownable { + using Counters for Counters.Counter; + Counters.Counter private _tokenIds; + + constructor() ERC721("MyNFT", "NFT") {} + + function mintNFT(address recipient, string memory tokenURI) + public onlyOwner + returns (uint256) + { + _tokenIds.increment(); + + uint256 newItemId = _tokenIds.current(); + _mint(recipient, newItemId); + _setTokenURI(newItemId, tokenURI); + + return newItemId; + } + } + ``` + +3. Kwa sababu tunarithi madarasa kutoka kwa maktaba ya mikataba ya OpenZeppelin, katika mstari wako wa amri endesha `npm install @openzeppelin/contracts^4.0.0` ili kusakinisha maktaba kwenye folda yetu. + +Kwa hiyo, msimbo huu _hufanya_ nini hasa? Hebu tuuchambue, mstari kwa mstari. + +Juu ya mkataba-erevu wetu, tunaagiza madarasa matatu ya mkataba-erevu ya [OpenZeppelin](https://openzeppelin.com/): + +- @openzeppelin/contracts/token/ERC721/ERC721.sol ina utekelezaji wa kiwango cha ERC-721, ambacho mkataba-erevu wetu wa NFT utarithi. (Ili kuwa NFT halali, mkataba-erevu wako lazima utekeleze mbinu zote za kiwango cha ERC-721.) Ili kujifunza zaidi kuhusu kazi zilizorithiwa za ERC-721, angalia ufafanuzi wa kiolesura [hapa](https://eips.ethereum.org/EIPS/eip-721). + +- @openzeppelin/contracts/utils/Counters.sol hutoa vihesabio vinavyoweza kuongezwa au kupunguzwa kwa moja tu. Mkataba-erevu wetu unatumia kihesabio kufuatilia idadi jumla ya NFT zilizotolewa na kuweka kitambulisho cha kipekee kwenye NFT yetu mpya. (Kila NFT inayotolewa kwa kutumia mkataba-erevu lazima ipewe kitambulisho cha kipekee—hapa kitambulisho chetu cha kipekee kinabainishwa tu na jumla ya idadi ya NFT zilizopo. Kwa mfano, NFT ya kwanza tunayotoa kwa mkataba-erevu wetu ina kitambulisho cha "1," NFT yetu ya pili ina kitambulisho cha "2," na kadhalika.) + +- @openzeppelin/contracts/access/Ownable.sol huweka [udhibiti wa ufikiaji](https://docs.openzeppelin.com/contracts/3.x/access-control) kwenye mkataba-erevu wetu, ili mmiliki pekee wa mkataba-erevu (wewe) aweze kutoa NFT. (Kumbuka, kujumuisha udhibiti wa ufikiaji ni upendeleo kabisa. Ikiwa ungependa mtu yeyote aweze kutoa NFT kwa kutumia mkataba-erevu wako, ondoa neno Ownable kwenye mstari wa 10 na onlyOwner kwenye mstari wa 17.) + +Baada ya taarifa zetu za kuagiza, tuna mkataba-erevu wetu maalum wa NFT, ambao ni mfupi kwa kushangaza — una kihesabio tu, kiunda, na kazi moja! Hii ni shukrani kwa mikataba yetu tuliyorithi ya OpenZeppelin, ambayo hutekeleza mbinu nyingi tunazohitaji kuunda NFT, kama vile `ownerOf` ambayo inarudisha mmiliki wa NFT, na `transferFrom`, ambayo huhamisha umiliki wa NFT kutoka akaunti moja hadi nyingine. + +Katika kiunda chetu cha ERC-721, utaona tunapisha mifuatano 2, “MyNFT” na “NFT.” Kigezo cha kwanza ni jina la mkataba-erevu, na cha pili ni alama yake. Unaweza kupa kila moja ya vigezo hivi jina lolote unalotaka! + +Mwishowe, tuna kazi yetu `mintNFT(address recipient, string memory tokenURI)` inayoturuhusu kutoa NFT! Utaona kazi hii inachukua vigezo viwili: + +- `address recipient` inabainisha anwani itakayopokea NFT yako mpya iliyotolewa + +- `string memory tokenURI` ni mfuatano unaopaswa kuelekeza kwenye hati ya JSON inayoelezea metadata ya NFT. Metadata ya NFT ndiyo hasa inayoipa uhai, ikiruhusu kuwa na sifa zinazoweza kusanidiwa, kama vile jina, maelezo, picha, na sifa zingine. Katika sehemu ya 2 ya mafunzo haya, tutaelezea jinsi ya kusanidi metadata hii. + +`mintNFT` huita baadhi ya mbinu kutoka kwa maktaba ya ERC-721 iliyorithiwa, na hatimaye inarudisha nambari inayowakilisha kitambulisho cha NFT mpya iliyotolewa. + +## Hatua ya 11: Unganisha MetaMask na Alchemy na mradi wako {#connect-metamask-and-alchemy} + +Sasa kwa kuwa tumeunda mkoba wa MetaMask, akaunti ya Alchemy, na kuandika mkataba-erevu wetu, ni wakati wa kuunganisha vitu hivi vitatu. + +Kila muamala unaotumwa kutoka kwa mkoba wako wa mtandaoni unahitaji sahihi kwa kutumia ufunguo wako binafsi wa kipekee. Ili kuipa programu yetu ruhusa hii, tunaweza kuhifadhi kwa usalama ufunguo wetu binafsi (na ufunguo wa API wa Alchemy) katika faili ya mazingira. + +Ili kujifunza zaidi kuhusu kutuma miamala, angalia [mafunzo haya](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) kuhusu kutuma miamala kwa kutumia web3. + +Kwanza, sakinisha kifurushi cha dotenv katika saraka ya mradi wako: + + ``` + npm install dotenv --save + ``` + +Kisha, unda faili ya `.env` katika saraka ya mizizi ya mradi wetu, na uongeze ufunguo wako binafsi wa MetaMask na URL ya HTTP ya API ya Alchemy. + +- Fuata [maagizo haya](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) ili kuhamisha ufunguo wako binafsi kutoka MetaMask + +- Angalia hapa chini ili kupata URL ya API ya HTTP ya Alchemy na uinakili kwenye ubao wako wa kunakili + +![Nakili URL yako ya API ya Alchemy](./copy-alchemy-api-url.gif) + +Faili yako ya `.env` inapaswa sasa kuonekana hivi: + + ``` + API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key" + PRIVATE_KEY="your-metamask-private-key" + ``` + +Ili kuunganisha hivi na msimbo wetu, tutarejelea vigezo hivi katika faili yetu ya hardhat.config.js katika hatua ya 13. + + + +## Hatua ya 12: Sakinisha Ethers.js {#install-ethers} + +Ethers.js ni maktaba inayorahisisha kuingiliana na kufanya maombi kwa Ethereum kwa kufunika [mbinu za kawaida za JSON-RPC](/developers/docs/apis/json-rpc/) kwa mbinu ambazo ni rahisi zaidi kwa mtumiaji. + +Hardhat hurahisisha sana kuunganisha [Plugins](https://hardhat.org/plugins/) kwa zana za ziada na utendakazi uliopanuliwa. Tutatumia fursa ya [programu-jalizi ya Ethers](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) kwa usambazaji wa mkataba ([Ethers.js](https://github.com/ethers-io/ethers.js/) ina mbinu safi sana za usambazaji wa mkataba). + +Katika saraka yako ya mradi, andika: + + ``` + npm install --save-dev @nomiclabs/hardhat-ethers ethers@^5.0.0 + ``` + +Pia tutahitaji ethers katika hardhat.config.js yetu katika hatua inayofuata. + +## Hatua ya 13: Sasisha hardhat.config.js {#update-hardhat-config} + +Tumeongeza vitegemezi na programu-jalizi kadhaa hadi sasa, sasa tunahitaji kusasisha hardhat.config.js ili mradi wetu ujue kuhusu zote. + +Sasisha hardhat.config.js yako ionekane hivi: + +```js + /** + * @type import('hardhat/config').HardhatUserConfig + */ + require('dotenv').config(); + require("@nomiclabs/hardhat-ethers"); + const { API_URL, PRIVATE_KEY } = process.env; + module.exports = { + solidity: "0.8.1", + defaultNetwork: "sepolia", + networks: { + hardhat: {}, + sepolia: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`] + } + }, + } +``` + +## Hatua ya 14: Andaa mkataba wetu {#compile-contract} + +Ili kuhakikisha kila kitu kinafanya kazi hadi sasa, hebu tuandae mkataba wetu. Kazi ya kuandaa ni moja ya kazi zilizojengewa ndani za hardhat. + +Kutoka kwenye mstari wa amri, endesha: + + ``` + npx hardhat compile + ``` + +Unaweza kupata onyo kuhusu kitambulisho cha leseni cha SPDX hakijatolewa katika faili chanzo, lakini hakuna haja ya kuwa na wasiwasi kuhusu hilo — tunatumai kila kitu kingine kinaonekana vizuri! Ikiwa sivyo, unaweza kutuma ujumbe kila wakati katika [discord ya Alchemy](https://discord.gg/u72VCg3). + +## Hatua ya 15: Andika hati yetu ya upelekaji {#write-deploy} + +Sasa kwa kuwa mkataba wetu umeandikwa na faili yetu ya usanidi iko tayari, ni wakati wa kuandika hati ya kupeleka mkataba wetu. + +Nenda kwenye folda ya `scripts/` na uunde faili mpya inayoitwa `deploy.js`, ukiongeza yaliyomo yafuatayo: + +```js +async function main() { + const MyNFT = await ethers.getContractFactory("MyNFT") + + // Anza upelekaji, ukirudisha ahadi inayotatuliwa kuwa kitu cha mkataba + const myNFT = await MyNFT.deploy() + await myNFT.deployed() + console.log("Mkataba umepelekwa kwa anwani:", myNFT.address) +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) +``` + +Hardhat hufanya kazi nzuri ya kuelezea kile kila mstari wa msimbo huu unafanya katika [mafunzo yao ya Mikataba](https://hardhat.org/tutorial/testing-contracts.html#writing-tests), tumechukua maelezo yao hapa. + + ``` + const MyNFT = await ethers.getContractFactory("MyNFT"); + ``` + +ContractFactory katika ethers.js ni dhana inayotumika kupeleka mikataba-erevu mipya, kwa hivyo MyNFT hapa ni kiwanda cha matukio ya mkataba wetu wa NFT. Unapotumia programu-jalizi ya hardhat-ethers, matukio ya ContractFactory na Mkataba huunganishwa na mtia saini wa kwanza kwa chaguo-msingi. + + ``` + const myNFT = await MyNFT.deploy(); + ``` + +Kuita deploy() kwenye ContractFactory kutaanza upelekaji, na kurudisha Ahadi inayotatuliwa kuwa Mkataba. Hiki ndicho kitu ambacho kina mbinu kwa kila moja ya kazi zetu za mkataba-erevu. + +## Hatua ya 16: Peleka mkataba wetu {#deploy-contract} + +Hatimaye tuko tayari kupeleka mkataba-erevu wetu! Rudi kwenye mzizi wa saraka ya mradi wako, na kwenye mstari wa amri, endesha: + + ``` + npx hardhat --network sepolia run scripts/deploy.js + ``` + +Unapaswa kisha kuona kitu kama: + + ``` + Mkataba umepelekwa kwa anwani: 0x4C5266cCc4b3F426965d2f51b6D910325a0E7650 + ``` + +Tukienda kwenye [Sepolia etherscan](https://sepolia.etherscan.io/) na kutafuta anwani ya mkataba wetu, tunapaswa kuona kwamba umepelekwa kwa mafanikio. Ikiwa huwezi kuiona mara moja, tafadhali subiri kidogo kwani inaweza kuchukua muda. Muamala utaonekana kitu kama hiki: + +![Tazama anwani yako ya muamala kwenye Etherscan](./etherscan-sepoila-contract-creation.png) + +Anwani ya `Kutoka` inapaswa kulingana na anwani ya akaunti yako ya MetaMask na anwani ya `Kwa` itasema “Uundaji wa Mkataba”. Tukibofya kwenye muamala, tutaona anwani ya mkataba wetu katika sehemu ya `Kwa`: + +![Tazama anwani yako ya mkataba kwenye Etherscan](./etherscan-sepolia-tx-details.png) + +Yasssss! Umepeleka mkataba-erevu wako wa NFT kwenye mnyororo wa Ethereum (testnet)! + +Ili kuelewa kinachoendelea chinichini, hebu tuende kwenye kichupo cha Mvumbuzi katika [dashibodi yetu ya Alchemy](https://dashboard.alchemyapi.io/explorer). Ikiwa una programu nyingi za Alchemy hakikisha unachuja kwa programu na uchague “MyNFT”. + +![Tazama simu zilizopigwa "chinichini" na Dashibodi ya Mvumbuzi ya Alchemy](./alchemy-explorer-goerli.png) + +Hapa utaona simu chache za JSON-RPC ambazo Hardhat/Ethers zilifanya chinichini kwa ajili yetu tulipoiita kazi ya .deploy(). Mbili muhimu za kutaja hapa ni [eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction), ambayo ni ombi la kuandika mkataba-erevu wetu kwenye mnyororo wa Sepolia, na [eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash) ambalo ni ombi la kusoma taarifa kuhusu muamala wetu kutokana na hashi (muundo wa kawaida wakati wa kutuma miamala). Ili kujifunza zaidi kuhusu kutuma miamala, angalia mafunzo haya kuhusu [kutuma miamala kwa kutumia Web3](/developers/tutorials/sending-transactions-using-web3-and-alchemy/). + +Hayo ni yote kwa Sehemu ya 1 ya mafunzo haya. Katika [Sehemu ya 2, tutaingiliana na mkataba-erevu wetu kwa kutoa NFT](/developers/tutorials/how-to-mint-an-nft/), na katika [Sehemu ya 3 tutakuonyesha jinsi ya kutazama NFT yako katika mkoba wako wa Ethereum](/developers/tutorials/how-to-view-nft-in-metamask/)! diff --git a/public/content/translations/sw/developers/tutorials/interact-with-other-contracts-from-solidity/index.md b/public/content/translations/sw/developers/tutorials/interact-with-other-contracts-from-solidity/index.md new file mode 100644 index 00000000000..c2a74be1232 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/interact-with-other-contracts-from-solidity/index.md @@ -0,0 +1,179 @@ +--- +title: Kuingiliana na mikataba mingine kutoka Solidity +description: Jinsi ya kupeleka mkataba-erevu kutoka kwa mkataba uliopo na kuingiliana nao +author: "jdourlens" +tags: + [ + "mikataba erevu", + "uimara", + "remix", + "upelekaji", + "utunzi" + ] +skill: advanced +lang: sw +published: 2020-04-05 +source: EthereumDev +sourceUrl: https://ethereumdev.io/interact-with-other-contracts-from-solidity/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +Katika mafunzo yaliyopita tulijifunza mengi [jinsi ya kupeleka mkataba-erevu wako wa kwanza](/developers/tutorials/deploying-your-first-smart-contract/) na kuongeza baadhi ya vipengele kwake kama vile [kudhibiti ufikiaji kwa virekebishaji](https://ethereumdev.io/organize-your-code-and-control-access-to-your-smart-contract-with-modifiers/) au [kushughulikia makosa katika Solidity](https://ethereumdev.io/handle-errors-in-solidity-with-require-and-revert/). Katika funzo hili tutajifunza jinsi ya kupeleka mkataba-erevu kutoka kwa mkataba uliopo na kuingiliana nao. + +Tutaunda mkataba unaomwezesha mtu yeyote kuwa na mkataba-erevu wake wa `Counter` kwa kuunda kiwanda chake, jina lake litakuwa `CounterFactory`. Kwanza huu hapa msimbo wa mkataba-erevu wetu wa awali wa `Counter`: + +```solidity +pragma solidity 0.5.17; + +contract Counter { + + uint256 private _count; + address private _owner; + address private _factory; + + + modifier onlyOwner(address caller) { + require(caller == _owner, "Wewe si mmiliki wa mkataba"); + _; + } + + modifier onlyFactory() { + require(msg.sender == _factory, "Unahitaji kutumia kiwanda"); + _; + } + + constructor(address owner) public { + _owner = owner; + _factory = msg.sender; + } + + function getCount() public view returns (uint256) { + return _count; + } + + function increment(address caller) public onlyFactory onlyOwner(caller) { + _count++; + } + +} +``` + +Kumbuka kuwa tumerekebisha kidogo msimbo wa mkataba ili kufuatilia anwani ya kiwanda na anwani ya mmiliki wa mkataba. Unapoita msimbo wa mkataba kutoka kwa mkataba mwingine, `msg.sender` itarejelea anwani ya kiwanda chetu cha mkataba. Hili ni **jambo muhimu sana kuelewa** kwani kutumia mkataba kuingiliana na mikataba mingine ni jambo la kawaida. Kwa hivyo unapaswa kuwa mwangalifu kuhusu nani ni mtumaji katika visa tata. + +Kwa ajili hii, pia tuliongeza kirekebishaji cha `onlyFactory` kinachohakikisha kuwa chaguo za kukokotoa zinazobadilisha hali zinaweza kuitwa tu na kiwanda ambacho kitapitisha mwitaji halisi kama kigezo. + +Ndani ya `CounterFactory` yetu mpya ambayo itasimamia Kaunta zingine zote, tutaongeza ramani ambayo itahusisha mmiliki na anwani ya mkataba wake wa kaunta: + +```solidity +mapping(address => Counter) _counters; +``` + +Katika Ethereum, ramani ni sawa na vitu katika javascript, zinawezesha kuweka ufunguo wa aina A kwa thamani ya aina B. Katika hali hii tunapanga anwani ya mmiliki na mfano wa Kaunta yake. + +Kuanzisha Kaunta mpya kwa ajili ya mtu kutaonekana kama hivi: + +```solidity + function createCounter() public { + require (_counters[msg.sender] == Counter(0)); + _counters[msg.sender] = new Counter(msg.sender); + } +``` + +Kwanza tunakagua kama mtu huyo tayari anamiliki kaunta. Ikiwa hamiliki kaunta, tunaanzisha kaunta mpya kwa kupitisha anwani yake kwa kijenzi cha `Counter` na kukabidhi mfano mpya ulioundwa kwenye ramani. + +Ili kupata hesabu ya Kaunta maalum itaonekana kama hivi: + +```solidity +function getCount(address account) public view returns (uint256) { + require (_counters[account] != Counter(0)); + return (_counters[account].getCount()); +} + +function getMyCount() public view returns (uint256) { + return (getCount(msg.sender)); +} +``` + +Chaguo la kwanza la kukokotoa hukagua ikiwa mkataba wa Kaunta upo kwa anwani fulani na kisha huita mbinu ya `getCount` kutoka kwa mfano. Chaguo la pili la kukokotoa: `getMyCount` ni njia fupi tu ya kupitisha `msg.sender` moja kwa moja kwenye chaguo la kukokotoa la `getCount`. + +Chaguo la kukokotoa la `increment` linafanana kabisa lakini hupitisha mtumaji asili wa muamala kwa mkataba wa `Counter`: + +```solidity +function increment() public { + require (_counters[msg.sender] != Counter(0)); + Counter(_counters[msg.sender]).increment(msg.sender); + } +``` + +Kumbuka kwamba ikiitwa mara nyingi sana, kaunta yetu inaweza kuwa mwathirika wa kufurika. Unapaswa kutumia [maktaba ya SafeMath](https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/) kadri iwezekanavyo ili kujikinga na hali hii inayowezekana. + +Ili kupeleka mkataba wetu, utahitaji kutoa msimbo wa `CounterFactory` na `Counter`. Wakati wa kupeleka kwa mfano katika Remix utahitaji kuchagua CounterFactory. + +Huu hapa msimbo kamili: + +```solidity +pragma solidity 0.5.17; + +contract Counter { + + uint256 private _count; + address private _owner; + address private _factory; + + + modifier onlyOwner(address caller) { + require(caller == _owner, "Wewe si mmiliki wa mkataba"); + _; + } + + modifier onlyFactory() { + require(msg.sender == _factory, "Unahitaji kutumia kiwanda"); + _; + } + + constructor(address owner) public { + _owner = owner; + _factory = msg.sender; + } + + function getCount() public view returns (uint256) { + return _count; + } + + function increment(address caller) public onlyFactory onlyOwner(caller) { + _count++; + } + +} + +contract CounterFactory { + + mapping(address => Counter) _counters; + + function createCounter() public { + require (_counters[msg.sender] == Counter(0)); + _counters[msg.sender] = new Counter(msg.sender); + } + + function increment() public { + require (_counters[msg.sender] != Counter(0)); + Counter(_counters[msg.sender]).increment(msg.sender); + } + + function getCount(address account) public view returns (uint256) { + require (_counters[account] != Counter(0)); + return (_counters[account].getCount()); + } + + function getMyCount() public view returns (uint256) { + return (getCount(msg.sender)); + } + +} +``` + +Baada ya kuandaa, katika sehemu ya kupeleka ya Remix utachagua kiwanda kitakachopelekwa: + +![Ukichagua kiwanda cha kupelekwa katika Remix](./counterfactory-deploy.png) + +Kisha unaweza kucheza na kiwanda chako cha mkataba na uangalie mabadiliko ya thamani. Ikiwa ungependa kuita mkataba-erevu kutoka kwa anwani tofauti utahitaji kubadilisha anwani katika uteuzi wa Akaunti ya Remix. diff --git a/public/content/translations/sw/developers/tutorials/ipfs-decentralized-ui/index.md b/public/content/translations/sw/developers/tutorials/ipfs-decentralized-ui/index.md new file mode 100644 index 00000000000..ded6586e1b3 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/ipfs-decentralized-ui/index.md @@ -0,0 +1,73 @@ +--- +title: IPFS kwa violesura vya mtumiaji vilivyogatuliwa +description: Tutorial hii inamfundisha msomaji jinsi ya kutumia IPFS kuhifadhi kiolesura cha mtumiaji kwa dApp. Ingawa data na mantiki ya biashara ya Application imegatuliwa, bila kiolesura cha mtumiaji kinachostahimili udhibiti watumiaji wanaweza kupoteza ufikiaji wake hata hivyo. +author: Ori Pomerantz +tags: [ "ipfs" ] +skill: beginner +lang: sw +published: 2024-06-29 +--- + +Umeandika dApp mpya ya ajabu. Umeandika hata [kiolesura cha mtumiaji](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) kwa ajili yake. Lakini sasa unaogopa kwamba mtu atajaribu kuidhibiti kwa kuzima kiolesura chako cha mtumiaji, ambayo ni seva moja tu iliyo mbali kwenye Cloud. Katika Tutorial hii utajifunza jinsi ya kuepuka udhibiti kwa kuweka kiolesura chako cha mtumiaji kwenye **[interplanetary file system (IPFS)](https://ipfs.tech/developers/)** ili mtu yeyote anayevutiwa aweze kukibandika kwenye seva kwa ufikiaji wa siku zijazo. + +Unaweza kutumia huduma ya wahusika wengine kama vile [Fleek](https://resources.fleek.xyz/docs/) kufanya kazi yote. Tutorial hii ni kwa ajili ya watu wanaotaka kufanya vya kutosha kuelewa wanachofanya hata kama ni kazi zaidi. + +## Kuanza ndani ya nchi {#getting-started-locally} + +Kuna [watoa huduma wengi wa IPFS wa wahusika wengine](https://docs.ipfs.tech/how-to/work-with-pinning-services/#use-a-third-party-pinning-service), lakini ni bora kuanza na kuendesha IPFS ndani ya nchi kwa ajili ya majaribio. + +1. Sakinisha [kiolesura cha mtumiaji cha IPFS](https://docs.ipfs.tech/install/ipfs-desktop/#install-instructions). + +2. Tengeneza saraka na tovuti yako. Ikiwa unatumia [Vite](https://vite.dev/), tumia amri hii: + + ```sh + pnpm vite build + ``` + +3. Katika IPFS Desktop, bofya **Import > Folder** na uchague saraka uliyotengeneza katika hatua iliyopita. + +4. Chagua folda uliyopakia na bofya **Rename**. Ipe jina lenye maana zaidi. + +5. Ichague tena na ubofye **Share link**. Nakili URL kwenye ubao wa kunakili. Kiungo kitakuwa sawa na `https://ipfs.io/ipfs/QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ`. + +6. Bofya **Status**. Panua kichupo cha **Advanced** ili kuona anwani ya lango. Kwa mfano, kwenye mfumo wangu anwani ni `http://127.0.0.1:8080`. + +7. Changanya njia kutoka hatua ya kiungo na anwani ya lango ili kupata anwani yako. Kwa mfano, kwa mfano hapo juu, URL ni `http://127.0.0.1:8080/ipfs/QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ`. Fungua URL hiyo kwenye kivinjari ili kuona tovuti yako. + +## Inapakia {#uploading} + +Kwa hivyo sasa unaweza kutumia IPFS kuhudumia faili ndani ya nchi, ambayo haifurahishi sana. Hatua inayofuata ni kuzifanya zipatikane kwa ulimwengu ukiwa nje ya mtandao. + +Kuna idadi ya [huduma za kubandika](https://docs.ipfs.tech/concepts/persistence/#pinning-services) zinazojulikana sana. Chagua mmoja wao. Huduma yoyote unayotumia, unahitaji kuunda akaunti na kuipatia **kitambulisho cha maudhui (CID)** katika IPFS desktop yako. + +Binafsi, niligundua [4EVERLAND](https://docs.4everland.org/storage/4ever-pin/guides) kuwa rahisi zaidi kutumia. Hapa kuna maelekezo yake: + +1. Vinjari hadi [kwenye dashibodi](https://dashboard.4everland.org/overview) na uingie na pochi yako. + +2. Katika upau wa kando wa kushoto bofya **Ghala > 4EVER Pin**. + +3. Bofya **Upload > Selected CID**. Ipe maudhui yako jina na utoe CID kutoka kwa IPFS desktop. Kwa sasa CID ni mfuatano unaoanza na `Qm` ikifuatiwa na herufi na tarakimu 44 zinazowakilisha hashi ya [base-58 encoded](https://medium.com/bootdotdev/base64-vs-base58-encoding-c25553ff4524), kama vile `QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ`, lakini [hilo linaweza kubadilika](https://docs.ipfs.tech/concepts/content-addressing/#version-1-v1). + +4. Hali ya awali ni **Queued**. Pakia upya hadi ibadilike na kuwa **Pinned**. + +5. Bofya CID yako ili kupata kiungo. Unaweza kuona Application yangu [hapa](https://bafybeifqka2odrne5b6l5guthqvbxu4pujko2i6rx2zslvr3qxs6u5o7im/). + +6. Huenda ukahitaji kuwezesha akaunti yako ili iwekwe alama kwa zaidi ya mwezi mmoja. Uwezeshaji wa akaunti hugharimu takriban $1. Ikiwa umeifunga, toka nje na uingie tena ili uulizwe kuiwezesha tena. + +## Kutumia kutoka IPFS {#using-from-ipfs} + +Kwa wakati huu una kiungo cha lango la kati linalohudumia maudhui yako ya IPFS. Kwa kifupi, kiolesura chako cha mtumiaji kinaweza kuwa salama zaidi lakini bado hakiwezi kustahimili udhibiti. Kwa upinzani halisi wa udhibiti, watumiaji wanahitaji kutumia IPFS [moja kwa moja kutoka kwa kivinjari](https://docs.ipfs.tech/install/ipfs-companion/#prerequisites). + +Mara tu unapokuwa umesakinisha hiyo (na IPFS ya desktop inafanya kazi), unaweza kwenda kwa [/ipfs/``](https://any.site/ipfs/bafybeifqka2odrne5b6l5guthqvbxu4pujko2i6rx2zslvr3qxs6u5o7im) kwenye tovuti yoyote na utapata maudhui hayo, yakitolewa kwa njia iliyogatuliwa. + +## Hasara {#drawbacks} + +Huwezi kufuta faili za IPFS kwa uhakika, kwa hivyo mradi tu unarekebisha kiolesura chako cha mtumiaji, pengine ni bora kuiacha iwe ya kati, au utumie [mfumo wa majina wa interplanetary (IPNS)](https://docs.ipfs.tech/concepts/ipns/#mutability-in-ipfs), mfumo unaotoa uwezo wa kubadilika juu ya IPFS. Bila shaka, chochote kinachoweza kubadilika kinaweza kudhibitiwa, katika kesi ya IPNS kwa kumshinikiza mtu aliye na ufunguo binafsi unaolingana nayo. + +Zaidi ya hayo, baadhi ya vifurushi vina tatizo na IPFS, kwa hivyo ikiwa tovuti yako ni ngumu sana hiyo inaweza isiwe suluhisho zuri. Na bila shaka, chochote kinachotegemea ujumuishaji wa seva hakiwezi kugatuliwa kwa kuwa tu na upande wa mteja kwenye IPFS. + +## Hitimisho {#conclusion} + +Kama vile Ethereum inavyokuruhusu kugatua hifadhidata na vipengele vya mantiki ya biashara ya dApp yako, IPFS hukuruhusu kugatua kiolesura cha mtumiaji. Hii inakuwezesha kuzima vekta moja zaidi ya mashambulizi dhidi ya dApp yako. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md b/public/content/translations/sw/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md new file mode 100644 index 00000000000..fd5a0675c9c --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md @@ -0,0 +1,111 @@ +--- +title: Anzisha uundaji wako wa mwonekano wa mbele wa mfumo mtawanyo wa kimamlaka kwa kutumia create-eth-app +description: Muhtasari wa jinsi ya kutumia create-eth-app na vipengele vyake +author: "Markus Waas" +tags: + [ + "frontend", + "javascript", + "ethers.js", + "the graph", + "defi" + ] +skill: beginner +lang: sw +published: 2020-04-27 +source: soliditydeveloper.com +sourceUrl: https://soliditydeveloper.com/create-eth-app +--- + +Mara ya mwisho tuliangalia [picha kubwa ya Solidity](https://soliditydeveloper.com/solidity-overview-2020) na tayari tulitaja [create-eth-app](https://github.com/PaulRBerg/create-eth-app). Sasa utagundua jinsi ya kuitumia, ni vipengele vipi vimeunganishwa na mawazo ya ziada kuhusu jinsi ya kuipanua. Ilianzishwa na Paul Razvan Berg, mwanzilishi wa [Sablier](http://sablier.com/), programu hii itaanzisha uundaji wako wa mwonekano wa mbele na inakuja na miunganisho kadhaa ya hiari ya kuchagua. + +## Usakinishaji {#installation} + +Usakinishaji unahitaji Yarn 0.25 au toleo la juu zaidi (`npm install yarn --global`). Ni rahisi kama kuendesha: + +```bash +yarn create eth-app my-eth-app +cd my-eth-app +yarn react-app:start +``` + +Inatumia [create-react-app](https://github.com/facebook/create-react-app) kwa ndani. Ili kuona programu yako, fungua `http://localhost:3000/`. Ukiwa tayari kupeleka kwenye utendakazi, tengeneza kifurushi kidogo kwa kutumia yarn build. Njia moja rahisi ya kuhifadhi hii itakuwa [Netlify](https://www.netlify.com/). Unaweza kuunda repo ya GitHub, kuiongeza kwenye Netlify, kuweka amri ya kujenga na umemaliza! Programu yako itahifadhiwa na itatumika na kila mtu. Na yote hayo bila malipo. + +## Vipengele {#features} + +### React & create-react-app {#react--create-react-app} + +Kwanza kabisa, kiini cha programu: React na vipengele vyote vya ziada vinavyokuja na _create-react-app_. Kutumia hii pekee ni chaguo zuri ikiwa hutaki kuunganisha Ethereum. [React](https://react.dev/) yenyewe hufanya uundaji wa UI ingiliani kuwa rahisi sana. Inaweza isiwe rahisi kwa wanaoanza kama [Vue](https://vuejs.org/), lakini bado inatumika sana, ina vipengele zaidi na muhimu zaidi ina maelfu ya maktaba za ziada za kuchagua. _create-react-app_ hurahisisha sana kuanza nayo pia na inajumuisha: + +- Usaidizi wa sintaksia za React, JSX, ES6, TypeScript, Flow. +- Viongezeo vya lugha zaidi ya ES6 kama vile kiendeshaji cha kusambaza object. +- CSS yenye viambishi awali vya kiotomatiki, kwa hivyo huhitaji -webkit- au viambishi vingine. +- Kiendeshaji cha majaribio ya kitengo cha haraka na ingiliani chenye usaidizi uliojengewa ndani kwa ajili ya kuripoti ufikiaji. +- Seva ya uundaji wa moja kwa moja inayoonya kuhusu makosa ya kawaida. +- Hati ya kujenga ya kufunga JS, CSS, na picha kwa ajili ya utendakazi, ikiwa na hashi na ramani za chanzo. + +Hasa, _create-eth-app_ inatumia [hooks effects](https://legacy.reactjs.org/docs/hooks-effect.html) mpya. Njia ya kuandika vipengele vyenye nguvu, lakini vidogo sana vinavyoitwa vipengele vya kufanya kazi. Angalia sehemu hapa chini kuhusu Apollo kwa jinsi zinavyotumika katika _create-eth-app_. + +### Yarn Workspaces {#yarn-workspaces} + +[Yarn Workspaces](https://classic.yarnpkg.com/en/docs/workspaces/) hukuruhusu kuwa na vifurushi vingi, lakini kuwa na uwezo wa kuvidhibiti vyote kutoka kwenye folda kuu na kusakinisha vitegemezi kwa vyote mara moja kwa kutumia `yarn install`. Hii ina mantiki hasa kwa vifurushi vidogo vya ziada kama vile usimamizi wa anwani/ABI za mikataba-erevu (taarifa kuhusu wapi ulipeleka mikataba-erevu ipi na jinsi ya kuwasiliana nayo) au muunganisho wa grafu, vyote vikiwa sehemu ya `create-eth-app`. + +### ethers.js {#ethersjs} + +Ingawa [Web3](https://docs.web3js.org/) bado inatumika sana, [ethers.js](https://docs.ethers.io/) imekuwa ikipata mvuto zaidi kama mbadala katika mwaka uliopita na ndiyo iliyounganishwa kwenye _create-eth-app_. Unaweza kufanya kazi na hii, kuibadilisha iwe Web3 au fikiria kusasisha hadi [ethers.js v5](https://docs.ethers.org/v5/) ambayo karibu itoke kwenye beta. + +### The Graph {#the-graph} + +[GraphQL](https://graphql.org/) ni njia mbadala ya kushughulikia data ikilinganishwa na [API ya Restful](https://restfulapi.net/). Zina faida kadhaa kuliko API za Restful, hasa kwa data ya mnyororo wa bloku uliogatuliwa. Ikiwa unapenda kujua sababu za hili, angalia [GraphQL Will Power the Decentralized Web](https://medium.com/graphprotocol/graphql-will-power-the-decentralized-web-d7443a69c69a). + +Kawaida ungepata data kutoka kwa mkataba-erevu wako moja kwa moja. Unataka kusoma muda wa biashara ya hivi karibuni? Ita tu `MyContract.methods.latestTradeTime().call()` ambayo hupata data kutoka kwenye nodi ya Ethereum na kuipeleka kwenye mfumo wako mtawanyo wa kimamlaka. Lakini vipi ikiwa unahitaji mamia ya alama za data tofauti? Hiyo ingesababisha mamia ya upataji data kwenye nodi, kila mara ikihitaji [RTT](https://wikipedia.org/wiki/Round-trip_delay_time) na kufanya mfumo wako mtawanyo wa kimamlaka kuwa wa polepole na usio na ufanisi. Njia moja ya kuepuka hili inaweza kuwa kazi ya wito wa kupata ndani ya mkataba wako inayorudisha data nyingi kwa wakati mmoja. Hata hivyo, hii si bora kila wakati. + +Na kisha unaweza kupendezwa na data ya kihistoria pia. Unataka kujua sio tu muda wa biashara ya mwisho, bali nyakati za biashara zote ulizowahi kufanya mwenyewe. Tumia kifurushi cha grafu ndogo cha _create-eth-app_, soma [nyaraka](https://thegraph.com/docs/en/subgraphs/developing/creating/starting-your-subgraph) na uibadilishe kulingana na mikataba yako mwenyewe. Ikiwa unatafuta mikataba-erevu maarufu, huenda tayari kuna grafu ndogo. Angalia [kigunduzi cha grafu ndogo](https://thegraph.com/explorer/). + +Mara tu unapokuwa na grafu ndogo, inakuruhusu kuandika hoja moja rahisi katika mfumo wako mtawanyo wa kimamlaka inayopata data zote muhimu za mnyororo wa bloku ikiwa ni pamoja na zile za kihistoria unazohitaji, upataji mmoja tu unahitajika. + +### Apollo {#apollo} + +Shukrani kwa muunganisho wa [Apollo Boost](https://www.apollographql.com/docs/react/get-started/) unaweza kuunganisha grafu kwa urahisi katika mfumo wako mtawanyo wa kimamlaka wa React. Hasa unapotumia [React hooks na Apollo](https://www.apollographql.com/blog/apollo-client-now-with-react-hooks), kupata data ni rahisi kama kuandika hoja moja ya GraphQl katika kijenzi chako: + +```js +const { loading, error, data } = useQuery(myGraphQlQuery) + +React.useEffect(() => { + if (!loading && !error && data) { + console.log({ data }) + } +}, [loading, error, data]) +``` + +## Violezo {#templates} + +Juu ya hayo unaweza kuchagua kutoka kwa violezo kadhaa tofauti. Kufikia sasa unaweza kutumia muunganisho wa Aave, Compound, UniSwap au Sablier. Zote huongeza anwani muhimu za mikataba-erevu ya huduma pamoja na miunganisho ya grafu ndogo iliyotengenezwa tayari. Ongeza tu kiolezo kwenye amri ya uundaji kama `yarn create eth-app my-eth-app --with-template aave`. + +### Aave {#aave} + +[Aave](https://aave.com/) ni soko la kukopesha pesa lililogatuliwa. Waweka amana hutoa ukwasi sokoni ili kupata mapato yasiyotumika, huku wakopaji wakiweza kukopa kwa kutumia dhamana. Kipengele kimoja cha kipekee cha Aave ni [mikopo ya haraka](https://aave.com/docs/developers/flash-loans) inayokuruhusu kukopa pesa bila dhamana yoyote, mradi tu unarejesha mkopo ndani ya muamala mmoja. Hii inaweza kuwa muhimu kwa mfano kwa kukupa pesa za ziada kwenye biashara ya usuluhishi. + +Tokeni zinazouzwa na kukupatia riba huitwa _aTokens_. + +Unapochagua kuunganisha Aave na _create-eth-app_, utapata [muunganisho wa grafu ndogo](https://docs.aave.com/developers/getting-started/using-graphql). Aave hutumia The Graph na tayari inakupa grafu ndogo kadhaa zilizo tayari kutumika kwenye [Ropsten](https://thegraph.com/explorer/subgraph/aave/protocol-ropsten) na [Mtandao Mkuu](https://thegraph.com/explorer/subgraph/aave/protocol) katika fomu [ghafi](https://thegraph.com/explorer/subgraph/aave/protocol-raw) au [iliyopangiliwa](https://thegraph.com/explorer/subgraph/aave/protocol). + +![Meme ya Mkopo wa Haraka wa Aave – "Yeahhh, kama ningeweza kuweka mkopo wangu wa haraka kwa muda mrefu zaidi ya muamala 1, ingekuwa vizuri sana"](./flashloan-meme.png) + +### Compound {#compound} + +[Compound](https://compound.finance/) inafanana na Aave. Muunganisho tayari unajumuisha [Compound v2 Subgraph](https://medium.com/graphprotocol/https-medium-com-graphprotocol-compound-v2-subgraph-highlight-a5f38f094195) mpya. Tokeni zinazopata riba hapa kwa mshangao huitwa _cTokens_. + +### Uniswap {#uniswap} + +[Uniswap](https://uniswap.exchange/) ni soko la kubadilishana fedha lililogatuliwa (DEX). Watoa ukwasi wanaweza kupata ada kwa kutoa tokeni au ether zinazohitajika kwa pande zote mbili za biashara. Inatumika sana na kwa hivyo ina moja ya viwango vya juu zaidi vya ukwasi kwa anuwai kubwa sana ya tokeni. Unaweza kuiunganisha kwa urahisi katika mfumo wako mtawanyo wa kimamlaka ili, kwa mfano, kuwaruhusu watumiaji kubadilisha ETH zao kwa DAI. + +Kwa bahati mbaya, wakati wa kuandika hili muunganisho ni wa Uniswap v1 pekee na sio [v2 iliyotolewa hivi karibuni](https://uniswap.org/blog/uniswap-v2/). + +### Sablier {#sablier} + +[Sablier](https://sablier.com/) huwaruhusu watumiaji kutiririsha malipo ya pesa. Badala ya siku moja ya malipo, unapata pesa zako kila wakati bila usimamizi zaidi baada ya usanidi wa awali. Muunganisho unajumuisha [grafu yake ndogo](https://thegraph.com/explorer/subgraph/sablierhq/sablier). + +## Nini kinafuata? {#whats-next} + +Ikiwa una maswali kuhusu _create-eth-app_, nenda kwenye [seva ya jamii ya Sablier](https://discord.gg/bsS8T47), ambapo unaweza kuwasiliana na waandishi wa _create-eth-app_. Kama hatua za kwanza zinazofuata unaweza kutaka kuunganisha mfumo wa UI kama [Material UI](https://mui.com/material-ui/), andika hoja za GraphQL kwa data unayohitaji hasa na uweke usanidi wa upelekaji. diff --git a/public/content/translations/sw/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md b/public/content/translations/sw/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md new file mode 100644 index 00000000000..dea821eea85 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md @@ -0,0 +1,269 @@ +--- +title: Jifunze Mada za Msingi za Ethereum kwa kutumia SQL +description: Mafunzo haya yanawasaidia wasomaji kuelewa dhana za msingi za Ethereum ikiwemo miamala, bloku na gesi kwa kuuliza data iliyo kwenye mtandao kwa kutumia Lugha ya Kuuliza Data Iliyopangwa (SQL). +author: "Paul Apivat" +tags: [ "SQL", "Kuuliza", "Miamala" ] +skill: beginner +lang: sw +published: 2021-05-11 +source: paulapivat.com +sourceUrl: https://paulapivat.com/post/query_ethereum/ +--- + +Mafunzo mengi ya Ethereum huwalenga wasanidi programu, lakini kuna ukosefu wa rasilimali za kielimu kwa wachambuzi wa data au kwa watu wanaotaka kuona data iliyo kwenye mtandao bila kuendesha mteja au nodi. + +Mafunzo haya yanawasaidia wasomaji kuelewa dhana za msingi za Ethereum ikiwemo miamala, bloku na gesi kwa kuuliza data iliyo kwenye mtandao kwa kutumia lugha ya kuuliza data iliyopangwa (SQL) kupitia kiolesura kilichotolewa na [Dune Analytics](https://dune.com/). + +Data iliyo kwenye mtandao inaweza kutusaidia kuelewa Ethereum, mtandao, na kama uchumi wa nguvu za kompyuta na inapaswa kutumika kama msingi wa kuelewa changamoto zinazoikabili Ethereum leo (yaani, kupanda kwa bei za gesi) na, muhimu zaidi, majadiliano kuhusu suluhu za kuongeza uwezo. + +### Miamala {#transactions} + +Safari ya mtumiaji kwenye Ethereum huanza na kuanzisha akaunti inayodhibitiwa na mtumiaji au huluki yenye salio la ETH. Kuna aina mbili za akaunti - inayodhibitiwa na mtumiaji au mkataba-erevu (tazama [ethereum.org](/developers/docs/accounts/)). + +Akaunti yoyote inaweza kutazamwa kwenye wachunguzi wa bloku kama [Etherscan](https://etherscan.io/) au [Blockscout](https://eth.blockscout.com/). Wachunguzi wa bloku ni lango la data ya Ethereum. Wanaonyesha, kwa wakati halisi, data kuhusu bloku, miamala, wachimbaji, akaunti na shughuli nyingine za kwenye mtandao (tazama [hapa](/developers/docs/data-and-analytics/block-explorers/)). + +Hata hivyo, mtumiaji anaweza kutaka kuuliza data moja kwa moja ili kupatanisha taarifa zinazotolewa na wachunguzi wa bloku wa nje. [Dune Analytics](https://dune.com/) hutoa uwezo huu kwa yeyote aliye na ujuzi fulani wa SQL. + +Kwa marejeleo, akaunti ya mkataba-erevu ya Msingi wa Ethereum (EF) inaweza kutazamwa kwenye [Blockscout](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe). + +Jambo moja la kuzingatia ni kwamba akaunti zote, ikiwemo ya EF, zina anwani ya umma inayoweza kutumika kutuma na kupokea miamala. + +Salio la akaunti kwenye Etherscan linajumuisha miamala ya kawaida na miamala ya ndani. Miamala ya ndani, licha ya jina lake, sio miamala _halisi_ inayobadilisha hali ya mnyororo. Ni uhamisho wa thamani ulioanzishwa kwa kutekeleza mkataba ([chanzo](https://ethereum.stackexchange.com/questions/3417/how-to-get-contract-internal-transactions)). Kwa kuwa miamala ya ndani haina saini, **haijumuishwi** kwenye mnyororo wa bloku na haiwezi kuulizwa na Dune Analytics. + +Kwa hivyo, mafunzo haya yatazingatia miamala ya kawaida. Hii inaweza kuulizwa kama ifuatavyo: + +```sql +WITH temp_table AS ( +SELECT + hash, + block_number, + block_time, + "from", + "to", + value / 1e18 AS ether, + gas_used, + gas_price / 1e9 AS gas_price_gwei +FROM ethereum."transactions" +WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' +ORDER BY block_time DESC +) +SELECT + hash, + block_number, + block_time, + "from", + "to", + ether, + (gas_used * gas_price_gwei) / 1e9 AS txn_fee +FROM temp_table +``` + +Hii itatoa taarifa sawa na inayotolewa kwenye ukurasa wa miamala wa Etherscan. Kwa kulinganisha, hizi ndizo vyanzo viwili: + +#### Etherscan {#etherscan} + +![](./etherscan_view.png) + +[Ukurasa wa mkataba wa EF kwenye Blockscout.](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) + +#### Dune Analytics {#dune-analytics} + +![](./dune_view.png) + +Unaweza kupata dashibodi [hapa](https://dune.com/paulapivat/Learn-Ethereum). Bofya kwenye jedwali ili kuona ulizo (pia tazama hapo juu). + +### Kuchanganua Miamala {#breaking_down_transactions} + +Muamala uliowasilishwa unajumuisha taarifa kadhaa ikiwemo ([chanzo](/developers/docs/transactions/)): + +- **Mpokeaji**: Anwani ya kupokea (iliyoulizwa kama "to") +- **Saini**: Wakati ufunguo binafsi wa mtumaji hutia saini kwenye muamala, tunachoweza kuuliza kwa kutumia SQL ni anwani ya umma ya mtumaji ("from"). +- **Thamani**: Hii ni kiasi cha ETH kilichohamishwa (tazama safu wima ya `ether`). +- **Data**: Hii ni data yoyote ambayo imefanyiwa hashi (tazama safu wima ya `data`) +- **gasLimit** – kiasi cha juu cha vitengo vya gesi kinachoweza kutumiwa na muamala. Vitengo vya gesi vinawakilisha hatua za kikokotozi +- **maxPriorityFeePerGas** - kiasi cha juu cha gesi kitakachojumuishwa kama zawadi kwa mchimbaji +- **maxFeePerGas** - kiasi cha juu cha gesi ambacho mtu yuko tayari kulipa kwa muamala (ikijumuisha baseFeePerGas na maxPriorityFeePerGas) + +Tunaweza kuuliza taarifa hizi maalum kwa miamala kwenda kwa anwani ya umma ya Msingi wa Ethereum: + +```sql +SELECT + "to", + "from", + value / 1e18 AS ether, + data, + gas_limit, + gas_price / 1e9 AS gas_price_gwei, + gas_used, + ROUND(((gas_used / gas_limit) * 100),2) AS gas_used_pct +FROM ethereum."transactions" +WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' +ORDER BY block_time DESC +``` + +### Bloku {#blocks} + +Kila muamala utabadilisha hali ya mashine halisi ya Ethereum ([EVM](/developers/docs/evm/)) ([chanzo](/developers/docs/transactions/)). Miamala hutangazwa kwenye mtandao ili ithibitishwe na ijumuishwe kwenye bloku. Kila muamala unahusishwa na nambari ya bloku. Ili kuona data, tunaweza kuuliza nambari maalum ya bloku: 12396854 (bloku ya hivi karibuni zaidi kati ya miamala ya Msingi wa Ethereum kufikia wakati wa uandishi huu, 11/5/21). + +Zaidi ya hayo, tunapouliza bloku mbili zinazofuata, tunaweza kuona kwamba kila bloku ina hashi ya bloku iliyotangulia (yaani, hashi ya mzazi), kuonyesha jinsi mnyororo wa bloku unavyoundwa. + +Kila bloku ina rejeleo kwa bloku yake ya mzazi. Hii inaonyeshwa hapa chini kati ya safu wima za `hash` na `parent_hash` ([chanzo](/developers/docs/blocks/)): + +![parent_hash](./parent_hash.png) + +Hili ndilo [ulizo](https://dune.com/queries/44856/88292) kwenye Dune Analytics: + +```sql +SELECT + time, + number, + hash, + parent_hash, + nonce +FROM ethereum."blocks" +WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 12396856 +LIMIT 10 +``` + +Tunaweza kuchunguza bloku kwa kuuliza muda, nambari ya bloku, ugumu, hashi, hashi ya mzazi, na nonce. + +Kitu pekee ambacho ulizo hili halishughulikii ni _orodha ya miamala_ ambayo inahitaji ulizo tofauti hapa chini na _mzizi wa hali_. Nodi kamili au ya kumbukumbu itahifadhi miamala yote na mabadiliko ya hali, kuwaruhusu wateja kuuliza hali ya mnyororo wakati wowote. Kwa sababu hii inahitaji nafasi kubwa ya kuhifadhi, tunaweza kutenganisha data ya mnyororo na data ya hali: + +- Data ya mnyororo (orodha ya bloku, miamala) +- Data ya hali (matokeo ya mabadiliko ya hali ya kila muamala) + +Mzizi wa hali huangukia kwenye kundi la pili na ni data _iliyodokezwa_ (haihifadhiwi kwenye mnyororo), wakati data ya mnyororo iko wazi na huhifadhiwa kwenye mnyororo wenyewe ([chanzo](https://ethereum.stackexchange.com/questions/359/where-is-the-state-data-stored)). + +Kwa mafunzo haya, tutazingatia data ya kwenye mnyororo ambayo _inaweza_ kuulizwa kwa SQL kupitia Dune Analytics. + +Kama ilivyoelezwa hapo juu, kila bloku ina orodha ya miamala, tunaweza kuuliza hili kwa kuchuja bloku maalum. Tutajaribu bloku ya hivi karibuni zaidi, 12396854: + +```sql +SELECT * FROM ethereum."transactions" +WHERE block_number = 12396854 +ORDER BY block_time DESC` +``` + +Huu ndio matokeo ya SQL kwenye Dune: + +![](./list_of_txn.png) + +Bloku hii moja kuongezwa kwenye mnyororo hubadilisha hali ya mashine halisi ya Ethereum ([EVM](/developers/docs/evm/)). Wakati mwingine makumi, mamia ya miamala huhakikiwa kwa wakati mmoja. Katika kisa hiki maalum, miamala 222 ilijumuishwa. + +Ili kuona ni ngapi zilifanikiwa, tungeongeza kichujio kingine kuhesabu miamala iliyofanikiwa: + +```sql +WITH temp_table AS ( + SELECT * FROM ethereum."transactions" + WHERE block_number = 12396854 AND success = true + ORDER BY block_time DESC +) +SELECT + COUNT(success) AS num_successful_txn +FROM temp_table +``` + +Kwa bloku 12396854, kati ya miamala 222 jumla, 204 zilihakikiwa kwa mafanikio: + +![](./successful_txn.png) + +Maombi ya miamala hutokea makumi ya mara kwa sekunde, lakini bloku huhifadhiwa takriban mara moja kila sekunde 15 ([chanzo](/developers/docs/blocks/)). + +Ili kuona kwamba kuna bloku moja inayozalishwa takriban kila sekunde 15, tunaweza kuchukua idadi ya sekunde katika siku (86400) kugawanywa kwa 15 ili kupata wastani wa makadirio ya idadi ya bloku kwa siku (~ 5760). + +Chati ya bloku za Ethereum zinazozalishwa kwa siku (2016 - sasa) ni: + +![](./daily_blocks.png) + +Wastani wa idadi ya bloku zinazozalishwa kila siku katika kipindi hiki ni ~5,874: + +![](./avg_daily_blocks.png) + +Maulizo ni: + +```sql +# ulizo la kuonyesha idadi ya bloku zinazozalishwa kila siku tangu 2016 + +SELECT + DATE_TRUNC('day', time) AS dt, + COUNT(*) AS block_count +FROM ethereum."blocks" +GROUP BY dt +OFFSET 1 + +# wastani wa idadi ya bloku zinazozalishwa kwa siku + +WITH temp_table AS ( +SELECT + DATE_TRUNC('day', time) AS dt, + COUNT(*) AS block_count +FROM ethereum."blocks" +GROUP BY dt +OFFSET 1 +) +SELECT + AVG(block_count) AS avg_block_count +FROM temp_table +``` + +Wastani wa idadi ya bloku zinazozalishwa kwa siku tangu 2016 iko juu kidogo ya nambari hiyo kwa 5,874. Vinginevyo, kugawanya sekunde 86400 kwa wastani wa bloku 5874 hutoa sekunde 14.7 au takriban bloku moja kila sekunde 15. + +### Gesi {#gas} + +Bloku zina ukomo wa ukubwa. Ukubwa wa juu wa bloku hubadilika na hutofautiana kulingana na mahitaji ya mtandao kati ya vitengo 12,500,000 na 25,000,000. Vikomo vinahitajika kuzuia ukubwa wa bloku kuwa mkubwa kiholela na kuweka mzigo kwenye nodi kamili kwa upande wa nafasi ya diski na mahitaji ya kasi ([chanzo](/developers/docs/blocks/)). + +Njia moja ya kufikiria kikomo cha gesi cha bloku ni kuifikiria kama **ugavi** wa nafasi ya bloku inayopatikana ambapo miamala inaweza kuwekwa kwa makundi. Kikomo cha gesi cha bloku kinaweza kuulizwa na kuonyeshwa kutoka 2016 hadi leo: + +![](./avg_gas_limit.png) + +```sql +SELECT + DATE_TRUNC('day', time) AS dt, + AVG(gas_limit) AS avg_block_gas_limit +FROM ethereum."blocks" +GROUP BY dt +OFFSET 1 +``` + +Halafu kuna gesi halisi inayotumika kila siku kulipia ukokotoaji unaofanywa kwenye mnyororo wa Ethereum (yaani, kutuma muamala, kuita mkataba-erevu, kutoa NFT). Haya ndiyo **mahitaji** ya nafasi ya bloku ya Ethereum inayopatikana: + +![](./daily_gas_used.png) + +```sql +SELECT + DATE_TRUNC('day', time) AS dt, + AVG(gas_used) AS avg_block_gas_used +FROM ethereum."blocks" +GROUP BY dt +OFFSET 1 +``` + +Tunaweza pia kuweka chati hizi mbili pamoja ili kuona jinsi **mahitaji na ugavi** vinavyolingana: + +![gas_demand_supply](./gas_demand_supply.png) + +Kwa hivyo tunaweza kuelewa bei za gesi kama kazi ya mahitaji ya nafasi ya bloku ya Ethereum, kulingana na ugavi unaopatikana. + +Mwishowe, tunaweza kutaka kuuliza wastani wa bei za gesi za kila siku kwa mnyororo wa Ethereum, hata hivyo, kufanya hivyo kutasababisha muda mrefu sana wa kuuliza, kwa hivyo tutachuja ulizo letu kwa kiasi cha wastani cha gesi kilicholipwa kwa kila muamala na Msingi wa Ethereum. + +![](./ef_daily_gas.png) + +Tunaweza kuona bei za gesi zilizolipwa kwa miamala yote iliyofanywa kwa anwani ya Msingi wa Ethereum kwa miaka mingi. Hili ndilo ulizo: + +```sql +SELECT + block_time, + gas_price / 1e9 AS gas_price_gwei, + value / 1e18 AS eth_sent +FROM ethereum."transactions" +WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' +ORDER BY block_time DESC +``` + +### Muhtasari {#summary} + +Kwa mafunzo haya, tunaelewa dhana za msingi za Ethereum na jinsi mnyororo wa bloku wa Ethereum unavyofanya kazi kwa kuuliza na kupata hisia ya data ya kwenye mnyororo. + +Dashibodi inayoshikilia msimbo wote uliotumika katika mafunzo haya inaweza kupatikana [hapa](https://dune.com/paulapivat/Learn-Ethereum). + +Kwa matumizi zaidi ya data kuchunguza web3 [nipate kwenye Twitter](https://twitter.com/paulapivat). diff --git a/public/content/translations/sw/developers/tutorials/logging-events-smart-contracts/index.md b/public/content/translations/sw/developers/tutorials/logging-events-smart-contracts/index.md new file mode 100644 index 00000000000..5b633a8bc94 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/logging-events-smart-contracts/index.md @@ -0,0 +1,62 @@ +--- +title: Kuweka data kutoka kwa mikataba-erevu na matukio +description: Utangulizi wa matukio ya mkataba-erevu na jinsi unavyoweza kuyatumia kuweka data +author: "jdourlens" +tags: [ "mikataba erevu", "remix", "uimara", "matukio" ] +skill: intermediate +lang: sw +published: 2020-04-03 +source: EthereumDev +sourceUrl: https://ethereumdev.io/logging-data-with-events/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +Katika Solidity, [matukio](/developers/docs/smart-contracts/anatomy/#events-and-logs) ni ishara zinazotumwa ambazo mikataba-erevu inaweza kuzichochea. Mifumo mtawanyo ya kimamlaka, au kitu chochote kilichounganishwa na API ya Ethereum JSON-RPC, kinaweza kusikiliza matukio haya na kutenda ipasavyo. Tukio linaweza pia kuwekewa faharasa ili historia ya tukio iweze kutafutwa baadaye. + +## Matukio {#events} + +Tukio la kawaida zaidi kwenye mnyororo wa bloku wa Ethereum wakati wa kuandika makala hii ni tukio la Uhamisho linalotolewa na tokeni za ERC20 wakati mtu anahamisha tokeni. + +```solidity +event Transfer(address indexed from, address indexed to, uint256 value); +``` + +Sahihi ya tukio hutangazwa ndani ya msimbo wa mkataba na inaweza kutolewa kwa kutumia neno msingi "emit". Kwa mfano, tukio la uhamisho huweka kumbukumbu ya nani aliyetuma uhamisho (_from_), kwa nani (_to_) na ni tokeni ngapi zilihamishwa (_value_). + +Tukirejea kwenye mkataba-erevu wetu wa Counter na kuamua kuweka kumbukumbu kila wakati thamani inapobadilishwa. Kwa vile mkataba huu haukukusudiwa kupelekwa bali kutumika kama msingi wa kuunda mkataba mwingine kwa kuuongeza: unaitwa mkataba dhahania. Katika mfano wetu wa kaunta, ingeonekana hivi: + +```solidity +pragma solidity 0.5.17; + +contract Counter { + + event ValueChanged(uint oldValue, uint256 newValue); + + // Tofauti ya kibinafsi ya aina ya nambari kamili isiyo na alama ili kuweka idadi ya hesabu + uint256 private count = 0; + + // Kazi inayo ongeza kaunta yetu + function increment() public { + count += 1; + emit ValueChanged(count - 1, count); + } + + // Kichukuzi cha kupata thamani ya hesabu + function getCount() public view returns (uint256) { + return count; + } + +} +``` + +Kumbuka kwamba: + +- **Mstari wa 5**: tunatangaza tukio letu na kile linachobeba, thamani ya zamani na thamani mpya. + +- **Mstari wa 13**: Tunapoongeza tofauti yetu ya hesabu, tunatoa tukio. + +Tukipeleka mkataba sasa na kuita kazi ya 'increment', tutaona kwamba Remix itaionyesha kiotomatiki ukibofya kwenye muamala mpya ndani ya safu inayoitwa logs. + +![Picha ya skrini ya Remix](./remix-screenshot.png) + +Kumbukumbu ni muhimu sana kwa utatuzi wa mikataba-erevu yako lakini pia ni muhimu ikiwa unaunda programu zinazotumiwa na watu tofauti na kurahisisha kufanya uchanganuzi ili kufuatilia na kuelewa jinsi mkataba-erevu wako unavyotumika. Kumbukumbu zinazotokana na miamala huonyeshwa katika wachunguzi wa tofali maarufu na unaweza pia kwa mfano kuzitumia kuunda hati za offchain kwa ajili ya kusikiliza matukio maalum na kuchukua hatua yanapotokea. diff --git a/public/content/translations/sw/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md b/public/content/translations/sw/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md new file mode 100644 index 00000000000..2026b07276a --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md @@ -0,0 +1,252 @@ +--- +title: Uthibitisho wa Merkle kwa uadilifu wa data nje ya mtandao +description: Kuhakikisha uadilifu wa data onchain kwa data ambayo imehifadhiwa, zaidi, offchain +author: Ori Pomerantz +tags: [ "ghala" ] +skill: advanced +lang: sw +published: 2021-12-30 +--- + +## Utangulizi {#introduction} + +Kimsingi tungependa kuhifadhi kila kitu katika ghala la Ethereum, ambalo huhifadhiwa kwenye maelfu ya kompyuta na lina +upatikanaji wa juu sana (data haiwezi kudhibitiwa) na uadilifu (data haiwezi kurekebishwa kwa njia +isiyoidhinishwa), lakini kuhifadhi neno la baiti 32 kwa kawaida hugharimu gesi 20,000. Ninapoandika hili, gharama hiyo ni +sawa na $6.60. Kwa senti 21 kwa kila baiti hii ni ghali sana kwa matumizi mengi. + +Ili kutatua tatizo hili, mfumo ikolojia wa Ethereum ulitengeneza njia nyingi mbadala za kuhifadhi data kwa njia ya ugatuzi +. Kwa kawaida huhusisha maelewano kati ya upatikanaji +na bei. Hata hivyo, uadilifu kwa kawaida huhakikishwa. + +Katika makala hii utajifunza **jinsi** ya kuhakikisha uadilifu wa data bila kuhifadhi data kwenye mnyororo wa bloku, kwa kutumia +[uthibitisho wa Merkle](https://computersciencewiki.org/index.php/Merkle_proof). + +## Inafanyaje kazi? {#how-does-it-work} + +Kimsingi tunaweza tu kuhifadhi hashi ya data onchain, na kutuma data yote katika miamala inayohitaji. Hata hivyo, hii bado ni ghali sana. Baiti moja ya data kwa muamala hugharimu takriban gesi 16, kwa sasa karibu nusu senti, au takriban $5 kwa kila kilobaiti. Kwa $5000 kwa kila megabaiti, hii bado ni ghali sana kwa matumizi mengi, hata bila gharama ya ziada ya kuweka hashi kwenye data. + +Suluhisho ni kuweka hashi mara kwa mara seti ndogo tofauti za data, kwa hivyo kwa data ambayo huhitaji kutuma unaweza tu kutuma hashi. Unafanya hivi kwa kutumia mti wa Merkle, muundo wa data wa mti ambapo kila nodi ni hashi ya nodi zilizo chini yake: + +![Mti wa Merkle](tree.png) + +Hashi ya msingi ndiyo sehemu pekee inayohitaji kuhifadhiwa onchain. Ili kuthibitisha thamani fulani, unatoa hashi zote zinazohitaji kuunganishwa nayo ili kupata msingi. Kwa mfano, ili kuthibitisha `C` unatoa `D`, `H(A-B)`, na `H(E-H)`. + +![Uthibitisho wa thamani ya C](proof-c.png) + +## Utekelezaji {#implementation} + +[Msimbo wa sampuli umetolewa hapa](https://github.com/qbzzt/merkle-proofs-for-offline-data-integrity). + +### Msimbo wa offchain {#offchain-code} + +Katika makala hii tunatumia JavaScript kwa ajili ya hesabu za offchain. Mifumo mingi iliyotawanywa ina sehemu yake ya offchain katika JavaScript. + +#### Kuunda mzizi wa Merkle {#creating-the-merkle-root} + +Kwanza tunahitaji kutoa mzizi wa Merkle kwa mnyororo. + +```javascript +const ethers = require("ethers") +``` + +[Tunatumia chaguo la kukokotoa la hashi kutoka kwa kifurushi cha ethers](https://docs.ethers.io/v5/api/utils/hashing/#utils-keccak256). + +```javascript +// Data ghafi ambayo uadilifu wake tunapaswa kuthibitisha. Baiti mbili za kwanza ni +// kitambulisho cha mtumiaji, na baiti mbili za mwisho ni kiasi cha tokeni ambazo +// mtumiaji anamiliki kwa sasa. +const dataArray = [ + 0x0bad0010, 0x60a70020, 0xbeef0030, 0xdead0040, 0xca110050, 0x0e660060, + 0xface0070, 0xbad00080, 0x060d0091, +] +``` + +Kusimba kila ingizo katika nambari kamili ya biti-256 husababisha msimbo usioweza kusomeka vizuri kuliko kutumia JSON, kwa mfano. Hata hivyo, hii ina maana ya uchakataji mdogo sana ili kupata data katika mkataba, kwa hiyo gharama za gesi ni za chini sana. [Unaweza kusoma JSON onchain](https://github.com/chrisdotn/jsmnSol), ni wazo baya tu kama linaweza kuepukika. + +```javascript +// Safu ya thamani za hashi, kama BigInts +const hashArray = dataArray +``` + +Katika kesi hii data yetu ni thamani za biti-256 kuanzia, kwa hivyo hakuna uchakataji unaohitajika. Ikiwa tutatumia muundo wa data mgumu zaidi, kama vile mifuatano, tunahitaji kuhakikisha tunaweka hashi data kwanza ili kupata safu ya hashi. Kumbuka kuwa hii pia ni kwa sababu hatujali ikiwa watumiaji wanajua habari za watumiaji wengine. Vinginevyo tungehitaji kuweka hashi ili mtumiaji 1 asijue thamani ya mtumiaji 0, mtumiaji 2 asijue thamani ya mtumiaji 3, n.k. + +```javascript +// Badilisha kati ya mfuatano ambao chaguo la kukokotoa la hashi linatarajia na +// BigInt tunayotumia kila mahali pengine. +const hash = (x) => + BigInt(ethers.utils.keccak256("0x" + x.toString(16).padStart(64, 0))) +``` + +Chaguo la kukokotoa la hashi ya ethers linatarajia kupata mfuatano wa JavaScript na nambari ya heksadesimali, kama vile `0x60A7`, na hujibu kwa mfuatano mwingine wenye muundo sawa. Hata hivyo, kwa msimbo uliobaki ni rahisi kutumia `BigInt`, kwa hivyo tunabadilisha kuwa mfuatano wa heksadesimali na kurudi tena. + +```javascript +// Hashi linganifu ya jozi ili tusijali ikiwa mpangilio umegeuzwa. +const pairHash = (a, b) => hash(hash(a) ^ hash(b)) +``` + +Chaguo hili la kukokotoa ni linganifu (hashi ya a [xor](https://en.wikipedia.org/wiki/Exclusive_or) b). Hii ina maana kwamba tunapoangalia uthibitisho wa Merkle hatuhitaji kuwa na wasiwasi kuhusu ikiwa tutaweka thamani kutoka kwa uthibitisho kabla au baada ya thamani iliyokokotolewa. Uthibitishaji wa Merkle unafanywa onchain, kwa hivyo kadri tunavyohitaji kufanya kidogo ndivyo inavyokuwa bora zaidi. + +Onyo: +Kroptografia ni ngumu kuliko inavyoonekana. +Toleo la awali la makala hii lilikuwa na chaguo la kukokotoa la hashi `hash(a^b)`. +Hilo lilikuwa wazo **baya** kwa sababu lilimaanisha kwamba kama ungejua thamani halali za `a` na `b` ungeweza kutumia `b' = a^b^a'` kuthibitisha thamani yoyote ya `a'` unayotaka. +Ukiwa na chaguo hili la kukokotoa ingekubidi ukokotee `b'` kiasi kwamba `hash(a') ^ hash(b')` ni sawa na thamani inayojulikana (tawi linalofuata kwenye njia ya kuelekea kwenye mzizi), ambayo ni ngumu zaidi. + +```javascript +// Thamani ya kuashiria kuwa tawi fulani ni tupu, halina +// thamani +const empty = 0n +``` + +Wakati idadi ya thamani si kielelezo kamili cha mbili tunahitaji kushughulikia matawi tupu. Njia ambayo programu hii hufanya ni kuweka sifuri kama kishika nafasi. + +![Mti wa Merkle wenye matawi yanayokosekana](merkle-empty-hash.png) + +```javascript +// Kokotoa ngazi moja juu ya mti wa safu ya hashi kwa kuchukua hashi ya +// kila jozi kwa mfuatano +const oneLevelUp = (inputArray) => { + var result = [] + var inp = [...inputArray] // Ili kuepuka kuandika upya ingizo // Ongeza thamani tupu ikiwa ni lazima (tunahitaji majani yote yawe // yameunganishwa kwa jozi) + + if (inp.length % 2 === 1) inp.push(empty) + + for (var i = 0; i < inp.length; i += 2) + result.push(pairHash(inp[i], inp[i + 1])) + + return result +} // oneLevelUp +``` + +Chaguo hili la kukokotoa "hupanda" ngazi moja katika mti wa Merkle kwa kuweka hashi jozi za thamani kwenye safu ya sasa. Kumbuka kuwa huu si utekelezaji bora zaidi, tungeweza kuepuka kunakili ingizo na kuongeza tu `hashEmpty` inapofaa katika kitanzi, lakini msimbo huu umeboreshwa kwa ajili ya usomaji. + +```javascript +const getMerkleRoot = (inputArray) => { + var result + + result = [...inputArray] // Panda juu ya mti hadi kuwe na thamani moja tu, huo ndio // mzizi. // // Ikiwa safu ina idadi isiyo ya kawaida ya maingizo // msimbo katika oneLevelUp unaongeza thamani tupu, kwa hivyo ikiwa tuna, kwa mfano, // majani 10 tutakuwa na matawi 5 katika safu ya pili, 3 // matawi katika ya tatu, 2 katika ya nne na mzizi ni wa tano + + while (result.length > 1) result = oneLevelUp(result) + + return result[0] +} +``` + +Ili kupata mzizi, panda hadi kubaki thamani moja tu. + +#### Kuunda uthibitisho wa Merkle {#creating-a-merkle-proof} + +Uthibitisho wa Merkle ni thamani za kuweka hashi pamoja na thamani inayothibitishwa ili kurudisha mzizi wa Merkle. Thamani ya kuthibitisha mara nyingi hupatikana kutoka kwa data nyingine, kwa hivyo napendelea kuitoa kando badala ya kuwa sehemu ya msimbo. + +```javascript +// Uthibitisho wa merkle unajumuisha thamani ya orodha ya maingizo ya +// kuwekea hashi. Kwa sababu tunatumia chaguo la kukokotoa la hashi linganifu, hatuhitaji +// eneo la kipengee ili kuthibitisha uthibitisho, bali kuunda tu +const getMerkleProof = (inputArray, n) => { +    var result = [], currentLayer = [...inputArray], currentN = n + +    // Hadi tufike juu +    while (currentLayer.length > 1) { +        // Hakuna safu za urefu usio wa kawaida +        if (currentLayer.length % 2) +            currentLayer.push(empty) + +        result.push(currentN % 2 +               // Ikiwa currentN si shufwa, ongeza na thamani iliyo kabla yake kwenye uthibitisho +            ? currentLayer[currentN-1] +               // Ikiwa ni shufwa, ongeza thamani baada yake +            : currentLayer[currentN+1]) + +``` + +Tunaweka hashi `(v[0],v[1])`, `(v[2],v[3])`, n.k. Kwa hivyo kwa thamani shufwa tunahitaji inayofuata, kwa thamani witiri tunahitaji iliyotangulia. + +```javascript +        // Sogeza hadi safu inayofuata juu +        currentN = Math.floor(currentN/2) +        currentLayer = oneLevelUp(currentLayer) +    }   // while currentLayer.length > 1 + +    return result +}   // getMerkleProof +``` + +### Msimbo wa onchain {#onchain-code} + +Mwishowe tuna msimbo unaoangalia uthibitisho. Msimbo wa onchain umeandikwa katika [Solidity](https://docs.soliditylang.org/en/v0.8.11/). Uboreshaji ni muhimu zaidi hapa kwa sababu gesi ni ghali kiasi. + +```solidity +//SPDX-License-Identifier: Public Domain +pragma solidity ^0.8.0; + +import "hardhat/console.sol"; +``` + +Niliandika hii kwa kutumia [mazingira ya uundaji ya Hardhat](https://hardhat.org/), ambayo inaturuhusu kuwa na [tokeo la konsoli kutoka Solidity](https://hardhat.org/docs/cookbook/debug-logs) tunapounda. + +```solidity + +contract MerkleProof { +    uint merkleRoot; + +    function getRoot() public view returns (uint) { +      return merkleRoot; +    } + +    // Si salama kabisa, katika ufikiaji wa msimbo wa uzalishaji +    // chaguo hili la kukokotoa LAZIMA liwe na kikomo kikali, pengine kwa +    // mmiliki +    function setRoot(uint _merkleRoot) external { +      merkleRoot = _merkleRoot; +    }   // setRoot +``` + +Chaguo za kukokotoa za kuweka na kupata za mzizi wa Merkle. Kumruhusu kila mtu kusasisha mzizi wa Merkle ni _wazo baya sana_ katika mfumo wa uzalishaji. Ninafanya hivi hapa kwa ajili ya kurahisisha msimbo wa sampuli. **Usifanye hivyo kwenye mfumo ambapo uadilifu wa data ni muhimu**. + +```solidity +    function hash(uint _a) internal pure returns(uint) { +      return uint(keccak256(abi.encode(_a))); +    } + +    function pairHash(uint _a, uint _b) internal pure returns(uint) { +      return hash(hash(_a) ^ hash(_b)); +    } +``` + +Chaguo hili la kukokotoa hutengeneza hashi ya jozi. Ni tafsiri ya Solidity tu ya msimbo wa JavaScript wa `hash` na `pairHash`. + +**Kumbuka:** Hii ni kesi nyingine ya uboreshaji kwa ajili ya usomaji. Kulingana na [ufafanuzi wa chaguo la kukokotoa](https://www.tutorialspoint.com/solidity/solidity_cryptographic_functions.htm), inaweza kuwezekana kuhifadhi data kama thamani ya [`bytes32`](https://docs.soliditylang.org/en/v0.5.3/types.html#fixed-size-byte-arrays) na kuepuka ubadilishaji. + +```solidity +    // Thibitisha uthibitisho wa Merkle +    function verifyProof(uint _value, uint[] calldata _proof) +        public view returns (bool) { +      uint temp = _value; +      uint i; + +      for(i=0; i<_proof.length; i++) { +        temp = pairHash(temp, _proof[i]); +      } + +      return temp == merkleRoot; +    } + +}  // MarkleProof +``` + +Katika nukuu za kihisabati uthibitishaji wa Merkle unaonekana kama hivi: `H(proof_n, H(proof_n-1, H(proof_n-2, ...` H(proof_1, H(proof_0, value))...)))\`. Msimbo huu unautekeleza. + +## Uthibitisho wa Merkle na unda-mpya havichanganyiki {#merkle-proofs-and-rollups} + +Uthibitisho wa Merkle haufanyi kazi vizuri na [unda-mpya](/developers/docs/scaling/#rollups). Sababu ni kwamba unda-mpya huandika data yote ya muamala kwenye L1, lakini huchakata kwenye L2. Gharama ya kutuma uthibitisho wa Merkle na muamala ni wastani wa gesi 638 kwa kila safu (kwa sasa baiti katika data ya wito hugharimu gesi 16 ikiwa si sifuri, na 4 ikiwa ni sifuri). Ikiwa tuna maneno 1024 ya data, uthibitisho wa Merkle unahitaji safu kumi, au jumla ya gesi 6380. + +Tukiangalia kwa mfano [Optimism](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m), kuandika gesi ya L1 hugharimu takriban gwei 100 na gesi ya L2 hugharimu gwei 0.001 (hiyo ndiyo bei ya kawaida, inaweza kupanda kukiwa na msongamano). Kwa hivyo kwa gharama ya gesi moja ya L1 tunaweza kutumia gesi laki moja kwenye uchakataji wa L2. Tukichukulia kuwa hatuandiki upya kwenye ghala, hii ina maana kwamba tunaweza kuandika takriban maneno matano kwenye ghala kwenye L2 kwa bei ya gesi moja ya L1. Kwa uthibitisho mmoja wa Merkle tunaweza kuandika maneno yote 1024 kwenye ghala (tukichukulia kuwa yanaweza kukokotolewa onchain kuanzia, badala ya kutolewa katika muamala) na bado kubaki na gesi nyingi. + +## Hitimisho {#conclusion} + +Katika maisha halisi unaweza usiwahi kutekeleza miti ya Merkle peke yako. Kuna maktaba zinazojulikana na zilizokaguliwa ambazo unaweza kutumia na kwa ujumla ni bora kutotekeleza vianzo vya kroptografia peke yako. Lakini natumai sasa unaelewa uthibitisho wa Merkle vizuri zaidi na unaweza kuamua wakati unafaa kutumia. + +Kumbuka kwamba ingawa uthibitisho wa Merkle huhifadhi _uadilifu_, hauhifadhi _upatikanaji_. Kujua kwamba hakuna mtu mwingine anayeweza kuchukua mali zako ni faraja ndogo ikiwa hifadhi ya data itaamua kutoruhusu ufikiaji na huwezi kuunda mti wa Merkle ili kuzifikia pia. Kwa hivyo miti ya Merkle hutumiwa vyema zaidi na aina fulani ya hifadhi iliyogatuliwa, kama vile IPFS. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md b/public/content/translations/sw/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md new file mode 100644 index 00000000000..855ea1c97e5 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md @@ -0,0 +1,151 @@ +--- +title: Kufuatilia Geth kwa kutumia InfluxDB na Grafana +description: Weka ufuatiliaji kwa nodi yako ya Geth kwa kutumia InfluxDB na Grafana ili kufuatilia utendaji na kutambua matatizo. +author: "Mario Havel" +tags: [ "wateja", "nodi" ] +skill: intermediate +lang: sw +published: 2021-01-13 +--- + +Mafunzo haya yatakusaidia kuweka ufuatiliaji wa nodi yako ya Geth ili uweze kuelewa vyema utendaji wake na kutambua matatizo yanayoweza kutokea. + +## Mahitaji ya awali {#prerequisites} + +- Unapaswa kuwa tayari unaendesha mfano wa Geth. +- Hatua na mifano mingi ni kwa ajili ya mazingira ya linux, ujuzi wa msingi wa terminal utasaidia. +- Angalia muhtasari huu wa video wa seti ya vipimo vya Geth: [Monitoring an Ethereum infrastructure by Péter Szilágyi](https://www.youtube.com/watch?v=cOBab8IJMYI). + +## Rundo la ufuatiliaji {#monitoring-stack} + +Mteja wa Ethereum hukusanya data nyingi ambayo inaweza kusomwa katika mfumo wa hifadhidata ya mpangilio wa matukio. Ili kurahisisha ufuatiliaji, unaweza kuiingiza katika programu ya kuonesha data. Kuna chaguo nyingi zinazopatikana: + +- [Prometheus](https://prometheus.io/) (mfumo wa kuvuta) +- [InfluxDB](https://www.influxdata.com/get-influxdb/) (mfumo wa kusukuma) +- [Telegraf](https://www.influxdata.com/get-influxdb/) +- [Grafana](https://www.grafana.com/) +- [Datadog](https://www.datadoghq.com/) +- [Chronograf](https://www.influxdata.com/time-series-platform/chronograf/) + +Pia kuna [Geth Prometheus Exporter](https://github.com/hunterlong/gethexporter), chaguo lililowekwa tayari na InfluxDB na Grafana. + +Katika mafunzo haya, tutaweka mteja wako wa Geth ili kusukuma data kwenda InfluxDB ili kuunda hifadhidata na Grafana ili kuunda taswira ya grafu ya data. Kufanya hivi mwenyewe kutakusaidia kuelewa mchakato vizuri zaidi, kuubadilisha, na kuupeleka katika mazingira tofauti. + +## Inasanidi InfluxDB {#setting-up-influxdb} + +Kwanza, hebu tupakue na kusakinisha InfluxDB. Chaguo mbalimbali za upakuaji zinaweza kupatikana kwenye [ukurasa wa matoleo wa Influxdata](https://portal.influxdata.com/downloads/). Chagua ile inayoendana na mazingira yako. +Unaweza pia kuisakinisha kutoka kwenye [repository](https://repos.influxdata.com/). Kwa mfano katika usambazaji unaotegemea Debian: + +``` +curl -tlsv1.3 --proto =https -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add +source /etc/lsb-release +echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list +sudo apt update +sudo apt install influxdb -y +sudo systemctl enable influxdb +sudo systemctl start influxdb +sudo apt install influxdb-client +``` + +Baada ya kusakinisha InfluxDB kwa mafanikio, hakikisha inaendeshwa chinichini. Kwa chaguo-msingi, inapatikana katika `localhost:8086`. +Kabla ya kutumia mteja wa `influx`, unapaswa kuunda mtumiaji mpya mwenye haki za msimamizi. Mtumiaji huyu atatumiwa kwa usimamizi wa ngazi ya juu, kuunda hifadhidata na watumiaji. + +``` +curl -XPOST "http://localhost:8086/query" --data-urlencode "q=CREATE USER username WITH PASSWORD 'password' WITH ALL PRIVILEGES" +``` + +Sasa unaweza kutumia mteja wa influx kuingia [shell ya InfluxDB](https://docs.influxdata.com/influxdb/v1.8/tools/shell/) na mtumiaji huyu. + +``` +influx -username 'username' -password 'password' +``` + +Kwa kuwasiliana moja kwa moja na InfluxDB kwenye shell yake, unaweza kuunda hifadhidata na mtumiaji kwa vipimo vya geth. + +``` +unda hifadhidata geth +unda mtumiaji geth na nenosiri chaguapassword +``` + +Thibitisha viingilio vilivyoundwa na: + +``` +onyesha hifadhidata +onyesha watumiaji +``` + +Toka kwenye shell ya InfluxDB. + +``` +toka +``` + +InfluxDB inaendeshwa na imesanidiwa kuhifadhi vipimo kutoka Geth. + +## Inatayarisha Geth {#preparing-geth} + +Baada ya kusanidi hifadhidata, tunahitaji kuwezesha ukusanyaji wa vipimo katika Geth. Zingatia `METRICS AND STATS OPTIONS` katika `geth --help`. Chaguo nyingi zinaweza kupatikana hapo, katika kesi hii tunataka Geth isukume data kwenye InfluxDB. +Usanidi wa msingi unabainisha kituo ambapo InfluxDB inapatikana na uthibitishaji wa hifadhidata. + +``` +geth --metrics --metrics.influxdb --metrics.influxdb.endpoint "http://0.0.0.0:8086" --metrics.influxdb.username "geth" --metrics.influxdb.password "chosenpassword" +``` + +Bendera hizi zinaweza kuongezwa kwenye amri inayoanzisha mteja au kuhifadhiwa kwenye faili ya usanidi. + +Unaweza kuthibitisha kwamba Geth inasukuma data kwa mafanikio, kwa mfano kwa kuorodhesha vipimo katika hifadhidata. Katika shell ya InfluxDB: + +``` +tumia geth +onyesha vipimo +``` + +## Inasanidi Grafana {#setting-up-grafana} + +Hatua inayofuata ni kusakinisha Grafana ambayo itatafsiri data kwa njia ya picha. Fuata mchakato wa usakinishaji kwa mazingira yako katika nyaraka za Grafana. Hakikisha unasakinisha toleo la OSS ikiwa hutaki vinginevyo. +Mfano wa hatua za usakinishaji kwa usambazaji wa Debian kwa kutumia repository: + +``` +curl -tlsv1.3 --proto =https -sL https://packages.grafana.com/gpg.key | sudo apt-key add - +echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list +sudo apt update +sudo apt install grafana +sudo systemctl enable grafana-server +sudo systemctl start grafana-server +``` + +Ukishafanikiwa kuendesha Grafana, inapaswa kupatikana kwenye `localhost:3000`. +Tumia kivinjari chako unachopendelea kufikia njia hii, kisha ingia na vitambulisho vya chaguo-msingi (mtumiaji: `admin` na nenosiri: `admin`). Unapoombwa, badilisha nenosiri la chaguo-msingi na uhifadhi. + +![](./grafana1.png) + +Utaelekezwa kwenye ukurasa wa nyumbani wa Grafana. Kwanza, sanidi data yako chanzo. Bofya kwenye ikoni ya usanidi kwenye upau wa kushoto na uchague "Vyanzo vya data". + +![](./grafana2.png) + +Bado hakuna vyanzo vya data vilivyoundwa, bofya kwenye "Ongeza chanzo cha data" ili kufafanua kimoja. + +![](./grafana3.png) + +Kwa usanidi huu, chagua "InfluxDB" na uendelee. + +![](./grafana4.png) + +Usanidi wa chanzo cha data ni rahisi sana ikiwa unaendesha zana kwenye mashine moja. Unahitaji kuweka anwani ya InfluxDB na maelezo ya kufikia hifadhidata. Rejelea picha hapa chini. + +![](./grafana5.png) + +Ikiwa kila kitu kimekamilika na InfluxDB inapatikana, bofya kwenye "Hifadhi na ujaribu" na usubiri uthibitisho utokee. + +![](./grafana6.png) + +Sasa Grafana imesanidiwa kusoma data kutoka InfluxDB. Sasa unahitaji kuunda dashibodi ambayo itatafsiri na kuionyesha. Sifa za dashibodi zimesimbwa katika faili za JSON ambazo zinaweza kuundwa na mtu yeyote na kuingizwa kwa urahisi. Kwenye upau wa kushoto, bofya kwenye "Unda na Ingiza". + +![](./grafana7.png) + +Kwa dashibodi ya ufuatiliaji ya Geth, nakili ID ya [dashibodi hii](https://grafana.com/grafana/dashboards/13877/) na uibandike kwenye "Ukurasa wa kuingiza" katika Grafana. Baada ya kuhifadhi dashibodi, inapaswa kuonekana kama hivi: + +![](./grafana8.png) + +Unaweza kurekebisha dashibodi zako. Kila paneli inaweza kuhaririwa, kuhamishwa, kuondolewa au kuongezwa. Unaweza kubadilisha usanidi wako. Ni juu yako! Ili kujifunza zaidi kuhusu jinsi dashibodi zinavyofanya kazi, rejelea [nyaraka za Grafana](https://grafana.com/docs/grafana/latest/dashboards/). +Unaweza pia kupendezwa na [Kuarifu](https://grafana.com/docs/grafana/latest/alerting/). Hii inakuwezesha kuweka arifa za tahadhari kwa wakati vipimo vinafikia thamani fulani. Njia mbalimbali za mawasiliano zinatumika. diff --git a/public/content/translations/sw/developers/tutorials/nft-minter/index.md b/public/content/translations/sw/developers/tutorials/nft-minter/index.md new file mode 100644 index 00000000000..58ac6ab3147 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/nft-minter/index.md @@ -0,0 +1,874 @@ +--- +title: Mafunzo ya Muunda wa NFT +description: Katika mafunzo haya, utaunda muunda wa NFT na kujifunza jinsi ya kuunda mfumo kamili uliotawanywa kwa kuunganisha mkataba wako erevu kwenye frontend ya React kwa kutumia zana za MetaMask na Web3. +author: "smudgil" +tags: + [ + "uimara", + "NFT", + "alchemy", + "mikataba erevu", + "frontend", + "Pinata" + ] +skill: intermediate +lang: sw +published: 2021-10-06 +--- + +Mojawapo ya changamoto kubwa zaidi kwa wasanidi programu wanaotoka katika historia ya Web2 ni kugundua jinsi ya kuunganisha mkataba wako erevu kwenye mradi wa frontend na kuingiliana nao. + +Kwa kuunda muunda wa NFT — UI rahisi ambapo unaweza kuingiza kiungo cha mali yako ya kidijitali, jina, na maelezo — utajifunza jinsi ya: + +- Unganisha kwenye MetaMask kupitia mradi wako wa frontend +- Ita mbinu za mkataba erevu kutoka kwa frontend yako +- Saini miamala kwa kutumia MetaMask + +Katika mafunzo haya, tutatumia [React](https://react.dev/) kama mfumo wetu wa frontend. Kwa sababu mafunzo haya yanalenga hasa uundaji wa Web3, hatutatumia muda mwingi kuchanganua misingi ya React. Badala yake, tutaangazia kuleta utendakazi kwenye mradi wetu. + +Kama sharti, unapaswa kuwa na uelewa wa kiwango cha mwanzo cha React—jua jinsi vijenzi, props, useState/useEffect, na uendeshaji msingi wa utendakazi hufanya kazi. Ikiwa hujawahi kusikia kuhusu masharti yoyote kati ya hayo hapo awali, unaweza kutaka kuangalia [mafunzo haya ya Utangulizi wa React](https://react.dev/learn/tutorial-tic-tac-toe). Kwa wanaojifunza zaidi kwa kuona, tunapendekeza sana mfululizo huu bora wa video wa [Mafunzo Kamili ya Kisasa ya React](https://www.youtube.com/playlist?list=PL4cUxeGkcC9gZD-Tvwfod2gaISzfRiP9d) na Net Ninja. + +Na kama bado, hakika utahitaji akaunti ya Alchemy ili kukamilisha mafunzo haya pamoja na kuunda chochote kwenye mnyororo wa bloku. Jisajili kwa akaunti isiyolipishwa [hapa](https://alchemy.com/). + +Bila kuchelewa zaidi, tuanze! + +## Kuunda NFTs 101 {#making-nfts-101} + +Kabla hata hatujaanza kuangalia msimbo wowote, ni muhimu kuelewa jinsi uundaji wa NFT unavyofanya kazi. Inahusisha hatua mbili: + +### Chapisha mkataba erevu wa NFT kwenye mnyororo wa bloku wa Ethereum {#publish-nft} + +Tofauti kubwa kati ya viwango viwili vya mkataba erevu wa NFT ni kwamba ERC-1155 ni kiwango cha ishara nyingi na inajumuisha utendakazi wa bechi, ilhali ERC-721 ni kiwango cha ishara moja na kwa hivyo inasaidia tu kuhamisha ishara moja kwa wakati mmoja. + +### Ita kazi ya uundaji {#minting-function} + +Kawaida, kazi hii ya uundaji inakuhitaji kupitisha vigezo viwili kama vigezo, kwanza `mpokeaji`, ambayo inabainisha anwani itakayopokea NFT yako mpya iliyoundwa, na pili `tokenURI` ya NFT, mfuatano unaotatuliwa hadi hati ya JSON inayoelezea metadata ya NFT. + +Metadata ya NFT ndiyo hasa inayoipa uhai, kuiruhusu iwe na sifa, kama vile jina, maelezo, picha (au mali tofauti ya kidijitali), na sifa zingine. Huu ni [mfano wa tokenURI](https://gateway.pinata.cloud/ipfs/QmSvBcb4tjdFpajGJhbFAWeK3JAxCdNQLQtr6ZdiSi42V2), ambayo ina metadata ya NFT. + +Katika mafunzo haya, tutazingatia sehemu ya 2, kuita kazi ya uundaji ya mkataba erevu wa NFT uliopo kwa kutumia React UI yetu. + +[Hapa kuna kiungo](https://ropsten.etherscan.io/address/0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE) cha mkataba erevu wa ERC-721 NFT tutakaouita katika mafunzo haya. Ikiwa ungependa kujifunza jinsi tulivyoiunda, tunapendekeza sana uangalie mafunzo yetu mengine, ["Jinsi ya Kuunda NFT"](https://www.alchemy.com/docs/how-to-create-an-nft). + +Safi, sasa kwa kuwa tunaelewa jinsi uundaji wa NFT unavyofanya kazi, hebu tunakili faili zetu za kuanzia! + +## Nakili faili za kuanzia {#clone-the-starter-files} + +Kwanza, nenda kwenye [hifadhi ya GitHub ya nft-minter-tutorial](https://github.com/alchemyplatform/nft-minter-tutorial) ili kupata faili za kuanzia za mradi huu. Nakili hifadhi hii kwenye mazingira yako ya ndani. + +Unapofungua hifadhi hii iliyonakiliwa ya `nft-minter-tutorial`, utagundua kuwa ina folda mbili: `minter-starter-files` na `nft-minter`. + +- `minter-starter-files` ina faili za kuanzia (kimsingi React UI) kwa mradi huu. Katika mafunzo haya, **tutafanyia kazi katika saraka hii**, unapojifunza jinsi ya kuipa uhai UI hii kwa kuiunganisha kwenye pochi yako ya Ethereum na mkataba erevu wa NFT. +- `nft-minter` ina mafunzo yote yaliyokamilika na iko kwa ajili yako kama **rejeleo** **ukikwama.** + +Kisha, fungua nakala yako ya `minter-starter-files` katika kihariri chako cha msimbo, kisha nenda kwenye folda yako ya `src`. + +Msimbo wote tutakaouandika utakuwa chini ya folda ya `src`. Tutakuwa tukihariri kijenzi cha `Minter.js` na kuandika faili za ziada za javascript ili kuupa mradi wetu utendakazi wa Web3. + +## Hatua ya 2: Angalia faili zetu za kuanzia {#step-2-check-out-our-starter-files} + +Kabla ya kuanza kuandika msimbo, ni muhimu kuangalia kile ambacho tayari kimetolewa kwetu katika faili za kuanzia. + +### Fanya mradi wako wa react uendeshwe {#get-your-react-project-running} + +Tuanze kwa kuendesha mradi wa React katika kivinjari chetu. Uzuri wa React ni kwamba mara tu mradi wetu unapokuwa ukifanya kazi katika kivinjari chetu, mabadiliko yoyote tunayohifadhi yatasasishwa moja kwa moja kwenye kivinjari chetu. + +Ili kuendesha mradi, nenda kwenye saraka kuu ya folda ya `minter-starter-files`, na kisha endesha `npm install` kwenye terminal yako ili kusakinisha vitegemezi vya mradi: + +```bash +cd minter-starter-files +npm install +``` + +Mara tu hizo zikimaliza kusakinisha, endesha `npm start` kwenye terminal yako: + +```bash +npm start +``` + +Kufanya hivyo kunapaswa kufungua http://localhost:3000/ kwenye kivinjari chako, ambapo utaona frontend ya mradi wetu. Inapaswa kuwa na sehemu 3: mahali pa kuingiza kiungo cha mali ya NFT yako, ingiza jina la NFT yako, na utoe maelezo. + +Ukijaribu kubofya vitufe vya "Unganisha Pochi" au "Unda NFT", utagundua havifanyi kazi—hiyo ni kwa sababu bado tunahitaji kupanga utendakazi wao! :\) + +### Kijenzi cha Minter.js {#minter-js} + +**KUMBUKA:** Hakikisha uko kwenye folda ya `minter-starter-files` na si folda ya `nft-minter`! + +Turudi kwenye folda ya `src` katika kihariri chetu na tufungue faili ya `Minter.js`. Ni muhimu sana tuelewe kila kitu katika faili hii, kwani ndicho kijenzi kikuu cha React tutakachokuwa tukifanyia kazi. + +Juu ya faili hii yetu, tuna vigezo vyetu vya hali ambavyo tutasasisha baada ya matukio maalum. + +```javascript +//Vigezo vya hali +const [walletAddress, setWallet] = useState("") +const [status, setStatus] = useState("") +const [name, setName] = useState("") +const [description, setDescription] = useState("") +const [url, setURL] = useState("") +``` + +Hujawahi kusikia kuhusu vigeu vya hali vya React au ndoana za hali? Angalia hati [hizi](https://legacy.reactjs.org/docs/hooks-state.html). + +Hivi ndivyo kila kigeu kinawakilisha: + +- `walletAddress` - mfuatano unaohifadhi anwani ya pochi ya mtumiaji +- `status` - mfuatano ulio na ujumbe wa kuonyeshwa chini ya UI +- `name` - mfuatano unaohifadhi jina la NFT +- `description` - mfuatano unaohifadhi maelezo ya NFT +- `url` - mfuatano ambao ni kiungo cha mali ya kidijitali ya NFT + +Baada ya vigezo vya hali, utaona kazi tatu ambazo hazijatekelezwa: `useEffect`, `connectWalletPressed`, na `onMintPressed`. Utaona kwamba kazi hizi zote ni `async`, hiyo ni kwa sababu tutakuwa tukifanya miito ya API isiyolingana ndani yao! Majina yao yanalingana na utendakazi wao: + +```javascript +useEffect(async () => { + //TODO: tekeleza +}, []) + +const connectWalletPressed = async () => { + //TODO: tekeleza +} + +const onMintPressed = async () => { + //TODO: tekeleza +} +``` + +- [`useEffect`](https://legacy.reactjs.org/docs/hooks-effect.html) - hii ni ndoana ya React inayoitwa baada ya kijenzi chako kutolewa. Kwa sababu ina propu ya safu tupu `[]` iliyopitishwa ndani yake (tazama mstari wa 3), itaitwa tu kwenye utoaji wa _kwanza_ wa kijenzi. Hapa tutaita msikilizaji wetu wa pochi na kazi nyingine ya pochi ili kusasisha UI yetu ili kuonyesha kama pochi tayari imeunganishwa. +- `connectWalletPressed` - kazi hii itaitwa ili kuunganisha pochi ya MetaMask ya mtumiaji kwenye mfumo wetu uliotawanywa. +- `onMintPressed` - kazi hii itaitwa ili kuunda NFT ya mtumiaji. + +Karibu na mwisho wa faili hii, tuna UI ya kijenzi chetu. Ukichanganua msimbo huu kwa makini, utaona kwamba tunasasisha vigezo vyetu vya hali vya `url`, `name`, na `description` wakati ingizo katika sehemu zao za maandishi zinazolingana zinabadilika. + +Pia utaona kwamba `connectWalletPressed` na `onMintPressed` huitwa wakati vitufe vyenye vitambulisho `mintButton` na `walletButton` vinapobofyewa mtawalia. + +```javascript +//UI ya kijenzi chetu +return ( +
+ + +

+

🧙‍♂️ Muumba wa Alchemy NFT

+

+ Ongeza tu kiungo cha mali yako, jina, na maelezo, kisha bonyeza "Unda." +

+
+

🖼 Kiungo cha mali:

+ setURL(event.target.value)} + /> +

🤔 Jina:

+ setName(event.target.value)} + /> +

✍️ Maelezo:

+ setDescription(event.target.value)} + /> +
+ +

{status}

+
+) +``` + +Mwishowe, hebu tushughulikie mahali ambapo kijenzi hiki cha Minter kinaongezwa. + +Ukienda kwenye faili ya `App.js`, ambayo ni kijenzi kikuu katika React ambacho hufanya kazi kama kontena kwa vijenzi vingine vyote, utaona kwamba kijenzi chetu cha Minter kinaingizwa kwenye mstari wa 7. + +**Katika mafunzo haya, tutakuwa tukihariri faili ya `Minter.js` pekee na kuongeza faili kwenye folda yetu ya `src`.** + +Sasa kwa kuwa tunaelewa tunachofanyia kazi, hebu tusanidi pochi yetu ya Ethereum! + +## Sanidi pochi yako ya Ethereum {#set-up-your-ethereum-wallet} + +Ili watumiaji waweze kuingiliana na mkataba wako erevu, watahitaji kuunganisha pochi yao ya Ethereum kwenye mfumo wako uliotawanywa. + +### Pakua MetaMask {#download-metamask} + +Kwa mafunzo haya, tutatumia MetaMask, mkoba wa mtandaoni katika kivinjari unaotumika kudhibiti anwani ya akaunti yako ya Ethereum. Ikiwa unataka kuelewa zaidi kuhusu jinsi miamala kwenye Ethereum inavyofanya kazi, angalia [ukurasa huu](/developers/docs/transactions/). + +Unaweza kupakua na kuunda akaunti ya MetaMask bure [hapa](https://metamask.io/download). Unapounda akaunti, au ikiwa tayari una akaunti, hakikisha umebadilisha hadi "Ropsten Test Network" upande wa juu kulia (ili tusiwe tunashughulika na pesa halisi). + +### Ongeza ether kutoka kwa Bomba {#add-ether-from-faucet} + +Ili kuunda NFT zetu (au kusaini miamala yoyote kwenye mnyororo wa bloku wa Ethereum), tutahitaji Eth bandia. Ili kupata Eth unaweza kwenda kwenye [Bomba la Ropsten](https://faucet.ropsten.be/) na uingize anwani ya akaunti yako ya Ropsten, kisha bofya "Tuma Ropsten Eth." Unapaswa kuona Eth katika akaunti yako ya MetaMask muda mfupi baadaye! + +### Angalia salio lako {#check-your-balance} + +Ili kuhakikisha salio letu lipo, hebu tufanye ombi la [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) kwa kutumia [zana ya mtunzi ya Alchemy](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D). Hii itarudisha kiasi cha Eth katika pochi yetu. Baada ya kuweka anwani ya akaunti yako ya MetaMask na kubofya “Tuma Ombi”, unapaswa kuona jibu kama hili: + +```text +{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"} +``` + +**KUMBUKA:** Matokeo haya yako katika wei si eth. Wei hutumika kama denomina ndogo zaidi ya ether. Ubadilishaji kutoka wei hadi eth ni: 1 eth = 10¹⁸ wei. Kwa hivyo, tukibadilisha 0xde0b6b3a7640000 hadi desimali tunapata 1\*10¹⁸ ambayo ni sawa na eth 1. + +Phew! Pesa zetu bandia zote zipo! + +## Unganisha MetaMask kwenye UI yako {#connect-metamask-to-your-UI} + +Sasa kwa kuwa pochi yetu ya MetaMask imesanidiwa, hebu tuunganishe mfumo wetu uliotawanywa nayo! + +Kwa sababu tunataka kufuata dhana ya [MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller), tutaunda faili tofauti ambayo ina kazi zetu za kudhibiti mantiki, data, na sheria za mfumo wetu uliotawanywa, na kisha kupitisha kazi hizo kwenye frontend yetu (kijenzi chetu cha Minter.js). + +### Kazi ya `connectWallet` {#connect-wallet-function} + +Ili kufanya hivyo, hebu tuunde folda mpya inayoitwa `utils` katika saraka yako ya `src` na tuongeze faili inayoitwa `interact.js` ndani yake, ambayo itakuwa na kazi zetu zote za mwingiliano wa pochi na mkataba erevu. + +Katika faili yetu ya `interact.js`, tutaandika kazi ya `connectWallet`, ambayo tutaiingiza na kuiita katika kijenzi chetu cha `Minter.js`. + +Katika faili yako ya `interact.js`, ongeza yafuatayo + +```javascript +export const connectWallet = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_requestAccounts", + }) + const obj = { + status: "👆🏽 Andika ujumbe katika sehemu ya maandishi hapo juu.", + address: addressArray[0], + } + return obj + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + Lazima usakinishe MetaMask, pochi pepe ya Ethereum, kwenye kivinjari chako. + +

+
+ ), + } + } +} +``` + +Hebu tuchanganue msimbo huu unafanya nini: + +Kwanza, kazi yetu inakagua ikiwa `window.ethereum` imewezeshwa kwenye kivinjari chako. + +`window.ethereum` ni API ya kimataifa inayoingizwa na MetaMask na watoa huduma wengine wa pochi ambayo inaruhusu tovuti kuomba akaunti za Ethereum za watumiaji. Ikiidhinishwa, inaweza kusoma data kutoka kwenye minyororo ya bloku ambayo mtumiaji ameunganishwa nayo, na kupendekeza mtumiaji asaini ujumbe na miamala. Angalia [hati za MetaMask](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) kwa maelezo zaidi! + +Ikiwa `window.ethereum` _haipo_, basi hiyo inamaanisha kuwa MetaMask haijasakinishwa. Hii inasababisha kurudishwa kwa kitu cha JSON, ambapo `anwani` iliyorudishwa ni mfuatano tupu, na kitu cha `status` cha JSX kinaeleza kuwa mtumiaji lazima asakinishe MetaMask. + +**Kazi nyingi tutakazoandika zitakuwa zikirudisha vitu vya JSON ambavyo tunaweza kutumia kusasisha vigeu vyetu vya hali na UI.** + +Sasa ikiwa `window.ethereum` _ipo_, hapo ndipo mambo yanapopendeza. + +Kwa kutumia kitanzi cha kujaribu/kukamatwa, tutajaribu kuunganisha kwenye MetaMask kwa kuita [`window.ethereum.request({ method: "eth_requestAccounts" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts). Kuita kazi hii kutafungua MetaMask kwenye kivinjari, ambapo mtumiaji ataombwa kuunganisha pochi yake kwenye mfumo wako uliotawanywa. + +- Ikiwa mtumiaji atachagua kuunganisha, `method: "eth_requestAccounts"` itarudisha safu iliyo na anwani zote za akaunti za mtumiaji ambazo zimeunganishwa kwenye mfumo uliotawanywa. Kwa pamoja, kazi yetu ya `connectWallet` itarudisha kitu cha JSON kilicho na `anwani` ya _kwanza_ katika safu hii (tazama mstari wa 9) na ujumbe wa `status` unaomwomba mtumiaji aandike ujumbe kwenye mkataba erevu. +- Ikiwa mtumiaji atakataa muunganisho, basi kitu cha JSON kitakuwa na mfuatano tupu kwa `anwani` iliyorudishwa na ujumbe wa `status` unaoonyesha kuwa mtumiaji alikataa muunganisho. + +### Ongeza kazi ya connectWallet kwenye Kijenzi chako cha UI cha Minter.js {#add-connect-wallet} + +Sasa kwa kuwa tumeandika kazi hii ya `connectWallet`, hebu tuiunganishe kwenye kijenzi chetu cha `Minter.js`. + +Kwanza, itabidi tuingize kazi yetu kwenye faili yetu ya `Minter.js` kwa kuongeza `import { connectWallet } from "./utils/interact.js";` juu ya faili ya `Minter.js`. Mistari yako 11 ya kwanza ya `Minter.js` sasa inapaswa kuonekana hivi: + +```javascript +import { useEffect, useState } from "react"; +import { connectWallet } from "./utils/interact.js"; + +const Minter = (props) => { + + //Vigezo vya hali + const [walletAddress, setWallet] = useState(""); + const [status, setStatus] = useState(""); + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + const [url, setURL] = useState(""); +``` + +Kisha, ndani ya kazi yetu ya `connectWalletPressed`, tutaita kazi yetu iliyoingizwa ya `connectWallet`, kama ifuatavyo: + +```javascript +const connectWalletPressed = async () => { + const walletResponse = await connectWallet() + setStatus(walletResponse.status) + setWallet(walletResponse.address) +} +``` + +Je, unaona jinsi utendakazi wetu mwingi unavyofichwa kutoka kwa kijenzi chetu cha `Minter.js` kutoka kwenye faili ya `interact.js`? Hii ni ili tuendane na dhana ya M-V-C! + +Katika `connectWalletPressed`, tunafanya tu wito wa kusubiri kwa kazi yetu iliyoingizwa ya `connectWallet`, na kwa kutumia jibu lake, tunasasisha vigezo vyetu vya `status` na `walletAddress` kupitia ndoana zao za hali. + +Sasa, hebu tuhifadhi faili zote mbili `Minter.js` na `interact.js` na tujaribu UI yetu hadi sasa. + +Fungua kivinjari chako kwenye localhost:3000, na ubonyeze kitufe cha "Unganisha Pochi" upande wa juu kulia wa ukurasa. + +Ikiwa umesakinisha MetaMask, unapaswa kuombwa kuunganisha pochi yako kwenye mfumo wako uliotawanywa. Kubali mwaliko wa kuunganisha. + +Unapaswa kuona kwamba kitufe cha pochi sasa kinaonyesha kwamba anwani yako imeunganishwa. + +Kisha, jaribu kuonyesha upya ukurasa... hii ni ajabu. Kitufe chetu cha pochi kinatuomba tuunganishe MetaMask, ingawa tayari imeunganishwa... + +Lakini usijali! Tunaweza kurekebisha hilo kwa urahisi kwa kutekeleza kazi inayoitwa `getCurrentWalletConnected`, ambayo itakagua ikiwa anwani tayari imeunganishwa kwenye mfumo wetu uliotawanywa na kusasisha UI yetu ipasavyo! + +### Kazi ya getCurrentWalletConnected {#get-current-wallet} + +Katika faili yako ya `interact.js`, ongeza kazi ifuatayo ya `getCurrentWalletConnected`: + +```javascript +export const getCurrentWalletConnected = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_accounts", + }) + if (addressArray.length > 0) { + return { + address: addressArray[0], + status: "👆🏽 Andika ujumbe katika sehemu ya maandishi hapo juu.", + } + } else { + return { + address: "", + status: "🦊 Unganisha kwenye MetaMask ukitumia kitufe cha juu kulia.", + } + } + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + Lazima usakinishe MetaMask, pochi pepe ya Ethereum, kwenye kivinjari chako. + +

+
+ ), + } + } +} +``` + +Msimbo huu _unafanana sana_ na kazi ya `connectWallet` tuliyoiandika mapema. + +Tofauti kuu ni kwamba badala ya kuita mbinu ya `eth_requestAccounts`, ambayo inafungua MetaMask kwa mtumiaji kuunganisha pochi yake, hapa tunaita mbinu ya `eth_accounts`, ambayo inarudisha tu safu iliyo na anwani za MetaMask zilizounganishwa kwa sasa kwenye mfumo wetu uliotawanywa. + +Ili kuona kazi hii ikifanya kazi, hebu tuiite katika kazi ya `useEffect` ya kijenzi chetu cha `Minter.js`. + +Kama tulivyofanya kwa `connectWallet`, lazima tuingize kazi hii kutoka kwenye faili yetu ya `interact.js` hadi kwenye faili yetu ya `Minter.js` kama ifuatavyo: + +```javascript +import { useEffect, useState } from "react" +import { + connectWallet, + getCurrentWalletConnected, //ingiza hapa +} from "./utils/interact.js" +``` + +Sasa, tunaiita tu katika kazi yetu ya `useEffect`: + +```javascript +useEffect(async () => { + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) +}, []) +``` + +Kumbuka, tunatumia jibu la wito wetu kwa `getCurrentWalletConnected` kusasisha vigezo vyetu vya hali vya `walletAddress` na `status`. + +Mara tu umeongeza msimbo huu, jaribu kuonyesha upya dirisha la kivinjari chetu. Kitufe kinapaswa kusema kuwa umeunganishwa, na kuonyesha hakikisho la anwani ya pochi yako iliyounganishwa - hata baada ya kuonyesha upya! + +### Tekeleza addWalletListener {#implement-add-wallet-listener} + +Hatua ya mwisho katika usanidi wa pochi ya mfumo wetu uliotawanywa ni kutekeleza msikilizaji wa pochi ili UI yetu isasishwe wakati hali ya pochi yetu inabadilika, kama vile mtumiaji anapokatisha muunganisho au kubadilisha akaunti. + +Katika faili yako ya `Minter.js`, ongeza kazi `addWalletListener` inayoonekana kama ifuatavyo: + +```javascript +function addWalletListener() { + if (window.ethereum) { + window.ethereum.on("accountsChanged", (accounts) => { + if (accounts.length > 0) { + setWallet(accounts[0]) + setStatus("👆🏽 Andika ujumbe katika sehemu ya maandishi hapo juu.") + } else { + setWallet("") + setStatus("🦊 Unganisha kwenye MetaMask ukitumia kitufe cha juu kulia.") + } + }) + } else { + setStatus( +

+ {" "} + 🦊 + Lazima usakinishe MetaMask, pochi pepe ya Ethereum, kwenye kivinjari chako. + +

+ ) + } +} +``` + +Hebu tuchanganue kwa haraka kile kinachotokea hapa: + +- Kwanza, kazi yetu inakagua ikiwa `window.ethereum` imewezeshwa (yaani, MetaMask imesakinishwa). + - Ikiwa sivyo, tunaweka tu kigezo chetu cha hali cha `status` kuwa mfuatano wa JSX unaomwomba mtumiaji asakinishe MetaMask. + - Ikiwa imewezeshwa, tunaweka msikilizaji `window.ethereum.on("accountsChanged")` kwenye mstari wa 3 anayesikiliza mabadiliko ya hali katika pochi ya MetaMask, ambayo ni pamoja na wakati mtumiaji anapounganisha akaunti ya ziada kwenye mfumo uliotawanywa, anapobadilisha akaunti, au anapokatisha muunganisho wa akaunti. Ikiwa kuna angalau akaunti moja iliyounganishwa, kigezo cha hali cha `walletAddress` kinasasishwa kama akaunti ya kwanza katika safu ya `accounts` iliyorudishwa na msikilizaji. Vinginevyo, `walletAddress` huwekwa kama mfuatano tupu. + +Mwishowe, lazima tuiite katika kazi yetu ya `useEffect`: + +```javascript +useEffect(async () => { + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) + + addWalletListener() +}, []) +``` + +Na voilà! Tumekamilisha kupanga utendakazi wote wa pochi yetu! Sasa kwa kuwa pochi yetu imesanidiwa, hebu tujue jinsi ya kuunda NFT yetu! + +## Metadata ya NFT 101 {#nft-metadata-101} + +Kwa hivyo kumbuka metadata ya NFT tuliyozungumzia katika Hatua ya 0 ya mafunzo haya—inaipa NFT uhai, na kuiruhusu iwe na sifa, kama vile mali ya kidijitali, jina, maelezo, na sifa zingine. + +Tutahitaji kusanidi metadata hii kama kitu cha JSON na kuihifadhi, ili tuweze kuipitisha kama kigezo cha `tokenURI` wakati wa kuita kazi ya `mintNFT` ya mkataba wetu erevu. + +Maandishi katika sehemu za "Kiungo cha Mali", "Jina", "Maelezo" yatajumuisha sifa tofauti za metadata ya NFT yetu. Tutaumbiza metadata hii kama kitu cha JSON, lakini kuna chaguzi kadhaa za mahali tunaweza kuhifadhi kitu hiki cha JSON: + +- Tunaweza kuihifadhi kwenye mnyororo wa bloku wa Ethereum; hata hivyo, kufanya hivyo kungegharimu sana. +- Tunaweza kuihifadhi kwenye seva ya kati, kama AWS au Firebase. Lakini hiyo ingepinga ethos yetu ya ugatuzi. +- Tunaweza kutumia IPFS, itifaki iliyogatuliwa na mtandao wa rika-kwa-rika wa kuhifadhi na kushiriki data katika mfumo wa faili uliosambazwa. Kwa kuwa itifaki hii imegatuliwa na ni ya bure, ndiyo chaguo letu bora! + +Ili kuhifadhi metadata yetu kwenye IPFS, tutatumia [Pinata](https://pinata.cloud/), API na zana rahisi ya IPFS. Katika hatua inayofuata, tutaelezea hasa jinsi ya kufanya hivi! + +## Tumia Pinata kubandika metadata yako kwenye IPFS {#use-pinata-to-pin-your-metadata-to-IPFS} + +Ikiwa huna akaunti ya [Pinata](https://pinata.cloud/), jisajili kwa akaunti ya bure [hapa](https://app.pinata.cloud/auth/signup) na ukamilishe hatua za kuthibitisha barua pepe na akaunti yako. + +### Tengeneza ufunguo wako wa API wa Pinata {#create-pinata-api-key} + +Nenda kwenye ukurasa wa [https://pinata.cloud/keys](https://pinata.cloud/keys), kisha chagua kitufe cha "Ufunguo Mpya" juu, weka wijeti ya Msimamizi kama imewezeshwa, na upe ufunguo wako jina. + +Kisha utaonyeshwa ibukizi na maelezo yako ya API. Hakikisha unaiweka mahali salama. + +Sasa kwa kuwa ufunguo wetu umesanidiwa, hebu tuuongeze kwenye mradi wetu ili tuweze kuutumia. + +### Unda faili ya .env {#create-a-env} + +Tunaweza kuhifadhi ufunguo na siri yetu ya Pinata kwa usalama katika faili ya mazingira. Hebu tusakinishe [kifurushi cha dotenv](https://www.npmjs.com/package/dotenv) katika saraka ya mradi wako. + +Fungua kichupo kipya kwenye terminal yako (tofauti na ile inayoendesha local host) na hakikisha uko kwenye folda ya `minter-starter-files`, kisha endesha amri ifuatayo kwenye terminal yako: + +```text +npm install dotenv --save +``` + +Kisha, tengeneza faili ya `.env` kwenye saraka ya mizizi ya `minter-starter-files` yako kwa kuingiza yafuatayo kwenye mstari wako wa amri: + +```javascript +vim.env +``` + +Hii itafungua faili yako ya `.env` kwenye vim (kihariri cha maandishi). Ili kuihifadhi, bonyeza "esc" + ":" + "q" kwenye kibodi yako kwa mpangilio huo. + +Kisha, katika VSCode, nenda kwenye faili yako ya `.env` na uongeze ufunguo wako wa API wa Pinata na siri ya API kwake, kama ifuatavyo: + +```text +REACT_APP_PINATA_KEY = +REACT_APP_PINATA_SECRET = +``` + +Hifadhi faili, na kisha uko tayari kuanza kuandika kazi ya kupakia metadata yako ya JSON kwenye IPFS! + +### Tekeleza pinJSONToIPFS {#pin-json-to-ipfs} + +Kwa bahati nzuri kwetu, Pinata ina [API mahususi ya kupakia data ya JSON kwenye IPFS](https://docs.pinata.cloud/api-reference/endpoint/ipfs/pin-json-to-ipfs#pin-json) na mfano rahisi wa JavaScript na axios ambao tunaweza kutumia, pamoja na marekebisho madogo. + +Katika folda yako ya `utils`, hebu tuunde faili nyingine inayoitwa `pinata.js` na kisha tuingize siri na ufunguo wetu wa Pinata kutoka kwenye faili ya .env kama ifuatavyo: + +```javascript +require("dotenv").config() +const key = process.env.REACT_APP_PINATA_KEY +const secret = process.env.REACT_APP_PINATA_SECRET +``` + +Kisha, bandika msimbo wa ziada kutoka chini hadi kwenye faili yako ya `pinata.js`. Usijali, tutachanganua maana ya kila kitu! + +```javascript +require("dotenv").config() +const key = process.env.REACT_APP_PINATA_KEY +const secret = process.env.REACT_APP_PINATA_SECRET + +const axios = require("axios") + +export const pinJSONToIPFS = async (JSONBody) => { + const url = `https://api.pinata.cloud/pinning/pinJSONToIPFS` + //kufanya ombi la POST la axios kwa Pinata ⬇️ + return axios + .post(url, JSONBody, { + headers: { + pinata_api_key: key, + pinata_secret_api_key: secret, + }, + }) + .then(function (response) { + return { + success: true, + pinataUrl: + "https://gateway.pinata.cloud/ipfs/" + response.data.IpfsHash, + } + }) + .catch(function (error) { + console.log(error) + return { + success: false, + message: error.message, + } + }) +} +``` + +Kwa hivyo msimbo huu unafanya nini hasa? + +Kwanza, inaingiza [axios](https://www.npmjs.com/package/axios), mteja wa HTTP anayetegemea ahadi kwa kivinjari na node.js, ambayo tutatumia kufanya ombi kwa Pinata. + +Kisha tuna kazi yetu isiyolingana ya `pinJSONToIPFS`, ambayo inachukua `JSONBody` kama ingizo lake na ufunguo wa api wa Pinata na siri katika kichwa chake, yote kufanya ombi la POST kwa API yao ya `pinJSONToIPFS`. + +- Ikiwa ombi hili la POST litafanikiwa, basi kazi yetu inarudisha kitu cha JSON na boolean ya `success` kama kweli na `pinataUrl` ambapo metadata yetu ilibandikwa. Tutatumia `pinataUrl` hii iliyorudishwa kama ingizo la `tokenURI` kwa kazi ya uundaji ya mkataba wetu erevu. +- Ikiwa chapisho hili litashindwa, basi kazi yetu inarudisha kitu cha JSON na boolean ya `success` kama uongo na mfuatano wa `message` unaoeleza kosa letu. + +Kama ilivyo kwa aina zetu za kurudi za kazi ya `connectWallet`, tunarudisha vitu vya JSON ili tuweze kutumia vigezo vyao kusasisha vigeu vyetu vya hali na UI. + +## Pakia mkataba wako erevu {#load-your-smart-contract} + +Sasa kwa kuwa tuna njia ya kupakia metadata yetu ya NFT kwenye IPFS kupitia kazi yetu ya `pinJSONToIPFS`, tutahitaji njia ya kupakia mfano wa mkataba wetu erevu ili tuweze kuita kazi yake ya `mintNFT`. + +Kama tulivyotaja awali, katika mafunzo haya tutatumia [mkataba erevu uliopo wa NFT](https://ropsten.etherscan.io/address/0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE); hata hivyo, ikiwa ungependa kujifunza jinsi tulivyoiunda, au kuunda moja wewe mwenyewe, tunapendekeza sana uangalie mafunzo yetu mengine, ["Jinsi ya Kuunda NFT."](https://www.alchemy.com/docs/how-to-create-an-nft). + +### ABI ya mkataba {#contract-abi} + +Ikiwa umechunguza faili zetu kwa karibu, utakuwa umegundua kuwa katika saraka yetu ya `src`, kuna faili ya `contract-abi.json`. ABI ni muhimu kwa kubainisha kazi ipi mkataba utaomba na pia kuhakikisha kuwa kazi hiyo itarudisha data katika umbizo unalotarajia. + +Pia tutahitaji ufunguo wa API wa Alchemy na API ya Alchemy Web3 ili kuunganisha kwenye mnyororo wa bloku wa Ethereum na kupakia mkataba wetu erevu. + +### Tengeneza ufunguo wako wa API wa Alchemy {#create-alchemy-api} + +Ikiwa bado huna akaunti ya Alchemy, [jisajili bila malipo hapa.](https://alchemy.com/?a=eth-org-nft-minter) + +Mara tu unapounda akaunti ya Alchemy, unaweza kutengeneza ufunguo wa API kwa kuunda programu. Hii itaturuhusu kufanya maombi kwa mtandao wa majaribio wa Ropsten. + +Nenda kwenye ukurasa wa "Tengeneza Programu" kwenye Dashibodi yako ya Alchemy kwa kuelea juu ya "Programu" kwenye upau wa kusogeza na kubofya "Tengeneza Programu". + +Ipe programu yako jina, tulichagua "NFT Yangu ya Kwanza!", toa maelezo mafupi, chagua "Staging" kwa Mazingira yanayotumika kwa uwekaji hesabu wa programu yako, na uchague "Ropsten" kwa mtandao wako. + +Bofya “Unda programu” na ndivyo hivyo! Programu yako inapaswa kuonekana kwenye jedwali lililo hapa chini. + +Safi sana, sasa kwa kuwa tumeunda URL yetu ya API ya HTTP Alchemy, inakili kwenye ubao wako wa kunakili... + +…na kisha tuiongeze kwenye faili yetu ya `.env`. Kwa pamoja, faili yako ya .env inapaswa kuonekana hivi: + +```text +REACT_APP_PINATA_KEY = +REACT_APP_PINATA_SECRET = +REACT_APP_ALCHEMY_KEY = https://eth-ropsten.alchemyapi.io/v2/ +``` + +Sasa kwa kuwa tuna ABI ya mkataba wetu na ufunguo wetu wa API wa Alchemy, tuko tayari kupakia mkataba wetu erevu kwa kutumia [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3). + +### Sanidi sehemu yako ya mwisho ya Alchemy Web3 na mkataba {#setup-alchemy-endpoint} + +Kwanza, ikiwa bado huna, utahitaji kusakinisha [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) kwa kwenda kwenye saraka ya nyumbani: `nft-minter-tutorial` kwenye terminal: + +```text +cd .. +npm install @alch/alchemy-web3 +``` + +Kisha turudi kwenye faili yetu ya `interact.js`. Juu ya faili, ongeza msimbo ufuatao ili kuingiza ufunguo wako wa Alchemy kutoka kwenye faili yako ya .env na kusanidi sehemu yako ya mwisho ya Alchemy Web3: + +```javascript +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) +``` + +[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) ni kifuniko karibu na [Web3.js](https://docs.web3js.org/), inayotoa mbinu za API zilizoboreshwa na manufaa mengine muhimu ili kurahisisha maisha yako kama msanidi programu wa web3. Imeundwa kuhitaji usanidi mdogo ili uweze kuanza kuitumia katika programu yako mara moja! + +Kisha, hebu tuongeze ABI ya mkataba wetu na anwani ya mkataba kwenye faili yetu. + +```javascript +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) + +const contractABI = require("../contract-abi.json") +const contractAddress = "0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE" +``` + +Mara tu tunapokuwa na zote mbili, tuko tayari kuanza kuandika kazi yetu ya uundaji! + +## Tekeleza kazi ya mintNFT {#implement-the-mintnft-function} + +Ndani ya faili yako ya `interact.js`, hebu tufafanue kazi yetu, `mintNFT`, ambayo itaunda NFT yetu. + +Kwa sababu tutakuwa tukifanya simu nyingi zisizolingana (kwa Pinata kubandika metadata yetu kwenye IPFS, Alchemy Web3 kupakia mkataba wetu erevu, na MetaMask kusaini miamala yetu), kazi yetu pia itakuwa isiyolingana. + +Maingizo matatu kwa kazi yetu yatakuwa `url` ya mali yetu ya kidijitali, `name`, na `description`. Ongeza saini ifuatayo ya kazi chini ya kazi ya `connectWallet`: + +```javascript +export const mintNFT = async (url, name, description) => {} +``` + +### Ushughulikiaji wa hitilafu ya ingizo {#input-error-handling} + +Kwa kawaida, inaleta maana kuwa na aina fulani ya ushughulikiaji wa hitilafu ya ingizo mwanzoni mwa kazi, ili tuondoke kwenye kazi hii ikiwa vigezo vyetu vya ingizo si sahihi. Ndani ya kazi yetu, hebu tuongeze msimbo ufuatao: + +```javascript +export const mintNFT = async (url, name, description) => { + //ushughulikiaji wa hitilafu + if (url.trim() == "" || name.trim() == "" || description.trim() == "") { + return { + success: false, + status: "❗Tafadhali hakikisha sehemu zote zimekamilika kabla ya kuunda.", + } + } +} +``` + +Kimsingi, ikiwa kigezo chochote cha ingizo ni mfuatano tupu, basi tunarudisha kitu cha JSON ambapo boolean ya `success` ni uongo, na mfuatano wa `status` unaeleza kuwa sehemu zote katika UI yetu lazima zikamilike. + +### Pakia metadata kwenye IPFS {#upload-metadata-to-ipfs} + +Mara tu tunapojua metadata yetu imeumbizwa ipasavyo, hatua inayofuata ni kuifunga katika kitu cha JSON na kuipakia kwenye IPFS kupitia `pinJSONToIPFS` tuliyoiandika! + +Ili kufanya hivyo, kwanza tunahitaji kuingiza kazi ya `pinJSONToIPFS` kwenye faili yetu ya `interact.js`. Juu kabisa ya `interact.js`, hebu tuongeze: + +```javascript +import { pinJSONToIPFS } from "./pinata.js" +``` + +Kumbuka kwamba `pinJSONToIPFS` inachukua mwili wa JSON. Kwa hivyo kabla ya kuifanyia wito, tutahitaji kuumbiza vigezo vyetu vya `url`, `name`, na `description` kuwa kitu cha JSON. + +Hebu tusasishe msimbo wetu ili kuunda kitu cha JSON kinachoitwa `metadata` na kisha kufanya wito kwa `pinJSONToIPFS` na kigezo hiki cha `metadata`: + +```javascript +export const mintNFT = async (url, name, description) => { + //ushughulikiaji wa hitilafu + if (url.trim() == "" || name.trim() == "" || description.trim() == "") { + return { + success: false, + status: "❗Tafadhali hakikisha sehemu zote zimekamilika kabla ya kuunda.", + } + } + + //tengeneza metadata + const metadata = new Object() + metadata.name = name + metadata.image = url + metadata.description = description + + //fanya wito wa pinata + const pinataResponse = await pinJSONToIPFS(metadata) + if (!pinataResponse.success) { + return { + success: false, + status: "😢 Kitu kiliharibika wakati wa kupakia tokenURI yako.", + } + } + const tokenURI = pinataResponse.pinataUrl +} +``` + +Kumbuka, tunahifadhi jibu la wito wetu kwa `pinJSONToIPFS(metadata)` katika kitu cha `pinataResponse`. Kisha, tunachanganua kitu hiki kwa makosa yoyote. + +Ikiwa kuna hitilafu, tunarudisha kitu cha JSON ambapo boolean ya `success` ni uongo na mfuatano wetu wa `status` unaeleza kuwa wito wetu umeshindwa. Vinginevyo, tunatoa `pinataURL` kutoka kwa `pinataResponse` na kuihifadhi kama kigezo chetu cha `tokenURI`. + +Sasa ni wakati wa kupakia mkataba wetu erevu kwa kutumia API ya Alchemy Web3 ambayo tuliianzisha juu ya faili yetu. Ongeza mstari ufuatao wa msimbo chini ya kazi ya `mintNFT` ili kuweka mkataba kwenye kigezo cha kimataifa cha `window.contract`: + +```javascript +window.contract = await new web3.eth.Contract(contractABI, contractAddress) +``` + +Jambo la mwisho la kuongeza katika kazi yetu ya `mintNFT` ni muamala wetu wa Ethereum: + +```javascript +//weka muamala wako wa Ethereum +const transactionParameters = { + to: contractAddress, // Inahitajika isipokuwa wakati wa uchapishaji wa mkataba. + from: window.ethereum.selectedAddress, // lazima ifanane na anwani amilifu ya mtumiaji. + data: window.contract.methods + .mintNFT(window.ethereum.selectedAddress, tokenURI) + .encodeABI(), //fanya wito kwa mkataba erevu wa NFT +} + +//tia saini muamala kupitia MetaMask +try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + success: true, + status: + "✅ Angalia muamala wako kwenye Etherscan: https://ropsten.etherscan.io/tx/" + + txHash, + } +} catch (error) { + return { + success: false, + status: "😥 Kitu kiliharibika: " + error.message, + } +} +``` + +Ikiwa tayari unafahamu miamala ya Ethereum, utagundua kuwa muundo unafanana sana na ule uliouona. + +- Kwanza, tunaweka vigezo vyetu vya miamala. + - `to` inabainisha anwani ya mpokeaji (mkataba wetu erevu) + - `from` inabainisha mtia saini wa muamala (anwani iliyounganishwa ya mtumiaji kwenye MetaMask: `window.ethereum.selectedAddress`) + - `data` ina wito kwa mbinu yetu ya `mintNFT` ya mkataba erevu, ambayo inapokea `tokenURI` yetu na anwani ya pochi ya mtumiaji, `window.ethereum.selectedAddress`, kama maingizo +- Kisha, tunafanya wito wa kusubiri, `window.ethereum.request,` ambapo tunaiomba MetaMask isaini muamala. Kumbuka, katika ombi hili, tunabainisha mbinu yetu ya eth (eth_SentTransaction) na kupitisha vigezo vyetu vya `transactionParameters`. Katika hatua hii, MetaMask itafunguka kwenye kivinjari, na kumwomba mtumiaji asaini au kukataa muamala. + - Ikiwa muamala utafanikiwa, kazi hiyo itarudisha kitu cha JSON ambapo boolean `success` imewekwa kuwa kweli na mfuatano wa `status` unamwomba mtumiaji aangalie Etherscan kwa maelezo zaidi kuhusu muamala wao. + - Ikiwa muamala utashindwa, kazi hiyo itarudisha kitu cha JSON ambapo boolean `success` imewekwa kuwa uongo, na mfuatano wa `status` unaeleza ujumbe wa hitilafu. + +Kwa pamoja, kazi yetu ya `mintNFT` inapaswa kuonekana hivi: + +```javascript +export const mintNFT = async (url, name, description) => { + //ushughulikiaji wa hitilafu + if (url.trim() == "" || name.trim() == "" || description.trim() == "") { + return { + success: false, + status: "❗Tafadhali hakikisha sehemu zote zimekamilika kabla ya kuunda.", + } + } + + //tengeneza metadata + const metadata = new Object() + metadata.name = name + metadata.image = url + metadata.description = description + + //ombi la kubandika la pinata + const pinataResponse = await pinJSONToIPFS(metadata) + if (!pinataResponse.success) { + return { + success: false, + status: "😢 Kitu kiliharibika wakati wa kupakia tokenURI yako.", + } + } + const tokenURI = pinataResponse.pinataUrl + + //pakia mkataba erevu + window.contract = await new web3.eth.Contract(contractABI, contractAddress) //loadContract(); + + //weka muamala wako wa Ethereum + const transactionParameters = { + to: contractAddress, // Inahitajika isipokuwa wakati wa uchapishaji wa mkataba. + from: window.ethereum.selectedAddress, // lazima ifanane na anwani amilifu ya mtumiaji. + data: window.contract.methods + .mintNFT(window.ethereum.selectedAddress, tokenURI) + .encodeABI(), //fanya wito kwa mkataba erevu wa NFT + } + + //saini muamala kupitia MetaMask + try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + success: true, + status: + "✅ Angalia muamala wako kwenye Etherscan: https://ropsten.etherscan.io/tx/" + + txHash, + } + } catch (error) { + return { + success: false, + status: "😥 Kitu kiliharibika: " + error.message, + } + } +} +``` + +Hiyo ni kazi kubwa sana! Sasa, tunahitaji tu kuunganisha kazi yetu ya `mintNFT` kwenye kijenzi chetu cha `Minter.js`... + +## Unganisha mintNFT kwenye frontend yetu ya Minter.js {#connect-our-frontend} + +Fungua faili yako ya `Minter.js` na usasishe mstari wa `import { connectWallet, getCurrentWalletConnected } from "./utils/interact.js";` juu ili uwe: + +```javascript +import { + connectWallet, + getCurrentWalletConnected, + mintNFT, +} from "./utils/interact.js" +``` + +Mwishowe, tekeleza kazi ya `onMintPressed` ili kufanya wito wa kusubiri kwa kazi yako iliyoingizwa ya `mintNFT` na usasishe kigezo cha hali cha `status` ili kuonyesha kama muamala wetu ulifanikiwa au ulishindwa: + +```javascript +const onMintPressed = async () => { + const { status } = await mintNFT(url, name, description) + setStatus(status) +} +``` + +## Sambaza NFT yako kwenye tovuti ya moja kwa moja {#deploy-your-NFT} + +Uko tayari kupeleka mradi wako moja kwa moja ili watumiaji waingiliane nao? Angalia [mafunzo haya](https://docs.alchemy.com/alchemy/tutorials/nft-minter/how-do-i-deploy-nfts-online) kwa ajili ya kusambaza Minter yako kwenye tovuti ya moja kwa moja. + +Hatua moja ya mwisho... + +## Tikisa ulimwengu wa mnyororo wa bloku {#take-the-blockchain-world-by-storm} + +Utani tu, umefika mwisho wa mafunzo! + +Kwa muhtasari, kwa kuunda muunda wa NFT, umefanikiwa kujifunza jinsi ya: + +- Unganisha kwenye MetaMask kupitia mradi wako wa frontend +- Ita mbinu za mkataba erevu kutoka kwa frontend yako +- Saini miamala kwa kutumia MetaMask + +Labda, ungependa kuweza kuonyesha NFT zilizoundwa kupitia mfumo wako uliotawanywa kwenye pochi yako — kwa hivyo hakikisha unaangalia mafunzo yetu ya haraka [Jinsi ya Kuona NFT Yako Kwenye Pochi Yako](https://www.alchemy.com/docs/how-to-view-your-nft-in-your-mobile-wallet)! + +Na, kama kawaida, ikiwa una maswali yoyote, tuko hapa kusaidia katika [Alchemy Discord](https://discord.gg/gWuC7zB). Hatuwezi kusubiri kuona jinsi utakavyotumia dhana kutoka kwa mafunzo haya kwenye miradi yako ya baadaye! diff --git a/public/content/translations/sw/developers/tutorials/optimism-std-bridge-annotated-code/index.md b/public/content/translations/sw/developers/tutorials/optimism-std-bridge-annotated-code/index.md new file mode 100644 index 00000000000..af6245c2e27 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/optimism-std-bridge-annotated-code/index.md @@ -0,0 +1,1356 @@ +--- +title: "Mwongozo wa mkataba wa daraja la kawaida la Optimism" +description: Je, daraja la kawaida la Optimism linafanyaje kazi? Kwa nini linafanya kazi kwa njia hii? +author: Ori Pomerantz +tags: [ "uimara", "daraja", "safu ya 2" ] +skill: intermediate +published: 2022-03-30 +lang: sw +--- + +[Optimism](https://www.optimism.io/) ni [Optimistic Rollup](/developers/docs/scaling/optimistic-rollups/). +Optimistic rollups zinaweza kuchakata miamala kwa bei ya chini zaidi kuliko Mtandao Mkuu wa Ethereum (pia inajulikana kama safu 1 au L1) kwa sababu miamala inachakatwa na nodi chache tu, badala ya kila nodi kwenye mtandao. +Wakati huo huo, data yote imeandikwa kwa L1 ili kila kitu kiweze kuthibitishwa na kujengwa upya kwa uadilifu wote na dhamana ya upatikanaji wa Mtandao Mkuu. + +Ili kutumia rasilimali za L1 kwenye Optimism (au L2 nyingine yoyote), rasilimali zinahitaji [kuvushwa kwa daraja](/bridges/#prerequisites). +Njia moja ya kufanikisha hili ni kwa watumiaji kufunga rasilimali (ETH na [tokeni za ERC-20](/developers/docs/standards/tokens/erc-20/) ndizo za kawaida zaidi) kwenye L1, na kupokea rasilimali sawa za kutumia kwenye L2. +Hatimaye, yeyote atakayeishia nazo anaweza kutaka kuzivusha kwa daraja kurudi L1. +Wakati wa kufanya hivi, rasilimali huchomwa kwenye L2 na kisha kurejeshwa kwa mtumiaji kwenye L1. + +Hivi ndivyo [daraja la kawaida la Optimism](https://docs.optimism.io/app-developers/bridging/standard-bridge) linavyofanya kazi. +Katika makala haya tunapitia msimbo chanzo wa daraja hilo ili kuona jinsi linavyofanya kazi na kulichunguza kama mfano wa msimbo wa Solidity ulioandikwa vizuri. + +## Mtiririko wa udhibiti {#control-flows} + +Daraja lina mitiririko mikuu miwili: + +- Kuweka (kutoka L1 hadi L2) +- Kutoa (kutoka L2 hadi L1) + +### Mtiririko wa uwekaji {#deposit-flow} + +#### Safu 1 {#deposit-flow-layer-1} + +1. Ikiwa unaweka ERC-20, mwekaji anatoa ruhusa kwa daraja kutumia kiasi kinachowekwa +2. Mwekaji anapiga simu daraja la L1 (`depositERC20`, `depositERC20To`, `depositETH`, au `depositETHTo`) +3. Daraja la L1 linachukua umiliki wa rasilimali iliyovushwa kwa daraja + - ETH: Rasilimali inahamishwa na mwekaji kama sehemu ya simu + - ERC-20: Rasilimali inahamishwa na daraja kwake yenyewe kwa kutumia ruhusa iliyotolewa na mwekaji +4. Daraja la L1 linatumia utaratibu wa ujumbe wa vikoa tofauti kupiga simu `finalizeDeposit` kwenye daraja la L2 + +#### Safu 2 {#deposit-flow-layer-2} + +5. Daraja la L2 huhakikisha simu kwa `finalizeDeposit` ni halali: + - Imetoka kwenye mkataba wa ujumbe wa vikoa tofauti + - Hapo awali ilitoka kwenye daraja kwenye L1 +6. Daraja la L2 huangalia ikiwa mkataba wa tokeni ya ERC-20 kwenye L2 ni sahihi: + - Mkataba wa L2 unaripoti kuwa mwenzake wa L1 ni sawa na ule ambao tokeni zilitoka kwenye L1 + - Mkataba wa L2 unaripoti kuwa unaauni kiolesura sahihi ([kwa kutumia ERC-165](https://eips.ethereum.org/EIPS/eip-165)). +7. Ikiwa mkataba wa L2 ni sahihi, piga simu ili kutoa idadi ifaayo ya tokeni kwa anwani ifaayo. Ikiwa sivyo, anza mchakato wa kutoa ili kumruhusu mtumiaji kudai tokeni kwenye L1. + +### Mtiririko wa utoaji {#withdrawal-flow} + +#### Safu 2 {#withdrawal-flow-layer-2} + +1. Mtoaji anapiga simu daraja la L2 (`withdraw` au `withdrawTo`) +2. Daraja la L2 huchoma idadi ifaayo ya tokeni za `msg.sender` +3. Daraja la L2 hutumia utaratibu wa ujumbe wa vikoa tofauti kupiga simu `finalizeETHWithdrawal` au `finalizeERC20Withdrawal` kwenye daraja la L1 + +#### Safu 1 {#withdrawal-flow-layer-1} + +4. Daraja la L1 huhakikisha simu kwa `finalizeETHWithdrawal` au `finalizeERC20Withdrawal` ni halali: + - Imetoka kwenye utaratibu wa ujumbe wa vikoa tofauti + - Hapo awali ilitoka kwenye daraja kwenye L2 +5. Daraja la L1 huhamisha rasilimali ifaayo (ETH au ERC-20) kwa anwani ifaayo + +## Msimbo wa Safu 1 {#layer-1-code} + +Huu ndio msimbo unaoendeshwa kwenye L1, Mtandao Mkuu wa Ethereum. + +### IL1ERC20Bridge {#IL1ERC20Bridge} + +[Kiolesura hiki kimefafanuliwa hapa](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1ERC20Bridge.sol). +Inajumuisha kazi na ufafanuzi unaohitajika kwa kuvusha tokeni za ERC-20 kwa daraja. + +```solidity +// SPDX-License-Identifier: MIT +``` + +[Sehemu kubwa ya msimbo wa Optimism hutolewa chini ya leseni ya MIT](https://help.optimism.io/hc/en-us/articles/4411908707995-What-software-license-does-Optimism-use-). + +```solidity +pragma solidity >0.5.0 <0.9.0; +``` + +Wakati wa kuandika toleo la hivi karibuni la Solidity ni 0.8.12. +Hadi toleo la 0.9.0 litolewe, hatujui kama msimbo huu unaendana nalo au la. + +```solidity +/** + * @title IL1ERC20Bridge + */ +interface IL1ERC20Bridge { + /********** + * Matukio * + **********/ + + event ERC20DepositInitiated( +``` + +Katika istilahi za daraja la Optimism _kuweka_ kunamaanisha uhamisho kutoka L1 hadi L2, na _kutoa_ kunamaanisha uhamisho kutoka L2 hadi L1. + +```solidity + anwani iliyoorodheshwa _l1Token, + anwani iliyoorodheshwa _l2Token, +``` + +Katika hali nyingi anwani ya ERC-20 kwenye L1 si sawa na anwani ya ERC-20 inayolingana kwenye L2. +[Unaweza kuona orodha ya anwani za tokeni hapa](https://static.optimism.io/optimism.tokenlist.json). +Anwani yenye `chainId` 1 iko kwenye L1 (Mtandao Mkuu) na anwani yenye `chainId` 10 iko kwenye L2 (Optimism). +Thamani zingine mbili za `chainId` ni za mtandao wa majaribio wa Kovan (42) na mtandao wa majaribio wa Optimistic Kovan (69). + +```solidity + anwani iliyoorodheshwa _from, + anwani _to, + uint256 _amount, + bytes _data + ); +``` + +Inawezekana kuongeza maelezo kwenye uhamisho, ambapo huongezwa kwenye matukio yanayoyaripoti. + +```solidity + event ERC20WithdrawalFinalized( + anwani iliyoorodheshwa _l1Token, + anwani iliyoorodheshwa _l2Token, + anwani iliyoorodheshwa _from, + anwani _to, + uint256 _amount, + bytes _data + ); +``` + +Mkataba huo huo wa daraja hushughulikia uhamisho katika pande zote mbili. +Kwa upande wa daraja la L1, hii inamaanisha uanzishaji wa uwekaji na ukamilishaji wa utoaji. + +```solidity + + /******************** + * Kazi za Umma * + ********************/ + + /** + * @dev pata anwani ya mkataba wa daraja la L2 unaolingana. + * @return Anwani ya mkataba wa daraja la L2 unaolingana. + */ + function l2TokenBridge() external returns (anwani); +``` + +Kazi hii haihitajiki sana, kwa sababu kwenye L2 ni mkataba uliotumwa awali, kwa hivyo huwa kwenye anwani `0x4200000000000000000000000000000000000010`. +Iko hapa kwa ulinganifu na daraja la L2, kwa sababu anwani ya daraja la L1 si rahisi kujua. + +```solidity + /** + * @dev weka kiasi cha ERC20 kwenye salio la mpigaji simu kwenye L2. + * @param _l1Token Anwani ya ERC20 ya L1 tunayoweka + * @param _l2Token Anwani ya ERC20 ya L2 inayolingana na L1 + * @param _amount Kiasi cha ERC20 cha kuweka + * @param _l2Gas Kikomo cha gesi kinachohitajika kukamilisha uwekaji kwenye L2. + * @param _data Data ya hiari ya kupeleka kwa L2. Data hii hutolewa + * kama urahisi tu kwa mikataba ya nje. Mbali na kutekeleza urefu wa juu, + * mikataba hii haitoi dhamana yoyote kuhusu maudhui yake. + */ + function depositERC20( + anwani _l1Token, + anwani _l2Token, + uint256 _amount, + uint32 _l2Gas, + bytes calldata _data + ) external; +``` + +Kigezo cha `_l2Gas` ni kiasi cha gesi ya L2 ambacho muamala unaruhusiwa kutumia. +[Hadi kikomo fulani (cha juu), hii ni bure](https://community.optimism.io/docs/developers/bridge/messaging/#for-l1-%E2%87%92-l2-transactions-2), kwa hivyo isipokuwa mkataba wa ERC-20 unafanya jambo la ajabu sana wakati wa kutoa, haipaswi kuwa suala. +Kazi hii inashughulikia hali ya kawaida, ambapo mtumiaji huvusha rasilimali kwa daraja kwenda anwani ileile kwenye mnyororo wa bloku tofauti. + +```solidity + /** + * @dev weka kiasi cha ERC20 kwenye salio la mpokeaji kwenye L2. + * @param _l1Token Anwani ya ERC20 ya L1 tunayoweka + * @param _l2Token Anwani ya ERC20 ya L2 inayolingana na L1 + * @param _to Anwani ya L2 ya kuweka utoaji. + * @param _amount Kiasi cha ERC20 cha kuweka. + * @param _l2Gas Kikomo cha gesi kinachohitajika kukamilisha uwekaji kwenye L2. + * @param _data Data ya hiari ya kupeleka kwa L2. Data hii hutolewa + * kama urahisi tu kwa mikataba ya nje. Mbali na kutekeleza urefu wa juu, + * mikataba hii haitoi dhamana yoyote kuhusu maudhui yake. + */ + function depositERC20To( + anwani _l1Token, + anwani _l2Token, + anwani _to, + uint256 _amount, + uint32 _l2Gas, + bytes calldata _data + ) external; +``` + +Kazi hii ni karibu sawa na `depositERC20`, lakini inakuwezesha kutuma ERC-20 kwa anwani tofauti. + +```solidity + /************************* + * Kazi za Mnyororo-Msalaba * + *************************/ + + /** + * @dev Kamilisha utoaji kutoka L2 hadi L1, na weka fedha kwenye salio la mpokeaji la + * tokeni ya L1 ERC20. + * Simu hii itashindwa ikiwa utoaji ulioanzishwa kutoka L2 haujakamilishwa. + * + * @param _l1Token Anwani ya tokeni ya L1 ya kukamilisha utoaji. + * @param _l2Token Anwani ya tokeni ya L2 ambapo utoaji ulianzishwa. + * @param _from Anwani ya L2 inayoanzisha uhamisho. + * @param _to Anwani ya L1 ya kuweka utoaji. + * @param _amount Kiasi cha ERC20 cha kuweka. + * @param _data Data iliyotolewa na mtumaji kwenye L2. Data hii hutolewa + * kama urahisi tu kwa mikataba ya nje. Mbali na kutekeleza urefu wa juu, + * mikataba hii haitoi dhamana yoyote kuhusu maudhui yake. + */ + function finalizeERC20Withdrawal( + anwani _l1Token, + anwani _l2Token, + anwani _from, + anwani _to, + uint256 _amount, + bytes calldata _data + ) external; +} +``` + +Utoaji (na ujumbe mwingine kutoka L2 hadi L1) katika Optimism ni mchakato wa hatua mbili: + +1. Muamala wa kuanzisha kwenye L2. +2. Muamala wa ukamilishaji au kudai kwenye L1. + Muamala huu unahitaji kufanyika baada ya [kipindi cha changamoto ya makosa](https://community.optimism.io/docs/how-optimism-works/#fault-proofs) kwa muamala wa L2 kuisha. + +### IL1StandardBridge {#il1standardbridge} + +[Kiolesura hiki kimefafanuliwa hapa](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1StandardBridge.sol). +Faili hili lina ufafanuzi wa matukio na kazi kwa ETH. +Ufafanuzi huu unafanana sana na ule uliofafanuliwa katika `IL1ERC20Bridge` hapo juu kwa ERC-20. + +Kiolesura cha daraja kimegawanywa kati ya faili mbili kwa sababu baadhi ya tokeni za ERC-20 zinahitaji usindikaji maalum na haziwezi kushughulikiwa na daraja la kawaida. +Kwa njia hii daraja maalum linaloshughulikia tokeni kama hiyo linaweza kutekeleza `IL1ERC20Bridge` na sio lazima pia kuvusha ETH kwa daraja. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0 <0.9.0; + +import "./IL1ERC20Bridge.sol"; + +/** + * @title IL1StandardBridge + */ +interface IL1StandardBridge is IL1ERC20Bridge { + /********** + * Matukio * + **********/ + event ETHDepositInitiated( + anwani iliyoorodheshwa _from, + anwani iliyoorodheshwa _to, + uint256 _amount, + bytes _data + ); +``` + +Tukio hili ni karibu sawa na toleo la ERC-20 (`ERC20DepositInitiated`), isipokuwa bila anwani za tokeni za L1 na L2. +Hali kadhalika kwa matukio mengine na kazi. + +```solidity + event ETHWithdrawalFinalized( + . + . + . + ); + + /******************** + * Kazi za Umma * + ********************/ + + /** + * @dev Weka kiasi cha ETH kwenye salio la mpigaji simu kwenye L2. + . + . + . + */ + function depositETH(uint32 _l2Gas, bytes calldata _data) external payable; + + /** + * @dev Weka kiasi cha ETH kwenye salio la mpokeaji kwenye L2. + . + . + . + */ + function depositETHTo( + anwani _to, + uint32 _l2Gas, + bytes calldata _data + ) external payable; + + /************************* + * Kazi za Mnyororo-Msalaba * + *************************/ + + /** + * @dev Kamilisha utoaji kutoka L2 hadi L1, na weka fedha kwenye salio la mpokeaji la + * tokeni ya L1 ETH. Kwa kuwa ni xDomainMessenger pekee anayeweza kupiga simu kazi hii, haitapigwa kamwe + * kabla ya utoaji kukamilishwa. + . + . + . + */ + function finalizeETHWithdrawal( + anwani _from, + anwani _to, + uint256 _amount, + bytes calldata _data + ) external; +} +``` + +### CrossDomainEnabled {#crossdomainenabled} + +[Mkataba huu](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/CrossDomainEnabled.sol) unarithiwa na madaraja yote mawili ([L1](#the-l1-bridge-contract) na [L2](#the-l2-bridge-contract)) kutuma ujumbe kwa safu nyingine. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0 <0.9.0; + +/* Interface Imports */ +import { ICrossDomainMessenger } from "./ICrossDomainMessenger.sol"; +``` + +[Kiolesura hiki](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/ICrossDomainMessenger.sol) kinaeleza mkataba jinsi ya kutuma ujumbe kwa safu nyingine, kwa kutumia mtumaji ujumbe wa vikoa tofauti. +Mtumaji ujumbe huu wa vikoa tofauti ni mfumo mwingine kabisa, na unastahili makala yake, ambayo natumai kuandika katika siku zijazo. + +```solidity +/** + * @title CrossDomainEnabled + * @dev Mkataba msaidizi kwa mikataba inayofanya mawasiliano ya vikoa tofauti + * + * Mkusanyaji uliotumika: umefafanuliwa na mkataba unaorithi + */ +contract CrossDomainEnabled { + /************* + * Vigeu * + *************/ + + // Mkataba wa Mtumaji Ujumbe unaotumika kutuma na kupokea ujumbe kutoka kwa kikoa kingine. + anwani public messenger; + + /*************** + * Kijenzi * + ***************/ + + /** + * @param _messenger Anwani ya CrossDomainMessenger kwenye safu ya sasa. + */ + constructor(anwani _messenger) { + messenger = _messenger; + } +``` + +Kigezo kimoja ambacho mkataba unahitaji kujua, anwani ya mtumaji ujumbe wa vikoa tofauti kwenye safu hii. +Kigezo hiki kinawekwa mara moja, katika kijenzi, na hakibadiliki kamwe. + +```solidity + + /********************** + * Virekebishaji Kazi * + **********************/ + + /** + * Hutekeleza kwamba kazi iliyorekebishwa inaweza kupigwa simu tu na akaunti maalum ya kikoa tofauti. + * @param _sourceDomainAccount Akaunti pekee kwenye kikoa cha asili ambayo + * imethibitishwa kupiga simu kazi hii. + */ + modifier onlyFromCrossDomainAccount(anwani _sourceDomainAccount) { +``` + +Ujumbe wa vikoa tofauti unaweza kufikiwa na mkataba wowote kwenye mnyororo wa bloku ambapo unaendeshwa (iwe Mtandao Mkuu wa Ethereum au Optimism). +Lakini tunahitaji daraja kwa kila upande _tu_ kuamini ujumbe fulani ikiwa unatoka kwenye daraja kwa upande mwingine. + +```solidity + require( + msg.sender == address(getCrossDomainMessenger()), + "OVM_XCHAIN: mkataba wa mtumaji ujumbe haujathibitishwa" + ); +``` + +Ujumbe tu kutoka kwa mtumaji ujumbe wa vikoa tofauti unaofaa (`messenger`, kama unavyoona hapa chini) unaweza kuaminiwa. + +```solidity + + require( + getCrossDomainMessenger().xDomainMessageSender() == _sourceDomainAccount, + "OVM_XCHAIN: mtumaji asiye sahihi wa ujumbe wa kikoa tofauti" + ); +``` + +Njia ambayo mtumaji ujumbe wa vikoa tofauti anatoa anwani iliyotuma ujumbe na safu nyingine ni [kazi ya `.xDomainMessageSender()`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L122-L128). +Muda wote inapoitwa katika muamala ulioanzishwa na ujumbe inaweza kutoa habari hii. + +Tunahitaji kuhakikisha kuwa ujumbe tuliopokea ulitoka kwenye daraja lingine. + +```solidity + + _; + } + + /********************** + * Kazi za Ndani * + **********************/ + + /** + * Hupata mtumaji ujumbe, kawaida kutoka kwenye hifadhi. Kazi hii inawekwa wazi iwapo mkataba mtoto + * unahitaji kubatilisha. + * @rejesha Anwani ya mkataba wa mtumaji ujumbe wa vikoa tofauti ambayo inapaswa kutumika. + */ + function getCrossDomainMessenger() internal virtual returns (ICrossDomainMessenger) { + return ICrossDomainMessenger(messenger); + } +``` + +Kazi hii inarejesha mtumaji ujumbe wa vikoa tofauti. +Tunatumia kazi badala ya kigezo `messenger` kuruhusu mikataba inayorithi kutoka kwa hii kutumia algoriti kubainisha ni mtumaji ujumbe gani wa vikoa tofauti wa kutumia. + +```solidity + + /** + * Hutuma ujumbe kwa akaunti kwenye kikoa kingine + * @param _crossDomainTarget Mpokeaji aliyekusudiwa kwenye kikoa lengwa + * @param _message Data ya kutuma kwa lengo (kawaida calldata kwa kazi yenye + * `onlyFromCrossDomainAccount()`) + * @param _gasLimit Kikomo cha gesi kwa risiti ya ujumbe kwenye kikoa lengwa. + */ + function sendCrossDomainMessage( + anwani _crossDomainTarget, + uint32 _gasLimit, + bytes memory _message +``` + +Hatimaye, kazi inayotuma ujumbe kwa safu nyingine. + +```solidity + ) internal { + // slither-disable-next-line reentrancy-events, reentrancy-benign +``` + +[Slither](https://github.com/crytic/slither) ni kichanganuzi tuli ambacho Optimism huendesha kwenye kila mkataba kutafuta udhaifu na matatizo mengine yanayoweza kutokea. +Katika kesi hii, mstari unaofuata unasababisha udhaifu mbili: + +1. [Matukio ya Kuingia Tena](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3) +2. [Kuingia tena kusiko na madhara](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) + +```solidity + getCrossDomainMessenger().sendMessage(_crossDomainTarget, _message, _gasLimit); + } +} +``` + +Katika kesi hii hatuna wasiwasi kuhusu kuingia tena tunajua `getCrossDomainMessenger()` inarejesha anwani inayoaminika, hata kama Slither haina njia ya kujua hilo. + +### Mkataba wa daraja la L1 {#the-l1-bridge-contract} + +[Msimbo chanzo wa mkataba huu uko hapa](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1StandardBridge.sol). + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; +``` + +Violesura vinaweza kuwa sehemu ya mikataba mingine, kwa hivyo vinapaswa kuunga mkono anuwai ya matoleo ya Solidity. +Lakini daraja lenyewe ni mkataba wetu, na tunaweza kuwa wakali kuhusu toleo gani la Solidity linatumia. + +```solidity +/* Interface Imports */ +import { IL1StandardBridge } from "./IL1StandardBridge.sol"; +import { IL1ERC20Bridge } from "./IL1ERC20Bridge.sol"; +``` + +[IL1ERC20Bridge](#IL1ERC20Bridge) na [IL1StandardBridge](#IL1StandardBridge) zimeelezwa hapo juu. + +```solidity +import { IL2ERC20Bridge } from "../../L2/messaging/IL2ERC20Bridge.sol"; +``` + +[Kiolesura hiki](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol) kinaturuhusu kuunda ujumbe wa kudhibiti daraja la kawaida kwenye L2. + +```solidity +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +``` + +[Kiolesura hiki](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) kinaturuhusu kudhibiti mikataba ya ERC-20. +[Unaweza kusoma zaidi kuhusu hilo hapa](/developers/tutorials/erc20-annotated-code/#the-interface). + +```solidity +/* Library Imports */ +import { CrossDomainEnabled } from "../../libraries/bridge/CrossDomainEnabled.sol"; +``` + +[Kama ilivyoelezwa hapo juu](#crossdomainenabled), mkataba huu unatumika kwa ujumbe wa kati ya safu. + +```solidity +import { Lib_PredeployAddresses } from "../../libraries/constants/Lib_PredeployAddresses.sol"; +``` + +[`Lib_PredeployAddresses`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol) ina anwani za mikataba ya L2 ambayo huwa na anwani sawa kila wakati. Hii inajumuisha daraja la kawaida kwenye L2. + +```solidity +import { Address } from "@openzeppelin/contracts/utils/Address.sol"; +``` + +[Huduma za Anwani za OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol). Inatumika kutofautisha kati ya anwani za mkataba na zile za akaunti zinazomilikiwa na watu wa nje (EOA). + +Kumbuka kuwa hili si suluhisho kamilifu, kwa sababu hakuna njia ya kutofautisha kati ya simu za moja kwa moja na simu zilizopigwa kutoka kwa kijenzi cha mkataba, lakini angalau hii inatuwezesha kutambua na kuzuia baadhi ya makosa ya kawaida ya watumiaji. + +```solidity +import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +``` + +[Kiwango cha ERC-20](https://eips.ethereum.org/EIPS/eip-20) kinaauni njia mbili kwa mkataba kuripoti kutofaulu: + +1. Batilisha +2. Rejesha `false` + +Kushughulikia kesi zote mbili kungefanya msimbo wetu kuwa mgumu zaidi, kwa hivyo badala yake tunatumia [`SafeERC20` ya OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol), ambayo inahakikisha [kushindwa kote kunasababisha ubatilishaji](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol#L96). + +```solidity +/** + * @title L1StandardBridge + * @dev L1 ETH na ERC20 Bridge ni mkataba unaohifadhi fedha za L1 zilizowekwa na tokeni za kawaida + * ambazo zinatumika kwenye L2. Inasawazisha Daraja la L2 linalolingana, kulijulisha kuhusu uwekaji + * na kulisikiliza kwa utoaji mpya uliokamilishwa. + * + */ +contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { + using SafeERC20 for IERC20; +``` + +Mstari huu ndivyo tunavyobainisha kutumia kifuniko cha `SafeERC20` kila tunapotumia kiolesura cha `IERC20`. + +```solidity + + /******************************** + * Marejeleo ya Mkataba wa Nje * + ********************************/ + + anwani public l2TokenBridge; +``` + +Anwani ya [L2StandardBridge](#the-l2-bridge-contract). + +```solidity + + // Ramani za tokeni ya L1 kwa tokeni ya L2 kwa salio la tokeni ya L1 iliyowekwa + mapping(anwani => mapping(anwani => uint256)) public deposits; +``` + +Ramani maradufu kama hii ndiyo njia unayofafanua [safu ya pande mbili isiyo na mpangilio](https://en.wikipedia.org/wiki/Sparse_matrix). +Thamani katika muundo huu wa data zinatambuliwa kama `deposit[anwani ya tokeni ya L1][anwani ya tokeni ya L2]`. +Thamani chaguo-msingi ni sufuri. +Seli tu zilizowekwa kwa thamani tofauti ndizo huandikwa kwenye hifadhi. + +```solidity + + /*************** + * Kijenzi * + ***************/ + + // Mkataba huu unaishi nyuma ya wakala, kwa hivyo vigezo vya kijenzi havitatumika. + constructor() CrossDomainEnabled(anwani(0)) {} +``` + +Ili kutaka kuweza kusasisha mkataba huu bila kulazimika kunakili vigezo vyote kwenye hifadhi. +Ili kufanya hivyo tunatumia [`Wakala`](https://docs.openzeppelin.com/contracts/3.x/api/proxy), mkataba unaotumia [`delegatecall`](https://solidity-by-example.org/delegatecall/) kuhamisha simu kwa mkataba tofauti ambao anwani yake imehifadhiwa na mkataba wa wakala (unaposasisha unamwambia wakala kubadilisha anwani hiyo). +Unapotumia `delegatecall` hifadhi inabaki kuwa hifadhi ya mkataba _unaopiga simu_, kwa hivyo thamani za vigezo vyote vya hali ya mkataba haziathiriwi. + +Moja ya athari za muundo huu ni kwamba hifadhi ya mkataba ambao ni _uliopigiwa simu_ wa `delegatecall` haitumiwi na kwa hivyo thamani za kijenzi zilizopitishwa kwake hazijalishi. +Hii ndiyo sababu tunaweza kutoa thamani isiyo na maana kwa kijenzi cha `CrossDomainEnabled`. +Pia ndiyo sababu uanzishaji hapa chini umetenganishwa na kijenzi. + +```solidity + /****************** + * Uanzishaji * + ******************/ + + /** + * @param _l1messenger Anwani ya L1 Messenger inayotumika kwa mawasiliano ya mnyororo-msalaba. + * @param _l2TokenBridge Anwani ya daraja la kawaida la L2. + */ + // slither-disable-next-line external-function +``` + +[Jaribio hili la Slither](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) linatambua kazi ambazo hazipigwi simu kutoka kwa msimbo wa mkataba na kwa hivyo zinaweza kutangazwa kuwa `za nje` badala ya `za umma`. +Gharama ya gesi ya kazi za `nje` inaweza kuwa chini, kwa sababu zinaweza kupewa vigezo katika calldata. +Kazi zilizotangazwa kuwa `za umma` zinapaswa kufikiwa kutoka ndani ya mkataba. +Mikataba haiwezi kurekebisha calldata zao wenyewe, kwa hivyo vigezo vinapaswa kuwa kwenye kumbukumbu. +Wakati kazi kama hiyo inapoitwa kutoka nje, ni muhimu kunakili calldata kwenye kumbukumbu, ambayo inagharimu gesi. +Katika kesi hii kazi inaitwa mara moja tu, kwa hivyo ufanisi haujalishi kwetu. + +```solidity + function initialize(anwani _l1messenger, anwani _l2TokenBridge) public { + require(messenger == address(0), "Mkataba tayari umeanzishwa."); +``` + +Kazi ya `initialize` inapaswa kuitwa mara moja tu. +Ikiwa anwani ya mtumaji ujumbe wa vikoa tofauti wa L1 au daraja la tokeni la L2 itabadilika, tunaunda wakala mpya na daraja jipya linaloiita. +Hili haliwezekani kutokea isipokuwa mfumo mzima unaposasishwa, tukio la nadra sana. + +Kumbuka kuwa kazi hii haina utaratibu wowote unaozuia _nani_ anaweza kuiita. +Hii inamaanisha kuwa kwa nadharia mshambuliaji anaweza kusubiri hadi tutumie wakala na toleo la kwanza la daraja na kisha [kufanya shughuli haraka](https://solidity-by-example.org/hacks/front-running/) kufikia kazi ya `initialize` kabla ya mtumiaji halali kufanya hivyo. Lakini kuna njia mbili za kuzuia hili: + +1. Ikiwa mikataba haitumwi moja kwa moja na EOA lakini [katika muamala ambao una mkataba mwingine uwaumbe](https://medium.com/upstate-interactive/creating-a-contract-with-a-smart-contract-bdb67c5c8595) mchakato mzima unaweza kuwa wa atomiki, na kumalizika kabla ya muamala mwingine wowote kutekelezwa. +2. Ikiwa simu halali kwa `initialize` itashindwa daima inawezekana kupuuza wakala na daraja jipya lililoundwa na kuunda mpya. + +```solidity + messenger = _l1messenger; + l2TokenBridge = _l2TokenBridge; + } +``` + +Hivi ni vigezo viwili ambavyo daraja linahitaji kujua. + +```solidity + + /************** + * Uwekaji * + **************/ + + /** @dev Kirekebishaji kinachohitaji mtumaji awe EOA. Ukaguzi huu unaweza kuepukwa na mkataba hasidi + * kupitia initcode, lakini inashughulikia kosa la mtumiaji tunalotaka kuepuka. + */ + modifier onlyEOA() { + // Inatumika kusimamisha uwekaji kutoka kwa mikataba (epuka tokeni zilizopotea kwa bahati mbaya) + require(!Address.isContract(msg.sender), "Akaunti si EOA"); + _; + } +``` + +Hii ndiyo sababu tulihitaji huduma za `Anwani` za OpenZeppelin. + +```solidity + /** + * @dev Kazi hii inaweza kuitwa bila data + * kuweka kiasi cha ETH kwenye salio la mpigaji simu kwenye L2. + * Kwa kuwa kazi ya kupokea haichukui data, kiasi + * chaguo-msingi cha kihafidhina hupelekwa L2. + */ + receive() external payable onlyEOA { + _initiateETHDeposit(msg.sender, msg.sender, 200_000, bytes("")); + } +``` + +Kazi hii ipo kwa madhumuni ya majaribio. +Kumbuka kuwa haionekani katika ufafanuzi wa kiolesura - si kwa matumizi ya kawaida. + +```solidity + /** + * @inheritdoc IL1StandardBridge + */ + function depositETH(uint32 _l2Gas, bytes calldata _data) external payable onlyEOA { + _initiateETHDeposit(msg.sender, msg.sender, _l2Gas, _data); + } + + /** + * @inheritdoc IL1StandardBridge + */ + function depositETHTo( + anwani _to, + uint32 _l2Gas, + bytes calldata _data + ) external payable { + _initiateETHDeposit(msg.sender, _to, _l2Gas, _data); + } +``` + +Kazi hizi mbili ni vifuniko vinavyozunguka `_initiateETHDeposit`, kazi inayoshughulikia uwekaji halisi wa ETH. + +```solidity + /** + * @dev Hufanya mantiki ya uwekaji kwa kuhifadhi ETH na kumjulisha Lango la ETH la L2 kuhusu + * uwekaji. + * @param _from Akaunti ya kuchukua uwekaji kutoka L1. + * @param _to Akaunti ya kumpa uwekaji kwenye L2. + * @param _l2Gas Kikomo cha gesi kinachohitajika kukamilisha uwekaji kwenye L2. + * @param _data Data ya hiari ya kupeleka kwa L2. Data hii hutolewa + * kama urahisi tu kwa mikataba ya nje. Mbali na kutekeleza urefu wa juu, + * mikataba hii haitoi dhamana yoyote kuhusu maudhui yake. + */ + function _initiateETHDeposit( + anwani _from, + anwani _to, + uint32 _l2Gas, + bytes memory _data + ) internal { + // Jenga calldata kwa simu ya finalizeDeposit + bytes memory message = abi.encodeWithSelector( +``` + +Njia ambayo ujumbe wa vikoa tofauti hufanya kazi ni kwamba mkataba lengwa unaitwa na ujumbe kama calldata yake. +Mikataba ya Solidity daima hutafsiri calldata zao kulingana na +[vipimo vya ABI](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html). +Kazi ya Solidity [`abi.encodeWithSelector`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#abi-encoding-and-decoding-functions) huunda calldata hiyo. + +```solidity + IL2ERC20Bridge.finalizeDeposit.selector, + anwani(0), + Lib_PredeployAddresses.OVM_ETH, + _from, + _to, + msg.value, + _data + ); +``` + +Ujumbe hapa ni kupiga simu [kazi ya `finalizeDeposit`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol#L141-L148) na vigezo hivi: + +| Kigezo | Thamani | Maana | +| ------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| \_l1Token | anwani(0) | Thamani maalum ya kuwakilisha ETH (ambayo si tokeni ya ERC-20) kwenye L1 | +| \_l2Token | Lib_PredeployAddresses.OVM_ETH | Mkataba wa L2 unaosimamia ETH kwenye Optimism, `0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000` (mkataba huu ni kwa matumizi ya ndani ya Optimism pekee) | +| \_kutoka | \_kutoka | Anwani kwenye L1 inayotuma ETH | +| \_kwa | \_kwa | Anwani kwenye L2 inayopokea ETH | +| kiasi | msg.value | Kiasi cha wei kilichotumwa (ambacho tayari kimetumwa kwenye daraja) | +| \_data | \_data | Data ya ziada ya kuambatisha kwenye uwekaji | + +```solidity + // Tuma calldata kwenye L2 + // slither-disable-next-line reentrancy-events + sendCrossDomainMessage(l2TokenBridge, _l2Gas, ujumbe); +``` + +Tuma ujumbe kupitia mtumaji ujumbe wa vikoa tofauti. + +```solidity + // slither-disable-next-line reentrancy-events + emit ETHDepositInitiated(_from, _to, msg.value, _data); + } +``` + +Toa tukio la kujulisha programu yoyote iliyogatuliwa inayosikiliza kuhusu uhamisho huu. + +```solidity + /** + * @inheritdoc IL1ERC20Bridge + */ + function depositERC20( + . + . + . + ) external virtual onlyEOA { + _initiateERC20Deposit(_l1Token, _l2Token, msg.sender, msg.sender, _amount, _l2Gas, _data); + } + + /** + * @inheritdoc IL1ERC20Bridge + */ + function depositERC20To( + . + . + . + ) external virtual { + _initiateERC20Deposit(_l1Token, _l2Token, msg.sender, _to, _amount, _l2Gas, _data); + } +``` + +Kazi hizi mbili ni vifuniko vinavyozunguka `_initiateERC20Deposit`, kazi inayoshughulikia uwekaji halisi wa ERC-20. + +```solidity + /** + * @dev Hufanya mantiki ya uwekaji kwa kumjulisha mkataba wa Tokeni Iliyowekwa ya L2 + * kuhusu uwekaji na kuita mshughulikiaji kufunga fedha za L1. (k.m., transferFrom) + * + * @param _l1Token Anwani ya ERC20 ya L1 tunayoweka + * @param _l2Token Anwani ya ERC20 ya L2 inayolingana na L1 + * @param _from Akaunti ya kuchukua uwekaji kutoka L1 + * @param _to Akaunti ya kumpa uwekaji kwenye L2 + * @param _amount Kiasi cha ERC20 cha kuweka. + * @param _l2Gas Kikomo cha gesi kinachohitajika kukamilisha uwekaji kwenye L2. + * @param _data Data ya hiari ya kupeleka kwa L2. Data hii hutolewa + * kama urahisi tu kwa mikataba ya nje. Mbali na kutekeleza urefu wa juu, + * mikataba hii haitoi dhamana yoyote kuhusu maudhui yake. + */ + function _initiateERC20Deposit( + anwani _l1Token, + anwani _l2Token, + anwani _from, + anwani _to, + uint256 _amount, + uint32 _l2Gas, + bytes calldata _data + ) internal { +``` + +Kazi hii inafanana na `_initiateETHDeposit` hapo juu, na tofauti chache muhimu. +Tofauti ya kwanza ni kwamba kazi hii inapokea anwani za tokeni na kiasi cha kuhamisha kama vigezo. +Kwa upande wa ETH simu kwa daraja tayari inajumuisha uhamisho wa rasilimali kwenda akaunti ya daraja (`msg.value`). + +```solidity + // Uwekaji unapoanzishwa kwenye L1, Daraja la L1 huhamisha fedha kwake lenyewe kwa ajili ya + // utoaji wa siku zijazo. safeTransferFrom pia huangalia ikiwa mkataba una msimbo, kwa hivyo hii itashindwa ikiwa + // _from ni EOA au anwani(0). + // slither-disable-next-line reentrancy-events, reentrancy-benign + IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount); +``` + +Uhamisho wa tokeni za ERC-20 hufuata mchakato tofauti na ETH: + +1. Mtumiaji (`_from`) anatoa ruhusa kwa daraja kuhamisha tokeni zinazofaa. +2. Mtumiaji anapiga simu daraja na anwani ya mkataba wa tokeni, kiasi, n.k. +3. Daraja linahamisha tokeni (kwake lenyewe) kama sehemu ya mchakato wa uwekaji. + +Hatua ya kwanza inaweza kutokea katika muamala tofauti na mbili za mwisho. +Hata hivyo, uendeshaji-wa-mbele si tatizo kwa sababu kazi mbili zinazoita `_initiateERC20Deposit` (`depositERC20` na `depositERC20To`) huita kazi hii tu na `msg.sender` kama kigezo cha `_from`. + +```solidity + // Jenga calldata kwa _l2Token.finalizeDeposit(_to, _amount) + bytes memory message = abi.encodeWithSelector( + IL2ERC20Bridge.finalizeDeposit.selector, + _l1Token, + _l2Token, + _from, + _to, + _amount, + _data + ); + + // Tuma calldata kwenye L2 + // slither-disable-next-line reentrancy-events, reentrancy-benign + sendCrossDomainMessage(l2TokenBridge, _l2Gas, ujumbe); + + // slither-disable-next-line reentrancy-benign + deposits[_l1Token][_l2Token] = deposits[_l1Token][_l2Token] + _amount; +``` + +Ongeza kiasi cha tokeni zilizowekwa kwenye muundo wa data wa `deposits`. +Kunaweza kuwa na anwani nyingi kwenye L2 zinazolingana na tokeni ileile ya L1 ERC-20, kwa hivyo haitoshi kutumia salio la daraja la tokeni ya L1 ERC-20 kufuatilia uwekaji. + +```solidity + + // slither-disable-next-line reentrancy-events + emit ERC20DepositInitiated(_l1Token, _l2Token, _from, _to, _amount, _data); + } + + /************************* + * Kazi za Mnyororo-Msalaba * + *************************/ + + /** + * @inheritdoc IL1StandardBridge + */ + function finalizeETHWithdrawal( + anwani _from, + anwani _to, + uint256 _amount, + bytes calldata _data +``` + +Daraja la L2 hutuma ujumbe kwa mtumaji ujumbe wa vikoa tofauti wa L2 ambao husababisha mtumaji ujumbe wa vikoa tofauti wa L1 kupiga simu kazi hii (mara tu [muamala unaokamilisha ujumbe](https://community.optimism.io/docs/developers/bridge/messaging/#fees-for-l2-%E2%87%92-l1-transactions) utakapowasilishwa kwenye L1, bila shaka). + +```solidity + ) external onlyFromCrossDomainAccount(l2TokenBridge) { +``` + +Hakikisha kuwa huu ni ujumbe _halali_, unaotoka kwa mtumaji ujumbe wa vikoa tofauti na unaotokana na daraja la tokeni la L2. +Kazi hii inatumika kutoa ETH kutoka kwa daraja, kwa hivyo tunapaswa kuhakikisha inaitwa tu na mpigaji simu aliyeidhinishwa. + +```solidity + // slither-disable-next-line reentrancy-events + (bool success, ) = _to.call{ value: _amount }(new bytes(0)); +``` + +Njia ya kuhamisha ETH ni kumpigia simu mpokeaji na kiasi cha wei katika `msg.value`. + +```solidity + require(success, "TransferHelper::safeTransferETH: Uhamisho wa ETH umeshindwa"); + + // slither-disable-next-line reentrancy-events + emit ETHWithdrawalFinalized(_from, _to, _amount, _data); +``` + +Toa tukio kuhusu utoaji. + +```solidity + } + + /** + * @inheritdoc IL1ERC20Bridge + */ + function finalizeERC20Withdrawal( + anwani _l1Token, + anwani _l2Token, + anwani _from, + anwani _to, + uint256 _amount, + bytes calldata _data + ) external onlyFromCrossDomainAccount(l2TokenBridge) { +``` + +Kazi hii inafanana na `finalizeETHWithdrawal` hapo juu, na mabadiliko muhimu kwa tokeni za ERC-20. + +```solidity + deposits[_l1Token][_l2Token] = deposits[_l1Token][_l2Token] - _amount; +``` + +Sasisha muundo wa data wa `deposits`. + +```solidity + // Utoaji unapokamilishwa kwenye L1, Daraja la L1 huhamisha fedha kwa mtoaji + // slither-disable-next-line reentrancy-events + IERC20(_l1Token).safeTransfer(_to, _amount); + + // slither-disable-next-line reentrancy-events + emit ERC20WithdrawalFinalized(_l1Token, _l2Token, _from, _to, _amount, _data); + } + + + /***************************** + * Ya muda - Kuhamisha ETH * + *****************************/ + + /** + * @dev Huongeza salio la ETH kwenye akaunti. Hii inakusudiwa kuruhusu ETH + * kuhamishwa kutoka lango la zamani hadi lango jipya. + * KUMBUKA: Hii imeachwa kwa sasisho moja tu ili tuweze kupokea ETH iliyohamishwa kutoka + * mkataba wa zamani + */ + function donateETH() external payable {} +} +``` + +Kulikuwa na utekelezaji wa awali wa daraja. +Tulipohamia kutoka kwa utekelezaji huo hadi huu, tulilazimika kuhamisha rasilimali zote. +Tokeni za ERC-20 zinaweza tu kuhamishwa. +Hata hivyo, ili kuhamisha ETH kwa mkataba unahitaji idhini ya mkataba huo, ambayo ndiyo `donateETH` inatupatia. + +## Tokeni za ERC-20 kwenye L2 {#erc-20-tokens-on-l2} + +Ili tokeni ya ERC-20 iingie kwenye daraja la kawaida, inahitaji kuruhusu daraja la kawaida, na _tu_ daraja la kawaida, kutoa tokeni. +Hii ni muhimu kwa sababu madaraja yanahitaji kuhakikisha kuwa idadi ya tokeni zinazozunguka kwenye Optimism ni sawa na idadi ya tokeni zilizofungwa ndani ya mkataba wa daraja la L1. +Ikiwa kuna tokeni nyingi sana kwenye L2 baadhi ya watumiaji wasingeweza kuvusha rasilimali zao kwa daraja kurudi L1. +Badala ya daraja linaloaminika, kimsingi tungeunda upya [benki ya hifadhi ya sehemu](https://www.investopedia.com/terms/f/fractionalreservebanking.asp). +Ikiwa kuna tokeni nyingi sana kwenye L1, baadhi ya tokeni hizo zingebaki zimefungwa ndani ya mkataba wa daraja milele kwa sababu hakuna njia ya kuzitoa bila kuchoma tokeni za L2. + +### IL2StandardERC20 {#il2standarderc20} + +Kila tokeni ya ERC-20 kwenye L2 inayotumia daraja la kawaida inahitaji kutoa [kiolesura hiki](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/IL2StandardERC20.sol), ambacho kina kazi na matukio ambayo daraja la kawaida linahitaji. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +``` + +[Kiolesura cha kawaida cha ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) hakijumuishi kazi za `mint` na `burn`. +Njia hizo hazihitajiki na [kiwango cha ERC-20](https://eips.ethereum.org/EIPS/eip-20), ambacho kinaacha taratibu za kuunda na kuharibu tokeni bila kubainishwa. + +```solidity +import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +``` + +[Kiolesura cha ERC-165](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol) kinatumika kubainisha kazi ambazo mkataba unatoa. +[Unaweza kusoma kiwango hapa](https://eips.ethereum.org/EIPS/eip-165). + +```solidity +interface IL2StandardERC20 is IERC20, IERC165 { + function l1Token() external returns (anwani); +``` + +Kazi hii inatoa anwani ya tokeni ya L1 ambayo imevushwa kwa daraja kwenda mkataba huu. +Kumbuka kuwa hatuna kazi kama hiyo kwa upande mwingine. +Tunahitaji kuweza kuvusha kwa daraja tokeni yoyote ya L1, bila kujali kama msaada wa L2 ulipangwa wakati ilitekelezwa au la. + +```solidity + + function mint(anwani _to, uint256 _amount) external; + + function burn(anwani _from, uint256 _amount) external; + + event Mint(anwani iliyoorodheshwa _account, uint256 _amount); + event Burn(anwani iliyoorodheshwa _account, uint256 _amount); +} +``` + +Kazi na matukio ya kutoa (kuunda) na kuchoma (kuharibu) tokeni. +Daraja linapaswa kuwa chombo pekee kinachoweza kuendesha kazi hizi ili kuhakikisha idadi ya tokeni ni sahihi (sawa na idadi ya tokeni zilizofungwa kwenye L1). + +### L2StandardERC20 {#L2StandardERC20} + +[Huu ndio utekelezaji wetu wa kiolesura cha `IL2StandardERC20`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/L2StandardERC20.sol). +Isipokuwa unahitaji aina fulani ya mantiki maalum, unapaswa kutumia hii. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +``` + +[Mkataba wa OpenZeppelin ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol). +Optimism haiamini katika kuunda upya gurudumu, hasa wakati gurudumu limekaguliwa vizuri na linahitaji kuwa la kuaminika vya kutosha kushikilia rasilimali. + +```solidity +import "./IL2StandardERC20.sol"; + +contract L2StandardERC20 is IL2StandardERC20, ERC20 { + anwani public l1Token; + anwani public l2Bridge; +``` + +Hivi ni vigezo viwili vya ziada vya usanidi ambavyo tunahitaji na ERC-20 kawaida haihitaji. + +```solidity + + /** + * @param _l2Bridge Anwani ya daraja la kawaida la L2. + * @param _l1Token Anwani ya tokeni ya L1 inayolingana. + * @param _name jina la ERC20. + * @param _symbol alama ya ERC20. + */ + constructor( + anwani _l2Bridge, + anwani _l1Token, + string memory _name, + string memory _symbol + ) ERC20(_name, _symbol) { + l1Token = _l1Token; + l2Bridge = _l2Bridge; + } +``` + +Kwanza piga simu kijenzi cha mkataba tunachorithi kutoka (`ERC20(_name, _symbol)`) na kisha weka vigezo vyetu wenyewe. + +```solidity + + modifier onlyL2Bridge() { + require(msg.sender == l2Bridge, "Ni Daraja la L2 pekee linaweza kutoa na kuchoma"); + _; + } + + + // slither-disable-next-line external-function + function supportsInterface(bytes4 _interfaceId) public pure returns (bool) { + bytes4 firstSupportedInterface = bytes4(keccak256("supportsInterface(bytes4)")); // ERC165 + bytes4 secondSupportedInterface = IL2StandardERC20.l1Token.selector ^ + IL2StandardERC20.mint.selector ^ + IL2StandardERC20.burn.selector; + return _interfaceId == firstSupportedInterface || _interfaceId == secondSupportedInterface; + } +``` + +Hivi ndivyo [ERC-165](https://eips.ethereum.org/EIPS/eip-165) inavyofanya kazi. +Kila kiolesura ni idadi ya kazi zinazoungwa mkono, na kinatambuliwa kama [au ya kipekee](https://en.wikipedia.org/wiki/Exclusive_or) ya [viteuzi vya kazi vya ABI](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html#function-selector) vya kazi hizo. + +Daraja la L2 linatumia ERC-165 kama ukaguzi wa usalama kuhakikisha kuwa mkataba wa ERC-20 ambao linatuma rasilimali ni `IL2StandardERC20`. + +**Kumbuka:** Hakuna kinachozuia mkataba hasidi kutoa majibu ya uwongo kwa `supportsInterface`, kwa hivyo huu ni utaratibu wa ukaguzi wa usalama, _sio_ utaratibu wa usalama. + +```solidity + // slither-disable-next-line external-function + function mint(anwani _to, uint256 _amount) public virtual onlyL2Bridge { + _mint(_to, _amount); + + emit Mint(_to, _amount); + } + + // slither-disable-next-line external-function + function burn(anwani _from, uint256 _amount) public virtual onlyL2Bridge { + _burn(_from, _amount); + + emit Burn(_from, _amount); + } +} +``` + +Ni daraja la L2 pekee linaloruhusiwa kutoa na kuchoma rasilimali. + +`_mint` na `_burn` kwa kweli zimefafanuliwa katika [mkataba wa OpenZeppelin ERC-20](/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn). +Mkataba huo hauwaweki wazi nje, kwa sababu masharti ya kutoa na kuchoma tokeni ni tofauti kama idadi ya njia za kutumia ERC-20. + +## Msimbo wa Daraja la L2 {#l2-bridge-code} + +Huu ni msimbo unaoendesha daraja kwenye Optimism. +[Chanzo cha mkataba huu kiko hapa](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol). + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +/* Interface Imports */ +import { IL1StandardBridge } from "../../L1/messaging/IL1StandardBridge.sol"; +import { IL1ERC20Bridge } from "../../L1/messaging/IL1ERC20Bridge.sol"; +import { IL2ERC20Bridge } from "./IL2ERC20Bridge.sol"; +``` + +Kiolesura cha [IL2ERC20Bridge](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol) kinafanana sana na [sawa ya L1](#IL1ERC20Bridge) tuliyoona hapo juu. +Kuna tofauti mbili muhimu: + +1. Kwenye L1 unaanzisha uwekaji na kukamilisha utoaji. + Hapa unaanzisha utoaji na kukamilisha uwekaji. +2. Kwenye L1 ni muhimu kutofautisha kati ya ETH na tokeni za ERC-20. + Kwenye L2 tunaweza kutumia kazi zile zile kwa zote mbili kwa sababu ndani ya Optimism salio za ETH hushughulikiwa kama tokeni ya ERC-20 yenye anwani [0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000](https://explorer.optimism.io/address/0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000). + +```solidity +/* Library Imports */ +import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; +import { CrossDomainEnabled } from "../../libraries/bridge/CrossDomainEnabled.sol"; +import { Lib_PredeployAddresses } from "../../libraries/constants/Lib_PredeployAddresses.sol"; + +/* Contract Imports */ +import { IL2StandardERC20 } from "../../standards/IL2StandardERC20.sol"; + +/** + * @title L2StandardBridge + * @dev Daraja la Kawaida la L2 ni mkataba unaofanya kazi pamoja na daraja la Kawaida la L1 + * kuwezesha mabadiliko ya ETH na ERC20 kati ya L1 na L2. + * Mkataba huu hufanya kazi kama mtoaji wa tokeni mpya inaposikia kuhusu uwekaji kwenye daraja la Kawaida la L1 + *. + * Mkataba huu pia hufanya kazi kama mchomaji wa tokeni zilizokusudiwa kwa utoaji, ukijulisha daraja la L1 + * kutoa fedha za L1. + */ +contract L2StandardBridge is IL2ERC20Bridge, CrossDomainEnabled { + /******************************** + * Marejeleo ya Mkataba wa Nje * + ********************************/ + + anwani public l1TokenBridge; +``` + +Fuatilia anwani ya daraja la L1. +Kumbuka kuwa tofauti na sawa ya L1, hapa _tunahitaji_ kigezo hiki. +Anwani ya daraja la L1 haijulikani mapema. + +```solidity + + /*************** + * Kijenzi * + ***************/ + + /** + * @param _l2CrossDomainMessenger Mtumaji ujumbe wa vikoa tofauti unaotumiwa na mkataba huu. + * @param _l1TokenBridge Anwani ya daraja la L1 iliyotumwa kwenye mnyororo mkuu. + */ + constructor(anwani _l2CrossDomainMessenger, anwani _l1TokenBridge) + CrossDomainEnabled(_l2CrossDomainMessenger) + { + l1TokenBridge = _l1TokenBridge; + } + + /*************** + * Utoaji * + ***************/ + + /** + * @inheritdoc IL2ERC20Bridge + */ + function withdraw( + anwani _l2Token, + uint256 _amount, + uint32 _l1Gas, + bytes calldata _data + ) external virtual { + _initiateWithdrawal(_l2Token, msg.sender, msg.sender, _amount, _l1Gas, _data); + } + + /** + * @inheritdoc IL2ERC20Bridge + */ + function withdrawTo( + anwani _l2Token, + anwani _to, + uint256 _amount, + uint32 _l1Gas, + bytes calldata _data + ) external virtual { + _initiateWithdrawal(_l2Token, msg.sender, _to, _amount, _l1Gas, _data); + } +``` + +Kazi hizi mbili zinaanzisha utoaji. +Kumbuka kuwa hakuna haja ya kubainisha anwani ya tokeni ya L1. +Tokeni za L2 zinatarajiwa kutuambia anwani sawa ya L1. + +```solidity + + /** + * @dev Hufanya mantiki ya utoaji kwa kuchoma tokeni na kumjulisha + * Lango la tokeni la L1 kuhusu utoaji. + * @param _l2Token Anwani ya tokeni ya L2 ambapo utoaji unaanzishwa. + * @param _from Akaunti ya kuchukua utoaji kutoka L2. + * @param _to Akaunti ya kumpa utoaji kwenye L1. + * @param _amount Kiasi cha tokeni ya kutoa. + * @param _l1Gas Haijatumiwa, lakini imejumuishwa kwa mazingatio ya utangamano wa mbele. + * @param _data Data ya hiari ya kupeleka kwa L1. Data hii hutolewa + * kama urahisi tu kwa mikataba ya nje. Mbali na kutekeleza urefu wa juu, + * mikataba hii haitoi dhamana yoyote kuhusu maudhui yake. + */ + function _initiateWithdrawal( + anwani _l2Token, + anwani _from, + anwani _to, + uint256 _amount, + uint32 _l1Gas, + bytes calldata _data + ) internal { + // Utoaji unapoanzishwa, tunachoma fedha za mtoaji ili kuzuia matumizi ya L2 + //. + // slither-disable-next-line reentrancy-events + IL2StandardERC20(_l2Token).burn(msg.sender, _amount); +``` + +Kumbuka kuwa _hatutegemei_ kigezo cha `_from` bali `msg.sender` ambayo ni ngumu zaidi kughushi (haiwezekani, kwa kadiri ninavyojua). + +```solidity + + // Jenga calldata kwa l1TokenBridge.finalizeERC20Withdrawal(_to, _amount) + // slither-disable-next-line reentrancy-events + anwani l1Token = IL2StandardERC20(_l2Token).l1Token(); + bytes memory message; + + if (_l2Token == Lib_PredeployAddresses.OVM_ETH) { +``` + +Kwenye L1 ni muhimu kutofautisha kati ya ETH na ERC-20. + +```solidity + ujumbe = abi.encodeWithSelector( + IL1StandardBridge.finalizeETHWithdrawal.selector, + _from, + _to, + _amount, + _data + ); + } else { + ujumbe = abi.encodeWithSelector( + IL1ERC20Bridge.finalizeERC20Withdrawal.selector, + l1Token, + _l2Token, + _from, + _to, + _amount, + _data + ); + } + + // Tuma ujumbe hadi daraja la L1 + // slither-disable-next-line reentrancy-events + sendCrossDomainMessage(l1TokenBridge, _l1Gas, ujumbe); + + // slither-disable-next-line reentrancy-events + emit WithdrawalInitiated(l1Token, _l2Token, msg.sender, _to, _amount, _data); + } + + /************************************ + * Kazi ya Mnyororo-Msalaba: Uwekaji * + ************************************/ + + /** + * @inheritdoc IL2ERC20Bridge + */ + function finalizeDeposit( + anwani _l1Token, + anwani _l2Token, + anwani _from, + anwani _to, + uint256 _amount, + bytes calldata _data +``` + +Kazi hii inaitwa na `L1StandardBridge`. + +```solidity + ) external virtual onlyFromCrossDomainAccount(l1TokenBridge) { +``` + +Hakikisha chanzo cha ujumbe ni halali. +Hii ni muhimu kwa sababu kazi hii huita `_mint` na inaweza kutumika kutoa tokeni ambazo hazifunikwa na tokeni ambazo daraja linamiliki kwenye L1. + +```solidity + // Angalia tokeni lengwa inatii na + // hakikisha tokeni iliyowekwa kwenye L1 inalingana na uwakilishi wa tokeni iliyowekwa ya L2 hapa + if ( + // slither-disable-next-line reentrancy-events + ERC165Checker.supportsInterface(_l2Token, 0x1d1d8b63) && + _l1Token == IL2StandardERC20(_l2Token).l1Token() +``` + +Ukaguzi wa usalama: + +1. Kiolesura sahihi kinaauniwa +2. Anwani ya L1 ya mkataba wa L2 ERC-20 inalingana na chanzo cha L1 cha tokeni + +```solidity + ) { + // Uwekaji unapokamilishwa, tunaweka kiasi sawa cha + // tokeni kwenye akaunti kwenye L2. + // slither-disable-next-line reentrancy-events + IL2StandardERC20(_l2Token).mint(_to, _amount); + // slither-disable-next-line reentrancy-events + emit DepositFinalized(_l1Token, _l2Token, _from, _to, _amount, _data); +``` + +Ikiwa ukaguzi wa usalama utapita, kamilisha uwekaji: + +1. Toa tokeni +2. Toa tukio linalofaa + +```solidity + } else { + // Labda tokeni ya L2 ambayo inawekwa-ndani haikubaliani kuhusu anwani sahihi + // ya tokeni yake ya L1, au haiauni kiolesura sahihi. + // Hii inapaswa kutokea tu ikiwa kuna tokeni hasidi ya L2, au ikiwa mtumiaji kwa namna fulani + // alibainisha anwani isiyo sahihi ya tokeni ya L2 ya kuweka. + // Katika hali yoyote, tunasimamisha mchakato hapa na kuunda ujumbe wa + // utoaji ili watumiaji waweze kutoa fedha zao katika baadhi ya kesi. + // Hakuna njia ya kuzuia mikataba ya tokeni hasidi kabisa, lakini hii inapunguza + // kosa la mtumiaji na kupunguza baadhi ya aina za tabia ya mkataba hasidi. +``` + +Ikiwa mtumiaji alifanya kosa linaloweza kugunduliwa kwa kutumia anwani isiyo sahihi ya tokeni ya L2, tunataka kughairi uwekaji na kurudisha tokeni kwenye L1. +Njia pekee tunayoweza kufanya hivi kutoka L2 ni kutuma ujumbe ambao utalazimika kusubiri kipindi cha changamoto ya makosa, lakini hiyo ni bora zaidi kwa mtumiaji kuliko kupoteza tokeni kabisa. + +```solidity + bytes memory message = abi.encodeWithSelector( + IL1ERC20Bridge.finalizeERC20Withdrawal.selector, + _l1Token, + _l2Token, + _to, // tulibadilisha _to na _from hapa kurudisha uwekaji kwa mtumaji + _from, + _amount, + _data + ); + + // Tuma ujumbe hadi daraja la L1 + // slither-disable-next-line reentrancy-events + sendCrossDomainMessage(l1TokenBridge, 0, ujumbe); + // slither-disable-next-line reentrancy-events + emit DepositFailed(_l1Token, _l2Token, _from, _to, _amount, _data); + } + } +} +``` + +## Hitimisho {#conclusion} + +Daraja la kawaida ndio utaratibu unaobadilika zaidi kwa uhamisho wa rasilimali. +Hata hivyo, kwa sababu ni ya jumla sana si rahisi kila wakati kutumia utaratibu huu. +Hasa kwa utoaji, watumiaji wengi wanapendelea kutumia [madaraja ya watu wengine](https://optimism.io/apps#bridge) ambayo hayasubiri kipindi cha changamoto na hayahitaji uthibitisho wa Merkle kukamilisha utoaji. + +Madaraja haya kwa kawaida hufanya kazi kwa kuwa na rasilimali kwenye L1, ambazo hutoa mara moja kwa ada ndogo (mara nyingi chini ya gharama ya gesi kwa utoaji wa daraja la kawaida). +Wakati daraja (au watu wanaoliendesha) linapotarajia kupungukiwa na rasilimali za L1 linahamisha rasilimali za kutosha kutoka L2. Kwa kuwa haya ni utoaji mkubwa sana, gharama ya utoaji inapunguzwa kwa kiasi kikubwa na ni asilimia ndogo zaidi. + +Tunatumai makala hii imekusaidia kuelewa zaidi kuhusu jinsi safu 2 inavyofanya kazi, na jinsi ya kuandika msimbo wa Solidity ulio wazi na salama. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/reverse-engineering-a-contract/index.md b/public/content/translations/sw/developers/tutorials/reverse-engineering-a-contract/index.md new file mode 100644 index 00000000000..f935bb8b37f --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/reverse-engineering-a-contract/index.md @@ -0,0 +1,744 @@ +--- +title: "Uhandisi wa Nyuma wa Mkataba" +description: Jinsi ya kuelewa mkataba wakati huna msimbo chanzo +author: Ori Pomerantz +lang: sw +tags: [ "evm", "opcodes" ] +skill: advanced +published: 2021-12-30 +--- + +## Utangulizi {#introduction} + +_Hakuna siri kwenye blockchain_, kila kitu kinachotokea ni thabiti, kinaweza kuthibitishwa na kinapatikana kwa umma. Kimsingi, [mikataba inapaswa kuwa na msimbo wake chanzo uliochapishwa na kuthibitishwa kwenye Etherscan](https://etherscan.io/address/0xb8901acb165ed027e32754e0ffe830802919727f#code). Hata hivyo, [sio wakati wote ndivyo ilivyo](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f#code). Katika makala hii utajifunza jinsi ya kufanya uhandisi wa nyuma wa mikataba kwa kuangalia mkataba bila msimbo chanzo, [`0x2510c039cc3b061d79e564b38836da87e31b342f`](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f). + +Kuna vikompaila vya kinyume, lakini sio kila wakati vinatoa [matokeo yanayoweza kutumika](https://etherscan.io/bytecode-decompiler?a=0x2510c039cc3b061d79e564b38836da87e31b342f). Katika makala hii unajifunza jinsi ya kufanya uhandisi wa nyuma na kuelewa mkataba kutoka [kwa opcodes](https://github.com/wolflo/evm-opcodes), pamoja na jinsi ya kutafsiri matokeo ya decompiler. + +Ili kuweza kuelewa makala hii unapaswa kuwa unajua misingi ya EVM, na angalau uwe unafahamu kwa kiasi fulani mkusanyaji wa EVM. [Unaweza kusoma kuhusu mada hizi hapa](https://medium.com/mycrypto/the-ethereum-virtual-machine-how-does-it-work-9abac2b7c9e). + +## Andaa Msimbo Unaoweza Kutekelezwa {#prepare-the-executable-code} + +Unaweza kupata opcodes kwa kwenda Etherscan kwa ajili ya mkataba, kubofya kichupo cha **Contract** na kisha **Switch to Opcodes View**. Unapata mwonekano ambao ni opcode moja kwa kila mstari. + +![Mwonekano wa Opcode kutoka Etherscan](opcode-view.png) + +Ili kuweza kuelewa miruko, hata hivyo, unahitaji kujua ni wapi katika msimbo kila opcode iko. Ili kufanya hivyo, njia moja ni kufungua Google Spreadsheet na kubandika opcodes katika safu C. [Unaweza kuruka hatua zifuatazo kwa kutengeneza nakala ya jedwali hili lililoandaliwa tayari](https://docs.google.com/spreadsheets/d/1tKmTJiNjUwHbW64wCKOSJxHjmh0bAUapt6btUYE7kDA/edit?usp=sharing). + +Hatua inayofuata ni kupata maeneo sahihi ya msimbo ili tuweze kuelewa miruko. Tutaweka ukubwa wa opcode katika safu B, na eneo (katika heksadesimali) katika safu A. Andika chaguo hili la kukokotoa katika seli `B1` na kisha nakili na ubandike kwa safu B iliyobaki, hadi mwisho wa msimbo. Baada ya kufanya hivi unaweza kuficha safu B. + +``` +=1+IF(REGEXMATCH(C1,"PUSH"),REGEXEXTRACT(C1,"PUSH(\d+)"),0) +``` + +Kwanza chaguo hili la kukokotoa linaongeza baiti moja kwa opcode yenyewe, na kisha hutafuta `PUSH`. Opcodes za kusukuma ni maalum kwa sababu zinahitaji kuwa na baiti za ziada kwa thamani inayosukumwa. Ikiwa opcode ni `PUSH`, tunatoa idadi ya baiti na kuiongeza. + +Katika `A1` weka kukabiliana kwanza, sifuri. Kisha, katika `A2`, weka chaguo hili la kukokotoa na tena nakili na ubandike kwa safu A iliyobaki: + +``` +=dec2hex(hex2dec(A1)+B1) +``` + +Tunahitaji chaguo hili la kukokotoa ili kutupa thamani ya heksadesimali kwa sababu thamani zinazosukumwa kabla ya miruko (`JUMP` na `JUMPI`) tunapewa katika heksadesimali. + +## Mahali pa Kuingilia (0x00) {#the-entry-point-0x00} + +Mikataba daima hutekelezwa kutoka kwa baiti ya kwanza. Hii ni sehemu ya awali ya msimbo: + +| Kukabiliana | Opcode | Rafu (baada ya opcode) | +| ----------: | ------------ | ---------------------------------------------- | +| 0 | PUSH1 0x80 | 0x80 | +| 2 | PUSH1 0x40 | 0x40, 0x80 | +| 4 | MSTORE | Tupu | +| 5 | PUSH1 0x04 | 0x04 | +| 7 | CALLDATASIZE | CALLDATASIZE 0x04 | +| 8 | LT | CALLDATASIZE\<4 | +| 9 | PUSH2 0x005e | 0x5E CALLDATASIZE\<4 | +| C | JUMPI | Tupu | + +Msimbo huu hufanya mambo mawili: + +1. Andika 0x80 kama thamani ya baiti 32 kwenye maeneo ya kumbukumbu 0x40-0x5F (0x80 huhifadhiwa katika 0x5F, na 0x40-0x5E zote ni sifuri). +2. Soma ukubwa wa calldata. Kwa kawaida data ya simu kwa ajili ya mkataba wa Ethereum hufuata [ABI (kiolesura cha binary cha mfumo)](https://docs.soliditylang.org/en/v0.8.10/abi-spec.html), ambayo kwa kiwango cha chini inahitaji baiti nne kwa kiteuzi cha chaguo la kukokotoa. Ikiwa ukubwa wa data ya simu ni chini ya nne, ruka hadi 0x5E. + +![Chati ya mtiririko kwa sehemu hii](flowchart-entry.png) + +### Mshughulikiaji katika 0x5E (kwa data ya simu isiyo ya ABI) {#the-handler-at-0x5e-for-non-abi-call-data} + +| Kukabiliana | Opcode | +| ----------: | ------------ | +| 5E | JUMPDEST | +| 5F | CALLDATASIZE | +| 60 | PUSH2 0x007c | +| 63 | JUMPI | + +Kipande hiki kinaanza na `JUMPDEST`. Programu za EVM (mashine halisi ya ethereum) hutupa ubaguzi ikiwa utaruka hadi opcode ambayo sio `JUMPDEST`. Kisha inaangalia CALLDATASIZE, na ikiwa ni "kweli" (yaani, sio sifuri) inaruka hadi 0x7C. Tutafikia hilo hapo chini. + +| Kukabiliana | Opcode | Rafu (baada ya opcode) | +| ----------: | ---------- | ---------------------------------------------------------------------------------------------- | +| 64 | CALLVALUE | [Wei](/glossary/#wei) iliyotolewa na simu. Inaitwa `msg.value` katika Solidity | +| 65 | PUSH1 0x06 | 6 CALLVALUE | +| 67 | PUSH1 0x00 | 0 6 CALLVALUE | +| 69 | DUP3 | CALLVALUE 0 6 CALLVALUE | +| 6A | DUP3 | 6 CALLVALUE 0 6 CALLVALUE | +| 6B | SLOAD | Ghala[6] CALLVALUE 0 6 CALLVALUE | + +Kwa hivyo wakati hakuna data ya simu tunasoma thamani ya Ghala[6]. Bado hatujui thamani hii ni nini, lakini tunaweza kutafuta miamala ambayo mkataba ulipokea bila data ya simu. Miamala ambayo huhamisha ETH tu bila data yoyote ya simu (na kwa hivyo hakuna njia) ina njia ya `Transfer` katika Etherscan. Kwa kweli, [muamala wa kwanza kabisa ambao mkataba ulipokea](https://etherscan.io/tx/0xeec75287a583c36bcc7ca87685ab41603494516a0f5986d18de96c8e630762e7) ni uhamisho. + +Tukiangalia katika muamala huo na kubofya **Click to see More**, tunaona kwamba data ya simu, inayoitwa data ya ingizo, kwa kweli haina kitu (`0x`). Angalia pia kwamba thamani ni ETH 1.559, hiyo itakuwa muhimu baadaye. + +![Data ya simu haina kitu](calldata-empty.png) + +Ifuatayo, bofya kichupo cha **Hali** na upanue mkataba tunaofanyia uhandisi wa nyuma (0x2510...). Unaweza kuona kwamba `Ghala[6]` ilibadilika wakati wa muamala, na ukibadilisha Hex kuwa **Nambari**, unaona ikawa 1,559,000,000,000,000,000, thamani iliyohamishwa katika wei (nimeongeza koma kwa uwazi), inayolingana na thamani ya mkataba unaofuata. + +![Mabadiliko katika Ghala[6]](storage6.png) + +Tukiangalia katika mabadiliko ya hali yaliyosababishwa na [miamala mingine ya `Transfer` kutoka kipindi hicho](https://etherscan.io/tx/0xf708d306de39c422472f43cb975d97b66fd5d6a6863db627067167cbf93d84d1#statechange) tunaona kwamba `Ghala[6]` ilifuatilia thamani ya mkataba kwa muda. Kwa sasa tutaiita `Value*`. Nyota (`*`) inatukumbusha kwamba bado hatu_jui_ kigezo hiki hufanya nini, lakini haiwezi kuwa tu kufuatilia thamani ya mkataba kwa sababu hakuna haja ya kutumia ghala, ambayo ni ghali sana, wakati unaweza kupata salio la akaunti yako ukitumia `ADDRESS BALANCE`. Opcode ya kwanza inasukuma anwani ya mkataba yenyewe. Ya pili inasoma anwani iliyo juu ya rafu na kuibadilisha na salio la anwani hiyo. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | --------------------------------------------- | +| 6C | PUSH2 0x0075 | 0x75 Thamani\* CALLVALUE 0 6 CALLVALUE | +| 6F | SWAP2 | CALLVALUE Thamani\* 0x75 0 6 CALLVALUE | +| 70 | SWAP1 | Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 71 | PUSH2 0x01a7 | 0x01A7 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 74 | JUMP | | + +Tutaendelea kufuatilia msimbo huu katika marudio ya mruko. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ---------- | ------------------------------------------------------------- | +| 1A7 | JUMPDEST | Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1A8 | PUSH1 0x00 | 0x00 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AA | DUP3 | CALLVALUE 0x00 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AB | NOT | 2^256-CALLVALUE-1 0x00 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | + +`NOT` ni bitwise, kwa hivyo inabadilisha thamani ya kila biti katika thamani ya simu. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ---------------------------------------------------------------------------------------------------------- | +| 1AC | DUP3 | Thamani\* 2^256-CALLVALUE-1 0x00 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AD | GT | Thamani\*>2^256-CALLVALUE-1 0x00 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AE | ISZERO | Thamani\*\<=2^256-CALLVALUE-1 0x00 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AF | PUSH2 0x01df | 0x01DF Thamani\*\<=2^256-CALLVALUE-1 0x00 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1B2 | JUMPI | | + +Tunaruka ikiwa `Value*` ni ndogo kuliko 2^256-CALLVALUE-1 au sawa nayo. Hii inaonekana kama mantiki ya kuzuia kufurika. Na kwa hakika, tunaona kwamba baada ya shughuli chache zisizo na maana (kuandika kwa kumbukumbu kunakaribia kufutwa, kwa mfano) kwa kukabiliana 0x01DE mkataba unarudi nyuma ikiwa kufurika kutagunduliwa, ambayo ni tabia ya kawaida. + +Kumbuka kuwa kufurika kama hivyo hakuna uwezekano mkubwa, kwa sababu kungehitaji thamani ya simu pamoja na `Thamani*` kulinganishwa na wei 2^256, takriban ETH 10^59. [Jumla ya usambazaji wa ETH, wakati wa kuandika, ni chini ya milioni mia mbili](https://etherscan.io/stat/supply). + +| Kukabiliana | Opcode | Rafu | +| ----------: | -------- | ------------------------------------------- | +| 1DF | JUMPDEST | 0x00 Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1E0 | POP | Thamani\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1E1 | ADD | Thamani\*+CALLVALUE 0x75 0 6 CALLVALUE | +| 1E2 | SWAP1 | 0x75 Thamani\*+CALLVALUE 0 6 CALLVALUE | +| 1E3 | JUMP | | + +Ikiwa tulifika hapa, pata `Thamani* + CALLVALUE` na uruke ili kukabiliana na 0x75. + +| Kukabiliana | Opcode | Rafu | +| ----------: | -------- | --------------------------------- | +| 75 | JUMPDEST | Thamani\*+CALLVALUE 0 6 CALLVALUE | +| 76 | SWAP1 | 0 Thamani\*+CALLVALUE 6 CALLVALUE | +| 77 | SWAP2 | 6 Thamani\*+CALLVALUE 0 CALLVALUE | +| 78 | SSTORE | 0 CALLVALUE | + +Tukifika hapa (ambayo inahitaji data ya simu kuwa tupu) tunaongeza kwa `Thamani*` thamani ya simu. Hii inaambatana na kile tunachosema miamala ya `Transfer` hufanya. + +| Kukabiliana | Opcode | +| ----------: | ------ | +| 79 | POP | +| 7A | POP | +| 7B | STOP | + +Hatimaye, futa rafu (ambayo si lazima) na uashiria mwisho wa mafanikio wa muamala. + +Ili kujumlisha yote, hii hapa chati ya mtiririko kwa msimbo wa awali. + +![Chati ya mtiririko ya mahali pa kuingilia](flowchart-entry.png) + +## Mshughulikiaji katika 0x7C {#the-handler-at-0x7c} + +Sikuweka kichwa cha habari kwa makusudi nini mhudumu huyu anafanya. Hoja sio kukufundisha jinsi mkataba huu maalum unavyofanya kazi, lakini jinsi ya kufanya uhandisi wa nyuma wa mikataba. Utajifunza inachofanya kwa njia ile ile niliyoifanya, kwa kufuata msimbo. + +Tunafika hapa kutoka sehemu kadhaa: + +- Ikiwa kuna data ya simu ya baiti 1, 2, au 3 (kutoka kwa kukabiliana 0x63) +- Ikiwa saini ya mbinu haijulikani (kutoka kwa makabiliano 0x42 na 0x5D) + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ---------------------------------------------------------------------- | +| 7C | JUMPDEST | | +| 7D | PUSH1 0x00 | 0x00 | +| 7F | PUSH2 0x009d | 0x9D 0x00 | +| 82 | PUSH1 0x03 | 0x03 0x9D 0x00 | +| 84 | SLOAD | Ghala[3] 0x9D 0x00 | + +Hii ni seli nyingine ya ghala, ambayo sikuweza kupata katika miamala yoyote kwa hivyo ni ngumu kujua inamaanisha nini. Msimbo ulio hapa chini utaiweka wazi zaidi. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| 85 | PUSH20 0xffffffffffffffffffffffffffffffffffffffff | 0xff....ff Ghala[3] 0x9D 0x00 | +| 9A | AND | Ghala[3]-kama-anwani 0x9D 0x00 | + +Opcode hizi hupunguza thamani tunayosoma kutoka kwa Ghala[3] hadi biti 160, urefu wa anwani ya Ethereum. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------ | ---------------------------------------------------------------------------------- | +| 9B | SWAP1 | 0x9D Ghala[3]-kama-anwani 0x00 | +| 9C | JUMP | Ghala[3]-kama-anwani 0x00 | + +Mruko huu ni wa ziada, kwani tunaenda kwa opcode inayofuata. Msimbo huu hauna ufanisi wa gesi kama unavyoweza kuwa. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ---------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| 9D | JUMPDEST | Ghala[3]-kama-anwani 0x00 | +| 9E | SWAP1 | 0x00 Ghala[3]-kama-anwani | +| 9F | POP | Ghala[3]-kama-anwani | +| A0 | PUSH1 0x40 | 0x40 Ghala[3]-kama-anwani | +| A2 | MLOAD | Mem[0x40] Ghala[3]-kama-anwani | + +Mwanzoni kabisa mwa msimbo tuliweka Mem[0x40] kuwa 0x80. Tukiangalia 0x40 baadaye, tunaona kwamba hatuibadilishi - kwa hivyo tunaweza kudhani ni 0x80. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ---------------------------------------------------------------------------------------------------- | +| A3 | CALLDATASIZE | CALLDATASIZE 0x80 Ghala[3]-kama-anwani | +| A4 | PUSH1 0x00 | 0x00 CALLDATASIZE 0x80 Ghala[3]-kama-anwani | +| A6 | DUP3 | 0x80 0x00 CALLDATASIZE 0x80 Ghala[3]-kama-anwani | +| A7 | CALLDATACOPY | 0x80 Ghala[3]-kama-anwani | + +Nakili data yote ya simu kwenye kumbukumbu, kuanzia 0x80. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| A8 | PUSH1 0x00 | 0x00 0x80 Ghala[3]-kama-anwani | +| AA | DUP1 | 0x00 0x00 0x80 Ghala[3]-kama-anwani | +| AB | CALLDATASIZE | CALLDATASIZE 0x00 0x00 0x80 Ghala[3]-kama-anwani | +| AC | DUP4 | 0x80 CALLDATASIZE 0x00 0x00 0x80 Ghala[3]-kama-anwani | +| AD | DUP6 | Ghala[3]-kama-anwani 0x80 CALLDATASIZE 0x00 0x00 0x80 Ghala[3]-kama-anwani | +| AE | GAS | Gesi Ghala[3]-kama-anwani 0x80 CALLDATASIZE 0x00 0x00 0x80 Ghala[3]-kama-anwani | +| AF | DELEGATE_CALL | | + +Sasa mambo ni wazi zaidi. Mkataba huu unaweza kufanya kazi kama [proksi](https://blog.openzeppelin.com/proxy-patterns/), ukiita anwani katika Ghala[3] kufanya kazi halisi. `DELEGATE_CALL` huita mkataba tofauti, lakini hubaki katika ghala moja. Hii inamaanisha kuwa mkataba uliokabidhiwa, ambao sisi ni proksi wake, hufikia nafasi sawa ya ghala. Vigezo vya simu ni: + +- _Gesi_: Gesi yote iliyobaki +- _Anwani iliyopigiwa simu_: Ghala[3]-kama-anwani +- _Data ya simu_: baiti za CALLDATASIZE kuanzia 0x80, ambayo ndipo tulipo weka data ya awali ya simu +- _Data ya kurudisha_: Hakuna (0x00 - 0x00) Tutapata data ya kurudisha kwa njia zingine (tazama hapa chini) + +| Kukabiliana | Opcode | Rafu | +| ----------: | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| B0 | RETURNDATASIZE | RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| B1 | DUP1 | RETURNDATASIZE RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| B2 | PUSH1 0x00 | 0x00 RETURNDATASIZE RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| B4 | DUP5 | 0x80 0x00 RETURNDATASIZE RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| B5 | RETURNDATACOPY | RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | + +Hapa tunakili data yote ya kurudi kwenye bafa ya kumbukumbu kuanzia 0x80. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| B6 | DUP2 | (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| B7 | DUP1 | (((mafanikio/kutofaulu kwa simu))) (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| B8 | ISZERO | (((simu ilishindwa))) (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| B9 | PUSH2 0x00c0 | 0xC0 (((simu ilishindwa))) (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| BC | JUMPI | (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| BD | DUP2 | RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| BE | DUP5 | 0x80 RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| BF | RETURN | | + +Kwa hivyo baada ya simu tunakili data ya kurudi kwenye bafa 0x80 - 0x80+RETURNDATASIZE, na ikiwa simu imefanikiwa basi `RETURN` na bafa hiyo haswa. + +### DELEGATECALL Imeshindwa {#delegatecall-failed} + +Tukifika hapa, hadi 0xC0, inamaanisha kwamba mkataba tuliopiga simu ulirudishwa nyuma. Kwa vile sisi ni proksi tu wa mkataba huo, tunataka kurudisha data sawa na pia kurudi nyuma. + +| Kukabiliana | Opcode | Rafu | +| ----------: | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| C0 | JUMPDEST | (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| C1 | DUP2 | RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| C2 | DUP5 | 0x80 RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) RETURNDATASIZE (((mafanikio/kutofaulu kwa simu))) 0x80 Ghala[3]-kama-anwani | +| C3 | REVERT | | + +Kwa hivyo sisi `REVERT` na bafa ile ile tuliyotumia kwa `RETURN` hapo awali: 0x80 - 0x80+RETURNDATASIZE + +![Chati ya mtiririko ya simu kwa proksi](flowchart-proxy.png) + +## Simu za ABI {#abi-calls} + +Ikiwa ukubwa wa data ya simu ni baiti nne au zaidi hii inaweza kuwa simu halali ya ABI. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | -------------------------------------------------------------------------------------------------------------------------------- | +| D | PUSH1 0x00 | 0x00 | +| F | CALLDATALOAD | (((Neno la kwanza (biti 256) la data ya simu))) | +| 10 | PUSH1 0xe0 | 0xE0 (((Neno la kwanza (biti 256) la data ya simu))) | +| 12 | SHR | (((biti 32 za kwanza (baiti 4) za data ya simu))) | + +Etherscan inatuambia kwamba `1C` ni opcode isiyojulikana, kwa sababu [iliongezwa baada ya Etherscan kuandika kipengele hiki](https://eips.ethereum.org/EIPS/eip-145) na hawajaisasisha. Jedwali la [opcode lililosasishwa](https://github.com/wolflo/evm-opcodes) linatuonyesha kuwa hii ni shift right + +| Kukabiliana | Opcode | Rafu | +| ----------: | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 13 | DUP1 | (((biti 32 za kwanza (baiti 4) za data ya simu))) (((biti 32 za kwanza (baiti 4) za data ya simu))) | +| 14 | PUSH4 0x3cd8045e | 0x3CD8045E (((biti 32 za kwanza (baiti 4) za data ya simu))) (((biti 32 za kwanza (baiti 4) za data ya simu))) | +| 19 | GT | 0x3CD8045E>biti-32-za-kwanza-za-data-ya-simu (((biti 32 za kwanza (baiti 4) za data ya simu))) | +| 1A | PUSH2 0x0043 | 0x43 0x3CD8045E>biti-32-za-kwanza-za-data-ya-simu (((biti 32 za kwanza (baiti 4) za data ya simu))) | +| 1D | JUMPI | (((biti 32 za kwanza (baiti 4) za data ya simu))) | + +Kwa kugawanya majaribio ya ulinganishaji wa saini ya mbinu katika mbili kama hii huokoa nusu ya majaribio kwa wastani. Msimbo unaofuata mara moja hii na msimbo katika 0x43 hufuata muundo sawa: `DUP1` biti 32 za kwanza za data ya simu, `PUSH4 (((saini ya mbinu>`, endesha `EQ` ili kuangalia usawa, na kisha `JUMPI` ikiwa saini ya mbinu inalingana. Hapa kuna saini za mbinu, anwani zao, na ikiwa inajulikana [ufafanuzi wa mbinu unaolingana](https://www.4byte.directory/): + +| Njia | Sahihi ya njia | Kukabiliana na kuruka ndani | +| --------------------------------------------------------------------------------------------------------- | -------------- | --------------------------- | +| [splitter()](https://www.4byte.directory/signatures/?bytes4_signature=0x3cd8045e) | 0x3cd8045e | 0x0103 | +| ??? | 0x81e580d3 | 0x0138 | +| [currentWindow()](https://www.4byte.directory/signatures/?bytes4_signature=0xba0bafb4) | 0xba0bafb4 | 0x0158 | +| ??? | 0x1f135823 | 0x00C4 | +| [merkleRoot()](https://www.4byte.directory/signatures/?bytes4_signature=0x2eb4a7ab) | 0x2eb4a7ab | 0x00ED | + +Ikiwa hakuna mechi inayopatikana, msimbo huruka hadi kwa [mshughulikiaji wa proksi saa 0x7C](#the-handler-at-0x7c), kwa matumaini kwamba mkataba ambao sisi ni proksi wake una mechi. + +![Chati ya mtiririko ya simu za ABI](flowchart-abi.png) + +## splitter() {#splitter} + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ----------------------------- | +| 103 | JUMPDEST | | +| 104 | CALLVALUE | CALLVALUE | +| 105 | DUP1 | CALLVALUE CALLVALUE | +| 106 | ISZERO | CALLVALUE==0 CALLVALUE | +| 107 | PUSH2 0x010f | 0x010F CALLVALUE==0 CALLVALUE | +| 10A | JUMPI | CALLVALUE | +| 10B | PUSH1 0x00 | 0x00 CALLVALUE | +| 10D | DUP1 | 0x00 0x00 CALLVALUE | +| 10E | REVERT | | + +Jambo la kwanza ambalo chaguo hili la kukokotoa hufanya ni kuangalia kuwa simu haikutuma ETH yoyote. Chaguo hili la kukokotoa sio [`payable`](https://solidity-by-example.org/payable/). Ikiwa mtu alitutumia ETH hiyo lazima iwe kosa na tunataka `REVERT` ili kuepuka kuwa na ETH hiyo ambapo hawawezi kuirudisha. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 10F | JUMPDEST | | +| 110 | POP | | +| 111 | PUSH1 0x03 | 0x03 | +| 113 | SLOAD | (((Ghala[3] a.k.a mkataba ambao sisi ni proksi))) | +| 114 | PUSH1 0x40 | 0x40 (((Ghala[3] a.k.a mkataba ambao sisi ni proksi))) | +| 116 | MLOAD | 0x80 (((Ghala[3] a.k.a mkataba ambao sisi ni proksi))) | +| 117 | PUSH20 0xffffffffffffffffffffffffffffffffffffffff | 0xFF...FF 0x80 (((Ghala[3] a.k.a mkataba ambao sisi ni proksi))) | +| 12C | SWAP1 | 0x80 0xFF...FF (((Ghala[3] a.k.a mkataba ambao sisi ni proksi))) | +| 12D | SWAP2 | (((Ghala[3] a.k.a mkataba ambao sisi ni proksi))) 0xFF...FF 0x80 | +| 12E | AND | ProxyAddr 0x80 | +| 12F | DUP2 | 0x80 ProxyAddr 0x80 | +| 130 | MSTORE | 0x80 | + +Na 0x80 sasa ina anwani ya proksi + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | --------- | +| 131 | PUSH1 0x20 | 0x20 0x80 | +| 133 | ADD | 0xA0 | +| 134 | PUSH2 0x00e4 | 0xE4 0xA0 | +| 137 | JUMP | 0xA0 | + +### Msimbo wa E4 {#the-e4-code} + +Hii ni mara ya kwanza tunaona mistari hii, lakini inashirikiwa na njia zingine (tazama hapa chini). Kwa hivyo tutaita thamani katika rafu X, na kumbuka tu kwamba katika `splitter()` thamani ya X hii ni 0xA0. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ---------- | ----------- | +| E4 | JUMPDEST | X | +| E5 | PUSH1 0x40 | 0x40 X | +| E7 | MLOAD | 0x80 X | +| E8 | DUP1 | 0x80 0x80 X | +| E9 | SWAP2 | X 0x80 0x80 | +| EA | SUB | X-0x80 0x80 | +| EB | SWAP1 | 0x80 X-0x80 | +| EC | RETURN | | + +Kwa hivyo msimbo huu hupokea kielekezi cha kumbukumbu kwenye rafu (X), na husababisha mkataba `RETURN` na bafa ambayo ni 0x80 - X. + +Katika kesi ya `splitter()`, hii inarudisha anwani ambayo sisi ni proksi. `RETURN` inarudisha bafa katika 0x80-0x9F, ambayo ndipo tuliandika data hii (kukabiliana 0x130 hapo juu). + +## currentWindow() {#currentwindow} + +Msimbo katika makabiliano 0x158-0x163 ni sawa na tulivyoona katika 0x103-0x10E katika `splitter()` (isipokuwa marudio ya `JUMPI`), kwa hivyo tunajua `currentWindow()` pia haiwezi `kulipwa`. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ---------------------------------------------------------------------- | +| 164 | JUMPDEST | | +| 165 | POP | | +| 166 | PUSH2 0x00da | 0xDA | +| 169 | PUSH1 0x01 | 0x01 0xDA | +| 16B | SLOAD | Ghala[1] 0xDA | +| 16C | DUP2 | 0xDA Ghala[1] 0xDA | +| 16D | JUMP | Ghala[1] 0xDA | + +### Msimbo wa DA {#the-da-code} + +Msimbo huu pia unashirikiwa na njia zingine. Kwa hivyo tutaita thamani katika rafu Y, na kumbuka tu kwamba katika `currentWindow()` thamani ya Y hii ni Ghala[1]. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ---------- | ---------------- | +| DA | JUMPDEST | Y 0xDA | +| DB | PUSH1 0x40 | 0x40 Y 0xDA | +| DD | MLOAD | 0x80 Y 0xDA | +| DE | SWAP1 | Y 0x80 0xDA | +| DF | DUP2 | 0x80 Y 0x80 0xDA | +| E0 | MSTORE | 0x80 0xDA | + +Andika Y hadi 0x80-0x9F. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ---------- | -------------- | +| E1 | PUSH1 0x20 | 0x20 0x80 0xDA | +| E3 | ADD | 0xA0 0xDA | + +Na mengine yameelezwa [hapo juu](#the-e4-code). Kwa hivyo miruko hadi 0xDA andika sehemu ya juu ya rafu (Y) hadi 0x80-0x9F, na urudishe thamani hiyo. Katika kesi ya `currentWindow()`, inarudisha Ghala[1]. + +## merkleRoot() {#merkleroot} + +Msimbo katika makabiliano 0xED-0xF8 ni sawa na tulivyoona katika 0x103-0x10E katika `splitter()` (isipokuwa marudio ya `JUMPI`), kwa hivyo tunajua `merkleRoot()` pia haiwezi `kulipwa`. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ---------------------------------------------------------------------- | +| F9 | JUMPDEST | | +| FA | POP | | +| FB | PUSH2 0x00da | 0xDA | +| FE | PUSH1 0x00 | 0x00 0xDA | +| 100 | SLOAD | Ghala[0] 0xDA | +| 101 | DUP2 | 0xDA Ghala[0] 0xDA | +| 102 | JUMP | Ghala[0] 0xDA | + +Kinachotokea baada ya mruko [tayari tumegundua](#the-da-code). Kwa hivyo `merkleRoot()` inarudisha Ghala[0]. + +## 0x81e580d3 {#0x81e580d3} + +Msimbo katika makabiliano 0x138-0x143 ni sawa na tulivyoona katika 0x103-0x10E katika `splitter()` (isipokuwa marudio ya `JUMPI`), kwa hivyo tunajua chaguo hili la kukokotoa pia haliwezi `kulipwa`. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ------------------------------------------------------------------------------- | +| 144 | JUMPDEST | | +| 145 | POP | | +| 146 | PUSH2 0x00da | 0xDA | +| 149 | PUSH2 0x0153 | 0x0153 0xDA | +| 14C | CALLDATASIZE | CALLDATASIZE 0x0153 0xDA | +| 14D | PUSH1 0x04 | 0x04 CALLDATASIZE 0x0153 0xDA | +| 14F | PUSH2 0x018f | 0x018F 0x04 CALLDATASIZE 0x0153 0xDA | +| 152 | JUMP | 0x04 CALLDATASIZE 0x0153 0xDA | +| 18F | JUMPDEST | 0x04 CALLDATASIZE 0x0153 0xDA | +| 190 | PUSH1 0x00 | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 192 | PUSH1 0x20 | 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 194 | DUP3 | 0x04 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 195 | DUP5 | CALLDATASIZE 0x04 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 196 | SUB | CALLDATASIZE-4 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 197 | SLT | CALLDATASIZE-4\<32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 198 | ISZERO | CALLDATASIZE-4>=32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 199 | PUSH2 0x01a0 | 0x01A0 CALLDATASIZE-4>=32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 19C | JUMPI | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | + +Inaonekana kama chaguo hili la kukokotoa huchukua angalau baiti 32 (neno moja) la data ya simu. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------ | -------------------------------------------- | +| 19D | DUP1 | 0x00 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 19E | DUP2 | 0x00 0x00 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 19F | REVERT | | + +Ikiwa haipati data ya simu, muamala unarudishwa bila data yoyote ya kurudi. + +Hebu tuone nini kinatokea ikiwa chaguo la kukokotoa _linapata_ data ya simu inayohitaji. + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ----------------------------------------------------------- | +| 1A0 | JUMPDEST | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 1A1 | POP | 0x04 CALLDATASIZE 0x0153 0xDA | +| 1A2 | CALLDATALOAD | calldataload(4) CALLDATASIZE 0x0153 0xDA | + +`calldataload(4)` ni neno la kwanza la data ya simu _baada ya_ saini ya mbinu + +| Kukabiliana | Opcode | Rafu | +| ----------: | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 1A3 | SWAP2 | 0x0153 CALLDATASIZE calldataload(4) 0xDA | +| 1A4 | SWAP1 | CALLDATASIZE 0x0153 calldataload(4) 0xDA | +| 1A5 | POP | 0x0153 calldataload(4) 0xDA | +| 1A6 | JUMP | calldataload(4) 0xDA | +| 153 | JUMPDEST | calldataload(4) 0xDA | +| 154 | PUSH2 0x016e | 0x016E calldataload(4) 0xDA | +| 157 | JUMP | calldataload(4) 0xDA | +| 16E | JUMPDEST | calldataload(4) 0xDA | +| 16F | PUSH1 0x04 | 0x04 calldataload(4) 0xDA | +| 171 | DUP2 | calldataload(4) 0x04 calldataload(4) 0xDA | +| 172 | DUP2 | 0x04 calldataload(4) 0x04 calldataload(4) 0xDA | +| 173 | SLOAD | Ghala[4] calldataload(4) 0x04 calldataload(4) 0xDA | +| 174 | DUP2 | calldataload(4) Ghala[4] calldataload(4) 0x04 calldataload(4) 0xDA | +| 175 | LT | calldataload(4)\)`, na nyingine ni `isClaimed()`, kwa hivyo inaonekana kama mkataba wa airdrop. Badala ya kupitia opcode zilizobaki kwa opcode, tunaweza [kujaribu decompiler](https://etherscan.io/bytecode-decompiler?a=0x2f81e57ff4f4d83b40a9f719fd892d8e806e0761), ambayo hutoa matokeo yanayoweza kutumika kwa chaguo tatu za kukokotoa kutoka kwa mkataba huu. Uhandisi wa nyuma wa zingine zimeachwa kama zoezi kwa msomaji. + +### scaleAmountByPercentage {#scaleamountbypercentage} + +Hivi ndivyo decompiler inatupa kwa chaguo hili la kukokotoa: + +```python +def unknown8ffb5c97(uint256 _param1, uint256 _param2) payable: + require calldata.size - 4 >=′ 64 + if _param1 and _param2 > -1 / _param1: + revert with 0, 17 + return (_param1 * _param2 / 100 * 10^6) +``` + +Kwanza `require` hujaribu kuwa data ya simu ina, pamoja na baiti nne za saini ya chaguo la kukokotoa, angalau baiti 64, za kutosha kwa vigezo viwili. Ikiwa sivyo basi ni wazi kuna kitu kibaya. + +Taarifa ya `if` inaonekana kuangalia kwamba `_param1` sio sifuri, na kwamba `_param1 * _param2` si hasi. Pengine ni kuzuia kesi za kuzunguka. + +Hatimaye, chaguo la kukokotoa hurudisha thamani iliyopimwa. + +### dai {#claim} + +Msimbo ambao decompiler hutengeneza ni mgumu, na sio wote unaofaa kwetu. Nitaruka baadhi yake ili kuzingatia mistari ambayo ninaamini inatoa habari muhimu + +```python +def unknown2e7ba6ef(uint256 _param1, uint256 _param2, uint256 _param3, array _param4) payable: + ... + require _param2 == addr(_param2) + ... + if currentWindow <= _param1: + revert with 0, 'cannot claim for a future window' +``` + +Tunaona hapa mambo mawili muhimu: + +- `_param2`, ingawa imetangazwa kama `uint256`, kwa kweli ni anwani +- `_param1` ni dirisha linalodaiwa, ambalo linapaswa kuwa `currentWindow` au mapema zaidi. + +```python + ... + if stor5[_claimWindow][addr(_claimFor)]: + revert with 0, 'Akaunti tayari imedai dirisha lililopewa' +``` + +Kwa hivyo sasa tunajua kuwa Ghala[5] ni safu ya madirisha na anwani, na ikiwa anwani ilidai zawadi kwa dirisha hilo. + +```python + ... + idx = 0 + s = 0 + while idx < _param4.length: + ... + if s + sha3(mem[(32 * _param4.length) + 328 len mem[(32 * _param4.length) + 296]]) > mem[(32 * idx) + 296]: + mem[mem[64] + 32] = mem[(32 * idx) + 296] + ... + s = sha3(mem[_62 + 32 len mem[_62]]) + continue + ... + s = sha3(mem[_66 + 32 len mem[_66]]) + continue + if unknown2eb4a7ab != s: + revert with 0, 'Uthibitisho batili' +``` + +Tunajua kwamba `unknown2eb4a7ab` kwa kweli ni chaguo la kukokotoa `merkleRoot()`, kwa hivyo msimbo huu unaonekana kana kwamba unathibitisha [uthibitisho wa merkle](https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5). Hii inamaanisha kuwa `_param4` ni uthibitisho wa merkle. + +```python + call addr(_param2) with: + value unknown81e580d3[_param1] * _param3 / 100 * 10^6 wei + gas 30000 wei +``` + +Hivi ndivyo mkataba unavyohamisha ETH yake kwa anwani nyingine (mkataba au inayomilikiwa nje). Inaiita kwa thamani ambayo ni kiasi cha kuhamishwa. Kwa hivyo inaonekana kama hii ni airdrop ya ETH. + +```python + if not return_data.size: + if not ext_call.success: + require ext_code.size(stor2) + call stor2.deposit() with: + value unknown81e580d3[_param1] * _param3 / 100 * 10^6 wei +``` + +Mistari miwili ya chini inatuambia kwamba Ghala[2] pia ni mkataba tunaopiga simu. Tuki[angalia muamala wa mjenzi](https://etherscan.io/tx/0xa1ea0549fb349eb7d3aff90e1d6ce7469fdfdcd59a2fd9b8d1f5e420c0d05b58#statechange) tunaona kwamba mkataba huu ni [0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2), mkataba wa Wrapped Ether [ambao msimbo wake chanzo umepakiwa kwenye Etherscan](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2#code). + +Kwa hivyo inaonekana kama mikataba inajaribu kutuma ETH kwa `_param2`. Ikiwa inaweza kufanya hivyo, vizuri. Ikiwa sivyo, inajaribu kutuma [WETH](https://weth.tkn.eth.limo/). Ikiwa `_param2` ni akaunti inayomilikiwa nje (EOA) basi inaweza kupokea ETH kila wakati, lakini mikataba inaweza kukataa kupokea ETH. Hata hivyo, WETH ni ERC-20 na mikataba haiwezi kukataa kuikubali. + +```python + ... + log 0xdbd5389f: addr(_param2), unknown81e580d3[_param1] * _param3 / 100 * 10^6, bool(ext_call.success) +``` + +Mwishoni mwa chaguo la kukokotoa tunaona ingizo la logi likitengenezwa. [Angalia maingizo ya kumbukumbu yaliyotokana](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f#events) na uchuje mada inayoanza na `0xdbd5...`. Ikiwa [tutabofya moja ya miamala iliyozalisha ingizo kama hilo](https://etherscan.io/tx/0xe7d3b7e00f645af17dfbbd010478ef4af235896c65b6548def1fe95b3b7d2274) tunaona kwamba kwa hakika inaonekana kama dai - akaunti ilituma ujumbe kwa mkataba tunaoufanyia uhandisi wa nyuma, na kwa malipo ilipata ETH. + +![Muamala wa dai](claim-tx.png) + +### 1e7df9d3 {#1e7df9d3} + +Chaguo hili la kukokotoa linafanana sana na [`claim`](#claim) hapo juu. Pia hukagua uthibitisho wa merkle, hujaribu kuhamisha ETH hadi ya kwanza, na hutoa aina sawa ya ingizo la logi. + +```python +def unknown1e7df9d3(uint256 _param1, uint256 _param2, array _param3) payable: + ... + idx = 0 + s = 0 + while idx < _param3.length: + if idx >= mem[96]: + revert with 0, 50 + _55 = mem[(32 * idx) + 128] + if s + sha3(mem[(32 * _param3.length) + 160 len mem[(32 * _param3.length) + 128]]) > mem[(32 * idx) + 128]: + ... + s = sha3(mem[_58 + 32 len mem[_58]]) + continue + mem[mem[64] + 32] = s + sha3(mem[(32 * _param3.length) + 160 len mem[(32 * _param3.length) + 128]]) + ... + if unknown2eb4a7ab != s: + revert with 0, 'Uthibitisho batili' + ... + call addr(_param1) with: + value s wei + gas 30000 wei + if not return_data.size: + if not ext_call.success: + require ext_code.size(stor2) + call stor2.deposit() with: + value s wei + gas gas_remaining wei + ... + log 0xdbd5389f: addr(_param1), s, bool(ext_call.success) +``` + +Tofauti kuu ni kwamba kigezo cha kwanza, dirisha la kutoa, halipo. Badala yake, kuna kitanzi juu ya madirisha yote ambayo yanaweza kudaiwa. + +```python + idx = 0 + s = 0 + while idx < currentWindow: + ... + if stor5[mem[0]]: + if idx == -1: + revert with 0, 17 + idx = idx + 1 + s = s + continue + ... + stor5[idx][addr(_param1)] = 1 + if idx >= unknown81e580d3.length: + revert with 0, 50 + mem[0] = 4 + if unknown81e580d3[idx] and _param2 > -1 / unknown81e580d3[idx]: + revert with 0, 17 + if s > !(unknown81e580d3[idx] * _param2 / 100 * 10^6): + revert with 0, 17 + if idx == -1: + revert with 0, 17 + idx = idx + 1 + s = s + (unknown81e580d3[idx] * _param2 / 100 * 10^6) + continue +``` + +Kwa hivyo inaonekana kama lahaja ya `claim` inayodai madirisha yote. + +## Hitimisho {#conclusion} + +Kufikia sasa unapaswa kujua jinsi ya kuelewa mikataba ambayo msimbo wake chanzo haupatikani, kwa kutumia opcodes au (inapofanya kazi) decompiler. Kama inavyodhihirika kutokana na urefu wa makala haya, uhandisi wa nyuma wa mkataba si jambo dogo, lakini katika mfumo ambapo usalama ni muhimu ni ujuzi muhimu kuweza kuthibitisha mikataba inavyofanya kazi kama ilivyoahidiwa. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/run-node-raspberry-pi/index.md b/public/content/translations/sw/developers/tutorials/run-node-raspberry-pi/index.md new file mode 100644 index 00000000000..9c6c3d992a2 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/run-node-raspberry-pi/index.md @@ -0,0 +1,190 @@ +--- +title: Endesha nodi ya Ethereum kwenye Raspberry Pi 4 +description: Weka picha ya programu kwenye Raspberry Pi 4 yako, chomeka kebo ya ethaneti, unganisha diski ya SSD na uwashe kifaa ili kuigeuza Raspberry Pi 4 kuwa nodi kamili ya Ethereum + mthibitishaji. +author: "EthereumOnArm" +tags: + [ + "wateja", + "safu ya utekelezaji", + "safu ya makubaliano", + "nodi" + ] +lang: sw +skill: intermediate +published: 2022-06-10 +source: Ethereum on ARM +sourceUrl: https://ethereum-on-arm-documentation.readthedocs.io/en/latest/ +--- + +**Ethereum on Arm ni picha maalum ya Linux inayoweza kuigeuza Raspberry Pi kuwa nodi ya Ethereum.** + +Ili kutumia Ethereum on Arm kuigeuza Raspberry Pi kuwa nodi ya Ethereum, vifaa vifuatavyo vinapendekezwa: + +- Bodi ya Raspberry 4 (modeli B 8GB), Odroid M1 au Rock 5B (RAM ya 8GB/16GB) +- Kadi ya MicroSD (GB 16 Daraja la 10 angalau) +- Diski ya SSD ya TB 2 angalau ya USB 3.0 au SSD yenye kasha la USB hadi SATA. +- Ugavi wa umeme +- Kebo ya Ethaneti +- Usambazaji wa bandari (angalia wateja kwa maelezo zaidi) +- Kasha lenye heatsink na feni +- Kibodi ya USB, Monita na kebo ya HDMI (micro-HDMI) (Si lazima) + +## Kwa nini uendeshe Ethereum kwenye ARM? {#why-run-ethereum-on-arm} + +Bodi za ARM ni kompyuta ndogo, rahisi na za bei nafuu sana. Ni chaguo nzuri kwa kuendesha nodi za Ethereum kwa sababu zinaweza kununuliwa kwa bei nafuu, zimesanidiwa ili rasilimali zao zote zielekezwe kwenye nodi pekee, na hivyo kuzifanya zifanye kazi kwa ufanisi, zinatumia kiasi kidogo cha nishati na ni ndogo kimwili hivyo zinaweza kutoshea bila kuleta usumbufu nyumbani popote. Pia ni rahisi sana kuanzisha nodi kwa sababu MicroSD ya Raspberry Pi inaweza kuwekewa picha ya programu iliyotengenezwa tayari, bila kuhitaji kupakua au kutengeneza programu. + +## Inafanyaje kazi? {#how-does-it-work} + +Kadi ya kumbukumbu ya Raspberry Pi huwekewa picha ya programu iliyotengenezwa tayari. Picha hii ina kila kitu kinachohitajika ili kuendesha nodi ya Ethereum. Ikiwa na kadi iliyowekewa picha ya programu, mtumiaji anachohitaji kufanya ni kuwasha Raspberry Pi. Taratibu zote zinazohitajika ili kuendesha nodi huanzishwa kiotomatiki. Hii inafanya kazi kwa sababu kadi ya kumbukumbu ina mfumo wa uendeshaji (OS) unaotegemea Linux ambao juu yake taratibu za kiwango cha mfumo huendeshwa kiotomatiki na kuigeuza kuwa nodi ya Ethereum. + +Ethereum haiwezi kuendeshwa kwa kutumia OS maarufu ya Raspberry Pi Linux "Raspbian" kwa sababu Raspbian bado inatumia usanifu wa 32-bit ambao huwafanya watumiaji wa Ethereum wakumbane na matatizo ya kumbukumbu na wateja wa makubaliano hawaauni mfumo wa 32-bit. Ili kukabiliana na hili, timu ya Ethereum on Arm ilihamia kwenye OS asilia ya 64-bit iitwayo "Armbian". + +**Picha za programu hushughulikia hatua zote muhimu**, kuanzia kuweka mazingira na kufomati diski ya SSD hadi kusakinisha na kuendesha programu ya Ethereum pamoja na kuanzisha usawazishaji wa mnyororo wa bloku. + +## Kumbuka kuhusu wateja wa utekelezaji na makubaliano {#note-on-execution-and-consensus-clients} + +Picha ya Ethereum on Arm inajumuisha wateja wa utekelezaji na makubaliano waliotengenezwa tayari kama huduma. Nodi ya Ethereum inahitaji wateja wote wawili wasawazishwe na wawe wanaendeshwa. Unahitajika tu kupakua na kuweka picha ya programu na kisha kuanzisha huduma. Picha imepakiwa awali na wateja wafuatao wa utekelezaji: + +- Geth +- Nethermind +- Besu + +na wateja wafuatao wa makubaliano: + +- Taa ya taa +- Nimbus +- Prysm +- Teku + +Unapaswa kuchagua mmoja wa kila aina ili kuendesha - wateja wote wa utekelezaji wanaendana na wateja wote wa makubaliano. Ikiwa hautachagua mteja waziwazi, nodi itarudi kwenye chaguo-msingi zake - Geth na Lighthouse - na kuzindua kiotomatiki bodi inapowashwa. Ni lazima ufungue bandari 30303 kwenye ruta yako ili Geth iweze kupata na kuungana na rika. + +## Kupakua Picha ya Programu {#downloading-the-image} + +Picha ya Ethereum ya Raspberry Pi 4 ni picha ya "chomeka na cheza" ambayo husakinisha na kuweka kiotomatiki wateja wa utekelezaji na makubaliano, na kuwasanidi ili wawasiliane na kuungana na mtandao wa Ethereum. Mtumiaji anachohitaji kufanya ni kuanzisha taratibu zake kwa kutumia amri rahisi. + +Pakua picha ya Raspberry Pi kutoka [Ethereum on Arm](https://ethereumonarm-my.sharepoint.com/:u:/p/dlosada/Ec_VmUvr80VFjf3RYSU-NzkBmj2JOteDECj8Bibde929Gw?download=1) na uhakiki hashi ya SHA256: + +```sh +# Kutoka kwenye folda yenye picha iliyopakuliwa +shasum -a 256 ethonarm_22.04.00.img.zip +# Hashi inapaswa kutoa: fb497e8f8a7388b62d6e1efbc406b9558bee7ef46ec7e53083630029c117444f +``` + +Kumbuka kuwa picha za bodi za Rock 5B na Odroid M1 zinapatikana kwenye [ukurasa wa upakuaji](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/quick-guide/download-and-install.html) wa Ethereum-on-Arm. + +## Kuweka Picha ya Programu kwenye MicroSD {#flashing-the-microsd} + +Kadi ya MicroSD itakayotumika kwa Raspberry Pi inapaswa kwanza kuingizwa kwenye kompyuta ya mezani au laptop ili iweze kuwekewa picha ya programu. Kisha, amri zifuatazo za terminal zitaweka picha iliyopakuliwa kwenye kadi ya SD: + +```shell +# angalia jina la kadi ya MicroSD +sudo fdisk -l + +>> sdxxx +``` + +Ni muhimu sana kupata jina sahihi kwa sababu amri inayofuata inajumuisha `dd` ambayo hufuta kabisa maudhui yaliyopo kwenye kadi kabla ya kuweka picha juu yake. Ili kuendelea, nenda kwenye folda iliyo na picha iliyobanwa: + +```shell +# fungua na weka picha ya programu +unzip ethonarm_22.04.00.img.zip +sudo dd bs=1M if=ethonarm_22.04.00.img of=/dev/ conv=fdatasync status=progress +``` + +Kadi sasa imewekewa picha ya programu, hivyo inaweza kuingizwa kwenye Raspberry Pi. + +## Anzisha nodi {#start-the-node} + +Ukiwa umeingiza kadi ya SD kwenye Raspberry Pi, unganisha kebo ya ethaneti na SSD kisha washa umeme. OS itawaka na kuanza kiotomatiki kufanya kazi zilizosanidiwa awali ambazo huigeuza Raspberry Pi kuwa nodi ya Ethereum, ikiwa ni pamoja na kusakinisha na kutengeneza programu ya mteja. Hii itachukua takriban dakika 10-15. + +Mara tu kila kitu kitakaposakinishwa na kusanidiwa, ingia kwenye kifaa kupitia muunganisho wa ssh au kwa kutumia terminal moja kwa moja ikiwa monita na kibodi vimeunganishwa kwenye bodi. Tumia akaunti ya `ethereum` kuingia, kwani hii ina ruhusa zinazohitajika kuanzisha nodi. + +```shell +Mtumiaji: ethereum +Nenosiri: ethereum +``` + +Mteja wa utekelezaji chaguo-msingi, Geth, ataanza kiotomatiki. Unaweza kuthibitisha hili kwa kuangalia kumbukumbu kwa kutumia amri ifuatayo ya terminal: + +```sh +sudo journalctl -u geth -f +``` + +Mteja wa makubaliano anahitaji kuanzishwa waziwazi. Ili kufanya hivi, kwanza fungua bandari 9000 kwenye ruta yako ili Lighthouse iweze kupata na kuungana na rika. Kisha wezesha na uanzishe huduma ya lighthouse: + +```sh +sudo systemctl enable lighthouse-beacon +sudo systemctl start lighthouse-beacon +``` + +Angalia mteja kwa kutumia kumbukumbu: + +```sh +sudo journalctl -u lighthouse-beacon +``` + +Kumbuka kuwa mteja wa makubaliano atasawazishwa ndani ya dakika chache kwa sababu anatumia usawazishaji wa kituo cha ukaguzi. Mteja wa utekelezaji atachukua muda mrefu zaidi - uwezekano wa saa kadhaa, na haitaanza hadi mteja wa makubaliano awe amemaliza kusawazisha (hii ni kwa sababu mteja wa utekelezaji anahitaji lengo la kusawazisha, ambalo hutolewa na mteja wa makubaliano aliyesawazishwa). + +Huduma za Geth na Lighthouse zikiwa zinaendeshwa na kusawazishwa, Raspberry Pi yako sasa ni nodi ya Ethereum! Ni kawaida zaidi kuingiliana na mtandao wa Ethereum kwa kutumia koni ya Javascript ya Geth, ambayo inaweza kuunganishwa na mteja wa Geth kwenye bandari 8545. Inawezekana pia kuwasilisha amri zilizoumbizwa kama vitu vya JSON kwa kutumia zana ya ombi kama vile Curl. Angalia zaidi katika [nyaraka za Geth](https://geth.ethereum.org/). + +Geth imesanidiwa awali kuripoti vipimo kwenye dashibodi ya Grafana ambayo inaweza kutazamwa kwenye kivinjari. Watumiaji wa hali ya juu wanaweza kutaka kutumia kipengele hiki kufuatilia afya ya nodi yao kwa kwenda kwenye `ipaddress:3000`, wakipitisha `user: admin` na `passwd: ethereum`. + +## Wathibitishaji {#validators} + +Mthibitishaji anaweza pia kuongezwa kwa hiari kwa mteja wa makubaliano. Programu ya mthibitishaji inaruhusu nodi yako kushiriki kikamilifu katika makubaliano na huupa mtandao usalama wa kiuchumi wa kripto. Unalipwa zawadi kwa kazi hii kwa ETH. Ili kuendesha mthibitishaji, lazima kwanza uwe na ETH 32, ambayo lazima iwekwe kwenye mkataba wa amana. Amana inaweza kuwekwa kwa kufuata mwongozo wa hatua kwa hatua kwenye [Launchpad](https://launchpad.ethereum.org/). Fanya hivi kwenye kompyuta ya mezani/laptop, lakini usitengeneze funguo — hii inaweza kufanywa moja kwa moja kwenye Raspberry Pi. + +Fungua terminal kwenye Raspberry Pi na uendeshe amri ifuatayo ili kutengeneza funguo za amana: + +``` +sudo apt-get update +sudo apt-get install staking-deposit-cli +cd && deposit new-mnemonic --num_validators 1 +``` + +(Au pakua [staking-deposit-cli](https://github.com/ethereum/staking-deposit-cli) ili kuiendesha kwenye mashine isiyounganishwa na mtandao, na endesha amri ya `deposit new-mnemnonic`) + +Weka kirai chako cha mnemonic salama! Amri iliyo hapo juu ilitengeneza faili mbili kwenye keystore ya nodi: funguo za mthibitishaji na faili ya data ya amana. Data ya amana inahitaji kupakiwa kwenye launchpad, kwa hivyo ni lazima inakiliwe kutoka kwa Raspberry Pi hadi kwenye kompyuta ya mezani/laptop. Hii inaweza kufanywa kwa kutumia muunganisho wa ssh au njia nyingine yoyote ya kunakili/kubandika. + +Faili ya data ya amana inapopatikana kwenye kompyuta inayoendesha launchpad, inaweza kuburutwa na kuangushwa kwenye `+` kwenye skrini ya launchpad. Fuata maagizo kwenye skrini ili kutuma muamala kwa mkataba wa amana. + +Rudi kwenye Raspberry Pi, mthibitishaji anaweza kuanzishwa. Hii inahitaji kuingiza funguo za mthibitishaji, kuweka anwani ya kukusanya zawadi, na kisha kuanzisha mchakato wa mthibitishaji uliosanidiwa awali. Mfano ulio hapa chini ni wa Lighthouse—maagizo ya wateja wengine wa makubaliano yanapatikana kwenye [nyaraka za Ethereum on Arm](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/): + +```shell +# ingiza funguo za mthibitishaji +lighthouse account validator import --directory=/home/ethereum/validator_keys + +# weka anwani ya zawadi +sudo sed -i 's/' /etc/ethereum/lighthouse-validator.conf + +# anzisha mthibitishaji +sudo systemctl start lighthouse-validator +``` + +Hongera, sasa una nodi kamili ya Ethereum na mthibitishaji inayoendeshwa kwenye Raspberry Pi! + +## Maelezo zaidi {#more-details} + +Ukurasa huu umetoa muhtasari wa jinsi ya kuweka nodi na mthibitishaji wa Geth-Lighthouse kwa kutumia Raspberry Pi. Maagizo ya kina zaidi yanapatikana kwenye [tovuti ya Ethereum-on-Arm](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/index.html). + +## Maoni yanakaribishwa {#feedback-appreciated} + +Tunajua Raspberry Pi ina idadi kubwa ya watumiaji ambayo inaweza kuwa na athari chanya sana kwa afya ya mtandao wa Ethereum. +Tafadhali chunguza kwa kina maelezo katika mafunzo haya, jaribu kuendesha kwenye testnet, angalia GitHub ya Ethereum on Arm, toa maoni, ripoti matatizo na maombi ya pull request, na usaidie kuendeleza teknolojia na nyaraka! + +## Marejeleo {#references} + +1. https://ubuntu.com/download/raspberry-pi +2. https://wikipedia.org/wiki/Port_forwarding +3. https://prometheus.io +4. https://grafana.com +5. https://forum.armbian.com/topic/5565-zram-vs-swap/ +6. https://geth.ethereum.org +7. https://nethermind.io +8. https://www.hyperledger.org/projects/besu +9. https://github.com/prysmaticlabs/prysm +10. https://lighthouse.sigmaprime.io +11. https://ethersphere.github.io/swarm-home +12. https://raiden.network +13. https://ipfs.io +14. https://status.im +15. https://vipnode.org diff --git a/public/content/translations/sw/developers/tutorials/scam-token-tricks/index.md b/public/content/translations/sw/developers/tutorials/scam-token-tricks/index.md new file mode 100644 index 00000000000..ceb15657b1f --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/scam-token-tricks/index.md @@ -0,0 +1,470 @@ +--- +title: "Baadhi ya hila zinazotumiwa na tokeni za ulaghai na jinsi ya kuzigundua" +description: Katika mafunzo haya tunachambua tokeni ya ulaghai ili kuona baadhi ya hila ambazo walaghai hutumia, jinsi wanavyozitekeleza, na jinsi tunavyoweza kuzigundua. +author: Ori Pomerantz +tags: + [ + "ulaghai", + "uimara", + "erc-20", + "javascript", + "typescript" + ] +skill: intermediate +published: 2023-09-15 +lang: sw +--- + +Katika mafunzo haya tunachambua [tokeni ya ulaghai](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code) ili kuona baadhi ya hila ambazo walaghai hutumia na jinsi wanavyozitekeleza. Mwishoni mwa mafunzo haya utakuwa na mtazamo mpana zaidi wa mikataba ya tokeni za ERC-20, uwezo wao, na kwa nini kuwa na mashaka ni muhimu. Kisha tunaangalia matukio yaliyotolewa na tokeni hiyo ya ulaghai na kuona jinsi tunavyoweza kutambua kiotomatiki kwamba si halali. + +## Tokeni za ulaghai - ni nini, kwa nini watu huzifanya, na jinsi ya kuziepuka {#scam-tokens} + +Moja ya matumizi yanayojulikana sana ya Ethereum ni pale kikundi cha watu kinapotengeneza tokeni inayoweza kuuzwa, kwa maana nyingine, sarafu yao wenyewe. Hata hivyo, popote palipo na matumizi halali yanayoleta thamani, pia kuna wahalifu wanaojaribu kuiba thamani hiyo kwa faida yao binafsi. + +Unaweza kusoma zaidi kuhusu mada hii [mahali pengine kwenye ethereum.org](/guides/how-to-id-scam-tokens/) kwa mtazamo wa mtumiaji. Mafunzo haya yanalenga kuchambua tokeni ya ulaghai ili kuona jinsi inavyofanywa na jinsi inavyoweza kugunduliwa. + +### Nitajuaje kuwa wARB ni ulaghai? {#warb-scam} + +Tokeni tunayoichambua ni [wARB](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code), ambayo inajifanya kuwa sawa na [tokeni halali ya ARB](https://etherscan.io/token/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1). + +Njia rahisi zaidi ya kujua ni tokeni ipi halali ni kuangalia shirika lililoianzisha, [Arbitrum](https://arbitrum.foundation/). Anwani halali zimeainishwa [katika nyaraka zao](https://docs.arbitrum.foundation/deployment-addresses#token). + +### Kwa nini msimbo chanzo unapatikana? {#why-source} + +Kwa kawaida tungetarajia watu wanaojaribu kuwalaghai wengine wawe wasiri, na hakika tokeni nyingi za ulaghai hazina msimbo wao unaopatikana (kwa mfano, [hii hapa](https://optimistic.etherscan.io/token/0x15992f382d8c46d667b10dc8456dc36651af1452#code) na [hii hapa](https://optimistic.etherscan.io/token/0x026b623eb4aada7de37ef25256854f9235207178#code)). + +Hata hivyo, tokeni halali kwa kawaida huchapisha msimbo wao chanzo, kwa hivyo ili kuonekana halali, waandishi wa tokeni za ulaghai wakati mwingine hufanya vivyo hivyo. [wARB](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code) ni mojawapo ya tokeni hizo zilizo na msimbo chanzo unaopatikana, jambo ambalo hurahisisha kuielewa. + +Wakati watumaji wa mikataba wanaweza kuchagua kuchapisha msimbo chanzo au la, _hawawezi_ kuchapisha msimbo chanzo usio sahihi. Kichunguzi cha bloku hukusanya msimbo chanzo uliotolewa kwa kujitegemea, na ikiwa hakipati bytecode sawa kabisa, kinakataa msimbo huo chanzo. [Unaweza kusoma zaidi kuhusu hili kwenye tovuti ya Etherscan](https://etherscan.io/verifyContract). + +## Ulinganisho na tokeni halali za ERC-20 {#compare-legit-erc20} + +Tunaenda kulinganisha tokeni hii na tokeni halali za ERC-20. Ikiwa hufahamu jinsi tokeni halali za ERC-20 zinavyoandikwa kwa kawaida, [angalia mafunzo haya](/developers/tutorials/erc20-annotated-code/). + +### Maadili yasiyobadilika kwa anwani zenye upendeleo {#constants-for-privileged-addresses} + +Mikataba wakati mwingine huhitaji anwani zenye upendeleo. Mikataba ambayo imeundwa kwa matumizi ya muda mrefu huruhusu anwani fulani yenye upendeleo kubadilisha anwani hizo, kwa mfano kuwezesha matumizi ya mkataba mpya wa multisig. Kuna njia kadhaa za kufanya hivi. + +Mkataba wa tokeni ya [`HOP`](https://etherscan.io/address/0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc#code) hutumia muundo wa [`Ownable`](https://docs.openzeppelin.com/contracts/2.x/access-control#ownership-and-ownable). Anwani yenye upendeleo huhifadhiwa kwenye hifadhi, katika sehemu inayoitwa `_owner` (angalia faili la tatu, `Ownable.sol`). + +```solidity +abstract contract Ownable is Context { + address private _owner; + . + . + . +} +``` + +Mkataba wa tokeni ya [`ARB`](https://etherscan.io/address/0xad0c361ef902a7d9851ca7dcc85535da2d3c6fc7#code) hauna anwani ya upendeleo moja kwa moja. Hata hivyo, haihitaji. Inakaa nyuma ya [`proxy`](https://docs.openzeppelin.com/contracts/5.x/api/proxy) kwenye [anwani `0xb50721bcf8d664c30412cfbc6cf7a15145234ad1`](https://etherscan.io/address/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1#code). Mkataba huo una anwani yenye upendeleo (angalia faili la nne, `ERC1967Upgrade.sol`) ambayo inaweza kutumika kwa ajili ya maboresho. + +```solidity + /** + * @dev Huhifadhi anwani mpya katika nafasi ya msimamizi wa EIP1967. + */ + function _setAdmin(address newAdmin) private { + require(newAdmin != address(0), "ERC1967: msimamizi mpya ni anwani ya sifuri"); + StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin; + } +``` + +Kinyume chake, mkataba wa `wARB` una `contract_owner` iliyoandikwa moja kwa moja kwenye msimbo. + +```solidity +contract WrappedArbitrum is Context, IERC20 { + . + . + . + address deployer = 0xB50721BCf8d664c30412Cfbc6cf7a15145234ad1; + address public contract_owner = 0xb40dE7b1beE84Ff2dc22B70a049A07A13a411A33; + . + . + . +} +``` + +[Mmiliki huyu wa mkataba](https://etherscan.io/address/0xb40dE7b1beE84Ff2dc22B70a049A07A13a411A33) si mkataba unaoweza kudhibitiwa na akaunti tofauti kwa nyakati tofauti, bali ni [akaunti inayomilikiwa nje](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs). Hii inamaanisha kuwa huenda imeundwa kwa matumizi ya muda mfupi na mtu binafsi, badala ya kuwa suluhisho la muda mrefu la kudhibiti ERC-20 ambayo itabaki na thamani. + +Na hakika, tukiangalia kwenye Etherscan tunaona kuwa mlaghai alitumia mkataba huu kwa saa 12 tu ([muamala wa kwanza](https://etherscan.io/tx/0xf49136198c3f925fcb401870a669d43cecb537bde36eb8b41df77f06d5f6fbc2) hadi [muamala wa mwisho](https://etherscan.io/tx/0xdfd6e717157354e64bbd5d6adf16761e5a5b3f914b1948d3545d39633244d47b)) wakati wa Mei 19, 2023. + +### Kitendakazi bandia cha `_transfer` {#the-fake-transfer-function} + +Ni kawaida kwa uhamisho halisi kutokea kwa kutumia [kitendakazi cha ndani cha `_transfer`](/developers/tutorials/erc20-annotated-code/#the-_transfer-function-_transfer). + +Katika `wARB` kitendakazi hiki kinaonekana kuwa halali: + +```solidity + function _transfer(address sender, address recipient, uint256 amount) internal virtual{ + require(sender != address(0), "ERC20: uhamisho kutoka kwa anwani ya sifuri"); + require(recipient != address(0), "ERC20: uhamisho kwenda kwa anwani ya sifuri"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: kiasi cha uhamisho kinazidi salio"); + _balances[recipient] = _balances[recipient].add(amount); + if (sender == contract_owner){ + sender = deployer; + } + emit Transfer(sender, recipient, amount); + } +``` + +Sehemu ya kutiliwa shaka ni: + +```solidity + if (sender == contract_owner){ + sender = deployer; + } + emit Transfer(sender, recipient, amount); +``` + +Ikiwa mmiliki wa mkataba anatuma tokeni, kwa nini tukio la `Transfer` linaonyesha zinatoka kwa `deployer`? + +Hata hivyo, kuna suala muhimu zaidi. Nani anaita kitendakazi hiki cha `_transfer`? Haiwezi kuitwa kutoka nje, imewekewa alama ya `internal`. Na msimbo tulionao haujumuishi miito yoyote kwa `_transfer`. Ni wazi, ipo hapa kama chambo. + +```solidity + function transfer(address recipient, uint256 amount) public virtual override returns (bool) { + _f_(_msgSender(), recipient, amount); + return true; + } + + function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { + _f_(sender, recipient, amount); + _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: kiasi cha uhamisho kinazidi ruhusa")); + return true; + } +``` + +Tunapoangalia vitendakazi vinavyoitwa kuhamisha tokeni, `transfer` na `transferFrom`, tunaona kuwa vinaita kitendakazi tofauti kabisa, `_f_`. + +### Kitendakazi halisi cha `_f_` {#the-real-f-function} + +```solidity + function _f_(address sender, address recipient, uint256 amount) internal _mod_(sender,recipient,amount) virtual { + require(sender != address(0), "ERC20: uhamisho kutoka kwa anwani ya sifuri"); + require(recipient != address(0), "ERC20: uhamisho kwenda kwa anwani ya sifuri"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: kiasi cha uhamisho kinazidi salio"); + _balances[recipient] = _balances[recipient].add(amount); + if (sender == contract_owner){ + + sender = deployer; + } + emit Transfer(sender, recipient, amount); + } +``` + +Kuna ishara mbili za hatari katika kitendakazi hiki. + +- Matumizi ya [kirekebishaji cha kitendakazi](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) `_mod_`. Hata hivyo, tunapoangalia msimbo chanzo tunaona kuwa `_mod_` kwa kweli haina madhara. + + ```solidity + modifier _mod_(address sender, address recipient, uint256 amount){ + _; + } + ``` + +- Suala lile lile tuliloliona katika `_transfer`, ambalo ni wakati `contract_owner` anapotuma tokeni, zinaonekana kutoka kwa `deployer`. + +### Kitendakazi bandia cha matukio `dropNewTokens` {#the-fake-events-function-dropNewTokens} + +Sasa tunafika kwenye kitu kinachoonekana kama ulaghai halisi. Nimehariri kitendakazi kidogo ili kisomeke vizuri, lakini kinafanya kazi sawa. + +```solidity +function dropNewTokens(address uPool, + address[] memory eReceiver, + uint256[] memory eAmounts) public auth() +``` + +Kitendakazi hiki kina kirekebishaji cha `auth()`, ambacho kinamaanisha kuwa kinaweza kuitwa tu na mmiliki wa mkataba. + +```solidity +modifier auth() { + require(msg.sender == contract_owner, "Not allowed to interact"); + _; +} +``` + +Kizuizi hiki kina mantiki kamili, kwa sababu hatungetaka akaunti zisizo na mpangilio zigawanye tokeni. Hata hivyo, sehemu iliyobaki ya kitendakazi inatiliwa shaka. + +```solidity +{ + for (uint256 i = 0; i < eReceiver.length; i++) { + emit Transfer(uPool, eReceiver[i], eAmounts[i]); + } +} +``` + +Kitendakazi cha kuhamisha kutoka kwa akaunti ya pool kwenda kwa safu ya wapokeaji na safu ya kiasi kina mantiki kamili. Kuna matumizi mengi ambayo utataka kusambaza tokeni kutoka chanzo kimoja kwenda maeneo mengi, kama vile malipo ya mishahara, airdrops, n.k. Ni nafuu zaidi (kwa gesi) kufanya katika muamala mmoja badala ya kutoa miamala mingi, au hata kuita ERC-20 mara nyingi kutoka kwa mkataba tofauti kama sehemu ya muamala mmoja. + +Hata hivyo, `dropNewTokens` haifanyi hivyo. Inatoa [matukio ya `Transfer`](https://eips.ethereum.org/EIPS/eip-20#transfer-1), lakini haihamishi tokeni zozote. Hakuna sababu halali ya kuchanganya programu za nje ya mnyororo kwa kuziarifu kuhusu uhamisho ambao haukutokea kweli. + +### Kitendakazi cha `Approve` kinachochoma {#the-burning-approve-function} + +Mikataba ya ERC-20 inapaswa kuwa na [kitendakazi cha `approve`](/developers/tutorials/erc20-annotated-code/#approve) kwa ajili ya ruhusa, na hakika tokeni yetu ya ulaghai ina kitendakazi kama hicho, na hata ni sahihi. Hata hivyo, kwa sababu Solidity inatokana na C, ni muhimu kwa herufi kubwa na ndogo. "Approve" na "approve" ni maneno tofauti. + +Pia, utendaji hauhusiani na `approve`. + +```solidity + function Approve( + address[] memory holders) +``` + +Kitendakazi hiki kinaitwa na safu ya anwani za wamiliki wa tokeni. + +```solidity + public approver() { +``` + +Kirekebishaji cha `approver()` kinahakikisha kuwa ni `contract_owner` tu anayeruhusiwa kuita kitendakazi hiki (tazama hapa chini). + +```solidity + for (uint256 i = 0; i < holders.length; i++) { + uint256 amount = _balances[holders[i]]; + _beforeTokenTransfer(holders[i], 0x0000000000000000000000000000000000000001, amount); + _balances[holders[i]] = _balances[holders[i]].sub(amount, + "ERC20: kiasi cha kuchoma kinazidi salio"); + _balances[0x0000000000000000000000000000000000000001] = + _balances[0x0000000000000000000000000000000000000001].add(amount); + } + } + +``` + +Kwa kila anwani ya mmiliki, kitendakazi huhamisha salio zima la mmiliki kwenda kwenye anwani `0x00...01`, na hivyo kuichoma (kitendo halisi cha `burn` katika kiwango pia hubadilisha jumla ya usambazaji, na huhamisha tokeni kwenda `0x00...00`). Hii inamaanisha kuwa `contract_owner` anaweza kuondoa mali ya mtumiaji yeyote. Hiyo haionekani kama kipengele ambacho ungependa katika tokeni ya utawala. + +### Masuala ya ubora wa msimbo {#code-quality-issues} + +Masuala haya ya ubora wa msimbo _hayathibitishi_ kuwa msimbo huu ni ulaghai, lakini yanaifanya ionekane ya kutiliwa shaka. Kampuni zilizopangwa kama Arbitrum kwa kawaida hazitoi msimbo mbaya kama huu. + +#### Kitendakazi cha `mount` {#the-mount-function} + +Ingawa haijaainishwa katika [kiwango](https://eips.ethereum.org/EIPS/eip-20), kwa ujumla kitendakazi kinachotengeneza tokeni mpya huitwa [`mint`](https://ethereum.org/el/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn). + +Tukiangalia katika kiunda cha `wARB`, tunaona kitendakazi cha muda cha mint kimebadilishwa jina na kuwa `mount` kwa sababu fulani, na kinaitwa mara tano na sehemu ya tano ya usambazaji wa awali, badala ya mara moja kwa kiasi chote kwa ufanisi. + +```solidity + constructor () public { + + _name = "Wrapped Arbitrum"; + _symbol = "wARB"; + _decimals = 18; + uint256 initialSupply = 1000000000000; + + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + } +``` + +Kitendakazi cha `mount` chenyewe pia kinatiliwa shaka. + +```solidity + function mount(address account, uint256 amount) public { + require(msg.sender == contract_owner, "ERC20: mint to the zero address"); +``` + +Tukiangalia kwenye `require`, tunaona kuwa ni mmiliki wa mkataba pekee anayeruhusiwa ku-mint. Hiyo ni halali. Lakini ujumbe wa hitilafu unapaswa kuwa _mmiliki pekee ndiye anayeruhusiwa ku-mint_ au kitu kama hicho. Badala yake, ni _ERC20: mint kwa anwani ya sifuri_ isiyo na maana. Jaribio sahihi la ku-mint kwa anwani ya sifuri ni `require(account != address(0), "")`, ambalo mkataba haujisumbui kamwe kulikagua. + +```solidity + _totalSupply = _totalSupply.add(amount); + _balances[contract_owner] = _balances[contract_owner].add(amount); + emit Transfer(address(0), account, amount); + } +``` + +Kuna mambo mengine mawili ya kutiliwa shaka, yanayohusiana moja kwa moja na uundaji: + +- Kuna kigezo cha `account`, ambacho pengine ni akaunti inayopaswa kupokea kiasi kilichoundwa. Lakini salio linaloongezeka ni la `contract_owner`. + +- Wakati salio lililoongezeka ni la `contract_owner`, tukio lililotolewa linaonyesha uhamisho kwenda kwa `account`. + +### Kwa nini `auth` na `approver` zote mbili? Kwa nini `mod` ambayo haifanyi chochote? {#why-both-autho-and-approver-why-the-mod-that-does-nothing} + +Mkataba huu una virekebishaji vitatu: `_mod_`, `auth`, na `approver`. + +```solidity + modifier _mod_(address sender, address recipient, uint256 amount){ + _; + } +``` + +`_mod_` inachukua vigezo vitatu na haifanyi chochote navyo. Kwa nini iwe nayo? + +```solidity + modifier auth() { + require(msg.sender == contract_owner, "Not allowed to interact"); + _; + } + + modifier approver() { + require(msg.sender == contract_owner, "Not allowed to interact"); + _; + } +``` + +`auth` na `approver` zina mantiki zaidi, kwa sababu zinakagua kuwa mkataba uliitwa na `contract_owner`. Tungetarajia vitendo fulani vya upendeleo, kama vile kuunda, kuwekewa mipaka kwa akaunti hiyo. Hata hivyo, kuna haja gani ya kuwa na vitendakazi viwili tofauti vinavyofanya _jambo lile lile_? + +## Tunaweza kugundua nini kiotomatiki? {#what-can-we-detect-automatically} + +Tunaweza kuona kuwa `wARB` ni tokeni ya ulaghai kwa kuangalia Etherscan. Hata hivyo, hiyo ni suluhisho la kati. Kinadharia, Etherscan inaweza kupotoshwa au kudukuliwa. Ni bora kuweza kubaini kwa kujitegemea ikiwa tokeni ni halali au la. + +Kuna baadhi ya mbinu tunazoweza kutumia kutambua kuwa tokeni ya ERC-20 inatiliwa shaka (ama ni ulaghai au imeandikwa vibaya sana), kwa kuangalia matukio wanayotoa. + +## Matukio ya `Approval` yenye shaka {#suspicious-approval-events} + +[Matukio ya `Approval`](https://eips.ethereum.org/EIPS/eip-20#approval) yanapaswa kutokea tu kwa ombi la moja kwa moja (kinyume na [matukio ya `Transfer`](https://eips.ethereum.org/EIPS/eip-20#transfer-1) ambayo yanaweza kutokea kama matokeo ya ruhusa). [Tazama hati za Solidity](https://docs.soliditylang.org/en/v0.8.20/security-considerations.html#tx-origin) kwa maelezo ya kina ya suala hili na kwa nini maombi yanahitaji kuwa ya moja kwa moja, badala ya kupatanishwa na mkataba. + +Hii inamaanisha kuwa matukio ya `Approval` yanayoidhinisha matumizi kutoka kwa [akaunti inayomilikiwa nje](/developers/docs/accounts/#types-of-account) yanapaswa kutoka kwa miamala inayotoka katika akaunti hiyo, na ambayo lengo lake ni mkataba wa ERC-20. Aina nyingine yoyote ya idhini kutoka kwa akaunti inayomilikiwa nje inatiliwa shaka. + +Hapa kuna [programu inayotambua aina hii ya tukio](https://github.com/qbzzt/20230915-scam-token-detection), kwa kutumia [viem](https://viem.sh/) na [TypeScript](https://www.typescriptlang.org/docs/), lahaja ya JavaScript yenye usalama wa aina. Ili kuiendesha: + +1. Nakili `.env.example` kwenda kwa `.env`. +2. Hariri `.env` ili kutoa URL ya nodi ya mainnet ya Ethereum. +3. Endesha `pnpm install` ili kusakinisha vifurushi vinavyohitajika. +4. Endesha `pnpm susApproval` ili kutafuta idhini zinazotiliwa shaka. + +Hapa kuna maelezo ya mstari kwa mstari: + +```typescript +import { + Address, + TransactionReceipt, + createPublicClient, + http, + parseAbiItem, +} from "viem" +import { mainnet } from "viem/chains" +``` + +Leta ufafanuzi wa aina, vitendakazi, na ufafanuzi wa mnyororo kutoka kwa `viem`. + +```typescript +import { config } from "dotenv" +config() +``` + +Soma `.env` ili kupata URL. + +```typescript +const client = createPublicClient({ + chain: mainnet, + transport: http(process.env.URL), +}) +``` + +Unda mteja wa Viem. Tunahitaji tu kusoma kutoka kwa mnyororo wa bloku, kwa hivyo mteja huyu hahitaji ufunguo wa faragha. + +```typescript +const testedAddress = "0xb047c8032b99841713b8e3872f06cf32beb27b82" +const fromBlock = 16859812n +const toBlock = 16873372n +``` + +Anwani ya mkataba wa ERC-20 unaotiliwa shaka, na bloku ambazo tutatafuta matukio ndani yake. Watoa huduma wa nodi kwa kawaida huweka kikomo uwezo wetu wa kusoma matukio kwa sababu kipimo data kinaweza kuwa ghali. Kwa bahati nzuri `wARB` haikutumika kwa kipindi cha saa kumi na nane, kwa hivyo tunaweza kutafuta matukio yote (kulikuwa na 13 tu kwa jumla). + +```typescript +const approvalEvents = await client.getLogs({ + address: testedAddress, + fromBlock, + toBlock, + event: parseAbiItem( + "event Approval(address indexed _owner, address indexed _spender, uint256 _value)" + ), +}) +``` + +Hii ndiyo njia ya kuomba taarifa za matukio kutoka kwa Viem. Tunapoipatia saini kamili ya tukio, ikiwa ni pamoja na majina ya sehemu, inatuchambulia tukio hilo. + +```typescript +const isContract = async (addr: Address): boolean => + await client.getBytecode({ address: addr }) +``` + +Kanuni yetu inatumika tu kwa akaunti zinazomilikiwa nje. Ikiwa kuna bytecode yoyote iliyorejeshwa na `client.getBytecode` inamaanisha kuwa huu ni mkataba na tunapaswa kuiruka tu. + +Ikiwa hujawahi kutumia TypeScript hapo awali, ufafanuzi wa kitendakazi unaweza kuonekana wa ajabu kidogo. Hatuiambii tu kigezo cha kwanza (na cha pekee) kinaitwa `addr`, lakini pia kwamba ni cha aina ya `Address`. Vile vile, sehemu ya `: boolean` inaiambia TypeScript kuwa thamani ya kurudisha ya kitendakazi ni boolean. + +```typescript +const getEventTxn = async (ev: Event): TransactionReceipt => + await client.getTransactionReceipt({ hash: ev.transactionHash }) +``` + +Kitendakazi hiki kinapata risiti ya muamala kutoka kwa tukio. Tunahitaji risiti ili kuhakikisha tunajua lengo la muamala lilikuwa nini. + +```typescript +const suspiciousApprovalEvent = async (ev : Event) : (Event | null) => { +``` + +Hiki ndicho kitendakazi muhimu zaidi, kinachoamua ikiwa tukio linatiliwa shaka au la. Aina ya kurudisha, `(Event | null)`, inaiambia TypeScript kuwa kitendakazi hiki kinaweza kurudisha ama `Event` au `null`. Tunarejesha `null` ikiwa tukio halitiliwi shaka. + +```typescript +const owner = ev.args._owner +``` + +Viem ina majina ya sehemu, kwa hivyo imetuchambulia tukio. `_owner` ni mmiliki wa tokeni zitakazotumiwa. + +```typescript +// Idhini za mikataba hazitiliwi shaka +if (await isContract(owner)) return null +``` + +Ikiwa mmiliki ni mkataba, chukulia kuwa idhini hii haitiliwi shaka. Ili kuangalia ikiwa idhini ya mkataba inatiliwa shaka au la, tutahitaji kufuatilia utekelezaji kamili wa muamala ili kuona ikiwa umewahi kufika kwenye mkataba wa mmiliki, na ikiwa mkataba huo uliita mkataba wa ERC-20 moja kwa moja. Hiyo ni ghali zaidi kwa rasilimali kuliko tunavyopenda kufanya. + +```typescript +const txn = await getEventTxn(ev) +``` + +Ikiwa idhini inatoka kwa akaunti inayomilikiwa nje, pata muamala ulioisababisha. + +```typescript +// Idhini inatiliwa shaka ikiwa inatoka kwa mmiliki wa EOA ambaye si `from` ya muamala +if (owner.toLowerCase() != txn.from.toLowerCase()) return ev +``` + +Hatuwezi tu kuangalia usawa wa maneno kwa sababu anwani ni za mfumo wa heksadesimali, kwa hivyo zina herufi. Wakati mwingine, kwa mfano katika `txn.from`, herufi hizo zote ni ndogo. Katika hali zingine, kama vile `ev.args._owner`, anwani iko katika [herufi mchanganyiko kwa ajili ya utambuzi wa makosa](https://eips.ethereum.org/EIPS/eip-55). + +Lakini ikiwa muamala hautoki kwa mmiliki, na mmiliki huyo anamilikiwa nje, basi tuna muamala unaotiliwa shaka. + +```typescript +// Pia inatiliwa shaka ikiwa lengo la muamala si mkataba wa ERC-20 tunaouchunguza +// uchunguzi +if (txn.to.toLowerCase() != testedAddress) return ev +``` + +Vile vile, ikiwa anwani ya `to` ya muamala, mkataba wa kwanza kuitwa, si mkataba wa ERC-20 unaochunguzwa basi inatiliwa shaka. + +```typescript + // Ikiwa hakuna sababu ya kutilia shaka, rudisha null. + return null +} +``` + +Ikiwa hakuna sharti kati ya hayo mawili lililo kweli basi tukio la `Approval` halitiliwi shaka. + +```typescript +const testPromises = approvalEvents.map((ev) => suspiciousApprovalEvent(ev)) +const testResults = (await Promise.all(testPromises)).filter((x) => x != null) + +console.log(testResults) +``` + +[Kitendakazi cha `async`](https://www.w3schools.com/js/js_async.asp) kinarudisha kitu cha `Promise`. Kwa sintaksia ya kawaida, `await x()`, tunasubiri `Promise` hiyo itimizwe kabla ya kuendelea na uchakataji. Hii ni rahisi kupanga na kufuata, lakini pia haina ufanisi. Wakati tunasubiri `Promise` kwa tukio maalum litimizwe tayari tunaweza kuanza kufanyia kazi tukio linalofuata. + +Hapa tunatumia [`map`](https://www.w3schools.com/jsref/jsref_map.asp) kuunda safu ya vitu vya `Promise`. Kisha tunatumia [`Promise.all`](https://www.javascripttutorial.net/es6/javascript-promise-all/) kusubiri ahadi zote hizo zitimizwe. Kisha tunachuja [`filter`](https://www.w3schools.com/jsref/jsref_filter.asp) matokeo hayo ili kuondoa matukio yasiyotiliwa shaka. + +### Matukio ya `Transfer` yenye shaka {#suspicious-transfer-events} + +Njia nyingine inayowezekana ya kutambua tokeni za ulaghai ni kuona ikiwa zina uhamisho wowote unaotiliwa shaka. Kwa mfano, uhamisho kutoka kwa akaunti ambazo hazina tokeni nyingi kiasi hicho. Unaweza kuona [jinsi ya kutekeleza jaribio hili](https://github.com/qbzzt/20230915-scam-token-detection/blob/main/susTransfer.ts), lakini `wARB` haina suala hili. + +## Hitimisho {#conclusion} + +Ugunduzi wa kiotomatiki wa ulaghai wa ERC-20 unakabiliwa na [matokeo hasi ya uwongo](https://en.wikipedia.org/wiki/False_positives_and_false_negatives#False_negative_error), kwa sababu ulaghai unaweza kutumia mkataba wa tokeni wa ERC-20 wa kawaida kabisa ambao hauwakilishi kitu halisi. Kwa hivyo unapaswa kujaribu kila wakati _kupata anwani ya tokeni kutoka chanzo kinachoaminika_. + +Ugunduzi wa kiotomatiki unaweza kusaidia katika hali fulani, kama vile vipande vya DeFi, ambapo kuna tokeni nyingi na zinahitaji kushughulikiwa kiotomatiki. Lakini kama kawaida [caveat emptor](https://www.investopedia.com/terms/c/caveatemptor.asp), fanya utafiti wako mwenyewe, na wahimize watumiaji wako kufanya vivyo hivyo. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/secret-state/index.md b/public/content/translations/sw/developers/tutorials/secret-state/index.md new file mode 100644 index 00000000000..aa6c9b6ee0a --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/secret-state/index.md @@ -0,0 +1,736 @@ +--- +title: Kutumia zero-knowledge kwa hali ya siri +description: michezo ya onchain ina mipaka kwa sababu haiwezi kutunza taarifa zozote zilizofichwa. Baada ya kusoma mafunzo haya, msomaji ataweza kuchanganya uthibitisho wa zero-knowledge na vipengele vya seva ili kuunda michezo inayoweza kuthibitishwa na hali ya siri, offchain, na sehemu. Mbinu ya kufanya hivi itaonyeshwa kwa kuunda mchezo wa minesweeper. +author: Ori Pomerantz +tags: + [ + "seva", + "offchain", + "kati", + "zero-knowledge", + "zokrates", + "mud" + ] +skill: advanced +lang: sw +published: 2025-03-15 +--- + +_Hakuna siri kwenye mnyororo wa bloku_. Kila kitu kinachowekwa kwenye mnyororo wa bloku kiko wazi kwa kila mtu kusoma. Hii ni muhimu, kwa sababu mnyororo wa bloku unategemea mtu yeyote kuweza kuuthibitisha. Hata hivyo, mara nyingi michezo hutegemea hali ya siri. Kwa mfano, mchezo wa [minesweeper](https://en.wikipedia.org/wiki/Minesweeper_\(video_game\)) hauna maana kabisa ikiwa unaweza tu kwenda kwenye kichunguzi cha mnyororo wa bloku na kuona ramani. + +Suluhisho rahisi zaidi ni kutumia [sehemu ya seva](/developers/tutorials/server-components/) kushikilia hali ya siri. Hata hivyo, sababu tunayotumia mnyororo wa bloku ni kuzuia udanganyifu na msanidi programu wa mchezo. Tunahitaji kuhakikisha uaminifu wa sehemu ya seva. Seva inaweza kutoa hashi ya hali, na kutumia [uthibitisho wa zero-knowledge](/zero-knowledge-proofs/#why-zero-knowledge-proofs-are-important) kuthibitisha kuwa hali iliyotumiwa kuhesabu matokeo ya hatua ndiyo sahihi. + +Baada ya kusoma makala hii utajua jinsi ya kuunda aina hii ya seva inayoshikilia hali ya siri, wateja wa kuonyesha hali, na sehemu ya onchain kwa mawasiliano kati ya hizi mbili. Zana kuu tutakazotumia zitakuwa: + +| Zana | Madhumuni | Imethibitishwa kwenye toleo | +| --------------------------------------------- | --------------------------------------------------- | --------------------------------------: | +| [Zokrates](https://zokrates.github.io/) | Uthibitisho wa zero-knowledge na uthibitishaji wake | 1.1.9 | +| [Typescript](https://www.typescriptlang.org/) | Lugha ya programu kwa seva na wateja | 5.4.2 | +| [Nodi](https://nodejs.org/en) | Kuendesha seva | 20.18.2 | +| [Viem](https://viem.sh/) | Mawasiliano na Mnyororo wa bloku | 2.9.20 | +| [MUD](https://mud.dev/) | Usimamizi wa data ya Onchain | 2.0.12 | +| [React](https://react.dev/) | Kiolesura cha mtumiaji wa Wateja | 18.2.0 | +| [Vite](https://vitejs.dev/) | Kutumikia msimbo wa wateja | 4.2.1 | + +## Mfano wa Minesweeper {#minesweeper} + +[Minesweeper](https://en.wikipedia.org/wiki/Minesweeper_\(video_game\)) ni mchezo unaojumuisha ramani ya siri yenye uwanja wa migodi. Mchezaji anachagua kuchimba katika eneo maalum. Ikiwa eneo hilo lina mgodi, mchezo umeisha. Vinginevyo, mchezaji anapata idadi ya migodi katika viwanja nane vinavyozunguka eneo hilo. + +Programu hii imeandikwa kwa kutumia [MUD](https://mud.dev/), mfumo unaoturuhusu kuhifadhi data onchain kwa kutumia [hifadhidata ya ufunguo-thamani](https://aws.amazon.com/nosql/key-value/) na kusawazisha data hiyo kiotomatiki na vipengele vya offchain. Mbali na usawazishaji, MUD hurahisisha kutoa udhibiti wa ufikiaji, na kwa watumiaji wengine [kupanua](https://mud.dev/guides/extending-a-world) programu yetu bila ruhusa. + +### Kuendesha mfano wa minesweeper {#running-minesweeper-example} + +Ili kuendesha mfano wa minesweeper: + +1. Hakikisha [una mahitaji ya awali yaliyowekwa](https://mud.dev/quickstart#prerequisites): [Nodi](https://mud.dev/quickstart#prerequisites), [Foundry](https://book.getfoundry.sh/getting-started/installation), [`git`](https://git-scm.com/downloads), [`pnpm`](https://git-scm.com/downloads), na [`mprocs`](https://github.com/pvolok/mprocs). + +2. Kloni hifadhi. + + ```sh copy + git clone https://github.com/qbzzt/20240901-secret-state.git + ``` + +3. Sakinisha vifurushi. + + ```sh copy + cd 20240901-secret-state/ + pnpm install + npm install -g mprocs + ``` + + Ikiwa Foundry ilisakinishwa kama sehemu ya `pnpm install`, unahitaji kuanzisha upya ganda la mstari wa amri. + +4. Kusanya mikataba + + ```sh copy + cd packages/contracts + forge build + cd ../.. + ``` + +5. Anzisha programu (pamoja na mnyororo wa bloku wa [anvil](https://book.getfoundry.sh/anvil/)) na subiri. + + ```sh copy + mprocs + ``` + + Kumbuka kuwa uanzishaji unachukua muda mrefu. Ili kuona maendeleo, kwanza tumia mshale wa chini kusogeza hadi kwenye kichupo cha _contracts_ ili kuona mikataba ya MUD ikisambazwa. Unapopata ujumbe _Waiting for file changes…_, mikataba imesambazwa na maendeleo zaidi yatatokea kwenye kichupo cha _server_. Hapo, unasubiri hadi upate ujumbe _Verifier address: 0x...._. + + Ikiwa hatua hii itafanikiwa, utaona skrini ya `mprocs`, na michakato tofauti upande wa kushoto na matokeo ya console kwa mchakato uliochaguliwa kwa sasa upande wa kulia. + + ![Skrini ya mprocs](./mprocs.png) + + Ikiwa kuna tatizo na `mprocs`, unaweza kuendesha michakato minne kwa mikono, kila mmoja katika dirisha lake la mstari wa amri: + + - **Anvil** + + ```sh + cd packages/contracts + anvil --base-fee 0 --block-time 2 + ``` + + - **Mikataba** + + ```sh + cd packages/contracts + pnpm mud dev-contracts --rpc http://127.0.0.1:8545 + ``` + + - **Seva** + + ```sh + cd packages/server + pnpm start + ``` + + - **Wateja** + + ```sh + cd packages/client + pnpm run dev + ``` + +6. Sasa unaweza kuvinjari kwa [wateja](http://localhost:3000), bonyeza **New Game**, na uanze kucheza. + +### Majedwali {#tables} + +Tunahitaji [majedwali kadhaa](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts) onchain. + +- `Configuration`: Jedwali hili ni la pekee, halina ufunguo na rekodi moja tu. Hutumika kushikilia taarifa za usanidi wa mchezo: + - `height`: Urefu wa uwanja wa migodi + - `width`: Upana wa uwanja wa migodi + - `numberOfBombs`: Idadi ya mabomu katika kila uwanja wa migodi + +- `VerifierAddress`: Jedwali hili pia ni la pekee. Hutumika kushikilia sehemu moja ya usanidi, anwani ya mkataba wa mthibitishaji (`verifier`). Tungeweza kuweka taarifa hizi kwenye jedwali la `Configuration`, lakini imewekwa na sehemu tofauti, seva, kwa hivyo ni rahisi kuiweka kwenye jedwali tofauti. + +- `PlayerGame`: Ufunguo ni anwani ya mchezaji. Data ni: + + - `gameId`: Thamani ya baiti 32 ambayo ni hashi ya ramani ambayo mchezaji anacheza (kitambulisho cha mchezo). + - `win`: boolean inayoonyesha kama mchezaji alishinda mchezo. + - `lose`: boolean inayoonyesha kama mchezaji alishindwa mchezo. + - `digNumber`: idadi ya uchimbaji uliofanikiwa katika mchezo. + +- `GamePlayer`: Jedwali hili linashikilia ramani ya kinyume, kutoka `gameId` hadi anwani ya mchezaji. + +- `Map`: Ufunguo ni tupo ya thamani tatu: + + - `gameId`: Thamani ya baiti 32 ambayo ni hashi ya ramani ambayo mchezaji anacheza (kitambulisho cha mchezo). + - kuratibu ya `x` + - kuratibu ya `y` + + Thamani ni nambari moja. Ni 255 ikiwa bomu liligunduliwa. Vinginevyo, ni idadi ya mabomu karibu na eneo hilo pamoja na moja. Hatuwezi tu kutumia idadi ya mabomu, kwa sababu kwa chaguo-msingi hifadhi zote katika EVM na thamani zote za safu katika MUD ni sifuri. Tunahitaji kutofautisha kati ya "mchezaji bado hajachimba hapa" na "mchezaji alichimba hapa, na akakuta hakuna mabomu karibu". + +Kwa kuongeza, mawasiliano kati ya wateja na seva hufanyika kupitia sehemu ya onchain. Hii pia inatekelezwa kwa kutumia majedwali. + +- `PendingGame`: Maombi ambayo hayajashughulikiwa ya kuanza mchezo mpya. +- `PendingDig`: Maombi ambayo hayajashughulikiwa ya kuchimba katika eneo maalum katika mchezo maalum. Hili ni [jedwali la offchain](https://mud.dev/store/tables#types-of-tables), ikimaanisha kuwa haliandikwi kwenye ghala la EVM, linasomeka tu offchain kwa kutumia matukio. + +### Utekelezaji na mtiririko wa data {#execution-data-flows} + +Mtiririko huu unaratibu utekelezaji kati ya wateja, sehemu ya onchain, na seva. + +#### Uanzishaji {#initialization-flow} + +Unapoendesha `mprocs`, hatua hizi hutokea: + +1. [`mprocs`](https://github.com/pvolok/mprocs) inaendesha vipengele vinne: + + - [Anvil](https://book.getfoundry.sh/anvil/), ambayo inaendesha mnyororo wa bloku wa ndani + - [Mikataba](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/contracts), ambayo inakusanya (ikihitajika) na kusambaza mikataba ya MUD + - [Wateja](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/client), ambayo inaendesha [Vite](https://vitejs.dev/) ili kuhudumia UI na msimbo wa wateja kwa vivinjari vya wavuti. + - [Seva](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/server), ambayo hufanya vitendo vya seva + +2. Kifurushi cha `contracts` kinasambaza mikataba ya MUD na kisha kinaendesha [hati ya `PostDeploy.s.sol`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol). Hati hii inaweka usanidi. Msimbo kutoka github unabainisha [uwanja wa migodi wa 10x5 wenye migodi nane ndani yake](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol#L23). + +3. [Seva](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts) inaanza kwa [kuweka MUD](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L6). Miongoni mwa mambo mengine, hii inawasha usawazishaji wa data, ili nakala ya majedwali husika iwepo kwenye kumbukumbu ya seva. + +4. Seva inasajili kazi ya kutekelezwa [wakati jedwali la `Configuration` linabadilika](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L23). [Kazi hii](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L24-L168) inaitwa baada ya `PostDeploy.s.sol` kutekeleza na kurekebisha jedwali. + +5. Wakati kazi ya uanzishaji wa seva inapokuwa na usanidi, [inaita `zkFunctions`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L34-L35) ili kuanzisha [sehemu ya zero-knowledge ya seva](#using-zokrates-from-typescript). Hii haiwezi kutokea hadi tupate usanidi kwa sababu kazi za zero-knowledge lazima ziwe na upana na urefu wa uwanja wa migodi kama viwango vya kudumu. + +6. Baada ya sehemu ya zero-knowledge ya seva kuanzishwa, hatua inayofuata ni [kusambaza mkataba wa uthibitishaji wa zero-knowledge kwenye mnyororo wa bloku](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L42-L53) na kuweka anwani ya mthibitishwa katika MUD. + +7. Mwishowe, tunasajili masasisho ili tuone mchezaji anapoomba ama [kuanza mchezo mpya](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71) au [kuchimba kwenye mchezo uliopo](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73-L108). + +#### Mchezo mpya {#new-game-flow} + +Hivi ndivyo hutokea mchezaji anapoomba mchezo mpya. + +1. Ikiwa hakuna mchezo unaoendelea kwa mchezaji huyu, au kuna mmoja lakini una gameId ya sifuri, wateja wanaonyesha [kitufe cha mchezo mpya](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175). Mtumiaji anapobonyeza kitufe hiki, [React inaendesha kazi ya `newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L96). + +2. [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L43-L46) ni wito wa `System`. Katika MUD simu zote zinaelekezwa kupitia mkataba wa `World`, na katika hali nyingi unaita `__`. Katika kesi hii, wito ni kwa `app__newGame`, ambayo MUD kisha inaelekeza kwa [`newGame` katika `GameSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L16-L22). + +3. Kazi ya onchain inakagua kwamba mchezaji hana mchezo unaoendelea, na ikiwa hakuna [inaongeza ombi kwenye jedwali la `PendingGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L21). + +4. Seva inagundua mabadiliko katika `PendingGame` na [inaendesha kazi iliyosajiliwa](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71). Kazi hii inaita [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L110-L114), ambayo kwa upande wake inaita [`createGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L116-L144). + +5. Jambo la kwanza `createGame` hufanya ni [kuunda ramani isiyo ya kawaida na idadi inayofaa ya migodi](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L120-L135). Kisha, inaita [`makeMapBorders`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L147-L166) ili kuunda ramani yenye mipaka tupu, ambayo ni muhimu kwa Zokrates. Mwishowe, `createGame` inaita [`calculateMapHash`](#calculateMapHash), ili kupata hashi ya ramani, ambayo hutumiwa kama kitambulisho cha mchezo. + +6. Kazi ya `newGame` inaongeza mchezo mpya kwenye `gamesInProgress`. + +7. Jambo la mwisho ambalo seva hufanya ni kuita [`app__newGameResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L38-L43), ambayo iko onchain. Kazi hii iko katika `System` tofauti, [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol), ili kuwezesha udhibiti wa ufikiaji. Udhibiti wa ufikiaji umefafanuliwa katika [faili ya usanidi ya MUD](https://mud.dev/config), [`mud.config.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts#L67-L72). + + Orodha ya ufikiaji inaruhusu anwani moja tu kuita `System`. Hii inazuia ufikiaji wa kazi za seva kwa anwani moja, kwa hivyo hakuna anayeweza kujifanya kuwa seva. + +8. Sehemu ya onchain inasasisha majedwali husika: + + - Unda mchezo katika `PlayerGame`. + - Weka ramani ya kinyume katika `GamePlayer`. + - Ondoa ombi kutoka `PendingGame`. + +9. Seva inatambua mabadiliko katika `PendingGame`, lakini haifanyi chochote kwa sababu [`wantsGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L58-L60) ni ya uongo. + +10. Kwa upande wa wateja [`gameRecord`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L143-L148) imewekwa kwenye ingizo la `PlayerGame` kwa anwani ya mchezaji. Wakati `PlayerGame` inapobadilika, `gameRecord` pia hubadilika. + +11. Ikiwa kuna thamani katika `gameRecord`, na mchezo haujashindwa wala kushindwa, wateja [wanaonyesha ramani](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190). + +#### Chimba {#dig-flow} + +1. Mchezaji [anabonyeza kitufe cha seli ya ramani](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L188), ambayo inaita [kazi ya `dig`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L33-L36). Kazi hii inaita [`dig` onchain](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L24-L32). + +2. Sehemu ya onchain [inafanya ukaguzi kadhaa wa kiakili](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L25-L30), na ikiwa imefanikiwa inaongeza ombi la kuchimba kwenye [`PendingDig`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L31). + +3. Seva [inagundua mabadiliko katika `PendingDig`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73). [Ikiwa ni halali](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L75-L84), [inaita msimbo wa zero-knowledge](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L86-L95) (imeelezewa hapa chini) ili kutoa matokeo na uthibitisho kwamba ni halali. + +4. [Seva](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L97-L107) inaita [`digResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L45-L64) onchain. + +5. `digResponse` hufanya mambo mawili. Kwanza, inakagua [uthibitisho wa zero knowledge](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L47-L61). Kisha, ikiwa uthibitisho umekaguliwa, inaita [`processDigResult`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L67-L86) ili kushughulikia matokeo. + +6. `processDigResult` inakagua ikiwa mchezo [umeshindwa](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L76-L78) au [umeshinda](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L83-L86), na [inasasisha `Ramani`, ramani ya onchain](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L80). + +7. Mteja huchukua masasisho kiotomatiki na [husasisha ramani inayoonyeshwa kwa mchezaji](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190), na inapohitajika humwambia mchezaji ikiwa ameshinda au ameshindwa. + +## Kutumia Zokrates {#using-zokrates} + +Katika mtiririko ulioelezwa hapo juu tuliruka sehemu za maarifa-sifuri, tukizichukulia kama sanduku jeusi. Sasa tufungue tuone jinsi msimbo huo umeandikwa. + +### Kupiga hashi ramani {#hashing-map} + +Tunaweza kutumia [msimbo huu wa JavaScript](https://github.com/ZK-Plus/ICBC24_Tutorial_Compute-Offchain-Verify-onchain/tree/solutions/exercise) kutekeleza [Poseidon](https://www.poseidon-hash.info), kazi ya hashi ya Zokrates tunayotumia. Hata hivyo, ingawa hii ingekuwa haraka zaidi, pia ingekuwa ngumu zaidi kuliko kutumia tu kazi ya hashi ya Zokrates kuifanya. Hii ni mafunzo, na kwa hivyo msimbo umeboreshwa kwa urahisi, si kwa utendaji. Kwa hivyo, tunahitaji programu mbili tofauti za Zokrates, moja ya kuhesabu tu hashi ya ramani (`hashi`) na nyingine ya kuunda uthibitisho wa maarifa-sifuri wa matokeo ya kuchimba katika eneo kwenye ramani (`chimba`). + +### Kazi ya hashi {#hash-function} + +Hii ni kazi inayokokotoa hashi ya ramani. Tutapitia msimbo huu mstari kwa mstari. + +``` +import "hashes/poseidon/poseidon.zok" as poseidon; +import "utils/pack/bool/pack128.zok" as pack128; +``` + +Mistari hii miwili inaingiza kazi mbili kutoka kwa [maktaba ya kawaida ya Zokrates](https://zokrates.github.io/toolbox/stdlib.html). [Kazi ya kwanza](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/hashes/poseidon/poseidon.zok) ni [hashi ya Poseidon](https://www.poseidon-hash.info/). Inachukua safu ya [`vipengele vya uwanja`](https://zokrates.github.io/language/types.html#field) na kurudisha `uwanja`. + +Kipengele cha uwanja katika Zokrates kwa kawaida huwa na urefu usiozidi biti 256, lakini si kwa kiasi kikubwa. Ili kurahisisha msimbo, tunazuia ramani iwe na biti zisizozidi 512, na kupiga hashi safu ya nyanja nne, na katika kila uwanja tunatumia biti 128 tu. [Kazi ya `pack128`](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/utils/pack/bool/pack128.zok) hubadilisha safu ya biti 128 kuwa `uwanja` kwa kusudi hili. + +``` + def hashMap(bool[${width+2}][${height+2}] map) -> field { +``` + +Mstari huu unaanzisha ufafanuzi wa kazi. `hashMap` inapokea kigezo kimoja kiitwacho `map`, safu ya pande mbili ya `bool`(ean). Ukubwa wa ramani ni `width+2` kwa `height+2` kwa sababu ambazo [zimeelezwa hapa chini](#why-map-border). + +Tunaweza kutumia `${width+2}` na `${height+2}` kwa sababu programu za Zokrates zimehifadhiwa katika programu hii kama [kamba za kiolezo](https://www.w3schools.com/js/js_string_templates.asp). Msimbo kati ya `${` na `}` unathminiwa na JavaScript, na kwa njia hii programu inaweza kutumika kwa saizi tofauti za ramani. Kigezo cha ramani kina mpaka wa upana wa eneo moja kuzunguka bila mabomu yoyote, ambayo ndiyo sababu tunahitaji kuongeza mbili kwenye upana na urefu. + +Thamani ya kurudi ni `uwanja` ambao una hashi. + +``` + bool[512] mut map1d = [false; 512]; +``` + +Ramani ni ya pande mbili. Hata hivyo, kazi ya `pack128` haifanyi kazi na safu za pande mbili. Kwa hivyo, kwanza tunalaza ramani kuwa safu ya baiti 512, kwa kutumia `map1d`. Kwa chaguo-msingi vigezo vya Zokrates ni viwango vya kudumu, lakini tunahitaji kugawa thamani kwa safu hii katika kitanzi, kwa hivyo tunakifafanua kama [`mut`](https://zokrates.github.io/language/variables.html#mutability). + +Tunahitaji kuanzisha safu kwa sababu Zokrates haina `undefined`. Usemi wa `[false; 512]` unamaanisha [safu ya thamani 512 za `uongo`](https://zokrates.github.io/language/types.html#declaration-and-initialization). + +``` + u32 mut counter = 0; +``` + +Pia tunahitaji kaunta kutofautisha kati ya biti ambazo tayari tumejaza katika `map1d` na zile ambazo hatujajaza. + +``` + for u32 x in 0..${width+2} { +``` + +Hivi ndivyo unavyotangaza [kitanzi cha `kwa`](https://zokrates.github.io/language/control_flow.html#for-loops) katika Zokrates. Kitanzi cha Zokrates `kwa` lazima kiwe na mipaka maalum, kwa sababu ingawa kinaonekana kama kitanzi, mkalimani kwa kweli "huifungua". Usemi `${width+2}` ni kiwango cha kudumu cha wakati wa kukusanya kwa sababu `width` imewekwa na msimbo wa TypeScript kabla ya kuita mkusanyaji. + +``` + for u32 y in 0..${height+2} { + map1d[counter] = map[x][y]; + counter = counter+1; + } + } +``` + +Kwa kila eneo kwenye ramani, weka thamani hiyo kwenye safu ya `map1d` na uongeze kaunta. + +``` + field[4] hashMe = [ + pack128(map1d[0..128]), + pack128(map1d[128..256]), + pack128(map1d[256..384]), + pack128(map1d[384..512]) + ]; +``` + +`pack128` kuunda safu ya thamani nne za `uwanja` kutoka `map1d`. Katika Zokrates `array[a..b]` inamaanisha kipande cha safu kinachoanzia `a` na kuishia `b-1`. + +``` + return poseidon(hashMe); +} +``` + +Tumia `poseidon` kubadilisha safu hii kuwa hashi. + +### Programu ya hashi {#hash-program} + +Seva inahitaji kuita `hashMap` moja kwa moja ili kuunda vitambulisho vya mchezo. Hata hivyo, Zokrates inaweza tu kuita kazi ya `main` kwenye programu kuanza, kwa hivyo tunaunda programu yenye `main` inayoita kazi ya hashi. + +``` +${hashFragment} + +def main(bool[${width+2}][${height+2}] map) -> field { + return hashMap(map); +} +``` + +### Programu ya kuchimba {#dig-program} + +Hii ndiyo moyo wa sehemu ya maarifa-sifuri ya programu, ambapo tunatoa uthibitisho unaotumika kuthibitisha matokeo ya kuchimba. + +``` +${hashFragment} + +// Idadi ya migodi katika eneo (x,y) +def map2mineCount(bool[${width+2}][${height+2}] map, u32 x, u32 y) -> u8 { + return if map[x+1][y+1] { 1 } else { 0 }; +} +``` + +#### Kwa nini mpaka wa ramani {#why-map-border} + +Uthibitisho wa maarifa-sifuri hutumia [mizunguko ya kihesabu](https://medium.com/web3studio/simple-explanations-of-arithmetic-circuits-and-zero-knowledge-proofs-806e59a79785), ambayo haina mbadala rahisi kwa taarifa ya `if`. Badala yake, wanatumia mbadala wa [kiendeshaji chenye masharti](https://en.wikipedia.org/wiki/Ternary_conditional_operator). Ikiwa `a` inaweza kuwa sifuri au moja, unaweza kuhesabu `if a { b } else { c }` kama `ab+(1-a)c`. + +Kwa sababu hii, taarifa ya `if` ya Zokrates daima inathmini matawi yote mawili. Kwa mfano, ikiwa una msimbo huu: + +``` +bool[5] arr = [false; 5]; +u32 index=10; +return if index>4 { 0 } else { arr[index] } +``` + +Itatoa hitilafu, kwa sababu inahitaji kuhesabu `arr[10]`, ingawa thamani hiyo itazidishwa na sifuri baadaye. + +Hii ndiyo sababu tunahitaji mpaka wa upana wa eneo moja kuzunguka ramani. Tunahitaji kuhesabu jumla ya idadi ya migodi karibu na eneo, na hiyo inamaanisha tunahitaji kuona eneo la safu moja juu na chini, kushoto na kulia, kwa eneo tunalochimba. Hiyo inamaanisha maeneo hayo lazima yawepo kwenye safu ya ramani ambayo Zokrates inapewa. + +``` +def main(private bool[${width+2}][${height+2}] map, u32 x, u32 y) -> (field, u8) { +``` + +Kwa chaguo-msingi, uthibitisho wa Zokrates unajumuisha pembejeo zao. Haina faida kujua kuna migodi mitano karibu na eneo isipokuwa unajua ni eneo gani (na huwezi tu kuilinganisha na ombi lako, kwa sababu basi mthibitishaji anaweza kutumia thamani tofauti na asikuambie). Hata hivyo, tunahitaji kuweka ramani kuwa siri, huku tukiitoa kwa Zokrates. Suluhisho ni kutumia kigezo cha `private`, ambacho _hakifunuliwi_ na uthibitisho. + +Hii inafungua njia nyingine ya matumizi mabaya. Mthibitishaji anaweza kutumia kuratibu sahihi, lakini kuunda ramani yenye idadi yoyote ya migodi karibu na eneo, na labda katika eneo lenyewe. Ili kuzuia matumizi haya mabaya, tunafanya uthibitisho wa maarifa-sifuri ujumuishe hashi ya ramani, ambayo ni kitambulisho cha mchezo. + +``` + return (hashMap(map), +``` + +Thamani ya kurudi hapa ni tuple inayojumuisha safu ya hashi ya ramani pamoja na matokeo ya kuchimba. + +``` + if map2mineCount(map, x, y) > 0 { 0xFF } else { +``` + +Tunatumia 255 kama thamani maalum endapo eneo lenyewe lina bomu. + +``` + map2mineCount(map, x-1, y-1) + map2mineCount(map, x, y-1) + map2mineCount(map, x+1, y-1) + + map2mineCount(map, x-1, y) + map2mineCount(map, x+1, y) + + map2mineCount(map, x-1, y+1) + map2mineCount(map, x, y+1) + map2mineCount(map, x+1, y+1) + } + ); +} +``` + +Ikiwa mchezaji hajagonga mgodi, ongeza hesabu za migodi kwa eneo linalozunguka eneo hilo na urudishe hiyo. + +### Kutumia Zokrates kutoka TypeScript {#using-zokrates-from-typescript} + +Zokrates ina kiolesura cha mstari wa amri, lakini katika programu hii tunaitumia katika [msimbo wa TypeScript](https://zokrates.github.io/toolbox/zokrates_js.html). + +Maktaba yenye ufafanuzi wa Zokrates inaitwa [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts). + +```typescript +import { initialize as zokratesInitialize } from "zokrates-js" +``` + +Leta [mafungo ya JavaScript ya Zokrates](https://zokrates.github.io/toolbox/zokrates_js.html). Tunahitaji tu kazi ya [`initialize`](https://zokrates.github.io/toolbox/zokrates_js.html#initialize) kwa sababu inarudisha ahadi inayotatua ufafanuzi wote wa Zokrates. + +```typescript +export const zkFunctions = async (width: number, height: number) : Promise => { +``` + +Sawa na Zokrates yenyewe, pia tunasafirisha kazi moja tu, ambayo pia ni [isiyosawazisha](https://www.w3schools.com/js/js_async.asp). Inaporudi hatimaye, inatoa kazi kadhaa kama tutakavyoona hapa chini. + +```typescript +const zokrates = await zokratesInitialize() +``` + +Anzisha Zokrates, pata kila kitu tunachohitaji kutoka kwa maktaba. + +```typescript +const hashFragment = ` + import "utils/pack/bool/pack128.zok" as pack128; + import "hashes/poseidon/poseidon.zok" as poseidon; + . + . + . + } + ` + +const hashProgram = ` + ${hashFragment} + . + . + . + ` + +const digProgram = ` + ${hashFragment} + . + . + . + ` +``` + +Kisha tuna kazi ya hashi na programu mbili za Zokrates tulizoona hapo juu. + +```typescript +const digCompiled = zokrates.compile(digProgram) +const hashCompiled = zokrates.compile(hashProgram) +``` + +Hapa tunakusanya programu hizo. + +```typescript +// Tengeneza funguo za uthibitishaji wa zero-knowledge.\n// Kwenye mfumo wa uzalishaji ungetaka kutumia sherehe ya usanidi.\n// (https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony).\nconst keySetupResults = zokrates.setup(digCompiled.program, \"\")\nconst verifierKey = keySetupResults.vk\nconst proverKey = keySetupResults.pk +``` + +Kwenye mfumo wa uzalishaji tunaweza kutumia [hafla ya kuanzisha](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) ngumu zaidi, lakini hii ni nzuri ya kutosha kwa maonyesho. Sio tatizo watumiaji kujua ufunguo wa mthibitishaji - bado hawawezi kuitumia kuthibitisha mambo isipokuwa ni kweli. Kwa sababu tunabainisha entropy (kigezo cha pili, `""`), matokeo yatakuwa sawa kila wakati. + +**Kumbuka:** Uundaji wa programu za Zokrates na uundaji wa ufunguo ni michakato ya polepole. Hakuna haja ya kuzirudia kila wakati, ila tu wakati saizi ya ramani inabadilika. Kwenye mfumo wa uzalishaji ungewafanya mara moja, kisha uhifadhi matokeo. Sababu pekee kwa nini siifanyi hapa ni kwa ajili ya urahisi. + +#### `calculateMapHash` {#calculateMapHash} + +```typescript +const calculateMapHash = function (hashMe: boolean[][]): string { + return ( + "0x" + + BigInt(zokrates.computeWitness(hashCompiled, [hashMe]).output.slice(1, -1)) + .toString(16) + .padStart(64, "0") + ) +} +``` + +Kazi ya [`computeWitness`](https://zokrates.github.io/toolbox/zokrates_js.html#computewitnessartifacts-args-options) inatekeleza programu ya Zokrates. Inarudisha muundo wenye nyanja mbili: `output`, ambayo ni matokeo ya programu kama kamba ya JSON, na `witness`, ambayo ni taarifa inayohitajika kuunda uthibitisho wa maarifa-sifuri wa matokeo. Hapa tunahitaji tu matokeo. + +Matokeo ni kamba ya fomu `"31337"`, nambari ya desimali iliyofungwa kwenye alama za nukuu. Lakini matokeo tunayohitaji kwa `viem` ni nambari ya heksadesimali ya fomu `0x60A7`. Kwa hivyo tunatumia `.slice(1,-1)` kuondoa alama za nukuu na kisha `BigInt` kuendesha kamba iliyobaki, ambayo ni nambari ya desimali, kwa [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt). `.toString(16)` inabadilisha `BigInt` hii kuwa kamba ya heksadesimali, na `"0x"+` inaongeza alama ya nambari za heksadesimali. + +```typescript +// Chimba na urudishe uthibitisho wa maarifa-sifuri wa matokeo +// (msimbo wa upande wa seva) +``` + +Uthibitisho wa maarifa-sifuri unajumuisha pembejeo za umma (`x` na `y`) na matokeo (hashi ya ramani na idadi ya mabomu). + +```typescript + const zkDig = function(map: boolean[][], x: number, y: number) : any { + if (x<0 || x>=width || y<0 || y>=height) + throw new Error("Trying to dig outside the map") +``` + +Ni tatizo kuangalia ikiwa faharasa iko nje ya mipaka katika Zokrates, kwa hivyo tunafanya hapa. + +```typescript +const runResults = zokrates.computeWitness(digCompiled, [map, `${x}`, `${y}`]) +``` + +Tekeleza programu ya kuchimba. + +```typescript + const proof = zokrates.generateProof( + digCompiled.program, + runResults.witness, + proverKey) + + return proof + } +``` + +Tumia [`generateProof`](https://zokrates.github.io/toolbox/zokrates_js.html#generateproofprogram-witness-provingkey-entropy) na urudishe uthibitisho. + +```typescript +const solidityVerifier = ` + // Ukubwa wa ramani: ${width} x ${height} + \n${zokrates.exportSolidityVerifier(verifierKey)} + ` +``` + +Mthibitishaji wa Solidity, mkataba-erevu tunaoweza kusambaza kwenye mnyororo wa bloku na kutumia kuthibitisha uthibitisho unaotokana na `digCompiled.program`. + +```typescript + return { + zkDig, + calculateMapHash, + solidityVerifier, + } +} +``` + +Mwishowe, rudisha kila kitu ambacho msimbo mwingine unaweza kuhitaji. + +## Majaribio ya usalama {#security-tests} + +Majaribio ya usalama ni muhimu kwa sababu hitilafu ya utendakazi hatimaye itajidhihirisha. Lakini ikiwa programu haina usalama, kuna uwezekano itabaki imefichwa kwa muda mrefu kabla ya kufunuliwa na mtu anayedanganya na kuondoka na rasilimali ambazo ni za wengine. + +### Ruhusa {#permissions} + +Kuna chombo kimoja cha upendeleo katika mchezo huu, seva. Ni mtumiaji pekee anayeruhusiwa kuita kazi katika [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol). Tunaweza kutumia [`cast`](https://book.getfoundry.sh/cast/) kuthibitisha wito kwa kazi zilizoidhinishwa zinaruhusiwa tu kama akaunti ya seva. + +[Ufunguo binafsi wa seva uko katika `setupNetwork.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/mud/setupNetwork.ts#L52). + +1. Kwenye kompyuta inayoendesha `anvil` (mnyororo wa bloku), weka vigezo hivi vya mazingira. + + ```sh copy + WORLD_ADDRESS=0x8d8b6b8414e1e3dcfd4168561b9be6bd3bf6ec4b + UNAUTHORIZED_KEY=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a + AUTHORIZED_KEY=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d + ``` + +2. Tumia `cast` kujaribu kuweka anwani ya mthibitishaji kama anwani isiyoidhinishwa. + + ```sh copy + cast send $WORLD_ADDRESS 'app__setVerifier(address)' `cast address-zero` --private-key $UNAUTHORIZED_KEY + ``` + + Sio tu kwamba `cast` inaripoti kutofaulu, lakini unaweza kufungua **Zana za Maendeleo za MUD** kwenye mchezo kwenye kivinjari, bonyeza **Majedwali**, na uchague **app\_\_VerifierAddress**. Angalia kwamba anwani sio sifuri. + +3. Weka anwani ya mthibitishaji kama anwani ya seva. + + ```sh copy + cast send $WORLD_ADDRESS 'app__setVerifier(address)' `cast address-zero` --private-key $AUTHORIZED_KEY + ``` + + Anwani katika **app\_\_VerifiedAddress** sasa inapaswa kuwa sifuri. + +Kazi zote za MUD katika `Mfumo` huo huo hupitia udhibiti sawa wa ufikiaji, kwa hivyo nachukulia jaribio hili linatosha. Ikiwa hutafanya hivyo, unaweza kuangalia kazi zingine katika [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol). + +### Matumizi mabaya ya maarifa-sifuri {#zero-knowledge-abuses} + +Hisabati ya kuthibitisha Zokrates iko nje ya wigo wa mafunzo haya (na uwezo wangu). Hata hivyo, tunaweza kufanya ukaguzi mbalimbali kwenye msimbo wa maarifa-sifuri ili kuthibitisha kwamba ikiwa haijafanywa kwa usahihi inashindwa. Majaribio haya yote yatatuhitaji kubadilisha [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) na kuanzisha upya programu nzima. Haitoshi kuanzisha upya mchakato wa seva, kwa sababu inaweka programu katika hali isiyowezekana (mchezaji ana mchezo unaoendelea, lakini mchezo haupatikani tena kwa seva). + +#### Jibu lisilo sahihi {#wrong-answer} + +Uwezekano rahisi zaidi ni kutoa jibu lisilo sahihi katika uthibitisho wa maarifa-sifuri. Ili kufanya hivyo, tunaingia ndani ya `zkDig` na [kurekebisha mstari wa 91](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L91): + +```ts +proof.inputs[3] = "0x" + "1".padStart(64, "0") +``` + +Hii inamaanisha tutadai kila wakati kuna bomu moja, bila kujali jibu sahihi. Jaribu kucheza na toleo hili, na utaona kwenye kichupo cha **seva** cha skrini ya `pnpm dev` hitilafu hii: + +``` + cause: { + code: 3, + message: 'execution reverted: revert: Zero knowledge verification fail', + data: '0x08c379a0000000000000000000000000000000000000000000000000000000000000002000000000000000 +000000000000000000000000000000000000000000000000205a65726f206b6e6f776c6564676520766572696669636174696f6 +e206661696c' + }, +``` + +Kwa hivyo aina hii ya udanganyifu inashindwa. + +#### Uthibitisho usio sahihi {#wrong-proof} + +Nini kinatokea ikiwa tunatoa taarifa sahihi, lakini tuna data isiyo sahihi ya uthibitisho? Sasa, badilisha mstari wa 91 na: + +```ts +proof.proof = { + a: ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")], + b: [ + ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")], + ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")], + ], + c: ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")], +} +``` + +Bado inashindwa, lakini sasa inashindwa bila sababu kwa sababu inatokea wakati wa wito wa mthibitishaji. + +### Mtumiaji anawezaje kuthibitisha msimbo wa imani-sifuri? {#user-verify-zero-trust} + +Mikataba-erevu ni rahisi kiasi kuthibitisha. Kwa kawaida, msanidi programu anachapisha msimbo chanzo kwa kichunguzi cha bloku, na kichunguzi cha bloku kinathibitisha kwamba msimbo chanzo unakusanywa kwa msimbo katika [shughuli ya usambazaji wa mkataba](/developers/docs/smart-contracts/deploying/). Katika kesi ya MUD `Mfumo` huu ni [ngumu kidogo](https://mud.dev/cli/verify), lakini si kwa kiasi kikubwa. + +Hii ni ngumu zaidi na maarifa-sifuri. Mthibitishaji anajumuisha viwango vya kudumu na anafanya mahesabu juu yao. Hii haikuambii nini kinachothibitishwa. + +```solidity + function verifyingKey() pure internal returns (VerifyingKey memory vk) { + vk.alpha = Pairing.G1Point(uint256(0x0f43f4fe7b5c2326fed4ac6ed2f4003ab9ab4ea6f667c2bdd77afb068617ee16), uint256(0x25a77832283f9726935219b5f4678842cda465631e72dbb24708a97ba5d0ce6f)); + vk.beta = Pairing.G2Point([uint256(0x2cebd0fbd21aca01910581537b21ae4fed46bc0e524c055059aa164ba0a6b62b), uint256(0x18fd4a7bc386cf03a95af7163d5359165acc4e7961cb46519e6d9ee4a1e2b7e9)], [uint256(0x11449dee0199ef6d8eebfe43b548e875c69e7ce37705ee9a00c81fe52f11a009), uint256(0x066d0c83b32800d3f335bb9e8ed5e2924cf00e77e6ec28178592eac9898e1a00)]); +``` + +Suluhisho, angalau hadi wachunguzi wa bloku wataongeza uthibitishaji wa Zokrates kwenye violesura vyao vya watumiaji, ni kwa wasanidi programu kufanya programu za Zokrates zipatikane, na angalau baadhi ya watumiaji kuzikusanya wenyewe na ufunguo sahihi wa uthibitishaji. + +Kufanya hivyo: + +1. [Sakinisha Zokrates](https://zokrates.github.io/gettingstarted.html). + +2. Unda faili, `dig.zok`, na programu ya Zokrates. Msimbo hapa chini unadhania umehifadhi saizi ya ramani ya asili, 10x5. + + ```zokrates + import "utils/pack/bool/pack128.zok" as pack128; + import "hashes/poseidon/poseidon.zok" as poseidon; + + def hashMap(bool[12][7] map) -> field { + bool[512] mut map1d = [false; 512]; + u32 mut counter = 0; + + for u32 x in 0..12 { + for u32 y in 0..7 { + map1d[counter] = map[x][y]; + counter = counter+1; + } + } + + field[4] hashMe = [ + pack128(map1d[0..128]), + pack128(map1d[128..256]), + pack128(map1d[256..384]), + pack128(map1d[384..512]) + ]; + + return poseidon(hashMe); + } + + + // Idadi ya migodi katika eneo (x,y) + def map2mineCount(bool[12][7] map, u32 x, u32 y) -> u8 { + return if map[x+1][y+1] { 1 } else { 0 }; + } + + def main(private bool[12][7] map, u32 x, u32 y) -> (field, u8) { + return (hashMap(map) , + if map2mineCount(map, x, y) > 0 { 0xFF } else { + map2mineCount(map, x-1, y-1) + map2mineCount(map, x, y-1) + map2mineCount(map, x+1, y-1) + + map2mineCount(map, x-1, y) + map2mineCount(map, x+1, y) + + map2mineCount(map, x-1, y+1) + map2mineCount(map, x, y+1) + map2mineCount(map, x+1, y+1) + } + ); + } + ``` + +3. Kusanya msimbo wa Zokrates na uunde ufunguo wa uthibitishaji. Ufunguo wa uthibitishaji unapaswa kuundwa na entropy sawa iliyotumika katika seva ya awali, [katika kesi hii kamba tupu](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L67). + + ```sh copy + zokrates compile --input dig.zok + zokrates setup -e "" + ``` + +4. Unda mthibitishaji wa Solidity peke yako, na uthibitishe kuwa unafanya kazi sawa na ule ulioko kwenye mnyororo wa bloku (seva inaongeza maoni, lakini hiyo sio muhimu). + + ```sh copy + zokrates export-verifier + diff verifier.sol ~/20240901-secret-state/packages/contracts/src/verifier.sol + ``` + +## Maamuzi ya kubuni {#design} + +Katika programu yoyote ngumu vya kutosha kuna malengo ya kubuni yanayoshindana ambayo yanahitaji maelewano. Wacha tuangalie baadhi ya maelewano na kwa nini suluhisho la sasa ni bora kuliko chaguzi zingine. + +### Kwa nini maarifa-sifuri {#why-zero-knowledge} + +Kwa minesweeper hauitaji maarifa-sifuri kweli. Seva inaweza kushikilia ramani kila wakati, na kisha kufunua yote wakati mchezo umekwisha. Kisha, mwishoni mwa mchezo, mkataba-erevu unaweza kuhesabu hashi ya ramani, kuthibitisha inalingana, na ikiwa haifanyi hivyo adhibu seva au kupuuzia mchezo kabisa. + +Sikutumia suluhisho hili rahisi kwa sababu inafanya kazi tu kwa michezo mifupi yenye hali ya mwisho iliyoelezwa vizuri. Wakati mchezo unaweza kuwa hauna mwisho (kama ilivyo kwa [ulimwengu huru](https://0xparc.org/blog/autonomous-worlds)), unahitaji suluhisho linalothibitisha hali _bila_ kuifunua. + +Kama mafunzo, makala hii ilihitaji mchezo mfupi ambao ni rahisi kuelewa, lakini mbinu hii ni muhimu zaidi kwa michezo mirefu. + +### Kwa nini Zokrates? {#why-zokrates} + +[Zokrates](https://zokrates.github.io/) sio maktaba pekee ya maarifa-sifuri inayopatikana, lakini inafanana na lugha ya kawaida ya programu [inayoelekeza](https://en.wikipedia.org/wiki/Imperative_programming) na inasaidia vigezo vya boolean. + +Kwa programu yako, na mahitaji tofauti, unaweza kupendelea kutumia [Circum](https://docs.circom.io/getting-started/installation/) au [Cairo](https://www.cairo-lang.org/tutorials/getting-started-with-cairo/). + +### Wakati wa kukusanya Zokrates {#when-compile-zokrates} + +Katika programu hii tunakusanya programu za Zokrates [kila wakati seva inapoanza](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L60-L61). Hii ni wazi ni upotevu wa rasilimali, lakini hii ni mafunzo, yaliyoboreshwa kwa urahisi. + +Ikiwa ningekuwa ninaandika programu ya kiwango cha uzalishaji, ningeangalia kama nina faili na programu za Zokrates zilizokusanywa kwa saizi hii ya uwanja wa migodi, na ikiwa ndivyo nitumie hiyo. Vivyo hivyo kwa kusambaza mkataba wa mthibitishaji onchain. + +### Kuunda funguo za mthibitishaji na mthibitishaji {#key-creation} + +[Uundaji wa ufunguo](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L63-L69) ni hesabu nyingine safi ambayo haihitaji kufanywa zaidi ya mara moja kwa saizi fulani ya uwanja wa migodi. Tena, inafanywa mara moja tu kwa ajili ya urahisi. + +Kwa kuongeza, tunaweza kutumia [hafla ya kuanzisha](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony). Faida ya hafla ya kuanzisha ni kwamba unahitaji ama entropy au matokeo ya kati kutoka kwa kila mshiriki ili kudanganya kwenye uthibitisho wa maarifa-sifuri. Ikiwa angalau mshiriki mmoja wa hafla ni mkweli na anafuta habari hiyo, uthibitisho wa maarifa-sifuri uko salama kutokana na mashambulizi fulani. Hata hivyo, _hakuna utaratibu_ wa kuthibitisha kwamba habari imefutwa kutoka kila mahali. Ikiwa uthibitisho wa maarifa-sifuri ni muhimu sana, unataka kushiriki katika hafla ya kuanzisha. + +Hapa tunategemea [nguvu za milele za tau](https://github.com/privacy-scaling-explorations/perpetualpowersoftau), ambayo ilikuwa na washiriki wengi. Pengine ni salama vya kutosha, na rahisi zaidi. Pia hatuongezi entropy wakati wa uundaji wa ufunguo, ambayo inafanya iwe rahisi kwa watumiaji [kuthibitisha usanidi wa maarifa-sifuri](#user-verify-zero-trust). + +### Wapi pa kuthibitisha {#where-verification} + +Tunaweza kuthibitisha uthibitisho wa maarifa-sifuri ama onchain (ambayo inagharimu gesi) au katika mteja (kwa kutumia [`verify`](https://zokrates.github.io/toolbox/zokrates_js.html#verifyverificationkey-proof)). Nilichagua ya kwanza, kwa sababu hii inakuwezesha [kuthibitisha mthibitishaji](#user-verify-zero-trust) mara moja na kisha kuamini kwamba haibadiliki maadamu anwani ya mkataba wake inabaki sawa. Ikiwa uthibitishaji ungefanywa kwa mteja, ungehitaji kuthibitisha msimbo unaopokea kila unapopakua mteja. + +Pia, ingawa mchezo huu ni wa mchezaji mmoja, michezo mingi ya mnyororo wa bloku ni ya wachezaji wengi. uthibitishaji wa onchain unamaanisha unathibitisha tu uthibitisho wa maarifa-sifuri mara moja. Kuifanya katika mteja kungehitaji kila mteja kuthibitisha kivyake. + +### Kufanya ramani iwe bapa katika TypeScript au Zokrates? {#where-flatten} + +Kwa ujumla, wakati usindikaji unaweza kufanywa ama katika TypeScript au Zokrates, ni bora kuifanya katika TypeScript, ambayo ni haraka sana, na haihitaji uthibitisho wa maarifa-sifuri. Hii ndiyo sababu, kwa mfano, kwamba hatutoi Zokrates na hashi na kuifanya ithibitishe kuwa ni sahihi. Hashing inapaswa kufanywa ndani ya Zokrates, lakini mechi kati ya hashi iliyorudishwa na hashi onchain inaweza kutokea nje yake. + +Hata hivyo, bado [tunalainisha ramani katika Zokrates](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L15-L20), ambapo tungeweza kuifanya katika TypeScript. Sababu ni kwamba chaguzi zingine, kwa maoni yangu, ni mbaya zaidi. + +- Toa safu ya boolean ya mwelekeo mmoja kwa msimbo wa Zokrates, na utumie usemi kama `x*(height+2) + +y` kupata ramani ya mwelekeo miwili. [Msimbo](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L44-L47) ungekuwa mgumu kidogo, kwa hivyo niliamua kuwa faida ya utendaji haifai kwa mafunzo. + +- Tuma Zokrates safu ya mwelekeo mmoja na safu ya mwelekeo miwili. Hata hivyo, suluhisho hili halitupati faida yoyote. Msimbo wa Zokrates ungehitaji kuthibitisha kwamba safu ya mwelekeo mmoja inayoletwa ni kweli uwakilishi sahihi wa safu ya mwelekeo miwili. Kwa hivyo hakungekuwa na faida yoyote ya utendaji. + +- Laza safu ya mwelekeo miwili katika Zokrates. Hii ndiyo chaguo rahisi zaidi, kwa hivyo niliichagua. + +### Wapi pa kuhifadhi ramani {#where-store-maps} + +Katika programu hii [`gamesInProgress`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L20) ni kigezo tu kwenye kumbukumbu. Hii inamaanisha kwamba ikiwa seva yako itakufa na kuhitaji kuanzishwa upya, habari zote ilizohifadhi zinapotea. Sio tu kwamba wachezaji hawawezi kuendelea na mchezo wao, hawawezi hata kuanza mchezo mpya kwa sababu sehemu ya onchain inafikiri bado wana mchezo unaoendelea. + +Huu ni muundo mbaya kwa mfumo wa uzalishaji, ambapo utahifadhi habari hii kwenye hifadhidata. Sababu pekee niliyotumia kigezo hapa ni kwa sababu hii ni mafunzo na urahisi ndio jambo kuu. + +## Hitimisho: Chini ya hali gani hii ni mbinu inayofaa? {#conclusion} + +Kwa hivyo, sasa unajua jinsi ya kuandika mchezo na seva inayohifadhi hali ya siri ambayo sio ya onchain. Lakini katika kesi gani unapaswa kuifanya? Kuna mambo makuu mawili ya kuzingatia. + +- _Mchezo unaoendelea kwa muda mrefu_: [Kama ilivyoelezwa hapo juu](#why-zero-knowledge), katika mchezo mfupi unaweza tu kuchapisha hali mara mchezo unapokwisha na kila kitu kuthibitishwa basi. Lakini hiyo sio chaguo wakati mchezo unachukua muda mrefu au usiojulikana, na hali inahitaji kubaki siri. + +- _Ugawanyaji fulani wa kati unakubalika_: Uthibitisho wa maarifa-sifuri unaweza kuthibitisha uadilifu, kwamba chombo hakighushi matokeo. Wanachoweza kufanya ni kuhakikisha kuwa chombo bado kitapatikana na kujibu ujumbe. Katika hali ambapo upatikanaji pia unahitaji kugawanywa, uthibitisho wa maarifa-sifuri sio suluhisho la kutosha, na unahitaji [hesabu za vyama vingi](https://en.wikipedia.org/wiki/Secure_multi-party_computation). + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). + +### Shukrani {#acknowledgements} + +- Alvaro Alonso alisoma rasimu ya makala hii na akanifafanulia baadhi ya kutoelewa kwangu kuhusu Zokrates. + +Makosa yoyote yaliyobaki ni jukumu langu. diff --git a/public/content/translations/sw/developers/tutorials/secure-development-workflow/index.md b/public/content/translations/sw/developers/tutorials/secure-development-workflow/index.md new file mode 100644 index 00000000000..9c5b47b178f --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/secure-development-workflow/index.md @@ -0,0 +1,52 @@ +--- +title: Orodha hakiki ya usalama wa mkataba-erevu +description: Mtiririko wa kazi unaopendekezwa wa kuandika mikataba-erevu salama +author: "Trailofbits" +tags: [ "mikataba erevu", "usalama", "uimara" ] +skill: intermediate +lang: sw +published: 2020-09-07 +source: Kujenga mikataba salama +sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/workflow.md +--- + +## Orodha hakiki ya uendelezaji wa mkataba-erevu {#smart-contract-development-checklist} + +Huu hapa ni mchakato wa kiwango cha juu tunaopendekeza ufuate unapoandika mikataba yako-erevu. + +Angalia masuala ya usalama yanayojulikana: + +- Pitia mikataba yako na [Slither](https://github.com/crytic/slither). Ina vigunduzi zaidi ya 40 vilivyojengewa ndani kwa ajili ya udhaifu wa kawaida. Iendeshe kwa kila uwasilishaji wa msimbo mpya na hakikisha inapata ripoti safi (au tumia hali ya kutatua kunyamazisha masuala fulani). +- Pitia mikataba yako na [Crytic](https://crytic.io/). Hukagua masuala 50 ambayo Slither haikagui. Crytic inaweza kusaidia timu yako kuendelea kufuatiliana pia, kwa kuibua kwa urahisi masuala ya usalama katika Maombi ya Kuunganisha (Pull Requests) kwenye GitHub. + +Fikiria vipengele maalum vya mkataba wako: + +- Je, mikataba yako inaweza kusasishwa? Pitia msimbo wako wa uwezo wa kusasishwa kwa ajili ya dosari ukitumia [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) au [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/). Tumeandika njia 17 ambazo masasisho yanaweza kwenda mrama. +- Je, mikataba yako inadai kukidhi ERC? Zikague na [`slither-check-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance). Zana hii hutambua papo hapo mikengeuko kutoka kwa sifa sita za kawaida. +- Je, unaunganisha na tokeni za wahusika wengine? Pitia [orodha hakiki yetu ya uunganishaji wa tokeni](/developers/tutorials/token-integration-checklist/) kabla ya kutegemea mikataba ya nje. + +Kagua kwa macho vipengele muhimu vya usalama vya msimbo wako: + +- Pitia printa ya [inheritance-graph](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph) ya Slither. Epuka kuficha kusiko kwa kukusudia na masuala ya urasmiishaji wa C3. +- Pitia printa ya [function-summary](https://github.com/trailofbits/slither/wiki/Printer-documentation#function-summary) ya Slither. Huripoti mwonekano wa kazi na vidhibiti vya ufikiaji. +- Pitia printa ya [vars-and-auth](https://github.com/trailofbits/slither/wiki/Printer-documentation#variables-written-and-authorization) ya Slither. Huripoti vidhibiti vya ufikiaji kwenye vigezo vya hali. + +Andika sifa muhimu za usalama na utumie jenereta za majaribio za kiotomatiki kuzitathmini: + +- Jifunze [kuandika sifa za usalama kwa msimbo wako](/developers/tutorials/guide-to-smart-contract-security-tools/). Ni ngumu mwanzoni, lakini ndiyo shughuli muhimu zaidi ili kufikia matokeo mazuri. Pia ni sharti la kutumia mbinu zozote za hali ya juu katika mafunzo haya. +- Fafanua sifa za usalama katika Solidity, kwa matumizi na [Echidna](https://github.com/crytic/echidna) na [Manticore](https://manticore.readthedocs.io/en/latest/verifier.html). Zingatia mashine yako ya hali, vidhibiti vya ufikiaji, operesheni za hesabu, maingiliano ya nje, na ukubalifu wa viwango. +- Fafanua sifa za usalama kwa [API ya Python ya Slither](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/). Zingatia urithi, utegemezi wa vigezo, vidhibiti vya ufikiaji, na masuala mengine ya kimuundo. +- Endesha majaribio yako ya sifa kwa kila commit na [Crytic](https://crytic.io). Crytic inaweza kutumia na kutathmini majaribio ya sifa za usalama ili kila mtu kwenye timu yako aweze kuona kwa urahisi kwamba yamefaulu kwenye GitHub. Majaribio yanayofeli yanaweza kuzuia commit. + +Mwisho, kuwa mwangalifu na masuala ambayo zana za kiotomatiki haziwezi kupata kwa urahisi: + +- Ukosefu wa faragha: kila mtu mwingine anaweza kuona miamala yako wakati imepangwa kwenye foleni katika pool +- Miamala ya front-running +- Operesheni za kroptografia +- Maingiliano hatarishi na vijenzi vya nje vya DeFi + +## Omba msaada {#ask-for-help} + +[Saa za ofisi za Ethereum](https://calendly.com/dan-trailofbits/office-hours) hufanyika kila Jumanne alasiri. Vipindi hivi vya saa 1, vya ana kwa ana ni fursa ya kutuuliza maswali yoyote uliyo nayo kuhusu usalama, kutatua matatizo kwa kutumia zana zetu, na kupata maoni kutoka kwa wataalamu kuhusu mbinu yako ya sasa. Tutakusaidia kupitia mwongozo huu. + +Jiunge na Slack yetu: [Empire Hacking](https://join.slack.com/t/empirehacking/shared_invite/zt-h97bbrj8-1jwuiU33nnzg67JcvIciUw). Tunapatikana kila wakati katika chaneli za #crytic na #ethereum ikiwa una maswali yoyote. diff --git a/public/content/translations/sw/developers/tutorials/send-token-ethersjs/index.md b/public/content/translations/sw/developers/tutorials/send-token-ethersjs/index.md new file mode 100644 index 00000000000..823de6ce5c5 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/send-token-ethersjs/index.md @@ -0,0 +1,210 @@ +--- +title: Kutuma Tokeni Kwa Kutumia ethers.js +description: Mwongozo rahisi kwa wanaoanza wa kutuma tokeni kwa kutumia ethers.js. +author: Kim YongJun +tags: [ "ETHERS.JS", "ERC-20", "TOKENI" ] +skill: beginner +lang: sw +published: 2021-04-06 +--- + +## Tuma Tokeni Kwa Kutumia ethers.js(5.0) {#send-token} + +### Katika Somo Hili Utajifunza Jinsi ya {#you-learn-about} + +- Ingiza ethers.js +- Hamisha tokeni +- Weka bei ya gesi kulingana na hali ya msongamano wa mtandao + +### Ili Kuanza {#to-get-started} + +Ili kuanza, ni lazima kwanza tuingize maktaba ya ethers.js kwenye javascript yetu +Jumuisha ethers.js(5.0) + +### Kusakinisha {#install-ethersjs} + +```shell +/home/ricmoo> npm install --save ethers +``` + +ES6 katika Kivinjari + +```html + +``` + +ES3(UMD) katika Kivinjari + +```html + +``` + +### Vigezo {#param} + +1. **`contract_address`**: Anwani ya mkataba wa Tokeni (anwani ya mkataba inahitajika wakati tokeni unayotaka kuhamisha si ether) +2. **`send_token_amount`**: Kiasi unachotaka kutuma kwa mpokeaji +3. **`to_address`**: Anwani ya mpokeaji +4. **`send_account`**: Anwani ya mtumaji +5. **`private_key`**: Ufunguo binafsi wa mtumaji ili kusaini muamala na kuhamisha tokeni + +## Tangazo {#notice} + +`signTransaction(tx)` imeondolewa kwa sababu `sendTransaction()` inaifanya ndani kwa ndani. + +## Taratibu za Kutuma {#procedure} + +### 1. Unganisha na mtandao (testnet) {#connect-to-network} + +#### Weka Mtoa Huduma (Infura) {#set-provider} + +Unganisha na Ropsten testnet + +```javascript +window.ethersProvider = new ethers.providers.InfuraProvider("ropsten") +``` + +### 2. Tengeneza mkoba {#create-wallet} + +```javascript +let wallet = new ethers.Wallet(private_key) +``` + +### 3. Unganisha Mkoba na mtandao {#connect-wallet-to-net} + +```javascript +let walletSigner = wallet.connect(window.ethersProvider) +``` + +### 4. Pata bei ya sasa ya gesi {#get-gas} + +```javascript +window.ethersProvider.getGasPrice() // bei ya gesi +``` + +### 5. Bainisha Muamala {#define-transaction} + +Vigezo hivi vilivyobainishwa hapa chini vinategemea `send_token()` + +### Vigezo vya muamala {#transaction-params} + +1. **`send_account`**: anwani ya mtumaji wa tokeni +2. **`to_address`**: anwani ya mpokeaji wa tokeni +3. **`send_token_amount`**: kiasi cha tokeni za kutuma +4. **`gas_limit`**: kikomo cha gesi +5. **`gas_price`**: bei ya gesi + +[Tazama hapa chini jinsi ya kutumia](#how-to-use) + +```javascript +const tx = { + from: send_account, + to: to_address, + value: ethers.utils.parseEther(send_token_amount), + nonce: window.ethersProvider.getTransactionCount(send_account, "latest"), + gasLimit: ethers.utils.hexlify(gas_limit), // 100000 + gasPrice: gas_price, +} +``` + +### 6. Hamisha {#transfer} + +```javascript +walletSigner.sendTransaction(tx).then((transaction) => { + console.dir(transaction) + alert("Kutuma kumekamilika!") +}) +``` + +## Jinsi ya kuitumia {#how-to-use} + +```javascript +let private_key = + "41559d28e936dc92104ff30691519693fc753ffbee6251a611b9aa1878f12a4d" +let send_token_amount = "1" +let to_address = "0x4c10D2734Fb76D3236E522509181CC3Ba8DE0e80" +let send_address = "0xda27a282B5B6c5229699891CfA6b900A716539E6" +let gas_limit = "0x100000" +let wallet = new ethers.Wallet(private_key) +let walletSigner = wallet.connect(window.ethersProvider) +let contract_address = "" +window.ethersProvider = new ethers.providers.InfuraProvider("ropsten") + +send_token( + contract_address, + send_token_amount, + to_address, + send_address, + private_key +) +``` + +### Imefanikiwa! {#success} + +![picha ya muamala uliofanywa kwa mafanikio](./successful-transaction.png) + +## send_token() {#send-token-method} + +```javascript +function send_token( + contract_address, + send_token_amount, + to_address, + send_account, + private_key +) { + let wallet = new ethers.Wallet(private_key) + let walletSigner = wallet.connect(window.ethersProvider) + + window.ethersProvider.getGasPrice().then((currentGasPrice) => { + let gas_price = ethers.utils.hexlify(parseInt(currentGasPrice)) + console.log(`gas_price: ${gas_price}`) + + if (contract_address) { + // utumaji wa tokeni wa jumla + let contract = new ethers.Contract( + contract_address, + send_abi, + walletSigner + ) + + // Tokeni ngapi? + let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18) + console.log(`numberOfTokens: ${numberOfTokens}`) + + // Tuma tokeni + contract.transfer(to_address, numberOfTokens).then((transferResult) => { + console.dir(transferResult) + alert("tokeni imetumwa") + }) + } // utumaji wa ether + else { + const tx = { + from: send_account, + to: to_address, + value: ethers.utils.parseEther(send_token_amount), + nonce: window.ethersProvider.getTransactionCount( + send_account, + "latest" + ), + gasLimit: ethers.utils.hexlify(gas_limit), // 100000 + gasPrice: gas_price, + } + console.dir(tx) + try { + walletSigner.sendTransaction(tx).then((transaction) => { + console.dir(transaction) + alert("Kutuma kumekamilika!") + }) + } catch (error) { + alert("imeshindwa kutuma!!") + } + } + }) +} +``` diff --git a/public/content/translations/sw/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md b/public/content/translations/sw/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md new file mode 100644 index 00000000000..1657cc0c9b9 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md @@ -0,0 +1,208 @@ +--- +title: Kutuma Miamala Kwa Kutumia Web3 +description: "Huu ni mwongozo rahisi kwa wanaoanza wa kutuma miamala ya Ethereum kwa kutumia Web3. Kuna hatua tatu kuu ili kutuma muamala kwa mnyororo wa bloku wa Ethereum: tengeneza, saini, na tangaza. Tutapitia zote tatu." +author: "Elan Halpern" +tags: [ "miamala", "web3.js", "alchemy" ] +skill: beginner +lang: sw +published: 2020-11-04 +source: Nyaraka za Alchemy +sourceUrl: https://www.alchemy.com/docs/how-to-send-transactions-on-ethereum +--- + +Huu ni mwongozo rahisi kwa wanaoanza wa kutuma miamala ya Ethereum kwa kutumia Web3. Kuna hatua tatu kuu ili kutuma muamala kwa mnyororo wa bloku wa Ethereum: tengeneza, saini, na tangaza. Tutapitia zote tatu, tunatumai tutajibu maswali yoyote ambayo unaweza kuwa nayo! Katika somo hili, tutatumia [Alchemy](https://www.alchemy.com/) kutuma miamala yetu kwa mnyororo wa Ethereum. Unaweza [kufungua akaunti ya Alchemy bila malipo hapa](https://auth.alchemyapi.io/signup). + +**KUMBUKA:** Mwongozo huu ni wa kusaini miamala yako kwenye _backend_ ya programu yako. Ikiwa unataka kuunganisha kusaini miamala yako kwenye frontend, angalia kuunganisha [Web3 na mtoa huduma wa kivinjari](https://docs.alchemy.com/reference/api-overview#with-a-browser-provider). + +## Mambo ya Msingi {#the-basics} + +Kama wasanidi programu wengi wa mnyororo wa bloku wanapoanza, huenda umefanya utafiti fulani kuhusu jinsi ya kutuma muamala (kitu ambacho kinapaswa kuwa rahisi sana) na ukakutana na miongozo mingi, kila mmoja ukisema mambo tofauti na kukuacha ukiwa umezidiwa na kuchanganyikiwa. Ikiwa uko katika hali hiyo, usijali; sote tulikuwa hapo wakati fulani! Kwa hivyo, kabla hatujaanza, hebu tuweke mambo machache sawa: + +### 1. Alchemy haihifadhi funguo zako za binafsi {#alchemy-does-not-store-your-private-keys} + +- Hii inamaanisha kuwa Alchemy haiwezi kusaini na kutuma miamala kwa niaba yako. Sababu ya hii ni kwa madhumuni ya usalama. Alchemy haitakuuliza kamwe kushiriki ufunguo wako binafsi, na hupaswi kamwe kushiriki ufunguo wako binafsi na nodi iliyohifadhiwa (au mtu yeyote kwa jambo hilo). +- Unaweza kusoma kutoka kwenye mnyororo wa bloku kwa kutumia API ya msingi ya Alchemy, lakini ili kuandika humo utahitaji kutumia kitu kingine kusaini miamala yako kabla ya kuituma kupitia Alchemy (hii ni sawa kwa huduma nyingine yoyote ya [nodi](/developers/docs/nodes-and-clients/nodes-as-a-service/)). + +### 2. “Signer” ni nini? {#what-is-a-signer} + +- Signers watasaini miamala kwa ajili yako kwa kutumia ufunguo wako binafsi. Katika somo hili tutakuwa tukitumia [Alchemy web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3) kusaini muamala wetu, lakini unaweza pia kutumia maktaba nyingine yoyote ya web3. +- Kwenye frontend, mfano mzuri wa signer itakuwa [MetaMask](https://metamask.io/), ambayo itasaini na kutuma miamala kwa niaba yako. + +### 3. Kwa nini ninahitaji kusaini miamala yangu? {#why-do-i-need-to-sign-my-transactions} + +- Kila mtumiaji anayetaka kutuma muamala kwenye mtandao wa Ethereum lazima asaini muamala (kwa kutumia ufunguo wake binafsi), ili kuthibitisha kuwa chimbuko la muamala huo ndilo linavyodaiwa kuwa. +- Ni muhimu sana kulinda ufunguo huu binafsi, kwani kuwa na ufikiaji kwayo kunatoa udhibiti kamili juu ya akaunti yako ya Ethereum, kukuruhusu wewe (au mtu yeyote mwenye ufikiaji) kufanya miamala kwa niaba yako. + +### 4. Ninalindaje ufunguo wangu binafsi? {#how-do-i-protect-my-private-key} + +- Kuna njia nyingi za kulinda ufunguo wako binafsi na kuutumia kutuma miamala. Katika somo hili tutakuwa tukitumia faili ya `.env`. Hata hivyo, unaweza pia kutumia mtoa huduma tofauti anayehifadhi funguo za binafsi, kutumia faili ya keystore, au chaguo zingine. + +### 5. Kuna tofauti gani kati ya `eth_sendTransaction` na `eth_sendRawTransaction`? {#difference-between-send-and-send-raw} + +`eth_sendTransaction` na `eth_sendRawTransaction` zote ni kazi za API za Ethereum zinazotangaza muamala kwa mtandao wa Ethereum ili uongezwe kwenye bloku ya baadaye. Zinatofautiana katika jinsi zinavyoshughulikia usainishaji wa miamala. + +- [`eth_sendTransaction`](https://docs.web3js.org/api/web3-eth/function/sendTransaction) hutumika kwa kutuma miamala _isiyosainiwa_, ambayo inamaanisha nodi unayoituma lazima idhibiti ufunguo wako binafsi ili iweze kusaini muamala kabla ya kuutangaza kwenye mnyororo. Kwa kuwa Alchemy haishikilii funguo za binafsi za mtumiaji, hawasaidii njia hii. +- [`eth_sendRawTransaction`](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction) hutumika kutangaza miamala ambayo tayari imesainiwa. Hii inamaanisha kwanza lazima utumie [`signTransaction(tx, private_key)`](https://docs.web3js.org/api/web3-eth-accounts/function/signTransaction), kisha upitishe matokeo katika `eth_sendRawTransaction`. + +Unapotumia web3, `eth_sendRawTransaction` hupatikana kwa kuita kazi [web3.eth.sendSignedTransaction](https://docs.web3js.org/api/web3-eth/function/sendSignedTransaction). + +Hiki ndicho tutakachokuwa tukitumia katika somo hili. + +### 6. Maktaba ya web3 ni nini? {#what-is-the-web3-library} + +- Web3.js ni maktaba inayofunika miito ya kawaida ya JSON-RPC ambayo ni ya kawaida sana kutumika katika usanidi programu wa Ethereum. +- Kuna maktaba nyingi za web3 za lugha tofauti. Katika somo hili tutakuwa tukitumia [Alchemy Web3](https://docs.alchemy.com/reference/api-overview) ambayo imeandikwa kwa JavaScript. Unaweza kuangalia chaguo zingine [hapa](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries) kama [ethers.js](https://docs.ethers.org/v5/). + +Sawa, sasa kwa kuwa tumeshughulikia baadhi ya maswali haya, hebu tuendelee na somo. Jisikie huru kuuliza maswali wakati wowote katika [discord](https://discord.gg/gWuC7zB) ya Alchemy! + +### 7. Jinsi ya kutuma miamala salama, iliyoboreshwa kwa gesi, na ya faragha? {#how-to-send-secure-gas-optimized-and-private-transactions} + +- [Alchemy ina seti ya APIs za Transact](https://docs.alchemy.com/reference/transact-api-quickstart). Unaweza kutumia hizi kutuma miamala iliyoimarishwa, kuiga miamala kabla haijatokea, kutuma miamala ya faragha, na kutuma miamala iliyoboreshwa kwa gesi +- Unaweza pia kutumia [API ya Notify](https://docs.alchemy.com/docs/alchemy-notify) kuarifiwa muamala wako unapotolewa kwenye mempool na kuongezwa kwenye mnyororo + +**KUMBUKA:** Mwongozo huu unahitaji akaunti ya Alchemy, anwani ya Ethereum au mkoba wa MetaMask, NodeJs, na npm zilizosakinishwa. Ikiwa sivyo, fuata hatua hizi: + +1. [Fungua akaunti ya Alchemy bila malipo](https://auth.alchemyapi.io/signup) +2. [Fungua akaunti ya MetaMask](https://metamask.io/) (au pata anwani ya Ethereum) +3. [Fuata hatua hizi ili kusakinisha NodeJs na NPM](https://docs.alchemy.com/alchemy/guides/alchemy-for-macs) + +## Hatua za Kutuma Muamala wako {#steps-to-sending-your-transaction} + +### 1. Fungua programu ya Alchemy kwenye testnet ya Sepolia {#create-an-alchemy-app-on-the-sepolia-testnet} + +Nenda kwenye [Dashibodi yako ya Alchemy](https://dashboard.alchemyapi.io/) na uunde programu mpya, ukichagua Sepolia (au testnet nyingine yoyote) kwa mtandao wako. + +### 2. Omba ETH kutoka kwa bomba la Sepolia {#request-eth-from-sepolia-faucet} + +Fuata maagizo kwenye [bomba la Sepolia la Alchemy](https://www.sepoliafaucet.com/) ili kupokea ETH. Hakikisha unajumuisha anwani yako ya Ethereum ya **Sepolia** (kutoka MetaMask) na si mtandao mwingine. Baada ya kufuata maagizo, hakikisha tena kuwa umepokea ETH kwenye mkoba wako. + +### 3. Unda saraka mpya ya mradi na `cd` ndani yake {#create-a-new-project-direction} + +Unda saraka mpya ya mradi kutoka kwa mstari wa amri (terminal kwa macs) na uingie ndani yake: + +``` +mkdir sendtx-example +cd sendtx-example +``` + +### 4. Sakinisha Alchemy Web3 (au maktaba yoyote ya web3) {#install-alchemy-web3} + +Endesha amri ifuatayo katika saraka yako ya mradi ili kusakinisha [Alchemy Web3](https://docs.alchemy.com/reference/api-overview): + +Kumbuka, ikiwa ungependa kutumia maktaba ya ethers.js, [fuata maagizo hapa](https://docs.alchemy.com/docs/how-to-send-transactions-on-ethereum). + +``` +npm install @alch/alchemy-web3 +``` + +### 5. Sakinisha dotenv {#install-dotenv} + +Tutatumia faili ya `.env` kuhifadhi kwa usalama ufunguo wetu wa API na ufunguo binafsi. + +``` +npm install dotenv --save +``` + +### 6. Tengeneza faili ya `.env` {#create-the-dotenv-file} + +Tengeneza faili ya `.env` katika saraka yako ya mradi na uongeze yafuatayo (ukibadilisha "`your-api-url`" na "`your-private-key`") + +- Ili kupata URL yako ya API ya Alchemy, nenda kwenye ukurasa wa maelezo ya programu uliyotengeneza kwenye dashibodi yako, bofya "View Key" kwenye kona ya juu kulia, na uchukue URL ya HTTP. +- Ili kupata ufunguo wako binafsi kwa kutumia MetaMask, angalia [mwongozo huu](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key). + +``` +API_URL = "your-api-url" +PRIVATE_KEY = "your-private-key" +``` + + + + +Usitume .env! Tafadhali hakikisha kamwe hushiriki au kufichua faili yako ya .env na mtu yeyote, kwani unahatarisha siri zako kwa kufanya hivyo. Ikiwa unatumia udhibiti wa toleo, ongeza .env yako kwenye faili ya gitignore. + + + + +### 7. Tengeneza faili ya `sendTx.js` {#create-sendtx-js} + +Safi, sasa kwa kuwa data yetu nyeti imelindwa katika faili ya `.env`, hebu tuanze kuandika msimbo. Kwa mfano wetu wa kutuma muamala, tutakuwa tukituma ETH kurudi kwenye bomba la Sepolia. + +Tengeneza faili ya `sendTx.js`, ambapo tutasanidi na kutuma muamala wetu wa mfano, na kuongeza mistari ifuatayo ya msimbo ndani yake: + +``` +async function main() { + require('dotenv').config(); + const { API_URL, PRIVATE_KEY } = process.env; + const { createAlchemyWeb3 } = require("@alch/alchemy-web3"); + const web3 = createAlchemyWeb3(API_URL); + const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: badilisha anwani hii na anwani yako ya umma + + const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce huanza kuhesabu kutoka 0 + + const transaction = { + 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // anwani ya bomba la kurudisha eth + 'value': 1000000000000000000, // ETH 1 + 'gas': 30000, + 'nonce': nonce, + // sehemu ya data ya hiari kutuma ujumbe au kutekeleza mkataba-erevu + }; + + const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY); + + web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) { + if (!error) { + console.log("🎉 Hashi ya muamala wako ni: ", hash, "\n Angalia Mempool ya Alchemy ili kuona hali ya muamala wako!"); + } else { + console.log("❗Kitu kilienda mrama wakati wa kuwasilisha muamala wako:", error) + } + }); +} + +main(); +``` + +Hakikisha unabadilisha anwani kwenye **mstari wa 6** na anwani yako mwenyewe ya umma. + +Sasa, kabla ya kuanza kuendesha msimbo huu, hebu tuzungumzie baadhi ya vipengele hapa. + +- `nonce` : Ufafanuzi wa nonce hutumika kufuatilia idadi ya miamala iliyotumwa kutoka kwa anwani yako. Tunahitaji hii kwa madhumuni ya usalama na kuzuia [mashambulizi ya kurudia](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce). Ili kupata idadi ya miamala iliyotumwa kutoka kwa anwani yako tunatumia [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount). +- `transaction`: Kitu cha muamala kina vipengele vichache tunavyohitaji kubainisha + - `to`: Hii ni anwani tunayotaka kutuma ETH. Katika kesi hii, tunatuma ETH kurudi kwenye [bomba la Sepolia](https://sepoliafaucet.com/) ambalo tuliomba awali. + - `value`: Hii ni kiasi tunachotaka kutuma, kilichoainishwa katika Wei ambapo Wei 10^18 = ETH 1 + - `gas`: Kuna njia nyingi za kuamua kiasi sahihi cha gesi cha kujumuisha na muamala wako. Alchemy hata ina [webhook ya bei ya gesi](https://docs.alchemyapi.io/guides/alchemy-notify#address-activity-1) kukuarifu bei ya gesi inaposhuka ndani ya kizingiti fulani. Kwa miamala ya Mtandao Mkuu, ni mazoea mazuri kuangalia kikadiriaji cha gesi kama [ETH Gas Station](https://ethgasstation.info/) ili kuamua kiasi sahihi cha gesi cha kujumuisha. 21000 ni kiasi cha chini cha gesi ambacho operesheni kwenye Ethereum itatumia, kwa hivyo ili kuhakikisha muamala wetu utatekelezwa tunaweka 30000 hapa. + - `nonce`: tazama ufafanuzi wa nonce hapo juu. Nonce huanza kuhesabu kutoka sifuri. + - [SI LAZIMA] data: Hutumika kutuma taarifa za ziada na uhamisho wako, au kuita mkataba-erevu, hauhitajiki kwa uhamisho wa salio, angalia dokezo hapa chini. +- `signedTx`: Ili kusaini kitu chetu cha muamala tutatumia mbinu ya `signTransaction` na `PRIVATE_KEY` yetu +- `sendSignedTransaction`: Mara tu tunapokuwa na muamala uliosainiwa, tunaweza kuutuma ili ujumuishwe katika bloku inayofuata kwa kutumia `sendSignedTransaction` + +**Dokezo kuhusu data** +Kuna aina mbili kuu za miamala zinazoweza kutumwa katika Ethereum. + +- Uhamisho wa salio: Tuma ETH kutoka anwani moja kwenda nyingine. Hakuna sehemu ya data inayohitajika, hata hivyo, ikiwa ungependa kutuma taarifa za ziada pamoja na muamala wako, unaweza kujumuisha taarifa hiyo katika umbizo la HEX katika sehemu hii. + - Kwa mfano, tuseme tulitaka kuandika hashi ya hati ya IPFS kwenye mnyororo wa Ethereum ili kuipa muhuri wa muda usioweza kubadilika. Sehemu yetu ya data inapaswa kuonekana kama data: `web3.utils.toHex('hashi ya IPFS')`. Na sasa mtu yeyote anaweza kuuliza mnyororo na kuona ni lini hati hiyo iliongezwa. +- Muamala wa mkataba-erevu: Tekeleza msimbo fulani wa mkataba-erevu kwenye mnyororo. Katika kesi hii, sehemu ya data inapaswa kuwa na kazi mahiri unayotaka kutekeleza, pamoja na vigezo vyovyote. + - Kwa mfano wa vitendo, angalia Hatua ya 8 katika [Somo hili la Hello World](https://docs.alchemyapi.io/alchemy/tutorials/hello-world-smart-contract#step-8-create-the-transaction). + +### 8. Endesha msimbo kwa kutumia `node sendTx.js` {#run-the-code-using-node-sendtx-js} + +Rudi kwenye terminal yako au mstari wa amri na uendeshe: + +``` +node sendTx.js +``` + +### 9. Angalia muamala wako katika Mempool {#see-your-transaction-in-the-mempool} + +Fungua [ukurasa wa Mempool](https://dashboard.alchemyapi.io/mempool) kwenye dashibodi yako ya Alchemy na uchuje kwa programu uliyounda ili kupata muamala wako. Hapa ndipo tunaweza kutazama mpito wa muamala wetu kutoka hali ya kusubiri hadi hali ya kuchimbwa (ikiwa imefanikiwa) au hali ya kuachwa ikiwa haikufanikiwa. Hakikisha unaiweka kwenye "All" ili uweze kunasa miamala ya "mined", "pending", na "dropped". Unaweza pia kutafuta muamala wako kwa kutafuta miamala iliyotumwa kwa anwani `0x31b98d14007bdee637298086988a0bbd31184523` . + +Ili kuona maelezo ya muamala wako mara tu umeupata, chagua hashi ya tx, ambayo inapaswa kukupeleka kwenye mwonekano unaofanana na huu: + +![Picha ya skrini ya mfuatiliaji wa Mempool](./mempool.png) + +Kutoka hapo unaweza kuona muamala wako kwenye Etherscan kwa kubofya ikoni iliyozungushiwa duara nyekundu! + +**Yippieeee!** Umetuma muamala wako wa kwanza wa Ethereum kwa kutumia Alchemy 🎉\*\* + +_Kwa maoni na mapendekezo kuhusu mwongozo huu, tafadhali mtumie Elan ujumbe kwenye [Discord](https://discord.gg/A39JVCM) ya Alchemy!_ + +_Ilichapishwa awali katika [https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy](https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy)_ diff --git a/public/content/translations/sw/developers/tutorials/server-components/index.md b/public/content/translations/sw/developers/tutorials/server-components/index.md new file mode 100644 index 00000000000..96ba344989d --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/server-components/index.md @@ -0,0 +1,295 @@ +--- +title: "Vipengele vya seva na mawakala kwa ajili ya programu za web3" +description: Baada ya kusoma mafunzo haya, utaweza kuandika seva za TypeScript zinazosikiliza matukio kwenye mnyororo wa bloku na kujibu ipasavyo kwa miamala yao wenyewe. Hii itakuwezesha kuandika programu za kati (kwa sababu seva ni mahali pa kushindwa), lakini inaweza kuingiliana na mashirika ya web3. Mbinu hizi hizi zinaweza pia kutumika kuandika wakala anayeshughulikia matukio ya onchain bila kuhusisha binadamu. + +author: Ori Pomerantz +lang: sw +tags: [ "wakala", "seva", "offchain" ] +skill: beginner +published: 2024-07-15 +--- + +## Utangulizi {#introduction} + +Katika hali nyingi, programu isiyo ya kati hutumia seva kusambaza programu, lakini mwingiliano wote halisi hutokea kati ya mteja (kawaida, kivinjari cha wavuti) na mnyororo wa bloku. + +![Mwingiliano wa kawaida kati ya seva ya wavuti, mteja, na mnyororo wa bloku](./fig-1.svg) + +Hata hivyo, kuna baadhi ya matukio ambapo programu ingenufaika kutokana na kuwa na kipengele cha seva kinachofanya kazi kivyake. Seva kama hiyo itaweza kujibu matukio, na maombi yanayotoka kwenye vyanzo vingine, kama vile API, kwa kutoa miamala. + +![Mwingiliano na nyongeza ya seva](./fig-2.svg) + +Kuna kazi kadhaa zinazowezekana ambazo seva kama hiyo inaweza kutimiza. + +- Mmiliki wa hali ya siri. Katika michezo ya kubahatisha mara nyingi ni muhimu kutokuwa na taarifa zote ambazo mchezo unajua zinazopatikana kwa wachezaji. Hata hivyo, _hakuna siri kwenye mnyororo wa bloku_, taarifa yoyote iliyo kwenye mnyororo wa bloku ni rahisi kwa yeyote kuigundua. Kwa hiyo, kama sehemu ya hali ya mchezo inapaswa kuwekwa siri, ni lazima ihifadhiwe mahali pengine (na ikiwezekana athari za hali hiyo zithibitishwe kwa kutumia [uthibitisho wa zero-knowledge](/zero-knowledge-proofs)). + +- Oracle ya kati. Ikiwa hisa ni za chini vya kutosha, seva ya nje inayosoma baadhi ya taarifa mtandaoni na kisha kuichapisha kwenye chaini inaweza kuwa nzuri ya kutosha kutumia kama [oracle](/developers/docs/oracles/). + +- Wakala. Hakuna kinachotokea kwenye mnyororo wa bloku bila muamala wa kuiwasha. Seva inaweza kutenda kwa niaba ya mtumiaji kutekeleza vitendo kama vile [arbitrage](/developers/docs/mev/#mev-examples-dex-arbitrage) wakati fursa inapojitokeza. + +## Programu ya mfano {#sample-program} + +Unaweza kuona seva ya mfano [kwenye github](https://github.com/qbzzt/20240715-server-component). Seva hii inasikiliza matukio yanayotoka kwenye [mkataba huu](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=contract_code), toleo lililobadilishwa la Greeter ya Hardhat. Wakati salamu inabadilishwa, inairudisha kama ilivyokuwa. + +Ili kuiendesha: + +1. Kloni hifadhi. + + ```sh copy + git clone https://github.com/qbzzt/20240715-server-component.git + cd 20240715-server-component + ``` + +2. Sakinisha vifurushi vinavyohitajika. Kama huna tayari, [sakinisha Node kwanza](https://nodejs.org/en/download/package-manager). + + ```sh copy + npm install + ``` + +3. Hariri `.env` ili kubainisha ufunguo binafsi wa akaunti iliyo na ETH kwenye testnet ya Holesky. Ikiwa huna ETH kwenye Holesky, unaweza [kutumia bomba hili](https://holesky-faucet.pk910.de/). + + ```sh filename=".env" copy + PRIVATE_KEY=0x + ``` + +4. Anzisha seva. + + ```sh copy + npm start + ``` + +5. Nenda kwenye [kichunguzi cha bloku](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=write_contract), na ukitumia anwani tofauti na ile iliyo na ufunguo binafsi rekebisha salamu. Tazama kwamba salamu inarekebishwa kiotomatiki. + +### Inafanyaje kazi? {#how-it-works} + +Njia rahisi zaidi ya kuelewa jinsi ya kuandika kipengele cha seva ni kupitia sampuli mstari kwa mstari. + +#### `src/app.ts` {#src-app-ts} + +Idadi kubwa ya programu imo ndani ya [`src/app.ts`](https://github.com/qbzzt/20240715-server-component/blob/main/src/app.ts). + +##### Kuunda vitu vinavyohitajika + +```typescript +import { + createPublicClient, + createWalletClient, + getContract, + http, + Address, +} from "viem" +``` + +Hizi ni huluki za [Viem](https://viem.sh/) tunazohitaji, kazi na [aina ya `Anwani`](https://viem.sh/docs/glossary/types#address). Seva hii imeandikwa kwa [TypeScript](https://www.typescriptlang.org/), ambayo ni nyongeza kwa JavaScript inayoifanya iwe na [aina madhubuti](https://en.wikipedia.org/wiki/Strong_and_weak_typing). + +```typescript +import { privateKeyToAccount } from "viem/accounts" +``` + +[Kitendakazi hiki](https://viem.sh/docs/accounts/privateKey) kinaturuhusu kutoa maelezo ya mkoba, ikiwa ni pamoja na anwani, inayolingana na ufunguo binafsi. + +```typescript +import { holesky } from "viem/chains" +``` + +Ili kutumia mnyororo wa bloku katika Viem unahitaji kuingiza ufafanuzi wake. Katika kesi hii, tunataka kuunganisha kwenye mnyororo wa bloku wa majaribio wa [Holesky](https://github.com/eth-clients/holesky). + +```typescript +// Hivi ndivyo tunavyoongeza ufafanuzi katika .env kwa process.env. +import * as dotenv from "dotenv" +dotenv.config() +``` + +Hivi ndivyo tunavyosoma `.env` katika mazingira. Tunaihitaji kwa ufunguo binafsi (tazama baadaye). + +```typescript +const greeterAddress : Address = "0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6" +const greeterABI = [ + { + "inputs": [ + { + "internalType": "string", + "name": "_greeting", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + . + . + . + { + "inputs": [ + { + "internalType": "string", + "name": "_greeting", + "type": "string" + } + ], + "name": "setGreeting", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] as const +``` + +Ili kutumia mkataba tunahitaji anwani yake na [ABI](/glossary/#abi) yake. Tunatoa zote mbili hapa. + +Katika JavaScript (na kwa hiyo TypeScript) huwezi kugawa thamani mpya kwa kistari, lakini _unaweza_ kurekebisha kitu kilichohifadhiwa ndani yake. Kwa kutumia kiambishi tamati `as const` tunaiambia TypeScript kwamba orodha yenyewe ni ya kudumu na haiwezi kubadilishwa. + +```typescript +const publicClient = createPublicClient({ + chain: holesky, + transport: http(), +}) +``` + +Unda [mteja wa umma](https://viem.sh/docs/clients/public.html) wa Viem. Wateja wa umma hawana ufunguo binafsi ulioambatanishwa, na kwa hivyo hawawezi kutuma miamala. Wanaweza kuita [kazi za `view`](https://www.tutorialspoint.com/solidity/solidity_view_functions.htm), kusoma salio za akaunti, n.k. + +```typescript +const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) +``` + +Vigezo vya mazingira vinapatikana katika [`process.env`](https://www.totaltypescript.com/how-to-strongly-type-process-env). Hata hivyo, TypeScript ina aina madhubuti. Kigezo cha mazingira kinaweza kuwa mfuatano wowote, au tupu, kwa hivyo aina ya kigezo cha mazingira ni `string | undefined`. Hata hivyo, ufunguo umefafanuliwa katika Viem kama `0x${string}` (`0x` ikifuatiwa na mfuatano). Hapa tunaiambia TypeScript kwamba kigezo cha mazingira cha `PRIVATE_KEY` kitakuwa cha aina hiyo. Ikiwa sivyo, tutapata hitilafu ya muda wa utekelezaji. + +Kitendakazi cha [`privateKeyToAccount`](https://viem.sh/docs/accounts/privateKey) kisha hutumia ufunguo huu binafsi kuunda kitu kamili cha akaunti. + +```typescript +const walletClient = createWalletClient({ + account, + chain: holesky, + transport: http(), +}) +``` + +Ifuatayo, tunatumia kitu cha akaunti kuunda [mteja wa mkoba](https://viem.sh/docs/clients/wallet). Mteja huyu ana ufunguo binafsi na anwani, kwa hivyo inaweza kutumika kutuma miamala. + +```typescript +const greeter = getContract({ + address: greeterAddress, + abi: greeterABI, + client: { public: publicClient, wallet: walletClient }, +}) +``` + +Sasa kwa kuwa tuna mahitaji yote, hatimaye tunaweza kuunda [mfano wa mkataba](https://viem.sh/docs/contract/getContract). Tutatumia mfano huu wa mkataba kuwasiliana na mkataba wa onchain. + +##### Kusoma kutoka kwenye mnyororo wa bloku + +```typescript +console.log(`Current greeting:`, await greeter.read.greet()) +``` + +Kazi za mkataba ambazo zinasomwa tu ([`view`](https://www.tutorialspoint.com/solidity/solidity_view_functions.htm) na [`pure`](https://www.tutorialspoint.com/solidity/solidity_pure_functions.htm)) zinapatikana chini ya `read`. Katika kisa hiki, tunaitumia kufikia kitendakazi cha [`greet`](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=read_contract#cfae3217), ambacho hurudisha salamu. + +JavaScript ina uzi mmoja, kwa hivyo tunapoanzisha mchakato mrefu tunahitaji [kubainisha kuwa tunafanya hivyo kwa njia isiyosawazishwa](https://eloquentjavascript.net/11_async.html#h-XvLsfAhtsE). Kuita mnyororo wa bloku, hata kwa operesheni ya kusoma tu, inahitaji safari ya kwenda na kurudi kati ya kompyuta na nodi ya mnyororo wa bloku. Hiyo ndiyo sababu tunabainisha hapa msimbo unahitaji `kusubiri` matokeo. + +Ikiwa una nia ya jinsi hii inavyofanya kazi unaweza [kusoma kuihusu hapa](https://www.w3schools.com/js/js_promise.asp), lakini kwa vitendo unachohitaji kujua ni kwamba `unasubiri` matokeo ukianza operesheni inayochukua muda mrefu, na kwamba kitendakazi chochote kinachofanya hivi lazima kitangazwe kama `async`. + +##### Kutoa miamala + +```typescript +const setGreeting = async (greeting: string): Promise => { +``` + +Hiki ndicho kitendakazi unachoita ili kutoa muamala unaobadilisha salamu. Kwa kuwa hii ni operesheni ndefu, kitendakazi kinatangazwa kama `async`. Kwa sababu ya utekelezaji wa ndani, kitendakazi chochote cha `async` kinahitaji kurudisha kitu cha `Promise`. Katika kesi hii, `Promise` inamaanisha kuwa hatubainishi nini hasa kitarudishwa katika `Promise`. + +```typescript +const txHash = await greeter.write.setGreeting([greeting]) +``` + +Sehemu ya `write` ya mfano wa mkataba ina kazi zote zinazoandika kwenye hali ya mnyororo wa bloku (zile zinazohitaji kutuma muamala), kama vile [`setGreeting`](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=write_contract#a4136862). Vigezo, ikiwa vipo, vinatolewa kama orodha, na kitendakazi hurudisha hashi ya muamala. + +```typescript + console.log(`Working on a fix, see https://eth-holesky.blockscout.com/tx/${txHash}`) + + return txHash +} +``` + +Ripoti hashi ya muamala (kama sehemu ya URL kwa kichunguzi cha bloku ili kuitazama) na uirudishe. + +##### Kujibu matukio + +```typescript +greeter.watchEvent.SetGreeting({ +``` + +[Kitendakazi cha `watchEvent`](https://viem.sh/docs/actions/public/watchEvent) hukuruhusu kubainisha kuwa kitendakazi kitaendeshwa tukio linapotolewa. Ikiwa unajali tu aina moja ya tukio (katika kesi hii, `SetGreeting`), unaweza kutumia sintaksia hii kujizuia kwa aina hiyo ya tukio. + +```typescript + onLogs: logs => { +``` + +Kitendakazi cha `onLogs` huitwa kunapokuwa na maingizo ya kumbukumbu. Katika Ethereum "log" na "tukio" kawaida hubadilishana. + +```typescript +console.log( + `Address ${logs[0].args.sender} changed the greeting to ${logs[0].args.greeting}` +) +``` + +Kunaweza kuwa na matukio mengi, lakini kwa urahisi tunajali tu lile la kwanza. `logs[0].args` ni hoja za tukio, katika kesi hii `sender` na `greeting`. + +```typescript + if (logs[0].args.sender != account.address) + setGreeting(`${account.address} insists on it being Hello!`) + } +}) +``` + +Ikiwa mtumaji _sio_ seva hii, tumia `setGreeting` kubadilisha salamu. + +#### `package.json` {#package-json} + +[Faili hii](https://github.com/qbzzt/20240715-server-component/blob/main/package.json) inadhibiti usanidi wa [Node.js](https://nodejs.org/en). Makala hii inaelezea tu ufafanuzi muhimu. + +```json +{ + "main": "dist/index.js", +``` + +Ufafanuzi huu unabainisha faili gani ya JavaScript itaendeshwa. + +```json + "scripts": { + "start": "tsc && node dist/app.js", + }, +``` + +Hati ni vitendo mbalimbali vya programu. Katika kesi hii, pekee tuliyo nayo ni `start`, ambayo inakusanya na kisha kuendesha seva. Amri ya `tsc` ni sehemu ya kifurushi cha `typescript` na inakusanya TypeScript kuwa JavaScript. Ikiwa unataka kuiendesha mwenyewe, iko katika `node_modules/.bin`. Amri ya pili inaendesha seva. + +```json + "type": "module", +``` + +Kuna aina nyingi za programu za Node za JavaScript. Aina ya `module` inaturuhusu kuwa na `await` katika msimbo wa kiwango cha juu, ambayo ni muhimu unapofanya operesheni za polepole (na kwa hivyo zisizosawazishwa). + +```json + "devDependencies": { + "@types/node": "^20.14.2", + "typescript": "^5.4.5" + }, +``` + +Hivi ni vifurushi vinavyohitajika tu kwa ajili ya maendeleo. Hapa tunahitaji `typescript` na kwa sababu tunaitumia na Node.js, tunapata pia aina za vigezo na vitu vya Node, kama vile `process`. [Nukuu ya `^`](https://github.com/npm/node-semver?tab=readme-ov-file#caret-ranges-123-025-004) inamaanisha toleo hilo au toleo la juu zaidi ambalo halina mabadiliko ya kuvunja. Tazama [hapa](https://semver.org) kwa habari zaidi kuhusu maana ya nambari za toleo. + +```json + "dependencies": { + "dotenv": "^16.4.5", + "viem": "2.14.1" + } +} +``` + +Hivi ni vifurushi vinavyohitajika wakati wa utekelezaji, wakati wa kuendesha `dist/app.js`. + +## Hitimisho {#conclusion} + +Seva ya kati tuliyoiunda hapa inafanya kazi yake, ambayo ni kutenda kama wakala kwa mtumiaji. Mtu mwingine yeyote anayetaka mfumo mtawanyo wa kimamlaka uendelee kufanya kazi na yuko tayari kutumia gesi anaweza kuendesha mfano mpya wa seva na anwani yake mwenyewe. + +Hata hivyo, hii inafanya kazi tu wakati vitendo vya seva ya kati vinaweza kuthibitishwa kwa urahisi. Ikiwa seva ya kati ina habari yoyote ya hali ya siri, au inafanya hesabu ngumu, ni chombo cha kati ambacho unahitaji kuamini ili kutumia programu, ambacho ndicho hasa minyororo ya bloku inajaribu kuepuka. Katika makala ya baadaye napanga kuonyesha jinsi ya kutumia [uthibitisho wa zero-knowledge](/zero-knowledge-proofs) ili kutatua tatizo hili. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). diff --git a/public/content/translations/sw/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md b/public/content/translations/sw/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md new file mode 100644 index 00000000000..bba1c7f91c9 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md @@ -0,0 +1,92 @@ +--- +title: Sanidi web3.js ili kutumia mnyororo wa bloku wa Ethereum katika JavaScript +description: Jifunze jinsi ya kuweka na kusanidi maktaba ya web3.js ili kuingiliana na mnyororo wa bloku wa Ethereum kutoka kwa programu za JavaScript. +author: "jdourlens" +tags: [ "web3.js", "javascript" ] +skill: beginner +lang: sw +published: 2020-04-11 +source: EthereumDev +sourceUrl: https://ethereumdev.io/setup-web3js-to-use-the-ethereum-blockchain-in-javascript/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +Katika somo hili, tutaona jinsi ya kuanza na [web3.js](https://web3js.readthedocs.io/) ili kuingiliana na mnyororo wa bloku wa Ethereum. Web3.js inaweza kutumika katika sehemu zote mbili za mbele na za nyuma ili kusoma data kutoka kwenye mnyororo wa bloku au kufanya miamala na hata kupeleka mikataba-erevu. + +Hatua ya kwanza ni kujumuisha web3.js katika mradi wako. Ili kuitumia kwenye ukurasa wa wavuti, unaweza kuagiza maktaba moja kwa moja kwa kutumia CDN kama JSDeliver. + +```html + +``` + +Ukipenda kusakinisha maktaba ili kuitumia katika sehemu ya nyuma au mradi wa mbele unaotumia muundo unaweza kuisakinisha kwa kutumia npm: + +```bash +npm install web3 --save +``` + +Kisha ili kuagiza Web3.js katika hati ya Node.js au mradi wa mbele wa Browserify, unaweza kutumia mstari ufuatao wa JavaScript: + +```js +const Web3 = require("web3") +``` + +Sasa kwa kuwa tumejumuisha maktaba katika mradi tunahitaji kuianzisha. Mradi wako unahitaji kuwa na uwezo wa kuwasiliana na mnyororo wa bloku. Maktaba nyingi za Ethereum huwasiliana na [nodi](/developers/docs/nodes-and-clients/) kupitia simu za RPC. Ili kuanzisha mtoa huduma wetu wa Web3, tutaanzisha mfano wa Web3 kwa kupitisha URL ya mtoa huduma kama kiunda. Ikiwa una nodi au [mfano wa ganache unaoendeshwa kwenye kompyuta yako](https://ethereumdev.io/testing-your-smart-contract-with-existing-protocols-ganache-fork/) itaonekana kama hivi: + +```js +const web3 = new Web3("http://localhost:8545") +``` + +Ikiwa ungependa kufikia moja kwa moja nodi iliyohifadhiwa unaweza kupata chaguo kwenye [nodi kama huduma](/developers/docs/nodes-and-clients/nodes-as-a-service). + +```js +const web3 = new Web3("https://cloudflare-eth.com") +``` + +Ili kujaribu kwamba tumesanidi mfano wetu wa Web3 ipasavyo, tutajaribu kupata nambari ya bloku ya hivi karibuni kwa kutumia utendaji wa `getBlockNumber`. Utendaji huu unakubali simu ya kurudi kama kigezo na hurudisha nambari ya bloku kama nambari kamili. + +```js +var Web3 = require("web3") +const web3 = new Web3("https://cloudflare-eth.com") + +web3.eth.getBlockNumber(function (error, result) { + console.log(result) +}) +``` + +Ukiendesha programu hii, itachapisha tu nambari ya bloku ya hivi karibuni: juu ya mnyororo wa bloku. Unaweza pia kutumia miito ya utendaji ya `await/async` ili kuepuka miito ya kurudi iliyopachikwa katika msimbo wako: + +```js +async function getBlockNumber() { + const latestBlockNumber = await web3.eth.getBlockNumber() + console.log(latestBlockNumber) + return latestBlockNumber +} + +getBlockNumber() +``` + +Unaweza kuona utendaji wote unaopatikana kwenye mfano wa Web3 katika [nyaraka rasmi za web3.js](https://docs.web3js.org/). + +Maktaba nyingi za Web3 hazifanani kwa sababu chinichini maktaba hupiga simu za JSON-RPC kwa nodi ambayo hurudisha matokeo. + + + +Ikiwa unafanya kazi kwenye kivinjari, baadhi ya pochi huweka mfano wa Web3 moja kwa moja na unapaswa kujaribu kuitumia kila inapowezekana hasa ikiwa unapanga kuingiliana na anwani ya Ethereum ya mtumiaji ili kufanya miamala. + +Hii hapa ni sehemu fupi ya kugundua ikiwa pochi ya MetaMask inapatikana na kujaribu kuiwasha ikiwa ipo. Baadaye itakuruhusu kusoma salio la mtumiaji na kuwawezesha kuhalalisha miamala ambayo ungependa wafanye kwenye mnyororo wa bloku wa Ethereum: + +```js +if (window.ethereum != null) { + state.web3 = new Web3(window.ethereum) + try { + // Omba ufikiaji wa akaunti ikiwa inahitajika + await window.ethereum.enable() + // Akaunti sasa zimefichuliwa + } catch (error) { + // Mtumiaji amekataa ufikiaji wa akaunti... + } +} +``` + +Njia mbadala za web3.js kama [Ethers.js](https://docs.ethers.io/) zipo na pia hutumiwa kwa kawaida. Katika somo linalofuata tutaona [jinsi ya kusikiliza kwa urahisi bloku mpya zinazoingia kwenye mnyororo wa bloku na kuona yaliyomo ndani yake](https://ethereumdev.io/listening-to-new-transactions-happening-on-the-blockchain/). diff --git a/public/content/translations/sw/developers/tutorials/short-abi/index.md b/public/content/translations/sw/developers/tutorials/short-abi/index.md new file mode 100644 index 00000000000..cca2ca3af9d --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/short-abi/index.md @@ -0,0 +1,585 @@ +--- +title: "ABI Fupi za Uboreshaji wa Calldata" +description: Kuboresha mikataba-erevu kwa ajili ya Optimistic Rollups +author: Ori Pomerantz +lang: sw +tags: [ "safu ya 2" ] +skill: intermediate +published: 2022-04-01 +--- + +## Utangulizi {#introduction} + +Katika makala haya, utajifunza kuhusu [optimistic rollups](/developers/docs/scaling/optimistic-rollups), gharama za miamala juu yao, na jinsi muundo huo tofauti wa gharama unavyotulazimu kuboresha mambo tofauti kuliko kwenye Mtandao Mkuu wa Ethereum. +Pia utajifunza jinsi ya kutekeleza uboreshaji huu. + +### Ufichuzi kamili {#full-disclosure} + +Mimi ni mfanyakazi wa muda wote wa [Optimism](https://www.optimism.io/), kwa hivyo mifano katika makala haya itaendeshwa kwenye Optimism. +Hata hivyo, mbinu iliyoelezwa hapa inapaswa kufanya kazi vizuri vile vile kwa rollups zingine. + +### Istilahi {#terminology} + +Wakati wa kujadili rollups, neno 'safu ya 1' (L1) hutumika kwa Mtandao Mkuu, mtandao wa uzalishaji wa Ethereum. +Neno 'safu ya 2' (L2) hutumika kwa rollup au mfumo mwingine wowote unaotegemea L1 kwa usalama lakini hufanya usindikaji wake mwingi nje ya chain. + +## Je, tunawezaje kupunguza zaidi gharama ya miamala ya L2? {#how-can-we-further-reduce-the-cost-of-L2-transactions} + +[Optimistic rollups](/developers/docs/scaling/optimistic-rollups) zinapaswa kuhifadhi rekodi ya kila muamala wa kihistoria ili mtu yeyote aweze kuzipitia na kuthibitisha kwamba hali ya sasa ni sahihi. +Njia ya bei nafuu zaidi ya kuingiza data kwenye Mtandao Mkuu wa Ethereum ni kuiandika kama calldata. +Suluhisho hili lilichaguliwa na [Optimism](https://help.optimism.io/hc/en-us/articles/4413163242779-What-is-a-rollup-) na [Arbitrum](https://developer.offchainlabs.com/docs/rollup_basics#intro-to-rollups). + +### Gharama ya miamala ya L2 {#cost-of-l2-transactions} + +Gharama ya miamala ya L2 inaundwa na vijenzi viwili: + +1. Usindikaji wa L2, ambao kwa kawaida ni wa bei nafuu sana +2. Ghala la L1, ambalo limeunganishwa na gharama za gesi za Mtandao Mkuu + +Ninapoandika haya, kwenye Optimism gharama ya gesi ya L2 ni 0.001 [Gwei](/developers/docs/gas/#pre-london). +Gharama ya gesi ya L1, kwa upande mwingine, ni takriban gwei 40. +[Unaweza kuona bei za sasa hapa](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m). + +Baiti moja ya calldata hugharimu gesi 4 (ikiwa ni sifuri) au gesi 16 (ikiwa ni thamani nyingine yoyote). +Moja ya operesheni za gharama kubwa zaidi kwenye EVM ni kuandika kwenye ghala. +Gharama ya juu ya kuandika neno la baiti 32 kwenye ghala kwenye L2 ni gesi 22100. Kwa sasa, hii ni gwei 22.1. +Kwa hivyo ikiwa tunaweza kuokoa baiti moja ya sifuri ya calldata, tutaweza kuandika takriban baiti 200 kwenye ghala na bado tuwe na faida. + +### ABI {#the-abi} + +Idadi kubwa ya miamala hufikia mkataba kutoka kwa akaunti inayomilikiwa na mtu wa nje. +Mikataba mingi imeandikwa katika Solidity na kutafsiri uga wao wa data kulingana na [kiolesura cha binary cha programu (ABI)](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding). + +Hata hivyo, ABI ilitengenezwa kwa ajili ya L1, ambapo baiti ya calldata hugharimu takriban sawa na operesheni nne za hesabu, sio L2 ambapo baiti ya calldata hugharimu zaidi ya operesheni elfu moja za hesabu. +Calldata imegawanywa kama ifuatavyo: + +| Sehemu | Urefu | Baiti | Baiti zilizopotea | Gesi iliyopotea | Baiti zinazohitajika | Gesi inayohitajika | +| ------------------------------- | ----: | ----: | ----------------: | --------------: | -------------------: | -----------------: | +| Kiteuzi cha chaguo za kukokotoa | 4 | 0-3 | 3 | 48 | 1 | 16 | +| Sifuri | 12 | 4-15 | 12 | 48 | 0 | 0 | +| Anwani ya mwisho | 20 | 16-35 | 0 | 0 | 20 | 320 | +| Kiasi | 32 | 36-67 | 17 | 64 | 15 | 240 | +| Jumla | 68 | | | 160 | | 576 | + +Maelezo: + +- **Kiteuzi cha chaguo za kukokotoa**: Mkataba una chaguo za kukokotoa chini ya 256, kwa hivyo tunaweza kuzitofautisha kwa baiti moja. + Kwa kawaida baiti hizi si sifuri na kwa hivyo [hugharimu gesi kumi na sita](https://eips.ethereum.org/EIPS/eip-2028). +- **Sifuri**: Baiti hizi daima ni sifuri kwa sababu anwani ya baiti ishirini haihitaji neno la baiti thelathini na mbili ili kuihifadhi. + Baiti zinazoshikilia sifuri hugharimu gesi nne ([angalia karatasi ya njano](https://ethereum.github.io/yellowpaper/paper.pdf), Nyongeza G, + k. 27, thamani ya `G``txdatazero`). +- **Kiasi**: Tukichukulia kuwa katika mkataba huu `decimals` ni kumi na nane (thamani ya kawaida) na kiasi cha juu cha tokeni tunachohamisha kitakuwa 1018, tunapata kiasi cha juu cha 1036. + 25615 > 1036, kwa hivyo baiti kumi na tano zinatosha. + +Upotevu wa gesi 160 kwenye L1 kwa kawaida hauzingatiwi. Muamala hugharimu angalau [gesi 21,000](https://yakkomajuri.medium.com/blockchain-definition-of-the-week-ethereum-gas-2f976af774ed), kwa hivyo 0.8% ya ziada haijalishi. +Hata hivyo, kwenye L2, mambo ni tofauti. Karibu gharama nzima ya muamala ni kuiandika kwa L1. +Mbali na calldata ya muamala, kuna baiti 109 za kichwa cha muamala (anwani ya mwisho, saini, n.k.). +Gharama ya jumla kwa hivyo ni `109*16+576+160=2480`, na tunapoteza takriban 6.5% ya hiyo. + +## Kupunguza gharama wakati haudhibiti mwishilio {#reducing-costs-when-you-dont-control-the-destination} + +Tukichukulia kuwa huna udhibiti juu ya mkataba wa mwishilio, bado unaweza kutumia suluhisho sawa na [hili](https://github.com/qbzzt/ethereum.org-20220330-shortABI). +Wacha tupitie faili zinazohusika. + +### Token.sol {#token-sol} + +[Huu ni mkataba wa mwishilio](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/Token.sol). +Ni mkataba wa kawaida wa ERC-20, wenye kipengele kimoja cha ziada. +Kitendo hiki cha `faucet` humruhusu mtumiaji yeyote kupata tokeni fulani ya kutumia. +Ingefanya mkataba wa uzalishaji wa ERC-20 usiwe na maana, lakini hurahisisha maisha wakati ERC-20 ipo tu kuwezesha majaribio. + +```solidity + /** + * @dev Humpa mpigaji simu tokeni 1000 za kuchezea + */ + function faucet() external { + _mint(msg.sender, 1000); + } // chaguo za kukokotoa bomba +``` + +### CalldataInterpreter.sol {#calldatainterpreter-sol} + +[Huu ni mkataba ambao miamala inapaswa kuita na calldata fupi](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/CalldataInterpreter.sol). +Wacha tuipitie mstari kwa mstari. + +```solidity +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.0; + + +import { OrisUselessToken } from "./Token.sol"; +``` + +Tunahitaji chaguo za kukokotoa za tokeni ili kujua jinsi ya kuiita. + +```solidity +contract CalldataInterpreter { + + OrisUselessToken public immutable token; +``` + +Anwani ya tokeni ambayo sisi ni proksi. + +```solidity + + /** + * @dev Bainisha anwani ya tokeni + * @param tokenAddr_ Anwani ya mkataba wa ERC-20 + */ + constructor( + address tokenAddr_ + ) { + token = OrisUselessToken(tokenAddr_); + } // mjenzi +``` + +Anwani ya tokeni ndiyo kigezo pekee tunachohitaji kubainisha. + +```solidity + function calldataVal(uint startByte, uint length) + private pure returns (uint) { +``` + +Soma thamani kutoka kwa calldata. + +```solidity + uint _retVal; + + require(length < 0x21, + "Kikomo cha urefu wa calldataVal ni baiti 32"); + + require(length + startByte <= msg.data.length, + "calldataVal inajaribu kusoma zaidi ya calldatasize"); +``` + +Tutaipakia neno moja la baiti 32 (biti 256) kwenye kumbukumbu na kuondoa baiti ambazo si sehemu ya uga tunaotaka. +Algorithm hii haifanyi kazi kwa thamani ndefu kuliko baiti 32, na bila shaka hatuwezi kusoma zaidi ya mwisho wa calldata. +Kwenye L1 inaweza kuwa muhimu kuruka majaribio haya ili kuokoa gesi, lakini kwenye L2 gesi ni nafuu sana, ambayo huwezesha ukaguzi wowote wa kiakili tunaoweza kufikiria. + +```solidity + assembly { + _retVal := calldataload(startByte) + } +``` + +Tungeweza kunakili data kutoka kwa simu hadi `fallback()` (tazama hapa chini), lakini ni rahisi zaidi kutumia [Yul](https://docs.soliditylang.org/en/v0.8.12/yul.html), lugha ya mkusanyiko ya EVM. + +Hapa tunatumia [opcode ya CALLDATALOAD](https://www.evm.codes/#35) kusoma baiti `startByte` hadi `startByte+31` kwenye rundo. +Kwa ujumla, sintaksia ya opcode katika Yul ni \`(,...). + +```solidity + + _retVal = _retVal >> (256-length*8); +``` + +Ni baiti za `urefu` muhimu pekee ndizo sehemu ya uga, kwa hivyo [tunahamisha kulia](https://en.wikipedia.org/wiki/Logical_shift) ili kuondoa thamani zingine. +Hii ina faida iliyoongezwa ya kuhamisha thamani upande wa kulia wa uga, kwa hivyo ni thamani yenyewe badala ya thamani mara 256kitu. + +```solidity + + return _retVal; + } + + + fallback() external { +``` + +Wito kwa mkataba wa Solidity usipofanana na saini zozote za chaguo za kukokotoa, huita [chaguo la kukokotoa la `fallback()`](https://docs.soliditylang.org/en/v0.8.12/contracts.html#fallback-function) (kwa kudhani kuna moja). +Katika kisa cha `CalldataInterpreter`, wito _yoyote_ hufika hapa kwa sababu hakuna chaguo zingine za kukokotoa za `external` au `public`. + +```solidity + uint _func; + + _func = calldataVal(0, 1); +``` + +Soma baiti ya kwanza ya calldata, ambayo inatuambia chaguo za kukokotoa. +Kuna sababu mbili kwa nini chaguo za kukokotoa hazipatikani hapa: + +1. Chaguo za kukokotoa ambazo ni `pure` au `view` hazibadilishi hali na hazigharimu gesi (zinapoitwa nje ya chain). + Haina maana kujaribu kupunguza gharama yao ya gesi. +2. Chaguo za kukokotoa zinazotegemea [`msg.sender`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#block-and-transaction-properties). + Thamani ya `msg.sender` itakuwa anwani ya `CalldataInterpreter`, si ya mpigaji simu. + +Kwa bahati mbaya, [ukiangalia vipimo vya ERC-20](https://eips.ethereum.org/EIPS/eip-20), hii inaacha chaguo moja tu la kukokotoa, `transfer`. +Hii inatuacha na chaguo mbili tu za kukokotoa: `transfer` (kwa sababu tunaweza kuita `transferFrom`) na `faucet` (kwa sababu tunaweza kuhamisha tokeni kurudi kwa yeyote aliyetuita). + +```solidity + + // Piga simu kwa mbinu za kubadilisha hali za tokeni kwa kutumia + // maelezo kutoka kwa calldata + + // bomba + if (_func == 1) { +``` + +Wito kwa `faucet()`, ambayo haina vigezo. + +```solidity + token.faucet(); + token.transfer(msg.sender, + token.balanceOf(address(this))); + } +``` + +Baada ya kuita `token.faucet()` tunapata tokeni. Hata hivyo, kama mkataba wa proksi, **hatuhitaji** tokeni. +EOA (akaunti inayomilikiwa nje) au mkataba uliotuita unahitaji. +Kwa hivyo tunahamisha tokeni zetu zote kwa yeyote aliyetuita. + +```solidity + // hamisha (fikiria tuna posho kwa ajili yake) + if (_func == 2) { +``` + +Kuhamisha tokeni kunahitaji vigezo viwili: anwani ya mwisho na kiasi. + +```solidity + token.transferFrom( + msg.sender, +``` + +Tunawaruhusu tu wapigaji simu kuhamisha tokeni wanazomiliki + +```solidity + address(uint160(calldataVal(1, 20))), +``` + +Anwani ya mwisho huanza kwenye baiti #1 (baiti #0 ni chaguo za kukokotoa). +Kama anwani, ina urefu wa baiti 20. + +```solidity + calldataVal(21, 2) +``` + +Kwa mkataba huu mahususi tunadhani kwamba idadi ya juu ya tokeni ambazo mtu yeyote angetaka kuhamisha inatoshea katika baiti mbili (chini ya 65536). + +```solidity + ); + } +``` + +Kwa ujumla, uhamisho unachukua baiti 35 za calldata: + +| Sehemu | Urefu | Baiti | +| ------------------------------- | ----: | ----: | +| Kiteuzi cha chaguo za kukokotoa | 1 | 0 | +| Anwani ya mwisho | 32 | 1-32 | +| Kiasi | 2 | 33-34 | + +```solidity + } // anguko + +} // mkataba CalldataInterpreter +``` + +### test.js {#test-js} + +[Jaribio hili la kitengo cha JavaScript](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/test/test.js) linatuonyesha jinsi ya kutumia utaratibu huu (na jinsi ya kuthibitisha kuwa inafanya kazi ipasavyo). +Nitachukulia kuwa unaelewa [chai](https://www.chaijs.com/) na [ethers](https://docs.ethers.io/v5/) na nitaelezea tu sehemu zinazohusu mkataba haswa. + +```js +const { expect } = require("chai"); + +describe("CalldataInterpreter", function () { + it("Inapaswa kuturuhusu kutumia tokeni", async function () { + const Token = await ethers.getContractFactory("OrisUselessToken") + const token = await Token.deploy() + await token.deployed() + console.log("Anwani ya tokeni:", token.address) + + const Cdi = await ethers.getContractFactory("CalldataInterpreter") + const cdi = await Cdi.deploy(token.address) + await cdi.deployed() + console.log("Anwani ya CalldataInterpreter:", cdi.address) + + const signer = await ethers.getSigner() +``` + +Tunaanza kwa kupeleka mikataba yote miwili. + +```javascript + // Pata tokeni za kuchezea + const faucetTx = { +``` + +Hatuwezi kutumia chaguo za kukokotoa za kiwango cha juu ambazo tungetumia kwa kawaida (kama vile `token.faucet()`) kuunda miamala, kwa sababu hatufuati ABI. +Badala yake, tunapaswa kujenga muamala wenyewe na kisha kuutuma. + +```javascript + to: cdi.address, + data: "0x01" +``` + +Kuna vigezo viwili tunavyohitaji kutoa kwa muamala: + +1. `to`, anwani ya mwisho. + Huu ni mkataba wa mkalimani wa calldata. +2. `data`, calldata ya kutuma. + Katika kesi ya simu ya bomba, data ni baiti moja, `0x01`. + +```javascript + + } + await (await signer.sendTransaction(faucetTx)).wait() +``` + +Tunaita [mbinu ya `sendTransaction` ya mtia saini](https://docs.ethers.io/v5/api/signer/#Signer-sendTransaction) kwa sababu tayari tumebainisha lengo (`faucetTx.to`) na tunahitaji muamala utiwe saini. + +```javascript +// Angalia bomba linatoa tokeni kwa usahihi +expect(await token.balanceOf(signer.address)).to.equal(1000) +``` + +Hapa tunathibitisha salio. +Hakuna haja ya kuokoa gesi kwenye chaguo za kukokotoa za `view`, kwa hivyo tunaziendesha kawaida. + +```javascript +// Ipe CDI posho (idhini haziwezi kuwakilishwa) +const approveTX = await token.approve(cdi.address, 10000) +await approveTX.wait() +expect(await token.allowance(signer.address, cdi.address)).to.equal(10000) +``` + +Mpe mkalimani wa calldata posho ili aweze kufanya uhamisho. + +```javascript +// Hamisha tokeni +const destAddr = "0xf5a6ead936fb47f342bb63e676479bddf26ebe1d" +const transferTx = { + to: cdi.address, + data: "0x02" + destAddr.slice(2, 42) + "0100", +} +``` + +Unda muamala wa uhamisho. Baiti ya kwanza ni "0x02", ikifuatiwa na anwani ya mwisho, na hatimaye kiasi (0x0100, ambayo ni 256 katika desimali). + +```javascript + await (await signer.sendTransaction(transferTx)).wait() + + // Angalia kuwa tuna tokeni 256 pungufu + expect (await token.balanceOf(signer.address)).to.equal(1000-256) + + // Na kwamba mwishilio wetu ulizipata + expect (await token.balanceOf(destAddr)).to.equal(256) + }) // hiyo +}) // eleza +``` + +## Kupunguza gharama unapodhibiti mkataba wa mwisho {#reducing-the-cost-when-you-do-control-the-destination-contract} + +Ikiwa una udhibiti juu ya mkataba wa mwisho unaweza kuunda chaguo za kukokotoa zinazokwepa ukaguzi wa `msg.sender` kwa sababu zinamuamini mkalimani wa calldata. +[Unaweza kuona mfano wa jinsi hii inavyofanya kazi hapa, katika tawi la `control-contract`](https://github.com/qbzzt/ethereum.org-20220330-shortABI/tree/control-contract). + +Ikiwa mkataba ungekuwa ukijibu tu miamala ya nje, tungeweza kutosheka na kuwa na mkataba mmoja tu. +Hata hivyo, hilo lingevunja [uwezo wa kutunga](/developers/docs/smart-contracts/composability/). +Ni bora zaidi kuwa na mkataba unaojibu simu za kawaida za ERC-20, na mkataba mwingine unaojibu miamala yenye data fupi ya simu. + +### Token.sol {#token-sol-2} + +Katika mfano huu tunaweza kurekebisha `Token.sol`. +Hii inatuwezesha kuwa na idadi ya chaguo za kukokotoa ambazo proksi pekee inaweza kuita. +Hapa kuna sehemu mpya: + +```solidity + // Anwani pekee inayoruhusiwa kubainisha anwani ya CalldataInterpreter + address owner; + + // Anwani ya CalldataInterpreter + address proxy = address(0); +``` + +Mkataba wa ERC-20 unahitaji kujua utambulisho wa proksi aliyeidhinishwa. +Hata hivyo, hatuwezi kuweka kigezo hiki katika mjenzi, kwa sababu hatujui thamani bado. +Mkataba huu unathibitishwa kwanza kwa sababu proksi inatarajia anwani ya tokeni katika mjenzi wake. + +```solidity + /** + * @dev Huita mjenzi wa ERC20. + */ + constructor( + ) ERC20("Oris useless token-2", "OUT-2") { + owner = msg.sender; + } +``` + +Anwani ya muundaji (inayoitwa `owner`) huhifadhiwa hapa kwa sababu hiyo ndiyo anwani pekee inayoruhusiwa kuweka proksi. + +```solidity + /** + * @dev weka anwani ya proksi (CalldataInterpreter). + * Inaweza kuitwa mara moja tu na mmiliki + */ + function setProxy(address _proxy) external { + require(msg.sender == owner, "Inaweza kuitwa tu na mmiliki"); + require(proxy == address(0), "Proksi tayari imewekwa"); + + proxy = _proxy; + } // chaguo la kukokotoa setProxy +``` + +Proksi ina ufikiaji wa upendeleo, kwa sababu inaweza kukwepa ukaguzi wa usalama. +Ili kuhakikisha tunaweza kuamini proksi tunamruhusu `mmiliki` pekee kuita chaguo hili la kukokotoa, na mara moja tu. +Mara `proksi` inapokuwa na thamani halisi (sio sifuri), thamani hiyo haiwezi kubadilika, kwa hivyo hata ikiwa mmiliki ataamua kuwa mhalifu, au mnemonic yake itafichuliwa, bado tuko salama. + +```solidity + /** + * @dev Chaguo fulani za kukokotoa zinaweza kuitwa tu na proksi. + */ + modifier onlyProxy { +``` + +Hiki ni kitendakazi cha `kirekebishaji` (https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm), kinarekebisha jinsi vitendakazi vingine vinavyofanya kazi. + +```solidity + require(msg.sender == proxy); +``` + +Kwanza, thibitisha tumeitwa na proksi na si mtu mwingine. +Ikiwa sivyo, `revert`. + +```solidity + _; + } +``` + +Ikiwa ndivyo, endesha kitendakazi tunachorekebisha. + +```solidity + /* Chaguo za kukokotoa zinazoruhusu proksi kuwakilisha akaunti */ + + function transferProxy(address from, address to, uint256 amount) + public virtual onlyProxy() returns (bool) + { + _transfer(from, to, amount); + return true; + } + + function approveProxy(address from, address spender, uint256 amount) + public virtual onlyProxy() returns (bool) + { + _approve(from, spender, amount); + return true; + } + + function transferFromProxy( + address spender, + address from, + address to, + uint256 amount + ) public virtual onlyProxy() returns (bool) + { + _spendAllowance(from, spender, amount); + _transfer(from, to, amount); + return true; + } +``` + +Hizi ni shughuli tatu ambazo kwa kawaida huhitaji ujumbe kutoka moja kwa moja kutoka kwa huluki inayohamisha tokeni au kuidhinisha posho. +Hapa tuna toleo la proksi la shughuli hizi ambalo: + +1. Hurekebishwa na `onlyProxy()` ili hakuna mtu mwingine anayeruhusiwa kuzidhibiti. +2. Hupata anwani ambayo kwa kawaida ingekuwa `msg.sender` kama kigezo cha ziada. + +### CalldataInterpreter.sol {#calldatainterpreter-sol-2} + +Mkalimani wa calldata karibu anafanana na ule ulio juu, isipokuwa kwamba chaguo za kukokotoa zinazowakilishwa hupokea kigezo cha `msg.sender` na hakuna haja ya posho ya `transfer`. + +```solidity + // hamisha (hakuna haja ya posho) + if (_func == 2) { + token.transferProxy( + msg.sender, + address(uint160(calldataVal(1, 20))), + calldataVal(21, 2) + ); + } + + // idhinisha + if (_func == 3) { + token.approveProxy( + msg.sender, + address(uint160(calldataVal(1, 20))), + calldataVal(21, 2) + ); + } + + // hamishaKutoka + if (_func == 4) { + token.transferFromProxy( + msg.sender, + address(uint160(calldataVal( 1, 20))), + address(uint160(calldataVal(21, 20))), + calldataVal(41, 2) + ); + } +``` + +### Test.js {#test-js-2} + +Kuna mabadiliko machache kati ya msimbo wa awali wa majaribio na huu. + +```js +const Cdi = await ethers.getContractFactory("CalldataInterpreter") +const cdi = await Cdi.deploy(token.address) +await cdi.deployed() +await token.setProxy(cdi.address) +``` + +Tunahitaji kuuambia mkataba wa ERC-20 ni proksi gani ya kuamini + +```js +console.log("Anwani ya CalldataInterpreter:", cdi.address) + +// Unahitaji watiaji saini wawili ili kuthibitisha posho +const signers = await ethers.getSigners() +const signer = signers[0] +const poorSigner = signers[1] +``` + +Ili kuangalia `approve()` na `transferFrom()` tunahitaji mtia saini wa pili. +Tunaiita `poorSigner` kwa sababu haipati tokeni zetu zozote (inahitaji kuwa na ETH, bila shaka). + +```js +// Hamisha tokeni +const destAddr = "0xf5a6ead936fb47f342bb63e676479bddf26ebe1d" +const transferTx = { + to: cdi.address, + data: "0x02" + destAddr.slice(2, 42) + "0100", +} +await (await signer.sendTransaction(transferTx)).wait() +``` + +Kwa sababu mkataba wa ERC-20 unaiamini proksi (`cdi`), hatuhitaji posho ya kuwasilisha uhamisho. + +```js +// idhinisha na uhamisheKutoka +const approveTx = { + to: cdi.address, + data: "0x03" + poorSigner.address.slice(2, 42) + "00FF", +} +await (await signer.sendTransaction(approveTx)).wait() + +const destAddr2 = "0xE1165C689C0c3e9642cA7606F5287e708d846206" + +const transferFromTx = { + to: cdi.address, + data: "0x04" + signer.address.slice(2, 42) + destAddr2.slice(2, 42) + "00FF", +} +await (await poorSigner.sendTransaction(transferFromTx)).wait() + +// Angalia mchanganyiko wa idhinisha / uhamisheKutoka ulifanywa kwa usahihi +expect(await token.balanceOf(destAddr2)).to.equal(255) +``` + +Jaribu chaguo mbili mpya za kukokotoa. +Kumbuka kwamba `transferFromTx` inahitaji vigezo viwili vya anwani: mtoaji wa posho na mpokeaji. + +## Hitimisho {#conclusion} + +Wote [Optimism](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) na [Arbitrum](https://developer.offchainlabs.com/docs/special_features) wanatafuta njia za kupunguza ukubwa wa calldata iliyoandikwa kwa L1 na kwa hivyo gharama ya miamala. +Hata hivyo, kama watoa huduma wa miundombinu wanaotafuta suluhisho za jumla, uwezo wetu una mipaka. +Kama msanidi programu wa mfumo mtawanyo wa kimamlaka, una ujuzi maalum wa programu, ambao unakuwezesha kuboresha calldata yako vizuri zaidi kuliko tunavyoweza katika suluhisho la jumla. +Tunatumahi, makala haya yanakusaidia kupata suluhisho bora kwa mahitaji yako. + +[Tazama hapa kwa kazi zangu zaidi](https://cryptodocguy.pro/). + diff --git a/public/content/translations/sw/developers/tutorials/smart-contract-security-guidelines/index.md b/public/content/translations/sw/developers/tutorials/smart-contract-security-guidelines/index.md new file mode 100644 index 00000000000..2ee3d315d02 --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/smart-contract-security-guidelines/index.md @@ -0,0 +1,91 @@ +--- +title: Miongozo ya usalama ya mkataba-erevu +description: Orodha hakiki ya miongozo ya usalama ya kuzingatia unapojenga dapp yako +author: "Trailofbits" +tags: [ "uimara", "mikataba erevu", "usalama" ] +skill: intermediate +lang: sw +published: 2020-09-06 +source: Kujenga mikataba salama +sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/guidelines.md +--- + +Fuata mapendekezo haya ya kiwango cha juu ili kujenga mikataba-erevu salama zaidi. + +## Miongozo ya usanifu {#design-guidelines} + +Usanifu wa mkataba unapaswa kujadiliwa mapema, kabla ya kuandika mstari wowote wa msimbo. + +### Nyaraka na vipimo {#documentation-and-specifications} + +Nyaraka zinaweza kuandikwa katika viwango tofauti, na zinapaswa kusasishwa wakati wa kutekeleza mikataba: + +- **Maelezo ya mfumo kwa Kiingereza rahisi**, yanayoelezea kile ambacho mikataba hufanya na dhana zozote kwenye msingi wa msimbo. +- **Michoro ya schema na usanifu**, ikiwemo mwingiliano wa mkataba na mashine ya hali ya mfumo. [Vichapishi vya Slither](https://github.com/crytic/slither/wiki/Printer-documentation) vinaweza kusaidia kutengeneza schema hizi. +- **Nyaraka za msimbo za kina**, umbizo la [Natspec](https://docs.soliditylang.org/en/develop/natspec-format.html) linaweza kutumika kwa ajili ya Solidity. + +### Ukokoaji wa Onchain dhidi ya offchain {#onchain-vs-offchain-computation} + +- **Weka msimbo mwingi iwezekanavyo offchain.** Weka safu ya onchain iwe ndogo. Chakata awali data na msimbo offchain kwa namna ambayo uthibitishaji kwenye onchain ni rahisi. Je, unahitaji orodha iliyopangwa? Panga orodha offchain, kisha angalia tu mpangilio wake kwenye onchain. + +### Uboreshaji {#upgradeability} + +Tulijadili suluhisho tofauti za uboreshaji katika [chapisho letu la blogi](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/). Fanya uamuzi wa makusudi kuunga mkono uboreshaji au la kabla ya kuandika msimbo wowote. Uamuzi utaathiri jinsi unavyounda msimbo wako. Kwa ujumla, tunapendekeza: + +- **Pendelea [uhamishaji wa mkataba](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) badala ya uboreshaji.** Mifumo ya uhamishaji ina faida nyingi sawa na ile inayoweza kuboreshwa, bila hasara zake. +- **Tumia muundo wa kutenganisha data badala ya ule wa delegatecallproxy.** Ikiwa mradi wako una utenganisho wazi wa kimantiki, uboreshaji kwa kutumia utenganishaji wa data utahitaji marekebisho machache tu. Delegatecallproxy inahitaji utaalamu wa EVM na ina uwezekano mkubwa wa kuwa na makosa. +- **Andika utaratibu wa uhamishaji/usasishaji kabla ya kupeleka.** Ikiwa itakubidi uchukue hatua chini ya shinikizo bila miongozo yoyote, utafanya makosa. Andika utaratibu wa kufuata mapema. Inapaswa kujumuisha: + - Wito unaoanzisha mikataba mipya + - Mahali ambapo funguo zimehifadhiwa na jinsi ya kuzifikia + - Jinsi ya kuangalia upelekaji! Tengeneza na jaribu hati ya baada ya upelekaji. + +## Miongozo ya utekelezaji {#implementation-guidelines} + +**Jitahidi kuwa na urahisi.** Daima tumia suluhisho rahisi zaidi linalofaa lengo lako. Mwanachama yeyote wa timu yako anapaswa kuwa na uwezo wa kuelewa suluhisho lako. + +### Muundo wa kazi {#function-composition} + +Usanifu wa msingi wa msimbo wako unapaswa kufanya msimbo wako kuwa rahisi kupitia. Epuka chaguzi za usanifu zinazopunguza uwezo wa kufikiria kuhusu usahihi wake. + +- **Gawanya mantiki ya mfumo wako**, ama kupitia mikataba mingi au kwa kuweka pamoja kazi zinazofanana (kwa mfano, uthibitishaji, hesabu, ...). +- **Andika kazi ndogo, zenye lengo wazi.** Hii itarahisisha upitiaji na kuruhusu upimaji wa vijenzi vya kibinafsi. + +### Urithi {#inheritance} + +- **Weka urithi uweze kudhibitiwa.** Urithi unapaswa kutumika kugawanya mantiki, hata hivyo, mradi wako unapaswa kulenga kupunguza kina na upana wa mti wa urithi. +- **Tumia [kichapishi cha urithi cha Slither](https://github.com/crytic/slither/wiki/Printer-documentation#inheritance-graph) kuangalia daraja la mikataba.** Kichapishi cha urithi kitakusaidia kupitia ukubwa wa daraja. + +### Matukio {#events} + +- **Rekodi shughuli zote muhimu.** Matukio yatasaidia kurekebisha mkataba wakati wa uundaji, na kuufuatilia baada ya kupelekwa. + +### Epuka mitego inayojulikana {#avoid-known-pitfalls} + +- **Fahamu masuala ya kawaida ya usalama.** Kuna rasilimali nyingi mtandaoni za kujifunza kuhusu masuala ya kawaida, kama vile [Ethernaut CTF](https://ethernaut.openzeppelin.com/), [Capture the Ether](https://capturetheether.com/), au [Not so smart contracts](https://github.com/crytic/not-so-smart-contracts/). +- **Fahamu sehemu za maonyo katika [nyaraka za Solidity](https://docs.soliditylang.org/en/latest/).** Sehemu za maonyo zitakujulisha kuhusu tabia zisizo dhahiri za lugha. + +### Tegemezi {#dependencies} + +- **Tumia maktaba zilizojaribiwa vizuri.** Kuingiza msimbo kutoka kwa maktaba zilizojaribiwa vizuri kutapunguza uwezekano wa kuandika msimbo wenye hitilafu. Ikiwa unataka kuandika mkataba wa ERC20, tumia [OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20). +- **Tumia kidhibiti tegemezi; epuka kunakili na kubandika msimbo.** Ikiwa unategemea chanzo cha nje, basi lazima ukiweke kisasa na chanzo asili. + +### Upimaji na uthibitishaji {#testing-and-verification} + +- **Andika majaribio ya kina ya vipande.** Mkusanyiko mpana wa majaribio ni muhimu ili kujenga programu ya hali ya juu. +- **Tumia ukaguzi na sifa maalum za [Slither](https://github.com/crytic/slither), [Echidna](https://github.com/crytic/echidna) na [Manticore](https://github.com/trailofbits/manticore).** Zana za kiotomatiki zitasaidia kuhakikisha mkataba wako ni salama. Pitia sehemu iliyobaki ya mwongozo huu ili kujifunza jinsi ya kuandika ukaguzi na sifa zenye ufanisi. +- **Tumia [crytic.io](https://crytic.io/).** Crytic huunganishwa na GitHub, hutoa ufikiaji wa vigunduzi vya faragha vya Slither, na huendesha ukaguzi wa sifa maalum kutoka Echidna. + +### Solidity {#solidity} + +- **Pendelea Solidity 0.5 badala ya 0.4 na 0.6.** Kwa maoni yetu, Solidity 0.5 ni salama zaidi na ina mazoea bora yaliyojengwa ndani kuliko 0.4. Solidity 0.6 imeonekana kuwa si thabiti sana kwa uzalishaji na inahitaji muda kukomaa. +- **Tumia toleo thabiti kwa kuandaa; tumia toleo la hivi karibuni kuangalia maonyo.** Hakikisha msimbo wako hauna masuala yaliyoripotiwa na toleo la hivi karibuni la mkusanyaji. Hata hivyo, Solidity ina mzunguko wa haraka wa matoleo na ina historia ya hitilafu za mkusanyaji, kwa hivyo hatupendekezi toleo la hivi karibuni kwa upelekaji (angalia [pendekezo la toleo la solc la Slither](https://github.com/crytic/slither/wiki/Detector-Documentation#recommendation-33)). +- **Usitumie uunganishaji wa ndani.** Uunganishaji unahitaji utaalamu wa EVM. Usiandike msimbo wa EVM kama hujai_bobea_ karatasi ya njano. + +## Miongozo ya upelekaji {#deployment-guidelines} + +Mara mkataba unapokuwa umeundwa na kupelekwa: + +- **Fuatilia mikataba yako.** Tazama kumbukumbu, na uwe tayari kuchukua hatua ikiwa kuna ukiukaji wa mkataba au mkoba. +- **Ongeza maelezo yako ya mawasiliano kwenye [blockchain-security-contacts](https://github.com/crytic/blockchain-security-contacts).** Orodha hii husaidia wahusika wengine kuwasiliana nawe ikiwa kasoro ya usalama itagunduliwa. +- **Linda mikoba ya watumiaji wenye fursa.** Fuata [mazoea yetu bora](https://blog.trailofbits.com/2018/11/27/10-rules-for-the-secure-use-of-cryptocurrency-hardware-wallets/) ikiwa unahifadhi funguo katika mikoba ya maunzi. +- **Kuwa na mpango wa kukabiliana na matukio.** Zingatia kuwa mikataba-erevu yako inaweza kuathiriwa. Hata kama mikataba yako haina hitilafu, mshambuliaji anaweza kuchukua udhibiti wa funguo za mmiliki wa mkataba. diff --git a/public/content/translations/sw/developers/tutorials/stealth-addr/index.md b/public/content/translations/sw/developers/tutorials/stealth-addr/index.md new file mode 100644 index 00000000000..173d5f4e2de --- /dev/null +++ b/public/content/translations/sw/developers/tutorials/stealth-addr/index.md @@ -0,0 +1,443 @@ +--- +title: "Kutumia Anwani za Siri" +description: "Anwani za siri huruhusu watumiaji kuhamisha mali bila kujulikana. Baada ya kusoma makala haya, utaweza: Kueleza anwani za siri ni nini na jinsi zinavyofanya kazi, kuelewa jinsi ya kutumia anwani za siri kwa njia ambayo inalinda kutokujulikana, na kuandika programu ya wavuti inayotumia anwani za siri." +author: Ori Pomerantz +tags: + [ + "Anwani ya siri", + "faragha", + "kriptografia", + "rust", + "wasm" + ] +skill: intermediate +published: 2025-11-30 +lang: sw +sidebarDepth: 3 +--- + +Wewe ni Bill. Kwa sababu ambazo hatutaziingilia, unataka kuchangia kampeni ya "Alice kwa Malkia wa Dunia" na kumfanya Alice ajue ulichangia ili akuzawadie akishinda. Kwa bahati mbaya, ushindi wake hauna uhakika. Kuna kampeni shindani, "Carol kwa Maliki wa Mfumo wa Jua". Ikiwa Carol atashinda, na akagundua ulichangia kwa Alice, utakuwa matatani. Kwa hivyo huwezi tu kuhamisha ETH 200 kutoka akaunti yako hadi ya Alice. + +[ERC-5564](https://eips.ethereum.org/EIPS/eip-5564) ina suluhisho. ERC hii inaeleza jinsi ya kutumia [anwani za siri](https://nerolation.github.io/stealth-utils) kwa uhamisho usiojulikana. + +**Onyo**: Kriptografia nyuma ya anwani za siri, kwa kadiri tunavyojua, ni thabiti. Hata hivyo, kuna uwezekano wa mashambulizi ya njia za pembeni. [Chini](#go-wrong), utaona unachoweza kufanya ili kupunguza hatari hii. + +## Jinsi anwani za siri zinavyofanya kazi {#how} + +Makala haya yatajaribu kueleza anwani za siri kwa njia mbili. Ya kwanza ni [jinsi ya kuzitumia](#how-use). Sehemu hii inatosha kuelewa sehemu iliyobaki ya makala. Kisha, kuna [maelezo ya hisabati nyuma yake](#how-math). Ikiwa una nia ya kriptografia, soma sehemu hii pia. + +### Toleo rahisi (jinsi ya kutumia anwani za siri) {#how-use} + +Alice huunda funguo mbili za binafsi na kuchapisha funguo za umma zinazolingana (ambazo zinaweza kuunganishwa kuwa anwani-meta moja ya urefu maradufu). Bill pia huunda ufunguo wa binafsi na kuchapisha ufunguo wa umma unaolingana. + +Kwa kutumia ufunguo wa umma wa upande mmoja na ufunguo wa binafsi wa mwingine, unaweza kupata siri ya pamoja inayojulikana tu na Alice na Bill (haiwezi kutolewa kutoka kwa funguo za umma pekee). Kwa kutumia siri hii ya pamoja, Bill anapata anwani ya siri na anaweza kutuma mali kwake. + +Alice pia hupata anwani kutoka kwa siri ya pamoja, lakini kwa sababu anajua funguo za binafsi za funguo za umma alizochapisha, anaweza pia kupata ufunguo wa binafsi unaomruhusu kutoa pesa kutoka kwa anwani hiyo. + +### Hisabati (kwa nini anwani za siri hufanya kazi hivi) {#how-math} + +Anwani za kawaida za siri hutumia [kriptografia ya mzingo duaradufu (ECC)](https://blog.cloudflare.com/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/#elliptic-curves-building-blocks-of-a-better-trapdoor) kupata utendakazi bora na biti chache za ufunguo, huku zikidumisha kiwango kile kile cha usalama. Lakini kwa sehemu kubwa tunaweza kupuuza hilo na kujifanya tunatumia hesabu za kawaida. + +Kuna nambari ambayo kila mtu anaijua, _G_. Unaweza kuzidisha kwa _G_. Lakini kwa sababu ya asili ya ECC, haiwezekani kivitendo kugawanya kwa _G_. Njia ambayo kriptografia ya ufunguo wa umma hufanya kazi kwa ujumla katika Ethereum ni kwamba unaweza kutumia ufunguo wa binafsi, _Ppriv_, kusaini miamala ambayo kisha inathibitishwa na ufunguo wa umma, _Ppub = GPpriv_. + +Alice huunda funguo mbili za binafsi, _Kpriv_ na _Vpriv_. _Kpriv_ itatumika kutumia pesa kutoka kwa anwani ya siri, na _Vpriv_ kuona anwani ambazo ni za Alice. Kisha Alice huchapisha funguo za umma: _Kpub = GKpriv_ na _Vpub = GVpriv_ + +Bill huunda ufunguo wa tatu wa binafsi, _Rpriv_, na kuchapisha _Rpub = GRpriv_ kwenye sajili ya kati (Bill angeweza pia kumtumia Alice, lakini tunadhania Carol anasikiliza). + +Bill anakokotoa _RprivVpub = GRprivVpriv_, ambayo anatarajia Alice pia aijue (imeelezwa hapa chini). Thamani hii inaitwa _S_, siri ya pamoja. Hii inampa Bill ufunguo wa umma, _Ppub = Kpub+G\*hashi(S)_. Kutoka kwa ufunguo huu wa umma, anaweza kukokotoa anwani na kutuma rasilimali zozote anazotaka kwake. Katika siku zijazo, ikiwa Alice atashinda, Bill anaweza kumwambia _Rpriv_ ili kudhibitisha rasilimali zilitoka kwake. + +Alice anakokotoa _RpubVpriv = GRprivVpriv_. Hii inampa siri ileile ya pamoja, _S_. Kwa sababu anajua ufunguo wa binafsi, _Kpriv_, anaweza kukokotoa _Ppriv = Kpriv+hashi(S)_. Ufunguo huu unamruhusu kufikia mali katika anwani inayotokana na _Ppub = GPpriv = GKpriv+G\*hashi(S) = Kpub+G\*hashi(S)_. + +Tuna ufunguo tofauti wa kutazama ili kumruhusu Alice kumpa kandarasi ndogo Dave's World Domination Campaign Services. Alice yuko tayari kumruhusu Dave ajue anwani za umma na kumjulisha pesa zaidi zinapopatikana, lakini hataki atumie pesa zake za kampeni. + +Kwa sababu kutazama na kutumia hutumia funguo tofauti, Alice anaweza kumpa Dave _Vpriv_. Kisha Dave anaweza kukokotoa _S = RpubVpriv = GRprivVpriv_ na kwa njia hiyo kupata funguo za umma (_Ppub = Kpub+G\*hashi(S)_). Lakini bila _Kpriv_ Dave hawezi kupata ufunguo wa binafsi. + +Kwa muhtasari, hizi ni thamani zinazojulikana na washiriki tofauti. + +| Alice | Imechapishwa | Bill | Dave | | +| ------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------- | +| G | G | G | G | | +| _Kpriv_ | -- | -- | -- | | +| _Vpriv_ | -- | -- | _Vpriv_ | | +| _Kpub = GKpriv_ | _Kpub_ | _Kpub_ | _Kpub_ | | +| _Vpub = GVpriv_ | _Vpub_ | _Vpub_ | _Vpub_ | | +| -- | -- | _Rpriv_ | -- | | +| _Rpub_ | _Rpub_ | _Rpub = GRpriv_ | _Rpub_ | | +| _S = RpubVpriv = GRprivVpriv_ | -- | _S = RprivVpub = GRprivVpriv_ | _S = _RpubVpriv_ = GRprivVpriv_ | | +| _Ppub = Kpub+G\*hashi(S)_ | -- | _Ppub = Kpub+G\*hashi(S)_ | _Ppub = Kpub+G\*hashi(S)_ | | +| _Anwani=f(Ppub)_ | -- | _Anwani=f(Ppub)_ | _Anwani=f(Ppub)_ | _Anwani=f(Ppub)_ | +| _Ppriv = Kpriv+hashi(S)_ | -- | -- | -- | | + +## Wakati anwani za siri zinakwenda kombo {#go-wrong} + +_Hakuna siri kwenye mnyororo wa bloku_. Wakati anwani za siri zinaweza kukupa faragha, faragha hiyo iko katika hatari ya uchambuzi wa trafiki. Ili kuchukua mfano mdogo, fikiria kwamba Bill anafadhili anwani na mara moja anatuma muamala kuchapisha thamani ya _Rpub_. Bila _Vpriv_ ya Alice, hatuwezi kuwa na uhakika kwamba hii ni anwani ya siri, lakini hiyo ndiyo njia ya kubashiri. Kisha, tunaona muamala mwingine unaohamisha ETH zote kutoka kwa anwani hiyo hadi kwa anwani ya hazina ya kampeni ya Alice. Huenda tusiweze kuthibitisha, lakini kuna uwezekano kwamba Bill alichangia kampeni ya Alice. Carol bila shaka angefikiria hivyo. + +Ni rahisi kwa Bill kutenganisha uchapishaji wa _Rpub_ na ufadhili wa anwani ya siri (kufanya hivyo kwa nyakati tofauti, kutoka kwa anwani tofauti). Hata hivyo, hilo halitoshi. Mtindo ambao Carol anatafuta ni kwamba Bill anafadhili anwani, na kisha hazina ya kampeni ya Alice inatoa pesa kutoka humo. + +Suluhisho moja ni kwa kampeni ya Alice kutotoa pesa moja kwa moja, bali kuitumia kumlipa mtu wa tatu. Ikiwa kampeni ya Alice itatuma ETH 10 kwa Dave's World Domination Campaign Services, Carol atajua tu kwamba Bill alimchangia mmoja wa wateja wa Dave. Ikiwa Dave ana wateja wa kutosha, Carol hataweza kujua ikiwa Bill alichangia kwa Alice anayeshindana naye, au kwa Adam, Albert, au Abigail ambao Carol hawajali. Alice anaweza kujumuisha thamani iliyohashishwa na malipo, na kisha kumpa Dave picha ya awali, ili kuthibitisha kuwa ulikuwa mchango wake. Vinginevyo, kama ilivyoelezwa hapo juu, ikiwa Alice atampa Dave _Vpriv_ yake, tayari anajua malipo yalitoka kwa nani. + +Tatizo kuu la suluhisho hili ni kwamba linahitaji Alice ajali usiri wakati usiri huo unamnufaisha Bill. Alice anaweza kutaka kudumisha sifa yake ili rafiki yake Bill, Bob, pia amchangie. Lakini inawezekana pia kwamba hatamjali kumfichua Bill, kwa sababu basi ataogopa kitakachotokea ikiwa Carol atashinda. Bill anaweza kuishia kumpa Alice msaada zaidi. + +### Kutumia tabaka nyingi za siri {#multi-layer} + +Badala ya kumtegemea Alice kulinda faragha ya Bill, Bill anaweza kufanya hivyo mwenyewe. Anaweza kutengeneza anwani-meta nyingi kwa watu wa kubuni, Bob na Bella. Kisha Bill anatuma ETH kwa Bob, na "Bob" (ambaye kwa kweli ni Bill) anaituma kwa Bella. "Bella" (pia Bill) anaituma kwa Alice. + +Carol bado anaweza kufanya uchambuzi wa trafiki na kuona bomba la Bill-kwa-Bob-kwa-Bella-kwa-Alice. Hata hivyo, ikiwa "Bob" na "Bella" pia watatumia ETH kwa madhumuni mengine, haitaonekana kwamba Bill alihamisha chochote kwa Alice, hata kama Alice atatoa pesa mara moja kutoka kwa anwani ya siri hadi kwa anwani yake ya kampeni inayojulikana. + +## Kuandika programu ya anwani ya siri {#write-app} + +Makala haya yanaelezea programu ya anwani ya siri [inayopatikana kwenye GitHub](https://github.com/qbzzt/251022-stealth-addresses.git). + +### Zana {#tools} + +Kuna [maktaba ya typescript ya anwani za siri](https://github.com/ScopeLift/stealth-address-sdk) tunayoweza kutumia. Hata hivyo, operesheni za kikriptografia zinaweza kutumia CPU sana. Ninapendelea kuzitekeleza katika lugha iliyokusanywa, kama vile [Rust](https://rust-lang.org/), na kutumia [WASM](https://webassembly.org/) kuendesha msimbo kwenye kivinjari. + +Tutatumia [Vite](https://vite.dev/) na [React](https://react.dev/). Hizi ni zana za kawaida za tasnia; ikiwa huzifahamu, unaweza kutumia [mafunzo haya](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/). Ili kutumia Vite, tunahitaji Node. + +### Angalia anwani za siri zikifanya kazi {#in-action} + +1. Sakinisha zana zinazohitajika: [Rust](https://rust-lang.org/tools/install/) na [Node](https://nodejs.org/en/download). + +2. Clone hazina ya GitHub. + + ```sh + git clone https://github.com/qbzzt/251022-stealth-addresses.git + cd 251022-stealth-addresses + ``` + +3. Sakinisha mahitaji ya awali na ukusanye msimbo wa Rust. + + ```sh + cd src/rust-wasm + rustup target add wasm32-unknown-unknown + cargo install wasm-pack + wasm-pack build --target web + ``` + +4. Anzisha seva ya wavuti. + + ```sh + cd ../../ + npm install + npm run dev + ``` + +5. Vinjari hadi [programu](http://localhost:5173/). Ukurasa huu wa programu una fremu mbili: moja kwa ajili ya kiolesura cha mtumiaji cha Alice na nyingine kwa ajili ya cha Bill. Fremu hizi mbili haziwasiliani; ziko tu kwenye ukurasa mmoja kwa urahisi. + +6. Kama Alice, bofya **Tengeneza Anwani-Meta ya Siri**. Hii itaonyesha anwani mpya ya siri na funguo za binafsi zinazolingana. Nakili anwani-meta ya siri kwenye ubao wa kunakili. + +7. Kama Bill, bandika anwani-meta mpya ya siri na bofya **Tengeneza anwani**. Hii inakupa anwani ya kufadhili kwa ajili ya Alice. + +8. Nakili anwani na ufunguo wa umma wa Bill na uvibandike katika eneo la "Ufunguo wa binafsi kwa anwani iliyotengenezwa na Bill" ya kiolesura cha mtumiaji cha Alice. Mara tu sehemu hizo zitakapojazwa, utaona ufunguo wa binafsi wa kufikia mali kwenye anwani hiyo. + +9. Unaweza kutumia [kikokotoo cha mtandaoni](https://iancoleman.net/ethereum-private-key-to-address/) ili kuhakikisha ufunguo wa binafsi unalingana na anwani. + +### Jinsi programu inavyofanya kazi {#how-the-program-works} + +#### Sehemu ya WASM {#wasm} + +Msimbo chanzo unaokusanywa kuwa WASM umeandikwa katika [Rust](https://rust-lang.org/). Unaweza kuuona katika [`src/rust_wasm/src/lib.rs`](https://github.com/qbzzt/251022-stealth-addresses/blob/main/src/rust-wasm/src/lib.rs). Msimbo huu kimsingi ni kiolesura kati ya msimbo wa JavaScript na [maktaba ya `eth-stealth-addresses`](https://github.com/kassandraoftroy/eth-stealth-addresses). + +**`Cargo.toml`** + +[`Cargo.toml`](https://doc.rust-lang.org/cargo/reference/manifest.html) katika Rust inafanana na [`package.json`](https://docs.npmjs.com/cli/v9/configuring-npm/package-json) katika JavaScript. Ina maelezo ya kifurushi, tamko za utegemezi, n.k. + +```toml +[package] +name = "rust-wasm" +version = "0.1.0" +edition = "2024" + +[dependencies] +eth-stealth-addresses = "0.1.0" +hex = "0.4.3" +wasm-bindgen = "0.2.104" +getrandom = { version = "0.2", features = ["js"] } +``` + +Kifurushi cha [`getrandom`](https://docs.rs/getrandom/latest/getrandom/) kinahitaji kutengeneza thamani za nasibu. Hilo haliwezi kufanywa kwa njia za kialgoriti pekee; inahitaji ufikiaji wa mchakato halisi kama chanzo cha entropy. Ufafanuzi huu unabainisha kuwa tutapata entropy hiyo kwa kuuliza kivinjari tunachotumia. + +```toml +console_error_panic_hook = "0.1.7" +``` + +[Maktaba hii](https://docs.rs/console_error_panic_hook/latest/console_error_panic_hook/) inatupa ujumbe wa makosa wenye maana zaidi wakati msimbo wa WASM unapokwama na hauwezi kuendelea. + +```toml +[lib] +crate-type = ["cdylib", "rlib"] +``` + +Aina ya towe inayohitajika kutengeneza msimbo wa WASM. + +**`lib.rs`** + +Huu ndio msimbo halisi wa Rust. + +```rust +use wasm_bindgen::prelude::*; +``` + +Ufafanuzi wa kuunda kifurushi cha WASM kutoka kwa Rust. Zimeandikwa [hapa](https://wasm-bindgen.github.io/wasm-bindgen/reference/attributes/index.html). + +```rust +use eth_stealth_addresses::{ + generate_stealth_meta_address, + generate_stealth_address, + compute_stealth_key +}; +``` + +Vitendaji tunavyohitaji kutoka kwa [maktaba ya `eth-stealth-addresses`](https://github.com/kassandraoftroy/eth-stealth-addresses). + +```rust +use hex::{decode,encode}; +``` + +Rust kwa kawaida hutumia safu za baiti ([arrays](https://doc.rust-lang.org/std/primitive.array.html)) (`[u8; ]`) kwa thamani. Lakini katika JavaScript, kwa kawaida tunatumia mifuatano ya heksadesimali. [Maktaba ya `hex`](https://docs.rs/hex/latest/hex/) inatutafsiria kutoka uwakilishi mmoja hadi mwingine. + +```rust +#[wasm_bindgen] +``` + +Tengeneza viunganishi vya WASM ili kuweza kuita kitendaji hiki kutoka kwa JavaScript. + +```rust +pub fn wasm_generate_stealth_meta_address() -> String { +``` + +Njia rahisi zaidi ya kurudisha kitu chenye sehemu nyingi ni kurudisha mfuatano wa JSON. + +```rust + let (address, spend_private_key, view_private_key) = + generate_stealth_meta_address(); +``` + +[`generate_stealth_meta_address`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.generate_stealth_meta_address.html) inarudisha sehemu tatu: + +- Anwani-meta (_Kpub_ na _Vpub_) +- Ufunguo wa binafsi wa kutazama (_Vpriv_) +- Ufunguo wa binafsi wa kutumia (_Kpriv_) + +Sintaksia ya [tuple](https://doc.rust-lang.org/std/primitive.tuple.html) inaturuhusu kutenganisha thamani hizo tena. + +```rust + format!("{{\"address\":\"{}\",\"view_private_key\":\"{}\",\"spend_private_key\":\"{}\"}}", + encode(address), + encode(view_private_key), + encode(spend_private_key) + ) +} +``` + +Tumia macro ya [`format!`](https://doc.rust-lang.org/std/fmt/index.html) kutengeneza mfuatano uliosimbwa kwa JSON. Tumia [`hex::encode`](https://docs.rs/hex/latest/hex/fn.encode.html) kubadilisha safu kuwa mifuatano ya heksi. + +```rust +fn str_to_array(s: &str) -> Option<[u8; N]> { +``` + +Kitendaji hiki hugeuza mfuatano wa heksi (unaotolewa na JavaScript) kuwa safu ya baiti. Tunaitumia kuchanganua thamani zinazotolewa na msimbo wa JavaScript. Kitendaji hiki ni kigumu kwa sababu ya jinsi Rust inavyoshughulikia safu na vekta. + +Usemi wa `` unaitwa [generic](https://doc.rust-lang.org/book/ch10-01-syntax.html). `N` ni kigezo kinachodhibiti urefu wa safu inayorudishwa. Kitendaji hiki kwa kweli kinaitwa `str_to_array::`, ambapo `n` ni urefu wa safu. + +Thamani ya kurudisha ni `Option<[u8; N]>`, ambayo inamaanisha safu inayorudishwa ni ya [hiari](https://doc.rust-lang.org/std/option/). Huu ni mtindo wa kawaida katika Rust kwa vitendaji ambavyo vinaweza kushindwa. + +Kwa mfano, tukiiita `str_to_array::10("bad060a7")`, kitendaji kinatakiwa kurudisha safu ya thamani kumi, lakini ingizo ni baiti nne tu. Kitendaji kinahitaji kushindwa, na hufanya hivyo kwa kurudisha `None`. Thamani ya kurudisha kwa `str_to_array::4("bad060a7")` itakuwa `Some<[0xba, 0xd0, 0x60, 0xa7]>`. + +```rust + // decode returns Result, _> + let vec = decode(s).ok()?; +``` + +Kitendaji cha [`hex::decode`](https://docs.rs/hex/latest/hex/fn.decode.html) kinarudisha `Result, FromHexError>`. Aina ya [`Result`](https://doc.rust-lang.org/std/result/) inaweza kuwa na matokeo ya mafanikio (`Ok(value)`) au kosa (`Err(error)`). + +Mbinu ya `.ok()` hubadilisha `Result` kuwa `Option`, ambayo thamani yake ni thamani ya `Ok()` ikiwa imefanikiwa au `None` ikiwa sivyo. Mwishowe, [opereta ya alama ya swali](https://doc.rust-lang.org/std/option/#the-question-mark-operator-) huacha vitendaji vya sasa na kurudisha `None` ikiwa `Option` ni tupu. Vinginevyo, hufungua thamani na kuirudisha (katika kesi hii, kugawa thamani kwa `vec`). + +Hii inaonekana kama njia ya kushangaza iliyopotoka ya kushughulikia makosa, lakini `Result` na `Option` huhakikisha kuwa makosa yote yanashughulikiwa, kwa njia moja au nyingine. + +```rust + if vec.len() != N { return None; } +``` + +Ikiwa idadi ya baiti si sahihi, hilo ni kosa, na tunarudisha `None`. + +```rust + // try_into consumes vec and attempts to make [u8; N] + let array: [u8; N] = vec.try_into().ok()?; +``` + +Rust ina aina mbili za safu. [Safu](https://doc.rust-lang.org/std/primitive.array.html) zina ukubwa usiobadilika. [Vekta](https://doc.rust-lang.org/std/vec/index.html) zinaweza kukua na kupungua. `hex::decode` inarudisha vekta, lakini maktaba ya `eth_stealth_addresses` inataka kupokea safu. [`.try_into()`](https://doc.rust-lang.org/std/convert/trait.TryInto.html#required-methods) hubadilisha thamani kuwa aina nyingine, kwa mfano, vekta kuwa safu. + +```rust + Some(array) +} +``` + +Rust haikuhitaji utumie neno kuu la [`return`](https://doc.rust-lang.org/std/keyword.return.html) unaporudisha thamani mwishoni mwa kitendaji. + +```rust +#[wasm_bindgen] +pub fn wasm_generate_stealth_address(stealth_address: &str) -> Option { +``` + +Kitendaji hiki kinapokea anwani-meta ya umma, ambayo inajumuisha _Vpub_ na _Kpub_. Inarudisha anwani ya siri, ufunguo wa umma wa kuchapisha (_Rpub_), na thamani ya skanisho ya baiti moja ambayo inaharakisha utambuzi wa anwani zilizochapishwa ambazo zinaweza kuwa za Alice. + +Thamani ya skanisho ni sehemu ya siri ya pamoja (_S = GRprivVpriv_). Thamani hii inapatikana kwa Alice, na kuikagua ni haraka zaidi kuliko kuangalia ikiwa _f(Kpub+G\*hashi(S))_ ni sawa na anwani iliyochapishwa. + +```rust + let (address, r_pub, scan) = + generate_stealth_address(&str_to_array::<66>(stealth_address)?); +``` + +Tunatumia [`generate_stealth_address`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.generate_stealth_address.html) ya maktaba. + +```rust + format!("{{\"address\":\"{}\",\"rPub\":\"{}\",\"scan\":\"{}\"}}", + encode(address), + encode(r_pub), + encode(&[scan]) + ).into() +} +``` + +Andaa mfuatano wa towe uliosimbwa kwa JSON. + +```rust +#[wasm_bindgen] +pub fn wasm_compute_stealth_key( + address: &str, + bill_pub_key: &str, + view_private_key: &str, + spend_private_key: &str +) -> Option { + . + . + . +} +``` + +Kitendaji hiki hutumia [`compute_stealth_key`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.compute_stealth_key.html) ya maktaba kukokotoa ufunguo wa binafsi wa kutoa pesa kutoka kwa anwani (_Rpriv_). Ukokoaji huu unahitaji thamani hizi: + +- Anwani (_Anwani=f(Ppub)_) +- Ufunguo wa umma uliotengenezwa na Bill (_Rpub_) +- Ufunguo wa binafsi wa kutazama (_Vpriv_) +- Ufunguo wa binafsi wa kutumia (_Kpriv_) + +```rust +#[wasm_bindgen(start)] +``` + +[`#[wasm_bindgen(start)]`](https://wasm-bindgen.github.io/wasm-bindgen/reference/attributes/on-rust-exports/start.html) inabainisha kuwa kitendaji kinachotekelezwa wakati msimbo wa WASM unapowashwa. + +```rust +pub fn main() { + console_error_panic_hook::set_once(); +} +``` + +Msimbo huu unabainisha kuwa towe la hitilafu litumwe kwenye kiweko cha JavaScript. Ili kuiona ikifanya kazi, tumia programu na mpe Bill anwani-meta isiyo sahihi (badilisha tu tarakimu moja ya heksadesimali). Utaona kosa hili kwenye kiweko cha JavaScript: + +``` +rust_wasm.js:236 panicked at /home/ori/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/subtle-2.6.1/src/lib.rs:701:9: +assertion `left == right` failed + left: 0 + right: 1 +``` + +Ikifuatiwa na ufuatiliaji wa mrundikano. Kisha mpe Bill anwani-meta sahihi, na mpe Alice anwani isiyo sahihi au ufunguo wa umma usio sahihi. Utaona kosa hili: + +``` +rust_wasm.js:236 panicked at /home/ori/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eth-stealth-addresses-0.1.0/src/lib.rs:78:9: +keys do not generate stealth address +``` + +Tena, ikifuatiwa na ufuatiliaji wa mrundikano. + +#### Kiolesura cha Mtumiaji {#ui} + +Kiolesura cha mtumiaji kimeandikwa kwa kutumia [React](https://react.dev/) na kinatolewa na [Vite](https://vite.dev/). Unaweza kujifunza kuzihusu kwa kutumia [mafunzo haya](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/). Hakuna haja ya [WAGMI](https://wagmi.sh/) hapa kwa sababu hatuingiliani moja kwa moja na mnyororo wa bloku au mkoba. + +Sehemu pekee isiyo dhahiri ya kiolesura cha mtumiaji ni muunganisho wa WASM. Hivi ndivyo inavyofanya kazi. + +**`vite.config.js`** + +Faili hili lina [usanidi wa Vite](https://vite.dev/config/). + +```js +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import wasm from "vite-plugin-wasm"; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(), wasm()], +}) +``` + +Tunahitaji programu-jalizi mbili za Vite: [react](https://www.npmjs.com/package/@vitejs/plugin-react) na [wasm](https://github.com/Menci/vite-plugin-wasm#readme). + +**`App.jsx`** + +Faili hili ndilo sehemu kuu ya programu. Ni kontena linalojumuisha sehemu mbili: `Alice` na `Bill`, violesura vya watumiaji hao. Sehemu muhimu kwa WASM ni msimbo wa uanzishaji. + +```jsx +import init from './rust-wasm/pkg/rust_wasm.js' +``` + +Tunapotumia [`wasm-pack`](https://rustwasm.github.io/docs/wasm-pack/), inatengeneza faili mbili tunazotumia hapa: faili la wasm lenye msimbo halisi (hapa, `src/rust-wasm/pkg/rust_wasm_bg.wasm`) na faili la JavaScript lenye ufafanuzi wa kuitumia (hapa, `src/rust_wasm/pkg/rust_wasm.js`). Usafirishaji chaguo-msingi wa faili hilo la JavaScript ni msimbo unaohitaji kuendeshwa ili kuanzisha WASM. + +```jsx +function App() { + . + . + . + useEffect(() => { + const loadWasm = async () => { + try { + await init(); + setWasmReady(true) + } catch (err) { + console.error('Error loading wasm:', err) + alert("Wasm error: " + err) + } + } + + loadWasm() + }, [] + ) +``` + +[Ndoano ya `useEffect`](https://react.dev/reference/react/useEffect) inakuwezesha kubainisha kitendaji kinachotekelezwa wakati vigezo vya hali vinapobadilika. Hapa, orodha ya vigezo vya hali ni tupu (`[]`), kwa hivyo kitendaji hiki kinachotekelezwa mara moja tu wakati ukurasa unapopakiwa. + +Kitendaji cha athari lazima kirudi mara moja. Ili kutumia msimbo wa asinkroni, kama vile `init` ya WASM (ambayo inapaswa kupakia faili la `.wasm` na kwa hivyo inachukua muda) tunafafanua kitendaji cha ndani cha [`async`](https://en.wikipedia.org/wiki/Async/await) na kukiendesha bila `await`. + +**`Bill.jsx`** + +Hiki ni kiolesura cha mtumiaji cha Bill. Ina kitendo kimoja, kutengeneza anwani kulingana na anwani-meta ya siri iliyotolewa na Alice. + +```jsx +import { wasm_generate_stealth_address } from './rust-wasm/pkg/rust_wasm.js' +``` + +Mbali na usafirishaji chaguo-msingi, msimbo wa JavaScript uliotengenezwa na `wasm-pack` husafirisha kitendaji kwa kila kitendaji katika msimbo wa WASM. + +```jsx +
+
diff --git a/public/content/translations/sw/defi/index.md b/public/content/translations/sw/defi/index.md index 5be8ea06b4a..d8070a25745 100644 --- a/public/content/translations/sw/defi/index.md +++ b/public/content/translations/sw/defi/index.md @@ -69,7 +69,8 @@ Hii inaonekana ya ajabu... "kwa nini nitake kupanga pesa zangu"? Hata hivyo, hii -
Chunguza mapendekezo yetu ya mpango za DeFi kujaribu ikiwa wewe ni mpya kwa Ethereum.
+
Chunguza mapendekezo yetu ya mpango za DeFi kujaribu ikiwa wewe ni mpya kwa Ethereum. +
Chunguza programu za DeFi diff --git a/public/content/translations/sw/developers/docs/accounts/index.md b/public/content/translations/sw/developers/docs/accounts/index.md index 2a496662240..711cca971bc 100644 --- a/public/content/translations/sw/developers/docs/accounts/index.md +++ b/public/content/translations/sw/developers/docs/accounts/index.md @@ -1,6 +1,6 @@ --- title: Akaunti za Ethereum -description: Maelezo ya akaunti za Ethereum – miundo yao ya data na uhusiano wao na usimbaji fiche wa jozi za funguo. +description: "Maelezo ya akaunti za Ethereum – miundo yao ya data na uhusiano wao na usimbaji fiche wa jozi za funguo." lang: sw --- diff --git a/public/content/translations/sw/developers/docs/blocks/index.md b/public/content/translations/sw/developers/docs/blocks/index.md index bf9424525ff..4778dbb6e1a 100644 --- a/public/content/translations/sw/developers/docs/blocks/index.md +++ b/public/content/translations/sw/developers/docs/blocks/index.md @@ -1,6 +1,6 @@ --- title: Vipande -description: Muhtasari wa bloku katika mnyororo wa bloku wa Ethereum – muundo wao wa data, kwa nini zinahitajika, na jinsi zinavyotengenezwa. +description: "Muhtasari wa bloku katika mnyororo wa bloku wa Ethereum – muundo wao wa data, kwa nini zinahitajika, na jinsi zinavyotengenezwa." lang: sw --- diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md index 423ea2db6c0..ad02912c522 100644 --- a/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md @@ -8,7 +8,7 @@ Wezi na waharibifu huwa mara nyingi wanatafuta mianya ya kushambulia programu za ## Mahitaji ya awali {#prerequisites} -Ufahamu wa msingi wa [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/) unahitajika. Pia, itasaidia kuwa na uelewa wa msingi wa [faida za Ethereum] (/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) na algoriti ya uchaguzi wa uma, [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper). +Ufahamu wa msingi wa [uthibitisho wa hisa](/developers/docs/consensus-mechanisms/pos/) unahitajika. Pia, itasaidia kuwa na uelewa wa msingi wa [faida za Ethereum](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) na algoriti ya uchaguzi wa uma, [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper). ## Washambuliaji wanataka nini? {#what-do-attackers-want} diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md index 81508648aa0..e4b309b33b9 100644 --- a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md @@ -8,7 +8,7 @@ lang: sw - Ethash ilikuwa algoriti ya uchimbaji wa uthibitishaji-wa-kazi ya Ethereum. Uthibitishaji-wa-kazi sasa **umezimwa kabisa** na Ethereum sasa inalindwa kwa kutumia [uthibitishaji-wa-dau](/developers/docs/consensus-mechanisms/pos/) badala yake. Soma zaidi kuhusu [Muungano](/roadmap/merge/), [uthibitishaji-wa-dau](/developers/docs/consensus-mechanisms/pos/) na [kusimamisha](/staking/). Ukurasa huu ni kwa ajili ya maslahi ya kihistoria! + Ethash ilikuwa algoriti ya uchimbaji wa uthibitishaji-wa-kazi ya Ethereum. Uthibitishaji-wa-kazi sasa **umezimwa kabisa** na Ethereum sasa inalindwa kwa kutumia [uthibitishaji-wa-dau](/developers/docs/consensus-mechanisms/pos/) badala yake. Soma zaidi kuhusu [Muungano](/roadmap/merge/), [uthibitishaji-wa-dau](/developers/docs/consensus-mechanisms/pos/) na [kusimamisha](/staking/). Ukurasa huu ni kwa ajili ya maslahi ya kihistoria!
diff --git a/public/content/translations/sw/developers/docs/data-structures-and-encoding/rlp/index.md b/public/content/translations/sw/developers/docs/data-structures-and-encoding/rlp/index.md index a214d627980..3f3a1ee3c34 100644 --- a/public/content/translations/sw/developers/docs/data-structures-and-encoding/rlp/index.md +++ b/public/content/translations/sw/developers/docs/data-structures-and-encoding/rlp/index.md @@ -81,7 +81,7 @@ def to_binary(x): - baiti '\x0f' = `[ 0x0f ]` - baiti '\x04\x00' = `[ 0x82, 0x04, 0x00 ]` - [uwakilishi wa nadharia ya seti](http://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers) ya tatu, `[ [], [[]], [ [], [[]] ] ] = [ 0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0 ]` -- mfuatano "Lorem ipsum dolor sit amet, consectetur adipisicing elit" = `[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ...` , 'e', 'l', 'i', 't' ]\` +- mfuatano "Lorem ipsum dolor sit amet, consectetur adipisicing elit" = `[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ...` , 'e', 'l', 'i', 't' ]` ## Utenguaji usimbaji wa RLP {#rlp-decoding} diff --git a/public/content/translations/sw/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/sw/developers/docs/nodes-and-clients/run-a-node/index.md index a9cac9c7e8f..531eff34d7c 100644 --- a/public/content/translations/sw/developers/docs/nodes-and-clients/run-a-node/index.md +++ b/public/content/translations/sw/developers/docs/nodes-and-clients/run-a-node/index.md @@ -236,7 +236,7 @@ Sehemu hii itakuongoza katika kuanzisha wateja wa utekelezaji. Inatumika tu kama Tafadhali kumbuka kuwa huu ni mfano wa msingi tu, mipangilio mingine yote itawekwa kwa chaguomsingi. Zingatia nyaraka za kila mteja ili kujifunza kuhusu maadili chaguomsingi, mipangilio, na vipengele. Kwa vipengele zaidi, kwa mfano kwa kuendesha wathibitishaji, ufuatiliaji, n.k., tafadhali rejelea nyaraka za mteja mahususi. -> Kumbuka kuwa backslash `\` katika mifano ni kwa madhumuni ya uumbizaji tu; bendera za usanidi zinaweza kufafanuliwa katika mstari mmoja. +> Kumbuka kuwa backslash `` katika mifano ni kwa madhumuni ya uumbizaji tu; bendera za usanidi zinaweza kufafanuliwa katika mstari mmoja. ##### Inaendesha Besu diff --git a/public/content/translations/sw/developers/docs/scaling/optimistic-rollups/index.md b/public/content/translations/sw/developers/docs/scaling/optimistic-rollups/index.md index c96f247fe9a..9fd00ab8577 100644 --- a/public/content/translations/sw/developers/docs/scaling/optimistic-rollups/index.md +++ b/public/content/translations/sw/developers/docs/scaling/optimistic-rollups/index.md @@ -1,6 +1,6 @@ --- title: Optimistic rollups -description: Utangulizi wa optimistic rollups—suluhisho la kuongeza ukubwa linalotumiwa na jamii ya Ethereum. +description: "Utangulizi wa optimistic rollups—suluhisho la kuongeza ukubwa linalotumiwa na jamii ya Ethereum." lang: sw --- diff --git a/public/content/translations/sw/developers/docs/scaling/zk-rollups/index.md b/public/content/translations/sw/developers/docs/scaling/zk-rollups/index.md index 96becf537fe..9f7c773f2f6 100644 --- a/public/content/translations/sw/developers/docs/scaling/zk-rollups/index.md +++ b/public/content/translations/sw/developers/docs/scaling/zk-rollups/index.md @@ -1,6 +1,6 @@ --- title: Rollups za Maarifa Sifuri -description: Utangulizi wa unda-mpya za zero-knowledge—suluhisho la uongezwaji linalotumiwa na jamii ya Ethereum. +description: "Utangulizi wa unda-mpya za zero-knowledge—suluhisho la uongezwaji linalotumiwa na jamii ya Ethereum." lang: sw --- diff --git a/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md b/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md index 0cfdddbdfa1..5e12d04bedb 100644 --- a/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md +++ b/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md @@ -1,6 +1,6 @@ --- title: Lugha za mikataba mahiri -description: Muhtasari na ulinganisho wa lugha mbili kuu za mikataba-erevu – Solidity na Vyper. +description: "Muhtasari na ulinganisho wa lugha mbili kuu za mikataba-erevu – Solidity na Vyper." lang: sw --- diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md index 800d3821df4..d81a4b2819d 100644 --- a/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md @@ -171,7 +171,7 @@ Wakati ishara za ERC-20 kutumwa kwa mkataba mzuri ambao hakuna iliyoundwa kushug Wakati haiwezekani kuzuia suala hili na ERC-20 kabisa kuna mbinu ambayo kuruhusu kwa kiasi kikubwa kupunguza uwezekano wa kupoteza ishara kwa mtumiaji wa mwisho: - Tatizo la kawaida zaidi ni wakati mtumiaji anapotuma tokeni kwenye anwani ya mkataba wa tokeni yenyewe (k.m., USDT imewekwa kwenye anwani ya mkataba wa tokeni ya USDT). Inapendekezwa kuzuia kazi ya `transfer(..)` ili kurudisha majaribio kama hayo ya uhamisho. Fikiria kuongeza uhakiki wa `require(_to != address(this));` ndani ya utekelezaji wa kazi ya `transfer(..)`. -- Kazi ya `transfer(..)` kwa ujumla haikuundwa kwa ajili ya kuweka tokeni kwenye mikataba. `kukubali(..) Mfumo wa `& transferFrom(..)`hutumika kuweka tokeni za ERC-20 kwenye mikataba badala yake. Inawezekana kuzuia kazi ya uhamisho ili kutoruhusu kuweka tokeni kwenye mikataba yoyote nayo, hata hivyo inaweza kuvunja uoanifu na mikataba ambayo inachukulia kuwa tokeni zinaweza kuwekwa kwenye mikataba kwa kutumia kazi ya`trasnfer(..)\` (k.m., mabwawa ya ukwasi ya Uniswap). +- Kazi ya `transfer(..)` kwa ujumla haikuundwa kwa ajili ya kuweka tokeni kwenye mikataba. `kukubali(..) Mfumo wa `& transferFrom(..)`hutumika kuweka tokeni za ERC-20 kwenye mikataba badala yake. Inawezekana kuzuia kazi ya uhamisho ili kutoruhusu kuweka tokeni kwenye mikataba yoyote nayo, hata hivyo inaweza kuvunja uoanifu na mikataba ambayo inachukulia kuwa tokeni zinaweza kuwekwa kwenye mikataba kwa kutumia kazi ya`trasnfer(..)` (k.m., mabwawa ya ukwasi ya Uniswap). - Njia kudhani kwamba ERC-20 ishara inaweza kumaliza katika mkataba wako hata kama mkataba huo si lazima milele kupokea yoyote. Hakuna njia ya kuzuia au kukataa amana ya bahati mbaya juu ya mwisho wa wapokeaji. Kushauriwa kutekeleza kazi ambayo kuruhusu kuchimba ishara za ERC-20 zilizowekwa kwa bahati mbaya. - Fikiria kutumia viwango vya ishara mabadala. diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md index 2d65c97ce0f..2d1095e9592 100644 --- a/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md @@ -196,5 +196,4 @@ Wakati ERC-223 kushughulikia suala kadhaa kupatikana katika kiwango ERC-20, ni s ## Masomo zaidi {#further-reading} - [EIP-223: ERC-223 ishara kiwango](https://eips.ethereum.org/EIPS/eip-223) -- [Pendekezo la awali ERC-223] - (https://github.com/ethereum/eips/issues/223) +- [Pendekezo la awali ERC-223](https://github.com/ethereum/eips/issues/223) diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-777/index.md index e96a1c09ca3..efc663996fa 100644 --- a/public/content/translations/sw/developers/docs/standards/tokens/erc-777/index.md +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-777/index.md @@ -6,13 +6,11 @@ lang: sw ## Onyo {#warning} -\*\* ERC-777 ni vigumu kutekeleza vizuri, kutokana na yake [usumbufu kwa aina mbalimbali za mashambulizi](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2620). Kushauriwa kutumia [ERC-20] -(/developers/docs/standards/tokens/erc-20/) badala yake.\*\* Ukurasa huu kubaki kuwa hifadhi ya kihistoria. +\*\* ERC-777 ni vigumu kutekeleza vizuri, kutokana na yake [usumbufu kwa aina mbalimbali za mashambulizi](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2620). Kushauriwa kutumia [ERC-20](/developers/docs/standards/tokens/erc-20/) badala yake.\*\* Ukurasa huu kubaki kuwa hifadhi ya kihistoria. ## Utangulizi? {#introduction} -ERC-777 ni badilishwa ishara kiwango kueneza zipo [ERC-20] -(/developers/docs/standards/tokens/erc-20/) kiwango. +ERC-777 ni badilishwa ishara kiwango kueneza zipo [ERC-20](/developers/docs/standards/tokens/erc-20/) kiwango. ## Mahitaji ya awali {#prerequisites} diff --git a/public/content/translations/sw/developers/tutorials/all-you-can-cache/index.md b/public/content/translations/sw/developers/tutorials/all-you-can-cache/index.md index e91e437ecaf..168bcec0b07 100644 --- a/public/content/translations/sw/developers/tutorials/all-you-can-cache/index.md +++ b/public/content/translations/sw/developers/tutorials/all-you-can-cache/index.md @@ -717,7 +717,7 @@ Kazi ya kusoma ni `view`, kwa hivyo haihitaji muamala na haina gharama ya gesi. worm.writeEntry(0xDEAD, 0xBEEF); ``` -[Hivi (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert) ndivyo tunavyobainisha katika jaribio la Foundry kwamba wito unaofuata unapaswa kushindwa, na sababu iliyoripotiwa ya kushindwa. Hii inatumika tunapotumia sintaksia `.`()` badala ya kujenga calldata na kuita mkataba kwa kutumia kiolesura cha kiwango cha chini (`.call()\`, n.k.). +[Hivi (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert) ndivyo tunavyobainisha katika jaribio la Foundry kwamba wito unaofuata unapaswa kushindwa, na sababu iliyoripotiwa ya kushindwa. Hii inatumika tunapotumia sintaksia `.`()` badala ya kujenga calldata na kuita mkataba kwa kutumia kiolesura cha kiwango cha chini (`.call()`, n.k.). ```solidity function testReadWriteCached() public { diff --git a/public/content/translations/sw/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/public/content/translations/sw/developers/tutorials/hello-world-smart-contract-fullstack/index.md index 8819e5d49ab..7563acdacc4 100644 --- a/public/content/translations/sw/developers/tutorials/hello-world-smart-contract-fullstack/index.md +++ b/public/content/translations/sw/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -57,7 +57,7 @@ Unaweza kupakua na kuunda akaunti ya MetaMask bure [hapa](https://metamask.io/do Ili kupeleka mkataba-erevu wako kwenye mtandao wa majaribio, utahitaji ETH bandia. Ili kupata ETH kwenye mtandao wa Goerli, nenda kwenye bomba la Goerli na uweke anwani ya akaunti yako ya Goerli. Kumbuka kwamba mabomba ya Goerli yamekuwa hayategemewi sana hivi karibuni - angalia [ukurasa wa mitandao ya majaribio](/developers/docs/networks/#goerli) kwa orodha ya machaguo ya kujaribu: _Kumbuka: kutokana na msongamano wa mtandao, hii inaweza kuchukua muda._ -\`\` +`` ### Hatua ya 5: Angalia Salio lako {#step-5-check-your-balance} @@ -833,8 +833,9 @@ return ( - - + + + ) ``` diff --git a/public/content/translations/sw/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md b/public/content/translations/sw/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md index 2026b07276a..d7ca9010293 100644 --- a/public/content/translations/sw/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md +++ b/public/content/translations/sw/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md @@ -235,7 +235,7 @@ Chaguo hili la kukokotoa hutengeneza hashi ya jozi. Ni tafsiri ya Solidity tu ya }  // MarkleProof ``` -Katika nukuu za kihisabati uthibitishaji wa Merkle unaonekana kama hivi: `H(proof_n, H(proof_n-1, H(proof_n-2, ...` H(proof_1, H(proof_0, value))...)))\`. Msimbo huu unautekeleza. +Katika nukuu za kihisabati uthibitishaji wa Merkle unaonekana kama hivi: `H(proof_n, H(proof_n-1, H(proof_n-2, ...` H(proof_1, H(proof_0, value))...)))`. Msimbo huu unautekeleza. ## Uthibitisho wa Merkle na unda-mpya havichanganyiki {#merkle-proofs-and-rollups} diff --git a/public/content/translations/sw/developers/tutorials/nft-minter/index.md b/public/content/translations/sw/developers/tutorials/nft-minter/index.md index 58ac6ab3147..26137d8f013 100644 --- a/public/content/translations/sw/developers/tutorials/nft-minter/index.md +++ b/public/content/translations/sw/developers/tutorials/nft-minter/index.md @@ -185,7 +185,7 @@ return ( Unda NFT

{status}

- + ) ``` diff --git a/public/content/translations/sw/developers/tutorials/short-abi/index.md b/public/content/translations/sw/developers/tutorials/short-abi/index.md index cca2ca3af9d..eb00e43878f 100644 --- a/public/content/translations/sw/developers/tutorials/short-abi/index.md +++ b/public/content/translations/sw/developers/tutorials/short-abi/index.md @@ -165,7 +165,7 @@ Kwenye L1 inaweza kuwa muhimu kuruka majaribio haya ili kuokoa gesi, lakini kwen Tungeweza kunakili data kutoka kwa simu hadi `fallback()` (tazama hapa chini), lakini ni rahisi zaidi kutumia [Yul](https://docs.soliditylang.org/en/v0.8.12/yul.html), lugha ya mkusanyiko ya EVM. Hapa tunatumia [opcode ya CALLDATALOAD](https://www.evm.codes/#35) kusoma baiti `startByte` hadi `startByte+31` kwenye rundo. -Kwa ujumla, sintaksia ya opcode katika Yul ni \`(,...). +Kwa ujumla, sintaksia ya opcode katika Yul ni `(,...). ```solidity diff --git a/public/content/translations/sw/ethereum-forks/index.md b/public/content/translations/sw/ethereum-forks/index.md index 23bf81372cc..3f06b63c1af 100644 --- a/public/content/translations/sw/ethereum-forks/index.md +++ b/public/content/translations/sw/ethereum-forks/index.md @@ -16,7 +16,6 @@ Uma ni wakati masasisho makubwa ya kiufundi au mabadiliko yanahitajika kufanywa Wakati masasisho yanapohitajika katika programu za kiasili zinazodhibitiwa na kituo kimoja, kampuni huchapisha tu toleo jipya kwa mtumiaji wa mwisho Blockchains hufanya kazi tofauti kwa sababu hakuna mmiliki mmoja wa kati. [Ethereum clients](/developers/docs/nodes-and-clients/) lazima wasasishe programu zao ili kutekeleza sheria mpya za uma. Zaidi ya hayo, waundaji wa blok (wachimbaji katika mfumo wa Proof-of-Work, validators katika mfumo wa Proof-of-Stake) na nodi lazima waweke blok na kuthibitisha kulingana na kanuni mpya. [Zaidi kuhusu taratibu za makubaliano](/developers/docs/consensus-mechanisms/) Mabadiliko haya ya sheria yanaweza kuunda mgawanyiko wa muda katika mtandao. Mabadiliko haya ya kanuni yanaweza kusababisha mgawanyiko wa muda mfupi katika mtandao. Migawanyiko kwa kawaida hukubaliana mapema ili wateja wa mtandao wakubali mabadiliko kwa wakati mmoja, na fork yenye masasisho inakuwa mnyororo mkuu. Hata hivyo, katika matukio machache, kutokubaliana kuhusu migawanyiko kunaweza kusababisha mtandao kugawanyika kudumu – mfano maarufu ni kuundwa kwa Ethereum Classic kupitia DAO fork - @@ -62,7 +61,6 @@ Masasisho ya utekelezaji na makubaliano awali yalitolewa kwa nyakati tofauti, la | Cancun | Deneb | "Dencun" | | Prague | Electra | "Pectra" | | Osaka | Fulu | "Fusaka" | - Nenda moja kwa moja kwenye taarifa kuhusu baadhi ya masasisho muhimu yaliyopita: [Mnyororo Kioleza](/roadmap/beacon-chain/); [Muungano](/roadmap/merge/); na [EIP-1559](#london) @@ -116,7 +114,6 @@ Maboresho ya ufanisi na usalama wa itifaki:
  • EIP-2935 - Save historical block hashes in state
  • EIP-7549 - Move committee index outside Attestation
  • - - [Pectra.wtf](https://pectra.wtf) @@ -148,7 +145,6 @@ Hasa, hili linajumuisha EIP-4844, inayojulikana kama **Proto-Danksharding**, amb
  • EIP-6780 - SELFDESTRUCT only in same transaction
  • EIP-7516 - BLOBBASEFEE opcode
  • - - [Unda-mpya za safu ya 2](/layer-2/) @@ -173,7 +169,6 @@ EIP-7514 inaleta ukaguzi kwenye utoaji wa ETH kwa kuweka kikomo cha kiwango cha
  • EIP-7045 - Increase max attestation inclusion slot
  • EIP-7514 - Add max epoch churn limit
  • - - [Soma vigezo vya sasisho la Deneb](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/) @@ -200,7 +195,6 @@ Uboreshaji wa Shanghai ulipeleka utoaji wa staking kwenye safu ya utekelezaji. S
  • EIP-4895Beacon chain push withdrawals as operations
  • EIP-6049 - Deprecate SELFDESTRUCT
  • - - [Soma vigezo vya sasisho la Shanghai](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md) @@ -236,7 +230,6 @@ Sasisho la Paris lilianzishwa na mnyororo wa bloku wa uthibitishaji-wa-kazi kupi
  • EIP-3675Upgrade consensus to Proof-of-Stake
  • EIP-4399Supplant DIFFICULTY opcode with PREVRANDAO
  • - --- @@ -268,7 +261,6 @@ Sasisho la mtandao la Gray Glacier lilisogeza nyuma [bomu la ugumu](/glossary/#d
    • EIP-5133delays the difficulty bomb until September 2022
    - @@ -291,7 +283,6 @@ Sasisho la mtandao la Arrow Glacier lilisogeza nyuma [bomu la ugumu](/glossary/#
    • EIP-4345delays the difficulty bomb until June 2022
    - --- @@ -349,7 +340,6 @@ Video hii inaelezea EIP-1559 na manufaa yake: [EIP-1559 Imefafanuliwa](https://w
  • EIP-3541 - prevents deploying contracts starting with 0xEF
  • EIP-3554delays the Ice Age until December 2021
  • - --- @@ -373,7 +363,6 @@ Uboreshaji wa Berlin uliboresha gharama za miamala kwa baadhi ya vitendo vya EVM
  • EIP-2929gas cost increases for state access opcodes
  • EIP-2930adds optional access lists
  • - @@ -426,7 +415,6 @@ Uma wa Muir Glacier ulianzisha ucheleweshaji wa [bomu la ugumu](/glossary/#diffi
    • EIP-2384delays the difficulty bomb for another 4,000,000 blocks, or ~611 days.
    - @@ -459,7 +447,6 @@ The Istanbul fork:
  • EIP-2028reduces the cost of CallData to allow more data in blocks – good for [Layer 2 scaling](/developers/docs/scaling/#layer-2-scaling).
  • EIP-2200other opcode gas price alterations.
  • - --- @@ -487,7 +474,6 @@ The Constantinople fork:
  • EIP-1052introduces the EXTCODEHASH instruction to retrieve the hash of another contract's code.
  • EIP-1234makes sure the blockchain doesn't freeze before proof-of-stake and reduces block reward from 3 to 2 ETH.
  • - @@ -522,7 +508,6 @@ Fork ya Byzantium:
  • EIP-100changes difficulty adjustment formula.
  • EIP-649delays [difficulty bomb](/glossary/#difficulty-bomb) by 1 year and reduces block reward from 5 to 3 ETH.
  • - @@ -551,7 +536,6 @@ Uma wa Joka la Uongo lilikuwa jibu la pili kwa mashambulizi ya kunyimwa huduma (
  • EIP-161allows for removal of empty accounts added via the DOS attacks.
  • EIP-170changes the maximum code size that a contract on the blockchain can have – to 24576 bytes.
  • - --- @@ -574,7 +558,6 @@ The Tangerine Whistle fork lilikuwa jibu la kwanza kwa mashambulizi ya kunyimwa
  • EIP-150increases gas costs of opcodes that can be used in spam attacks.
  • EIP-158 - hupunguza ukubwa wa jimbo kwa kuondoa idadi kubwa ya akaunti tupu ambazo ziliwekwa katika jimbo hilo kwa gharama ya chini sana kutokana na dosari katika matoleo ya awali ya itifaki ya Ethereum.
  • - --- @@ -612,7 +595,6 @@ Uma wa Nyumbani ambao uliangalia siku zijazo. Ilijumuisha mabadiliko kadhaa ya i
  • EIP-7adds new opcode: DELEGATECALL
  • EIP-8introduces devp2p forward compatibility requirements
  • - diff --git a/public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md b/public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md index 8934986f41e..7c01282a812 100644 --- a/public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md +++ b/public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md @@ -42,7 +42,8 @@ Baadhi ya programu zitakuomba uandike na uhifadhi "maneno ya kurejesha" ya kisir -
    Umesakinisha mkoba?
    Jifunze jinsi ya kuutumia.
    +
    Umesakinisha mkoba?
    Jifunze jinsi ya kuutumia. +
    Jinsi ya kutumia mkoba diff --git a/public/content/translations/sw/guides/how-to-id-scam-tokens/index.md b/public/content/translations/sw/guides/how-to-id-scam-tokens/index.md index 47e68a855dd..4aeb1b6d4ff 100644 --- a/public/content/translations/sw/guides/how-to-id-scam-tokens/index.md +++ b/public/content/translations/sw/guides/how-to-id-scam-tokens/index.md @@ -20,7 +20,6 @@ title="ARB ni nini?" contentPreview=''> Arbitrum ni shirika linalotengeneza na kusimamia [optimistic rollups](/developers/docs/scaling/optimistic-rollups/). Hapo awali, ilikuwa ni kampuni ya kibiashara yenye lengo la kupata faida, lakini baadae kuchukua hatua ya kugatua madaraka. Kama sehemu ya mchakato huo, walitoa [tokeni ya utawala](/dao/#token-based-membership) inayoweza kuuzwa. - Katika Ethereum, iwapo mali si ya kiwango cha ERC-20, huundwa toleo jipya ambalo limefungamana na kiwango hicho linaloanzia na herufi "w" kwenye jina lake. Kwa mfano, kuna wBTC kwaajili ya bitcoin na wETH kwaajili ya ether. Haileti maana kuwa na toleo la tokeni lililofungamana na kiwango cha ERC-20 kama tokeni tayari ni ya Ethereum, lakini matapeli hutegemea mwonekano wa uhalali badala ya ukweli wa msingi. - ## Tokeni za udanganyifu hufanyaje kazi? {#how-do-scam-tokens-work} @@ -42,7 +40,6 @@ title="Mikataba mahiri ni nini?" contentPreview=''> [Mikataba-erevu](/developers/docs/smart-contracts/) ni programu zinazoendeshwa juu ya blockchain ya Ethereum. Kila tokeni ya ERC-20, kwa mfano, huundwa kama mkataba wa kidigitali. - Hasa, Arbitrum ilipeleka mkataba unaotumia alama ya `ARB`. Lakini hilo halizuii watu wengine kuunda mikataba inayotumia alama hiyo hiyo au inayofanana. Yeyote anayeandika mkataba ndiye anayechagua mkataba huo ufanye nini. diff --git a/public/content/translations/sw/guides/how-to-revoke-token-access/index.md b/public/content/translations/sw/guides/how-to-revoke-token-access/index.md index d8415f02bff..0e535f747cf 100644 --- a/public/content/translations/sw/guides/how-to-revoke-token-access/index.md +++ b/public/content/translations/sw/guides/how-to-revoke-token-access/index.md @@ -49,7 +49,8 @@ Tunakushauri uonyeshe upya chombo cha kubatilisha ruhusa baada ya dakika chache -
    Unataka kujifunza zaidi?
    +
    Unataka kujifunza zaidi? +
    Angalia miongozo yetu mingine diff --git a/public/content/translations/sw/guides/how-to-swap-tokens/index.md b/public/content/translations/sw/guides/how-to-swap-tokens/index.md index 493f3f384fa..6dd33812b0c 100644 --- a/public/content/translations/sw/guides/how-to-swap-tokens/index.md +++ b/public/content/translations/sw/guides/how-to-swap-tokens/index.md @@ -52,7 +52,8 @@ Utapokea kiotomatiki tokeni ulizobadilisha kwenye mkoba wako mara tu muamala uta -
    Unataka kujifunza zaidi?
    +
    Unataka kujifunza zaidi? +
    Angalia miongozo yetu mingine diff --git a/public/content/translations/sw/guides/how-to-use-a-bridge/index.md b/public/content/translations/sw/guides/how-to-use-a-bridge/index.md index 3a4988307d3..6c2fa391ecf 100644 --- a/public/content/translations/sw/guides/how-to-use-a-bridge/index.md +++ b/public/content/translations/sw/guides/how-to-use-a-bridge/index.md @@ -54,7 +54,8 @@ Unaweza kutumia [chainlist.org](http://chainlist.org) kupata maelezo ya RPC ya m -
    Unataka kujifunza zaidi?
    +
    Unataka kujifunza zaidi? +
    Angalia miongozo yetu mingine diff --git a/public/content/translations/sw/guides/how-to-use-a-wallet/index.md b/public/content/translations/sw/guides/how-to-use-a-wallet/index.md index 176192b776a..570d34b0544 100644 --- a/public/content/translations/sw/guides/how-to-use-a-wallet/index.md +++ b/public/content/translations/sw/guides/how-to-use-a-wallet/index.md @@ -65,7 +65,8 @@ Anwani yako itakuwa sawa katika miradi yote ya Ethereum. Huhitaji kujiandikisha -
    Unataka kujifunza zaidi?
    +
    Unataka kujifunza zaidi? +
    Angalia miongozo yetu mingine diff --git a/public/content/translations/sw/nft/index.md b/public/content/translations/sw/nft/index.md index 1112bd7c320..c15e878bfdc 100644 --- a/public/content/translations/sw/nft/index.md +++ b/public/content/translations/sw/nft/index.md @@ -58,7 +58,8 @@ Labda wewe ni msanii amabaye angependa kushiriki kazi yake kupitia NFT bila wewe -
    Chunguza, nunu au tengeneza sanaa ya NFT...
    +
    Chunguza, nunu au tengeneza sanaa ya NFT... +
    Gundua sanaa ya NFT diff --git a/public/content/translations/sw/payments/index.md b/public/content/translations/sw/payments/index.md index e104863f1aa..579a2ded67e 100644 --- a/public/content/translations/sw/payments/index.md +++ b/public/content/translations/sw/payments/index.md @@ -21,7 +21,6 @@ Hii si ndoto ya mbali—inafanyika leo kwenye Ethereum. Wakati taasisi za jadi z
    ![Nembo ya Ethereum kwenye skrini ya kompyuta](./computer.png) -
    ## Uhamishaji pesa: uhamisho wa kimataifa wa bei nafuu{#remittances} @@ -62,7 +61,8 @@ Katika nchi ambazo njia zao za malipo hazipo ulimwenguni kote, suluhisho za mali -
    Fungua akaunti yako ya Ethereum na programu ya mkoba wa kidijitali leo.
    +
    Fungua akaunti yako ya Ethereum na programu ya mkoba wa kidijitali leo. +
    Anza sasa
    @@ -143,7 +143,6 @@ Pia kulikuwa na muda sawa wa kujibu kwa majanga yaliyotokea nchini India na Ukra
    ![Picha ya roboti ya Ethereum](./eth_robot.png) -
    ## Ethereum zidi ya fedha za kawaida {#ethereum-vs-fiat} @@ -190,7 +189,6 @@ Kwa Ethereum, kila mtu anaweza kuona jinsi pesa zinavyosonga na jinsi gharama zi
    ![picha ya mtu anayotembea](./walking.png) -
    Wakati sarafu za fedha za kawaida zina faida ya kukubalika kote na utulivu, Ethereum inatoa manufaa ya kipekee ambayo yanaifanya kuwa chaguo la kuvutia kwa aina fulani za miamala. @@ -200,7 +198,8 @@ Kuanzia kuwezesha misaada ya haraka ya majanga hadi kuwawezesha wafanyakazi wa k -
    Ni wakati wa kufungua akaunti yako ya Ethereum.
    +
    Ni wakati wa kufungua akaunti yako ya Ethereum. +
    Anza sasa! diff --git a/public/content/translations/sw/prediction-markets/index.md b/public/content/translations/sw/prediction-markets/index.md index a3f28b69e72..b8827758f11 100644 --- a/public/content/translations/sw/prediction-markets/index.md +++ b/public/content/translations/sw/prediction-markets/index.md @@ -64,8 +64,7 @@ Kuna masoko kadhaa ya utabiri yenye mfumo wa Ethereum yanayopatikana. Kuna baadh Masoko ya utabiri kwenye mnyororo wa vizuizi hupata vikwazo athiri haki, kisheria, na usahihi. ⚠️ **Udanganyifu wa Soko** – Wachezaji matajiri wanaweza kubadilisha matokeo kwa kufanya biashara bandia. -💧**Matatizo ya kifedha** – watumiaji kidogo ([uwezo mdogo wa kugharamia] -(https://www.investopedia.com/terms/t/thinmarket.asp)) yanaweza kupunguza kuaminika kwa soko. +💧**Matatizo ya kifedha** – watumiaji kidogo ([uwezo mdogo wa kugharamia](https://www.investopedia.com/terms/t/thinmarket.asp)) yanaweza kupunguza kuaminika kwa soko. 🏛**Kukosa uwazi wa Kisheria** –Mamlaka za Serikali kuweka vikwazo kwenye baadhi ya majukwaa. Ili kupunguza matatizo haya, watengenezaji wa Ethereum wanafanya majaribio kwa suluhisho kama (utawala kwa masharti ya masoko ya utabiri) na uthibitishaji wa utambulisho usio na makao makuu. diff --git a/public/content/translations/sw/real-world-assets/index.md b/public/content/translations/sw/real-world-assets/index.md index efdc2109fe7..6e69677418f 100644 --- a/public/content/translations/sw/real-world-assets/index.md +++ b/public/content/translations/sw/real-world-assets/index.md @@ -19,7 +19,7 @@ Mali ya ulimwengu wa kweli (RWAs) ni ishara zinazowakilisha aina za utajiri, kam Baadhi ya RWA zinaonekana - vitu unaweza kuona na kugusa, kama baa za dhahabu au majengo ya kibiashara. Wengine hawaonekani, kama deni la serikali, mali ya kiakili, au usawa katika kampuni. -Wakati wa kupunguzwa, mali hizi zinageuzwa kuwa vitengo vya thamani. Dhahabu iliyotolewa ni mfano mzuri wa jinsi hii inavyofanya kazi. Kampuni [Paxos] (https://www.paxos.com/) hutafsiri baa za dhahabu 400-ndani ya ishara 400 kwenye Ethereum blockchain, kila moja inayoungwa mkono na aunzi moja ya dhahabu. Wamiliki wa ishara wanaweza kukomboa ishara zao kwa dhahabu wakati wowote. Hiyo pia ndio kesi ya ishara zilizonunuliwa kutoka kwa kampuni nyingine ya RWA, [Tether Gold] (https://gold.tether.to/). +Wakati wa kupunguzwa, mali hizi zinageuzwa kuwa vitengo vya thamani. Dhahabu iliyotolewa ni mfano mzuri wa jinsi hii inavyofanya kazi. Kampuni [Paxos](https://www.paxos.com/) hutafsiri baa za dhahabu 400-ndani ya ishara 400 kwenye Ethereum blockchain, kila moja inayoungwa mkono na aunzi moja ya dhahabu. Wamiliki wa ishara wanaweza kukomboa ishara zao kwa dhahabu wakati wowote. Hiyo pia ndio kesi ya ishara zilizonunuliwa kutoka kwa kampuni nyingine ya RWA, [Tether Gold](https://gold.tether.to/). Kila ishara inaweza kugawanywa katika sehemu ndogo hata. Tokeni za dhahabu za tether, kwa mfano, zinaweza kugawanywa katika sehemu ndogo kama 0.000001. @@ -42,15 +42,15 @@ Wacha tuangalie mifano michache kutoka kwa mfumo wa ikolojia wa RWA: mali isiyoh ### Kuwekeza katika mali isiyohamishika {#investing-in-real-estate} -Sema kuwa unapenda kuwekeza katika mali isiyohamishika, lakini ununuzi wa mali nzima hauwezi kufikiwa. Badala yake, unaweza kununua RWAs kupitia mradi kama vile [RealT] (https://realt.co/). Ishara zake zinawakilisha hisa katika kampuni ndogo ya dhima (LLC) iliyoundwa kushikilia hati ya mali. Wamiliki wa ishara hupokea mapato ya kukodisha kwa njia ya Stablecoins kulingana na sehemu wanayoshikilia; RealT anasema hadi sasa imerudisha dola milioni 15 za dola katika mapato ya jumla ya kukodisha kwa wawekezaji. +Sema kuwa unapenda kuwekeza katika mali isiyohamishika, lakini ununuzi wa mali nzima hauwezi kufikiwa. Badala yake, unaweza kununua RWAs kupitia mradi kama vile [RealT](https://realt.co/). Ishara zake zinawakilisha hisa katika kampuni ndogo ya dhima (LLC) iliyoundwa kushikilia hati ya mali. Wamiliki wa ishara hupokea mapato ya kukodisha kwa njia ya Stablecoins kulingana na sehemu wanayoshikilia; RealT anasema hadi sasa imerudisha dola milioni 15 za dola katika mapato ya jumla ya kukodisha kwa wawekezaji. -Mradi mwingine kando ya mistari hiyo hiyo, [Maabara ya Kikundi] (https://x.com/labsgroupio), inaruhusu watu kununua katika mali isiyohamishika iliyo na kiasi kidogo kama $ 100 USD. +Mradi mwingine kando ya mistari hiyo hiyo, [Maabara ya Kikundi](https://x.com/labsgroupio), inaruhusu watu kununua katika mali isiyohamishika iliyo na kiasi kidogo kama $ 100 USD. ### Kuwekeza katika bidhaa za kifedha {#investing-in-financial-products} Miradi kadhaa hufunga ulimwengu wa fedha za jadi na fedha za madaraka (DeFi) kwa kuleta dhamana, hisa, vifungo na vyombo vingine vya kifedha kwenye blockchain. -Kwa mfano, kampuni ya msingi wa Ethereum [Securitize] (https://securitize.io/) inataalam katika kuashiria bidhaa za jadi za kifedha. Mnamo 2024, ilishirikiana na BlackRock kuzindua mfuko wa RWA. BlackRock anasema ina mpango wa hatimaye kuangazia dola trilioni 10 za mali yake: Mkurugenzi Mtendaji wake, Larry Fink, aliita ishara "kizazi kijacho kwa masoko". +Kwa mfano, kampuni ya msingi wa Ethereum [Securitize](https://securitize.io/) inataalam katika kuashiria bidhaa za jadi za kifedha. Mnamo 2024, ilishirikiana na BlackRock kuzindua mfuko wa RWA. BlackRock anasema ina mpango wa hatimaye kuangazia dola trilioni 10 za mali yake: Mkurugenzi Mtendaji wake, Larry Fink, aliita ishara "kizazi kijacho kwa masoko". ### Kuwekeza katika Sanaa Nzuri {#investing-in-fine-art} @@ -58,13 +58,13 @@ Kuna mifumo tofauti tofauti za uwekezaji mzuri wa sanaa. [Masterworks](https://w Wamiliki wa ishara hawadhibiti uhifadhi au uuzaji wa baadaye wa mchoro. Badala yake, wanasimamia ni muda gani wanashikilia ishara zao, ambazo hupanda na kushuka kulingana na thamani ya sanaa. -Wakati huo huo, Msajili wa Sanaa ya Dijiti ya Digital-msingi [Sanaa] (https://www.artory.com/) inathibitisha ukweli wa kazi za sanaa na kurekodi umiliki wa zamani. +Wakati huo huo, Msajili wa Sanaa ya Dijiti ya Digital-msingi [Sanaa](https://www.artory.com/) inathibitisha ukweli wa kazi za sanaa na kurekodi umiliki wa zamani. ### Kuwekeza katika mkusanyiko {#investing-in-collectibles} Kufikia sasa, mifano hii mingi inaonyesha jinsi ishara inaruhusu umiliki wa aina ya utajiri. Faida nyingine ya ishara ni kwamba inawezesha biashara ya vitu muhimu, kama vile mkusanyiko, kwenye soko la kimataifa. -Mfano mmoja wa hii ni [ua] (https://courtyard.io/), ambayo inaonyesha kadi za biashara -fikiria kadi za baseball, kadi za mpira wa miguu au kadi za Pokemon. Wamiliki wa kadi husafirisha kadi zao kwenye kituo salama cha kuhifadhi huko USA. The cards are minted as digital tokens and added to the owners’ wallets for trading on Courtyard’s marketplace. Ua unakubali tu kadi za kiwango cha juu: ndipo mtu wa tatu amethibitisha uhalisi wa kadi na kuipatia alama kulingana na hali yake, iwe imepunguka au pristine. +Mfano mmoja wa hii ni [ua](https://courtyard.io/), ambayo inaonyesha kadi za biashara -fikiria kadi za baseball, kadi za mpira wa miguu au kadi za Pokemon. Wamiliki wa kadi husafirisha kadi zao kwenye kituo salama cha kuhifadhi huko USA. The cards are minted as digital tokens and added to the owners’ wallets for trading on Courtyard’s marketplace. Ua unakubali tu kadi za kiwango cha juu: ndipo mtu wa tatu amethibitisha uhalisi wa kadi na kuipatia alama kulingana na hali yake, iwe imepunguka au pristine. Ua pia hutoa aina ya mpango wa kifalme. Kila wakati kadi inauzwa, mtu ambaye aliiga hupokea asilimia moja ya mapato. Waanzilishi wa kadi pekee ndio wanalipwa kwa njia hii. Wakati wowote, mmiliki anaweza kubadilisha kadi zao za dijiti kwa kadi za mwili, haijalishi ziko ulimwenguni. @@ -80,7 +80,7 @@ Baadhi ya watangulizi katika suala la kuanzisha mifumo ya kisheria haswa kutambu ## Jifunze zaidi {#learn-more} -Kuingia kwenye [mikataba ya smart] (/smart-mikataba/) au ujue zaidi juu ya darasa tofauti la ishara, [tokeni zisizo na fungi (NFT)] (/nft/). +Kuingia kwenye [mikataba ya smart](/smart-mikataba/) au ujue zaidi juu ya darasa tofauti la ishara, [tokeni zisizo na fungi (NFT)](/nft/). ## Masomo zaidi {#further-reading} diff --git a/public/content/translations/sw/roadmap/danksharding/index.md b/public/content/translations/sw/roadmap/danksharding/index.md index 9a022e80c37..fcee17a4a86 100644 --- a/public/content/translations/sw/roadmap/danksharding/index.md +++ b/public/content/translations/sw/roadmap/danksharding/index.md @@ -22,13 +22,11 @@ Hii ni ghali kwa sababu inachakatwa na nodi zote za Ethereum na inabaki kwenye m Rollups ni njia ya kupanua Ethereum kwa kuunganisha miamala nje ya mnyororo kisha kuchapisha matokeo kwenye Ethereum. Rollup kwa msingi wake unaundwa na sehemu mbili: data na ukaguzi wa utekelezaji. Data ni mfuatano kamili wa miamala iliyochakatwa na rollup ili kutoa mabadiliko ya hali yanayochapishwa kwenye Ethereum. Ukaguzi wa utekelezaji ni utekelezaji upya wa miamala hiyo inayofanywa na mchezaji mwaminifu (anaejulikana kama "prover") ili kuhakikisha kuwa mabadiliko ya hali yaliyopendekezwa ni sahihi. Ili kufanya ukaguzi wa utekelezaji, data ya muamala lazima ipatikane kwa muda wa kutosha ili mtu yeyote apakue na kuangalia. Hii inamaanisha kuwa tabia yoyote isiyo ya kweli ya mpangaji wa rollup inaweza kubainishwa na kupingwa na prover. Hata hivyo, haihitaji kupatikana milele. - Rollups huchapisha ahadi za data zao za miamala kwenye mnyororo na pia hufanya data halisi ipatikane katika blobs za data. Hii inamaanisha kuwa provers wanaweza kukagua kama ahadi hizo ni halali au kupinga data wanayodhani ni yenye makosa. Kiwango cha nodi, blobs za data zinashikiliwa na mteja wa makubaliano. Wateja wa makubaliano wanathibitisha kuwa wameona data hiyo na kwamba imeenezwa katika mtandao mzima. Kama data ingehifadhiwa milele, wateja hawa wangekuwa na mzigo mkubwa na kusababisha mahitaji makubwa ya vifaa kwa kuendesha nodi. Badala yake, data huondolewa moja kwa moja kutoka kwenye nodi kila baada ya siku 18. Thibitisho za wateja wa makubaliano zinaonyesha kwamba kulikuwa na nafasi ya kutosha kwa provers kuthibitisha data. Data halisi inaweza kuhifadhiwa nje ya mnyororo na waendeshaji wa rollup, watumiaji, au wengine. - ### Je, data ya blob inathibitishwaje? {#how-are-blobs-verified} @@ -48,13 +46,11 @@ Sherehe ya KZG ya EIP-4844 ilikuwa wazi kwa umma na maelfu ya watu walishiriki k Wakati rollup inachapisha data katika blob, wanatoa "ahadi" ambayo wanachapisha kwenye mnyororo. Ahadi hii ni matokeo ya kutathmini polynomial iliyofanana na data kwenye pointi fulani. Pointi hizi zinafafanuliwa na namba za nasibu zilizotengenezwa katika sherehe ya KZG. Provers kisha wanaweza kutathmini polynomial kwenye pointi zile zile ili kuthibitisha data—ikiwa wanapata thamani sawa basi data ni sahihi. - Iwapo mtu anajua maeneo ya nasibu yaliyotumika kwa ahadi, ni rahisi kwao kuunda polynomial mpya inayofanana na pointi hizo maalum (yaani, "mgongano"). Hii inamaanisha wanaweza kuongeza au kuondoa data kutoka kwenye blob na bado ikatoa uthibitisho halali. Ili kuzuia hili, badala ya kutoa provers maeneo halisi ya siri, wanapokea maeneo hayo yaliyofungwa ndani ya "sanduku jeusi" la kriptografia kwa kutumia mizunguko ya elliptic. Hizi kwa ufanisi huchanganya thamani kwa namna ambayo thamani za awali haziwezi kutengenezwa tena, lakini kwa kutumia algebra mahiri provers na wakaguzi bado wanaweza kutathmini polynomials kwenye pointi wanazowakilisha. - @@ -70,13 +66,11 @@ Jinsi hii inavyofanya kazi ni kwa kupanua blobs zinazounganishwa na vitaku kuanz Utenganisho wa wajenzi wa pendekezo unahitajika ili kuzuia wathibitishaji binafsi kutoa ahadi za gharama kubwa na uthibitisho wa Mb 32 za data ya blob. Hii ingelazimisha stakers wa nyumbani kuathirika sana na kuhitaji kuwekeza kwenye vifaa vyenye nguvu zaidi, jambo ambalo linadhuru mfumo mtawanyiko. Badala yake, wajenzi maalum wa vitalu huchukua jukumu la kazi hii ya gharama kubwa ya hesabu. Kisha, wanafanya vitalu vyao vipatikane kwa wapendekeza vitalu ili zichapishwe kwenye mtandao. Mpendekeza kitalu huchagua kitalu ambacho ni faida zaidi. Kila mtu anaweza kuthibitisha blobs kwa gharama nafuu na kwa haraka, ikimaanisha mthibitishaji yeyote wa kawaida anaweza kuangalia kwamba wajenzi wa vitalu wanatenda kwa uaminifu. Hii inaruhusu blobs kubwa kushughulikiwa bila kuhatarisha mfumo mtawanyo. Wajenzi wa vitalu wasio waaminifu wanaweza tu kuondolewa kwenye mtandao na kupata adhabu ya kupunguzwa – wengine watachukua nafasi yao kwa sababu ujenzi wa vitalu ni shughuli yenye faida. - Sampuli za upatikaji wa data zinahitajika ili wathibitishaji waweze kuthibitisha data za blob haraka na kwa ufanisi. Kwa kutumia sampuli za upatikaji wa data, validators wanaweza kuwa na uhakika mkubwa kwamba data za blob zilikuwa zinapatikana na ziliwekwa kwa usahihi. Kila validator anaweza kuchagua kwa nasibu pointi chache tu za data na kuunda uthibitisho, ikimaanisha hakuna mthibitishaji anayehitajika kukagua blob nzima. Iwapo data yoyote itakosekana, itatambuliwa haraka na blob hiyo itakataliwa. - ### Maendeleo ya sasa {#current-progress} diff --git a/public/content/translations/sw/roadmap/merge/index.md b/public/content/translations/sw/roadmap/merge/index.md index 85bb47465ff..7bbd4216d37 100644 --- a/public/content/translations/sw/roadmap/merge/index.md +++ b/public/content/translations/sw/roadmap/merge/index.md @@ -70,7 +70,8 @@ Vipengee muhimu vya kuchukua hatua ni pamoja na: Kutokukamilisha vipengee viwili vya kwanza hapo juu kutasababisha nodi yako ionekane kama \"nje ya mtandao\" hadi safu zote mbili zisawazishwe na kuthibitishwa. -Kutokuweka `mpokezi wa ada` bado kutamruhusu kiidhinishi chako kufanya kama kawaida, lakini hutakosa vidokezo vya ada ya kutolipa na MEV yoyote ambayo ungepokea katika vitalu inapendekeza mthibitishaji wako. +Kutokuweka `mpokezi wa ada` bado kutamruhusu kiidhinishi chako kufanya kama kawaida, lakini hutakosa vidokezo vya ada ya kutolipa na MEV yoyote ambayo ungepokea katika vitalu inapendekeza mthibitishaji wako. + Kwa maelezo zaidi, angalia chapisho hili la blogu na Tim Beiko kuhusu Jinsi Muungano Unavyoathiri Safu ya Matumizi ya Ethereum. - ## Muungano na matumizi ya nishati {#merge-and-energy} @@ -134,7 +133,6 @@ Kuendesha nodi isiyozalisha bloku inawezekana kwa mtu yeyote chini ya utaratibu Uwezo wa mtu yeyote kuendesha nodi yake mwenyewe ni muhimu kabisa katika kudumisha ugatuaji wa mtandao wa Ethereum. [More on running your own node](/run-a-node/) - rollup-centric roadmap, efforts are being focused on scaling user activity at [layer 2](/layer-2/), huku kuwezesha safu ya 1 ya Mainnet kama safu salama ya ugawaji wa data kwa ajili ya usaidizi wa ugavi wa data ulioidhinishwa. kwa bei nafuu. Mpito kwenda kwenye uthibitishaji-wa-hisa ni mtangulizi muhimu katika kutimiza hili. [More on gas and fees.](/developers/docs/gas/) - - Utoaji kamili kutokana na kuweka hisa hubadilika-badilika kulingana na jumla ya kiasi cha ETH kilichowekwa hisa - **Tangu Muungano, ni ~ETH 1,700 kwa siku pekee ndizo zimesalia, na kupunguza jumla ya utoaji mpya wa ETH kwa ~88%** - Uchomaji: Hii hubadilika-badilika kulingana na mahitaji ya mtandao. ''-Ikiwa-bei ya wastani ya gesi ya angalau gwei kumi na sita inatambulika kwa siku fulani, hii inalinganisha kabisa ~1,700 ETHzinazotolewa kwa wakaguzi na kufanya mfumuko halisi wa ETH kwa sifuri au chini ya sifuri kwa siku hiyo.''. - ## Kabla ya Muungano (kihistoria) {#pre-merge} @@ -63,7 +62,10 @@ Jumla ya usambazaji wa ETH: **~ETH 120,520,000** (wakati wa Muungano mnamo Septe **~88.7%** ya utoaji ilikuwa ikienda kwa wachimbaji kwenye safu ya utekelezaji (4.09 / 4.61 \* 100) -**~11.3%** ilikuwa inatolewa kwa waweka hisa kwenye safu ya makubaliano (0.52 / 4.61 \* 100)
    +**~11.3%** ilikuwa inatolewa kwa waweka hisa kwenye safu ya makubaliano (0.52 / 4.61 \* 100) + +
    +
    ## Baada ya Muungano (siku ya sasa) {#post-merge} @@ -94,7 +96,10 @@ Wathibitishaji wengi zaidi wanapotoa hisa, idadi ya juu ya wathibitishaji wanaoo Jumla ya kiwango cha utoaji cha mwaka: **~0.52%** -Upungufu halisi katika utoaji wa ETH wa mwaka: **~88.7%** ((4.61% - 0.52%) / 4.61% \* 100)
    +Upungufu halisi katika utoaji wa ETH wa mwaka: **~88.7%** ((4.61% - 0.52%) / 4.61% \* 100) + +
    +
    ## Uchomaji {#the-burn} @@ -104,7 +109,10 @@ Nguvu kinyume na utoaji wa ETH ni kiwango ambacho ETH inachomwa. Ili muamala ufa -Uchomaji wa ada ulianza kutumika na [uboreshaji wa London](/ethereum-forks/#london) mnamo Agosti 2021, na haujabadilika tangu Muungano.
    +Uchomaji wa ada ulianza kutumika na [uboreshaji wa London](/ethereum-forks/#london) mnamo Agosti 2021, na haujabadilika tangu Muungano. + +
    +
    Zaidi ya uchomaji wa ada uliotekelezwa na uboreshaji wa London, wathibitishaji wanaweza pia kupata adhabu kwa kutokuwa mtandaoni, au mbaya zaidi, wanaweza kupunguzwa hisa zao kwa kukiuka sheria maalum zinazotishia usalama wa mtandao. Adhabu hizi husababisha kupungua kwa ETH kutoka kwa salio la mthibitishaji huyo, ambayo haituzwi moja kwa moja kwa akaunti nyingine yoyote, na kwa ufanisi kuichoma/kuiondoa kwenye mzunguko. diff --git a/public/content/translations/sw/roadmap/pbs/index.md b/public/content/translations/sw/roadmap/pbs/index.md index e98f2b97053..03a2986703f 100644 --- a/public/content/translations/sw/roadmap/pbs/index.md +++ b/public/content/translations/sw/roadmap/pbs/index.md @@ -21,7 +21,6 @@ Kwa mfano, orodha za ujumuishaji zinaweza kuanzishwa ili wathibitishaji wanapoju Mashirika yenye nguvu yanaweza kuwashinikiza wathibitishaji kudhibiti miamala inayoenda au kutoka kwa anwani fulani. Wathibitishaji hutii shinikizo hili kwa kugundua anwani zilizopigwa marufuku katika pool yao ya miamala na kuziondoa kwenye bloku wanazopendekeza. Baada ya PBS hili halitawezekana tena kwa sababu wapendekezaji wa bloku hawatajua ni miamala gani wanayotangaza katika bloku zao. Inaweza kuwa muhimu kwa watu binafsi au programu fulani kutii sheria za udhibiti, kwa mfano inapotungwa kuwa sheria katika eneo lao. Katika hali hizi, utiifu hufanyika katika kiwango cha programu, huku itifaki ikibaki bila ruhusa na bila udhibiti. - ## PBS na MEV {#pbs-and-mev} @@ -32,7 +31,8 @@ PBS inatatua tatizo hili kwa kusanidi upya uchumi wa MEV. Badala ya mpendekezaji -Watu binafsi wanaweza kuhamasishwa kuweka dau na pool badala ya wao wenyewe kutokana na zawadi zilizoimarishwa zinazotolewa na mikakati ya hali ya juu ya MEV. Kutenganisha ujenzi wa bloku na upendekezaji wa bloku kunamaanisha kuwa MEV itakayotolewa itasambazwa kwa wathibitishaji wengi zaidi badala ya kuwekwa kati na mtafutaji wa MEV mwenye ufanisi zaidi. Wakati huo huo, kuruhusu kuwepo kwa wajengaji wa bloku waliobobea kunaondoa mzigo wa ujenzi wa bloku kutoka kwa watu binafsi, na pia kunawazuia watu binafsi kujiibia MEV, huku ikiongeza idadi ya wathibitishaji binafsi, wanaojitegemea ambao wanaweza kuangalia kama bloku ni za kweli. Dhana muhimu ni "kutolingana kwa mthibitishaji-mhakiki" ambayo inarejelea wazo kwamba uzalishaji wa bloku wa kati ni sawa mradi tu kuna mtandao imara na uliogatuliwa kwa kiwango cha juu cha wathibitishaji wenye uwezo wa kuthibitisha kuwa bloku ni za kweli. Ugatuaji ni njia, si lengo la mwisho - tunachotaka ni bloku za kweli. +Watu binafsi wanaweza kuhamasishwa kuweka dau na pool badala ya wao wenyewe kutokana na zawadi zilizoimarishwa zinazotolewa na mikakati ya hali ya juu ya MEV. Kutenganisha ujenzi wa bloku na upendekezaji wa bloku kunamaanisha kuwa MEV itakayotolewa itasambazwa kwa wathibitishaji wengi zaidi badala ya kuwekwa kati na mtafutaji wa MEV mwenye ufanisi zaidi. Wakati huo huo, kuruhusu kuwepo kwa wajengaji wa bloku waliobobea kunaondoa mzigo wa ujenzi wa bloku kutoka kwa watu binafsi, na pia kunawazuia watu binafsi kujiibia MEV, huku ikiongeza idadi ya wathibitishaji binafsi, wanaojitegemea ambao wanaweza kuangalia kama bloku ni za kweli. Dhana muhimu ni "kutolingana kwa mthibitishaji-mhakiki" ambayo inarejelea wazo kwamba uzalishaji wa bloku wa kati ni sawa mradi tu kuna mtandao imara na uliogatuliwa kwa kiwango cha juu cha wathibitishaji wenye uwezo wa kuthibitisha kuwa bloku ni za kweli. Ugatuaji ni njia, si lengo la mwisho - tunachotaka ni bloku za kweli. + ## PBS na Danksharding {#pbs-and-danksharding} diff --git a/public/content/translations/sw/roadmap/single-slot-finality/index.md b/public/content/translations/sw/roadmap/single-slot-finality/index.md index 2fce49eeb59..dd955893192 100644 --- a/public/content/translations/sw/roadmap/single-slot-finality/index.md +++ b/public/content/translations/sw/roadmap/single-slot-finality/index.md @@ -39,7 +39,8 @@ Utaratibu wa sasa wa makubaliano unachanganya uthibitisho kutoka kwa wathibitish Mchakato huu unatoa uwezo wa kutosha kwa kila mthibitishaji kupiga kura katika kila enzi, kwa sababu `nafasi 32 * kamati 64 * wathibitishaji 256 kwa kila kamati = wathibitishaji 524,288 kwa kila enzi`. Wakati wa kuandika (Februari 2023) kuna takriban wathibitishaji 513,000 wanaofanya kazi. -Katika mpango huu, inawezekana tu kwa kila mthibitishaji kupiga kura kwenye bloku kwa kusambaza uthibitisho wao katika enzi nzima. Hata hivyo, kuna njia zinazowezekana za kuboresha mfumo ili _kila mthibitishaji apate fursa ya kuthibitisha katika kila nafasi_. +Katika mpango huu, inawezekana tu kwa kila mthibitishaji kupiga kura kwenye bloku kwa kusambaza uthibitisho wao katika enzi nzima. Hata hivyo, kuna njia zinazowezekana za kuboresha mfumo ili _kila mthibitishaji apate fursa ya kuthibitisha katika kila nafasi_. + Tangu utaratibu wa makubaliano wa Ethereum ulipoundwa, mpango wa ujumlishaji wa saini (BLS) umegundulika kuwa na uwezo mkubwa wa kupanuka kuliko ilivyofikiriwa awali, huku uwezo wa wateja kuchakata na kuthibitisha saini nao umeboreshwa. Imebainika kuwa kuchakata uthibitisho kutoka kwa idadi kubwa ya wathibitishaji kwa kweli kunawezekana ndani ya nafasi moja. Kwa mfano, na wathibitishaji milioni moja kila mmoja akipiga kura mara mbili katika kila nafasi, na nyakati za nafasi zikirekebishwa kuwa sekunde 16, nodi zingehitajika kuthibitisha saini kwa kiwango cha chini cha ujumlishaji 125,000 kwa sekunde ili kuchakata uthibitisho wote milioni 1 ndani ya nafasi. Kwa uhalisia, inachukua kompyuta ya kawaida takriban nanosekunde 500 kufanya uthibitisho mmoja wa saini, ikimaanisha 125,000 zinaweza kufanywa katika ~62.5 ms - chini sana ya kizingiti cha sekunde moja. diff --git a/public/content/translations/sw/roadmap/statelessness/index.md b/public/content/translations/sw/roadmap/statelessness/index.md index aea19447c65..821da210187 100644 --- a/public/content/translations/sw/roadmap/statelessness/index.md +++ b/public/content/translations/sw/roadmap/statelessness/index.md @@ -72,7 +72,8 @@ Ili hili litokee, [miti ya Verkle](/roadmap/verkle-trees/) lazima iwe tayari ime Kutokuwa na utaifa kunategemea wajenzi wa vitalu kudumisha nakala ya data kamili ya serikali ili waweze kutoa mashahidi ambao wanaweza kutumika kuthibitisha kizuizi. Nodes nyingine hazihitaji upatikanaji wa data ya serikali, taarifa zote zinazohitajika ili kuthibitisha kuzuia zinapatikana kwa shahidi. Hii inajenga hali ambapo kupendekeza kuzuia ni ghali, lakini kuthibitisha kuzuia ni nafuu, ambayo ina maana waendeshaji wachache wataendesha nodi ya kupendekeza kuzuia. Hata hivyo, ugatuaji wa wapendekeza vitalu sio muhimu mradi washiriki wengi iwezekanavyo wanaweza kuthibitisha kwa uhuru kwamba vitalu wanavyopendekeza ni halali. -Soma zaidi kwenye dondoo za Dankrad +Soma zaidi kwenye dondoo za Dankrad + Wapendekeza wa kuzuia hutumia data ya serikali kuunda "mashahidi" - seti ndogo ya data ambayo inathibitisha maadili ya serikali ambayo yanabadilishwa na shughuli katika block. Wahalalishaji wengine hawashikilii serikali, wanahifadhi tu mzizi wa serikali (hashi ya jimbo lote). Wanapokea bloku na shahidi na kuzitumia kusasisha mzizi wao wa hali. Hii inafanya nodi ya kuthibitisha kuwa nyepesi sana. diff --git a/public/content/translations/sw/roadmap/verkle-trees/index.md b/public/content/translations/sw/roadmap/verkle-trees/index.md index 32a43d93fd0..b05fc14ef10 100644 --- a/public/content/translations/sw/roadmap/verkle-trees/index.md +++ b/public/content/translations/sw/roadmap/verkle-trees/index.md @@ -18,7 +18,6 @@ Miti ya Verkle ni hatua muhimu katika njia ya kuelekea wateja wa Ethereum wasio Kwa sasa wateja wa Ethereum wanatumia muundo wa data unaojulikana kama Patricia Merkle Trie kuhifadhi data yake ya hali. Taarifa kuhusu akaunti za mtu binafsi huhifadhiwa kama majani kwenye trie na jozi za majani hupigwa hashi mara kwa mara hadi hashi moja tu ibaki. Hashi hii ya mwisho inajulikana kama \"mzizi\". Ili kuthibitisha bloku, wateja wa Ethereum hutekeleza miamala yote katika bloku na kusasisha trie yao ya hali ya ndani. Bloku inachukuliwa kuwa halali ikiwa mzizi wa mti wa ndani unafanana na ule uliotolewa na mpendekezaji wa bloku, kwa sababu tofauti zozote katika hesabu iliyofanywa na mpendekezaji wa bloku na nodi inayothibitisha zingesababisha hashi ya mzizi kuwa tofauti kabisa. Tatizo la hili ni kwamba kuthibitisha mnyororo wa bloku kunahitaji kila mteja kuhifadhi trie nzima ya hali kwa bloku ya kichwa na bloku kadhaa za kihistoria (chaguo-msingi katika Geth ni kuweka data ya hali kwa bloku 128 nyuma ya kichwa). Hii inahitaji wateja kuwa na ufikiaji wa nafasi kubwa ya diski, ambayo ni kizuizi cha kuendesha nodi kamili kwenye maunzi ya bei nafuu, ya nguvu ndogo. Suluhisho la hili ni kusasisha trie ya hali iwe muundo wenye ufanisi zaidi (mti wa Verkle) unaoweza kufupishwa kwa kutumia \"ushahidi\" mdogo kwa data unaoweza kushirikiwa badala ya data kamili ya hali. Kupanga upya data ya hali kuwa mti wa Verkle ni hatua ya mwanzo ya kuelekea kwa wateja wasio na hali. - ## Ushahidi ni nini na kwa nini tunauhitaji? {#what-is-a-witness} @@ -34,7 +33,6 @@ Chini ya mpango wa ahadi ya polinomiali, shahidi wana ukubwa unaoweza kudhibitiw Ukubwa wa ushahidi hutofautiana kulingana na idadi ya majani inayojumuisha. Tukichukulia kuwa ushahidi unashughulikia majani 1000, ushahidi kwa trie ya Merkle utakuwa takriban MB 3.5 (tukichukulia viwango 7 vya trie). Ushahidi kwa data sawa katika mti wa Verkle (tukichukulia viwango 4 vya mti) utakuwa takriban kB 150 - **takriban 23x ndogo zaidi**. Upungufu huu wa ukubwa wa ushahidi utaruhusu shahidi wa wateja wasio na hali kuwa wadogo kwa kukubalika. Shahidi wa polinomiali ni kB 0.128 - 1 kulingana na ahadi maalum ya polinomiali inayotumiwa. - ## Muundo wa mti wa Verkle ni upi? {#what-is-the-structure-of-a-verkle-tree} diff --git a/public/content/translations/sw/staking/pools/index.md b/public/content/translations/sw/staking/pools/index.md index 88309afc330..5fb2b4b70c7 100644 --- a/public/content/translations/sw/staking/pools/index.md +++ b/public/content/translations/sw/staking/pools/index.md @@ -68,14 +68,16 @@ Sasa! Uboreshaji wa mtandao wa Shanghai/Capella ulifanyika Aprili 2023, na ulian Vinginevyo, mabwawa yanayotumia tokeni ya staking ya ERC-20 huruhusu watumiaji kufanya biashara ya tokeni hii katika soko huria, kukuruhusu kuuza nafasi yako ya staking, kuondoa kwa ufanisi bila kuondoa ETH kutoka kwa mkataba wa staking. -Maelezo zaidi kuhusu utoaji wa hisa zilizosimamishwa +Maelezo zaidi kuhusu utoaji wa hisa zilizosimamishwa + Kuna mfanano mwingi kati ya chaguo hizi za mabwawa ya kusimamisha hisa na exchange zisizogatuliwa, kama vile uwezo wa kusimamisha kiasi kidogo cha ETH na kuzikusanya pamoja ili kuwezesha wathibitishaji. Tofauti na exchange mkusanyo, chaguo zingine nyingi za pooled staking zilizojumuishwa hutumia kandarasi mahiri na/au tokeni za staking, ambazo kwa kawaida ni tokeni za ERC-20 ambazo zinaweza kuwekwa kwenye pochi yako, na kununuliwa au kuuzwa kama tokeni nyingine yoyote. Hii inatoa safu ya mamlaka na usalama kwa kukupa udhibiti wa tokeni zako, lakini bado haikupi udhibiti wa moja kwa moja wa mteja ya kudhibitisha kwa nyuma. -Baadhi ya chaguzi za kuunganisha zimegatuliwa zaidi kuliko zingine linapokuja suala la nodi zinazoziunga mkono. Ili kukuza afya na ugatuaji wa mtandao, wadau wanahimizwa kila mara kuchagua huduma ya kuunganisha ambayo inawezesha seti ya ugatuzi isiyo na ruhusa ya waendeshaji wa nodi. +Baadhi ya chaguzi za kuunganisha zimegatuliwa zaidi kuliko zingine linapokuja suala la nodi zinazoziunga mkono. Ili kukuza afya na ugatuaji wa mtandao, wadau wanahimizwa kila mara kuchagua huduma ya kuunganisha ambayo inawezesha seti ya ugatuzi isiyo na ruhusa ya waendeshaji wa nodi. + ## Masomo zaidi {#further-reading} diff --git a/public/content/translations/sw/staking/saas/index.md b/public/content/translations/sw/staking/saas/index.md index dd57316a148..4d5d77a3386 100644 --- a/public/content/translations/sw/staking/saas/index.md +++ b/public/content/translations/sw/staking/saas/index.md @@ -70,21 +70,24 @@ Kusasisha kitambulisho cha uondoaji ni hatua inayohitajika ili kuwezesha uondoaj Hakikisha unahifadhi nakala ya kifungu hiki cha mbegu (seed phrase) kwa usalama, la sivyo hutaweza kutengeneza funguo zako za kutoa wakati utakapofika. -\*Wawekezaji waliotoa anwani ya kutoa pamoja na amana ya awali hawahitaji kuiweka hii. Wasiliana na mtoa huduma wako wa SaaS kwa usaidizi kuhusu jinsi ya kuandaa kithibitishaji chako. +\*Wawekezaji waliotoa anwani ya kutoa pamoja na amana ya awali hawahitaji kuiweka hii. Wasiliana na mtoa huduma wako wa SaaS kwa usaidizi kuhusu jinsi ya kuandaa kithibitishaji chako. + Wawekezaji wanahitaji kutoa anwani ya kutoa (ikiwa haikutolewa kwenye amana ya awali), na malipo ya zawadi yataanza kusambazwa kiotomatiki mara kwa mara kila baada ya siku chache. Vithibitishaji vinaweza pia kuondoka kikamilifu kama kithibitishaji, ambacho kitafungua salio lao la ETH lililosalia kwa uondoaji. Akaunti ambazo zimetoa anwani ya uondoaji wa utekelezaji na kukamilisha mchakato wa kuondoka zitapokea salio lao lote kwenye anwani ya uondoaji iliyotolewa wakati wa kufagia kwa kiidhinishi kinachofuata. -Maelezo zaidi kuhusu utoaji wa hisa zilizosimamishwa +Maelezo zaidi kuhusu utoaji wa hisa zilizosimamishwa + Kwa kutumia mtoaji wa SaaS, unakabidhi utendakazi wa nodi yako kwa mtu mwingine. Hii inakuja na hatari ya utendaji duni wa nodi, ambayo haiko katika udhibiti wako. Iwapo kiidhinishi chako kitapunguzwa, salio lako la kiidhinishi litaadhibiwa na kuondolewa kwa lazima kutoka kwa kundi la waidhinishaji. Baada ya kukamilisha mchakato wa kufyeka/kutoka, fedha hizi zitahamishiwa kwenye anwani ya uondoaji iliyotolewa kwa kiidhinisha. Hii inahitaji kutoa anwani ya uondoaji ili kuwezesha. Hii inaweza kuwa imetolewa kwenye amana ya awali. Ikiwa sivyo, funguo za uondoaji za kiidhishi zitahitajika kutumiwa kutia saini ujumbe unaotangaza anwani ya uondoaji. ChatGPT said:Iwapo hakuna anwani ya kutoa iliyotolewa, fedha zitasalia zimefungwa hadi itakapowekwa. -Wasiliana na mtoa huduma mahususi wa SaaS kwa maelezo zaidi kuhusu dhamana au chaguo zozote za bima, na kwa maagizo ya jinsi ya kutoa anwani ya uondoaji. Iwapo ungependa kuwa na udhibiti kamili wa mpangilio wako wa mthibitishaji, [jifunze zaidi kuhusu jinsi ya kuwekeza ETH yako peke yako](/staking/solo/). +Wasiliana na mtoa huduma mahususi wa SaaS kwa maelezo zaidi kuhusu dhamana au chaguo zozote za bima, na kwa maagizo ya jinsi ya kutoa anwani ya uondoaji. Iwapo ungependa kuwa na udhibiti kamili wa mpangilio wako wa mthibitishaji, [jifunze zaidi kuhusu jinsi ya kuwekeza ETH yako peke yako](/staking/solo/). + ## Masomo zaidi {#further-reading} diff --git a/public/content/translations/sw/staking/solo/index.md b/public/content/translations/sw/staking/solo/index.md index 47c1b522837..631612e229c 100644 --- a/public/content/translations/sw/staking/solo/index.md +++ b/public/content/translations/sw/staking/solo/index.md @@ -43,17 +43,20 @@ Ingawa tunatamani kuweka hisa nyumbani kungekuwa rahisi kufikiwa na bila hatari Unapoendesha nodi yako mwenyewe unapaswa kutumia muda kujifunza jinsi ya kutumia programu uliyochagua. Hii inahusisha kusoma nyaraka husika na kuwa makini na njia za mawasiliano za timu hizo za wasanidi programu. -Kadri unavyoelewa zaidi kuhusu programu unayoendesha na jinsi uthibitisho wa hisa unavyofanya kazi, ndivyo hatari inavyopungua kwako kama mweka hisa, na itakuwa rahisi zaidi kurekebisha matatizo yoyote yanayoweza kutokea ukiwa mwendeshaji wa nodi. +Kadri unavyoelewa zaidi kuhusu programu unayoendesha na jinsi uthibitisho wa hisa unavyofanya kazi, ndivyo hatari inavyopungua kwako kama mweka hisa, na itakuwa rahisi zaidi kurekebisha matatizo yoyote yanayoweza kutokea ukiwa mwendeshaji wa nodi. + Usanidi wa nodi unahitaji kiwango cha kuridhisha cha umahiri unapofanya kazi na kompyuta, ingawa zana mpya zinafanya hili kuwa rahisi zaidi kadri muda unavyopita. Uelewa wa kiolesura cha mstari wa amri ni msaada, lakini sasa si sharti kabisa. -Pia inahitaji usanidi wa msingi sana wa maunzi, na uelewa fulani wa vipimo vya chini vinavyopendekezwa. +Pia inahitaji usanidi wa msingi sana wa maunzi, na uelewa fulani wa vipimo vya chini vinavyopendekezwa. + Kama vile funguo za faragha zinavyolinda anwani yako ya Ethereum, utahitaji kutengeneza funguo mahususi kwa ajili ya mthibitishaji chako. Lazima uelewe jinsi ya kuweka vifungu vyovyote vya maneno ya mbegu au funguo za faragha salama na vilivyolindwa. -[Usalama wa Ethereum na kuzuia utapeli](/security/) +[Usalama wa Ethereum na kuzuia utapeli](/security/) + Wakati mwingine maunzi hushindwa kufanya kazi, miunganisho ya mtandao hukatika, na programu ya mteja wakati mwingine inahitaji kusasishwa. Matengenezo ya nodi hayaepukiki na mara kwa mara yatahitaji umakini wako. Utataka kuhakikisha kuwa unafahamu masasisho yoyote ya mtandao yanayotarajiwa, au masasisho mengine muhimu ya mteja. @@ -66,7 +69,9 @@ Zawadi zako zinalingana na muda ambao mthibitishaji wako yuko mtandaoni na anath Tofauti na adhabu za kutokuwa amilifu kwa kuwa nje ya mtandao, slashing ni adhabu kali zaidi iliyohifadhiwa kwa makosa ya nia mbaya. Kwa kuendesha mteja wa wachache na funguo zako zikiwa zimepakiwa kwenye mashine moja tu kwa wakati mmoja, hatari yako ya kupata adhabu ya slashing inapunguzwa. Hata hivyo, waweka hisa wote lazima wafahamu hatari za slashing. - Zaidi kuhusu slashing na mzunguko wa maisha wa mthibitishaji + Zaidi kuhusu slashing na mzunguko wa maisha wa mthibitishaji + + @@ -125,7 +130,6 @@ Haya ni baadhi ya maswali ya kawaida kuhusu kuweka staking ambayo yanafaa kujua. Mthibitishaji ni huluki pepe inayoishi kwenye Ethereum na inashiriki katika makubaliano ya itifaki ya Ethereum. Wathibitishaji wanawakilishwa na salio, ufunguo wa umma, na sifa nyinginezo. Mteja wa mthibitishaji ni programu inayofanya kazi kwa niaba ya mthibitishaji kwa kushikilia na kutumia ufunguo wake wa faragha. Mteja mmoja wa mthibitishaji anaweza kushikilia jozi nyingi za funguo, akidhibiti wathibitishaji wengi. - @@ -137,14 +141,16 @@ Bafa hii huzuia pia salio linalofaa kushuka hadi lipite 0.25 ETH chini ya salio Kila jozi ya funguo inayohusishwa na mthibitishaji inahitaji angalau 32 ETH ili kuamilishwa. Salio lolote lililo juu ya hili linaweza kutolewa kwa anwani husika ya uondoaji wakati wowote kupitia muamala uliotiwa saini na anwani hii. Fedha zozote zilizo juu ya salio la juu la ufanisi zitatolewa kiotomatiki mara kwa mara. -Ikiwa uwekaji hisa nyumbani unaonekana kuwa mgumu sana kwako, zingatia kutumia mtoa huduma wa [kuweka-hisa-kama-huduma](/staking/saas/), au ikiwa unafanya kazi na chini ya 32 ETH, angalia [mabwawa ya kuweka hisa](/staking/pools/). +Ikiwa uwekaji hisa nyumbani unaonekana kuwa mgumu sana kwako, zingatia kutumia mtoa huduma wa [kuweka-hisa-kama-huduma](/staking/saas/), au ikiwa unafanya kazi na chini ya 32 ETH, angalia [mabwawa ya kuweka hisa](/staking/pools/). + Kuwa nje ya mtandao wakati mtandao unakamilisha ipasavyo HAKUTAsababisha slashing. Adhabu ndogo za kutokuwa amilifu hutokea ikiwa mthibitishaji wako hapatikani ili kuthibitisha kwa kipindi fulani (kila dakika 6.4), lakini hii ni tofauti sana na slashing. Adhabu hizi ni pungufu kidogo kuliko zawadi ambayo ungepata ikiwa mthibitishaji angepatikana ili kuthibitisha, na hasara inaweza kurudishwa kwa takriban muda sawa wa kuwa mtandaoni tena. Kumbuka kuwa adhabu za kutokuwa amilifu zinalingana na idadi ya wathibitishaji walio nje ya mtandao kwa wakati mmoja. Katika hali ambapo sehemu kubwa ya mtandao iko nje ya mtandao mara moja, adhabu kwa kila mmoja wa wathibitishaji hawa itakuwa kubwa kuliko wakati mthibitishaji mmoja hayupo. -Katika hali mbaya zaidi ikiwa mtandao utaacha kukamilisha kwa sababu zaidi ya theluthi moja ya wathibitishaji kuwa nje ya mtandao, watumiaji hawa watapata kile kinachojulikana kama uvujaji wa kutokuwa amilifu wa kwadrotiki, ambao ni upungufu mkubwa wa ETH kutoka kwa akaunti za wathibitishaji walio nje ya mtandao. Hii inawezesha mtandao hatimaye kujiponya kwa kuchoma ETH ya wathibitishaji wasio amilifu hadi salio lao lifikie 16 ETH, ambapo watatolewa kiotomatiki kutoka kwenye bwawa la wathibitishaji. Wathibitishaji waliosalia mtandaoni hatimaye watajumuisha zaidi ya 2/3 ya mtandao tena, wakitimiza wingi mkubwa unaohitajika ili kukamilisha mnyororo tena. +Katika hali mbaya zaidi ikiwa mtandao utaacha kukamilisha kwa sababu zaidi ya theluthi moja ya wathibitishaji kuwa nje ya mtandao, watumiaji hawa watapata kile kinachojulikana kama uvujaji wa kutokuwa amilifu wa kwadrotiki, ambao ni upungufu mkubwa wa ETH kutoka kwa akaunti za wathibitishaji walio nje ya mtandao. Hii inawezesha mtandao hatimaye kujiponya kwa kuchoma ETH ya wathibitishaji wasio amilifu hadi salio lao lifikie 16 ETH, ambapo watatolewa kiotomatiki kutoka kwenye bwawa la wathibitishaji. Wathibitishaji waliosalia mtandaoni hatimaye watajumuisha zaidi ya 2/3 ya mtandao tena, wakitimiza wingi mkubwa unaohitajika ili kukamilisha mnyororo tena. + Kwa ufupi, hili haliwezi kuhakikishwa kikamilifu, lakini ukitenda kwa nia njema, ukaendesha mteja wa wachache na kuweka tu funguo zako za kutia saini kwenye mashine moja kwa wakati, hatari ya kupata adhabu ya slashing ni karibu sifuri. @@ -166,14 +172,16 @@ Wateja binafsi wanaweza kutofautiana kidogo katika suala la utendakazi na kioles Kwa kuwa wateja wote wa uzalishaji hutoa utendakazi sawa wa kimsingi, kwa kweli ni muhimu sana uchague mteja wa wachache, kumaanisha mteja yeyote ambaye HATUMIWI kwa sasa na wathibitishaji wengi kwenye mtandao. Hili linaweza kuonekana kuwa lisiloeleweka, lakini kuendesha mteja wa walio wengi au walio wengi zaidi kunakuweka kwenye hatari kubwa ya kupata adhabu ya slashing iwapo kuna hitilafu kwa mteja huyo. Kuendesha mteja wa wachache kunapunguza hatari hizi kwa kiasi kikubwa. -Jifunze zaidi kwa nini utofauti wa wateja ni muhimu sana +Jifunze zaidi kwa nini utofauti wa wateja ni muhimu sana + Ingawa seva pepe ya kibinafsi (VPS) inaweza kutumika kama mbadala wa maunzi ya nyumbani, ufikiaji halisi na eneo la mteja wako mthibiti ni muhimu. Suluhisho za wingu za kati kama vile Amazon Web Services au Digital Ocean huruhusu urahisi wa kutolazimika kupata na kuendesha maunzi, kwa gharama ya kuweka mtandao katikati. Kadiri wateja wathibitishaji wengi wanavyoendeshwa kwenye suluhisho moja la hifadhi ya wingu la kati, ndivyo inavyokuwa hatari zaidi kwa watumiaji hawa. Tukio lolote linalowatoa watoa huduma hawa nje ya mtandao, iwe kwa shambulio, madai ya udhibiti, au kukatika kwa umeme/mtandao, litasababisha kila mteja mthibitishaji anayetegemea seva hii kwenda nje ya mtandao kwa wakati mmoja. -Adhabu za nje ya mtandao ni sawia na watu wengine wangapi wako nje ya mtandao kwa wakati mmoja. Kutumia VPS huongeza sana hatari kwamba adhabu za nje ya mtandao zitakuwa kali zaidi, na huongeza hatari yako ya kuvuja kwa kwadrotiki au slashing endapo kukatika ni kubwa vya kutosha. Ili kupunguza hatari yako mwenyewe, na hatari kwa mtandao, watumiaji wanahimizwa sana kupata na kuendesha maunzi yao wenyewe. +Adhabu za nje ya mtandao ni sawia na watu wengine wangapi wako nje ya mtandao kwa wakati mmoja. Kutumia VPS huongeza sana hatari kwamba adhabu za nje ya mtandao zitakuwa kali zaidi, na huongeza hatari yako ya kuvuja kwa kwadrotiki au slashing endapo kukatika ni kubwa vya kutosha. Ili kupunguza hatari yako mwenyewe, na hatari kwa mtandao, watumiaji wanahimizwa sana kupata na kuendesha maunzi yao wenyewe. + @@ -185,7 +193,8 @@ Baada ya vitambulisho vya kujiondoa vimewekwa, malipo ya zawadi (ETH yaliyokusan Ili kufungua na kupokea salio lako lote lazima pia ukamilishe mchakato wa kuondoka kwenye kiidhinishi chako. -Maelezo zaidi kuhusu utoaji wa hisa zilizosimamishwa +Maelezo zaidi kuhusu utoaji wa hisa zilizosimamishwa + ## Masomo zaidi {#further-reading} diff --git a/public/content/translations/sw/staking/withdrawals/index.md b/public/content/translations/sw/staking/withdrawals/index.md index 2fc8b58c9ef..b2767701410 100644 --- a/public/content/translations/sw/staking/withdrawals/index.md +++ b/public/content/translations/sw/staking/withdrawals/index.md @@ -42,7 +42,8 @@ Kutoa anwani ya uondoaji ni hatua inayohitajika kwa akaunti yoyote ya validator -Kila akaunti ya mthibitishaji inaweza tu kupewa anwani moja ya uondoaji, mara moja. Mara tu anwani inapochaguliwa na kuwasilishwa kwenye safu ya makubaliano, hii haiwezi kutenduliwa au kubadilishwa tena. Hakiki maradufu umiliki na usahihi wa anwani iliyotolewa kabla ya kuwasilisha. + +Kila akaunti ya mthibitishaji inaweza tu kupewa anwani moja ya uondoaji, mara moja. Mara tu anwani inapochaguliwa na kuwasilishwa kwenye safu ya makubaliano, hii haiwezi kutenduliwa au kubadilishwa tena. Hakiki maradufu umiliki na usahihi wa anwani iliyotolewa kabla ya kuwasilisha. @@ -137,7 +138,8 @@ title="Mara tu nitakapotoa anwani ya uondoaji, naweza kuibadilisha na anwani mba eventCategory="FAQ" eventAction="Once I have provided a withdrawal address, can I change it to an alternative withdrawal address?" eventName="read more"> -Hapana, mchakato wa kutoa stakabadhi za uondoaji ni wa mara moja tu, na hauwezi kubadilishwa baada ya kuwasilishwa. +Hapana, mchakato wa kutoa stakabadhi za uondoaji ni wa mara moja tu, na hauwezi kubadilishwa baada ya kuwasilishwa. + +Kama mbadala wa kubadilisha anwani ya uondoaji kwa mthibitishaji fulani, watumiaji wanaweza kuchagua kuweka mkataba-erevu kama anwani yao ya uondoaji ambayo inaweza kushughulikia uzungushaji wa funguo, kama vile Safe. Watumiaji wanaoweka fedha zao kwenye EOA zao wenyewe wanaweza kutoka kikamilifu ili kutoa fedha zao zote zilizowekwa hisa, na kisha kuweka hisa tena kwa kutumia stakabadhi mpya. + Ikiwa wewe ni sehemu ya [bwawa la staking](/staking/pools/) au unamiliki tokeni za staking, unapaswa kuwasiliana na mtoa huduma wako kwa maelezo zaidi kuhusu jinsi uondoaji wa staking unavyoshughulikiwa, kwani kila huduma hufanya kazi tofauti. Kwa ujumla, watumiaji wanapaswa kuwa huru kudai ETH yao ya msingi iliyowekwa hisa, au kubadilisha mtoa huduma wa staking wanayemtumia. Ikiwa bwawa fulani linakuwa kubwa sana, fedha zinaweza kutolewa, kukombolewa, na kuwekwa hisa tena na mtoa huduma mdogo. Au, ikiwa umekusanya ETH ya kutosha unaweza [kuweka hisa kutoka nyumbani](/staking/solo/). - -Ndiyo, mradi tu mthibitishaji wako ametoa anwani ya uondoaji. Hii lazima itolewe mara moja ili kuwezesha uondoaji wowote, kisha malipo ya zawadi yataanzishwa kiotomatiki kila baada ya siku chache kwa kila ufagiaji wa mthibitishaji. +Ndiyo, mradi tu mthibitishaji wako ametoa anwani ya uondoaji. Hii lazima itolewe mara moja ili kuwezesha uondoaji wowote, kisha malipo ya zawadi yataanzishwa kiotomatiki kila baada ya siku chache kwa kila ufagiaji wa mthibitishaji. + Hapana, ikiwa mthibitishaji wako bado anafanya kazi kwenye mtandao, uondoaji kamili hautafanyika kiotomatiki. Hii inahitaji kuanzisha mwenyewe kujiondoa kwa hiari. Mara tu mthibitishaji anapokamilisha mchakato wa kutoka, na kwa kuchukulia kuwa akaunti ina stakabadhi za uondoaji, salio lililobaki litatolewa wakati wa ufagiaji wa mthibitishaji unaofuata. - Uondoaji umeundwa kusukumwa kiotomatiki, ukihamisha ETH yoyote ambayo haichangii kikamilifu kwenye hisa. Hii inajumuisha salio kamili kwa akaunti ambazo zimekamilisha mchakato wa kutoka. -Haiwezekani kuomba mwenyewe kiasi maalum cha ETH kitolewe. +Haiwezekani kuomba mwenyewe kiasi maalum cha ETH kitolewe. + Waendeshaji wa vithibitishaji wanapendekezwa kutembelea ukurasa wa Staking Launchpad Withdrawals ambapo utapata maelezo zaidi kuhusu jinsi ya kuandaa mthibitishaji wako kwa ajili ya uondoaji, muda wa matukio, na maelezo zaidi kuhusu jinsi uondoaji unavyofanya kazi. Ili kujaribu usanidi wako kwenye testnet kwanza, tembelea Hoodi Testnet Staking Launchpad ili kuanza. - -Hapana. Mara tu mthibitishaji anapotoka na salio lake lote limetolewa, fedha zozote za ziada zilizowekwa kwa mthibitishaji huyo zitahamishiwa kiotomatiki kwenye anwani ya uondoaji wakati wa ufagiaji wa mthibitishaji unaofuata. Ili kuweka hisa tena ETH, mthibitishaji mpya lazima aamilishwe. +Hapana. Mara tu mthibitishaji anapotoka na salio lake lote limetolewa, fedha zozote za ziada zilizowekwa kwa mthibitishaji huyo zitahamishiwa kiotomatiki kwenye anwani ya uondoaji wakati wa ufagiaji wa mthibitishaji unaofuata. Ili kuweka hisa tena ETH, mthibitishaji mpya lazima aamilishwe. + ## Masomo zaidi {#further-reading} diff --git a/public/content/translations/sw/web3/index.md b/public/content/translations/sw/web3/index.md index 69d8d6fdd6a..937c1186d05 100644 --- a/public/content/translations/sw/web3/index.md +++ b/public/content/translations/sw/web3/index.md @@ -69,7 +69,8 @@ Web3 inaruhusu umiliki wa moja kwa moja kupitia [tokeni zisizoweza kubadilishwa -
    Pata maelezo zaidi kuhusu NFT
    +
    Pata maelezo zaidi kuhusu NFT +
    Zaidi kuhusu NFTs @@ -97,7 +98,8 @@ Hata hivyo, watu wengi hueleza jamii nyingi za wavuti wa 3 kama mashirika gatuzi -
    Pata maelezo zaidi kuhusu DAO
    +
    Pata maelezo zaidi kuhusu DAO +
    Zaidi kuhusu DAOs diff --git a/public/content/translations/sw/what-are-apps/index.md b/public/content/translations/sw/what-are-apps/index.md index 4ffffe62a93..23e1c2cc6a3 100644 --- a/public/content/translations/sw/what-are-apps/index.md +++ b/public/content/translations/sw/what-are-apps/index.md @@ -51,7 +51,6 @@ summary: Programu zinazojengwa kwenye Ethereum ni bure, za kimataifa na zinatumi
    ''!['',./developers-eth-blocks.png].'' -
    ## ''Programu za Ethereum ni kama lego{#ethereum-apps-are-like-legos}.'' diff --git a/public/content/translations/sw/wrapped-eth/index.md b/public/content/translations/sw/wrapped-eth/index.md index 7b665d78da3..3cbfcf338be 100644 --- a/public/content/translations/sw/wrapped-eth/index.md +++ b/public/content/translations/sw/wrapped-eth/index.md @@ -1,6 +1,6 @@ --- title: Ether Iliyofungwa (WETH) ni nini -description: Utangulizi wa Ether Iliyofungwa (WETH)— kifungashio kinachotangamana na ERC20 cha ether (ETH). +description: "Utangulizi wa Ether Iliyofungwa (WETH)— kifungashio kinachotangamana na ERC20 cha ether (ETH)." lang: sw --- @@ -8,7 +8,8 @@ lang: sw -
    Unganisha mkoba wako ili kufunga au kufungua ETH kwenye mnyororo wowote kwenye [WrapETH.com](https://www.wrapeth.com/)
    +
    Unganisha mkoba wako ili kufunga au kufungua ETH kwenye mnyororo wowote kwenye [WrapETH.com](https://www.wrapeth.com/) +
    Ether (ETH) ndiyo sarafu kuu ya Ethereum. Hutumika kwa madhumuni kadhaa kama vile kuweka hisa, kama sarafu, na kulipia ada za gesi kwa ajili ya kukokotoa. **WETH kwa hakika ni mfumo ulioboreshwa wa ETH wenye utendakazi fulani wa ziada unaohitajika na programu nyingi na [tokeni za ERC-20](/glossary/#erc-20)**, ambazo ni aina zingine za mali za kidijitali kwenye Ethereum. Ili kufanya kazi na tokeni hizi, ETH lazima ifuate sheria sawa na zinazofuatwa, zinazojulikana kama kiwango cha ERC-20. @@ -40,19 +41,16 @@ Unaweza kufungua WETH na kupata ETH kwa kutumia mkataba-erevu wa WETH. Unaweza k Unalipa ada za gesi ili kufunga au kufungua ETH ukitumia mkataba wa WETH. - WETH kwa ujumla inachukuliwa kuwa salama kwa sababu inategemea mkataba-erevu rahisi na uliothibitishwa kivita. Mkataba wa WETH pia umethibitishwa rasmi, ambao ndio kiwango cha juu zaidi cha usalama kwa mikataba-erevu kwenye Ethereum. - Kando na [utekelezaji mkuu wa WETH](https://etherscan.io/token/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2) ulioelezewa kwenye ukurasa huu, kuna anuwai zingine zinazotumika. Hizi zinaweza kuwa tokeni maalum zilizoundwa na wasanidi programu au matoleo yaliyotolewa kwenye minyororo mingine ya bloku, na zinaweza kuwa na tabia tofauti au kuwa na sifa tofauti za usalama. **Kagua mara mbili habari za tokeni kila wakati ili kujua ni utekelezaji upi wa WETH unaoingiliana nao.** - @@ -60,7 +58,6 @@ Kando na [utekelezaji mkuu wa WETH](https://etherscan.io/token/0xc02aaa39b223fe8 - [Mtandao Mkuu wa Ethereum](https://etherscan.io/token/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) - [Arbitrum](https://arbiscan.io/token/0x82af49447d8a07e3bd95bd0d56f35241523fbab1) - [Optimism](https://optimistic.etherscan.io/token/0x4200000000000000000000000000000000000006) - ## Masomo zaidi {#further-reading} diff --git a/public/content/translations/sw/zero-knowledge-proofs/index.md b/public/content/translations/sw/zero-knowledge-proofs/index.md index 808646c503f..8d657d79d8a 100644 --- a/public/content/translations/sw/zero-knowledge-proofs/index.md +++ b/public/content/translations/sw/zero-knowledge-proofs/index.md @@ -59,8 +59,8 @@ Uthibitisho wa maarifa-sifuri ni muhimu hasa katika muktadha wa [utambulisho uli

    Jifunze zaidi kuhusu NDI ya Bhutan katika utafiti kifani wa Utambulisho Uliogatuliwa.

    - -
    + +
    ### Uthibitisho wa Ubinadamu {#proof-of-humanity} From 3898a01b95be12b6ac81121cb585df8a3ca11f2b Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 13 Feb 2026 12:41:37 +0000 Subject: [PATCH 4/7] fix(i18n): run sanitizer on sw translations --- public/content/translations/sw/about/index.md | 2 +- .../translations/sw/ai-agents/index.md | 9 ++++--- .../translations/sw/community/grants/index.md | 3 +-- .../translations/sw/community/online/index.md | 25 ++++++++++++++++--- .../sw/community/research/index.md | 2 +- .../adding-desci-projects/index.md | 4 +-- .../adding-glossary-terms/index.md | 2 +- .../sw/contributing/adding-layer-2s/index.md | 2 +- .../sw/contributing/adding-products/index.md | 4 +-- .../sw/contributing/adding-resources/index.md | 8 +++--- .../adding-staking-products/index.md | 2 +- .../sw/contributing/adding-wallets/index.md | 4 +-- .../translatathon/details/index.md | 2 +- .../translatathon/index.md | 2 +- public/content/translations/sw/dao/index.md | 4 +-- public/content/translations/sw/defi/index.md | 3 +-- .../docs/consensus-mechanisms/pow/index.md | 2 +- .../consensus-mechanisms/pow/mining/index.md | 2 +- .../pow/mining/mining-algorithms/index.md | 2 +- .../docs/smart-contracts/languages/index.md | 18 +++++++++++++ .../docs/standards/tokens/erc-1363/index.md | 2 +- .../docs/standards/tokens/erc-20/index.md | 2 +- .../docs/standards/tokens/erc-223/index.md | 2 +- .../docs/standards/tokens/erc-721/index.md | 2 +- .../erc-721-vyper-annotated-code/index.md | 1 + .../index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../index.md | 4 ++- .../index.md | 2 +- .../secure-development-workflow/index.md | 2 +- .../index.md | 2 +- .../developers/tutorials/short-abi/index.md | 2 +- .../index.md | 2 +- .../token-integration-checklist/index.md | 2 +- .../uniswap-v2-annotated-code/index.md | 3 +-- .../tutorials/using-websockets/index.md | 2 +- .../translations/sw/eth/supply/index.md | 2 +- .../index.md | 3 +-- .../how-to-revoke-token-access/index.md | 3 +-- .../sw/guides/how-to-swap-tokens/index.md | 3 +-- .../sw/guides/how-to-use-a-bridge/index.md | 3 +-- .../sw/guides/how-to-use-a-wallet/index.md | 3 +-- public/content/translations/sw/nft/index.md | 3 +-- .../content/translations/sw/payments/index.md | 15 +++++------ .../sw/prediction-markets/index.md | 2 ++ .../sw/real-world-assets/index.md | 2 +- .../sw/roadmap/merge/issuance/index.md | 6 +++++ .../translations/sw/staking/solo/index.md | 1 + public/content/translations/sw/web3/index.md | 6 ++--- .../translations/sw/what-are-apps/index.md | 2 +- .../translations/sw/wrapped-eth/index.md | 3 +-- 52 files changed, 116 insertions(+), 79 deletions(-) diff --git a/public/content/translations/sw/about/index.md b/public/content/translations/sw/about/index.md index 2ad7e949503..3eb1dd7f80a 100644 --- a/public/content/translations/sw/about/index.md +++ b/public/content/translations/sw/about/index.md @@ -20,7 +20,7 @@ lang: sw [Zaidi kuhusu Ethereum](/what-is-ethereum/) -[Zaidi kuhusu utawala wa Ethereum](/utawala/) +[Zaidi kuhusu utawala wa Ethereum](/governance/) ### Ether (ETH) {#ether-or-eth} diff --git a/public/content/translations/sw/ai-agents/index.md b/public/content/translations/sw/ai-agents/index.md index abcacc3b4e5..a6ec0ddfe15 100644 --- a/public/content/translations/sw/ai-agents/index.md +++ b/public/content/translations/sw/ai-agents/index.md @@ -4,9 +4,9 @@ metaTitle: Mawakala wa AI | Mawakala wa AI kwenye Ethereum description: Muhtasari wa mawakala wa AI kwenye Ethereum lang: sw template: use-cases -emoji: ":roboti:" +emoji: ":robot:" sidebarDepth: 2 -image: /picha/ai-mawakala/shujaa-picha.png +image: /images/ai-agents/hero-image.png alt: Watu walikusanyika kwenye jedwali la kituo summaryPoint1: AI ambayo inaingiliana na kiambajengo na inafanya biashara kwa kujitegemea summaryPoint2: Hudhibiti pochi na fedha zilizo kwenye mnyororo @@ -23,7 +23,7 @@ Hebu fikiria kupitia Ethereum ukitumia msaidizi wa AI anayesoma mwenendo wa soko Kwenye Ethereum, tunaona ubunifu wa mawakala wa AI kuanzia washawishi bandia na waundaji wa maudhui wanaojitegemea hadi majukwaa ya uchanganuzi wa soko katika wakati halisi, kuwawezesha watumiaji kwa kutoa maarifa, burudani na ufanisi wa utendaji. -## Mawakala wa AI ni nini? {#mawakala-ni-nini} +## Mawakala wa AI ni nini? {#what-are-ai-agents} Mawakala wa AI ni programu za kompyuta zinazotumia akili ya bandia kufanya kazi au kufanya maamuzi yako mwenyewe. Wanajifunza kutoka kwa data, kukabiliana na mabadiliko, na kushughulikia kazi ngumu. Wanafanya kazi bila kukoma na wanaweza kugundua fursa papo hapo. @@ -99,7 +99,7 @@ Tunaanza kuchunguza uwezo kamili wa mawakala wa AI, na miradi tayari inaboresha -## Pochi zinazodhibitiwa na wakala {#pochi-zinazodhibitiwa-wakala} +## Pochi zinazodhibitiwa na wakala {#agent-controlled-wallets} Mawakala kama Luna au AIXBT hudhibiti pochi yao ya mnyororo ([pochi ya AIXBT](https://clusters.xyz/aixbt), [pochi ya Luna](https://zapper.xyz/account/0x0d177181e3763b20d47dc3a72dd584368f shughuli za kiuchumi). @@ -111,6 +111,7 @@ Wakati wa kampeni ya kijamii ya Luna ya #LunaMuralChallenge, Luna alichagua na k

    Ni vizuri kujua

    Mawakala wa AI na zana zinazohusiana bado ziko katika maendeleo ya mapema na ni za majaribio sana—zinatumiwa kwa tahadhari.

    +
    ## Dhibiti pochi yako kwa kutumia amri za mazungumzo ya kidigitali {#control-your-wallet-using-chat-commands} diff --git a/public/content/translations/sw/community/grants/index.md b/public/content/translations/sw/community/grants/index.md index c18d94cb209..8f6eb689a1a 100644 --- a/public/content/translations/sw/community/grants/index.md +++ b/public/content/translations/sw/community/grants/index.md @@ -12,8 +12,7 @@ Orodha hii imepangwa na jamii yetu. Ikiwa kuna kitu kinakosekana au sio sahihi, -
    Waanzilishi, mnahitaji msaada kukuza biashara yenu? [Nenda kwenye Usaidizi kwa Waanzilishi](/founders/) -
    +
    Waanzilishi, mnahitaji msaada kukuza biashara yenu? [Nenda kwenye Usaidizi kwa Waanzilishi](/founders/)
    ## Mfumo mpana wa ikolojia ya Ethereum {#broad-ethereum-ecosystem} diff --git a/public/content/translations/sw/community/online/index.md b/public/content/translations/sw/community/online/index.md index 2130ef77a67..65ad2cc3d40 100644 --- a/public/content/translations/sw/community/online/index.md +++ b/public/content/translations/sw/community/online/index.md @@ -34,15 +34,34 @@ Ikiwa unaamini jumuiya inapaswa kuongezwa au kuondolewa kulingana na miongozo hi ## Mabaraza {#forums} -r/ethereum - mambo yote ya Ethereum r/ethfinance - upande wa kifedha wa Ethereum, ikiwemo DeFi r/ethdev - inalenga maendeleo ya Ethereum r/ethtrader - mitindo na uchambuzi wa soko r/ethstaker - karibu kwa wote wanaopenda kusimamisha kwenye Ethereum Fellowship of Ethereum Magicians - jumuiya inayolenga viwango vya kiufundi katika Ethereum Ethereum Stackexchange - majadiliano na msaada kwa wasanidi programu wa Ethereum Ethereum Research - ubao wa ujumbe wenye ushawishi mkubwa zaidi kwa utafiti wa kiuchumi-kripto +r/ethereum - mambo yote ya Ethereum +r/ethfinance - upande wa kifedha wa Ethereum, ikiwemo DeFi +r/ethdev - inalenga maendeleo ya Ethereum +r/ethtrader - mitindo na uchambuzi wa soko +r/ethstaker - karibu kwa wote wanaopenda kusimamisha kwenye Ethereum +Fellowship of Ethereum Magicians - jumuiya inayolenga viwango vya kiufundi katika Ethereum +Ethereum Stackexchange - majadiliano na msaada kwa wasanidi programu wa Ethereum +Ethereum Research - ubao wa ujumbe wenye ushawishi mkubwa zaidi kwa utafiti wa kiuchumi-kripto ## Vyumba vya mazungumzo {#chat-rooms} -Ethereum Cat Herders - jumuiya inayolenga kutoa usaidizi wa usimamizi wa miradi kwa maendeleo ya Ethereum Ethereum Hackers - Soga ya Discord inayoendeshwa na ETHGlobal: jumuiya ya mtandaoni kwa ajili ya wahandisi wa Ethereum kote ulimwenguni CryptoDevs - Jumuiya ya Discord inayolenga maendeleo ya Ethereum EthStaker Discord - mwongozo unaoendeshwa na jumuiya, elimu, usaidizi, na rasilimali kwa wasimamishaji waliopo na wanaotarajiwa Ethereum.org website team - pita na uzungumze kuhusu maendeleo na usanifu wa wavuti wa ethereum.org na timu na watu kutoka kwa jumuiya Matos Discord - jumuiya ya wabunifu wa web3 ambapo wajenzi, watu mashuhuri wa viwanda, na wapenzi wa Ethereum hukutana. Tunapenda sana maendeleo, usanifu, na utamaduni wa web3. Njoo ujenge nasi. Solidity Gitter - soga kwa ajili ya maendeleo ya solidity (Gitter) Solidity Matrix - soga kwa ajili ya maendeleo ya solidity (Matrix) Ethereum Stack Exchange - jukwaa la maswali na majibu Peera Community Forum - jukwaa la maswali na majibu lililogatuliwa +Ethereum Cat Herders - jumuiya inayolenga kutoa usaidizi wa usimamizi wa miradi kwa maendeleo ya Ethereum +Ethereum Hackers - Soga ya Discord inayoendeshwa na ETHGlobal: jumuiya ya mtandaoni kwa ajili ya wahandisi wa Ethereum kote ulimwenguni +CryptoDevs - Jumuiya ya Discord inayolenga maendeleo ya Ethereum +EthStaker Discord - mwongozo unaoendeshwa na jumuiya, elimu, usaidizi, na rasilimali kwa wasimamishaji waliopo na wanaotarajiwa +Ethereum.org website team - pita na uzungumze kuhusu maendeleo na usanifu wa wavuti wa ethereum.org na timu na watu kutoka kwa jumuiya +Matos Discord - jumuiya ya wabunifu wa web3 ambapo wajenzi, watu mashuhuri wa viwanda, na wapenzi wa Ethereum hukutana. Tunapenda sana maendeleo, usanifu, na utamaduni wa web3. Njoo ujenge nasi. +Solidity Gitter - soga kwa ajili ya maendeleo ya solidity (Gitter) +Solidity Matrix - soga kwa ajili ya maendeleo ya solidity (Matrix) +Ethereum Stack Exchange - jukwaa la maswali na majibu +Peera Community Forum - jukwaa la maswali na majibu lililogatuliwa ## YouTube na X (zamani Twitter) {#youtube-and-twitter} -Ethereum Foundation - Pata taarifa za hivi punde kutoka kwa Msingi wa Ethereum @ethereum - Akaunti kuu ya Ethereum kwa jumuiya @ethereumfndn - Akaunti rasmi ya Msingi wa Ethereum @ethdotorg - Lango la Ethereum, lililojengwa kwa ajili ya jumuiya yetu inayokua ya kimataifa +Ethereum Foundation - Pata taarifa za hivi punde kutoka kwa Msingi wa Ethereum +@ethereum - Akaunti kuu ya Ethereum kwa jumuiya +@ethereumfndn - Akaunti rasmi ya Msingi wa Ethereum +@ethdotorg - Lango la Ethereum, lililojengwa kwa ajili ya jumuiya yetu inayokua ya kimataifa diff --git a/public/content/translations/sw/community/research/index.md b/public/content/translations/sw/community/research/index.md index 0cffc5c6aa7..51ee910bdd9 100644 --- a/public/content/translations/sw/community/research/index.md +++ b/public/content/translations/sw/community/research/index.md @@ -28,7 +28,7 @@ Utafiti wa itifaki unahusika na safu ya msingi ya Ethereum - seti ya sheria zina ### Makubaliano -Utafiti wa makubaliano unahusika na [utaratibu wa uthibitisho wa hisa wa Ethereum](/developers/docs/conssensus-mechanisms/pos/). Baadhi ya Mifano ya Mada za Utafiti wa Makubaliano +Utafiti wa makubaliano unahusika na [utaratibu wa uthibitisho wa hisa wa Ethereum](/developers/docs/consensus-mechanisms/pos/). Baadhi ya Mifano ya Mada za Utafiti wa Makubaliano - Kutambua na Kufunga Mianya - Kukadiria Kiasi cha Usalama wa Uchumi wa Kripto diff --git a/public/content/translations/sw/contributing/adding-desci-projects/index.md b/public/content/translations/sw/contributing/adding-desci-projects/index.md index cf97c495d03..467443b73af 100644 --- a/public/content/translations/sw/contributing/adding-desci-projects/index.md +++ b/public/content/translations/sw/contributing/adding-desci-projects/index.md @@ -10,7 +10,7 @@ Tunataka kuhakikisha tunaonyesha miradi mbalimbali na kutoa picha nzuri ya mandh Mtu yeyote yuko huru kupendekeza mradi wa kuorodhesha kwenye ukurasa wa DeSci kwenye ethereum.org. Vile vile, mtu yeyote anayegundua mradi ambao hauhusiani tena au hautimizi tena vigezo vyetu vya kustahiki yuko huru kupendekeza uondoaji wake. -## Mfumo wa uamuzi{#the-decision-framework} +## Mfumo wa uamuzi {#the-decision-framework} ### Vigezo vya kujumuishwa: Mahitaji ya lazima {#the-must-haves} @@ -30,7 +30,7 @@ Mtu yeyote yuko huru kupendekeza mradi wa kuorodhesha kwenye ukurasa wa DeSci kw - **Ukaguzi wa wahusika wengine** - Bidhaa yako imekaguliwa kitaalamu kwa ajili ya udhaifu na mhusika mwingine anayeaminika. - **Mtu wa mawasiliano** - Mtu wa mawasiliano wa mradi (huyu anaweza kuwa mwakilishi kutoka DAO au jamii) atatusaidia sana kupata taarifa sahihi wakati mabadiliko yanapofanywa. Hii itaendelea kuhuisha ethereum.org ili iwe rahisi kusimamia wakati wa kukusanya taarifa za baadaye. -## Matengenezo{#maintenance} +## Matengenezo {#maintenance} Kama ni asili ya maji ya Ethereum, timu na bidhaa kuja na kwenda na uvumbuzi hutokea kila siku, hivyo tutaweza kufanya ukaguzi wa kawaida wa maudhui yetu ya: diff --git a/public/content/translations/sw/contributing/adding-glossary-terms/index.md b/public/content/translations/sw/contributing/adding-glossary-terms/index.md index f24f4d2f8f3..17db93f7a5e 100644 --- a/public/content/translations/sw/contributing/adding-glossary-terms/index.md +++ b/public/content/translations/sw/contributing/adding-glossary-terms/index.md @@ -8,7 +8,7 @@ description: "''Vigezo vyetu vya kuongeza maneno mapya kwenye kamusi ya ethereum ''Eneo hili hubadilika kila siku.''. ''Maneno mapya huingia mara kwa mara katika msamiati wa watumiaji wa Ethereum, na tunahitaji msaada wako kutoa marejeleo sahihi na ya kisasa kwa maneno yote yanayohusiana na Ethereum.''. Angalia [kamusi](/glossary/) ya sasa na tazama hapa chini ikiwa unataka kusaidia! -## Viwango{#criteria} +## Viwango {#criteria} ''Masharti mapya ya kamusi yatakaguliwa kwa kuzingatia vigezo ifuatavyo.'': diff --git a/public/content/translations/sw/contributing/adding-layer-2s/index.md b/public/content/translations/sw/contributing/adding-layer-2s/index.md index 5707e31621c..19fa32e25d9 100644 --- a/public/content/translations/sw/contributing/adding-layer-2s/index.md +++ b/public/content/translations/sw/contributing/adding-layer-2s/index.md @@ -18,7 +18,7 @@ lang: sw ''Tabaka la pili 2 ni dhana mpya na ya kusisimua kwa Ethereum.''. ''Tumejaribu kuunda mfumo wa haki wa kuzingatia kwenye ethereum.org, lakini vigezo vya kuorodhesha vitabadilika na kubadilika kadri muda unavyopita.''. -## Mfumo wa uamuzi{#decision-framework} +## Mfumo wa uamuzi {#decision-framework} ### Vigezo vya kujumuishwa: ya lazima {#criteria-for-inclusion-the-must-haves} diff --git a/public/content/translations/sw/contributing/adding-products/index.md b/public/content/translations/sw/contributing/adding-products/index.md index 4aad078eee2..75b666419d1 100644 --- a/public/content/translations/sw/contributing/adding-products/index.md +++ b/public/content/translations/sw/contributing/adding-products/index.md @@ -30,7 +30,7 @@ Kwa ujumla **ethereum.org inataka kutoa "uzoefu wa utangulizi usio na mshono" kw Hapa ni mfumo wetu wa uamuzi kwa undani zaidi. Hisi huru kutoa maoni au kupendekeza mabadiliko. -## Mfumo wa uamuzi{#decision-framework} +## Mfumo wa uamuzi {#decision-framework} ### Vigezo vya kujumuishwa: ya lazima {#criteria-for-inclusion-the-must-haves} @@ -78,7 +78,7 @@ Isipokuwa bidhaa ni maalum ili vinginevyo, kama alfabeti, bidhaa kuonyeshwa kuto Tafadhali pia rejelea [masharti yetu ya matumizi](/terms-of-use/). Taarifa juu ya ethereum.org hutolewa tu kwa madhumuni ya taarifa ya jumla. -## Matengenezo{#maintenance} +## Matengenezo {#maintenance} Kama ni asili ya maji ya Ethereum, timu na bidhaa kuja na kwenda na uvumbuzi hutokea kila siku, hivyo tutaweza kufanya ukaguzi wa kawaida wa maudhui yetu ya: diff --git a/public/content/translations/sw/contributing/adding-resources/index.md b/public/content/translations/sw/contributing/adding-resources/index.md index 981b906c766..0943e26d186 100644 --- a/public/content/translations/sw/contributing/adding-resources/index.md +++ b/public/content/translations/sw/contributing/adding-resources/index.md @@ -22,9 +22,9 @@ Kwa ujumla **ethereum.org inakusudia kutoa bila mshono ndani ya jambo uzoefu kwa - usahihi - matengenezo -## Mfumo wa uamuzi{#decision-framework} +## Mfumo wa uamuzi {#decision-framework} -### Viwango{#criteria} +### Viwango {#criteria} - \*\* Habari ya uaminifu na sahihi ya orodha \*\* - Orodha yoyote kupendekeza lazima kuja na habari ya uaminifu na sahihi. Bidhaa ambazo kudanganya habari kuondolewa. - \*\* mradi kazi \*\* - rasilimali inapaswa kudumisha na timu ya kazi ili kuhakikisha ubora na msaada kwa watumiaji. Rasilimali pitwa na wakati ni chini ya kuondolewa. @@ -33,7 +33,7 @@ Kwa ujumla **ethereum.org inakusudia kutoa bila mshono ndani ya jambo uzoefu kwa Tuna haki ya kuagiza bidhaa kulingana na athari zao. Bidhaa mpya kwa ujumla ongeza chini ya orodha isipokuwa vinginevyo maalum. -## Matengenezo{#maintenance} +## Matengenezo {#maintenance} Kama mazingira ya Ethereum inaendelea, tutaweza mara kwa mara maudhui yetu ili: @@ -44,7 +44,7 @@ Unaweza kusaidia kwa kuangalia na kujua. [Tengeneza toleo](https://github.com/et --- -## Ongeza rasilimali yako{#add-your-resource} +## Ongeza rasilimali yako {#add-your-resource} Kama unataka kuongeza rasilimali kwa ethereum.org na hukutana vigezo, kujenga suala juu ya Github. diff --git a/public/content/translations/sw/contributing/adding-staking-products/index.md b/public/content/translations/sw/contributing/adding-staking-products/index.md index fde881fcb6f..eede029167c 100644 --- a/public/content/translations/sw/contributing/adding-staking-products/index.md +++ b/public/content/translations/sw/contributing/adding-staking-products/index.md @@ -18,7 +18,7 @@ Kwa sasa orodha bidhaa na huduma za kuunganisha kwenye kurasa kufuatia: Uthibitisho wa hisa kwenye mlolongo wa mwangaza umekuwa ukifanya kazi tangu Desemba 1, 2020. Wakati kuunganisha bado ni mpya, sisi wamejaribu kujenga haki na uwazi mfumo kwa ajili kuzingatia ethereum.org lakini orodha vigezo mabadiliko na kuendeleza baada ya muda, na ni hatimaye kwa hiari ya ethereum.org Mtandao ya timu. -## Mfumo wa uamuzi{#the-decision-framework} +## Mfumo wa uamuzi {#the-decision-framework} Uamuzi wa orodha ya bidhaa kwenye ethereum.org si tegemezi juu ya sababu yeyote moja. Vigezo mbalimbali ni kuchukuliwa pamoja wakati wa kuamua kuorodhesha bidhaa au huduma. Kadiri zaidi ya vigezo hivi kutimizwa, ndivyo uwezekano zaidi kwenye orodha. diff --git a/public/content/translations/sw/contributing/adding-wallets/index.md b/public/content/translations/sw/contributing/adding-wallets/index.md index 1fa27712871..321f138a847 100644 --- a/public/content/translations/sw/contributing/adding-wallets/index.md +++ b/public/content/translations/sw/contributing/adding-wallets/index.md @@ -16,7 +16,7 @@ Kwa sasa pochi zimeorodheshwa kwenye: Pochi za kidijitali hubadilika kwa haraka sana kwenye Ethereum. ''Tumejaribu kuunda mfumo wa haki wa kuzingatia kwenye ethereum.org, lakini vigezo vya kuorodhesha vitabadilika na kubadilika kadri muda unavyopita.''. -## Mfumo wa uamuzi{#the-decision-framework} +## Mfumo wa uamuzi {#the-decision-framework} ### Vigezo vya kujumuishwa: Mahitaji ya lazima {#the-must-haves} @@ -66,7 +66,7 @@ Kama unataka kuongeza pochi kwenye ethereum.org, tengeneza suala kwenye Github. Unda suala -## Matengenezo{#maintenance} +## Matengenezo {#maintenance} Kama ni asili ya maji ya Ethereum, timu na bidhaa kuja na kwenda na uvumbuzi hutokea kila siku, hivyo tutaweza kufanya ukaguzi wa kawaida wa maudhui yetu ya: diff --git a/public/content/translations/sw/contributing/translation-program/translatathon/details/index.md b/public/content/translations/sw/contributing/translation-program/translatathon/details/index.md index 6735f371a60..6fd972513e8 100644 --- a/public/content/translations/sw/contributing/translation-program/translatathon/details/index.md +++ b/public/content/translations/sw/contributing/translation-program/translatathon/details/index.md @@ -1,7 +1,7 @@ --- title: Maelezo na sheria lang: sw -template: Tafsirithoni +template: translatathon --- ![](./participate.png) diff --git a/public/content/translations/sw/contributing/translation-program/translatathon/index.md b/public/content/translations/sw/contributing/translation-program/translatathon/index.md index b53bb956238..5de4c68edeb 100644 --- a/public/content/translations/sw/contributing/translation-program/translatathon/index.md +++ b/public/content/translations/sw/contributing/translation-program/translatathon/index.md @@ -1,7 +1,7 @@ --- title: Translatathon ya ethereum.org ya 2025 lang: sw -template: Marathoni ya tafsiri +template: translatathon --- diff --git a/public/content/translations/sw/dao/index.md b/public/content/translations/sw/dao/index.md index 00220054911..fe2613076c8 100644 --- a/public/content/translations/sw/dao/index.md +++ b/public/content/translations/sw/dao/index.md @@ -70,9 +70,7 @@ Kuna mambo mengi ya kuzingatia unapo tawala DAO, kama vile upigaji kura na kazi Ujumbe ni kama DAO toleo la wajumbe kidemokrasia. Wamiliki tokeni hukabidhi kura kwa watumizi amabao hujiteua wenyewe na kujitolea kuwakili programu and kukaa kujulishwa. -#### Mfano maarufu {#governance-example} - -[ENS](https://claim.ens.domains/delegate-ranking) – Wamiliki wa ENS wanaweza kukabidhi kura zao kwa wanajamii wanaoshiriki kikamilifu ili kuwawakilisha. +#### Mfano maarufu {#governance-example}[ENS](https://claim.ens.domains/delegate-ranking) – Wamiliki wa ENS wanaweza kukabidhi kura zao kwa wanajamii wanaoshiriki kikamilifu ili kuwawakilisha. ### Utawala wa muamala wa kiotomatiki {#governance-example} diff --git a/public/content/translations/sw/defi/index.md b/public/content/translations/sw/defi/index.md index d8070a25745..5be8ea06b4a 100644 --- a/public/content/translations/sw/defi/index.md +++ b/public/content/translations/sw/defi/index.md @@ -69,8 +69,7 @@ Hii inaonekana ya ajabu... "kwa nini nitake kupanga pesa zangu"? Hata hivyo, hii -
    Chunguza mapendekezo yetu ya mpango za DeFi kujaribu ikiwa wewe ni mpya kwa Ethereum. -
    +
    Chunguza mapendekezo yetu ya mpango za DeFi kujaribu ikiwa wewe ni mpya kwa Ethereum.
    Chunguza programu za DeFi diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/index.md index 207eb0b32d3..a67acd6a6ff 100644 --- a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/index.md +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/index.md @@ -10,7 +10,7 @@ Mtandao wa Ethereum ulianza kwa kutumia utaratibu wa makubaliano uliohusisha **[ - Uthibitisho wa kazi sasa umeacha kutumika. Ethereum haitumii tena uthibitisho wa kazi kama sehemu ya utaratibu wake wa makubaliano. Badala yake, hutumia uthibitisho wa stake. Soma zaidi kuhusu [uthibitisho-wa-dau](/watengenezaji/hati/mbinu-makubaliano/pos/) na [staking](/staking/). + Uthibitisho wa kazi sasa umeacha kutumika. Ethereum haitumii tena uthibitisho wa kazi kama sehemu ya utaratibu wake wa makubaliano. Badala yake, hutumia uthibitisho wa stake. Soma zaidi kuhusu [uthibitisho-wa-dau](/developers/docs/consensus-mechanisms/pos/) na [staking](/staking/).
    diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/index.md index 9f5b30fe9c9..c494900e029 100644 --- a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/index.md +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -8,7 +8,7 @@ lang: sw -Uthibitisho wa kazi sio msingi tena wa utaratibu wa makubaliano wa Ethereum, kumaanisha uchimbaji umezimwa. Badala yake, Ethereum inalindwa na wathibitishaji ambao wanashiriki ETH. Unaweza kuanza kuweka ETH yako leo. Soma zaidi kwenye The Merge, ushahidi-wa-stake, na staking. Ukurasa huu ni kwa ajili ya maslahi ya kihistoria tu. +Uthibitisho wa kazi sio msingi tena wa utaratibu wa makubaliano wa Ethereum, kumaanisha uchimbaji umezimwa. Badala yake, Ethereum inalindwa na wathibitishaji ambao wanashiriki ETH. Unaweza kuanza kuweka ETH yako leo. Soma zaidi kwenye The Merge, ushahidi-wa-stake, na staking. Ukurasa huu ni kwa ajili ya maslahi ya kihistoria tu. diff --git a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md index 2217c608060..6f215d609a5 100644 --- a/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md +++ b/public/content/translations/sw/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md @@ -8,7 +8,7 @@ lang: sw -Uthibitisho wa kazi sio msingi tena wa utaratibu wa makubaliano wa Ethereum, kumaanisha uchimbaji umezimwa. Badala yake, Ethereum inalindwa na wathibitishaji ambao wanashiriki ETH. Unaweza kuanza kuweka ETH yako leo. Soma zaidi kwenye The Merge, ushahidi-wa-stake, na staking. Ukurasa huu ni kwa ajili ya maslahi ya kihistoria tu. +Uthibitisho wa kazi sio msingi tena wa utaratibu wa makubaliano wa Ethereum, kumaanisha uchimbaji umezimwa. Badala yake, Ethereum inalindwa na wathibitishaji ambao wanashiriki ETH. Unaweza kuanza kuweka ETH yako leo. Soma zaidi kwenye The Merge, ushahidi-wa-stake, na staking. Ukurasa huu ni kwa ajili ya maslahi ya kihistoria tu. diff --git a/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md b/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md index 5e12d04bedb..a7cf45bf4a6 100644 --- a/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md +++ b/public/content/translations/sw/developers/docs/smart-contracts/languages/index.md @@ -123,24 +123,32 @@ Kwa maelezo zaidi, [soma mantiki ya Vyper](https://vyper.readthedocs.io/en/lates # Mnada Wazi # Vigezo vya mnada + # Mpokeaji hupokea pesa kutoka kwa mzabuni wa juu zaidi + beneficiary: public(address) auctionStart: public(uint256) auctionEnd: public(uint256) # Hali ya sasa ya mnada + highestBidder: public(address) highestBid: public(uint256) # Imewekwa kuwa kweli mwishoni, inazuia mabadiliko yoyote + ended: public(bool) # Fuatilia zabuni zilizorejeshwa ili tuweze kufuata mtindo wa kutoa pesa + pendingReturns: public(HashMap[address, uint256]) # Unda mnada rahisi na `_bidding_time` + # muda wa sekunde za zabuni kwa niaba ya + # anwani ya mpokeaji `_beneficiary`. + @external def __init__(_beneficiary: address, _bidding_time: uint256): self.beneficiary = _beneficiary @@ -148,9 +156,13 @@ def __init__(_beneficiary: address, _bidding_time: uint256): self.auctionEnd = self.auctionStart + _bidding_time # Zabuni kwenye mnada na thamani iliyotumwa + # pamoja na muamala huu. + # Thamani itarejeshwa tu ikiwa + # mnada haujashindwa. + @external @payable def bid(): @@ -165,9 +177,13 @@ def bid(): self.highestBid = msg.value # Toa zabuni iliyorejeshwa hapo awali. Mtindo wa kutoa pesa ni + # hutumika hapa kuepuka suala la usalama. Kama urejeshaji fedha ungekuwa moja kwa moja + # zilizotumwa kama sehemu ya bid(), mkataba hasidi wa zabuni ungeweza kuzuia + # urejeshaji huo na hivyo kuzuia zabuni mpya za juu kuingia. + @external def withdraw(): pending_amount: uint256 = self.pendingReturns[msg.sender] @@ -175,7 +191,9 @@ def withdraw(): send(msg.sender, pending_amount) # Maliza mnada na tuma zabuni ya juu zaidi + # kwa mpokeaji. + @external def endAuction(): # Ni mwongozo mzuri wa kupanga vitendaji vinavyoingiliana diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-1363/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-1363/index.md index cc37444cb58..47415453ecc 100644 --- a/public/content/translations/sw/developers/docs/standards/tokens/erc-1363/index.md +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-1363/index.md @@ -26,7 +26,7 @@ Ili kuelewa ukurasa huu vizuri zaidi, tunapendekeza usome kwanza kuhusu: - [Viwango vya tokeni](/developers/docs/standards/tokens/) - [ERC-20](/developers/docs/standards/tokens/erc-20/) -## Mwili{#body} +## Mwili {#body} ERC-1363 inaleta API ya kawaida kwa tokeni za ERC-20 ili kuingiliana na mikataba-erevu baada ya `transfer`, `transferFrom` au `approve`. diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md index d81a4b2819d..b7144e5ac27 100644 --- a/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-20/index.md @@ -32,7 +32,7 @@ ni na siku zote itakuwa sawa na ishara nyingine zote. - [Mkataba erevu](/developers/docs/smart-contracts/) - [Viwango vya tokeni](/developers/docs/standards/tokens/) -## Mwili{#body} +## Mwili {#body} ERC-20 (Ethereum Ombi la Maoni 20), kupendekeza na Fabian Vogelsteller mnamo Novemba 2015, ni Kiwango cha ishara ambacho kutekeleza API kwa ishara ndani ya Mikataba erevu. diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md index 2d1095e9592..447675933a9 100644 --- a/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-223/index.md @@ -25,7 +25,7 @@ ERC-223 shughulika baadhi ya mapungufu ya ERC-20 na kuanzisha njia mpya ya mwing - [Viwango vya tokeni](/developers/docs/standards/tokens/) - [ERC-20](/developers/docs/standards/tokens/erc-20/) -## Mwili{#body} +## Mwili {#body} ERC-223 ni ishara ya kiwango ambacho kutekeleza API kwa ishara ndani ya mikataba erevu. Pia kutangaza API kwa ajili ya mikataba ambayo kuhitaji kupokea ERC-223 ishara. Mikataba ambayo haina msaada ERC-223 mpokeaji API haiwezi kupokea ERC-223 ishara, kuzuia makosa ya mtumiaji. diff --git a/public/content/translations/sw/developers/docs/standards/tokens/erc-721/index.md b/public/content/translations/sw/developers/docs/standards/tokens/erc-721/index.md index 677f2ad7671..84249cea452 100644 --- a/public/content/translations/sw/developers/docs/standards/tokens/erc-721/index.md +++ b/public/content/translations/sw/developers/docs/standards/tokens/erc-721/index.md @@ -23,7 +23,7 @@ Ndiyo! NFT zote zina kigezo cha `uint256` kinachoitwa `tokenId`, kwa hivyo kwa M - [Mkataba erevu](/developers/docs/smart-contracts/) - [Viwango vya tokeni](/developers/docs/standards/tokens/) -## Mwili{#body} +## Mwili {#body} ERC-721 (Ombi la Maoni la Ethereum 721), iliyopendekezwa na William Entriken, Dieter Shirley, Jacob Evans, Nastassia Sachs mnamo Januari 2018, ni Kiwango cha Tokeni isiyoweza kubadilishwa kinachotekeleza API ya tokeni ndani ya Mikataba-erevu. diff --git a/public/content/translations/sw/developers/tutorials/erc-721-vyper-annotated-code/index.md b/public/content/translations/sw/developers/tutorials/erc-721-vyper-annotated-code/index.md index 097336dd829..47a904aaa9f 100644 --- a/public/content/translations/sw/developers/tutorials/erc-721-vyper-annotated-code/index.md +++ b/public/content/translations/sw/developers/tutorials/erc-721-vyper-annotated-code/index.md @@ -294,6 +294,7 @@ Rejesha thamani kutoka kwenye HashMap ya `self.supportedInterfaces`, ambayo imew ```python ### KAZI ZA KUANGALIA ### + ``` Hizi ni kazi za kuangalia ambazo hufanya habari kuhusu tokeni zipatikane kwa watumiaji na mikataba mingine. diff --git a/public/content/translations/sw/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md b/public/content/translations/sw/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md index a6aca8d3675..23c154765f1 100644 --- a/public/content/translations/sw/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md +++ b/public/content/translations/sw/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md @@ -13,7 +13,7 @@ tags: skill: beginner lang: sw published: 2020-10-30 -source: Wastani +source: Medium sourceUrl: https://medium.com/alchemy-api/getting-started-with-ethereum-development-using-alchemy-c3d6a45c567f --- diff --git a/public/content/translations/sw/developers/tutorials/guide-to-smart-contract-security-tools/index.md b/public/content/translations/sw/developers/tutorials/guide-to-smart-contract-security-tools/index.md index 0cd5df89b83..f6bdf25e880 100644 --- a/public/content/translations/sw/developers/tutorials/guide-to-smart-contract-security-tools/index.md +++ b/public/content/translations/sw/developers/tutorials/guide-to-smart-contract-security-tools/index.md @@ -6,7 +6,7 @@ lang: sw tags: [ "uimara", "mikataba erevu", "usalama" ] skill: intermediate published: 2020-09-07 -source: Kujenga mikataba salama +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis --- diff --git a/public/content/translations/sw/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md b/public/content/translations/sw/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md index 112a378ed5a..73feb919743 100644 --- a/public/content/translations/sw/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md +++ b/public/content/translations/sw/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md @@ -13,7 +13,7 @@ tags: ] skill: advanced published: 2020-04-10 -source: Kujenga mikataba salama +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna --- diff --git a/public/content/translations/sw/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md b/public/content/translations/sw/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md index 291b3bba0e7..9b61b635b4e 100644 --- a/public/content/translations/sw/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md +++ b/public/content/translations/sw/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md @@ -13,7 +13,7 @@ tags: ] skill: advanced published: 2020-01-13 -source: Kujenga mikataba salama +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore --- @@ -400,6 +400,7 @@ symbolic_var = m.make_symbolic_value() contract_account.f(symbolic_var) ## Angalia ikiwa utekelezaji unaisha na REVERT au INVALID + for state in m.terminated_states: last_tx = state.platform.transactions[-1] if last_tx.result in ['REVERT', 'INVALID']: @@ -508,6 +509,7 @@ contract_account.f(symbolic_var) no_bug_found = True ## Angalia ikiwa utekelezaji unaisha na REVERT au INVALID + for state in m.terminated_states: last_tx = state.platform.transactions[-1] if last_tx.result in ['REVERT', 'INVALID']: diff --git a/public/content/translations/sw/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md b/public/content/translations/sw/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md index bedd5c86a8c..0692d3143cc 100644 --- a/public/content/translations/sw/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md +++ b/public/content/translations/sw/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md @@ -6,7 +6,7 @@ lang: sw tags: [ "uimara", "mikataba erevu", "usalama", "majaribio" ] skill: advanced published: 2020-06-09 -source: Kujenga mikataba salama +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither --- diff --git a/public/content/translations/sw/developers/tutorials/secure-development-workflow/index.md b/public/content/translations/sw/developers/tutorials/secure-development-workflow/index.md index 9c5b47b178f..73d6f88b0a2 100644 --- a/public/content/translations/sw/developers/tutorials/secure-development-workflow/index.md +++ b/public/content/translations/sw/developers/tutorials/secure-development-workflow/index.md @@ -6,7 +6,7 @@ tags: [ "mikataba erevu", "usalama", "uimara" ] skill: intermediate lang: sw published: 2020-09-07 -source: Kujenga mikataba salama +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/workflow.md --- diff --git a/public/content/translations/sw/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md b/public/content/translations/sw/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md index 1657cc0c9b9..6bff4e9f89f 100644 --- a/public/content/translations/sw/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md +++ b/public/content/translations/sw/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md @@ -6,7 +6,7 @@ tags: [ "miamala", "web3.js", "alchemy" ] skill: beginner lang: sw published: 2020-11-04 -source: Nyaraka za Alchemy +source: Alchemy docs sourceUrl: https://www.alchemy.com/docs/how-to-send-transactions-on-ethereum --- diff --git a/public/content/translations/sw/developers/tutorials/short-abi/index.md b/public/content/translations/sw/developers/tutorials/short-abi/index.md index eb00e43878f..23d9dfd539d 100644 --- a/public/content/translations/sw/developers/tutorials/short-abi/index.md +++ b/public/content/translations/sw/developers/tutorials/short-abi/index.md @@ -165,7 +165,7 @@ Kwenye L1 inaweza kuwa muhimu kuruka majaribio haya ili kuokoa gesi, lakini kwen Tungeweza kunakili data kutoka kwa simu hadi `fallback()` (tazama hapa chini), lakini ni rahisi zaidi kutumia [Yul](https://docs.soliditylang.org/en/v0.8.12/yul.html), lugha ya mkusanyiko ya EVM. Hapa tunatumia [opcode ya CALLDATALOAD](https://www.evm.codes/#35) kusoma baiti `startByte` hadi `startByte+31` kwenye rundo. -Kwa ujumla, sintaksia ya opcode katika Yul ni `(,...). +Kwa ujumla, sintaksia ya opcode katika Yul ni `(,...)`. ```solidity diff --git a/public/content/translations/sw/developers/tutorials/smart-contract-security-guidelines/index.md b/public/content/translations/sw/developers/tutorials/smart-contract-security-guidelines/index.md index 2ee3d315d02..e26d1fd9f21 100644 --- a/public/content/translations/sw/developers/tutorials/smart-contract-security-guidelines/index.md +++ b/public/content/translations/sw/developers/tutorials/smart-contract-security-guidelines/index.md @@ -6,7 +6,7 @@ tags: [ "uimara", "mikataba erevu", "usalama" ] skill: intermediate lang: sw published: 2020-09-06 -source: Kujenga mikataba salama +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/guidelines.md --- diff --git a/public/content/translations/sw/developers/tutorials/token-integration-checklist/index.md b/public/content/translations/sw/developers/tutorials/token-integration-checklist/index.md index 189ed808a4e..6ec392799bc 100644 --- a/public/content/translations/sw/developers/tutorials/token-integration-checklist/index.md +++ b/public/content/translations/sw/developers/tutorials/token-integration-checklist/index.md @@ -6,7 +6,7 @@ lang: sw tags: [ "uimara", "mikataba erevu", "usalama", "tokeni" ] skill: intermediate published: 2020-08-13 -source: Kujenga mikataba salama +source: Building secure contracts sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/token_integration.md --- diff --git a/public/content/translations/sw/developers/tutorials/uniswap-v2-annotated-code/index.md b/public/content/translations/sw/developers/tutorials/uniswap-v2-annotated-code/index.md index 2f80ce6b5d0..87aa459316a 100644 --- a/public/content/translations/sw/developers/tutorials/uniswap-v2-annotated-code/index.md +++ b/public/content/translations/sw/developers/tutorials/uniswap-v2-annotated-code/index.md @@ -56,9 +56,8 @@ Huu ndio mtiririko wa kawaida zaidi, unaotumiwa na wafanyabiashara: 4. Inarudia juu ya njia. Kwa kila ubadilishaji njiani inatuma tokeni ya kuingiza na kisha inapiga simu kazi ya `swap` ya ubadilishaji. Katika hali nyingi anwani lengwa ya tokeni ni ubadilishaji wa jozi unaofuata kwenye njia. Katika ubadilishaji wa mwisho ni anwani iliyotolewa na mfanyabiashara. -#### Katika mkataba wa msingi (UniswapV2Pair.sol) {#in-the-core-contract-uniswapv2pairsol-2} +#### Katika mkataba wa msingi (UniswapV2Pair.sol) {#in-the-core-contract-uniswapv2pairsol-2}5. Thibitisha kuwa mkataba wa msingi haufanyiwi udanganyifu na unaweza kudumisha ukwasi wa kutosha baada ya ubadilishaji. -5. Thibitisha kuwa mkataba wa msingi haufanyiwi udanganyifu na unaweza kudumisha ukwasi wa kutosha baada ya ubadilishaji. 6. Angalia ni tokeni ngapi za ziada tunazo pamoja na akiba zinazojulikana. Kiasi hicho ni idadi ya tokeni za kuingiza tulizopokea ili kubadilisha. 7. Tuma tokeni za matokeo kwenda lengwa. 8. Piga simu `_update` ili kusasisha kiasi cha akiba diff --git a/public/content/translations/sw/developers/tutorials/using-websockets/index.md b/public/content/translations/sw/developers/tutorials/using-websockets/index.md index f35dc50b3b0..bc606aa7f63 100644 --- a/public/content/translations/sw/developers/tutorials/using-websockets/index.md +++ b/public/content/translations/sw/developers/tutorials/using-websockets/index.md @@ -5,7 +5,7 @@ author: "Elan Halpern" lang: sw tags: [ "alchemy", "websockets", "kuuliza", "javascript" ] skill: beginner -source: Nyaraka za Alchemy +source: Alchemy docs sourceUrl: https://www.alchemy.com/docs/reference/best-practices-for-using-websockets-in-web3 published: 2020-12-01 --- diff --git a/public/content/translations/sw/eth/supply/index.md b/public/content/translations/sw/eth/supply/index.md index f176f5ce761..ded49c17ce0 100644 --- a/public/content/translations/sw/eth/supply/index.md +++ b/public/content/translations/sw/eth/supply/index.md @@ -58,7 +58,7 @@ Ugavi wa siku zijazo wa Ethereum haujarekebishwa-inategemea tofauti kadhaa: 1. **Kushiriki kwa kushikilia**: - Waidhinishaji zaidi wanaojiunga na mtandao inamaanisha zawadi zaidi za ETH zinasambazwa. - Wathibitishaji wachache wanaoshiriki wanaweza kupunguza utoaji. - - Pata maelezo zaidi kuhusu [staking](/stak/). + - Pata maelezo zaidi kuhusu [staking](/roadmap/). 2. **Shughuli ya Mtandao**: - Kiasi kikubwa cha miamala husababisha ETH zaidi kuchomwa, uwezekano wa kukomesha au kuzidi utoaji. diff --git a/public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md b/public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md index 7c01282a812..8934986f41e 100644 --- a/public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md +++ b/public/content/translations/sw/guides/how-to-create-an-ethereum-account/index.md @@ -42,8 +42,7 @@ Baadhi ya programu zitakuomba uandike na uhifadhi "maneno ya kurejesha" ya kisir -
    Umesakinisha mkoba?
    Jifunze jinsi ya kuutumia. -
    +
    Umesakinisha mkoba?
    Jifunze jinsi ya kuutumia.
    Jinsi ya kutumia mkoba diff --git a/public/content/translations/sw/guides/how-to-revoke-token-access/index.md b/public/content/translations/sw/guides/how-to-revoke-token-access/index.md index 0e535f747cf..d8415f02bff 100644 --- a/public/content/translations/sw/guides/how-to-revoke-token-access/index.md +++ b/public/content/translations/sw/guides/how-to-revoke-token-access/index.md @@ -49,8 +49,7 @@ Tunakushauri uonyeshe upya chombo cha kubatilisha ruhusa baada ya dakika chache -
    Unataka kujifunza zaidi? -
    +
    Unataka kujifunza zaidi?
    Angalia miongozo yetu mingine diff --git a/public/content/translations/sw/guides/how-to-swap-tokens/index.md b/public/content/translations/sw/guides/how-to-swap-tokens/index.md index 6dd33812b0c..493f3f384fa 100644 --- a/public/content/translations/sw/guides/how-to-swap-tokens/index.md +++ b/public/content/translations/sw/guides/how-to-swap-tokens/index.md @@ -52,8 +52,7 @@ Utapokea kiotomatiki tokeni ulizobadilisha kwenye mkoba wako mara tu muamala uta -
    Unataka kujifunza zaidi? -
    +
    Unataka kujifunza zaidi?
    Angalia miongozo yetu mingine diff --git a/public/content/translations/sw/guides/how-to-use-a-bridge/index.md b/public/content/translations/sw/guides/how-to-use-a-bridge/index.md index 6c2fa391ecf..3a4988307d3 100644 --- a/public/content/translations/sw/guides/how-to-use-a-bridge/index.md +++ b/public/content/translations/sw/guides/how-to-use-a-bridge/index.md @@ -54,8 +54,7 @@ Unaweza kutumia [chainlist.org](http://chainlist.org) kupata maelezo ya RPC ya m -
    Unataka kujifunza zaidi? -
    +
    Unataka kujifunza zaidi?
    Angalia miongozo yetu mingine diff --git a/public/content/translations/sw/guides/how-to-use-a-wallet/index.md b/public/content/translations/sw/guides/how-to-use-a-wallet/index.md index 570d34b0544..176192b776a 100644 --- a/public/content/translations/sw/guides/how-to-use-a-wallet/index.md +++ b/public/content/translations/sw/guides/how-to-use-a-wallet/index.md @@ -65,8 +65,7 @@ Anwani yako itakuwa sawa katika miradi yote ya Ethereum. Huhitaji kujiandikisha -
    Unataka kujifunza zaidi? -
    +
    Unataka kujifunza zaidi?
    Angalia miongozo yetu mingine diff --git a/public/content/translations/sw/nft/index.md b/public/content/translations/sw/nft/index.md index c15e878bfdc..1112bd7c320 100644 --- a/public/content/translations/sw/nft/index.md +++ b/public/content/translations/sw/nft/index.md @@ -58,8 +58,7 @@ Labda wewe ni msanii amabaye angependa kushiriki kazi yake kupitia NFT bila wewe -
    Chunguza, nunu au tengeneza sanaa ya NFT... -
    +
    Chunguza, nunu au tengeneza sanaa ya NFT...
    Gundua sanaa ya NFT diff --git a/public/content/translations/sw/payments/index.md b/public/content/translations/sw/payments/index.md index 579a2ded67e..31c8ef8fada 100644 --- a/public/content/translations/sw/payments/index.md +++ b/public/content/translations/sw/payments/index.md @@ -6,7 +6,7 @@ lang: sw template: use-cases emoji: ":frame_with_picture:" sidebarDepth: 2 -image: / picha / athari_uwazi.png +image: /images/impact_transparent.png alt: Nembo ya Eth kuonyeshwa pamoja na kupeana mikono. summaryPoint1: Ulimwengu ambamo pesa hutiririka kwa uhuru kama habari summaryPoint2: Wazi na wa kimataifa, kuwezesha shughuli bila mipaka kwa kila mtu @@ -23,7 +23,7 @@ Hii si ndoto ya mbali—inafanyika leo kwenye Ethereum. Wakati taasisi za jadi z ![Nembo ya Ethereum kwenye skrini ya kompyuta](./computer.png) -## Uhamishaji pesa: uhamisho wa kimataifa wa bei nafuu{#remittances} +## Uhamishaji pesa: uhamisho wa kimataifa wa bei nafuu {#remittances} Kwa mamilioni ya watu wanaofanya kazi nje ya nchi, kutuma pesa nyumbani ni hitaji la mara kwa mara. Huduma za kawaida za utumaji pesa mara nyingi huambatana na ada za juu na muda mrefu wa kushughulikiwa. Ethereum inatoa mbadala unaovutia. @@ -61,11 +61,12 @@ Katika nchi ambazo njia zao za malipo hazipo ulimwenguni kote, suluhisho za mali -
    Fungua akaunti yako ya Ethereum na programu ya mkoba wa kidijitali leo. -
    +
    Fungua akaunti yako ya Ethereum na programu ya mkoba wa kidijitali leo.
    -Anza sasa +Anza sasa +
    +
    ## Lipa kwa kutumia kadi za kripto za kujihifadhi {#pay-with-self-custodial-crypto-cards} @@ -198,10 +199,10 @@ Kuanzia kuwezesha misaada ya haraka ya majanga hadi kuwawezesha wafanyakazi wa k -
    Ni wakati wa kufungua akaunti yako ya Ethereum. -
    +
    Ni wakati wa kufungua akaunti yako ya Ethereum.
    Anza sasa!
    +
    diff --git a/public/content/translations/sw/prediction-markets/index.md b/public/content/translations/sw/prediction-markets/index.md index b8827758f11..baa9076dfeb 100644 --- a/public/content/translations/sw/prediction-markets/index.md +++ b/public/content/translations/sw/prediction-markets/index.md @@ -56,7 +56,9 @@ Kuna masoko kadhaa ya utabiri yenye mfumo wa Ethereum yanayopatikana. Kuna baadh

    Kuwa makini na hatari

    Bashiri kile kilicho ndani ya uwezo wako na uwe makini na uraibu mbaya.

    +
    +
    ## Vikwazo na madhara {#challenges-and-risks} diff --git a/public/content/translations/sw/real-world-assets/index.md b/public/content/translations/sw/real-world-assets/index.md index 6e69677418f..da3d8e85bad 100644 --- a/public/content/translations/sw/real-world-assets/index.md +++ b/public/content/translations/sw/real-world-assets/index.md @@ -80,7 +80,7 @@ Baadhi ya watangulizi katika suala la kuanzisha mifumo ya kisheria haswa kutambu ## Jifunze zaidi {#learn-more} -Kuingia kwenye [mikataba ya smart](/smart-mikataba/) au ujue zaidi juu ya darasa tofauti la ishara, [tokeni zisizo na fungi (NFT)](/nft/). +Kuingia kwenye [mikataba ya smart](/smart-contracts/) au ujue zaidi juu ya darasa tofauti la ishara, [tokeni zisizo na fungi (NFT)](/nft/). ## Masomo zaidi {#further-reading} diff --git a/public/content/translations/sw/roadmap/merge/issuance/index.md b/public/content/translations/sw/roadmap/merge/issuance/index.md index 6ae3dfabce0..dae212cfea1 100644 --- a/public/content/translations/sw/roadmap/merge/issuance/index.md +++ b/public/content/translations/sw/roadmap/merge/issuance/index.md @@ -64,7 +64,9 @@ Jumla ya usambazaji wa ETH: **~ETH 120,520,000** (wakati wa Muungano mnamo Septe **~11.3%** ilikuwa inatolewa kwa waweka hisa kwenye safu ya makubaliano (0.52 / 4.61 \* 100) +
    +
    ## Baada ya Muungano (siku ya sasa) {#post-merge} @@ -98,7 +100,9 @@ Jumla ya kiwango cha utoaji cha mwaka: **~0.52%** Upungufu halisi katika utoaji wa ETH wa mwaka: **~88.7%** ((4.61% - 0.52%) / 4.61% \* 100) +
    +
    ## Uchomaji {#the-burn} @@ -111,7 +115,9 @@ Nguvu kinyume na utoaji wa ETH ni kiwango ambacho ETH inachomwa. Ili muamala ufa Uchomaji wa ada ulianza kutumika na [uboreshaji wa London](/ethereum-forks/#london) mnamo Agosti 2021, na haujabadilika tangu Muungano. +
    +
    Zaidi ya uchomaji wa ada uliotekelezwa na uboreshaji wa London, wathibitishaji wanaweza pia kupata adhabu kwa kutokuwa mtandaoni, au mbaya zaidi, wanaweza kupunguzwa hisa zao kwa kukiuka sheria maalum zinazotishia usalama wa mtandao. Adhabu hizi husababisha kupungua kwa ETH kutoka kwa salio la mthibitishaji huyo, ambayo haituzwi moja kwa moja kwa akaunti nyingine yoyote, na kwa ufanisi kuichoma/kuiondoa kwenye mzunguko. diff --git a/public/content/translations/sw/staking/solo/index.md b/public/content/translations/sw/staking/solo/index.md index 631612e229c..5254e66be8a 100644 --- a/public/content/translations/sw/staking/solo/index.md +++ b/public/content/translations/sw/staking/solo/index.md @@ -71,6 +71,7 @@ Tofauti na adhabu za kutokuwa amilifu kwa kuwa nje ya mtandao, slashing Zaidi kuhusu slashing na mzunguko wa maisha wa mthibitishaji + diff --git a/public/content/translations/sw/web3/index.md b/public/content/translations/sw/web3/index.md index 937c1186d05..69d8d6fdd6a 100644 --- a/public/content/translations/sw/web3/index.md +++ b/public/content/translations/sw/web3/index.md @@ -69,8 +69,7 @@ Web3 inaruhusu umiliki wa moja kwa moja kupitia [tokeni zisizoweza kubadilishwa -
    Pata maelezo zaidi kuhusu NFT -
    +
    Pata maelezo zaidi kuhusu NFT
    Zaidi kuhusu NFTs @@ -98,8 +97,7 @@ Hata hivyo, watu wengi hueleza jamii nyingi za wavuti wa 3 kama mashirika gatuzi -
    Pata maelezo zaidi kuhusu DAO -
    +
    Pata maelezo zaidi kuhusu DAO
    Zaidi kuhusu DAOs diff --git a/public/content/translations/sw/what-are-apps/index.md b/public/content/translations/sw/what-are-apps/index.md index 23e1c2cc6a3..ffb152a18fa 100644 --- a/public/content/translations/sw/what-are-apps/index.md +++ b/public/content/translations/sw/what-are-apps/index.md @@ -7,7 +7,7 @@ template: use-cases emoji: ":handshake:" sidebarDepth: 2 showDropdown: false -image: /picha/doge -kwenye - kompyuta.png +image: /images/doge-computer.png summary: Programu zinazojengwa kwenye Ethereum ni bure, za kimataifa na zinatumia blockchain ya umma badala ya server zinazomilikiwa na kampuni binafsi. Hii inamaanisha unaweza kutumia akaunti ile ile katika kila mradi na bado kudumisha faragha yako.''. --- diff --git a/public/content/translations/sw/wrapped-eth/index.md b/public/content/translations/sw/wrapped-eth/index.md index 3cbfcf338be..29768a7e6a1 100644 --- a/public/content/translations/sw/wrapped-eth/index.md +++ b/public/content/translations/sw/wrapped-eth/index.md @@ -8,8 +8,7 @@ lang: sw -
    Unganisha mkoba wako ili kufunga au kufungua ETH kwenye mnyororo wowote kwenye [WrapETH.com](https://www.wrapeth.com/) -
    +
    Unganisha mkoba wako ili kufunga au kufungua ETH kwenye mnyororo wowote kwenye [WrapETH.com](https://www.wrapeth.com/)
    Ether (ETH) ndiyo sarafu kuu ya Ethereum. Hutumika kwa madhumuni kadhaa kama vile kuweka hisa, kama sarafu, na kulipia ada za gesi kwa ajili ya kukokotoa. **WETH kwa hakika ni mfumo ulioboreshwa wa ETH wenye utendakazi fulani wa ziada unaohitajika na programu nyingi na [tokeni za ERC-20](/glossary/#erc-20)**, ambazo ni aina zingine za mali za kidijitali kwenye Ethereum. Ili kufanya kazi na tokeni hizi, ETH lazima ifuate sheria sawa na zinazofuatwa, zinazojulikana kama kiwango cha ERC-20. From 483de570dcc6e93ea6dcaadaf127d05070ba67b9 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 13 Feb 2026 17:24:09 +0000 Subject: [PATCH 5/7] chore: trigger rebuild From e115d55d8b893c0f8e517e42e5c63b1bba3ddaff Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 13 Feb 2026 19:47:12 +0000 Subject: [PATCH 6/7] chore: trigger rebuild From 66cfe5edef39e1f82a6f9450a44525858d12cc37 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Fri, 13 Feb 2026 22:19:39 +0000 Subject: [PATCH 7/7] chore: trigger rebuild