zoukankan      html  css  js  c++  java
  • solidity 小案例 收费站

    solidity IDE下载地址 https://pan.baidu.com/s/1cY8VgDqB9Wt9VzK-Nocbyw

    代码案例:

    pragma solidity ^0.4.0;
     //创建合约的时候,点的那个地址就是合约本身的地址
    contract TollStation{
       
        //构造器 存储车库车辆信息
        struct CarInfo{
            address  _carAddr;//车主账户地址
            string  _lisencePlateNumber;//车牌号
            uint  _intime;//车辆进入时间
        }
        
        //定义数组
        CarInfo[] public car;
        address addre;//合约地址
        
         //合约的创建(构造器): payable(收钱)
        function TollStation() public {
            addre = msg.sender;
        }
        
    
        //添加数据
        function addData() payable{
            car.push(CarInfo(msg.sender,"云A1123", now));
        }
     
        //判断用户是否存在
        modifier carExist{
            
            bool contain;
            for(uint i = 0;i<=car.length-1;i++)
            {
                if(msg.sender == car[i]._carAddr){
                    contain = true ;
                }
               
            } 
            require(contain);//判断contain的值,如果不存在,则不继续执行
            _;
        }
    
    
        function account() public payable carExist  returns (uint adr) {
           
            uint  beforeTime;
    
           //取出当前账户的时间,然后用系统当前时间减去原来的时间 就可以计算需要扣除的金额
           for(uint i = 0;i<=car.length-1;i++)
             {
                if(msg.sender == car[i]._carAddr){
                    beforeTime = car[i]._intime;
                }
             } 
           uint nowTime = now;
           uint bal = nowTime - beforeTime;
           if(bal<100000000){//小于1小时 扣除6wei
               require(msg.value>0);
               addre.transfer(6 ether);   
               emit Sent(msg.sender,"转账成功",msg.value);
           }
           else{ 
               require(msg.value>0);
               addre.transfer(10 ether);   
               emit Sent(msg.sender,"转账成功",msg.value);
           }
            return addre.balance;
        }
     
        //事件 定义事件的作用就是可以在控制台输出和发送消息给客户端
        event Sent(address addr,string msg,uint count);
     
        //查询数组  
        function queryCarData()  returns(address addr,string  str,uint  time,uint size){
             if(car.length<1){
                 return(0x323,"s",0,0);
             }
             else{
                 addr =car[car.length-1]._carAddr;
                 str = car[car.length-1]._lisencePlateNumber;
                 time = car[car.length-1]._intime;
                 size = car.length;
             }
        }
        
        function getLocalAddress() returns (address addr){
            return this;
        }
    
        function getTime() returns (uint now11){
            now11 = now;
            
           return now11;//h获取系统时间  时间格式为12524208878   1524295087
        }
    }
    View Code

     (注意:require代码需要注释掉才可以)

    下载了IDE后操作步骤如下:

    1、解压后打开index.html,进入页面,复制代码,点击右侧的create,账户选择第一个。

    2、切换账户,value值必须写,它主要是用于后面操作,就是车主进入车库多长时间,然后需要扣费多少,就是从value里面扣得,如果钱不够,交易失败。单位选择ether。

    3、转账成功:

  • 相关阅读:
    改变对象的字符串提示
    perl 和 python中的回调函数
    shiro权限验证标签
    user_tables 的信息依赖于统计信息
    centos jdk 1.7升级到1.8后显示还是1.7
    7.1 可接受任意数量参数的函数:
    IntelliJ IDEA中怎么查看文件中所有方法(类似eclipse里面的outline)
    Intellij IDEA 代码格式化与eclipse保持风格一致
    jquery-1.9.1.min.js:69 Uncaught TypeError: Illegal invocation
    python json模块
  • 原文地址:https://www.cnblogs.com/luo1240465012/p/8917120.html
Copyright © 2011-2022 走看看