Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/akondas/php-blockchain
Minimal working blockchain implemented in PHP
https://github.com/akondas/php-blockchain
blockchain php php-blockchain
Last synced: 18 days ago
JSON representation
Minimal working blockchain implemented in PHP
- Host: GitHub
- URL: https://github.com/akondas/php-blockchain
- Owner: akondas
- License: mit
- Created: 2018-02-24T00:04:36.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-05-23T07:06:35.000Z (over 2 years ago)
- Last Synced: 2024-10-11T13:13:43.311Z (about 1 month ago)
- Topics: blockchain, php, php-blockchain
- Language: PHP
- Size: 93.8 KB
- Stars: 157
- Watchers: 16
- Forks: 51
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Blockchain implementation in PHP
[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%208.1-8892BF.svg)](https://php.net/)
[![Build](https://github.com/akondas/php-blockchain/actions/workflows/build.yaml/badge.svg)](https://github.com/akondas/php-blockchain/actions/workflows/build.yaml)
[![License](https://poser.pugx.org/akondas/php-blockchain/license.svg)](https://packagist.org/packages/akondas/php-blockchain)Clean code approach to blockchain technology. Learn blockchain by reading source code.
## Roadmap
- [x] Block structure and hashing
- [x] Genesis block
- [x] Storing and validate Blockchain
- [x] Proof of Work with difficulty (missing consensus on the difficulty)
- [X] Communicating with other nodes & controlling the node (based on ReactPHP)
- [ ] Simple persistence layer
- [ ] Going serverless with AWS Lambda (experiment)
- [ ] Start working on KondasCoin [akondas/coin](https://github.com/akondas/coin) :rocket: (Transactions, Wallet, Transaction relaying, Maybe some UI)## Node
To start the node:
```
bin/node
```Default web server port is 8080 but you can change it with `--http-port` param:
```
bin/node --http-port=9090
```Default p2p server port is 3030 but you can change it with `--p2p-port` param:
```
bin/node --p2p-port=2020
```## API
To control node you can use simple (pseudo) REST API:
**[GET] /blocks**
Response (list of all blocks):
```
[{"index":0,"hash":"8b31c9ec8c2df21968aca3edd2bda8fc77ed45b0b3bc8bc39fa27d5c795bc829","previousHash":"","createdAt":"2018-02-23 23:59:59","data":"PHP is awesome!","difficulty":0,"nonce":0}]
```**[POST] /mine**
Request (raw):
```
Data to mine (any string).
```
Response (mined block):
```
{"index":1,"hash":"a6eba6325a677802536337dc83268e524ffae5dc7db0950c98ff970846118f80","previousHash":"8b31c9ec8c2df21968aca3edd2bda8fc77ed45b0b3bc8bc39fa27d5c795bc829","createdAt":"2018-03-13 22:37:07","data":"Something goof","difficulty":0,"nonce":0}
```**[GET] /peers**
Response (list of all connected peers):
```
[{"host":"127.0.0.1","port":3131}]
```**[POST] /peers/add**
Request (json with peer):
```
{"host":"127.0.0.1", "port":"3131"}
```
Response: 204 (empty)## Tests
To run test suite:
```
composer tests
```## Coding standards
Checkers and fixers are in `coding-standard.neon`. To run:
```
composer fix-cs
```## License
php-blockchain is released under the MIT Licence. See the bundled LICENSE file for details.
## Author
Arkadiusz Kondas (@ArkadiuszKondas)