当前位置: 首页 > news >正文

solidity的高阶语法

1.合约

Solidity 中的合约类似于 C++ 中的类。 合约具有以下属性。

  • Constructor − 使用 constructor 关键字声明的特殊函数,每个合约将执行一次,并在创建合约时调用。

  • State Variables − 每个合约的变量用于存储合约的状态。

  • Functions − 每个合约的函数可以修改状态变量以改变合约的状态。

可见性量词

以下是合约的函数/状态变量的各种可见性量词。

  • external − 外部函数旨在由其他合约调用。 它们不能用于内部呼叫。 要在合约中调用外部函数,需要调用 this.function_name() 。 状态变量不能标记为外部。

  • public − 公共函数/变量可以在外部和内部使用。 对于公共状态变量,Solidity 会自动创建一个 getter 函数。

  • internal − 内部函数/变量只能在内部使用或由派生合约使用。

  • private − 私有函数/变量只能在内部使用,甚至不能在派生合约中使用。

示例

pragma solidity ^0.5.0;contract C {//private state variableuint private data;//public state variableuint public info;//constructorconstructor() public {info = 10;}//private functionfunction increment(uint a) private pure returns(uint) { return a + 1; }//public functionfunction updateData(uint a) public { data = a; }function getData() public view returns(uint) { return data; }function compute(uint a, uint b) internal pure returns (uint) { return a + b; }
}
//External Contract
contract D {function readData() public returns(uint) {C c = new C();c.updateData(7);         return c.getData();}
}
//Derived Contract
contract E is C {uint private result;C private c;constructor() public {c = new C();}  function getComputedResult() public {      result = compute(3, 5); }function getResult() public view returns(uint) { return result; }function getData() public view returns(uint) { return c.info(); }
}

对于 E.getCompulatedResult() 和 E.getResult() 显示 

输出

0: uint256: 8

2.继承

继承是扩展合约功能的一种方式。 Solidity 支持单继承和多重继承。 以下是主要亮点。

  • 派生合约可以访问所有非私有成员,包括内部方法和状态变量。 但使用这个是不允许的。

  • 如果函数签名保持不变,则允许函数重写。 如果输出参数不同,编译将失败。

  • 我们可以使用 super 关键字或使用超级合约名称来调用超级合约的函数。

  • 在多重继承的情况下,使用 super 的函数调用优先考虑最派生的契约。

示例

pragma solidity ^0.5.0;contract C {//private state variableuint private data;//public state variableuint public info;//constructorconstructor() public {info = 10;}//private functionfunction increment(uint a) private pure returns(uint) { return a + 1; }//public functionfunction updateData(uint a) public { data = a; }function getData() public view returns(uint) { return data; }function compute(uint a, uint b) internal pure returns (uint) { return a + b; }
}
//Derived Contract
contract E is C {uint private result;C private c;constructor() public {c = new C();}  function getComputedResult() public {      result = compute(3, 5); }function getResult() public view returns(uint) { return result; }function getData() public view returns(uint) { return c.info(); }
}


3.构造函数

构造函数是使用constructor关键字声明的特殊函数。 它是一个可选函数,用于初始化合约的状态变量。 以下是构造函数的主要特征。

  • 一个合约只能有一个构造函数。

  • 构造函数代码在合约创建时执行一次,用于初始化合约状态。

  • 执行构造函数代码后,最终代码将部署到区块链。 该代码包括公共函数和可通过公共函数访问的代码。 构造函数代码或仅由构造函数使用的任何内部方法不包含在最终代码中。

  • 构造函数可以是公共的,也可以是内部的。

  • 内部构造函数将合约标记为抽象。

  • 如果没有定义构造函数,则合约中存在默认构造函数。

pragma solidity ^0.5.0;contract Test {constructor() public {}
}
  • 如果基础合约有带参数的构造函数,每个派生合约都必须传递它们。

  • 基础构造函数可以直接使用以下方式初始化 −

pragma solidity ^0.5.0;contract Base {uint data;constructor(uint _data) public {data = _data;   }
}
contract Derived is Base (5) {constructor() public {}
}
  • 基本构造函数可以使用以下方式间接初始化 −

pragma solidity ^0.5.0;contract Base {uint data;constructor(uint _data) public {data = _data;   }
}
contract Derived is Base {constructor(uint _info) Base(_info * _info) public {}
}
  • 不允许直接和间接方式初始化基础合约构造函数。

  • 如果派生合约未将参数传递给基础合约构造函数,则派生合约将变得抽象。

http://www.xdnf.cn/news/1465291.html

相关文章:

  • 【Linux】网络安全管理:SELinux 和 防火墙联合使用 | Redhat
  • 红黑树 + 双链表最小调度器原型
  • 【JMeter】分布式集群压测
  • 解锁上下文的力量:大型语言模型中的上下文工程全解析
  • Java基础篇02:基本语法
  • CAD:修改
  • 23.【C++进阶】异常(try、catch、throw)
  • SQL表一共有几种写入方式
  • 零基础入门AI: YOLOv5 详解与项目实战
  • 数据库存储大量的json文件怎么样高效的读取和分页,利用文件缓存办法不占用内存
  • 数据结构:排序
  • 【Day21】146.LRU缓存 (Least Recently Used)
  • 详细解读Docker
  • STC携手VEX发起全球首个碳资产RWA生态,泰国峰会即将引爆绿色金融
  • 飞算JavaAI炫技赛:电商系统开发全流程实战解析
  • 卫星在轨光压计算详解
  • openharmony之AV_CodeC音视频编解码模块详解(二)
  • (未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
  • Kubernetes实战系列(4)
  • v4l2设置图像分辨率失败的问题
  • react+umi项目如何添加electron的功能
  • PyTorch 中.backward() 详解使用
  • 前后端国密加密传输用户密码流程
  • Unity 解决天空盒中间出现一条线
  • flink 伪代码
  • 高效管理网络段和端口集合的工具之ipset
  • Bug排查日记:高效记录与解决之道
  • 高通AR1平台Recovery架构分析与自动恢复出厂设置实现
  • 从 elecworks 到云端协同:SOLIDWORKS Electrical 发展历史 + 核心功能 + 采购指南
  • Linux 磁盘扩容及分区相关操作实践