solidity结构以及部分方法

合约结构:

// SPDX-License-Identifier: GPL-3.0 //或者 UNLICENSED表示非开源,无法审核

 

pragma solidity >=0.4.0 <0.9.0; //solidity版本设置

import "name1.sol"; //引入remix含有的合约

import "../name2.sol"; //通过路径引入合约

import{name as name_1} from "../name2.sol"; //name_1为自定义别名

 

//单行注释

/*

多行注释

*/

 

contract contract_name{

function function_name() function_modifier {//方法名  修饰符

    ...//内容

}

}

 

 

Modifier方法

modifier:代替重复的判断

用法:modifier modifier_name(){

...//内容

require( A , operation failed” );//require方法可用于判断 如果A成立则继续执行否则弹//operation failed

require(A1 , “”);

_;//使用require方法添加

}

例:function function_name(type parameter 1) public modifier_name{

C;//A成立时执行C否则弹出operation failed

}  

 

Event事件是合约的可继承成员。发出一个事件,它存储在事务日志中传递的参数。这些日志存储在区块链上,并且可以使用合约地址访问,直到合约出现在区块链上。生成的事件无法从合同中访问,即使是创建和发出它们的人也无法访问。可以使用 event 关键字声明事件。

    event Deposit(address _from, string _name, uint256 _value);//将值写入logs日志中

 

function deposit(string memory _name) public payable{

        emit Deposit(msg.sender , _name , msg.value);

}

 

Enum枚举将变量限制为只有几个预定义值之一。此枚举列表中的值称为枚举。

contract test {

   enum FreshJuiceSize{ SMALL, MEDIUM, LARGE }

   FreshJuiceSize choice;

   FreshJuiceSize constant defaultChoice = FreshJuiceSize.MEDIUM;

 

   function setLarge() public {

      choice = FreshJuiceSize.LARGE;

   }

   function getChoice() public view returns (FreshJuiceSize) {

      return choice;

   }

   function getDefaultChoice() public pure returns (uint) {

      return uint(defaultChoice);

   }

}

输出://输出的值为012顺序输出

uint8: 2

uint256: 1

 

Error自定义:

//error Unauthorized(string error);单个参数

error Unauthorized(string error,address _address);

contract ErrorExample { 

    address payable owner = payable(msg.sender);

 

    function withraw() public{

        if(msg.sender != owner)

            //revert Unauthorized("Unauthorized"); //单个参数

            revert Unauthorized({error:"Unauthorized",_address:msg.sender});

//条件满足if的内容,就会输出error:"Unauthorized",_address:msg.sender

        owner.transfer(address(this).balance);

    }

}

posted @   行者akai  阅读(64)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示