BABA智能合约投票DAO模式dapp系统开发|智能合约实现技术分析

简介: BABA智能合约投票DAO模式dapp系统开发|智能合约实现技术分析

合约交互

写完合约代码之后,前端页面实现就不在此赘述,主要介绍如何使用 web3 与合约交互,这里使用到的 web3 版本是 1.0,web3 1.0 和 0.2x.x 的 API 调用方式差别较大,1.0 的 API 支持异步调用。

安装 Metamask 浏览器插件后,会在浏览器页面内注入一个 web3 实例。检测页面中是否存在 web3 实例,如果不存在则连接自己的实例。

import Web3 from 'web3';if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
web3 = new Web3(new Web3.providers.HttpProvider(NODE_NRL));
}

传入合约 ABI,合约地址,实例化合约对象。


this.contract = new web3.eth.Contract( CONTRACT_ABI, CONTRACT_ADDR,
);

调用合约中的投注方法,通过try catch可以捕获到 Metamask 弹窗取消交易操作。

userBet = async () => { try { await this.contract.methods

 .bet(
   ...
 )
 .send({        from: ACCOUNT,        value: MONEY,
 });

} catch (error) {
...
}
}

查询记录的日志,可以通过指定事件名称、区块高度及过滤条件来进行日志查询,值得注意的是,在合约内不能查询到日志信息。

queryEvent = async () => { const event = await this.contract.getPastEvents( EVENT_NAME,
{ filter: {}, fromBlock: 0, toBlock: 'latest',
}
)
}

功能拓展

比如修改用户投注金额及充值这类敏感操作,就需要管理员的权限来进行操作。同样地,我们也可以拓展赞助商的功能,通过充值奖池的累计金额排名来展示赞助商的广告,这里就不做展开了。

定义修饰器,在构造函数里设置管理员地址,将创建合约的账户设置为管理员。

相关文章
|
存储 JSON 安全
Token验证技术文档
【7月更文挑战第6天】Token验证是现代Web应用中常见的安全措施,用于确保用户身份的合法性和请求的安全性。它基于令牌(Token)的概念,通过在客户端和服务端之间传递一个安全的、有时限的字符串来验证用户身份,替代传统的基于会话的认证机制。本文档旨在介绍一种基本的Token验证流程,并提供一个简单的代码示例,使用JSON Web Tokens (JWT) 实现这一过程。
1656 1
|
消息中间件 存储 API
微服务间的通信机制
【8月更文第29天】随着微服务架构的普及,服务间的通信变得尤为重要。微服务架构强调将单一应用程序拆分为一组小型服务,每个服务运行在其独立的进程中,并使用轻量级机制(通常是HTTP资源API)进行通信。本文将详细介绍几种流行的微服务间通信方式,包括 RESTful API、gRPC 和消息队列,并探讨它们各自的优缺点。
841 0
|
消息中间件 Kubernetes Java
记两个有关线程池的小问题
最近小伙伴们找我查的问题里,有两个与线程池相关的,最终都是花了一些时间才揪出原因所在,做一下记录。
115 1
|
边缘计算 Kubernetes Cloud Native
恭喜我的同事黄玉奇入选开放原子开源基金会TOC
近日,开放原子开源基金会技术监督委员会(TOC)举行第 32 次例会。经过投票,阿里云云原生应用平台高级技术专家黄玉奇正式当选为开放原子开源基金会 TOC 成员。
恭喜我的同事黄玉奇入选开放原子开源基金会TOC
|
缓存 开发框架 前端开发
前端三剑客React框架第一课入门的学习
前端三剑客React框架第一课入门的学习
294 0
|
2天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
3天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1006 151