solidity基础入门知识(一)整型和地址

1.solidity文件的扩展名为.sol

2.pragma solidity^0.4.0;

表示源程序在大于等于0.4.0版本的编译器中可以正常工作,在大于等于0.5.0版本的编译器中无法工作。

3.数据类型:

solidity是静态语言,所有变量在定义的时候需要定义好数据类型

(1)整数:常用的无符号整数类型有uint8,uint16,uint24......uint256(uint默认的是uint256)

有符号的整数写为int8~int256

例子:uint a=365;

(2)地址

address用来存储以太坊的地址 例子:address a=0xaadqwesczfqweqdasd

后面的0x开头的一串16进制数并不是字符串,因此不需要双引号,地址有合约地址和普通的钱包地址两种。

 十六进制常量并通过地址的checksum的验证。比如 0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF 是一个address类型。十六进制常量是39位到41位数字长度。如果没有通过checksum的检查,会产生一个警告,但是还是会作为一个合理的数字常量。

获取某个地址的余额:使用balance属性

例如:

contract addressTest{
    
    function getBalance(address addr) returns (uint){
        return addr.balance;
    }

}

addr.balance意为获取地址addr的余额,函数getbalance的参数为一个地址,输入地址之后即可返回此地址的余额。

this:意为合约本身,比如需要获取当前合约的余额,可以这样写:

contract addressTest{
    
    function getBalance() returns (uint){
        return this.balance;
    }

}

this.balance:获取当前合约的余额

地址的方法:send():用来向某个地址发送货币(单位为wei)

例子:向地址addr发送100wei

          addr=0xqkwjhnckajhsdasdqwe

          addr.send(100);

例子2:向一个合约充值(有待进一步理解)

pragma solidity ^0.4.0;

//请注意这个仅是Demo,请不要用到正式环境
contract PayTest {
    //得到当前合约的余额
    function getBalance() returns (uint) {
        return this.balance;//0
    }  
    
    //向当前合约存款
    function deposit() payable returns(address addr, uint amount, bool success){
        //msg.sender 全局变量,调用合约的发起方
        //msg.value 全局变量,调用合约的发起方转发的货币量,以wei为单位。
        //send() 执行的结果
        return (msg.sender, msg.value, this.send(msg.value));
    }
}

使用send()方法需要注意:

1.调用递归深度不能超过1024

2.gas不足会导致执行失败

3.使用这个方法需要检查成功与否

****transfer()方法也是发送以太币

例子:

address x = 0x123;
address myAddress = this;
if (x.balance < 10 && myAddress.balance >= 10) x.transfer(10);

解释:如果地址x的余额小于10并且myaddress的余额大于等于10,那么从myaddress向x发送10个以太币

send和transfer的区别:

send方法和transfer很相似,但是比transfer更低级。如果send失败,当前的合约不会中断,也不会抛出异常,会返回一个false。使用send有一些风险:如果调用栈深度超过1024或是gas不够,所有的转让操作都会失败,为了更安全的以太币转移,如果用send就必须每次都要检查返回值,使用transfer方法会更好

(3)布尔型

和其他语言一样,取值为true和false

支持的运算符:

  • !逻辑非

  • && 逻辑与

  • || 逻辑或

  • == 等于

  • != 不等于

备注:运算符&&||是短路运算符,如f(x)||g(y),当f(x)为真时,则不会继续执行g(y)



你可能感兴趣的:(学习笔记)