Nhật ký phát triển hợp đồng thông minh Rust (11): Giải thích cơ chế đề xuất của Sputnik DAO
Sputnik-DAO là cơ sở hạ tầng của NEAR Protocol, thúc đẩy mạnh mẽ sự phát triển "phi tập trung" của hệ sinh thái NEAR. Hiện tại, nền tảng này đã tạo điều kiện cho nhiều dự án NEAR hình thành các cộng đồng tự quản "phi tập trung", đồng thời cung cấp một giải pháp quản trị quyết định cộng đồng hoàn chỉnh, linh hoạt và hiệu quả.
Sputnikdaov2 là hợp đồng thông minh được sử dụng cho việc bỏ phiếu quản trị cộng đồng Sputnik-DAO. Bài viết này sẽ giới thiệu các khái niệm cốt lõi của hợp đồng này: đề xuất (Proposal), và trong các bài viết tiếp theo sẽ giới thiệu các mô hình quản trị cộng đồng DAO liên quan đến "đề xuất" (Policy).
1. Khởi xướng đề xuất
Mỗi thành viên trong Sputnik-DAO đều có thể đưa ra ý kiến hoặc đề xuất về quản trị hoặc quản lý dự án. Mỗi thành viên trong cộng đồng nắm giữ cổ phần đều có thể xem xét và bỏ phiếu cho các đề xuất. Các thành viên có thể ảnh hưởng đến hướng đi tương lai của dự án thông qua việc bỏ phiếu hoặc khởi xướng đề xuất mới.
Tại mức hợp đồng, các thành viên DAO có thể gọi phương thức add_proposal() của hợp đồng sputnikdaov2 để đề xuất mới:
Người đề xuất cần cung cấp thông tin chi tiết về đề xuất (ProposalInput):
Mô tả văn bản của đề xuất (Description)
Loại đề xuất ( kind )
Những thông tin này sẽ được truyền vào phương thức add_proposal(), phương thức này sẽ thực hiện kiểm tra và xử lý, tạo ra một đề xuất được khởi tạo hoàn chỉnh (Proposal). Đề xuất cuối cùng sẽ được liên kết với proposal_id duy nhất, được thêm vào hồ bơi đề xuất được duy trì toàn cầu trong hợp đồng.
Thông tin thuộc tính đầy đủ của đề xuất bao gồm:
mô tả (description)
loại (kind )
Đề xuất viên(proposer)
trạng thái ( status )
Thời gian nộp (submission_time)
Trạng thái bỏ phiếu ( vote_counts, votes )
Cần lưu ý rằng, trong Sputnik-DAO có khái niệm về tiền đặt cọc đề xuất (proposal_bond). Hợp đồng yêu cầu người đề xuất phải đặt cọc một số lượng token NEAR nhất định làm tiền bảo đảm khi gọi add_proposal(). Khoản tiền đặt cọc sẽ được hoàn trả cho người đề xuất khi đề xuất kết thúc bình thường.
2. Trạng thái đề xuất
Các đề xuất trong Sputnik-DAO có thể trải qua nhiều trạng thái:
InProgress:trạng thái ban đầu của đề xuất mới
Approved: Được phê duyệt
Rejected: bị bác bỏ
Đã bị xóa:被移除
Expired: đã hết hạn
Đã chuyển
Thất bại: Thực thi thất bại
Trạng thái đề xuất thay đổi được điều khiển bởi phương thức act_proposal(). Các thành viên DAO có thể gọi phương thức này để thực hiện các thao tác như bỏ phiếu cho đề xuất.
VoteApprove: Ủng hộ
VoteReject: phản đối
VoteRemove: loại bỏ
Sau khi bỏ phiếu, sẽ gọi policy.proposal_status() để tiến hành kiểm phiếu. Đối với các đề xuất đạt được ngưỡng bỏ phiếu, trạng thái sẽ thay đổi tương ứng:
Các đề xuất ở trạng thái Approved sẽ được thực hiện
Các đề xuất ở trạng thái Rejected hoặc Removed sẽ thực hiện các thao tác hoàn tất.
Các đề xuất ở trạng thái Removed sẽ bị loại bỏ khỏi hồ sơ đề xuất và không hoàn lại tiền đặt cọc. Các đề xuất ở trạng thái Rejected sẽ được giữ lại trong hồ sơ và sẽ hoàn lại tiền đặt cọc.
3. Thực hiện đề xuất
Nếu trạng thái đề xuất chuyển sang Approved, act_proposal() sẽ gọi internal_execute_proposal() để thực hiện nội dung đề xuất.
Sputnik-DAO hỗ trợ nhiều loại đề xuất, như ChangeConfig, ChangePolicy, FunctionCall, Transfer, v.v. Mỗi loại đều có nhánh xử lý tương ứng.
Dưới đây là quy trình xử lý của hai loại đề xuất điển hình:
3.1 Đề xuất thực hiện hàm hợp đồng(FunctionCall)
Đề xuất loại FunctionCall có thể thực thi các phương thức hợp đồng được chỉ định. Đề xuất bao gồm các thao tác hàm (actions), mỗi hành động có thể chỉ định tên phương thức hợp đồng và tham số.
Cuối cùng hoàn thành việc gọi hàm thông qua hình thức Promise Batch Actions.
3.2 Đề xuất chuyển tiền hợp đồng(Transfer)
Đề xuất loại Transfer có thể chuyển token trong tài khoản hợp đồng đến tài khoản chỉ định.
internal_execute_proposal() sẽ gọi hàm internal_payout(), thực hiện việc chuyển khoản cho các loại token khác nhau và tài khoản nhận.
4. Tóm tắt
Bài viết này giới thiệu về khái niệm cốt lõi của hợp đồng thông minh Sputnik DAO - đề xuất (Proposal), bao gồm việc tạo đề xuất, bỏ phiếu, thay đổi trạng thái và quy trình thực hiện. Tiếp theo sẽ dựa trên đề xuất để giới thiệu thêm về mô hình quản trị của Sputnik-DAO (Policy).
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
7 thích
Phần thưởng
7
5
Đăng lại
Chia sẻ
Bình luận
0/400
Layer2Arbitrageur
· 5giờ trước
meh, một impl gov dao khác... đã kiểm tra số gas rồi - thực sự hiệu quả hơn 47% so với bỏ phiếu eth
Phân tích độ sâu cơ chế đề xuất hợp đồng thông minh Sputnik DAO
Nhật ký phát triển hợp đồng thông minh Rust (11): Giải thích cơ chế đề xuất của Sputnik DAO
Sputnik-DAO là cơ sở hạ tầng của NEAR Protocol, thúc đẩy mạnh mẽ sự phát triển "phi tập trung" của hệ sinh thái NEAR. Hiện tại, nền tảng này đã tạo điều kiện cho nhiều dự án NEAR hình thành các cộng đồng tự quản "phi tập trung", đồng thời cung cấp một giải pháp quản trị quyết định cộng đồng hoàn chỉnh, linh hoạt và hiệu quả.
Sputnikdaov2 là hợp đồng thông minh được sử dụng cho việc bỏ phiếu quản trị cộng đồng Sputnik-DAO. Bài viết này sẽ giới thiệu các khái niệm cốt lõi của hợp đồng này: đề xuất (Proposal), và trong các bài viết tiếp theo sẽ giới thiệu các mô hình quản trị cộng đồng DAO liên quan đến "đề xuất" (Policy).
1. Khởi xướng đề xuất
Mỗi thành viên trong Sputnik-DAO đều có thể đưa ra ý kiến hoặc đề xuất về quản trị hoặc quản lý dự án. Mỗi thành viên trong cộng đồng nắm giữ cổ phần đều có thể xem xét và bỏ phiếu cho các đề xuất. Các thành viên có thể ảnh hưởng đến hướng đi tương lai của dự án thông qua việc bỏ phiếu hoặc khởi xướng đề xuất mới.
Tại mức hợp đồng, các thành viên DAO có thể gọi phương thức add_proposal() của hợp đồng sputnikdaov2 để đề xuất mới:
gỉ pub fn add_proposal(\u0026mut self, proposal: ProposalInput) -\u003e u64
Người đề xuất cần cung cấp thông tin chi tiết về đề xuất (ProposalInput):
Những thông tin này sẽ được truyền vào phương thức add_proposal(), phương thức này sẽ thực hiện kiểm tra và xử lý, tạo ra một đề xuất được khởi tạo hoàn chỉnh (Proposal). Đề xuất cuối cùng sẽ được liên kết với proposal_id duy nhất, được thêm vào hồ bơi đề xuất được duy trì toàn cầu trong hợp đồng.
Thông tin thuộc tính đầy đủ của đề xuất bao gồm:
Cần lưu ý rằng, trong Sputnik-DAO có khái niệm về tiền đặt cọc đề xuất (proposal_bond). Hợp đồng yêu cầu người đề xuất phải đặt cọc một số lượng token NEAR nhất định làm tiền bảo đảm khi gọi add_proposal(). Khoản tiền đặt cọc sẽ được hoàn trả cho người đề xuất khi đề xuất kết thúc bình thường.
2. Trạng thái đề xuất
Các đề xuất trong Sputnik-DAO có thể trải qua nhiều trạng thái:
Trạng thái đề xuất thay đổi được điều khiển bởi phương thức act_proposal(). Các thành viên DAO có thể gọi phương thức này để thực hiện các thao tác như bỏ phiếu cho đề xuất.
Sau khi bỏ phiếu, sẽ gọi policy.proposal_status() để tiến hành kiểm phiếu. Đối với các đề xuất đạt được ngưỡng bỏ phiếu, trạng thái sẽ thay đổi tương ứng:
Các đề xuất ở trạng thái Removed sẽ bị loại bỏ khỏi hồ sơ đề xuất và không hoàn lại tiền đặt cọc. Các đề xuất ở trạng thái Rejected sẽ được giữ lại trong hồ sơ và sẽ hoàn lại tiền đặt cọc.
3. Thực hiện đề xuất
Nếu trạng thái đề xuất chuyển sang Approved, act_proposal() sẽ gọi internal_execute_proposal() để thực hiện nội dung đề xuất.
Sputnik-DAO hỗ trợ nhiều loại đề xuất, như ChangeConfig, ChangePolicy, FunctionCall, Transfer, v.v. Mỗi loại đều có nhánh xử lý tương ứng.
Dưới đây là quy trình xử lý của hai loại đề xuất điển hình:
3.1 Đề xuất thực hiện hàm hợp đồng(FunctionCall)
Đề xuất loại FunctionCall có thể thực thi các phương thức hợp đồng được chỉ định. Đề xuất bao gồm các thao tác hàm (actions), mỗi hành động có thể chỉ định tên phương thức hợp đồng và tham số.
Cuối cùng hoàn thành việc gọi hàm thông qua hình thức Promise Batch Actions.
3.2 Đề xuất chuyển tiền hợp đồng(Transfer)
Đề xuất loại Transfer có thể chuyển token trong tài khoản hợp đồng đến tài khoản chỉ định.
internal_execute_proposal() sẽ gọi hàm internal_payout(), thực hiện việc chuyển khoản cho các loại token khác nhau và tài khoản nhận.
4. Tóm tắt
Bài viết này giới thiệu về khái niệm cốt lõi của hợp đồng thông minh Sputnik DAO - đề xuất (Proposal), bao gồm việc tạo đề xuất, bỏ phiếu, thay đổi trạng thái và quy trình thực hiện. Tiếp theo sẽ dựa trên đề xuất để giới thiệu thêm về mô hình quản trị của Sputnik-DAO (Policy).