Xin chào tất cả mọi người!
Gần đây hơn, Waves Labs
Chúng tôi chọn trường hợp DAO vì
Chúng tôi bắt đầu với một ví dụ đơn giản trong
Hãy xem ví dụ này, kiểm tra các giả thuyết và xem xét một số điều kỳ lạ:
Hãy để chúng tôi có Alice - Chủ sở hữu dApp
Boob và Cooper là đối tác của Alice, đồng sáng lập Alice-BC DAO
Neli là chủ doanh nghiệp cần tài trợ
Ngân hàng - ngân hàng phân phối token
Giai đoạn 1. Khởi tạo số dư
Để nhận token trên mạng thử nghiệm wave, bạn cần liên hệ
Bạn có thể tìm thấy địa chỉ trong IDE bằng cách mở chi tiết tài khoản của mình.
Chúng tôi nhấn mạnh Ngân hàng 10 WAVES. Sau đó, chúng tôi kiểm tra xem chúng có đến thông qua trình duyệt khối và giao dịch hay không:
Bây giờ hãy phân phối mã thông báo từ ngân hàng cho những người tham gia còn lại. (Lưu ý: Tất cả các giao dịch trên mạng wave không miễn phí nên tất cả người tham gia cần có số dư dương tối thiểu để thực hiện giao dịch).
1 WAVES = 100000000 đơn vị (wavelet), vì số lượng chỉ có thể là số nguyên
0.01 WAVES (Phí giao dịch) = 1000000
Ngân hàng -> [3 WAVES] -> Alice, thông qua TransferTransaction (Loại: 4).
Chúng tôi kiểm tra xem env.SEED nơi các giao dịch được ký có khớp với Ngân hàng của chúng tôi hay không:

Nếu bạn không có cụm từ gốc phù hợp, chỉ cần chuyển sang cụm từ đó trong tab Tài khoản và kiểm tra lại.
Sau đó, chúng tôi tạo, thông báo và ký giao dịch chuyển 3 WAVES Alice.
Bạn cũng có thể tìm hiểu dữ liệu của Alice thông qua biến env.accounts. Việc đánh số bắt đầu từ 0, vì vậy Alice là env.accounts[1].
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
Kết quả cũng có thể được quan sát trong trình duyệt, một liên kết đến nó sẽ được trả lại cho chúng tôi ngay sau khi thực hiện
Chúng tôi đảm bảo rằng số dư của Alice được bổ sung thêm 3 WAVES và số dư ngân hàng vẫn ở mức 10 - 3 - 0.01 = 0.699.
Chúng tôi gửi cho Boob và Cooper 3 WAVES mỗi người, và Neli, Xena và Mark mỗi người 0.2 WAVES theo cách tương tự.
(Lưu ý: Chúng tôi đã mắc lỗi một ký tự và gửi Neli 0.02 WAVES. Hãy cẩn thận!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
Sau khi bổ sung số dư của tất cả những người tham gia, chúng tôi thấy:
Giai đoạn 2. Tạo tài khoản dApp
Chúng tôi đã đồng ý rằng Alice sẽ là người tạo và chủ sở hữu ứng dụng phi tập trung.
Đi tới Tài khoản, đặt nó là SEED và kiểm tra env.SEED có khớp với Alice không.
Hãy thử cài đặt tập lệnh (hợp đồng) đơn giản nhất có thể vào tài khoản của Alice.
Danh bạ thông minh trong Waves là các vị từ cấm hoặc cho phép bất kỳ loại giao dịch gửi đi nào xảy ra trong một số điều kiện nhất định. Trong trường hợp này, điều kiện này là LUÔN. Mã hợp đồng là đúng. Gọi triển khai().
Phí cho mỗi giao dịch setScript 1400000/100000000 = 0.014 WAVES. Alice còn 2.986 WAVES trong số dư của mình.
Bây giờ chúng ta hãy thử cài đặt logic hợp đồng thông minh phức tạp hơn trên tài khoản Alice, được mô tả trong
Ride4Dapps hiện bao gồm 2 loại chú thích mới:
- @Callable(i) — lấy tham số i, dữ liệu về tài khoản nào đã gọi/ký giao dịch. Kết quả của chức năng này sẽ quyết định sự thay đổi trạng thái của tài khoản dApp. Các tài khoản khác có thể tạo giao dịch và thực hiện các chức năng với chú thích này và thay đổi trạng thái của tài khoản dApp.
- @Verifier(tx) — Trình xác minh giao dịch với tham số tx giao dịch. Tương ứng với logic vị từ từ RIDE. Chính trong biểu thức này, bạn có thể cho phép hoặc cấm các thay đổi tiếp theo đối với logic của hợp đồng thông minh trên tài khoản dApp.
Hay lam ứng dụng tài khoản như một ví chung cho tất cả người tham gia.
Để kiểm tra hợp đồng nào hiện đang hoạt động trên tài khoản của bạn, bạn có thể sao chép mã base64 của hợp đồng thông minh trong trình khám phá khối và nhận dạng nó bằng trình dịch ngược (
Chúng tôi đảm bảo rằng logic của hợp đồng thông minh phù hợp với những gì chúng tôi mong đợi.
Alice còn 2.972 WAVES trong số dư của mình.
DApp này theo dõi số tiền mỗi người tham gia đóng góp vào quỹ chung thông qua cơ chế giao dịch dữ liệu - DataEntry(currentKey, newAmount), trong đó currentKey là tài khoản gọi hàm gửi tiền và newAmount là giá trị của số dư được bổ sung.
Boob và Cooper gửi tiền vào tài khoản dApp với 1 WAVES.
Chúng tôi mắc lỗi và giao dịch không thành công. Vì, mặc dù thực tế là chúng tôi tin rằng chúng tôi đang thực hiện giao dịch thay mặt cho Bob, nhưng chúng tôi đã mắc lỗi trong chỉ mục và chỉ ra một tài khoản Ngân hàng không có hợp đồng thông minh. Cần lưu ý một điểm quan trọng ở đây - sẽ phải trả phí cho những nỗ lực thực hiện giao dịch không thành công không thể gỡ bỏ được! Alice còn 2.972 WAVES trong số dư của mình. Bob có 3 SÓNG.
Bob đã gửi 1 WAVES tới Tài khoản dApp.
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bob còn 1.99 WAVES. Tức là Bob trả 0.01 hoa hồng WAVES
Alice có 2.972 WAVES trên số dư của mình, bây giờ là 3.972. Một giao dịch cũng đã được đăng ký trên tài khoản Alice nhưng không bị tính phí hoa hồng từ Tài khoản dApp (Alice).
Sau khi Cooper bổ sung thêm tài khoản, số dư của Alice trở thành 4.972 WAVES.
Bạn có thể tìm ra ai sở hữu bao nhiêu WAVES trong ví thông thường trong trình khám phá khối trong tab Dữ liệu.
Cooper đã thay đổi ý định về việc để lại số tiền 1 WAVES trên ví chung và quyết định rút một nửa số tiền ái lực. Để làm điều này, anh ta phải gọi hàm rút tiền.
Tuy nhiên, chúng tôi lại sai một lần nữa vì hàm rút tiền có các tham số hoàn toàn khác và chữ ký khác. Khi thiết kế hợp đồng thông minh trên RIDE4DAPPS bạn nên chú ý điểm này
Cooper hiện có 2.48 WAVES trên bảng cân đối kế toán. Theo đó, 3 WAVES - 1 - 0.01 và sau đó là + 0.5 - 0.01. Theo đó, mỗi lần gọi gửi và rút tiền có giá 0.01 WAVES. Do đó, các mục trong bảng chủ sở hữu dApps đã thay đổi như sau.
Bob cũng quyết định rút một số tiền từ ví dùng chung nhưng đã mắc sai lầm và cố rút 1.5 WAVES.
Tuy nhiên, hợp đồng thông minh đã kiểm tra tình trạng này.
Xena là một kẻ lừa đảo, cô ấy đã cố gắng rút 1 WAVES từ tổng tài khoản.
Nó cũng không thành công với cô ấy.
Trong phần tiếp theo, chúng ta sẽ xem xét các vấn đề phức tạp hơn liên quan đến tính chưa hoàn hảo của Tài khoản Alice dApp.
Nguồn: www.habr.com