oracle先知javascript
pragma solidity ^0.4.11; import "github.com/oraclize/ethereum-api/oraclizeAPI.sol"; contract ExampleContract is usingOraclize { string public EURGBP; function __callback(bytes32 myid, string result) { EURGBP = result; } function updatePrice() payable { oraclize_query("URL", "json(https://www.therocktrading.com/api/ticker/BTCEUR).result.0.last"); } }
oracle官方文档html
contract Test{ event Demo (string log); function haha() public { emit Demo("ahaha"); } }
https://www.ethereum.org/token
编写转帐的前端逻辑
添加数字token到metamaskjava
1.开户:用户在交易所注册, 交易所给用户建立一个新的地址(用户无私钥);node
2.充值:用户打钱到交易所分配的地址里面。用户只享有地址,却不拥有对应密钥,密钥仍在交易所手中!(核心)python
3.自动转帐:交易所分配地址获得钱后,自动转帐到中心交易所地址.react
4.交易:内部币币交易. 效率很高.相似于如今的证券中心.git
5.提现或提币:提币的过程是由交易所的地址转向用户钱包地址。程序员
1.充值时,用户钱包地址充值到交易所分配给用户的地址,须要消耗GAS,费用由用户直接承担;github
2.自动转帐时,交易所分配给用户的地址自动转入交易所地址,也须要消耗GAS,费用由交易所直接承担,目前基本上主流交易所均采用充值免费的模式;
3.交易时,交易所会收取手续费,通常是总交易金额的0.1% (个别交易所为0.2%,使用交易所代币打5折),费用由用户直接承担;
4.提现时,交易所地址充值到用户钱包地址,也须要消耗GAS,交易所通常直接收取用户0.01ETH做为手续费。
因而可知,中心化交易所交易和体现过程都是收手续费的。
3、中心化交易所优点:
1.中心化交易所在技术实现上是有传统成熟解决方案的,即便面对海量大并发实时交易,依旧能够给用户提供很好的服务体验。
2.中心化交易所庞大的用户量和交易量,也带来了足够的交易深度,提供了充分的流动性。
3.中心化交易所的交易成本从经济上看是由市场环境和监管政策决定的。它能够根据运营策略来制定变化的手续费规则。为了鼓励用户高频交易,甚至能够不收取交易手续费。但通常都会对资产提现进行收取手续费。
4.因为中心化交易所的全部交易实质都是IOU记帐,因此从技术上看交易成本是很是低的。
4、中心化交易所劣势:
1.人为因素——中心化信用背书,会面临包括内部运营风险、商业道德风险、资产盗用等严重影响用户资产安全的风险。有名的案例也比比皆是,如:
2013年10月比特币交易所GBL忽然关闭,负责人捐款跑路,用户损失2000万美圆资产。
2014年2月Mt.Gox85万比特币监守自盗,大名鼎鼎的门头沟事件
2015年2月3日台湾比特币交易所Yes-BTC被盗435个比特币,网站声明其董事长何兆翼不翼而飞。
2016年4月7日交易所ShapeShift的钱包被黑客盗窃,后证明该盗窃行为是监守自盗,黑客受一名离职员工的指使。
2017年1月比特币亚洲闪电交易中心卷款跑路,卷走上亿资金。
2017年7月BTC-e交易所下线,随后域名被封禁,运营者Alexander Vinnik涉嫌洗钱、盗窃被捕。
2017年12月10日加密货币交易平台币集网网站关闭,疑似跑路,用户已报案维权。
2.技术因素——资产的第三方背书集中式托管,会招致巨大的黑客攻击风险,至关考验网站技术能力和紧急应对能力,有名的案例也比比皆是,如:
2014年3月1日美国加密货币交易所Poloniex被盗,损失总量12.3%的比特币。
2014年8月15日加密货币交易所比特儿微博称被黑客盗走5000万个NXT,价值约1000多万元人民币。
2015年1月10日比特币交易所Bitstamp遭受黑客攻击,损失价值510万美圆的比特币。
2016年5月香港数字交易所Gatecoin被盗18万个ETH,250个比特币。
2016年6月众筹项目The Dao因智能合约漏洞遭黑客攻击被盗360万个ETH。
2016年8月香港Bitfinex因为网站出现安全漏洞,12万个比特币被盗,当时价值6500万美圆。
2017年7月韩国加密货币交易所Bithumb被盗,据评估损失达数十亿韩元。
2017年7月加密货币交易所CoinDash遭黑客盗走大量以太坊,损失达700万美圆。戏剧性的是黑客分别于2017年9月与与今年2月,分两次将被盗以太坊原数返还。
2017年12月19日Youbit第二次遭受黑客攻击,损失17%的数字资产,并宣告破产,用户补偿工做暂无后续进展。
2018年1月26日加密货币交易所Coincheck被黑客盗走大量NEM,损失约5.3亿美圆。
2018年2月10日意大利交易所BitGrail遭黑客攻击,损失了1700万个NANO币,总价值约1.7亿美圆。
2018年3月7日 加密货币交易所Binance遭受黑客攻击,所幸没有出现丢币状况。
https://github.com/ethereum/mist/releases/tag/v0.11.1
两个图形化版本,都是基于命令行版本的geth
一、建立工做目录
新建目录 geth
建立配置文件 gensis.json
二、配置创世区块配置文件
{ "config": { "chainId": 123123, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x40000", "extraData" : "", "gasLimit" : "0xffffffff", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "alloc": { } } 注:chainid 为区块链网络id,对应启动时的networkid chainid 1为主网 2为Morden 3为ropsten 4为rankybe 这些id保留
三、建立存储目录及初始化创世区块
建立目录用于存放区块链数据
建立 blockdb
执行初始化命令
geth --datadir "./blockdb" init gensis.json
Fatal: invalid genesis file: json: cannot unmarshal hex string without 0x prefix into Go struct field Genesis.extraData of type hexutil.Bytes 若执行过程当中出现以上错误提示,请检查==gensis.json==文件。 其中 chaindata 中存放的时 区块数据,keystore 中存放的是 帐户数据。
四、启动私链初始节点
执行如下命令启动私链
geth --datadir "./blockdb" --rpc --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 123123 --port 30303 --verbosity 4 console
rpccorsdomain 这里配置 “ * ”是容许经过任意域名访问,也能够指定具体的域名。
verbosity 日志等级:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)。
==error==
Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified
出现场景,gensis.json中节点alloc未配置帐号,而启动私链时需指定一个矿工帐号,不然回出现该错误。
Error: etherbase missing: etherbase address must be explicitly specified
缘由是当前环境没有帐户,须要创建一个帐户
error:Fatal: Unable to attach to remote geth: no known transport for URL scheme "c",解决办法使用以下命令行连接console
geth attach \\.\pipe\geth.ipc
五、经常使用命令
以太坊的JavaScript控制台中内置了一些对象,经过这些对象咱们能够很方便的和以太坊进行交互,这些内置对象包括:
eth:提供了操做区块链项目的方法
net:提供了查看p2p网络状态的相关方法
admin:提供了管理节点相关方法
miner:提供了启动和中止挖矿的方法
personal:提供了管理帐户的方法
txpool:提供了查看交易内存池的方法
web3:除了包含以上对象中有的方法外,还包含一些单位换算的方法。
下面几个步骤以一个完整的流程介绍一些经常使用命令,即建立用户->查看用户->挖矿->交易。
建立帐户 personal.newAccount('123456') 查看帐户 eth.accounts eth.accounts[0] 查看余额 eth.getBalance(eth.accounts[0]) web3.fromWei(eth.getBalance(eth.accounts[0]),'ether') 此时帐户数据为0 挖矿命令: miner.start() miner.stop() 交易 首先交易需2个帐户,因此使用newAccount命令再建立一个帐户; 其次交易以前需先解锁,不然会报错。 解锁命令: personal.unlockAccount(eth.accounts[0],'123456') 转帐命令: eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether")}) 此时查看另外一个帐户,能够看到已存在1eth。 若转帐时若未开启挖矿,此时交易处于待打包交易,因此另外一个帐户查不到转帐的数据,能够经过==txpool.status== 查看状态。
https://ethereum.gitbooks.io/frontier-guide/content/web3.html#web3ethsyncing
* 区块时间。比特币出块时间是平均10分钟,而以太坊约是15-30秒。 * 挖矿奖励: 以太币奖励为5以太币,而且每次出块奖励不减小,大都会后改成了3个以太币。比特币是每次减半,第一块的是50个比特币。以后每一块都减半 * 叔块(uncle block)奖励。由于以太坊的出块时间很短,很容易出现两个节点同时出块的状况,为了使得全部同时出块的节点均可以获得奖励,减小无用矿工。
在区块中传递的合约,或者说是传递的字符串,不过不是单纯的字符串和信息,而是一段可执行的脚本,好比说,有触发条件,有交互能力 1:公信力好,代码是公开透明的,庄家是不能做弊的(也能够说没有庄家),并且没有中央服务器;2:赌博过程很难被监控被追踪,一旦入局不可逆转,并且金额走向没法追踪 特色:一、公开透明的策略,任何人均可以检查其代码逻辑可靠性;二、即时与区块链代币支付结合,典型如以太坊。三、去中心化和持续生命力,代码发布后,即使发布方倒闭,解散,其产品依然会在链上运行。
虚拟机都是跨平台的 以太坊实现了一个叫Ethereum Virtual Machine(EVM)的运行时环境,相似JVM,它的主要工做是执行智能合约的字节码,EVM“位于区块链之上”,而JVM主要是执行目标代码(字节码),内存回收机制好像也不同
强类型编程语言, javascript和python是弱类型编程语言 Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。 Solidity是以太坊的首选语言,语法接近于Javascript,是一种面向对象的语言,这下降了学习门槛,易于被掌握和使用,由于JavaScript是Web开发者的经常使用语言。所以,Solidity充分利用了现有数以百万程序员已掌握JavaScript这一现状。 但做为一种真正意义上运行在网络上的去中心合约,它又有不少的不一样,下面列举一些: 以太坊底层是基于账户,而非UTXO的,因此有一个特殊的Address的类型。用于定位用户,定位合约,定位合约的代码(合约自己也是一个账户)。 因为语言内嵌框架是支持支付的,因此提供了一些关键字,如payable,能够在语言层面直接支持支付,并且超级简单。 存储是使用网络上的区块链,数据的每个状态均可以永久存储,因此须要肯定变量使用内存,仍是区块链。 运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。由于原来一个简单的函数调用变为了一个网络上的节点中的代码执行,分布式的感受。 最后一个很是大的不一样则是它的异常机制,一旦出现异常,全部的执行都将会被回撤,这主要是为了保证合约执行的原子性,以免中间状态出现的数据不一致。
Vitalik Buterin:目前的挑战主要是技术性问题,大致分为如下三类: 第一,可扩展性。咱们要增长区块链的容量,这一性能主要反映在每秒可处理的原始交易数。目前以太坊每秒钟可处理15笔交易左右,但要知足主流采用,还须要数千倍的提高。 第二,隐私性。咱们须要努力确保在使用区块链应用时不会泄露我的隐私数据。 第三,安全性。 咱们须要在技术上帮助社区最大程度地下降数字资产被盗的风险,私钥遗失、智能合约代码漏洞等风险也要最小化。 在实用性方面也存在着一些挑战,但相较于核心协议和平台自己,每一个单独应用的开发团队对实用性有着更大的影响 。 但目前咱们已经有不少可靠的解决方案来应对以上全部的挑战 。例如,咱们有专门的团队在研究状态通道技术,分片技术和Plasma技术来解决可扩展性方面的问题。拜占庭硬分叉已经完成,并且它的加密功能也达到可用状态,但在构建基础设施以及利用它们的方面还有不少细节工做要作。
nonce:发送者发送交易数的计数
gasPrice:发送者愿意支付执行交易所需的每一个gas的Wei数量
gasLimit:发送者愿意为执行交易支付gas数量的最大值。这个数量被设置以后在任何计算完成以前就会被提早扣掉
to:接收者的地址。在合约建立交易中,合约帐户的地址尚未存在,因此值先空着
value:从发送者转移到接收者的Wei数量。在合约建立交易中,value做为新建合约帐户的开始余额
v,r,s:用于产生标识交易发生着的签名
data(可选域,只有在消息通讯中存在):消息通话中的输入数据(也就是参数)。
在以太坊状态全局范围内的合约能够与在相同范围内的合约进行通讯。他们是经过“消息”或者“内部交易”进行通讯的。咱们能够认为消息或内部交易相似于交易,不过与交易有着最大的不一样点—它们不是由外部拥有帐户产生的。相反,他们是被合约产生的。
参考众筹项目的fundingFactory , 由智能合约部署智能合约.
Mist
说到以太坊钱包,第一个要说的固然就是Ethereum官方钱包+浏览器 Mist。Mist是一个钱包(全节点钱包通俗的来讲就是同步了所有的以太坊区块信息的钱包)。也就是说打开钱包后,电脑会自动同步所有的以太坊区块信息,若是设备和网络的条件过关的状况下,目前(17年9月8日)大概须要半天左右的时间。
优点:
安全度高,不须要通过第三方发起交易
节点未同步完成以前没法查看地址余额
劣势:
没法调整Gas Price
对网络要求高,须要链接节点,才能发起交易
ethereum wallet
优点:
安全度高,不须要通过第三方发起交易
劣势:
对网络要求高,须要链接节点才能发起交易
MyEtherWallet
MyEtherWallet 做为一个轻钱包,上手难道不大,无需下载,在直接在网页上就能够完成全部的操做。在MyEtherWallet上生成的私钥由用户自我保管,平台方并没有备份。
优点:
方便快捷,连网便可发起交易
劣势:
交易时须要上传私钥(使用时认准惟一网址: https://www.myetherwallet.com 谨防钓鱼网站 )
MetaMask的钱包属性偏弱,更多的是起到使Chrome浏览器兼容以太坊网络的做用
优势:
经过添加钱包插件将Chrome变成兼容以太坊的浏览器
缺点:
不支持自动显示Erc20代币。(须要用户本身添加代币的智能合约地址)
以太坊客户端Geth在以太坊智能合约开发中最经常使用的工具,一个多用途的命令行工具。
能够用来搭建以太坊私链. 具体指令见上面内容.
web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地帐户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。
gas能够有效的防止恶意攻击,通证经济学.
智能合约,就是一些代码,运行整个分布式网络中。因为网络中的每个节点都是一个全节点。这样的好处是容错性强,坏处是效率低,消耗资源与时间。由于执行计算要花钱,而要执行的运算量与代码直接相关。因此,每一个在网络运行的底层操做都须要必定量的gas。gas只是一个名字,它表明的是执行所须要花费的成本(注:因为以太坊是图灵完备的,随便一个死循环就将致使网络不可用,因此引入了gas的概念)。整个分布式网络引入了强制限制,来避免停机问题。所以若是你写一个死循环,当gas耗尽后,网络就会拒绝执行接下来的操做,而且回滚你以前的全部操做。
gas的价格由市场决定,相似于比特币的交易费机制。若是你的gas价格高,节点则将优先由于利益问题打包你的交易。
通常来讲,在Ethereum中计算和存储东西比在传统环境中作的更为昂贵,可是,Ethereum为您的代码提供了上述咱们讨论过的那些好的属性,这多是同样有价值的。
通常来讲,在以太坊网上读取状态是免费的,只有写入状态是收费的
这些gas的钱到底去了哪里?发送者在gas上花费的全部钱都发送给了“受益人”地址,一般状况下就是矿工的地址。由于矿工为了计算和验证交易作出了努力,因此矿工接收gas的费用做为奖励。
一般,发送者愿意支付更高的gas price,矿工从这笔交易总就能得到更多的价值。所以,矿工也就更加愿意选择这笔交易。这样的话,矿工能够自由的选择一笔交易本身愿意验证或忽略。为了引导发送者应该设置gas price为多少,矿工能够选择建议一个最小的gas值他们愿意执行一个交易。
为了赚取以太币,你必须有coinbase 地址。这个etherbase默认为你生成的第一个帐户。若是你没有etherbase地址,geth –mine就不会开启。
挖矿必需要设置 coinbase的.
18位 ERC20规范建议都是20位.
不论何时只要多个路径产生了,一个”分叉“就会出现。咱们一般都想避免分叉,由于它们会破坏系统,强制人们去选择哪条链是他们相信的链。
为了肯定哪一个路径才是最有效的以及防止多条链的产生,以太坊使用了一个叫作“GHOST协议(GHOST protocol.)”的数学机制。
简单来讲,GHOST协议就是让咱们必须选择一个在其上完成计算最多的路径。区块号越大,路径就会越长,就说明越多的挖矿算力被消耗在此路径上以达到叶子区块。使用这种推理就能够容许咱们赞同当前状态的权威版本。
「前沿」是以太坊的最第一版本, 只有命令行界面,主要使用者是开发者
「家园」增长了相似 Windows系统那样的图形界面普通用户也能够方便地体验以太坊的功能
「大都会」加入了—个像谷歌浏览器那样的浏览器,除了使用方便以外,它还拥有一个强大的应用商店,能够安装插件实现更多功能。第三个版本在2017年年末发布了出来
「宁静」目前尚未肯定发布时间,预计它会将前三个版本采用的工做量证实(Pow) 共识机制切换到混合的共识机制
简单说就是,在不透露交易细节的状况下验证了交易记录。零知识证实能够有效保护交易隐私,隐藏交易来源并防止追溯,同时也能保证交易是安全的,由于任何试图修改交易的行为都没法经过验证。
POS 就是基于拥有的数量和时间得到证实的共识算法,它不像POW注重算力竞争,而是强化了拥有的意义,好比在银行存的钱越多,存的越长 则收益越大
缺点:POS也存在一些问题,好比马太效应,最后系统决策和收益依然会集中在少数寡头手里,除此以外,当矿工热潮退却后,如何保证有效的工做节点数量来完成运算,也是值得观察的
以太坊中PoS协议的实现, 刚开始每100个区块将有一个采用PoS协议挖出
在的以太坊有两类帐户:即外部帐户和合约帐户,以太坊正在试图模糊两者的界限,即你能够同时拥有合约帐户和外部帐户,这种作法本质上就是让用户按照合约帐户的格式来定义外部帐户。
为了确保以太坊的矿工能加入到新链条中来,开发团队引入了"难度炸弹"机制。它会使难度系数呈指数增长以致于让挖矿变得几乎不可能的。
所谓硬分叉是分叉方约定,在某个区块节点开始,启用新的系统架构继续前进,再也不和主链保持一致,但同时继承了该节点前的全部区块。在这个节点以后,双方各自挖各自的矿,各自爆各自的区块,各走各的路。好比:公司有一本对公帐本,有一本内部帐本,两个帐本彻底独立
能解决什么问题:在我看来有两点:1.黑客发起针对The DAO智能合约多个漏洞的攻击,其中也包含了递归调用漏洞,并向一个匿名地址转移了3600万个以太币,致使以太坊选择硬分叉启用新的系统架构;2.不少人为了发行ICO经过以太坊割点韭菜的钱
缺点:硬分叉不须要主链容许或经过,任何人均可以发起硬分叉,均可以基于本身的理解和判断发起一个新的分支,但对于信仰者来讲,每一个分叉都是对共识的撕裂,是在破坏共识。共识算法自己就是防范故障或者恶意分叉的,而人为强行分叉显然是算法所不能处理的。
区块链的价值在于共识, 全部人达成一致,这种一致性带来的价值是没法衡量的, 为何只有比特币有价值?如今事实给了大家一些答案,你能够复制比特币的代码,创造无数个比特币,可是比特币背后的生态(开发者、矿工、交易所、商家、用户)你没法复制。就像若是把淘宝、微信的源码给你,你能再造一个淘宝和微信吗?
代币合约标准,一系列经过以太坊智能合约发布的代币制定了代币发放的通用规则。该标准是目前经过ICO发行代币的基础准则。
该标准可以确保基于以太坊的代币在整个生态系统中以一种可预测的方式进行,使去中心化应用程序和智能合约能够在整个平台上彼此协做,全部代币都遵循一个固定的安全标准。
ERC-20 标准是在2015年11月份推出的,使用这种规则的代币,表现出一种通用的和可预测的方式。简单地说,任何 ERC-20 代币都能当即兼容以太坊钱包, 因为交易所已经知道这些代币是如何操做的,它们能够很容易地整合这些代币。这就意味着,在不少状况下,这些代币都是能够当即进行交易的。
是一个区块的父区块与当前区块父区块的父区块是相同的。
因为以太坊区块生产时间(大概15秒左右)比比特币(大概10分钟左右)要快不少。更短的区块生产时间的一个缺点就是:更多的竞争区块会被矿工发现。
这些竞争区块一样也被称为“孤区块”(也就是被挖出来可是不会被添加到主链上的区块)
Ommers的目的就是为了帮助奖励矿工归入这些孤区块,Ommer区块会收到比全区块少一点的奖励。
经过向智能合约提供数据,它现实世界和区块链之间的桥梁
公有链是目前咱们熟知的比特币,以太坊,瑞波币这些,每一个人均可以参与,每一个人均可以在上面进行交易,若是支持智能合约,每一个人也均可以发布本身的应用。
联盟链是指一些愿意彼此实现共信的机构和组织共同组建的,为各自机构提供共识信用和价值传递的平台,这样只要联盟不存在一家独大的状况,仍是能够实现共识基础,并且相对来讲可能价值更大一些,我其实以为联盟链是有一些市场机会的。
用户本身搭建的私有链, 私有链缺少共识,也须要公权机构背书,与传统中心化相比价值有限,只能说防黑客篡改可能略微有点意义。
Ropsten
Kovan测试网络 - 仅parity钱包支持,使用PoA共识
Rinkeby测试网络 - 仅parity钱包支持,使用PoA共识
这是一个组织(就像,一群人),其中,使用代码来保证最终的强制执行,而不是使用传统的法律文件。这群人使用智能合约来作常见组织作的全部的事情,好比在某件事上进行投票,好比决定是否对什么进行投资等等。
反作用是决策,管理,以及对什么进行投资的结果将会不可改变的存储在区块链上。
智能合约存储数据的位置
solidity编程中变量是值传递仍是引用传递
共识算法是计算中的过程,其在区块链过程当中达成单数据值的协议。这些算法旨在提供涉及众多不可靠节点的网络可靠性,以防止双重花费。
有不一样类型的算法,如PoW,PoS,DPoS,PoA
一个节点本质上是一台有以太坊客户端链接到网络的计算机。
etherscan.io
合同的ABI和字节码。
ABI是DApps用于调用合同的合同的公共接口的描述。ABI是合约的公开接口描述对象,被DApps用于调用合约的接口。
EVM须要字节码才能执行合同代码。
web3.js web3j mist metamask
不受限制。可使用任何技术来开发DApp的前端,好比HTML,CSS,JS,Java,Python...
Web3.js库。
合约的ABI和字节码。
节点上的EVM只能执行合约的字节码。
由于Metamask会注入一个web3对象,它覆盖其余的web3设置。
主要是由于1.x的异步调用使用Promise而不是回调,能够经过async和await的方式调用. Promise目前在javascript世界中 是处理异步调用的首选方案。
web3.eth.getAccounts
.send发送交易并支付费用,而.call查询合约状态。
不对,这样发送的是1 wei。 交易中老是以wei为单位。
可使用web3.utils.toWei(1,'ether')。
必须指定from字段,即发送帐户地址。 其余一切都是可选的。
不对,也能够用它调用合约方法。
分片,分区。
它是静态类型语言,这意味着类型在编译时是已知的。
contract
合约实例是区块链上已部署的合约。
都是面向对象, 语法有些相同之处, Solidity支持多重继承,可是要慎用
Solidity编译器的版本,好比指定为^ 0.4.8。 这是必要的,由于这样能够防止在使用其余版本的编译器时引入不兼容性错误。
主要由存储变量、函数和事件组成。
有构造函数、payable函数、修改合约状态的函数和只读的view函数。
将多个合约定义放入单个Solidity文件是彻底正确的。跟java内部类相似
一个合约能够调用另外一个合约,也能够继承其余合约。
contract Animal { function eat() { } } contract dog is Animal { }
contract MyContract { // part 1 uint count; uint[] totalPoints; function localVars(){ // part 2 uint[] localArr; // part 3 uint[] memory memoryArr; // part 4 uint[] pointer = totalPoints; } } 第1部分 - Storage 第2部分 - memory 第3部分 - Memory 第4部分 - Storage