1.实现自己的第一个智能合约
1). solidity官方文档:https://solidity-cn.readthedocs.io/zh/develop/
2). 在线编译器:https://remix.ethereum.org/
注:建议大家把remix下载到本地,这样可以保存代码,方便以后的使用。
3).solidity 是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。
2.节约gas的利器-pure和view
- 只要有了pure与view修饰符的函数,那么调用函数就不会消耗gas。而没有pure与view修饰的函数,如下面的change就会消耗gas。
1)pure:固定的输入输出,可以自由调用,因为它只是“查看”区块链的状态而不改变它。
2)view: 可以自由调用,因为它只是“查看”区块链的状态而不改变它 - pure:不读取更不修改区块上的变量,使用本机的CPU资源计算我们的函数。所以不消耗任何的资源这是很容易的理解的。
- view: 但是view既然要读取区块链上的值,为什么也不用消耗gas呢??
其实很简单,因为作为一个全节点来说,会同步保存所有的信息,保存在本地中。那么我们要查看区块链上的资源,同样可以直接在一个全节点之上查询数据即可。
我不需要全世界的节点都知道。都去同时的处理这笔事务。
我也不需要将调用这笔函数的信息记录在区块链上。
所以view仍然不消耗gas。
————————————————
版权声明:本文为CSDN博主「唯识相链」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weishixianglian/article/details/84034794
3.真假bool值
- &&:true&&true = true
- ||:true||false = true
- !:真为假,假为真
4.整型特性与运算
二进制计算
pragma soldiity ^0.4.0;
contract math{
int numa = 100;//int256 == int
int numb = 200;//int256 == int
uint8 numc = 2;
function add(uint a,uint b) returns(uint){
return a+b;
}
function jian(uint a,uint b) returns(uint){
return a-b;
}
function cheng(uint a,uint b) returns(uint){
return a*b;
}
function chu(uint a,uint b) returns(uint){
return a/b;
}
function yu(uint a,uint b) returns(uint){
return a%b;
}
function pingfang(uint a,uint b) returns(uint){
return a**b;
}
}
5.底层位运算
pragma solidity 0.4.0;
contract WeiComputes{
uint8 num1 = 3;
uint8 num2 = 4;
function yu() public returns(uint){
return num1&num2;
}
function huo() public returns(uint){
return num1|num2;
}
function fei() public returns(uint){
return ~num1;
}
function yihuo() public returns(uint){
return num1^num2;
}
}
6.危险的整数溢出以及异常处理
7.整型字面量
将运算结果赋值给变量,增强运算精度。
8.固定长度字节数组
关键字有:bytes1,bytes2,bytes3,…,bytes32(以步长1为递增)
byte 代表bytes1.
pragma solidity ^0.4.0;
contract BytesArray{
bytes1 public num1 = 0x7a;
bytes2 public num2 = 0x7a68;
bytes3 public num3 = 0x7a687a;
function getLength() returns(uint){
return num1.length;
}
function getLength2() returns(uint){
return num2.length;
}
function getLength3() returns(uint){
return num3.length;
}
}
9.固定长度字节数组深入
pragma solidity ^0.4.0;
contract BytesArray{
bytes1 public num1 = 0x7a;
bytes2 public num2 = 0x7a68;
bytes3 public num3 = 0x7a687a;
bytes1 public a = 0x7a;
bytes1 public b = 0x68;
function getLength() returns(uint){
return num1.length;
}
function getLength2() returns(uint){
return num2.length;
}
function getLength3()public returns(uint){
return num3.length;
}
function weiyu() public returns(bytes1){
return a&b;
}
function weihuo() public returns(bytes1){
return a|b;
}
function weiyihuo() public returns(bytes1){
return a^b;
}
function zuoyi() public returns(bytes1){
return a<<1;
}
function youyi() public returns(bytes1){
return a>>1;
}
function changeContent() public{
num3 = 2;
}
}
数组长度和内容不可改变
10.动态字节数组
数组长度和内存可以改变
pragma solidity^0.4.0;
contract DynamcByte{
bytes1 name = new bytes1(2);
function InitName(){
name[0] = 0x7a;
name[1] = 0x68;
}
function getLength()view returns(uint){
return name.length;
}
function changeName(){
name[0] =0x88;
}
function changeLength(){
name.length = 5;
}
function pushtext(){
name.push(0x99);//push加在数组数组后面;
}
}