区块链
solidity智能合约 标签描述

固定字节数组转string 固定字节数组转换为string没有好的办法,必须要首先将固定字节数组转换为动态字节数组,再将动态字节数组转换为string 123456789101112 //bytes2 -> bytes ---->string functionfixtostr(bytes32_newname)purepublicreturns(string){  bytesmemorynewName=newbytes(_newname.length);  for(uinti=0;i<ne...

  5mjGlyXmoOly   2023年11月13日   19   0   0 solidity智能合约区块链

动态长度数组 动态长度数组可以改变大小和长度 动态长度数组的定义 uint[]grade=[1,2,3,4,5]; 返回动态长度数组 123 functiongetArray()publicviewreturns(uint[]){   returngrade; } 获取动态数组长度 123 functiongetlength()publicviewreturns(uint){  returngrade.length;} 遍历动态长度数组 123456789 functioncheng()publicv...

  5mjGlyXmoOly   2023年11月13日   23   0   0 solidity智能合约区块链

数组 内存中的一片连续区域 定义 12 int[7]math;bytes2[3]bytesTest; 赋值 1 uint[5]public grade=[1,2,3,4,5]; 修改内容 123 functioninit2()public{ bytesTest[1]=0x6a6f;} 返回数组 1234 functiongetArray2()publicviewreturns(bytes2[3]){returnbytesTest;} 获取数组长度 1234 functiongetlength()publicviewr...

  5mjGlyXmoOly   2023年11月13日   28   0   0 solidity智能合约区块链

library引入 常常,我们会进行加减乘除的操作,如下的函数就是对两个函数参数进行了四则运算。 123456 functionoperate(uinta,uintb)purereturns(uint,uint,uint,uint){ uintadd=a+b; uintsub=a-b; uintmul=ab; uintdiv=a/b;} library库 上面的函数其实是有问题的,因为它不能够避免出错,例如如果为b传递为0,就会报错。并且没有防止溢出攻击的问题。有很多时候,对于一些基础性的操作,我们可以把他们封装起来,这就是library...

  5mjGlyXmoOly   2023年11月02日   35   0   0 solidity智能合约区块链

memory赋值状态变量 下面的例子说明了memory赋值给storage的情况。在test函数中,memory空间的变量s复制给了状态变量stu。为值的拷贝问题。并且由于这两个空间互不影响。因此修改变量的值不会影响到另一个变量的值。当调用call函数时,返回100,"jonson"。s的修改不会影响变量stu。 123456789101112131415161718192021222324 pragmasolidity^0.4.23;contractMemoryTostorage{   structstudent{   &...

  5mjGlyXmoOly   2023年11月02日   59   0   0 solidity智能合约区块链

综合案例:众筹 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 pragmasolidity^0.4.23;contract campaign{  //捐赠者的对象  structfunder{   address funderaddress;//捐赠者的地址   uint Tomoney; &n...

  5mjGlyXmoOly   2023年11月02日   42   0   0 solidity智能合约区块链

memory引入 函数中结构体变量默认是是storage类型 下面是一段错误的代码,错误的原因在于,init函数中,students默认会加上storage的属性,但是storage属性必须要引用storage空间中的状态变量。但是实例化的student(100,“jackson”)并不在storage中。 123456789 structstudent{  uintgrade;  stringname;}functioninit()publicpurereturns(uint,string){  student ...

  5mjGlyXmoOly   2023年11月02日   56   0   0 solidity智能合约区块链

结构体中的mapping 定义时,不用初始化mapping1、结构体中的变量,在定义的时候是不能缺省的,但是结构体中的mapping映射除外。2、在memory中的结构体变量s是不能够操作其中mapping映射。这是由于mapping映射只能够存储在storage空间中 1234567 structstudent{   uintgrade;   stringname;   mapping(uint=>string)map; }studentmemorys=student(100,...

  5mjGlyXmoOly   2023年11月02日   24   0   0 solidity智能合约区块链

byte类型 有bytebytes1bytes2…bytes32特殊的有bytebytes1 后面的数字代表占了多少字节。1个字节在内存中占了8位 性质 固定字节数组不能修改长度和内容 字节一般用16进制来存储 16进制中的1个数字代表占了4位。 1234567 bytes1publicnum1=0x6a;    //转换为10进制:106bytes2publicnum2=0x6a6f;  //转换为10进制:27247bytes6publicnum3=0x6a6f6e736f6e;bytes1publica=0x6a;//...

  5mjGlyXmoOly   2023年11月13日   34   0   0 solidity智能合约区块链

struct语法 struct类似于对于一个对象属性的封装。例如一个学生,可能会有姓名、学号等属性。将这些属性封装起来,成为一个结构体。 1234 struct对象名{  变量类型1变量名1;  变量类型2变量名2;} struct声明 定义一个学生类 1234 structstudent{  uintgrade;  stringname;} 结构体不能包含自身 12345 structstudent{  uintgrade;  string...

  5mjGlyXmoOly   2023年11月02日   63   0   0 solidity智能合约区块链

EVM 当调用solidity函数时,都会在以太坊虚拟机当中来执行。因此了解以太坊虚拟机的细节,了解其数据的存储机制变得尤为重要。以太坊虚拟机中的空间分为3大部分。分别为storage、stack与memory。storage空间非常特殊,其值会被矿工提交到区块链上,改变区块链的状态。 下面我们将分析下面例子中,每一个变量所在以太坊evm中的位置。 下面的例子中,在运行合约中的代码时,变量a会存储在以太坊evm的storage空间中。其实所有的状态变量都会存储在storage空间中。add函数中的函数参数num存储在memory空间中。在函数中定义的变量,如在test函数中的i、j都存储在...

  5mjGlyXmoOly   2023年11月02日   38   0   0 solidity智能合约区块链

继承 继承是面向对象语言的重要特征。继承是为了模拟现实中的现象,并且可以简化代码的书写。例如猫与够都属于动物。他们都继承动物的某些特征。 继承语法 当前合约继承父类合约的属性和方法。 123456789101112131415161718192021222324252627 contract 合约名 is 父类合约名{}               继承例子下面的例子中。直接部署son合约后,son合约继承...

  5mjGlyXmoOly   2023年11月02日   31   0   0 solidity智能合约区块链

带参modifire modifire还可以带参数,如下面的例子,模拟了游戏中的升级操作。如果玩家等级达到2级,就可以修改名字。如果玩家等级达到10级,就可以修改DNA。通过带参数的modifire实现对于代码的封装。 12345678910111213141516171819202122 pragmasolidity^0.4.23;contract modifiererParam{  uintpubliclevel=9;  stringpublicname;  uintpublicDNA;  ...

  5mjGlyXmoOly   2023年11月02日   54   0   0 solidity智能合约区块链

合约结构 1、明确solidity的版本号。此行意味着我们正在阻止我们的程序被一个比0.4.0更老的编译器编译^表示向上兼容,但是不能够被0.5.0及其以上的编译器编译。我们这样做是为了尽量减少代码以意想不到或不兼容的方式编译时可能发生的错误的风险。 2、定义一个合约,内部有不同的方法和属性。 描述一个对象,可以从属性和行为两个方面,这正是面向对象的重要特征。3、在合约的内部声明变量的方法和属性。4、定义不同的函数、属于不同的函数成员。 代码结构 函数的一般形式 1 function(<parametertypes>){public|internal|ex...

  5mjGlyXmoOly   2023年11月13日   32   0   0 solidity智能合约区块链

状态变量的值拷贝问题 如下例子中,将状态变量a的值赋值给状态变量b。a与b都是以太坊虚拟机storage中不同的两个空间,所以当调用change方法修改b的值的时候,不会影响到a空间中的值。 1234567 uintpublica=100;uintpublicb=a;functionchange()public{  b=999;} 函数体内部变量的值拷贝 在函数体内部,将状态变量a的值赋值给状态变量b。a与b都是以太坊虚拟机栈中不同的两个空间。所以当修改b的值的时候,不会影响到a空间中的值。 123456 functionchange2()public...

  5mjGlyXmoOly   2023年11月02日   34   0   0 solidity智能合约区块链

函数重名与函数作用域问题 1、当状态变量中已经有了一个变量a、状态变量中就不能够再有一个同名的状态变量。2、当状态变量中和函数体内部已经有了都有一个同名的函数的时候,默认处理的是函数体内部的变量。也就是说,变量的操作和其他语言一样,仍然满足就近原则。 12345678910 uintpublica=100;uintb=200;// uintpublica=999; 当状态变量中已经有了一个变量a、状态变量中就不能够再有一个同名的状态变量。functionscopeTest()pure publicreturns(uint){  uin...

  5mjGlyXmoOly   2023年11月02日   56   0   0 solidity智能合约区块链

地址 solidity语言中有账户的概念,solidity语言中有两类账户。一类是合约账户、一类是外部账户。账户都有地址。地址为160位。 定义地址 addresspublicaccount1=0x4B0897b0513fdC7C541B6d9D7E929C4e5364D2dB;addresspublicaccount2=0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c; address底层以uint160存储 123456 functionchangeIt()viewpublicreturns(uint160){  retur...

  5mjGlyXmoOly   2023年11月13日   15   0   0 solidity智能合约区块链

数组字面量特点 1、数组字面量类似与一个常量数组,不能修改大小和长度,例如[1,2,3]2、数组字面量满足最小匹配原则,意味着[1,2,3]存储的类型为uint8,[256,2,3]存储的类型为uint16。Solidity会自动的匹配最小的能够容纳的类型3、如果要改变类型的大小,如[1,2,3]中类型为uint256,那么我们可以强制转换为[uint(1),2,3]。 代码例子如下 1234567891011121314151617181920212223242526272829303132333435 pragmasolidity^0.4.23;contractArrayLite...

  5mjGlyXmoOly   2023年11月13日   14   0   0 solidity智能合约区块链

solidity中的全局属性 block.blockhash(uintblockNumber)returns(bytes32):返回给定区块号的哈希值,只支持最近256个区块,且不包含当前区块。在版本0.4.22中弃用并被替换为。blockhash(uintblockNumber)block.coinbase(address):当前块矿工的地址。block.difficulty(uint):当前块的难度。block.gaslimit(uint):当前块的gaslimit。block.number(uint):当前区块的块号。block.timestamp(uint):当前块的Unix时间戳...

  5mjGlyXmoOly   2023年11月13日   20   0   0 solidity智能合约区块链

二维数组定义 1 uint[2][3]grade=[[60,80],[40,20],[50,50]]; 返回二维数组 1234 functiongetGrade()viewpublicreturns(uint[2][3]){  returngrade;} 获取二维数组长度 123456789 functiongetLength()viewpublicreturns(uint){  returngrade.length;} functiongetLength2()viewpublicreturns(uint){&...

  5mjGlyXmoOly   2023年11月13日   37   0   0 solidity智能合约区块链