Chuyển tới nội dung chính

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​

CheeseTokenCheeseTaxTokenV2
TOKEN_TYPE()04
Thuế mua/bánkhông cócác rate độc lập, mỗi bên tối đa 10%
Được mint bởicreateMicroSaleNoTaxToken, 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,000 token 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(),
]);
GetterKiểuÝ nghĩa
name / symbolstringcác giá trị được chọn khi launch
decimalsuint8luôn là 18
totalSupply / TOTAL_SUPPLYuint256luôn là 1_000_000_000e18
TOKEN_TYPEuint80 cho CheeseToken, 3 cho CheeseTaxToken, 4 cho CheeseTaxTokenV2
owneraddressđịa chỉ không sau khi khởi tạo
configuratoraddresslaunchpad đã khởi tạo và đấu nối token
fundManageraddresshandle của microsale hoặc Melt Pool
tradingStartedboolliệu việc listing chính thức trên DEX đã bắt đầu hay chưa
pair (CheeseToken) / PAIR (CheeseTaxTokenV2)addresscặ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
DECIMALSsố decimal cố định, 18
paircặp token/quote chuẩn
tradingStartedfalse 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áiGiá trịÝ nghĩa
BondingCurve0trước listing; không có thuế DEX ở cấp token
TaxEnforcedAntiFarmer1đánh thuế mua và bán qua mọi pool đã đăng ký
TaxEnforced2đánh thuế mua và bán qua mainPool
TaxFree3cử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_BPSrate 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_BPSgiá trị lớn nhất hiện tại của rate mua và bán
TAX_DURATIONcửa sổ thuế đã cấu hình tính bằng giây sau khi listing
antiFarmerDurationcử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_RECEIVERví hoặc vault nhận slice allocation của nó
QUOTE_TOKENtài sản dùng để settle doanh thu thuế
PAIR / mainPoolpool 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
taxProcessorcontract swap và định tuyến khoản thuế đã thu
dividendTrackersổ cái holder-dividend; bằng không khi allocation của holder bằng không
liquidationThresholdsố 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 qua dividendTracker bằ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ạnPhí giao dịchPhí platform trên creator tax
Giai đoạn curve (Melt Pool, trước graduation)1% mỗi lệnh mua và bánthêm 10% phí platform trên creator tax
Sau graduation / listingkhô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.

Liên quan​