与众不同的编程语言—Solidity

  1. HelloWorld

智能合约就像是一份合同一样,你书写的每个代码都是合同的内容。所以合约一经部署,合约内容就无法修改,好比你和别人签苹写了合同之后,是没法再修改的。这也是正是基于区块链不可篡改的特性。 在通常的编程语言中,一般会使用标准输出来打印“Hello World”,Solidity作为一门智能合约编程语言,是有别与一般的编程语言,他是基于以太坊,并且是用来编写“合约”的。所以这里不再使用“HelloWorld”作为示例,而是使用Solidity官网中的一个入门示例。
pragma solidity >=0.4.0 <0.6.0;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; }}
以上代码就是一个使用Solidity编写的名为SimpleStorage的合约。

1.第一行代码是用来指定Solidity的语言版本,pragma solidity是固定格式,后边加上版本号,版本号通过范围来确定的,即大等于0.4.0,小于0.6.0。在网上会经常看到^0.4.21这样的书写方式,这种格式是支持在0.5.2及之前的版本。比如在remix-ide环境中编写pragma solidity ^0.5.3,则会提示编译错误:browser/Untitled.sol:3:1: ParserError: Source file requires different compiler version (current compiler is 0.5.2+commit.1df8f40c.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version。

2.第二代码创建名为SimpleStorage的合约。contract 是关键字,SimpleStorage为合约名称。这个类似于java的类定义一样,class Person{},比较容易理解。

3.第三行代码定了一个无符号整数storedData,这个状态变量将会保存在区块链上,好比写入数据库进行了持久化,什么时候都可以进行读取。

4.定义set方法,对状态变量storedData进行赋值,其中public是关键定,修饰set方法可以被合约外部调用。

5.定义get方法,返回状态变量storedData的值,对于返回值的书写稍有不同,关键字是returns,而不是return,另外返回值可以是多个,使用圆括号包起来。 这就是一个简单的Solidity编写的合约了,有编程经验的人很容易理解。

  1. 布尔型和整型

2.1 布尔型

bool类型同其他语言一样,取值为true或false, 其运算操作有!、||、&&、!=、==,注意这里并没有|、&。

pragma solidity >=0.4.22 <0.6.0; contract EgBool { bool isOne; bool isTwo; function operation() public { isOne = true; if (isOne){ // dosomething }

if (!isOne){ // dosomething }

if (isOne || isTwo ){ // dosomething }

if (isOne && isTwo ){ // dosomething }

if (isOne != isTwo ){ // dosomething }

if (isOne == isTwo ){ // dosomething } } }

2.2 整型

整型包含无符号uint和有符号int两种类型,每种类型有多种长度,比如uint8、uint64、int128等等,长度范围是8至256,相差8个长度,8,16,24,32…256。其中uint和uint256一样,int和int256一样。运算操作有比较、位操作和算术操作三种。

•比较操作:<= , < , == , != , >= , >。

•位操作: &(与) , |(或) , ^ (异或), ~ (非)。

•算术操作:+ , - , * , /, % , (乘方,求幂) ,<<(左移) , >>(右移)其中左移和右移操作,a<<b,可以理解为a乘以2的b次方,表示为a*2b,同理右移a>>b表示为a/2**b。

pragma solidity >=0.4.22 <0.6.0;contract EgInt { int i = 0; int8 i8 = -1; int256 i256 = 256;
uint ui = 0; uint ui8 = 1; uint256 ui256 = 256;

function operation() public { if ( i < i8 || i <= i8 || i == i8 || i != i8 || i > i8 || i >= i8 ){ //dosomeing }

int a; int b; int c; c = a & b; c = a | b; c = a ^ b; c = ~ b;

c = a + b; c = a - b; c = a * b; c = a / b; c = a % b; c = a << b; c = a >> b;

//c = ab; uint d; uint e; uint f; f = de; //c = d**e; } }

注意:

1.有符号整数是不能够使用"**"操作。

2.有符号和无符号不能进行类型转换,不能同时参数运算,比如c = d + e。

本文来源于陀螺财经专栏作家:区块链同入门,区块链同入门

区块链同入门专栏:https://www.tuoluocaijing.cn/columns/author388135

Solidity是一种智能合约语言,它是以太坊平台上的主要编程语言之一。以下是Solidity的教程: 1. 智能合约的基础结构 Solidity智能合约由两个部分组成:状态变量和函数。状态变量是合约内部存储的数据,而函数是合约内部的代码,用于处理状态变量或执行其他操作。 2. Solidity的数据类型 Solidity支持各种数据类型,包括布尔值、整型、地址、字符串、数组、结构体等。例如: - 布尔值:bool - 整型:int、uint - 地址:address - 字符串:string - 数组:array - 结构体:struct 3. Solidity的函数 函数是Solidity合约中最重要的部分之一。函数可以接受参数,也可以返回值。例如: ``` function add(uint a, uint b) public returns (uint) { return a + b; } ``` 这个函数接受两个整数作为参数,并返回它们的和。 4. Solidity的控制流 Solidity支持各种控制流结构,包括if、for、while、do-while等。例如: ``` function isEven(uint x) public returns (bool) { if (x % 2 == 0) { return true; } else { return false; } } ``` 这个函数接受一个整数作为参数,并返回它是否为偶数。 5. Solidity的事件 事件是Solidity合约中的一种通知机制,它可以向外部应用程序发送消息。例如: ``` event Transfer(address indexed _from, address indexed _to, uint _value); ``` 这个事件表示在合约中发生了一次转账操作,它包含了发送方地址、接收方地址和转账金额。 6. Solidity的继承 Solidity支持继承,一个合约可以从另一个合约中继承状态变量和函数。例如: ``` contract A { uint public x = 1; } contract B is A { uint public y = 2; } ``` 在这个例子中,合约B从合约A中继承了状态变量x,并且定义了自己的状态变量y。 以上就是Solidity的基础教程,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值