nguyenkha / kcoin-blockchain

KCoin blockchain reference implementation
https://api.kcoin.club/
MIT License
60 stars 8 forks source link

Thắc mắc phân biệt người dùng, tài khoản, địa chỉ + chuyển tiền nội bộ #12

Open TruongLuan1996 opened 6 years ago

TruongLuan1996 commented 6 years ago

Chào mọi người, mình có 2 vấn đề thắc mắc:

  1. Mình đang không phân biệt được người dùng, tài khoản, địa chỉ. Trong yêu cầu ghi mỗi tài khoản có 1 địa chỉ. Vậy mỗi người dùng có 1 hay nhiều tài khoản?
  2. Khi chuyển tiền nội bộ có cần tạo transactions không? Chỉ cần tạo lịch sử giao dịch thôi hay vẫn tạo transactions mà không post lên blockchain?
nguyenkha commented 6 years ago
  1. 1 tài khoản / 1 người dùng = 1 email/password ứng với 1 địa chỉ nhận tiền do hệ thống của bạn tự quản lý
  2. Không cần thiết, chỉ cần lưu lịch sử giao dịch. Miễn sao khi người ta cần rút tiền hệ thống của bạn có tiền để người đó rút.
haingod commented 6 years ago

thầy có thể giải thích rõ hơn được không ạ, nếu không tạo transaction thì làm sao đồng bộ dữ liệu với dữ liệu trên Kcoin được ạ ?

nguyenkha commented 6 years ago

Tổng tiền do hệ thống bạn sở hữu luôn luôn >= tổng số tiền của tất người dùng. Khi chuyển tiền nội bộ là bạn trừ người này, cộng người kia thôi nên đâu có ảnh hưởng gì bên ngoài? Địa chỉ nhận tiền gắn với tài khoản người dùng CHỈ DÙNG ĐỂ NHẬN TIỀN người dùng không sỡ hữu nó, người dùng chỉ có số dư do bạn ghi trong hệ thống của bạn, nhưng họ có quyền chuyển ra ngoài, khi đó mới cần phải đồng bộ lên blockchain.

TruongLuan1996 commented 6 years ago

Em vẫn còn 1 chỗ chưa hiểu. Theo em biết việc chuyển tiền sẽ dựa vào referenceOutputsHashes. Vậy ví dụ như e có 50K trong địa chỉ A, chuyển 30K cho địa chỉ B và nhận tiền thối 20K vào địa chỉ A. Lúc này transaction chưa được xác nhận, nhưng e muốn chuyển 20K còn lại vào địa chỉ C thì referenceOutputsHashes sẽ là gì thầy?

nguyenkha commented 6 years ago

Số dư của địa chỉ A = tổng tất cả các output chưa được sử dụng gửi đến A

Khi em tạo một transaction A gửi đi thì chỉ cần tìm đủ số lượng output là 30K hoặc hơn để chuyển đến B. Trường hợp bạn chỉ có 1 output 50K và gửi đi thì phải chuyển 30K => B và 20K => A và chờ ~10 phút sau, 20K sẽ thành 1 output mới (trong transaction được confirm), lúc đó mới được sử dụng.

19h30 commented 6 years ago

Vậy là 1 tài khoản/ người dùng chỉ có 1 địa chỉ để nhận tiền, và gửi tiền cũng dùng địa chỉ đó, hay là 1 tài khoản có thể add nhiều địa chỉ, địa chỉ mặc định đầu tiên lúc đăng ký sẽ là địa chỉ để nhận tiền, và các địa chỉ còn lại sẽ được dùng để gửi tiền (và nhận tiền thối) hay là như thế nào vậy thầy?

nguyenkha commented 6 years ago

Mỗi người dùng (trên hệ thống của bạn) chỉ có 1 địa chỉ để nhận tiền (mình đã làm rõ yêu cầu lại). Tiền thối bạn có thể nhận bằng chính địa chỉ đó. Còn gửi tiền đi hệ thống có thể dùng địa chỉ đó gửi hoặc quỹ hệ thống (2 cách), miễn sao tiền đến được đích.