我正在使用solidity编写一个和交易所交互的程序
遇到了问题, 作为都看了3天solidity文档的我一头雾水,
众所周知web3中使用合约.函数.call() 可以在本地执行交易,获取返回结果, 而在solidity中没有发现这种东西,目测只能转成view可以获取返回结果, 我将交易所合约接口加上一个view,然后我在合约中调用的时候,会出错,原接口代码 ↓
interface pancackswap_interface {
// 交易所合约原接口
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external returns (uint[] memory amounts);
}
我在external 后面加了个view
现在遇到的问题就是原接口调用就是正常发送交易了, 获取不到返回值, 而加上view会报错,也能连接到交易所合约
"message": "execution reverted: TransferHelper: TRANSFER_FROM_FAILED"
报这个错误
查了官方文档, 说是因为金额不足什么的, 但是我觉得跟那个没关系
因为我用web3调用原接口的时候, 使用call(), 可以正常获取返回值
我现在需求就是在solidity里不发生链上交易就可以获取返回值, 就跟web3的call()一样, 有这样的方法吗?
下面是我的出错代码:
interface pancackswap_interface {
// 交易所合约接口 view是我后加的
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external view returns (uint[] memory amounts);
}
contract my_contract {
// 交易所路由合约地址
address pancack_swap_contract = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
// 创建交易所合约对象
pancackswap_interface use_pancake = pancackswap_interface(pancack_swap_contract);
// 出错函数
function view_token_for_eth_swap(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) public view returns(uint[] memory amounts) {
return use_pancake.swapExactTokensForETH(amountIn, amountOutMin, path, to, deadline);
}
}