solidity学习记录 3 (地址与交易)

这篇具有很好参考价值的文章主要介绍了solidity学习记录 3 (地址与交易)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

智能合约中的地址

  1. 合约中的地址等同于uint160类型
  2. 合约当中的地址可以被比较
    pragma solidity ^0.4.0;
    contract addressTest{
        address public account1 = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4; 
        address public account2 = 0xd9145CCE52D386f254917e481eB44e9943F39138; 
        //0x5B38Da6a701c568545dCfcB03FcB875f56beddC4   uint160
        //0xd9145CCE52D386f254917e481eB44e9943F39138   合约地址
        // 520786028573371803640530888255888666801131675076
        function changeIt() view public returns(uint160){
            return uint160(account1);
        }
        function changeIt2() view public returns(address){
            return address(520786028573371803640530888255888666801131675076);
        }
        function check1()view public returns (bool){
            return account1>=account2;
        }
        function check2()view public returns (bool){
            return account1<account2;
        }
        function check3() view public returns (bool){
            return account1<=account2;
        }
    }
    

地址中余额的获取与转账操作 

  1. 那新建一个地址类型时可以通过address.balance 来获取当前地址的余额
  2. 若一个函数中需要进行转账操作需要在函数中加上payable关键字
  3. this指向的是当前合约的地址
  4. 若对当前的合约进行this.transfer(msg.value)操作需要加一个回滚操作
  5. 对其他账户的转账需要使用账户名称.transfer(msg.value)或者账户名称.transfer(数量 单位,如1 ether)如果在输入value的同时又写的是数量 单位,那么多余的value就自动转账到合约地址里去
  6. 若一个函数有payable关键字没有地址的话会默认转账到当前合约地址中去
    pragma solidity ^0.4.0;
    contract payAbleTest{
        //payable关键字代表我们可以通过这个函数给我们的合约地址充值 转账 默认
        function pay() payable{
    
        }
        //获取账户上的金额
        function getBalance() view returns(uint)
        {
            return this.balance;
        }
    
        //0x7b96aF9Bd211cBf6BA5b0dd53aa61Dc5806b6AcE
        //this 指向合约地址
    
        function getThis() view returns(address){
            return this;
        }
        function getrandomBalance(address account) view returns(uint)
        {
           
            return account.balance;
    
        }
        //如果这个函数没有任何操作 但是有payable  属性  那么msg.value转账给合约地址
        function transfer() payable{
            address account = 0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db;
            account.transfer(msg.value);
        }
        //往合约地址转账需要一个回滚地址
        function transfer2() payable{
           
            this.transfer(msg.value);
        }
        function () payable
        {
            
        }
    }
    pragma solidity ^0.4.0;
    contract payAbleTest{
        //payable关键字代表我们可以通过这个函数给我们的合约地址充值 转账 默认
        function pay() payable{
    
        }
        //获取账户上的金额
        function getBalance() view returns(uint)
        {
            return this.balance;
        }
    
        //0x7b96aF9Bd211cBf6BA5b0dd53aa61Dc5806b6AcE
        //this 指向合约地址
    
        function getThis() view returns(address){
            return this;
        }
        function getrandomBalance(address account) view returns(uint)
        {
           
            return account.balance;
    
        }
        //如果这个函数没有任何操作 但是有payable  属性  那么msg.value转账给合约地址
        function transfer() payable{
            address account = 0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db;
            account.transfer(msg.value);
        }
        //往合约地址转账需要一个回滚地址
        function transfer2() payable{
           
            this.transfer(msg.value);
        }
        function () payable
        {
            
        }
        function sendMoney() payable{
            address account = 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2;
            account.send(10 ether);
        }
        
    }

 solidity中的全局变量

全局变量https://blog.csdn.net/qq_33829547/article/details/80419296常用的全局变量

pragma solidity ^0.4.0;

contract grobal{
    //全局变量
    function getgrobal() view public returns(address) {
        //合约的调用者地址
        return msg.sender;

    }
    //返回当前块的困难度
    function getgrobal2() view public returns(uint) {
        
        return block.difficulty;
    }
    //当前区块的块号
    function getgrobal3() view public returns(uint) {
        return block.number;
    }
    function getgrobal4() view public returns(address) {
        return block.coinbase;
    }
}

mapping映射类型

定义映射类型

mapping (类型1=>类型2) 映射名称;文章来源地址https://www.toymoban.com/news/detail-423863.html

pragma solidity ^0.4.0;
contract mappingTest{
    //账户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获取到name

   function getNameById(uint id) view public returns(string)
   {
       return nameMapping[id];
   }
}

到了这里,关于solidity学习记录 3 (地址与交易)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链智能合约solidity的中的一些关键字

    目  录 pragma mapping msg对象 block对象 contract constructor struct 数据地址 地址类型 address payable revert 以下场景使用 revert() : require 以下场景使用 require() : assert 以下场景使用 assert(): 访问权限 internal public private external function returns return view pure constant event emit modifier pragma   

    2024年01月16日
    浏览(75)
  • 以太坊智能合约开发:Solidity 语言中的数据类型

    本文我们介绍Solidity语言的数据类型,重点是值类型,包括布尔类型、整型、地址类型、字节类型、字符串类型和枚举类型。并且通过两个智能合约例子,用于演示这些数据类型的声明与使用方法。 访问 Github 仓库 获取更多资料。 Solidity中关于数据类型的定义如下: Solidity是

    2024年02月02日
    浏览(67)
  • 以太坊智能合约开发:Solidity语言中的构造函数

    Solidity语言中关于构造函数的定义: 构造函数是使用 constructor 声明的一个可选函数; 构造函数只在合约部署时调用一次,并用于初始化合约的状态变量; 如果没有显式定义的构造函数,则由编译器创建默认构造函数。 构造函数声明语法如下: 其中: ** constructor :

    2024年02月01日
    浏览(51)
  • solidity学习-如何在智能合约中打印Log日志

    在写合约的过程中经常会遇到一些错误。这个时候想要查看合约运行过程中的一些数据,那么就可以用以下方法: 在合约中创建一个Event,起名为Log 在想要打印日志的地方调用事件 emit Log(...),就可以查看运行过程中的数据了 如下图: 点击deploy,在控制台就可以查看打印出

    2024年02月11日
    浏览(43)
  • 智能合约学习笔记一 、——{Solidity语言详解——(1—2)小练习}

    1.根据提示,在指定位置写出编译版本,要求使用^符号,版本要求在0.6.0及以上。 2.根据提示,在指定位置写出所定义的合约名称。 3.为了查看程序的效果,我们使用在线 Solidity 开发工具 Remix IDE 编译和运行 Solidity 程序。中文在线版:在浏览器打开下方链接: Remix - 中文版

    2024年02月02日
    浏览(38)
  • 区块链web3智能合约Solidity学习资源整理

    Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。 Solidity中文官方文档: https://solidity-cn.readthedocs.io/zh/develop/ https://learnblockchain.cn/docs/solidity/index.html 在线rem

    2024年03月19日
    浏览(69)
  • Solidity智能合约开发 — 3.4-抽象智能合约和接口

    假如一个智能合约中至少一个函数缺省实现时,即某个函数缺少{}中的内容,这个智能合约就当做抽象智能合约。 当我们有一个函数没想好怎么写时,必须将该合约标为 abstract ,不然编译会报错;另外,未实现的函数需要加 virtual ,以便子合约重写。抽象智能合约是将智能合

    2024年02月12日
    浏览(45)
  • solidity实现智能合约教程(3)-空投合约

    猛戳订阅学习专栏🍁🍁 👉 solidity系列合约源码+解析 👈 🍁🍁 空投就是一种营销策略,通过空投活动将某种数字货币或代币分发给用户,通常需要用户完成一项简单的任务,如分享新闻、介绍朋友或拥有某种数字货币,目前也被广泛应用于宣传新币种,在数字货币市场中

    2024年02月07日
    浏览(75)
  • 【Solidity】智能合约案例——①食品溯源合约

    目录 一、合约源码分析: 二、合约整体流程:       1.部署合约       2.管理角色       3.食品信息管理       4.食品溯源管理         Producer.sol:生产者角色的管理合约,功能为:添加新的生产者地址、移除生产者地址、判断角色地址是否被授权         Di

    2024年02月08日
    浏览(51)
  • 以太坊智能合约开发(五):Solidity成绩录入智能合约实验

    每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名。老师部署合约StudentScore.sol,用于录入学生成绩,查询学生信息。查询学生信息时,需要调用学生部署的合约Student.sol。 student.sol合约,用于学生对自己信息进行管理。 学生的基本信息作为状态变量: 声明构造函

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包