个人目录
以太坊solidity学习记录(一)新版在线remix编译器的使用(2020.4.27)
以太坊solidity学习记录(二)基础操作整理
以太坊solidity学习记录(三)基础数据操作
以太坊solidity学习记录(四)地址与交易
以太坊solidity学习记录(五)函数入门
以太坊solidity学习记录(六)内存与结构体
1.以太坊中的地址
结论:
1.以太坊中的地址以40位的16进制表示,储存以uint160(40*4)进行数字存储
2.地址之间支持大小比较
pragma solidity ^0.4.0;
contract whatisaddress{
//0x75e453B2039c8A168b8Dab1AA97F4735618559De
address account1;
address account2 = 0x75e453B2039c8A168b8Dab1AA97F4735618559De;
function showaddress1() public view returns(address){
return account1; //可以看到未赋值时,参数为0
}
function showaddress2() public view returns(uint160){
return uint160(account2);//说明可以转化为uint160类型
}
function typechange(uint160 num) public view returns(address){
return address(num);//可以互相转换
}
//0x76E67229eaE13967955cb972658ca33bAa36b696
address account3 = 0x76E67229eaE13967955cb972658ca33bAa36b696;
function largetest() public view returns(bool){
return account3>account1;
}
}
运行结果
2.转账操作与余额获取
结论:
1.可以通过地址.balance
获取某个地址的余额
2.this指的是当前合约的地址,如此处就是paytest合约的地址
3.转账可以通过remix图形界面来进行转账数目的改变
4.对其他账户的转账需要使用账户名称.transfer(msg.value)
或者账户名称.transfer(数量 单位,如1 ether)
如果在输入value的同时又写的是数量 单位,那么多余的value就自动转账到合约地址里去
5.如果对当前合约使用transfer转账this.transfer(msg.value)
则必须需要一个回滚函数。
6…如果函数含有payable而函数里面没有要求给某个账户转账的话,则会默认转账到合约当中
7.send和transfer的区别是,前者是底层函数,返回bool值;后者会直接在调用时报错。具体体现在如果转账金额为0是,send正常运行但是返回false 现在尝试了之后发现即使转账金额0,两者均都不报错,返回的为true,见测试5
contract paytest