Thank you. Kiến thức của mình còn sai nhiều quá, hy vọng có thời gian sẽ xem tiếp phần 2 để hiểu thêm. MÌnh cũng đang bắt đầu tìm hiểu Blockchain, hy vọng có cơ hội cafe chém gió and build some thing with you.
@bienhoang Mình có một vài ý kiến về vấn đề mining này
Máy nhanh nhất giải ra bài toán sẽ được chia 1 phần Bitcoin được sinh ra sau khi Block được thêm vào
Người tìm ra lời giải cho bài toán Proof Of Work sẽ được nhận toàn bộ Bitcoin từ coinbase, cũng như phí giao dịch của những transaction trong block, mà không chia sẻ cho bất kì ai.
Hiện thì việc solo mining gần như là không thể nên các thợ mỏ phải join vào các mining pool, khi đó thì thành quả tạo ra sẽ được chia cho những người đóng góp sức mạnh tính toán vào trong mining pool thôi.
các máy tham gia verify đáp án cũng nhận được Bitcoin nhưng ít hơn
Các node thực hiện verify block, tức các full node, hoàn toàn không nhận được một chút Bitcoin nào. Công việc của full node chỉ là verify block, verify transaction.
1 Block được thêm nếu có trên 50% máy trong mạng đồng thuận việc xác nhận các giao dịch trong Block đó
1 Block có thể được thêm bất chấp việc nó chỉ được thiểu số chấp nhận. Hiện tượng một block mới được tạo ra, nhưng chỉ được một lượng full node nhất định chấp nhận, và một block khác được lượng full node còn lại chấp nhận, gọi là chain split, hay chain fork. chain fork có thể được (hay bị) tạo ra bởi hard fork.
Việc tạo ra block mới là công việc của Miner, verify block là công việc của full node. Full node có thể chấp nhận hay không chấp nhận block mà miner tạo ra. Khi nó không chấp nhận, có nghĩa là giữa miner và full node đó đã có consensus khác nhau, có thể dẫn đến sự ra đời của 2 blockchain khác nhau.
Nếu một người kiểm soát trên 50% lượng máy trong mạng.
Majority Attack chỉ có thể thực hiện khi một người kiểm soát được trên 50% sức mạnh tính toán (hashrate) của mạng lưới, chứ không phải 50% lượng máy tính trong mạng. Việc kiểm soát 50% full node không thể tấn công được mạng lưới.
có khả năng thay đổi các giao dịch trong mạng Blockchain
Majority Attack chỉ có thể khiến một giao dịch đã được verify trở thành chưa verify, để tấn công Double Spending, chứ không thể thay đổi nội dung của một giao dịch. Nó cũng không thể xoá một giao dịch, tạo ra một giao dịch sử dụng bitcoin của người khác, hay thay đổi lượng coin nhận được từ một block ...
Bổ sung 1 tí về đoạn Mining hay làm sao để 1 Block được tạo ra. Theo quy tắc của Bitcoin thì cứ 10 phút sẽ có 1 Block được thêm vào, tuy nhiên số lượng máy tính tham gia và mạng Bitcoin ngày 1 lớn, dễ tới việc giải bài toán Decentralized Consensus ngày một nhanh hơn, và như vậy thời gian để 1 Block được thêm vào sẽ nhanh hơn trước đây => Vi phạm quy tắc. Để khắc phục việc này thì mạng Blockchain đưa ra 1 Target cho mạng, hay gọi là Target bits. Tức là đề bài được đưa ra sẽ khó hơn, để đảm bảo dù có thêm bao nhiêu máy tính vào mạng để Mining thì cũng phải mất 10 phút mới tạo ra được 1 Block. Máy nhanh nhất giải ra bài toán sẽ được chia 1 phần Bitcoin được sinh ra sau khi Block được thêm vào, các máy tham gia verify đáp án cũng nhận được Bitcoin nhưng ít hơn. 1 Block được thêm nếu có trên 50% máy trong mạng đồng thuận việc xác nhận các giao dịch trong Block đó. Nếu một người kiểm soát trên 50% lượng máy trong mạng, có khả năng thay đổi các giao dịch trong mạng Blockchain, còn gọi là tấn công quá bán. Nhưng việc này khó xảy ra vì không thểm nào kiểm soát được 50% mạng.
Dạ em chào anh ạ, em cũng có vài vấn đề tồn tại trên IE do IE chưa hỗ trợ path 2D trong canvas, tức là từ đường path lúc trước e vẽ bằng svg, nhưng mà vài lý do e cần chuyển nó về vẽ trên canvas tận dụng đường path svg cho trước đấy, e có tìm hiểu thì dùng path2D, nhưng nó ko hỗ trợ trên IE anh ạ, hiện tại em chưa tìm được giải pháp, không biết là anh đã từng gặp trường hợp này chưa ạ, nhờ anh chia sẻ cho em chút giải pháp với ạ. Em cám ơn anh
chào bạn, không hẳn là do chưa try catch đâu bạn. mình đang tìm hiểu về apollo js. phần trả response về cho client. mình đã tìm hiểu trên mạng. xem nhiều clip vs tutorial đều throw new Error . Mình đang phân vân là tại sao mình đã get được error trên server const { data: { loading, error, contacts }, client } = this.props;
trả về trong trong phần render() của react ròi. mà tại sao trong tab console của trình duyệt lại văng ra cái lỗi
Unhandled error GraphQL error: Bạn không có quyền truy cập hệ thống.hehe Error: GraphQL error: Bạn không có quyền truy cập hệ thống.hehe
at new ApolloError (http://localhost:3000/static/js/bundle.js:20785:28)
at http://localhost:3000/static/js/bundle.js:19847:41
at http://localhost:3000/static/js/bundle.js:20234:17
at Array.forEach (<anonymous>)
at http://localhost:3000/static/js/bundle.js:20233:18
at Map.forEach (<anonymous>)
at QueryManager../node_modules/apollo-client/core/QueryManager.js.QueryManager.broadcastQueries (http://localhost:3000/static/js/bundle.js:20228:22)
at Object.next (http://localhost:3000/static/js/bundle.js:20267:31)
at SubscriptionObserver.next (http://localhost:3000/static/js/bundle.js:145182:14)
at http://localhost:3000/static/js/bundle.js:21121:76
at Array.forEach (<anonymous>)
at Object.next (http://localhost:3000/static/js/bundle.js:21121:43)
at SubscriptionObserver.next (http://localhost:3000/static/js/bundle.js:145182:14)
at SubscriptionObserver.next (http://localhost:3000/static/js/bundle.js:145182:14)
at http://localhost:3000/static/js/bundle.js:21319:26
at <anonymous>
__stack_frame_overlay_proxy_console__ @ index.js:2177
Uncaught (in promise) Error: GraphQL error: Bạn không có quyền truy cập hệ thống.hehe
at new ApolloError (ApolloError.js:34)
at Object.next (QueryManager.js:700)
at SubscriptionObserver.next (zen-observable.js:154)
at dedupLink.js:49
at Array.forEach (<anonymous>)
at Object.next (dedupLink.js:49)
at SubscriptionObserver.next (zen-observable.js:154)
at SubscriptionObserver.next (zen-observable.js:154)
at httpLink.js:140
at <anonymous>````
Mình cũng đang tìm hiểu apollo kết hợp với react js để query qua Graphql. Mình đang gặp vấn đề về việc ném error về client.
Trong phần resolvers mình viết thế này
contacts: async (root, arg, context) => {
if (!context.user) {
throw new AuthorizeError();
}
return getAllContacts();
},
Trường hợp hoàn hảo là người dùng đăng nhập thành công. context.user sẽ có giá trị. và mình lấy được danh sách contacts.
Sau đó mình check trường hợp context.user = null. thì mình ném ra một cái lỗi throw new AuthorizeError():
const AuthorizeError = createError('AuthorizeError', {
message: '**Bạn không có quyền truy cập hệ thống.hehe**',
data: { fasdfaf: 'fdasff' }
});
Sau khi mình reload lại thì Dưới client ( trong source react ) mình catch được cái lỗi đó. nhưng khong hiểu vì sao trong tab console của trình duyệt lại văng ra cái lỗi:
Trong tab console văng lỗi này
Unhandled error GraphQL error: Bạn không có quyền truy cập hệ thống.hehe Error: GraphQL error: Bạn không có quyền truy cập hệ thống.hehe
at new ApolloError
Mình xin đính kèm cái hình
Viblo có hỗ trợ cú pháp markdown trong form của comment, answer, question, post giúp highlight code bằng cú pháp: ``` CODE HERE ```.
Bạn có thể đặt câu hỏi và sử dụng cú pháp trên để câu hỏi được hiển thị đẹp và dễ đọc hơn nhé.
@zhuylanz Có 2 môi trường ở đây. 1 là môi trường chạy script này. 2 là môi trường ở trang mình muốn lấy dữ liệu. Hàm evaluate để trả dữ liệu từ môi trường 2 về môi trường 1 để mình xử lý đó bạn
THẢO LUẬN
Mình cũng mới tìm hiểu về lĩnh vực này thôi, hy vọng sẽ được trao đổi thêm nhiều với bạn
Thank you. Kiến thức của mình còn sai nhiều quá, hy vọng có thời gian sẽ xem tiếp phần 2 để hiểu thêm. MÌnh cũng đang bắt đầu tìm hiểu Blockchain, hy vọng có cơ hội cafe chém gió and build some thing with you.
@bienhoang Mình có một vài ý kiến về vấn đề mining này
Người tìm ra lời giải cho bài toán Proof Of Work sẽ được nhận toàn bộ Bitcoin từ coinbase, cũng như phí giao dịch của những transaction trong block, mà không chia sẻ cho bất kì ai. Hiện thì việc solo mining gần như là không thể nên các thợ mỏ phải join vào các mining pool, khi đó thì thành quả tạo ra sẽ được chia cho những người đóng góp sức mạnh tính toán vào trong mining pool thôi.
Các node thực hiện verify block, tức các full node, hoàn toàn không nhận được một chút Bitcoin nào. Công việc của full node chỉ là verify block, verify transaction.
1 Block có thể được thêm bất chấp việc nó chỉ được thiểu số chấp nhận. Hiện tượng một block mới được tạo ra, nhưng chỉ được một lượng full node nhất định chấp nhận, và một block khác được lượng full node còn lại chấp nhận, gọi là chain split, hay chain fork. chain fork có thể được (hay bị) tạo ra bởi hard fork. Việc tạo ra block mới là công việc của Miner, verify block là công việc của full node. Full node có thể chấp nhận hay không chấp nhận block mà miner tạo ra. Khi nó không chấp nhận, có nghĩa là giữa miner và full node đó đã có consensus khác nhau, có thể dẫn đến sự ra đời của 2 blockchain khác nhau.
Majority Attack chỉ có thể thực hiện khi một người kiểm soát được trên 50% sức mạnh tính toán (hashrate) của mạng lưới, chứ không phải 50% lượng máy tính trong mạng. Việc kiểm soát 50% full node không thể tấn công được mạng lưới.
Majority Attack chỉ có thể khiến một giao dịch đã được verify trở thành chưa verify, để tấn công Double Spending, chứ không thể thay đổi nội dung của một giao dịch. Nó cũng không thể xoá một giao dịch, tạo ra một giao dịch sử dụng bitcoin của người khác, hay thay đổi lượng coin nhận được từ một block ...
Những phần này đã được mình đề cập ở Bitcoin: The Hype, The Myth, and The Truth - Part 2, hy vọng mình có thể trao đổi thêm ở post đó
Bổ sung 1 tí về đoạn Mining hay làm sao để 1 Block được tạo ra. Theo quy tắc của Bitcoin thì cứ 10 phút sẽ có 1 Block được thêm vào, tuy nhiên số lượng máy tính tham gia và mạng Bitcoin ngày 1 lớn, dễ tới việc giải bài toán Decentralized Consensus ngày một nhanh hơn, và như vậy thời gian để 1 Block được thêm vào sẽ nhanh hơn trước đây => Vi phạm quy tắc. Để khắc phục việc này thì mạng Blockchain đưa ra 1 Target cho mạng, hay gọi là Target bits. Tức là đề bài được đưa ra sẽ khó hơn, để đảm bảo dù có thêm bao nhiêu máy tính vào mạng để Mining thì cũng phải mất 10 phút mới tạo ra được 1 Block. Máy nhanh nhất giải ra bài toán sẽ được chia 1 phần Bitcoin được sinh ra sau khi Block được thêm vào, các máy tham gia verify đáp án cũng nhận được Bitcoin nhưng ít hơn. 1 Block được thêm nếu có trên 50% máy trong mạng đồng thuận việc xác nhận các giao dịch trong Block đó. Nếu một người kiểm soát trên 50% lượng máy trong mạng, có khả năng thay đổi các giao dịch trong mạng Blockchain, còn gọi là tấn công quá bán. Nhưng việc này khó xảy ra vì không thểm nào kiểm soát được 50% mạng.
Đọc xong hoang mang luôn =))
Bài viết quá hay
Mình muốn hỏi phím tắt để tạo cái comment trên mỗi function như nào vậy nhỉ? Thanks you!
bài viết hay quá. cảm ơn bạn nhé !
Dạ em chào anh ạ, em cũng có vài vấn đề tồn tại trên IE do IE chưa hỗ trợ path 2D trong canvas, tức là từ đường path lúc trước e vẽ bằng svg, nhưng mà vài lý do e cần chuyển nó về vẽ trên canvas tận dụng đường path svg cho trước đấy, e có tìm hiểu thì dùng path2D, nhưng nó ko hỗ trợ trên IE anh ạ, hiện tại em chưa tìm được giải pháp, không biết là anh đã từng gặp trường hợp này chưa ạ, nhờ anh chia sẻ cho em chút giải pháp với ạ. Em cám ơn anh
em cảm ơn anh nhé ^^ (clap5)
Một bài viết rất thú vị
:vampire: :vampire: :vampire:
chào bạn, không hẳn là do chưa try catch đâu bạn. mình đang tìm hiểu về apollo js. phần trả response về cho client. mình đã tìm hiểu trên mạng. xem nhiều clip vs tutorial đều throw new Error . Mình đang phân vân là tại sao mình đã get được error trên server
const { data: { loading, error, contacts }, client } = this.props;
trả về trong trong phần render() của react ròi. mà tại sao trong tab console của trình duyệt lại văng ra cái lỗiok. thanks bạn nhé. hihi.
VD: Chào mọi người.
Mình cũng đang tìm hiểu apollo kết hợp với react js để query qua Graphql. Mình đang gặp vấn đề về việc ném error về client. Trong phần resolvers mình viết thế này
Trường hợp hoàn hảo là người dùng đăng nhập thành công. context.user sẽ có giá trị. và mình lấy được danh sách contacts.
Sau đó mình check trường hợp context.user = null. thì mình ném ra một cái lỗi throw new AuthorizeError():
Sau khi mình reload lại thì Dưới client ( trong source react ) mình catch được cái lỗi đó. nhưng khong hiểu vì sao trong tab console của trình duyệt lại văng ra cái lỗi:
Trong tab console văng lỗi này Unhandled error GraphQL error: Bạn không có quyền truy cập hệ thống.hehe Error: GraphQL error: Bạn không có quyền truy cập hệ thống.hehe at new ApolloError Mình xin đính kèm cái hình
Viblo có hỗ trợ cú pháp markdown trong form của comment, answer, question, post giúp highlight code bằng cú pháp: ``` CODE HERE ```. Bạn có thể đặt câu hỏi và sử dụng cú pháp trên để câu hỏi được hiển thị đẹp và dễ đọc hơn nhé.
Cám ơn bạn, bài viết rất hay
cảm ơn bình luận của bạn
@zhuylanz Có 2 môi trường ở đây. 1 là môi trường chạy script này. 2 là môi trường ở trang mình muốn lấy dữ liệu. Hàm evaluate để trả dữ liệu từ môi trường 2 về môi trường 1 để mình xử lý đó bạn
anh Khánh cho em hỏi hàm evaluate() là để làm gì vậy ạ? Để hiểu các khái niệm này mình nên tìm đọc tài liệu nào ạ?