Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -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/)
Original file line number Diff line number Diff line change
@@ -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.)
Loading