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 } }
(注意:require代码需要注释掉才可以)
下载了IDE后操作步骤如下:
1、解压后打开index.html,进入页面,复制代码,点击右侧的create,账户选择第一个。
2、切换账户,value值必须写,它主要是用于后面操作,就是车主进入车库多长时间,然后需要扣费多少,就是从value里面扣得,如果钱不够,交易失败。单位选择ether。
3、转账成功: