MySBT (Mycelium Soul Bound Token) is a non-transferable identity token that:
- Proves your membership in communities
- Tracks your on-chain reputation
- Enables gasless transactions via SuperPaymaster
- Binds to your NFT avatar
To mint a MySBT, you need:
-
GToken (GT): Minimum 0.4 GT
- 0.3 GT locked as stake (refundable with exit fee)
- 0.1 GT burned as mint fee (non-refundable)
-
A Wallet: EOA or Smart Account (AA)
-
Community: A registered community to join
Single transaction: approve + stake + lock + mint
import { parseEther } from 'viem';
// 1. Approve GToken
await gtokenContract.write.approve([
MYSBT_ADDRESS,
parseEther('0.4') // 0.3 lock + 0.1 burn
]);
// 2. Mint with auto-stake
await mysbtContract.write.mintWithAutoStake([
communityAddress, // First community to join
parseEther('0.3'), // Lock amount
'{"avatar": "ipfs://..."}' // Metadata (optional)
]);If you already have staked GT:
// Mint (requires available staked balance >= 0.3 GT)
await mysbtContract.write.mint([
communityAddress,
'{"avatar": "ipfs://..."}'
]);// Get your token ID
const tokenId = await mysbtContract.read.userToSBT([userAddress]);
// Get SBT data
const sbtData = await mysbtContract.read.sbtData([tokenId]);
// Returns: { holder, firstCommunity, mintedAt, totalCommunities }
// Get memberships
const memberships = await mysbtContract.read.getAllMemberships([tokenId]);// Join another community (requires community's allowPermissionlessMint = true)
await mysbtContract.write.joinCommunity([
tokenId,
newCommunityAddress,
'{"role": "member"}' // Metadata
]);// Leave a community
await mysbtContract.write.leaveCommunity([
tokenId,
communityAddress
]);// Update community membership metadata
await mysbtContract.write.updateMetadata([
tokenId,
communityAddress,
'{"role": "moderator", "level": 5}'
]);// Bind an NFT as your avatar
await mysbtContract.write.bindNFTAvatar([
tokenId,
nftContractAddress,
nftTokenId
]);
// Unbind avatar
await mysbtContract.write.unbindNFTAvatar([tokenId]);To exit the system and recover your stake (minus exit fee):
// Burn SBT and unlock stake
await mysbtContract.write.burn([tokenId]);Note:
- Exit fee is typically 1% of locked amount
- You must wait 7 days after requesting unstake to withdraw
Your SBT tracks reputation:
// Get reputation score
const reputation = await mysbtContract.read.getReputationScore([
tokenId,
communityAddress
]);
// Reputation increases with:
// - Active participation (transactions)
// - Time in community
// - Community contributions| Level | Score Required | Benefits |
|---|---|---|
| 1 | 0 | Basic member |
| 2 | 100 | Enhanced features |
| 3 | 200 | Priority support |
| 4 | 400 | Governance participation |
| ... | Fibonacci growth | ... |
With MySBT, you can use community xPNTs tokens for gas:
// Your SBT holder status is automatically registered in SuperPaymaster
// When you send a UserOperation with paymasterAndData, the system:
// 1. Verifies your SBT ownership
// 2. Deducts xPNTs from your balance
// 3. Sponsors the gas feeSee Developer Integration Guide for detailed gasless transaction setup.
| Contract | Address |
|---|---|
| MySBT v2.4.5 | 0xa4eda5d023ea94a60b1d4b5695f022e1972858e7 |
| GToken | 0x99cCb70646Be7A5aeE7aF98cE853a1EA1A676DCc |
| GTokenStaking | 0xbEbF9b4c6a4cDB92Ac184aF211AdB13a0b9BF6c0 |
| Error | Cause | Solution |
|---|---|---|
AlreadyHasSBT |
You already own an SBT | One SBT per address |
InsufficientStake |
Not enough GT | Get more GT or stake more |
CommunityNotRegistered |
Invalid community | Check community address |
NotSBTOwner |
You don't own this SBT | Use correct tokenId |
CommunityNotAllowingMint |
Permissionless mint disabled | Contact community admin |
Q: Can I transfer my SBT? A: No, MySBT is soulbound and non-transferable.
Q: Can I have multiple SBTs? A: No, one SBT per address.
Q: What happens to my stake if I burn my SBT? A: Your stake is unlocked (minus exit fee) and can be withdrawn after 7 days.
Q: Can I join multiple communities? A: Yes, one SBT can have memberships in multiple communities (max 10 per community profile).
MySBT(Mycelium Soul Bound Token)是一种不可转让的身份代币,它:
- 证明你在社区中的会员资格
- 追踪你的链上声誉
- 通过 SuperPaymaster 实现无 Gas 交易
- 绑定你的 NFT 头像
要铸造 MySBT,你需要:
-
GToken (GT):最少 0.4 GT
- 0.3 GT 锁定作为质押(可退还,扣除退出费)
- 0.1 GT 作为铸造费燃烧(不可退还)
-
钱包:EOA 或智能账户 (AA)
-
社区:一个已注册的社区
单笔交易:授权 + 质押 + 锁定 + 铸造
import { parseEther } from 'viem';
// 1. 授权 GToken
await gtokenContract.write.approve([
MYSBT_ADDRESS,
parseEther('0.4') // 0.3 锁定 + 0.1 燃烧
]);
// 2. 使用自动质押铸造
await mysbtContract.write.mintWithAutoStake([
communityAddress, // 要加入的第一个社区
parseEther('0.3'), // 锁定金额
'{"avatar": "ipfs://..."}' // 元数据(可选)
]);如果你已经有质押的 GT:
// 铸造(需要可用质押余额 >= 0.3 GT)
await mysbtContract.write.mint([
communityAddress,
'{"avatar": "ipfs://..."}'
]);// 获取你的代币 ID
const tokenId = await mysbtContract.read.userToSBT([userAddress]);
// 获取 SBT 数据
const sbtData = await mysbtContract.read.sbtData([tokenId]);
// 返回:{ holder, firstCommunity, mintedAt, totalCommunities }
// 获取会员资格
const memberships = await mysbtContract.read.getAllMemberships([tokenId]);// 加入另一个社区(需要社区的 allowPermissionlessMint = true)
await mysbtContract.write.joinCommunity([
tokenId,
newCommunityAddress,
'{"role": "member"}' // 元数据
]);// 离开社区
await mysbtContract.write.leaveCommunity([
tokenId,
communityAddress
]);// 更新社区会员资格元数据
await mysbtContract.write.updateMetadata([
tokenId,
communityAddress,
'{"role": "moderator", "level": 5}'
]);// 绑定 NFT 作为你的头像
await mysbtContract.write.bindNFTAvatar([
tokenId,
nftContractAddress,
nftTokenId
]);
// 解绑头像
await mysbtContract.write.unbindNFTAvatar([tokenId]);退出系统并取回质押(扣除退出费):
// 销毁 SBT 并解锁质押
await mysbtContract.write.burn([tokenId]);注意:
- 退出费通常为锁定金额的 1%
- 请求解除质押后需等待 7 天才能提取
你的 SBT 追踪声誉:
// 获取声誉分数
const reputation = await mysbtContract.read.getReputationScore([
tokenId,
communityAddress
]);
// 声誉通过以下方式增加:
// - 活跃参与(交易)
// - 在社区的时间
// - 社区贡献| 等级 | 所需分数 | 权益 |
|---|---|---|
| 1 | 0 | 基础成员 |
| 2 | 100 | 增强功能 |
| 3 | 200 | 优先支持 |
| 4 | 400 | 治理参与 |
| ... | 斐波那契增长 | ... |
使用 MySBT,你可以用社区 xPNTs 代币支付 Gas:
// 你的 SBT 持有者状态会自动在 SuperPaymaster 中注册
// 当你发送带有 paymasterAndData 的 UserOperation 时,系统会:
// 1. 验证你的 SBT 所有权
// 2. 从你的余额中扣除 xPNTs
// 3. 赞助 Gas 费用详细的无 Gas 交易设置请参阅 开发者集成指南。
| 合约 | 地址 |
|---|---|
| MySBT v2.4.5 | 0xa4eda5d023ea94a60b1d4b5695f022e1972858e7 |
| GToken | 0x99cCb70646Be7A5aeE7aF98cE853a1EA1A676DCc |
| GTokenStaking | 0xbEbF9b4c6a4cDB92Ac184aF211AdB13a0b9BF6c0 |
| 错误 | 原因 | 解决方案 |
|---|---|---|
AlreadyHasSBT |
你已经拥有 SBT | 每个地址只能有一个 SBT |
InsufficientStake |
GT 不足 | 获取更多 GT 或质押更多 |
CommunityNotRegistered |
无效的社区 | 检查社区地址 |
NotSBTOwner |
你不拥有此 SBT | 使用正确的 tokenId |
CommunityNotAllowingMint |
无需许可铸造已禁用 | 联系社区管理员 |
问:我可以转让我的 SBT 吗? 答:不可以,MySBT 是灵魂绑定的,不可转让。
问:我可以拥有多个 SBT 吗? 答:不可以,每个地址只能有一个 SBT。
问:如果我销毁 SBT,我的质押会怎样? 答:你的质押会被解锁(扣除退出费),7 天后可以提取。
问:我可以加入多个社区吗? 答:可以,一个 SBT 可以在多个社区拥有会员资格(每个社区资料最多 10 个)。