solidity学习之地址(Address)类型

【概述】

 以太坊地址的长度,大小20个字节,20 * 8 = 160位,所以可以用一个uint160编码。地址是所有合约的基础,所有的合约都会继承   地址对象,通过合约的地址串,调用合约内的函数。

【基本操作】

属性/方法 含义 备注

balance
获取余额
属性,其余的都是方法
send
转账
不建议使用
transfer
转账
建议使用
call
合约内部调用合约
 
delegatecall
 
调底层代码,别用
callcode
 
调底层代码,别用

注意:上面的这三个方法call(),delegatecall() ,callcode() 都是底层的消息传递调用,最好仅在万不得已才进行使用,因为他们破坏了Solidity的类型安全。

1.获取地址

//指定编译器版本,版本标识符
pragma solidity ^0.4.16;

//关键字 contract 跟java的class一样 智能合约是Inbox
contract Inbox{

//账户地址
address public addr = 0xca35b7d915458ef540ade6068dfe2f44e8fa733c;

//获取地址
function getAddr() view returns(uint160){
return uint160(addr);
}

//地址address类型本质上是一个160位的数字,可以进行加减,需要强制转换
function add() public view returns(uint160) {
return uint160(addr) + 10;
}

}

运行结果:

solidity学习之地址(Address)类型

2.获取余额

//指定编译器版本,版本标识符
pragma solidity ^0.4.16;

//关键字 contract 跟java的class一样 智能合约是Inbox
contract Inbox{

//账户地址
address public addr = 0xca35b7d915458ef540ade6068dfe2f44e8fa733c;

//1. 匿名函数:没有函数名,没有参数,没有返回值的函数,就是匿名函数
//2. 当调用一个不存在的方法时,合约会默认的去调用匿名函数
//3. 匿名函数一般用来给合约转账,因为费用低
function () public payable {

}

//获取当前账户余额
function getBalance() public view returns(uint256) {
return addr.balance;
}

//获取合约余额
function getContractBalance() public view returns(uint256) {
//this代表当前合约本身
//balance方法,获取当前合约的余额
return address(this).balance;
}

}

solidity学习之地址(Address)类型

对于上面获取合约余额的代码我们还可以这样写:

function getContractBalance() public returns  (uint){

return this.balance; // <<----此处使用this代替
}

3.转账(send,transfer)

send和transfer函数提供了由合约向其他地址转账的功能。

对比项 send transfer 备注

参数
转账金额
转账金额
wei单位
返回值
true/false
无(出错抛异常)
transfer更安全

//指定编译器版本,版本标识符
pragma solidity ^0.4.16;

//关键字 contract 跟java的class一样 智能合约是Inbox
contract Inbox{

//
address public addr0 = 0xca35b7d915458ef540ade6068dfe2f44e8fa733c;
address public addr1 = 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c;

//1. 匿名函数:没有函数名,没有参数,没有返回值的函数,就是匿名函数
//2. 当调用一个不存在的方法时,合约会默认的去调用匿名函数
//3. 匿名函数一般用来给合约转账,因为费用低
function () public payable {

}

function getBalance() public view returns(uint256) {
return addr1.balance;
}

function getContractBalance() public view returns(uint256) {
return address(this).balance;
}

//由合约向addr1 转账10以太币
function transfer() payable {
//1. 转账的时候单位是wei
//2. 1 ether = 10 ^18 wei (10的18次方)
//3. 向谁转钱,就用谁调用tranfer函数
//4. 花费的是合约的钱
//5. 如果金额不足,transfer函数会抛出异常
addr1.transfer(msg.value);
}

//send转账与tranfer使用方式一致,但是如果转账金额不足,不会抛出异常,而是会返回false
function sendTest() payable {
addr1.send(msg.value);
}

}

solidity学习之地址(Address)类型

此时我们运行合约

solidity学习之地址(Address)类型

然后我们可以看到没转账之前这两个账户的余额如下所示

solidity学习之地址(Address)类型

点击transfer这个函数运行结果如下:

solidity学习之地址(Address)类型

成功向账户addr1转账了10 ether

 

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

solidity学习之地址(Address)类型

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » solidity学习之地址(Address)类型
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏