《深入掌握以太坊核心技术》--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;
     	}
     	

在这里插入图片描述

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;
    }
  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值