调用transfer函数时能否获取token的交易价格?
transfer函数调用时获取token成交价格相关问题解答
- 标准ERC20/ERC721等常用代币标准的
transfer函数原生不携带任何成交价格相关信息,你无法直接从普通的transfer调用参数中获取用户买卖代币的成交价格。 - 核心原因是
transfer本身仅实现代币权属转移的基础功能,和交易撮合、定价环节完全解耦:成交价格产生于中心化交易所、DEX撮合合约、场外协商等交易前置环节,不属于transfer动作的原生自带参数。
如果你需要在合约中存储用户买卖代币时的对应价格,可选择以下两种改造方案:
- 方案1:重写标准
transfer函数,新增成交价格入参,要求所有涉及买卖的转账调用时必须传入价格值,合约侧直接存储该参数与对应交易的关联关系。该方案会破坏标准ERC接口兼容性,普通钱包默认调用标准transfer会触发失败,仅适合全链路自定义的封闭业务场景使用。 - 方案2:不改动原生
transfer的标准接口,新增自定义的transferWithPrice专属函数,要求涉及买卖的转账必须走该自定义接口传入价格,普通无交易属性的转账仍沿用标准transfer。该方案兼容性更强,可在兼容普通转账场景的前提下满足价格存储需求。
补充说明:如果是不受你控制的第三方发起的transfer调用,你无法获取对应成交价格,因为调用方不会主动传递这个非标准参数。
内容的提问来源于stack exchange,提问作者Saulius
相关产品推荐
相关产品推荐

