An open API service indexing awesome lists of open source software.

https://github.com/mlibre/goodchain

A decentralized blockchain. Written in Node.js
https://github.com/mlibre/goodchain

blockchain blockchain-platform blockchain-technology consensus distributed-ledger git leveldb nodejs permissioned-blockchain permissionless private-blockchain proof-of-stake proof-of-work typescript

Last synced: 3 days ago
JSON representation

A decentralized blockchain. Written in Node.js

Awesome Lists containing this project

README

          

# GoodChain

به **GoodChain** خوش آمدید، یک پلتفرم بلاکچین که برای کاربران مبتدی و حرفه‌ای طراحی شده است و به دنبال سادگی و انعطاف‌پذیری است. با استفاده از `TypeScript` و `LevelDB`، **GoodChain** محیطی قابل تنظیم برای آزمایش الگوریتم‌های اجماع ارائه می‌دهد که شامل گزینه پیش‌فرض **اثبات کار ساده (PoW)** است.

**GoodChain** یک دفتر کل توزیع‌شده است که امکان انجام تراکنش‌های امن و غیرقابل بازگشت را در یک شبکه همتا به همتای توزیع‌شده از نودها فراهم می‌کند و از یکپارچگی داده‌ها اطمینان حاصل می‌کند.

## ویژگی‌های کلیدی 🚀

- **اجماع پلاگینی**: با الگوریتم‌های اجماع خود آزمایش کنید یا از پیاده‌سازی پیش‌فرض PoW استفاده کنید
- **API RESTful**: به راحتی سیستم‌های خارجی را با API کاربرپسند `GoodChain` یکپارچه کنید
- **مدیریت کیف پول**: به‌طور کارآمد کیف پول‌های دیجیتال را مدیریت کنید، موجودی‌ها را ردیابی کنید و تراکنش‌ها را انجام دهید
- **کشف و همگام‌سازی نودها**: نودهای دیگر در شبکه را کشف و با آنها همگام شوید تا یک حالت ثابت در سراسر بلاکچین حفظ شود
- **استخر تراکنش‌ها**: تراکنش‌های در انتظار را با استخر تراکنش‌های داخلی مدیریت کنید
- **اعتبارسنجی زنجیره**: از یکپارچگی بلاکچین با اعتبارسنجی بلاک‌ها و تراکنش‌ها اطمینان حاصل کنید
- **EKVS**: `پایگاه داده‌های کلید-مقدار پایدار قابل تعبیه` پایگاه داده‌هایی هستند که می‌توانند در برنامه شما تعبیه شوند. این بدان معنی است که `نیاز به سرور جداگانه` یا فرایند برای مدیریت پایگاه داده نیست. `LevelDB` یک مثال محبوب از `EKVS` است. `GoodChain` از کتابخانه `Level`، یک رابط `Node.js` برای `LevelDB` استفاده می‌کند.

## شروع به کار 🛠️

برای شروع ماجراجویی خود با `GoodChain`، مخزن را کلون کنید و وابستگی‌ها را نصب کنید:

```bash
# مخزن را کلون کنید
git clone https://github.com/mlibre/GoodChain.git
cd GoodChain

# نصب وابستگی‌های جهانی
sudo npm install -g nodemon tsx typescript eslint vitest

# نصب وابستگی‌های پروژه
npm install

# کلیدهای ماینر خود را برای اولین بار تولید کنید
tsx src/test/generateKeys.ts

# اولین بلاک را استخراج کنید
tsx src/test/init.ts

# می‌توانید فایل‌های Node.js را مستقیماً اجرا کنید
node dist/test/init.js

# نود GoodChain را اجرا کنید
npm run dev
```

## REST API

### اجرای REST API 🌐

سرور `RESTful API` را شروع کنید:

```bash
npm run dev
# یا
npm start -- --host "http://localhost:3000" --nodes "http://localhost:3001" --dbPath "./assets/db/" --minerKeysFile "./assets/keys/miner.json" --name "GoodChain"
```

### اجرای چندین نود REST 🌟

چندین نود در شبکه GoodChain اجرا کنید! هر نود هویت منحصر به فرد خود را دارد و به شبکه غیرمتمرکز کمک می‌کند. برای مثال:

```bash
# نود 1
npm run 3000

# نود 2
npm run 3001

# نود 3
npm run 3002
```

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

### نقاط انتهایی RESTful API 🛣️

`GoodChain` مجموعه‌ای غنی از نقاط انتهایی **HTTP API** را برای تعاملات بلاکچین شما فراهم می‌کند. کشف کنید، آزمایش کنید و برنامه‌های شگفت‌انگیز بسازید!

| نقطه انتهایی | متد | توضیحات |
| --------------------- | ---- | ------------------------------------------------------------------------------------- |
| `/block` | GET | اطلاعات مربوط به یک بلاک خاص یا آخرین بلاک در صورت عدم ارائه پارامتر را بازیابی می‌کند |
| `/block` | POST | یک بلاک جدید به بلاکچین اضافه می‌کند |
| `/block/broadcast` | GET | آخرین بلاک را به همه نودهای شبکه پخش می‌کند |
| `/chain` | GET | کل بلاکچین را بازیابی می‌کند |
| `/chain/update` | POST | بلاکچین محلی را با بازیابی بلاک‌ها از نودهای دیگر به‌روزرسانی می‌کند |
| `/mine` | GET | یک بلاک جدید استخراج می‌کند و به بلاکچین اضافه می‌کند |
| `/node` | GET | اطلاعات مربوط به همه نودهای شبکه را بازیابی می‌کند |
| `/node` | POST | یک نود جدید به شبکه اضافه می‌کند |
| `/node/update` | POST | دانش نود محلی از شبکه را با بازیابی داده‌ها از نودهای دیگر به‌روزرسانی می‌کند |
| `/node/broadcast` | GET | نود محلی را به همه نودهای دیگر در شبکه معرفی می‌کند |
| `/transaction` | GET | تراکنش‌های در انتظار را بازیابی می‌کند |
| `/transaction` | POST | یک تراکنش جدید به استخر تراکنش‌ها اضافه می‌کند |
| `/transaction/update` | GET | استخر تراکنش‌های محلی را با بازیابی تراکنش‌ها از نودهای دیگر به‌روزرسانی می‌کند |
| `/transaction/sign` | POST | یک تراکنش را با یک کلید خصوصی امضا می‌کند |
| `/wallet` | GET | اطلاعات مربوط به کیف پول‌های بلاکچین را بازیابی می‌کند |

## تست پروژه 🧪

برای اطمینان از قابلیت اطمینان و درستی پروژه `GoodChain`، می‌توانید تست‌ها را اجرا کنید.

### اجرای تمامی تست‌ها

کل مجموعه تست‌ها را با استفاده از `vitest` اجرا کنید:

```bash
npm run test
# یا
vitest run
```

### اجرای تست‌ها با رابط کاربری

برای تجربه تست تعاملی، از رابط کاربری `vitest` استفاده کنید:

```bash
npm run test-ui
# یا
vitest --ui
```

### اجرای تست‌های خاص

برای اجرای یک فایل تست خاص، به عنوان مثال، تست‌های بلاکچین:

```bash
npm run test src/test/blockchain.test.ts
```

## پشتیبانی و منابع 🤝

برای شروع سریع با درخواست‌های API، مجموعه **Bruno** را در پوشه `assets` بررسی کنید. برای کمک بیشتر، می‌توانید از صفحه [مسائل GitHub](https://github.com/mlibre/GoodChain/issues) ما بازدید کنید.

## مجوز 📜

این پروژه تحت مجوز عمومی همگانی گنو منتشر شده است.

## تاریخچه نسخه‌ها

### نسخه 1

اولین نسخه `GoodChain` یک پیاده‌سازی ساده بلاکچین بود که برای یادگیری فناوری بلاکچین استفاده می‌شد. از فایل‌های `json` برای ذخیره داده‌های بلاکچین استفاده می‌کرد. کد را در [انتشارها](https://github.com/mlibre/GoodChain/releases/tag/1.0.5) بررسی کنید.

### نسخه 2

نسخه دوم `GoodChain` با استفاده از `Node.js` و `Express.js` ساخته شد و از `git` برای ذخیره داده‌های بلاکچین استفاده می‌کرد. کد را در [انتشارها](https://github.com/mlibre/GoodChain/releases/tag/2.0.2) بررسی کنید.

### نسخه 3 (آخرین نسخه)

نسخه سوم `GoodChain` با استفاده از `TypeScript`، `Express.js` و `LevelDB` ساخته شده است.

## کمک مالی 💖

اگر `GoodChain` را مفید یافتید و مایل به حمایت از توسعه آن هستید، می‌توانید ETH را به آدرس زیر اهدا کنید:

> 0xc9b64496986E7b6D4A68fDF69eF132A35e91838e