Soildity(智能合约)零基础教学(1)

前言:我的学习路线是先搭建第一个联盟链,紧接着是学习soildiity的基本语法,因为对于初学者而言连solidity的基本语法都搞不明白,搭建第一个Dapp(去中心化合约)也会非常的蒙。

上篇博客我们刚刚编写了第一个搭建单群组FISCO BCOS联盟

(6条消息) FISCO BCOS入门——搭建单机四节点联盟链(不熟悉Linux的同学看过来)_小彬爱吃香菜的博客-CSDN博客

这篇博客我来教大家soildity的基本语法 ,首先建议大家先收藏2个网站

  1,我们将来大多数时候都是在这个网站里面编译我们的(solidity)智能合约,而且这个网络编译器都是有自动补全的功能的;

Remix - Ethereum IDE

这就是他的主界面了 

2,这个网站是写了solidity的一些案例,非常适合大家参考。当然也是可以直接复制粘贴到上面那个网站里面运行的。

Solidity by Example | 0.8.17 (solidity-by-example.org)

一,solidity的语法解释

1,solidity文件的后缀名是sql,;

2,每个文件的开头我们都要写有// SPDX-License-Identifier: MIT这样一段注解,用于指定合约许可证的信息。合约的许可证类型是MIT许可证,表示该合约采用MIT许可证进行授权和分发。

3,下面这段代码主要意思就是定义一些数据类型;

4,pragma solodity ^0.8.13:表示适配0.8.13版本以前的所有版本;

5,contract:可以看作是一个类,其中包含了变量、函数和事件等。通过部署智能合约,我们可以在区块链上创建一个独立的实体,并在该实体上执行操作和交互。

// SPDX-License-Identifier: MIT
pragma solidity  ^0.8.13;
contract HelloWorld{
    bool cheak = false;
    //bool 布尔类型表示真true和假false

    int num1 = 1;
    uint num2 = 2;
    //整数类型 ,int是有符合,uint是无符号整型(其中int相当于int256,uint用的比较多)。
    //在定义类型的时候,他们后面都是可以接数字的;例如uint8,int256代表不同的范围

    address add =  0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    //地址类型,用来存放以太坊网络上的地址这些地址都是20个字符表示


    string public strs = "helloworld";
    //字符串类型,默认是null

    bytes num3 = 4;
    //字节数组类型,用于存储原始字节数据

}



二,solidity的权限和一些方法

// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;


    //constant修饰符代表这个变量是不能被修改的,这样存储的数据可以减少gas的消耗;
    address public constant newadd = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4; 
    
    //immutable说明他只能被construct初始化函数修改,修改这一次以后就不能再被其他修改了。
    address public immutable addr ;
    uint public immutable number ;

    //初始化函数,每个合约首先执行的函数;
    constructor(){
        addr = msg.sender;
        number = 520;
    }



    //使用pubilc修饰时,表示该状态变量,函数,事件都可以被合约内部以及以太坊所有人访问和调用;
    //事件我们到后面再讲,因为这个比较难理解
contract Permission{
    uint public numb1 = 100;
    
    
    //function 用于定义函数(方法);
    function add() public {
        numb1++;
    }

    //定义一个有返回值的函数
    function get() public view returns (uint){
        return numb1;
    }

    //定义一个返回2个参数的函数
    function dosome() public view returns(uint , address){
        return ( age , addr );
    }

}

还有一些其他权限的修饰:

  1. external:表示函数只能从合约外部调用,不能从合约内部调用。这种函数通常用于与其他合约进行交互或处理外部交易。

  2. internal:表示函数只能从当前合约内部或继承合约内部调用。这种函数通常用于内部逻辑的封装和复用。

  3. private:表示函数只能在当前合约内部调用,不能被其他合约或外部用户调用。这种函数通常用于实现内部细节和辅助功能。

  4. view:表示函数只读取合约的状态,不会修改任何状态。这种函数通常用于查询和读取数据,而不会改变合约的状态。

  5. pure:表示函数不读取合约的状态,也不修改任何状态。这种函数通常用于执行纯粹的计算操作,不涉及合约的状态。

三,solidity的一些常用方法。

// SPDX-License-Identifier: MIT
pragma solidity  ^0.8.13;
contract Functions{

    //获得int类型的最大值和最小值。
    int public max = type(int).max;
    int public min = type(int).min;

    //获取当前合约的调用者的地址
    address public newadd = msg.sender;

    //获取当前时间戳,1970年到现在的秒数也可以用new代替
    uint public  newtime =  block.timestamp;

    //用于获取当前区块的区块号。它可以用于跟踪智能合约的执行次数或对区块进行计数。
    uint public  newytf = block.number;

    //用于获取当前交易消息所附带的以太币价值。它可用于处理合约中的以太币支付和价值转移。
    uint public newgas = msg.value;
    // uint public totalAmount;
    // function pay() public payable {
        // 使用require断言,确保发送的以太币的价值大于0
        // require(msg.value > 0, "Payment amount must be greater than 0");
        // 将接收到的以太币的价值累加到合约维护的totalAmount变量中
        // totalAmount += msg.value;
        // 进行其他的支付逻辑...
    // }
    

}

四,修改数据的方法

//SPDX-License-Identifier:MIT
pragma solidity ^0.8.13;
contract Setnumber{
    uint public num;
    function set(uint sets) public{
        num = sets;
    }
}

我们num初始是0 ,只需要在set变成输入数字,然后点击set按钮,num的值就变成了123;

五,智能合约中的单位

在区块链中每次运行程序都会消耗一定的Gas(尤其是运行改变参数的方法),他们的单位分别有Gas、Wei 和 Ether ;其中1 Ether 等于 10^18 Wei。而Gas和Wei之间转换要看Gas的价格;

在solitidy语法中(1e18  =  10**18 = 100000000000000000)都是一样的

关于 if. . .else,whlie,for,do . . . while以及三目运算符(?: )的语法和Java,C++都是一样;

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值