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

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

storage引入 storage属性是一种引用类型。在如下的合约中,定义了动态长度数组arrx,arrx存储在以太坊虚拟机storage空间中的变量。当调用test方法之后,定义了变量uint[]Z。这个时候,如果我们在remix浏览器中进行编译,我们会看到一个警告。因为默认的情况下,对于动态数组会加上storage属性。也就是:uint[]storagex。storage属性是一种引用类型,其引用了以太坊虚拟机storage空间中的状态变量。而不是对于值的拷贝 因此,在test函数中,当修改了Z的长度和Z的内容之后,再次查看arrx的长度和内容,会发现对应发生了变化。 12345...

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

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

  5mjGlyXmoOly   2023年11月02日   65   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日   57   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日   25   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日   61   0   0 solidity智能合约区块链

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

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

测试网络 在之前的案例中,大部分都是在remix在线的本地虚拟环境下做的测试。这一小节将在以太坊测试网络中交互合约。除了主网、以太坊有多个测试网络,用于对于智能合约进行测试。那么之间的主要区别在于共识算法以及确认时间。 网络 网络id 共识算法 确认时间 Main 1 POW 15秒左右 Ropsten 3 POW 不到30秒 Ropsten 4 POA仅geth支持 15秒 kovan 42 POA仅parity支持 4秒 remix部署智能合约到测试网络的流程 1、书写智能合约2、solc编译器编译合约为二进制文件与ABI接口文件3、借助于web3j库将...

  5mjGlyXmoOly   2023年11月02日   38   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日   36   0   0 solidity智能合约区块链

回顾 1234567 2016年6月,以太坊最大众筹项目TheDAO被,获得超过350万个以太币,最终导致以太坊分叉为ETH和ETC。2016年拒绝服务:GovernMental's1100ETH2016年KotET(“纷争时代”)合约遭受。2017年Parity钱包,遭受delecatecall注入,销毁了合约。损失513,774.16Ether2017年ANTToken遭受重入漏洞。2017年Simoleon合约被。通过部署合约获得了超过700万的token,从57万账户中脱颖而出,一举成为该合约token的第四大持有者。2018年BEC代币遭到袭击,手法被披露的24小时内,就有...

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

内联汇编 对于普通的solidity智能合约来说,通过solc编译器的优化操作,将源代码转换为以太坊能够识别的二进制文件。但是solc编译器不是万能的,在某些情况下,例如循环操作的时候,并不能达到最佳的执行方式。通过在solidity智能合约中内嵌汇编代码,可以阻止编译器的优化,在某些时候能够到达节约gas的作用。同时,内嵌汇编代码可以增加solidity语言的功能。例如在判断账户地址为合约地址还是外部地址的时候,只能够通过汇编代码来实现。 内联汇编语法 123 assembly{ 内联汇编语句} 将for循环转换变为内联汇编 let指令定义变量。add函数是内联汇编...

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

Dos攻击 dos攻击也叫做拒绝服务攻击,通过使程序操作无效完成攻击的目的。 下面的一段合约是2016年KotET(“纷争时代”)合约,其遭受了dos攻击。本小节将揭开此合约被攻击的秘密。 源代码 在下面KotET合约代码中,模拟了争夺皇位的功能。只有出价最高的人才能够夺得桂冠。合约中的bid方法正是最核心的竞价合约。只有当msg.value即附带的以太币大于当前最大的出价人,就会首先将从前的最高价格转移给从前的出价人。完成之后,新的价格和资金会替换掉旧的资金。 123456789101112131415 pragmasolidity^0.4.23;contractAuction{&...

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

storage陷阱 下面的合约是一个锁定金额的合约,用户将资金存储在此合约中,只有当过了一段时间时候才能够提取出来。下面的案例是为了说明storage属性预设性带来的陷阱。payIn函数是当用户存储金额时调用的函数。传递的参数似乎解锁的时间。在合约payIn中,HoldRecordnewRecord;其实默认为storage类型,并且,当不为storage变量赋值的时候,变量默认引用的位置是storage空间中的0号位置。这也意味着在当前的案例中,newRecord指针指向了ownerAmount,当对newRecord执行newRecord.amount+=msg.value;实则将ow...

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

storage陷阱 下面的合约是一个锁定金额的合约,用户将资金存储在此合约中,只有当过了一段时间时候才能够提取出来。下面的案例是为了说明storage属性预设性带来的陷阱。payIn函数是当用户存储金额时调用的函数。传递的参数似乎解锁的时间。在合约payIn中,HoldRecordnewRecord;其实默认为storage类型,并且,当不为storage变量赋值的时候,变量默认引用的位置是storage空间中的0号位置。这也意味着在当前的案例中,newRecord指针指向了ownerAmount,当对newRecord执行newRecord.amount+=msg.value;实则将ow...

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

重入攻击 当调用外部的合约时,外部合约会接管控制流程,从而可能给自己的数据带来意想不到的修改。2016年6月,以太坊最大众筹项目TheDAO被攻击,黑客获得超过350万个以太币。正是由于此陷阱。 重入攻击本质 1、调用外部合约2、fallback回调函数被多次执行3、逻辑顺序出现问题4、call函数没有gaslimit的限制。5、call函数返回值为true或false。出错不会执行回滚。 案例剖析 1、部署合约Vulnerable、Malicious、transferEther,假设地址为addrA、addrB、addrC2、将addrB传递到Vulnerable合约的add中。完成此操...

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

相反数 有符号的solidity整数类型如果有N位。那么其值的范围是-2^(N-1)to2^(N-1)-1。这意味着该类型负数的最大值取相反数之后不能够被接收。 相反数陷阱 如下的Negation合约说明了负数在面临取相反数操作时可能遇到的问题。由于对于负数取相反数。实则是取负数的补码操作。因此、当某int类型最大的负数取相反数的时候,会是其本身。如当int8的最大值-128传递到negate8执行取反操作的时候,会返回128。 123456789101112131415 contractNegation{  functionnegate8(int8_i)publ...

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

wif倒推出私钥 参考资料 https://en.bitcoin.it/wiki/Private_keyhttps://en.bitcoin.it/wiki/Wallet_import_formathttp://gobittest.appspot.com/PrivateKey 本文链接: https://dreamerjonson.com/2018/12/09/golang-40-blockchain-verifyprivatekeywif/ 版权声明: 本博客所有文章除特别声明外,均采用 CCBY4.0CN协议 许可协议。转载请注明出处! ...

  5mjGlyXmoOly   2023年11月02日   62   0   0 Go区块链

大自然的启示 Banyan树的启示:印度banyan树,最大的一颗可以长到1万平方米以上。其如此巨大的秘密就在于其枝干也会产生根,起到支撑,从而作为附属树干,继续生成分支。大自然给人太多启示…… MerkleTree MerkleTree,通常也被称作HashTree,顾名思义,就是存储hash值的一棵树。Merkle树是一种数据结构,Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。Merkle树是使区块链发挥作用的基本组成部分。虽然理论上可以在没有Merkle树的情况下制作区块链,但只需创建直接包含每个事务的巨型块头,这样...

  5mjGlyXmoOly   2023年11月02日   35   0   0 Go区块链

打印区块、测试序列化 添加交易 transition.go 工具类 utils.go 修改区块 block.go 本文链接:&nbsp;https://dreamerjonson.com/2018/12/16/gobuildblockchain-1-block/ 版权声明:&nbsp;本博客所有文章除特别声明外,均采用&nbsp;CCBY4.0CN协议&nbsp;许可协议。转载请注明出处! <!-本文包含:- <!--

  5mjGlyXmoOly   2023年11月02日   33   0   0 Go区块链

前言 2018年对于区块链、对于数字货币市场来说注定是不平凡的一年。年初,随着比特币、以太币等数字货币价格飙升,区块链得到了世界上越来越多人的关注。在之后,随着主流数字货币价格的暴跌,市场陷入一片哀嚎。然而,数字价格的波动并没有影响到区块链生态的繁荣。同时,对于金融的重塑不过是区块链强大特性的冰山一角。主流社会逐渐意识到,区块链技术将深刻的改变人类社会。 作为区块链鼻祖的比特币是一个革命性的系统,它非常复杂并且拥有非常陡峭的学习曲线。比特币常常作为市场的风向标。它不仅占领了数字货币总价值的半壁江山,也非常直接地影响了其他数字货币的价格。在这片文章中,笔者将会对2018年比特币网络的重要指标...

  5mjGlyXmoOly   2023年11月02日   32   0   0 数字货币区块链
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~