关闭

【Solidity】2.合约的结构体 - 深入理解Solidity

标签: 结构Solidity智能合约区块链
1217人阅读 评论(0) 收藏 举报
分类:

索引

2 合约的结构体

Solidity的合约类似于面向对象语言的类。 每个合同都可以包含State Variables, Functions, Function Modifiers, Events, Structs TypesEnum Types的声明。 此外,合约可以继承其他合约。

状态变量

状态变量是永久存储在合约存储中的值。

pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData; // 状态变量
    // ...
}

请参阅有关状态变量类型的“类型”部分,“可见性”和“获取器”,以获取可见性的可能选择。

函数 Functions

函数是一个代码合同中的可执行单元。

pragma solidity ^0.4.0;

contract SimpleAuction {
    function bid() payable { // 函数
        // ...
    }
}

函数调用可以内部或外部发生,均有不同程度的知名度对其他合同(可见性和getter)的。

函数修饰符 Function Modifiers

函数修饰符可用于以声明方式修改函数的语义(参见“契约”部分中的函数修饰符)。

pragma solidity ^0.4.11;

contract Purchase {
    address public seller;

    modifier onlySeller() { // Modifier
        require(msg.sender == seller);
        _;
    }

    function abort() onlySeller { // 调用Modifier
        // ...
    }
}

事件

事件是与EVM日志工具便捷接口。

pragma solidity ^0.4.0;

contract SimpleAuction {
    event HighestBidIncreased(address bidder, uint amount); // 事件

    function bid() payable {
        // ...
        HighestBidIncreased(msg.sender, msg.value); // 触发事件
    }
}

请参阅合约中的事件部分,了解有关事件如何声明和可以在dapp内使用的信息。

结构类型

Structs是可以分组几个变量的自定义类型(请参阅类型部分中的结构体)。

pragma solidity ^0.4.0;

contract Ballot {
    struct Voter { // 结构体
        uint weight;
        bool voted;
        address delegate;
        uint vote;
    }
}

枚举类型

枚举可用于创建具有有限值集的自定义类型(请参阅类型部分中的枚举)。

pragma solidity ^0.4.0;

contract Purchase {
    enum State { Created, Locked, Inactive } // 枚举
}
0
0
查看评论

智能合约编程语言solidity的特性

solidity特性1、异常无法捕捉 2、函数返回值可为多个 3、包括Address等特殊类型 4、返回值声明可放在函数声明上 5、运行函数会消耗gas、gas不足会导致智能合约无法运行 6、可在go-ethereum、solidity在线编译器、mist钱包界面来运行智能合约 7、有单...
  • j1097376869
  • j1097376869
  • 2017-05-23 00:28
  • 205

『0008』- Solidity中public、internal、private在状态变量和函数中的使用以及Solidity智能合约继承、重写

孔壹学院:国内区块链职业教育领先品牌 作者:黎跃春,区块链、高可用架构工程师 微信:liyc1215 QQ群:348924182 博客:http://liyuechun.org 在上一小节中我们在函数参数中使用storage这个关键字时,当前的函数必须是internal或者pri...
  • liyuechun520
  • liyuechun520
  • 2017-10-31 21:52
  • 296

学习solidity的一个简单智能合约(1)——投票

这篇博客作为记录学习solidity语言的备忘录
  • qq_39733285
  • qq_39733285
  • 2017-08-13 15:32
  • 334

『0002』 - Atom编辑器编写智能合约(Smart Contract)插件安装配置

孔壹学院:国内区块链职业教育领先品牌 作者:黎跃春,区块链、高可用架构工程师 微信:liyc1215 QQ群:348924182 博客:http://liyuechun.org 编辑器选择理论上讲任何编辑器都可以编写Solidity合约代码,比如:WebStorm,VSCode,...
  • liyuechun520
  • liyuechun520
  • 2017-10-31 21:46
  • 265

【Solidity】6. 合约 - 深入理解Solidity

合约Solidity的合约类似于面向对象语言的类。 它们包含可以修改这些变量的状态变量和函数中的持久性数据。 在不同的合同(实例)上调用函数将执行EVM函数调用,从而切换上下文以使状态变量无法访问。创建合约合同可以从“外部”或“固定”合同中创建。 当创建合同时,其构造函数(与合同名称相同的函数)将被...
  • diandianxiyu
  • diandianxiyu
  • 2017-09-14 15:42
  • 2449

区块链-智能合约简单脚本编写方法(solidity)

“一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议。”协议是技术实现(technical implementation),在这个基础上,合约承诺被实现,或者合约承诺实现被记录下来。选择哪个协议取决于许多因素,最重要的因素是在合约履行期...
  • jeason29
  • jeason29
  • 2016-06-03 13:53
  • 3938

第001节 - Solidity 智能合约开发工具准备第一篇

第001节 - Solidity 智能合约开发工具准备第一篇Solidity (中文:固态,固体)是一种语法与Javascript相似的高级语言,它为Ethereum虚拟机(EVM)编译代码而设计。Solidity是静态类型的,支持继承,库和复杂的用户自定义类型以及其他功能。如您所见,它可以用来创建...
  • liyuechun520
  • liyuechun520
  • 2017-08-16 21:00
  • 172

区块链学堂(第一课):区块链引子+智能合约+Solidity

区块链引子   区块链到底是什么? 区块链(英:Blockchain) 是一种分布式数据库,起源自比特币,区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了若干次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。(摘自wiki) ...
  • u011386109
  • u011386109
  • 2017-03-16 14:11
  • 1256

solidity数据结构

pragma solidity ^0.4.0; contract aaa{ uint[] a; function aaa(){ a.push(111); } function add(uint n){ a.push(n); }...
  • Vinsuan1993
  • Vinsuan1993
  • 2017-07-28 23:22
  • 335

以太坊智能合约编程之菜鸟教程

手把手带你走上智能合约编程之路 译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队。如果您想要获取更多及时信息,可以访问ConsenSys首页点击左下角Newsletter订阅邮件。本文的翻译获得了ConsenSys创始人Lubin先生的授权。 有些人说以太...
  • fidelhl
  • fidelhl
  • 2016-01-08 11:55
  • 33265
    个人资料
    • 访问:648895次
    • 积分:9113
    • 等级:
    • 排名:第2456名
    • 原创:298篇
    • 转载:13篇
    • 译文:4篇
    • 评论:82条
    博客专栏
    微信订阅号
    欢迎加入QQ群
    玩家老黄历(微信小程序)
    谢谢支持~
    最新评论