Nếu bạn muốn xây dựng một sản phẩm liquid staking trên @Dusk , điều đầu tiên bạn học được là cách tiếp cận hiển nhiên sẽ không hoạt động.
Một người dùng stake từ một ví sẽ gọi stake. Một hợp đồng thì không thể. stake_from_contract không được phép gọi trực tiếp — nó kiểm tra rằng nó đã được truy cập như một phần của việc chuyển quỹ từ một tài khoản. Vì vậy, mô hình là: chuyển tiền vào hợp đồng của bạn, sau đó thực hiện một lệnh chuyển từ hợp đồng sang hợp đồng vào hợp đồng stake, đồng thời chỉ định hàm bạn muốn ngay trong chính lệnh chuyển đó.
Tiền và chỉ dẫn đi cùng nhau, hoặc sẽ không có gì xảy ra.
Đó là một lựa chọn thiết kế có chủ ý và tôi đã quen với nó. Nó loại bỏ hẳn một nhóm lỗi khi một hợp đồng tuyên bố đã stake một giá trị nhưng thực tế chưa hề chuyển đi. Lệnh chuyển chính là sự uỷ quyền.
Phần thứ hai mới là điều mà những người xây dựng thường đánh giá thấp. Hợp đồng của bạn phải triển khai callback — một callback để nhận các khoản tiền được unstake, và một callback để nhận phần thưởng. Dusk không “đẩy” giá trị cho bạn rồi để bạn đoán. Nó trao lại cho bạn thông qua một hàm mà bạn bắt buộc phải tự viết. Quên một cái, bạn sẽ tạo ra một pool có thể nhận tiền gửi nhưng không thể trả chúng lại.
Trước khi bắt đầu, có hai ràng buộc đáng biết: mức tối thiểu 1,000 $DUSK áp dụng cho hợp đồng y hệt như áp dụng cho con người, và stake chỉ trở nên hoạt động sau một thời gian maturity.
Một lưu ý về sự trung thực: khi maturity đến, tài liệu đưa cho tôi hai cách diễn đạt khác nhau ở hai nơi — một trang nói 4,320 block, tương đương khoảng 12 giờ; trang khác lại mô tả việc kích hoạt tại một mốc ranh giới epoch. Cả hai có thể đang mô tả cùng một điều theo các góc nhìn khác nhau. Nếu bạn đang xây dựng dựa vào đó, hãy xác nhận trên testnet thay vì tin một trong hai trang.
Hiện tại, trang hệ sinh thái chỉ liệt kê đúng một pool staking được xây dựng theo cách này.
Các builder — việc ép giá trị và chỉ dẫn vào cùng một lần chuyển nguyên tử khiến cuộc sống của bạn an toàn hơn, hay chỉ chậm hơn?

#dusk