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语言基础(六)的更多相关文章

  1. 比原链CTO James | Go语言成为区块链主流开发语言的四点理由

    11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...

  2. Go语言基础六:结构体和方法

    结构体 结构体是一个由用户定义的复合类型,它由一系列属性组成,每个属性都有自己的类型和值.Go语言中数组可以存储同一类型的数据,但在结构体中用户可以为不同项定义不同(或相同)的数据类型.结构体是值类型 ...

  3. Solidity语言基础 和 Etherum ERC20合约基础

    1. 类型只能从第一次赋值中推断出来,因此以下代码中的循环是无限的,  小. for (var i = 0; i < 2000; i++) { ... } --- Solidity Types ...

  4. 001/Go语言构建区块链(mooc)

    1.区块链发展与现状 视频地址:https://www.imooc.com/video/17452 注意: 比特币与以太坊最大的区别在于: 以太坊引入了对图灵完美智能合约的支持,人们可以将任何业务逻辑 ...

  5. 从Go语言编码角度解释实现简易区块链

    区块链技术 人们可以用许多不同的方式解释区块链技术,其中通过加密货币来看区块链一直是主流.大多数人接触区块链技术都是从比特币谈起,但比特币仅仅是众多加密货币的一种. 到底什么是区块链技术? 从金融学相 ...

  6. 以太坊区块链Java(EthereumJ)学习笔记:概述

    本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...

  7. 给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识

    给本体ONT技术社区的第一封公开信-涉及到不少区块链技术知识 共识是区块链的核心机制,在一系列的区块链的发展历史当中,PoW/PoS/BFT等系列的共识算法都在各自的应用场景发挥了不同作用.在本体的第 ...

  8. 区块链火爆,再不知道Golang就晚了

    Golang,也叫Go语言,是2009年刚刚被发发布的一门新语言. 区块链,是2019年我国提出的新战略. 一个不争的事实就是,大多数从事区块链开发的小伙伴都是用Golang,大多数招聘区块链技术工作 ...

  9. 我是如何从Java转型为Go区块链工程师

    我是如何从Java转型为Go区块链工程师 本文来自于一个比原链核心开发的陈述 前言 IT部落在加入比原链之前一直是做Java开发的,当初看到Go还有点犹豫,还怕过不了面试,结果是否掌握一门语言的考量确 ...

  10. 2019金融科技风往哪儿吹?蚂蚁金服联合20余家金融机构预测新年热点:5G、区块链上榜

    2019年,金融科技的风向标在哪里?哪些板块成新宠,哪些科技成潮流? 1月4日,蚂蚁金服ATEC城市峰会在上海举行.大会上,蚂蚁金服与20余家金融机构一起预测了2019年金融科技的发展. “未来金融会 ...

随机推荐

  1. 深入浅出redis缓存应用

    0.1.索引 https://blog.waterflow.link/articles/1663169309611 1.只读缓存 只读缓存的流程是这样的: 当查询请求过来时,先从redis中查询数据, ...

  2. Educational Codeforces Round 137 (Rated for Div. 2) A-F

    比赛链接 A 题解 知识点:数学. \(4\) 位密码,由两个不同的数码组成,一共有 \(C_4^2\) 种方案.从 \(10-n\) 个数字选两个,有 \(C_{10-n}^2\) 种方案.结果为 ...

  3. python信息检索实验之向量空间模型与布尔检索

    import numpy as np import pandas as pd import math def bool_retrieval(string): if string.count('and' ...

  4. Educational Codeforces Round 122 (Rated for Div. 2)/codeforces1633

    CodeForces1633 Div. 7 解析: 题目大意 给定 \(t\) 组数据.每组数据给定一个数 \(n\)(\(10\le n\le 999\)). 每次操作可以修改 \(n\) 任意一位 ...

  5. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(30)-Fiddler如何抓取Android7.0以上的Https包-番外篇

    1.简介 通过宏哥前边几篇文章的讲解和介绍想必大家都知道android7.0以上,有android的机制不在信任用户证书,导致https协议无法抓包.除非把证书装在系统信任的证书里,此时手机需要roo ...

  6. 一、Vue.js介绍

    一.介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手 ...

  7. tool1

    //导出 public void excel(List<Long> ids, HttpServletResponse response) { List<StockPageVo> ...

  8. JetBrains新产品Aqua——自动化测试开发工具(抢鲜体验)

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/9a093c88.html 你好,我是测试蔡坨坨. 随着行业内卷越来越严重,自动化测试已成为测试工程师的必备技能,谈及自动化测 ...

  9. 3.JS

    1.简介 JavaScript 因为互联网而生,紧随着浏览器的出现而问世 1997年7月,ECMAScript 1.0发布. 1998年6月,ECMAScript 2.0版发布. 1999年12月,E ...

  10. Quartz的使用

    Quartz的使用 可以下载该项目进行测试查看:https://gitee.com/zhou-jiahao/quartz_demoq 1 初始Quartz 如果你的定时任务没有分布式需求,但需要对任务 ...