【solidity必知】如何理解 solidity 的低级别调用与高级别调用?

在以太坊智能合约开发里,低级别调用(Low-levelcalls)和高级别调用(High-levelcalls)是两种不同的合约交互方式,对新手小白来说这可能是一个陌生的概念。这篇文章我们来详细说一下他们的概念及应用。

在以太坊智能合约开发里,低级别调用(Low-level calls)和高级别调用(High-level calls)是两种不同的合约交互方式,对新手小白来说这可能是一个陌生的概念。接下来我们来详细说一下他们的概念及应用:

低级别调用(Low-level calls)

低级别调用是一种较为底层的合约交互方式,它绕过了 solidity 编译器的一些高级特性,直接与 EVM(以太坊虚拟机)进行交互。

这种调用方式提供了更大的灵活性,但同时需要开发者手动处理更多的细节,例如错误处理和数据编码。我们来看一个例子:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract LowLevelCallExample {
    function sendEther(address payable recipient) external payable {
        (bool success, ) = recipient.call{value: msg.value}("");
        require(success, "Transfer failed.");
    }
}

在这个示例中,call 函数用于向 recipient 地址发送以太币。{value: msg.value} 是一个可选的参数,用于指定要发送的以太币数量。("") 表示不调用任何函数,只是简单地发送以太币。

高级别调用

高级别调用是一种更抽象的合约交互方式,它使用 solidity 编译器提供的高级特性,例如合约实例化和函数调用。这种方式更加方便和安全,同时也限制了一些灵活性。我们看下边这个例子:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract AnotherContract {
    function doSomething() external pure returns (string memory) {
        return "Something done!";
    }
}

contract HighLevelCallExample {
    function callAnotherContract(address anotherContractAddress) external view returns (string memory) {
        AnotherContract anotherContract = AnotherContract(anotherContractAddress);
        return anotherContract.doSomething();
    }
}

在这个示例中,HighLevelCallExample 合约通过实例化 AnotherContract 合约,并调用其 doSomething 函数来进行高级别调用。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
mengbuluo222
mengbuluo222
0x9Ff1...FaA5
前端开发求职中... 8年+开发经验,拥有丰富的开发经验,擅长VUE、React开发。