Solidity智能合约基础实战

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;
    }
/*     function zuoyi() public returns(uint){
        return num1<<1;
    }
     function youyi() public returns(uint){
        return num1>>1;
    }*/
}

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加在数组数组后面;  
    }
}

你可能感兴趣的:(solidity学习,区块链,golang区块链)