EVM 内存

EVM的内存可以分为几部分,其中合约所在的空间我们称之为storage,该部分是永久保存的;memory部分则不会永久保存。他们上面的array也有不同的特点:
storage 上面的可变长array可以动态的改变长度(如array.length = 20 则数组长度变为20), memory 上面的array则不可以,进行类似操作。
当进行赋值或者参数传递时,不同位置的变量传递方式也会不同,如memory上面的变量赋值给storage上面的变量就会完全复制一份,反之依然。memory到memory或者storage到storage则只会传递引用
function test(uint[] _x) //直接调用该函数时是值传递
function test(uint[] storage _x) //显示指定参数类型为storage则会进行refrence传递,不过这种改变默认参数类型的函数只能是internal or private(如果不指定,则编译器会将其转换成internal)

event 可以起到记录log的作用
event transfer(address from, address to, uint value);
event transfer(address indexed from, address to, uint value);

上面两个的不同之处在于 from前面加了一个indexed;
默认event是现在receipt的data部分,加上indexed以后就会写到部分;
需要注意的是topics最多只能有四个,event name占了一个,所以一个event最多只能有三个indexed型变量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,997评论 19 139
  • 翻译原文 date:20170726 在Storage中状态变量的层级 静态大小的变量(除了mapping和动态大...
    gaoer1938阅读 282评论 0 1
  • 翻译原文date:20170617 Solidity是静态类型语言,这意味着每个变量的类型必须在编译的时候指定(或...
    gaoer1938阅读 698评论 0 0
  • 下面这些场景你应该不陌生: 但当涉及到刻意练习很少人做得好而且大多数人根本不做所以你开始得越早越好刻意练习可能固化...
    麦风玄阅读 363评论 0 1
  • 有些付出真的不知道有什么意思,没有一丁点儿的温暖,非常让人心寒。
    燕小霜阅读 179评论 0 0