智能合约就是用电子版合同、数字化合约、智能化合约编写程序;简单地说就是,合同合约用代码编写程序,该代码一旦写出来就公开,不能修改,不能篡改。 Dapp=前端+智能合约+token(通证经济),通常Dapp的定义是,在分布式网络中运行,参与者的信息受到保护,是通过网络节点进行集中操作的应用。 Web3.0的纽带作用: 与DAPP浏览器相辅相成的是其底层网络架构Web3.0,这是和信息互联网时代传统浏览器基于的Web2.0完全不同的体系架构。区块lian技术,尤其是ETH的出现使Web3.0成为基于区块lian进行价值传递的基础网络。 从技术架构来看,Web3.0的体系架构更为复杂,它在传统信息互联网的基础上,增加了价值(Token)的传递。 合约是代码(它的功能)和数据(它的状态)的集合,存在于ETH区块lian的特定地址。合约账户能够在彼此之间传递信息,进行图灵完备的运算。合约依靠被称作ETH虚拟机(EVM)字节代码(ETH特有的二进制格式)上的区块lian运行。 Solidity智能合约代码结构: 引用其它源文件 全局引入 import“filename”; 自定义命名空间引入 importas symbolName from“filename” 分别定义引入 import{symbol1 as alias,symbol2}from“filename” 非es6兼容的简写语法 import“filename”as symbolName 等同于上述 importas symbolName from“filename” 关于路径 引入文件路径时要注意,非.打头的路径会被认为是绝对路径,所以要引用同目录下的文件使用 import“./x”as x 也不要使用下述方式,这样会是在一个全局的目录下 import“x”as x; 为什么会有这个区别,是因为这取决于编译器,如果解析路径,通常来说目录层级结构并不与我们本地的文件一一对应,它非常有可能是通过ipfs,http,或git建立的一个网络上的虚拟目录。 编译器解析引用文件机制 各编译器提供了文件前缀映射机制。 可以将一个域名下的文件映射到本地,从而从本地的某个文件中读取 提供对同一实现的不同版本的支持(可能某版本的实现前后不兼容,需要区分) 如果前缀相同,取最长, 有一个”fallback-remapping”机制,空串会映射到“/usr/local/include/solidify” solc编译器: 命令行编译器,通过下述命令命名空间映射提供支持 context:prefix=target 上述的context:和=target是可选的。所有context目录下的以prefix开头的会被替换为target。 举例来说,如果你将github.com/ethereum/dapp-bin拷到本地的/usr/local/dapp-bin,并使用下述方式使用文件 import“github.com/ethereum/dapp-bin/library/iterable_mapping.sol”as it_mapping; 要编译这个文件,使用下述命令: solc github.com/ethereum/dapp-bin=/usr/local/dapp-bin source.sol 另一个更复杂的例子,如果你使用一个更旧版本的dapp-bin,旧版本在/url/local/dapp-bin_old,那么,你可以使用下述命令编译 solc module1:github.com/ethereum/dapp-bin=/usr/local/dapp-bin modeule2:github.com/ethereum/dapp-bin=/usr/local/dapp-bin_old source.sol 需要注意的是solc仅仅允许包含实际存在的文件。