Wintermute 損失兩千萬 OP 代幣與失而復得
最近較常關注一些以太坊 L2 的發展,包含 Optimism 發行 OP 代幣等新聞,而大約一個月前發生一件很神奇的事情,我也不講過程了那並非本篇的主題,有興趣可以再看看當時的
新聞以及後續大神們的解釋。
往下拉點開「Click to see More」並且將 Input Data 那串亂碼下方的 View Input As 從 Default 切換成 UTF-8,就會看到有句子浮現了!大意是拿走代幣的攻擊者發了一百萬顆 OP 代幣與訊息,請 Vitalik 幫忙驗證地址,他後續會再歸還一千八百萬顆 OP 代幣 (總共一千九百萬顆) 給 Wintermute。
這時候我才想到,對耶! 以往我們在做轉帳或是跟智能合約互動的時候,一切看起來就這麼合理的這樣過去了,但是每筆交易的後面都可以放一些轉換成 Binary data 形式的字串,這樣不就可以在區塊鏈上面聊天了嗎!(很貴的聊天室?!)
電腦也能讀懂文字?Binary data 是甚麼?
你曾經想過電腦如何認出我們撰寫的中文、英文與符號嗎?
事實上電腦只認識0或1無法理解人類的語言,若需要讓電腦識別這些文字符號,就需要做一個轉換,將這些內容轉換為一種二進位的數據做儲存,這個數據就稱為 Binary data。
這個轉換也很好理解,人們定義了一張
很大的表格規定哪個數字代表甚麼符號,以比較常見又很簡單的 ASCII Code 來看的話,A 可以被轉換為 65、B 是 66、a 是 97、b 是 98…,轉換成二進位的 0 1 就是 A = 1000001、B = 1000010 以此類推。
由於區塊鏈上的這些雜湊函數都是用十六進位比較多,像我們的錢包地址也是一種十六進位的值 (只會出現0~F的值),所以假設要送出 “Hello world” 給對方,依照 ASCII code 的對照表,我們可以得到一組十六進位「0x48656c6c6f20776f726c64」。
在以太坊上傳送文字訊息
以太坊採用的編碼由 ASCII Code 演變出來的 UTF-8,所以英文大小寫與基本的符號都與 ASCII 編碼相容,不過 UTF-8 能儲存的位數更多,世界上大部分不同語言的文字都可以查到對應的編碼。
在瀏覽器上使用 Metamask 就可以做到文字傳遞,但我們要先把16進位資料打開,點選「設定」→「進階」→「開啟顯示16進位資料」,就完成初始設定了。
接著我們需要先將要輸入的值轉換為 UTF-8 對應的十六進位值,在交易的時候發送這一段內容,對方就可以透過這組十六進位的 Input data 轉換回人類的語言與符號。
除了英文以外,UTF-8 也支援中文字,所以只要上網找找「String to UTF-8」的關鍵字,應該可以找到一些可直接使用的線上轉換器。
再來就是正常執行一筆交易,這筆交易的金額可以設定成 0,並且將要傳輸的文字轉換為 UTF-8 後,前面加入 0x 填入「16進位資料」中。
這裡的例子我是打算填「hello world!」,經過轉碼後是「68656c6c6f20776f726c6421」,前面加 0x 變成「0x68656c6c6f20776f726c6421」。
(底下的示意圖少打了一個6,傳輸前有更正過但忘記重新截圖了,懶惰的我決定直接延用它哈哈)
傳送以後要等一下才會上鏈,到你使用的區塊鏈對應的瀏覽器上查詢你的錢包地址,以太坊就是etherscan、Polygon 就是 polygonscan、測試網就是對應 Testnet 的 scan。
找到剛剛的交易紀錄後,往下拉點開「Click to see More」並且將 Input Data 那串亂碼下方的 View Input As 從 Default 切換成 UTF-8,就會看到剛剛傳送的字串「hello world!」了哦!
於是這樣就可以把區塊鏈當成昂貴的聊天室了,但我想一般人正常應該不會想這樣用…
目前想到可能的用途大概是希望傳遞一些公開又不希望被隨意竄改的內文… 例如候選人的政見發佈在區塊鏈上,大家眼見為憑如果跳票的話就會在區塊鏈上成為永久的笑話。
或是可以利用它來驗證錢包地址是不是某個人的?很多人都說自己是中本聰,但其實要證明他是不是本人很簡單,請他發送甚麼鏈上訊息到某個錢包地址就可以證明了。
如果你們看完關於區塊鏈聊天室有什麼其他想到的應用場景,歡迎在底下留言與我討論。
另外我在思考區塊鏈聊天室的過程突然想到,其實整個區塊鏈提供的帳本與衍伸服務,應該也要算是一種雲端服務吧!!!但這好像又是另一個 issue 了。
最後,謝謝你在百忙之中願意抽空來花時間來看我的文章,如果還喜歡這些內容的話希望能獲得你的追蹤及小額贊助支持,讓我更有繼續寫下去的動力,EVM 兼容錢包地址為 0xae1dd06d57f582999a9c50b86ba913eecd7155ce。
我們下次見嚕 o((>ω< ))o~