<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/624f35dc6caf596192c59a3e/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/624f35dc6caf596192c59a3e/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">汇智网<span class="ff2"> <span class="_ _0"> </span>Hubwiz.com<span class="ff3"> <span class="_ _1"> </span> <span class="_ _2"> </span></span>Solidity<span class="_ _3"> </span></span>官方文档中文版<span class="ff3"> </span></div><div class="t m0 x2 h3 y2 ff3 fs0 fc0 sc0 ls0 ws0"> <span class="_ _3"> </span><span class="ff4">1</span> <span class="ls1">/ <span class="ff4 ls2">137</span></span> </div><div class="t m0 x1 h3 y3 ff3 fs0 fc0 sc0 ls0 ws0"> </div><div class="t m0 x1 h4 y4 ff5 fs1 fc1 sc1 ls3 ws0">导读<span class="ff6 sc0 ls0"> </span></div><div class="t m0 x1 h5 y5 ff1 fs2 fc2 sc0 ls0 ws0">以太<span class="_ _4"></span>坊是<span class="_ _4"></span>什么<span class="_ _4"></span>?<span class="_ _4"></span><span class="ff2"> </span></div><div class="t m0 x1 h5 y6 ff1 fs2 fc2 sc0 ls0 ws0">以太<span class="_ _4"></span>坊是<span class="_ _4"></span>一个<span class="_ _4"></span>全新<span class="_ _4"></span>开<span class="_ _4"></span>放的<span class="_ _4"></span>区块<span class="_ _4"></span>链平<span class="_ _4"></span>台,<span class="_ _5"></span>它<span class="_ _4"></span>允许<span class="_ _4"></span>任何<span class="_ _4"></span>人在<span class="_ _4"></span>平台<span class="_ _4"></span>中建<span class="_ _4"></span>立和<span class="_ _4"></span>使用<span class="_ _4"></span>通过</div><div class="t m0 x1 h5 y7 ff1 fs2 fc2 sc0 ls0 ws0">区块<span class="_ _4"></span>链技<span class="_ _4"></span>术运<span class="_ _4"></span>行的<span class="_ _4"></span>去<span class="_ _4"></span>中心<span class="_ _4"></span>化<span class="_ _4"></span>应<span class="_ _4"></span>用。<span class="_ _4"></span>就<span class="_ _4"></span>像<span class="_ _6"></span>比<span class="_ _6"></span>特<span class="_ _4"></span>币<span class="_ _6"></span>一<span class="_ _6"></span>样<span class="_ _4"></span>,<span class="_ _6"></span>以<span class="_ _4"></span>太<span class="_ _6"></span>坊<span class="_ _4"></span>丌<span class="_ _6"></span>受<span class="_ _4"></span>任<span class="_ _6"></span>何<span class="_ _4"></span>人<span class="_ _6"></span>控<span class="_ _6"></span>制<span class="_ _4"></span>,</div><div class="t m0 x1 h5 y8 ff1 fs2 fc2 sc0 ls0 ws0">也丌<span class="_ _4"></span>归任<span class="_ _4"></span>何人<span class="_ _4"></span>所有<span class="_ _4"></span><span class="ls4">——</span>它是<span class="_ _6"></span>一<span class="_ _6"></span>个<span class="_ _6"></span>开<span class="_ _6"></span>放<span class="_ _6"></span>源<span class="_ _6"></span>代<span class="_ _4"></span>码项<span class="_ _4"></span>目,<span class="_ _7"></span>由全<span class="_ _4"></span>球范<span class="_ _4"></span>围内<span class="_ _4"></span>的很<span class="_ _4"></span>多人<span class="_ _4"></span>共同</div><div class="t m0 x1 h5 y9 ff1 fs2 fc2 sc0 ls0 ws0">创建<span class="_ _6"></span>。和比<span class="_ _6"></span>特<span class="_ _6"></span>币<span class="_ _6"></span>协<span class="_ _6"></span>议<span class="_ _6"></span>有<span class="_ _6"></span>所<span class="_ _6"></span>丌<span class="_ _4"></span>同的<span class="_ _4"></span>是,以太<span class="_ _6"></span>坊<span class="_ _6"></span>的<span class="_ _6"></span>设<span class="_ _6"></span>计<span class="_ _6"></span>十<span class="_ _6"></span>分<span class="_ _6"></span>灵<span class="_ _6"></span>活<span class="_ _6"></span>,<span class="_ _8"></span>极<span class="_ _6"></span>具<span class="_ _6"></span>适<span class="_ _6"></span>应<span class="_ _6"></span>性<span class="_ _6"></span>。<span class="_ _8"></span>在</div><div class="t m0 x1 h5 ya ff1 fs2 fc2 sc0 ls0 ws0">以太<span class="_ _4"></span>坊平<span class="_ _4"></span>台上<span class="_ _4"></span>创立<span class="_ _4"></span>新<span class="_ _6"></span>的<span class="_ _6"></span>应<span class="_ _6"></span>用<span class="_ _6"></span>十<span class="_ _6"></span>分<span class="_ _6"></span>简<span class="_ _6"></span>便<span class="_ _6"></span>,<span class="_ _9"></span>随<span class="_ _6"></span>着<span class="_ _a"> </span><span class="ff2">Hom<span class="_ _6"></span>es<span class="_ _6"></span>te<span class="_ _6"></span>ad<span class="_"> </span></span>的<span class="_ _6"></span>发<span class="_ _6"></span>布<span class="_ _6"></span>,<span class="_ _9"></span>任何<span class="_ _4"></span>人都<span class="_ _4"></span>可</div><div class="t m0 x1 h5 yb ff1 fs2 fc2 sc0 ls0 ws0">以安<span class="_ _4"></span>全地<span class="_ _4"></span>使用<span class="_ _4"></span>该平<span class="_ _4"></span>台<span class="_ _6"></span>上<span class="_ _6"></span>的<span class="_ _6"></span>应<span class="_ _6"></span>用<span class="_ _6"></span>。<span class="_ _4"></span><span class="ff2"> </span></div><div class="t m0 x1 h5 yc ff1 fs2 fc2 sc0 ls0 ws0">本电<span class="_ _4"></span>子书<span class="_ _4"></span>参<span class="_ _6"></span>考<span class="_ _6"></span>的<span class="_ _6"></span>原<span class="_ _6"></span>文<span class="_ _6"></span>最<span class="_ _6"></span>早<span class="_ _4"></span>由众<span class="_ _4"></span>多热<span class="_ _4"></span>心<span class="_ _6"></span><span class="ls5">网友</span>发<span class="_ _6"></span>布<span class="_ _6"></span>于<span class="_ _6"></span>极<span class="_ _6"></span>客<span class="_ _6"></span>学<span class="_ _6"></span>院<span class="_ _a"> </span><span class="ff2">WIKI</span></div><div class="t m0 x1 h5 yd ff1 fs2 fc2 sc0 ls0 ws0">(<span class="ff2">h<span class="_ _6"></span>tt<span class="_ _6"></span>p:<span class="_ _6"></span>//<span class="_ _6"></span>wi<span class="_ _6"></span>ki<span class="_ _6"></span>.j<span class="_ _6"></span>ik<span class="_ _6"></span>ex<span class="_ _6"></span>ue<span class="_ _6"></span>y<span class="_ _6"></span>uan<span class="_ _6"></span>.c<span class="_ _6"></span>om<span class="_ _6"></span>/p<span class="_ _6"></span>ro<span class="_ _6"></span>j<span class="_ _6"></span>ect<span class="_ _6"></span>/<span class="_ _6"></span>so<span class="_ _6"></span>li<span class="_ _6"></span>di<span class="_ _6"></span>ty<span class="_ _b"></span>-zh<span class="_ _6"></span>/<span class="_ _6"></span></span>)<span class="_ _6"></span>,<span class="_ _6"></span>由<span class="_ _6"></span>汇<span class="_ _6"></span>智<span class="_ _6"></span>网</div><div class="t m0 x1 h5 ye ff1 fs2 fc2 sc0 ls0 ws0">(<span class="ff2">h<span class="_ _6"></span>tt<span class="_ _6"></span>p:<span class="_ _6"></span>/<span class="_ _6"></span>/ww<span class="_ _6"></span>w<span class="_ _6"></span>.h<span class="_ _6"></span>ub<span class="_ _6"></span>wi<span class="_ _6"></span>z.<span class="_ _6"></span>co<span class="_ _6"></span>m<span class="_ _6"></span></span>)<span class="_ _6"></span>编<span class="_ _6"></span>目<span class="_ _6"></span>整<span class="_ _6"></span>理<span class="_ _4"></span>。<span class="_ _6"></span><span class="ff2"> </span></div><div class="t m0 x1 h5 yf ff1 fs2 fc2 sc0 ls0 ws0">但由<span class="_ _4"></span>于以<span class="_ _4"></span>太坊<span class="_ _4"></span>本身<span class="_ _8"></span>(以<span class="_ _6"></span>及<span class="_ _6"></span>周<span class="_ _6"></span>边<span class="_ _6"></span>生<span class="_ _6"></span>态<span class="_ _6"></span>)<span class="_ _8"></span>的发<span class="_ _6"></span>展<span class="_ _6"></span>非<span class="_ _6"></span>常<span class="_ _6"></span>快<span class="_ _6"></span>,<span class="_ _c"></span>一些<span class="_ _4"></span>实<span class="_ _6"></span>践<span class="_ _6"></span>性<span class="_ _6"></span>内<span class="_ _6"></span>容<span class="_ _6"></span>已<span class="_ _6"></span>经<span class="_ _6"></span>落<span class="_ _6"></span>后</div><div class="t m0 x1 h5 y10 ff1 fs2 fc2 sc0 ls0 ws0">于现<span class="_ _4"></span>状。<span class="_ _7"></span>因<span class="_ _6"></span>此<span class="_ _6"></span>编<span class="_ _6"></span>者<span class="_ _6"></span>建<span class="_ _6"></span>议<span class="_ _6"></span>本<span class="_ _6"></span>电<span class="_ _6"></span>子<span class="_ _6"></span>书<span class="_ _6"></span>的<span class="_ _6"></span>读<span class="_ _6"></span>者<span class="_ _6"></span>,<span class="_ _7"></span>在阅<span class="_ _4"></span>读时<span class="_ _4"></span>应注<span class="_ _4"></span>意吸<span class="_ _4"></span>收核<span class="_ _4"></span>心<span class="_ _6"></span>的<span class="_ _6"></span>理<span class="_ _6"></span>念<span class="_ _6"></span>思<span class="_ _6"></span>想<span class="_ _6"></span>,</div><div class="t m0 x1 h5 y11 ff1 fs2 fc2 sc0 ls0 ws0">而丌<span class="_ _4"></span>要过<span class="_ _4"></span>分关<span class="_ _4"></span>注书<span class="_ _4"></span>中<span class="_ _6"></span>的<span class="_ _6"></span>实<span class="_ _6"></span>践<span class="_ _6"></span>操<span class="_ _6"></span>作<span class="_ _6"></span>环<span class="_ _6"></span>节<span class="_ _6"></span>。<span class="_ _4"></span><span class="ff2"> </span></div><div class="t m0 x1 h5 y12 ff1 fs2 fc2 sc0 ls0 ws0">为了<span class="_ _4"></span>弥补<span class="_ _4"></span>这一<span class="_ _4"></span>遗憾<span class="_ _4"></span>,<span class="_ _5"></span>汇<span class="_ _6"></span>智<span class="_ _6"></span>网<span class="_ _6"></span>推<span class="_ _6"></span>出<span class="_ _6"></span>了<span class="_ _6"></span>在<span class="_ _6"></span>线<span class="_ _6"></span>交<span class="_ _6"></span>互<span class="_ _6"></span>式<span class="_ _6"></span>以<span class="_ _4"></span>太坊<span class="_ _a"> </span><span class="ff2">D<span class="_ _6"></span>Ap<span class="_ _6"></span>p<span class="_"> </span></span>实战<span class="_ _6"></span>开<span class="_ _6"></span>发<span class="_ _6"></span>课<span class="_ _6"></span>程<span class="_ _6"></span>,<span class="_ _5"></span>以</div><div class="t m0 x1 h5 y13 ff1 fs2 fc2 sc0 ls0 ws0">去中<span class="_ _4"></span>心化<span class="_ _4"></span>投票<span class="_ _4"></span>应用<span class="_ _9"></span>(<span class="ff2">V<span class="_ _6"></span>o<span class="_ _6"></span>tin<span class="_ _6"></span>g DApp<span class="_ _6"></span></span>)<span class="_ _d"></span>为<span class="_ _6"></span>课<span class="_ _6"></span>程<span class="_ _6"></span>项<span class="_ _6"></span>目<span class="_ _6"></span>,<span class="_ _d"></span>通过<span class="_ _4"></span>三次<span class="_ _4"></span>迭<span class="_ _6"></span>代<span class="_ _6"></span>开<span class="_ _6"></span>发<span class="_ _6"></span>过<span class="_ _6"></span>程<span class="_ _6"></span>的<span class="_ _6"></span>详</div><div class="t m0 x1 h5 y14 ff1 fs2 fc2 sc0 ls0 ws0">细讲<span class="_ _4"></span>解不<span class="_ _4"></span>在线<span class="_ _4"></span>实践<span class="_ _6"></span>,<span class="_ _e"></span>并<span class="_ _6"></span>且<span class="_ _6"></span>将<span class="_ _6"></span>区<span class="_ _6"></span>块<span class="_ _6"></span>链<span class="_ _6"></span>的<span class="_ _6"></span>理<span class="_ _6"></span>念<span class="_ _6"></span>不<span class="_ _6"></span>去<span class="_ _6"></span>中<span class="_ _4"></span>心化<span class="_ _4"></span>思想<span class="_ _4"></span>贯穿<span class="_ _4"></span>于<span class="_ _6"></span>课<span class="_ _6"></span>程<span class="_ _6"></span>实<span class="_ _6"></span>践<span class="_ _6"></span>过<span class="_ _6"></span>程</div><div class="t m0 x1 h5 y15 ff1 fs2 fc2 sc0 ls0 ws0">中,<span class="_ _5"></span>为<span class="_ _4"></span>希望<span class="_ _4"></span>快速<span class="_ _4"></span>入门<span class="_ _4"></span>区<span class="_ _6"></span>块<span class="_ _6"></span>链<span class="_ _6"></span>开<span class="_ _6"></span>发<span class="_ _4"></span>的开<span class="_ _4"></span>发者<span class="_ _4"></span>提<span class="_ _6"></span>供<span class="_ _6"></span>了<span class="_ _6"></span>一<span class="_ _6"></span>个<span class="_ _6"></span>高<span class="_ _6"></span>效<span class="_ _6"></span>的<span class="_ _6"></span>学<span class="_ _6"></span>习<span class="_ _6"></span>不<span class="_ _6"></span>价<span class="_ _6"></span>值<span class="_ _6"></span>提<span class="_ _4"></span>升途</div><div class="t m0 x1 h5 y16 ff1 fs2 fc2 sc0 ls0 ws0">径。<span class="_ _4"></span>读者<span class="_ _4"></span>可以<span class="_ _4"></span>通过<span class="_ _4"></span>以<span class="_ _6"></span>下<span class="_ _6"></span>链<span class="_ _6"></span>接<span class="_ _6"></span>访<span class="_ _6"></span>问<span class="_ _6"></span>《<span class="_ _6"></span>以<span class="_ _6"></span>太<span class="_ _6"></span>坊<span class="_ _a"> </span><span class="ff2">DAp<span class="_ _6"></span>p<span class="_"> </span></span>开发<span class="_ _6"></span>实<span class="_ _6"></span>战<span class="_ _6"></span>入<span class="_ _6"></span>门<span class="_ _6"></span>》<span class="_ _6"></span>在<span class="_ _6"></span>线<span class="_ _4"></span>教程<span class="_ _4"></span>:<span class="_ _6"></span><span class="ff2"> </span></div></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/624f35dc6caf596192c59a3e/bg2.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">汇智网<span class="ff2"> <span class="_ _0"> </span>Hubwiz.com<span class="ff3"> <span class="_ _1"> </span> <span class="_ _2"> </span></span>Solidity<span class="_ _3"> </span></span>官方文档中文版<span class="ff3"> </span></div><div class="t m0 x2 h3 y2 ff3 fs0 fc0 sc0 ls0 ws0"> <span class="_ _3"> </span><span class="ff4">2</span> <span class="ls1">/ <span class="ff4 ls2">137</span></span> </div><div class="t m0 x1 h3 y3 ff3 fs0 fc0 sc0 ls0 ws0"> </div><div class="t m0 x1 h5 y17 ff2 fs2 fc3 sc0 ls0 ws0">htt<span class="_ _6"></span>p:/<span class="_ _6"></span>/<span class="_ _6"></span>xc<span class="_ _6"></span>.h<span class="_ _6"></span>ub<span class="_ _6"></span>wi<span class="_ _6"></span>z.<span class="_ _6"></span>co<span class="_ _6"></span>m<span class="_ _6"></span>/c<span class="_ _6"></span>ou<span class="_ _6"></span>rse<span class="_ _6"></span>/5<span class="_ _6"></span>a9<span class="_ _6"></span>52<span class="_ _6"></span>99<span class="_ _6"></span>1<span class="_ _6"></span>ad<span class="_ _6"></span>b3<span class="_ _6"></span>84<span class="_ _6"></span>75<span class="_ _6"></span>53<span class="_ _6"></span>d2<span class="_ _6"></span>05<span class="_ _6"></span>d1<span class="_ _b"></span>?<span class="_ _6"></span>aff<span class="_ _6"></span>id<span class="_ _6"></span>=<span class="_ _6"></span>sol<span class="_ _4"></span><span class="fc2"> </span></div><div class="t m0 x1 h5 y18 ff1 fs2 fc2 sc0 ls0 ws0">教程<span class="_ _4"></span>预置<span class="_ _4"></span>了开<span class="_ _4"></span>发环<span class="_ _4"></span>境<span class="_ _6"></span>。<span class="_ _4"></span>进<span class="_ _6"></span>入<span class="_ _6"></span>教<span class="_ _4"></span>程<span class="_ _6"></span>后<span class="_ _4"></span>,<span class="_ _6"></span>可<span class="_ _4"></span>以<span class="_ _6"></span>在<span class="_ _4"></span>每<span class="_ _6"></span>一<span class="_ _4"></span>个<span class="_ _6"></span>知<span class="_ _6"></span>识<span class="_ _4"></span>点<span class="_ _6"></span>立<span class="_ _4"></span>刻<span class="_ _4"></span>进<span class="_ _6"></span>行<span class="_ _4"></span>同<span class="_ _6"></span>步<span class="_ _6"></span>实<span class="_ _4"></span>践<span class="_ _6"></span>,</div><div class="t m0 x1 h5 y19 ff1 fs2 fc2 sc0 ls0 ws0">而丌<span class="_ _4"></span>必在<span class="_ _4"></span>开发<span class="_ _4"></span>环境<span class="_ _4"></span>的<span class="_ _6"></span>搭<span class="_ _6"></span>建<span class="_ _6"></span>上<span class="_ _6"></span>浪<span class="_ _6"></span>费<span class="_ _6"></span>时<span class="_ _6"></span>间<span class="_ _6"></span>:<span class="_ _4"></span><span class="ff2"> </span></div><div class="t m0 x3 h6 y1a ff3 fs3 fc0 sc0 ls0 ws0"> </div><div class="t m0 x1 h6 y1b ff3 fs3 fc0 sc0 ls0 ws0"> </div><div class="t m0 x1 h5 y1c ff1 fs2 fc2 sc0 ls0 ws0">汇智<span class="_ _4"></span>网<span class="_ _6"></span><span class="ff2"> <span class="_ _f"> </span>Hub<span class="_ _6"></span>wi<span class="_ _6"></span>z.<span class="_ _6"></span>c<span class="_ _6"></span><span class="ls6">om</span> </span></div><div class="t m0 x1 h5 y1d ff2 fs2 fc2 sc0 ls0 ws0">20<span class="_ _6"></span>18<span class="_ _6"></span>.2<span class="_ _6"></span> </div><div class="t m0 x1 h7 y1e ff5 fs4 fc2 sc0 ls0 ws0">简介<span class="ff7"> </span></div><div class="t m0 x1 h8 y1f ff7 fs3 fc4 sc0 ls0 ws0">Solidity<span class="_ _3"> </span><span class="ff5">是一种语法类似<span class="_ _3"> </span></span>JavaScri<span class="_ _8"></span>pt<span class="_ _3"> </span><span class="ff5">的高级语言。<span class="_ _d"></span>它被设计成以编译的方式<span class="_ _c"></span>生成以太坊虚</span></div><div class="t m0 x1 h8 y20 ff5 fs3 fc4 sc0 ls0 ws0">拟机代码。<span class="_ _d"></span>在后续内容中<span class="_ _8"></span>你将会发现,<span class="_ _d"></span>使用它很容<span class="_ _8"></span>易创建用于投票<span class="_ _c"></span>、<span class="_ _9"></span>众筹、<span class="_ _9"></span>封闭拍卖、<span class="_ _d"></span>多重</div><div class="t m0 x1 h8 y21 ff5 fs3 fc4 sc0 ls0 ws0">签名钱包等等的<span class="_ _c"></span>合约。<span class="ff7"> </span></div><div class="t m0 x1 h8 y22 ff5 fs3 fc2 sc2 ls0 ws0">注意<span class="ff7 fc4 sc0"> </span></div><div class="t m0 x1 h8 y15 ff5 fs3 fc4 sc0 ls0 ws0">目前尝试<span class="_ _3"> </span><span class="ff7">Solidity<span class="_ _3"> </span></span>的最好方式是使用<span class="_ _8"></span><span class="fc5">基于浏览<span class="_ _8"></span>器的编译器<span class="fc4">(需<span class="_ _c"></span>要一点时间加载,请<span class="_ _8"></span>耐心等</span></span></div><div class="t m0 x1 h8 y23 ff5 fs3 fc4 sc0 ls0 ws0">待)。<span class="ff7"> </span></div><div class="t m0 x1 h8 y24 ff5 fs3 fc4 sc0 ls0 ws0">有用链接<span class="ff7"> </span></div><div class="t m0 x4 h9 y25 ff8 fs5 fc4 sc0 ls0 ws0"><span class="ff9"> <span class="_ _10"> </span><span class="ff7 fs3 fc5">Ethereu<span class="_ _c"></span>m<span class="fc4"> </span></span></span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/624f35dc6caf596192c59a3e/bg3.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">汇智网<span class="ff2"> <span class="_ _0"> </span>Hubwiz.com<span class="ff3"> <span class="_ _1"> </span> <span class="_ _2"> </span></span>Solidity<span class="_ _3"> </span></span>官方文档中文版<span class="ff3"> </span></div><div class="t m0 x2 h3 y2 ff3 fs0 fc0 sc0 ls0 ws0"> <span class="_ _3"> </span><span class="ff4">3</span> <span class="ls1">/ <span class="ff4 ls2">137</span></span> </div><div class="t m0 x1 h3 y3 ff3 fs0 fc0 sc0 ls0 ws0"> </div><div class="t m0 x4 h9 y26 ff8 fs5 fc4 sc0 ls0 ws0"><span class="ff9"> <span class="_ _10"> </span><span class="ff7 fs3 fc5">Browser-B<span class="_ _c"></span>ased CompilerCha<span class="_ _c"></span>ngelog<span class="fc4"> </span></span></span></div><div class="t m0 x4 h9 y27 ff8 fs5 fc4 sc0 ls0 ws0"><span class="ff9"> <span class="_ _10"> </span><span class="ff7 fs3 fc5">Story Ba<span class="_ _8"></span>cklog<span class="fc4"> </span></span></span></div><div class="t m0 x4 h9 y28 ff8 fs5 fc4 sc0 ls0 ws0"><span class="ff9"> <span class="_ _10"> </span><span class="ff7 fs3 fc5">Source Co<span class="_ _8"></span>de<span class="fc4"> </span></span></span></div><div class="t m0 x4 h9 y29 ff8 fs5 fc2 sc0 ls0 ws0"><span class="ff9"> <span class="_ _10"> </span><span class="ff7 fs3 fc5">Gitter Chat<span class="_ _8"></span><span class="fc2"> </span></span></span></div><div class="t m0 x1 ha y2a ff7 fs6 fc2 sc0 ls0 ws0">Solidi<span class="_ _8"></span>ty <span class="_ _3"> </span><span class="ff5 ls7">文档</span> </div><div class="t m0 x1 h8 y2b ff5 fs3 fc4 sc0 ls0 ws0">在下一章中,我<span class="_ _c"></span>们先看一个用<span class="_ _f"> </span><span class="ff7">So<span class="_ _8"></span>lidity<span class="_ _3"> </span><span class="ff5">写的简单的<span class="_ _8"></span><span class="fc5">智能合约<span class="fc4">,<span class="_ _8"></span>然后介绍一下<span class="_ _c"></span><span class="fc5">区块链<span class="fc4">和</span><span class="ls7">以太</span></span></span></span></span></span></div><div class="t m0 x1 h8 y2c ff5 fs3 fc5 sc0 ls0 ws0">坊<span class="fc4">虚拟机的基础<span class="_ _c"></span>知识。<span class="ff7"> </span></span></div><div class="t m0 x1 h8 y2d ff5 fs3 fc4 sc0 ls0 ws0">后续章节会通过<span class="_ _c"></span>一些实用的<span class="fc5">合约例子<span class="_ _8"></span><span class="fc4">,来探<span class="_ _8"></span>索<span class="_ _f"> </span><span class="ff7">Soli<span class="_ _c"></span>dity<span class="_ _f"> </span><span class="ff5">的一系列<span class="_ _c"></span>特性。记住,你可以在<span class="_ _c"></span><span class="fc5">浏</span></span></span></span></span></div><div class="t m0 x1 h8 y2e ff5 fs3 fc5 sc0 ls0 ws0">览器<span class="fc4">中尝试这些<span class="_ _c"></span>合约。<span class="ff7"> </span></span></div><div class="t m0 x1 h8 y2f ff5 fs3 fc4 sc0 ls0 ws0">最后以及更多扩<span class="_ _c"></span>展章节的内容,会深<span class="_ _8"></span>入到<span class="_ _3"> </span><span class="ff7">Solidity <span class="_ _11"> </span></span>的各个方面。<span class="_ _c"></span><span class="ff7"> </span></div><div class="t m0 x1 h8 y30 ff5 fs3 fc4 sc0 ls0 ws0">如有任何关于<span class="_ _3"> </span><span class="ff7">Solidiy</span>,<span class="_ _8"></span>或者本文档的<span class="_ _c"></span>问题及改进建议,请<span class="_ _8"></span>在<span class="_ _3"> </span><span class="ff7 fc5">gitter<span class="_ _f"> </span><span class="ff5">频道<span class="_ _8"></span><span class="fc4">提出来。<span class="ff7"> </span></span></span></span></div><div class="t m0 x1 h7 y31 ff5 fs4 fc2 sc0 ls0 ws0">智能合约介绍<span class="_ _c"></span><span class="ff7"> </span></div><div class="t m0 x1 ha y32 ff5 fs6 fc2 sc0 ls0 ws0">一个简单的智能<span class="_ _c"></span>合约<span class="ff7"> </span></div><div class="t m0 x1 h8 y33 ff5 fs3 fc4 sc0 ls0 ws0">先从一个非常基<span class="_ _c"></span>础的例子开始,<span class="_ _5"></span>不用担心你现<span class="_ _8"></span>在还一点都不了<span class="_ _c"></span>解,<span class="_ _e"></span>我们将逐步了解<span class="_ _c"></span>到更多的</div><div class="t m0 x1 h8 y34 ff5 fs3 fc4 sc0 ls0 ws0">细节。<span class="ff7"> </span></div><div class="t m0 x1 hb y35 ff7 fs7 fc2 sc0 ls0 ws0">Storage<span class="fs6"> </span></div><div class="t m0 x1 hc y36 ffa fs3 fc5 sc0 ls8 ws0">contract <span class="_ _c"></span>SimpleStorag<span class="_ _6"></span>e <span class="_ _c"></span>{<span class="ls0"> </span></div><div class="t m0 x1 hc y37 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">uint <span class="_ _9"></span>storedData<span class="_ _8"></span>; </span></div><div class="t m0 x1 hc y38 ffa fs3 fc5 sc0 ls0 ws0"> </div><div class="t m0 x1 hc y39 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls8">function <span class="_ _c"></span>set(uint <span class="_ _c"></span>x) {<span class="ls0"> </span></span></div><div class="t m0 x1 hc y3a ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">storedData <span class="_ _c"></span>= <span class="_ _c"></span>x;<span class="ls0"> </span></span></div><div class="t m0 x1 hc y3b ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">} </span></div><div class="t m0 x1 hc y3c ffa fs3 fc5 sc0 ls0 ws0"> </div><div class="t m0 x1 hc y3d ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls8">function <span class="_ _c"></span>get() <span class="_ _c"></span>constant <span class="_ _c"></span>returns <span class="_ _8"></span>(uint <span class="_ _c"></span>retVal) <span class="_ _c"></span>{<span class="_ _6"></span><span class="ls0"> </span></span></div><div class="t m0 x1 hc y3e ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span>retur<span class="_ _c"></span>n <span class="_ _c"></span>storedDat<span class="_ _8"></span>a; </div><div class="t m0 x1 hc y3f ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">} </span></div><div class="t m0 x1 hc y40 ffa fs3 fc5 sc0 ls0 ws0">}<span class="fs5 fc2"> </span></div><div class="t m0 x1 h8 y41 ff5 fs3 fc4 sc0 ls0 ws0">在<span class="_ _f"> </span><span class="ff7">Solidi<span class="_ _c"></span>ty<span class="_ _f"> </span><span class="ff5">中,一个合<span class="_ _c"></span>约由一组代码(合约的<span class="_ _c"></span>函数)和数据(合约<span class="_ _8"></span>的状态)组成。<span class="_ _c"></span>合约位</span></span></div><div class="t m0 x1 h8 y42 ff5 fs3 fc4 sc0 ls0 ws0">于以太坊区块链<span class="_ _c"></span>上的一个特殊地址。<span class="_ _8"></span><span class="ff7">*uint s<span class="_ _8"></span>tored<span class="_ _8"></span>Data*<span class="ffb">;</span> <span class="ff5">这行代码声明了一个<span class="_ _6"></span>状态变量,</span></span></div><div class="t m0 x1 h8 y43 ff5 fs3 fc4 sc0 ls0 ws0">变量名为<span class="_ _3"> </span><span class="ffb">storedData</span>,<span class="_ _c"></span>类型为<span class="ff7"> <span class="ffb">uint</span> </span>(<span class="ff7">256<span class="_ _8"></span>bits<span class="_ _3"> </span><span class="ff5">无符号整数)。你可以<span class="_ _c"></span>认为它就像数据库</span></span></div><div class="t m0 x1 h8 y44 ff5 fs3 fc4 sc0 ls0 ws0">里面的一个存储<span class="_ _c"></span>单元,跟管理数据库<span class="_ _8"></span>一样,可<span class="_ _8"></span>以通过调用函数<span class="_ _c"></span>查询和修改它。在以<span class="_ _8"></span>太坊中,</div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/624f35dc6caf596192c59a3e/bg4.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">汇智网<span class="ff2"> <span class="_ _0"> </span>Hubwiz.com<span class="ff3"> <span class="_ _1"> </span> <span class="_ _2"> </span></span>Solidity<span class="_ _3"> </span></span>官方文档中文版<span class="ff3"> </span></div><div class="t m0 x2 h3 y2 ff3 fs0 fc0 sc0 ls0 ws0"> <span class="_ _3"> </span><span class="ff4">4</span> <span class="ls1">/ <span class="ff4 ls2">137</span></span> </div><div class="t m0 x1 h3 y3 ff3 fs0 fc0 sc0 ls0 ws0"> </div><div class="t m0 x1 h8 y45 ff5 fs3 fc4 sc0 ls0 ws0">通常只有合约的<span class="_ _c"></span>拥有者才能这样做。<span class="_ _8"></span>在这个例<span class="_ _8"></span>子中,函数<span class="ff7"> <span class="ffb">se<span class="_ _c"></span>t<span class="ff7"> <span class="ff5">和</span> </span>get<span class="ff7"> <span class="ff5">分别用于修改<span class="_ _c"></span>和查询</span></span></span></span></div><div class="t m0 x1 h8 y46 ff5 fs3 fc4 sc0 ls0 ws0">变量的值。<span class="ff7"> </span></div><div class="t m0 x1 h8 y47 ff5 fs3 fc4 sc0 ls0 ws0">跟很多其他语言<span class="_ _c"></span>一样,访问状态变量<span class="_ _8"></span>时,不需<span class="_ _8"></span>要在前面增加<span class="ff7"> <span class="_ _11"></span>thi<span class="_ _c"></span>s. <span class="_ _0"> </span><span class="ff5">这样的前<span class="_ _8"></span>缀。<span class="ff7"> </span></span></span></div><div class="t m0 x1 h8 y48 ff5 fs3 fc4 sc0 ls0 ws0">这个合约还无法<span class="_ _c"></span>做很多事情<span class="_ _12"></span>(受限于以<span class="_ _c"></span>太坊的基础设施)<span class="_ _12"></span>,<span class="_ _12"></span>仅<span class="_ _c"></span>仅是允许任何人储存一个<span class="_ _c"></span>数字。</div><div class="t m0 x1 h8 y49 ff5 fs3 fc4 sc0 ls0 ws0">而且世界上任何<span class="_ _c"></span>一个人都可以来存取<span class="_ _8"></span>这个数字<span class="_ _8"></span>,<span class="_ _13"></span>缺少一个<span class="_ _13"></span>(<span class="_ _c"></span>可靠的)<span class="_ _13"></span>方式来<span class="_ _8"></span>保护你发布<span class="_ _8"></span>的数</div><div class="t m0 x1 h8 y4a ff5 fs3 fc4 sc0 ls0 ws0">字。<span class="_ _5"></span>任何人都可以调用<span class="_ _3"> </span><span class="ff7">set<span class="_ _f"> </span></span>方<span class="_ _c"></span>法设置一个不同的数字<span class="_ _c"></span>覆盖你发布的数字。<span class="_ _5"></span>但是你的数<span class="_ _8"></span>字将会</div><div class="t m0 x1 h8 y4b ff5 fs3 fc4 sc0 ls0 ws0">留存在区块链的<span class="_ _c"></span>历史上。<span class="_ _5"></span>稍后我们会学习如何<span class="_ _8"></span>增加一个存<span class="_ _8"></span>取限制,<span class="_ _5"></span>使得只有你才能<span class="_ _c"></span>修改这个</div><div class="t m0 x1 h8 y4c ff5 fs3 fc4 sc0 ls0 ws0">数字。<span class="ff7"> </span></div><div class="t m0 x1 hd y2f ff5 fs7 fc2 sc0 ls0 ws0">代币的例子<span class="_ _6"></span><span class="ff7 fs6"> </span></div><div class="t m0 x1 h8 y4d ff5 fs3 fc4 sc0 ls0 ws0">接下来的合约将<span class="_ _c"></span>实现一个形式最简单<span class="_ _8"></span>的加密货<span class="_ _8"></span>币。<span class="_ _5"></span>空中取币不再是一个<span class="_ _c"></span>魔术,<span class="_ _e"></span>当然只有创建</div><div class="t m0 x1 h8 y4e ff5 fs3 fc4 sc0 ls0 ws0">合约的人才能做<span class="_ _c"></span>这件事情<span class="_ _d"></span>(想用其他货币<span class="_ _c"></span>发行模式也很简单,<span class="_ _13"></span>只是实现细节上的差<span class="_ _c"></span>异)<span class="_ _d"></span>。<span class="_ _9"></span>而</div><div class="t m0 x1 h8 y4f ff5 fs3 fc4 sc0 ls0 ws0">且任何人都可以<span class="_ _c"></span>发送货币给其他人,<span class="_ _5"></span>不需要注<span class="_ _8"></span>册用户名和<span class="_ _8"></span>密码,<span class="_ _5"></span>只要有一对以太坊<span class="_ _c"></span>的公私钥</div><div class="t m0 x1 h8 y50 ff5 fs3 fc4 sc0 ls0 ws0">即可。<span class="ff7"> </span></div><div class="t m0 x1 he y51 ffc fs3 fc2 sc0 ls0 ws0">Note<span class="ff7 fc4"> </span></div><div class="t m0 x1 h8 y52 ff5 fs3 fc4 sc0 ls0 ws0">对于在线<span class="_ _3"> </span><span class="ff7">solidity<span class="_ _3"> </span></span>环境来说,这不是一个<span class="_ _c"></span>好的例子。如果你使<span class="_ _8"></span>用<span class="fc5 ls7">在线<span class="_ _f"> </span><span class="ff7 ls0">solidit<span class="_ _8"></span>y<span class="_ _f"> </span><span class="ff5">环境<span class="_ _c"></span><span class="ff7 fc4"> <span class="ff5">来尝试</span></span></span></span></span></div><div class="t m0 x1 h8 y53 ff5 fs3 fc4 sc0 ls0 ws0">这个例子。<span class="_ _d"></span>调用函数时,<span class="_ _9"></span>将无法改变<span class="_ _3"> </span><span class="ff7">from<span class="_ _3"> </span></span>的地址。<span class="_ _9"></span>所以你只能扮演铸<span class="_ _c"></span>币者的角色,<span class="_ _9"></span>可以铸</div><div class="t m0 x1 h8 y54 ff5 fs3 fc4 sc0 ls0 ws0">造货币并发送给<span class="_ _c"></span>其他人,<span class="_ _5"></span>而无法<span class="_ _8"></span>扮演其他<span class="_ _8"></span>人的角色。<span class="_ _5"></span>这<span class="_ _c"></span>点在线<span class="_ _f"> </span><span class="ff7">soli<span class="_ _8"></span>dity<span class="_ _3"> </span><span class="ff5">环境将来会做改进。<span class="_ _c"></span><span class="ff7"> </span></span></span></div><div class="t m0 x1 hc y55 ffa fs3 fc5 sc0 ls8 ws0">contract <span class="_ _c"></span>Coin <span class="_ _c"></span>{<span class="_ _6"></span><span class="ls0"> </span></div><div class="t m0 x1 hc y56 ffa fs3 fc5 sc0 ls8 ws0">//<span class="ff5 ls0">关键字</span><span class="ffd">“public”<span class="ff5 ls0">使变量能从合<span class="_ _c"></span>约外部访问。<span class="ffa"> </span></span></span></div><div class="t m0 x1 hc y57 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls8">address <span class="_ _c"></span>public <span class="_ _c"></span>minter;<span class="_ _6"></span><span class="ls0"> </span></span></div><div class="t m0 x1 hc y58 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls8">mapping <span class="_ _c"></span>(address <span class="_ _c"></span>=> <span class="_ _c"></span>uint) <span class="_ _8"></span>public <span class="_ _c"></span>balances;<span class="ls0"> </span></span></div><div class="t m0 x1 hc y59 ffa fs3 fc5 sc0 ls0 ws0"> </div><div class="t m0 x1 hc y5a ffa fs3 fc5 sc0 ls8 ws0">//<span class="ff5 ls0">事件让轻客户端<span class="_ _c"></span>能高效的对变化做<span class="_ _8"></span>出反应。<span class="ffa"> </span></span></div><div class="t m0 x1 hc y5b ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">event<span class="_ _8"></span> <span class="_ _c"></span>Sent(<span class="_ _8"></span>addre<span class="_ _8"></span>ss <span class="_ _c"></span>from,<span class="_ _8"></span> <span class="_ _c"></span>addre<span class="_ _8"></span>ss <span class="_ _c"></span>to,<span class="_ _8"></span> <span class="_ _c"></span>uint <span class="_ _c"></span>amou<span class="_ _c"></span>nt);<span class="_ _6"></span> </span></div><div class="t m0 x1 hc y5c ffa fs3 fc5 sc0 ls0 ws0"> </div><div class="t m0 x1 hc y5d ffa fs3 fc5 sc0 ls8 ws0">//<span class="ff5 ls0">这个构造函数的<span class="_ _c"></span>代码仅仅只在合约<span class="_ _8"></span>创建的时<span class="_ _8"></span>候被运行。<span class="ffa"> </span></span></div><div class="t m0 x1 hc y5e ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls8">function <span class="_ _c"></span>Coin() <span class="_ _c"></span>{<span class="ls0"> </span></span></div><div class="t m0 x1 hc y5f ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">mint<span class="ls0">er <span class="_ _c"></span>= <span class="_ _c"></span>ms<span class="_ _8"></span>g.sen<span class="_ _8"></span>der; </span></span></div><div class="t m0 x1 hc y60 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">} </span></div><div class="t m0 x1 hc y61 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls8">function <span class="_ _c"></span>mint(address <span class="_ _c"></span>receiver, uint <span class="_ _c"></span>amount) <span class="_ _c"></span>{<span class="ls0"> </span></span></div><div class="t m0 x1 hc y62 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span>if <span class="_ _c"></span>(ms<span class="_ _8"></span>g.sen<span class="_ _c"></span>der <span class="_ _c"></span>!= <span class="_ _c"></span>minte<span class="_ _8"></span>r) <span class="_ _c"></span>ret<span class="_ _8"></span>urn; </div><div class="t m0 x1 hc y63 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">balances[receiver] <span class="_ _c"></span>+= <span class="_ _c"></span>amount;<span class="_ _6"></span><span class="ls0"> </span></span></div><div class="t m0 x1 hc y64 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">} </span></div><div class="t m0 x1 hc y65 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls8">function <span class="_ _c"></span>send(address <span class="_ _c"></span>receiver, uint <span class="_ _c"></span>amount) <span class="_ _c"></span>{<span class="ls0"> </span></span></div><div class="t m0 x1 hc y66 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span>if <span class="_ _c"></span>(ba<span class="_ _8"></span>lance<span class="_ _c"></span>s[msg.send<span class="_ _8"></span>er] <span class="_ _c"></span>< <span class="_ _9"></span>amount) <span class="_ _c"></span>re<span class="ls8">turn;</span> </div><div class="t m0 x1 hc y67 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">balances[msg.sender] <span class="_ _c"></span><span class="ls0">-= <span class="_ _c"></span>amoun<span class="_ _c"></span>t;<span class="_ _6"></span> </span></span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>
<div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/624f35dc6caf596192c59a3e/bg5.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">汇智网<span class="ff2"> <span class="_ _0"> </span>Hubwiz.com<span class="ff3"> <span class="_ _1"> </span> <span class="_ _2"> </span></span>Solidity<span class="_ _3"> </span></span>官方文档中文版<span class="ff3"> </span></div><div class="t m0 x2 h3 y2 ff3 fs0 fc0 sc0 ls0 ws0"> <span class="_ _3"> </span><span class="ff4">5</span> <span class="ls1">/ <span class="ff4 ls2">137</span></span> </div><div class="t m0 x1 h3 y3 ff3 fs0 fc0 sc0 ls0 ws0"> </div><div class="t m0 x1 hc y68 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">balances[receiver] <span class="_ _c"></span>+= <span class="_ _c"></span>amount;<span class="_ _6"></span><span class="ls0"> </span></span></div><div class="t m0 x1 hc y69 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">Sent(msg.sender, <span class="_ _c"></span>receiver, <span class="_ _c"></span>amount)<span class="_ _6"></span>;<span class="ls0"> </span></span></div><div class="t m0 x1 hc y6a ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">} </span></div><div class="t m0 x1 hc y6b ffa fs3 fc5 sc0 ls0 ws0">}<span class="fs5 fc2"> </span></div><div class="t m0 x1 h8 y6c ff5 fs3 fc4 sc0 ls0 ws0">这个合约引入了<span class="_ _c"></span>一些新的概念,让我<span class="_ _8"></span>们一个一<span class="_ _8"></span>个来看一下。<span class="_ _c"></span><span class="ff7"> </span></div><div class="t m0 x1 h8 y6d ffa fs8 fc5 sc0 ls0 ws0">address public minter;<span class="ff7 fs3 fc4"> <span class="ff5">这行代码声明了一个<span class="_ _c"></span>可公开访问的状态变量,<span class="_ _c"></span>类型为<span class="_ _f"> </span><span class="ff7">addre<span class="_ _8"></span>ss<span class="ff5">。</span></span></span></span></div><div class="t m0 x1 h8 y6e ff7 fs3 fc4 sc0 ls0 ws0">address<span class="_ _3"> </span><span class="ff5">类型的值大小为<span class="_ _3"> </span></span><span class="lsa">160</span> bits<span class="ff5">,<span class="_ _c"></span>不支持任何算术操作。适<span class="_ _c"></span>用于存储合约的地址<span class="_ _8"></span>或其他</span></div><div class="t m0 x1 h8 y6f ff5 fs3 fc4 sc0 ls0 ws0">人的公私钥。<span class="_ _9"></span><span class="ff7">public<span class="_ _f"> </span><span class="ff5">关键<span class="_ _8"></span>字会自动为其修<span class="_ _c"></span>饰的状态变量生成访<span class="_ _c"></span>问函数。<span class="_ _c"></span>没有<span class="_ _3"> </span><span class="ff7">public<span class="_ _f"> </span></span>关键<span class="_ _c"></span>字</span></span></div><div class="t m0 x1 h8 y70 ff5 fs3 fc4 sc0 ls0 ws0">的变量将无法被<span class="_ _c"></span>其他合约访问。另外<span class="_ _8"></span>只有本合<span class="_ _8"></span>约内的代码才能<span class="_ _c"></span>写入。自动生成的函<span class="_ _8"></span>数如下:<span class="_ _12"></span><span class="ff7"> </span></div><div class="t m0 x1 hc y71 ffa fs3 fc5 sc0 ls8 ws0">function <span class="_ _c"></span>minter() <span class="_ _c"></span>ret<span class="_ _6"></span>urns <span class="_ _c"></span>(address) <span class="_ _c"></span>{ <span class="_ _8"></span>return <span class="_ _c"></span>minter; <span class="_ _c"></span>}<span class="_ _6"></span><span class="fs5 fc2 ls0"> </span></div><div class="t m0 x1 h8 y72 ff5 fs3 fc4 sc0 ls0 ws0">当然我们自己增<span class="_ _c"></span>加一个这样的访问函<span class="_ _8"></span>数是行不<span class="_ _8"></span>通的。<span class="_ _5"></span>编译器会报错,<span class="_ _5"></span>指出这个函数与<span class="_ _c"></span>一个状</div><div class="t m0 x1 h8 y73 ff5 fs3 fc4 sc0 ls0 ws0">态变量重名。<span class="_ _c"></span><span class="ff7"> </span></div><div class="t m0 x1 h8 y74 ff5 fs3 fc4 sc0 ls0 ws0">下一行代码<span class="ff7"> <span class="ffa fs8 fc5">m<span class="_ _c"></span>apping <span class="_ _5"></span>(address <span class="_ _5"></span>=<span class="_ _8"></span>> <span class="_ _5"></span>uint) <span class="_ _14"></span>public <span class="_ _14"></span>b<span class="_ _6"></span>alances;<span class="ff7 fs3 fc4"> <span class="ff5">创建了一个<span class="_ _0"> </span></span>public<span class="_ _0"> </span><span class="ff5">的状态变量,</span></span></span></span></div><div class="t m0 x1 h8 y75 ff5 fs3 fc4 sc0 ls0 ws0">但是其类型更加<span class="_ _c"></span>的复杂。<span class="_ _5"></span>该类型将一些<span class="_ _3"> </span><span class="ff7">address<span class="_ _f"> </span></span>映<span class="_ _8"></span>射到无符号整数<span class="_ _c"></span>。<span class="_ _e"></span><span class="ff7">mapping<span class="_ _3"> </span><span class="ff5">可以被认为</span></span></div><div class="t m0 x1 h8 y76 ff5 fs3 fc4 sc0 ls0 ws0">是一个哈希表,<span class="_ _e"></span>每一个可能的<span class="_ _f"> </span><span class="ff7">ke<span class="_ _c"></span>y<span class="_ _f"> </span><span class="ff5">对应的<span class="_ _3"> </span></span>value<span class="_ _3"> </span><span class="ff5">被虚拟的初始化为全<span class="_ _3"> </span></span><span class="lsb">0.</span><span class="ff5">这个类比不是很<span class="_ _8"></span>严</span></span></div><div class="t m0 x1 h8 y77 ff5 fs3 fc4 sc0 ls0 ws0">谨,对于一个<span class="_ _3"> </span><span class="ff7">mapping<span class="_ _8"></span><span class="ff5">,无法获取一<span class="_ _c"></span>个包含其所有<span class="_ _3"> </span><span class="ff7">key<span class="_ _3"> </span></span><span class="ls7">或者<span class="_ _f"> </span></span><span class="ff7">value<span class="_ _f"> </span></span>的链表<span class="_ _c"></span>。所以我们得</span></span></div><div class="t m0 x1 h8 y78 ff5 fs3 fc4 sc0 ls0 ws0">自己记着添加了<span class="_ _c"></span>哪些东西到<span class="_ _3"> </span><span class="ff7">mapping<span class="_ _3"> </span></span>中。<span class="_ _13"></span>更好的方式是维护<span class="_ _c"></span>一个这样的链表,<span class="_ _13"></span>或<span class="_ _8"></span>者使用其</div><div class="t m0 x1 h8 y79 ff5 fs3 fc4 sc0 ls0 ws0">他更高级的数据<span class="_ _c"></span>类型。<span class="_ _12"></span>或<span class="_ _8"></span>者只在不受这<span class="_ _c"></span>个缺陷影响的场景中<span class="_ _8"></span>使用<span class="_ _0"> </span><span class="ff7">mapping</span>,<span class="_ _12"></span>就<span class="_ _c"></span>像这个例子。</div><div class="t m0 x1 h8 y7a ff5 fs3 fc4 sc0 ls0 ws0">在这个例子中<span class="_ _c"></span>由<span class="_ _f"> </span><span class="ff7">public<span class="_ _3"> </span></span>关键字生成的访问<span class="_ _8"></span>函数将会<span class="_ _8"></span>更加复杂,其代<span class="_ _c"></span>码大致如下:<span class="ff7"> </span></div><div class="t m0 x1 hc y7b ffa fs3 fc5 sc0 ls8 ws0">function <span class="_ _c"></span>balances(add<span class="_ _6"></span>ress <span class="_ _c"></span>_account) <span class="_ _c"></span>return<span class="_ _6"></span>s <span class="_ _c"></span>(uint <span class="_ _c"></span>balance) <span class="_ _8"></span>{<span class="ls0"> </span></div><div class="t m0 x1 hc y7c ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">retur<span class="_ _8"></span>n <span class="_ _c"></span>bala<span class="_ _8"></span>nces[<span class="_ _8"></span>_accoun<span class="_ _8"></span>t]; </span></div><div class="t m0 x1 hc y7d ffa fs3 fc5 sc0 ls0 ws0">}<span class="fs5 fc2"> </span></div><div class="t m0 x1 h8 y7e ff5 fs3 fc4 sc0 ls0 ws0">我们可以很方便<span class="_ _c"></span>的通过这个函数查询<span class="_ _8"></span>某个特定<span class="_ _8"></span>账号的余额。<span class="_ _c"></span><span class="ff7"> </span></div><div class="t m0 x1 h8 y7f ffa fs8 fc5 sc0 ls0 ws0">event <span class="_ _14"></span>Sent(address<span class="_ _6"></span> <span class="_ _14"></span>from, <span class="_ _5"></span>address <span class="_ _14"></span>to, <span class="_ _14"></span>u<span class="_ _6"></span>int <span class="_ _14"></span>value)<span class="_ _6"></span>;<span class="_ _6"></span><span class="ff7 fs3 fc4"> <span class="ff5">这行代码声明了<span class="_ _c"></span>一个<span class="ffe">―</span>事件<span class="ffe">‖</span><span class="lsc">。由<span class="_ _a"> </span></span><span class="ff7">sen<span class="_ _c"></span>d</span></span></span></div><div class="t m0 x1 h8 y80 ff5 fs3 fc4 sc0 ls0 ws0">函数的最后一行<span class="_ _c"></span>代码触发。<span class="_ _13"></span>客户端<span class="_ _15"></span>(服务端应用<span class="_ _c"></span>也适用)<span class="_ _15"></span>可以以很低的开销来监听<span class="_ _c"></span>这些由区</div><div class="t m0 x1 h8 y81 ff5 fs3 fc4 sc0 ls0 ws0">块链触发的事件<span class="_ _c"></span>。事件触发时,监听<span class="_ _8"></span>者会同时<span class="_ _8"></span>接收到<span class="_ _3"> </span><span class="ff7">from</span>,<span class="ff7 lsd">to</span>,<span class="ff7">val<span class="_ _c"></span>u<span class="_ _6"></span>e<span class="_ _3"> </span><span class="ff5">这些参数值,可以</span></span></div><div class="t m0 x1 h8 y82 ff5 fs3 fc4 sc0 ls0 ws0">方便的用于跟踪<span class="_ _c"></span>交易。为了监听这个<span class="_ _8"></span>事件,你<span class="_ _8"></span>可以使用如下代<span class="_ _c"></span>码:<span class="ff7"> </span></div><div class="t m0 x1 hc y83 ffa fs3 fc5 sc0 ls8 ws0">Coin.Sent().watch({}, <span class="_ _8"></span>'', <span class="_ _c"></span>function(error, <span class="_ _c"></span>result) <span class="_ _8"></span>{<span class="ls0"> </span></div><div class="t m0 x1 hc y84 ffa fs3 fc5 sc0 ls9 ws0"> <span class="ls0">if <span class="_ _c"></span>(!e<span class="_ _8"></span>rror)<span class="_ _8"></span> <span class="_ _c"></span>{ </span></div><div class="t m0 x1 hc y85 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">console.log("Coin <span class="_ _c"></span>transfer: <span class="_ _c"></span>" <span class="_ _c"></span>+ <span class="_ _c"></span>re<span class="_ _6"></span>sult.args.amount <span class="_ _c"></span>+<span class="_ _6"></span><span class="ls0"> </span></span></div><div class="t m0 x1 hc y86 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span>" <span class="_ _c"></span>coi<span class="_ _c"></span>ns <span class="_ _c"></span>were <span class="_ _c"></span>se<span class="_ _8"></span>nt <span class="_ _c"></span>fro<span class="_ _8"></span>m <span class="_ _c"></span>" <span class="_ _c"></span>+ <span class="_ _c"></span>res<span class="_ _c"></span>u<span class="_ _6"></span>lt.arg<span class="_ _c"></span>s.from <span class="_ _c"></span>+<span class="_ _6"></span> </div><div class="t m0 x1 hc y87 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span>" <span class="_ _c"></span>to <span class="_ _9"></span>" <span class="_ _c"></span>+ <span class="_ _c"></span>resul<span class="_ _8"></span>t.arg<span class="_ _8"></span>s.to <span class="_ _9"></span>+ <span class="_ _c"></span>".");<span class="_ _6"></span> </div><div class="t m0 x1 hc y88 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">console.log("Balances <span class="_ _c"></span>now:<span class="ls0">\n" <span class="_ _c"></span>+ </span></span></div><div class="t m0 x1 hc y89 ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">"Sender: <span class="_ _c"></span>" <span class="_ _c"></span>+ <span class="_ _c"></span>Coin.balances.call<span class="_ _6"></span>(result.args.from) <span class="_ _c"></span>+<span class="_ _6"></span><span class="ls0"> </span></span></div><div class="t m0 x1 hc y8a ffa fs3 fc5 sc0 ls0 ws0"> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span> <span class="_ _c"></span><span class="ls8">"Receiver: <span class="_ _c"></span>" <span class="_ _c"></span>+ <span class="_ _c"></span>Coin.balances.call(resul<span class="_ _6"></span><span class="ls0">t.args.t<span class="_ _c"></span>o)); </span></span></div></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>