当前位置:主页 > 查看内容

Solidity 从入门到实战(三)

发布时间:2021-09-14 00:00| 位朋友查看

简介:Solidity 从入门到实战三 注意本专栏主要来自于https://www.bilibili.com/video/BV1St411a7Pk?p11spm_id_frompageDriver的学习笔记以及https://blog.csdn.net/weixin_45067603/article/details/105751748 以太坊中的地址 1.以太坊中的地址以40位的16进制表示……

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

在这里插入图片描述

转账,查询当前账户余额

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

在这里插入图片描述

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

在这里插入图片描述

;原文链接:https://blog.csdn.net/qq_38716929/article/details/116011703
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐