018:Solidity語法之合約|《ETH原理與智能合約開發(fā)》筆記

待字閨中開發(fā)了一門區(qū)塊鏈方面的課程:《深入淺出ETH原理與智能合約開發(fā)》嫡纠,馬良老師講授递沪。此簡書文集記錄我的學(xué)習(xí)筆記。

課程共8節(jié)課沫勿。其中挨约,前四課講ETH原理,后四課講智能合約产雹。
第六課分為三部分:

  1. Solidity語法之?dāng)?shù)組
  2. Solidity語法之合約
  3. Truffle簡介與使用

這篇文章是第六課第二部分的學(xué)習(xí)筆記:Solidity語法之合約诫惭。


第5課第3小節(jié)簡要介紹了 Solidity 的基礎(chǔ)語法。還有兩部分重要的內(nèi)容要重點講解一下蔓挖,分別是數(shù)組和合約夕土。

這節(jié)課主要講解Solidity合約相關(guān)知識,并有若干實例輔助理解时甚。

1隘弊、合約相關(guān)知識點

合約相關(guān)知識點

1.1 合約調(diào)用

  • 合約間接口相互調(diào)用
    □ address.function(para)
    □ address.call(func_signature, para)
  • 合約之間轉(zhuǎn)賬
    □ address.transfer()
    □ address.send()
    □ address.call()
    □ - address.call.gas(num).value(num)() 缺省的是使用所有可用的Gas
  • 調(diào)用深度是1024。一般正常情況不會這么多荒适,除非發(fā)生遞歸梨熙。
  • delegatecode(),主要是調(diào)用庫函數(shù)刀诬,但還是在當(dāng)前函數(shù)的上下文環(huán)境咽扇。(第四課出現(xiàn)過)

1.1 轉(zhuǎn)賬需要注意的問題

  • 可以收錢的接口需要payable
  • 轉(zhuǎn)賬會觸發(fā)接收賬戶的fallback函數(shù)(payable)陕壹。fallback函數(shù)质欲,一個匿名函數(shù)。
  • transfer 僅僅轉(zhuǎn)發(fā)2300 gas糠馆, 失敗會拋出異常嘶伟。fallback 要非常簡單。
  • send 僅僅轉(zhuǎn)發(fā)2300 gas又碌, 失敗只會返回false九昧。fallback 要非常簡單。
  • call.value(amount)() 會轉(zhuǎn)發(fā)全部的可用的gas毕匀,失敗只會返回false铸鹰,容易引起重入型攻擊。

2皂岔、合約相關(guān)實例

1蹋笼、合約間接口調(diào)用實例

代碼見git倉庫,或見下圖躁垛。

合約間接口調(diào)用實例
  1. 打開文件 example_2.sol 剖毯,編譯。
  2. 在 run 頁面教馆,選擇 B_caller 速兔,點擊 Deploy 。下面出現(xiàn)三個接口活玲。


    B合約的三個接口
  3. 在調(diào)用合約前涣狗,先顯示一下A的狀態(tài)值,點 Getstate_A舒憾,顯示為0镀钓。
  4. 顯式調(diào)用,點擊Invocate_A镀迂,再點擊 Getstate_A丁溅,結(jié)果為15,正確探遵。
  5. call調(diào)用窟赏。點擊 Call_A 妓柜,返回值為真。再點擊 Getstate_A涯穷,結(jié)果為23棍掐,正確。

特別注意:代碼第45行拷况。keccak256在計算簽名時作煌,函數(shù)的參數(shù)要寫全稱uint256,不要寫簡稱uint赚瘦,否則會出現(xiàn)問題粟誓。因為簽名算法是根據(jù)字符串算的,它不會自動把簡稱替換成全稱起意。

1鹰服、合約間接口調(diào)用實例

合約轉(zhuǎn)賬實例
  1. 關(guān)閉example_2.sol,打開example_3.sol揽咕,(有時需要刷新一下瀏覽器)
  2. 編譯获诈,或勾上自動編譯。
  3. 在 run 頁面心褐,選擇 B_caller 舔涎,點擊 Deploy 。下面出現(xiàn)四個接口逗爹。


    B合約的三個接口
  4. 在調(diào)用合約前亡嫌,先顯示一下A的狀態(tài)值,點 Getbalance_A掘而,顯示為0挟冠。
  5. Value值輸入6666,點擊 Transfer_A袍睡,再點擊 Getbalance_A知染,結(jié)果為6666,正確斑胜。
  6. Value值輸入8888控淡,點擊 Sender_A ,返回值為真止潘。再點擊 Getbalance_A掺炭,結(jié)果為15554,正確凭戴。
  7. Value值輸入1涧狮,點擊Call_A,返回值為真。再點擊 Getbalance_A者冤,結(jié)果為15555肤视,正確。

以上是將9~11行注釋掉的情況∩娣悖現(xiàn)在去掉這三行的注釋邢滑,再操作一遍。

Transfer_A拜银、Sender_A 操作均失敗殊鞭, Call_A 成功遭垛。而把49行代碼換成第48行代碼時尼桶,又會轉(zhuǎn)賬失敗。

其中锯仪,9~11的三行代碼會消耗6萬個Gas 泵督。transfer、send 僅僅轉(zhuǎn)發(fā)2300個Gas庶喜,所以會失敗小腊。而Call調(diào)用方法,缺省是支付所有Gas久窟,在本例中若限制5萬個Gas秩冈,則轉(zhuǎn)賬失敗。

小結(jié)一下斥扛,本小節(jié)主要講解了 Solidity 合約相關(guān)知識入问,并有兩個實例輔助理解。


不足之處稀颁,請批評指正芬失。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市匾灶,隨后出現(xiàn)的幾起案子棱烂,更是在濱河造成了極大的恐慌,老刑警劉巖阶女,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颊糜,死亡現(xiàn)場離奇詭異,居然都是意外死亡秃踩,警方通過查閱死者的電腦和手機芭析,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吞瞪,“玉大人馁启,你說我怎么就攤上這事。” “怎么了惯疙?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵翠勉,是天一觀的道長。 經(jīng)常有香客問我霉颠,道長对碌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任蒿偎,我火速辦了婚禮朽们,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诉位。我一直安慰自己骑脱,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布苍糠。 她就那樣靜靜地躺著叁丧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岳瞭。 梳的紋絲不亂的頭發(fā)上拥娄,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機與錄音瞳筏,去河邊找鬼稚瘾。 笑死,一個胖子當(dāng)著我的面吹牛姚炕,可吹牛的內(nèi)容都是我干的摊欠。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼钻心,長吁一口氣:“原來是場噩夢啊……” “哼凄硼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捷沸,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤摊沉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后痒给,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體说墨,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片净捅。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡肴茄,死狀恐怖疗垛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娃弓,我是刑警寧澤雾狈,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布烛恤,位于F島的核電站母怜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缚柏。R本人自食惡果不足惜苹熏,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望币喧。 院中可真熱鬧轨域,春花似錦、人聲如沸杀餐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怜浅。三九已至铐然,卻和暖如春蔬崩,著一層夾襖步出監(jiān)牢的瞬間恶座,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工沥阳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留跨琳,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓桐罕,卻偏偏與公主長得像脉让,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子功炮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容