首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solidity函数不返回变量

Solidity函数不返回变量
EN

Ethereum用户
提问于 2022-09-03 18:02:11
回答 1查看 39关注 0票数 0

这是我在索尔合同上的职责

代码语言:javascript
复制
 function swapExactInputMultihop(uint amountIn, address importToken1,address importToken2,address importToken3,uint fee1,uint fee2, uint fee3)
        external
        returns (uint)
    
       
        TransferHelper.safeApprove(importToken1, address(swapRouter), amountIn);
        
        
        ISwapRouter.ExactInputParams memory params = ISwapRouter
            .ExactInputParams({
                path: abi.encodePacked(
                    importToken1,
                    uint24(fee1),
                    importToken2,
                    uint24(fee2),
                    importToken3,
                    uint24(fee3),
                    importToken1

                ),
                recipient: msg.sender,
                deadline: block.timestamp,
                amountIn: amountIn,
                amountOutMinimum: 0
            });
            
        uint amountOut = swapRouter.exactInput(params);
        console.log("HEEELP",amountOut);
        return amountOut;

        
    }

在JavaScript中,我调用这个函数,我希望得到amountOut

代码语言:javascript
复制
arbitrage = await swapExamples.swapExactInputMultihop(amountIn,importToken1,importToken2,importToken3,fee1,fee2,fee3)
console.log(arbitrage)

但我收到了所有的数据

代码语言:javascript
复制
{
  hash: '0x97668c1ef43c53e2126e645f8224fe68188be2cb024c0e0e5deb722164c8491f',
  type: 2,
  accessList: [],
  blockHash: '0xcb381a0c0d855f60695f4decc2b18efa9ab1f0939b9634812f8ffd18d0ce406c',
  blockNumber: 15466768,
  transactionIndex: 0,
  confirmations: 1,
  from: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
  gasPrice: BigNumber { value: "6285584267" },
  maxPriorityFeePerGas: BigNumber { value: "1000000000" },
  maxFeePerGas: BigNumber { value: "11571168534" },
  gasLimit: BigNumber { value: "29026840" },
  to: '0xFD2Cf3b56a73c75A7535fFe44EBABe7723c64719',
  value: BigNumber { value: "0" },
  nonce: 289,
  data: '0xddae289800000000000000000000000000000000000000000000152d02c7e14af68000000000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000000000000000000000000000000000000000000bb8',
  r: '0xdbcb97e9e2678b6f4614950351c220abdd8692aa12957953d3409d31181908c1',
  s: '0x0f00c2d48f721c265fd68c921f2f3648559a439f0af206e5c9bc464dfa13abe3',
  v: 1,
  creates: null,
  chainId: 31337,
  wait: [Function (anonymous)]
}

我怎样才能得到amountOut?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-09-03 18:42:08

当进行非视图/纯函数调用时,无法获得返回值。

您必须将返回值放入事件中,并在调用之后读取该事件,或者使用ethers.js callStatic。这将查询节点在进行调用时返回值的大小,但实际上不会发出调用或更改状态。这被看作是一个视图函数。

你可以这样做:

代码语言:javascript
复制
// make the static view call
let arbitrage = await swapExamples.callStatic.swapExactInputMultihop(amountIn,importToken1,importToken2,importToken3,fee1,fee2,fee3)


// make the real call
let tx = await swapExamples.swapExactInputMultihop(amountIn,importToken1,importToken2,importToken3,fee1,fee2,fee3)

connsole.log(arbitrage)
票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/134932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档