注意:本专栏主要来自于https://www.bilibili.com/video/BV1St411a7Pk?p=11&spm_id_from=pageDriver的学习笔记以及https://blog.csdn.net/weixin_45067603/article/details/105751748
1.以太坊中的地址以40位的16进制表示,储存以uint160进行存储
2.地址之间支持大小比较、
3.可以分为外部账户地址和合约地址
pragma solidity ^0.4.16;
contract myAddress{
//0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
address account1;
address account2 = 0x14723a09acff6d2a60dcdf7aa4aff308fddc160c;//使用外部账户地址
function showaddress1() public view returns(address){
return account1; //可以看到未赋值时,参数为0
}
function showaddress2() public view returns(uint160){
return uint160(account2);//说明可以转化为uint160类型 116727156174188091019688739584752390716576765452
}
function typechange(uint160 num) public view returns(address){
return address(num);//可以互相转换 116727156174188091019688739584752390716576765452
}
//0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
address account3 = 0x76E67229eaE13967955cb972658ca33bAa36b696;
function largetest() public view returns(bool){
return account3>account1;
}
}
结论:
1.可以通过地址.balance获取某个地址的余额
2.this指的是当前合约的地址
3.转账金额可以通过remix进行输入
4.对其他账户的转账需要使用账户名称.transfer(msg.value),msg.value是通过remix界面输入的
5.如果对当前合约使用transfer转账this.transfer(msg.value)则必须需要一个回滚函数。
6.如果函数含有payable而函数里面没有要求给某个账户转账的话,则会默认转账到当前合约当中
7.send和transfer的区别是,前者是底层函数,使用的时候需要让它返回bool值;实际情况下尽量使用transfer
pragma solidity ^0.4.16;
contract payTest{
function payabletest() payable{
}
function getbalance(address account) public view returns(uint){
return account.balance;
}
function thistest() public view returns(address){
return this;
}
function transfertest1() payable public returns(uint){
//如果函数含有payable而函数里面没有要求给某个账户转账的话,则会默认转账到当前合约当中
//声明一个要转入的账户地址
address account1=0xca35b7d915458ef540ade6068dfe2f44e8fa733c;//账户随意
//将钱从当前账户转给accout1账户
account1.transfer(msg.value);
return account1.balance;
}
function transfertest2() payable public returns(uint){
this.transfer(msg.value);
return this.balance;
}
function () payable{
}
function thistest1() public view returns(uint){
return this.balance;
}
function thistest2() public view returns(uint){
return this.transfertest1();
}
function sendMoney() payable returns(bool){
//如果不在remix界面输入金额,则会转账失败,返回false;
address account =0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db;
return account.send(10 ether);
}
function getGolbal() view public returns(address){
return msg.sender;
}
}
这里介绍两个比较重要的全局变量,详细内容请访问
https://blog.csdn.net/qq_33829547/article/details/80419296
pragma solidity ^0.4.16;
contract globalTest{
function getGolbal() view public returns(address){
//获取消息的发送者(当前调用),当前的外部账户地址
return msg.sender;
}
function getValue() view public returns(uint){
//和消息一起发送的wei的数量
return msg.value;
}
}
pragma solidity ^0.4.16;
contract mappingTest{
// 定义mapping idmapping 代表地址==》id映射到了一起,namemapping代表id==>名字映射到了一起
mapping(address => uint) idmapping;
mapping(uint => string) namemapping;
//定义注册的总量
uint public sum =0;
//注册函数
function register(string name){
//获取当前合约的调用者地址
address account = msg.sender;
sum++;
//将合约的调用者的地址与注册总量id联系到一起
idmapping[account]= sum;
//将当前用户的id与用户的姓名绑定到一起
namemapping[sum] =name;
}
//通过地址获取到用户绑定的id值
function getIdByAddress(address are) view public returns(uint){
return idmapping[are];
}
//通过id值获取到它绑定的姓名
function gerNameById(uint id) view public returns(string){
return namemapping[id];
}
}
前言 上一篇 介绍了在webform平台实现ajax的一些方式,并且实现一个基类。这一篇...
MySQL变量的概念 个人认为可以理解成MySQL在启动或者运行过程中读取的一些参数问...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
先给大家展示下运行效果图: 1.后台action产生json数据 。 List blackList = bla...
1.数据库并发控制的作用 1.1 事务的概念 在介绍并发控制前,首先需要了解事务。...
菜单栏示例一: 复制代码 代码如下: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1...
分库分表是个蛋疼的过程,需要考虑数据迁移、数据同步、数据切分等多个工作项,...
前言 作为“为大型前端项目”而设计的前端框架,Angular 其实有许多值得参考和学...
IT之家1月21日消息Corellium 是一家专注于 Arm 软件虚拟化的公司,提供用于安全...
近日,统信软件官方发布了最新版的 桌面操作系统UOS专业版V20(1030) ,相比之前...