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

solidity 小案例 收费站的更多相关文章
- 机械表小案例之transform的应用
这个小案例主要是对transform的应用. 时钟的3个表针分别是3个png图片,通过setInterval来让图片转动.时,分,秒的转动角度分别是30,6,6度. 首先,通过new Date函数获取 ...
- shell讲解-小案例
shell讲解-小案例 一.文件拷贝输出检查 下面测试文件拷贝是否正常,如果cp命令并没有拷贝文件myfile到myfile.bak,则打印错误信息.注意错误信息中basename $0打印脚本名.如 ...
- [jQuery学习系列六]6-jQuery实际操作小案例
前言最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> &l ...
- 02SpringMvc_springmvc快速入门小案例(XML版本)
这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:
- React.js入门小案例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- SqlDependency缓存数据库表小案例
SqlDependency的简介: SqlDependency是outputcache网页缓存的一个参数,它的作用是指定缓存失效的数据库依赖项,可以具体到数据库和表. SqlDependency能解决 ...
- JavaScript apply函数小案例
//回调函数1 function callback(a,b,c) { alert(a+b+c); } //回调函数2 function callback2(a,b) { alert(a+b); } / ...
- Session小案例------完成用户登录
Session小案例------完成用户登录 在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...
- ch1-vuejs基础入门(hw v-bind v-if v-for v-on v-model 应用组件简介 小案例)
1 hello world 引入vue.min.js 代码: ----2.0+版本 <div id="test"> {{str}} </div> <s ...
随机推荐
- Docker——Tomcat JVM 内存配置
前言 安装再docker中的tomcat,在下载大文件或者某些情况下,会出现tomcat的内存溢出等情况,所以需要配置tomcat的内存大小,docker中的tomcat内存大小配置有四种方式. 一. ...
- vue项目使用百度地图API获取经纬度
一.首先在百度api注册获得ak密钥 二.进行引入 (1).第一种方式: 直接在vue中index.html中用script标签引入. //你的ak密钥需要替换真实的你的ak码 <script ...
- Synchronize 和 volatile 的区别
1. 在应用层面来讲 a. volatile是线程同步的轻量级实现,所以volatile的性能要比synchronize好: volatile只能用于修饰变量,synchronize可以用于修饰方法. ...
- C语言编程 菜鸟练习100题(11-20)
[练习11]计算 int, float, double 和 char 字节大小 0. 题目: 计算 int, float, double 和 char 字节大小 1. 分析: 使用 sizeof 操作 ...
- Crontab 的使用方法
第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...
- jackjson学习2+CVE-2019-14379漏洞分析
最近想着分析jackson,jackson和fastjson有点相似,浅蓝大神的文章很好,个人受益匪浅 昨天简单说了下jackson的用法,现在继续拓扑,补充前置知识,前置知识补充的足够多,那么漏洞分 ...
- Python+Selenium学习笔记18 - 不开启浏览器测试
运行脚本时间比较长时可以不打开浏览器测试,这样在测试运行时,电脑还是可以用作其他操作的. 只需要在运行脚本上加上下面代码的678行即可 1 # coding = utf-8 2 3 from sele ...
- CAP 5.1 版本发布通告 - 你期待的 Redis 来了
前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...
- 3D点云完美匹配
3D点云完美匹配 The Perfect Match: 3D Point Cloud Matching with Smoothed Densities 地址链接: http://openaccess. ...
- MinkowskiPooling池化(上)
MinkowskiPooling池化(上) 如果内核大小等于跨步大小(例如kernel_size = [2,1],跨步= [2,1]),则引擎将更快地生成与池化函数相对应的输入输出映射. 如果使用U网 ...