有没有办法在传递函数调用中获取代币价格?

Is there a way to get token price on transfer function call?

是否可以知道用户在调用传输函数时 buying/selling 代币的价格?

我想在与用户 bought/sold 代币的合约中存储关于转移函数的信息。

不,这是不可能的,至少在代币合约中是不可能的,因为代币合约只“知道”用户发送或批准的代币,而这就是所有可以知道的,这在 dex 或 cex 中是可能的合约

是的,这是可能的。这就是 oracles 发挥作用的地方 chainlink oracle 以去中心化的方式在合约中提供链下数据,例如代币价格。以下是如何在 EVM-compatible blockchains

的智能合约中获取代币价格信息

要记录每次转账的价格,请扩展转账事件以发出您从 oracle 获取的价格。
您的修改传递函数的流程将是这样的。

  1. 所有检查以确保(有效转账+有效预言机调用)
  2. 从oracle中获取token的oracle价格并将其存储在局部变量中
  3. 转移
  4. 发出修改后的事件emit Transfer(sender, recipient, amount, price);,其中价格是您从 oracle 获得的当前价格。