首页 > 其他分享 >分投趣Fintoch系统开发案例智能合约搭建

分投趣Fintoch系统开发案例智能合约搭建

时间:2023-04-18 16:34:25浏览次数:33  
标签:sender timestamp wave Fintoch seed block msg 投趣 搭建

在这个技术教程中,你会学习到怎样开发一个end-to-end的dApp。在dApp中,用户可以通过一个智能合约,获取和存储ETH的当前价格。这个教程demo代码存储在Github中。

 编译之后,就可以部署到区块链上。

 在migrations文件夹下已经有一个1_initial_migration.js部署脚本,用来部署Migrations.sol合约。

 Migrations.sol用来确保不会部署相同的合约。

 现在我们来创建一个自己的部署脚本2_deploy_contracts.js

 var Adoption=artifacts.require("Adoption");

 module.exports=function(deployer){

 deployer.deploy(Adoption);

 };

 在执行部署之前,需要确保有一个区块链运行,可以使用

 Ganache来开启一个私链来进行开发测试,默认会在7545端口上运行一个开发链。

 DAPP代码:

 //SPDX-License-Identifier:UNLICENSED

 pragma solidity^0.8.17;

 import"hardhat/console.sol";

 contract WavePortal{

 uint256 totalWaves;//wave次数计数器

 uint256 private seed;//随机种子

 //新的wave事件,调用wave()方法时emit

 event NewWave(address indexed from,uint256 timestamp,string message);

 //Wave结构体

 struct Wave{

 address waver;

 string message;

 uint256 timestamp;

 }

 Wave[]waves;//在合约里,存放所有wave数据的数组

 //存放每个wave的人最后一次执行合约交易的时间,每个人15分钟只能wave一次

 mapping(address=>uint256)public lastWavedAt;

 //合约的构造函数,payable表示合约可以支付ETH给其他地址

 constructor()payable{

 console.log("Hello,this a smart contract!");

 seed=(block.timestamp+block.difficulty)%100;//seed初始化

 }

 //核心方法

 function wave(string memory _message)public{

 //require前面的表达式必须为真,否则抛后面异常信息;这里是如果该地址距上次交易不到15分钟则不允许再次发起交易

 require(lastWavedAt[msg.sender]+15 minutes

 lastWavedAt[msg.sender]=block.timestamp;//更新mapping

 totalWaves+=1;

 console.log("%s has waved!",msg.sender);

 waves.push(Wave(msg.sender,_message,block.timestamp));//数组里新push一个Wave

 seed=(block.timestamp+block.difficulty+seed)%100;//计算seed

 console.log("Random#generated:d%",seed);

 if(seed<=50){//本次seed<=50则向发起wave交易的地址发放奖励0.0001 ETH

 console.log("%s won!",msg.sender);

 uint256 prizeAmount=0.0001 ether;

 require(prizeAmount<=address(this).balance,"Error:Trying to withdraw more money than the contract has.");//判断合约是否余额不足

 (bool success,)=(msg.sender).call{value:prizeAmount}("");//给msg.sender对应的地址转账prizeAmount

 require(success,"Failed to withdraw money from contract.");

 }

 emit NewWave(msg.sender,block.timestamp,_message);//发射NewWave事件,前端可以订阅并捕捉到

 }

 

标签:sender,timestamp,wave,Fintoch,seed,block,msg,投趣,搭建
From: https://blog.51cto.com/u_15999996/6203656

相关文章

  • Python实现搭建-简单服务器教程
    Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下:1.等待客户端的链接,服务器会收到一个http协议的请求数据报2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文件的环境)3.提取出文件的环境之后,利用截断取片的方法将文件名转化为模块名称4.使用m=__import__(......
  • win系统快速搭建日志查看系统Log Parser Studio
    使用LogParserStudio 一共两步一、软件下载地址:LogParser2.2 Download:https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659 LogParserStudiodownload: https://gallery.technet.microsoft.com/Log-Parser-Studio-cd458765 二......
  • 搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接
    我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想骚,一定需要拿出高可用的东西出来,这不本篇就跟大家说一下cluster的概念,rabbitmq是erlang写的一个成品,所以知道如何构建erlang的node集群就ok了,他需要一个统一的cookie机制......
  • DG搭建报错 ORA-16047: DGID mismatch between destination setting and target datab
    最近有需求要给数据库新搭一个DG变为一主两从,搭好之后测试发现一直没有同步,检查问题。从库一直等待接收71855号日志主库有归档日志发送失败的报错,可以看到归档到dest_2(原从库)是成功的,而到desc_3(新从库)则是失败的根据日志提示查看arc2进程的trace日志看到有ora-16058和ora-16047的报......
  • 54 openEuler搭建Mariadb数据库服务器-Mariadb介绍
    54openEuler搭建Mariadb数据库服务器-Mariadb介绍MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品,MariaDB还提供了许多更好的新特性。54.1MariaDB的架构MariaDB的架构......
  • mybatis环境搭建
    1.使用工具IDEA,MySQL数据库,maven2.开始搭建2.1数据表的创建CREATETABLE`user`(`id`INT(20)NOTNULLPRIMARYKEY,`name`VARCHAR(30)DEFAULTNULL,`password`VARCHAR(30)DEFAULTNULL)ENGINE=INNODBDEFAULTCHARSET=utf8;2.2依赖的导入需要导入的依赖有<......
  • 基于空间矢量控制的永磁同步电机状态反馈控制转速系统设计及仿真,仿真平台基于MATLAB S
    基于空间矢量控制的永磁同步电机状态反馈控制转速系统设计及仿真,仿真平台基于MATLABSimulink搭建。联系默认发仿真系统文件。另外包含设计文档,高清仿真结果示意图,出图程序设计文档包括,建模、各部分仿真模块设计,控制算法详解ID:85200676106734132......
  • 基于MPC的三相变流器设计及仿真,仿真平台基于MATLAB Simulink搭建
    基于MPC的三相变流器设计及仿真,仿真平台基于MATLABSimulink搭建。内含仿真文件,源代码,设计文档,仿真图。设计文档包括建模,各部分仿真模块设计,控制算法详解。ID:65335674963764486......
  • 在linux系统下搭建STM32单片机开发环境
    在linux系统下搭建STM32单片机开发环境的记录目录在linux系统下搭建STM32单片机开发环境的记录前言准备安装交叉编译工具链vscode的配置编码问题include问题关于其他报错处理makefile前言懒得说了,过后再补准备ubuntu系统,vscode,交叉编译工具链gcc-arm-none-eabi,还需要一个下载......
  • 使用egg-socket.io 搭建socket 服务
    1.后台安装egg-socket.ionpmiegg-socket.io--save开启插件//{app_root}/config/plugin.jsexports.io={enable:true,package:'egg-socket.io',};配置//{app_root}/config/config.${env}.jsexports.io={init:{},//passedtoengine.io......