以太坊拥有多种高级语言,可用于编写智能合约,每种语言都受到另一种广泛使用的语言的启发。最流行的一种叫做Solidity
,它基于JavaScript
。
它的语法接近于Javascript,是一种面向对象的语言。
Remix - Ethereum IDEhttps://remix.ethereum.org/
需要过硬的网速
目录
pragma solidity ^0.4.0;
可以被0.4.0-0.5.0之内的版本兼容
pragma solidity ^0.4.0;
contract helloworld {
string myword = "helloworld";
function show() public view returns(string){
return myword;
}
}
solidity的四种可见度/访问权限
public:任何人都可以调用该函数,包括DApp的使用者。
private:只有合约本身可以调用该函数(在另一个函数中)。
internal:只有这份合同以及由此产生的所有合同才能称之为合同。
external:只有外部可以调用该函数,而合约内部不能调用。
solidity的三种修饰符
view: 可以自由调用,因为它只是“查看”区块链的状态而不改变它
pure: 也可以自由调用,既不读取也不写入区块链
payable:常常用于将代币发送给合约地址。
solidity的函数
pragma solidity ^0.4.0;
contract helloworld {
function stringtest(string inputstr) public view returns(string){
return inputstr;
}
}
Solidity是静态类型的,因此在为其分配值之前,总是需要定义变量的类型。所有类型的列表可以在Solidity的文档中找到。
最后,希望能够通过调用函数从我们的合约中查询出这个值。将调用这个函数getIt:
contract HelloWorld {
string firstTest = "jonson";
//添加函数:
function getIt() returns(string) {
return firstTest;
}
}
布尔类型
pragma solidity ^0.4.0;
contract helloworld {
bool boola=true; //声明一个布尔类型的值,只用一个等号
function booltesta() public view returns(bool){
return boola;
}
function booltestb(int a,int b) public view returns(bool){
return a==b;
}
}
与,或
pragma solidity ^0.4.0;
contract helloworld {
function andtestTT() public view returns(bool){
return true&&true;
}
function andtesTF() public view returns(bool){
return true&&false;
}
function andtestFF() public view returns(bool){
return false&&false;
}
function ortestTT() public view returns(bool){
return true||true;
}
function ortesTF() public view returns(bool){
return true||false;
}
function ortestFF() public view returns(bool){
return false||false;
}
}
通常运算符
pragma solidity ^0.4.0;
contract helloworld {
function jiatest(int a,int b) public view returns(int){
return a+b;
}
function jiantest(int a,int b) public view returns(int){
return a-b;
}
function chengtest(int a,int b) public view returns(int){
return a*b;
}
function chutest(int a,int b) public view returns(int){
return a/b;
}
function quyutest(int a,int b) public view returns(int){
return a%b;
}
function mitest(uint a,uint b) public view returns(uint){
return a**b; //此处必须为uint,直接写int256会报错
}
}
uint8 , 只能储存8bit数据
位运算符
1.& 操作数之间转换成二进制之后每位进行与运算操作(同1取1)
2.| 操作数之间转换成二进制之后每位进行或运算操作(有1取1)
3.~ 操作数转换成二进制之后每位进行取反操作(直接相反)
4.^ 操作数之间转换成二进制之后每位进行异或操作(不同取1)
5.<<操作数转换成二进制之后每位向左移动x位的操作
6.>>操作数转换成二进制之后每位向右移动x位的操作
pragma solidity ^0.4.0;
contract helloworld {
function Wyutest(uint8 a,uint8 b) public view returns(uint8){
return a&b;
}
function Whuotest(uint8 a,uint8 b) public view returns(uint8){
return a|b;
}
function Wfantest(uint8 a) public view returns(uint8){
return ~a;//取反
}
function Wyihuotest(uint8 a,uint8 b) public view returns(uint8){
return a^b;//a,b异或
}
function zuoyitest(uint8 a,uint8 b) public view returns(uint8){
return a<<b;//a左移b位
}
function youyitest(uint8 a,uint8 b) public view returns(uint8){
return a>>b;//a右移b位
}
}