赞
踩
Solidity的语法接近于 JavaScript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心化合约,又有很多不同:
以太坊底层基于账户,而不是UTXO,所以增加了一个特殊的 address 的数据类型用于定位用户和合约账户。
语言内嵌框架支持支付。提供了 payable 等关键字,可以在语言层面直接支持支付。
使用区块链进行数据存储。数据的每一个状态都可以永久存储,所以在使用时需要确定变量使用内存,还是区块链存储。
运行环境是在去中心化的网络上,所以需要强调合约或函数执行的调用方式。(内部调用与外部调用)
不同的异常机制。一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。
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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。