区块链特辑——solidity语言基础(六)
Solidity语法基础学习
十、实战项目(二):
1.实战准备:
ERC20代币接口
ERC20 Token Interface接口
Interface IName {……}
·关键字:interface
·宣告一个接口,定义了需要满足的函数与事件
·在界面中的限制:
·所有宣告的函数接口必须是“external”,即使最终在合约使用的是public也一样。
·不能宣告构造函数(constructor)
·不能宣告在存储空间的变量(状态变量,state variables)
·不能宣告修饰符(modifier)
示例代码
ERC20接口
Interface IERC20{
event Transfer(address indexed from,address indexed to,uint256 value);
event Approval(address indexed owner,address indexed spender,uint256 value);
funciton totalSupply() external view returns(unit256);
funciton balance0f(address account) external view returns(uint256);
function allowance(address owner,address spender) external view returns(uint256);
function approve(address spender,uint256 amount) external returns(bool);
function transfer(address to,uint256 amount) external returns(bool);
function transferFrom(address to,uint256 amount) external returns(bool);
}
2.分段解读:
发行量函数
·function totalSupply() external view returns(uint256);
·回传代币的发行量
·使用状态变量uint256_totalSupply来储存
账户函数查询函数
·function balance0f(address account) external view returns(uint256);
·给定一个账户(address),回传给该账户拥有的代币余额(uint256)
·因为是个address→uint256的关系,因此使用mapping来储存:mapping(address => uint256) _balance;
账户函数
·function transfer(address to,uint256 amount) external returns(bool);
·呼叫者“msg.sender”,转移“amount”数量的代币给特定账户“to”
·成功时回传true,反之,回传false
转账事件
·event Transfer(address indexed from,address indexed to,uint256 value);
·当发生代币转移时,必须触发此事件,即使转移的数量为“0”也是
授权函数
·function approve(address spender,uint256 amount) external returns(bool);
·呼叫者“msg.sender”,授权“amount”数量的代币给第三方账户“spender”使用
·成功时回传true,反之,回传false
授权事件
·event Approval(address indexed owner,address indexed spender,uint256 value);
·当授权函数被使用时,必须触发授权事件,即使授权的数量“value”为“0”也是。
授权数量查询函数
·function allowance(address owner,address spender) external view returns(uint256);
·回传代币拥有者“owner”授权给第三方账户“spender”的代币数量
·我们可以观察到授权的行为是owner→spender→uint256
·因此在储存授权的资讯时,会使用
·mapping(address => mapping(address => uint256))
第三方转账函数
·function transferFrom(address from,address to,uint256 amount) external returns(bool);
·呼叫者为“被授权的第三方账户”,从授权者“from”转移“amount”数量的代币给接收者“to”
·成功时回传true,反之,回传false
区块链特辑——solidity语言基础(六)的更多相关文章
- 比原链CTO James | Go语言成为区块链主流开发语言的四点理由
11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...
- Go语言基础六:结构体和方法
结构体 结构体是一个由用户定义的复合类型,它由一系列属性组成,每个属性都有自己的类型和值.Go语言中数组可以存储同一类型的数据,但在结构体中用户可以为不同项定义不同(或相同)的数据类型.结构体是值类型 ...
- Solidity语言基础 和 Etherum ERC20合约基础
1. 类型只能从第一次赋值中推断出来,因此以下代码中的循环是无限的, 小. for (var i = 0; i < 2000; i++) { ... } --- Solidity Types ...
- 001/Go语言构建区块链(mooc)
1.区块链发展与现状 视频地址:https://www.imooc.com/video/17452 注意: 比特币与以太坊最大的区别在于: 以太坊引入了对图灵完美智能合约的支持,人们可以将任何业务逻辑 ...
- 从Go语言编码角度解释实现简易区块链
区块链技术 人们可以用许多不同的方式解释区块链技术,其中通过加密货币来看区块链一直是主流.大多数人接触区块链技术都是从比特币谈起,但比特币仅仅是众多加密货币的一种. 到底什么是区块链技术? 从金融学相 ...
- 以太坊区块链Java(EthereumJ)学习笔记:概述
本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...
- 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识
给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...
- 区块链火爆,再不知道Golang就晚了
Golang,也叫Go语言,是2009年刚刚被发发布的一门新语言. 区块链,是2019年我国提出的新战略. 一个不争的事实就是,大多数从事区块链开发的小伙伴都是用Golang,大多数招聘区块链技术工作 ...
- 我是如何从Java转型为Go区块链工程师
我是如何从Java转型为Go区块链工程师 本文来自于一个比原链核心开发的陈述 前言 IT部落在加入比原链之前一直是做Java开发的,当初看到Go还有点犹豫,还怕过不了面试,结果是否掌握一门语言的考量确 ...
- 2019金融科技风往哪儿吹?蚂蚁金服联合20余家金融机构预测新年热点:5G、区块链上榜
2019年,金融科技的风向标在哪里?哪些板块成新宠,哪些科技成潮流? 1月4日,蚂蚁金服ATEC城市峰会在上海举行.大会上,蚂蚁金服与20余家金融机构一起预测了2019年金融科技的发展. “未来金融会 ...
随机推荐
- 深入浅出redis缓存应用
0.1.索引 https://blog.waterflow.link/articles/1663169309611 1.只读缓存 只读缓存的流程是这样的: 当查询请求过来时,先从redis中查询数据, ...
- Educational Codeforces Round 137 (Rated for Div. 2) A-F
比赛链接 A 题解 知识点:数学. \(4\) 位密码,由两个不同的数码组成,一共有 \(C_4^2\) 种方案.从 \(10-n\) 个数字选两个,有 \(C_{10-n}^2\) 种方案.结果为 ...
- python信息检索实验之向量空间模型与布尔检索
import numpy as np import pandas as pd import math def bool_retrieval(string): if string.count('and' ...
- Educational Codeforces Round 122 (Rated for Div. 2)/codeforces1633
CodeForces1633 Div. 7 解析: 题目大意 给定 \(t\) 组数据.每组数据给定一个数 \(n\)(\(10\le n\le 999\)). 每次操作可以修改 \(n\) 任意一位 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(30)-Fiddler如何抓取Android7.0以上的Https包-番外篇
1.简介 通过宏哥前边几篇文章的讲解和介绍想必大家都知道android7.0以上,有android的机制不在信任用户证书,导致https协议无法抓包.除非把证书装在系统信任的证书里,此时手机需要roo ...
- 一、Vue.js介绍
一.介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手 ...
- tool1
//导出 public void excel(List<Long> ids, HttpServletResponse response) { List<StockPageVo> ...
- JetBrains新产品Aqua——自动化测试开发工具(抢鲜体验)
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/9a093c88.html 你好,我是测试蔡坨坨. 随着行业内卷越来越严重,自动化测试已成为测试工程师的必备技能,谈及自动化测 ...
- 3.JS
1.简介 JavaScript 因为互联网而生,紧随着浏览器的出现而问世 1997年7月,ECMAScript 1.0发布. 1998年6月,ECMAScript 2.0版发布. 1999年12月,E ...
- Quartz的使用
Quartz的使用 可以下载该项目进行测试查看:https://gitee.com/zhou-jiahao/quartz_demoq 1 初始Quartz 如果你的定时任务没有分布式需求,但需要对任务 ...