Solidity

UniswapV2周边合约学习(五)-- ExampleFlashSwap.sol

房东的猫 提交于 2020-10-27 14:52:02
记得朋友圈看到过一句话,如果Defi是以太坊的皇冠,那么Uniswap就是这顶皇冠中的明珠。Uniswap目前已经是V2版本,相对V1,它的功能更加全面优化,然而其合约源码却并不复杂。本文为个人学习UniswapV2源码的系列记录文章。 一、ExampleFlashSwap合约介绍 该合约为利用UniswapV2交易对中的FlashSwap的先借后还特性,在买卖资产的同时和UnisapV1交易对进行交易,利用价格差进行套利。 二、ExampleFlashSwap合约源码 pragma solidity = 0.6 .6 ; import '@uniswap/v2-core/contracts/interfaces/IUniswapV2Callee.sol' ; import '../libraries/UniswapV2Library.sol' ; import '../interfaces/V1/IUniswapV1Factory.sol' ; import '../interfaces/V1/IUniswapV1Exchange.sol' ; import '../interfaces/IUniswapV2Router01.sol' ; import '../interfaces/IERC20.sol' ; import '../interfaces/IWETH.sol' ;

sodility合约审计入门学习思路 零基础一

自作多情 提交于 2020-10-26 07:55:16
sodility合约审计入门学习思路 零基础一 简介 准备工作 学习步骤 1、熟悉sodility语言 2、编写合约、掌握sodility 3、常见合约漏洞 4、合约靶场 5、其他相关知识链接 简介 Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在 以太坊虚拟机(EVM) 上运行。 发现越来多的人关注btc、eth相关的区块链知识,可能大家都幻想过找到一个合约漏洞,发一笔横财哈哈。 网上的学习资料杂而乱,再这里给大家提供一个sodility合约审计的学习思路,让大家少走弯路。 学习一个新技能,肯定要花不少时间,希望大家坚持下去,肯定会有收获。 准备工作 下面的链接部分需要科学上网,这里就不教大家了,自己去准备。 1、谷歌浏览器,自行下载安装 2、链接: remix 此网站用于合约的编译、部署、测试(常用,做笔记,收藏下来),不想用网页的也可以在本地搭建。 链接: remix使用 此网站介绍怎么样使用remix,新版本可能界面做了变化,对应是去找到功能位置就行。 3、metamask(谷歌浏览器插件,eth钱包) 链接: MetaMask的安装与使用 图片: 后面使用remix审计合约会用到,自行下载(需要科学上网)。 学习步骤 1、熟悉solidity语言语法。 2

太坊私快速入门前的准备工作,工欲善其事必先利其器!

拟墨画扇 提交于 2020-10-15 19:20:32
太坊私快速入门前的准备工作,工欲善其事必先利其器! 1.开发工具 :remix http://remix.ethereum.org/# 2.安装钱包 metamask 打开 https://metamask.io/ 浏览器插件安装方式 3.注册一个钱包 4.在测试网络下面获取几个ETH 5.打开remix(建议科学上网) 选择solidity 选择web3 来连接自己的以太坊网络 成功后会显示钱包地址 6.开始写合约、部署合约、测试合约 来源: oschina 链接: https://my.oschina.net/u/4397965/blog/4674339

以太坊私有链搭建智能合约 mac

落花浮王杯 提交于 2020-10-02 22:15:10
以太坊私有链搭建智能合约 mac 编译环境: 安装solidity编译器(智能合约编译器) brew tap ethereum/ethereum brew install solidity 这样会直接下载到solidity的最新版本。 如果你需要特定版本的 Solidity ,你需要从 Github 上安装一个 Homebrew formula。 你可查阅 solidity.rb commits on Github 的提交记录,去寻找包含 solidity.rb 文件改动的特殊提交。然后使用 brew 进行安装: brew unlink solidity # Install 0.4.8 brew install https://raw.githubusercontent.com/ethereum/homebrew-ethereum/77cce03da9f289e5a3ffe579840d3c5dc0a62717/solidity.rb 以下以solidity 0.7.0版本为例,如果版本不同,可能存在编译和语法上的区别 创建智能合约 1、在geth目录下新建一个contract文件夹。方便后面上链。这个geth目录是指创建初始块所在的目录。比如geth init ./genesis.json --datadir ./mychain。则目录则是datadir所指的mychain目录。

browser/payable.sol:14:34: Error: Expected token LBrace got ‘View‘ function getMessage()

假装没事ソ 提交于 2020-10-02 00:57:19
在学习solidity过程中碰到一个小细节的问题,这个问题不是很难,但是网上找了许多资料也未能找到相关的解决办法,今天偶然看了一篇文章解决了这个问题。 错误如下: 编写的代码如下: //指定编译器版本,版本标识符 pragma solidity ^0.4.0; //关键字 contract 跟java的class一样 智能合约是Inbox contract Inbox{ //string 是数据类型,message是成员变量,在整个智能合约生命周期都可以访问 //public 是访问修饰符,是storage类型的变量,成员变量和是全局变量 string public message = "zsan "; //view是修饰符,表示该函数仅读取成员变量,不做修改 function getMessage() public view returns(string) { return message; } } 因为我想在运行合约的时候点击函数名称就可以显示结果,所以使用了view关键字来显示,但是每次运行都是出现这个错误,网上看别人都能完美运行但是自己却总是运行不成功。 【分析原因】 网上大多数教程是2017/2018的,现在是2020年经过2年的发展Remix-Ethereum IDE 版本更新了很多,所以经过我自己的测试0.4.0到0.4.15的版本不兼容了

solidity修饰符讲解

ぃ、小莉子 提交于 2020-10-01 20:55:19
在solidity学习中有几个非常重要的关键字,如下所示: 修饰符 说明 public 公有,任何人(拥有以太坊账户的)都可以调用 牢记 private 私有, 只有智能合约内部可以调用 牢记 external 仅合约外部可以调用,合约内部需使用this调用 先忽略 internal 仅合约内部和继承的合约可以调用 先忽略 view/constant 函数会读取但是不会修改任何contract的状态变量 牢记 pure(纯净的) 函数不使用任何智能合约的状态变量 牢记 payable 调用函数需要付钱,钱付给了智能合约的账户 牢记 returns 返回值函数声明中使用 牢记 1.public、private public 表示所有的人都可以看到的,而且可以调用 private表示所有人都可以看到,但是无法调用 修饰为public的状态变量会默认生成一个同名的public函数,状态变量默认是internal的(先理解为private即可) 下面通过代码讲解 pragma solidity ^0.4.24; contract test1{ uint public a1 = 100; int private a2 = -10; //private 修饰的函数为私有的,只有合约内部可以调用 function add() private view returns(uint){ return

solidity学习之固定长度字节数组byte

隐身守侯 提交于 2020-09-23 16:47:41
在学习solidity过程中,发现这门语言和之前学的C、C++、Java以及Python有很多不同之处,但目前我学到的来看,字节数组byte使用的很频繁,而且也有很多不一样的东西。 1byte=8位(XXXX XXXX)X为0或1,二进制表示 byte数组的类型有:bytes1,bytes2,。。。,bytes32,以八个位递增,即是对 位的封装 举例 bytes1=uint8 bytes2=unit16 ...... bytes32=unit256 目前我自己了解到的byte使用这么频繁大致是因为它能更好的表示16进制 举例:bytes1=0x6A,bytes1=(XXXX XXXX)正好四个表示一个16进制,以此类推 下面我们通过一些例子来看看byte的用法 1.下面声明了一个一字节以及一个4字节的变量 pragma solidity ^0.4.0; contract test{ bytes1 num1 = 0x12; //0x是16进制的表示方法 12是一字节 bytes4 num2 = 0x12121212; //以此类推12 12 12 12 共四字节 } 如果我们想运行这个合约,点击这个变量就可以返回相应的结果可以使用下面这种方法: pragma solidity ^0.4.0; contract test { bytes1 public num1 = 0x12;

以太坊2.0的Medalla测试网已满足启动要求

痴心易碎 提交于 2020-08-18 20:55:06
本周技术周刊包含比特币、以太坊、波卡、Filecoin四个网络的技术类新闻。 比特币网络 Bitcoin Core 0.20.1现已发布 据比特币核心开发团队消息,Bitcoin Core 0.20.1现已发布。 以太坊网络 以太坊智能合约开发工具Truffle发布5.1.37版本 以太坊智能合约开发工具Truffle宣布发布Truffle 5.1.37版本。该版本包括语法高亮,可用于Solidity 0.7.0和更好地识别已验证合约。 以太坊2.0测试网已满足最低存款要求 以太坊2.0测试网已基本达到了将约52.4万枚ETH存入智能合约的目标。根据以太坊多客户端测试网络Medalla官方数据显示,以太坊2.0测试网已满足最低存款要求,目前已有524,288枚ETH被质押至以太坊2.0测试网中。预计以太坊2.0测试网的创世块将于8月4日伦敦时间下午1点至2点(北京时间晚8点至9点)左右上线。 Vitalik:以太坊现在的协议和一年半前一样简单 在最近的节目中,就以太坊2.0是否会让以太坊的进程和协议变得更加复杂这一问题,V神回答称权益证明的缺点之一就是技术上有点复杂,因为你必须与验证节点打交道。你必须弄清楚登录和登出验证节点的过程是什么样的,在协议中还有很多类似管理的事情发生。网络安全是我们一直努力使协议变得更简单的一个重要原因。我可以肯定地认为,现在的协议和一年半前一样简单