当前位置:   article > 正文

《深入掌握以太坊核心技术》--09-Solidity简介

《深入掌握以太坊核心技术》--09-Solidity简介

Solidity简介

  • Solidity是一门面向合约的、为实现智能合约而创建的高级编程语言。设计的目的是能在以太坊虚拟机(EVM)上运行。
  • Solidity是静态类型语言,支持继承、库和复杂的用户定义类型。
  • 内含的类型除了常见编程语言的标准类型,还包括address等以太坊独有的类型,Solidity源码文件通常以.sol作为扩展名。
  • 可以在Remix上进行Solidity编程。Remix是一个基于Web浏览器的IDE,它可以让你编写Solidity智能合约,然后部署并运行该智能合约。

语言特性

Solidity的语法接近于 JavaScript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心化合约,又有很多不同:

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

  • 语言内嵌框架支持支付。提供了 payable 等关键字,可以在语言层面直接支持支付。

  • 使用区块链进行数据存储。数据的每一个状态都可以永久存储,所以在使用时需要确定变量使用内存,还是区块链存储。

  • 运行环境是在去中心化的网络上,所以需要强调合约或函数执行的调用方式。(内部调用与外部调用)

  • 不同的异常机制。一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。

Solidity源码和智能合约

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

  1. 用Solidity编写的智能合约源代码需要先使用编译器编译为字节码(bytecode),编译过程中会同时产生智能合约的二进制接口规范(Application Binary Interface,简称 ABI)(链上合约与外部交互的通道)
  2. 通过交易(Transaction)的方式将字节码部署到以太坊网络,每次成功部署都会产生一个新的智能合约账户
  3. 使用JavaScript编写的 DApp 通常通过 web3.js + ABI 去调用智能合约中的函数来实现数据的读取和修改

在这里插入图片描述

Remix上开发测试solidity

public:public类型的状态变量,编译器会自动生成一个同名的get方法,即可在外面直接观察到这个变量

function price() public view returns(unint)public {
	         return price;
     	}
     	
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

string public str = “12345”;
定义变量时:变量类型在可见性修饰符之前,顺序颠倒时编译会报错,string长度无限,可能会消耗大量gas,同时在remix输入时要用双引号来括起""
,同时存储的是16进制内容,用户输入UTF-8字符,但需要将UTF-8字符转换成到16进制再存入进来,然后若与用户交互则又转回UTF-8字符

pragma solidity ^0.4.22;

contract SimpleStorage {
    uint myData;
    uint public price;
    string public str = "12345";
    bytes32 str2;
    // 构造函数是一种特殊类型的函数,用于在合约被创建时进行初始化操作。
    //在 Solidity 的旧版本中(例如 0.4.x 版本),构造函数的语法是使用合约的名称作为函数名。
    //但是在 Solidity 的新版本中(例如 0.5.x 版本及更高版本),
    //构造函数的语法已经改变,现在应该使用关键字 constructor 来定义构造函数。
    // 构造方法可以带有参数,在部署合约时需要传入参数
    constructor(bytes32 initStr2, uint initAge) public {
        str2 = initStr2;
        age = initAge;
    }
    function setData(uint newData) public {
        myData = newData;
    }
    // view:只读返回状态变量。
    // 虽然不添加 view 关键字程序也能正常执行, 但是不直观,而且编译时可能会有警告
    function getData() public view returns (uint) {
        return myData;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/607487
推荐阅读
相关标签
  

闽ICP备14008679号