回答要点:
我们的NFT交易平台项目团队总共有15人。合约团队有2人,都是资深的Solidity开发工程师,负责所有智能合约的 开发、测试和审计对接。后端团队有3人,我是后端负责人,另外两位工程师分别负责API服务和数据同步模块。前 端团队有2人,负责Web端和移动端的开发。此外还有1位产品经理、1位UI设计师、1位测试工程师,以及2位运营 人员负责社区运营和商务拓展。
我们的架构分为四层:
第一层是前端层,包括Web应用和移动端应用。用户通过前端连接MetaMask等钱包,浏览NFT、创建订单、进行 交易。前端使用React开发,通过ethers.js与区块链交互。
第二层是后端服务层,采用微服务架构,包含五个核心服务。API Gateway负责统一的接口入口、鉴权和限流。订 单服务管理链下订单的创建、查询和撮合。用户服务处理用户注册、登录和个人信息管理。搜索服务基于 Elasticsearch实现NFT的全文搜索和筛选。数据同步服务负责监听区块链事件,将链上数据同步到链下数据库。
第三层是智能合约层,部署在Polygon链上。核心合约包括Exchange合约,负责订单撮合和资金托管; AssetRegistry合约,记录支持交易的NFT合约地址;RoyaltyEngine合约,实现版税的自动计算和分配。
第四层是数据层,使用PostgreSQL存储订单、用户、交易记录等结构化数据,MongoDB存储NFT元数据(图片、 属性等),Redis用于热点数据缓存和会话管理。
我们的撮合机制结合了链上和链下的优势,采用"链下订单簿 + 链上结算"的模式。
当卖家想要出售NFT时,他不需要立即发起链上交易,而是在链下创建一个订单。具体步骤是:首先,卖家授权我 们的Exchange合约可以转移他的NFT,这是一次链上交易。然后,卖家在前端填写出售信息(NFT地址、 TokenID、价格、有效期等),使用钱包对这些信息进行签名,生成一个链下订单。这个签名订单被提交到我们的 后端服务器,存储在数据库中。 这种设计的好处是卖家创建订单不需要支付Gas费,可以随时免费修改或取消订单。订单信息包括NFT合约地址、 TokenID、卖家地址、价格、支付代币类型、版税信息、有效期、nonce等,所有这些信息都包含在签名中,保证 不可篡改。
当买家想要购买某个NFT时,前端会查询后端的订单数据库,找到对应的卖家订单。买家点击购买后,前端会调用 Exchange合约的matchOrder函数,将卖家的签名订单和买家的支付信息一起提交到链上。 Exchange合约收到交易后,会执行以下步骤:
版税是NFT交易的重要特性,保证创作者能从二次交易中持续获益。我们的实现方式是:每个NFT在首次上架时, 创作者设置版税比例和接收地址。这些信息存储在RoyaltyEngine合约中。交易时,Exchange合约会查询 RoyaltyEngine,获取版税信息,自动从交易金额中扣除版税并转给创作者。
我们支持多级版税,比如一个NFT可以设置10%的版税,其中5%给原创作者,3%给合作艺术家,2%给项目方。合 约会自动按比例分配给所有接收地址。
卖家可以随时取消订单。如果是链下订单,卖家可以在前端直接标记为取消,后端数据库更新状态即可,无需链上 交易。如果担心有人仍持有旧的签名订单,卖家可以调用合约的cancelOrder函数,在链上记录这个订单已取消, 或者调用incrementNonce函数,使所有旧订单失效。
我们在设计中特别注重安全性。所有订单签名都包含chainId,防止跨链重放攻击。订单有明确的有效期,过期自 动失效。合约使用ReentrancyGuard防止重入攻击。资金转移严格遵循"检查-效果-交互"模式,先更新状态再进行 外部调用。合约在上线前经过了专业安全公司的审计,发现并修复了2个中危漏洞。 这套撮合机制在实际运行中表现良好,订单撮合成功率达到98.5%,平均Gas消耗约15万,用户体验和成本都在可 接受范围内。