nguyenkha / kcoin-blockchain

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

Thắc mắc về trạng thái "Khởi tạo" và yêu cầu huỷ giao dịch nội bộ #21

Open tranvandong196 opened 6 years ago

tranvandong196 commented 6 years ago

Chào thầy và các bạn, mình có câu hỏi là:

  1. Trạng thái "Khởi tạo" có phải là trạng thái khi giao dịch còn nằm trên hệ thống và chưa được gửi lên blockchain đúng không?
  2. Nếu ý trên (1) đúng thì mình thấy người dùng sẽ không thể huỷ giao dịch (Chức này này thành vô dụng) do mình gửi giao dịch lên blockchain ngay khi người dùng xác nhận gửi tiền. Luôn luôn có trạng thái là "Đang xử lý".
  3. Một giao dịch có thể có ReferencedOutputHash đến từ một giao dịch khác đang chờ được xác nhận từ blockchain hay không? Mình có thực hiện liên tiếp nhiều giao dịch như vậy thì thấy thành công. (Điều này dẫn đến mục (2) ở trên, giao dịch luôn được gửi lên blockchain ngay lập tức mà không phải chờ giao dịch trước đó hoàn thành). Chi tiết ở block: 000848c2dbfada617ff0cd630d6a21074e6bd3522e0f1db0751d0cf732bd233b
  4. Giao dịch nội bộ có phải là a. Giao dịch đang chờ blockchain xác nhận ("Đang xử lý") nhưng trên hệ thống vẫn trừ tiền vào số dư khả dụng hay không? b. Giao dịch ở trạng thái "Khởi tạo" và vẫn bị trừ vào số dư khả dụng hay không? c. Nếu a, b đúng thì giao dịch nội bộ tương lai sẽ có thể được gửi lên blockchain? (Nếu người dùng không huỷ).
  5. Mình hiểu như này không biết có đúng không? a. Giao dịch "Khởi tạo" == "Chưa được gửi lên blockchain" b. Giao dịch "Đang xử lý" == "Chờ xác nhận từ blockchain" c. Giao dịch "Hoàn thành" == "Được xác nhận từ blockchain" => Mâu thuẫn: mình thấy chưa hiểu lắm ở mục 1.7 trong file checklist: "Không được hủy các giao dịch đã xác nhận hoặc đã hoàn thành". => "Đã xác nhận" !== "Đã hoàn thành" ??
thamtushinichi commented 6 years ago

Lúc mà khởi tạo ấy thì hệ thống của bạn sẽ gửi cho bạn 1 cái mail để bạn xác nhận. Bạn xác nhận bằng cách nhấn vào link hay ( SMS or google auth) => lúc này transaction sẽ được đổi trạng thái là "đang xử lí" và được chính thức đẩy lên blockchain để chờ xác nhận . Sau 7 phút gì đó thì nó sẽ được blockchain xác nhận . Sau đó thì giao dịch đã chuyển thành công rồi thì bạn get thông tin về transaction xem nó đã chuyển chưa, chuyển rồi thì lại đổi trạng thái "thành công" để hiển thị cho người dùng biết chả hạn ( theo mình hiểu là như thế )

tranvandong196 commented 6 years ago

@thamtushinichi Sao mình thấy trong kịch bản nạp và rút tiền có ghi: "3. Sau khi nhận được xác nhận email và/hoặc 2FA, hệ thống tạo giao dịch Rút tiền với trạng thái khởi tạo và tạm trừ số dư tài khoản của người dùng (số dư khả dụng)" => Theo mình hiểu là người dùng nhấn xác nhận xong (Hệ thống mới nhận được xác nhận email) thì hệ thống mới gán trạng thái "Khởi tạo" và trừ số dư khả dụng chứ nhỉ?

nguyenkha commented 6 years ago
  1. 2
    • Tạo (yêu cầu) rút tiền => giao dịch ở trạng thái khởi tạo, xác thực 2FA => có thể xóa được
    • Sau khi xác thực => đang xử lý => không thể xóa được, trừ số dư khả dụng
    • Transaction đã gửi lên blockchain => đang xử lý => như trên
    • Transaction được xác nhận => xử lý xong/đã xử lý => cập nhật số dư = số dư đầu - số tiền rút

@tranvandong196 Đoạn này bạn trích ở đâu để mình cập nhật lại nha.

  1. Lỗi cài đặt của blockchain, mình sẽ post cập nhật

  2. Giao dịch nội bộ là giao dịch giữa các tài khoản trên hệ thống của bạn (không liên quan đến nhóm khác)

  3. Transaction đã xác nhận nghĩa là Yêu cầu rút tiền đã hoàn thành/đã xử lý/xử lý xong

thamtushinichi commented 6 years ago

Thưa thầy mình không xử lí giao dịch nội bộ có bị trừ điểm không ?, bởi vì cho dù là nội bộ hay không nội bộ thì mình cũng gửi transaction để chuyển tiền và cập nhập số dư được không ạ?

nguyenkha commented 6 years ago

Giao dịch nội bộ (dạng xử lý nhanh) nằm trong phần nâng cao. Còn chuyển tiền đên địa chỉ bất kỳ (thông qua blockchain) thì bắt buộc.

thamtushinichi commented 6 years ago

Đồ án này mình có bắt buộc phải host thực tế không thầy. Bởi vì web api không thể lắng nghe liên tục websocket được ạ? ( do em dùng host miễn phí )

nguyenkha commented 6 years ago

Không bạn, miễn sao khi vấn đáp bạn demo được. Hosting thuộc điểm cộng.