Trang thanh toán bị treo 5 giây, tay vừa lỡ run lại bấm thêm một lần nữa. Thanh toán thông thường còn có thể tra hai giao dịch trong lịch sử, nhưng với giao dịch ẩn danh—khi giấu cả số tiền lẫn người tham gia—thì mạng lẽ nào biết rằng bạn không hề tiêu cùng một khoản tiền hai lần?
Tôi đi theo câu hỏi này để tách lại Phoenix của @Dusk . Thay vì ghi số dư công khai, nó chia tài sản thành các note được mã hóa, và cam kết của note được ghi vào cây Merkle. Khi chi tiêu, bằng chứng không kiến thức (zero-knowledge proof) sẽ chứng minh rằng note tồn tại thật, do người dùng kiểm soát và bảo toàn đầu vào/đầu ra, nhưng không công khai số tiền cụ thể hay note tương ứng.
Thứ thực sự bắt “double-spend” là nullifier—có thể hiểu là dấu đánh dấu hủy (vô hiệu) duy nhất còn lại sau khi note đã được dùng. Bên ngoài không thể suy ngược từ nó để ra được note gốc, nhưng mạng có thể kiểm tra xem dấu đánh dấu đó đã từng xuất hiện hay chưa. Nếu cùng một note bị tạo thành hai giao dịch, chúng sẽ xung đột trên cùng một nullifier, nên hai giao dịch không thể cùng lúc đều hợp lệ.
Tài liệu hiện tại của Dusk cũng nêu rõ: trong lúc giao dịch Phoenix tạo ra xung đột nullifier trong mempool, thì chỉ một giao dịch mới có Gas cao hơn *nghiêm ngặt* mới có thể thay thế giao dịch cũ. Tăng phí rồi gửi lại có thể chỉ là đang thay thế một lần thanh toán chứ không phải tạo thêm một giao dịch mới. Nhưng một khi giao dịch đã vào được khối đã được chấp nhận và được thực thi, dù hợp đồng trả về lỗi thì note liên quan và Gas cũng vẫn bị tiêu hao; và phải đợi khối đi vào trạng thái finalized mới tính là kết cục thật sự.
Vì vậy, mật mã giải quyết việc tài sản không thể bị sao chép, còn ví vẫn phải giải thích cho người dùng các trạng thái như: đang chờ xử lý, đã bị thay thế, thực thi thất bại và xác nhận cuối cùng. Nếu chỉ hiển thị “thất bại”, người dùng vẫn có thể cứ bấm thử lại nhiều lần.
$DUSK là Gas và tài sản đặt cọc, nhưng không thể dùng nó để “bảo chứng” cho trải nghiệm sản phẩm. Tôi muốn xem ví có thể hiển thị mối quan hệ thay thế hay không—lý do note bị tiêu hao và trạng thái tính cuối cùng (finality). Quyền riêng tư có thể che chi tiết, nhưng không thể che việc giao dịch có xảy ra hay không.
#dusk $DUSK
Tôi đi theo câu hỏi này để tách lại Phoenix của @Dusk . Thay vì ghi số dư công khai, nó chia tài sản thành các note được mã hóa, và cam kết của note được ghi vào cây Merkle. Khi chi tiêu, bằng chứng không kiến thức (zero-knowledge proof) sẽ chứng minh rằng note tồn tại thật, do người dùng kiểm soát và bảo toàn đầu vào/đầu ra, nhưng không công khai số tiền cụ thể hay note tương ứng.
Thứ thực sự bắt “double-spend” là nullifier—có thể hiểu là dấu đánh dấu hủy (vô hiệu) duy nhất còn lại sau khi note đã được dùng. Bên ngoài không thể suy ngược từ nó để ra được note gốc, nhưng mạng có thể kiểm tra xem dấu đánh dấu đó đã từng xuất hiện hay chưa. Nếu cùng một note bị tạo thành hai giao dịch, chúng sẽ xung đột trên cùng một nullifier, nên hai giao dịch không thể cùng lúc đều hợp lệ.
Tài liệu hiện tại của Dusk cũng nêu rõ: trong lúc giao dịch Phoenix tạo ra xung đột nullifier trong mempool, thì chỉ một giao dịch mới có Gas cao hơn *nghiêm ngặt* mới có thể thay thế giao dịch cũ. Tăng phí rồi gửi lại có thể chỉ là đang thay thế một lần thanh toán chứ không phải tạo thêm một giao dịch mới. Nhưng một khi giao dịch đã vào được khối đã được chấp nhận và được thực thi, dù hợp đồng trả về lỗi thì note liên quan và Gas cũng vẫn bị tiêu hao; và phải đợi khối đi vào trạng thái finalized mới tính là kết cục thật sự.
Vì vậy, mật mã giải quyết việc tài sản không thể bị sao chép, còn ví vẫn phải giải thích cho người dùng các trạng thái như: đang chờ xử lý, đã bị thay thế, thực thi thất bại và xác nhận cuối cùng. Nếu chỉ hiển thị “thất bại”, người dùng vẫn có thể cứ bấm thử lại nhiều lần.
$DUSK là Gas và tài sản đặt cọc, nhưng không thể dùng nó để “bảo chứng” cho trải nghiệm sản phẩm. Tôi muốn xem ví có thể hiển thị mối quan hệ thay thế hay không—lý do note bị tiêu hao và trạng thái tính cuối cùng (finality). Quyền riêng tư có thể che chi tiết, nhưng không thể che việc giao dịch có xảy ra hay không.
#dusk $DUSK
