# Hiven
- Consensus: DPoS
- Bản chain fork do cộng đồng của **Steem** blockchain, sau khi **Steem** được bán lại cho TRON foundation
- Block time: 3s
- Token:
1.HIVE
2.HDB (neo theo USD)
3.HP (Hive Power): nhận được khi staked HIVE
## Resource Credits
- Hive sử dụng một cơ chế fee-less gọi là Resource Credit (RC). Mỗi tài khoản sẽ có một số lượng **credits related** nhất định phụ thuộc vào việc stake. **credits related** sau đó sẽ được tiêu thụ khi các giao dịch được thực hiện trên blockchain và tự động phục hồi theo thời gian.
- **credits related** tự hồi với tỷ lệ 20% mỗi 24 giờ. Nếu nhu cầu giao dịch của tài khoản nhiều thì cần stake nhiều HIVE để tránh việc hồi phục ko kịp **credits related** mà đã dùng hết.
- Các tài khoản có 0 HIVE staked vẫn có thể giao dịch nhưng trong giới hạn. Ví dụ: một tài khoản có 0 HP có thể có đủ **credits related** đề giao dịch chuyển tiền 17 lần trong một khoảng thời gian sử dụng cụ thể. Bằng cách này, Hive loại bỏ một trong những rào cản gia nhập lớn nhất đối với người dùng và nhà phát triển.
## Delegation
- Hive Power có thể tạm thời cho các tài khoản khác mượn bằng cách sử dụng một tính năng gọi là "Delegation". HP được ủy quyền có thể được cấp cho các tài khoản khác trong bất kỳ khoảng thời gian nào. Việc rút lại ủy quyền hiện tại mất tổng cộng năm ngày để trở lại ví ban đầu.
## Onboarding and Accounts
- Địa chỉ ví Hive là tên tài khoản (vd như **neophyte_997289**), từ 3 đến 16 ký tự.
- Tạo tài khoản có thể mất 1 khoản phí nhỏ
- Có thể dùng tài khoản đã hoạt động để tạo ra tài khoản mới
## Game example: Tic-tac-toe trên Hive
- [Gitlab](https://gitlab.com/mahdiyari/decentralized-game-on-hive.git)
- [Demo](https://tic-tac-toe.mahdiyari.info/)
### Cơ chế đăng nhập
1. User submit address (username) và private key
2. FE sẽ gọi đến blockchain, lấy public key của usernam đó về so sánh xem có trùng với public key được sinh ra từ private key user đã submit hay chưa ?
3. Nếu chưa có acc thì user có thể đăng ký acc tại [đây](https://signup.hive.io/) (mất phí hoặc free)
4. Nếu đăng nhập thành công thì lưu thông tin user vào localStorage
Thư viện tương tác với blockchain của Hive là [hive-tx](https://github.com/mahdiyari/hive-tx-js)
### Server
Sẽ có 2 server node.js
- 1 chạy API
- 1 chạy để stream data từ blockchain
thông tin đẩy lên blockchain sẽ có dạng json
https://hiveblocks.com/tx/44799e6a27c64e935f9072ecb576602330cb80b8
### DB
DB dùng MYSQL, lưu 3 bảng games, moves và request khi lằng nghe được các action người chơi gửi đi trên blockchain (custom_json)
DB ở đây thì giống đồng bộ dữ liệu trên blockchain của game, query về dễ hơn
custom_json của game trên blockchain sẽ có đánh id (tictactoe/0.0.1) để phân biệt với các giao dịch khác của mạng.
Vd 1 đoạn gửi tx từ fe
```js
const game = {
app: 'tictactoe/0.0.1',
action: 'create_game',
id,
starting_player: document.getElementById('starting-player').value
}
const operations = [
[
'custom_json',
{
required_auths: [],
required_posting_auths: [userData.username],
id: 'tictactoe',
json: JSON.stringify(game)
}
]
]
const tx = new hiveTx.Transaction()
await tx.create(operations)
const privateKey = hiveTx.PrivateKey.from(userData.key)
tx.sign(privateKey)
const result = await tx.broadcast()
```