草庐IT

Solidity之Mappings篇

全部标签

使用 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等接囗方

27. solidity ABI编码与解码

27.ABI编码与解码在以太坊中,数据必须编码成字节码才能和智能合约交互。ABI(ApplicationBinaryInterface,应用二进制接口)是与以太坊智能合约交互的标准。数据基于他们的类型编码;并且由于编码后不包含类型信息,解码时需要注明它们的类型。ABI主要有3大使用场景:配合call实现对合约的底层调用在ethers.js实现合约的导入和函数调用对不开源合约进行反编译后,某些函数无法查到函数签名,可通过ABI进行调用这里介绍4个ABI编码函数和1个`ABI解码函数:ABI编码函数:abi.encode、abi.encodePacked、abi.encodeWithSignatu

Solidity 关键词说明(payable transfer event modifier msg external public view pure memory)

一、payable在Solidity中,payable是一个关键字,用于表示函数可以接收以太币(ether)的转账。如果一个函数被声明为payable,那么它就可以接收以太币的转账,而不仅仅是使用以太币作为参数进行函数调用。例如,下面是一个声明了payable关键字的函数:functionbuyToken()publicpayable{//程序逻辑...}在上面的代码中,函数buyToken()会接收以太币的转账,并且转账的数量会作为函数的参数msg.value被传递进来。如果这个函数没有被声明为payable,那么在进行转账时就会出现错误。需要注意的是,在接收以太币的函数中,你需要确保对于接