首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用内联程序集(YUL)调用函数

使用内联程序集(YUL)调用函数
EN

Ethereum用户
提问于 2022-04-21 00:09:46
回答 1查看 644关注 0票数 0

我一直在努力弄清楚如何使用内联程序集(yul)进行函数调用。

例如,我有一个函数_getCurrentRate(),除了这个函数之外,我希望能够从几个不同的函数中调用。

代码语言:javascript
复制
function _getCurrentRate() public view returns (uint256 multiplier) {
        assembly {
            let pe := sload(periodEnd.slot)
            let ps := sload(periodStart.slot)
            let rate := sload(compoundRate.slot)

            if lt(timestamp(), pe) {
                multiplier := add(mul(sub(timestamp(), ps), rate), 1000000000000000000)
            } 
            
            if iszero(lt(timestamp(), pe)) {
                multiplier := 2000000000000000000
            }
        }
    }

但是,我已经翻阅了文档,无法找到任何关于如何完成这一任务的提示!我正在讨论的一个示例实现看起来类似于

代码语言:javascript
复制
function calculateSomething() public view returns (uint256 something) {
    assembly {
        let a := 123456789
        let rate := _getCurrentRate()

        something := mul(a, rate)
    }
}
EN

回答 1

Ethereum用户

发布于 2022-04-21 06:43:42

_getCurrentRate必须是组装块中的yul函数,这可能不是您最终想要的结果。

代码语言:javascript
复制
    function calculateSomething() public view returns (uint256 something) {
    assembly {
          function _getCurrentRate() -> multiplier {
            let pe := sload(periodEnd.slot)
            let ps := sload(periodStart.slot)
            let rate := sload(compoundRate.slot)

            if lt(timestamp(), pe) {
                multiplier := add(mul(sub(timestamp(), ps), rate), 1000000000000000000)
            } 
            
            if iszero(lt(timestamp(), pe)) {
                multiplier := 2000000000000000000
            }
        }
    
    let a := 123456789
    let rate := _getCurrentRate()

    something := mul(a, rate)
    }
}

解决问题的一个办法是:

代码语言:javascript
复制
function calculateSomething() public view returns (uint256 something) {
    uint256 rate = _getCurrentRate();
    assembly {
        let a := 123456789
        something := mul(a, rate)
    }
}
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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