Địa chỉ ẩn trên Ergo

Jan 17 2023
Trong bài viết này, chúng ta sẽ xem xét các địa chỉ tàng hình trên chuỗi khối Ergo, tại sao nên sử dụng chúng, chúng là gì và triển khai tiềm năng của chúng. Các cuộc thảo luận vẫn đang được tiến hành về sự bất hòa và yêu cầu kéo EIP-41 trên GitHub, vì vậy có thể việc triển khai được giải thích ở đây đã trở nên lỗi thời nhưng vì mọi thứ hiện tại, chúng tôi dường như sắp đạt được một cuộc điều tra dân số.

Trong bài viết này, chúng ta sẽ xem xét các địa chỉ tàng hình trên chuỗi khối Ergo , tại sao nên sử dụng chúng, chúng là gì và triển khai tiềm năng của chúng. Các cuộc thảo luận vẫn đang được tiến hành về sự bất hòa và yêu cầu kéo EIP-41 trên GitHub , vì vậy có thể việc triển khai được giải thích ở đây đã trở nên lỗi thời nhưng vì mọi thứ hiện tại, chúng tôi dường như sắp đạt được một cuộc điều tra dân số.

Việc triển khai các địa chỉ ẩn trên Ergo bắt nguồn từ một cuộc thảo luận giữa kushtivà scalahubtrên các diễn đàn, hãy xem tại đây .

Địa chỉ tàng hình là gì?

Địa chỉ ẩn cho phép thực hiện các giao dịch bảo vệ quyền riêng tư. Theo mặc định, tất cả các khoản thanh toán được thực hiện trên Ergo (và hầu hết các chuỗi khối khác như Bitcoin) đều hiển thị cho bất kỳ ai xem sổ cái, vì vậy nếu ai đó biết địa chỉ công khai của bạn, họ có thể theo dõi tất cả các khoản thanh toán mà bạn nhận được. Có các chuỗi khối như Monero nơi tất cả các giao dịch được thực hiện theo cách bảo vệ quyền riêng tư theo mặc định mà không có cách nào để từ chối, Ergos ethos là đặt quyền lựa chọn vào tay người dùng của mạng.

Tuyên ngôn Ergo :

Quyền riêng tư là khả năng tạo rào cản và dựng lên ranh giới để tạo không gian cho cá nhân. Tùy thuộc vào mỗi ranh giới và ranh giới mà họ chọn để thực hiện.

Một số trường hợp sử dụng tiềm năng cho địa chỉ tàng hình trên Ergo là gì?

Địa chỉ ẩn EIP-41 cho phép người dùng nhận thanh toán một cách riêng tư mà không cần người giám sát sổ cái có thể liên kết thanh toán với địa chỉ công khai của người dùng. Bản chất không tương tác của chúng có nghĩa là người dùng có thể chia sẻ địa chỉ ẩn của họ một cách tự do và nhận thanh toán mà không cần thực hiện thêm hành động nào.

Để chứng minh điều này với một ví dụ:

  1. Bob đăng địa chỉ ẩn của mình trong tiểu sử Twitter của mình
  2. Alice muốn quyên góp cho Bob nên cô ấy đã gửi một số ERG bằng cách sử dụng địa chỉ ẩn mà Bob đã đăng công khai
  3. Không ai có thể liên kết bất kỳ khoản thanh toán nào được thực hiện với Bob

Các địa chỉ tàng hình khác với các giải pháp hiện có như ErgoMixer như thế nào?

Như đã đề cập, các địa chỉ tàng hình nhằm mục đích che giấu việc nhận thanh toán, điều này khác với việc kết hợp các dịch vụ làm xáo trộn các khoản thanh toán.

Lấy ví dụ của chúng tôi từ phần trước, bằng cách sử dụng bộ trộn, mọi người vẫn có thể thấy rằng Bob đã nhận được khoản thanh toán nhưng họ sẽ không thể xác định nguồn gốc của khoản thanh toán.

Cả hai tùy chọn quyền riêng tư này đều có các trường hợp sử dụng riêng!

Họ làm việc như thế nào?

Giải pháp dựa trên trao đổi khóa Diffie Hellman không tương tác và diễn ra như sau:

  1. Bob tạo một địa chỉ công cộng để chia sẻ, không có gì đặc biệt ở đây, đây chỉ giống như một địa chỉ bình thường (chúng tôi hiện đang đàm phán để thêm một loại địa chỉ trả tiền cho ứng dụng công cộng P2PA mới như một phần của EIP để có thể xử lý các địa chỉ ẩn liền mạch trong ví).
  2. Alice sử dụng địa chỉ được chia sẻ công khai để tạo các giá trị ngẫu nhiên được sử dụng trong hợp đồng thông minh để bảo vệ tiền cho Bob.

const g = this.ec.g;
const u = bobsPublicAddress;
const r = new BN(rand(32));
const y = new BN(rand(32));
const r4 = g.mul(r);
const r5 = g.mul(y);
const r6 = u.mul(r);
const r7 = u.mul(y);

{
    // ===== Contract Information ===== //
    // Name: EIP-0041 Stealth address contract
    // Version: 1.0.0
    val gr = SELF.R4[GroupElement].get
    val gy = SELF.R5[GroupElement].get
    val ur = SELF.R6[GroupElement].get
    val uy = SELF.R7[GroupElement].get

    proveDHTuple(gr,gy,ur,uy)
}

const gr = BOX.r4
const gy = BOX.r5
const ur = BOX.r6
const uy = BOX.r7
const bobsSecret = publicAddress.secretKey

const boxIsSpendable = ur.eq(gr.mul(bobsSecret)) && uy.eq(gy.mul(bobsSecret))

Ví dụ mã đầy đủ

Tôi cũng có một ví dụ mã đầy đủ ở đây để chạy các tình huống thực tế từ góc nhìn của người gửi hoặc người nhận nếu bạn muốn chơi với một số mã.

Cảm ơn vì đã đọc.