Minted tokens
Microsale và Melt Pool mỗi loại mint một ERC20 mới tại thời điểm tạo. Các pool tiêu chuẩn—presale, fair launch, và subscription—list một token do người tạo cung cấp và không được đề cập ở đây.
Các contract token
CheeseToken | CheeseTaxTokenV2 | |
|---|---|---|
TOKEN_TYPE() | 0 | 4 |
| Thuế mua/bán | không có | các rate độc lập, mỗi bên tối đa 10% |
| Được mint bởi | createMicroSaleNoTaxToken, createBondingCurveNoTaxToken* | createMicroSaleTaxTokenV2, createMicroSaleTaxTokenWithVaultV2, createBondingCurveTaxTokenV2*, createBondingCurveTaxTokenWithVaultV2 |
| Định tuyến doanh thu | — | fee receiver, holder dividend, burn, và liquidity |
TOKEN_TYPE() == 3 xác định một CheeseTaxToken. Dùng ABI riêng của nó khi đọc một token type-3; các
đường create trong bảng trên mint type 0 và 4.
Cả hai token đều có:
- Tổng cung cố định
1,000,000,000token với 18 decimal. - Các lệnh đọc, approval, transfer ERC20 tiêu chuẩn, và các event
Transfer/Approval. owner() == address(0)sau khi launch. Quyền sở hữu được từ bỏ trong quá trình khởi tạo.- Một
fundManagerđược gắn với microsale hoặc Melt Pool đã mint token. - Bảo vệ venue trước listing. Các lần chuyển ví-tới-ví được cho phép, trong khi các venue giao dịch đã cấu hình không thể được seed trước khi listing chính thức.
configurator là địa chỉ launchpad khởi tạo token. Với CheeseToken, nó gắn fund manager một lần.
Với CheeseTaxTokenV2, nó còn gắn fee receiver và các contract doanh thu và có thể đăng ký thêm các
pool bị đánh thuế. Nó không phải một ví sở hữu token.
ABI
import { ethers } from "ethers";
import CheeseTokenABI from "./abi/CheeseToken.json";
import CheeseTaxTokenABI from "./abi/CheeseTaxToken.json";
import CheeseTaxTokenV2ABI from "./abi/CheeseTaxTokenV2.json";
const tokenType = await new ethers.Contract(
TOKEN_ADDRESS,
["function TOKEN_TYPE() view returns (uint8)"],
provider,
).TOKEN_TYPE();
const abi =
tokenType === 0n
? CheeseTokenABI
: tokenType === 3n
? CheeseTaxTokenABI
: tokenType === 4n
? CheeseTaxTokenV2ABI
: undefined;
if (!abi) throw new Error(`Unsupported CheesePad token type: ${tokenType}`);
const token = new ethers.Contract(TOKEN_ADDRESS, abi, provider);
Tải về: CheeseToken.json · CheeseTaxToken.json · CheeseTaxTokenV2.json.
Launchpad ABI có sẵn tại Launchpad.json. Source token hiện tại được công khai
tại
cheesepad-ai/cheesepad-contracts.
Các lệnh đọc token thông dụng
const [name, symbol, decimals, totalSupply, tokenType, listed, manager] = await Promise.all([
token.name(),
token.symbol(),
token.decimals(),
token.totalSupply(),
token.TOKEN_TYPE(),
token.tradingStarted(),
token.fundManager(),
]);
| Getter | Kiểu | Ý nghĩa |
|---|---|---|
name / symbol | string | các giá trị được chọn khi launch |
decimals | uint8 | luôn là 18 |
totalSupply / TOTAL_SUPPLY | uint256 | luôn là 1_000_000_000e18 |
TOKEN_TYPE | uint8 | 0 cho CheeseToken, 3 cho CheeseTaxToken, 4 cho CheeseTaxTokenV2 |
owner | address | địa chỉ không sau khi khởi tạo |
configurator | address | launchpad đã khởi tạo và đấu nối token |
fundManager | address | handle của microsale hoặc Melt Pool |
tradingStarted | bool | liệu việc listing chính thức trên DEX đã bắt đầu hay chưa |
pair (CheeseToken) / PAIR (CheeseTaxTokenV2) | address | cặp token/quote chính |
Dùng TOKEN_TYPE() làm bộ phân biệt ABI. Đây là metadata hữu ích, nhưng nó không phải bằng chứng rằng
một token được mint bởi CheesePad; hãy dùng các launchpad event được mô tả bên dưới để xác định nguồn
gốc.
CheeseToken
CheeseToken là token không thuế. Các lệnh đọc riêng của nó được giữ nhỏ một cách có chủ đích:
| Getter | Ý nghĩa |
|---|---|
DECIMALS | số decimal cố định, 18 |
pair | cặp token/quote chuẩn |
tradingStarted | false cho tới lần seed liquidity đầu tiên chính thức |
isPreListingBlockedVenue(address) | liệu một địa chỉ có bị chặn như một venue trước listing hay không |
Trước khi listing, các lần chuyển ví thông thường và chuyển do launchpad giữ hộ đều hoạt động, nhưng
các lần chuyển liên quan tới một venue giao dịch bị chặn sẽ revert. Lần seed liquidity chính thức đặt
tradingStarted thành true; sau đó hành vi ERC20 thông thường áp dụng ở mọi nơi.
CheeseTaxTokenV2
CheeseTaxTokenV2 có một vòng đời bốn giai đoạn:
| Trạng thái | Giá trị | Ý nghĩa |
|---|---|---|
BondingCurve | 0 | trước listing; không có thuế DEX ở cấp token |
TaxEnforcedAntiFarmer | 1 | đánh thuế mua và bán qua mọi pool đã đăng ký |
TaxEnforced | 2 | đánh thuế mua và bán qua mainPool |
TaxFree | 3 | cửa sổ thuế đã kết thúc |
Token bắt đầu ở state 0 cho cả microsale và Melt Pool. Việc listing chính thức trên DEX đặt
tradingStarted, tradingStartedAt, và cả hai timestamp hết hạn. Với một Melt Pool, chính launchpad
giữ lại creator tax từ các giao dịch trên curve bằng đồng tiền quote (xem mô hình phí);
token vẫn ở state 0 cho tới khi graduate.
Các lệnh đọc thuế và vòng đời
const [
buyBps,
sellBps,
duration,
antiFarmerDuration,
poolState,
allocation,
feeReceiver,
quoteToken,
] = await Promise.all([
token.BUY_TAX_BPS(),
token.SELL_TAX_BPS(),
token.TAX_DURATION(),
token.antiFarmerDuration(),
token.poolState(),
token.allocation(),
token.FEE_RECEIVER(),
token.QUOTE_TOKEN(),
]);
const now = BigInt(Math.floor(Date.now() / 1000));
const taxWindowOpen =
(await token.tradingStarted()) && now < poolState.taxExpirationTime;
const allRegisteredPoolsTaxed =
taxWindowOpen && now < poolState.antiFarmerExpirationTime;
| Getter | Ý nghĩa |
|---|---|
BUY_TAX_BPS / SELL_TAX_BPS | rate hiện tại của mỗi bên tính bằng BPS; mỗi bên bắt đầu không quá 1000 |
TAX_BPS | giá trị lớn nhất hiện tại của rate mua và bán |
TAX_DURATION | cửa sổ thuế đã cấu hình tính bằng giây sau khi listing |
antiFarmerDuration | cửa sổ thuế đa-pool ban đầu tính bằng giây |
state() | trạng thái vòng đời được lưu hiện tại, 0–3 |
poolState() | trạng thái, các rate hiện tại, ngưỡng thanh lý, và các timestamp hết hạn |
allocation() | BPS của feeReceiver, holders, burn, và liquidity; tổng là 10000 |
FEE_RECEIVER | ví hoặc vault nhận slice allocation của nó |
QUOTE_TOKEN | tài sản dùng để settle doanh thu thuế |
PAIR / mainPool | pool listing chính |
isPool(address) | liệu một địa chỉ có phải một pool bị đánh thuế đã đăng ký hay không |
isPreListingGuardedVenue(address) | liệu một venue có bị chặn trước listing hay không |
taxProcessor | contract swap và định tuyến khoản thuế đã thu |
dividendTracker | sổ cái holder-dividend; bằng không khi allocation của holder bằng không |
liquidationThreshold | số lượng token hiện tại có thể kích hoạt xử lý thuế theo đợt |
state() cập nhật khi có transfer, nên một token không hoạt động có thể vẫn giữ trạng thái đã lưu
trước đó sau một timestamp hết hạn. Dùng các timestamp trong poolState() khi hiển thị liệu một cửa
sổ có đang mở hay không. Lần transfer tiếp theo sẽ đẩy trạng thái đã lưu tiến lên và đặt các rate thuế
hiện tại về không khi cửa sổ thuế đã kết thúc.
Phân bổ doanh thu
Khoản thuế đã thu được xử lý theo đợt và chia theo allocation():
feeReceiverđược settle tới ví hoặc vault đã cấu hình.holdersđược phân phối quadividendTrackerbằng quote token.burnđược gửi tới địa chỉ dead.liquidityđược ghép cặp và thêm vào làm LP.
Khi một token không có holder share đủ điều kiện, quá trình xử lý phân bổ lại slice của holder cho các
đích đã cấu hình khác. Token điều chỉnh ngưỡng thanh lý của nó giữa MIN_LIQ_THRESHOLD() và
START_LIQ_THRESHOLD() dựa trên kết quả xử lý.
Mô hình phí
Một CheeseTaxTokenV2 có hai lớp phí đáng để tách biệt: creator tax mà người launch cấu hình, và
phí platform mà CheesePad thu thêm bên trên.
Creator tax. Bạn đặt BUY_TAX_BPS / SELL_TAX_BPS và một allocation() trên
feeReceiver / holders / burn / liquidity. Đó là doanh thu và tokenomics của bạn — bạn chọn các
rate và cách chia.
Phí platform. Bên trên creator tax, CheesePad thu:
| Giai đoạn | Phí giao dịch | Phí platform trên creator tax |
|---|---|---|
| Giai đoạn curve (Melt Pool, trước graduation) | 1% mỗi lệnh mua và bán | thêm 10% phí platform trên creator tax |
| Sau graduation / listing | không có | thêm 10% phí platform trên creator tax |
Khi một Melt Pool còn trên curve, mỗi giao dịch trả khoản phí giao dịch cố định 1%, và CheesePad thu
thêm 10% phí platform trên creator tax mà curve thu được. Một khi token graduate và list (hoặc, với
một microsale, kể từ thời điểm nó list), phí giao dịch 1% không còn áp dụng nữa, nhưng 10% phí platform
trên creator tax vẫn tiếp tục chừng nào thuế còn hiệu lực. Một CheeseToken không thuế không có
creator tax, nên nó chỉ trả phí 1% khi còn trên curve và không trả gì sau khi listing.
Rate của phí platform được đọc từ config on-chain của launchpad (getPlatformCutBps() trả về các rate
cho giai đoạn curve và sau listing tính bằng BPS), nên hãy coi các con số 10% là lịch phí hiện tại chứ
không phải một hằng số cố định cứng.
Phát hiện một token CheesePad
Một token là do platform mint khi nó xuất hiện trong một event MicroSaleCreated hoặc
BondingCurvePoolCreated được phát ra bởi địa chỉ launchpad của CheesePad. PoolCreated mô tả một
pool tiêu chuẩn có token do người tạo cung cấp, nên hãy loại trừ nó khi xây dựng một danh sách các
token đã mint.
import LaunchpadABI from "./abi/Launchpad.json";
const launchpad = new ethers.Contract(LAUNCHPAD, LaunchpadABI, provider);
const [microsales, meltPools] = await Promise.all([
launchpad.queryFilter(launchpad.filters.MicroSaleCreated(), fromBlock, toBlock),
launchpad.queryFilter(launchpad.filters.BondingCurvePoolCreated(), fromBlock, toBlock),
]);
for (const event of [...microsales, ...meltPools]) {
const { token, fundManager } = event.args;
const launchStyle =
event.eventName === "MicroSaleCreated" ? "microsale" : "melt-pool";
// Persist token, fundManager, launchStyle, block number, and transaction hash.
}
Với các lệnh tra cứu điểm, launchpad cũng cung cấp getMicroSaleByToken(token) và
getBondingCurvePoolByToken(token). Cả hai đều trả về bản ghi launch đầy đủ và từ chối một token không
xác định.