Bởi: Brett McLain, Giám đốc kỹ thuật - Crypto, Fiat, Staking
Nếu bạn quan tâm đến tiền điện tử, thanh toán hoặc đặt cược và muốn giúp xây dựng hệ thống tài chính trong tương lai, nhóm kỹ sư tài trợ @ Kraken đang tuyển dụng!
Khi Kraken ra mắt cách đây một thập kỷ, chỉ có ba loại tiền điện tử được hỗ trợ: BTC, LTC và XRP.
Ngày nay, Kraken hỗ trợ 82 tài sản trên 33 blockchain và các dịch vụ đặt cược cho 8 loại tiền điện tử.
Để tạo điều kiện thuận lợi cho hàng triệu giao dịch gửi tiền, rút tiền và đặt cược mỗi năm tại Kraken, nhóm kỹ thuật tiền điện tử vận hành hàng trăm dịch vụ để đảm bảo dòng tiền vào và ra khỏi sàn giao dịch suôn sẻ. Phần mềm blockchain làm nền tảng cho các dịch vụ này được cập nhật thường xuyên; đối với một số blockchain hoạt động tích cực hơn, hard fork và soft fork có thể diễn ra hàng tháng trong khi những blockchain khác như Ethereum là sự kiện hàng năm hai lần. Nói chung, có ít nhất một vài bản cập nhật phần mềm cho cơ sở hạ tầng blockchain của chúng tôi hàng tuần.
Thách thức về việc hỗ trợ và cập nhật một số lượng lớn các dịch vụ khác nhau, đồng thời xây dựng các dịch vụ mới có thể gây khó khăn.
Trong 12 tháng qua, nhóm của chúng tôi đã hỗ trợ thêm cho:
- 60 loại tiền điện tử mới:
- 39 x mã thông báo ERC20
- Polkadot (khi khởi chạy mainnet)
- Kusama
- Filecoin (khi ra mắt mainnet)
- Luồng (khi khởi chạy mainnet)
- Kava
- Mã thông báo web năng lượng (khi khởi chạy mạng chính)
- USDT (TRC20)
- 10 x Crowdloans Parachain
- Solana
- 1 x mã thông báo SPL (Huyết thanh)
- Mina
- 8 tài sản đặt cược mới:
- Polkadot (khi khởi chạy mainnet)
- Kusama
- Ethereum 2.0 (khi ra mắt mainnet)
- Luồng (khi khởi chạy mainnet)
- Cardano
- Vu trụ
- Kava
- Solana
Những thành tựu này đã được hoàn thành cùng với việc duy trì các tích hợp hiện có của chúng tôi. Các kỹ sư của nhóm tiền điện tử không chỉ chịu trách nhiệm về phần mềm cổng được viết trong nhà, mà còn về việc duy trì và triển khai cơ sở hạ tầng blockchain của chúng tôi mà các cổng của chúng tôi dựa vào. Nhịp độ phát triển blockchain trên các dự án này có thể là một giai đoạn bùng nổ, với những thay đổi đột phá và các tính năng mới xuất hiện thường xuyên và đôi khi có rất ít cảnh báo.
Vì vậy, làm thế nào Kraken quản lý để phát hành hàng chục sản phẩm mới mỗi năm trong khi vẫn theo kịp tốc độ phát triển nhanh chóng của blockchain?
Kiểm tra End to End (E2E)!
Tại sao chúng tôi coi trọng các bài kiểm tra E2E và tránh chế giễu
Kể từ những ngày đầu ở Kraken, người ta đã nhấn mạnh rằng các bài kiểm tra E2E là loại bài kiểm tra có giá trị nhất mà một kỹ sư có thể xây dựng. Các bài kiểm tra đơn vị có vị trí của chúng, nhưng nhiều nhà phát triển thiếu kinh nghiệm với các tích hợp phức tạp có xu hướng viết các bài kiểm tra đơn vị cho mọi đoạn mã mà họ xây dựng với niềm tin rằng họ đang cải thiện chất lượng tổng thể của phần mềm mà họ đang phát triển.
Con đường này, trong khi đầy những ý định tốt, thường có thể dẫn đến nhiều đau đớn trên đường. Quá phụ thuộc vào các bài kiểm tra đơn vị có xu hướng củng cố kiến trúc của bạn; nó giống như đổ một lớp epoxy lên trên toàn bộ cơ sở mã của bạn. Bạn đang kết hợp chặt chẽ mã với các bài kiểm tra của nó, làm cho mã cứng hơn, không linh hoạt và có khả năng bị cấu trúc lại. Nếu bạn cần thay đổi, có thể bạn sẽ cần thực hiện những thay đổi quan trọng đối với các bài kiểm tra và trong một số trường hợp, hãy loại bỏ chúng hoàn toàn. Mã tái cấu trúc là khả năng quan trọng mà nhóm kỹ sư cần có trong bộ công cụ của họ và bất kỳ thứ gì gây thêm ma sát để dễ tái cấu trúc cần được đánh giá cẩn thận trước khi đưa ra. Khi cấu trúc lại mã, một bài kiểm tra E2E được thiết kế tốt thường không yêu cầu nhiều thay đổi và cung cấp sự linh hoạt trong việc điều chỉnh nội bộ của ứng dụng trong khi đảm bảo rằng nó tiếp tục hoạt động như mong đợi.
Điều này có nghĩa là bạn không nên viết các bài kiểm tra đơn vị? Không có gì! Có nhiều trường hợp mà các bài kiểm tra đơn vị là giải pháp hoàn hảo, tuy nhiên, chúng tôi nhận thấy rằng đối với các tích hợp phức tạp, các bài kiểm tra E2E hoạt động tốt hơn. Nói chung, các bài kiểm tra đơn vị hiệu quả nhất khi được viết cho mã đáp ứng các tiêu chí sau:
- Thuật toán phức tạp với nhiều trường hợp cạnh.
- Phạm vi chặt chẽ với các yêu cầu được xác định rõ.
- Hoàn thành một đơn vị công việc.
- Không quốc tịch.
Những đoạn mã phức tạp nhỏ, có phạm vi chặt chẽ này thường là khối xây dựng của một ứng dụng lớn hơn và ngay cả khi xảy ra một bộ tái cấu trúc, những chức năng này sẽ khó có thể thay đổi. Trong thế giới của chúng ta, đây sẽ là những thứ như lấy địa chỉ, xác thực địa chỉ, ký giao dịch, v.v.
Điểm mấu chốt ở đây là với tư cách là một nhóm kỹ sư nhỏ, không có cách nào chúng tôi có thể duy trì khối lượng dịch vụ mà chúng tôi hiện đang hỗ trợ, và xây dựng sản phẩm mới mà không có thử nghiệm đầu cuối. Các bài kiểm tra đơn vị nên được coi là tiền cược của bảng, nhưng riêng biệt, chúng sẽ không đủ để chúng tôi theo kịp không gian đang phát triển này. Thay vào đó, chúng tôi đã chọn đầu tư mạnh mẽ vào các bộ tích hợp và kiểm tra E2E mạnh mẽ để xác nhận rằng các dịch vụ của chúng tôi sẽ hoạt động thành công trong các phương thức hoạt động phổ biến nhất của chúng.
Những thách thức của các bài kiểm tra E2E
Mặc dù các bài kiểm tra E2E có thể mạnh mẽ, nhưng chúng không phải là thuốc chữa bách bệnh. Khi tích hợp với các dịch vụ của bên thứ ba, những loại kiểm tra này thường mất đi rất nhiều giá trị vì một số điểm cuối hoặc giao diện nhất định cần được chế tạo để kiểm tra đầy đủ luồng của một chức năng hoặc lệnh gọi cụ thể. Mô hình giả chỉ tốt khi bạn hiểu rõ về dịch vụ mà bạn đang mô phỏng và do đó, chúng có thể dễ xảy ra lỗi khi các bản cập nhật thường xuyên và lớn. Việc duy trì mã của riêng bạn cũng như các đoạn mã của bạn là vi phạm nguyên tắc KHÔ (không lặp lại chính mình), một thuật ngữ được đặt ra bởi David Thomas và Andrew Hunt trong “Lập trình viên thực dụng”. Trong cuốn sách của họ, họ tuyên bố rằng "Mọi phần kiến thức phải có một đại diện duy nhất, rõ ràng, có thẩm quyền trong một hệ thống." Tạo một phiên bản chế nhạo của bất kỳ dịch vụ nào có nghĩa là bây giờ có hai bản sao có khả năng khác nhau của dịch vụ nói trên: phiên bản chế nhạo của bạn và phiên bản thực tế. Lỗi khi dịch hành vi của người phụ thuộc bị chế nhạo hiện là một mối quan tâm khác cần giải thích.
Các đăng ký để giải cứu
Rất may cho chúng tôi, hầu hết các blockchain hỗ trợ khả năng chạy các mạng riêng tạm thời có thể được chia thành một phần của quá trình tích hợp liên tục (CI) / triển khai liên tục (CD) của chúng tôi. Ví dụ phổ biến nhất về điều này là chế độ kiểm tra hồi quy (regtest) của Bitcoin. Khi bạn bắt đầu bitcoin với tùy chọn `-regtest`, nó sẽ tạo ra một môi trường blockchain cục bộ mới mà bạn có toàn quyền kiểm soát. Tính năng chính của chế độ regtest là bạn có thể khai thác một số lượng khối tùy ý theo ý muốn, cho phép các bài kiểm tra E2E của bạn hoàn thành các chuyến đi vòng quanh để gửi và rút tiền thuộc mọi loại và biến thể, mô phỏng hàng trăm tình huống trong vòng vài giây. Các trường hợp cạnh và các tình huống độc đáo khác có thể dễ dàng được mô phỏng trong chế độ kiểm tra lại, như giao dịch multisig, re-orgs, thay thế bằng phí (RBF), con trả cho cha mẹ (CPFP) và hơn thế nữa! Các bài kiểm tra này không chỉ đảm bảo rằng mã của chúng tôi không có lỗi, nó còn xác nhận trạng thái kết thúc của blockchain và sổ cái của chúng tôi để đảm bảo rằng mọi thứ đang hoạt động như mong đợi.
Là một phần của quá trình để thêm hỗ trợ cho một loại tiền điện tử mới trên Kraken, nhóm tài trợ xây dựng một khuôn khổ kiểm tra lại cho tất cả các danh sách mới. Mã này là nền tảng của chế độ bảo trì của chúng tôi: bất kỳ khi nào một phiên bản mới được phát hành, chỉ cần cập nhật phiên bản nút blockchain và chạy lại đường ống CI của chúng tôi để đảm bảo rằng không có thay đổi nào. Việc đọc kỹ các ghi chú phát hành và cộng tác với cộng đồng vẫn rất cần thiết, nhưng những thử nghiệm này giúp chúng tôi tự tin phát hành các phiên bản mới mà nếu không chúng tôi sẽ không có.
Giải pháp sáng tạo
Thật không may cho chúng tôi, không phải tất cả các blockchain đều được thử nghiệm như Bitcoin. Các blockchains mới thường giới thiệu các khái niệm mới và để cung cấp cho khách hàng của chúng tôi quyền truy cập vào các công nghệ mới thú vị nhất, Kraken thích khởi chạy hỗ trợ cho các blockchain mới càng gần thời điểm bắt đầu của mạng chính càng tốt. Để hỗ trợ một cách an toàn tài sản mới vào hoặc gần ngày ra mắt, Kraken đôi khi cần phát triển các bộ khai thác thử nghiệm phức tạp để có được sự tự tin trong việc tích hợp và đảm bảo rằng các khoản tiền của khách hàng không gặp rủi ro.
Một minh họa hoàn hảo cho điều này là khi Kraken ra mắt hỗ trợ cho Ethereum 2.0 chỉ 3 ngày sau khi mạng chính hoạt động vào ngày 1 tháng 2020 năm 2.0. Mặc dù hàng nghìn cá nhân và công ty trên khắp thế giới đã giúp thử nghiệm Ethereum 2.0 trên nhiều mạng thử nghiệm như Medalla và Spadina, chúng tôi vẫn đã quyết định đưa khái niệm đăng ký lên một cấp độ hoàn toàn khác với sự tích hợp này. Chúng tôi đã sớm biết rằng Ethereum 800,000 sẽ là một sự phát triển đáng kể và niềm tin đó đã được chứng minh là đúng khi hàng triệu ETH cho đến nay đã được đặt trên chuỗi beacon, bao gồm hơn XNUMX ETH đã được đặt bởi các khách hàng của Kraken.
Dưới đây, bạn có thể thấy sơ đồ về tập hợp các dịch vụ mà đường ống tích hợp liên tục (CI) của chúng tôi quay lên và giảm xuống mỗi khi nhà phát triển cam kết mã cho một trong các kho mã ETH2 của chúng tôi.
Ở mức cao, quy trình kiểm tra là:
- Bắt đầu các nút chính và nút thay thế của ETH1 (mỗi nút thay phiên nhau khai thác để có sự đồng thuận) với nguồn gốc chứa một lượng ETH ban đầu để thử nghiệm.
- Khởi động nút chuỗi báo hiệu ETH2 dưới dạng chuỗi riêng bằng cách sử dụng chế độ cấu hình tối thiểu đặc biệt, trong đó chỉ cần 16 trình xác thực để kích hoạt nguồn gốc.
- Triển khai hợp đồng thông minh ETH2 vào blockchain ETH1.
- Gửi ETH vào hợp đồng ký gửi ETH2 trong đó tiền được đốt và trình xác thực được tạo trên nút xác thực bên ngoài ETH2. Đây là những trình xác thực chỉ đang vận hành mạng ETH2 và được đối xử như thể chúng bên ngoài đối với bất kỳ trình xác thực Kraken nào.
- Khởi động trình khám phá khối ETH1 & ETH2.
- Khởi động Cơ sở dữ liệu.
- Start Gateway và Signatories.
- Chèn yêu cầu của khách hàng để đặt cược ETH -> ETH2.
- Gateway nhận yêu cầu của khách hàng và gửi ETH đến hợp đồng ký gửi trên blockchain ETH1 và tạo một số lượng trình xác thực tương ứng trên nút xác thực nội bộ ETH2. Trình xác thực được tách biệt thành các tập hợp trình xác thực bên trong và bên ngoài để chúng tôi có thể kiểm tra điều gì sẽ xảy ra khi trình xác thực của chúng tôi gặp sự cố (để kiểm tra việc chặt chém, hình phạt, phần thưởng bị mất) và để xem điều gì sẽ xảy ra khi phần còn lại của mạng gặp sự cố hoặc ngoại tuyến nhưng trình xác thực của chúng tôi vẫn lên.
- Theo dõi cho đến khi trình xác thực hoạt động trên chuỗi ETH2, bắt đầu theo dõi phần thưởng, khoản thanh toán, cắt giảm thử nghiệm và hình phạt, phát hiện phần thưởng bị mất và trả phần thưởng cho khách hàng.
- Chạy quy trình đối chiếu tài chính riêng biệt của chúng tôi trên tất cả các giao dịch để đảm bảo mọi thứ trong tất cả các sổ cái của chúng tôi khớp chính xác.
Trên đây chỉ là một bản tóm tắt cấp cao về những gì đang diễn ra trong khuôn khổ thử nghiệm của chúng tôi; có một số thử nghiệm, kiểm tra và xác nhận khác xảy ra. Nếu nhà phát triển cần gỡ lỗi điều gì đó hoặc xem trạng thái của một trong hai mạng, họ có thể tham khảo ý kiến của trình khám phá khối để xem nhanh chính xác điều gì đã xảy ra. Chúng tôi thường không bao gồm trình khám phá khối trong đường dẫn CI của mình, nhưng với sự phức tạp của việc tích hợp, sẽ rất hữu ích trong giai đoạn phát triển để hình dung những gì đang xảy ra trên chuỗi.
Bạn có thể nghĩ rằng điều này gây ra sự chậm trễ lớn cho đường ống CI của chúng tôi, nhưng may mắn thay, đó không phải là trường hợp. Hiện tại, toàn bộ đường ống CI cho repo Ethereum 2.0 của chúng tôi chỉ mất 14 phút để chạy. Điều này bao gồm kiểm toán / xây dựng tất cả các phụ thuộc, bắt đầu tất cả các dịch vụ, triển khai các hợp đồng thông minh khác nhau cho blockchain, các khối khai thác, tạo trình xác thực và sau đó chạy qua tất cả hơn 100 kịch bản thử nghiệm.
Kết luận:
Việc phát triển các bài kiểm tra E2E toàn diện cho mọi tích hợp blockchain đơn lẻ tại Kraken tiêu tốn một lượng đáng kể tài nguyên kỹ thuật. Đó là mức giá mà chúng tôi sẵn lòng trả, vì mối quan tâm hàng đầu của chúng tôi là sự an toàn của tiền của khách hàng và đảm bảo rằng họ có trải nghiệm chất lượng trên nền tảng của chúng tôi. Nhóm của chúng tôi có thể phát hành nhiều sản phẩm hơn nếu chúng tôi dành ít thời gian hơn cho các thử nghiệm khi xây dựng các tích hợp mới không? Không có câu hỏi. Tuy nhiên, làm như vậy sẽ đi ngược lại các đặc tính và giá trị của không chỉ nhóm kỹ sư mà còn của toàn bộ công ty. Các thử nghiệm này đảm bảo rằng chúng tôi có thể cập nhật một cách an toàn lên các phiên bản mới của phần mềm blockchain, tăng độ tin cậy trong quá trình phân nhánh cứng / mềm và giảm bớt căng thẳng cho nhà phát triển khi triển khai các thay đổi.
Tại sao các kỹ sư của Kraken lại là một trong những người được kính trọng nhất trong ngành? Tin nhăn nay từ Steve Hunt, Phó Giám đốc Kỹ thuật của Kraken, phác thảo các giá trị và sự cống hiến của chúng tôi trong việc giúp đỡ các kỹ sư blockchain khác.
Nguồn: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- truy cập
- Tài khoản
- hoạt động
- Tất cả
- Tất cả giao dịch
- Cho phép
- Các Ứng Dụng
- kiến trúc
- xung quanh
- tài sản
- Tài sản
- trận đánh
- chuỗi đèn hiệu
- Bitcoin
- blockchain
- BTC
- xây dựng
- Xây dựng
- cuộc gọi
- trường hợp
- thách thức
- thay đổi
- Séc
- trẻ em
- mã
- hợp tác
- đến
- Chung
- cộng đồng
- Các công ty
- công ty
- sự tự tin
- Sự đồng thuận
- liên tiếp
- hợp đồng
- hợp đồng
- Tạo
- Crypto
- cryptocurrencies
- cryptocurrency
- Cơ sở dữ liệu
- nhiều
- chậm trễ
- Phát hiện
- phát triển
- Nhà phát triển
- phát triển
- Phát triển
- Giám đốc
- Đầu
- Cạnh
- Hiệu quả
- ky sư
- Kỹ Sư
- Kỹ sư
- Môi trường
- ERC20
- ETH
- ethereum
- Ethereum 2.0
- Ethos
- sự kiện
- Sàn giao dịch
- NHANH
- Đặc tính
- Tính năng
- sự đồng ý
- tài chính
- Linh hoạt
- dòng chảy
- Khung
- Full
- chức năng
- tài trợ
- quỹ
- tương lai
- Tổng Quát
- Genesis
- tốt
- tuyệt vời
- tại đây
- Cao
- House
- Độ đáng tin của
- HTTPS
- Hàng trăm
- Bao gồm
- Tăng lên
- ngành công nghiệp
- Cơ sở hạ tầng
- hội nhập
- tích hợp
- cô lập
- IT
- giữ
- Key
- kiến thức
- Kraken
- lớn
- phóng
- dẫn
- Cấp
- Các bảng liệt kê
- địa phương
- LTC
- Làm
- Khai thác mỏ
- tháng
- Phổ biến nhất
- Đa cấp
- mạng
- Các tính năng mới
- sản phẩm mới
- các nút
- cung cấp
- hoạt động
- Tùy chọn
- gọi món
- Nền tảng khác
- Đau
- Trả
- thanh toán
- nền tảng
- Phổ biến
- giá
- riêng
- Sản phẩm
- dự án
- chất lượng
- Reading
- giảm
- sự phụ thuộc
- Yêu cầu
- Thông tin
- REST của
- Thưởng
- Nguy cơ
- chạy
- chạy
- Sự An Toàn
- Màn
- DỊCH VỤ
- định
- nhỏ
- thông minh
- hợp đồng thông minh
- Hợp đồng thông minh
- So
- Phần mềm
- Không gian
- cổ phần
- Cố định
- Bắt đầu
- Tiểu bang
- căng thẳng
- hỗ trợ
- Hỗ trợ
- Hỗ trợ
- hệ thống
- Công nghệ
- tạm thời
- thử nghiệm
- Kiểm tra
- kiểm tra
- thời gian
- mã thông báo
- hàng đầu
- Theo dõi
- giao dịch
- Giao dịch
- Cập nhật
- Cập nhật
- us
- giá trị
- khối lượng
- web
- tuần
- ở trong
- Công việc
- thế giới
- X
- xrp
- năm