函数
回退函数
写法一:发送主币
fallback() external {}
特点:外部可视,可接受主币发送,调用合约中不存在的函数,就触发该回退函数的逻辑
如果想让该函数可以直接发送主币,需要加上“payable”例如:
fallback() external payable{}
写法二:只接受主币
receive() external payable {}
该写法必须有“payable”。
之后定义一个事件
event Log(string func,address sender, uint value, bytes data);
并在两个函数里写上,在fallback函数里:
emit Log("fallback",msg.sender,msg.value,msg.data);
其中:第一个略,第二个调用者地址,第三个调用该函数时的发送主币数量
第四个是调用时发送的数据
在receive函数中:
emit Log("fallback",msg.sender,msg.value,"");
ps:该类型函数不接受数据,所以最后一个的数据改为空字符串
使用:部署后,没有可用外部按钮,需要手动在VALUE处输入主币数量,然后在CALLDATA处输入一个十六进制的数据,之后点击Transact才会调用"fallback"函数,因为msg.data有数据了。如果直接输入主币之后点击Transact就会调用”receive“函数。
调用其他合约函数
设置合约A、B,在合约B中设置一些函数,例如:
uint public value = 123;
uint public x;
function setX(uint _x)external {
x = _x;
}
function getX()external view returns (uint){
return x;
}
在合约A中如果想
调用第一个普通函数
function set(address _text, uint _x)external {
B(_text).setX(_x);
//引用方式:“合约名(变量一).函数名(变量二)”
//变量名一要是“address”类型的,函数名则根据被调用的合约里的函数来
//变量名二根据所调用的合约中的函数需不需要形参来确定
} //调用普通函数。
调用第二种只读函数
//调用只读函数,保持函数与被调用的函数的类型一致
function get(address _text, uint _x)external view returns(uint) {
uint x = B(_text).getX();
return x;
/*写法二
return B(_text).getX();
//写法三,在第二个括号内定义返回值是x
x = B(_text).getX();
*/
}
标签:调用,函数,text,主币,uint,external,回退
From: https://www.cnblogs.com/hunshuideyunxue/p/18319580