Mình khi decode trên python thì gặp chuỗi này :
20180126/\x83\x8a\x83/\x81[\x83X\x83f\x81[\x83^\x8d\xb7\x82\xb5\x91\xd6\x82\xa6\x8a\xd6\x98A\x8e\x91\x97\xbf/
có thể chỉ cho mình nó là của loại nào ko?
mỗi giao dịch được xác nhận thì mất tối đa 10 phút?
Mỗi giao dịch xác nhận mất 10 phút thì không đúng, vì mỗi Block nối thành công mất 10 phút mới đúng. Và một Block thường chứa nhiều giao dịch trong đó. Nên mỗi giao dịch thường chỉ mất vài giây hoặc vài phút.
Bạn hiểu sai chỗ này. Blockchain của mỗi thợ mỏ là có độ dài khác nhau. Nếu mọi người đang đào 1 block mà có 1 thợ mỏ đã đào xong 2 block (Giá trị TimeStamp sẽ được dùng để xác nhận ai nhanh tay hơn). Khi có 1 block được commit vào mạng, ngay lập tức những người còn lại phải bỏ dở công việc (vứt đi toàn bộ Hash đã đào) và lấy cái mới nhất (đã có sẵn 2 Block) và đào tiếp. Nếu cố tình đào cho Block của mình dài hơn thì phải bắt buộc có 3 block. Ở đây đơn thuần là sự cạnh tranh gay gắt về sức mạnh tính toán máy tính. Và tỉ lệ thất bại của BitCoin là khá cao đấy nhé, tiếng anh gọi là "Luck Factor"
Ai là người tìm ra hash cho block tiếp theo nhanh nhất thì người đó chiến thắng với phần thưởng lớn nhất ?
Thời gian để Hash xong 1 Block trung bình là 10 phút. Nhưng không phải Hash xong là ta được thưởng luôn 12,5BitCoin đâu bạn. Vì trong lúc bạn Hash cũng có khoảng 300 người nữa cùng mạng cũng đang Hash cho Block đó. Tỉ lệ bạn đánh thắng được 300 người kia là rất nhỏ, bạn sẽ phải lấy Block người ta đã tạo ra đó, và Hash Block tiếp theo, vứt đi cái mã Hash bạn khổ công bỏ ra 10 phút để đào. Do đó trong mạng thường có 1 tỉ lệ Hash rate để tính được trung bình bạn kiếm đc bao nhiêu $ một giờ.
Với người chiến thắng sẽ nhận hết phần thưởng hay hệ thống sẽ phân chia theo công sức của mỗi thành viên tham gia?
Mỗi một Block Hash thành công và được chấp nhận bởi các thành viên trong mạng, sẽ được thưởng 12,5BitCoin. Bạn có thể xem link vừa nãy để thấy giá trị "Block Reward". Giá trị 12,5BTC này sẽ được đưa vào 1 "Ví tiền ảo" và chỉ có 1 địa chỉ duy nhất thôi. Ai là người sở hữu nó thì lấy dc. Ví này của 1 hay nhiều người thì không ai biết được. Thường chỉ 1 người sở hữu 1 ví. Và cả 1 trang trại đào thì thường cũng chỉ 1 ví tiền mà thôi. Chia ra nhiều ví sẽ mất nhiều phí giao dịch. Chả tội gì.
tính 10 phút là cho ông có tốc độ nào?
Câu hỏi rất chuẩn. Chỗ này là chỗ bị hiểu nhầm nhiều nhất. 10 phút là tính trung bình cho cả Pool (hay Node) hiện tại. Tức là tổng sức mạnh tính toán của tất cả những máy tham gia vào khu vực (Node) hiện tại. Cái này thì rất khủng khiếp. Lên đến hàng tỉ Hash mỗi giây. Máy bạn cùi bắp thì xin thưa, bạn cần khoảng vài trăm năm để ra đc 1 Hash nhé. Như máy tôi có card GTX 1050 cũng chỉ có tốc độ khoảng 3000Hash/s. Bạn có thể xem qua link này https://blockchain.info/charts/hash-rate
cứ 10 phút hệ thống lại khởi động cho cuộc đua ai là người nhanh nhất?
Hệ thống mà bạn nói ở đây chính là các Node, các Pool. Khi thợ mỏ commit Block mới lên hoặc lấy Trans mới về để đào Hash thì đều connect vào đây, ở đây như là một điểm trung gian. Và nó cũng là điểm mà được phép tăng giảm độ khó. Mỗi Block lấy về sẽ có sẵn một cái giá trị Diffyculty (https://blockchain.info/block/0000000000000000002cb3f87709e719ed0f9d44ce8d5c45effec21d1f6ceb59) để căn cứ vào cho thợ mỏ đào. Bạn có thể hình dung là biến "this.DoKho" của mỗi Block là thay đổi tương ứng với mỗi lần lấy file example.html về.
Em nhớ trước đây tạo controller mặc định thì sẽ là restful controller, không dùng các method này thì thêm option --plain gì đó.
Còn bây giờ ngược lại, mặc định controller trống, muốn tạo restful controller thì phải thêm option --resource.
Em không nhớ từ phiên bản nào mà có sự thay đổi này nhưng có lẽ bây giờ nếu anh muốn kết hợp sử dụng với Route::resource() thì phải dùng thêm option --resource mới phải.
Dĩ nhiên thì hiệu năng sẽ là bài toán cho người lập trình. Tuy nhiên vì sử dụng mạng ngang hàng. Thì cơ chế của một đồng tiền Ảo phải có một điểm trung gian để các máy client connect đến. Mỗi một quốc gia sẽ có một nút mạng như thế, ta có thể hiểu là 1 "Node". Và ở đó có hệ thống máy chủ lớn chứa các giao dịch và tính toán các giá trị cần thiết (như bạn yêu cầu). Do đó người dùng gần như k cần quá quan tâm đến liệu máy mình đủ mạnh để join vào mạng blockchain hay k. Thực tế thì điện thoại hoặc thiết bị IoT (tivi, tủ lạnh...) cũng có thể truy cập được blockchain như bình thường.
Mình xin phép được giải đáp các thắc mắc của bạn nhé
a. như vậy thì mỗi giao dịch được xác nhận thì mất tối đa 10 phút ?
Thời gian 1 block được tạo ra là không cố định, thời gian 10 phút / 1 block của Bitcoin chỉ là thời gian trung bình mà thôi, tức là đôi khi có 2 block cách nhau 2, 3 phút, và đôi khi cũng có 2 block cách nhau 15, 20 phút.
Thế nên rất khó để xác định thời gian tối thiểu hay thời gian tối đa để 1 giao dịch được xác nhận.
Hiện tại, một giao dịch được xác định nhanh hay chậm còn tuỳ thuộc vào phí mà giao dịch đó trả cho thợ mỏ nữa, phí thấp thì xác định có mà chờ cả ngày bạn ạ (^^;)
b. Ứng với mỗi block đó thì nhét tất cả các transaction đang đợi giao dịch ? Nếu đúng thì xảy ra một vấn đề là có block chỉ vài transaction, nhưng cũng có block chứa tới cả 100 ngàn giao dịch ? Kích thước của mỗi block có ảnh hưởng gì đến blockchain hay ko ?
Mỗi giao dịch có chứa thông tin, do đó nó có dung lượng. Mỗi block có giới hạn về kích cỡ, như bitcoin là 1MB (hiện nay là 4MB block weight sau khi đã kích hoạt segwit), thế nên số lượng giao dịch có thể chứa trong 1 block sẽ bị giới hạn. Thợ mỏ có thể nhét bao nhiêu giao dịch vào block cũng được, miễn là nó không vượt qua giới hạn đã được cả mạng lưới đồng thuận.
a. Tại một thời điểm có cả nghìn hệ thống khác nhau join vào mạng và cuộc chạy đua xem ai là người tìm ra hash cho block tiếp theo nhanh nhất thì người đó chiến thắng với phần thưởng lớn nhất ? (ở trên bạn có nói ai tìm được hash dài nhất thì chiến thắng nhưng cái chữ dài nhất ở đây hiểu như thế nào ?).
Có rất nhiều thuật toán PoW khác nhau, nhưng nhìn chung tất cả đều hoạt động như bạn nói ở trên: Tranh nhau giải một bài toán. Ai giải được trước thì người đó có tất cả phần thưởng, những người khác sẽ không được gì. Ở bitcoin thì bài toán PoW là dùng thuật toán SHA256 để mã hoá thông tin block để ra một kết quả, nếu kết quả này nhỏ hơn một target (mà cả hệ thống đều biết và đồng thuận từ trước), thì block đó được coi là hợp lệ. Bạn có thể tìm hiểu thêm về Bitcoin Block cũng như Bitcoin PoW ở video này: https://viblo.asia/p/bitcoin-the-hype-the-myth-and-the-truth-part-2-Az45bbAQ5xY
b. Với người chiến thắng sẽ nhận hết phần thưởng hay hệ thống sẽ phân chia theo công sức của mỗi thành viên tham gia ?
Ai tìm được ra lời giải cho bài toán PoW sẽ nhận được hết, những người khác sẽ không được gì.
Tuy nhiên, hiện nay việc giải bài toán PoW ngày càng trở nên khó khăn và dường như bạn sẽ không thể giải được nếu chỉ tự "đào" một mình. Do đó các mining pool ra đời. Hiểu đơn giản là nhiều thợ mỏ sẽ "lập thành một hội" với nhau, và có thể chia đều thành quả cho các thành viên tham gia tuỳ theo sức mạnh cống hiến.
c. Như thuật toán ở trên có nói tăng độ khó sao cho cứ 10 phút mới sinh ra 1 block, cái này mình cũng chưa hiểu rõ là tính 10 phút là cho ông có tốc độ nào ? và cứ 10 phút hệ thống lại khởi động cho cuộc đua ai là người nhanh nhất ?
Như mình đã nói ở trên, 10 phút là tốc độ trung bình. Cả mạng lưới sẽ tiến hành điều chỉnh độ khó của bài toán PoW sau mỗi 2016 blocks (~ 2 tuần). Độ khó ở đây chính là giá trị target ở trên, thợ mỏ cần tìm ra một số ngẫu nhiên, để khi hash nó cùng với các thông tin trong block được một số nhỏ hơn target này (target càng nhỏ thì càng phải thử nhiều lần để tìm ra đáp án). Giả sự hiện tại mạng lưới có độ khó là T. Thấy đào bitcoin có lợi nhuận lớn, nhiều thợ mỏ mới tham gia mạng lưới, dẫn đến sức mạnh tính toán của mạng lưới tăng -> thời gian đào được block nhanh -> thời gian trung bình nhỏ hơn 10 phút -> sau 2016 blocks, mạng lưới sẽ tính toán lại, để làm tăng độ khó lên (giảm target xuống) -> thời gian đào được block lại chậm đi -> thời gian trung bình được duy trì trong khoảng 10 phút.
Ngược lại, thời gian trung bình mà lớn hơn 10 phút (do nhiều thợ mỏ bỏ đi) -> ở lần điều chỉnh tới, độ khó sẽ được điều chỉnh giảm đi.
Sau khi tìm được một block, tất cả lại bắt tay vào giải bài toán mới: bài toán PoW cho block tiếp theo!
Cảm ơn bài biết rất hữu ích của bạn,mình có một số chỗ chưa hiểu rõ mong bạn chi cho.
Với Bitcoin cứ 10 phút mới sinh ra 1 block
a. như vậy thì mỗi giao dịch được xác nhận thì mất tối đa 10 phút ?
b. Ứng với mỗi block đó thì nhét tất cả các transaction đang đợi giao dịch ? Nếu đúng thì xảy ra một vấn đề là có block chỉ vài transaction, nhưng cũng có block chứa tới cả 100 ngàn giao dịch ? Kích thước của mỗi block có ảnh hưởng gì đến blockchain hay ko ?
Trong quá trình xác minh giao dịch và tìm sự đồng thuật(PoW):
a. Tại một thời điểm có cả nghìn hệ thống khác nhau join vào mạng và cuộc chạy đua xem ai là người tìm ra hash cho block tiếp theo nhanh nhất thì người đó chiến thắng với phần thưởng lớn nhất ? (ở trên bạn có nói ai tìm được hash dài nhất thì chiến thắng nhưng cái chữ dài nhất ở đây hiểu như thế nào ?).
b. Với người chiến thắng sẽ nhận hết phần thưởng hay hệ thống sẽ phân chia theo công sức của mỗi thành viên tham gia ?
c. Như thuật toán ở trên có nói tăng độ khó sao cho cứ 10 phút mới sinh ra 1 block, cái này mình cũng chưa hiểu rõ là tính 10 phút là cho ông có tốc độ nào ? và cứ 10 phút hệ thống lại khởi động cho cuộc đua ai là người nhanh nhất ?
THẢO LUẬN
Mình khi decode trên python thì gặp chuỗi này : 20180126/\x83\x8a\x83/\x81[\x83X\x83f\x81[\x83^\x8d\xb7\x82\xb5\x91\xd6\x82\xa6\x8a\xd6\x98A\x8e\x91\x97\xbf/ có thể chỉ cho mình nó là của loại nào ko?
Mỗi giao dịch xác nhận mất 10 phút thì không đúng, vì mỗi Block nối thành công mất 10 phút mới đúng. Và một Block thường chứa nhiều giao dịch trong đó. Nên mỗi giao dịch thường chỉ mất vài giây hoặc vài phút.
Hoàn toàn có thể. Blockchain của BitCoin chỉ quy định là 1MB/1Block. Mình thích chọn bao nhiêu giao dịch đưa vào cũng đc, miễn là <=1MB. Bạn có thể xem qua 1 Block thực tế ở đây: https://blockchain.info/block/0000000000000000002cb3f87709e719ed0f9d44ce8d5c45effec21d1f6ceb59
Bạn hiểu sai chỗ này. Blockchain của mỗi thợ mỏ là có độ dài khác nhau. Nếu mọi người đang đào 1 block mà có 1 thợ mỏ đã đào xong 2 block (Giá trị TimeStamp sẽ được dùng để xác nhận ai nhanh tay hơn). Khi có 1 block được commit vào mạng, ngay lập tức những người còn lại phải bỏ dở công việc (vứt đi toàn bộ Hash đã đào) và lấy cái mới nhất (đã có sẵn 2 Block) và đào tiếp. Nếu cố tình đào cho Block của mình dài hơn thì phải bắt buộc có 3 block. Ở đây đơn thuần là sự cạnh tranh gay gắt về sức mạnh tính toán máy tính. Và tỉ lệ thất bại của BitCoin là khá cao đấy nhé, tiếng anh gọi là "Luck Factor"
Thời gian để Hash xong 1 Block trung bình là 10 phút. Nhưng không phải Hash xong là ta được thưởng luôn 12,5BitCoin đâu bạn. Vì trong lúc bạn Hash cũng có khoảng 300 người nữa cùng mạng cũng đang Hash cho Block đó. Tỉ lệ bạn đánh thắng được 300 người kia là rất nhỏ, bạn sẽ phải lấy Block người ta đã tạo ra đó, và Hash Block tiếp theo, vứt đi cái mã Hash bạn khổ công bỏ ra 10 phút để đào. Do đó trong mạng thường có 1 tỉ lệ Hash rate để tính được trung bình bạn kiếm đc bao nhiêu $ một giờ.
Mỗi một Block Hash thành công và được chấp nhận bởi các thành viên trong mạng, sẽ được thưởng 12,5BitCoin. Bạn có thể xem link vừa nãy để thấy giá trị "Block Reward". Giá trị 12,5BTC này sẽ được đưa vào 1 "Ví tiền ảo" và chỉ có 1 địa chỉ duy nhất thôi. Ai là người sở hữu nó thì lấy dc. Ví này của 1 hay nhiều người thì không ai biết được. Thường chỉ 1 người sở hữu 1 ví. Và cả 1 trang trại đào thì thường cũng chỉ 1 ví tiền mà thôi. Chia ra nhiều ví sẽ mất nhiều phí giao dịch. Chả tội gì.
Câu hỏi rất chuẩn. Chỗ này là chỗ bị hiểu nhầm nhiều nhất. 10 phút là tính trung bình cho cả Pool (hay Node) hiện tại. Tức là tổng sức mạnh tính toán của tất cả những máy tham gia vào khu vực (Node) hiện tại. Cái này thì rất khủng khiếp. Lên đến hàng tỉ Hash mỗi giây. Máy bạn cùi bắp thì xin thưa, bạn cần khoảng vài trăm năm để ra đc 1 Hash nhé. Như máy tôi có card GTX 1050 cũng chỉ có tốc độ khoảng 3000Hash/s. Bạn có thể xem qua link này https://blockchain.info/charts/hash-rate
Hệ thống mà bạn nói ở đây chính là các Node, các Pool. Khi thợ mỏ commit Block mới lên hoặc lấy Trans mới về để đào Hash thì đều connect vào đây, ở đây như là một điểm trung gian. Và nó cũng là điểm mà được phép tăng giảm độ khó. Mỗi Block lấy về sẽ có sẵn một cái giá trị Diffyculty (https://blockchain.info/block/0000000000000000002cb3f87709e719ed0f9d44ce8d5c45effec21d1f6ceb59) để căn cứ vào cho thợ mỏ đào. Bạn có thể hình dung là biến "this.DoKho" của mỗi Block là thay đổi tương ứng với mỗi lần lấy file example.html về.
Em nghĩ rằng logout thì không nên dùng get.
Em nhớ trước đây tạo controller mặc định thì sẽ là restful controller, không dùng các method này thì thêm option --plain gì đó. Còn bây giờ ngược lại, mặc định controller trống, muốn tạo restful controller thì phải thêm option --resource. Em không nhớ từ phiên bản nào mà có sự thay đổi này nhưng có lẽ bây giờ nếu anh muốn kết hợp sử dụng với Route::resource() thì phải dùng thêm option --resource mới phải.
Tks bạn
Cảm ơn bạn.
Dĩ nhiên thì hiệu năng sẽ là bài toán cho người lập trình. Tuy nhiên vì sử dụng mạng ngang hàng. Thì cơ chế của một đồng tiền Ảo phải có một điểm trung gian để các máy client connect đến. Mỗi một quốc gia sẽ có một nút mạng như thế, ta có thể hiểu là 1 "Node". Và ở đó có hệ thống máy chủ lớn chứa các giao dịch và tính toán các giá trị cần thiết (như bạn yêu cầu). Do đó người dùng gần như k cần quá quan tâm đến liệu máy mình đủ mạnh để join vào mạng blockchain hay k. Thực tế thì điện thoại hoặc thiết bị IoT (tivi, tủ lạnh...) cũng có thể truy cập được blockchain như bình thường.
Mình xin phép được giải đáp các thắc mắc của bạn nhé
Thời gian 1 block được tạo ra là không cố định, thời gian 10 phút / 1 block của Bitcoin chỉ là thời gian trung bình mà thôi, tức là đôi khi có 2 block cách nhau 2, 3 phút, và đôi khi cũng có 2 block cách nhau 15, 20 phút.
Thế nên rất khó để xác định thời gian tối thiểu hay thời gian tối đa để 1 giao dịch được xác nhận.
Hiện tại, một giao dịch được xác định nhanh hay chậm còn tuỳ thuộc vào phí mà giao dịch đó trả cho thợ mỏ nữa, phí thấp thì xác định có mà chờ cả ngày bạn ạ (^^;)
Mỗi giao dịch có chứa thông tin, do đó nó có dung lượng. Mỗi block có giới hạn về kích cỡ, như bitcoin là 1MB (hiện nay là 4MB block weight sau khi đã kích hoạt segwit), thế nên số lượng giao dịch có thể chứa trong 1 block sẽ bị giới hạn. Thợ mỏ có thể nhét bao nhiêu giao dịch vào block cũng được, miễn là nó không vượt qua giới hạn đã được cả mạng lưới đồng thuận.
Có rất nhiều thuật toán PoW khác nhau, nhưng nhìn chung tất cả đều hoạt động như bạn nói ở trên: Tranh nhau giải một bài toán. Ai giải được trước thì người đó có tất cả phần thưởng, những người khác sẽ không được gì. Ở bitcoin thì bài toán PoW là dùng thuật toán SHA256 để mã hoá thông tin block để ra một kết quả, nếu kết quả này nhỏ hơn một target (mà cả hệ thống đều biết và đồng thuận từ trước), thì block đó được coi là hợp lệ. Bạn có thể tìm hiểu thêm về Bitcoin Block cũng như Bitcoin PoW ở video này: https://viblo.asia/p/bitcoin-the-hype-the-myth-and-the-truth-part-2-Az45bbAQ5xY
Ai tìm được ra lời giải cho bài toán PoW sẽ nhận được hết, những người khác sẽ không được gì. Tuy nhiên, hiện nay việc giải bài toán PoW ngày càng trở nên khó khăn và dường như bạn sẽ không thể giải được nếu chỉ tự "đào" một mình. Do đó các mining pool ra đời. Hiểu đơn giản là nhiều thợ mỏ sẽ "lập thành một hội" với nhau, và có thể chia đều thành quả cho các thành viên tham gia tuỳ theo sức mạnh cống hiến.
Như mình đã nói ở trên, 10 phút là tốc độ trung bình. Cả mạng lưới sẽ tiến hành điều chỉnh độ khó của bài toán PoW sau mỗi 2016 blocks (~ 2 tuần). Độ khó ở đây chính là giá trị target ở trên, thợ mỏ cần tìm ra một số ngẫu nhiên, để khi hash nó cùng với các thông tin trong block được một số nhỏ hơn target này (target càng nhỏ thì càng phải thử nhiều lần để tìm ra đáp án). Giả sự hiện tại mạng lưới có độ khó là T. Thấy đào bitcoin có lợi nhuận lớn, nhiều thợ mỏ mới tham gia mạng lưới, dẫn đến sức mạnh tính toán của mạng lưới tăng -> thời gian đào được block nhanh -> thời gian trung bình nhỏ hơn 10 phút -> sau 2016 blocks, mạng lưới sẽ tính toán lại, để làm tăng độ khó lên (giảm target xuống) -> thời gian đào được block lại chậm đi -> thời gian trung bình được duy trì trong khoảng 10 phút.
Ngược lại, thời gian trung bình mà lớn hơn 10 phút (do nhiều thợ mỏ bỏ đi) -> ở lần điều chỉnh tới, độ khó sẽ được điều chỉnh giảm đi.
Sau khi tìm được một block, tất cả lại bắt tay vào giải bài toán mới: bài toán PoW cho block tiếp theo!
Bạn có thể tìm hiểu thêm tại video này nhé https://viblo.asia/p/bitcoin-the-hype-the-myth-and-the-truth-part-1-OeVKBo7JZkW
Hay qúa anh ạ
bài viết cụ thể, chi tiết, cám ơn tác giả
Cảm ơn bài biết rất hữu ích của bạn,mình có một số chỗ chưa hiểu rõ mong bạn chi cho.
a. như vậy thì mỗi giao dịch được xác nhận thì mất tối đa 10 phút ?
b. Ứng với mỗi block đó thì nhét tất cả các transaction đang đợi giao dịch ? Nếu đúng thì xảy ra một vấn đề là có block chỉ vài transaction, nhưng cũng có block chứa tới cả 100 ngàn giao dịch ? Kích thước của mỗi block có ảnh hưởng gì đến blockchain hay ko ?
a. Tại một thời điểm có cả nghìn hệ thống khác nhau join vào mạng và cuộc chạy đua xem ai là người tìm ra hash cho block tiếp theo nhanh nhất thì người đó chiến thắng với phần thưởng lớn nhất ? (ở trên bạn có nói ai tìm được hash dài nhất thì chiến thắng nhưng cái chữ dài nhất ở đây hiểu như thế nào ?).
b. Với người chiến thắng sẽ nhận hết phần thưởng hay hệ thống sẽ phân chia theo công sức của mỗi thành viên tham gia ?
c. Như thuật toán ở trên có nói tăng độ khó sao cho cứ 10 phút mới sinh ra 1 block, cái này mình cũng chưa hiểu rõ là tính 10 phút là cho ông có tốc độ nào ? và cứ 10 phút hệ thống lại khởi động cho cuộc đua ai là người nhanh nhất ?
ra phần tiếp theo thì báo mình nha
Hehe, thank you bro, rất vui vì nó hữu ích
Aha cảm ơn bạn nhé, ban đầu tui viết 2, sau rồi lại thấy thích số 4 hơn, sửa lại ..
So excited bro
tks anh, hóng tiếp phần 2
bài viết rất hữu ích với những newbie như em . Many thanks
tks anh, bài viết rất hay ạ
Em cảm ơn anh!
Thanks e. 😊