blockchain - solidity - function 中的external, public 区别在于gas 费和 参数所在的位置
访问量: 510
1. public 可以被任何方法访问,东西放在了memory 中,所以耗费的gas多一些 (例如 460+)
2. external 不能被internal访问, 参数等直接在callback中, 不需要转移到memory 中,所以耗费的gas少很多(例如200+)
view方法,如果调用了event log, 则肯定会消耗gas, 此时就不能用view方法(把view去掉)
例如:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract TestVariable { string message; uint256 amount; event ShowVar(string name, address value); event ShowVar(string name, string value); event ShowVar(string name, uint value); function setMessage(string memory _message) public { message = _message; } function getMessage() public view returns(string memory){ return message; } function setAmount(uint256 _amount) public{ amount = _amount; } function getAmount() public view returns(uint256) { return amount; }
// 这里就不能声明成view方法
// 这里调用了3个 ShowVar Event, 所以最后tx生成的同时,还会有3个EventLog出来。 function printVariables() public{ emit ShowVar("msg.sender", msg.sender); emit ShowVar("amount", amount); emit ShowVar("message", message); } }