●智能合約 : 區塊2.0的產物
智能合約(Smart Contracts)最早是在1994年由Nick Szabo提出的概念,但一直到2015年,以太坊的創辦人Vitalik Buterin推出了智能合約,並運行於以太坊上,至今以太坊仍是最多人使用的智能合約區塊鏈。
●智能合約3個要素
《寫給未來社會的新帳本——區塊鏈》一書指出,智能合約必須包含3個要素:
智能合約是將雙方的協議條款,並用代碼形式在區塊鏈上運行,儲存在一個公共資料庫中,不能被更改。
智能合約中發生的交易是由區塊鏈處理的,通常以 “IF…”, “THEN…” 的邏輯語法構成,它們是在沒有第三者的情況下自動執行,只有當協議中的條件得到滿足時,交易才會發生,是完全去中心化的交易。
●智能合約的架構
●建立一個典型的 "Hello World" 的合約
(此段摘錄自 https://github.com/kairen/learning-blockchain/blob/master/ethereum/smart-contracts.md )
本節將透過建立一個典型的 "Hello World" 的合約,然後你可以建立自己的加密 token 去存送給任何你喜歡的人。一旦你掌握了,那你將透過群資募款來集資,如果成功了,將提供一個完全透明、民主的組織,將只服從它自己的公民,將永遠不會遠離它的憲法,以及受到審查與關閉。
程式價購說明如下:
Smart Sponsor
本節將說明一智能合約範例,透過建構一個合約來允許以下賬戶持有人進行互動。
我們的合約(smartSponsor):
那麼有兩件事情可能發生:
Ethereum 允許智能合約由撰寫 Solidity 語言來定義。Solidity 的合約是類似於 Java 的類別定義。成員變數的儲存採用區塊鍊交易與合約的方法,來詢問合約或改變的其狀態。作為區塊鏈的副本會分散到網路中的所有節點,任何人都可以詢問合約,以從中搜尋公開的訊息。
合約有以下幾種方法:
這個想法是使一個合約擁有約束力。他們不能拿回任何資金,除非整個合約被退還。在這種情況下,所有資料都是被公開存取的,這意味著任何人都有存取 Ethereum 區塊鏈,來查看誰建立了合約,誰是捐助者,以及誰透過存取合約程式碼本身保證了每一筆資金。
要注意很重要的一點,任何改變合約的狀態(建立、承若、退還或 drawing down)都需要在區塊鏈上建立交易,這意味著這些交易不會被儲存,要直到這些交易的區塊被開採。操作只能讀取到一個現有合約狀態(getPot 或讀取公有成員變數)都不需要進行挖礦。這是一個很重要且微妙的點:寫入操作是很慢的(因為我們要等到採礦完成)。由於這情況合約可能永遠不會被建立到區塊鍊中,因此呼叫方需要提供一些獎勵,來促進礦工去工作。這是被稱為 gas 的 Ethereum 術語,所有的寫入操作都是需要 gas 的支出來改變區塊鍊的狀態。
幸運的是我們不需要購買真正的乙太幣,以及參與 Ethereum 網路。我們可以使用相同的軟體,但要配置它運行一個本地測試區塊鏈,以及產生自己的假乙太幣。
以下為一個 Solidity 語言的智能合約範例:
contract smartSponsor {
address public owner;
address public benefactor;
bool public refunded;
bool public complete;
uint public numPledges;
struct Pledge {
uint amount;
address eth_address;
bytes32 message;
}
mapping(uint => Pledge) public pledges;
// constructor
function smartSponsor(address _benefactor) {
owner = msg.sender;
numPledges = 0;
refunded = false;
complete = false;
benefactor = _benefactor;
}
// add a new pledge
function pledge(bytes32 _message) payable {
if (msg.value == 0 || complete || refunded) throw;
pledges[numPledges] = Pledge(msg.value, msg.sender, _message);
numPledges++;
}
function getPot() constant returns (uint) {
return this.balance;
}
// refund the backers
function refund() {
if (msg.sender != owner || complete || refunded) throw;
for (uint i = 0; i < numPledges; ++i) {
pledges[i].eth_address.send(pledges[i].amount);
}
refunded = true;
complete = true;
}
// send funds to the contract benefactor
function drawdown() {
if (msg.sender != owner || complete || refunded) throw;
benefactor.send(this.balance);
complete = true;
}
}
【TIPS】零基礎邁向區塊鏈工程師:Solidity 智能合約
https://hahow.in/courses/5b3cdd6ed03140001eebeadc
●智能合約實際應用
智能合約在區塊鏈技術中有許多實際應用,以下是一些常見的舉例:
1. 去中心化金融(DeFi):DeFi是目前智能合約最流行的應用之一。它包括去中心化借貸、交易、擔保和資產管理等金融服務。智能合約在DeFi平台上用於自動化借貸、利息支付、抵押、流動性提供和去中心化交易,而無需傳統金融機構的參與。
2. NFT 市場:智能合約可用於管理 NFT 的創建、銷售、轉讓和驗證。NFT市場允許藝術家、音樂家、遊戲開發者等創作者創建和出售其作品,智能合約確保了資產的不可變性和擁有權。
3. 基於區塊鏈的供應鏈管理:智能合約可以用於跟蹤和管理商品供應鏈中的物品,從生產到分發的每一個步驟都可以透明地紀錄在區塊鏈上,以提高可追蹤性和防止偽造。
4. 投票和治理:智能合約可以用於組織內部或協作平臺上的民主決策和投票。通過智能合約,投票可以變得透明、不可篡改且去中心化,用戶可以參與項目的治理。
5. 身分證明:智能合約可用於建立不可篡改的身份證明系統,這有助於解決身份盜竊和詐騙等問題。
6. 遊戲和虛擬世界:智能合約在虛擬遊戲中用於虛擬貨幣的管理、物品的交易和遊戲規則的執行。它們也支持虛擬世界中的擁有權。
7. 過貸款,讓貸款加速了貸款速度也減少了人為失誤。
8. 投票:若以相對多數投票制為例,將智能合約所有條件設定好後,票數較多的提案將通過,且也能夠避免釣人為判斷的失誤,且資料難以竄改。