building-shieldKho bạc Onetappy

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.

Luật:

  • Xác thực balances[msg.sender] >= amount

  • Trừ số dư người dùng

  • Chuyển ETH cho người gọi thông qua call

  • Các lần chuyển thất bại sẽ hoàn tác

Last updated