Hợp đồng này là một hợp đồng kho bạc đa tài sản. Nó phân bổ và quyết toán quỹ cho người dùng, đối tác và các địa chỉ giao thức thông qua sổ cái nội bộ sử dụng mô hình rút theo yêu cầu.
Các Khái Niệm Chính
Tên
Loại
Mô tả
nhà máy
địa chỉ
Địa chỉ hợp đồng Factory (không thay đổi), được dùng để xác thực quyền, đăng ký Session và các thao tác khẩn cấp.
số dư
mapping(address => uint256)
Số dư khả dụng (ETH) cho người dùng / đối tác.
cấuHìnhSession
mapping(address => SessionConfig)
Cấu hình Session: địa chỉ đối tác và cờ hiệu lực của Session.
sốDưSession
mapping(address => SessionBalance)
Các quỹ cấp Session (quỹ vé / tiền gửi của đối tác).
SessionConfig:
Trường
Loại
Mô tả
đối tác
địa chỉ
Đối tác được ràng buộc với Session
làSession
bool
Cho biết đây có phải là hợp đồng Session được đăng ký hay không
SessionBalance:
Trường
Loại
Mô tả
sốLượngVéNgườiChơi
uint256
Quỹ vé của người chơi tích lũy trong Session
sốTiềnGửiĐốiTác
uint256
Tiền gửi của đối tác bị khóa trong Session
Mô hình Quyền
Quyền
Mô tả
chỉFactory
Chỉ có thể gọi bởi hợp đồng Factory
chỉSession
Chỉ có thể gọi bởi các hợp đồng Session đã đăng ký
Danh tính đối tác
Xác định qua isPartner(address) của Factory
Đăng ký Session (registerSession)
Được Factory gọi sau khi tạo Session để đăng ký nó vào Kho bạc và ràng buộc nó với một đối tác.
Luật:
Xác thực rằng Session chưa được đăng ký
Xác thực đối tác địa chỉ hợp lệ
Ghi nhận đối tác được ràng buộc với Session
Đánh dấu Session là một hợp đồng hợp lệ
Sau khi đăng ký, Session có thể gọi chỉSessioncác hàm bị giới hạn
Người chơi thanh toán bằng Số dư (playerPayTicketUseBalance)
Được Session gọi, sử dụng số dư trong Kho bạc của người chơi để trả vé.
Luật:
Xác thực người chơi có đủ số dư
Trừ số tiền từ balances[player]
Cộng số tiền vào sốLượngVéNgườiChơi
Người chơi trả trực tiếp (playerPayTicket)
Được Session gọi; người chơi trả trực tiếp qua msg.value.
Luật:
msg.value > 0
Không được thêm vào số dư cá nhân của người chơi
Tích lũy ETH vào sốLượngVéNgườiChơi
Tiền gửi đối tác (partnerDeposit)
Đối tác gửi ETH vào Kho bạc, ghi có vào số dư khả dụng của họ.
Hạn chế:
msg.value > 0
Người gọi phải là đối tác được đăng ký trong Factory
Hiệu ứng:
Tăng balances[msg.sender]
Có thể rút bất kỳ lúc nào thông qua withdraw hàm
Với đủ quỹ, có thể stake để tạo một Session
Khóa Tiền gửi Đối tác (lockPartnerDeposit)
Được Factory gọi để khóa tiền gửi đối tác khi một Session được khởi tạo hoặc bắt đầu.
Luật:
Xác thực Session đã được đăng ký
Xác thực đối tác được ràng buộc với Session khớp với tham số
Xác thực đối tác có đủ số dư
Trừ số tiền từ balances[partner]
Cộng vào sốTiềnGửiĐốiTác
Mở khóa Tiền gửi Đối tác (unlockPartnerDeposit)
Được Session gọi để mở khóa tiền gửi khi phiên kết thúc bình thường hoặc thanh toán một phần.
Luật:
Xác thực có đủ tiền gửi bị khóa trong Session
Trừ số tiền từ sốTiềnGửiĐốiTác
Hoàn trả số tiền cho số dư
Phạt Tiền gửi Đối tác (slashPartnerDeposit)
Được Session gọi để phạt đối tác vi phạm và chuyển quỹ đến người nhận được chỉ định.
Luật:
Xác thực có đủ tiền gửi bị khóa trong Session
Trừ số tiền từ sốTiềnGửiĐốiTác
Cộng số tiền vào balances[recipient]
Tiền bị trừ phạt sẽ không được trả lại cho đối tác
Mở khóa Khẩn cấp (emergencyUnlockPartnerDeposit)
Được Factory gọi để buộc mở khóa tiền gửi trong các tình huống đặc biệt hoặc dự phòng.
Luật:
Mở khóa tất cả tiền gửi bị khóa trong Session
Xác thực mối quan hệ ràng buộc đối tác-Session
Hoàn trả tất cả số tiền vào số dư của đối tác
Phân phối Quỹ (distributeFunds)
Được Session gọi để phân phối quỹ vé người chơi cho một người dùng được chỉ định.
Luật:
Xác thực người dùng địa chỉ hợp lệ
Xác thực amount > 0
Xác thực sốLượngVéNgườiChơi là đủ
Trừ số tiền khỏi quỹ vé của Session
Cộng vào balances[user]
Phân phối Quỹ Hàng loạt (distributeFundsBatch)
Được Session gọi để phân phối hàng loạt quỹ vé người chơi.
Hạn chế:
users.length == amounts.length
Độ dài mảng lớn hơn 0
Mỗi địa chỉ người dùng hợp lệ và số tiền lớn hơn 0
Luật:
Tính tổng số tiền cần cho phân phối hàng loạt
Xác thực quỹ vé Session đủ
Trừ tổng và tăng số dư từng người dùng riêng lẻ
Rút tiền (withdraw)
Người dùng hoặc đối tác rút số dư khả dụng của họ từ Kho bạc.