Tổng quan

Trong lập trình Cadence của Flow, Access Control (Kiểm soát Truy cập) là một tính năng rất mạnh mẽ, giúp tăng cường bảo mật của các hợp đồng thông minh. Để thực hiện việc này, chúng ta sử dụng Access Modifiers (Điều chỉnh Truy cập) để xác định phạm vi đọc/ghi cho các biến, hằng số và trường.

Trong bài viết này, chúng ta đã tìm hiểu về các Access Modifiers khác nhau như pub, pub(set), access(account), access(contract) và priv/access(self). Mỗi Access Modifier có phạm vi đọc/ghi khác nhau và chúng ta nên chọn phù hợp với từng trường hợp cụ thể để đảm bảo tính bảo mật của hợp đồng thông minh của chúng ta.

Lập trình Cadence

Access Control và Access Modifiers

Kiểm soát Truy cập là một tính năng cực kỳ mạnh mẽ trong Cadence, và làm cho nó rất đặc biệt.

Kiểm soát Truy cập mô tả cách chúng ta có thể sử dụng các thứ được gọi là “Trình điều chỉnh Truy cập” để tăng cường bảo mật của các hợp đồng thông minh của chúng ta.

Trước đây, trong tất cả các bài học, chúng ta đã khai báo tất cả các biến và hàm bằng từ khóa pub, như sau:

pub let x: Bool

pub fun Somefunction(): Bool {
  return true 
}

Nhưng pub chính xác có nghĩa là gì? Tại sao chúng ta đang đặt nó ở đó? Chúng ta có thể thay thế gì khác không?

Access Modifiers

pub gọi là “Trình điều chỉnh Truy cập” trong Cadence. Một Trình điều chỉnh Truy cập về cơ bản là một mức độ bảo mật trong các hợp đồng thông minh của chúng ta. Nhưng có rất nhiều khác mà chúng ta cũng có thể sử dụng. Hãy nhìn vào sơ đồ này để giúp chúng ta có ý tưởng về tất cả các trình điều chỉnh truy cập khác nhau mà chúng ta có thể sử dụng.

Flow Access Modifiers
Flow Access Modifiers

Chúng ta sẽ chỉ tập trung vào các hàng var, bởi vì let không có phạm vi ghi vì nó là một hằng số.

Scope là gì?

Điều này có nghĩa là chúng ta có thể truy cập vào contract của mình từ bất cứ đâu. Bên trong hợp đồng, trong các giao dịch và tập lệnh, ở bất cứ đâu.

Scope
Scope

2. Current & Inner Scope

Current & Inner Scope
Current & Inner Scope

3. Containing Contract Scope

Điều này có nghĩa là chúng ta có thể truy cập vào thứ của mình ở bất kỳ đâu trong hợp đồng mà được xác định.

Containing Contract Scope
Containing Contract Scope

4. Account Scope

Điều này có nghĩa là chúng ta có thể truy cập vào thứ của mình ở bất kỳ đâu trong tài khoản mà nó được xác định. Điều này có nghĩa là tất cả các hợp đồng có trong tài khoản. Hãy nhớ rằng: chúng tôi có thể triển khai nhiều hợp đồng cho một tài khoản.

Access Modifiers cơ bản

pub(set)

pub(set) là một phương thức áp dụng cho các biến, hằng số và trường (field). Các hàm không thể được thiết lập công khai. Đây cũng là phương thức sửa đổi nguy hiểm nhất và dễ dàng truy cập nhất.

pub(set) var x: String

Phạm vi viết – All Scope

Phạm vi đọc – All Scope

pub/access(all)

pub cũng giống như access(all). Đây là lớp tiếp theo dưới pub(set).

pub var x: String
access(all) var y: String

pub fun testFuncOne() {}
access(all) fun testFuncTwo() {}

Phạm vi viết – Current & Inner

Phạm vi đọc – All Scope

access(account)

access(account) hạn chế hơn một chút so với pub về phạm vi đọc

access(account) var x: String

access(account) fun testFunc() {}

Phạm vi viết – Current & Inner

Phạm vi đọc – Tất cả contract trong Account

access(contract)

access(contract) hạn chế hơn một chút so với quyền access(account) về phạm vi đọc.

access(contract) var x: String

access(contract) fun testFunc() {}

Phạm vi viết – Current & Inner

Phạm vi đọc – Containing Contract

priv/access(self)

priv cũng giống như access(self). Đây là công cụ sửa đổi quyền truy cập hạn chế nhất (và an toàn).

priv var x: String
access(self) var y: String

priv fun testFuncOne() {}
access(self) fun testFuncTwo() {}

Phạm vi viết – Current & Inner

Phạm vi đọc – Current & Inner

Kết luận

Với access modifiers, chúng ta phải tạo ra một sự phân biệt vô cùng quan trọng: Mặc dù một số access modifiers như “priv” khiến cho các trường không thể đọc được trong mã Cadence của bạn, điều này không có nghĩa là mọi người không thể đọc thông tin này bằng cách nhìn vào blockchain. Mọi thứ trên blockchain đều là công khai, bất kể phạm vi đọc của nó là gì. Các bộ điều khiển truy cập chỉ cho phép bạn xác định điều gì có thể được đọc/ghi trong ngữ cảnh của mã Cadence của bạn. Đừng bao giờ lưu trữ thông tin riêng tư trên blockchain!

Cộng đồng hệ sinh thái Flow Việt Nam