Solidity 从入门到实战(三)

Solidity 从入门到实战(三)

注意:本专栏主要来自于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;
    }
}

Solidity 从入门到实战(三)_第1张图片

转账,查询当前账户余额

结论:
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;
    }
 
}

Solidity 从入门到实战(三)_第2张图片
Solidity 从入门到实战(三)_第3张图片

使用全局变量

这里介绍两个比较重要的全局变量,详细内容请访问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;
    }
    
}

Solidity 从入门到实战(三)_第4张图片

Mapping映射(很重要)

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];
    }
}

Solidity 从入门到实战(三)_第5张图片

你可能感兴趣的:(solidity,区块链,编程语言)