jjzjj

Solidity

全部标签

solidity案例详解(七)复杂众筹合约

自己原创智能合约,有作业需求可加下面的图片中的裙1、在Remix中,以Account1完成“众筹项目”合约的编译和部署。(显示合约、函数、状态变量、结构体、事件的命名)2、在Remix中,以Account2完成“参与众筹”合约的编译和部署。3、显示合约中的众筹项目数量。4、Account2 对Account1 众筹项目进行捐款(操作成功,获得 1个代币)5、Account3 对Account1 众筹项目进行附议(操作成功,获得1个代币)6、Account2 对Account1 众筹项目进行附议(众筹已达上限,操作失败)7、Account4 对Account1 众筹项目进行附议(费用不足,操作失

Solidity-6-合约

创建合约可以通过以太坊交易“从外部”或从Solidity合约内部创建合约。创建合约时,合约的构造函数(一个用关键字constructor声明的函数)会执行一次。构造函数是可选的。只允许有一个构造函数,这意味着不支持重载。构造函数执行完毕后,合约的最终代码将部署到区块链上。此代码包括所有公共和外部函数以及所有可以通过函数调用访问的函数。可见性和getter函数状态变量有3种可见性:public对于public状态变量会自动生成一个getterhanshu函数(见下面)。以便其他的合约读取他们的值。当在用一个合约里使用是,外部方式访问(如:this.x)会调用getter函数,而内部方式访问(如:

solidity 重入漏洞

目录1.重入漏洞的原理2. 重入漏洞的场景2.1msg.sender.call转账2.2修饰器中调用地址可控的函数1.重入漏洞的原理重入漏洞产生的条件:合约之间可以进行相互间的外部调用 恶意合约B调用了合约A中的publicfuncA函数,在函数funcA的代码中,又调用了别的合约的函数funcB,并且该合约地址可控。当恶意合约B实现了funcB,并且funcB的代码中又调用了合约A的funcA,就会导致一个循环调用,即step2=>step3=>step2=>step3=>.......直到合约gas耗尽或其他强制结束事件发生。2. 重入漏洞的场景2.1msg.sender.call转账ms

使用 Solidity 创建返回所有者地址和余额的智能合约

问题:创建一个名为MyContract的智能合约,拥有一个状态变量作为所有者。创建一个构造函数以从msg中获取所有者的地址并将其保存到状态变量owner中。另外,创建一个函数getBalance()来显示所有者的当前余额。 解决方案:每个智能合约都由一个称为所有者的地址拥有。智能合约可以使用sender属性了解其所有者的地址,并使用名为msg的特殊内置对象了解其可用余额。第1步:打开Remix-IDE。第2步:从左侧图标中选择文件资源管理器,然后在环境中选择

基于Hardhat和Openzeppelin开发可升级合约(二)

基于Hardhat和Openzeppelin开发可升级合约(二)在本章我将开始介绍和演示基于Openzeppelin的可升级合约解决方案简介根据设计,智能合约是不可变的。但随着新的客户需求和产品设计的升级迭代,合约也需要升级。Openzeppelin的基础可升级合约解决方案是将合约数据与逻辑分离。代理合约(Proxy)负责转发交易到逻辑合约,并保存合约数据逻辑合约(Logic)负责实现功能逻辑升级时,只需要重新部署新版本的逻辑合约,并将代理合约中的逻辑合约实例指向新版本逻辑合约实例即可可升级合约的原理-DelegateCall第三方库Hardhat关于Hardhat的安装和介绍,参考我的另一篇

基于以太坊的智能合约开发Solidity(基础篇)

参考教程:基于以太坊的智能合约开发教程【Solidity】_哔哩哔哩_bilibili1、第一个程序——Helloworld://声明版本号(程序中的版本号要和编译器版本号一致)pragmasolidity^0.5.17;//合约contractHelloWorld{  //合约属性变量,也叫状态变量(定义方式:数据类型变量名=数据)  stringmyName="helloworld";//在solidity中,用单引号包含字符串也是可以的  //合约中的方法(注意语法顺序,其中此处“view”代表方法只读,不会消耗燃料;“returns”后的是返回值类型)  functiongetName

Solidity智能合约开发 — 5.2 -理解EVM虚拟机交易执行、合约创建、区块上链

1EVM概述一个交易数据中附加了合约创建代码或者合约函数调用代码,以太坊客户端就会相应的使用EVM来运行这些代码。所有智能合约代码最终反映为EVM机器码,以下是常有的EVM操作码.1.1EVM操作码栈和内存操作码    POPPUSH MLOADMSTOREJUMPPCMSIZEGASDUPSWAP通用系统操作码   CREATECALLRETURNREVERTSELFDESTRUCT算数操作码    ADDMULSUBDIVSDIVMODSMODADDMODMULMODEXPSTOP环境数据操作码   ADDRESSBALANCECALLVALUEORIGINCALLERCODESIZEGA

Solidity 代码执行漏洞原理

目录1.三种call方式2.两种call参数类型3.漏洞场景3.1 delegatecall3.2call1.三种call方式Solidity中一个合约调用其他合约的函数有三种方式:.call(...)returns(bool).callcode(...)returns(bool).delegatecall(...)returns(bool)1)call()call是最常用的调用方式,call的外部调用上下文是被调用者合约,也就是指执行环境为被调用者的运行环境,调用后内置变量msg的值会修改为调用者。2)delegatecall()delegatecall的外部调用上下文是调用者合约,也就是指

Solidity 小白教程:7. 映射类型 mapping

Solidity小白教程:7.映射类型mapping这一讲,我们将介绍solidity中的哈希表:映射(Mapping)类型。映射Mapping在映射中,人们可以通过键(Key)来查询对应的值(Value),比如:通过一个人的id来查询他的钱包地址。声明映射的格式为mapping(_KeyType=>_ValueType),其中**_KeyType和_ValueType分别是Key和Value**的变量类型。例子:mapping(uint=>address)publicidToAddress;//id映射到地址mapping(address=>address)publicswapPair;//

solidity 特性导致的漏洞

目录1、默认可见性2、浮点数精度缺失3、错误的构造函数4、自毁函数5、未初始化指针-状态变量覆盖1、默认可见性Solidity的函数和状态变量有四种可见性:external、public、internal、private。函数可见性默认为public,状态变量可见性默认为internal。可见范围:privateprivate:只有当前合约可见internal:外部合约不可见,只有当前合约内部和子类合约可见external:只能被外部合约或者外部调用者可见public:公共函数和状态变量对所有智能合约可见solidity0.4版本,函数不设置访问修饰符编译不会报错,函数默认的可见性是publi