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、转账成功:

  • 相关阅读:
    BI之SSAS完整实战教程1 -- 开篇, BI简介 & SSAS简介
    MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航
    MVC5+EF6 入门完整教程12--灵活控制Action权限
    JVM垃圾收集
    JVM类加载
    前端UI框架
    前端学习
    JVM字节码
    网络编程
    Java NIO
  • 原文地址:https://www.cnblogs.com/luo1240465012/p/8917120.html
Copyright © 2011-2022 走看看