[入門篇八] 幣圈一定要會的技能第二彈! 一文直接讀懂智能合約!

2023/08/16閱讀時間約 13 分鐘

前言

相信到了這邊大家或多或少都有聽過智能合約吧! 這篇來介紹智能合約是什麼,最重要的是我們平常要怎麼看合約的內容! 一次教你怎麼看什麼是智能合約和一般的NFT合約怎麼看!

什麼是智能合約

智能合約 (Smart Contracts) 作為區塊鏈技術的核心應用之一,具有重要的價值和影響。合約顧名思義就是約定了雙方之間的權利義務以及責任,跟傳統合約不同的地方在於,智能合約透過程式代碼組成,他定義了這份合約透過怎樣的邏輯執行雙方的權利義務以及責任,並且當條件產生時可以自動執行

Ex: 假設今天有一個合約可以買NFT,裡面可能包刮了 1. 誰要買 2.誰可以買 3.要付多少錢 3.要買哪個NFT 4.誰要賣你 5.賣光了沒…, etc. 等邏輯來確保你想執行買NFT這個動作,從買賣雙方的身分確認、產品確認到交付確認,屬於交易這個動作的都萬無一失,因此只要執行合約就一定可以買到NFT!

智能合約example

智能合約example

不過要注意的是,並不是寫上去合約的就是對的! 比如雖然合約名稱叫做買NFT,但我可以更改裡面的執行邏輯,讓你的NFT不能賣甚至你付錢後我不給你NFT,這些都是發生過的! 所以為什麼我們要學會讀智能合約? 就跟你在現實簽合約一樣,你會不看內容就簽名嗎?

智能合約的特性

智能合約是部屬在區塊鏈上的應用,同樣的他也具有區塊鏈中的特性,甚至可以加上一個自動執行!

1.自動執行

智能合約能夠根據預設的條件和規則自動執行相應的操作,無需人為干預。這可以節省時間和人力成本,同時減少人為錯誤的可能性。

2.不可篡改性

一旦智能合約被創建和部署,它的內容和規則是不可修改的。這種不可篡改性確保了合約的執行是可靠和可信的。

3.可程式性

智能合約的內容是可以編寫程式碼的,可以根據具體需求進行自定義和定制。這使得合約能夠實現各種不同的邏輯和功能。

4.透明性

智能合約的執行過程和結果是公開可查的,任何人都可以查看合約的交易紀錄和狀態。這增加了合約操作的透明性和可驗證性。

因此在幣圈裏面,我們常常說Code is Law,你的程式碼定義了你的項目的一切規範,大家都要按照遊戲規則走,這個約束力甚至比傳統法律還強,正常情況下沒有人能夠違規,實現真正的法律之前人人平等!

為什麼要用智能合約

大家心裡可能會想說,既然都是程式在執行,那和現在大部分的網路商店或是網路銀行有什麼不一樣嗎? 老實說就使用者體驗來說可能無感,但背後的意義卻差很多!我們可以根據智能合約的特性用例子來說明:

1. 自動執行

比如你在外面將資金給別人代投資,你可以透過智能合約自動將這些資金投資到特定的金融產品,如股票、債券或加密貨幣。該合約的自動執行特性可以確保投資者的資金按照預定的投資策略進行操作,一個是確保資金的流向,另一個也確保策略的執行。

2.不可篡改性

一旦智能合約被部署和執行,其內容是不可修改的,所以我們可以用智能合約進行抽獎活動,合約的規則和獎勵都是不可更改的,確保抽獎的公正性和執行性,你甚至不需要知道這個人是誰或是擔心他是否真的會發獎品。

3. 可程式性

智能合約的程式化特性意味著它們可以執行多種複雜的邏輯。舉例來說,智能合約可以用於自動化的供應鏈管理,根據訂單和庫存情況自動觸發製造和運輸流程,提高供應鏈的效率,更重要的是供應鏈之間不需要額外的溝通系統和溝通成本。

4. 透明性

智能合約的執行過程和結果是公開可查的,任何人都可以查看合約的交易紀錄和狀態。比如剛剛的投資範例,你可以知道所有金流的流向,確保不是被挪用到其他地方。

5.去中心化

去中心化可能是智能合約最有優勢的地方,我們知道智能合約運行在區塊鏈上的分散節點上,不需要中間人的參與,因此區塊鏈透過密碼學和獎勵機制解決了信任的問題,大家可能覺得合約就是1對1的事情,但如果這份合約的真實性以及正確性是被驗證過的,那他就可以被當作憑證或依據來使用。

比如當我們將我們的資產代幣化,所有拿到這些代幣的人或組織不需花費額外成本進行真實性驗證,他幾乎可以在任何價值交換的交易中被及時執行,這樣的速度以及可使用的場景絕對是傳統金融做不到的,這就是去中心化的的好處。

智能合約的缺點

儘管智能合約具有許多優勢,但它們也存在一些缺點和挑戰,比如:

1. 不可修改性帶來風險

一旦智能合約被部署,其內容和規則是不可修改的。這可能在合約中存在錯誤或漏洞時變成風險,因為無法輕易更正。這需要在設計和測試階段進行仔細檢查,以避免不可預料的問題。

2. 隱私和安全問題

智能合約涉及用戶敏感數據或金融資產,因此可能受到隱私和安全問題的威脅。如果智能合約的安全性不足,可能會被利用漏洞進行攻擊或盜竊。

3.執行效率限制

智能合約的執行就跟我們一般交易一樣,他是需要消耗區塊鏈網絡的資源的,不可避免的會受到區塊鏈自身設計的限制,因此在某些情況下可能導致交易速度較慢,要多付Gas Fee或等待。

4. 撰寫錯誤風險

智能合約程式碼中的編寫錯誤可能導致嚴重的後果,包括資產損失或合約的執行失敗。因此程式碼審查和測試變得至關重要,我就看過有人賣光NFT結果錢提不出來…

5. 缺乏法律界定

雖然我們常說Code is Law,但當發生糾紛時,智能合約在法律上的地位和法律責任仍然不明確。比如我們可以看這個新聞:借341枚比特幣「不用還」!中國法官:BTC不具貨幣性質,風險自負! 幫他QQ

6. 智能合約的學習曲線

我們知道智能合約是由代碼組成,對於不會寫Code的人門檻實在是高,對於一般用戶來說可能具有較大的學習曲線,也可能限制了智能合約的普及和應用,所以我們接下來就來帶你看看智能合約到底要怎麼看!

智能合約實戰! Etherscan!

講了這麼多,我們來實際看看智能合約長什麼樣子吧! 這邊用以太坊來做範例,我們通常都會使用etherscan官網來查看,在這個網站我們可以輸入合約或錢包的地址來看裡面的內容,你也可以輸入交易的hash值來看這筆交易的資訊。etherscan也提供了豐富的區塊資訊,包含當下的區塊狀況以及當下的交易狀況。

source: https://etherscan.io/

source: https://etherscan.io/

這邊我們用知名NFT項目 Bored Ape Yacht Club的合約來做範例,在上面輸入這個NFT的合約地址: 0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D 即可得到下面的資訊。可以看到Overview裡面寫在這個合約的資產,More info裡面有創建合約的資訊,而下面就是所有跟這個合約互動的資訊,包含進行的交易、類別、分析等,我們要找的合約就在Contract裡面!

etherscan 可以幫助我們讀取和執行合約功能,他其實是一個區塊鏈瀏覽器,透過可視化的UI/UX展示我們區塊鏈資訊以及進行合約互動,替我們在底層區塊鏈以及實際使用中提供一個橋樑介面。

source: etherscan

source: etherscan

Transaction

一般來說Transaction紀錄了所有跟這個合約有關的交易,Transaction就是交易的意思,而Transaction hash則是這筆交易的哈希值(區塊鏈自己看的東東)。

Method:指的是在交易中執行的具體操作,例如購買資產、轉帳、調用智能合約的函數等。

Block:每筆交易都被包含在一個區塊中,區塊是區塊鏈上的基本單位,包含多筆交易。每個區塊都有一個唯一的區塊編號,按照時間順序進行排列。

Age:指的是從交易創建到當前的時間間隔,通常以區塊的數量或時間單位(如秒、分鐘、小時)來表示。

From:表示交易的發送者或發起方的地址,即交易發出者的區塊鏈地址。

To:表示交易的接收者或接收方的地址,即交易接收者的區塊鏈地址。

Value:指的是在交易中轉移的加密貨幣數量或資產價值。

Txn Fee:交易在被記錄在區塊鏈上時需要支付一定的手續費。

source: etherscan

source: etherscan

當我們點進去他的Transaction hash之後就會有更細節的資訊可以看,像這個就是允許某個合約使用他的NFT的功能。

source: etherscan

source: etherscan

而當我們選擇Contract之後,一般來說我們會看到三個小Block:

1.Code

程式的原始碼,這邊就會顯示這個合約的程式。一般來說程式碼會包含幾個部份,像NFT或ERC20這些通用的規範通常會引用一些公開的程式碼,比如大家幾乎都會使用Openzepplin的standard code。然後基於這些Starndard code,根據自己的需求再微調裡面的function。

用NFT來舉例,正常來說Code裡面會有一個Contract 就叫ERC721,這個Contract就是一般我們使用的standard code,定義了正常NFT該有的功能。這時候項目方通常會再寫一個新的Contract在下面比如這邊就叫BoredApeYachtClub。這個新的Function就會定義一些standard code沒有的功能或是改寫standand code已有的功能。

要注意的是如果standand code和自己寫的code裡面有一樣的function name,那合約會執行自己寫的code那份喔!

source: etherscan

source: etherscan

BAYC Contract

BAYC Contract

2.Read Contract

etherscan會把可讀取的function抓出來讓我們可以透過這些functions讀取合約資訊,不需要Gas Fee,大家可以去按按看或輸入獲得資訊!

source: etherscan

source: etherscan

3.Write Contract

etherscan會把可執行的合約functions抓出來,通常涉及到資金或資產的權限和轉移的都在這邊,或是要將參數寫進合約,這些動作由於涉及狀態的改變,所以都是需要Gas Fee的! 可以點但不要approve東西!

source: etherscan

source: etherscan

那為什麼我們要來etherscan看智能合約呢? 很大的原因就是要確認這個功能的正確性,管你在外面說得天花亂墜,我只相信合約,就跟講得有多愛你沒用,簽了字才是真愛。透過合約我們才能看到實際上的數字以及規範,才能避免被話術欺騙。

智能合約實戰! NFT篇

雖然我們還沒介紹NFT,但可以先來了解一下NFT的合約會有什麼東東! NFT全名叫Non-Fungible-Token,實際上就是一種代幣。

NFT的合約因為要進行買賣,所以裡面通常會規範這個NFT的數量、擁有者、授權方法、轉移方法、鑄造方法、燒毀方法,其他可能包括讀取合約數據的function,contract owner轉移的function等。

跟我們比較有關係的function通常有NFT的數量價格授權方法鑄造方法以及轉移方法,看不懂程式碼沒關係,我們可以簡單的了解一下大概的內容!

1.NFT數量和價格

通常這兩個資訊我們可以從兩個地方看到

  • 合約本身一般合約的內容就看到,比如下面的 apePrice和 MAX_APES,如果沒有寫清楚數量的話,通常就是會用function將數字寫進去。因此要注意這些參數是否可變以及如何改變!
BAYC Contract

BAYC Contract

  • Read Contract剛剛有說到這些參數是有可能被更改的,但code上面不會顯示被更改的最新數字,所以我們可以透過Read Function來查看這些數字的最終數值。
source: etherscan

source: etherscan

2.授權方式

  • 授權使用一個NFT

在NFT標準中,我們會使用 approve function來授權某個地址(operator)可以管理你的一個特定 ERC721 代幣(NFT)。這種授權的作用是讓指定的地址有權力把你的某個代幣轉移給其他人,即使這個操作不是由代幣的實際擁有者直接執行的。

BAYC Contract

BAYC Contract

  • 授權使用全部NFT

既然授權一個那當然有授權全部的! 目的是可以讓第三方管理在這個系列你擁有的所有NFT。

BAYC Contract

BAYC Contract

3.轉移方式

在上一步我們已經授權某個地址或是第三方擁有轉移我NFT的權力,那代表對方可能直接轉走我的NFT嗎? 答案是不對! 因為通常授權功能是授權 轉移功能才是轉移! (但如果有人硬是要寫在一起也沒辦法)

  • 轉移

簡單的說轉移功能會檢查 (下面的那個require):

1.呼叫者是不是 NFT 的擁有者

2.呼叫者是否被授權可以轉移該 NFT

3.呼叫者是否被NFT 擁有者授權來管理該擁有者的所有 NFT。

因此一般NFT的合約如果有做這樣的檢查,即便你approve NFT給別人,他也是拿不走你的NFT的! 但如果他沒有做這個檢查的話! 你就要小心了顆顆。

BAYC Contract

BAYC Contract

BAYC Contract

BAYC Contract

4.鑄造方法

鑄造 (Mint)就是把NFT鑄造出來,因為它是一種幣的格式,所以我們說鑄造。而這邊要注意的就是要看是否真的有把NFT給你! 或是它設定了一些額外的requrie來讓你拿不到NFT! 但通常這步比較不會有問題,因為如果你當下沒拿到NFT大家就馬上知道你有問題了。

  • Mint
BAYC Contract

BAYC Contract

5.其他注意事項

要注意我們這邊提到的都是正規NFT 合約會出現的功能和寫法,實際上如果真的有人想透過合約詐騙你的話,它會在裡面寫一些特別的條件要求,那如果你真的看不懂程式碼也不用擔心,這邊提供你幾個秘訣來防範:

  • 不參與來路不明的項目
  • 永遠使用官方的連結
  • 永遠確認消息的正確性,不論是否為官方
  • 不要Fomo,不要急,慢慢來比較快

如果你還是很擔心的話,不要怕! 現在也有很多第三方檢測,只要到上面輸入合約地址就可以檢測是否有問題,當然不限NFT合約,其他合約也是類似看法!

GoPlus: 網站

GoPlus: Twitter


0xJoey
0xJoey
工程師也是區塊鏈愛好者,普及區塊鏈知識以及項目深度研究,提供大家最新的💎Web3教學 ⚙ 新科技分析實戰 🧘個人成長。期待能在這個領域跟大家一起成長!
留言0
查看全部
發表第一個留言支持創作者!
從 Google News 追蹤更多 vocus 的最新精選內容