Tiêu đề gốc: "Một sơ đồ địa chỉ ràng buộc thân thiện với nhà nước khác"
Viết bởi: Vitalik Buterin, Đồng sáng lập Ethereum
tiêu đề phụ
Đánh giá: Kỹ thuật quản lý quy mô nhà nước
Để ngăn dung lượng trạng thái của Ethereum mở rộng vô tận, chúng ta cần sử dụng một số phương pháp để "hủy kích hoạt" trạng thái cũ, để các nút tham gia mạng không còn cần lưu trữ trạng thái cũ. Ngay cả khi phần lớn khách hàng trở thành không trạng thái, có vẻ như có thể thấy trước một cách hợp lý rằng cuối cùng hệ thống sẽ mở rộng quy mô đến mức mạng không thể đảm bảo rằng tất cả trạng thái luôn khả dụng. Có hai cách để hủy kích hoạt trạng thái cũ:
Trực tiếp xóa nó đi, sau đó di chuyển nó đến một cây Merkle khác, để những người quan tâm đến đối tượng trạng thái có thể lấy được nhánh Merkle tương ứng và sử dụng nó để kích hoạt trạng thái vào một thời điểm nào đó trong tương lai.
Đối tượng không được di chuyển ra khỏi cấu trúc cây; thay vào đó, nó chỉ được đánh dấu là "đã hủy kích hoạt" tại điểm đó trong cây để các nút không lưu trữ nó (và giao thức không yêu cầu chúng làm như vậy). Có thể truy cập lại các đối tượng đã hủy kích hoạt bằng cách gửi một giao dịch cung cấp bằng chứng Merkle (tức là dữ liệu nhân chứng) để truy cập trạng thái.
Cách tiếp cận (1) tương ứng với "kế hoạch thuê kho lưu trữ cổ điển" và cách tiếp cận (2) tương ứng với phần mở rộng đơn giản nhất của "máy khách không trạng thái" truyền thống - một mô hình trong đó các trạng thái cũ có thể bị lãng quên. Cả hai cách tiếp cận này đều cho phép những cá nhân quan tâm đến các đối tượng trạng thái cụ thể theo dõi các nhánh Merkle để có thể sử dụng chúng để kích hoạt các đối tượng trạng thái đó sau này nếu chúng bị vô hiệu hóa. Tuy nhiên, cả hai cách tiếp cận này đều có vấn đề rõ ràng.
Phương pháp (1) có một số trường hợp cạnh khi hợp đồng cần được tạo lại trên cùng địa chỉ với hợp đồng đã hết hạn. Nghĩa là, nếu một hợp đồng được tạo tại địa chỉ A và sau đó hết hạn, giao dịch đã tạo hợp đồng tại địa chỉ A sẽ được thực hiện lại, điều này sẽ tạo đối tượng mới tại địa chỉ A, sẽ ảnh hưởng đến đối tượng ban đầu được kích hoạt. Một tình huống khác là khi một đối tượng được tạo tại địa chỉ A, sau đó trải qua quá trình hủy kích hoạt, được kích hoạt, được sửa đổi (ví dụ: gửi tiền trên hợp đồng đến một tài khoản khác), hủy kích hoạt lại và sau đó sử dụng lần hủy kích hoạt đầu tiên Nơi nhánh Merkle được kích hoạt . Điều này vi phạm quy tắc đặt trước và có thể được sử dụng để đúc tiền; cần bổ sung bằng chứng Merkle để chứng minh rằng hợp đồng chưa được kích hoạt bởi một tiểu bang cụ thể khác cũng đang cố gắng kích hoạt.
tiêu đề phụ
đề xuất
Tôi đề xuất một sửa đổi của phương pháp (2) có thể giải quyết các vấn đề trên. Như được trình bày bởi nhiều đề xuất triển khai phương pháp (2), tài khoản có hai trạng thái: "hoạt động" và "không hoạt động", với các tài khoản không hoạt động là những tài khoản không được truy cập trong hơn một năm. Để truy cập tài khoản đã hủy kích hoạt, bạn cần cung cấp dữ liệu nhân chứng; khi tài khoản đã hủy kích hoạt được truy cập, tài khoản đó sẽ tự động bị hủy kích hoạt (chạm vào bất kỳ tài khoản nào sẽ đặt lại tính toán thời gian hủy kích hoạt một năm). Việc sửa đổi như sau:
Chúng tôi thêm một "tiền tố kỷ nguyên" 32 byte (sẽ được hiểu là một số nguyên) cho mỗi địa chỉ. Ví dụ: một địa chỉ có tiền tố epoch là 9 sẽ có dạng như sau: 0x00000009de0b295669a9fd93d5f28d9ec85e40f4cb697bae, có tiền tố là 00000009.
Đường dẫn Merkle sẽ phụ thuộc trực tiếp vào tiền tố của kỷ nguyên chứ không phải hàm băm của nó (do đó, merkle_path_key = address[:4] + hash(address[4:]) thay vì merkle_path_key = hash(address) như hiện được sử dụng. Điều này đảm bảo rằng "không được sử dụng " không gian địa chỉ liền kề.
Địa chỉ không thể được sử dụng trừ khi tiền tố kỷ nguyên của chúng nhỏ hơn hoặc bằng số năm chuỗi khối đã hoạt động
Một mã lệnh CREATE3 được thêm vào để lấy tiền tố epoch làm đối số và tạo hợp đồng tại một địa chỉ có tiền tố epoch đó.
Người dùng và hợp đồng nên luôn tạo tài khoản có tiền tố kỷ nguyên mới nhất có thể, kể cả theo mặc định, vì chắc chắn sẽ có trạng thái đầy đủ với tiền tố kỷ nguyên mới nhất vẫn có thể truy cập được. Để duy trì "địa chỉ phản thực" (tức là địa chỉ mà người dùng tương tác với trên chuỗi [ví dụ: bằng cách gửi ETH hoặc mã thông báo ERC20] hoặc ngoài chuỗi [bằng cách tương tác trong kênh] trước khi mã hợp đồng được phát hành), nó vẫn có thể tạo hợp đồng với tiền tố kỷ nguyên cũ. Tuy nhiên, đối với những người dùng muốn tạo địa chỉ phản thực, họ có trách nhiệm lưu trữ trạng thái cũ cho tài khoản nếu họ không làm như vậy trong một thời gian dài.
Sau nhiều năm hoạt động, dự kiến trạng thái hoạt động sẽ bao gồm hai phần: (i) toàn bộ không gian địa chỉ có tiền tố là kỷ nguyên mới nhất và (ii) trạng thái cũ cụ thể tương ứng với các tài khoản đã được sử dụng tích cực gần đây
Liên kết nguồn:
Liên kết nguồn:ethresear.ch
