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 函数

转载于:https://www.cnblogs.com/mambakb/p/9883329.html

solidity合约详解相关推荐

  1. solidity事件详解

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

  2. Solidity语言详解

    Solidity语言学习学习总结 文章目录 Solidity语言学习学习总结 一.合约文件剖析 1.1一个合约文件的结构如下: 1.2合约的引入import 1.3引入状态变量.函数.事件.函数修改器 ...

  3. ConfluxScan 验证合约详解

    ConfluxScan 提供了合约验证的功能,本文将介绍如何在 Scan 验证一个合约. 为什么要进行合约验证? 合约验证之后会有如下几个好处: 合约验证之后可在 Scan 上看到 Solidity ...

  4. 区块链之智能合约详解

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 什么是智能合约? 智能合约又称智能合同,是由事件驱动的.具有状态的.获得多方承认的.运行在区块链之上的.且能够根据预设条 ...

  5. ERC721藏品合约详解,附代码实现

    2019独角兽企业重金招聘Python工程师标准>>> 我们可以用以太坊智能合约来模拟稀有的收藏品,每一个通证都遵循以太坊ERC-721标准, 它是DieterShirley在201 ...

  6. 质押智能合约详解|手把手教你玩转质押合约|Defi质押

    本文介绍通过质押底层币(以太坊)资产获取收益的一般逻辑及其实现方法,该方案在很多defi项目得到应用:本文中的收益为ERC20通证,收益获取也可以理解为行为. 开发环境:chrome + metama ...

  7. 区块链技术进阶-深入详解以太坊智能合约语言 solidity(含源码)-熊丽兵-专题视频课程...

    区块链技术进阶-深入详解以太坊智能合约语言 solidity(含源码)-103人已学习 课程介绍         区块链开发技术进阶-深入详解以太坊智能合约语言 solidity视频培训教程:本课程是 ...

  8. [区块链]详解以太坊标准发行通证Token代码(技术面看待ICO)

    /* This creates a public tradeable fungible token in the Ethereum Blockchain. https://github.com/eth ...

  9. 智能合约Smart Contract技术详解

    文章目录 合约编写 基本介绍 构造方法 ipfs mint 提现 白名单 合约 前端 部署 验证合约代码 前端和合约交互 准备工作 获取已经mint了的数量 mint 合约编写 建议读者先了解下sol ...

最新文章

  1. [转] 一个OpenSource的评价图
  2. 从另一服务器传输文件到本服务器(服务器间传输文件)
  3. tf.broadcast_to
  4. matlab中线性规划优化计算方法和实例
  5. Jupyter notebook 编写scala与spark
  6. 对代码生成器的一点想法
  7. java中的静态初始化是什么意思,Java中static静态变量的初始化完全解析
  8. fatal error C1189: #error:MFC does not support WINVER less than 0x0501. Please change the definitio
  9. 网页中使用的特殊字体(webdings, wingdings 2)
  10. 新的blog,将会记录我的成长历程
  11. C#面向对象10 继承
  12. 基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)
  13. 报错ValueError: check_hostname requires server_hostname
  14. Julia: 关于下载库时WinRPM的Bug
  15. python下载大文件mp4_Python 实现视频爬取下载及断点续传优化、异步下载
  16. 创建Tapestry5 工作环境
  17. Excel —— 录制宏
  18. 面试-03-数据库和事务专题
  19. linux下安装了lxml但依然报错rom lxml import etreeModuleNotFoundError: No module named ‘lxml‘
  20. 【Go基础】1 - Go Go Go

热门文章

  1. 拳王虚拟项目公社:网上做什么兼职副业比较容易挣到钱?虚拟资源项目是赚钱的最佳选择
  2. C语言教程第六章:指针(2)
  3. python 读取中文文件名/中文路径
  4. Android View体系‘铁三角‘
  5. Java程序员的日常
  6. dataframe修改数据_利用Python进行数据分析(语法篇)
  7. 遇到一个Linux文件系统因bios时间错误变成只读的问题
  8. 【Elasticsearch】es node 节点
  9. 【Kafka】 kafka 启动 Connection to node 1 could not be established. Broker may not be available
  10. 【MySQL】MySQL 查询优化器的提示(hint)