Skip to content

Commit

Permalink
Merge pull request #14657 from ethereum/crowdin-january-fa-2025011316…
Browse files Browse the repository at this point in the history
…2858902

chore: import translations for fa
  • Loading branch information
corwintines authored Jan 14, 2025
2 parents 43da01f + 5fab0e9 commit 9f183ec
Show file tree
Hide file tree
Showing 7 changed files with 2,156 additions and 0 deletions.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
---
title: تدوین قرارداد هوشمند
description: توضیحی در مورد اینکه چرا باید هوش پیمان را کامپایل کنید و کامپایل در واقع چه کاری انجام می دهد.
lang: fa
incomplete: true
---

شما باید قرارداد خود را کامپایل کنید تا برنامه وب و ماشین مجازی اتریوم (EVM) بتوانند آن را درک کنند.

## پیش‌نیازها {#prerequisites}

شاید برای شما مفید باشد که قبل از مطالعه در مورد کامپایل، مقدمه [قراردادهای هوشمند](/developers/docs/smart-contracts/) و [ماشین مجازی اتریوم](/developers/docs/evm/) را بخوانید.

## EVM {#the-evm}

برای اینکه [EVM](/developers/docs/evm/) بتواند قرارداد شما را اجرا کند، باید به صورت **بایت کد** باشد. فرآیند کامپایل کردن این را:

```solidity
pragma solidity 0.4.24;
contract Greeter {
function greet() public constant returns (string) {
return "Hello";
}
}
```

**به این تغییر می دهد**

```
PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x80 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SLT 0xec 0xe 0xf5 0xf8 SLT 0xc7 0x2d STATICCALL ADDRESS SHR 0xdb COINBASE 0xb1 BALANCE 0xe8 0xf8 DUP14 0xda 0xad DUP13 LOG1 0x4c 0xb4 0x26 0xc2 DELEGATECALL PUSH7 0x8994D3E002900
```

اینها **آپکدها** نامیده می‌شوند. آپکدهای ماشین مجازی اتریوم دستورالعمل‌های سطح پایینی هستند که ماشین مجازی اتریوم (EVM) می‌تواند اجرا کند. هر کد عملیاتی یک عملیات خاص مانند عملیات حسابی، عملیات منطقی، دستکاری داده‌ها، جریان کنترل و غیره را نشان می‌دهد.

[اطلاعات بیشتر در مورد کدهای عملیاتی](/developers/docs/evm/opcodes/)

## برنامه های کاربردی وب {#web-applications}

کامپایلر همچنین **Application Binary Interface (ABI)** را تولید می کند که برای اینکه برنامه شما بتواند یک قرارداد را درک کند و توابع قرارداد را فراخوانی کند به آن نیاز دارید.

ABI یک فایل JSON است که قرارداد مستقر شده و توابع آن قرارداد هوشمند را توصیف می کند. این مورد به پر کردن شکاف بین web2 و web3 کمک می کند

یک [کتابخانه کلاینتی Javascript](/developers/docs/apis/javascript/) که **ABI** را می خواند تا بتوانید قرارداد هوشمند را در رابط برنامه وب خود فراخوانی کنید.

در زیر ABI برای قرارداد توکن ERC-20 آورده شده است. ERC-20 توکنی است که می توانید با آن در اتریوم معامله کنید.

```json
[
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_spender",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_from",
"type": "address"
},
{
"name": "_to",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"name": "balance",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_to",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
},
{
"name": "_spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "owner",
"type": "address"
},
{
"indexed": true,
"name": "spender",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "address"
},
{
"indexed": true,
"name": "to",
"type": "address"
},
{
"indexed": false,
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
}
]
```

## بیشتر بخوانید {#further-reading}

- [ABI spec](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _ – Solidity_

## موضوعات مرتبط {#related-topics}

- [کتابخانه‌های کلاینتی Javascript](/developers/docs/apis/javascript/)
- [ماشین مجازی اتریوم](/developers/docs/evm/)
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
title: استقرار قرارداد هوشمند
description:
lang: fa
---

به منظور در دسترس بودن قرارداد هوشمند شما برای کاربران یک شبکه اتریوم، شما باید آن را پیاده‌سازی کنید.

برای استقرار یک قرارداد هوشمند، شما فقط یک تراکنش اتریوم حاوی کد کامپایل شده قرارداد هوشمند را بدون تعیین هیچ گیرنده ای ارسال می کنید.

## پیش‌نیازها {#prerequisites}

شما باید [شبکه‌ی اتریوم](/developers/docs/networks/)، [تراکنش‌ها](/developers/docs/transactions/) و [آناتومی قراردادهای هوشمند](/developers/docs/smart-contracts/anatomy/) را پیش از استقرار قرارداد هوشمند بدانید.

پیاده‌سازی یک قرارداد نیز همچنین دارای هزینه اتر (ETH) است زیرا آنها بر روی زنجیره‌‌ی بلوکی ذخیره شده اند، بنابراین بایستی با مفهوم [هزینه و کارمزد](/developers/docs/gas/) بر روی اتریوم آشنا باشید.

نهایتا نیاز به کامپایل کردن قرارداد خود پیش از استقرار آن دارید، پس مطمئن شوید که درباره‌ی [کامپایل کردن قرارداد هوشمند](/developers/docs/smart-contracts/compiling/) مطالعه کرده باشید.

## چگونه یک قرارداد هوشمند را مستقر کنیم {#how-to-deploy-a-smart-contract}

### آنچه نیاز خواهید داشت {#what-youll-need}

- بایت‌کد قراردادتان - این توسط [کامپایل کردن](/developers/docs/smart-contracts/compiling/) ساخته می‌شود
- اتر برای گاز - شما حد گاز خود را مانند سایر تراکنش‌ها تعیین می‌کنید، بنابراین توجه داشته باشید که استقرار قرارداد به گاز بسیار بیشتری نسبت به یک انتقال ساده اتر نیاز دارد
- یک اسکریپت یا افزونه استقرار
- دسترسی به یک[گره اتریوم](/developers/docs/nodes-and-clients/)، با اجرای خودتان، یا اتصال به یک گره عمومی، و یا با استفاده از یک[سرویس گره](/developers/docs/nodes-and-clients/nodes-as-a-service/) از طریق یک API

### گام‌های استقرار یک قرارداد هوشمند {#steps-to-deploy}

مراحل خاص مربوط به چارچوب توسعه مورد نظر بستگی دارد. برای مثال، می‌توانید [ مستندات یا همان اسناد هاردهت در مورد استقرار قراردادهای خود](https://hardhat.org/guides/deploying.html) یا [ مستندات فاندری در مورد استقرار و تأیید قرارداد هوشمند را بررسی کنید](https://book.getfoundry.sh/forge/deploying). پس از استقرار، قرارداد شما مانند سایر [حساب‌ها](/developers/docs/accounts/) دارای یک آدرس اتریوم خواهد بود و می‌توان آن را با استفاده از ابزار تأیید کد منبع[](/developers/docs/smart-contracts/ تأیید کرد. verifying/#source-code-verification-tools).

## ابزارهای مرتبط {#related-tools}

**Remix - _Remix IDE امکان توسعه، استقرار و مدیریت قراردادهای هوشمند برای اتریوم مانند بلاک چین را فراهم می کند._**

- [Remix](https://remix.ethereum.org)

**Tenderly - _پلتفرم توسعه دهندگی در Web3 که با ارائه سرویس هایی چون دیباگ، نظارت و زیرساخت های توسعه قرارداد هوشمند توسعه، تست، نظارت، و اجرا قراردادهای هوشمند را میسر میسازد_**

- [tenderly.co](https://tenderly.co/)
- [Docs](https://docs.tenderly.co/)
- [گیت‌هاب](https://github.com/Tenderly)
- [دیسکورد](https://discord.gg/eCWjuvt)

**Hardhat - _یک محیط توسعه برای کامپایل، استقرار، آزمایش و اشکال زدایی نرم‌افزار اتریوم شما_**

- [hardhat.org](https://hardhat.org/getting-started/)
- [مستنداتی بر استقرار قرارداد خودتان](https://hardhat.org/guides/deploying.html)
- [گیت هاب](https://github.com/nomiclabs/hardhat)
- [دیسکورد](https://discord.com/invite/TETZs2KK4k)

**thirwenb - _با یک دستور، هر قرارداد هوشمندی را بر هر شبکه سازگار با ماشین مجازی اتریوم (EVM) به راحتی پیاده کنید_**

- [اسناد](https://portal.thirdweb.com/deploy/)

**کراس مینت- _پلتفرم توسعه Web3 درجه سازمانی برای استقرار قراردادهای هوشمند، فعال کردن پرداخت‌های کارت اعتباری و زنجیره‌ای متقابل و استفاده از API برای ایجاد، توزیع، فروش، ذخیره و ویرایش ان‌اف‌تی است._**

- [crossmint.com](https://www.crossmint.com)
- [اسناد](https://docs.crossmint.com)
- [دیسکورد](https://discord.com/invite/crossmint)
- [بلاگ](https://blog.crossmint.com)

## آموزش های مرتبط {#related-tutorials}

- [استقرار اولین قرارداد هوشمندتان](/developers/tutorials/deploying-your-first-smart-contract/) _- مقدمه ای برای استقرار اولین قرارداد هوشمندتان در یک شبکه آزمایشی اتریوم._
- [ سلام دنیا! | آموزش قرارداد هوشمند](/developers/tutorials/hello-world-smart-contract/)_–آموزشی ساده برای ساخت و& پیاده کردن یک قرارداد هوشمند ابتدایی روی اتریوم._
- [تعامل با سایر قراردادهای Solidity](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– نحوه استقرار هوشمند قرارداد از یک قرارداد موجود و تعامل با آن._
- [چگونه اندازه قرارداد خود را کوچک کنیم](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _- چگونه اندازه قرارداد خود را کاهش دهید تا آن را زیر حد مجاز نگه دارید و در مصرف گاز صرفه جویی کنید_

## بیشتر بخوانید {#further-reading}

- [https://docs.openzeppelin.com/learn/deploying-and-interacting](https://docs.openzeppelin.com/learn/deploying-and-interacting) - _OpenZeppelin_
- [استقرار قراردادتان با Hardhat](https://hardhat.org/guides/deploying.html) - _Nomic Labs_

_می‌خواهید در مورد منابع جامعه که به شما کمک کرده بدانید؟ این صفحه را ویرایش و اضافه کنید!_

## موضوعات مرتبط {#related-topics}

- [چارچوب‌های توسعه](/developers/docs/frameworks/)
- [اجرای یک گره‌ی اتریوم](/developers/docs/nodes-and-clients/run-a-node/)
- [گره‌-به‌عنوان-خدمت](/developers/docs/nodes-and-clients/nodes-as-a-service)
Loading

0 comments on commit 9f183ec

Please sign in to comment.