Synthetix 是一个基于加密货币抵押的合成资产发行协议。它允许用户通过抵押原生代币,生成与真实世界资产价格挂钩的合成资产(Synths),如加密货币、外汇、大宗商品等。该系统运行于以太坊网络,通过智能合约确保透明性与安全性。
核心机制与升级系统
Synthetix 通过代理合约架构实现无缝升级,确保新增功能不会中断用户体验。所有合约升级通过 Synthetix 改进提案(SIP)流程进行管理,社区可通过公开事件感知每次升级。
目前代码库仍处于持续开发阶段,主要分支遵循语义化版本规范:
- 主分支(master):包含已通过测试网验证的最新版本
- 大版本与次要版本:对应合约的重大变更或兼容性更新
- 修订版本:仅涉及 JavaScript 接口的调整
开发者可通过 npm install 安装官方软件包,支持 Node.js 脚本与 Solidity 开发。
开发者集成指南
地址解析器使用要点
智能合约集成需使用 IAddressResolver 接口,并关联不可变代理合约 ReadProxyAddressResolver(由 SIP-57 引入)。通过解析器可获取系统核心合约地址:
- 使用
getAddress(bytes32 name)获取合约地址(需传入合约名 bytes32 格式) - 使用
getSynth(bytes32 synth)获取合成资产地址(如 sUSD、iETH)
代码示例与工具函数
JavaScript 环境可通过 SDK 获取各类链上信息:
const snx = require('synthetix');
// 获取合约抽象语法树
snx.getAST({ source: 'Synthetix.sol' });
// 查询特定网络部署路径
snx.getPathToNetwork({ network: 'mainnet' });
// 获取合约 ABI 与字节码
snx.getSource({ network: 'sepolia', contract: 'Proxy' });
// 查询系统暂停代码含义
snx.getSuspensionReasons(); // 返回:1-系统升级, 2-市场关闭, 3-熔断机制, 99-紧急事件
// 获取网络可用合成资产列表
snx.getSynths({ network: 'sepolia' }).map(({ name }) => name);
// 查询特定合约部署详情
snx.getTarget({ network: 'sepolia', contract: 'ProxySynthetix' });
// 获取系统管理地址列表
snx.getUsers({ network: 'mainnet' });
// 查看网络版本历史
snx.getVersions();
// 将字符串转换为 bytes32 格式
snx.toBytes32('sUSD');命令行工具操作指南
软件包提供 CLI 工具,支持所有 SDK 功能的 JSON 格式输出:
# 查询合约语法结构
npx synthetix ast contracts/Synth.sol
# 字符串转 bytes32 格式
npx synthetix bytes32 sUSD
# 查看支持网络列表
npx synthetix networks
# 获取合约源码信息
npx synthetix source --network sepolia --contract Proxy
# 查询暂停原因代码
npx synthetix suspension-reason --code 2
# 提取合成资产名称列表
npx synthetix synths --network sepolia --key name
# 获取合约部署详情
npx synthetix target --network sepolia --contract ProxySynthetix
# 查询特定管理员地址
npx synthetix users --network mainnet --user oracle
# 查看系统版本历史
npx synthetix versions
# 按合约查看版本变迁
npx synthetix versions --by-contract常见问题
问:Synthetix 代理合约有何优势?
答:代理架构允许合约升级时不改变接口地址,用户无需调整集成代码即可自动获得新功能,同时通过 SIP 流程保证升级透明度。
问:开发者应如何选择接入网络?
答:测试阶段建议使用 Sepolia 测试网,生产环境切换至主网。所有网络配置信息可通过 snx.networks 或 CLI 工具查询。
问:如何获取最新合约 ABI?
答:通过 getSource() 方法或 source 命令行指令可实时获取任意合约的 ABI 与字节码,确保始终与链上版本同步。
问:系统暂停期间哪些功能会受影响?
答:根据不同暂停代码,可能限制交易、兑换或新增抵押等操作。建议集成时根据 getSuspensionReasons() 返回代码设置相应处理逻辑。
问:bytes32 格式转换有哪些注意事项?
答:合约名称和合成资产名称均需区分大小写,建议使用提供的转换工具确保准确性,避免因格式错误导致查询失败。
问:如何监控合约升级事件?
答:所有升级通过 SIP 提案公开讨论后执行,并会触发链上事件。开发者可关注官方公告或监听相关事件及时获取更新信息。