Solidity 简介
Solidity 是一种用于编写以太坊虚拟机(EVM)智能合约的编程语言。我认为掌握 Solidity 是参与链上项目的必备技能:区块链项目大部分是开源的,如果你能读懂代码,就可以规避很多亏钱项目。
Solidity 具有两个特点:
- “基于对象”:学会
Solidity之后,可以助你在区块链领域找到好工作,挣钱找对象。 - “高级”:不会
Solidity,在币圈会显得很 low。
test
solidity中允许函数进行重载(overloading),即名字相同但输入参数类型不同的函数可以同时存在,他们被视为不同的函数。注意,solidity不允许修饰器(modifier)重载。
举个例子,我们可以定义两个都叫saySomething()的函数,一个没有任何参数,输出"Nothing";另一个接收一个string参数,输出这个string。
1 | function saySomething() public pure returns(string memory){ |
Solidity支持两种特殊的回调函数,receive()和fallback(),他们主要在两种情况下被使用:
注意⚠️:在solidity 0.6.x版本之前,语法上只有 fallback() 函数,用来接收用户发送的ETH时调用以及在被调用函数签名没有匹配到时,来调用。 0.6版本之后,solidity才将 fallback() 函数拆分成 receive() 和 fallback() 两个函数。
我们这一讲主要讲接收ETH的情况。
我们曾在第20讲:发送ETH那一讲介绍过利用call来发送ETH,这一讲我们将介绍如何利用它调用合约。
call 是address类型的低级成员函数,它用来与其他合约交互。它的返回值为(bool, data),分别对应call是否成功以及目标函数的返回值。
call是solidity官方推荐的通过触发fallback或receive函数发送ETH的方法。call来调用另一个合约,因为当你调用不安全合约的函数时,你就把主动权交给了它。推荐的方法仍是声明合约变量后调用函数,见第21讲:调用其他合约ABI,就没法生成合约变量;这时,我们仍可以通过call调用对方合约的函数。