Solidity编程语言

Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。
Solidity 是静态类型语言,支持继承、库和复杂的用户定义类型等特性。 Solidity 编程的推荐方式是使用 Remix。Remix是一个基于 Web 浏览器的 IDE,它可以
让你编写 Solidity 智能合约,然后部署并运行该智能合约。Solidity 源
码文件通常以 .sol 作为扩展名。

以太坊底层基于帐户,而不是 UTXO,所以增加了一个特殊的address 的数据类型用于定位用户和合约账户。

语言内嵌框架支持支付。提供了 payable 等关键字,可以在语言层面直接支持支付。
使用区块链进行数据存储。数据的每一个状态都可以永久存储,所以在使用时需要确定变量使用内存,还是区块链存储。

运行环境是在去中心化的网络上,所以需要强调合约或函数执行的调用的方式。
不同的异常机制。一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。

Solidity源码和智能合约
Solidity 源代码要成为可以运行在以太坊上的智能合约需要经历如下的
步骤:

  1. 用 Solidity 编写的智能合约源代码需要先使用编译器编译为字节码(Bytecode),编译过程中会
    同时产生智能合约的二进制接口规范(Application Binary Interface,简称为ABI);
  2. 通过交易(Transaction)的方式将字节码部署到以太坊网络,每次成功部署都会产生一个新的智
    能合约账户;
  3. 使用 Javascript 编写的 DApp 通常通过 web3.js + ABI去调用智能合约中的函数来实现数据的读取
    和修改。
    1.4 合约结构
    状态变量(State Variables)作为合约状态的一部分,值会永久保存在存储空间内。
    函数(Functions)合约中可执行的代码块。
    函数修饰器(Function Modifiers)在函数声明中,用来补充修饰函数的语义。
    事件(Events)非常方便的 EVM 日志工具接口。

remix安装以及使用

  1. 浏览器端配置
    在浏览器端有俩个选择,分别为英文版与中文版(有些许差别)
    Remix中文版地址:http://remix.hubwiz.com
    Remix英文版地址(推荐):https://remix.ethereum.org/
    -----此处,不同的地方讲解区块链代码用的语言不同,之前听的是用的rust语言,也不太懂,没有及时去看开源的内容。

在这里插入图片描述

创建新文件
创建新文件夹
Github代码片段分享
表示打开一个本地文件

pragma solidity ^0.4.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; }function get() public view returns (uint) { return storedData; } }

该合约能完成的事情并不多(由于以太坊构建的基础架构的原因):它能允许任何人在合约中存储一个单独的数字,并且这个数字可以被世界上任何人访问,且没有可行的办法阻止你发布这个数字。当然,任何人都可以再次调用 set ,传入不同的值,覆盖你的数字,但是这个数字仍会被存储在区块链的历史记录中。

NAME :合约名
METADATA :一些编译相关的信息,比如版本、所用的语言、设置等
BYTECODE :写入区块的字节码
ABI :此智能合约对应的 ABI ,也就是我们合约里面定义的一些接口
WEB3DEPLOY :智能合约编译之后的发布命令,这个就是比较重要的,之后的web3就是调用这段命令来部署合约的
METADATAHASH :数据的一个哈希值
SWARMLOCATION :Swarm网络的一个地址
FUNCTIONHASHES :合约定义的方法的hash,其实我们执行合约的时候就是通过这个hash去找到对应的方法进行执行的
GASESTIMATES :关于矿工费的一个预算,在ETH上进行合约的部署,执行等都是需要矿工费的。一般合约代码越多矿工费越高。
点击下面的run图标,可以看到部署,以及账户信息,环境等等

点击deploy之后天可以看到自己的合约已经部署完成,打开之后可以看见我们写的函数 set , get 了,给 set 函数输入一个值,点击 get 会得到相应的值

Environment 表示合约部署的环境。 Javascript VM 是虚拟了一个节点,而 Injected Web3 和 Web3 Provider 则真正连接一个节点。
Account 代表不同的虚拟账户,每个虚拟账户每个有 100 ETH
Deploy 表示合约部署按钮
Deployed Contracts 表示已经部署的合约

Solidity基础操作
Solidity源文件布局
源文件可以被版本杂注pragma所注解,表明要求的编译器版本
例如:
pragma solidity ^0.4.0;

import “filename”;
import * as symbolName from “filename”;

import {symbol1 as alias, symbol2} from “filename”;
import “filename” as symbolName;

Solidity值类型介绍
函数
内部函数调用
外部函数调用
数据位置
数组
涉及 LValues 的运算符
单位和全局变量
特殊变量和函数
控制结构
创建合约
getter 函数
View 函数
Pure 函数

这个后面类似于学Python,从数值类型到数据结构,建仓,调用函数包等。

文章来源: blog.csdn.net,作者:容光@October,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/m0_49978528/article/details/115037473

(完)