Solidity编程语言基础知识一(Solidity语言介绍)

1.Solidity语言介绍

        以太坊提供了一个去中心化网络平台,在这个平台上允许用户部署智能合约。用户在部署智能合约前需要先用编程语言编写智能合约代码。智能合约支持许多种编程语言,其中最受欢迎且维护最好的的编程语言之一是Solidity语言。点击查看Solidity官方文档教程

        Solidity语言的特点:

  • 花括号语言(使用{}的语言)。
  • 静态语言(编译时已知变量类型)。
  • 支持继承、库和复杂的用户定义类型等特性。

2.Solidity语言编程示例

        在正式学Solidity语言前,先从一个预订书籍合约示例开始,示例如下。(当前合约看不懂不要紧,后续会详细介绍)。

/*第01句*/    // SPDX-License-Identifier: GPL-3.0

/*第02句*/    pragma solidity >=0.7.0 <0.9.0;

/*第03句*/    contract OrderBooks{
/*第04句*/        uint bookPrice = 10;
/*第05句*/        uint balance = 50;
/*第06句*/        uint orderID = 0;
/*第07句*/        mapping(uint => OrderMessage) orderRecords;

/*第08句*/        struct OrderMessage{
/*第09句*/            uint orderTime;
/*第10句*/            uint bookPrice;
/*第11句*/            uint orderQuantity;
/*第12句*/            OrderStatus status;
/*第13句*/        }

/*第14句*/        enum OrderStatus{unpaid, shipped, received, evaluated}

/*第15句*/        event OrderResult(uint bookPrice, uint orderQuantity, string resultMessage);

/*第16句*/        error NotEnoughFunds(uint amountPayable, uint balance, string promptMessage);

/*第17句*/        modifier isBalanceEnough(uint _orderQuantity){
/*第18句*/            uint aggregateAmount = _orderQuantity * bookPrice;
/*第19句*/            if(balance < aggregateAmount){
/*第20句*/                revert NotEnoughFunds(aggregateAmount, balance, unicode"余额不足");
/*第21句*/            }
/*第22句*/            _;
/*第23句*/        }

/*第24句*/        function order(uint _orderQuantity) public isBalanceEnough(_orderQuantity){
/*第25句*/            balance = balance - _orderQuantity * bookPrice;

/*第26句*/            OrderMessage memory orderMsg;
/*第27句*/            orderMsg.orderTime = block.timestamp;
/*第28句*/            orderMsg.bookPrice = bookPrice;
/*第29句*/            orderMsg.orderQuantity = _orderQuantity;
/*第30句*/            orderMsg.status = OrderStatus.shipped;

/*第31句*/            orderID++;

/*第32句*/            orderRecords[orderID] = orderMsg;

/*第33句*/            emit OrderResult(bookPrice, _orderQuantity, unicode"下单成功");
/*第34句*/        }

/*第35句*/        function setBookPrice(uint _bookPrice) public{
/*第36句*/            bookPrice = _bookPrice;
/*第37句*/        }

/*第38句*/        function getBookPrice() public view returns(uint){
/*第39句*/            return bookPrice;
/*第40句*/        }

/*第41句*/        function increaseBalance(uint _funds) public{
/*第42句*/            balance = balance + _funds;
/*第43句*/        }

/*第44句*/        function viewBalance() public view returns(uint){
/*第45句*/            return balance;
/*第46句*/        }

/*第47句*/        function viewOrdeRecords(uint _orderID) public view returns(OrderMessage memory){
/*第48句*/            require(_orderID <= orderID, unicode"未找到orderID对应的订单信息");
/*第49句*/            return orderRecords[_orderID];
/*第50句*/        }
/*第51句*/    }
  • 第01句:是指版权许可标识。
  • 第02句:标识用什么版本的编译器编译此文件。
  • 第03句:声明合约,用于预订书籍的合约。contract是声明合约的关键字,OrderBooks是指合约的名称。
  • 第04至07句:声明状态变量。uint和mapping是指声明无符号整型状态变量和映射状态变量的数据类型。bookPrice、balance、orderID、orderRecords是指状态变量的名称,分别意为书籍价格、账户余额、订单ID、订单记录(用于记录所有订单)。
  • 第08至13句:声明结构体,用于记录单个订单的信息。struct是声明结构体的关键字,OrderMessge是指结构体的名称。bookTime、bookPrice、orderQuantity、status是指结构体的元素,分别意为下单时间、书籍价格、订购书籍的数量、订单状态。
  • 第14句:声明状态类型,用于定义订单都有那些状态。enum是声明状态类型的关键字,OrderStatus是指状态类型的名称。unpaid、shipped、received、evaluated是指状态类型的值,分别意为未支付、待发货、待收货、待评价。
  • 第15句:声明事件,用于用户下单后,反馈给用户下单结果的信息。event是声明事件的关键字,OrderResult是事件的名称。bookPrice、orderQuantity、resultMessage是指向用户反馈什么信息,分别意为书籍价格、订购书籍的数量、下单成功或失败信息。
  • 第16句:声明错误,用于提示账户余额不足。error是声明错误的关键字,NotEnouthFunds是错误的名称。amountPayable、balance、promptMessage是指当账户余额不足时,应向用户反馈什么信息,分别意为订单应付金额、账户余额、提示消息。
  • 第17至23句:声明函数修改器,用于判断账户余额是否充足。modifier是声明函数修改器的关键字,isBalanceEnough是指函数修改器的名称。第18句计算订单应付金额。第19至21句判断账户余额是否小于订单应付金额,若是则执行NotEnouthFunds错误。
  • 第24至34句:声明函数,用于下单。function是声明函数的关键字,order是指函数的名称。在第24句输入要购买书籍的数量。第25句账户余额减去订单应支付金额。第25至30句记录此订单相关信息。第31至32句将订单ID和此订单信息记录在orderRecords状态变量中。第33句下单成功后,向用户反馈下单成功信息。
  • 第35至37句:用于修改书籍价格的函数。
  • 第38至40句:用于查看书籍价格的函数。
  • 第41至43句:用于给账户充值的函数。
  • 第44至46句:用于查看账户余额的函数。
  • 第47至50句:查询某个订单ID下的订单信息。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值