發表文章

目前顯示的是 8月, 2018的文章

Ethereum Token - ERC20 mint 跟 burn

這篇會著重在erc20 smart contract實作mint跟burn的部分,所以需要先了解erc20喔! erc20 token在設計上可以a.預先產生,b.產生部分然後部分用挖的(mint)或是c.都用挖的。當然在應用上跟token屬性有關,例如是屬於security token或是utility token。簡單來說,像是股票可以獲利或是配息概念的算是security token,需要受各國法令監管,那utility token就比較像是點數的概念,至於細節怎麼分不是本篇重點。 mint的使用時機,例如在crowd sale時,每一筆進入crowd sale的錢,crowd sale 的contract 就會呼叫token contract去產生某個數量的token,這個動作就可以稱作mint。也有不用挖的,一開始就產生好,例如秘銀(MITH),從etherscan可以看到token contract怎麼寫的,這裡可以看到 MITH的contract 。當然你想產多少就多少,不過就看有沒有人買單 XD 回到正題,要"挖"聽起來,就覺得很複雜,但其實smart contract的本質就是記帳,所以其實就只是數字上的加減而已,下面是範例程式 function mint(address _to, uint256 _amount) public { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); } 其實就只是把 增加個人的token的數量 ,然後增 加整個contract token的總數 而已。當然,這種function需要做權限的控管,不然大家都可以自己產,token就會沒價值了。講完"挖"應該很好想像怎麼burn吧?! 就是把數量減掉就好了!(當然這也需要做權限控管) function _burn(address _who, uint256 _value) public { balances[_who] = balances[_who].sub(_value); totalSu

Ethereum Token - ERC20之外

本篇會介紹erc20之外,還有哪些正在被討論中的token標準 目前在ethereum上的token大概分兩類 - FT & NFT ,是 Fungible Token 跟 Non-Fungible Token 的縮寫,以字面上來說,就是可替代跟不可替代,聽起來很很抽象,我自己的解讀是錢跟資產(這個詞也不夠精確)。 可替代的就是錢,你的台幣100跟我的台幣100是一樣的,可以互換的,但是我房子或是車子是獨一無二的,你的房子可能跟我的是等價的,不過地點、樓層就是不同,因此是獨一無二的。所以可以想成錢就是FT,而房子就是NFT。 FT的代表就是ERC20 ,同系列的有 ERC223 、 ERC621 、 ERC777 、 ERC827 ,都是想補足ERC20不足的部分,但各有各的原因,所以都還沒成為標準。 NFT代表就是ERC721 ,著名的crypto kitty。 也有想把兩個混一起的提案,大部分都先merge到 ERC1155 這個提案做討論,最後會提一下 ERC20 主要提供三個function,分成兩種組合 - transfer   很直覺,就是直接轉token - approve 跟 transferFrom   先透過approve設定允許轉給對方多少,例如:A有100個token,A允許B動用10個、C動用10個, 但是這個時候還沒把token轉出。 如果B是惡意的合約,頂多就只能轉走A 10個token。   接著呼叫tranferFrom,把允許動用的數量轉出,以上面例子,就是B會把允許的10個轉走 其他細節可以參考 ERC20 , Ethereum Taipei Meetup文章 有詳細介紹 ERC223 2017-03-05 ERC20 提供的是token交易最基本的介面,在一般帳號之間轉換,是沒什麼問題。但是如果接受端是合約,而且合約沒有處理token的功能,這些token就永遠提不出來了,ERC223就是想解決這個問題。 ERC223提出,若接受端是合約,就必須支援tokenFallback這個function,如果不支援,就取消交易。聽起來滿理想的,不過在細節規範的部分有瑕疵,我直接引用Ethereum Taipei Meetup文章中的

Ethereum Casper - fork choice rule 之GHOST 與 RPJ

圖片
UPDATE :  文中的RPJ在8/16之後被改為 IMD (Immediate message driven) 「2018.08.16: I am from now on going to use “immediate message driven GHOST” to refer to what I previously referred to as “recursive proximity to justification” or “RPJ”.」 本篇在介紹Casper FFG POS鏈,鏈分叉的解決方法 在POW的世界中,就是比挖礦速度來決定最長鏈,那POS勒?! 怎麼解決分叉的問題?怎麼確認哪條分叉是有效的鏈?如果有一小群attackers ,假造了一堆block,變成最長的鏈,大家就傻傻的follow嗎?! Casper FFG 一開始選用GHOST(Greedy Heaviest-Observed Sub-Tree) 作為選擇有效鏈的方式。GHOST原則上就是 選總分最高 的那條鏈當作有效鏈(在Casper FFG中,選擇最多人投票的鏈當作主鏈,而不是最長的當主鏈,所以這邊都是寫有效鏈,而不是最長鏈),下面是一個例子 最上面黃色的是最新被確認(finalized)的block,綠色的(I J)是鏈的head,每個區塊上的字母,代表簽章的人 C沒有被選擇,是因為 B 的簽章數比C多 F沒有被選擇,是因為 (G H) 的簽章數是5(G,H,I,J,M),而F只有3(F,K,L) (I J)簽章數是2,多於M(1個),所以最後選定是  (I J)  這個區塊 GHOST選定有效鏈方式大概就這樣,還滿直覺的。 前幾週,對於GHOST選鏈的方式作了一些小修改,提出新的方式叫做RPJ(Recursive Proximity to Justification)。GHOST是 票數多 的當選,而RPJ是 比最大值 ,也就是取每條分叉上的最大值,擁有最大值的那條鏈即為有效鏈。 以這個鏈為例,黃色分鏈最大值為51,綠色分鏈最大值為65,所以綠色鏈會被選為主鏈,就這樣(講完覺得有點空虛....XD)。為什麼會改用RPJ?這個方式的概念是,如果某個block被證明是合法的(justified),這隱含了這個block的