# How To Deploy SUI Smart Contract

By [Moei](https://paragraph.com/@0xmoei-2) · 2023-01-28

---

آموزش دیپلوی اسمارت کانترکت روی تست نت شبکه سوی
-----------------------------------------------

دیپلوی اسمارت کانترکت نیاز به سیستم خاصی نداره و فقط محیط کدنویسی لینوکس میخواد

**آموزش راه‌اندازی محیط کدنویسی رو از این** [**توییت**](https://twitter.com/0xMoei/status/1601976588307877889) **ببینید**

### مراحل دیپلوی اسمارت کانترکت:

### 1\. Install Dependecies

در این پارت هرکدوم از پکیج ها رو نصب داشتید ازش بگذرید

**1.1 Install Linux Dependecies**

    sudo apt-get update \
    && sudo apt-get install -y --no-install-recommends \
    tzdata \
    ca-certificates \
    build-essential \
    libssl-dev \
    libclang-dev \
    pkg-config \
    openssl \
    protobuf-compiler \
    cmake
    

**1.2 Install cURL**

**1.3 Install Git**

    sudo apt-get install git-all
    

**1.4 Install screen**

    sudo apt-get install screen
    

**1.5 Install rust**

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    

    source $HOME/.cargo/env
    

    rustup update stable
    

    rustup default stable
    

2\. Install Sui CLI
-------------------

دستور نصب این قسمت 20 دقیقه زمان میبره، می تونید با دستور `اسکرین` که قرار میدم، اون دستور رو در بک گراند اجرا کنید تا اگر **ترمینال** قطع شد دوباره همون اسکرین رو بازیابی کنید

### 2.1 Make Screen

    screen -S suicli
    

### 2.2 Install Sui CLI

    cargo install --locked --git https://github.com/MystenLabs/sui.git --branch testnet sui
    

![در صورت نصب صحیح](https://storage.googleapis.com/papyrus_images/00b050a2fbc4decc9caef1adea8c718c928609ae4908a684e64a952ab15fab6b.png)

در صورت نصب صحیح

**دستورات کمکی در صورت نیاز وگرنه صبر کنید تا نصب دستور بالا انجام شه**

خروج اسکرین (انتقال به بک گراند)

`Ctrl + A + D`

خروج و حذف اسکرین

`Ctrl + C`

لیست اسکرین ها

`screen -ls`

بازیابی اسکرین

`screen -d suicli && screen -r suicli`

### 2.3 Configure Sui CLI

دو دستور اول فایل های قبلی رو حذف میکنه که به نظرم برای اینکه مطمئن شید به خطا نمیخورید بزنید

**Delete old Files**

    sui genesis --force
    

    rm -rf .sui/sui_config/client.yaml
    

**Run CLI**

1.  press `Y`
    
2.  Enter `https://fullnode.testnet.sui.io:443`
    
3.  Enter `testnet`
    
4.  Enter `0`
    
    **با اینکار برای شما یک ولت جدید ساخته میشه که مشخصاتش رو سیو کنید**
    

### 2.4 Recover Wallet

اگر خواستید ولت قبلیتون رو **ریکاور** کنید با استفاده ازین دستور فقط **12 کلمه ولت** رو **بین** 2 علامت **“ “** جاگذاری کنید

    sui keytool import "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12" ed25519
    

**Switch to a new active address**

     sui client switch --address your_address
    

`your_address` آدرس ولتتون رو با عبارت بالا در دستور عوض کنید

### 2.6 Check Your Config

برای چک کردن اینکه کانفیگ رو صحیح انجام دادید

    cat .sui/sui_config/client.yaml
    

![در صورتی که کانفیگ رو صحیح انجام داده باشید](https://storage.googleapis.com/papyrus_images/351ae822b63f367496795e49c712db02084d9feab0eb9a00b0bfc8d1345cd24d.png)

در صورتی که کانفیگ رو صحیح انجام داده باشید

`Active address` باید آدرس ولت خودتون باشه

### 2.7 $SUI token Faucet

برای دریافت فاست توکن سوی روی شبکه **تست نت** فقط باید از طریق [دیسکورد](https://discord.gg/sui) پروژه آدرس خودتون رو با فرمتی که گفته شده در کانال مخصوص طبق عکس قرار بدید

![testnet-faucet](https://storage.googleapis.com/papyrus_images/d17073b4811ade8e123acb29d4d6d843c797b59aff1e3f0ec9ea27f1ea676d28.png)

testnet-faucet

3\. Smart Contract
------------------

### 3.1 Create new project ( my\_first\_package)

    sui move new my_first_package
    

یک پوشه برای پروژه میسازه که حاوی فایل کانفیگ و اسمارت کانترکت هست

### 3.2 Create new smart contract file ( my\_module.move )

    nano my_first_package/sources/my_module.move
    

با دستور بالا فایل اسمارت کانترکت به نام “مای ماژول” ساخته میشه و منوی ادیت فایل در ترمینال طبق عکس باز میشه که باید کدهای داخل این [لینک](https://github.com/MystenLabs/sui/blob/main/sui_programmability/examples/move_tutorial/sources/my_module.move#L4) رو کپی و توی ترمینال با راست کلیک جاگذاری کنید

![منو ادیت فایل my_module.move](https://storage.googleapis.com/papyrus_images/59f598ca10139ab653e6fd76c79e27dbdb99c72548c1f9bf05f71084251c41be.png)

منو ادیت فایل my\_module.move

**بعد از کپی:**

Press `Ctrl + X`

Press `Y`

Press `Enter`

### 3.3 Deploy Contract On Sui Testnet Network

**وارد پوشه پروژه بشید**

    cd my_first_package
    

**دیپلوی کانترکت**

    sui client publish --gas-budget 1000
    

اگر کانترکت شما با موفقیت روی شبکه دیپلوی شده باشه، باید یک خروجی مثل موارد زیر بهتون داده باشه

    Created Objects:
    ID: 0x4e17ea3a175b28a4a9f32f9b8f78c713f74941e8 , Owner: Account Address ( 0xf1ba1e0bd0741cba3ce5f65de2827452091e3bfe )
    
    ID: 0xa9a9d2280b4eaf9b2fe12c6f3c200452b00fb6f5 , Owner: Immutable
    
    Mutated Objects:
    ID: 0x39b9f0807deb7b88a3b25cbe6e98857c635290f3 , Owner: Account Address ( 0xf1ba1e0bd0741cba3ce5f65de2827452091e3bfe )
    

Save 2 “**Created Objects” ID** با دستور دیپلوی، 2 تا آی دی طبق خروجی بالا میسازید که باید برای تراکنش روی اسمارت کانترکت اونهارو سیو کنید **توجه: آی دی های شما با من فرق میکنه که باید آی دی خودتون رو در نظر بگیرید** ID - Owner: Account address = `Object_ID` 0x4e17ea3a175b28a4a9f32f9b8f78c713f74941e8

ID - Owner: Immutable = `Contract_ID` 0xa9a9d2280b4eaf9b2fe12c6f3c200452b00fb6f5

Owner: Account address = `Wallet_Address`

### 3.4 Check your Object\_ID

**برای اینکه آبجکت آیدی خودتون رو چک کنید**

    sui client object Object_ID
    

برای مثال دستور بالا با “آبجکت آیدی” من

    sui client object 0x4e17ea3a175b28a4a9f32f9b8f78c713f74941e8
    

جوابی که از دستور بالا میگیرید، آخرین خطش عبارت زیر رو میبینید که 0 هست یعنی تراکنشی انجام نشده `swords_created: 0`

4\. Interaction with Smart Contract
-----------------------------------

برای تراکنش روی کانترکت خودتون

    sui client call --package Contract_ID --module "my_module" --function "sword_create" --args Object_ID 5 5 Wallet_Address --gas-budget 1000
    

در دستور بالا 3 مورد زیر رو با اطلاعاتی که در مرحله دیپلوی سیو کردید جاگذاری کنید

`Contract_ID` `Object_ID` `Wallet_address`

برای مثال با آیدی های من:

    sui client call --package 0xa9a9d2280b4eaf9b2fe12c6f3c200452b00fb6f5 --module "my_module" --function "sword_create" --args 0x4e17ea3a175b28a4a9f32f9b8f78c713f74941e8 5 5 0xf1ba1e0bd0741cba3ce5f65de2827452091e3bfe --gas-budget 1000
    

**دوباره آبجکت آیدی خودتون چک کنید**

    sui client object Object_ID
    

میبینید که مقدار `عبارت زیر` از 0 به 1 تبدیل شده یعنی شما یک تراکنش روی اسمارت کانترکت خودتون انجام دادید `swords_created: 1`

تبریک میگم شما کانترکت خودتون روی شبکه تست نت سوی دیپلوی کردید و روی اون تراکنش زدید

موفق و موید باشید

---

*Originally published on [Moei](https://paragraph.com/@0xmoei-2/how-to-deploy-sui-smart-contract)*
