Fly_鹏程万里

专注于IT技术,只做IT技术的分享与研究,欢迎广大IT技术人员参与分享与讨论!...

排序:
默认
按更新时间
按访问量
RSS订阅

Solidity语言学习笔记————45、应用二进制接口(ABI)说明

应用二进制接口(ABI) 说明基本设计在以太坊生态系统中, 应用二进制接口Application Binary Interface(ABI) 是从区块链外部与合约进行交互以及合约与合约间进行交互的一种标准方式。 数据会根据其类型按照这份手册中说明的方法进行编码。这种编码并不是可以自描述的,而是需要...

2018-07-11 22:30:29

阅读数 117

评论数 0

Solidity语言学习笔记————44、合约的元数据

合约的元数据Solidity编译器自动生成JSON文件,即合约的元数据,其中包含了当前合约的相关信息。 它可以用于查询编译器版本,所使用的源代码,应用二进制接口Application Binary Interface(ABI) 和 以太坊标准说明格式Ethereum Nature Specific...

2018-07-11 22:30:24

阅读数 117

评论数 0

Solidity语言学习笔记————43、安全考量

安全考量尽管在通常情况下编写一个按照预期运行的软件很简单, 但想要确保没有人能够以出乎意料的方式使用它就困难多了。在 Solidity 中,这一点尤为重要,因为智能合约可以用来处理通证,甚至有可能是更有价值的东西。 除此之外,智能合约的每一次执行都是公开的,而且源代码也通常是容易获得的。当然,你总...

2018-07-10 14:39:32

阅读数 79

评论数 0

Solidity语言学习笔记————42、提示和技巧

提示和技巧在数组中使用delete,就是删除数组中的所有元素。使用较短的类型和结构元素,短类型分组在一起进行排序。SSTORE操作可能合并成一个单一的SSTORE,这可以降低gas的成本(sstore消耗5000或20000 gas,所以这是你必须优化的原因)。使用天gas的价格估算功能(优化器 ...

2018-07-08 00:09:04

阅读数 118

评论数 0

Solidity语言学习笔记————41、内存布局

内存布局(Layout in Memory)Solidity预留了4个32字节大小的槽位:0x00 - 0x3f: 哈希方法的暂存空间(scratch space)0x40 - 0x5f: 前已分配内存大小,也称空闲内存指针(free memory pointer)0x60 - 0x7f: 零槽(...

2018-07-08 00:08:59

阅读数 103

评论数 0

Solidity语言学习笔记————40、存储中状态变量的布局

存储中状态变量的布局(Layout of State Variables in Storage)静态尺寸大小的变量(除了映射和动态尺寸大小的数组类型(的其他类型变量))在存储中,是从位置0连续存储。如果可能的话,不足32个字节的多个条目被紧凑排列在一个单一的存储块,参见以下规则:在存储块中的第一项...

2018-07-08 00:08:54

阅读数 54

评论数 0

Solidity语言学习笔记————39、独立汇编

独立汇编(Standalone Assembly)上面介绍的在Solidity中嵌入的内联汇编语言也可以单独使用。实际上,它是被计划用来作为编译器的一种中间语言。在这个目的下,它尝试达到下述的目标:使用它编写的代码要可读,即使代码是从Solidity编译得到的。从汇编语言转为字节码应该尽可能的少坑...

2018-07-08 00:08:49

阅读数 58

评论数 0

Solidity语言学习笔记————37、Using for

指令using A for B;用来附着库里定义的函数(从库A)到任意类型B。这些函数将会默认接收调用函数对象的实例作为第一个参数。语法类似,python中的self变量一样。using A for *的效果是,库A中的函数被附着在做任意的类型上。在这两种情形中,所有函数,即使那些第一个参数的类型...

2018-07-08 00:08:33

阅读数 50

评论数 0

Solidity语言学习笔记————36、 库

库(Libraries)库与合约类似,但它的目的是在一个指定的地址,且仅部署一次,然后通过EVM的特性DELEGATECALL(Homestead之前是用CALLCODE)来复用代码。这意味着库函数调用时,它的代码是在调用合约的上下文中执行。使用this将会指向到调用合约,而且可以访问调用合约的s...

2018-07-08 00:08:28

阅读数 48

评论数 0

Solidity语言学习笔记————35、抽象合约和接口

抽象合约(Abstract Contracts)合约函数可以缺少实现(请注意,函数声明头被;终止),见下面的例子:pragma solidity ^0.4.0; contract Feline { function utterance() public returns (bytes32)...

2018-07-08 00:08:19

阅读数 86

评论数 0

Solidity语言学习笔记————33、事件(Events)

事件(Events)事件是使用EVM日志内置功能的方便工具,在dapp的接口中,它可以反过来调用Javascript的监听事件的回调。事件在合约中可被继承。当被调用时,会使参数存储到交易的日志中——一种区块链上的特殊数据结构。这些日志与合约的地址关联,并合并到区块链中,只要区块可以访问就一直存在。...

2018-07-08 00:08:13

阅读数 90

评论数 0

Solidity语言学习笔记————34、继承

继承Solidity通过复制包括多态性的代码来支持多重继承。 除非合约是显式给出的,所有的函数调用都是虚拟的,绝大多数派生函数可被调用。 当一个合约继承自多个合约时,只会在区块链上创建单个合约,并将所有父合约中的代码复制到创建的合约中。 Solidity的继承与Python非常相似,特别是多继承。...

2018-07-03 22:05:36

阅读数 65

评论数 0

Solidity语言学习笔记————32、创建合约

Solidity的合约类似于面向对象语言中的类。它们包含存放持久化数据的状态变量和可修改这些变量的函数。调用不同的合约实例上的函数将执行EVM函数调用,从而切换上下文,使得状态变量不可访问。创建合约(Creating Contracts)合约可以从“外部”创建,也可以由Solidity合约创立。像...

2018-07-03 22:05:31

阅读数 84

评论数 0

Solidity语言学习笔记————30、函数重载

函数重载(Function Overloading)合约可以有多个同名但不同输入参数的函数。这也适用于继承的函数。下面示例展示了合约A中对函数f的重载。pragma solidity ^0.4.16; contract A { function f(uint _in) public pu...

2018-07-03 22:05:24

阅读数 86

评论数 0

Solidity语言学习笔记————28、纯函数

纯函数(Pure Functions)当承诺不读取或修改状态时,函数可以声明为pure。除了上面解释的修改状态语句的列表之外,以下语句被认为是读取状态:从状态变量读取。访问this.balance或<address>.balance。访问block, t...

2018-07-02 16:33:10

阅读数 54

评论数 0

Solidity语言学习笔记————27、视图函数

视图函数(View Functions)当承诺不修改状态时,函数可以声明view。下面的语句被认为是修改状态:写入状态变量。发生事件。创建其他合约。使用自毁selfdestruct。通过调用发送Ether。调用任何未标记view或pure的函数。使用低级调用(low-level calls)。使用...

2018-07-02 16:33:03

阅读数 52

评论数 0

Solidity语言学习笔记————26、Assert, Require, Revert 和 Exceptions

Assert, Require, Revert 和 ExceptionsSolidity使用state-reverting异常来处理错误。 这种异常将回滚当前调用(及其所有子调用)状态的所有变化,并将错误标志给调用者。 函数assert和require可以用于检查条件,如果条件不满足则抛出异常。 ...

2018-07-02 16:32:57

阅读数 98

评论数 0

Solidity语言学习笔记————26、回退函数

回退函数(Fallback Function)一个合约可以有一个匿名函数。此函数不能有参数,不能返回任何值。如果没有其他函数与给定的函数标识符匹配,或者如果根本没有提供数据,将执行一个合约的调用。此外,每当合同接收没有数据的纯Ether时,会执行回退函数。此外,为了接收Ether,回退函数必须标记...

2018-07-02 16:32:47

阅读数 109

评论数 0

Solidity语言学习笔记————25、作用域和声明

作用域和声明(Scoping and Declarations)已声明的变量将具有其字节表示为全0的初始值。变量的初始值是任何类型的典型“零状态”(“zero-state)。例如,bool的初始值为false。uint或int类型的默认值为0。对于静态大小的数组和bytes1到bytes32,每个...

2018-07-02 16:31:36

阅读数 69

评论数 0

Solidity语言学习笔记————24、输入输出参数

输入参数和输出参数(Input Parameters and Output Parameters)与JavaScript一样,函数可以将多个参数作为输入,但与Javascript和C不同的是,Solidity的函数可以返回任意数量的参数作为输出。输入参数(Input Parameters)输入参数...

2018-07-02 16:31:30

阅读数 94

评论数 0

提示
确定要删除当前文章?
取消 删除