Solidity 是一个面向合约的高级语言,其语法类似于JavaScript 。是运行在以太坊虚拟机中的代码。这里我们用的是remix编译环境。是一个在线的编译环境。地址为http://remix.ethereum.org

Solidity的合约类似于面向对象语言中的类。下面我们可以先创建一个合约。

pragma solidity ^0.4.7;
contract a{
uint x;
function set(uint num) public{
x = num;
}
function get() public returns(uint){
return x;
}
}

  

这里我们创建了一个合约a,合约中有一个状态变量 x,状态变量的储存方式是storage的,定义了两个函数 set 和 get,通过这两个函数就可以得到和修改x。同时也可以申明构造函数。

pragma solidity ^0.4.7;
contract a{
uint x;
function a() public{
x = 2;
}
function set(uint num) public{
x = num;
}
function get() public returns(uint){
return x;
}
}

  

构造函数的名字要和合约的名字相同,上面的构造函数中对 x 初始化为1。

pragma solidity ^0.4.7;
contract b{
uint public y;
}
contract a{
uint x;
b B = new b();
function a() public{
x = 1;
}
function set(uint num) public{
x = num;
}
function get() public returns(uint){
return x;
}
}

  

上面的合约中我们在合约a中创建了合约b的对象 B,就可以通过B来调用 b 中的变量和函数。

在合约中的函数可以被指定为外部的,公共的,内部的或私有的,默认是公共的。 对于状态变量,外部是不可能的,默认是内部的。

external:
外部功能是合约接口的一部分,这意味着它们可以通过其他合约和交易进行调用。 外部函数f不能在内部调用(即f()不起作用,但this.f()可以正常工作

public:
公共功能是合同接口的一部分,可以在内部或通过消息进行调用。 对于公共状态变量,生成自动Getters函数。

internal:
这些功能和状态变量只能在内部进行访问(即从当前合约或从其中获得的合约),而不使用这些变量。

private:
私有函数和状态变量只对其中定义的合约而不是衍生合约可见。

pragma solidity ^0.4.7;
contract b{
uint public y;
function set(uint num) public{
y = num;
}
function get() internal returns(uint){
return y;
}
}
contract a{
uint x;
b B = new b();
function a() public{
x = 1;
}
function set(uint num) public{
B.set(2);
x = num;
}
function get() public returns(uint){
return x;
}
function gety() public returns(uint){
return B.get();//错误,在合约b中的函数
return B.y();
} }

  

编译器会自动为所有公共状态变量创建getter函数。因此编译器将生成一个名为y的函数,它不接受任何参数,并返回一个uint,即状态变量数据的值。

solidity也支持合约的继承,由于继承实现是代码复制。如果出现函数名重写,最终使用的是继承链上哪个合约定义的代码呢?实际执行时,依据的是最远继承的原则

pragma solidity ^0.4.7;
contract b{
function data() public returns(uint){
return 1;
}
}
contract a{
function data() public returns(uint){
return 2;
}
}
contract c is a,b{
function call() public view returns(uint){
return data();
}
}
contract d is b,a{
function call() public view returns(uint){
return data();
}
}

  

上面的代码中根据最远继承原则,合约 c 中 call 函数调用的是合约 b 的data 函数,合约 d 调用的是合约 a 的 data 函数

solidity合约详解的更多相关文章

  1. solidity事件详解

    很多同学对Solidity 中的Event有疑问,这篇文章就来详细的看看Solidity 中Event到底有什么用? 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊. ...

  2. 详解 Solidity 事件Event - 完全搞懂事件的使用

    很多同学对Solidity 中的Event有疑问,这篇文章就来详细的看看Solidity 中Event到底有什么用? 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊. ...

  3. truffle使用详解

    truffle使用详解 truffle是什么 Truffle测试环境 安装truffle truffle项目结构解析 文件编译 truffle的配置文件 移植 与合约进行交互 1.truffle是什么 ...

  4. 以太坊客户端Geth命令用法-参数详解

    Geth在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具. 熟悉Geth可以让我们有更好的效率,大家可收藏起来作为Geth命令用法手册. 本文主要是对geth help的翻译 ...

  5. Hyperledger Fabric架构详解

    区块链开源实现HYPERLEDGER FABRIC架构详解 区块链开源实现HYPERLEDGER FABRIC架构详解 2018年5月26日 陶辉 Comments 10 Comments hyper ...

  6. 详解服务器性能测试的全生命周期?——从测试、结果分析到优化策略(转载)

    服务器性能测试是一项非常重要而且必要的工作,本文是作者Micheal在对服务器进行性能测试的过程中不断摸索出来的一些实用策略,通过定位问题,分析原因以及解决问题,实现对服务器进行更有针对性的优化,提升 ...

  7. 1-Hyperledger Fabric概念详解

    目录 一.Hyperledger Fabric概述 二.基本术语 1.共享账本ledger 2.通道Channel 3.组织Org 4.智能合约Chaincode 5.背书Endorse 6.各种节点 ...

  8. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  9. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

随机推荐

  1. POJ 2208--Pyramids(欧拉四面体体积计算)

    Pyramids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3451   Accepted: 1123   Specia ...

  2. 利用ascii码生成26个英文字母

    <script> let a = ""; for (var i = 65; i < 91; i++) { a += String.fromCharCode(i); ...

  3. 原生JS实现移动端的轮播效果

    首先 我们想实现的效果是在手指按下拖动的时候图片能够跟随移动(无动画效果)然后松开手指后判断图片移动的位置 和某一个值进行比较 在这里我们默认定为盒子的1/3宽度 当x轴的移动位置大于1/3的时候图片 ...

  4. Android中的AutoCompleteTextView(随笔提示文本)组件的简单使用

    Android中的随笔提示文本组件AutoCompleteTextView的使用,此组件用于输入文本,然后就会在所配置的适配器中的数据进行查找显示在组件下面. 这里值得注意的是AutoComplete ...

  5. vue2.0 移动端,下拉刷新,上拉加载更多插件,修改版

    在[实现丰盛]的插件基础修改[vue2.0 移动端,下拉刷新,上拉加载更多 插件], 1.修改加载到尾页面,返回顶部刷新数据,无法继续加重下一页 2.修改加载完成文字提示 原文链接:http://ww ...

  6. Linux awk基础笔记

    正则表达式含义与构成:用单个字符串来描述或者匹配一系列符合某个句法规则的字符串,一般是由普通字符与特殊字符组成 awk 选项 '模式或者命令{编辑指令}' 文件名 awk '//{print}' aw ...

  7. VIM Commands

    Vim Commands Commands in NORMAL modes Motions small granular: move by direction k h l j mid granular ...

  8. HTTPS相关知识以及在golang中的应用

    最近简单学习了HTTPS,并在golang中实践了一下,现在把学到的知识记录下来,方便以后查看,如果有幸能帮到有需要的人就更好了,如果有错误欢迎留言指出. 一些简单的概念,可以自行百度百科 HTTPS ...

  9. SAP Odata実行命令(1)

    $count $Orderby:desc/asc ※$Orderby=ソートする項目 desc降順/asc昇順 を指定すること $Filter: $Skip,Top and Inline count: ...

  10. 在CentOS7中搭建Zookeeper集群

    前几天装了CentOS7.并安装了一些基本的工具,现在我手上有三台机器:分别是master,slave1,slave2. 今天我将搭建zookeeper,使用的版本是zookeeper-3.4.11. ...