jjzjj

solid-principles

全部标签

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步:从左侧图标中选择文件资源管理器,然后在环境中选择

基于以太坊的智能合约开发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

基于以太坊的智能合约开发Solidity(数组提升篇)

参考教程:【数据存储篇】1、string内存原理——特殊动态数组_哔哩哔哩_bilibili1、语法——字符串://声明版本号(程序中的版本号要和编译器版本号一致)pragmasolidity^0.5.17;//合约contractDynamicString{  stringname="lalalalalalala啦啦啦";    functiongetLength()publicreturns(uint)  {    returnbytes(name).length; //要想获取字符串的长度,需要先将其强制转换成动态长度字节数组(string不提供长度属性)  }    functiong

Solidity 以太坊智能合约标准-ERC721(2023版)

ERC721定义了一种以太坊生态中不可分割的、具有唯一性的Token交互、流通的接囗规范。官网简要称为Non-FungibleTokenStandard(简称NFT标准规范),即非同质化Token(或不可替代的Token)。ERC721合约标准提供了在实现ERC721Token时必须要遵守的协议,要求每个ERC721标准合约需要实现ERC721接囗及ERC165接囗。ERC721特性:在该合约内,tokenId唯一tokenId只能被一个owner所拥有一个owner可以拥有多个NFT,balance函数只能查询owner拥有多少个tokenNFT可通过approve、transfer等接囗方