变量类型(Value Types)

# 布尔型
关键字 bool
值 true , false
操作符 !, &&, ||, ==, !=
# 整型
关键字 int(int256), uint(uint256), uint8 ~ uint256(以8单位步进), int8 ~ int256 (以8单位步进)
比较操作符 <=, <, ==, !=, >, >=
算术操作符 +,-,unary -,unary +,*,/,%,**,<<,>>
x << y 等价于 x * 2**y
x >> y 等价于 x / 2**y 位操作符 &,!,^,~
# 浮点型
关键字 fixed(fixed128x19),ufixed(ufixed128x19),fixedMxN(M整数 8~256,以8步进;N小数 0 ~ 80),ufixedMxN(M整数 8~256,以8步进;N小数 0 ~ 80)
比较操作符 <=, <, ==, !=, >, >=
算术操作符 +,-,unary -,unary +,*,/,%,*
# 地址型
关键字 address(20字节,以太地址长度)
操作符 <=, <, ==, !=, >, >=
成员属性 balance(查询地址的余额),transfer(发送以太币wei到一个地址)
address x = 0x123;
address myAddress = this;
if (x.balance < 10 && myAddress.balance >= 10) x.transfer(10); // 我的余额大于10并且x的余额小于10,转给x以太10wei // 假如x是合约地址,它的代码将同transfer的调用一起执行,当没有gas或者执行失败,回退转账操作,当前合约抛出异常停止运行
send是transfer的底层实现,当执行失败,当前合约抛出异常但不停止运行,返回false
# 使用send有风险:如果调用堆栈深度到1024,或者gas用尽,会失败。为了安全,转账要一直检查send操作的返回值,使用transfer甚至更好
address nameReg = 0x72ba7d8e73fe8eb666ea66babc8116a41bfb10e2;
nameReg.call("register", "MyName");
nameReg.call(bytes4(keccak256("fun(uint256)")), a); // call 返回true,指示调用函数中断,返回false,引起EVM抛出异常 namReg.call.gas(1000000)("register", "MyName");
nameReg.call.value(1 ether)("register", "MyName");
nameReg.call.gas(1000000).value(1 ether)("register", "MyName"); callcode delegatecall
# 固定大小的字节数组
关键字 bytes1 ~ bytes32, bytes(bytes1)
比较操作符 <=, <, ==, !=, >, >=
位操作符 &,!,^,~,<<,>>
索引访问 x[k], 0 <= k < I
成员属性 length
# 动态大小的字节数组
关键字 bytes,string(UTF-8-encoded)
# 地址常量(Address Literals)
0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF
# 整数常量
2e10, -2e10, 2e-10, 2.5e1
(2**800 + 1) - 2**800
# 字符串常量
"foo", 'bar'
# 十六进制常量
hex"001122FF"
# 枚举(Enums)
pragma solidity ^0.4.16; contract test {
enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill } ActionChoices choice;
ActionChoices constant defaultChoice = ActionChoices.GoStraight; function setGoStraight() public {
choice = ActionChoices.GoStraight;
} function getChoice() public view returns (ActionChoices) {
return choice;
} function getDefaultChoice() public pure returns (uint) {
return uint(defaultChoice);
}
}

solidity语言2的更多相关文章

  1. 用solidity语言开发代币智能合约

    智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...

  2. 第一行代码:以太坊(2)-使用Solidity语言开发和测试智能合约

    智能合约是以太坊的核心之一,用户可以利用智能合约实现更灵活的代币以及其他DApp.不过在深入讲解如何开发智能合约之前,需要先介绍一下以太坊中用于开发智能合约的Solidity语言,以及相关的开发和测试 ...

  3. Solidity语言系列教程

    Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在 以太坊虚拟机(EVM) 上运行. ...

  4. solidity语言介绍以及开发环境准备

    solidity语言介绍以及开发环境准备   Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的 ...

  5. 用C++生成solidity语言描述的buchi自动机的初级经验

    我的项目rvtool(https://github.com/Zeraka/rvtool)中增加了生成solidity语言格式的监控器的模块. solidity特殊之处在于,它是运行在以太坊虚拟机环境中 ...

  6. Solidity语言基础 和 Etherum ERC20合约基础

    1. 类型只能从第一次赋值中推断出来,因此以下代码中的循环是无限的,  小. for (var i = 0; i < 2000; i++) { ... } --- Solidity Types ...

  7. solidity语言

    IDE:Atom 插件:autocomplete-solidity 代码自动补齐   linter-solium,linter-solidity代码检查错误   language-ethereum支持 ...

  8. solidity语言14

    库(Libraries) 库类似合约,实现仅在专门地址部署一次,使用EVM的DELEGATECALL的功能重复使用的目的.意思是当库函数被调用后,代码执行在被调用的合约的环境.例如,使用this调用合 ...

  9. solidity语言13

    函数过载 合约内允许定义同名函数,但是输入参数不一致 pragma solidity ^0.4.17; contract A { function f(uint _in) public pure re ...

  10. solidity语言12

    View Functions 函数声明为视图,将无权修改状态 pragma solidity ^0.4.16; contract C { function f(uint a, uint b) publ ...

随机推荐

  1. abp + angular 前端使用 hash ,登录界面不跳转问题

    abp 项目默认的路由没有使用hash,这会导致手动刷新浏览器时,页面404错误: 解决方法网上很多,就是在路由里添加一个{useHash: true},就行了. #用Hash带来的新问题# abp框 ...

  2. POJ_3696 The Luckiest number 【欧拉定理+同余式+对取模的理解】

    一.题目 Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his ...

  3. ACM 计算几何向量

    向量 简介注意事项基本计算 加减法 ~ 示例代码 长度 ~ 示例代码 数乘 ~ 示例代码 点积 应用 ~ 示例代码 叉积 ~ 示例代码 性质与应用 经典题目 向量旋转 操作目的 模板代码 简介 向量, ...

  4. b站弹幕的爬取以及词云的简单使用

    一.B站弹幕的爬取 1.分析发现,其弹幕都是通过list.so?=cid这个文件加载出来的,所以我们找到这个文件的请求头的请求url, 2. 打开url就能看到所有的评论 3. 上代码,解析 #!/u ...

  5. C++ GUI Qt4编程(03)-1.3layout

    1. 根据C++ GUI Qt4编程(第二版)整理2. 系统:centos7:  Qt版本:5.5.13. 程序:layout.cpp #include <QApplication> #i ...

  6. 有关eval用法的小结

    首先要明白eval.这个是可以把字符串代码,直接当做js运行.比如 var ss="alert(1);";这个时候ss保存的是文本. 使用 eval(ss);这样就相当于,执行了s ...

  7. numpy.reshape使用条件

    np.array中的元素的个数,需要和转换的类型各个维度的乘积相等.如:\(6=2*3=1*2*3\) 另外,可以发现参数的对应关系为shape(num_dims, num_rows, num_col ...

  8. AppInventor2笔记

    将视觉化的 块语言 翻译为 Android上的实现 的编译器使用了Kawa语言框架,而Kawa是Scheme编程语言的方言,由Per Bothner开发,并由自由软件基金会发布,它是GNU操作系统的一 ...

  9. 单元测试框架AndroidTestCase

    我不是讲怎么成为一个安卓测试员,就不写那么多了 就写我们常用的, AndroidTestCase 为一Android平台下通用的测试类,它支持所有JUnit的Assert方法和标准的setUp 和te ...

  10. 个人笔记——Android网络技术

    一.WebView 的用法 Android 提供WebView 的用法,可以在自己的应用程序里嵌入一个浏览器 webView.getSettings().setJavaScriptEnabled(tr ...