程式設計攏看無

以太坊智能合約佈署位置預測

記得好像是8/5吧,就是那天開始學習智能合約後幾天,我朋友私下幫我報名了堂課,是有關於以太坊solidity智能合約撰寫實作課程,原本沒意願,我學設計的程式壓根不行啊!

後來發現那堂課,好像是一堂4千多元,我想哇靠!這麼貴,怎好勉為其難去上了。上課期間,的確,這麼新的東西是讓大家頭昏腦脹,但老師還是很認真的教導大家,解釋觀念給大家聽。聽到一半提到智能合約會在以太坊某一地方生成,那就是所謂合約地址,大家若要訪位就直接輸入那地址就對了。

我便舉手問老師:「請問部屬智能合約的地址可以指定嗎?」老師回答:「當然不行,它是隨機產生的,若可以直定的話變成我們可以任意佔領別人的地址,萬一是惡意的合約不就被侵佔了?」

我後來回家思考,以太坊是由 Vitalik Buterin創造一開源的具有智能合約功能的公共區塊鏈平台,並透過其專屬數位貨幣Ether提供去中心化的以太虛擬機(Ethereum Virtual Machine)來幫這些合約處理。

想到這,我就覺得,這應該是電腦計算科學範疇吧?也就是所謂數學,這應該不可能預測不出,便去下載了以太坊黃皮書技術文件來看…

好,我後悔了,真的很難看,我當初高中考大學數學他媽還底標欸,我在想什麼QQ

過了幾天無聊上網到處晃,看到了Anderson Chen發表的【Ethereum 智能合約開發筆記】深入智能合約 ABI,對於智能合約基礎教學,Anderson寫的非常詳細且好懂,若想入門的人可以多參考。

其中Anderson在文中提到:

部署智能合約,實際上是把 bytecode 儲存在鏈上(透過一個 transaction),並取得一個專屬這個合約的地址

什麼!?我又馬上打開那么壽難看的黃皮書看,

你要問我看了什麼嗎?我只能回答你,我也不知道我看了尛,我數學底標抱歉,現在要回答sin、cos、tan,後面沒辦法了…後來不死心我繼續看…


The address of the new account is defined as being the rightmost 160 bits of the Keccak hash of the RLP encoding of the structure containing only the sender and thenonce. Thus we de ne the resultant address for the new account a:

好像接近我要的,我開又查了一堆,可惜大學幾乎都在打工又跑海鷗社,我成績也是爛到炸,托益 學校畢業門檻450,還好當天有燒香拜拜真的450,要不我還真的延畢!但也因為面對那麼多英文,還一堆看不懂的公式,想著,算了,賊船都上了,就硬著頭皮理解吧,

最後,我也不知道我在寫什麼,是Java?Javascript?C++?阿哉,我都看前面怎麼寫,就憑感覺亂寫,改善推出這個公式為(後來網友告訴我我用的是Javascript):

https://ropsten.etherscan.io/tx/0x982d62c917a57c1b1c24306a6594408fa4a5902a68f5a73fadcc704a506efa34

興奮之餘馬上來試試看!發佈於Ropsten測試網路,這次是我第43次主動發出交易行為(nonce=43)在發射合約前,先故意打幾個ETH好啦!再來算算會到哪個地址呢?
PS.nonce記得要換成16進位制,可用這網站轉換

我預計在44步先發射ETH到預測位址,而在第45步時(nonce=0x2D)佈署地址,我將會打到0x508a6bde623c0d2e1cfef6151f04c569d77203bd這個地址,我先行打了4.3ETH過去。

https://ropsten.etherscan.io/tx/0xc049db2eb65a424dbe972649972d8c5de3b95ff609cbc52a212dcef907e2cffb

沒想到這樣胡搞瞎搞還真的寫出來QQ
地址的確按照預測的打到 0x508a6bde623c0d2e1cfef6151f04c569d77203bd
而先前打的4.3ETH也乖乖地在那。

總之雖然沒學過程式,但我想以太坊就像是沒有範圍地礦架,也許敲起鍵盤試試看,大家都能打出amazing的智能合約呢。

References

大撒幣-第一次玩智能合約就上手
ethereum-智能合約開發筆記-深入智能合約
Solidity in Depth
www.ethereum.org

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *