【大小太陽趴趴走】84世界結算
格里西亞睜開眼睛,發現自己坐在一張沙發椅上,記得第一次坐在這種軟綿綿的椅子上,他還不知道這叫做沙發,經過朝索的常識補充,他這才知道椅子的名稱,只是這次的沙發款式似乎有點不同,記得上次是淺棕色,這次倒是純黑色。
左右張望了一下,房間看起來也略有不同,牆上的「電視」在上個世界看起來像一面橫放的黑鏡子,現在變成一面透明的板子,但應該還是電視吧?
如果是他坐在沙發上,那麼……
格里西亞看向床上,那裡有個孩子正睡得香甜,垂在床邊的手還拉著無限後背包的背帶。
格里西亞低頭看著自己的身形,大人體型,穿著白色襯衫和西裝褲,這是艾洛收在無限後背包中的衣服,看來是被默認穿上了。
「這次換我成為大人體型了嗎?」
希望這次的世界不要太過危險,格里西亞對自己的魔法有信心,但說到身手就有點……在平均水準!若是遇到速度太快的敵人冷不防地出手攻擊,格里西亞還真沒把握保護好艾洛。
願念:「支線任務:聖光無所不能。請開發聖光的各種用途,本世界結束時結算,以開發出來的用途多寡結算獎勵大小,開發用途五種,贈送『隨機版差強人意的升級』,隨機到的道具為簡易帳篷,升級為初級帳篷:外看是個帳篷,進入別有洞天,內含兩床一矮桌,外面看不進裡面,但裡面可看見外面,觀星旅人值得擁有。升級:矮桌升級為書桌搭配兩椅,新添衣櫃以及穿衣鏡。」
衣櫃?格里西亞看向床邊的無限後背包,他走過去從包裡拿出一件衣服和一盒餅乾,隨後展開初級帳篷,進去後發現空間比原來的略大一些,原本只能席地而坐的矮桌變成正常的桌椅,角落也多出衣櫃和鏡子。
格里西亞將衣服掛在衣櫃裡,餅乾放在桌上,再次把帳篷收起來的時候,餅乾直接掉出來,衣服卻沒有。
「這帳篷值得升級!」
格里西亞本以為帳篷只是方便遮風擋雨,有或沒有都沒關係,他根本不會選擇升級這個道具,但沒想到升級後竟可以收納東西,而且帳篷跟無限後背包不同,是可以被收進系統空間的,不需要在意重量問題!
願念:「現在開始世界結算。」
「老師?」
艾洛被接二連三的系統聲音吵醒,揉著眼睛爬起來,久違地看見二十多歲模樣的老師,反射性低頭看自己的手,他又變成八歲模樣了。
「醒啦?正好一起聽。」格里西亞走到床邊,坐在學生的身旁,揉揉學生的小腦袋。
願念:「新手世界終疆,玩家總得分1715,獲得道具如下。」
●肉包子等級三:可使用技能有打狗術一級、香味散發一級、竹蜻蜓一級。
●能量匕首:收起來只有巴掌大,伸出來有一臂長,非常適合刺客,奈何會發光,每個世界可用能量有限,請謹慎使用,可補充能量的世界可遇而不可求。
●葉族信物:擁有此信物,可得到母花的幫助,配戴者重傷自動治癒,可用次數2/3,請注意,若在瞬間斃命,只有神救得了你,花只能兩手一攤說沒救。
●教皇的頭紗:戴上面紗就能變身美少男!升齡/降齡至十六歲,維持一天,每個世界可用一次。
●占卜水晶球:可給出玩家手頭正在進行任務的提示,若有多個任務正在進行,將隨機給予提示,提示必定正確,但能否看懂就要看施主的悟性了,每世界可用三次。
●單眼相機:來拍張照片吧,可拍到過去或者未來的照片,別怕分不清楚,照片右下角都是有拍攝時間的,每個世界可拍三張照片。
●無限後背包:小於袋口的東西都能裝進去,容量無限制,但請注意,重量並不會消失,背包若有毀損,無限裝填功能喪失。
●初級帳篷:外看是個帳篷,進入別有洞天,內含兩床、書桌搭配兩椅、衣櫃以及穿衣鏡,外面看不進裡面,但裡面可看見外面,觀星旅人值得擁有。
●驕傲罪者的法杖二級:玩家手持法杖施展魔法可獲得一百%加成,每當處於生氣憤怒的情緒之下,魔法威力再額外加成,雷電系魔法威力直接增加百分之四百。
●紅斗篷二級:這是一頂鮮紅的斗篷,當你穿上它的時候,所有人都會覺得你是強者,使用近戰武器戰鬥時有低機率領悟斗篷原主的戰技,每世界可穿戴時間二十四小時。
●藥神熱情提供的藥劑:喝下去可指定神術、武力或魔法其中一樣的實力緩慢持續成長,副作用:使用當下的世界將轉換性別。
●花的種子:三顆經花祝福過的種子,只要讓種子碰到土壤,你就會得到一大堆藤蔓,會動會打人還超巨大的那種,小心,不要把種子種在自己會經過的地方,藤蔓可分不清你和敵人的差別。備註:只有在特殊情況之下,藤蔓會聽從你的指揮。
●聖書:可將神術提前登錄在書頁上,使用者即使不會神術,只需要手持書本以及念出神術名稱,即可施展當初登錄的神術,威力等同當初登錄的神術,頁數10。
●永恆的寧靜:取得NPC同意後,可將NPC的靈魂封入其中,跟隨玩家們冒險,直到玩家替換靈魂或者結束冒險,NPC的靈魂會回歸原本的時間地點,靈魂可替換次數三次。
●有限的無限G手機:綁定日向夜,每三天可跨世界通話一次,每次半小時。
願念:「玩家格里西亞獲得能力如下。」
●神術一級
●泡泡四級:可製造直徑兩公尺的彈力泡泡,可反彈中量攻擊,每日可製造泡泡數五顆。
●大召喚術:綁定三名召喚對象(已綁定:日向夜),每個世界有一次機會一次將三人召喚出來,持續時間三小時。
●詛咒微笑二級:此微笑一出,看見的人通通都要倒大楣!隨機給予詛咒,從平地摔到去見光明神都是有可能發生的倒楣事兒,二級倒楣程度上升,每世界可用次數三次。
願念:「玩家艾洛獲得能力如下。」
●體質一級
●隱形四級:隱形十分鐘,施展時,雙手牽著的人連帶隱形,隨後可分開行動,隱形不會失效,隱形最高人數三人,使用次數每日一次。
●作家的房間:絕對不可侵入領域,天災人禍通通擋在房間外,哪怕光明神進來都要先敲門,持續時間一小時,可使用次數三次。
●詩分也算媽:每世界可強制綁定一名NPC,逼迫他為你做事,若NPC拒絕,可施行冰封懲罰。
格里西亞看著螢幕上長長的一串道具和能力,雖然拿的時候是怎麼拿也覺得不夠,但這麼看下來,還真是不少。
願念:「新手世界『終疆』,主線完成度:A,整體評價:C。」
「評價只有C?」艾洛震驚了,他以往做任務從沒有完成得這麼糟!
格里西亞倒是不意外,早在他不經意對異物王者施展治癒術,結果竟拿到一千分,比完成主線任務還高,他就隱約明白主線任務恐怕只是最基本的過關條件,他們該做的事情遠比主線來得多,但這個明白來得太晚了,能有C評價恐怕還是治癒術的功勞。
願念:「現在開啟第二世界,歡迎玩家來到『非關英雄』,難度:簡單,時間段:沉睡之時。」
非關英雄,沉睡之時,簡單難度。格里西亞默記世界名稱和時間段,這些世界或許還有回去的時候,上一個新手世界名稱則是終疆,時間段是末世元年。
願念:「非關英雄世界,主線任務:『沒有人知道天使即將墮落成魔』,請注意,玩家在此世界有假身分,必須維持假身分,一旦NPC看穿假身分,本世界立刻終結並失敗,本次世界時間限定三個月。」
三個月,比終疆世界還長的時間,格里西亞不禁看向螢幕中的「藥神熱情提供的藥劑」,武力、魔法和神術緩慢增長,該用在誰身上,又該選擇哪一項能力?
願念:「第二世界開啟。」
聽到這句話,格里西亞和艾洛本以為房間會有所變化,如同上一個世界,一開啟世界,房間就從完好變成破舊不堪,但這一次的改變卻不在房間裡面,而是窗外的燈光。
絢爛的七彩燈光不停流轉,彷彿剛才是被凍結,現在才開始運轉。
牆上的透明電視突然出現畫面,格里西亞和艾洛都看過去,雖然已經看過「手機」這種東西,但是這麼大片會變動的畫面還是讓他們看得目不轉睛。
願念:「偵測到讀者正在過萬聖節,進行萬聖特別活動,亡者復生,存在時間二十四小時。」
●摩卡
●疆書天
●夏洛特
聽到願念的聲音,格里西亞看向螢幕,最後一個名字讓他猛然變了臉色。
夏洛特?
#連載時間長,大家應該多少都有忘記,所以道具和能力這裡有把完整描述重貼一次,當作複習
#在新手世界拿到超多東西的啊!接下來沒這麼容易了XD
#現在又可以開始拿禮包和轉盤了喔
#如果我整理的東西有任何錯誤都歡迎提出
這裡是曾經提過的直播規則,想複習可以看看。
● 玩家每日有一次「玩家召喚機會」和一次「讀者召喚機會」,無論有沒有進行召喚,晚上十二點整重新計算,不得累計。
● 「玩家召喚」可以召喚出玩家認識的對象,認識的定義是當面見過,請注意,此召喚非強制召喚,如果對方拒絕前來,這次召喚就宣告失敗,當日召喚機會作廢。若玩家召喚的對象拒絕前來,玩家可獲得十秒鐘說話時間。
● 玩家召喚對象的存在時間為一小時,同一對象,十天內只能召喚一次。
● 「讀者召喚」將隨機提供三名角色供讀者選出一名,此為強制召喚,召喚對象的存在時間為八小時。玩家可請求讀者支援,由讀者決定對召喚對象發起獎勵或者懲戒,以一次為限。
● 每日禮包,午夜十二點後,玩家清醒時發放,禮包大小依前一篇文的讀者讚數發放。
● 點讚超過500,贈送清倉禮包;超過1000,贈送小禮包;超過1500贈送中型禮包;超過2000贈送大禮包;超過3000贈送犯規禮包。
● 額外福利:讀者分享本直播超過200次,可進行青銅轉盤一次!
● 轉盤可得故事中的道具/能力,強度不一,有少許可能性出現主角/魔王級的道具/能力
● 小禮包和中禮包的差別在於有無缺陷以及數量,例:系統背包格子數量、無限背包的堅固程度,基礎口糧袋的內容物豐富和好吃程度(等等)
● 大禮包可得世界級道具/能力,例:無限G手機
● 犯規禮包保證拿到主角或魔王級道具/能力,例:太陽神劍
● 玩家睡眠時間,盥洗如廁交配等觸及隱私,直播間一律黑屏,堅決維護玩家隱私權。
● 穿梭諸界完成系統任務,一萬分可在商城購買一張結束直播卷,一張卷可讓一名玩家結束直播。
● 單一玩家死亡扣一萬分,本人獲得的所有能力歸零;兩名玩家同時死亡,分數倒扣兩萬,所有能力、裝備和進度歸零。
同時也有19部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,JAVA證照考題解答分享(Android證照的跳板) http://terry55wu.blogspot.tw/2014/01/javaandroid.html 課程大綱: 1.認識 AWT類別 2.認識並學習如何建立視窗物件 3.學習如何管理與配置版面 4.事件處理:1.認識 Java的委派...
c宣告字串 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] 類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做
✍️ 田少谷 Shao
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
有鑒於個人近期關注的 Uniswap 及 Curve 皆用 Vyper 實作,索性瀏覽了官方文件並嘗試一些開發工具,希望此文能減少一些讀者初嘗 Vyper 會遇到的麻煩!
Vyper and Solidity
Outline
一. Vyper 極簡介二. 與 Solidity 語法差異三. 開發、開發環境設置 1. 語法高亮 2. 本地 Vyper compiler 安裝 3. 使用 Truffle 操作 ERC20 - 安裝 Truffle - 發幣 - 寫個簡易賣幣合約四. 已知 Remix 問題 五. 結語
一. Vyper 極簡介
Vyper 是除 Solidity 外,以太坊上的另一智能合約 (Smart contract) 語言。其語法和 Python 相近,但畢竟也是寫合約的語言,邏輯差異不大,所以若熟悉 Solidity 應該不難理解用 Vyper 寫出的合約!
Vyper 主要被設計和 Solidity 的區別是安全性及可讀性,這部分會在下一段落及後方的實作中舉例說明。
二. 與 Solidity 語法差異
Vyper 與 Solidity 的差異有許多,在本段只就個人認為感受較深的三點進行說明,其他差異只進行翻譯,有興趣的讀者可以到官方文件詳細了解:https://vyper.readthedocs.io/en/latest/index.html
1. 沒有 modifier
Solidity 常見的 onlyOwner() modifier; 由於 gist 沒有 Solidity 的語法高亮,故截圖
在 Vyper 中單純用 assert 及 assert_modifiable 來進行條件檢查,兩者差別為若要檢查函數執行後的返還值,要用後者,如下圖:
Vyper 寫法
2. 沒有 Class inheritance 繼承
繼承是物件導向程式設計 (OOP) 的核心概念,但各種繼承關係有時候確實很複雜。Vyper 沒有繼承,這無疑大幅地增加了程式可讀性及安全性,以及降低審計程式碼的難度。在此提供一個例子供不熟悉 OOP 複雜之處的讀者有個概念:
source: https://consensys.github.io/smart-contract-best-practices/recommendations/#multiple-inheritance-caution
在上例中,contract A 的 fee 值 (因繼承自 contract B 和 C,故有 fee 一值) 是 5、a 值也是 5 (因繼承自 contract Final,故有 a 一值)。原因是 A 先繼承 B 再繼承 C,因此 contract A 中的 setFee() 是使用了 contract C 的 setFee(),而 a 值是由於 C(5),這代表 contract C 的 constructor (舊版本中即 function C(),函式名稱同 contract 名稱) 被傳入的值為 5。
稍微延伸一下以上概念,將 contract A 改成:contract A is C, B。如此一來,a 值還有 fee 值都會是 3,因為這次 A 先繼承 C 再繼承 B,因此最終吃到的值是 contract B 的。
以上就是 OOP 繼承的複雜之處的簡單範例說明,應該能稍微感受到爲什麼除去繼承後會大幅提高可讀性及安全性,畢竟即使是熟悉 OOP 的人有時頭腦一混亂也會開始懷疑自己寫的程式碼繼承結構是否正確 …
3. 沒有 dynamic array 動態陣列
這應該是目前 Vyper 設計中爭議最大的部分。沒有動態陣列代表在宣告陣列時需要宣告其長度,也就是說 Solidity 中的寫法 uint[], bool[] 等等,這些是不會出現在 Vyper 的。在 Vyper 中只能出現諸如:
# Vyper 的變數宣告方式為 變數名稱: 存取範圍(變數型態(若為陣列給長度))
values: uint256[10]participants: public(address[20])
可以看到上方的 uint256 及 address 兩陣列皆需要宣告長度,不能不宣告而使其動態地配置空間。
沒有動態陣列固然可以確保執行運算的範圍、次數,但一來動態陣列真的很方便、二來在 Solidity 有此功能而 Vyper 卻沒有的情況下可能會造成麻煩,詳見此一討論串:點我。
4. 沒有 inline assembly,程式碼中不會有組合語言
5. 沒有 function overloading,函式不會因傳入的參數數目不同而結果不同
6. 沒有 operator overloading,運算符號不會有不同於預設的自定義功能
7. 沒有無限迴圈,可免於 gas limit attack
8. 十進位定點數 decimal fixed point 而非二進位 (binary) 定點數,詳見:點我
三. 開發、開發環境設置
結論先講
開發 Vyper 的最佳姿勢目前個人認為是在本地裝上 Vyper compiler、用 Truffle 部署,並在撰寫時將檔名後加上 .py 就能有 Python 的語法高亮👌
1. 語法高亮 (syntax highlighting)
有語法高亮絕對是舒服地寫程式的第一步。
Remix 有 Vyper 的語法高亮,但一來個人目前不推薦使用 Remix 來撰寫 Vyper,原因詳見下方 4. 已知 Remix 問題;二來 Remix 的語法高亮其實也沒有很清楚,因此個人推薦:在本地開發,將檔名後加上 .py 就會有 Python 的語法高亮。
2. 本地 Vyper compiler 安裝
照官方說明使用 Python 的虛擬環境 virtualenv:
source: https://vyper.readthedocs.io/en/latest/installing-vyper.html#installing-vyper
簡單兩點提醒:
如果中間那行報錯但確實已經有 Python,則可能是版本問題。依照自己電腦上的版本改成相應的即可,ex: python3.6 改成 python3
進入虛擬環境後(檔案路徑前方應有 vyper-venv 的提示),使用此指令: vyper {檔案名稱}.vy,即可編譯 .vy 檔;使用完畢後輸入 deactivate 即可退出
3. 使用 Truffle 操作 ERC20
安裝 Truffle
Truffle 雖有冗餘的 migration 但也別無他法,畢竟 Remix 目前仍不完善 :(
下載流程可以照官方文件,使用 vyper-example:
source: https://github.com/truffle-box/vyper-example-box
由於我們會接上測試網 Ropsten,因此還要下載 truffle-hdwallet-provider:
source: https://github.com/trufflesuite/truffle-hdwallet-provider
接者就可以開始使用 Vyper 寫合約了!
發幣
由於 Vyper 的官方文件中已經有許多優質範例,因此本文希望來點不一樣但大家卻又很熟悉的…以 ERC20 為例(這千篇一律的主題xD):
用 Curve 的 ERC20 程式碼為範本,發一個幣(又要發…)
寫一個簡易賣幣合約
選擇這個主題一方面畢竟 ERC20 是以太坊的最大宗應用之一,二來有興趣的讀者可以透過讀 ERC20 的程式碼來熟悉 Vyper,並在看過本文的流程後對於用 Vyper+Truffle 來操作 ERC20 有完整的概念!
好的,首先複製一份 Curve 的 ERC20 程式碼(看到就順手拿來用),並複製到 Truffle 所在路徑的 contracts 資料夾中:https://github.com/curvefi/curve-contract/blob/pool_compound/vyper/ERC20.vy
由於第一點希望著重在跑一次流程,因此不改動合約的程式碼。
將 ERC20.vy 複製到 contracts 資料夾中後,到 migrations 資料夾開啟 2_deploy_contracts.js,首先將 require() 中的參數改為 ERC20.vy 的檔名 ERC20,再來依照自己喜好決定幣的名稱、代號、小數點位數及發行總量,輸入於 deployer.deploy() 中。
接著,為了和測試網 Ropsten 互動,需要將以下程式碼寫入 truffle-config.js。
第二行的 privateKeys 是帳號的私鑰。以下實作需要兩個帳號來操作,因此請從錢包匯入兩組私鑰(並非助憶詞)。
在第 13 行中 HDWalletProvider 此函式的第三個參數代表要用第幾個帳號最為預設帳號(部署合約等),第四個函數代表總共匯入幾組帳號。而第二個參數則是需要至 Infura 申請一個 project 來得到串接 Ropsten 的連結。這兩步驟並非本文重點,因此不詳細解說步驟,Google 搜尋關鍵字應該就會找到方法!
接著,就可以輸入以下指令來將代幣發佈到 Ropsten:
truffle deploy --network ropsten
有進入虛擬環境才可以編譯 .vy 檔,若忘記就會收到如下的錯誤訊息:
記得打開虛擬環境才能編譯 .vy 檔
成功後就可以在 contract address 中看到代幣發佈的位置,加入到 Metamask 中就可以看到。本文的例子是維尼代幣 Winnie the Coin, WTC ;)
contract address 便是 ERC20 的所在
Winnie the Coin, WTC
好了,到此測試網上又多了一個測試用的垃圾廢幣。
寫個簡易賣幣合約
賣幣合約中我想要簡單有兩個功能就好:付錢買幣 、結束銷售,以下就是程式碼。買幣的部分就不寫太詳細,固定價格為 0.01 Ether 可以買 500 代幣。
簡單說明幾點:
Solidity 的 constructor() 在 Vyper 中為 Python 風的 __init__():
函式的屬性(public, private, payable 等等)放在函式上方,與 Python 的修飾器位置相同
總之寫法跟 Python 很像,次方也一樣是用兩次乘法代表:**
變數前加上 self 代表是當前合約的變數/全域變數,因此非常容易與函式中的變數/區域變數做區隔
由於已經在第一行匯入了 ERC20 那份合約,因此透過將地址傳入合約當參數,就可以呼叫在該地址的合約:ERC20(self.tokenAddress) 。並且,可以將部署的合約存成一個變數 erc20 較方便
寫完合約後一樣要更改 migrations 資料夾中的 2_deploy_contracts.js 如下,將代幣所在的地址作為參數輸入。
由於先前已經部署過一次了,因此要重置才能再部署第二次,輸入以下指令:
truffle deploy --reset --network ropsten
部署成功之後就要來試著買幣啦!輸入以下來進入 console:
truffle console --network ropsten
成功進入後應該會看到 truffle(ropsten)> 的字樣。接著,首先取得部署的兩合約,並查看是否有返回合約資訊:
# ERC20 及 SellToken 是先前在 2_deploy_contracts.js 中的變數名稱,代表被部署的合約
let instance1 = await ERC20.deployed()instance1 # 印出 instance1 的資訊
let instance2 = await SellToken.deployed()instance2 # 印出 instance2 的資訊
再來,為了讓 SellToken 可以賣幣,要先用 ERC20 的合約匯幣到 SellToken 的合約。因此,輸入以下指令:
instance1.transfer(instance2.address, 10000)
# 這裡數字只要設為 > 500 就可以
接著,我們要利用第二個帳號去買幣(第一個帳號為預設帳號,因此就是代幣擁有者)。將帳號的資訊存入變數 accounts 中,再指定送出交易的帳號是第二個帳號。由於我個人匯入私鑰的順序是將第一個帳號存在 truffle-config.js 的 privateKeys[0]、第二個帳號存在 privateKeys[1],因此第二個帳號的地址就會在 accounts[1] 的位置:
let accounts = await web3.eth.getAccounts()
instance2.buyToken({from: accounts[1], value: 10000000000000000})
# value 為 10^16 是因為在 SellToken 的 buyToken 函式中買一次要 0.01 Ether, 即為 10^16 wei
然後應該就會在自己的第二個帳號中看到匯入的幣了~
最後,由於合約中結束銷售就是一個自殺 selfdestruct 函式,因此可以呼叫看看,第一個帳戶錢包中的錢應該會增加,因為第二個帳戶有付款買幣;並且,可以到 Ropsten 上瀏覽,應該能看到相關提示:
中間 contract 的右上角有 Self Destruct 的樣式
四. 已知 Remix 問題
Remix 目前有兩個版本,只有新版有 Vyper 的編譯器。在此整理目前遇到的問題,如果有人也遇到可以對照一下本處,可以省去很多自我懷疑xD
不會報錯
Remix 的編譯結果有時會是錯的、和本地端編譯出來的結果不同
舉上方的 SellToken 合約為例,將其複製到 Remix 中使用左邊的 Remote Compiler 有錯,但又不報錯 q_q (ERC20 的合約有在同檔案目錄)
左方有紅色三角形,代表編譯失敗,但沒有報錯訊息可以看…
getter function 竟然要花錢
用 Solidity 寫的合約,查詢 public 變數的值應該是不用消耗 gas 的,但不知何故查詢 Vyper 寫的合約的 public 變數卻要消耗 gas,如下圖…
可以看到中下方有 22026 gas 的消耗
Local compiler 無法使用
圖中的 Local Compiler 此選項,個人雖照官方文件執行 vyper-serve 但卻失敗,因此若有讀者成功希望能留個言不吝分享!
五. 結語
Vyper 作為一個比 Solidity 更新的合約語言,在寫程式碼的方面沒什麼問題,但相關的開發工具、學習資源等都遠不及 Solidity。
Vyper 主打的兩個特色:可讀性的部分相信看完上面的讀者應該已經有些感覺;安全性…小白如作者我倒是沒有感受到顯著的不同。況且 Solidity 已經發展許久,很多錯誤的寫法、知名的安全漏洞大家應該也很熟悉了,還有 Openzeppelin 提供安全合約寫法的範本,因此有待以後高人解說安全性是否真的是 Vyper 較好。
有興趣者可以查看 Vyper 的安全報告:點我,大意是目前 Vyper 的編譯器仍有許多問題待改進! (感謝 Chih-Cheng Liang 的提供)
本文對 Vyper 的介紹及其與 Solidity 的差異只講了個大概,欲知更詳細的介紹還是要麻煩讀者前往官方文件了:https://vyper.readthedocs.io/en/latest/index.html
最後,如果本文有任何錯誤,請不吝提出,我會盡快做修正;而如果我的文章有幫助到你,可以看看我的其他文章,歡迎一起交流 :)
田少谷 Shao - Medium
類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
c宣告字串 在 西班牙小婦人 Facebook 的最佳解答
西班牙生活極短篇 |西班牙媽媽們的話
葛洛莉雅是我以前的鄰居,雖然她父母來自南邊的安達魯西亞和東北內陸的阿拉貢,但是自小在加泰隆尼亞長大的她總認為自己身上流著的是加泰隆尼亞的血。她跟許多西班牙女人一樣,喜歡在雙手上戴了好幾個戒指,手腕上也是一串又一串的手鍊;然而,她也有跟其他西班牙女人不一樣的地方,就是從不羨慕亞洲女人柔如柳絲的長直髮,反倒是每半年就上一次髮廊,把整頭長髮燙成像撥號盤電話的話筒線。個性直爽的她說話大聲,也很愛笑,每當開口時,旁人總能看見她的兩顆門牙中間有個大大的縫隙。據說這是她們家族的特色,她也從來沒想過要去整牙。
而她的丈夫艾洛伊卻剛好個性相反。
艾洛伊的個子不高還帶著一個啤酒肚,白髮剪得短短的,臉上靦腆的笑容說明了他內向的個性,而且還容易杞人憂天。但說到底,他也是好人一個,我都覺得在他的字典裡應該沒有「不」這個字的存在,因為極少聽見他回絕家人或朋友的請求。只是他說話的聲音真的不比蚊子大多少,每次聊天時,我總得竪直耳朵仔細聽,才能明白他到底要說的是什麼。
上個星期二葛洛莉雅打電話給我,說她剛學會做幾道中國菜,週末想小試身手讓我嚐嚐。認識多年了,我們都還蠻喜歡上他們家吃飯的,不只因為葛洛莉雅煮得一手好菜,而且她的大媽個性總能在廚房裡或餐桌上,冒出很多讓人啼笑皆非的句子。她並不怕我們笑,因為她覺得她說的那些都是前人留下來的智慧。
照著約定的時間,我們到了葛洛莉雅和艾洛伊位在山坡上的家。雙腳還沒踏進門,就聽見她扯著嗓門,對著七歲的兒子馬克大喊:「快點把柳橙汁喝完,要不然維生素C會跑掉的。」呃,我還真沒聽過維生素會長腳跑走的,西班牙果真是個不可思議的國家。
馬克此刻正貪玩坊間最流行的手機實境遊戲,在庭院尋找追打那些精靈。他不只不肯停下手來喝那杯果汁,還跟媽媽討價還價,說什麼柳橙汁太酸了,不加糖他沒法喝。當媽媽的葛洛莉雅理直氣壯,劈哩啪啦對兒子說:「柳橙汁很酸就是因為我用的柳橙有特別多的維生素C,你知道不知道那些可都是我上週四去露天市集為大家挑選的啊!」原本想繼續耍賴的馬克在此時瞥見了站在角落的我們,不好意思地乖乖喝完果汁,然後一溜煙不見人。
我們隨著剛才的喊叫聲進了屋去,用西班牙式的打招呼方式親了親主人們的雙頰,就與豪斯和艾洛伊坐在廚房邊的吧台上喝西班牙蕃茄冷湯,雙眼盯著眼前的西班牙女人,看她是要如何做出好吃的中式菜色來。
葛洛莉雅第一道菜打算做三鮮炒飯,喜歡下廚的我看了很手癢,在喝完手裏的冷湯後,決定跳下吧台的長腳椅,跟她一起下廚玩樂。
「葛洛莉雅,我幫妳煮米。你家的米放在哪裡?」要做炒飯就得先煮米,但這裡習慣用煮義大利麵的方式,將米粒放在灑了些許鹽巴的熱水中,滾熟了再撈起來瀝乾。
「米?不就放在放米的那個地方嗎?你找找就有。」葛洛莉雅輕描淡寫地回答,因為西班牙人對整理家務很有一套,東西都會收好不亂放;可我就是不知道她家的米放在哪裡才開口問的,沒想到她竟然要我去放米的地方找米。
艾洛伊搖搖頭笑了笑,幫我打開其中一個廚櫃,裝米的罐子就在那裡。葛洛莉雅一邊切蘿蔔丁,一邊還不忘好心地告訴我:「兩個手掌的米量是一人份,所以妳差不多抓八個手掌的米量就好了。」
我看看我的手掌,再看看豪斯和艾洛伊的手掌,然後一臉無奈的問她:「洗個米怎麼會這麼難?妳要我用誰的手掌來抓米啊?每個人的手掌大小又不一樣。」
「難?怎麼會難?用誰的手掌都可以啦!還有,米不用洗,你煮義大利麵時也先洗過麵條嗎?」她對我壞壞地是使了個眼色,我頓時覺得自己好像說了一個很不符西班牙廚房文化的笑話。
接下來的動作都很順利,我們趁米粒還在熱水裡旋轉跳躍時,洗洗切切準備了其他的食材。雖然看起來很忙碌,但葛洛莉雅還是有辦法隨時騰出一隻手拿啤酒喝上幾口。一個半小時後,飯菜上桌了,我們做了三鮮炒飯、清蒸魚、椒鹽蝦和蠔油牛肉。每個人拿起了筷子蠢蠢欲動,馬克一馬當先夾起了一塊牛肉,很興奮地跟我們炫耀他拿筷子的技術。然後,在大家一片叫好聲中,牛肉掉地了。
葛洛莉雅這個西班牙媽媽什麼都沒說,只快快地喊了:「一、二、三……」,然後看見馬克立刻撿起地上的牛肉塞進了嘴裡,咬著肉含糊不清地說:「我媽媽說食物掉到地上三秒內撿起來吃,就不會有細菌。」難道細菌會自己數了三秒才攀爬到食物上?我真的被葛洛莉雅嘴裡說的前人智慧給搞糊塗了。
艾洛伊喜歡桌上的蠔油牛肉,還跑去廚房拿了一塊長棍麵包,說要蘸那個醬汁。我看見葛洛莉雅露出了滿意的笑容,說:「我最喜歡看飯桌上一起吃飯的人拿麵包蘸盤子內的醬汁了。動作雖然無聲,但卻說明了那道菜非常好吃。」
艾洛伊示意我們也拿麵包蘸盤子內的醬汁,讓他老婆高興一下;但是我實在沒心拿西式麵包去蘸那個蠔油醬汁。豪斯看見我的為難,就故意推說我怕胖,而在一旁的馬克彷彿很懂他媽媽的想法,大聲地說:「我媽說吃麵包不會變胖,會胖是因為蘸了很多醬,所以如果你喜歡麵包,就盡量吃吧,不要蘸醬就好了。」說完後,他開始把炒飯裡的青豆挑出來放到一旁,拿筷子技術不精的他把很多米飯掉在地上。
「我們家沒養雞,要不然我就把它們放出來吃這些米飯。」葛洛莉雅撿起了米飯又繼續唸:「還有,我不是跟你說過很多次嗎,多吃豆類可以補充鐵質,你怎麼都不聽話? 」 西班牙媽媽每週都要做兩餐豆類食品,說什麼吃豆得鐵。
馬克這小子很調皮,竟然對他媽媽說:「要補充鐵質,我不會直接舔鐵條就好了嗎,幹嘛吃豆子?」聽到兒子頂嘴,葛洛莉雅氣急敗壞地告訴兒子等一下處罰他沒有飯後甜點!對西班牙小孩子來說,這可是一個大處罰啊!
五十分鐘後,我們在說笑談天中把飯菜吃得盤底朝天,我笑著摸摸自己的肚子,向大家宣告自己的肚子已經飽到塞不進去任何食物了。葛洛莉雅聽了,直說我應該給胃留一點兒空間來吃甜點的,還說:「不過沒關係,我去幫你弄一盤沙拉,這樣可以幫你去去肚裡的油脂。」當然,我馬上拒絕她的好意。
或許這就是我很喜歡跟一些婆婆媽媽們相處的原因吧,從她們的嘴裡我總能聽到許多屬於她們自己的一些句子。我相信其他國家的媽媽也是這樣的,有些是前人的智慧,有的是自己的經驗。雖然有些話讓人覺得不可思議,可是我卻能深刻從那些媽媽的話裡認識到她們對家庭滿滿的愛。
* 此為之前與皇冠雜誌合作的文章
c宣告字串 在 吳老師教學部落格 Youtube 的精選貼文
JAVA證照考題解答分享(Android證照的跳板)
http://terry55wu.blogspot.tw/2014/01/javaandroid.html
課程大綱:
1.認識 AWT類別
2.認識並學習如何建立視窗物件
3.學習如何管理與配置版面
4.事件處理:1.認識 Java的委派事件模式。2.認識並學習使用各種事件處理類別。3.學習各種物件的事件處理 。
之後:
1.分享最新的JAVA DOCS資訊與中文化版本,
並設定ECLIPSE直接讀取JAVA說明檔的設定方法。
2.利用實例綜合練習變數宣告、資料型別、運算子、
流程控制的IF...ELSE與各種迴圈方法的應用。
3.說明陣列與多維陣列的使用與實例。
漸漸更深入JAVA語法的核心,有些同學似乎已經吃不消,
但有些同學可能以前學過,所以一下子就解出來了,
也很大方的分享出他的解法,
不過這樣有時反而讓一些沒學過JAVA的同學備感壓力。
因為老師以為大家都會了,所以就加速往前,害一些同學在後面趕的很辛苦,
腦筋已經被迴圈給轉的頭昏,還沒弄懂題目,又要接下一題,
所以真有點兩難,好在助教的提醒,有稍放慢一點進度,
若有程度較好的同學,請些自行預息後面的課程,
或是先準備TQC JAVA的學術科考題好了,再不然好心一點,
充當一下老師的分身,幫忙同學一下,感謝!
101模擬樂透彩
102系統日期、時間顯示
103亂數排序器
104河洛之數
105陣列行列轉換
106數值過濾器
107求平均值
108九九乘法表
109面積與體積計算
110單字測驗
202利息計算
204期末考分數計算
206四則運算
208三角形邊長判斷
210字元搜尋器
302字體設定選擇器
304簡易繪圖板
306滑鼠感應視窗
308藝人音樂評等
310年齡計算
相關JAVA教學:
發表時間 文章標題
2015-06-22 JAVA網路程式設計第1天上課分享(HTML 5與JavaScript)
2015-06-21 艾鍗JAVA物件導向程式設計2(流程控制)
2015-06-21 JAVA程式設計第2次上課(環境安裝與變數與Math類別)
2015-06-20 從JAVA入門到智慧型手機設計第2次上課
2015-06-20 從JAVA入門到智慧型手機設計第1次上課
2015-01-16 如何在JAVA顯示河洛之數結果
2015-01-16 如何在JAVA顯示系統時間並格式化
2015-01-16 JAVA物件導向設計第3堂課:JSP與APP跳板
2015-01-16 JAVA物件導向設計第2堂課:JSP與APP跳板
2015-01-16 JAVA物件導向第1堂課:JSP與APP跳板
2014-01-20 佛光資應系JAVA證照考題解答分享(Android證照的跳板)
2013-08-19 艾鍗JAVA物件導向程式設計課程上課影音分享(2)
2013-08-02 總統府旁JAVA網路程式設計第2天上課分享
2013-08-02 總統府旁JAVA網路程式設計第1天上課分享
2013-03-15 從JAVA入門到智慧型手機設計第2次上課
2013-03-11 從JAVA入門到智慧型手機設計(1)
2012-10-27 有七星潭海浪聲的JAVA入門與證照分享
2012-09-14 JAVA程式設計第7次上課
2012-08-29 JAVA程式設計第1次上課
2012-05-31 有七星潭海浪聲的JAVA入門與證照分享1
2012-04-08 JAVA證照考題解答分享,Android證照的跳板
2012-01-25 JAVA證照考題解答分享,Android證照的跳板
2011-10-04 JAVA程式設計總整理
2010-10-30 湜憶電腦 TQC JAVA進階級先修課程之二
2010-10-30 湜憶電腦 TQC JAVA進階級先修課程
2010-05-30 最近的生活很JAVA--分享GOOGLE服務在教學上的應用
2010-05-30 文化大學推廣部JAVA程式設計第 5 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 4 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 3 次上課
2010-05-30 文化大學推廣部JAVA程式設計第 2 次上課
2010-05-30 程式語言排行榜,C語言居冠,JAVA次之
2010-05-30 最近的生活很JAVA--分享GOOGLE服務在教學上的應用
2010-05-22 JAVA程式設計第2次上課(環境安裝與變數與Math類別)
2009-08-27 TQC JavaScipt 實用級線上影音
2009-08-24 TQC JavaScipt 線上影音教學課程 101自動瀏覽器
2009-03-12 Java、VisualBasic、Visual C++有什麼不一樣呢?
java下載,jdk,eclipse,java教學網站,java教學影片,java eclipse教學,eclipse 教學,java證照解答,AWT類別, 電腦證照
c宣告字串 在 吳老師教學部落格 Youtube 的精選貼文
德明資科APP開發課程第6次上課
想要將大量的文字項目加到手機中,
可以用ListView(清單項目),
使用的關鍵就在除了:
1宣告物件、2連結元件、3建立事件之外,
還多了陣列連接器(ArrayAdapter)的使用,只要把資料放在字串資源檔中,
再連接就可以了,記得也要設置外觀,如此便可輕鬆的把資料放到手機中。
再者,
Android的多國語系設置不算難,只要在Values資源檔上,複製一個,
並加上各國語系代碼,並把Strings.xml黨修改成該國語言即可,
所以能快速的你的APP國際化,迅速可以提高下載的數量。
當然若要放圖片,需要用到BaseAdapter,
這次的 GridView範例就是用繼承 BaseAdapter來取得圖片檔,
並產生對應的 ImageView 來顯示。
之後若需要連結資料庫,需要SimpleAdapter,也是之後上課的重點。
01_CH07_ListView1介面設計與多國語系
02_CH07_ListView1程式設計與多國語系
03_CH07_ListView1改ListView範本
04_CH06_Photoplayer介面設計
05_CH06_Photoplayer程式設計
06_CH06_GridView介面設計
07_CH06_GridView程式設計
08_CH06_GridView程式設計
相關JAVA教學:
JAVA證照考題解答分享,Android證照的跳板
http://terry55wu.blogspot.com/2012/01/java.html
JAVA程式設計總整理
http://terry55wu.blogspot.com/2011/10/java.html
湜憶電腦 TQC JAVA進階級先修課程
http://terry55wu.blogspot.com/2010/08/tqc-java.html
最近的生活很JAVA兼分享GOOGLE服務在教學上的應用
http://terry55wu.blogspot.com/2010/05/javagoogle.html
文化大學推廣部JAVA程式設計第 2 次上課
http://terry55wu.blogspot.com/2010/05/java-2.html
文化大學推廣部JAVA程式設計第 3 次上課
http://terry55wu.blogspot.com/2010/05/java-3.html
文化大學推廣部JAVA程式設計第 4 次上課
http://terry55wu.blogspot.com/2010/05/java-4.html
文化大學推廣部JAVA程式設計第 5 次上課
http://terry55wu.blogspot.com/2010/05/java-5.html
Java、VisualBasic、Visual C++有什麼不一樣呢?
http://terry55wu.blogspot.com/2009/03/javavisualbasicvisual-c.html
程式語言排行榜,C語言居冠,JAVA次之
http://terry55wu.blogspot.com/2010/05/cjava.html
Android程式開發證照教學懶人包
http://terry55wu.blogspot.com/p/android.html
(吳老師提供), AWT類別, JAVA, JAVA工程師, TQC, 吳老師, 線上教學, 雲端計算, 電腦證照
c宣告字串 在 吳老師教學部落格 Youtube 的精選貼文
德明資科APP開發課程第6次上課
想要將大量的文字項目加到手機中,
可以用ListView(清單項目),
使用的關鍵就在除了:
1宣告物件、2連結元件、3建立事件之外,
還多了陣列連接器(ArrayAdapter)的使用,只要把資料放在字串資源檔中,
再連接就可以了,記得也要設置外觀,如此便可輕鬆的把資料放到手機中。
再者,
Android的多國語系設置不算難,只要在Values資源檔上,複製一個,
並加上各國語系代碼,並把Strings.xml黨修改成該國語言即可,
所以能快速的你的APP國際化,迅速可以提高下載的數量。
當然若要放圖片,需要用到BaseAdapter,
這次的 GridView範例就是用繼承 BaseAdapter來取得圖片檔,
並產生對應的 ImageView 來顯示。
之後若需要連結資料庫,需要SimpleAdapter,也是之後上課的重點。
01_CH07_ListView1介面設計與多國語系
02_CH07_ListView1程式設計與多國語系
03_CH07_ListView1改ListView範本
04_CH06_Photoplayer介面設計
05_CH06_Photoplayer程式設計
06_CH06_GridView介面設計
07_CH06_GridView程式設計
08_CH06_GridView程式設計
相關JAVA教學:
JAVA證照考題解答分享,Android證照的跳板
http://terry55wu.blogspot.com/2012/01/java.html
JAVA程式設計總整理
http://terry55wu.blogspot.com/2011/10/java.html
湜憶電腦 TQC JAVA進階級先修課程
http://terry55wu.blogspot.com/2010/08/tqc-java.html
最近的生活很JAVA兼分享GOOGLE服務在教學上的應用
http://terry55wu.blogspot.com/2010/05/javagoogle.html
文化大學推廣部JAVA程式設計第 2 次上課
http://terry55wu.blogspot.com/2010/05/java-2.html
文化大學推廣部JAVA程式設計第 3 次上課
http://terry55wu.blogspot.com/2010/05/java-3.html
文化大學推廣部JAVA程式設計第 4 次上課
http://terry55wu.blogspot.com/2010/05/java-4.html
文化大學推廣部JAVA程式設計第 5 次上課
http://terry55wu.blogspot.com/2010/05/java-5.html
Java、VisualBasic、Visual C++有什麼不一樣呢?
http://terry55wu.blogspot.com/2009/03/javavisualbasicvisual-c.html
程式語言排行榜,C語言居冠,JAVA次之
http://terry55wu.blogspot.com/2010/05/cjava.html
Android程式開發證照教學懶人包
http://terry55wu.blogspot.com/p/android.html
(吳老師提供), AWT類別, JAVA, JAVA工程師, TQC, 吳老師, 線上教學, 雲端計算, 電腦證照